From 645df3d193e9c46b2fc6aa7b59d7bdd542de69b5 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 10 Oct 2026 02:28:14 +0000 Subject: [PATCH 1/4] feat(verify): bind the in parameters of a constraint or requirement at check time VerifyConstraint and VerifyRequirement take positional and named arguments, as RunAnalysis binds a case's inputs, under the verification_arguments capability. The runtime binds them in declaration order or by name and leaves the verdict undecided on an unknown name, an arity overrun, a parameter with neither an argument, a default nor a same-named value on the checked object, or a value of the wrong type; holds and satisfiable refuse arguments. The CLI and REPL accept the invocation grammar -analysis uses (-requirement 'P::R(limit = 5) P::t', %constraint C(3.0) t), and every client binds through the same option. Co-Authored-By: jason.han --- api/proto/sysml.pb.go | 610 ++++--- api/proto/sysml.proto | 12 + changes/unreleased/verify-arguments.added.md | 1 + .../org/openmbee/opensysml/Capabilities.java | 3 + .../java/org/openmbee/opensysml/Model.java | 21 +- .../org/openmbee/opensysml/VerifyOptions.java | 87 +- .../opensysml/proto/ParseFileRequest.java | 14 +- .../proto/ParseFileRequestOrBuilder.java | 4 +- .../org/openmbee/opensysml/proto/Sysml.java | 1483 +++++++++-------- .../proto/VerifyConstraintRequest.java | 869 ++++++++++ .../VerifyConstraintRequestOrBuilder.java | 113 ++ .../proto/VerifyRequirementRequest.java | 798 +++++++++ .../VerifyRequirementRequestOrBuilder.java | 88 + .../opensysml/ApiIntegrationTest.java | 62 + client/julia/OpenSysML/src/OpenSysML.jl | 2 +- client/julia/OpenSysML/src/capabilities.jl | 1 + client/julia/OpenSysML/src/verification.jl | 39 +- .../julia/OpenSysML/test/extended_client.jl | 53 + .../matlab/+opensysml/+internal/verifyOne.m | 15 +- client/matlab/tests/test_surface_live.m | 21 + client/node/src/core/capabilities.ts | 2 + client/node/src/core/connection.ts | 53 +- client/node/src/core/index.ts | 3 + client/node/src/core/model.ts | 6 +- client/node/src/generated/sysml_pb.ts | 33 +- client/node/test/verify.test.ts | 52 + client/opensysml/types.go | 1 + client/opensysml/verify.go | 102 ++ .../verify_arguments_internal_test.go | 91 + client/python/opensysml/capabilities.py | 1 + client/python/opensysml/connection.py | 39 +- client/python/opensysml/model.py | 16 +- client/python/opensysml/proto/sysml_pb2.py | 606 +++---- client/python/opensysml/proto/sysml_pb2.pyi | 30 +- .../python/opensysml/proto/sysml_pb2_grpc.py | 2 +- .../tests/test_verification_arguments.py | 168 ++ client/rust/conformance/src/main.rs | 1 + .../rust/conformance/sysml.descriptor.binpb | Bin 165647 -> 166866 bytes client/rust/opensysml/src/capabilities.rs | 2 + client/rust/opensysml/src/operations.rs | 31 +- .../rust/opensysml/src/proto/sysml/sysml.rs | 20 +- cmd/sysml/check_test.go | 39 + cmd/sysml/usage.go | 8 +- docs/clients/python/verification.md | 17 + docs/reference/api.md | 8 + docs/reference/cli.md | 4 +- docs/reference/julia-api.md | 6 +- docs/reference/repl-commands.md | 4 +- docs/reference/wire-contract.md | 16 + internal/exec/runtime/check_args.go | 147 ++ internal/exec/runtime/check_args_test.go | 88 + internal/exec/runtime/context.go | 56 +- internal/frontend/grpc/analysis.go | 21 +- .../grpc/robustness_verify_arguments_test.go | 32 + internal/frontend/grpc/service.go | 6 + internal/frontend/grpc/verify.go | 68 +- .../frontend/grpc/verify_arguments_test.go | 126 ++ internal/frontend/repl/check_args_test.go | 54 + internal/frontend/repl/meta.go | 20 +- internal/frontend/repl/query.go | 92 +- packaging/man/man1/sysml.1 | 10 +- 61 files changed, 4966 insertions(+), 1411 deletions(-) create mode 100644 changes/unreleased/verify-arguments.added.md create mode 100644 client/opensysml/verify_arguments_internal_test.go create mode 100644 client/python/tests/test_verification_arguments.py create mode 100644 internal/exec/runtime/check_args.go create mode 100644 internal/exec/runtime/check_args_test.go create mode 100644 internal/frontend/grpc/robustness_verify_arguments_test.go create mode 100644 internal/frontend/grpc/verify_arguments_test.go create mode 100644 internal/frontend/repl/check_args_test.go diff --git a/api/proto/sysml.pb.go b/api/proto/sysml.pb.go index 652a24e671..83f8c64f36 100644 --- a/api/proto/sysml.pb.go +++ b/api/proto/sysml.pb.go @@ -671,9 +671,16 @@ type VerifyConstraintRequest struct { // assignment satisfies it. Anything else is INVALID_ARGUMENT. The two // solver questions are reported as the "verification_questions" capability // and need an SMT solver. - Question string `protobuf:"bytes,5,opt,name=question,proto3" json:"question,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Question string `protobuf:"bytes,5,opt,name=question,proto3" json:"question,omitempty"` + // Values for the constraint's `in` parameters, in declaration order, as + // RunAnalysisRequest.arguments binds a case's; an argument the constraint + // does not take is INVALID_ARGUMENT, as is a parameter left without an + // argument or default. Reported as the "verification_arguments" capability. + Arguments []*Value `protobuf:"bytes,6,rep,name=arguments,proto3" json:"arguments,omitempty"` + // Values for `in` parameters by name; see arguments. + NamedArguments map[string]*Value `protobuf:"bytes,7,rep,name=named_arguments,json=namedArguments,proto3" json:"named_arguments,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VerifyConstraintRequest) Reset() { @@ -741,6 +748,20 @@ func (x *VerifyConstraintRequest) GetQuestion() string { return "" } +func (x *VerifyConstraintRequest) GetArguments() []*Value { + if x != nil { + return x.Arguments + } + return nil +} + +func (x *VerifyConstraintRequest) GetNamedArguments() map[string]*Value { + if x != nil { + return x.NamedArguments + } + return nil +} + // VerifyConstraintResponse carries the verdict; its engine, strength and bounds // are on the verdict. type VerifyConstraintResponse struct { @@ -828,9 +849,14 @@ type VerifyRequirementRequest struct { // The engine the question is put to; see VerifyConstraintRequest.engine. Engine string `protobuf:"bytes,4,opt,name=engine,proto3" json:"engine,omitempty"` // The question asked; see VerifyConstraintRequest.question. - Question string `protobuf:"bytes,5,opt,name=question,proto3" json:"question,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Question string `protobuf:"bytes,5,opt,name=question,proto3" json:"question,omitempty"` + // Values for the requirement's `in` parameters, positional and by name; see + // VerifyConstraintRequest.arguments. Reported as the "verification_arguments" + // capability. + Arguments []*Value `protobuf:"bytes,6,rep,name=arguments,proto3" json:"arguments,omitempty"` + NamedArguments map[string]*Value `protobuf:"bytes,7,rep,name=named_arguments,json=namedArguments,proto3" json:"named_arguments,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VerifyRequirementRequest) Reset() { @@ -898,6 +924,20 @@ func (x *VerifyRequirementRequest) GetQuestion() string { return "" } +func (x *VerifyRequirementRequest) GetArguments() []*Value { + if x != nil { + return x.Arguments + } + return nil +} + +func (x *VerifyRequirementRequest) GetNamedArguments() map[string]*Value { + if x != nil { + return x.NamedArguments + } + return nil +} + // VerificationVerdict is what the body of a verification case answered when it // ran: the VerdictKind its return bound, which is a separate answer from whether // a requirement is satisfied. Reported as the "verification_verdicts" capability. @@ -12621,26 +12661,36 @@ const file_sysml_proto_rawDesc = "" + "\x05Bound\x12\x12\n" + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + "\x05limit\x18\x02 \x01(\x03R\x05limit\x12\x18\n" + - "\areached\x18\x03 \x01(\bR\areached\"\xb5\x01\n" + + "\areached\x18\x03 \x01(\bR\areached\"\x8f\x03\n" + "\x17VerifyConstraintRequest\x12\x1d\n" + "\n" + "model_hash\x18\x01 \x01(\tR\tmodelHash\x12\x1b\n" + "\tsymbol_id\x18\x02 \x01(\tR\bsymbolId\x12*\n" + "\x11subject_symbol_id\x18\x03 \x01(\tR\x0fsubjectSymbolId\x12\x16\n" + "\x06engine\x18\x04 \x01(\tR\x06engine\x12\x1a\n" + - "\bquestion\x18\x05 \x01(\tR\bquestion\"\xbe\x01\n" + + "\bquestion\x18\x05 \x01(\tR\bquestion\x12*\n" + + "\targuments\x18\x06 \x03(\v2\f.sysml.ValueR\targuments\x12[\n" + + "\x0fnamed_arguments\x18\a \x03(\v22.sysml.VerifyConstraintRequest.NamedArgumentsEntryR\x0enamedArguments\x1aO\n" + + "\x13NamedArgumentsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\"\n" + + "\x05value\x18\x02 \x01(\v2\f.sysml.ValueR\x05value:\x028\x01\"\xbe\x01\n" + "\x18VerifyConstraintResponse\x12(\n" + "\averdict\x18\x01 \x01(\v2\x0e.sysml.VerdictR\averdict\x12-\n" + "\tinstances\x18\x02 \x03(\v2\x0f.sysml.InstanceR\tinstances\x12\x14\n" + "\x05error\x18\x03 \x01(\tR\x05error\x123\n" + - "\vdiagnostics\x18\x04 \x03(\v2\x11.sysml.DiagnosticR\vdiagnostics\"\xb6\x01\n" + + "\vdiagnostics\x18\x04 \x03(\v2\x11.sysml.DiagnosticR\vdiagnostics\"\x91\x03\n" + "\x18VerifyRequirementRequest\x12\x1d\n" + "\n" + "model_hash\x18\x01 \x01(\tR\tmodelHash\x12\x1b\n" + "\tsymbol_id\x18\x02 \x01(\tR\bsymbolId\x12*\n" + "\x11subject_symbol_id\x18\x03 \x01(\tR\x0fsubjectSymbolId\x12\x16\n" + "\x06engine\x18\x04 \x01(\tR\x06engine\x12\x1a\n" + - "\bquestion\x18\x05 \x01(\tR\bquestion\"\x9b\x01\n" + + "\bquestion\x18\x05 \x01(\tR\bquestion\x12*\n" + + "\targuments\x18\x06 \x03(\v2\f.sysml.ValueR\targuments\x12\\\n" + + "\x0fnamed_arguments\x18\a \x03(\v23.sysml.VerifyRequirementRequest.NamedArgumentsEntryR\x0enamedArguments\x1aO\n" + + "\x13NamedArgumentsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\"\n" + + "\x05value\x18\x02 \x01(\v2\f.sysml.ValueR\x05value:\x028\x01\"\x9b\x01\n" + "\x13VerificationVerdict\x12\x17\n" + "\acase_id\x18\x01 \x01(\tR\x06caseId\x12\x12\n" + "\x04kind\x18\x02 \x01(\tR\x04kind\x12\x16\n" + @@ -13655,7 +13705,7 @@ func file_sysml_proto_rawDescGZIP() []byte { } var file_sysml_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_sysml_proto_msgTypes = make([]protoimpl.MessageInfo, 147) +var file_sysml_proto_msgTypes = make([]protoimpl.MessageInfo, 149) var file_sysml_proto_goTypes = []any{ (FailureReason)(0), // 0: sysml.FailureReason (EditFailure)(0), // 1: sysml.EditFailure @@ -13798,276 +13848,284 @@ var file_sysml_proto_goTypes = []any{ (*RenderNote)(nil), // 138: sysml.RenderNote (*ExportGraphsRequest)(nil), // 139: sysml.ExportGraphsRequest (*ExportGraphsResponse)(nil), // 140: sysml.ExportGraphsResponse - nil, // 141: sysml.RunAnalysisRequest.NamedArgumentsEntry - nil, // 142: sysml.Outcome.OutputsEntry - nil, // 143: sysml.Instance.FeatureValuesEntry - nil, // 144: sysml.ExecuteActionRequest.InputsEntry - nil, // 145: sysml.ExecuteActionResponse.OutputsEntry - nil, // 146: sysml.ExecuteActionResponse.PerformerAttributesEntry - nil, // 147: sysml.ExecuteStateResponse.FinalContextEntry - nil, // 148: sysml.SymbolInfo.MetadataEntry - nil, // 149: sysml.QueryResultElement.PropertiesEntry - nil, // 150: sysml.RunSweepRequest.NamedArgumentsEntry + nil, // 141: sysml.VerifyConstraintRequest.NamedArgumentsEntry + nil, // 142: sysml.VerifyRequirementRequest.NamedArgumentsEntry + nil, // 143: sysml.RunAnalysisRequest.NamedArgumentsEntry + nil, // 144: sysml.Outcome.OutputsEntry + nil, // 145: sysml.Instance.FeatureValuesEntry + nil, // 146: sysml.ExecuteActionRequest.InputsEntry + nil, // 147: sysml.ExecuteActionResponse.OutputsEntry + nil, // 148: sysml.ExecuteActionResponse.PerformerAttributesEntry + nil, // 149: sysml.ExecuteStateResponse.FinalContextEntry + nil, // 150: sysml.SymbolInfo.MetadataEntry + nil, // 151: sysml.QueryResultElement.PropertiesEntry + nil, // 152: sysml.RunSweepRequest.NamedArgumentsEntry } var file_sysml_proto_depIdxs = []int32{ 0, // 0: sysml.Verdict.failure_reason:type_name -> sysml.FailureReason 6, // 1: sysml.Verdict.bounds:type_name -> sysml.Bound 5, // 2: sysml.Verdict.witness:type_name -> sysml.WitnessAssignment 83, // 3: sysml.WitnessAssignment.value:type_name -> sysml.Value - 4, // 4: sysml.VerifyConstraintResponse.verdict:type_name -> sysml.Verdict - 39, // 5: sysml.VerifyConstraintResponse.instances:type_name -> sysml.Instance - 100, // 6: sysml.VerifyConstraintResponse.diagnostics:type_name -> sysml.Diagnostic - 4, // 7: sysml.VerifyRequirementResponse.verdict:type_name -> sysml.Verdict - 39, // 8: sysml.VerifyRequirementResponse.instances:type_name -> sysml.Instance - 100, // 9: sysml.VerifyRequirementResponse.diagnostics:type_name -> sysml.Diagnostic - 10, // 10: sysml.VerifyRequirementResponse.verification_verdicts:type_name -> sysml.VerificationVerdict - 4, // 11: sysml.VerifySatisfactionResponse.verdicts:type_name -> sysml.Verdict - 39, // 12: sysml.VerifySatisfactionResponse.instances:type_name -> sysml.Instance - 100, // 13: sysml.VerifySatisfactionResponse.diagnostics:type_name -> sysml.Diagnostic - 0, // 14: sysml.VerifySatisfactionResponse.failure_reason:type_name -> sysml.FailureReason - 10, // 15: sysml.VerifySatisfactionResponse.verification_verdicts:type_name -> sysml.VerificationVerdict - 4, // 16: sysml.ValidateInstanceResponse.verdicts:type_name -> sysml.Verdict - 4, // 17: sysml.ValidateInstanceResponse.summary:type_name -> sysml.Verdict - 39, // 18: sysml.ValidateInstanceResponse.instances:type_name -> sysml.Instance - 100, // 19: sysml.ValidateInstanceResponse.diagnostics:type_name -> sysml.Diagnostic - 0, // 20: sysml.ValidateInstanceResponse.failure_reason:type_name -> sysml.FailureReason - 10, // 21: sysml.ValidateInstanceResponse.verification_verdicts:type_name -> sysml.VerificationVerdict - 83, // 22: sysml.EvaluateCalcRequest.arguments:type_name -> sysml.Value - 83, // 23: sysml.EvaluateCalcResponse.result:type_name -> sysml.Value - 18, // 24: sysml.EvaluateCalcResponse.outputs:type_name -> sysml.CalcOutput - 100, // 25: sysml.EvaluateCalcResponse.diagnostics:type_name -> sysml.Diagnostic - 0, // 26: sysml.EvaluateCalcResponse.failure_reason:type_name -> sysml.FailureReason - 6, // 27: sysml.EvaluateCalcResponse.bounds:type_name -> sysml.Bound - 83, // 28: sysml.CalcOutput.value:type_name -> sysml.Value - 83, // 29: sysml.CaseEvaluation.arguments:type_name -> sysml.Value - 83, // 30: sysml.CaseEvaluation.result:type_name -> sysml.Value - 83, // 31: sysml.RunAnalysisRequest.arguments:type_name -> sysml.Value - 141, // 32: sysml.RunAnalysisRequest.named_arguments:type_name -> sysml.RunAnalysisRequest.NamedArgumentsEntry - 18, // 33: sysml.RunAnalysisResponse.outputs:type_name -> sysml.CalcOutput - 4, // 34: sysml.RunAnalysisResponse.verdicts:type_name -> sysml.Verdict - 39, // 35: sysml.RunAnalysisResponse.instances:type_name -> sysml.Instance - 100, // 36: sysml.RunAnalysisResponse.diagnostics:type_name -> sysml.Diagnostic - 0, // 37: sysml.RunAnalysisResponse.failure_reason:type_name -> sysml.FailureReason - 10, // 38: sysml.RunAnalysisResponse.verification_verdicts:type_name -> sysml.VerificationVerdict - 23, // 39: sysml.RunAnalysisResponse.outcomes:type_name -> sysml.Outcome - 24, // 40: sysml.RunAnalysisResponse.exploration:type_name -> sysml.ExplorationStatus - 19, // 41: sysml.RunAnalysisResponse.evaluations:type_name -> sysml.CaseEvaluation - 6, // 42: sysml.RunAnalysisResponse.bounds:type_name -> sysml.Bound - 142, // 43: sysml.Outcome.outputs:type_name -> sysml.Outcome.OutputsEntry - 100, // 44: sysml.Outcome.diagnostics:type_name -> sysml.Diagnostic - 22, // 45: sysml.Outcome.probability_range:type_name -> sysml.ProbabilityRange - 26, // 46: sysml.ListEnginesResponse.engines:type_name -> sysml.EngineInfo - 29, // 47: sysml.ParseSourcesRequest.documents:type_name -> sysml.SourceDocument - 78, // 48: sysml.ParseSourcesResponse.roots:type_name -> sysml.SymbolInfo - 100, // 49: sysml.ParseSourcesResponse.diagnostics:type_name -> sysml.Diagnostic - 78, // 50: sysml.ParseFileResponse.root:type_name -> sysml.SymbolInfo - 100, // 51: sysml.ParseFileResponse.diagnostics:type_name -> sysml.Diagnostic - 78, // 52: sysml.SymbolResponse.symbol:type_name -> sysml.SymbolInfo - 100, // 53: sysml.DiagnosticsResponse.diagnostics:type_name -> sysml.Diagnostic - 83, // 54: sysml.EvaluateResponse.result:type_name -> sysml.Value - 100, // 55: sysml.EvaluateResponse.diagnostics:type_name -> sysml.Diagnostic - 143, // 56: sysml.Instance.feature_values:type_name -> sysml.Instance.FeatureValuesEntry - 83, // 57: sysml.FeatureValue.value:type_name -> sysml.Value - 83, // 58: sysml.FeatureValue.values:type_name -> sysml.Value - 39, // 59: sysml.InstantiateResponse.instance:type_name -> sysml.Instance - 100, // 60: sysml.InstantiateResponse.diagnostics:type_name -> sysml.Diagnostic - 39, // 61: sysml.InstantiateResponse.instances:type_name -> sysml.Instance - 144, // 62: sysml.ExecuteActionRequest.inputs:type_name -> sysml.ExecuteActionRequest.InputsEntry - 145, // 63: sysml.ExecuteActionResponse.outputs:type_name -> sysml.ExecuteActionResponse.OutputsEntry - 100, // 64: sysml.ExecuteActionResponse.diagnostics:type_name -> sysml.Diagnostic - 23, // 65: sysml.ExecuteActionResponse.outcomes:type_name -> sysml.Outcome - 24, // 66: sysml.ExecuteActionResponse.exploration:type_name -> sysml.ExplorationStatus - 146, // 67: sysml.ExecuteActionResponse.performer_attributes:type_name -> sysml.ExecuteActionResponse.PerformerAttributesEntry - 147, // 68: sysml.ExecuteStateResponse.final_context:type_name -> sysml.ExecuteStateResponse.FinalContextEntry - 100, // 69: sysml.ExecuteStateResponse.diagnostics:type_name -> sysml.Diagnostic - 23, // 70: sysml.ExecuteStateResponse.outcomes:type_name -> sysml.Outcome - 24, // 71: sysml.ExecuteStateResponse.exploration:type_name -> sysml.ExplorationStatus - 121, // 72: sysml.ExecuteStateResponse.trace:type_name -> sysml.DocumentEvent - 100, // 73: sysml.ConvertResponse.diagnostics:type_name -> sysml.Diagnostic - 51, // 74: sysml.MigrateResponse.report:type_name -> sysml.MigrationReport - 53, // 75: sysml.MigrateResponse.files:type_name -> sysml.MigrationFile - 52, // 76: sysml.MigrationReport.entries:type_name -> sysml.MigrationEntry - 55, // 77: sysml.ApplyEditsRequest.operations:type_name -> sysml.EditOperation - 72, // 78: sysml.EditOperation.set_value:type_name -> sysml.SetValueEdit - 73, // 79: sysml.EditOperation.rename:type_name -> sysml.RenameEdit - 56, // 80: sysml.EditOperation.add_member:type_name -> sysml.AddMemberEdit - 70, // 81: sysml.EditOperation.delete:type_name -> sysml.DeleteEdit - 71, // 82: sysml.EditOperation.move:type_name -> sysml.MoveEdit - 69, // 83: sysml.EditOperation.add_connection:type_name -> sysml.AddConnectionEdit - 57, // 84: sysml.EditOperation.add_satisfy:type_name -> sysml.AddSatisfyEdit - 58, // 85: sysml.EditOperation.add_requirement_constraint:type_name -> sysml.AddRequirementConstraintEdit - 59, // 86: sysml.EditOperation.add_transition:type_name -> sysml.AddTransitionEdit - 64, // 87: sysml.EditOperation.add_import:type_name -> sysml.AddImportEdit - 65, // 88: sysml.EditOperation.add_documentation:type_name -> sysml.AddDocumentationEdit - 60, // 89: sysml.EditOperation.add_verify:type_name -> sysml.AddVerifyEdit - 62, // 90: sysml.EditOperation.add_metadata:type_name -> sysml.AddMetadataEdit - 68, // 91: sysml.EditOperation.add_sequence:type_name -> sysml.AddSequenceEdit - 63, // 92: sysml.EditOperation.add_metadata_prefix:type_name -> sysml.AddMetadataPrefixEdit - 66, // 93: sysml.EditOperation.add_comment:type_name -> sysml.AddCommentEdit - 67, // 94: sysml.EditOperation.add_note:type_name -> sysml.AddNoteEdit - 61, // 95: sysml.AddMetadataEdit.values:type_name -> sysml.MetadataFeatureValue - 68, // 96: sysml.AddSequenceEdit.body:type_name -> sysml.AddSequenceEdit - 68, // 97: sysml.AddSequenceEdit.else_body:type_name -> sysml.AddSequenceEdit - 77, // 98: sysml.ApplyEditsResponse.applied:type_name -> sysml.AppliedEdit - 1, // 99: sysml.ApplyEditsResponse.failure:type_name -> sysml.EditFailure - 100, // 100: sysml.ApplyEditsResponse.diagnostics:type_name -> sysml.Diagnostic - 75, // 101: sysml.ApplyEditsResponse.documents:type_name -> sysml.EditedDocument - 76, // 102: sysml.ApplyEditsResponse.referrers:type_name -> sysml.Referrer - 148, // 103: sysml.SymbolInfo.metadata:type_name -> sysml.SymbolInfo.MetadataEntry - 82, // 104: sysml.SymbolInfo.attributes:type_name -> sysml.AttributeInfo - 80, // 105: sysml.SymbolInfo.type_info:type_name -> sysml.TypeInfo - 81, // 106: sysml.SymbolInfo.multiplicity:type_name -> sysml.MultiplicityInfo - 79, // 107: sysml.SymbolInfo.specializations:type_name -> sysml.Specialization - 83, // 108: sysml.AttributeInfo.value:type_name -> sysml.Value - 95, // 109: sysml.Value.sequence:type_name -> sysml.ValueSequence - 96, // 110: sysml.Value.quantity:type_name -> sysml.Quantity - 94, // 111: sysml.Value.enum_literal:type_name -> sysml.EnumLiteral - 93, // 112: sysml.Value.complex:type_name -> sysml.Complex - 90, // 113: sysml.Value.array:type_name -> sysml.Array - 91, // 114: sysml.Value.vector:type_name -> sysml.Vector - 92, // 115: sysml.Value.vector_quantity:type_name -> sysml.VectorQuantity - 97, // 116: sysml.Value.measurement_ref:type_name -> sysml.MeasurementRef - 87, // 117: sysml.Value.function:type_name -> sysml.Function - 88, // 118: sysml.Value.set:type_name -> sysml.ValueSet - 89, // 119: sysml.Value.tensor_quantity:type_name -> sysml.TensorQuantity - 85, // 120: sysml.Value.metaobject:type_name -> sysml.Metaobject - 86, // 121: sysml.Value.undetermined:type_name -> sysml.Undetermined - 84, // 122: sysml.Value.rational_value:type_name -> sysml.Rational - 81, // 123: sysml.Undetermined.count:type_name -> sysml.MultiplicityInfo - 83, // 124: sysml.ValueSet.elements:type_name -> sysml.Value - 96, // 125: sysml.TensorQuantity.components:type_name -> sysml.Quantity - 83, // 126: sysml.Array.elements:type_name -> sysml.Value - 83, // 127: sysml.Vector.components:type_name -> sysml.Value - 96, // 128: sysml.VectorQuantity.components:type_name -> sysml.Quantity - 83, // 129: sysml.EnumLiteral.value:type_name -> sysml.Value - 83, // 130: sysml.ValueSequence.elements:type_name -> sysml.Value - 84, // 131: sysml.Quantity.rational_magnitude:type_name -> sysml.Rational - 98, // 132: sysml.Quantity.unit_term:type_name -> sysml.UnitTerm - 98, // 133: sysml.MeasurementRef.unit_term:type_name -> sysml.UnitTerm - 99, // 134: sysml.UnitTerm.factors:type_name -> sysml.UnitFactor - 101, // 135: sysml.Diagnostic.span:type_name -> sysml.Span - 106, // 136: sysml.QueryRequest.query:type_name -> sysml.Query - 110, // 137: sysml.QueryResponse.elements:type_name -> sysml.QueryResultElement - 107, // 138: sysml.Query.where:type_name -> sysml.Constraint - 108, // 139: sysml.Constraint.primitive:type_name -> sysml.PrimitiveConstraint - 109, // 140: sysml.Constraint.composite:type_name -> sysml.CompositeConstraint - 2, // 141: sysml.PrimitiveConstraint.operator:type_name -> sysml.PrimitiveOperator - 3, // 142: sysml.CompositeConstraint.operator:type_name -> sysml.CompositeOperator - 107, // 143: sysml.CompositeConstraint.constraint:type_name -> sysml.Constraint - 149, // 144: sysml.QueryResultElement.properties:type_name -> sysml.QueryResultElement.PropertiesEntry - 83, // 145: sysml.SweepRange.start:type_name -> sysml.Value - 83, // 146: sysml.SweepRange.end:type_name -> sysml.Value - 83, // 147: sysml.SweepRange.step:type_name -> sysml.Value - 83, // 148: sysml.RunSweepRequest.arguments:type_name -> sysml.Value - 150, // 149: sysml.RunSweepRequest.named_arguments:type_name -> sysml.RunSweepRequest.NamedArgumentsEntry - 111, // 150: sysml.RunSweepRequest.ranges:type_name -> sysml.SweepRange - 18, // 151: sysml.SweepRow.inputs:type_name -> sysml.CalcOutput - 18, // 152: sysml.SweepRow.outputs:type_name -> sysml.CalcOutput - 4, // 153: sysml.SweepRow.verdicts:type_name -> sysml.Verdict - 0, // 154: sysml.SweepRow.failure_reason:type_name -> sysml.FailureReason - 19, // 155: sysml.SweepRow.evaluations:type_name -> sysml.CaseEvaluation - 113, // 156: sysml.RunSweepResponse.rows:type_name -> sysml.SweepRow - 100, // 157: sysml.RunSweepResponse.diagnostics:type_name -> sysml.Diagnostic - 0, // 158: sysml.RunSweepResponse.failure_reason:type_name -> sysml.FailureReason - 39, // 159: sysml.RunSweepResponse.instances:type_name -> sysml.Instance - 6, // 160: sysml.RunSweepResponse.bounds:type_name -> sysml.Bound - 116, // 161: sysml.RunDocumentQueryRequest.bindings:type_name -> sysml.DocumentQueryBinding - 117, // 162: sysml.DocumentQueryBinding.values:type_name -> sysml.DocumentValue - 96, // 163: sysml.DocumentValue.quantity:type_name -> sysml.Quantity - 119, // 164: sysml.DocumentValue.verdict:type_name -> sysml.DocumentVerdict - 118, // 165: sysml.DocumentValue.object:type_name -> sysml.DocumentObject - 120, // 166: sysml.DocumentValue.state:type_name -> sysml.DocumentState - 121, // 167: sysml.DocumentValue.event:type_name -> sysml.DocumentEvent - 84, // 168: sysml.DocumentValue.rational_value:type_name -> sysml.Rational - 117, // 169: sysml.DocumentObject.element:type_name -> sysml.DocumentValue - 117, // 170: sysml.DocumentVerdict.assertion:type_name -> sysml.DocumentValue - 118, // 171: sysml.DocumentState.object:type_name -> sysml.DocumentObject - 117, // 172: sysml.DocumentState.state:type_name -> sysml.DocumentValue - 117, // 173: sysml.DocumentEvent.time:type_name -> sysml.DocumentValue - 118, // 174: sysml.DocumentEvent.object:type_name -> sysml.DocumentObject - 118, // 175: sysml.DocumentEvent.target:type_name -> sysml.DocumentObject - 117, // 176: sysml.DocumentQueryCell.values:type_name -> sysml.DocumentValue - 117, // 177: sysml.DocumentQueryRow.element:type_name -> sysml.DocumentValue - 123, // 178: sysml.DocumentQueryRow.cells:type_name -> sysml.DocumentQueryCell - 122, // 179: sysml.RunDocumentQueryResponse.columns:type_name -> sysml.DocumentQueryColumn - 124, // 180: sysml.RunDocumentQueryResponse.rows:type_name -> sysml.DocumentQueryRow - 130, // 181: sysml.RenderViewResponse.nodes:type_name -> sysml.RenderNode - 132, // 182: sysml.RenderViewResponse.edges:type_name -> sysml.RenderEdge - 137, // 183: sysml.RenderViewResponse.rows:type_name -> sysml.RenderRow - 134, // 184: sysml.RenderViewResponse.canvas:type_name -> sysml.RenderCanvas - 138, // 185: sysml.RenderViewResponse.notes:type_name -> sysml.RenderNote - 131, // 186: sysml.RenderNode.ports:type_name -> sysml.RenderPort - 101, // 187: sysml.RenderNode.origin:type_name -> sysml.Span - 133, // 188: sysml.RenderNode.geometry:type_name -> sysml.RenderGeometry - 135, // 189: sysml.RenderNode.style:type_name -> sysml.RenderStyle - 101, // 190: sysml.RenderEdge.origin:type_name -> sysml.Span - 136, // 191: sysml.RenderEdge.route:type_name -> sysml.RenderPoint - 135, // 192: sysml.RenderEdge.style:type_name -> sysml.RenderStyle - 101, // 193: sysml.RenderRow.origin:type_name -> sysml.Span - 101, // 194: sysml.RenderNote.origin:type_name -> sysml.Span - 83, // 195: sysml.RunAnalysisRequest.NamedArgumentsEntry.value:type_name -> sysml.Value - 83, // 196: sysml.Outcome.OutputsEntry.value:type_name -> sysml.Value - 40, // 197: sysml.Instance.FeatureValuesEntry.value:type_name -> sysml.FeatureValue - 83, // 198: sysml.ExecuteActionRequest.InputsEntry.value:type_name -> sysml.Value - 83, // 199: sysml.ExecuteActionResponse.OutputsEntry.value:type_name -> sysml.Value - 83, // 200: sysml.ExecuteActionResponse.PerformerAttributesEntry.value:type_name -> sysml.Value - 83, // 201: sysml.ExecuteStateResponse.FinalContextEntry.value:type_name -> sysml.Value - 83, // 202: sysml.RunSweepRequest.NamedArgumentsEntry.value:type_name -> sysml.Value - 102, // 203: sysml.SysMLService.GetServerInfo:input_type -> sysml.ServerInfoRequest - 28, // 204: sysml.SysMLService.ParseFile:input_type -> sysml.ParseFileRequest - 30, // 205: sysml.SysMLService.ParseSources:input_type -> sysml.ParseSourcesRequest - 33, // 206: sysml.SysMLService.GetSymbol:input_type -> sysml.GetSymbolRequest - 35, // 207: sysml.SysMLService.GetDiagnostics:input_type -> sysml.DiagnosticsRequest - 37, // 208: sysml.SysMLService.Evaluate:input_type -> sysml.EvaluateRequest - 41, // 209: sysml.SysMLService.Instantiate:input_type -> sysml.InstantiateRequest - 43, // 210: sysml.SysMLService.ExecuteAction:input_type -> sysml.ExecuteActionRequest - 45, // 211: sysml.SysMLService.ExecuteState:input_type -> sysml.ExecuteStateRequest - 47, // 212: sysml.SysMLService.Convert:input_type -> sysml.ConvertRequest - 49, // 213: sysml.SysMLService.Migrate:input_type -> sysml.MigrateRequest - 54, // 214: sysml.SysMLService.ApplyEdits:input_type -> sysml.ApplyEditsRequest - 7, // 215: sysml.SysMLService.VerifyConstraint:input_type -> sysml.VerifyConstraintRequest - 9, // 216: sysml.SysMLService.VerifyRequirement:input_type -> sysml.VerifyRequirementRequest - 12, // 217: sysml.SysMLService.VerifySatisfaction:input_type -> sysml.VerifySatisfactionRequest - 14, // 218: sysml.SysMLService.ValidateInstance:input_type -> sysml.ValidateInstanceRequest - 16, // 219: sysml.SysMLService.EvaluateCalc:input_type -> sysml.EvaluateCalcRequest - 20, // 220: sysml.SysMLService.RunAnalysis:input_type -> sysml.RunAnalysisRequest - 112, // 221: sysml.SysMLService.RunSweep:input_type -> sysml.RunSweepRequest - 25, // 222: sysml.SysMLService.ListEngines:input_type -> sysml.ListEnginesRequest - 104, // 223: sysml.SysMLService.Query:input_type -> sysml.QueryRequest - 115, // 224: sysml.SysMLService.RunDocumentQuery:input_type -> sysml.RunDocumentQueryRequest - 126, // 225: sysml.SysMLService.RenderDocument:input_type -> sysml.RenderDocumentRequest - 128, // 226: sysml.SysMLService.RenderView:input_type -> sysml.RenderViewRequest - 139, // 227: sysml.SysMLService.ExportGraphs:input_type -> sysml.ExportGraphsRequest - 103, // 228: sysml.SysMLService.GetServerInfo:output_type -> sysml.ServerInfoResponse - 32, // 229: sysml.SysMLService.ParseFile:output_type -> sysml.ParseFileResponse - 31, // 230: sysml.SysMLService.ParseSources:output_type -> sysml.ParseSourcesResponse - 34, // 231: sysml.SysMLService.GetSymbol:output_type -> sysml.SymbolResponse - 36, // 232: sysml.SysMLService.GetDiagnostics:output_type -> sysml.DiagnosticsResponse - 38, // 233: sysml.SysMLService.Evaluate:output_type -> sysml.EvaluateResponse - 42, // 234: sysml.SysMLService.Instantiate:output_type -> sysml.InstantiateResponse - 44, // 235: sysml.SysMLService.ExecuteAction:output_type -> sysml.ExecuteActionResponse - 46, // 236: sysml.SysMLService.ExecuteState:output_type -> sysml.ExecuteStateResponse - 48, // 237: sysml.SysMLService.Convert:output_type -> sysml.ConvertResponse - 50, // 238: sysml.SysMLService.Migrate:output_type -> sysml.MigrateResponse - 74, // 239: sysml.SysMLService.ApplyEdits:output_type -> sysml.ApplyEditsResponse - 8, // 240: sysml.SysMLService.VerifyConstraint:output_type -> sysml.VerifyConstraintResponse - 11, // 241: sysml.SysMLService.VerifyRequirement:output_type -> sysml.VerifyRequirementResponse - 13, // 242: sysml.SysMLService.VerifySatisfaction:output_type -> sysml.VerifySatisfactionResponse - 15, // 243: sysml.SysMLService.ValidateInstance:output_type -> sysml.ValidateInstanceResponse - 17, // 244: sysml.SysMLService.EvaluateCalc:output_type -> sysml.EvaluateCalcResponse - 21, // 245: sysml.SysMLService.RunAnalysis:output_type -> sysml.RunAnalysisResponse - 114, // 246: sysml.SysMLService.RunSweep:output_type -> sysml.RunSweepResponse - 27, // 247: sysml.SysMLService.ListEngines:output_type -> sysml.ListEnginesResponse - 105, // 248: sysml.SysMLService.Query:output_type -> sysml.QueryResponse - 125, // 249: sysml.SysMLService.RunDocumentQuery:output_type -> sysml.RunDocumentQueryResponse - 127, // 250: sysml.SysMLService.RenderDocument:output_type -> sysml.RenderDocumentResponse - 129, // 251: sysml.SysMLService.RenderView:output_type -> sysml.RenderViewResponse - 140, // 252: sysml.SysMLService.ExportGraphs:output_type -> sysml.ExportGraphsResponse - 228, // [228:253] is the sub-list for method output_type - 203, // [203:228] is the sub-list for method input_type - 203, // [203:203] is the sub-list for extension type_name - 203, // [203:203] is the sub-list for extension extendee - 0, // [0:203] is the sub-list for field type_name + 83, // 4: sysml.VerifyConstraintRequest.arguments:type_name -> sysml.Value + 141, // 5: sysml.VerifyConstraintRequest.named_arguments:type_name -> sysml.VerifyConstraintRequest.NamedArgumentsEntry + 4, // 6: sysml.VerifyConstraintResponse.verdict:type_name -> sysml.Verdict + 39, // 7: sysml.VerifyConstraintResponse.instances:type_name -> sysml.Instance + 100, // 8: sysml.VerifyConstraintResponse.diagnostics:type_name -> sysml.Diagnostic + 83, // 9: sysml.VerifyRequirementRequest.arguments:type_name -> sysml.Value + 142, // 10: sysml.VerifyRequirementRequest.named_arguments:type_name -> sysml.VerifyRequirementRequest.NamedArgumentsEntry + 4, // 11: sysml.VerifyRequirementResponse.verdict:type_name -> sysml.Verdict + 39, // 12: sysml.VerifyRequirementResponse.instances:type_name -> sysml.Instance + 100, // 13: sysml.VerifyRequirementResponse.diagnostics:type_name -> sysml.Diagnostic + 10, // 14: sysml.VerifyRequirementResponse.verification_verdicts:type_name -> sysml.VerificationVerdict + 4, // 15: sysml.VerifySatisfactionResponse.verdicts:type_name -> sysml.Verdict + 39, // 16: sysml.VerifySatisfactionResponse.instances:type_name -> sysml.Instance + 100, // 17: sysml.VerifySatisfactionResponse.diagnostics:type_name -> sysml.Diagnostic + 0, // 18: sysml.VerifySatisfactionResponse.failure_reason:type_name -> sysml.FailureReason + 10, // 19: sysml.VerifySatisfactionResponse.verification_verdicts:type_name -> sysml.VerificationVerdict + 4, // 20: sysml.ValidateInstanceResponse.verdicts:type_name -> sysml.Verdict + 4, // 21: sysml.ValidateInstanceResponse.summary:type_name -> sysml.Verdict + 39, // 22: sysml.ValidateInstanceResponse.instances:type_name -> sysml.Instance + 100, // 23: sysml.ValidateInstanceResponse.diagnostics:type_name -> sysml.Diagnostic + 0, // 24: sysml.ValidateInstanceResponse.failure_reason:type_name -> sysml.FailureReason + 10, // 25: sysml.ValidateInstanceResponse.verification_verdicts:type_name -> sysml.VerificationVerdict + 83, // 26: sysml.EvaluateCalcRequest.arguments:type_name -> sysml.Value + 83, // 27: sysml.EvaluateCalcResponse.result:type_name -> sysml.Value + 18, // 28: sysml.EvaluateCalcResponse.outputs:type_name -> sysml.CalcOutput + 100, // 29: sysml.EvaluateCalcResponse.diagnostics:type_name -> sysml.Diagnostic + 0, // 30: sysml.EvaluateCalcResponse.failure_reason:type_name -> sysml.FailureReason + 6, // 31: sysml.EvaluateCalcResponse.bounds:type_name -> sysml.Bound + 83, // 32: sysml.CalcOutput.value:type_name -> sysml.Value + 83, // 33: sysml.CaseEvaluation.arguments:type_name -> sysml.Value + 83, // 34: sysml.CaseEvaluation.result:type_name -> sysml.Value + 83, // 35: sysml.RunAnalysisRequest.arguments:type_name -> sysml.Value + 143, // 36: sysml.RunAnalysisRequest.named_arguments:type_name -> sysml.RunAnalysisRequest.NamedArgumentsEntry + 18, // 37: sysml.RunAnalysisResponse.outputs:type_name -> sysml.CalcOutput + 4, // 38: sysml.RunAnalysisResponse.verdicts:type_name -> sysml.Verdict + 39, // 39: sysml.RunAnalysisResponse.instances:type_name -> sysml.Instance + 100, // 40: sysml.RunAnalysisResponse.diagnostics:type_name -> sysml.Diagnostic + 0, // 41: sysml.RunAnalysisResponse.failure_reason:type_name -> sysml.FailureReason + 10, // 42: sysml.RunAnalysisResponse.verification_verdicts:type_name -> sysml.VerificationVerdict + 23, // 43: sysml.RunAnalysisResponse.outcomes:type_name -> sysml.Outcome + 24, // 44: sysml.RunAnalysisResponse.exploration:type_name -> sysml.ExplorationStatus + 19, // 45: sysml.RunAnalysisResponse.evaluations:type_name -> sysml.CaseEvaluation + 6, // 46: sysml.RunAnalysisResponse.bounds:type_name -> sysml.Bound + 144, // 47: sysml.Outcome.outputs:type_name -> sysml.Outcome.OutputsEntry + 100, // 48: sysml.Outcome.diagnostics:type_name -> sysml.Diagnostic + 22, // 49: sysml.Outcome.probability_range:type_name -> sysml.ProbabilityRange + 26, // 50: sysml.ListEnginesResponse.engines:type_name -> sysml.EngineInfo + 29, // 51: sysml.ParseSourcesRequest.documents:type_name -> sysml.SourceDocument + 78, // 52: sysml.ParseSourcesResponse.roots:type_name -> sysml.SymbolInfo + 100, // 53: sysml.ParseSourcesResponse.diagnostics:type_name -> sysml.Diagnostic + 78, // 54: sysml.ParseFileResponse.root:type_name -> sysml.SymbolInfo + 100, // 55: sysml.ParseFileResponse.diagnostics:type_name -> sysml.Diagnostic + 78, // 56: sysml.SymbolResponse.symbol:type_name -> sysml.SymbolInfo + 100, // 57: sysml.DiagnosticsResponse.diagnostics:type_name -> sysml.Diagnostic + 83, // 58: sysml.EvaluateResponse.result:type_name -> sysml.Value + 100, // 59: sysml.EvaluateResponse.diagnostics:type_name -> sysml.Diagnostic + 145, // 60: sysml.Instance.feature_values:type_name -> sysml.Instance.FeatureValuesEntry + 83, // 61: sysml.FeatureValue.value:type_name -> sysml.Value + 83, // 62: sysml.FeatureValue.values:type_name -> sysml.Value + 39, // 63: sysml.InstantiateResponse.instance:type_name -> sysml.Instance + 100, // 64: sysml.InstantiateResponse.diagnostics:type_name -> sysml.Diagnostic + 39, // 65: sysml.InstantiateResponse.instances:type_name -> sysml.Instance + 146, // 66: sysml.ExecuteActionRequest.inputs:type_name -> sysml.ExecuteActionRequest.InputsEntry + 147, // 67: sysml.ExecuteActionResponse.outputs:type_name -> sysml.ExecuteActionResponse.OutputsEntry + 100, // 68: sysml.ExecuteActionResponse.diagnostics:type_name -> sysml.Diagnostic + 23, // 69: sysml.ExecuteActionResponse.outcomes:type_name -> sysml.Outcome + 24, // 70: sysml.ExecuteActionResponse.exploration:type_name -> sysml.ExplorationStatus + 148, // 71: sysml.ExecuteActionResponse.performer_attributes:type_name -> sysml.ExecuteActionResponse.PerformerAttributesEntry + 149, // 72: sysml.ExecuteStateResponse.final_context:type_name -> sysml.ExecuteStateResponse.FinalContextEntry + 100, // 73: sysml.ExecuteStateResponse.diagnostics:type_name -> sysml.Diagnostic + 23, // 74: sysml.ExecuteStateResponse.outcomes:type_name -> sysml.Outcome + 24, // 75: sysml.ExecuteStateResponse.exploration:type_name -> sysml.ExplorationStatus + 121, // 76: sysml.ExecuteStateResponse.trace:type_name -> sysml.DocumentEvent + 100, // 77: sysml.ConvertResponse.diagnostics:type_name -> sysml.Diagnostic + 51, // 78: sysml.MigrateResponse.report:type_name -> sysml.MigrationReport + 53, // 79: sysml.MigrateResponse.files:type_name -> sysml.MigrationFile + 52, // 80: sysml.MigrationReport.entries:type_name -> sysml.MigrationEntry + 55, // 81: sysml.ApplyEditsRequest.operations:type_name -> sysml.EditOperation + 72, // 82: sysml.EditOperation.set_value:type_name -> sysml.SetValueEdit + 73, // 83: sysml.EditOperation.rename:type_name -> sysml.RenameEdit + 56, // 84: sysml.EditOperation.add_member:type_name -> sysml.AddMemberEdit + 70, // 85: sysml.EditOperation.delete:type_name -> sysml.DeleteEdit + 71, // 86: sysml.EditOperation.move:type_name -> sysml.MoveEdit + 69, // 87: sysml.EditOperation.add_connection:type_name -> sysml.AddConnectionEdit + 57, // 88: sysml.EditOperation.add_satisfy:type_name -> sysml.AddSatisfyEdit + 58, // 89: sysml.EditOperation.add_requirement_constraint:type_name -> sysml.AddRequirementConstraintEdit + 59, // 90: sysml.EditOperation.add_transition:type_name -> sysml.AddTransitionEdit + 64, // 91: sysml.EditOperation.add_import:type_name -> sysml.AddImportEdit + 65, // 92: sysml.EditOperation.add_documentation:type_name -> sysml.AddDocumentationEdit + 60, // 93: sysml.EditOperation.add_verify:type_name -> sysml.AddVerifyEdit + 62, // 94: sysml.EditOperation.add_metadata:type_name -> sysml.AddMetadataEdit + 68, // 95: sysml.EditOperation.add_sequence:type_name -> sysml.AddSequenceEdit + 63, // 96: sysml.EditOperation.add_metadata_prefix:type_name -> sysml.AddMetadataPrefixEdit + 66, // 97: sysml.EditOperation.add_comment:type_name -> sysml.AddCommentEdit + 67, // 98: sysml.EditOperation.add_note:type_name -> sysml.AddNoteEdit + 61, // 99: sysml.AddMetadataEdit.values:type_name -> sysml.MetadataFeatureValue + 68, // 100: sysml.AddSequenceEdit.body:type_name -> sysml.AddSequenceEdit + 68, // 101: sysml.AddSequenceEdit.else_body:type_name -> sysml.AddSequenceEdit + 77, // 102: sysml.ApplyEditsResponse.applied:type_name -> sysml.AppliedEdit + 1, // 103: sysml.ApplyEditsResponse.failure:type_name -> sysml.EditFailure + 100, // 104: sysml.ApplyEditsResponse.diagnostics:type_name -> sysml.Diagnostic + 75, // 105: sysml.ApplyEditsResponse.documents:type_name -> sysml.EditedDocument + 76, // 106: sysml.ApplyEditsResponse.referrers:type_name -> sysml.Referrer + 150, // 107: sysml.SymbolInfo.metadata:type_name -> sysml.SymbolInfo.MetadataEntry + 82, // 108: sysml.SymbolInfo.attributes:type_name -> sysml.AttributeInfo + 80, // 109: sysml.SymbolInfo.type_info:type_name -> sysml.TypeInfo + 81, // 110: sysml.SymbolInfo.multiplicity:type_name -> sysml.MultiplicityInfo + 79, // 111: sysml.SymbolInfo.specializations:type_name -> sysml.Specialization + 83, // 112: sysml.AttributeInfo.value:type_name -> sysml.Value + 95, // 113: sysml.Value.sequence:type_name -> sysml.ValueSequence + 96, // 114: sysml.Value.quantity:type_name -> sysml.Quantity + 94, // 115: sysml.Value.enum_literal:type_name -> sysml.EnumLiteral + 93, // 116: sysml.Value.complex:type_name -> sysml.Complex + 90, // 117: sysml.Value.array:type_name -> sysml.Array + 91, // 118: sysml.Value.vector:type_name -> sysml.Vector + 92, // 119: sysml.Value.vector_quantity:type_name -> sysml.VectorQuantity + 97, // 120: sysml.Value.measurement_ref:type_name -> sysml.MeasurementRef + 87, // 121: sysml.Value.function:type_name -> sysml.Function + 88, // 122: sysml.Value.set:type_name -> sysml.ValueSet + 89, // 123: sysml.Value.tensor_quantity:type_name -> sysml.TensorQuantity + 85, // 124: sysml.Value.metaobject:type_name -> sysml.Metaobject + 86, // 125: sysml.Value.undetermined:type_name -> sysml.Undetermined + 84, // 126: sysml.Value.rational_value:type_name -> sysml.Rational + 81, // 127: sysml.Undetermined.count:type_name -> sysml.MultiplicityInfo + 83, // 128: sysml.ValueSet.elements:type_name -> sysml.Value + 96, // 129: sysml.TensorQuantity.components:type_name -> sysml.Quantity + 83, // 130: sysml.Array.elements:type_name -> sysml.Value + 83, // 131: sysml.Vector.components:type_name -> sysml.Value + 96, // 132: sysml.VectorQuantity.components:type_name -> sysml.Quantity + 83, // 133: sysml.EnumLiteral.value:type_name -> sysml.Value + 83, // 134: sysml.ValueSequence.elements:type_name -> sysml.Value + 84, // 135: sysml.Quantity.rational_magnitude:type_name -> sysml.Rational + 98, // 136: sysml.Quantity.unit_term:type_name -> sysml.UnitTerm + 98, // 137: sysml.MeasurementRef.unit_term:type_name -> sysml.UnitTerm + 99, // 138: sysml.UnitTerm.factors:type_name -> sysml.UnitFactor + 101, // 139: sysml.Diagnostic.span:type_name -> sysml.Span + 106, // 140: sysml.QueryRequest.query:type_name -> sysml.Query + 110, // 141: sysml.QueryResponse.elements:type_name -> sysml.QueryResultElement + 107, // 142: sysml.Query.where:type_name -> sysml.Constraint + 108, // 143: sysml.Constraint.primitive:type_name -> sysml.PrimitiveConstraint + 109, // 144: sysml.Constraint.composite:type_name -> sysml.CompositeConstraint + 2, // 145: sysml.PrimitiveConstraint.operator:type_name -> sysml.PrimitiveOperator + 3, // 146: sysml.CompositeConstraint.operator:type_name -> sysml.CompositeOperator + 107, // 147: sysml.CompositeConstraint.constraint:type_name -> sysml.Constraint + 151, // 148: sysml.QueryResultElement.properties:type_name -> sysml.QueryResultElement.PropertiesEntry + 83, // 149: sysml.SweepRange.start:type_name -> sysml.Value + 83, // 150: sysml.SweepRange.end:type_name -> sysml.Value + 83, // 151: sysml.SweepRange.step:type_name -> sysml.Value + 83, // 152: sysml.RunSweepRequest.arguments:type_name -> sysml.Value + 152, // 153: sysml.RunSweepRequest.named_arguments:type_name -> sysml.RunSweepRequest.NamedArgumentsEntry + 111, // 154: sysml.RunSweepRequest.ranges:type_name -> sysml.SweepRange + 18, // 155: sysml.SweepRow.inputs:type_name -> sysml.CalcOutput + 18, // 156: sysml.SweepRow.outputs:type_name -> sysml.CalcOutput + 4, // 157: sysml.SweepRow.verdicts:type_name -> sysml.Verdict + 0, // 158: sysml.SweepRow.failure_reason:type_name -> sysml.FailureReason + 19, // 159: sysml.SweepRow.evaluations:type_name -> sysml.CaseEvaluation + 113, // 160: sysml.RunSweepResponse.rows:type_name -> sysml.SweepRow + 100, // 161: sysml.RunSweepResponse.diagnostics:type_name -> sysml.Diagnostic + 0, // 162: sysml.RunSweepResponse.failure_reason:type_name -> sysml.FailureReason + 39, // 163: sysml.RunSweepResponse.instances:type_name -> sysml.Instance + 6, // 164: sysml.RunSweepResponse.bounds:type_name -> sysml.Bound + 116, // 165: sysml.RunDocumentQueryRequest.bindings:type_name -> sysml.DocumentQueryBinding + 117, // 166: sysml.DocumentQueryBinding.values:type_name -> sysml.DocumentValue + 96, // 167: sysml.DocumentValue.quantity:type_name -> sysml.Quantity + 119, // 168: sysml.DocumentValue.verdict:type_name -> sysml.DocumentVerdict + 118, // 169: sysml.DocumentValue.object:type_name -> sysml.DocumentObject + 120, // 170: sysml.DocumentValue.state:type_name -> sysml.DocumentState + 121, // 171: sysml.DocumentValue.event:type_name -> sysml.DocumentEvent + 84, // 172: sysml.DocumentValue.rational_value:type_name -> sysml.Rational + 117, // 173: sysml.DocumentObject.element:type_name -> sysml.DocumentValue + 117, // 174: sysml.DocumentVerdict.assertion:type_name -> sysml.DocumentValue + 118, // 175: sysml.DocumentState.object:type_name -> sysml.DocumentObject + 117, // 176: sysml.DocumentState.state:type_name -> sysml.DocumentValue + 117, // 177: sysml.DocumentEvent.time:type_name -> sysml.DocumentValue + 118, // 178: sysml.DocumentEvent.object:type_name -> sysml.DocumentObject + 118, // 179: sysml.DocumentEvent.target:type_name -> sysml.DocumentObject + 117, // 180: sysml.DocumentQueryCell.values:type_name -> sysml.DocumentValue + 117, // 181: sysml.DocumentQueryRow.element:type_name -> sysml.DocumentValue + 123, // 182: sysml.DocumentQueryRow.cells:type_name -> sysml.DocumentQueryCell + 122, // 183: sysml.RunDocumentQueryResponse.columns:type_name -> sysml.DocumentQueryColumn + 124, // 184: sysml.RunDocumentQueryResponse.rows:type_name -> sysml.DocumentQueryRow + 130, // 185: sysml.RenderViewResponse.nodes:type_name -> sysml.RenderNode + 132, // 186: sysml.RenderViewResponse.edges:type_name -> sysml.RenderEdge + 137, // 187: sysml.RenderViewResponse.rows:type_name -> sysml.RenderRow + 134, // 188: sysml.RenderViewResponse.canvas:type_name -> sysml.RenderCanvas + 138, // 189: sysml.RenderViewResponse.notes:type_name -> sysml.RenderNote + 131, // 190: sysml.RenderNode.ports:type_name -> sysml.RenderPort + 101, // 191: sysml.RenderNode.origin:type_name -> sysml.Span + 133, // 192: sysml.RenderNode.geometry:type_name -> sysml.RenderGeometry + 135, // 193: sysml.RenderNode.style:type_name -> sysml.RenderStyle + 101, // 194: sysml.RenderEdge.origin:type_name -> sysml.Span + 136, // 195: sysml.RenderEdge.route:type_name -> sysml.RenderPoint + 135, // 196: sysml.RenderEdge.style:type_name -> sysml.RenderStyle + 101, // 197: sysml.RenderRow.origin:type_name -> sysml.Span + 101, // 198: sysml.RenderNote.origin:type_name -> sysml.Span + 83, // 199: sysml.VerifyConstraintRequest.NamedArgumentsEntry.value:type_name -> sysml.Value + 83, // 200: sysml.VerifyRequirementRequest.NamedArgumentsEntry.value:type_name -> sysml.Value + 83, // 201: sysml.RunAnalysisRequest.NamedArgumentsEntry.value:type_name -> sysml.Value + 83, // 202: sysml.Outcome.OutputsEntry.value:type_name -> sysml.Value + 40, // 203: sysml.Instance.FeatureValuesEntry.value:type_name -> sysml.FeatureValue + 83, // 204: sysml.ExecuteActionRequest.InputsEntry.value:type_name -> sysml.Value + 83, // 205: sysml.ExecuteActionResponse.OutputsEntry.value:type_name -> sysml.Value + 83, // 206: sysml.ExecuteActionResponse.PerformerAttributesEntry.value:type_name -> sysml.Value + 83, // 207: sysml.ExecuteStateResponse.FinalContextEntry.value:type_name -> sysml.Value + 83, // 208: sysml.RunSweepRequest.NamedArgumentsEntry.value:type_name -> sysml.Value + 102, // 209: sysml.SysMLService.GetServerInfo:input_type -> sysml.ServerInfoRequest + 28, // 210: sysml.SysMLService.ParseFile:input_type -> sysml.ParseFileRequest + 30, // 211: sysml.SysMLService.ParseSources:input_type -> sysml.ParseSourcesRequest + 33, // 212: sysml.SysMLService.GetSymbol:input_type -> sysml.GetSymbolRequest + 35, // 213: sysml.SysMLService.GetDiagnostics:input_type -> sysml.DiagnosticsRequest + 37, // 214: sysml.SysMLService.Evaluate:input_type -> sysml.EvaluateRequest + 41, // 215: sysml.SysMLService.Instantiate:input_type -> sysml.InstantiateRequest + 43, // 216: sysml.SysMLService.ExecuteAction:input_type -> sysml.ExecuteActionRequest + 45, // 217: sysml.SysMLService.ExecuteState:input_type -> sysml.ExecuteStateRequest + 47, // 218: sysml.SysMLService.Convert:input_type -> sysml.ConvertRequest + 49, // 219: sysml.SysMLService.Migrate:input_type -> sysml.MigrateRequest + 54, // 220: sysml.SysMLService.ApplyEdits:input_type -> sysml.ApplyEditsRequest + 7, // 221: sysml.SysMLService.VerifyConstraint:input_type -> sysml.VerifyConstraintRequest + 9, // 222: sysml.SysMLService.VerifyRequirement:input_type -> sysml.VerifyRequirementRequest + 12, // 223: sysml.SysMLService.VerifySatisfaction:input_type -> sysml.VerifySatisfactionRequest + 14, // 224: sysml.SysMLService.ValidateInstance:input_type -> sysml.ValidateInstanceRequest + 16, // 225: sysml.SysMLService.EvaluateCalc:input_type -> sysml.EvaluateCalcRequest + 20, // 226: sysml.SysMLService.RunAnalysis:input_type -> sysml.RunAnalysisRequest + 112, // 227: sysml.SysMLService.RunSweep:input_type -> sysml.RunSweepRequest + 25, // 228: sysml.SysMLService.ListEngines:input_type -> sysml.ListEnginesRequest + 104, // 229: sysml.SysMLService.Query:input_type -> sysml.QueryRequest + 115, // 230: sysml.SysMLService.RunDocumentQuery:input_type -> sysml.RunDocumentQueryRequest + 126, // 231: sysml.SysMLService.RenderDocument:input_type -> sysml.RenderDocumentRequest + 128, // 232: sysml.SysMLService.RenderView:input_type -> sysml.RenderViewRequest + 139, // 233: sysml.SysMLService.ExportGraphs:input_type -> sysml.ExportGraphsRequest + 103, // 234: sysml.SysMLService.GetServerInfo:output_type -> sysml.ServerInfoResponse + 32, // 235: sysml.SysMLService.ParseFile:output_type -> sysml.ParseFileResponse + 31, // 236: sysml.SysMLService.ParseSources:output_type -> sysml.ParseSourcesResponse + 34, // 237: sysml.SysMLService.GetSymbol:output_type -> sysml.SymbolResponse + 36, // 238: sysml.SysMLService.GetDiagnostics:output_type -> sysml.DiagnosticsResponse + 38, // 239: sysml.SysMLService.Evaluate:output_type -> sysml.EvaluateResponse + 42, // 240: sysml.SysMLService.Instantiate:output_type -> sysml.InstantiateResponse + 44, // 241: sysml.SysMLService.ExecuteAction:output_type -> sysml.ExecuteActionResponse + 46, // 242: sysml.SysMLService.ExecuteState:output_type -> sysml.ExecuteStateResponse + 48, // 243: sysml.SysMLService.Convert:output_type -> sysml.ConvertResponse + 50, // 244: sysml.SysMLService.Migrate:output_type -> sysml.MigrateResponse + 74, // 245: sysml.SysMLService.ApplyEdits:output_type -> sysml.ApplyEditsResponse + 8, // 246: sysml.SysMLService.VerifyConstraint:output_type -> sysml.VerifyConstraintResponse + 11, // 247: sysml.SysMLService.VerifyRequirement:output_type -> sysml.VerifyRequirementResponse + 13, // 248: sysml.SysMLService.VerifySatisfaction:output_type -> sysml.VerifySatisfactionResponse + 15, // 249: sysml.SysMLService.ValidateInstance:output_type -> sysml.ValidateInstanceResponse + 17, // 250: sysml.SysMLService.EvaluateCalc:output_type -> sysml.EvaluateCalcResponse + 21, // 251: sysml.SysMLService.RunAnalysis:output_type -> sysml.RunAnalysisResponse + 114, // 252: sysml.SysMLService.RunSweep:output_type -> sysml.RunSweepResponse + 27, // 253: sysml.SysMLService.ListEngines:output_type -> sysml.ListEnginesResponse + 105, // 254: sysml.SysMLService.Query:output_type -> sysml.QueryResponse + 125, // 255: sysml.SysMLService.RunDocumentQuery:output_type -> sysml.RunDocumentQueryResponse + 127, // 256: sysml.SysMLService.RenderDocument:output_type -> sysml.RenderDocumentResponse + 129, // 257: sysml.SysMLService.RenderView:output_type -> sysml.RenderViewResponse + 140, // 258: sysml.SysMLService.ExportGraphs:output_type -> sysml.ExportGraphsResponse + 234, // [234:259] is the sub-list for method output_type + 209, // [209:234] is the sub-list for method input_type + 209, // [209:209] is the sub-list for extension type_name + 209, // [209:209] is the sub-list for extension extendee + 0, // [0:209] is the sub-list for field type_name } func init() { file_sysml_proto_init() } @@ -14169,7 +14227,7 @@ func file_sysml_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_sysml_proto_rawDesc), len(file_sysml_proto_rawDesc)), NumEnums: 4, - NumMessages: 147, + NumMessages: 149, NumExtensions: 0, NumServices: 1, }, diff --git a/api/proto/sysml.proto b/api/proto/sysml.proto index a79d3c8a57..b32394961b 100644 --- a/api/proto/sysml.proto +++ b/api/proto/sysml.proto @@ -241,6 +241,13 @@ message VerifyConstraintRequest { // solver questions are reported as the "verification_questions" capability // and need an SMT solver. string question = 5; + // Values for the constraint's `in` parameters, in declaration order, as + // RunAnalysisRequest.arguments binds a case's; an argument the constraint + // does not take is INVALID_ARGUMENT, as is a parameter left without an + // argument or default. Reported as the "verification_arguments" capability. + repeated Value arguments = 6; + // Values for `in` parameters by name; see arguments. + map named_arguments = 7; } // VerifyConstraintResponse carries the verdict; its engine, strength and bounds @@ -269,6 +276,11 @@ message VerifyRequirementRequest { string engine = 4; // The question asked; see VerifyConstraintRequest.question. string question = 5; + // Values for the requirement's `in` parameters, positional and by name; see + // VerifyConstraintRequest.arguments. Reported as the "verification_arguments" + // capability. + repeated Value arguments = 6; + map named_arguments = 7; } // VerificationVerdict is what the body of a verification case answered when it diff --git a/changes/unreleased/verify-arguments.added.md b/changes/unreleased/verify-arguments.added.md new file mode 100644 index 0000000000..adf8768e22 --- /dev/null +++ b/changes/unreleased/verify-arguments.added.md @@ -0,0 +1 @@ +- **A constraint or requirement with `in` parameters is verified with arguments for them.** `VerifyConstraint` and `VerifyRequirement` take `arguments`, bound positionally in declaration order, and `named_arguments`, bound by name, as `RunAnalysis` binds a case's inputs; a name no parameter has, more positional values than parameters, a parameter left without a value, default or same-named value on the checked object, or a value not of the parameter's type is an undecided verdict naming it, and the symbolic `holds` and `satisfiable` questions refuse them. The service advertises the `verification_arguments` capability; every client binds them (`VerifyArguments`/`VerifyArgument` in Go, `arguments=`/`named_arguments=` in Python, Julia and MATLAB, `VerifyOptions` in Node, Rust and Java). `%constraint`, `%requirement`, `-constraint` and `-requirement` take them in parentheses after the name, with an object as the subject after them, as `%analysis` does: `%requirement Pkg::Under(limit = 5) Pkg::part`. diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Capabilities.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Capabilities.java index 2f85c3e2c0..042a34396d 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Capabilities.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Capabilities.java @@ -30,6 +30,9 @@ public final class Capabilities { /** The verification RPCs answer {@code holds} and {@code satisfiable} questions, reporting a verdict's status and witness. */ public static final String VERIFICATION_QUESTIONS = "verification_questions"; + /** {@code VerifyConstraint} and {@code VerifyRequirement} bind {@code arguments} and {@code named_arguments} to the element's {@code in} parameters. */ + public static final String VERIFICATION_ARGUMENTS = "verification_arguments"; + /** An analysis response carries each call the run made to a calc held as a value, such as a trade study's evaluation of every alternative. */ public static final String CASE_EVALUATIONS = "case_evaluations"; diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Model.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Model.java index 54f3650820..c37dbd7736 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Model.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/Model.java @@ -855,8 +855,13 @@ private Verification verifyConstraint( Objects.requireNonNull(symbolId, NAME_SYMBOL_ID); connection.capabilities().require(Capabilities.VERIFICATION); requireQuestion(options); + requireArguments(options); VerifyConstraintRequest.Builder request = - VerifyConstraintRequest.newBuilder().setModelHash(hash).setSymbolId(symbolId); + VerifyConstraintRequest.newBuilder() + .setModelHash(hash) + .setSymbolId(symbolId) + .addAllArguments(Protos.protos(options.arguments(), connection.capabilities())) + .putAllNamedArguments(Protos.protos(options.namedArguments(), connection.capabilities())); subjectSymbolId.ifPresent(request::setSubjectSymbolId); engine.ifPresent(request::setEngine); questionField(options).ifPresent(request::setQuestion); @@ -937,8 +942,13 @@ private Verification verifyRequirement( Objects.requireNonNull(symbolId, NAME_SYMBOL_ID); connection.capabilities().require(Capabilities.VERIFICATION); requireQuestion(options); + requireArguments(options); VerifyRequirementRequest.Builder request = - VerifyRequirementRequest.newBuilder().setModelHash(hash).setSymbolId(symbolId); + VerifyRequirementRequest.newBuilder() + .setModelHash(hash) + .setSymbolId(symbolId) + .addAllArguments(Protos.protos(options.arguments(), connection.capabilities())) + .putAllNamedArguments(Protos.protos(options.namedArguments(), connection.capabilities())); subjectSymbolId.ifPresent(request::setSubjectSymbolId); engine.ifPresent(request::setEngine); questionField(options).ifPresent(request::setQuestion); @@ -1741,6 +1751,13 @@ private static Optional questionField(VerifyOptions options) { return Optional.of(options.question()); } + // Refuse to send bindings a service without verification_arguments would silently drop. + private void requireArguments(VerifyOptions options) { + if (options.bindsArguments()) { + connection.capabilities().require(Capabilities.VERIFICATION_ARGUMENTS); + } + } + // Refuse to send a question a service without verification_questions would evaluate instead. private void requireQuestion(VerifyOptions options) { questionField(options) diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/VerifyOptions.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/VerifyOptions.java index 8ba0bb615a..45e1fd3aab 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/VerifyOptions.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/VerifyOptions.java @@ -1,15 +1,25 @@ package org.openmbee.opensysml; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.Objects; /** - * The question a verification asks: an evaluation of the declared or held values (the default), or - * a {@code holds} or {@code satisfiable} question the service's solvers answer — a question other - * than {@link #QUESTION_EVALUATE} needs {@code verification_questions}. + * What a verification asks and the values it asks it over: an evaluation of the declared or held + * values (the default), or a {@code holds} or {@code satisfiable} question the service's solvers + * answer — a question other than {@link #QUESTION_EVALUATE} needs {@code verification_questions}. + * The arguments bind the constraint's or requirement's {@code in} parameters, positionally in + * declaration order or by name; any binding needs {@code verification_arguments} and only an + * evaluation accepts one, since a solver question decides those values itself. * * @param question the question, as the service spells it + * @param arguments values binding the {@code in} parameters in declaration order + * @param namedArguments values binding {@code in} parameters by name */ -public record VerifyOptions(String question) { +public record VerifyOptions( + String question, List arguments, Map namedArguments) { /** The evaluation a verification asks unless a question names another. */ public static final String QUESTION_EVALUATE = "evaluate"; @@ -21,31 +31,84 @@ public record VerifyOptions(String question) { public static final String QUESTION_SATISFIABLE = "satisfiable"; /** - * Creates options asking a question. + * Creates options, copying the argument collections. * - * @param question the question, never {@code null} + * @param question the question + * @param arguments the positional arguments + * @param namedArguments the named arguments */ public VerifyOptions { Objects.requireNonNull(question, "question"); + Objects.requireNonNull(arguments, "arguments"); + Objects.requireNonNull(namedArguments, "namedArguments"); + arguments = List.copyOf(arguments); + namedArguments = Collections.unmodifiableMap(new LinkedHashMap<>(namedArguments)); } /** - * The default options: an evaluation. + * Creates options asking a question with no arguments. * - * @return options asking {@link #QUESTION_EVALUATE} + * @param question the question + */ + public VerifyOptions(String question) { + this(question, List.of(), Map.of()); + } + + /** + * The evaluation, with no arguments. + * + * @return the default options */ public static VerifyOptions defaults() { return new VerifyOptions(QUESTION_EVALUATE); } /** - * Options asking one question. + * Creates options asking a question. * - * @param question the question: one of {@link #QUESTION_EVALUATE}, {@link #QUESTION_HOLDS} or - * {@link #QUESTION_SATISFIABLE} - * @return options asking it + * @param question the question, as the service spells it + * @return the options */ public static VerifyOptions asking(String question) { return new VerifyOptions(question); } + + /** + * The same options with these positional arguments. + * + * @param arguments the arguments, in parameter order + * @return the options + */ + public VerifyOptions withArguments(List arguments) { + return new VerifyOptions(question, arguments, namedArguments); + } + + /** + * The same options with these positional arguments. + * + * @param arguments the arguments, in parameter order + * @return the options + */ + public VerifyOptions withArguments(Value... arguments) { + return withArguments(List.of(arguments)); + } + + /** + * The same options with these named arguments. + * + * @param namedArguments the arguments by parameter name + * @return the options + */ + public VerifyOptions withNamedArguments(Map namedArguments) { + return new VerifyOptions(question, arguments, namedArguments); + } + + /** + * Whether any argument is bound. + * + * @return true when a positional or named argument is present + */ + public boolean bindsArguments() { + return !arguments.isEmpty() || !namedArguments.isEmpty(); + } } diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/ParseFileRequest.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/ParseFileRequest.java index b0a40d75d5..a4de05b2c8 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/ParseFileRequest.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/ParseFileRequest.java @@ -206,7 +206,7 @@ public java.lang.String getContent() { * * string content_hash = 3 [json_name = "contentHash", deprecated = true]; * @deprecated sysml.ParseFileRequest.content_hash is deprecated. - * See sysml.proto;l=626 + * See sysml.proto;l=638 * @return The contentHash. */ @java.lang.Override @@ -230,7 +230,7 @@ public java.lang.String getContent() { * * string content_hash = 3 [json_name = "contentHash", deprecated = true]; * @deprecated sysml.ParseFileRequest.content_hash is deprecated. - * See sysml.proto;l=626 + * See sysml.proto;l=638 * @return The bytes for contentHash. */ @java.lang.Override @@ -942,7 +942,7 @@ public Builder setContentBytes( * * string content_hash = 3 [json_name = "contentHash", deprecated = true]; * @deprecated sysml.ParseFileRequest.content_hash is deprecated. - * See sysml.proto;l=626 + * See sysml.proto;l=638 * @return The contentHash. */ @java.lang.Deprecated public java.lang.String getContentHash() { @@ -965,7 +965,7 @@ public Builder setContentBytes( * * string content_hash = 3 [json_name = "contentHash", deprecated = true]; * @deprecated sysml.ParseFileRequest.content_hash is deprecated. - * See sysml.proto;l=626 + * See sysml.proto;l=638 * @return The bytes for contentHash. */ @java.lang.Deprecated public com.google.protobuf.ByteString @@ -989,7 +989,7 @@ public Builder setContentBytes( * * string content_hash = 3 [json_name = "contentHash", deprecated = true]; * @deprecated sysml.ParseFileRequest.content_hash is deprecated. - * See sysml.proto;l=626 + * See sysml.proto;l=638 * @param value The contentHash to set. * @return This builder for chaining. */ @@ -1009,7 +1009,7 @@ public Builder setContentBytes( * * string content_hash = 3 [json_name = "contentHash", deprecated = true]; * @deprecated sysml.ParseFileRequest.content_hash is deprecated. - * See sysml.proto;l=626 + * See sysml.proto;l=638 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearContentHash() { @@ -1026,7 +1026,7 @@ public Builder setContentBytes( * * string content_hash = 3 [json_name = "contentHash", deprecated = true]; * @deprecated sysml.ParseFileRequest.content_hash is deprecated. - * See sysml.proto;l=626 + * See sysml.proto;l=638 * @param value The bytes for contentHash to set. * @return This builder for chaining. */ diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/ParseFileRequestOrBuilder.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/ParseFileRequestOrBuilder.java index 34379d3385..5c7f719976 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/ParseFileRequestOrBuilder.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/ParseFileRequestOrBuilder.java @@ -52,7 +52,7 @@ public interface ParseFileRequestOrBuilder extends * * string content_hash = 3 [json_name = "contentHash", deprecated = true]; * @deprecated sysml.ParseFileRequest.content_hash is deprecated. - * See sysml.proto;l=626 + * See sysml.proto;l=638 * @return The contentHash. */ @java.lang.Deprecated java.lang.String getContentHash(); @@ -64,7 +64,7 @@ public interface ParseFileRequestOrBuilder extends * * string content_hash = 3 [json_name = "contentHash", deprecated = true]; * @deprecated sysml.ParseFileRequest.content_hash is deprecated. - * See sysml.proto;l=626 + * See sysml.proto;l=638 * @return The bytes for contentHash. */ @java.lang.Deprecated com.google.protobuf.ByteString diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/Sysml.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/Sysml.java index 2e6a260966..98b706a0a3 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/Sysml.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/Sysml.java @@ -46,6 +46,11 @@ public static void registerAllExtensions( static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_sysml_VerifyConstraintRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_sysml_VerifyConstraintRequest_NamedArgumentsEntry_descriptor; + static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_sysml_VerifyConstraintRequest_NamedArgumentsEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_sysml_VerifyConstraintResponse_descriptor; static final @@ -56,6 +61,11 @@ public static void registerAllExtensions( static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_sysml_VerifyRequirementRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_sysml_VerifyRequirementRequest_NamedArgumentsEntry_descriptor; + static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_sysml_VerifyRequirementRequest_NamedArgumentsEntry_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_sysml_VerificationVerdict_descriptor; static final @@ -789,735 +799,746 @@ public static void registerAllExtensions( "value\030\002 \001(\0132\014.sysml.ValueR\005value\022\022\n\004unit" + "\030\003 \001(\tR\004unit\022\024\n\005exact\030\004 \001(\tR\005exact\"K\n\005Bo" + "und\022\022\n\004name\030\001 \001(\tR\004name\022\024\n\005limit\030\002 \001(\003R\005" + - "limit\022\030\n\007reached\030\003 \001(\010R\007reached\"\265\001\n\027Veri" + + "limit\022\030\n\007reached\030\003 \001(\010R\007reached\"\217\003\n\027Veri" + "fyConstraintRequest\022\035\n\nmodel_hash\030\001 \001(\tR" + "\tmodelHash\022\033\n\tsymbol_id\030\002 \001(\tR\010symbolId\022" + "*\n\021subject_symbol_id\030\003 \001(\tR\017subjectSymbo" + "lId\022\026\n\006engine\030\004 \001(\tR\006engine\022\032\n\010question\030" + - "\005 \001(\tR\010question\"\276\001\n\030VerifyConstraintResp" + - "onse\022(\n\007verdict\030\001 \001(\0132\016.sysml.VerdictR\007v" + - "erdict\022-\n\tinstances\030\002 \003(\0132\017.sysml.Instan" + - "ceR\tinstances\022\024\n\005error\030\003 \001(\tR\005error\0223\n\013d" + - "iagnostics\030\004 \003(\0132\021.sysml.DiagnosticR\013dia" + - "gnostics\"\266\001\n\030VerifyRequirementRequest\022\035\n" + - "\nmodel_hash\030\001 \001(\tR\tmodelHash\022\033\n\tsymbol_i" + - "d\030\002 \001(\tR\010symbolId\022*\n\021subject_symbol_id\030\003" + - " \001(\tR\017subjectSymbolId\022\026\n\006engine\030\004 \001(\tR\006e" + - "ngine\022\032\n\010question\030\005 \001(\tR\010question\"\233\001\n\023Ve" + - "rificationVerdict\022\027\n\007case_id\030\001 \001(\tR\006case" + - "Id\022\022\n\004kind\030\002 \001(\tR\004kind\022\026\n\006detail\030\003 \001(\tR\006" + - "detail\022\030\n\007subcase\030\004 \001(\010R\007subcase\022%\n\016requ" + - "irement_id\030\005 \001(\tR\rrequirementId\"\220\002\n\031Veri" + - "fyRequirementResponse\022(\n\007verdict\030\001 \001(\0132\016" + - ".sysml.VerdictR\007verdict\022-\n\tinstances\030\002 \003" + - "(\0132\017.sysml.InstanceR\tinstances\022\024\n\005error\030" + - "\003 \001(\tR\005error\0223\n\013diagnostics\030\004 \003(\0132\021.sysm" + - "l.DiagnosticR\013diagnostics\022O\n\025verificatio" + - "n_verdicts\030\005 \003(\0132\032.sysml.VerificationVer" + - "dictR\024verificationVerdicts\"\213\001\n\031VerifySat" + - "isfactionRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmo" + - "delHash\022\033\n\tsymbol_id\030\002 \001(\tR\010symbolId\022\026\n\006" + - "engine\030\003 \001(\tR\006engine\022\032\n\010question\030\004 \001(\tR\010" + - "question\"\320\002\n\032VerifySatisfactionResponse\022" + - "*\n\010verdicts\030\001 \003(\0132\016.sysml.VerdictR\010verdi" + - "cts\022-\n\tinstances\030\002 \003(\0132\017.sysml.InstanceR" + - "\tinstances\022\024\n\005error\030\003 \001(\tR\005error\0223\n\013diag" + - "nostics\030\004 \003(\0132\021.sysml.DiagnosticR\013diagno" + - "stics\022;\n\016failure_reason\030\005 \001(\0162\024.sysml.Fa" + - "ilureReasonR\rfailureReason\022O\n\025verificati" + - "on_verdicts\030\006 \003(\0132\032.sysml.VerificationVe" + - "rdictR\024verificationVerdicts\"m\n\027ValidateI" + - "nstanceRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmode" + - "lHash\022\033\n\tsymbol_id\030\002 \001(\tR\010symbolId\022\026\n\006en" + - "gine\030\003 \001(\tR\006engine\"\222\003\n\030ValidateInstanceR" + - "esponse\022*\n\010verdicts\030\001 \003(\0132\016.sysml.Verdic" + - "tR\010verdicts\022(\n\007summary\030\002 \001(\0132\016.sysml.Ver" + - "dictR\007summary\022-\n\tinstances\030\003 \003(\0132\017.sysml" + - ".InstanceR\tinstances\022\024\n\005error\030\004 \001(\tR\005err" + - "or\0223\n\013diagnostics\030\005 \003(\0132\021.sysml.Diagnost" + - "icR\013diagnostics\022;\n\016failure_reason\030\006 \001(\0162" + - "\024.sysml.FailureReasonR\rfailureReason\022O\n\025" + - "verification_verdicts\030\007 \003(\0132\032.sysml.Veri" + - "ficationVerdictR\024verificationVerdicts\022\030\n" + - "\007bounded\030\010 \001(\010R\007bounded\"\225\001\n\023EvaluateCalc" + - "Request\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022\033" + - "\n\tsymbol_id\030\002 \001(\tR\010symbolId\022*\n\targuments" + - "\030\003 \003(\0132\014.sysml.ValueR\targuments\022\026\n\006engin" + - "e\030\004 \001(\tR\006engine\"\313\002\n\024EvaluateCalcResponse" + - "\022$\n\006result\030\001 \001(\0132\014.sysml.ValueR\006result\022+" + - "\n\007outputs\030\002 \003(\0132\021.sysml.CalcOutputR\007outp" + - "uts\022\024\n\005error\030\003 \001(\tR\005error\0223\n\013diagnostics" + - "\030\004 \003(\0132\021.sysml.DiagnosticR\013diagnostics\022;" + - "\n\016failure_reason\030\005 \001(\0162\024.sysml.FailureRe" + - "asonR\rfailureReason\022\026\n\006engine\030\006 \001(\tR\006eng" + - "ine\022\032\n\010strength\030\007 \001(\tR\010strength\022$\n\006bound" + - "s\030\010 \003(\0132\014.sysml.BoundR\006bounds\"D\n\nCalcOut" + - "put\022\022\n\004name\030\001 \001(\tR\004name\022\"\n\005value\030\002 \001(\0132\014" + - ".sysml.ValueR\005value\"\311\001\n\016CaseEvaluation\022\037" + - "\n\013function_id\030\001 \001(\tR\nfunctionId\022*\n\targum" + - "ents\030\002 \003(\0132\014.sysml.ValueR\targuments\022$\n\006r" + - "esult\030\003 \001(\0132\014.sysml.ValueR\006result\022\024\n\005err" + - "or\030\004 \001(\tR\005error\022\032\n\010selected\030\005 \001(\010R\010selec" + - "ted\022\022\n\004tied\030\006 \001(\010R\004tied\"\205\003\n\022RunAnalysisR" + - "equest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022\033\n" + - "\tsymbol_id\030\002 \001(\tR\010symbolId\022*\n\021subject_sy" + - "mbol_id\030\003 \001(\tR\017subjectSymbolId\022*\n\targume" + - "nts\030\004 \003(\0132\014.sysml.ValueR\targuments\022V\n\017na" + - "med_arguments\030\005 \003(\0132-.sysml.RunAnalysisR" + - "equest.NamedArgumentsEntryR\016namedArgumen" + - "ts\022\032\n\010schedule\030\006 \001(\tR\010schedule\022\026\n\006engine" + - "\030\007 \001(\tR\006engine\032O\n\023NamedArgumentsEntry\022\020\n" + - "\003key\030\001 \001(\tR\003key\022\"\n\005value\030\002 \001(\0132\014.sysml.V" + - "alueR\005value:\0028\001\"\361\004\n\023RunAnalysisResponse\022" + - "+\n\007outputs\030\001 \003(\0132\021.sysml.CalcOutputR\007out" + - "puts\022*\n\010verdicts\030\002 \003(\0132\016.sysml.VerdictR\010" + - "verdicts\022-\n\tinstances\030\003 \003(\0132\017.sysml.Inst" + - "anceR\tinstances\022\024\n\005error\030\004 \001(\tR\005error\0223\n" + - "\013diagnostics\030\005 \003(\0132\021.sysml.DiagnosticR\013d" + - "iagnostics\022;\n\016failure_reason\030\006 \001(\0162\024.sys" + - "ml.FailureReasonR\rfailureReason\022O\n\025verif" + - "ication_verdicts\030\007 \003(\0132\032.sysml.Verificat" + - "ionVerdictR\024verificationVerdicts\022*\n\010outc" + - "omes\030\010 \003(\0132\016.sysml.OutcomeR\010outcomes\022:\n\013" + - "exploration\030\t \001(\0132\030.sysml.ExplorationSta" + - "tusR\013exploration\0227\n\013evaluations\030\n \003(\0132\025." + - "sysml.CaseEvaluationR\013evaluations\022\026\n\006eng" + - "ine\030\013 \001(\tR\006engine\022\032\n\010strength\030\014 \001(\tR\010str" + - "ength\022$\n\006bounds\030\r \003(\0132\014.sysml.BoundR\006bou" + - "nds\"6\n\020ProbabilityRange\022\020\n\003min\030\001 \001(\001R\003mi" + - "n\022\020\n\003max\030\002 \001(\001R\003max\"\307\003\n\007Outcome\0225\n\007outpu" + - "ts\030\001 \003(\0132\033.sysml.Outcome.OutputsEntryR\007o" + - "utputs\022\037\n\013final_state\030\002 \001(\tR\nfinalState\022" + - "%\n\016states_visited\030\003 \003(\tR\rstatesVisited\022\024" + - "\n\005error\030\004 \001(\tR\005error\022&\n\016linearizations\030\005" + - " \001(\005R\016linearizations\022\030\n\007witness\030\006 \003(\tR\007w" + - "itness\0223\n\013diagnostics\030\007 \003(\0132\021.sysml.Diag" + - "nosticR\013diagnostics\022 \n\013probability\030\010 \001(\001" + - "R\013probability\022D\n\021probability_range\030\t \001(\013" + - "2\027.sysml.ProbabilityRangeR\020probabilityRa" + - "nge\032H\n\014OutputsEntry\022\020\n\003key\030\001 \001(\tR\003key\022\"\n" + - "\005value\030\002 \001(\0132\014.sysml.ValueR\005value:\0028\001\"\231\002" + - "\n\021ExplorationStatus\022\032\n\010complete\030\001 \001(\010R\010c" + - "omplete\022\022\n\004runs\030\002 \001(\005R\004runs\022\037\n\013budgets_h" + - "it\030\003 \003(\tR\nbudgetsHit\022\037\n\013runs_budget\030\004 \001(" + - "\005R\nrunsBudget\022!\n\014depth_budget\030\005 \001(\005R\013dep" + - "thBudget\022:\n\031probabilities_lower_bound\030\006 " + - "\001(\010R\027probabilitiesLowerBound\0223\n\025failed_l" + - "inearizations\030\007 \001(\005R\024failedLinearization" + - "s\"\024\n\022ListEnginesRequest\"\373\002\n\nEngineInfo\022\022" + - "\n\004name\030\001 \001(\tR\004name\022\034\n\tauthority\030\002 \001(\tR\ta" + - "uthority\022\030\n\007answers\030\003 \003(\tR\007answers\022\026\n\006bo" + - "unds\030\004 \003(\tR\006bounds\022\030\n\007process\030\005 \001(\tR\007pro" + - "cess\022#\n\rprocess_found\030\006 \001(\tR\014processFoun" + - "d\022\024\n\005ready\030\007 \001(\010R\005ready\022 \n\013unavailable\030\010" + - " \001(\tR\013unavailable\022\022\n\004kind\030\t \001(\tR\004kind\022\032\n" + - "\010protocol\030\n \001(\tR\010protocol\022\026\n\006source\030\013 \001(" + - "\tR\006source\022\030\n\007command\030\014 \001(\tR\007command\022\030\n\007v" + - "ersion\030\r \001(\tR\007version\022\026\n\006served\030\016 \001(\010R\006s" + - "erved\"B\n\023ListEnginesResponse\022+\n\007engines\030" + - "\001 \003(\0132\021.sysml.EngineInfoR\007engines\"\311\001\n\020Pa" + - "rseFileRequest\022\035\n\tfile_path\030\001 \001(\tH\000R\010fil" + - "ePath\022\032\n\007content\030\002 \001(\tH\000R\007content\022%\n\014con" + - "tent_hash\030\003 \001(\tB\002\030\001R\013contentHash\022\032\n\010lang" + - "uage\030\004 \001(\tR\010language\022-\n\022strict_conforman" + - "ce\030\005 \001(\010R\021strictConformanceB\010\n\006source\"\205\001" + - "\n\016SourceDocument\022\035\n\tfile_path\030\001 \001(\tH\000R\010f" + - "ilePath\022\032\n\007content\030\002 \001(\tH\000R\007content\022\032\n\010l" + - "anguage\030\003 \001(\tR\010language\022\022\n\004name\030\004 \001(\tR\004n" + - "ameB\010\n\006source\"\241\001\n\023ParseSourcesRequest\0223\n" + - "\tdocuments\030\001 \003(\0132\025.sysml.SourceDocumentR" + - "\tdocuments\022-\n\022strict_conformance\030\002 \001(\010R\021" + - "strictConformance\022&\n\017base_model_hash\030\003 \001" + - "(\tR\rbaseModelHash\"\305\001\n\024ParseSourcesRespon" + - "se\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022\'\n\005roo" + - "ts\030\002 \003(\0132\021.sysml.SymbolInfoR\005roots\0223\n\013di" + - "agnostics\030\003 \003(\0132\021.sysml.DiagnosticR\013diag" + - "nostics\022\024\n\005error\030\004 \001(\tR\005error\022\032\n\010affecte" + - "d\030\005 \003(\tR\010affected\"\244\001\n\021ParseFileResponse\022" + - "\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022%\n\004root\030\002" + - " \001(\0132\021.sysml.SymbolInfoR\004root\0223\n\013diagnos" + - "tics\030\003 \003(\0132\021.sysml.DiagnosticR\013diagnosti" + - "cs\022\024\n\005error\030\004 \001(\tR\005error\"N\n\020GetSymbolReq" + + "\005 \001(\tR\010question\022*\n\targuments\030\006 \003(\0132\014.sys" + + "ml.ValueR\targuments\022[\n\017named_arguments\030\007" + + " \003(\01322.sysml.VerifyConstraintRequest.Nam" + + "edArgumentsEntryR\016namedArguments\032O\n\023Name" + + "dArgumentsEntry\022\020\n\003key\030\001 \001(\tR\003key\022\"\n\005val" + + "ue\030\002 \001(\0132\014.sysml.ValueR\005value:\0028\001\"\276\001\n\030Ve" + + "rifyConstraintResponse\022(\n\007verdict\030\001 \001(\0132" + + "\016.sysml.VerdictR\007verdict\022-\n\tinstances\030\002 " + + "\003(\0132\017.sysml.InstanceR\tinstances\022\024\n\005error" + + "\030\003 \001(\tR\005error\0223\n\013diagnostics\030\004 \003(\0132\021.sys" + + "ml.DiagnosticR\013diagnostics\"\221\003\n\030VerifyReq" + + "uirementRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmod" + + "elHash\022\033\n\tsymbol_id\030\002 \001(\tR\010symbolId\022*\n\021s" + + "ubject_symbol_id\030\003 \001(\tR\017subjectSymbolId\022" + + "\026\n\006engine\030\004 \001(\tR\006engine\022\032\n\010question\030\005 \001(" + + "\tR\010question\022*\n\targuments\030\006 \003(\0132\014.sysml.V" + + "alueR\targuments\022\\\n\017named_arguments\030\007 \003(\013" + + "23.sysml.VerifyRequirementRequest.NamedA" + + "rgumentsEntryR\016namedArguments\032O\n\023NamedAr" + + "gumentsEntry\022\020\n\003key\030\001 \001(\tR\003key\022\"\n\005value\030" + + "\002 \001(\0132\014.sysml.ValueR\005value:\0028\001\"\233\001\n\023Verif" + + "icationVerdict\022\027\n\007case_id\030\001 \001(\tR\006caseId\022" + + "\022\n\004kind\030\002 \001(\tR\004kind\022\026\n\006detail\030\003 \001(\tR\006det" + + "ail\022\030\n\007subcase\030\004 \001(\010R\007subcase\022%\n\016require" + + "ment_id\030\005 \001(\tR\rrequirementId\"\220\002\n\031VerifyR" + + "equirementResponse\022(\n\007verdict\030\001 \001(\0132\016.sy" + + "sml.VerdictR\007verdict\022-\n\tinstances\030\002 \003(\0132" + + "\017.sysml.InstanceR\tinstances\022\024\n\005error\030\003 \001" + + "(\tR\005error\0223\n\013diagnostics\030\004 \003(\0132\021.sysml.D" + + "iagnosticR\013diagnostics\022O\n\025verification_v" + + "erdicts\030\005 \003(\0132\032.sysml.VerificationVerdic" + + "tR\024verificationVerdicts\"\213\001\n\031VerifySatisf" + + "actionRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodel" + + "Hash\022\033\n\tsymbol_id\030\002 \001(\tR\010symbolId\022\026\n\006eng" + + "ine\030\003 \001(\tR\006engine\022\032\n\010question\030\004 \001(\tR\010que" + + "stion\"\320\002\n\032VerifySatisfactionResponse\022*\n\010" + + "verdicts\030\001 \003(\0132\016.sysml.VerdictR\010verdicts" + + "\022-\n\tinstances\030\002 \003(\0132\017.sysml.InstanceR\tin" + + "stances\022\024\n\005error\030\003 \001(\tR\005error\0223\n\013diagnos" + + "tics\030\004 \003(\0132\021.sysml.DiagnosticR\013diagnosti" + + "cs\022;\n\016failure_reason\030\005 \001(\0162\024.sysml.Failu" + + "reReasonR\rfailureReason\022O\n\025verification_" + + "verdicts\030\006 \003(\0132\032.sysml.VerificationVerdi" + + "ctR\024verificationVerdicts\"m\n\027ValidateInst" + + "anceRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHa" + + "sh\022\033\n\tsymbol_id\030\002 \001(\tR\010symbolId\022\026\n\006engin" + + "e\030\003 \001(\tR\006engine\"\222\003\n\030ValidateInstanceResp" + + "onse\022*\n\010verdicts\030\001 \003(\0132\016.sysml.VerdictR\010" + + "verdicts\022(\n\007summary\030\002 \001(\0132\016.sysml.Verdic" + + "tR\007summary\022-\n\tinstances\030\003 \003(\0132\017.sysml.In" + + "stanceR\tinstances\022\024\n\005error\030\004 \001(\tR\005error\022" + + "3\n\013diagnostics\030\005 \003(\0132\021.sysml.DiagnosticR" + + "\013diagnostics\022;\n\016failure_reason\030\006 \001(\0162\024.s" + + "ysml.FailureReasonR\rfailureReason\022O\n\025ver" + + "ification_verdicts\030\007 \003(\0132\032.sysml.Verific" + + "ationVerdictR\024verificationVerdicts\022\030\n\007bo" + + "unded\030\010 \001(\010R\007bounded\"\225\001\n\023EvaluateCalcReq" + "uest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022\033\n\ts" + - "ymbol_id\030\002 \001(\tR\010symbolId\"Q\n\016SymbolRespon" + - "se\022)\n\006symbol\030\001 \001(\0132\021.sysml.SymbolInfoR\006s" + - "ymbol\022\024\n\005error\030\002 \001(\tR\005error\"3\n\022Diagnosti" + - "csRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash" + - "\"`\n\023DiagnosticsResponse\0223\n\013diagnostics\030\001" + - " \003(\0132\021.sysml.DiagnosticR\013diagnostics\022\024\n\005" + - "error\030\002 \001(\tR\005error\"\250\001\n\017EvaluateRequest\022\035" + - "\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022\036\n\nexpress" + - "ion\030\002 \001(\tR\nexpression\022*\n\021context_symbol_" + - "id\030\003 \001(\tR\017contextSymbolId\022*\n\021subject_sym" + - "bol_id\030\004 \001(\tR\017subjectSymbolId\"\203\001\n\020Evalua" + - "teResponse\022$\n\006result\030\001 \001(\0132\014.sysml.Value" + - "R\006result\022\024\n\005error\030\002 \001(\tR\005error\0223\n\013diagno" + - "stics\030\003 \003(\0132\021.sysml.DiagnosticR\013diagnost" + - "ics\"\357\001\n\010Instance\022\016\n\002id\030\001 \001(\003R\002id\022$\n\016type" + - "_symbol_id\030\002 \001(\tR\014typeSymbolId\022I\n\016featur" + - "e_values\030\004 \003(\0132\".sysml.Instance.FeatureV" + - "aluesEntryR\rfeatureValues\032U\n\022FeatureValu" + - "esEntry\022\020\n\003key\030\001 \001(\tR\003key\022)\n\005value\030\002 \001(\013" + - "2\023.sysml.FeatureValueR\005value:\0028\001J\004\010\003\020\004R\005" + - "slots\"\265\001\n\014FeatureValue\022!\n\014feature_name\030\001" + - " \001(\tR\013featureName\022\"\n\005value\030\002 \001(\0132\014.sysml" + - ".ValueR\005value\022$\n\006values\030\003 \003(\0132\014.sysml.Va" + - "lueR\006values\022\"\n\014materialized\030\004 \001(\010R\014mater" + - "ialized\022\024\n\005error\030\005 \001(\tR\005error\"P\n\022Instant" + - "iateRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHa" + - "sh\022\033\n\tsymbol_id\030\002 \001(\tR\010symbolId\"\274\001\n\023Inst" + - "antiateResponse\022+\n\010instance\030\001 \001(\0132\017.sysm" + - "l.InstanceR\010instance\022\024\n\005error\030\002 \001(\tR\005err" + - "or\0223\n\013diagnostics\030\003 \003(\0132\021.sysml.Diagnost" + - "icR\013diagnostics\022-\n\tinstances\030\004 \003(\0132\017.sys" + - "ml.InstanceR\tinstances\"\265\002\n\024ExecuteAction" + - "Request\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022(" + - "\n\020action_symbol_id\030\002 \001(\tR\016actionSymbolId" + - "\022?\n\006inputs\030\003 \003(\0132\'.sysml.ExecuteActionRe" + - "quest.InputsEntryR\006inputs\022\032\n\010schedule\030\004 " + - "\001(\tR\010schedule\022.\n\023performer_symbol_id\030\005 \001" + - "(\tR\021performerSymbolId\032G\n\013InputsEntry\022\020\n\003" + - "key\030\001 \001(\tR\003key\022\"\n\005value\030\002 \001(\0132\014.sysml.Va" + - "lueR\005value:\0028\001\"\270\004\n\025ExecuteActionResponse" + - "\022C\n\007outputs\030\001 \003(\0132).sysml.ExecuteActionR" + - "esponse.OutputsEntryR\007outputs\022\024\n\005error\030\002" + - " \001(\tR\005error\0223\n\013diagnostics\030\003 \003(\0132\021.sysml" + - ".DiagnosticR\013diagnostics\022*\n\010outcomes\030\004 \003" + - "(\0132\016.sysml.OutcomeR\010outcomes\022:\n\013explorat" + - "ion\030\005 \001(\0132\030.sysml.ExplorationStatusR\013exp" + - "loration\022\035\n\nfinal_time\030\006 \001(\001R\tfinalTime\022" + - "h\n\024performer_attributes\030\007 \003(\01325.sysml.Ex" + - "ecuteActionResponse.PerformerAttributesE" + - "ntryR\023performerAttributes\032H\n\014OutputsEntr" + - "y\022\020\n\003key\030\001 \001(\tR\003key\022\"\n\005value\030\002 \001(\0132\014.sys" + - "ml.ValueR\005value:\0028\001\032T\n\030PerformerAttribut" + - "esEntry\022\020\n\003key\030\001 \001(\tR\003key\022\"\n\005value\030\002 \001(\013" + - "2\014.sysml.ValueR\005value:\0028\001\"\345\001\n\023ExecuteSta" + - "teRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash" + - "\0225\n\027state_machine_symbol_id\030\002 \001(\tR\024state" + - "MachineSymbolId\022\026\n\006events\030\003 \003(\tR\006events\022" + - "\032\n\010schedule\030\004 \001(\tR\010schedule\022.\n\023performer" + - "_symbol_id\030\005 \001(\tR\021performerSymbolId\022\024\n\005t" + - "race\030\006 \001(\010R\005trace\"\203\004\n\024ExecuteStateRespon" + - "se\022%\n\016states_visited\030\001 \003(\tR\rstatesVisite" + - "d\022R\n\rfinal_context\030\002 \003(\0132-.sysml.Execute" + - "StateResponse.FinalContextEntryR\014finalCo" + - "ntext\022\024\n\005error\030\003 \001(\tR\005error\0223\n\013diagnosti" + - "cs\030\004 \003(\0132\021.sysml.DiagnosticR\013diagnostics" + - "\022*\n\010outcomes\030\005 \003(\0132\016.sysml.OutcomeR\010outc" + - "omes\022:\n\013exploration\030\006 \001(\0132\030.sysml.Explor" + - "ationStatusR\013exploration\022\035\n\nfinal_time\030\007" + - " \001(\001R\tfinalTime\022*\n\005trace\030\010 \003(\0132\024.sysml.D" + - "ocumentEventR\005trace\022#\n\rtrace_dropped\030\t \001" + - "(\005R\014traceDropped\032M\n\021FinalContextEntry\022\020\n" + - "\003key\030\001 \001(\tR\003key\022\"\n\005value\030\002 \001(\0132\014.sysml.V" + - "alueR\005value:\0028\001\"\201\003\n\016ConvertRequest\022\035\n\tfi" + - "le_path\030\001 \001(\tH\000R\010filePath\022\032\n\007content\030\002 \001" + - "(\tH\000R\007content\022\037\n\nmodel_hash\030\006 \001(\tH\000R\tmod" + - "elHash\022\037\n\013from_format\030\003 \001(\tR\nfromFormat\022" + - "\033\n\tto_format\030\004 \001(\tR\010toFormat\0224\n\026tolerate" + - "_syntax_errors\030\005 \001(\010R\024tolerateSyntaxErro" + - "rs\022\027\n\007id_form\030\007 \001(\tR\006idForm\022\034\n\tdocuments" + - "\030\010 \003(\tR\tdocuments\022\030\n\007compact\030\t \001(\010R\007comp" + - "act\022!\n\014omit_derived\030\n \001(\010R\013omitDerived\022!" + - "\n\014keep_derived\030\013 \003(\tR\013keepDerivedB\010\n\006sou" + - "rce\"\211\002\n\017ConvertResponse\022\030\n\007content\030\001 \001(\t" + - "R\007content\022\037\n\013from_format\030\002 \001(\tR\nfromForm" + - "at\022\033\n\tto_format\030\003 \001(\tR\010toFormat\022\024\n\005error" + - "\030\004 \001(\tR\005error\0223\n\013diagnostics\030\005 \003(\0132\021.sys" + - "ml.DiagnosticR\013diagnostics\022\"\n\014experiment" + - "al\030\006 \001(\010R\014experimental\022/\n\023experimental_n" + - "otice\030\007 \001(\tR\022experimentalNotice\"\331\002\n\016Migr" + - "ateRequest\022\035\n\tfile_path\030\001 \001(\tH\000R\010filePat" + - "h\022\032\n\007content\030\002 \001(\014H\000R\007content\022\037\n\013from_fo" + - "rmat\030\003 \001(\tR\nfromFormat\022\033\n\tto_format\030\004 \001(" + - "\tR\010toFormat\022\026\n\006report\030\005 \001(\010R\006report\022\030\n\007r" + - "esults\030\006 \001(\010R\007results\022!\n\013layout_path\030\007 \001" + - "(\tH\001R\nlayoutPath\022\'\n\016layout_content\030\010 \001(\t" + - "H\001R\rlayoutContent\022$\n\016image_base_url\030\t \001(" + - "\tR\014imageBaseUrl\022\026\n\006strict\030\n \001(\010R\006strictB" + - "\010\n\006sourceB\010\n\006layout\"\312\002\n\017MigrateResponse\022" + - "\030\n\007content\030\001 \001(\tR\007content\022\037\n\013from_format" + - "\030\002 \001(\tR\nfromFormat\022\033\n\tto_format\030\003 \001(\tR\010t" + - "oFormat\022\024\n\005error\030\004 \001(\tR\005error\022\"\n\014experim" + - "ental\030\005 \001(\010R\014experimental\022/\n\023experimenta" + - "l_notice\030\006 \001(\tR\022experimentalNotice\022.\n\006re" + - "port\030\007 \001(\0132\026.sysml.MigrationReportR\006repo" + - "rt\022\030\n\007results\030\010 \001(\tR\007results\022*\n\005files\030\t " + - "\003(\0132\024.sysml.MigrationFileR\005files\"\226\002\n\017Mig" + - "rationReport\022\026\n\006source\030\001 \001(\tR\006source\022\032\n\010" + - "exporter\030\002 \001(\tR\010exporter\022\030\n\007summary\030\003 \001(" + - "\tR\007summary\022\026\n\006mapped\030\004 \001(\005R\006mapped\022\"\n\014ap" + - "proximated\030\005 \001(\005R\014approximated\022\032\n\010unmapp" + - "ed\030\006 \001(\005R\010unmapped\022\030\n\007skipped\030\007 \001(\005R\007ski" + - "pped\022/\n\007entries\030\010 \003(\0132\025.sysml.MigrationE" + - "ntryR\007entries\022\022\n\004text\030\t \001(\tR\004text\"\216\001\n\016Mi" + - "grationEntry\022\016\n\002id\030\001 \001(\tR\002id\022\022\n\004kind\030\002 \001" + - "(\tR\004kind\022\022\n\004name\030\003 \001(\tR\004name\022\026\n\006target\030\004" + - " \001(\tR\006target\022\030\n\007verdict\030\005 \001(\tR\007verdict\022\022" + - "\n\004note\030\006 \001(\tR\004note\"=\n\rMigrationFile\022\022\n\004p" + - "ath\030\001 \001(\tR\004path\022\030\n\007content\030\002 \001(\014R\007conten" + - "t\"\257\001\n\021ApplyEditsRequest\022\035\n\nmodel_hash\030\001 " + - "\001(\tR\tmodelHash\0224\n\noperations\030\002 \003(\0132\024.sys" + - "ml.EditOperationR\noperations\022\032\n\010document" + - "\030\003 \001(\tR\010document\022)\n\020accept_documents\030\004 \001" + - "(\010R\017acceptDocuments\"\234\010\n\rEditOperation\0222\n" + - "\tset_value\030\001 \001(\0132\023.sysml.SetValueEditH\000R" + - "\010setValue\022+\n\006rename\030\002 \001(\0132\021.sysml.Rename" + - "EditH\000R\006rename\0225\n\nadd_member\030\003 \001(\0132\024.sys" + - "ml.AddMemberEditH\000R\taddMember\022+\n\006delete\030" + - "\004 \001(\0132\021.sysml.DeleteEditH\000R\006delete\022%\n\004mo" + - "ve\030\005 \001(\0132\017.sysml.MoveEditH\000R\004move\022A\n\016add" + - "_connection\030\006 \001(\0132\030.sysml.AddConnectionE" + - "ditH\000R\raddConnection\0228\n\013add_satisfy\030\007 \001(" + - "\0132\025.sysml.AddSatisfyEditH\000R\naddSatisfy\022c" + - "\n\032add_requirement_constraint\030\010 \001(\0132#.sys" + - "ml.AddRequirementConstraintEditH\000R\030addRe" + - "quirementConstraint\022A\n\016add_transition\030\t " + - "\001(\0132\030.sysml.AddTransitionEditH\000R\raddTran" + - "sition\0225\n\nadd_import\030\n \001(\0132\024.sysml.AddIm" + - "portEditH\000R\taddImport\022J\n\021add_documentati" + - "on\030\013 \001(\0132\033.sysml.AddDocumentationEditH\000R" + - "\020addDocumentation\0225\n\nadd_verify\030\014 \001(\0132\024." + - "sysml.AddVerifyEditH\000R\taddVerify\022;\n\014add_" + - "metadata\030\r \001(\0132\026.sysml.AddMetadataEditH\000" + - "R\013addMetadata\022;\n\014add_sequence\030\016 \001(\0132\026.sy" + - "sml.AddSequenceEditH\000R\013addSequence\022N\n\023ad" + - "d_metadata_prefix\030\017 \001(\0132\034.sysml.AddMetad" + - "ataPrefixEditH\000R\021addMetadataPrefix\0228\n\013ad" + - "d_comment\030\020 \001(\0132\025.sysml.AddCommentEditH\000" + - "R\naddComment\022/\n\010add_note\030\022 \001(\0132\022.sysml.A" + - "ddNoteEditH\000R\007addNoteB\013\n\toperation\"\241\003\n\rA" + - "ddMemberEdit\022\024\n\005owner\030\001 \001(\tR\005owner\022\022\n\004ki" + - "nd\030\002 \001(\tR\004kind\022\022\n\004name\030\003 \001(\tR\004name\022\022\n\004ty" + - "pe\030\004 \001(\tR\004type\022\"\n\014multiplicity\030\005 \001(\tR\014mu" + - "ltiplicity\022\024\n\005value\030\006 \001(\tR\005value\022 \n\013spec" + - "ializes\030\007 \003(\tR\013specializes\022\037\n\013is_abstrac" + - "t\030\010 \001(\010R\nisAbstract\022\034\n\tredefines\030\t \003(\tR\t" + - "redefines\022\035\n\nis_default\030\n \001(\010R\tisDefault" + - "\022\034\n\tdirection\030\013 \001(\tR\tdirection\022+\n\021metada" + - "ta_prefixes\030\016 \003(\tR\020metadataPrefixes\022\020\n\003d" + - "oc\030\014 \001(\tR\003doc\022\'\n\017body_expression\030\r \001(\tR\016" + - "bodyExpression\"\267\001\n\016AddSatisfyEdit\022\024\n\005own" + - "er\030\001 \001(\tR\005owner\022 \n\013requirement\030\002 \001(\tR\013re" + - "quirement\022-\n\022satisfying_feature\030\003 \001(\tR\021s" + - "atisfyingFeature\022\037\n\013is_asserted\030\004 \001(\010R\ni" + - "sAsserted\022\035\n\nis_negated\030\005 \001(\010R\tisNegated" + - "\"|\n\034AddRequirementConstraintEdit\022\024\n\005owne" + - "r\030\001 \001(\tR\005owner\022\022\n\004kind\030\002 \001(\tR\004kind\022\036\n\nex" + - "pression\030\003 \001(\tR\nexpression\022\022\n\004name\030\004 \001(\t" + - "R\004name\"\317\001\n\021AddTransitionEdit\022\024\n\005owner\030\001 " + - "\001(\tR\005owner\022\022\n\004name\030\002 \001(\tR\004name\022\026\n\006source" + - "\030\003 \001(\tR\006source\022\026\n\006target\030\004 \001(\tR\006target\022\030" + - "\n\007trigger\030\005 \001(\tR\007trigger\022\024\n\005guard\030\006 \001(\tR" + - "\005guard\022\026\n\006effect\030\007 \001(\tR\006effect\022\030\n\007initia" + - "l\030\010 \001(\010R\007initial\"G\n\rAddVerifyEdit\022\024\n\005own" + - "er\030\001 \001(\tR\005owner\022 \n\013requirement\030\002 \001(\tR\013re" + - "quirement\"F\n\024MetadataFeatureValue\022\030\n\007fea" + - "ture\030\001 \001(\tR\007feature\022\024\n\005value\030\002 \001(\tR\005valu" + - "e\"\311\001\n\017AddMetadataEdit\022\024\n\005owner\030\001 \001(\tR\005ow" + - "ner\022#\n\rmetadata_type\030\002 \001(\tR\014metadataType" + + "ymbol_id\030\002 \001(\tR\010symbolId\022*\n\targuments\030\003 " + + "\003(\0132\014.sysml.ValueR\targuments\022\026\n\006engine\030\004" + + " \001(\tR\006engine\"\313\002\n\024EvaluateCalcResponse\022$\n" + + "\006result\030\001 \001(\0132\014.sysml.ValueR\006result\022+\n\007o" + + "utputs\030\002 \003(\0132\021.sysml.CalcOutputR\007outputs" + + "\022\024\n\005error\030\003 \001(\tR\005error\0223\n\013diagnostics\030\004 " + + "\003(\0132\021.sysml.DiagnosticR\013diagnostics\022;\n\016f" + + "ailure_reason\030\005 \001(\0162\024.sysml.FailureReaso" + + "nR\rfailureReason\022\026\n\006engine\030\006 \001(\tR\006engine" + + "\022\032\n\010strength\030\007 \001(\tR\010strength\022$\n\006bounds\030\010" + + " \003(\0132\014.sysml.BoundR\006bounds\"D\n\nCalcOutput" + + "\022\022\n\004name\030\001 \001(\tR\004name\022\"\n\005value\030\002 \001(\0132\014.sy" + + "sml.ValueR\005value\"\311\001\n\016CaseEvaluation\022\037\n\013f" + + "unction_id\030\001 \001(\tR\nfunctionId\022*\n\targument" + + "s\030\002 \003(\0132\014.sysml.ValueR\targuments\022$\n\006resu" + + "lt\030\003 \001(\0132\014.sysml.ValueR\006result\022\024\n\005error\030" + + "\004 \001(\tR\005error\022\032\n\010selected\030\005 \001(\010R\010selected" + + "\022\022\n\004tied\030\006 \001(\010R\004tied\"\205\003\n\022RunAnalysisRequ" + + "est\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022\033\n\tsy" + + "mbol_id\030\002 \001(\tR\010symbolId\022*\n\021subject_symbo" + + "l_id\030\003 \001(\tR\017subjectSymbolId\022*\n\targuments" + + "\030\004 \003(\0132\014.sysml.ValueR\targuments\022V\n\017named" + + "_arguments\030\005 \003(\0132-.sysml.RunAnalysisRequ" + + "est.NamedArgumentsEntryR\016namedArguments\022" + + "\032\n\010schedule\030\006 \001(\tR\010schedule\022\026\n\006engine\030\007 " + + "\001(\tR\006engine\032O\n\023NamedArgumentsEntry\022\020\n\003ke" + + "y\030\001 \001(\tR\003key\022\"\n\005value\030\002 \001(\0132\014.sysml.Valu" + + "eR\005value:\0028\001\"\361\004\n\023RunAnalysisResponse\022+\n\007" + + "outputs\030\001 \003(\0132\021.sysml.CalcOutputR\007output" + + "s\022*\n\010verdicts\030\002 \003(\0132\016.sysml.VerdictR\010ver" + + "dicts\022-\n\tinstances\030\003 \003(\0132\017.sysml.Instanc" + + "eR\tinstances\022\024\n\005error\030\004 \001(\tR\005error\0223\n\013di" + + "agnostics\030\005 \003(\0132\021.sysml.DiagnosticR\013diag" + + "nostics\022;\n\016failure_reason\030\006 \001(\0162\024.sysml." + + "FailureReasonR\rfailureReason\022O\n\025verifica" + + "tion_verdicts\030\007 \003(\0132\032.sysml.Verification" + + "VerdictR\024verificationVerdicts\022*\n\010outcome" + + "s\030\010 \003(\0132\016.sysml.OutcomeR\010outcomes\022:\n\013exp" + + "loration\030\t \001(\0132\030.sysml.ExplorationStatus" + + "R\013exploration\0227\n\013evaluations\030\n \003(\0132\025.sys" + + "ml.CaseEvaluationR\013evaluations\022\026\n\006engine" + + "\030\013 \001(\tR\006engine\022\032\n\010strength\030\014 \001(\tR\010streng" + + "th\022$\n\006bounds\030\r \003(\0132\014.sysml.BoundR\006bounds" + + "\"6\n\020ProbabilityRange\022\020\n\003min\030\001 \001(\001R\003min\022\020" + + "\n\003max\030\002 \001(\001R\003max\"\307\003\n\007Outcome\0225\n\007outputs\030" + + "\001 \003(\0132\033.sysml.Outcome.OutputsEntryR\007outp" + + "uts\022\037\n\013final_state\030\002 \001(\tR\nfinalState\022%\n\016" + + "states_visited\030\003 \003(\tR\rstatesVisited\022\024\n\005e" + + "rror\030\004 \001(\tR\005error\022&\n\016linearizations\030\005 \001(" + + "\005R\016linearizations\022\030\n\007witness\030\006 \003(\tR\007witn" + + "ess\0223\n\013diagnostics\030\007 \003(\0132\021.sysml.Diagnos" + + "ticR\013diagnostics\022 \n\013probability\030\010 \001(\001R\013p" + + "robability\022D\n\021probability_range\030\t \001(\0132\027." + + "sysml.ProbabilityRangeR\020probabilityRange" + + "\032H\n\014OutputsEntry\022\020\n\003key\030\001 \001(\tR\003key\022\"\n\005va" + + "lue\030\002 \001(\0132\014.sysml.ValueR\005value:\0028\001\"\231\002\n\021E" + + "xplorationStatus\022\032\n\010complete\030\001 \001(\010R\010comp" + + "lete\022\022\n\004runs\030\002 \001(\005R\004runs\022\037\n\013budgets_hit\030" + + "\003 \003(\tR\nbudgetsHit\022\037\n\013runs_budget\030\004 \001(\005R\n" + + "runsBudget\022!\n\014depth_budget\030\005 \001(\005R\013depthB" + + "udget\022:\n\031probabilities_lower_bound\030\006 \001(\010" + + "R\027probabilitiesLowerBound\0223\n\025failed_line" + + "arizations\030\007 \001(\005R\024failedLinearizations\"\024" + + "\n\022ListEnginesRequest\"\373\002\n\nEngineInfo\022\022\n\004n" + + "ame\030\001 \001(\tR\004name\022\034\n\tauthority\030\002 \001(\tR\tauth" + + "ority\022\030\n\007answers\030\003 \003(\tR\007answers\022\026\n\006bound" + + "s\030\004 \003(\tR\006bounds\022\030\n\007process\030\005 \001(\tR\007proces" + + "s\022#\n\rprocess_found\030\006 \001(\tR\014processFound\022\024" + + "\n\005ready\030\007 \001(\010R\005ready\022 \n\013unavailable\030\010 \001(" + + "\tR\013unavailable\022\022\n\004kind\030\t \001(\tR\004kind\022\032\n\010pr" + + "otocol\030\n \001(\tR\010protocol\022\026\n\006source\030\013 \001(\tR\006" + + "source\022\030\n\007command\030\014 \001(\tR\007command\022\030\n\007vers" + + "ion\030\r \001(\tR\007version\022\026\n\006served\030\016 \001(\010R\006serv" + + "ed\"B\n\023ListEnginesResponse\022+\n\007engines\030\001 \003" + + "(\0132\021.sysml.EngineInfoR\007engines\"\311\001\n\020Parse" + + "FileRequest\022\035\n\tfile_path\030\001 \001(\tH\000R\010filePa" + + "th\022\032\n\007content\030\002 \001(\tH\000R\007content\022%\n\014conten" + + "t_hash\030\003 \001(\tB\002\030\001R\013contentHash\022\032\n\010languag" + + "e\030\004 \001(\tR\010language\022-\n\022strict_conformance\030" + + "\005 \001(\010R\021strictConformanceB\010\n\006source\"\205\001\n\016S" + + "ourceDocument\022\035\n\tfile_path\030\001 \001(\tH\000R\010file" + + "Path\022\032\n\007content\030\002 \001(\tH\000R\007content\022\032\n\010lang" + + "uage\030\003 \001(\tR\010language\022\022\n\004name\030\004 \001(\tR\004name" + + "B\010\n\006source\"\241\001\n\023ParseSourcesRequest\0223\n\tdo" + + "cuments\030\001 \003(\0132\025.sysml.SourceDocumentR\tdo" + + "cuments\022-\n\022strict_conformance\030\002 \001(\010R\021str" + + "ictConformance\022&\n\017base_model_hash\030\003 \001(\tR" + + "\rbaseModelHash\"\305\001\n\024ParseSourcesResponse\022" + + "\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022\'\n\005roots\030" + + "\002 \003(\0132\021.sysml.SymbolInfoR\005roots\0223\n\013diagn" + + "ostics\030\003 \003(\0132\021.sysml.DiagnosticR\013diagnos" + + "tics\022\024\n\005error\030\004 \001(\tR\005error\022\032\n\010affected\030\005" + + " \003(\tR\010affected\"\244\001\n\021ParseFileResponse\022\035\n\n" + + "model_hash\030\001 \001(\tR\tmodelHash\022%\n\004root\030\002 \001(" + + "\0132\021.sysml.SymbolInfoR\004root\0223\n\013diagnostic" + + "s\030\003 \003(\0132\021.sysml.DiagnosticR\013diagnostics\022" + + "\024\n\005error\030\004 \001(\tR\005error\"N\n\020GetSymbolReques" + + "t\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022\033\n\tsymb" + + "ol_id\030\002 \001(\tR\010symbolId\"Q\n\016SymbolResponse\022" + + ")\n\006symbol\030\001 \001(\0132\021.sysml.SymbolInfoR\006symb" + + "ol\022\024\n\005error\030\002 \001(\tR\005error\"3\n\022DiagnosticsR" + + "equest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\"`\n" + + "\023DiagnosticsResponse\0223\n\013diagnostics\030\001 \003(" + + "\0132\021.sysml.DiagnosticR\013diagnostics\022\024\n\005err" + + "or\030\002 \001(\tR\005error\"\250\001\n\017EvaluateRequest\022\035\n\nm" + + "odel_hash\030\001 \001(\tR\tmodelHash\022\036\n\nexpression" + + "\030\002 \001(\tR\nexpression\022*\n\021context_symbol_id\030" + + "\003 \001(\tR\017contextSymbolId\022*\n\021subject_symbol" + + "_id\030\004 \001(\tR\017subjectSymbolId\"\203\001\n\020EvaluateR" + + "esponse\022$\n\006result\030\001 \001(\0132\014.sysml.ValueR\006r" + + "esult\022\024\n\005error\030\002 \001(\tR\005error\0223\n\013diagnosti" + + "cs\030\003 \003(\0132\021.sysml.DiagnosticR\013diagnostics" + + "\"\357\001\n\010Instance\022\016\n\002id\030\001 \001(\003R\002id\022$\n\016type_sy" + + "mbol_id\030\002 \001(\tR\014typeSymbolId\022I\n\016feature_v" + + "alues\030\004 \003(\0132\".sysml.Instance.FeatureValu" + + "esEntryR\rfeatureValues\032U\n\022FeatureValuesE" + + "ntry\022\020\n\003key\030\001 \001(\tR\003key\022)\n\005value\030\002 \001(\0132\023." + + "sysml.FeatureValueR\005value:\0028\001J\004\010\003\020\004R\005slo" + + "ts\"\265\001\n\014FeatureValue\022!\n\014feature_name\030\001 \001(" + + "\tR\013featureName\022\"\n\005value\030\002 \001(\0132\014.sysml.Va" + + "lueR\005value\022$\n\006values\030\003 \003(\0132\014.sysml.Value" + + "R\006values\022\"\n\014materialized\030\004 \001(\010R\014material" + + "ized\022\024\n\005error\030\005 \001(\tR\005error\"P\n\022Instantiat" + + "eRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022" + + "\033\n\tsymbol_id\030\002 \001(\tR\010symbolId\"\274\001\n\023Instant" + + "iateResponse\022+\n\010instance\030\001 \001(\0132\017.sysml.I" + + "nstanceR\010instance\022\024\n\005error\030\002 \001(\tR\005error\022" + + "3\n\013diagnostics\030\003 \003(\0132\021.sysml.DiagnosticR" + + "\013diagnostics\022-\n\tinstances\030\004 \003(\0132\017.sysml." + + "InstanceR\tinstances\"\265\002\n\024ExecuteActionReq" + + "uest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022(\n\020a" + + "ction_symbol_id\030\002 \001(\tR\016actionSymbolId\022?\n" + + "\006inputs\030\003 \003(\0132\'.sysml.ExecuteActionReque" + + "st.InputsEntryR\006inputs\022\032\n\010schedule\030\004 \001(\t" + + "R\010schedule\022.\n\023performer_symbol_id\030\005 \001(\tR" + + "\021performerSymbolId\032G\n\013InputsEntry\022\020\n\003key" + + "\030\001 \001(\tR\003key\022\"\n\005value\030\002 \001(\0132\014.sysml.Value" + + "R\005value:\0028\001\"\270\004\n\025ExecuteActionResponse\022C\n" + + "\007outputs\030\001 \003(\0132).sysml.ExecuteActionResp" + + "onse.OutputsEntryR\007outputs\022\024\n\005error\030\002 \001(" + + "\tR\005error\0223\n\013diagnostics\030\003 \003(\0132\021.sysml.Di" + + "agnosticR\013diagnostics\022*\n\010outcomes\030\004 \003(\0132" + + "\016.sysml.OutcomeR\010outcomes\022:\n\013exploration" + + "\030\005 \001(\0132\030.sysml.ExplorationStatusR\013explor" + + "ation\022\035\n\nfinal_time\030\006 \001(\001R\tfinalTime\022h\n\024" + + "performer_attributes\030\007 \003(\01325.sysml.Execu" + + "teActionResponse.PerformerAttributesEntr" + + "yR\023performerAttributes\032H\n\014OutputsEntry\022\020" + + "\n\003key\030\001 \001(\tR\003key\022\"\n\005value\030\002 \001(\0132\014.sysml." + + "ValueR\005value:\0028\001\032T\n\030PerformerAttributesE" + + "ntry\022\020\n\003key\030\001 \001(\tR\003key\022\"\n\005value\030\002 \001(\0132\014." + + "sysml.ValueR\005value:\0028\001\"\345\001\n\023ExecuteStateR" + + "equest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\0225\n" + + "\027state_machine_symbol_id\030\002 \001(\tR\024stateMac" + + "hineSymbolId\022\026\n\006events\030\003 \003(\tR\006events\022\032\n\010" + + "schedule\030\004 \001(\tR\010schedule\022.\n\023performer_sy" + + "mbol_id\030\005 \001(\tR\021performerSymbolId\022\024\n\005trac" + + "e\030\006 \001(\010R\005trace\"\203\004\n\024ExecuteStateResponse\022" + + "%\n\016states_visited\030\001 \003(\tR\rstatesVisited\022R" + + "\n\rfinal_context\030\002 \003(\0132-.sysml.ExecuteSta" + + "teResponse.FinalContextEntryR\014finalConte" + + "xt\022\024\n\005error\030\003 \001(\tR\005error\0223\n\013diagnostics\030" + + "\004 \003(\0132\021.sysml.DiagnosticR\013diagnostics\022*\n" + + "\010outcomes\030\005 \003(\0132\016.sysml.OutcomeR\010outcome" + + "s\022:\n\013exploration\030\006 \001(\0132\030.sysml.Explorati" + + "onStatusR\013exploration\022\035\n\nfinal_time\030\007 \001(" + + "\001R\tfinalTime\022*\n\005trace\030\010 \003(\0132\024.sysml.Docu" + + "mentEventR\005trace\022#\n\rtrace_dropped\030\t \001(\005R" + + "\014traceDropped\032M\n\021FinalContextEntry\022\020\n\003ke" + + "y\030\001 \001(\tR\003key\022\"\n\005value\030\002 \001(\0132\014.sysml.Valu" + + "eR\005value:\0028\001\"\201\003\n\016ConvertRequest\022\035\n\tfile_" + + "path\030\001 \001(\tH\000R\010filePath\022\032\n\007content\030\002 \001(\tH" + + "\000R\007content\022\037\n\nmodel_hash\030\006 \001(\tH\000R\tmodelH" + + "ash\022\037\n\013from_format\030\003 \001(\tR\nfromFormat\022\033\n\t" + + "to_format\030\004 \001(\tR\010toFormat\0224\n\026tolerate_sy" + + "ntax_errors\030\005 \001(\010R\024tolerateSyntaxErrors\022" + + "\027\n\007id_form\030\007 \001(\tR\006idForm\022\034\n\tdocuments\030\010 " + + "\003(\tR\tdocuments\022\030\n\007compact\030\t \001(\010R\007compact" + + "\022!\n\014omit_derived\030\n \001(\010R\013omitDerived\022!\n\014k" + + "eep_derived\030\013 \003(\tR\013keepDerivedB\010\n\006source" + + "\"\211\002\n\017ConvertResponse\022\030\n\007content\030\001 \001(\tR\007c" + + "ontent\022\037\n\013from_format\030\002 \001(\tR\nfromFormat\022" + + "\033\n\tto_format\030\003 \001(\tR\010toFormat\022\024\n\005error\030\004 " + + "\001(\tR\005error\0223\n\013diagnostics\030\005 \003(\0132\021.sysml." + + "DiagnosticR\013diagnostics\022\"\n\014experimental\030" + + "\006 \001(\010R\014experimental\022/\n\023experimental_noti" + + "ce\030\007 \001(\tR\022experimentalNotice\"\331\002\n\016Migrate" + + "Request\022\035\n\tfile_path\030\001 \001(\tH\000R\010filePath\022\032" + + "\n\007content\030\002 \001(\014H\000R\007content\022\037\n\013from_forma" + + "t\030\003 \001(\tR\nfromFormat\022\033\n\tto_format\030\004 \001(\tR\010" + + "toFormat\022\026\n\006report\030\005 \001(\010R\006report\022\030\n\007resu" + + "lts\030\006 \001(\010R\007results\022!\n\013layout_path\030\007 \001(\tH" + + "\001R\nlayoutPath\022\'\n\016layout_content\030\010 \001(\tH\001R" + + "\rlayoutContent\022$\n\016image_base_url\030\t \001(\tR\014" + + "imageBaseUrl\022\026\n\006strict\030\n \001(\010R\006strictB\010\n\006" + + "sourceB\010\n\006layout\"\312\002\n\017MigrateResponse\022\030\n\007" + + "content\030\001 \001(\tR\007content\022\037\n\013from_format\030\002 " + + "\001(\tR\nfromFormat\022\033\n\tto_format\030\003 \001(\tR\010toFo" + + "rmat\022\024\n\005error\030\004 \001(\tR\005error\022\"\n\014experiment" + + "al\030\005 \001(\010R\014experimental\022/\n\023experimental_n" + + "otice\030\006 \001(\tR\022experimentalNotice\022.\n\006repor" + + "t\030\007 \001(\0132\026.sysml.MigrationReportR\006report\022" + + "\030\n\007results\030\010 \001(\tR\007results\022*\n\005files\030\t \003(\013" + + "2\024.sysml.MigrationFileR\005files\"\226\002\n\017Migrat" + + "ionReport\022\026\n\006source\030\001 \001(\tR\006source\022\032\n\010exp" + + "orter\030\002 \001(\tR\010exporter\022\030\n\007summary\030\003 \001(\tR\007" + + "summary\022\026\n\006mapped\030\004 \001(\005R\006mapped\022\"\n\014appro" + + "ximated\030\005 \001(\005R\014approximated\022\032\n\010unmapped\030" + + "\006 \001(\005R\010unmapped\022\030\n\007skipped\030\007 \001(\005R\007skippe" + + "d\022/\n\007entries\030\010 \003(\0132\025.sysml.MigrationEntr" + + "yR\007entries\022\022\n\004text\030\t \001(\tR\004text\"\216\001\n\016Migra" + + "tionEntry\022\016\n\002id\030\001 \001(\tR\002id\022\022\n\004kind\030\002 \001(\tR" + + "\004kind\022\022\n\004name\030\003 \001(\tR\004name\022\026\n\006target\030\004 \001(" + + "\tR\006target\022\030\n\007verdict\030\005 \001(\tR\007verdict\022\022\n\004n" + + "ote\030\006 \001(\tR\004note\"=\n\rMigrationFile\022\022\n\004path" + + "\030\001 \001(\tR\004path\022\030\n\007content\030\002 \001(\014R\007content\"\257" + + "\001\n\021ApplyEditsRequest\022\035\n\nmodel_hash\030\001 \001(\t" + + "R\tmodelHash\0224\n\noperations\030\002 \003(\0132\024.sysml." + + "EditOperationR\noperations\022\032\n\010document\030\003 " + + "\001(\tR\010document\022)\n\020accept_documents\030\004 \001(\010R" + + "\017acceptDocuments\"\234\010\n\rEditOperation\0222\n\tse" + + "t_value\030\001 \001(\0132\023.sysml.SetValueEditH\000R\010se" + + "tValue\022+\n\006rename\030\002 \001(\0132\021.sysml.RenameEdi" + + "tH\000R\006rename\0225\n\nadd_member\030\003 \001(\0132\024.sysml." + + "AddMemberEditH\000R\taddMember\022+\n\006delete\030\004 \001" + + "(\0132\021.sysml.DeleteEditH\000R\006delete\022%\n\004move\030" + + "\005 \001(\0132\017.sysml.MoveEditH\000R\004move\022A\n\016add_co" + + "nnection\030\006 \001(\0132\030.sysml.AddConnectionEdit" + + "H\000R\raddConnection\0228\n\013add_satisfy\030\007 \001(\0132\025" + + ".sysml.AddSatisfyEditH\000R\naddSatisfy\022c\n\032a" + + "dd_requirement_constraint\030\010 \001(\0132#.sysml." + + "AddRequirementConstraintEditH\000R\030addRequi" + + "rementConstraint\022A\n\016add_transition\030\t \001(\013" + + "2\030.sysml.AddTransitionEditH\000R\raddTransit" + + "ion\0225\n\nadd_import\030\n \001(\0132\024.sysml.AddImpor" + + "tEditH\000R\taddImport\022J\n\021add_documentation\030" + + "\013 \001(\0132\033.sysml.AddDocumentationEditH\000R\020ad" + + "dDocumentation\0225\n\nadd_verify\030\014 \001(\0132\024.sys" + + "ml.AddVerifyEditH\000R\taddVerify\022;\n\014add_met" + + "adata\030\r \001(\0132\026.sysml.AddMetadataEditH\000R\013a" + + "ddMetadata\022;\n\014add_sequence\030\016 \001(\0132\026.sysml" + + ".AddSequenceEditH\000R\013addSequence\022N\n\023add_m" + + "etadata_prefix\030\017 \001(\0132\034.sysml.AddMetadata" + + "PrefixEditH\000R\021addMetadataPrefix\0228\n\013add_c" + + "omment\030\020 \001(\0132\025.sysml.AddCommentEditH\000R\na" + + "ddComment\022/\n\010add_note\030\022 \001(\0132\022.sysml.AddN" + + "oteEditH\000R\007addNoteB\013\n\toperation\"\241\003\n\rAddM" + + "emberEdit\022\024\n\005owner\030\001 \001(\tR\005owner\022\022\n\004kind\030" + + "\002 \001(\tR\004kind\022\022\n\004name\030\003 \001(\tR\004name\022\022\n\004type\030" + + "\004 \001(\tR\004type\022\"\n\014multiplicity\030\005 \001(\tR\014multi" + + "plicity\022\024\n\005value\030\006 \001(\tR\005value\022 \n\013special" + + "izes\030\007 \003(\tR\013specializes\022\037\n\013is_abstract\030\010" + + " \001(\010R\nisAbstract\022\034\n\tredefines\030\t \003(\tR\tred" + + "efines\022\035\n\nis_default\030\n \001(\010R\tisDefault\022\034\n" + + "\tdirection\030\013 \001(\tR\tdirection\022+\n\021metadata_" + + "prefixes\030\016 \003(\tR\020metadataPrefixes\022\020\n\003doc\030" + + "\014 \001(\tR\003doc\022\'\n\017body_expression\030\r \001(\tR\016bod" + + "yExpression\"\267\001\n\016AddSatisfyEdit\022\024\n\005owner\030" + + "\001 \001(\tR\005owner\022 \n\013requirement\030\002 \001(\tR\013requi" + + "rement\022-\n\022satisfying_feature\030\003 \001(\tR\021sati" + + "sfyingFeature\022\037\n\013is_asserted\030\004 \001(\010R\nisAs" + + "serted\022\035\n\nis_negated\030\005 \001(\010R\tisNegated\"|\n" + + "\034AddRequirementConstraintEdit\022\024\n\005owner\030\001" + + " \001(\tR\005owner\022\022\n\004kind\030\002 \001(\tR\004kind\022\036\n\nexpre" + + "ssion\030\003 \001(\tR\nexpression\022\022\n\004name\030\004 \001(\tR\004n" + + "ame\"\317\001\n\021AddTransitionEdit\022\024\n\005owner\030\001 \001(\t" + + "R\005owner\022\022\n\004name\030\002 \001(\tR\004name\022\026\n\006source\030\003 " + + "\001(\tR\006source\022\026\n\006target\030\004 \001(\tR\006target\022\030\n\007t" + + "rigger\030\005 \001(\tR\007trigger\022\024\n\005guard\030\006 \001(\tR\005gu" + + "ard\022\026\n\006effect\030\007 \001(\tR\006effect\022\030\n\007initial\030\010" + + " \001(\010R\007initial\"G\n\rAddVerifyEdit\022\024\n\005owner\030" + + "\001 \001(\tR\005owner\022 \n\013requirement\030\002 \001(\tR\013requi" + + "rement\"F\n\024MetadataFeatureValue\022\030\n\007featur" + + "e\030\001 \001(\tR\007feature\022\024\n\005value\030\002 \001(\tR\005value\"\311" + + "\001\n\017AddMetadataEdit\022\024\n\005owner\030\001 \001(\tR\005owner" + + "\022#\n\rmetadata_type\030\002 \001(\tR\014metadataType\022\022\n" + + "\004name\030\003 \001(\tR\004name\022\024\n\005about\030\004 \003(\tR\005about\022" + + "3\n\006values\030\005 \003(\0132\033.sysml.MetadataFeatureV" + + "alueR\006values\022\034\n\tshorthand\030\006 \001(\010R\tshortha" + + "nd\"T\n\025AddMetadataPrefixEdit\022\026\n\006target\030\001 " + + "\001(\tR\006target\022#\n\rmetadata_type\030\002 \001(\tR\014meta" + + "dataType\"\276\001\n\rAddImportEdit\022\024\n\005owner\030\001 \001(" + + "\tR\005owner\022\036\n\nvisibility\030\002 \001(\tR\nvisibility" + + "\022\026\n\006target\030\003 \001(\tR\006target\022!\n\014is_recursive" + + "\030\004 \001(\010R\013isRecursive\022\"\n\ris_import_all\030\005 \001" + + "(\010R\013isImportAll\022\030\n\007filters\030\006 \003(\tR\007filter" + + "s\"\210\001\n\024AddDocumentationEdit\022\026\n\006target\030\001 \001" + + "(\tR\006target\022\022\n\004body\030\002 \001(\tR\004body\022\022\n\004name\030\003" + + " \001(\tR\004name\022\026\n\006locale\030\004 \001(\tR\006locale\022\030\n\007re" + + "place\030\005 \001(\010R\007replace\"|\n\016AddCommentEdit\022\024" + + "\n\005owner\030\001 \001(\tR\005owner\022\022\n\004body\030\002 \001(\tR\004body" + "\022\022\n\004name\030\003 \001(\tR\004name\022\024\n\005about\030\004 \003(\tR\005abo" + - "ut\0223\n\006values\030\005 \003(\0132\033.sysml.MetadataFeatu" + - "reValueR\006values\022\034\n\tshorthand\030\006 \001(\010R\tshor" + - "thand\"T\n\025AddMetadataPrefixEdit\022\026\n\006target" + - "\030\001 \001(\tR\006target\022#\n\rmetadata_type\030\002 \001(\tR\014m" + - "etadataType\"\276\001\n\rAddImportEdit\022\024\n\005owner\030\001" + - " \001(\tR\005owner\022\036\n\nvisibility\030\002 \001(\tR\nvisibil" + - "ity\022\026\n\006target\030\003 \001(\tR\006target\022!\n\014is_recurs" + - "ive\030\004 \001(\010R\013isRecursive\022\"\n\ris_import_all\030" + - "\005 \001(\010R\013isImportAll\022\030\n\007filters\030\006 \003(\tR\007fil" + - "ters\"\210\001\n\024AddDocumentationEdit\022\026\n\006target\030" + - "\001 \001(\tR\006target\022\022\n\004body\030\002 \001(\tR\004body\022\022\n\004nam" + - "e\030\003 \001(\tR\004name\022\026\n\006locale\030\004 \001(\tR\006locale\022\030\n" + - "\007replace\030\005 \001(\010R\007replace\"|\n\016AddCommentEdi" + - "t\022\024\n\005owner\030\001 \001(\tR\005owner\022\022\n\004body\030\002 \001(\tR\004b" + - "ody\022\022\n\004name\030\003 \001(\tR\004name\022\024\n\005about\030\004 \003(\tR\005" + - "about\022\026\n\006locale\030\005 \001(\tR\006locale\"9\n\013AddNote" + - "Edit\022\026\n\006target\030\001 \001(\tR\006target\022\022\n\004text\030\002 \001" + - "(\tR\004text\"\326\003\n\017AddSequenceEdit\022\024\n\005owner\030\001 " + - "\001(\tR\005owner\022\030\n\007keyword\030\002 \001(\tR\007keyword\022\020\n\003" + - "ref\030\003 \001(\tR\003ref\022\037\n\013member_kind\030\004 \001(\tR\nmem" + - "berKind\022\037\n\013member_name\030\005 \001(\tR\nmemberName" + - "\022\022\n\004type\030\006 \001(\tR\004type\022\024\n\005after\030\007 \001(\tR\005aft" + - "er\022\034\n\tcondition\030\010 \001(\tR\tcondition\022\024\n\005valu" + - "e\030\t \001(\tR\005value\022\026\n\006target\030\n \001(\tR\006target\022\020" + - "\n\003via\030\013 \001(\tR\003via\022\024\n\005until\030\014 \001(\tR\005until\022*" + - "\n\004body\030\r \003(\0132\026.sysml.AddSequenceEditR\004bo" + - "dy\0223\n\telse_body\030\016 \003(\0132\026.sysml.AddSequenc" + - "eEditR\010elseBody\022\"\n\014multiplicity\030\017 \001(\tR\014m" + - "ultiplicity\022\034\n\tparameter\030\020 \001(\tR\tparamete" + - "r\"\227\001\n\021AddConnectionEdit\022\024\n\005owner\030\001 \001(\tR\005" + - "owner\022\022\n\004kind\030\002 \001(\tR\004kind\022\031\n\010from_end\030\003 " + - "\001(\tR\007fromEnd\022\025\n\006to_end\030\004 \001(\tR\005toEnd\022\022\n\004n" + - "ame\030\005 \001(\tR\004name\022\022\n\004type\030\006 \001(\tR\004type\">\n\nD" + - "eleteEdit\022\026\n\006target\030\001 \001(\tR\006target\022\030\n\007cas" + - "cade\030\002 \001(\010R\007cascade\"8\n\010MoveEdit\022\026\n\006targe" + - "t\030\001 \001(\tR\006target\022\024\n\005owner\030\002 \001(\tR\005owner\"<\n" + - "\014SetValueEdit\022\026\n\006target\030\001 \001(\tR\006target\022\024\n" + - "\005value\030\002 \001(\tR\005value\"?\n\nRenameEdit\022\026\n\006tar" + - "get\030\001 \001(\tR\006target\022\031\n\010new_name\030\002 \001(\tR\007new" + - "Name\"\350\002\n\022ApplyEditsResponse\022\030\n\007content\030\001" + - " \001(\tR\007content\022,\n\007applied\030\002 \003(\0132\022.sysml.A" + - "ppliedEditR\007applied\022\024\n\005error\030\003 \001(\tR\005erro" + - "r\022,\n\007failure\030\004 \001(\0162\022.sysml.EditFailureR\007" + - "failure\0223\n\013diagnostics\030\005 \003(\0132\021.sysml.Dia" + - "gnosticR\013diagnostics\022-\n\022referring_elemen" + - "ts\030\006 \003(\tR\021referringElements\0223\n\tdocuments" + - "\030\007 \003(\0132\025.sysml.EditedDocumentR\tdocuments" + - "\022-\n\treferrers\030\010 \003(\0132\017.sysml.ReferrerR\tre" + - "ferrers\">\n\016EditedDocument\022\022\n\004name\030\001 \001(\tR" + - "\004name\022\030\n\007content\030\002 \001(\tR\007content\":\n\010Refer" + - "rer\022\022\n\004name\030\001 \001(\tR\004name\022\032\n\010document\030\002 \001(" + - "\tR\010document\"\320\001\n\013AppliedEdit\022\'\n\017operation", - "_index\030\001 \001(\005R\016operationIndex\022\026\n\006target\030\002" + - " \001(\tR\006target\022\026\n\006offset\030\003 \001(\005R\006offset\022\026\n\006" + - "length\030\004 \001(\005R\006length\022\031\n\010old_text\030\005 \001(\tR\007" + - "oldText\022\031\n\010new_text\030\006 \001(\tR\007newText\022\032\n\010do" + - "cument\030\007 \001(\tR\010document\"\375\003\n\nSymbolInfo\022\016\n" + - "\002id\030\001 \001(\tR\002id\022\022\n\004name\030\002 \001(\tR\004name\022\022\n\004kin" + - "d\030\003 \001(\tR\004kind\022;\n\010metadata\030\004 \003(\0132\037.sysml." + - "SymbolInfo.MetadataEntryR\010metadata\022\033\n\tch" + - "ild_ids\030\005 \003(\tR\010childIds\0224\n\nattributes\030\006 " + - "\003(\0132\024.sysml.AttributeInfoR\nattributes\022,\n" + - "\ttype_info\030\007 \001(\0132\017.sysml.TypeInfoR\010typeI" + - "nfo\022;\n\014multiplicity\030\010 \001(\0132\027.sysml.Multip" + - "licityInfoR\014multiplicity\022?\n\017specializati" + - "ons\030\t \003(\0132\025.sysml.SpecializationR\017specia" + - "lizations\022>\n\033withheld_library_attributes" + - "\030\n \001(\005R\031withheldLibraryAttributes\032;\n\rMet" + - "adataEntry\022\020\n\003key\030\001 \001(\tR\003key\022\024\n\005value\030\002 " + - "\001(\tR\005value:\0028\001\"~\n\016Specialization\022\022\n\004kind" + - "\030\001 \001(\tR\004kind\022\032\n\010declared\030\002 \001(\tR\010declared" + - "\022\033\n\ttarget_id\030\003 \001(\tR\010targetId\022\037\n\013target_" + - "kind\030\004 \001(\tR\ntargetKind\"\345\001\n\010TypeInfo\022\032\n\010d" + - "eclared\030\001 \001(\tR\010declared\022\037\n\013resolved_id\030\002" + - " \001(\tR\nresolvedId\022#\n\rresolved_kind\030\003 \001(\tR" + - "\014resolvedKind\022\034\n\tprimitive\030\004 \001(\tR\tprimit" + - "ive\022)\n\020primitive_source\030\005 \001(\tR\017primitive" + - "Source\022\032\n\010quantity\030\006 \001(\010R\010quantity\022\022\n\004un" + - "it\030\007 \001(\tR\004unit\">\n\020MultiplicityInfo\022\024\n\005lo" + - "wer\030\001 \001(\tR\005lower\022\024\n\005upper\030\002 \001(\tR\005upper\"o" + - "\n\rAttributeInfo\022\022\n\004name\030\001 \001(\tR\004name\022\022\n\004t" + - "ype\030\002 \001(\tR\004type\022\"\n\005value\030\003 \001(\0132\014.sysml.V" + - "alueR\005value\022\022\n\004unit\030\004 \001(\tR\004unit\"\205\010\n\005Valu" + - "e\022\035\n\tint_value\030\001 \001(\003H\000R\010intValue\022\037\n\nreal" + - "_value\030\002 \001(\001H\000R\trealValue\022\037\n\nbool_value\030" + - "\003 \001(\010H\000R\tboolValue\022#\n\014string_value\030\004 \001(\t" + - "H\000R\013stringValue\022!\n\013instance_id\030\005 \001(\003H\000R\n" + - "instanceId\0222\n\010sequence\030\006 \001(\0132\024.sysml.Val" + - "ueSequenceH\000R\010sequence\022\024\n\004null\030\007 \001(\tH\000R\004" + - "null\022-\n\010quantity\030\010 \001(\0132\017.sysml.QuantityH" + - "\000R\010quantity\0227\n\014enum_literal\030\t \001(\0132\022.sysm" + - "l.EnumLiteralH\000R\013enumLiteral\022\026\n\005unset\030\n " + - "\001(\010H\000R\005unset\022*\n\007complex\030\013 \001(\0132\016.sysml.Co" + - "mplexH\000R\007complex\022$\n\005array\030\014 \001(\0132\014.sysml." + - "ArrayH\000R\005array\022\'\n\006vector\030\r \001(\0132\r.sysml.V" + - "ectorH\000R\006vector\022@\n\017vector_quantity\030\016 \001(\013" + - "2\025.sysml.VectorQuantityH\000R\016vectorQuantit" + - "y\022@\n\017measurement_ref\030\017 \001(\0132\025.sysml.Measu" + - "rementRefH\000R\016measurementRef\022\034\n\010infinity\030" + - "\020 \001(\010H\000R\010infinity\022-\n\010function\030\021 \001(\0132\017.sy" + - "sml.FunctionH\000R\010function\022#\n\003set\030\022 \001(\0132\017." + - "sysml.ValueSetH\000R\003set\022@\n\017tensor_quantity" + - "\030\023 \001(\0132\025.sysml.TensorQuantityH\000R\016tensorQ" + - "uantity\0223\n\nmetaobject\030\024 \001(\0132\021.sysml.Meta" + - "objectH\000R\nmetaobject\0229\n\014undetermined\030\025 \001" + - "(\0132\023.sysml.UndeterminedH\000R\014undetermined\022" + - "$\n\rbig_int_value\030\026 \001(\tH\000R\013bigIntValue\0228\n" + - "\016rational_value\030\027 \001(\0132\017.sysml.RationalH\000" + - "R\rrationalValueB\006\n\004kind\"J\n\010Rational\022\034\n\tn" + - "umerator\030\001 \001(\tR\tnumerator\022 \n\013denominator" + - "\030\002 \001(\tR\013denominator\"N\n\nMetaobject\022\035\n\nele" + - "ment_id\030\001 \001(\tR\telementId\022!\n\014metaclass_id" + - "\030\002 \001(\tR\013metaclassId\"U\n\014Undetermined\022\026\n\006r" + - "eason\030\001 \001(\tR\006reason\022-\n\005count\030\002 \001(\0132\027.sys" + - "ml.MultiplicityInfoR\005count\"<\n\010Function\022\027" + - "\n\007calc_id\030\001 \001(\tR\006calcId\022\027\n\007self_id\030\002 \001(\003" + - "R\006selfId\"4\n\010ValueSet\022(\n\010elements\030\001 \003(\0132\014" + - ".sysml.ValueR\010elements\"a\n\016TensorQuantity" + - "\022\036\n\ndimensions\030\001 \003(\003R\ndimensions\022/\n\ncomp" + - "onents\030\002 \003(\0132\017.sysml.QuantityR\ncomponent" + - "s\"Q\n\005Array\022\036\n\ndimensions\030\001 \003(\003R\ndimensio" + - "ns\022(\n\010elements\030\002 \003(\0132\014.sysml.ValueR\010elem" + - "ents\"6\n\006Vector\022,\n\ncomponents\030\001 \003(\0132\014.sys" + - "ml.ValueR\ncomponents\"A\n\016VectorQuantity\022/" + - "\n\ncomponents\030\001 \003(\0132\017.sysml.QuantityR\ncom" + - "ponents\";\n\007Complex\022\022\n\004real\030\001 \001(\001R\004real\022\034" + - "\n\timaginary\030\002 \001(\001R\timaginary\"\213\001\n\013EnumLit" + - "eral\022\035\n\nliteral_id\030\001 \001(\tR\tliteralId\022%\n\016e" + - "numeration_id\030\002 \001(\tR\renumerationId\022\022\n\004na" + - "me\030\003 \001(\tR\004name\022\"\n\005value\030\004 \001(\0132\014.sysml.Va" + - "lueR\005value\"9\n\rValueSequence\022(\n\010elements\030" + - "\001 \003(\0132\014.sysml.ValueR\010elements\"\231\002\n\010Quanti" + - "ty\022%\n\rint_magnitude\030\001 \001(\003H\000R\014intMagnitud" + - "e\022\'\n\016real_magnitude\030\002 \001(\001H\000R\rrealMagnitu" + - "de\022,\n\021big_int_magnitude\030\005 \001(\tH\000R\017bigIntM" + - "agnitude\022@\n\022rational_magnitude\030\006 \001(\0132\017.s" + - "ysml.RationalH\000R\021rationalMagnitude\022\022\n\004un" + - "it\030\003 \001(\tR\004unit\022,\n\tunit_term\030\004 \001(\0132\017.sysm" + - "l.UnitTermR\010unitTermB\013\n\tmagnitude\"k\n\016Mea" + - "surementRef\022\022\n\004unit\030\001 \001(\tR\004unit\022,\n\tunit_" + - "term\030\002 \001(\0132\017.sysml.UnitTermR\010unitTerm\022\027\n" + - "\007unit_id\030\003 \001(\tR\006unitId\"q\n\010UnitTerm\022\033\n\tsc" + - "ale_num\030\001 \001(\001R\010scaleNum\022\033\n\tscale_den\030\002 \001" + - "(\001R\010scaleDen\022+\n\007factors\030\003 \003(\0132\021.sysml.Un" + - "itFactorR\007factors\"A\n\nUnitFactor\022\027\n\007unit_" + - "id\030\001 \001(\tR\006unitId\022\032\n\010exponent\030\002 \001(\001R\010expo" + - "nent\"w\n\nDiagnostic\022\032\n\010severity\030\001 \001(\tR\010se" + - "verity\022\030\n\007message\030\002 \001(\tR\007message\022\037\n\004span" + - "\030\003 \001(\0132\013.sysml.SpanR\004span\022\022\n\004code\030\004 \001(\tR" + - "\004code\"\212\001\n\004Span\022\022\n\004file\030\001 \001(\tR\004file\022\035\n\nst" + - "art_line\030\002 \001(\005R\tstartLine\022\033\n\tstart_col\030\003" + - " \001(\005R\010startCol\022\031\n\010end_line\030\004 \001(\005R\007endLin" + - "e\022\027\n\007end_col\030\005 \001(\005R\006endCol\"\023\n\021ServerInfo" + - "Request\"R\n\022ServerInfoResponse\022\030\n\007version" + - "\030\001 \001(\tR\007version\022\"\n\014capabilities\030\002 \003(\tR\014c" + - "apabilities\"p\n\014QueryRequest\022\035\n\nmodel_has" + - "h\030\001 \001(\tR\tmodelHash\022\"\n\005query\030\002 \001(\0132\014.sysm" + - "l.QueryR\005query\022\035\n\noslc_query\030\003 \001(\tR\toslc" + - "Query\"F\n\rQueryResponse\0225\n\010elements\030\001 \003(\013" + - "2\031.sysml.QueryResultElementR\010elements\"^\n" + - "\005Query\022\024\n\005scope\030\001 \003(\tR\005scope\022\026\n\006select\030\002" + - " \003(\tR\006select\022\'\n\005where\030\003 \001(\0132\021.sysml.Cons" + - "traintR\005where\"\222\001\n\nConstraint\022:\n\tprimitiv" + - "e\030\001 \001(\0132\032.sysml.PrimitiveConstraintH\000R\tp" + - "rimitive\022:\n\tcomposite\030\002 \001(\0132\032.sysml.Comp" + - "ositeConstraintH\000R\tcompositeB\014\n\nconstrai" + - "nt\"\227\001\n\023PrimitiveConstraint\022\030\n\007inverse\030\001 " + - "\001(\010R\007inverse\022\032\n\010property\030\002 \001(\tR\010property" + - "\0224\n\010operator\030\003 \001(\0162\030.sysml.PrimitiveOper" + - "atorR\010operator\022\024\n\005value\030\004 \003(\tR\005value\"~\n\023" + - "CompositeConstraint\0224\n\010operator\030\001 \001(\0162\030." + - "sysml.CompositeOperatorR\010operator\0221\n\ncon" + - "straint\030\002 \003(\0132\021.sysml.ConstraintR\nconstr" + - "aint\"\302\001\n\022QueryResultElement\022\016\n\002id\030\001 \001(\tR" + - "\002id\022\022\n\004type\030\002 \001(\tR\004type\022I\n\nproperties\030\003 " + - "\003(\0132).sysml.QueryResultElement.Propertie" + - "sEntryR\nproperties\032=\n\017PropertiesEntry\022\020\n" + - "\003key\030\001 \001(\tR\003key\022\024\n\005value\030\002 \001(\tR\005value:\0028" + - "\001\"\220\001\n\nSweepRange\022\034\n\tparameter\030\001 \001(\tR\tpar" + - "ameter\022\"\n\005start\030\002 \001(\0132\014.sysml.ValueR\005sta" + - "rt\022\036\n\003end\030\003 \001(\0132\014.sysml.ValueR\003end\022 \n\004st" + - "ep\030\004 \001(\0132\014.sysml.ValueR\004step\"\274\003\n\017RunSwee" + - "pRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022" + - "\033\n\tsymbol_id\030\002 \001(\tR\010symbolId\022*\n\021subject_" + - "symbol_id\030\003 \001(\tR\017subjectSymbolId\022*\n\targu" + - "ments\030\004 \003(\0132\014.sysml.ValueR\targuments\022S\n\017" + - "named_arguments\030\005 \003(\0132*.sysml.RunSweepRe" + - "quest.NamedArgumentsEntryR\016namedArgument" + - "s\022)\n\006ranges\030\006 \003(\0132\021.sysml.SweepRangeR\006ra" + - "nges\022\030\n\007samples\030\007 \001(\003R\007samples\022\022\n\004seed\030\010" + - " \001(\004R\004seed\022\026\n\006engine\030\t \001(\tR\006engine\032O\n\023Na" + - "medArgumentsEntry\022\020\n\003key\030\001 \001(\tR\003key\022\"\n\005v" + - "alue\030\002 \001(\0132\014.sysml.ValueR\005value:\0028\001\"\301\002\n\010" + - "SweepRow\022)\n\006inputs\030\001 \003(\0132\021.sysml.CalcOut" + - "putR\006inputs\022+\n\007outputs\030\002 \003(\0132\021.sysml.Cal" + - "cOutputR\007outputs\022*\n\010verdicts\030\003 \003(\0132\016.sys" + - "ml.VerdictR\010verdicts\022%\n\016elapsed_micros\030\004" + - " \001(\003R\relapsedMicros\022\024\n\005error\030\005 \001(\tR\005erro" + - "r\022;\n\016failure_reason\030\006 \001(\0162\024.sysml.Failur" + - "eReasonR\rfailureReason\0227\n\013evaluations\030\007 " + - "\003(\0132\025.sysml.CaseEvaluationR\013evaluations\"" + - "\226\003\n\020RunSweepResponse\022#\n\004rows\030\001 \003(\0132\017.sys" + - "ml.SweepRowR\004rows\022\036\n\nparameters\030\002 \003(\tR\np" + - "arameters\022\030\n\007sampled\030\003 \001(\010R\007sampled\022\022\n\004s" + - "eed\030\004 \001(\004R\004seed\022\024\n\005error\030\005 \001(\tR\005error\0223\n" + - "\013diagnostics\030\006 \003(\0132\021.sysml.DiagnosticR\013d" + - "iagnostics\022;\n\016failure_reason\030\007 \001(\0162\024.sys" + - "ml.FailureReasonR\rfailureReason\022-\n\tinsta" + - "nces\030\010 \003(\0132\017.sysml.InstanceR\tinstances\022\026" + - "\n\006engine\030\t \001(\tR\006engine\022\032\n\010strength\030\n \001(\t" + - "R\010strength\022$\n\006bounds\030\013 \003(\0132\014.sysml.Bound" + - "R\006bounds\"\214\001\n\027RunDocumentQueryRequest\022\035\n\n" + - "model_hash\030\001 \001(\tR\tmodelHash\022\031\n\010query_id\030" + - "\002 \001(\tR\007queryId\0227\n\010bindings\030\003 \003(\0132\033.sysml" + - ".DocumentQueryBindingR\010bindings\"b\n\024Docum" + - "entQueryBinding\022\034\n\tparameter\030\001 \001(\tR\tpara" + - "meter\022,\n\006values\030\002 \003(\0132\024.sysml.DocumentVa" + - "lueR\006values\"\317\004\n\rDocumentValue\022\037\n\nelement" + - "_id\030\001 \001(\tH\000R\telementId\022#\n\014string_value\030\002" + - " \001(\tH\000R\013stringValue\022\035\n\tint_value\030\003 \001(\003H\000" + - "R\010intValue\022\037\n\nreal_value\030\004 \001(\001H\000R\trealVa" + - "lue\022\037\n\nbool_value\030\005 \001(\010H\000R\tboolValue\022\034\n\010" + - "infinity\030\006 \001(\010H\000R\010infinity\022-\n\010quantity\030\010" + - " \001(\0132\017.sysml.QuantityH\000R\010quantity\0222\n\007ver" + - "dict\030\t \001(\0132\026.sysml.DocumentVerdictH\000R\007ve" + - "rdict\022/\n\006object\030\n \001(\0132\025.sysml.DocumentOb" + - "jectH\000R\006object\022,\n\005state\030\013 \001(\0132\024.sysml.Do" + - "cumentStateH\000R\005state\022,\n\005event\030\014 \001(\0132\024.sy" + - "sml.DocumentEventH\000R\005event\022$\n\rbig_int_va" + - "lue\030\r \001(\tH\000R\013bigIntValue\0228\n\016rational_val" + - "ue\030\016 \001(\0132\017.sysml.RationalH\000R\rrationalVal" + - "ue\022!\n\014element_type\030\007 \001(\tR\013elementTypeB\006\n" + - "\004kind\"u\n\016DocumentObject\022\037\n\013instance_id\030\001" + - " \001(\003R\ninstanceId\022\022\n\004path\030\002 \001(\tR\004path\022.\n\007" + - "element\030\003 \001(\0132\024.sysml.DocumentValueR\007ele" + - "ment\"\365\001\n\017DocumentVerdict\0222\n\tassertion\030\001 " + - "\001(\0132\024.sysml.DocumentValueR\tassertion\022\022\n\004" + - "kind\030\002 \001(\tR\004kind\022\022\n\004text\030\003 \001(\tR\004text\022\022\n\004" + - "path\030\004 \001(\tR\004path\022\030\n\007verdict\030\005 \001(\tR\007verdi" + - "ct\022\034\n\tcondition\030\006 \001(\tR\tcondition\022\026\n\006reas" + - "on\030\007 \001(\tR\006reason\022\"\n\014verification\030\010 \003(\tR\014" + - "verification\"\355\001\n\rDocumentState\022-\n\006object" + - "\030\001 \001(\0132\025.sysml.DocumentObjectR\006object\022\030\n" + - "\007machine\030\002 \001(\tR\007machine\022\022\n\004name\030\003 \001(\tR\004n" + - "ame\022\035\n\nstate_path\030\004 \001(\tR\tstatePath\022*\n\005st" + - "ate\030\005 \001(\0132\024.sysml.DocumentValueR\005state\022\026" + - "\n\006region\030\006 \001(\tR\006region\022\034\n\tenclosing\030\007 \003(" + - "\tR\tenclosing\"\375\002\n\rDocumentEvent\022\022\n\004kind\030\001" + - " \001(\tR\004kind\022(\n\004time\030\002 \001(\0132\024.sysml.Documen" + - "tValueR\004time\022-\n\006object\030\003 \001(\0132\025.sysml.Doc" + - "umentObjectR\006object\022\030\n\007machine\030\004 \001(\tR\007ma" + - "chine\022\024\n\005state\030\005 \001(\tR\005state\022\022\n\004from\030\006 \001(" + - "\tR\004from\022\016\n\002to\030\007 \001(\tR\002to\022-\n\006target\030\010 \001(\0132" + - "\025.sysml.DocumentObjectR\006target\022\024\n\005event\030" + - "\t \001(\tR\005event\022\030\n\007payload\030\n \003(\tR\007payload\022\"" + - "\n\014alternatives\030\013 \003(\tR\014alternatives\022\024\n\005ta" + - "ken\030\014 \001(\tR\005taken\022\022\n\004text\030\r \001(\tR\004text\")\n\023" + - "DocumentQueryColumn\022\022\n\004name\030\001 \001(\tR\004name\"" + - "A\n\021DocumentQueryCell\022,\n\006values\030\001 \003(\0132\024.s" + - "ysml.DocumentValueR\006values\"r\n\020DocumentQu" + - "eryRow\022.\n\007element\030\001 \001(\0132\024.sysml.Document" + - "ValueR\007element\022.\n\005cells\030\002 \003(\0132\030.sysml.Do" + - "cumentQueryCellR\005cells\"}\n\030RunDocumentQue" + - "ryResponse\0224\n\007columns\030\001 \003(\0132\032.sysml.Docu" + - "mentQueryColumnR\007columns\022+\n\004rows\030\002 \003(\0132\027" + - ".sysml.DocumentQueryRowR\004rows\"k\n\025RenderD" + - "ocumentRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmode" + - "lHash\022\037\n\013document_id\030\002 \001(\tR\ndocumentId\022\022" + - "\n\004form\030\003 \001(\tR\004form\"H\n\026RenderDocumentResp" + - "onse\022\032\n\010markdown\030\001 \001(\tR\010markdown\022\022\n\004html" + - "\030\002 \001(\tR\004html\"\\\n\021RenderViewRequest\022\035\n\nmod" + - "el_hash\030\001 \001(\tR\tmodelHash\022\022\n\004view\030\002 \001(\tR\004" + - "view\022\024\n\005ports\030\003 \001(\tR\005ports\"\326\002\n\022RenderVie" + - "wResponse\022\022\n\004view\030\001 \001(\tR\004view\022\022\n\004kind\030\002 " + - "\001(\tR\004kind\022\026\n\006stated\030\003 \001(\tR\006stated\022\'\n\005nod" + - "es\030\004 \003(\0132\021.sysml.RenderNodeR\005nodes\022\'\n\005ed" + - "ges\030\005 \003(\0132\021.sysml.RenderEdgeR\005edges\022\030\n\007c" + - "olumns\030\006 \003(\tR\007columns\022$\n\004rows\030\007 \003(\0132\020.sy" + - "sml.RenderRowR\004rows\022+\n\006canvas\030\010 \001(\0132\023.sy" + - "sml.RenderCanvasR\006canvas\022\'\n\005notes\030\t \003(\0132" + - "\021.sysml.RenderNoteR\005notes\022\030\n\007notices\030\n \003" + - "(\tR\007notices\"\215\003\n\nRenderNode\022\016\n\002id\030\001 \001(\tR\002" + - "id\022\022\n\004kind\030\002 \001(\tR\004kind\022\022\n\004name\030\003 \001(\tR\004na" + - "me\022)\n\020name_synthesized\030\004 \001(\010R\017nameSynthe" + - "sized\022\022\n\004type\030\005 \001(\tR\004type\022\026\n\006detail\030\006 \001(" + - "\tR\006detail\022\022\n\004text\030\007 \001(\tR\004text\022\031\n\010stand_i" + - "n\030\010 \001(\010R\007standIn\022\026\n\006parent\030\t \001(\tR\006parent" + - "\022\'\n\005ports\030\n \003(\0132\021.sysml.RenderPortR\005port" + - "s\022#\n\006origin\030\013 \001(\0132\013.sysml.SpanR\006origin\0221" + - "\n\010geometry\030\014 \001(\0132\025.sysml.RenderGeometryR" + - "\010geometry\022(\n\005style\030\r \001(\0132\022.sysml.RenderS" + - "tyleR\005style\"b\n\nRenderPort\022\016\n\002id\030\001 \001(\tR\002i" + - "d\022\022\n\004name\030\002 \001(\tR\004name\022\022\n\004type\030\003 \001(\tR\004typ" + - "e\022\034\n\tdirection\030\004 \001(\tR\tdirection\"\235\002\n\nRend" + - "erEdge\022\022\n\004from\030\001 \001(\tR\004from\022\016\n\002to\030\002 \001(\tR\002" + - "to\022\033\n\tfrom_port\030\003 \001(\tR\010fromPort\022\027\n\007to_po" + - "rt\030\004 \001(\tR\006toPort\022\024\n\005label\030\005 \001(\tR\005label\022\022" + - "\n\004name\030\006 \001(\tR\004name\022\022\n\004kind\030\007 \001(\tR\004kind\022#" + - "\n\006origin\030\010 \001(\0132\013.sysml.SpanR\006origin\022(\n\005r" + - "oute\030\t \003(\0132\022.sysml.RenderPointR\005route\022(\n" + - "\005style\030\n \001(\0132\022.sysml.RenderStyleR\005style\"" + - "\223\001\n\016RenderGeometry\022\014\n\001x\030\001 \001(\001R\001x\022\014\n\001y\030\002 " + - "\001(\001R\001y\022\024\n\005width\030\003 \001(\001R\005width\022\026\n\006height\030\004" + - " \001(\001R\006height\022\031\n\010has_size\030\005 \001(\010R\007hasSize\022" + - "\034\n\tcollapsed\030\006 \001(\010R\tcollapsed\"k\n\014RenderC" + - "anvas\022\022\n\004unit\030\001 \001(\tR\004unit\022\024\n\005width\030\002 \001(\001" + - "R\005width\022\026\n\006height\030\003 \001(\001R\006height\022\031\n\010has_s" + - "ize\030\004 \001(\010R\007hasSize\"\246\001\n\013RenderStyle\022\022\n\004fi" + - "ll\030\001 \001(\tR\004fill\022\022\n\004line\030\002 \001(\tR\004line\022\022\n\004te" + - "xt\030\003 \001(\tR\004text\022\022\n\004font\030\004 \001(\tR\004font\022\033\n\tfo" + - "nt_size\030\005 \001(\001R\010fontSize\022\022\n\004bold\030\006 \001(\010R\004b" + - "old\022\026\n\006italic\030\007 \001(\010R\006italic\")\n\013RenderPoi" + - "nt\022\014\n\001x\030\001 \001(\001R\001x\022\014\n\001y\030\002 \001(\001R\001y\"F\n\tRender" + - "Row\022\024\n\005cells\030\001 \003(\tR\005cells\022#\n\006origin\030\002 \001(" + - "\0132\013.sysml.SpanR\006origin\"\370\001\n\nRenderNote\022\022\n" + - "\004text\030\001 \001(\tR\004text\022\026\n\006anchor\030\002 \001(\tR\006ancho" + - "r\022\033\n\tedge_from\030\003 \001(\tR\010edgeFrom\022\027\n\007edge_t" + - "o\030\004 \001(\tR\006edgeTo\022\014\n\001x\030\005 \001(\001R\001x\022\014\n\001y\030\006 \001(\001" + - "R\001y\022\024\n\005width\030\007 \001(\001R\005width\022\026\n\006height\030\010 \001(" + - "\001R\006height\022\031\n\010has_size\030\t \001(\010R\007hasSize\022#\n\006" + - "origin\030\n \001(\0132\013.sysml.SpanR\006origin\"N\n\023Exp" + - "ortGraphsRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmo" + - "delHash\022\030\n\007subject\030\002 \001(\tR\007subject\"d\n\024Exp" + - "ortGraphsResponse\022\030\n\007content\030\001 \001(\tR\007cont" + - "ent\022\030\n\007version\030\002 \001(\005R\007version\022\030\n\007subject" + - "\030\003 \001(\tR\007subject*\261\001\n\rFailureReason\022\036\n\032FAI" + - "LURE_REASON_UNSPECIFIED\020\000\022\035\n\031FAILURE_REA" + - "SON_EVALUATION\020\001\022\035\n\031FAILURE_REASON_WRONG" + - "_KIND\020\002\022$\n FAILURE_REASON_AMBIGUOUS_SUBJ" + - "ECT\020\003\022\034\n\030FAILURE_REASON_UNDECIDED\020\004*\214\005\n\013" + - "EditFailure\022\034\n\030EDIT_FAILURE_UNSPECIFIED\020" + - "\000\022\036\n\032EDIT_FAILURE_NO_OPERATIONS\020\001\022\037\n\033EDI" + - "T_FAILURE_UNKNOWN_TARGET\020\002\022!\n\035EDIT_FAILU" + - "RE_AMBIGUOUS_TARGET\020\003\022\033\n\027EDIT_FAILURE_NO" + - "T_VALUED\020\004\022\036\n\032EDIT_FAILURE_INVALID_VALUE" + - "\020\005\022\035\n\031EDIT_FAILURE_INVALID_NAME\020\006\022\032\n\026EDI" + - "T_FAILURE_NOT_NAMED\020\007\022\"\n\036EDIT_FAILURE_RE" + - "NAME_REFERENCED\020\010\022\"\n\036EDIT_FAILURE_OVERLA" + - "PPING_EDITS\020\t\022\037\n\033EDIT_FAILURE_RESULT_INV" + - "ALID\020\n\022\036\n\032EDIT_FAILURE_OWNER_UNKNOWN\020\013\022$" + - "\n EDIT_FAILURE_OWNER_NOT_NAMESPACE\020\014\022\035\n\031" + - "EDIT_FAILURE_ILLEGAL_KIND\020\r\022\"\n\036EDIT_FAIL" + - "URE_MEMBER_NAME_TAKEN\020\016\022\"\n\036EDIT_FAILURE_" + - "DELETE_REFERENCED\020\017\022$\n EDIT_FAILURE_OWNE" + - "R_INSIDE_TARGET\020\020\022 \n\034EDIT_FAILURE_MOVE_R" + - "EFERENCED\020\021\022%\n!EDIT_FAILURE_REFERENCED_E" + - "LSEWHERE\020\022*\222\001\n\021PrimitiveOperator\022\"\n\036PRIM" + - "ITIVE_OPERATOR_UNSPECIFIED\020\000\022\034\n\030PRIMITIV" + - "E_OPERATOR_EQUAL\020\001\022\036\n\032PRIMITIVE_OPERATOR" + - "_GREATER\020\002\022\033\n\027PRIMITIVE_OPERATOR_LESS\020\003*" + - "n\n\021CompositeOperator\022\"\n\036COMPOSITE_OPERAT" + - "OR_UNSPECIFIED\020\000\022\032\n\026COMPOSITE_OPERATOR_A" + - "ND\020\001\022\031\n\025COMPOSITE_OPERATOR_OR\020\0022\205\016\n\014SysM" + - "LService\022D\n\rGetServerInfo\022\030.sysml.Server" + - "InfoRequest\032\031.sysml.ServerInfoResponse\022>" + - "\n\tParseFile\022\027.sysml.ParseFileRequest\032\030.s" + - "ysml.ParseFileResponse\022G\n\014ParseSources\022\032" + - ".sysml.ParseSourcesRequest\032\033.sysml.Parse" + - "SourcesResponse\022;\n\tGetSymbol\022\027.sysml.Get" + - "SymbolRequest\032\025.sysml.SymbolResponse\022G\n\016" + - "GetDiagnostics\022\031.sysml.DiagnosticsReques" + - "t\032\032.sysml.DiagnosticsResponse\022;\n\010Evaluat" + - "e\022\026.sysml.EvaluateRequest\032\027.sysml.Evalua" + - "teResponse\022D\n\013Instantiate\022\031.sysml.Instan" + - "tiateRequest\032\032.sysml.InstantiateResponse" + - "\022J\n\rExecuteAction\022\033.sysml.ExecuteActionR" + - "equest\032\034.sysml.ExecuteActionResponse\022G\n\014" + - "ExecuteState\022\032.sysml.ExecuteStateRequest" + - "\032\033.sysml.ExecuteStateResponse\0228\n\007Convert" + - "\022\025.sysml.ConvertRequest\032\026.sysml.ConvertR" + - "esponse\0228\n\007Migrate\022\025.sysml.MigrateReques" + - "t\032\026.sysml.MigrateResponse\022A\n\nApplyEdits\022" + - "\030.sysml.ApplyEditsRequest\032\031.sysml.ApplyE" + - "ditsResponse\022S\n\020VerifyConstraint\022\036.sysml" + - ".VerifyConstraintRequest\032\037.sysml.VerifyC" + - "onstraintResponse\022V\n\021VerifyRequirement\022\037" + - ".sysml.VerifyRequirementRequest\032 .sysml." + - "VerifyRequirementResponse\022Y\n\022VerifySatis" + - "faction\022 .sysml.VerifySatisfactionReques" + - "t\032!.sysml.VerifySatisfactionResponse\022S\n\020" + - "ValidateInstance\022\036.sysml.ValidateInstanc" + - "eRequest\032\037.sysml.ValidateInstanceRespons" + - "e\022G\n\014EvaluateCalc\022\032.sysml.EvaluateCalcRe" + - "quest\032\033.sysml.EvaluateCalcResponse\022D\n\013Ru" + - "nAnalysis\022\031.sysml.RunAnalysisRequest\032\032.s" + - "ysml.RunAnalysisResponse\022;\n\010RunSweep\022\026.s" + - "ysml.RunSweepRequest\032\027.sysml.RunSweepRes" + - "ponse\022D\n\013ListEngines\022\031.sysml.ListEngines" + - "Request\032\032.sysml.ListEnginesResponse\0222\n\005Q" + - "uery\022\023.sysml.QueryRequest\032\024.sysml.QueryR" + - "esponse\022S\n\020RunDocumentQuery\022\036.sysml.RunD" + - "ocumentQueryRequest\032\037.sysml.RunDocumentQ" + - "ueryResponse\022M\n\016RenderDocument\022\034.sysml.R" + - "enderDocumentRequest\032\035.sysml.RenderDocum" + - "entResponse\022A\n\nRenderView\022\030.sysml.Render" + - "ViewRequest\032\031.sysml.RenderViewResponse\022G" + - "\n\014ExportGraphs\022\032.sysml.ExportGraphsReque" + - "st\032\033.sysml.ExportGraphsResponseBJ\n\034org.o" + - "penmbee.opensysml.protoP\001Z(github.com/Op" + - "en-MBEE/OpenSysML/api/protob\006proto3" + "ut\022\026\n\006locale\030\005 \001(\tR\006locale\"9\n\013AddNoteEdi" + + "t\022\026\n\006target\030\001 \001(\tR\006target\022\022\n\004text\030\002 \001(\tR" + + "\004text\"\326\003\n\017AddSequenceEdit\022\024\n\005owner\030\001 \001(\t" + + "R\005owner\022\030\n\007keyword\030\002 \001(\tR\007keyword\022\020\n\003ref" + + "\030\003 \001(\tR\003ref\022\037\n\013member_kind\030\004 \001(\tR\nmember" + + "Kind\022\037\n\013member_name\030\005 \001(\tR\nmemberName\022\022\n" + + "\004type\030\006 \001(\tR\004type\022\024\n\005after\030\007 \001(\tR\005after\022" + + "\034\n\tcondition\030\010 \001(\tR\tcondition\022\024\n\005value\030\t" + + " \001(\tR\005value\022\026\n\006target\030\n \001(\tR\006target\022\020\n\003v" + + "ia\030\013 \001(\tR\003via\022\024\n\005until\030\014 \001(\tR\005until\022*\n\004b" + + "ody\030\r \003(\0132\026.sysml.AddSequenceEditR\004body\022" + + "3\n\telse_body\030\016 \003(\0132\026.sysml.AddSequenceEd" + + "itR\010elseBody\022\"\n\014multiplicity\030\017 \001(\tR\014mult" + + "iplicity\022\034\n\tparameter\030\020 \001(\tR\tparameter\"\227" + + "\001\n\021AddConnectionEdit\022\024\n\005owner\030\001 \001(\tR\005own" + + "er\022\022\n\004kind\030\002 \001(\tR\004kind\022\031\n\010from_end\030\003 \001(\t" + + "R\007fromEnd\022\025\n\006to_end\030\004 \001(\tR\005toEnd\022\022\n\004name" + + "\030\005 \001(\tR\004name\022\022\n\004type\030\006 \001(\tR\004type\">\n\nDele" + + "teEdit\022\026\n\006target\030\001 \001(\tR\006target\022\030\n\007cascad" + + "e\030\002 \001(\010R\007cascade\"8\n\010MoveEdit\022\026\n\006target\030\001" + + " \001(\tR\006target\022\024\n\005owner\030\002 \001(\tR\005owner\"<\n\014Se" + + "tValueEdit\022\026\n\006target\030\001 \001(\tR\006target\022\024\n\005va" + + "lue\030\002 \001(\tR\005value\"?\n\nRenameEdit\022\026\n\006target" + + "\030\001 \001(\tR\006target\022\031\n\010new_name\030\002 \001(\tR\007newNam" + + "e\"\350\002\n\022ApplyEditsResponse\022\030\n\007content\030\001 \001(" + + "\tR\007content\022,\n\007applied\030\002 \003(\0132\022.sysml.Appl", + "iedEditR\007applied\022\024\n\005error\030\003 \001(\tR\005error\022," + + "\n\007failure\030\004 \001(\0162\022.sysml.EditFailureR\007fai" + + "lure\0223\n\013diagnostics\030\005 \003(\0132\021.sysml.Diagno" + + "sticR\013diagnostics\022-\n\022referring_elements\030" + + "\006 \003(\tR\021referringElements\0223\n\tdocuments\030\007 " + + "\003(\0132\025.sysml.EditedDocumentR\tdocuments\022-\n" + + "\treferrers\030\010 \003(\0132\017.sysml.ReferrerR\trefer" + + "rers\">\n\016EditedDocument\022\022\n\004name\030\001 \001(\tR\004na" + + "me\022\030\n\007content\030\002 \001(\tR\007content\":\n\010Referrer" + + "\022\022\n\004name\030\001 \001(\tR\004name\022\032\n\010document\030\002 \001(\tR\010" + + "document\"\320\001\n\013AppliedEdit\022\'\n\017operation_in" + + "dex\030\001 \001(\005R\016operationIndex\022\026\n\006target\030\002 \001(" + + "\tR\006target\022\026\n\006offset\030\003 \001(\005R\006offset\022\026\n\006len" + + "gth\030\004 \001(\005R\006length\022\031\n\010old_text\030\005 \001(\tR\007old" + + "Text\022\031\n\010new_text\030\006 \001(\tR\007newText\022\032\n\010docum" + + "ent\030\007 \001(\tR\010document\"\375\003\n\nSymbolInfo\022\016\n\002id" + + "\030\001 \001(\tR\002id\022\022\n\004name\030\002 \001(\tR\004name\022\022\n\004kind\030\003" + + " \001(\tR\004kind\022;\n\010metadata\030\004 \003(\0132\037.sysml.Sym" + + "bolInfo.MetadataEntryR\010metadata\022\033\n\tchild" + + "_ids\030\005 \003(\tR\010childIds\0224\n\nattributes\030\006 \003(\013" + + "2\024.sysml.AttributeInfoR\nattributes\022,\n\tty" + + "pe_info\030\007 \001(\0132\017.sysml.TypeInfoR\010typeInfo" + + "\022;\n\014multiplicity\030\010 \001(\0132\027.sysml.Multiplic" + + "ityInfoR\014multiplicity\022?\n\017specializations" + + "\030\t \003(\0132\025.sysml.SpecializationR\017specializ" + + "ations\022>\n\033withheld_library_attributes\030\n " + + "\001(\005R\031withheldLibraryAttributes\032;\n\rMetada" + + "taEntry\022\020\n\003key\030\001 \001(\tR\003key\022\024\n\005value\030\002 \001(\t" + + "R\005value:\0028\001\"~\n\016Specialization\022\022\n\004kind\030\001 " + + "\001(\tR\004kind\022\032\n\010declared\030\002 \001(\tR\010declared\022\033\n" + + "\ttarget_id\030\003 \001(\tR\010targetId\022\037\n\013target_kin" + + "d\030\004 \001(\tR\ntargetKind\"\345\001\n\010TypeInfo\022\032\n\010decl" + + "ared\030\001 \001(\tR\010declared\022\037\n\013resolved_id\030\002 \001(" + + "\tR\nresolvedId\022#\n\rresolved_kind\030\003 \001(\tR\014re" + + "solvedKind\022\034\n\tprimitive\030\004 \001(\tR\tprimitive" + + "\022)\n\020primitive_source\030\005 \001(\tR\017primitiveSou" + + "rce\022\032\n\010quantity\030\006 \001(\010R\010quantity\022\022\n\004unit\030" + + "\007 \001(\tR\004unit\">\n\020MultiplicityInfo\022\024\n\005lower" + + "\030\001 \001(\tR\005lower\022\024\n\005upper\030\002 \001(\tR\005upper\"o\n\rA" + + "ttributeInfo\022\022\n\004name\030\001 \001(\tR\004name\022\022\n\004type" + + "\030\002 \001(\tR\004type\022\"\n\005value\030\003 \001(\0132\014.sysml.Valu" + + "eR\005value\022\022\n\004unit\030\004 \001(\tR\004unit\"\205\010\n\005Value\022\035" + + "\n\tint_value\030\001 \001(\003H\000R\010intValue\022\037\n\nreal_va" + + "lue\030\002 \001(\001H\000R\trealValue\022\037\n\nbool_value\030\003 \001" + + "(\010H\000R\tboolValue\022#\n\014string_value\030\004 \001(\tH\000R" + + "\013stringValue\022!\n\013instance_id\030\005 \001(\003H\000R\nins" + + "tanceId\0222\n\010sequence\030\006 \001(\0132\024.sysml.ValueS" + + "equenceH\000R\010sequence\022\024\n\004null\030\007 \001(\tH\000R\004nul" + + "l\022-\n\010quantity\030\010 \001(\0132\017.sysml.QuantityH\000R\010" + + "quantity\0227\n\014enum_literal\030\t \001(\0132\022.sysml.E" + + "numLiteralH\000R\013enumLiteral\022\026\n\005unset\030\n \001(\010" + + "H\000R\005unset\022*\n\007complex\030\013 \001(\0132\016.sysml.Compl" + + "exH\000R\007complex\022$\n\005array\030\014 \001(\0132\014.sysml.Arr" + + "ayH\000R\005array\022\'\n\006vector\030\r \001(\0132\r.sysml.Vect" + + "orH\000R\006vector\022@\n\017vector_quantity\030\016 \001(\0132\025." + + "sysml.VectorQuantityH\000R\016vectorQuantity\022@" + + "\n\017measurement_ref\030\017 \001(\0132\025.sysml.Measurem" + + "entRefH\000R\016measurementRef\022\034\n\010infinity\030\020 \001" + + "(\010H\000R\010infinity\022-\n\010function\030\021 \001(\0132\017.sysml" + + ".FunctionH\000R\010function\022#\n\003set\030\022 \001(\0132\017.sys" + + "ml.ValueSetH\000R\003set\022@\n\017tensor_quantity\030\023 " + + "\001(\0132\025.sysml.TensorQuantityH\000R\016tensorQuan" + + "tity\0223\n\nmetaobject\030\024 \001(\0132\021.sysml.Metaobj" + + "ectH\000R\nmetaobject\0229\n\014undetermined\030\025 \001(\0132" + + "\023.sysml.UndeterminedH\000R\014undetermined\022$\n\r" + + "big_int_value\030\026 \001(\tH\000R\013bigIntValue\0228\n\016ra" + + "tional_value\030\027 \001(\0132\017.sysml.RationalH\000R\rr" + + "ationalValueB\006\n\004kind\"J\n\010Rational\022\034\n\tnume" + + "rator\030\001 \001(\tR\tnumerator\022 \n\013denominator\030\002 " + + "\001(\tR\013denominator\"N\n\nMetaobject\022\035\n\nelemen" + + "t_id\030\001 \001(\tR\telementId\022!\n\014metaclass_id\030\002 " + + "\001(\tR\013metaclassId\"U\n\014Undetermined\022\026\n\006reas" + + "on\030\001 \001(\tR\006reason\022-\n\005count\030\002 \001(\0132\027.sysml." + + "MultiplicityInfoR\005count\"<\n\010Function\022\027\n\007c" + + "alc_id\030\001 \001(\tR\006calcId\022\027\n\007self_id\030\002 \001(\003R\006s" + + "elfId\"4\n\010ValueSet\022(\n\010elements\030\001 \003(\0132\014.sy" + + "sml.ValueR\010elements\"a\n\016TensorQuantity\022\036\n" + + "\ndimensions\030\001 \003(\003R\ndimensions\022/\n\ncompone" + + "nts\030\002 \003(\0132\017.sysml.QuantityR\ncomponents\"Q" + + "\n\005Array\022\036\n\ndimensions\030\001 \003(\003R\ndimensions\022" + + "(\n\010elements\030\002 \003(\0132\014.sysml.ValueR\010element" + + "s\"6\n\006Vector\022,\n\ncomponents\030\001 \003(\0132\014.sysml." + + "ValueR\ncomponents\"A\n\016VectorQuantity\022/\n\nc" + + "omponents\030\001 \003(\0132\017.sysml.QuantityR\ncompon" + + "ents\";\n\007Complex\022\022\n\004real\030\001 \001(\001R\004real\022\034\n\ti" + + "maginary\030\002 \001(\001R\timaginary\"\213\001\n\013EnumLitera" + + "l\022\035\n\nliteral_id\030\001 \001(\tR\tliteralId\022%\n\016enum" + + "eration_id\030\002 \001(\tR\renumerationId\022\022\n\004name\030" + + "\003 \001(\tR\004name\022\"\n\005value\030\004 \001(\0132\014.sysml.Value" + + "R\005value\"9\n\rValueSequence\022(\n\010elements\030\001 \003" + + "(\0132\014.sysml.ValueR\010elements\"\231\002\n\010Quantity\022" + + "%\n\rint_magnitude\030\001 \001(\003H\000R\014intMagnitude\022\'" + + "\n\016real_magnitude\030\002 \001(\001H\000R\rrealMagnitude\022" + + ",\n\021big_int_magnitude\030\005 \001(\tH\000R\017bigIntMagn" + + "itude\022@\n\022rational_magnitude\030\006 \001(\0132\017.sysm" + + "l.RationalH\000R\021rationalMagnitude\022\022\n\004unit\030" + + "\003 \001(\tR\004unit\022,\n\tunit_term\030\004 \001(\0132\017.sysml.U" + + "nitTermR\010unitTermB\013\n\tmagnitude\"k\n\016Measur" + + "ementRef\022\022\n\004unit\030\001 \001(\tR\004unit\022,\n\tunit_ter" + + "m\030\002 \001(\0132\017.sysml.UnitTermR\010unitTerm\022\027\n\007un" + + "it_id\030\003 \001(\tR\006unitId\"q\n\010UnitTerm\022\033\n\tscale" + + "_num\030\001 \001(\001R\010scaleNum\022\033\n\tscale_den\030\002 \001(\001R" + + "\010scaleDen\022+\n\007factors\030\003 \003(\0132\021.sysml.UnitF" + + "actorR\007factors\"A\n\nUnitFactor\022\027\n\007unit_id\030" + + "\001 \001(\tR\006unitId\022\032\n\010exponent\030\002 \001(\001R\010exponen" + + "t\"w\n\nDiagnostic\022\032\n\010severity\030\001 \001(\tR\010sever" + + "ity\022\030\n\007message\030\002 \001(\tR\007message\022\037\n\004span\030\003 " + + "\001(\0132\013.sysml.SpanR\004span\022\022\n\004code\030\004 \001(\tR\004co" + + "de\"\212\001\n\004Span\022\022\n\004file\030\001 \001(\tR\004file\022\035\n\nstart" + + "_line\030\002 \001(\005R\tstartLine\022\033\n\tstart_col\030\003 \001(" + + "\005R\010startCol\022\031\n\010end_line\030\004 \001(\005R\007endLine\022\027" + + "\n\007end_col\030\005 \001(\005R\006endCol\"\023\n\021ServerInfoReq" + + "uest\"R\n\022ServerInfoResponse\022\030\n\007version\030\001 " + + "\001(\tR\007version\022\"\n\014capabilities\030\002 \003(\tR\014capa" + + "bilities\"p\n\014QueryRequest\022\035\n\nmodel_hash\030\001" + + " \001(\tR\tmodelHash\022\"\n\005query\030\002 \001(\0132\014.sysml.Q" + + "ueryR\005query\022\035\n\noslc_query\030\003 \001(\tR\toslcQue" + + "ry\"F\n\rQueryResponse\0225\n\010elements\030\001 \003(\0132\031." + + "sysml.QueryResultElementR\010elements\"^\n\005Qu" + + "ery\022\024\n\005scope\030\001 \003(\tR\005scope\022\026\n\006select\030\002 \003(" + + "\tR\006select\022\'\n\005where\030\003 \001(\0132\021.sysml.Constra" + + "intR\005where\"\222\001\n\nConstraint\022:\n\tprimitive\030\001" + + " \001(\0132\032.sysml.PrimitiveConstraintH\000R\tprim" + + "itive\022:\n\tcomposite\030\002 \001(\0132\032.sysml.Composi" + + "teConstraintH\000R\tcompositeB\014\n\nconstraint\"" + + "\227\001\n\023PrimitiveConstraint\022\030\n\007inverse\030\001 \001(\010" + + "R\007inverse\022\032\n\010property\030\002 \001(\tR\010property\0224\n" + + "\010operator\030\003 \001(\0162\030.sysml.PrimitiveOperato" + + "rR\010operator\022\024\n\005value\030\004 \003(\tR\005value\"~\n\023Com" + + "positeConstraint\0224\n\010operator\030\001 \001(\0162\030.sys" + + "ml.CompositeOperatorR\010operator\0221\n\nconstr" + + "aint\030\002 \003(\0132\021.sysml.ConstraintR\nconstrain" + + "t\"\302\001\n\022QueryResultElement\022\016\n\002id\030\001 \001(\tR\002id" + + "\022\022\n\004type\030\002 \001(\tR\004type\022I\n\nproperties\030\003 \003(\013" + + "2).sysml.QueryResultElement.PropertiesEn" + + "tryR\nproperties\032=\n\017PropertiesEntry\022\020\n\003ke" + + "y\030\001 \001(\tR\003key\022\024\n\005value\030\002 \001(\tR\005value:\0028\001\"\220" + + "\001\n\nSweepRange\022\034\n\tparameter\030\001 \001(\tR\tparame" + + "ter\022\"\n\005start\030\002 \001(\0132\014.sysml.ValueR\005start\022" + + "\036\n\003end\030\003 \001(\0132\014.sysml.ValueR\003end\022 \n\004step\030" + + "\004 \001(\0132\014.sysml.ValueR\004step\"\274\003\n\017RunSweepRe" + + "quest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHash\022\033\n\t" + + "symbol_id\030\002 \001(\tR\010symbolId\022*\n\021subject_sym" + + "bol_id\030\003 \001(\tR\017subjectSymbolId\022*\n\targumen" + + "ts\030\004 \003(\0132\014.sysml.ValueR\targuments\022S\n\017nam" + + "ed_arguments\030\005 \003(\0132*.sysml.RunSweepReque" + + "st.NamedArgumentsEntryR\016namedArguments\022)" + + "\n\006ranges\030\006 \003(\0132\021.sysml.SweepRangeR\006range" + + "s\022\030\n\007samples\030\007 \001(\003R\007samples\022\022\n\004seed\030\010 \001(" + + "\004R\004seed\022\026\n\006engine\030\t \001(\tR\006engine\032O\n\023Named" + + "ArgumentsEntry\022\020\n\003key\030\001 \001(\tR\003key\022\"\n\005valu" + + "e\030\002 \001(\0132\014.sysml.ValueR\005value:\0028\001\"\301\002\n\010Swe" + + "epRow\022)\n\006inputs\030\001 \003(\0132\021.sysml.CalcOutput" + + "R\006inputs\022+\n\007outputs\030\002 \003(\0132\021.sysml.CalcOu" + + "tputR\007outputs\022*\n\010verdicts\030\003 \003(\0132\016.sysml." + + "VerdictR\010verdicts\022%\n\016elapsed_micros\030\004 \001(" + + "\003R\relapsedMicros\022\024\n\005error\030\005 \001(\tR\005error\022;" + + "\n\016failure_reason\030\006 \001(\0162\024.sysml.FailureRe" + + "asonR\rfailureReason\0227\n\013evaluations\030\007 \003(\013" + + "2\025.sysml.CaseEvaluationR\013evaluations\"\226\003\n" + + "\020RunSweepResponse\022#\n\004rows\030\001 \003(\0132\017.sysml." + + "SweepRowR\004rows\022\036\n\nparameters\030\002 \003(\tR\npara" + + "meters\022\030\n\007sampled\030\003 \001(\010R\007sampled\022\022\n\004seed" + + "\030\004 \001(\004R\004seed\022\024\n\005error\030\005 \001(\tR\005error\0223\n\013di" + + "agnostics\030\006 \003(\0132\021.sysml.DiagnosticR\013diag" + + "nostics\022;\n\016failure_reason\030\007 \001(\0162\024.sysml." + + "FailureReasonR\rfailureReason\022-\n\tinstance" + + "s\030\010 \003(\0132\017.sysml.InstanceR\tinstances\022\026\n\006e" + + "ngine\030\t \001(\tR\006engine\022\032\n\010strength\030\n \001(\tR\010s" + + "trength\022$\n\006bounds\030\013 \003(\0132\014.sysml.BoundR\006b" + + "ounds\"\214\001\n\027RunDocumentQueryRequest\022\035\n\nmod" + + "el_hash\030\001 \001(\tR\tmodelHash\022\031\n\010query_id\030\002 \001" + + "(\tR\007queryId\0227\n\010bindings\030\003 \003(\0132\033.sysml.Do" + + "cumentQueryBindingR\010bindings\"b\n\024Document" + + "QueryBinding\022\034\n\tparameter\030\001 \001(\tR\tparamet" + + "er\022,\n\006values\030\002 \003(\0132\024.sysml.DocumentValue" + + "R\006values\"\317\004\n\rDocumentValue\022\037\n\nelement_id" + + "\030\001 \001(\tH\000R\telementId\022#\n\014string_value\030\002 \001(" + + "\tH\000R\013stringValue\022\035\n\tint_value\030\003 \001(\003H\000R\010i" + + "ntValue\022\037\n\nreal_value\030\004 \001(\001H\000R\trealValue" + + "\022\037\n\nbool_value\030\005 \001(\010H\000R\tboolValue\022\034\n\010inf" + + "inity\030\006 \001(\010H\000R\010infinity\022-\n\010quantity\030\010 \001(" + + "\0132\017.sysml.QuantityH\000R\010quantity\0222\n\007verdic" + + "t\030\t \001(\0132\026.sysml.DocumentVerdictH\000R\007verdi" + + "ct\022/\n\006object\030\n \001(\0132\025.sysml.DocumentObjec" + + "tH\000R\006object\022,\n\005state\030\013 \001(\0132\024.sysml.Docum" + + "entStateH\000R\005state\022,\n\005event\030\014 \001(\0132\024.sysml" + + ".DocumentEventH\000R\005event\022$\n\rbig_int_value" + + "\030\r \001(\tH\000R\013bigIntValue\0228\n\016rational_value\030" + + "\016 \001(\0132\017.sysml.RationalH\000R\rrationalValue\022" + + "!\n\014element_type\030\007 \001(\tR\013elementTypeB\006\n\004ki" + + "nd\"u\n\016DocumentObject\022\037\n\013instance_id\030\001 \001(" + + "\003R\ninstanceId\022\022\n\004path\030\002 \001(\tR\004path\022.\n\007ele" + + "ment\030\003 \001(\0132\024.sysml.DocumentValueR\007elemen" + + "t\"\365\001\n\017DocumentVerdict\0222\n\tassertion\030\001 \001(\013" + + "2\024.sysml.DocumentValueR\tassertion\022\022\n\004kin" + + "d\030\002 \001(\tR\004kind\022\022\n\004text\030\003 \001(\tR\004text\022\022\n\004pat" + + "h\030\004 \001(\tR\004path\022\030\n\007verdict\030\005 \001(\tR\007verdict\022" + + "\034\n\tcondition\030\006 \001(\tR\tcondition\022\026\n\006reason\030" + + "\007 \001(\tR\006reason\022\"\n\014verification\030\010 \003(\tR\014ver" + + "ification\"\355\001\n\rDocumentState\022-\n\006object\030\001 " + + "\001(\0132\025.sysml.DocumentObjectR\006object\022\030\n\007ma" + + "chine\030\002 \001(\tR\007machine\022\022\n\004name\030\003 \001(\tR\004name" + + "\022\035\n\nstate_path\030\004 \001(\tR\tstatePath\022*\n\005state" + + "\030\005 \001(\0132\024.sysml.DocumentValueR\005state\022\026\n\006r" + + "egion\030\006 \001(\tR\006region\022\034\n\tenclosing\030\007 \003(\tR\t" + + "enclosing\"\375\002\n\rDocumentEvent\022\022\n\004kind\030\001 \001(" + + "\tR\004kind\022(\n\004time\030\002 \001(\0132\024.sysml.DocumentVa" + + "lueR\004time\022-\n\006object\030\003 \001(\0132\025.sysml.Docume" + + "ntObjectR\006object\022\030\n\007machine\030\004 \001(\tR\007machi" + + "ne\022\024\n\005state\030\005 \001(\tR\005state\022\022\n\004from\030\006 \001(\tR\004" + + "from\022\016\n\002to\030\007 \001(\tR\002to\022-\n\006target\030\010 \001(\0132\025.s" + + "ysml.DocumentObjectR\006target\022\024\n\005event\030\t \001" + + "(\tR\005event\022\030\n\007payload\030\n \003(\tR\007payload\022\"\n\014a" + + "lternatives\030\013 \003(\tR\014alternatives\022\024\n\005taken" + + "\030\014 \001(\tR\005taken\022\022\n\004text\030\r \001(\tR\004text\")\n\023Doc" + + "umentQueryColumn\022\022\n\004name\030\001 \001(\tR\004name\"A\n\021" + + "DocumentQueryCell\022,\n\006values\030\001 \003(\0132\024.sysm" + + "l.DocumentValueR\006values\"r\n\020DocumentQuery" + + "Row\022.\n\007element\030\001 \001(\0132\024.sysml.DocumentVal" + + "ueR\007element\022.\n\005cells\030\002 \003(\0132\030.sysml.Docum" + + "entQueryCellR\005cells\"}\n\030RunDocumentQueryR" + + "esponse\0224\n\007columns\030\001 \003(\0132\032.sysml.Documen" + + "tQueryColumnR\007columns\022+\n\004rows\030\002 \003(\0132\027.sy" + + "sml.DocumentQueryRowR\004rows\"k\n\025RenderDocu" + + "mentRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodelHa" + + "sh\022\037\n\013document_id\030\002 \001(\tR\ndocumentId\022\022\n\004f" + + "orm\030\003 \001(\tR\004form\"H\n\026RenderDocumentRespons" + + "e\022\032\n\010markdown\030\001 \001(\tR\010markdown\022\022\n\004html\030\002 " + + "\001(\tR\004html\"\\\n\021RenderViewRequest\022\035\n\nmodel_" + + "hash\030\001 \001(\tR\tmodelHash\022\022\n\004view\030\002 \001(\tR\004vie" + + "w\022\024\n\005ports\030\003 \001(\tR\005ports\"\326\002\n\022RenderViewRe" + + "sponse\022\022\n\004view\030\001 \001(\tR\004view\022\022\n\004kind\030\002 \001(\t" + + "R\004kind\022\026\n\006stated\030\003 \001(\tR\006stated\022\'\n\005nodes\030" + + "\004 \003(\0132\021.sysml.RenderNodeR\005nodes\022\'\n\005edges" + + "\030\005 \003(\0132\021.sysml.RenderEdgeR\005edges\022\030\n\007colu" + + "mns\030\006 \003(\tR\007columns\022$\n\004rows\030\007 \003(\0132\020.sysml" + + ".RenderRowR\004rows\022+\n\006canvas\030\010 \001(\0132\023.sysml" + + ".RenderCanvasR\006canvas\022\'\n\005notes\030\t \003(\0132\021.s" + + "ysml.RenderNoteR\005notes\022\030\n\007notices\030\n \003(\tR" + + "\007notices\"\215\003\n\nRenderNode\022\016\n\002id\030\001 \001(\tR\002id\022" + + "\022\n\004kind\030\002 \001(\tR\004kind\022\022\n\004name\030\003 \001(\tR\004name\022" + + ")\n\020name_synthesized\030\004 \001(\010R\017nameSynthesiz" + + "ed\022\022\n\004type\030\005 \001(\tR\004type\022\026\n\006detail\030\006 \001(\tR\006" + + "detail\022\022\n\004text\030\007 \001(\tR\004text\022\031\n\010stand_in\030\010" + + " \001(\010R\007standIn\022\026\n\006parent\030\t \001(\tR\006parent\022\'\n" + + "\005ports\030\n \003(\0132\021.sysml.RenderPortR\005ports\022#" + + "\n\006origin\030\013 \001(\0132\013.sysml.SpanR\006origin\0221\n\010g" + + "eometry\030\014 \001(\0132\025.sysml.RenderGeometryR\010ge" + + "ometry\022(\n\005style\030\r \001(\0132\022.sysml.RenderStyl" + + "eR\005style\"b\n\nRenderPort\022\016\n\002id\030\001 \001(\tR\002id\022\022" + + "\n\004name\030\002 \001(\tR\004name\022\022\n\004type\030\003 \001(\tR\004type\022\034" + + "\n\tdirection\030\004 \001(\tR\tdirection\"\235\002\n\nRenderE" + + "dge\022\022\n\004from\030\001 \001(\tR\004from\022\016\n\002to\030\002 \001(\tR\002to\022" + + "\033\n\tfrom_port\030\003 \001(\tR\010fromPort\022\027\n\007to_port\030" + + "\004 \001(\tR\006toPort\022\024\n\005label\030\005 \001(\tR\005label\022\022\n\004n" + + "ame\030\006 \001(\tR\004name\022\022\n\004kind\030\007 \001(\tR\004kind\022#\n\006o" + + "rigin\030\010 \001(\0132\013.sysml.SpanR\006origin\022(\n\005rout" + + "e\030\t \003(\0132\022.sysml.RenderPointR\005route\022(\n\005st" + + "yle\030\n \001(\0132\022.sysml.RenderStyleR\005style\"\223\001\n" + + "\016RenderGeometry\022\014\n\001x\030\001 \001(\001R\001x\022\014\n\001y\030\002 \001(\001" + + "R\001y\022\024\n\005width\030\003 \001(\001R\005width\022\026\n\006height\030\004 \001(" + + "\001R\006height\022\031\n\010has_size\030\005 \001(\010R\007hasSize\022\034\n\t" + + "collapsed\030\006 \001(\010R\tcollapsed\"k\n\014RenderCanv" + + "as\022\022\n\004unit\030\001 \001(\tR\004unit\022\024\n\005width\030\002 \001(\001R\005w" + + "idth\022\026\n\006height\030\003 \001(\001R\006height\022\031\n\010has_size" + + "\030\004 \001(\010R\007hasSize\"\246\001\n\013RenderStyle\022\022\n\004fill\030" + + "\001 \001(\tR\004fill\022\022\n\004line\030\002 \001(\tR\004line\022\022\n\004text\030" + + "\003 \001(\tR\004text\022\022\n\004font\030\004 \001(\tR\004font\022\033\n\tfont_" + + "size\030\005 \001(\001R\010fontSize\022\022\n\004bold\030\006 \001(\010R\004bold" + + "\022\026\n\006italic\030\007 \001(\010R\006italic\")\n\013RenderPoint\022" + + "\014\n\001x\030\001 \001(\001R\001x\022\014\n\001y\030\002 \001(\001R\001y\"F\n\tRenderRow" + + "\022\024\n\005cells\030\001 \003(\tR\005cells\022#\n\006origin\030\002 \001(\0132\013" + + ".sysml.SpanR\006origin\"\370\001\n\nRenderNote\022\022\n\004te" + + "xt\030\001 \001(\tR\004text\022\026\n\006anchor\030\002 \001(\tR\006anchor\022\033" + + "\n\tedge_from\030\003 \001(\tR\010edgeFrom\022\027\n\007edge_to\030\004" + + " \001(\tR\006edgeTo\022\014\n\001x\030\005 \001(\001R\001x\022\014\n\001y\030\006 \001(\001R\001y" + + "\022\024\n\005width\030\007 \001(\001R\005width\022\026\n\006height\030\010 \001(\001R\006" + + "height\022\031\n\010has_size\030\t \001(\010R\007hasSize\022#\n\006ori" + + "gin\030\n \001(\0132\013.sysml.SpanR\006origin\"N\n\023Export" + + "GraphsRequest\022\035\n\nmodel_hash\030\001 \001(\tR\tmodel" + + "Hash\022\030\n\007subject\030\002 \001(\tR\007subject\"d\n\024Export" + + "GraphsResponse\022\030\n\007content\030\001 \001(\tR\007content" + + "\022\030\n\007version\030\002 \001(\005R\007version\022\030\n\007subject\030\003 " + + "\001(\tR\007subject*\261\001\n\rFailureReason\022\036\n\032FAILUR" + + "E_REASON_UNSPECIFIED\020\000\022\035\n\031FAILURE_REASON" + + "_EVALUATION\020\001\022\035\n\031FAILURE_REASON_WRONG_KI" + + "ND\020\002\022$\n FAILURE_REASON_AMBIGUOUS_SUBJECT" + + "\020\003\022\034\n\030FAILURE_REASON_UNDECIDED\020\004*\214\005\n\013Edi" + + "tFailure\022\034\n\030EDIT_FAILURE_UNSPECIFIED\020\000\022\036" + + "\n\032EDIT_FAILURE_NO_OPERATIONS\020\001\022\037\n\033EDIT_F" + + "AILURE_UNKNOWN_TARGET\020\002\022!\n\035EDIT_FAILURE_" + + "AMBIGUOUS_TARGET\020\003\022\033\n\027EDIT_FAILURE_NOT_V" + + "ALUED\020\004\022\036\n\032EDIT_FAILURE_INVALID_VALUE\020\005\022" + + "\035\n\031EDIT_FAILURE_INVALID_NAME\020\006\022\032\n\026EDIT_F" + + "AILURE_NOT_NAMED\020\007\022\"\n\036EDIT_FAILURE_RENAM" + + "E_REFERENCED\020\010\022\"\n\036EDIT_FAILURE_OVERLAPPI" + + "NG_EDITS\020\t\022\037\n\033EDIT_FAILURE_RESULT_INVALI" + + "D\020\n\022\036\n\032EDIT_FAILURE_OWNER_UNKNOWN\020\013\022$\n E" + + "DIT_FAILURE_OWNER_NOT_NAMESPACE\020\014\022\035\n\031EDI" + + "T_FAILURE_ILLEGAL_KIND\020\r\022\"\n\036EDIT_FAILURE" + + "_MEMBER_NAME_TAKEN\020\016\022\"\n\036EDIT_FAILURE_DEL" + + "ETE_REFERENCED\020\017\022$\n EDIT_FAILURE_OWNER_I" + + "NSIDE_TARGET\020\020\022 \n\034EDIT_FAILURE_MOVE_REFE" + + "RENCED\020\021\022%\n!EDIT_FAILURE_REFERENCED_ELSE" + + "WHERE\020\022*\222\001\n\021PrimitiveOperator\022\"\n\036PRIMITI" + + "VE_OPERATOR_UNSPECIFIED\020\000\022\034\n\030PRIMITIVE_O" + + "PERATOR_EQUAL\020\001\022\036\n\032PRIMITIVE_OPERATOR_GR" + + "EATER\020\002\022\033\n\027PRIMITIVE_OPERATOR_LESS\020\003*n\n\021" + + "CompositeOperator\022\"\n\036COMPOSITE_OPERATOR_" + + "UNSPECIFIED\020\000\022\032\n\026COMPOSITE_OPERATOR_AND\020" + + "\001\022\031\n\025COMPOSITE_OPERATOR_OR\020\0022\205\016\n\014SysMLSe" + + "rvice\022D\n\rGetServerInfo\022\030.sysml.ServerInf" + + "oRequest\032\031.sysml.ServerInfoResponse\022>\n\tP" + + "arseFile\022\027.sysml.ParseFileRequest\032\030.sysm" + + "l.ParseFileResponse\022G\n\014ParseSources\022\032.sy" + + "sml.ParseSourcesRequest\032\033.sysml.ParseSou" + + "rcesResponse\022;\n\tGetSymbol\022\027.sysml.GetSym" + + "bolRequest\032\025.sysml.SymbolResponse\022G\n\016Get" + + "Diagnostics\022\031.sysml.DiagnosticsRequest\032\032" + + ".sysml.DiagnosticsResponse\022;\n\010Evaluate\022\026" + + ".sysml.EvaluateRequest\032\027.sysml.EvaluateR" + + "esponse\022D\n\013Instantiate\022\031.sysml.Instantia" + + "teRequest\032\032.sysml.InstantiateResponse\022J\n" + + "\rExecuteAction\022\033.sysml.ExecuteActionRequ" + + "est\032\034.sysml.ExecuteActionResponse\022G\n\014Exe" + + "cuteState\022\032.sysml.ExecuteStateRequest\032\033." + + "sysml.ExecuteStateResponse\0228\n\007Convert\022\025." + + "sysml.ConvertRequest\032\026.sysml.ConvertResp" + + "onse\0228\n\007Migrate\022\025.sysml.MigrateRequest\032\026" + + ".sysml.MigrateResponse\022A\n\nApplyEdits\022\030.s" + + "ysml.ApplyEditsRequest\032\031.sysml.ApplyEdit" + + "sResponse\022S\n\020VerifyConstraint\022\036.sysml.Ve" + + "rifyConstraintRequest\032\037.sysml.VerifyCons" + + "traintResponse\022V\n\021VerifyRequirement\022\037.sy" + + "sml.VerifyRequirementRequest\032 .sysml.Ver" + + "ifyRequirementResponse\022Y\n\022VerifySatisfac" + + "tion\022 .sysml.VerifySatisfactionRequest\032!" + + ".sysml.VerifySatisfactionResponse\022S\n\020Val" + + "idateInstance\022\036.sysml.ValidateInstanceRe" + + "quest\032\037.sysml.ValidateInstanceResponse\022G" + + "\n\014EvaluateCalc\022\032.sysml.EvaluateCalcReque" + + "st\032\033.sysml.EvaluateCalcResponse\022D\n\013RunAn" + + "alysis\022\031.sysml.RunAnalysisRequest\032\032.sysm" + + "l.RunAnalysisResponse\022;\n\010RunSweep\022\026.sysm" + + "l.RunSweepRequest\032\027.sysml.RunSweepRespon" + + "se\022D\n\013ListEngines\022\031.sysml.ListEnginesReq" + + "uest\032\032.sysml.ListEnginesResponse\0222\n\005Quer" + + "y\022\023.sysml.QueryRequest\032\024.sysml.QueryResp" + + "onse\022S\n\020RunDocumentQuery\022\036.sysml.RunDocu" + + "mentQueryRequest\032\037.sysml.RunDocumentQuer" + + "yResponse\022M\n\016RenderDocument\022\034.sysml.Rend" + + "erDocumentRequest\032\035.sysml.RenderDocument" + + "Response\022A\n\nRenderView\022\030.sysml.RenderVie" + + "wRequest\032\031.sysml.RenderViewResponse\022G\n\014E" + + "xportGraphs\022\032.sysml.ExportGraphsRequest\032" + + "\033.sysml.ExportGraphsResponseBJ\n\034org.open" + + "mbee.opensysml.protoP\001Z(github.com/Open-" + + "MBEE/OpenSysML/api/protob\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -1546,7 +1567,13 @@ public static void registerAllExtensions( internal_static_sysml_VerifyConstraintRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_VerifyConstraintRequest_descriptor, - new java.lang.String[] { "ModelHash", "SymbolId", "SubjectSymbolId", "Engine", "Question", }); + new java.lang.String[] { "ModelHash", "SymbolId", "SubjectSymbolId", "Engine", "Question", "Arguments", "NamedArguments", }); + internal_static_sysml_VerifyConstraintRequest_NamedArgumentsEntry_descriptor = + internal_static_sysml_VerifyConstraintRequest_descriptor.getNestedType(0); + internal_static_sysml_VerifyConstraintRequest_NamedArgumentsEntry_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_sysml_VerifyConstraintRequest_NamedArgumentsEntry_descriptor, + new java.lang.String[] { "Key", "Value", }); internal_static_sysml_VerifyConstraintResponse_descriptor = getDescriptor().getMessageType(4); internal_static_sysml_VerifyConstraintResponse_fieldAccessorTable = new @@ -1558,7 +1585,13 @@ public static void registerAllExtensions( internal_static_sysml_VerifyRequirementRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_sysml_VerifyRequirementRequest_descriptor, - new java.lang.String[] { "ModelHash", "SymbolId", "SubjectSymbolId", "Engine", "Question", }); + new java.lang.String[] { "ModelHash", "SymbolId", "SubjectSymbolId", "Engine", "Question", "Arguments", "NamedArguments", }); + internal_static_sysml_VerifyRequirementRequest_NamedArgumentsEntry_descriptor = + internal_static_sysml_VerifyRequirementRequest_descriptor.getNestedType(0); + internal_static_sysml_VerifyRequirementRequest_NamedArgumentsEntry_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_sysml_VerifyRequirementRequest_NamedArgumentsEntry_descriptor, + new java.lang.String[] { "Key", "Value", }); internal_static_sysml_VerificationVerdict_descriptor = getDescriptor().getMessageType(6); internal_static_sysml_VerificationVerdict_fieldAccessorTable = new diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyConstraintRequest.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyConstraintRequest.java index 89c10120fc..2e202497d9 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyConstraintRequest.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyConstraintRequest.java @@ -37,6 +37,7 @@ private VerifyConstraintRequest() { subjectSymbolId_ = ""; engine_ = ""; question_ = ""; + arguments_ = java.util.Collections.emptyList(); } public static final com.google.protobuf.Descriptors.Descriptor @@ -44,6 +45,18 @@ private VerifyConstraintRequest() { return org.openmbee.opensysml.proto.Sysml.internal_static_sysml_VerifyConstraintRequest_descriptor; } + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 7: + return internalGetNamedArguments(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { @@ -305,6 +318,177 @@ public java.lang.String getQuestion() { } } + public static final int ARGUMENTS_FIELD_NUMBER = 6; + @SuppressWarnings("serial") + private java.util.List arguments_; + /** + *
+   * Values for the constraint's `in` parameters, in declaration order, as
+   * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+   * does not take is INVALID_ARGUMENT, as is a parameter left without an
+   * argument or default. Reported as the "verification_arguments" capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + @java.lang.Override + public java.util.List getArgumentsList() { + return arguments_; + } + /** + *
+   * Values for the constraint's `in` parameters, in declaration order, as
+   * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+   * does not take is INVALID_ARGUMENT, as is a parameter left without an
+   * argument or default. Reported as the "verification_arguments" capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + @java.lang.Override + public java.util.List + getArgumentsOrBuilderList() { + return arguments_; + } + /** + *
+   * Values for the constraint's `in` parameters, in declaration order, as
+   * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+   * does not take is INVALID_ARGUMENT, as is a parameter left without an
+   * argument or default. Reported as the "verification_arguments" capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + @java.lang.Override + public int getArgumentsCount() { + return arguments_.size(); + } + /** + *
+   * Values for the constraint's `in` parameters, in declaration order, as
+   * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+   * does not take is INVALID_ARGUMENT, as is a parameter left without an
+   * argument or default. Reported as the "verification_arguments" capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + @java.lang.Override + public org.openmbee.opensysml.proto.Value getArguments(int index) { + return arguments_.get(index); + } + /** + *
+   * Values for the constraint's `in` parameters, in declaration order, as
+   * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+   * does not take is INVALID_ARGUMENT, as is a parameter left without an
+   * argument or default. Reported as the "verification_arguments" capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + @java.lang.Override + public org.openmbee.opensysml.proto.ValueOrBuilder getArgumentsOrBuilder( + int index) { + return arguments_.get(index); + } + + public static final int NAMED_ARGUMENTS_FIELD_NUMBER = 7; + private static final class NamedArgumentsDefaultEntryHolder { + static final com.google.protobuf.MapEntry< + java.lang.String, org.openmbee.opensysml.proto.Value> defaultEntry = + com.google.protobuf.MapEntry + .newDefaultInstance( + org.openmbee.opensysml.proto.Sysml.internal_static_sysml_VerifyConstraintRequest_NamedArgumentsEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.MESSAGE, + org.openmbee.opensysml.proto.Value.getDefaultInstance()); + } + @SuppressWarnings("serial") + private com.google.protobuf.MapField< + java.lang.String, org.openmbee.opensysml.proto.Value> namedArguments_; + private com.google.protobuf.MapField + internalGetNamedArguments() { + if (namedArguments_ == null) { + return com.google.protobuf.MapField.emptyMapField( + NamedArgumentsDefaultEntryHolder.defaultEntry); + } + return namedArguments_; + } + public int getNamedArgumentsCount() { + return internalGetNamedArguments().getMap().size(); + } + /** + *
+   * Values for `in` parameters by name; see arguments.
+   * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public boolean containsNamedArguments( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + return internalGetNamedArguments().getMap().containsKey(key); + } + /** + * Use {@link #getNamedArgumentsMap()} instead. + */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getNamedArguments() { + return getNamedArgumentsMap(); + } + /** + *
+   * Values for `in` parameters by name; see arguments.
+   * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public java.util.Map getNamedArgumentsMap() { + return internalGetNamedArguments().getMap(); + } + /** + *
+   * Values for `in` parameters by name; see arguments.
+   * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public /* nullable */ +org.openmbee.opensysml.proto.Value getNamedArgumentsOrDefault( + java.lang.String key, + /* nullable */ +org.openmbee.opensysml.proto.Value defaultValue) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = + internalGetNamedArguments().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + /** + *
+   * Values for `in` parameters by name; see arguments.
+   * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public org.openmbee.opensysml.proto.Value getNamedArgumentsOrThrow( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = + internalGetNamedArguments().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -334,6 +518,15 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!com.google.protobuf.GeneratedMessage.isStringEmpty(question_)) { com.google.protobuf.GeneratedMessage.writeString(output, 5, question_); } + for (int i = 0; i < arguments_.size(); i++) { + output.writeMessage(6, arguments_.get(i)); + } + com.google.protobuf.GeneratedMessage + .serializeStringMapTo( + output, + internalGetNamedArguments(), + NamedArgumentsDefaultEntryHolder.defaultEntry, + 7); getUnknownFields().writeTo(output); } @@ -358,6 +551,20 @@ public int getSerializedSize() { if (!com.google.protobuf.GeneratedMessage.isStringEmpty(question_)) { size += com.google.protobuf.GeneratedMessage.computeStringSize(5, question_); } + for (int i = 0; i < arguments_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, arguments_.get(i)); + } + for (java.util.Map.Entry entry + : internalGetNamedArguments().getMap().entrySet()) { + com.google.protobuf.MapEntry + namedArguments__ = NamedArgumentsDefaultEntryHolder.defaultEntry.newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, namedArguments__); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -383,6 +590,10 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getEngine())) return false; if (!getQuestion() .equals(other.getQuestion())) return false; + if (!getArgumentsList() + .equals(other.getArgumentsList())) return false; + if (!internalGetNamedArguments().equals( + other.internalGetNamedArguments())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -404,6 +615,14 @@ public int hashCode() { hash = (53 * hash) + getEngine().hashCode(); hash = (37 * hash) + QUESTION_FIELD_NUMBER; hash = (53 * hash) + getQuestion().hashCode(); + if (getArgumentsCount() > 0) { + hash = (37 * hash) + ARGUMENTS_FIELD_NUMBER; + hash = (53 * hash) + getArgumentsList().hashCode(); + } + if (!internalGetNamedArguments().getMap().isEmpty()) { + hash = (37 * hash) + NAMED_ARGUMENTS_FIELD_NUMBER; + hash = (53 * hash) + internalGetNamedArguments().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -517,6 +736,28 @@ public static final class Builder extends return org.openmbee.opensysml.proto.Sysml.internal_static_sysml_VerifyConstraintRequest_descriptor; } + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 7: + return internalGetNamedArguments(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 7: + return internalGetMutableNamedArguments(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { @@ -544,6 +785,14 @@ public Builder clear() { subjectSymbolId_ = ""; engine_ = ""; question_ = ""; + if (argumentsBuilder_ == null) { + arguments_ = java.util.Collections.emptyList(); + } else { + arguments_ = null; + argumentsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + internalGetMutableNamedArguments().clear(); return this; } @@ -570,11 +819,24 @@ public org.openmbee.opensysml.proto.VerifyConstraintRequest build() { @java.lang.Override public org.openmbee.opensysml.proto.VerifyConstraintRequest buildPartial() { org.openmbee.opensysml.proto.VerifyConstraintRequest result = new org.openmbee.opensysml.proto.VerifyConstraintRequest(this); + buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } + private void buildPartialRepeatedFields(org.openmbee.opensysml.proto.VerifyConstraintRequest result) { + if (argumentsBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0)) { + arguments_ = java.util.Collections.unmodifiableList(arguments_); + bitField0_ = (bitField0_ & ~0x00000020); + } + result.arguments_ = arguments_; + } else { + result.arguments_ = argumentsBuilder_.build(); + } + } + private void buildPartial0(org.openmbee.opensysml.proto.VerifyConstraintRequest result) { int from_bitField0_ = bitField0_; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -592,6 +854,9 @@ private void buildPartial0(org.openmbee.opensysml.proto.VerifyConstraintRequest if (((from_bitField0_ & 0x00000010) != 0)) { result.question_ = question_; } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.namedArguments_ = internalGetNamedArguments().build(NamedArgumentsDefaultEntryHolder.defaultEntry); + } } @java.lang.Override @@ -631,6 +896,35 @@ public Builder mergeFrom(org.openmbee.opensysml.proto.VerifyConstraintRequest ot bitField0_ |= 0x00000010; onChanged(); } + if (argumentsBuilder_ == null) { + if (!other.arguments_.isEmpty()) { + if (arguments_.isEmpty()) { + arguments_ = other.arguments_; + bitField0_ = (bitField0_ & ~0x00000020); + } else { + ensureArgumentsIsMutable(); + arguments_.addAll(other.arguments_); + } + onChanged(); + } + } else { + if (!other.arguments_.isEmpty()) { + if (argumentsBuilder_.isEmpty()) { + argumentsBuilder_.dispose(); + argumentsBuilder_ = null; + arguments_ = other.arguments_; + bitField0_ = (bitField0_ & ~0x00000020); + argumentsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + internalGetArgumentsFieldBuilder() : null; + } else { + argumentsBuilder_.addAllMessages(other.arguments_); + } + } + } + internalGetMutableNamedArguments().mergeFrom( + other.internalGetNamedArguments()); + bitField0_ |= 0x00000040; this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -682,6 +976,28 @@ public Builder mergeFrom( bitField0_ |= 0x00000010; break; } // case 42 + case 50: { + org.openmbee.opensysml.proto.Value m = + input.readMessage( + org.openmbee.opensysml.proto.Value.parser(), + extensionRegistry); + if (argumentsBuilder_ == null) { + ensureArgumentsIsMutable(); + arguments_.add(m); + } else { + argumentsBuilder_.addMessage(m); + } + break; + } // case 50 + case 58: { + com.google.protobuf.MapEntry + namedArguments__ = input.readMessage( + NamedArgumentsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry); + internalGetMutableNamedArguments().ensureBuilderMap().put( + namedArguments__.getKey(), namedArguments__.getValue()); + bitField0_ |= 0x00000040; + break; + } // case 58 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { done = true; // was an endgroup tag @@ -1204,6 +1520,559 @@ public Builder setQuestionBytes( return this; } + private java.util.List arguments_ = + java.util.Collections.emptyList(); + private void ensureArgumentsIsMutable() { + if (!((bitField0_ & 0x00000020) != 0)) { + arguments_ = new java.util.ArrayList(arguments_); + bitField0_ |= 0x00000020; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + org.openmbee.opensysml.proto.Value, org.openmbee.opensysml.proto.Value.Builder, org.openmbee.opensysml.proto.ValueOrBuilder> argumentsBuilder_; + + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public java.util.List getArgumentsList() { + if (argumentsBuilder_ == null) { + return java.util.Collections.unmodifiableList(arguments_); + } else { + return argumentsBuilder_.getMessageList(); + } + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public int getArgumentsCount() { + if (argumentsBuilder_ == null) { + return arguments_.size(); + } else { + return argumentsBuilder_.getCount(); + } + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public org.openmbee.opensysml.proto.Value getArguments(int index) { + if (argumentsBuilder_ == null) { + return arguments_.get(index); + } else { + return argumentsBuilder_.getMessage(index); + } + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder setArguments( + int index, org.openmbee.opensysml.proto.Value value) { + if (argumentsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureArgumentsIsMutable(); + arguments_.set(index, value); + onChanged(); + } else { + argumentsBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder setArguments( + int index, org.openmbee.opensysml.proto.Value.Builder builderForValue) { + if (argumentsBuilder_ == null) { + ensureArgumentsIsMutable(); + arguments_.set(index, builderForValue.build()); + onChanged(); + } else { + argumentsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder addArguments(org.openmbee.opensysml.proto.Value value) { + if (argumentsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureArgumentsIsMutable(); + arguments_.add(value); + onChanged(); + } else { + argumentsBuilder_.addMessage(value); + } + return this; + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder addArguments( + int index, org.openmbee.opensysml.proto.Value value) { + if (argumentsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureArgumentsIsMutable(); + arguments_.add(index, value); + onChanged(); + } else { + argumentsBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder addArguments( + org.openmbee.opensysml.proto.Value.Builder builderForValue) { + if (argumentsBuilder_ == null) { + ensureArgumentsIsMutable(); + arguments_.add(builderForValue.build()); + onChanged(); + } else { + argumentsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder addArguments( + int index, org.openmbee.opensysml.proto.Value.Builder builderForValue) { + if (argumentsBuilder_ == null) { + ensureArgumentsIsMutable(); + arguments_.add(index, builderForValue.build()); + onChanged(); + } else { + argumentsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder addAllArguments( + java.lang.Iterable values) { + if (argumentsBuilder_ == null) { + ensureArgumentsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, arguments_); + onChanged(); + } else { + argumentsBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder clearArguments() { + if (argumentsBuilder_ == null) { + arguments_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + } else { + argumentsBuilder_.clear(); + } + return this; + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder removeArguments(int index) { + if (argumentsBuilder_ == null) { + ensureArgumentsIsMutable(); + arguments_.remove(index); + onChanged(); + } else { + argumentsBuilder_.remove(index); + } + return this; + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public org.openmbee.opensysml.proto.Value.Builder getArgumentsBuilder( + int index) { + return internalGetArgumentsFieldBuilder().getBuilder(index); + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public org.openmbee.opensysml.proto.ValueOrBuilder getArgumentsOrBuilder( + int index) { + if (argumentsBuilder_ == null) { + return arguments_.get(index); } else { + return argumentsBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public java.util.List + getArgumentsOrBuilderList() { + if (argumentsBuilder_ != null) { + return argumentsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(arguments_); + } + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public org.openmbee.opensysml.proto.Value.Builder addArgumentsBuilder() { + return internalGetArgumentsFieldBuilder().addBuilder( + org.openmbee.opensysml.proto.Value.getDefaultInstance()); + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public org.openmbee.opensysml.proto.Value.Builder addArgumentsBuilder( + int index) { + return internalGetArgumentsFieldBuilder().addBuilder( + index, org.openmbee.opensysml.proto.Value.getDefaultInstance()); + } + /** + *
+     * Values for the constraint's `in` parameters, in declaration order, as
+     * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+     * does not take is INVALID_ARGUMENT, as is a parameter left without an
+     * argument or default. Reported as the "verification_arguments" capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public java.util.List + getArgumentsBuilderList() { + return internalGetArgumentsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + org.openmbee.opensysml.proto.Value, org.openmbee.opensysml.proto.Value.Builder, org.openmbee.opensysml.proto.ValueOrBuilder> + internalGetArgumentsFieldBuilder() { + if (argumentsBuilder_ == null) { + argumentsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + org.openmbee.opensysml.proto.Value, org.openmbee.opensysml.proto.Value.Builder, org.openmbee.opensysml.proto.ValueOrBuilder>( + arguments_, + ((bitField0_ & 0x00000020) != 0), + getParentForChildren(), + isClean()); + arguments_ = null; + } + return argumentsBuilder_; + } + + private static final class NamedArgumentsConverter implements com.google.protobuf.MapFieldBuilder.Converter { + @java.lang.Override + public org.openmbee.opensysml.proto.Value build(org.openmbee.opensysml.proto.ValueOrBuilder val) { + if (val instanceof org.openmbee.opensysml.proto.Value) { return (org.openmbee.opensysml.proto.Value) val; } + return ((org.openmbee.opensysml.proto.Value.Builder) val).build(); + } + + @java.lang.Override + public com.google.protobuf.MapEntry defaultEntry() { + return NamedArgumentsDefaultEntryHolder.defaultEntry; + } + }; + private static final NamedArgumentsConverter namedArgumentsConverter = new NamedArgumentsConverter(); + + private com.google.protobuf.MapFieldBuilder< + java.lang.String, org.openmbee.opensysml.proto.ValueOrBuilder, org.openmbee.opensysml.proto.Value, org.openmbee.opensysml.proto.Value.Builder> namedArguments_; + private com.google.protobuf.MapFieldBuilder + internalGetNamedArguments() { + if (namedArguments_ == null) { + return new com.google.protobuf.MapFieldBuilder<>(namedArgumentsConverter); + } + return namedArguments_; + } + private com.google.protobuf.MapFieldBuilder + internalGetMutableNamedArguments() { + if (namedArguments_ == null) { + namedArguments_ = new com.google.protobuf.MapFieldBuilder<>(namedArgumentsConverter); + } + bitField0_ |= 0x00000040; + onChanged(); + return namedArguments_; + } + public int getNamedArgumentsCount() { + return internalGetNamedArguments().ensureBuilderMap().size(); + } + /** + *
+     * Values for `in` parameters by name; see arguments.
+     * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public boolean containsNamedArguments( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + return internalGetNamedArguments().ensureBuilderMap().containsKey(key); + } + /** + * Use {@link #getNamedArgumentsMap()} instead. + */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getNamedArguments() { + return getNamedArgumentsMap(); + } + /** + *
+     * Values for `in` parameters by name; see arguments.
+     * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public java.util.Map getNamedArgumentsMap() { + return internalGetNamedArguments().getImmutableMap(); + } + /** + *
+     * Values for `in` parameters by name; see arguments.
+     * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public /* nullable */ +org.openmbee.opensysml.proto.Value getNamedArgumentsOrDefault( + java.lang.String key, + /* nullable */ +org.openmbee.opensysml.proto.Value defaultValue) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = internalGetMutableNamedArguments().ensureBuilderMap(); + return map.containsKey(key) ? namedArgumentsConverter.build(map.get(key)) : defaultValue; + } + /** + *
+     * Values for `in` parameters by name; see arguments.
+     * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public org.openmbee.opensysml.proto.Value getNamedArgumentsOrThrow( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = internalGetMutableNamedArguments().ensureBuilderMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return namedArgumentsConverter.build(map.get(key)); + } + public Builder clearNamedArguments() { + bitField0_ = (bitField0_ & ~0x00000040); + internalGetMutableNamedArguments().clear(); + return this; + } + /** + *
+     * Values for `in` parameters by name; see arguments.
+     * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + public Builder removeNamedArguments( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + internalGetMutableNamedArguments().ensureBuilderMap() + .remove(key); + return this; + } + /** + * Use alternate mutation accessors instead. + */ + @java.lang.Deprecated + public java.util.Map + getMutableNamedArguments() { + bitField0_ |= 0x00000040; + return internalGetMutableNamedArguments().ensureMessageMap(); + } + /** + *
+     * Values for `in` parameters by name; see arguments.
+     * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + public Builder putNamedArguments( + java.lang.String key, + org.openmbee.opensysml.proto.Value value) { + if (key == null) { throw new NullPointerException("map key"); } + if (value == null) { throw new NullPointerException("map value"); } + internalGetMutableNamedArguments().ensureBuilderMap() + .put(key, value); + bitField0_ |= 0x00000040; + return this; + } + /** + *
+     * Values for `in` parameters by name; see arguments.
+     * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + public Builder putAllNamedArguments( + java.util.Map values) { + for (java.util.Map.Entry e : values.entrySet()) { + if (e.getKey() == null || e.getValue() == null) { + throw new NullPointerException(); + } + } + internalGetMutableNamedArguments().ensureBuilderMap() + .putAll(values); + bitField0_ |= 0x00000040; + return this; + } + /** + *
+     * Values for `in` parameters by name; see arguments.
+     * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + public org.openmbee.opensysml.proto.Value.Builder putNamedArgumentsBuilderIfAbsent( + java.lang.String key) { + java.util.Map builderMap = internalGetMutableNamedArguments().ensureBuilderMap(); + org.openmbee.opensysml.proto.ValueOrBuilder entry = builderMap.get(key); + if (entry == null) { + entry = org.openmbee.opensysml.proto.Value.newBuilder(); + builderMap.put(key, entry); + } + if (entry instanceof org.openmbee.opensysml.proto.Value) { + entry = ((org.openmbee.opensysml.proto.Value) entry).toBuilder(); + builderMap.put(key, entry); + } + return (org.openmbee.opensysml.proto.Value.Builder) entry; + } + // @@protoc_insertion_point(builder_scope:sysml.VerifyConstraintRequest) } diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyConstraintRequestOrBuilder.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyConstraintRequestOrBuilder.java index 056fb6f321..8aa7156f49 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyConstraintRequestOrBuilder.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyConstraintRequestOrBuilder.java @@ -127,4 +127,117 @@ public interface VerifyConstraintRequestOrBuilder extends */ com.google.protobuf.ByteString getQuestionBytes(); + + /** + *
+   * Values for the constraint's `in` parameters, in declaration order, as
+   * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+   * does not take is INVALID_ARGUMENT, as is a parameter left without an
+   * argument or default. Reported as the "verification_arguments" capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + java.util.List + getArgumentsList(); + /** + *
+   * Values for the constraint's `in` parameters, in declaration order, as
+   * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+   * does not take is INVALID_ARGUMENT, as is a parameter left without an
+   * argument or default. Reported as the "verification_arguments" capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + org.openmbee.opensysml.proto.Value getArguments(int index); + /** + *
+   * Values for the constraint's `in` parameters, in declaration order, as
+   * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+   * does not take is INVALID_ARGUMENT, as is a parameter left without an
+   * argument or default. Reported as the "verification_arguments" capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + int getArgumentsCount(); + /** + *
+   * Values for the constraint's `in` parameters, in declaration order, as
+   * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+   * does not take is INVALID_ARGUMENT, as is a parameter left without an
+   * argument or default. Reported as the "verification_arguments" capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + java.util.List + getArgumentsOrBuilderList(); + /** + *
+   * Values for the constraint's `in` parameters, in declaration order, as
+   * RunAnalysisRequest.arguments binds a case's; an argument the constraint
+   * does not take is INVALID_ARGUMENT, as is a parameter left without an
+   * argument or default. Reported as the "verification_arguments" capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + org.openmbee.opensysml.proto.ValueOrBuilder getArgumentsOrBuilder( + int index); + + /** + *
+   * Values for `in` parameters by name; see arguments.
+   * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + int getNamedArgumentsCount(); + /** + *
+   * Values for `in` parameters by name; see arguments.
+   * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + boolean containsNamedArguments( + java.lang.String key); + /** + * Use {@link #getNamedArgumentsMap()} instead. + */ + @java.lang.Deprecated + java.util.Map + getNamedArguments(); + /** + *
+   * Values for `in` parameters by name; see arguments.
+   * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + java.util.Map + getNamedArgumentsMap(); + /** + *
+   * Values for `in` parameters by name; see arguments.
+   * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + /* nullable */ +org.openmbee.opensysml.proto.Value getNamedArgumentsOrDefault( + java.lang.String key, + /* nullable */ +org.openmbee.opensysml.proto.Value defaultValue); + /** + *
+   * Values for `in` parameters by name; see arguments.
+   * 
+ * + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + org.openmbee.opensysml.proto.Value getNamedArgumentsOrThrow( + java.lang.String key); } diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyRequirementRequest.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyRequirementRequest.java index 59e2b65f8f..076cb45c1a 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyRequirementRequest.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyRequirementRequest.java @@ -38,6 +38,7 @@ private VerifyRequirementRequest() { subjectSymbolId_ = ""; engine_ = ""; question_ = ""; + arguments_ = java.util.Collections.emptyList(); } public static final com.google.protobuf.Descriptors.Descriptor @@ -45,6 +46,18 @@ private VerifyRequirementRequest() { return org.openmbee.opensysml.proto.Sysml.internal_static_sysml_VerifyRequirementRequest_descriptor; } + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 7: + return internalGetNamedArguments(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { @@ -282,6 +295,156 @@ public java.lang.String getQuestion() { } } + public static final int ARGUMENTS_FIELD_NUMBER = 6; + @SuppressWarnings("serial") + private java.util.List arguments_; + /** + *
+   * Values for the requirement's `in` parameters, positional and by name; see
+   * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+   * capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + @java.lang.Override + public java.util.List getArgumentsList() { + return arguments_; + } + /** + *
+   * Values for the requirement's `in` parameters, positional and by name; see
+   * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+   * capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + @java.lang.Override + public java.util.List + getArgumentsOrBuilderList() { + return arguments_; + } + /** + *
+   * Values for the requirement's `in` parameters, positional and by name; see
+   * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+   * capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + @java.lang.Override + public int getArgumentsCount() { + return arguments_.size(); + } + /** + *
+   * Values for the requirement's `in` parameters, positional and by name; see
+   * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+   * capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + @java.lang.Override + public org.openmbee.opensysml.proto.Value getArguments(int index) { + return arguments_.get(index); + } + /** + *
+   * Values for the requirement's `in` parameters, positional and by name; see
+   * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+   * capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + @java.lang.Override + public org.openmbee.opensysml.proto.ValueOrBuilder getArgumentsOrBuilder( + int index) { + return arguments_.get(index); + } + + public static final int NAMED_ARGUMENTS_FIELD_NUMBER = 7; + private static final class NamedArgumentsDefaultEntryHolder { + static final com.google.protobuf.MapEntry< + java.lang.String, org.openmbee.opensysml.proto.Value> defaultEntry = + com.google.protobuf.MapEntry + .newDefaultInstance( + org.openmbee.opensysml.proto.Sysml.internal_static_sysml_VerifyRequirementRequest_NamedArgumentsEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.MESSAGE, + org.openmbee.opensysml.proto.Value.getDefaultInstance()); + } + @SuppressWarnings("serial") + private com.google.protobuf.MapField< + java.lang.String, org.openmbee.opensysml.proto.Value> namedArguments_; + private com.google.protobuf.MapField + internalGetNamedArguments() { + if (namedArguments_ == null) { + return com.google.protobuf.MapField.emptyMapField( + NamedArgumentsDefaultEntryHolder.defaultEntry); + } + return namedArguments_; + } + public int getNamedArgumentsCount() { + return internalGetNamedArguments().getMap().size(); + } + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public boolean containsNamedArguments( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + return internalGetNamedArguments().getMap().containsKey(key); + } + /** + * Use {@link #getNamedArgumentsMap()} instead. + */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getNamedArguments() { + return getNamedArgumentsMap(); + } + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public java.util.Map getNamedArgumentsMap() { + return internalGetNamedArguments().getMap(); + } + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public /* nullable */ +org.openmbee.opensysml.proto.Value getNamedArgumentsOrDefault( + java.lang.String key, + /* nullable */ +org.openmbee.opensysml.proto.Value defaultValue) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = + internalGetNamedArguments().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public org.openmbee.opensysml.proto.Value getNamedArgumentsOrThrow( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = + internalGetNamedArguments().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -311,6 +474,15 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!com.google.protobuf.GeneratedMessage.isStringEmpty(question_)) { com.google.protobuf.GeneratedMessage.writeString(output, 5, question_); } + for (int i = 0; i < arguments_.size(); i++) { + output.writeMessage(6, arguments_.get(i)); + } + com.google.protobuf.GeneratedMessage + .serializeStringMapTo( + output, + internalGetNamedArguments(), + NamedArgumentsDefaultEntryHolder.defaultEntry, + 7); getUnknownFields().writeTo(output); } @@ -335,6 +507,20 @@ public int getSerializedSize() { if (!com.google.protobuf.GeneratedMessage.isStringEmpty(question_)) { size += com.google.protobuf.GeneratedMessage.computeStringSize(5, question_); } + for (int i = 0; i < arguments_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, arguments_.get(i)); + } + for (java.util.Map.Entry entry + : internalGetNamedArguments().getMap().entrySet()) { + com.google.protobuf.MapEntry + namedArguments__ = NamedArgumentsDefaultEntryHolder.defaultEntry.newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, namedArguments__); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -360,6 +546,10 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getEngine())) return false; if (!getQuestion() .equals(other.getQuestion())) return false; + if (!getArgumentsList() + .equals(other.getArgumentsList())) return false; + if (!internalGetNamedArguments().equals( + other.internalGetNamedArguments())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -381,6 +571,14 @@ public int hashCode() { hash = (53 * hash) + getEngine().hashCode(); hash = (37 * hash) + QUESTION_FIELD_NUMBER; hash = (53 * hash) + getQuestion().hashCode(); + if (getArgumentsCount() > 0) { + hash = (37 * hash) + ARGUMENTS_FIELD_NUMBER; + hash = (53 * hash) + getArgumentsList().hashCode(); + } + if (!internalGetNamedArguments().getMap().isEmpty()) { + hash = (37 * hash) + NAMED_ARGUMENTS_FIELD_NUMBER; + hash = (53 * hash) + internalGetNamedArguments().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -495,6 +693,28 @@ public static final class Builder extends return org.openmbee.opensysml.proto.Sysml.internal_static_sysml_VerifyRequirementRequest_descriptor; } + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 7: + return internalGetNamedArguments(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 7: + return internalGetMutableNamedArguments(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } @java.lang.Override protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { @@ -522,6 +742,14 @@ public Builder clear() { subjectSymbolId_ = ""; engine_ = ""; question_ = ""; + if (argumentsBuilder_ == null) { + arguments_ = java.util.Collections.emptyList(); + } else { + arguments_ = null; + argumentsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + internalGetMutableNamedArguments().clear(); return this; } @@ -548,11 +776,24 @@ public org.openmbee.opensysml.proto.VerifyRequirementRequest build() { @java.lang.Override public org.openmbee.opensysml.proto.VerifyRequirementRequest buildPartial() { org.openmbee.opensysml.proto.VerifyRequirementRequest result = new org.openmbee.opensysml.proto.VerifyRequirementRequest(this); + buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } + private void buildPartialRepeatedFields(org.openmbee.opensysml.proto.VerifyRequirementRequest result) { + if (argumentsBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0)) { + arguments_ = java.util.Collections.unmodifiableList(arguments_); + bitField0_ = (bitField0_ & ~0x00000020); + } + result.arguments_ = arguments_; + } else { + result.arguments_ = argumentsBuilder_.build(); + } + } + private void buildPartial0(org.openmbee.opensysml.proto.VerifyRequirementRequest result) { int from_bitField0_ = bitField0_; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -570,6 +811,9 @@ private void buildPartial0(org.openmbee.opensysml.proto.VerifyRequirementRequest if (((from_bitField0_ & 0x00000010) != 0)) { result.question_ = question_; } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.namedArguments_ = internalGetNamedArguments().build(NamedArgumentsDefaultEntryHolder.defaultEntry); + } } @java.lang.Override @@ -609,6 +853,35 @@ public Builder mergeFrom(org.openmbee.opensysml.proto.VerifyRequirementRequest o bitField0_ |= 0x00000010; onChanged(); } + if (argumentsBuilder_ == null) { + if (!other.arguments_.isEmpty()) { + if (arguments_.isEmpty()) { + arguments_ = other.arguments_; + bitField0_ = (bitField0_ & ~0x00000020); + } else { + ensureArgumentsIsMutable(); + arguments_.addAll(other.arguments_); + } + onChanged(); + } + } else { + if (!other.arguments_.isEmpty()) { + if (argumentsBuilder_.isEmpty()) { + argumentsBuilder_.dispose(); + argumentsBuilder_ = null; + arguments_ = other.arguments_; + bitField0_ = (bitField0_ & ~0x00000020); + argumentsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + internalGetArgumentsFieldBuilder() : null; + } else { + argumentsBuilder_.addAllMessages(other.arguments_); + } + } + } + internalGetMutableNamedArguments().mergeFrom( + other.internalGetNamedArguments()); + bitField0_ |= 0x00000040; this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -660,6 +933,28 @@ public Builder mergeFrom( bitField0_ |= 0x00000010; break; } // case 42 + case 50: { + org.openmbee.opensysml.proto.Value m = + input.readMessage( + org.openmbee.opensysml.proto.Value.parser(), + extensionRegistry); + if (argumentsBuilder_ == null) { + ensureArgumentsIsMutable(); + arguments_.add(m); + } else { + argumentsBuilder_.addMessage(m); + } + break; + } // case 50 + case 58: { + com.google.protobuf.MapEntry + namedArguments__ = input.readMessage( + NamedArgumentsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry); + internalGetMutableNamedArguments().ensureBuilderMap().put( + namedArguments__.getKey(), namedArguments__.getValue()); + bitField0_ |= 0x00000040; + break; + } // case 58 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { done = true; // was an endgroup tag @@ -1122,6 +1417,509 @@ public Builder setQuestionBytes( return this; } + private java.util.List arguments_ = + java.util.Collections.emptyList(); + private void ensureArgumentsIsMutable() { + if (!((bitField0_ & 0x00000020) != 0)) { + arguments_ = new java.util.ArrayList(arguments_); + bitField0_ |= 0x00000020; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + org.openmbee.opensysml.proto.Value, org.openmbee.opensysml.proto.Value.Builder, org.openmbee.opensysml.proto.ValueOrBuilder> argumentsBuilder_; + + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public java.util.List getArgumentsList() { + if (argumentsBuilder_ == null) { + return java.util.Collections.unmodifiableList(arguments_); + } else { + return argumentsBuilder_.getMessageList(); + } + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public int getArgumentsCount() { + if (argumentsBuilder_ == null) { + return arguments_.size(); + } else { + return argumentsBuilder_.getCount(); + } + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public org.openmbee.opensysml.proto.Value getArguments(int index) { + if (argumentsBuilder_ == null) { + return arguments_.get(index); + } else { + return argumentsBuilder_.getMessage(index); + } + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder setArguments( + int index, org.openmbee.opensysml.proto.Value value) { + if (argumentsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureArgumentsIsMutable(); + arguments_.set(index, value); + onChanged(); + } else { + argumentsBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder setArguments( + int index, org.openmbee.opensysml.proto.Value.Builder builderForValue) { + if (argumentsBuilder_ == null) { + ensureArgumentsIsMutable(); + arguments_.set(index, builderForValue.build()); + onChanged(); + } else { + argumentsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder addArguments(org.openmbee.opensysml.proto.Value value) { + if (argumentsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureArgumentsIsMutable(); + arguments_.add(value); + onChanged(); + } else { + argumentsBuilder_.addMessage(value); + } + return this; + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder addArguments( + int index, org.openmbee.opensysml.proto.Value value) { + if (argumentsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureArgumentsIsMutable(); + arguments_.add(index, value); + onChanged(); + } else { + argumentsBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder addArguments( + org.openmbee.opensysml.proto.Value.Builder builderForValue) { + if (argumentsBuilder_ == null) { + ensureArgumentsIsMutable(); + arguments_.add(builderForValue.build()); + onChanged(); + } else { + argumentsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder addArguments( + int index, org.openmbee.opensysml.proto.Value.Builder builderForValue) { + if (argumentsBuilder_ == null) { + ensureArgumentsIsMutable(); + arguments_.add(index, builderForValue.build()); + onChanged(); + } else { + argumentsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder addAllArguments( + java.lang.Iterable values) { + if (argumentsBuilder_ == null) { + ensureArgumentsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, arguments_); + onChanged(); + } else { + argumentsBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder clearArguments() { + if (argumentsBuilder_ == null) { + arguments_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + } else { + argumentsBuilder_.clear(); + } + return this; + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public Builder removeArguments(int index) { + if (argumentsBuilder_ == null) { + ensureArgumentsIsMutable(); + arguments_.remove(index); + onChanged(); + } else { + argumentsBuilder_.remove(index); + } + return this; + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public org.openmbee.opensysml.proto.Value.Builder getArgumentsBuilder( + int index) { + return internalGetArgumentsFieldBuilder().getBuilder(index); + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public org.openmbee.opensysml.proto.ValueOrBuilder getArgumentsOrBuilder( + int index) { + if (argumentsBuilder_ == null) { + return arguments_.get(index); } else { + return argumentsBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public java.util.List + getArgumentsOrBuilderList() { + if (argumentsBuilder_ != null) { + return argumentsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(arguments_); + } + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public org.openmbee.opensysml.proto.Value.Builder addArgumentsBuilder() { + return internalGetArgumentsFieldBuilder().addBuilder( + org.openmbee.opensysml.proto.Value.getDefaultInstance()); + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public org.openmbee.opensysml.proto.Value.Builder addArgumentsBuilder( + int index) { + return internalGetArgumentsFieldBuilder().addBuilder( + index, org.openmbee.opensysml.proto.Value.getDefaultInstance()); + } + /** + *
+     * Values for the requirement's `in` parameters, positional and by name; see
+     * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+     * capability.
+     * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + public java.util.List + getArgumentsBuilderList() { + return internalGetArgumentsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + org.openmbee.opensysml.proto.Value, org.openmbee.opensysml.proto.Value.Builder, org.openmbee.opensysml.proto.ValueOrBuilder> + internalGetArgumentsFieldBuilder() { + if (argumentsBuilder_ == null) { + argumentsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + org.openmbee.opensysml.proto.Value, org.openmbee.opensysml.proto.Value.Builder, org.openmbee.opensysml.proto.ValueOrBuilder>( + arguments_, + ((bitField0_ & 0x00000020) != 0), + getParentForChildren(), + isClean()); + arguments_ = null; + } + return argumentsBuilder_; + } + + private static final class NamedArgumentsConverter implements com.google.protobuf.MapFieldBuilder.Converter { + @java.lang.Override + public org.openmbee.opensysml.proto.Value build(org.openmbee.opensysml.proto.ValueOrBuilder val) { + if (val instanceof org.openmbee.opensysml.proto.Value) { return (org.openmbee.opensysml.proto.Value) val; } + return ((org.openmbee.opensysml.proto.Value.Builder) val).build(); + } + + @java.lang.Override + public com.google.protobuf.MapEntry defaultEntry() { + return NamedArgumentsDefaultEntryHolder.defaultEntry; + } + }; + private static final NamedArgumentsConverter namedArgumentsConverter = new NamedArgumentsConverter(); + + private com.google.protobuf.MapFieldBuilder< + java.lang.String, org.openmbee.opensysml.proto.ValueOrBuilder, org.openmbee.opensysml.proto.Value, org.openmbee.opensysml.proto.Value.Builder> namedArguments_; + private com.google.protobuf.MapFieldBuilder + internalGetNamedArguments() { + if (namedArguments_ == null) { + return new com.google.protobuf.MapFieldBuilder<>(namedArgumentsConverter); + } + return namedArguments_; + } + private com.google.protobuf.MapFieldBuilder + internalGetMutableNamedArguments() { + if (namedArguments_ == null) { + namedArguments_ = new com.google.protobuf.MapFieldBuilder<>(namedArgumentsConverter); + } + bitField0_ |= 0x00000040; + onChanged(); + return namedArguments_; + } + public int getNamedArgumentsCount() { + return internalGetNamedArguments().ensureBuilderMap().size(); + } + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public boolean containsNamedArguments( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + return internalGetNamedArguments().ensureBuilderMap().containsKey(key); + } + /** + * Use {@link #getNamedArgumentsMap()} instead. + */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getNamedArguments() { + return getNamedArgumentsMap(); + } + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public java.util.Map getNamedArgumentsMap() { + return internalGetNamedArguments().getImmutableMap(); + } + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public /* nullable */ +org.openmbee.opensysml.proto.Value getNamedArgumentsOrDefault( + java.lang.String key, + /* nullable */ +org.openmbee.opensysml.proto.Value defaultValue) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = internalGetMutableNamedArguments().ensureBuilderMap(); + return map.containsKey(key) ? namedArgumentsConverter.build(map.get(key)) : defaultValue; + } + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + @java.lang.Override + public org.openmbee.opensysml.proto.Value getNamedArgumentsOrThrow( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = internalGetMutableNamedArguments().ensureBuilderMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return namedArgumentsConverter.build(map.get(key)); + } + public Builder clearNamedArguments() { + bitField0_ = (bitField0_ & ~0x00000040); + internalGetMutableNamedArguments().clear(); + return this; + } + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + public Builder removeNamedArguments( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + internalGetMutableNamedArguments().ensureBuilderMap() + .remove(key); + return this; + } + /** + * Use alternate mutation accessors instead. + */ + @java.lang.Deprecated + public java.util.Map + getMutableNamedArguments() { + bitField0_ |= 0x00000040; + return internalGetMutableNamedArguments().ensureMessageMap(); + } + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + public Builder putNamedArguments( + java.lang.String key, + org.openmbee.opensysml.proto.Value value) { + if (key == null) { throw new NullPointerException("map key"); } + if (value == null) { throw new NullPointerException("map value"); } + internalGetMutableNamedArguments().ensureBuilderMap() + .put(key, value); + bitField0_ |= 0x00000040; + return this; + } + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + public Builder putAllNamedArguments( + java.util.Map values) { + for (java.util.Map.Entry e : values.entrySet()) { + if (e.getKey() == null || e.getValue() == null) { + throw new NullPointerException(); + } + } + internalGetMutableNamedArguments().ensureBuilderMap() + .putAll(values); + bitField0_ |= 0x00000040; + return this; + } + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + public org.openmbee.opensysml.proto.Value.Builder putNamedArgumentsBuilderIfAbsent( + java.lang.String key) { + java.util.Map builderMap = internalGetMutableNamedArguments().ensureBuilderMap(); + org.openmbee.opensysml.proto.ValueOrBuilder entry = builderMap.get(key); + if (entry == null) { + entry = org.openmbee.opensysml.proto.Value.newBuilder(); + builderMap.put(key, entry); + } + if (entry instanceof org.openmbee.opensysml.proto.Value) { + entry = ((org.openmbee.opensysml.proto.Value) entry).toBuilder(); + builderMap.put(key, entry); + } + return (org.openmbee.opensysml.proto.Value.Builder) entry; + } + // @@protoc_insertion_point(builder_scope:sysml.VerifyRequirementRequest) } diff --git a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyRequirementRequestOrBuilder.java b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyRequirementRequestOrBuilder.java index b140156cf9..5d692ada6c 100644 --- a/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyRequirementRequestOrBuilder.java +++ b/client/java/opensysml-client/src/main/java/org/openmbee/opensysml/proto/VerifyRequirementRequestOrBuilder.java @@ -103,4 +103,92 @@ public interface VerifyRequirementRequestOrBuilder extends */ com.google.protobuf.ByteString getQuestionBytes(); + + /** + *
+   * Values for the requirement's `in` parameters, positional and by name; see
+   * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+   * capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + java.util.List + getArgumentsList(); + /** + *
+   * Values for the requirement's `in` parameters, positional and by name; see
+   * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+   * capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + org.openmbee.opensysml.proto.Value getArguments(int index); + /** + *
+   * Values for the requirement's `in` parameters, positional and by name; see
+   * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+   * capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + int getArgumentsCount(); + /** + *
+   * Values for the requirement's `in` parameters, positional and by name; see
+   * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+   * capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + java.util.List + getArgumentsOrBuilderList(); + /** + *
+   * Values for the requirement's `in` parameters, positional and by name; see
+   * VerifyConstraintRequest.arguments. Reported as the "verification_arguments"
+   * capability.
+   * 
+ * + * repeated .sysml.Value arguments = 6 [json_name = "arguments"]; + */ + org.openmbee.opensysml.proto.ValueOrBuilder getArgumentsOrBuilder( + int index); + + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + int getNamedArgumentsCount(); + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + boolean containsNamedArguments( + java.lang.String key); + /** + * Use {@link #getNamedArgumentsMap()} instead. + */ + @java.lang.Deprecated + java.util.Map + getNamedArguments(); + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + java.util.Map + getNamedArgumentsMap(); + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + /* nullable */ +org.openmbee.opensysml.proto.Value getNamedArgumentsOrDefault( + java.lang.String key, + /* nullable */ +org.openmbee.opensysml.proto.Value defaultValue); + /** + * map<string, .sysml.Value> named_arguments = 7 [json_name = "namedArguments"]; + */ + org.openmbee.opensysml.proto.Value getNamedArgumentsOrThrow( + java.lang.String key); } diff --git a/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/ApiIntegrationTest.java b/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/ApiIntegrationTest.java index ced98bde9c..196048400d 100644 --- a/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/ApiIntegrationTest.java +++ b/client/java/opensysml-client/src/test/java/org/openmbee/opensysml/ApiIntegrationTest.java @@ -863,6 +863,68 @@ void aConstraintIsVerifiedAgainstDeclaredValuesOrAnObjectAndAFalseAnswerIsNotAFa assertFalse(wrongKind.verdict().error().orElseThrow().isEmpty()); } + private static final String BOUND = + """ + package Bound { + private import ScalarValues::*; + part def Thing { attribute v : Integer = 2; } + part t : Thing; + requirement def Under { + subject s : Thing; + in limit : Integer; + in slack : Integer = 0; + require constraint { s.v + slack < limit } + } + constraint def Between { + in low : Integer; + in high : Integer = 10; + low < high + } + } + """; + + @Test + void argumentsBindTheInParametersOfARequirementOrConstraint() { + Model model = connection.parse(BOUND); + Verification named = + model.verifyRequirement( + "Bound::Under", + "Bound::t", + VerifyOptions.defaults().withNamedArguments(Map.of("limit", new Value.IntegerValue(5)))); + assertTrue(named.holds()); + Verification positional = + model.verifyRequirement( + "Bound::Under", + "Bound::t", + VerifyOptions.defaults() + .withArguments(new Value.IntegerValue(5), new Value.IntegerValue(4))); + assertFalse(positional.holds()); + assertTrue(positional.verdict().violated()); + assertTrue( + model + .verifyConstraint( + "Bound::Between", VerifyOptions.defaults().withArguments(new Value.IntegerValue(3))) + .holds()); + Verification unknown = + model.verifyRequirement( + "Bound::Under", + "Bound::t", + VerifyOptions.defaults() + .withNamedArguments( + Map.of("limit", new Value.IntegerValue(5), "bound", new Value.IntegerValue(1)))); + assertFalse(unknown.holds()); + assertTrue(unknown.verdict().error().orElse("").contains("bound"), unknown.toString()); + ServiceException solver = + assertThrows( + ServiceException.class, + () -> + model.verifyConstraint( + "Bound::Between", + VerifyOptions.asking(VerifyOptions.QUESTION_HOLDS) + .withArguments(new Value.IntegerValue(3)))); + assertTrue(solver.getMessage().contains("holds"), solver.getMessage()); + } + @Test void requirementsAndSatisfactionsReportEachVerdict() { Model model = connection.parse(VERIFICATION); diff --git a/client/julia/OpenSysML/src/OpenSysML.jl b/client/julia/OpenSysML/src/OpenSysML.jl index 7bc17eadd5..088f00ef86 100644 --- a/client/julia/OpenSysML/src/OpenSysML.jl +++ b/client/julia/OpenSysML/src/OpenSysML.jl @@ -98,7 +98,7 @@ end for capability in ( :CAPABILITY_TYPE_FACTS, :CAPABILITY_CONVERT, :CAPABILITY_MIGRATE, :CAPABILITY_VERIFICATION, - :CAPABILITY_VERIFICATION_QUESTIONS, :CAPABILITY_QUERY, :CAPABILITY_OSLC_QUERY, + :CAPABILITY_VERIFICATION_QUESTIONS, :CAPABILITY_VERIFICATION_ARGUMENTS, :CAPABILITY_QUERY, :CAPABILITY_OSLC_QUERY, :CAPABILITY_DOCUMENT_QUERY, :CAPABILITY_RENDER_DOCUMENT, :CAPABILITY_RENDER_DOCUMENT_HTML, :CAPABILITY_RENDER_VIEW, :CAPABILITY_EXPORT_GRAPHS, :CAPABILITY_ENUM_VALUES, diff --git a/client/julia/OpenSysML/src/capabilities.jl b/client/julia/OpenSysML/src/capabilities.jl index 47deb5781d..5b813d046d 100644 --- a/client/julia/OpenSysML/src/capabilities.jl +++ b/client/julia/OpenSysML/src/capabilities.jl @@ -3,6 +3,7 @@ const CAPABILITY_CONVERT = "convert" const CAPABILITY_MIGRATE = "migrate" const CAPABILITY_VERIFICATION = "verification" const CAPABILITY_VERIFICATION_QUESTIONS = "verification_questions" +const CAPABILITY_VERIFICATION_ARGUMENTS = "verification_arguments" const CAPABILITY_QUERY = "query" const CAPABILITY_OSLC_QUERY = "oslc_query" const CAPABILITY_DOCUMENT_QUERY = "document_query" diff --git a/client/julia/OpenSysML/src/verification.jl b/client/julia/OpenSysML/src/verification.jl index f8009cb8dd..4dc1a4e23b 100644 --- a/client/julia/OpenSysML/src/verification.jl +++ b/client/julia/OpenSysML/src/verification.jl @@ -67,39 +67,58 @@ function _verdict(raw, instances, diagnostics, verifications=VerificationVerdict end function _verification_call(model::Model, method::String, request; - engine=nothing, question=nothing) - require_capability(model.connection, CAPABILITY_VERIFICATION) - _engine_preflight(model.connection, engine) - _question_preflight(model.connection, question) + engine=nothing, question=nothing, + arguments=Any[], named_arguments=Dict()) + conn = model.connection + require_capability(conn, CAPABILITY_VERIFICATION) + _engine_preflight(conn, engine) + _question_preflight(conn, question) needed = String[CAPABILITY_VERIFICATION] append!(needed, _engine_capabilities(engine)) append!(needed, _question_capabilities(question)) + if !isempty(arguments) || !isempty(named_arguments) + require_capability(conn, CAPABILITY_VERIFICATION_ARGUMENTS) + request["arguments"] = _encoded_arguments(conn, arguments) + request["namedArguments"] = Dict{String,Any}(String(k) => _encoded(conn, v) + for (k, v) in pairs(named_arguments)) + append!(needed, (CAPABILITY_VERIFICATION_ARGUMENTS, CAPABILITY_COMPLEX_VALUES, + CAPABILITY_STRUCTURED_VALUES, CAPABILITY_MEASUREMENT_REFS, CAPABILITY_SET_VALUES, + CAPABILITY_TENSOR_VALUES, CAPABILITY_METAOBJECT_VALUES)) + end answer = _translate(; capabilities=Tuple(needed), connection=model.connection) do call(model.connection, method, request) end return _single_verdict(model.connection, answer) end -"""Ask whether a constraint holds, optionally for a subject or engine.""" +"""Ask whether a constraint holds, optionally for a subject or engine. + +`arguments` bind its `in` parameters in declaration order and `named_arguments` by name; +both need the `verification_arguments` capability.""" function verify_constraint(model::Model, symbol_id::AbstractString; - subject=nothing, engine=nothing, question=nothing) + subject=nothing, engine=nothing, question=nothing, + arguments=Any[], named_arguments=Dict()) _verification_call(model, "VerifyConstraint", Dict{String,Any}("modelHash" => model.hash, "symbolId" => String(symbol_id), "subjectSymbolId" => subject === nothing ? "" : String(subject), "engine" => engine === nothing || engine == "auto" ? "" : String(engine), "question" => question === nothing || question == "evaluate" ? "" : String(question)); - engine=engine, question=question) + engine=engine, question=question, arguments=arguments, named_arguments=named_arguments) end -"""Ask whether a requirement is satisfied, optionally for a subject or engine.""" +"""Ask whether a requirement is satisfied, optionally for a subject or engine. + +`arguments` bind its `in` parameters in declaration order and `named_arguments` by name; +both need the `verification_arguments` capability.""" function verify_requirement(model::Model, symbol_id::AbstractString; - subject=nothing, engine=nothing, question=nothing) + subject=nothing, engine=nothing, question=nothing, + arguments=Any[], named_arguments=Dict()) _verification_call(model, "VerifyRequirement", Dict{String,Any}("modelHash" => model.hash, "symbolId" => String(symbol_id), "subjectSymbolId" => subject === nothing ? "" : String(subject), "engine" => engine === nothing || engine == "auto" ? "" : String(engine), "question" => question === nothing || question == "evaluate" ? "" : String(question)); - engine=engine, question=question) + engine=engine, question=question, arguments=arguments, named_arguments=named_arguments) end """Return verdicts for the model's satisfaction assertions.""" diff --git a/client/julia/OpenSysML/test/extended_client.jl b/client/julia/OpenSysML/test/extended_client.jl index e766555404..cebefdbad2 100644 --- a/client/julia/OpenSysML/test/extended_client.jl +++ b/client/julia/OpenSysML/test/extended_client.jl @@ -265,6 +265,34 @@ end end end +@testset "verification argument capability preflight" begin + server, requests, address = recording_service(["verification"]) + conn = external(address) + try + model = Model(conn, "hash", Diagnostic[]) + err = try + verify_requirement(model, "R"; named_arguments=Dict("limit" => 5)) + nothing + catch exception + exception + end + @test err isa MissingCapabilityError + @test err.capability == CAPABILITY_VERIFICATION_ARGUMENTS + err = try + verify_constraint(model, "C"; arguments=[3]) + nothing + catch exception + exception + end + @test err isa MissingCapabilityError + @test err.capability == CAPABILITY_VERIFICATION_ARGUMENTS + @test [request.method for request in requests] == ["GetServerInfo"] + finally + close(conn) + close(server) + end +end + @testset "OSLC query capability preflight" begin server, requests, address = recording_service(["query"]) conn = external(address) @@ -591,6 +619,31 @@ end @test verify_constraint(verification, "Demo::Vehicle::massPositive").holds @test verify_requirement(verification, "Demo::Vehicle::lightEnough"; subject="Demo::sedan").holds + bound = parse_source(conn, """ + package Bound { + private import ScalarValues::*; + part def Thing { attribute v : Integer = 2; } + part t : Thing; + requirement def Under { + subject s : Thing; + in limit : Integer; + in slack : Integer = 0; + require constraint { s.v + slack < limit } + } + constraint def Between { + in low : Integer; + in high : Integer = 10; + low < high + } + } + """) + @test verify_requirement(bound, "Bound::Under"; subject="Bound::t", + named_arguments=Dict("limit" => 5)).holds + @test !verify_requirement(bound, "Bound::Under"; subject="Bound::t", + arguments=[5, 4]).holds + @test verify_constraint(bound, "Bound::Between"; arguments=[3]).holds + @test !verify_constraint(bound, "Bound::Between"; + named_arguments=Dict("low" => 3, "high" => 1)).holds @test !isempty(verify_satisfaction(verification)) @test !isempty(verify_satisfaction(verification; symbol="Demo::analysis")) @test !satisfied(verification; symbol="Demo::analysis") diff --git a/client/matlab/+opensysml/+internal/verifyOne.m b/client/matlab/+opensysml/+internal/verifyOne.m index e971703d4c..605c9614ca 100644 --- a/client/matlab/+opensysml/+internal/verifyOne.m +++ b/client/matlab/+opensysml/+internal/verifyOne.m @@ -3,7 +3,8 @@ label = ['verify' upper(kind(1)) kind(2:end)]; options = opensysml.internal.nameValueOptions(struct( ... - 'subject', '', 'engine', '', 'question', ''), varargin, label); + 'subject', '', 'engine', '', 'question', '', ... + 'arguments', {{}}, 'namedArguments', struct()), varargin, label); model.connection.require('verification'); engine = opensysml.internal.normalizeEngine(options.engine); question = opensysml.internal.normalizeQuestion(options.question); @@ -18,6 +19,18 @@ if ~isempty(engine), capabilities{end+1} = 'engines'; end if strcmp(char(options.engine), 'explore'), capabilities{end+1} = 'schedule_explore'; end if ~isempty(question), capabilities{end+1} = 'verification_questions'; end + bound = ~isempty(options.arguments) || ... + (isstruct(options.namedArguments) && ~isempty(fieldnames(options.namedArguments))); + if bound + model.connection.require('verification_arguments'); + request.arguments = opensysml.internal.encodeArguments(options.arguments, ... + model.connection, [label ' arguments']); + request.namedArguments = opensysml.internal.encodeNamedArguments( ... + options.namedArguments, model.connection, [label ' namedArguments']); + capabilities = [capabilities, {'verification_arguments', 'complex_values', ... + 'structured_values', 'measurement_refs', 'set_values', 'tensor_values', ... + 'metaobject_values'}]; + end raw = opensysml.internal.checkError(opensysml.call(model.connection, ... methodName, request, capabilities), methodName); diagnostics = opensysml.internal.decodeDiagnostics(fieldOr(raw, 'diagnostics', {})); diff --git a/client/matlab/tests/test_surface_live.m b/client/matlab/tests/test_surface_live.m index f9bb9bb381..7af590fe4e 100644 --- a/client/matlab/tests/test_surface_live.m +++ b/client/matlab/tests/test_surface_live.m @@ -239,6 +239,27 @@ function test_surface_live() assert_equal(isa(requirementVerdict, 'opensysml.Verdict'), true, 'verifyRequirement'); assert_equal(isa(requirementMethod, 'opensysml.Verdict'), true, ... 'Model.verifyRequirement'); + bound = opensysml.parseSource(conn, sprintf([ ... + 'package Bound {\n' ... + ' private import ScalarValues::*;\n' ... + ' part def Thing { attribute v : Integer = 2; }\n' ... + ' part t : Thing;\n' ... + ' requirement def Under {\n' ... + ' subject s : Thing;\n' ... + ' in limit : Integer;\n' ... + ' in slack : Integer = 0;\n' ... + ' require constraint { s.v + slack < limit }\n' ... + ' }\n' ... + ' constraint def Between { in low : Integer; in high : Integer = 10; low < high }\n' ... + '}\n']), 'name', 'bound.sysml'); + boundNamed = bound.verifyRequirement('Bound::Under', 'subject', 'Bound::t', ... + 'namedArguments', struct('limit', int64(5))); + assert_equal(boundNamed.holds, true, 'verifyRequirement namedArguments'); + boundPositional = opensysml.verifyRequirement(bound, 'Bound::Under', ... + 'subject', 'Bound::t', 'arguments', {int64(5), int64(4)}); + assert_equal(boundPositional.holds, false, 'verifyRequirement arguments'); + boundConstraint = bound.verifyConstraint('Bound::Between', 'arguments', {int64(3)}); + assert_equal(boundConstraint.holds, true, 'verifyConstraint arguments'); satisfaction = opensysml.verifySatisfaction(cases, 'symbol', 'Demo::checks'); satisfactionMethod = cases.verifySatisfaction('symbol', 'Demo::checks'); assert_equal(iscell(satisfaction), true, 'verifySatisfaction'); diff --git a/client/node/src/core/capabilities.ts b/client/node/src/core/capabilities.ts index 22f20eb2c8..dc40e2477e 100644 --- a/client/node/src/core/capabilities.ts +++ b/client/node/src/core/capabilities.ts @@ -49,6 +49,8 @@ export const CAPABILITY_MIGRATE = "migrate"; export const CAPABILITY_VERIFICATION = "verification"; /** The `question` field of the verification RPCs. */ export const CAPABILITY_VERIFICATION_QUESTIONS = "verification_questions"; +/** `arguments` and `named_arguments` on VerifyConstraint and VerifyRequirement. */ +export const CAPABILITY_VERIFICATION_ARGUMENTS = "verification_arguments"; /** The `Query` RPC. */ export const CAPABILITY_QUERY = "query"; /** The `RunDocumentQuery` RPC. */ diff --git a/client/node/src/core/connection.ts b/client/node/src/core/connection.ts index a9e98cb641..ab7b954d8b 100644 --- a/client/node/src/core/connection.ts +++ b/client/node/src/core/connection.ts @@ -32,6 +32,7 @@ import { CAPABILITY_STRICT_CONFORMANCE, CAPABILITY_VERIFICATION, CAPABILITY_VERIFICATION_QUESTIONS, + CAPABILITY_VERIFICATION_ARGUMENTS, capabilityRefusal, mismatchReason, requireCapability, @@ -199,6 +200,21 @@ export interface ConnectionBackend { } /** A connection to a sysml-grpc service. Close it, or use `await using`. */ +/** Argument bindings for a constraint's or requirement's `in` parameters. */ +export interface VerifyArguments { + /** Positional arguments, bound in declaration order. */ + arguments?: readonly ValueInput[]; + /** Arguments by parameter name. */ + namedArguments?: Readonly>; +} + +/** Options of verifyConstraint and verifyRequirement. */ +export interface VerifyOptions extends VerifyArguments { + subject?: string; + engine?: string; + question?: string; +} + export class Connection { /** * The generated Connect client. The ergonomic API covers what this version @@ -946,11 +962,16 @@ export class Connection { async verifyConstraint( modelHash: string, symbolId: string, - options: { subject?: string; engine?: string; question?: string } = {}, + options: VerifyOptions = {}, ): Promise { this.requireVerification(); this.requireEngine(options.engine); this.requireQuestion(options.question); + this.requireArguments(options); + const namedArguments: Record> = {}; + for (const [name, arg] of Object.entries(options.namedArguments ?? {})) { + namedArguments[name] = toValue(arg, this.info); + } const response = await callRpc( this.rpc.verifyConstraint( create(VerifyConstraintRequestSchema, { @@ -959,6 +980,10 @@ export class Connection { subjectSymbolId: options.subject ?? "", engine: engineField(options.engine), question: questionField(options.question), + arguments: (options.arguments ?? []).map((arg) => + toValue(arg, this.info), + ), + namedArguments, }), this.callOptions(), ), @@ -967,6 +992,7 @@ export class Connection { CAPABILITY_VERIFICATION, ...engineCapabilities(options.engine), ...questionCapabilities(options.question), + ...argumentCapabilities(options), ]), ); return this.verdictOf(response); @@ -976,11 +1002,16 @@ export class Connection { async verifyRequirement( modelHash: string, symbolId: string, - options: { subject?: string; engine?: string; question?: string } = {}, + options: VerifyOptions = {}, ): Promise { this.requireVerification(); this.requireEngine(options.engine); this.requireQuestion(options.question); + this.requireArguments(options); + const namedArguments: Record> = {}; + for (const [name, arg] of Object.entries(options.namedArguments ?? {})) { + namedArguments[name] = toValue(arg, this.info); + } const response = await callRpc( this.rpc.verifyRequirement( create(VerifyRequirementRequestSchema, { @@ -989,6 +1020,10 @@ export class Connection { subjectSymbolId: options.subject ?? "", engine: engineField(options.engine), question: questionField(options.question), + arguments: (options.arguments ?? []).map((arg) => + toValue(arg, this.info), + ), + namedArguments, }), this.callOptions(), ), @@ -997,6 +1032,7 @@ export class Connection { CAPABILITY_VERIFICATION, ...engineCapabilities(options.engine), ...questionCapabilities(options.question), + ...argumentCapabilities(options), ]), ); return this.verdictOf(response); @@ -1361,6 +1397,12 @@ export class Connection { } } + private requireArguments(options: VerifyArguments): void { + for (const capability of argumentCapabilities(options)) { + requireCapability(this.info, capability, upgradeRemedy(capability)); + } + } + private requireQuestion(question: string | undefined): void { for (const capability of questionCapabilities(question)) { requireCapability(this.info, capability, upgradeRemedy(capability)); @@ -1520,6 +1562,13 @@ function engineCapabilities(engine: string | undefined): string[] { } // The capabilities a question needs of the service: none for evaluate. +function argumentCapabilities(options: VerifyArguments): string[] { + return (options.arguments?.length ?? 0) > 0 || + Object.keys(options.namedArguments ?? {}).length > 0 + ? [CAPABILITY_VERIFICATION_ARGUMENTS] + : []; +} + function questionCapabilities(question: string | undefined): string[] { return questionField(question) !== "" ? [CAPABILITY_VERIFICATION_QUESTIONS] diff --git a/client/node/src/core/index.ts b/client/node/src/core/index.ts index 5a7d667dc4..13bc827ae9 100644 --- a/client/node/src/core/index.ts +++ b/client/node/src/core/index.ts @@ -6,6 +6,8 @@ export type { Encoding, ResponseTap, TransportOptions, + VerifyArguments, + VerifyOptions, } from "./connection.js"; export type { WasmHost } from "./wasm.js"; export { Instance, InstanceTree, Model, ModelSymbol, decodeDiagnostic } from "./model.js"; @@ -196,6 +198,7 @@ export { CAPABILITY_TRANSITION_AUTHORING, CAPABILITY_VERIFICATION_OBJECTIVE_AUTHORING, CAPABILITY_VERIFICATION_QUESTIONS, + CAPABILITY_VERIFICATION_ARGUMENTS, MissingCapabilityError, ServerInfo, capabilityRefusal, diff --git a/client/node/src/core/model.ts b/client/node/src/core/model.ts index 53a3346528..c24668b0f4 100644 --- a/client/node/src/core/model.ts +++ b/client/node/src/core/model.ts @@ -8,7 +8,7 @@ import { requireCapability, upgradeRemedy, } from "./capabilities.js"; -import type { Connection } from "./connection.js"; +import type { Connection, VerifyOptions } from "./connection.js"; import { requireString, requireSourceText } from "./arguments.js"; import { EvaluationError, OpenSysMLError, ParseError, SymbolNotFoundError } from "./errors.js"; import { requireLanguage } from "./sources.js"; @@ -490,7 +490,7 @@ export class Model { /** Asks whether a constraint of this model holds. */ verifyConstraint( symbolId: string, - options: { subject?: string; engine?: string; question?: string } = {}, + options: VerifyOptions = {}, ): Promise { return this.connection.verifyConstraint(this.hash, symbolId, options); } @@ -498,7 +498,7 @@ export class Model { /** Asks whether a requirement of this model is satisfied. */ verifyRequirement( symbolId: string, - options: { subject?: string; engine?: string; question?: string } = {}, + options: VerifyOptions = {}, ): Promise { return this.connection.verifyRequirement(this.hash, symbolId, options); } diff --git a/client/node/src/generated/sysml_pb.ts b/client/node/src/generated/sysml_pb.ts index 6df1743b79..d8c09a58bd 100644 --- a/client/node/src/generated/sysml_pb.ts +++ b/client/node/src/generated/sysml_pb.ts @@ -10,7 +10,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file sysml.proto. */ export const file_sysml: GenFile = /*@__PURE__*/ - fileDesc("CgtzeXNtbC5wcm90bxIFc3lzbWwihgMKB1ZlcmRpY3QSDAoEa2luZBgBIAEoCRISCgplbGVtZW50X2lkGAIgASgJEg8KB2VsZW1lbnQYAyABKAkSDQoFaG9sZHMYBCABKAgSEQoJY29uZGl0aW9uGAUgASgJEhMKC2luc3RhbmNlX2lkGAYgASgDEhgKEGluc3RhbmNlX3R5cGVfaWQYByABKAkSDQoFZXJyb3IYCCABKAkSLAoOZmFpbHVyZV9yZWFzb24YCSABKA4yFC5zeXNtbC5GYWlsdXJlUmVhc29uEhYKDnJlcXVpcmVtZW50X2lkGAogASgJEg4KBmVuZ2luZRgLIAEoCRIQCghzdHJlbmd0aBgMIAEoCRIcCgZib3VuZHMYDSADKAsyDC5zeXNtbC5Cb3VuZBIVCg1pbnN0YW5jZV9wYXRoGA4gASgJEhAKCHF1ZXN0aW9uGA8gASgJEg4KBnN0YXR1cxgQIAEoCRIpCgd3aXRuZXNzGBEgAygLMhguc3lzbWwuV2l0bmVzc0Fzc2lnbm1lbnQiXgoRV2l0bmVzc0Fzc2lnbm1lbnQSDwoHZmVhdHVyZRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlEgwKBHVuaXQYAyABKAkSDQoFZXhhY3QYBCABKAkiNQoFQm91bmQSDAoEbmFtZRgBIAEoCRINCgVsaW1pdBgCIAEoAxIPCgdyZWFjaGVkGAMgASgIIn0KF1ZlcmlmeUNvbnN0cmFpbnRSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEQoJc3ltYm9sX2lkGAIgASgJEhkKEXN1YmplY3Rfc3ltYm9sX2lkGAMgASgJEg4KBmVuZ2luZRgEIAEoCRIQCghxdWVzdGlvbhgFIAEoCSKWAQoYVmVyaWZ5Q29uc3RyYWludFJlc3BvbnNlEh8KB3ZlcmRpY3QYASABKAsyDi5zeXNtbC5WZXJkaWN0EiIKCWluc3RhbmNlcxgCIAMoCzIPLnN5c21sLkluc3RhbmNlEg0KBWVycm9yGAMgASgJEiYKC2RpYWdub3N0aWNzGAQgAygLMhEuc3lzbWwuRGlhZ25vc3RpYyJ+ChhWZXJpZnlSZXF1aXJlbWVudFJlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIRCglzeW1ib2xfaWQYAiABKAkSGQoRc3ViamVjdF9zeW1ib2xfaWQYAyABKAkSDgoGZW5naW5lGAQgASgJEhAKCHF1ZXN0aW9uGAUgASgJIm0KE1ZlcmlmaWNhdGlvblZlcmRpY3QSDwoHY2FzZV9pZBgBIAEoCRIMCgRraW5kGAIgASgJEg4KBmRldGFpbBgDIAEoCRIPCgdzdWJjYXNlGAQgASgIEhYKDnJlcXVpcmVtZW50X2lkGAUgASgJItIBChlWZXJpZnlSZXF1aXJlbWVudFJlc3BvbnNlEh8KB3ZlcmRpY3QYASABKAsyDi5zeXNtbC5WZXJkaWN0EiIKCWluc3RhbmNlcxgCIAMoCzIPLnN5c21sLkluc3RhbmNlEg0KBWVycm9yGAMgASgJEiYKC2RpYWdub3N0aWNzGAQgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxI5ChV2ZXJpZmljYXRpb25fdmVyZGljdHMYBSADKAsyGi5zeXNtbC5WZXJpZmljYXRpb25WZXJkaWN0ImQKGVZlcmlmeVNhdGlzZmFjdGlvblJlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIRCglzeW1ib2xfaWQYAiABKAkSDgoGZW5naW5lGAMgASgJEhAKCHF1ZXN0aW9uGAQgASgJIoICChpWZXJpZnlTYXRpc2ZhY3Rpb25SZXNwb25zZRIgCgh2ZXJkaWN0cxgBIAMoCzIOLnN5c21sLlZlcmRpY3QSIgoJaW5zdGFuY2VzGAIgAygLMg8uc3lzbWwuSW5zdGFuY2USDQoFZXJyb3IYAyABKAkSJgoLZGlhZ25vc3RpY3MYBCADKAsyES5zeXNtbC5EaWFnbm9zdGljEiwKDmZhaWx1cmVfcmVhc29uGAUgASgOMhQuc3lzbWwuRmFpbHVyZVJlYXNvbhI5ChV2ZXJpZmljYXRpb25fdmVyZGljdHMYBiADKAsyGi5zeXNtbC5WZXJpZmljYXRpb25WZXJkaWN0IlAKF1ZhbGlkYXRlSW5zdGFuY2VSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEQoJc3ltYm9sX2lkGAIgASgJEg4KBmVuZ2luZRgDIAEoCSKyAgoYVmFsaWRhdGVJbnN0YW5jZVJlc3BvbnNlEiAKCHZlcmRpY3RzGAEgAygLMg4uc3lzbWwuVmVyZGljdBIfCgdzdW1tYXJ5GAIgASgLMg4uc3lzbWwuVmVyZGljdBIiCglpbnN0YW5jZXMYAyADKAsyDy5zeXNtbC5JbnN0YW5jZRINCgVlcnJvchgEIAEoCRImCgtkaWFnbm9zdGljcxgFIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSLAoOZmFpbHVyZV9yZWFzb24YBiABKA4yFC5zeXNtbC5GYWlsdXJlUmVhc29uEjkKFXZlcmlmaWNhdGlvbl92ZXJkaWN0cxgHIAMoCzIaLnN5c21sLlZlcmlmaWNhdGlvblZlcmRpY3QSDwoHYm91bmRlZBgIIAEoCCJtChNFdmFsdWF0ZUNhbGNSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEQoJc3ltYm9sX2lkGAIgASgJEh8KCWFyZ3VtZW50cxgDIAMoCzIMLnN5c21sLlZhbHVlEg4KBmVuZ2luZRgEIAEoCSL9AQoURXZhbHVhdGVDYWxjUmVzcG9uc2USHAoGcmVzdWx0GAEgASgLMgwuc3lzbWwuVmFsdWUSIgoHb3V0cHV0cxgCIAMoCzIRLnN5c21sLkNhbGNPdXRwdXQSDQoFZXJyb3IYAyABKAkSJgoLZGlhZ25vc3RpY3MYBCADKAsyES5zeXNtbC5EaWFnbm9zdGljEiwKDmZhaWx1cmVfcmVhc29uGAUgASgOMhQuc3lzbWwuRmFpbHVyZVJlYXNvbhIOCgZlbmdpbmUYBiABKAkSEAoIc3RyZW5ndGgYByABKAkSHAoGYm91bmRzGAggAygLMgwuc3lzbWwuQm91bmQiNwoKQ2FsY091dHB1dBIMCgRuYW1lGAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWUikwEKDkNhc2VFdmFsdWF0aW9uEhMKC2Z1bmN0aW9uX2lkGAEgASgJEh8KCWFyZ3VtZW50cxgCIAMoCzIMLnN5c21sLlZhbHVlEhwKBnJlc3VsdBgDIAEoCzIMLnN5c21sLlZhbHVlEg0KBWVycm9yGAQgASgJEhAKCHNlbGVjdGVkGAUgASgIEgwKBHRpZWQYBiABKAgipgIKElJ1bkFuYWx5c2lzUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCRIZChFzdWJqZWN0X3N5bWJvbF9pZBgDIAEoCRIfCglhcmd1bWVudHMYBCADKAsyDC5zeXNtbC5WYWx1ZRJGCg9uYW1lZF9hcmd1bWVudHMYBSADKAsyLS5zeXNtbC5SdW5BbmFseXNpc1JlcXVlc3QuTmFtZWRBcmd1bWVudHNFbnRyeRIQCghzY2hlZHVsZRgGIAEoCRIOCgZlbmdpbmUYByABKAkaQwoTTmFtZWRBcmd1bWVudHNFbnRyeRILCgNrZXkYASABKAkSGwoFdmFsdWUYAiABKAsyDC5zeXNtbC5WYWx1ZToCOAEi3AMKE1J1bkFuYWx5c2lzUmVzcG9uc2USIgoHb3V0cHV0cxgBIAMoCzIRLnN5c21sLkNhbGNPdXRwdXQSIAoIdmVyZGljdHMYAiADKAsyDi5zeXNtbC5WZXJkaWN0EiIKCWluc3RhbmNlcxgDIAMoCzIPLnN5c21sLkluc3RhbmNlEg0KBWVycm9yGAQgASgJEiYKC2RpYWdub3N0aWNzGAUgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIsCg5mYWlsdXJlX3JlYXNvbhgGIAEoDjIULnN5c21sLkZhaWx1cmVSZWFzb24SOQoVdmVyaWZpY2F0aW9uX3ZlcmRpY3RzGAcgAygLMhouc3lzbWwuVmVyaWZpY2F0aW9uVmVyZGljdBIgCghvdXRjb21lcxgIIAMoCzIOLnN5c21sLk91dGNvbWUSLQoLZXhwbG9yYXRpb24YCSABKAsyGC5zeXNtbC5FeHBsb3JhdGlvblN0YXR1cxIqCgtldmFsdWF0aW9ucxgKIAMoCzIVLnN5c21sLkNhc2VFdmFsdWF0aW9uEg4KBmVuZ2luZRgLIAEoCRIQCghzdHJlbmd0aBgMIAEoCRIcCgZib3VuZHMYDSADKAsyDC5zeXNtbC5Cb3VuZCIsChBQcm9iYWJpbGl0eVJhbmdlEgsKA21pbhgBIAEoARILCgNtYXgYAiABKAEiywIKB091dGNvbWUSLAoHb3V0cHV0cxgBIAMoCzIbLnN5c21sLk91dGNvbWUuT3V0cHV0c0VudHJ5EhMKC2ZpbmFsX3N0YXRlGAIgASgJEhYKDnN0YXRlc192aXNpdGVkGAMgAygJEg0KBWVycm9yGAQgASgJEhYKDmxpbmVhcml6YXRpb25zGAUgASgFEg8KB3dpdG5lc3MYBiADKAkSJgoLZGlhZ25vc3RpY3MYByADKAsyES5zeXNtbC5EaWFnbm9zdGljEhMKC3Byb2JhYmlsaXR5GAggASgBEjIKEXByb2JhYmlsaXR5X3JhbmdlGAkgASgLMhcuc3lzbWwuUHJvYmFiaWxpdHlSYW5nZRo8CgxPdXRwdXRzRW50cnkSCwoDa2V5GAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWU6AjgBIrUBChFFeHBsb3JhdGlvblN0YXR1cxIQCghjb21wbGV0ZRgBIAEoCBIMCgRydW5zGAIgASgFEhMKC2J1ZGdldHNfaGl0GAMgAygJEhMKC3J1bnNfYnVkZ2V0GAQgASgFEhQKDGRlcHRoX2J1ZGdldBgFIAEoBRIhChlwcm9iYWJpbGl0aWVzX2xvd2VyX2JvdW5kGAYgASgIEh0KFWZhaWxlZF9saW5lYXJpemF0aW9ucxgHIAEoBSIUChJMaXN0RW5naW5lc1JlcXVlc3Qi/AEKCkVuZ2luZUluZm8SDAoEbmFtZRgBIAEoCRIRCglhdXRob3JpdHkYAiABKAkSDwoHYW5zd2VycxgDIAMoCRIOCgZib3VuZHMYBCADKAkSDwoHcHJvY2VzcxgFIAEoCRIVCg1wcm9jZXNzX2ZvdW5kGAYgASgJEg0KBXJlYWR5GAcgASgIEhMKC3VuYXZhaWxhYmxlGAggASgJEgwKBGtpbmQYCSABKAkSEAoIcHJvdG9jb2wYCiABKAkSDgoGc291cmNlGAsgASgJEg8KB2NvbW1hbmQYDCABKAkSDwoHdmVyc2lvbhgNIAEoCRIOCgZzZXJ2ZWQYDiABKAgiOQoTTGlzdEVuZ2luZXNSZXNwb25zZRIiCgdlbmdpbmVzGAEgAygLMhEuc3lzbWwuRW5naW5lSW5mbyKMAQoQUGFyc2VGaWxlUmVxdWVzdBITCglmaWxlX3BhdGgYASABKAlIABIRCgdjb250ZW50GAIgASgJSAASGAoMY29udGVudF9oYXNoGAMgASgJQgIYARIQCghsYW5ndWFnZRgEIAEoCRIaChJzdHJpY3RfY29uZm9ybWFuY2UYBSABKAhCCAoGc291cmNlImIKDlNvdXJjZURvY3VtZW50EhMKCWZpbGVfcGF0aBgBIAEoCUgAEhEKB2NvbnRlbnQYAiABKAlIABIQCghsYW5ndWFnZRgDIAEoCRIMCgRuYW1lGAQgASgJQggKBnNvdXJjZSJ0ChNQYXJzZVNvdXJjZXNSZXF1ZXN0EigKCWRvY3VtZW50cxgBIAMoCzIVLnN5c21sLlNvdXJjZURvY3VtZW50EhoKEnN0cmljdF9jb25mb3JtYW5jZRgCIAEoCBIXCg9iYXNlX21vZGVsX2hhc2gYAyABKAkilQEKFFBhcnNlU291cmNlc1Jlc3BvbnNlEhIKCm1vZGVsX2hhc2gYASABKAkSIAoFcm9vdHMYAiADKAsyES5zeXNtbC5TeW1ib2xJbmZvEiYKC2RpYWdub3N0aWNzGAMgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxINCgVlcnJvchgEIAEoCRIQCghhZmZlY3RlZBgFIAMoCSJ/ChFQYXJzZUZpbGVSZXNwb25zZRISCgptb2RlbF9oYXNoGAEgASgJEh8KBHJvb3QYAiABKAsyES5zeXNtbC5TeW1ib2xJbmZvEiYKC2RpYWdub3N0aWNzGAMgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxINCgVlcnJvchgEIAEoCSI5ChBHZXRTeW1ib2xSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEQoJc3ltYm9sX2lkGAIgASgJIkIKDlN5bWJvbFJlc3BvbnNlEiEKBnN5bWJvbBgBIAEoCzIRLnN5c21sLlN5bWJvbEluZm8SDQoFZXJyb3IYAiABKAkiKAoSRGlhZ25vc3RpY3NSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkiTAoTRGlhZ25vc3RpY3NSZXNwb25zZRImCgtkaWFnbm9zdGljcxgBIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSDQoFZXJyb3IYAiABKAkibwoPRXZhbHVhdGVSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEgoKZXhwcmVzc2lvbhgCIAEoCRIZChFjb250ZXh0X3N5bWJvbF9pZBgDIAEoCRIZChFzdWJqZWN0X3N5bWJvbF9pZBgEIAEoCSJnChBFdmFsdWF0ZVJlc3BvbnNlEhwKBnJlc3VsdBgBIAEoCzIMLnN5c21sLlZhbHVlEg0KBWVycm9yGAIgASgJEiYKC2RpYWdub3N0aWNzGAMgAygLMhEuc3lzbWwuRGlhZ25vc3RpYyLCAQoISW5zdGFuY2USCgoCaWQYASABKAMSFgoOdHlwZV9zeW1ib2xfaWQYAiABKAkSOgoOZmVhdHVyZV92YWx1ZXMYBCADKAsyIi5zeXNtbC5JbnN0YW5jZS5GZWF0dXJlVmFsdWVzRW50cnkaSQoSRmVhdHVyZVZhbHVlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnN5c21sLkZlYXR1cmVWYWx1ZToCOAFKBAgDEARSBXNsb3RzIoQBCgxGZWF0dXJlVmFsdWUSFAoMZmVhdHVyZV9uYW1lGAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWUSHAoGdmFsdWVzGAMgAygLMgwuc3lzbWwuVmFsdWUSFAoMbWF0ZXJpYWxpemVkGAQgASgIEg0KBWVycm9yGAUgASgJIjsKEkluc3RhbnRpYXRlUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCSKTAQoTSW5zdGFudGlhdGVSZXNwb25zZRIhCghpbnN0YW5jZRgBIAEoCzIPLnN5c21sLkluc3RhbmNlEg0KBWVycm9yGAIgASgJEiYKC2RpYWdub3N0aWNzGAMgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIiCglpbnN0YW5jZXMYBCADKAsyDy5zeXNtbC5JbnN0YW5jZSLpAQoURXhlY3V0ZUFjdGlvblJlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIYChBhY3Rpb25fc3ltYm9sX2lkGAIgASgJEjcKBmlucHV0cxgDIAMoCzInLnN5c21sLkV4ZWN1dGVBY3Rpb25SZXF1ZXN0LklucHV0c0VudHJ5EhAKCHNjaGVkdWxlGAQgASgJEhsKE3BlcmZvcm1lcl9zeW1ib2xfaWQYBSABKAkaOwoLSW5wdXRzRW50cnkSCwoDa2V5GAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWU6AjgBIswDChVFeGVjdXRlQWN0aW9uUmVzcG9uc2USOgoHb3V0cHV0cxgBIAMoCzIpLnN5c21sLkV4ZWN1dGVBY3Rpb25SZXNwb25zZS5PdXRwdXRzRW50cnkSDQoFZXJyb3IYAiABKAkSJgoLZGlhZ25vc3RpY3MYAyADKAsyES5zeXNtbC5EaWFnbm9zdGljEiAKCG91dGNvbWVzGAQgAygLMg4uc3lzbWwuT3V0Y29tZRItCgtleHBsb3JhdGlvbhgFIAEoCzIYLnN5c21sLkV4cGxvcmF0aW9uU3RhdHVzEhIKCmZpbmFsX3RpbWUYBiABKAESUwoUcGVyZm9ybWVyX2F0dHJpYnV0ZXMYByADKAsyNS5zeXNtbC5FeGVjdXRlQWN0aW9uUmVzcG9uc2UuUGVyZm9ybWVyQXR0cmlidXRlc0VudHJ5GjwKDE91dHB1dHNFbnRyeRILCgNrZXkYASABKAkSGwoFdmFsdWUYAiABKAsyDC5zeXNtbC5WYWx1ZToCOAEaSAoYUGVyZm9ybWVyQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlOgI4ASKYAQoTRXhlY3V0ZVN0YXRlUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEh8KF3N0YXRlX21hY2hpbmVfc3ltYm9sX2lkGAIgASgJEg4KBmV2ZW50cxgDIAMoCRIQCghzY2hlZHVsZRgEIAEoCRIbChNwZXJmb3JtZXJfc3ltYm9sX2lkGAUgASgJEg0KBXRyYWNlGAYgASgIIo8DChRFeGVjdXRlU3RhdGVSZXNwb25zZRIWCg5zdGF0ZXNfdmlzaXRlZBgBIAMoCRJECg1maW5hbF9jb250ZXh0GAIgAygLMi0uc3lzbWwuRXhlY3V0ZVN0YXRlUmVzcG9uc2UuRmluYWxDb250ZXh0RW50cnkSDQoFZXJyb3IYAyABKAkSJgoLZGlhZ25vc3RpY3MYBCADKAsyES5zeXNtbC5EaWFnbm9zdGljEiAKCG91dGNvbWVzGAUgAygLMg4uc3lzbWwuT3V0Y29tZRItCgtleHBsb3JhdGlvbhgGIAEoCzIYLnN5c21sLkV4cGxvcmF0aW9uU3RhdHVzEhIKCmZpbmFsX3RpbWUYByABKAESIwoFdHJhY2UYCCADKAsyFC5zeXNtbC5Eb2N1bWVudEV2ZW50EhUKDXRyYWNlX2Ryb3BwZWQYCSABKAUaQQoRRmluYWxDb250ZXh0RW50cnkSCwoDa2V5GAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWU6AjgBIoECCg5Db252ZXJ0UmVxdWVzdBITCglmaWxlX3BhdGgYASABKAlIABIRCgdjb250ZW50GAIgASgJSAASFAoKbW9kZWxfaGFzaBgGIAEoCUgAEhMKC2Zyb21fZm9ybWF0GAMgASgJEhEKCXRvX2Zvcm1hdBgEIAEoCRIeChZ0b2xlcmF0ZV9zeW50YXhfZXJyb3JzGAUgASgIEg8KB2lkX2Zvcm0YByABKAkSEQoJZG9jdW1lbnRzGAggAygJEg8KB2NvbXBhY3QYCSABKAgSFAoMb21pdF9kZXJpdmVkGAogASgIEhQKDGtlZXBfZGVyaXZlZBgLIAMoCUIICgZzb3VyY2UitAEKD0NvbnZlcnRSZXNwb25zZRIPCgdjb250ZW50GAEgASgJEhMKC2Zyb21fZm9ybWF0GAIgASgJEhEKCXRvX2Zvcm1hdBgDIAEoCRINCgVlcnJvchgEIAEoCRImCgtkaWFnbm9zdGljcxgFIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSFAoMZXhwZXJpbWVudGFsGAYgASgIEhsKE2V4cGVyaW1lbnRhbF9ub3RpY2UYByABKAki7gEKDk1pZ3JhdGVSZXF1ZXN0EhMKCWZpbGVfcGF0aBgBIAEoCUgAEhEKB2NvbnRlbnQYAiABKAxIABITCgtmcm9tX2Zvcm1hdBgDIAEoCRIRCgl0b19mb3JtYXQYBCABKAkSDgoGcmVwb3J0GAUgASgIEg8KB3Jlc3VsdHMYBiABKAgSFQoLbGF5b3V0X3BhdGgYByABKAlIARIYCg5sYXlvdXRfY29udGVudBgIIAEoCUgBEhYKDmltYWdlX2Jhc2VfdXJsGAkgASgJEg4KBnN0cmljdBgKIAEoCEIICgZzb3VyY2VCCAoGbGF5b3V0IuoBCg9NaWdyYXRlUmVzcG9uc2USDwoHY29udGVudBgBIAEoCRITCgtmcm9tX2Zvcm1hdBgCIAEoCRIRCgl0b19mb3JtYXQYAyABKAkSDQoFZXJyb3IYBCABKAkSFAoMZXhwZXJpbWVudGFsGAUgASgIEhsKE2V4cGVyaW1lbnRhbF9ub3RpY2UYBiABKAkSJgoGcmVwb3J0GAcgASgLMhYuc3lzbWwuTWlncmF0aW9uUmVwb3J0Eg8KB3Jlc3VsdHMYCCABKAkSIwoFZmlsZXMYCSADKAsyFC5zeXNtbC5NaWdyYXRpb25GaWxlIsMBCg9NaWdyYXRpb25SZXBvcnQSDgoGc291cmNlGAEgASgJEhAKCGV4cG9ydGVyGAIgASgJEg8KB3N1bW1hcnkYAyABKAkSDgoGbWFwcGVkGAQgASgFEhQKDGFwcHJveGltYXRlZBgFIAEoBRIQCgh1bm1hcHBlZBgGIAEoBRIPCgdza2lwcGVkGAcgASgFEiYKB2VudHJpZXMYCCADKAsyFS5zeXNtbC5NaWdyYXRpb25FbnRyeRIMCgR0ZXh0GAkgASgJImcKDk1pZ3JhdGlvbkVudHJ5EgoKAmlkGAEgASgJEgwKBGtpbmQYAiABKAkSDAoEbmFtZRgDIAEoCRIOCgZ0YXJnZXQYBCABKAkSDwoHdmVyZGljdBgFIAEoCRIMCgRub3RlGAYgASgJIi4KDU1pZ3JhdGlvbkZpbGUSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgMIn0KEUFwcGx5RWRpdHNSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSKAoKb3BlcmF0aW9ucxgCIAMoCzIULnN5c21sLkVkaXRPcGVyYXRpb24SEAoIZG9jdW1lbnQYAyABKAkSGAoQYWNjZXB0X2RvY3VtZW50cxgEIAEoCCLDBgoNRWRpdE9wZXJhdGlvbhIoCglzZXRfdmFsdWUYASABKAsyEy5zeXNtbC5TZXRWYWx1ZUVkaXRIABIjCgZyZW5hbWUYAiABKAsyES5zeXNtbC5SZW5hbWVFZGl0SAASKgoKYWRkX21lbWJlchgDIAEoCzIULnN5c21sLkFkZE1lbWJlckVkaXRIABIjCgZkZWxldGUYBCABKAsyES5zeXNtbC5EZWxldGVFZGl0SAASHwoEbW92ZRgFIAEoCzIPLnN5c21sLk1vdmVFZGl0SAASMgoOYWRkX2Nvbm5lY3Rpb24YBiABKAsyGC5zeXNtbC5BZGRDb25uZWN0aW9uRWRpdEgAEiwKC2FkZF9zYXRpc2Z5GAcgASgLMhUuc3lzbWwuQWRkU2F0aXNmeUVkaXRIABJJChphZGRfcmVxdWlyZW1lbnRfY29uc3RyYWludBgIIAEoCzIjLnN5c21sLkFkZFJlcXVpcmVtZW50Q29uc3RyYWludEVkaXRIABIyCg5hZGRfdHJhbnNpdGlvbhgJIAEoCzIYLnN5c21sLkFkZFRyYW5zaXRpb25FZGl0SAASKgoKYWRkX2ltcG9ydBgKIAEoCzIULnN5c21sLkFkZEltcG9ydEVkaXRIABI4ChFhZGRfZG9jdW1lbnRhdGlvbhgLIAEoCzIbLnN5c21sLkFkZERvY3VtZW50YXRpb25FZGl0SAASKgoKYWRkX3ZlcmlmeRgMIAEoCzIULnN5c21sLkFkZFZlcmlmeUVkaXRIABIuCgxhZGRfbWV0YWRhdGEYDSABKAsyFi5zeXNtbC5BZGRNZXRhZGF0YUVkaXRIABIuCgxhZGRfc2VxdWVuY2UYDiABKAsyFi5zeXNtbC5BZGRTZXF1ZW5jZUVkaXRIABI7ChNhZGRfbWV0YWRhdGFfcHJlZml4GA8gASgLMhwuc3lzbWwuQWRkTWV0YWRhdGFQcmVmaXhFZGl0SAASLAoLYWRkX2NvbW1lbnQYECABKAsyFS5zeXNtbC5BZGRDb21tZW50RWRpdEgAEiYKCGFkZF9ub3RlGBIgASgLMhIuc3lzbWwuQWRkTm90ZUVkaXRIAEILCglvcGVyYXRpb24ikgIKDUFkZE1lbWJlckVkaXQSDQoFb3duZXIYASABKAkSDAoEa2luZBgCIAEoCRIMCgRuYW1lGAMgASgJEgwKBHR5cGUYBCABKAkSFAoMbXVsdGlwbGljaXR5GAUgASgJEg0KBXZhbHVlGAYgASgJEhMKC3NwZWNpYWxpemVzGAcgAygJEhMKC2lzX2Fic3RyYWN0GAggASgIEhEKCXJlZGVmaW5lcxgJIAMoCRISCgppc19kZWZhdWx0GAogASgIEhEKCWRpcmVjdGlvbhgLIAEoCRIZChFtZXRhZGF0YV9wcmVmaXhlcxgOIAMoCRILCgNkb2MYDCABKAkSFwoPYm9keV9leHByZXNzaW9uGA0gASgJInkKDkFkZFNhdGlzZnlFZGl0Eg0KBW93bmVyGAEgASgJEhMKC3JlcXVpcmVtZW50GAIgASgJEhoKEnNhdGlzZnlpbmdfZmVhdHVyZRgDIAEoCRITCgtpc19hc3NlcnRlZBgEIAEoCBISCgppc19uZWdhdGVkGAUgASgIIl0KHEFkZFJlcXVpcmVtZW50Q29uc3RyYWludEVkaXQSDQoFb3duZXIYASABKAkSDAoEa2luZBgCIAEoCRISCgpleHByZXNzaW9uGAMgASgJEgwKBG5hbWUYBCABKAkikQEKEUFkZFRyYW5zaXRpb25FZGl0Eg0KBW93bmVyGAEgASgJEgwKBG5hbWUYAiABKAkSDgoGc291cmNlGAMgASgJEg4KBnRhcmdldBgEIAEoCRIPCgd0cmlnZ2VyGAUgASgJEg0KBWd1YXJkGAYgASgJEg4KBmVmZmVjdBgHIAEoCRIPCgdpbml0aWFsGAggASgIIjMKDUFkZFZlcmlmeUVkaXQSDQoFb3duZXIYASABKAkSEwoLcmVxdWlyZW1lbnQYAiABKAkiNgoUTWV0YWRhdGFGZWF0dXJlVmFsdWUSDwoHZmVhdHVyZRgBIAEoCRINCgV2YWx1ZRgCIAEoCSKUAQoPQWRkTWV0YWRhdGFFZGl0Eg0KBW93bmVyGAEgASgJEhUKDW1ldGFkYXRhX3R5cGUYAiABKAkSDAoEbmFtZRgDIAEoCRINCgVhYm91dBgEIAMoCRIrCgZ2YWx1ZXMYBSADKAsyGy5zeXNtbC5NZXRhZGF0YUZlYXR1cmVWYWx1ZRIRCglzaG9ydGhhbmQYBiABKAgiPgoVQWRkTWV0YWRhdGFQcmVmaXhFZGl0Eg4KBnRhcmdldBgBIAEoCRIVCg1tZXRhZGF0YV90eXBlGAIgASgJIoABCg1BZGRJbXBvcnRFZGl0Eg0KBW93bmVyGAEgASgJEhIKCnZpc2liaWxpdHkYAiABKAkSDgoGdGFyZ2V0GAMgASgJEhQKDGlzX3JlY3Vyc2l2ZRgEIAEoCBIVCg1pc19pbXBvcnRfYWxsGAUgASgIEg8KB2ZpbHRlcnMYBiADKAkiYwoUQWRkRG9jdW1lbnRhdGlvbkVkaXQSDgoGdGFyZ2V0GAEgASgJEgwKBGJvZHkYAiABKAkSDAoEbmFtZRgDIAEoCRIOCgZsb2NhbGUYBCABKAkSDwoHcmVwbGFjZRgFIAEoCCJaCg5BZGRDb21tZW50RWRpdBINCgVvd25lchgBIAEoCRIMCgRib2R5GAIgASgJEgwKBG5hbWUYAyABKAkSDQoFYWJvdXQYBCADKAkSDgoGbG9jYWxlGAUgASgJIisKC0FkZE5vdGVFZGl0Eg4KBnRhcmdldBgBIAEoCRIMCgR0ZXh0GAIgASgJIs0CCg9BZGRTZXF1ZW5jZUVkaXQSDQoFb3duZXIYASABKAkSDwoHa2V5d29yZBgCIAEoCRILCgNyZWYYAyABKAkSEwoLbWVtYmVyX2tpbmQYBCABKAkSEwoLbWVtYmVyX25hbWUYBSABKAkSDAoEdHlwZRgGIAEoCRINCgVhZnRlchgHIAEoCRIRCgljb25kaXRpb24YCCABKAkSDQoFdmFsdWUYCSABKAkSDgoGdGFyZ2V0GAogASgJEgsKA3ZpYRgLIAEoCRINCgV1bnRpbBgMIAEoCRIkCgRib2R5GA0gAygLMhYuc3lzbWwuQWRkU2VxdWVuY2VFZGl0EikKCWVsc2VfYm9keRgOIAMoCzIWLnN5c21sLkFkZFNlcXVlbmNlRWRpdBIUCgxtdWx0aXBsaWNpdHkYDyABKAkSEQoJcGFyYW1ldGVyGBAgASgJIm4KEUFkZENvbm5lY3Rpb25FZGl0Eg0KBW93bmVyGAEgASgJEgwKBGtpbmQYAiABKAkSEAoIZnJvbV9lbmQYAyABKAkSDgoGdG9fZW5kGAQgASgJEgwKBG5hbWUYBSABKAkSDAoEdHlwZRgGIAEoCSItCgpEZWxldGVFZGl0Eg4KBnRhcmdldBgBIAEoCRIPCgdjYXNjYWRlGAIgASgIIikKCE1vdmVFZGl0Eg4KBnRhcmdldBgBIAEoCRINCgVvd25lchgCIAEoCSItCgxTZXRWYWx1ZUVkaXQSDgoGdGFyZ2V0GAEgASgJEg0KBXZhbHVlGAIgASgJIi4KClJlbmFtZUVkaXQSDgoGdGFyZ2V0GAEgASgJEhAKCG5ld19uYW1lGAIgASgJIpACChJBcHBseUVkaXRzUmVzcG9uc2USDwoHY29udGVudBgBIAEoCRIjCgdhcHBsaWVkGAIgAygLMhIuc3lzbWwuQXBwbGllZEVkaXQSDQoFZXJyb3IYAyABKAkSIwoHZmFpbHVyZRgEIAEoDjISLnN5c21sLkVkaXRGYWlsdXJlEiYKC2RpYWdub3N0aWNzGAUgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIaChJyZWZlcnJpbmdfZWxlbWVudHMYBiADKAkSKAoJZG9jdW1lbnRzGAcgAygLMhUuc3lzbWwuRWRpdGVkRG9jdW1lbnQSIgoJcmVmZXJyZXJzGAggAygLMg8uc3lzbWwuUmVmZXJyZXIiLwoORWRpdGVkRG9jdW1lbnQSDAoEbmFtZRgBIAEoCRIPCgdjb250ZW50GAIgASgJIioKCFJlZmVycmVyEgwKBG5hbWUYASABKAkSEAoIZG9jdW1lbnQYAiABKAkijAEKC0FwcGxpZWRFZGl0EhcKD29wZXJhdGlvbl9pbmRleBgBIAEoBRIOCgZ0YXJnZXQYAiABKAkSDgoGb2Zmc2V0GAMgASgFEg4KBmxlbmd0aBgEIAEoBRIQCghvbGRfdGV4dBgFIAEoCRIQCghuZXdfdGV4dBgGIAEoCRIQCghkb2N1bWVudBgHIAEoCSL9AgoKU3ltYm9sSW5mbxIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEgwKBGtpbmQYAyABKAkSMQoIbWV0YWRhdGEYBCADKAsyHy5zeXNtbC5TeW1ib2xJbmZvLk1ldGFkYXRhRW50cnkSEQoJY2hpbGRfaWRzGAUgAygJEigKCmF0dHJpYnV0ZXMYBiADKAsyFC5zeXNtbC5BdHRyaWJ1dGVJbmZvEiIKCXR5cGVfaW5mbxgHIAEoCzIPLnN5c21sLlR5cGVJbmZvEi0KDG11bHRpcGxpY2l0eRgIIAEoCzIXLnN5c21sLk11bHRpcGxpY2l0eUluZm8SLgoPc3BlY2lhbGl6YXRpb25zGAkgAygLMhUuc3lzbWwuU3BlY2lhbGl6YXRpb24SIwobd2l0aGhlbGRfbGlicmFyeV9hdHRyaWJ1dGVzGAogASgFGi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJYCg5TcGVjaWFsaXphdGlvbhIMCgRraW5kGAEgASgJEhAKCGRlY2xhcmVkGAIgASgJEhEKCXRhcmdldF9pZBgDIAEoCRITCgt0YXJnZXRfa2luZBgEIAEoCSKVAQoIVHlwZUluZm8SEAoIZGVjbGFyZWQYASABKAkSEwoLcmVzb2x2ZWRfaWQYAiABKAkSFQoNcmVzb2x2ZWRfa2luZBgDIAEoCRIRCglwcmltaXRpdmUYBCABKAkSGAoQcHJpbWl0aXZlX3NvdXJjZRgFIAEoCRIQCghxdWFudGl0eRgGIAEoCBIMCgR1bml0GAcgASgJIjAKEE11bHRpcGxpY2l0eUluZm8SDQoFbG93ZXIYASABKAkSDQoFdXBwZXIYAiABKAkiVgoNQXR0cmlidXRlSW5mbxIMCgRuYW1lGAEgASgJEgwKBHR5cGUYAiABKAkSGwoFdmFsdWUYAyABKAsyDC5zeXNtbC5WYWx1ZRIMCgR1bml0GAQgASgJIocGCgVWYWx1ZRITCglpbnRfdmFsdWUYASABKANIABIUCgpyZWFsX3ZhbHVlGAIgASgBSAASFAoKYm9vbF92YWx1ZRgDIAEoCEgAEhYKDHN0cmluZ192YWx1ZRgEIAEoCUgAEhUKC2luc3RhbmNlX2lkGAUgASgDSAASKAoIc2VxdWVuY2UYBiABKAsyFC5zeXNtbC5WYWx1ZVNlcXVlbmNlSAASDgoEbnVsbBgHIAEoCUgAEiMKCHF1YW50aXR5GAggASgLMg8uc3lzbWwuUXVhbnRpdHlIABIqCgxlbnVtX2xpdGVyYWwYCSABKAsyEi5zeXNtbC5FbnVtTGl0ZXJhbEgAEg8KBXVuc2V0GAogASgISAASIQoHY29tcGxleBgLIAEoCzIOLnN5c21sLkNvbXBsZXhIABIdCgVhcnJheRgMIAEoCzIMLnN5c21sLkFycmF5SAASHwoGdmVjdG9yGA0gASgLMg0uc3lzbWwuVmVjdG9ySAASMAoPdmVjdG9yX3F1YW50aXR5GA4gASgLMhUuc3lzbWwuVmVjdG9yUXVhbnRpdHlIABIwCg9tZWFzdXJlbWVudF9yZWYYDyABKAsyFS5zeXNtbC5NZWFzdXJlbWVudFJlZkgAEhIKCGluZmluaXR5GBAgASgISAASIwoIZnVuY3Rpb24YESABKAsyDy5zeXNtbC5GdW5jdGlvbkgAEh4KA3NldBgSIAEoCzIPLnN5c21sLlZhbHVlU2V0SAASMAoPdGVuc29yX3F1YW50aXR5GBMgASgLMhUuc3lzbWwuVGVuc29yUXVhbnRpdHlIABInCgptZXRhb2JqZWN0GBQgASgLMhEuc3lzbWwuTWV0YW9iamVjdEgAEisKDHVuZGV0ZXJtaW5lZBgVIAEoCzITLnN5c21sLlVuZGV0ZXJtaW5lZEgAEhcKDWJpZ19pbnRfdmFsdWUYFiABKAlIABIpCg5yYXRpb25hbF92YWx1ZRgXIAEoCzIPLnN5c21sLlJhdGlvbmFsSABCBgoEa2luZCIyCghSYXRpb25hbBIRCgludW1lcmF0b3IYASABKAkSEwoLZGVub21pbmF0b3IYAiABKAkiNgoKTWV0YW9iamVjdBISCgplbGVtZW50X2lkGAEgASgJEhQKDG1ldGFjbGFzc19pZBgCIAEoCSJGCgxVbmRldGVybWluZWQSDgoGcmVhc29uGAEgASgJEiYKBWNvdW50GAIgASgLMhcuc3lzbWwuTXVsdGlwbGljaXR5SW5mbyIsCghGdW5jdGlvbhIPCgdjYWxjX2lkGAEgASgJEg8KB3NlbGZfaWQYAiABKAMiKgoIVmFsdWVTZXQSHgoIZWxlbWVudHMYASADKAsyDC5zeXNtbC5WYWx1ZSJJCg5UZW5zb3JRdWFudGl0eRISCgpkaW1lbnNpb25zGAEgAygDEiMKCmNvbXBvbmVudHMYAiADKAsyDy5zeXNtbC5RdWFudGl0eSI7CgVBcnJheRISCgpkaW1lbnNpb25zGAEgAygDEh4KCGVsZW1lbnRzGAIgAygLMgwuc3lzbWwuVmFsdWUiKgoGVmVjdG9yEiAKCmNvbXBvbmVudHMYASADKAsyDC5zeXNtbC5WYWx1ZSI1Cg5WZWN0b3JRdWFudGl0eRIjCgpjb21wb25lbnRzGAEgAygLMg8uc3lzbWwuUXVhbnRpdHkiKgoHQ29tcGxleBIMCgRyZWFsGAEgASgBEhEKCWltYWdpbmFyeRgCIAEoASJkCgtFbnVtTGl0ZXJhbBISCgpsaXRlcmFsX2lkGAEgASgJEhYKDmVudW1lcmF0aW9uX2lkGAIgASgJEgwKBG5hbWUYAyABKAkSGwoFdmFsdWUYBCABKAsyDC5zeXNtbC5WYWx1ZSIvCg1WYWx1ZVNlcXVlbmNlEh4KCGVsZW1lbnRzGAEgAygLMgwuc3lzbWwuVmFsdWUiyAEKCFF1YW50aXR5EhcKDWludF9tYWduaXR1ZGUYASABKANIABIYCg5yZWFsX21hZ25pdHVkZRgCIAEoAUgAEhsKEWJpZ19pbnRfbWFnbml0dWRlGAUgASgJSAASLQoScmF0aW9uYWxfbWFnbml0dWRlGAYgASgLMg8uc3lzbWwuUmF0aW9uYWxIABIMCgR1bml0GAMgASgJEiIKCXVuaXRfdGVybRgEIAEoCzIPLnN5c21sLlVuaXRUZXJtQgsKCW1hZ25pdHVkZSJTCg5NZWFzdXJlbWVudFJlZhIMCgR1bml0GAEgASgJEiIKCXVuaXRfdGVybRgCIAEoCzIPLnN5c21sLlVuaXRUZXJtEg8KB3VuaXRfaWQYAyABKAkiVAoIVW5pdFRlcm0SEQoJc2NhbGVfbnVtGAEgASgBEhEKCXNjYWxlX2RlbhgCIAEoARIiCgdmYWN0b3JzGAMgAygLMhEuc3lzbWwuVW5pdEZhY3RvciIvCgpVbml0RmFjdG9yEg8KB3VuaXRfaWQYASABKAkSEAoIZXhwb25lbnQYAiABKAEiWAoKRGlhZ25vc3RpYxIQCghzZXZlcml0eRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEhkKBHNwYW4YAyABKAsyCy5zeXNtbC5TcGFuEgwKBGNvZGUYBCABKAkiXgoEU3BhbhIMCgRmaWxlGAEgASgJEhIKCnN0YXJ0X2xpbmUYAiABKAUSEQoJc3RhcnRfY29sGAMgASgFEhAKCGVuZF9saW5lGAQgASgFEg8KB2VuZF9jb2wYBSABKAUiEwoRU2VydmVySW5mb1JlcXVlc3QiOwoSU2VydmVySW5mb1Jlc3BvbnNlEg8KB3ZlcnNpb24YASABKAkSFAoMY2FwYWJpbGl0aWVzGAIgAygJIlMKDFF1ZXJ5UmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhsKBXF1ZXJ5GAIgASgLMgwuc3lzbWwuUXVlcnkSEgoKb3NsY19xdWVyeRgDIAEoCSI8Cg1RdWVyeVJlc3BvbnNlEisKCGVsZW1lbnRzGAEgAygLMhkuc3lzbWwuUXVlcnlSZXN1bHRFbGVtZW50IkgKBVF1ZXJ5Eg0KBXNjb3BlGAEgAygJEg4KBnNlbGVjdBgCIAMoCRIgCgV3aGVyZRgDIAEoCzIRLnN5c21sLkNvbnN0cmFpbnQifAoKQ29uc3RyYWludBIvCglwcmltaXRpdmUYASABKAsyGi5zeXNtbC5QcmltaXRpdmVDb25zdHJhaW50SAASLwoJY29tcG9zaXRlGAIgASgLMhouc3lzbWwuQ29tcG9zaXRlQ29uc3RyYWludEgAQgwKCmNvbnN0cmFpbnQicwoTUHJpbWl0aXZlQ29uc3RyYWludBIPCgdpbnZlcnNlGAEgASgIEhAKCHByb3BlcnR5GAIgASgJEioKCG9wZXJhdG9yGAMgASgOMhguc3lzbWwuUHJpbWl0aXZlT3BlcmF0b3ISDQoFdmFsdWUYBCADKAkiaAoTQ29tcG9zaXRlQ29uc3RyYWludBIqCghvcGVyYXRvchgBIAEoDjIYLnN5c21sLkNvbXBvc2l0ZU9wZXJhdG9yEiUKCmNvbnN0cmFpbnQYAiADKAsyES5zeXNtbC5Db25zdHJhaW50IqABChJRdWVyeVJlc3VsdEVsZW1lbnQSCgoCaWQYASABKAkSDAoEdHlwZRgCIAEoCRI9Cgpwcm9wZXJ0aWVzGAMgAygLMikuc3lzbWwuUXVlcnlSZXN1bHRFbGVtZW50LlByb3BlcnRpZXNFbnRyeRoxCg9Qcm9wZXJ0aWVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJzCgpTd2VlcFJhbmdlEhEKCXBhcmFtZXRlchgBIAEoCRIbCgVzdGFydBgCIAEoCzIMLnN5c21sLlZhbHVlEhkKA2VuZBgDIAEoCzIMLnN5c21sLlZhbHVlEhoKBHN0ZXAYBCABKAsyDC5zeXNtbC5WYWx1ZSLQAgoPUnVuU3dlZXBSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEQoJc3ltYm9sX2lkGAIgASgJEhkKEXN1YmplY3Rfc3ltYm9sX2lkGAMgASgJEh8KCWFyZ3VtZW50cxgEIAMoCzIMLnN5c21sLlZhbHVlEkMKD25hbWVkX2FyZ3VtZW50cxgFIAMoCzIqLnN5c21sLlJ1blN3ZWVwUmVxdWVzdC5OYW1lZEFyZ3VtZW50c0VudHJ5EiEKBnJhbmdlcxgGIAMoCzIRLnN5c21sLlN3ZWVwUmFuZ2USDwoHc2FtcGxlcxgHIAEoAxIMCgRzZWVkGAggASgEEg4KBmVuZ2luZRgJIAEoCRpDChNOYW1lZEFyZ3VtZW50c0VudHJ5EgsKA2tleRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlOgI4ASL0AQoIU3dlZXBSb3cSIQoGaW5wdXRzGAEgAygLMhEuc3lzbWwuQ2FsY091dHB1dBIiCgdvdXRwdXRzGAIgAygLMhEuc3lzbWwuQ2FsY091dHB1dBIgCgh2ZXJkaWN0cxgDIAMoCzIOLnN5c21sLlZlcmRpY3QSFgoOZWxhcHNlZF9taWNyb3MYBCABKAMSDQoFZXJyb3IYBSABKAkSLAoOZmFpbHVyZV9yZWFzb24YBiABKA4yFC5zeXNtbC5GYWlsdXJlUmVhc29uEioKC2V2YWx1YXRpb25zGAcgAygLMhUuc3lzbWwuQ2FzZUV2YWx1YXRpb24irQIKEFJ1blN3ZWVwUmVzcG9uc2USHQoEcm93cxgBIAMoCzIPLnN5c21sLlN3ZWVwUm93EhIKCnBhcmFtZXRlcnMYAiADKAkSDwoHc2FtcGxlZBgDIAEoCBIMCgRzZWVkGAQgASgEEg0KBWVycm9yGAUgASgJEiYKC2RpYWdub3N0aWNzGAYgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIsCg5mYWlsdXJlX3JlYXNvbhgHIAEoDjIULnN5c21sLkZhaWx1cmVSZWFzb24SIgoJaW5zdGFuY2VzGAggAygLMg8uc3lzbWwuSW5zdGFuY2USDgoGZW5naW5lGAkgASgJEhAKCHN0cmVuZ3RoGAogASgJEhwKBmJvdW5kcxgLIAMoCzIMLnN5c21sLkJvdW5kIm4KF1J1bkRvY3VtZW50UXVlcnlSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEAoIcXVlcnlfaWQYAiABKAkSLQoIYmluZGluZ3MYAyADKAsyGy5zeXNtbC5Eb2N1bWVudFF1ZXJ5QmluZGluZyJPChREb2N1bWVudFF1ZXJ5QmluZGluZxIRCglwYXJhbWV0ZXIYASABKAkSJAoGdmFsdWVzGAIgAygLMhQuc3lzbWwuRG9jdW1lbnRWYWx1ZSK7AwoNRG9jdW1lbnRWYWx1ZRIUCgplbGVtZW50X2lkGAEgASgJSAASFgoMc3RyaW5nX3ZhbHVlGAIgASgJSAASEwoJaW50X3ZhbHVlGAMgASgDSAASFAoKcmVhbF92YWx1ZRgEIAEoAUgAEhQKCmJvb2xfdmFsdWUYBSABKAhIABISCghpbmZpbml0eRgGIAEoCEgAEiMKCHF1YW50aXR5GAggASgLMg8uc3lzbWwuUXVhbnRpdHlIABIpCgd2ZXJkaWN0GAkgASgLMhYuc3lzbWwuRG9jdW1lbnRWZXJkaWN0SAASJwoGb2JqZWN0GAogASgLMhUuc3lzbWwuRG9jdW1lbnRPYmplY3RIABIlCgVzdGF0ZRgLIAEoCzIULnN5c21sLkRvY3VtZW50U3RhdGVIABIlCgVldmVudBgMIAEoCzIULnN5c21sLkRvY3VtZW50RXZlbnRIABIXCg1iaWdfaW50X3ZhbHVlGA0gASgJSAASKQoOcmF0aW9uYWxfdmFsdWUYDiABKAsyDy5zeXNtbC5SYXRpb25hbEgAEhQKDGVsZW1lbnRfdHlwZRgHIAEoCUIGCgRraW5kIloKDkRvY3VtZW50T2JqZWN0EhMKC2luc3RhbmNlX2lkGAEgASgDEgwKBHBhdGgYAiABKAkSJQoHZWxlbWVudBgDIAEoCzIULnN5c21sLkRvY3VtZW50VmFsdWUirgEKD0RvY3VtZW50VmVyZGljdBInCglhc3NlcnRpb24YASABKAsyFC5zeXNtbC5Eb2N1bWVudFZhbHVlEgwKBGtpbmQYAiABKAkSDAoEdGV4dBgDIAEoCRIMCgRwYXRoGAQgASgJEg8KB3ZlcmRpY3QYBSABKAkSEQoJY29uZGl0aW9uGAYgASgJEg4KBnJlYXNvbhgHIAEoCRIUCgx2ZXJpZmljYXRpb24YCCADKAkisQEKDURvY3VtZW50U3RhdGUSJQoGb2JqZWN0GAEgASgLMhUuc3lzbWwuRG9jdW1lbnRPYmplY3QSDwoHbWFjaGluZRgCIAEoCRIMCgRuYW1lGAMgASgJEhIKCnN0YXRlX3BhdGgYBCABKAkSIwoFc3RhdGUYBSABKAsyFC5zeXNtbC5Eb2N1bWVudFZhbHVlEg4KBnJlZ2lvbhgGIAEoCRIRCgllbmNsb3NpbmcYByADKAkinAIKDURvY3VtZW50RXZlbnQSDAoEa2luZBgBIAEoCRIiCgR0aW1lGAIgASgLMhQuc3lzbWwuRG9jdW1lbnRWYWx1ZRIlCgZvYmplY3QYAyABKAsyFS5zeXNtbC5Eb2N1bWVudE9iamVjdBIPCgdtYWNoaW5lGAQgASgJEg0KBXN0YXRlGAUgASgJEgwKBGZyb20YBiABKAkSCgoCdG8YByABKAkSJQoGdGFyZ2V0GAggASgLMhUuc3lzbWwuRG9jdW1lbnRPYmplY3QSDQoFZXZlbnQYCSABKAkSDwoHcGF5bG9hZBgKIAMoCRIUCgxhbHRlcm5hdGl2ZXMYCyADKAkSDQoFdGFrZW4YDCABKAkSDAoEdGV4dBgNIAEoCSIjChNEb2N1bWVudFF1ZXJ5Q29sdW1uEgwKBG5hbWUYASABKAkiOQoRRG9jdW1lbnRRdWVyeUNlbGwSJAoGdmFsdWVzGAEgAygLMhQuc3lzbWwuRG9jdW1lbnRWYWx1ZSJiChBEb2N1bWVudFF1ZXJ5Um93EiUKB2VsZW1lbnQYASABKAsyFC5zeXNtbC5Eb2N1bWVudFZhbHVlEicKBWNlbGxzGAIgAygLMhguc3lzbWwuRG9jdW1lbnRRdWVyeUNlbGwibgoYUnVuRG9jdW1lbnRRdWVyeVJlc3BvbnNlEisKB2NvbHVtbnMYASADKAsyGi5zeXNtbC5Eb2N1bWVudFF1ZXJ5Q29sdW1uEiUKBHJvd3MYAiADKAsyFy5zeXNtbC5Eb2N1bWVudFF1ZXJ5Um93Ik4KFVJlbmRlckRvY3VtZW50UmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEgwKBGZvcm0YAyABKAkiOAoWUmVuZGVyRG9jdW1lbnRSZXNwb25zZRIQCghtYXJrZG93bhgBIAEoCRIMCgRodG1sGAIgASgJIkQKEVJlbmRlclZpZXdSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSDAoEdmlldxgCIAEoCRINCgVwb3J0cxgDIAEoCSKNAgoSUmVuZGVyVmlld1Jlc3BvbnNlEgwKBHZpZXcYASABKAkSDAoEa2luZBgCIAEoCRIOCgZzdGF0ZWQYAyABKAkSIAoFbm9kZXMYBCADKAsyES5zeXNtbC5SZW5kZXJOb2RlEiAKBWVkZ2VzGAUgAygLMhEuc3lzbWwuUmVuZGVyRWRnZRIPCgdjb2x1bW5zGAYgAygJEh4KBHJvd3MYByADKAsyEC5zeXNtbC5SZW5kZXJSb3cSIwoGY2FudmFzGAggASgLMhMuc3lzbWwuUmVuZGVyQ2FudmFzEiAKBW5vdGVzGAkgAygLMhEuc3lzbWwuUmVuZGVyTm90ZRIPCgdub3RpY2VzGAogAygJIqcCCgpSZW5kZXJOb2RlEgoKAmlkGAEgASgJEgwKBGtpbmQYAiABKAkSDAoEbmFtZRgDIAEoCRIYChBuYW1lX3N5bnRoZXNpemVkGAQgASgIEgwKBHR5cGUYBSABKAkSDgoGZGV0YWlsGAYgASgJEgwKBHRleHQYByABKAkSEAoIc3RhbmRfaW4YCCABKAgSDgoGcGFyZW50GAkgASgJEiAKBXBvcnRzGAogAygLMhEuc3lzbWwuUmVuZGVyUG9ydBIbCgZvcmlnaW4YCyABKAsyCy5zeXNtbC5TcGFuEicKCGdlb21ldHJ5GAwgASgLMhUuc3lzbWwuUmVuZGVyR2VvbWV0cnkSIQoFc3R5bGUYDSABKAsyEi5zeXNtbC5SZW5kZXJTdHlsZSJHCgpSZW5kZXJQb3J0EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDAoEdHlwZRgDIAEoCRIRCglkaXJlY3Rpb24YBCABKAki2AEKClJlbmRlckVkZ2USDAoEZnJvbRgBIAEoCRIKCgJ0bxgCIAEoCRIRCglmcm9tX3BvcnQYAyABKAkSDwoHdG9fcG9ydBgEIAEoCRINCgVsYWJlbBgFIAEoCRIMCgRuYW1lGAYgASgJEgwKBGtpbmQYByABKAkSGwoGb3JpZ2luGAggASgLMgsuc3lzbWwuU3BhbhIhCgVyb3V0ZRgJIAMoCzISLnN5c21sLlJlbmRlclBvaW50EiEKBXN0eWxlGAogASgLMhIuc3lzbWwuUmVuZGVyU3R5bGUiagoOUmVuZGVyR2VvbWV0cnkSCQoBeBgBIAEoARIJCgF5GAIgASgBEg0KBXdpZHRoGAMgASgBEg4KBmhlaWdodBgEIAEoARIQCghoYXNfc2l6ZRgFIAEoCBIRCgljb2xsYXBzZWQYBiABKAgiTQoMUmVuZGVyQ2FudmFzEgwKBHVuaXQYASABKAkSDQoFd2lkdGgYAiABKAESDgoGaGVpZ2h0GAMgASgBEhAKCGhhc19zaXplGAQgASgIInYKC1JlbmRlclN0eWxlEgwKBGZpbGwYASABKAkSDAoEbGluZRgCIAEoCRIMCgR0ZXh0GAMgASgJEgwKBGZvbnQYBCABKAkSEQoJZm9udF9zaXplGAUgASgBEgwKBGJvbGQYBiABKAgSDgoGaXRhbGljGAcgASgIIiMKC1JlbmRlclBvaW50EgkKAXgYASABKAESCQoBeRgCIAEoASI3CglSZW5kZXJSb3cSDQoFY2VsbHMYASADKAkSGwoGb3JpZ2luGAIgASgLMgsuc3lzbWwuU3BhbiKyAQoKUmVuZGVyTm90ZRIMCgR0ZXh0GAEgASgJEg4KBmFuY2hvchgCIAEoCRIRCgllZGdlX2Zyb20YAyABKAkSDwoHZWRnZV90bxgEIAEoCRIJCgF4GAUgASgBEgkKAXkYBiABKAESDQoFd2lkdGgYByABKAESDgoGaGVpZ2h0GAggASgBEhAKCGhhc19zaXplGAkgASgIEhsKBm9yaWdpbhgKIAEoCzILLnN5c21sLlNwYW4iOgoTRXhwb3J0R3JhcGhzUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEg8KB3N1YmplY3QYAiABKAkiSQoURXhwb3J0R3JhcGhzUmVzcG9uc2USDwoHY29udGVudBgBIAEoCRIPCgd2ZXJzaW9uGAIgASgFEg8KB3N1YmplY3QYAyABKAkqsQEKDUZhaWx1cmVSZWFzb24SHgoaRkFJTFVSRV9SRUFTT05fVU5TUEVDSUZJRUQQABIdChlGQUlMVVJFX1JFQVNPTl9FVkFMVUFUSU9OEAESHQoZRkFJTFVSRV9SRUFTT05fV1JPTkdfS0lORBACEiQKIEZBSUxVUkVfUkVBU09OX0FNQklHVU9VU19TVUJKRUNUEAMSHAoYRkFJTFVSRV9SRUFTT05fVU5ERUNJREVEEAQqjAUKC0VkaXRGYWlsdXJlEhwKGEVESVRfRkFJTFVSRV9VTlNQRUNJRklFRBAAEh4KGkVESVRfRkFJTFVSRV9OT19PUEVSQVRJT05TEAESHwobRURJVF9GQUlMVVJFX1VOS05PV05fVEFSR0VUEAISIQodRURJVF9GQUlMVVJFX0FNQklHVU9VU19UQVJHRVQQAxIbChdFRElUX0ZBSUxVUkVfTk9UX1ZBTFVFRBAEEh4KGkVESVRfRkFJTFVSRV9JTlZBTElEX1ZBTFVFEAUSHQoZRURJVF9GQUlMVVJFX0lOVkFMSURfTkFNRRAGEhoKFkVESVRfRkFJTFVSRV9OT1RfTkFNRUQQBxIiCh5FRElUX0ZBSUxVUkVfUkVOQU1FX1JFRkVSRU5DRUQQCBIiCh5FRElUX0ZBSUxVUkVfT1ZFUkxBUFBJTkdfRURJVFMQCRIfChtFRElUX0ZBSUxVUkVfUkVTVUxUX0lOVkFMSUQQChIeChpFRElUX0ZBSUxVUkVfT1dORVJfVU5LTk9XThALEiQKIEVESVRfRkFJTFVSRV9PV05FUl9OT1RfTkFNRVNQQUNFEAwSHQoZRURJVF9GQUlMVVJFX0lMTEVHQUxfS0lORBANEiIKHkVESVRfRkFJTFVSRV9NRU1CRVJfTkFNRV9UQUtFThAOEiIKHkVESVRfRkFJTFVSRV9ERUxFVEVfUkVGRVJFTkNFRBAPEiQKIEVESVRfRkFJTFVSRV9PV05FUl9JTlNJREVfVEFSR0VUEBASIAocRURJVF9GQUlMVVJFX01PVkVfUkVGRVJFTkNFRBAREiUKIUVESVRfRkFJTFVSRV9SRUZFUkVOQ0VEX0VMU0VXSEVSRRASKpIBChFQcmltaXRpdmVPcGVyYXRvchIiCh5QUklNSVRJVkVfT1BFUkFUT1JfVU5TUEVDSUZJRUQQABIcChhQUklNSVRJVkVfT1BFUkFUT1JfRVFVQUwQARIeChpQUklNSVRJVkVfT1BFUkFUT1JfR1JFQVRFUhACEhsKF1BSSU1JVElWRV9PUEVSQVRPUl9MRVNTEAMqbgoRQ29tcG9zaXRlT3BlcmF0b3ISIgoeQ09NUE9TSVRFX09QRVJBVE9SX1VOU1BFQ0lGSUVEEAASGgoWQ09NUE9TSVRFX09QRVJBVE9SX0FORBABEhkKFUNPTVBPU0lURV9PUEVSQVRPUl9PUhACMoUOCgxTeXNNTFNlcnZpY2USRAoNR2V0U2VydmVySW5mbxIYLnN5c21sLlNlcnZlckluZm9SZXF1ZXN0Ghkuc3lzbWwuU2VydmVySW5mb1Jlc3BvbnNlEj4KCVBhcnNlRmlsZRIXLnN5c21sLlBhcnNlRmlsZVJlcXVlc3QaGC5zeXNtbC5QYXJzZUZpbGVSZXNwb25zZRJHCgxQYXJzZVNvdXJjZXMSGi5zeXNtbC5QYXJzZVNvdXJjZXNSZXF1ZXN0Ghsuc3lzbWwuUGFyc2VTb3VyY2VzUmVzcG9uc2USOwoJR2V0U3ltYm9sEhcuc3lzbWwuR2V0U3ltYm9sUmVxdWVzdBoVLnN5c21sLlN5bWJvbFJlc3BvbnNlEkcKDkdldERpYWdub3N0aWNzEhkuc3lzbWwuRGlhZ25vc3RpY3NSZXF1ZXN0Ghouc3lzbWwuRGlhZ25vc3RpY3NSZXNwb25zZRI7CghFdmFsdWF0ZRIWLnN5c21sLkV2YWx1YXRlUmVxdWVzdBoXLnN5c21sLkV2YWx1YXRlUmVzcG9uc2USRAoLSW5zdGFudGlhdGUSGS5zeXNtbC5JbnN0YW50aWF0ZVJlcXVlc3QaGi5zeXNtbC5JbnN0YW50aWF0ZVJlc3BvbnNlEkoKDUV4ZWN1dGVBY3Rpb24SGy5zeXNtbC5FeGVjdXRlQWN0aW9uUmVxdWVzdBocLnN5c21sLkV4ZWN1dGVBY3Rpb25SZXNwb25zZRJHCgxFeGVjdXRlU3RhdGUSGi5zeXNtbC5FeGVjdXRlU3RhdGVSZXF1ZXN0Ghsuc3lzbWwuRXhlY3V0ZVN0YXRlUmVzcG9uc2USOAoHQ29udmVydBIVLnN5c21sLkNvbnZlcnRSZXF1ZXN0GhYuc3lzbWwuQ29udmVydFJlc3BvbnNlEjgKB01pZ3JhdGUSFS5zeXNtbC5NaWdyYXRlUmVxdWVzdBoWLnN5c21sLk1pZ3JhdGVSZXNwb25zZRJBCgpBcHBseUVkaXRzEhguc3lzbWwuQXBwbHlFZGl0c1JlcXVlc3QaGS5zeXNtbC5BcHBseUVkaXRzUmVzcG9uc2USUwoQVmVyaWZ5Q29uc3RyYWludBIeLnN5c21sLlZlcmlmeUNvbnN0cmFpbnRSZXF1ZXN0Gh8uc3lzbWwuVmVyaWZ5Q29uc3RyYWludFJlc3BvbnNlElYKEVZlcmlmeVJlcXVpcmVtZW50Eh8uc3lzbWwuVmVyaWZ5UmVxdWlyZW1lbnRSZXF1ZXN0GiAuc3lzbWwuVmVyaWZ5UmVxdWlyZW1lbnRSZXNwb25zZRJZChJWZXJpZnlTYXRpc2ZhY3Rpb24SIC5zeXNtbC5WZXJpZnlTYXRpc2ZhY3Rpb25SZXF1ZXN0GiEuc3lzbWwuVmVyaWZ5U2F0aXNmYWN0aW9uUmVzcG9uc2USUwoQVmFsaWRhdGVJbnN0YW5jZRIeLnN5c21sLlZhbGlkYXRlSW5zdGFuY2VSZXF1ZXN0Gh8uc3lzbWwuVmFsaWRhdGVJbnN0YW5jZVJlc3BvbnNlEkcKDEV2YWx1YXRlQ2FsYxIaLnN5c21sLkV2YWx1YXRlQ2FsY1JlcXVlc3QaGy5zeXNtbC5FdmFsdWF0ZUNhbGNSZXNwb25zZRJECgtSdW5BbmFseXNpcxIZLnN5c21sLlJ1bkFuYWx5c2lzUmVxdWVzdBoaLnN5c21sLlJ1bkFuYWx5c2lzUmVzcG9uc2USOwoIUnVuU3dlZXASFi5zeXNtbC5SdW5Td2VlcFJlcXVlc3QaFy5zeXNtbC5SdW5Td2VlcFJlc3BvbnNlEkQKC0xpc3RFbmdpbmVzEhkuc3lzbWwuTGlzdEVuZ2luZXNSZXF1ZXN0Ghouc3lzbWwuTGlzdEVuZ2luZXNSZXNwb25zZRIyCgVRdWVyeRITLnN5c21sLlF1ZXJ5UmVxdWVzdBoULnN5c21sLlF1ZXJ5UmVzcG9uc2USUwoQUnVuRG9jdW1lbnRRdWVyeRIeLnN5c21sLlJ1bkRvY3VtZW50UXVlcnlSZXF1ZXN0Gh8uc3lzbWwuUnVuRG9jdW1lbnRRdWVyeVJlc3BvbnNlEk0KDlJlbmRlckRvY3VtZW50Ehwuc3lzbWwuUmVuZGVyRG9jdW1lbnRSZXF1ZXN0Gh0uc3lzbWwuUmVuZGVyRG9jdW1lbnRSZXNwb25zZRJBCgpSZW5kZXJWaWV3Ehguc3lzbWwuUmVuZGVyVmlld1JlcXVlc3QaGS5zeXNtbC5SZW5kZXJWaWV3UmVzcG9uc2USRwoMRXhwb3J0R3JhcGhzEhouc3lzbWwuRXhwb3J0R3JhcGhzUmVxdWVzdBobLnN5c21sLkV4cG9ydEdyYXBoc1Jlc3BvbnNlQipaKGdpdGh1Yi5jb20vT3Blbi1NQkVFL09wZW5TeXNNTC9hcGkvcHJvdG9iBnByb3RvMw"); + fileDesc("CgtzeXNtbC5wcm90bxIFc3lzbWwihgMKB1ZlcmRpY3QSDAoEa2luZBgBIAEoCRISCgplbGVtZW50X2lkGAIgASgJEg8KB2VsZW1lbnQYAyABKAkSDQoFaG9sZHMYBCABKAgSEQoJY29uZGl0aW9uGAUgASgJEhMKC2luc3RhbmNlX2lkGAYgASgDEhgKEGluc3RhbmNlX3R5cGVfaWQYByABKAkSDQoFZXJyb3IYCCABKAkSLAoOZmFpbHVyZV9yZWFzb24YCSABKA4yFC5zeXNtbC5GYWlsdXJlUmVhc29uEhYKDnJlcXVpcmVtZW50X2lkGAogASgJEg4KBmVuZ2luZRgLIAEoCRIQCghzdHJlbmd0aBgMIAEoCRIcCgZib3VuZHMYDSADKAsyDC5zeXNtbC5Cb3VuZBIVCg1pbnN0YW5jZV9wYXRoGA4gASgJEhAKCHF1ZXN0aW9uGA8gASgJEg4KBnN0YXR1cxgQIAEoCRIpCgd3aXRuZXNzGBEgAygLMhguc3lzbWwuV2l0bmVzc0Fzc2lnbm1lbnQiXgoRV2l0bmVzc0Fzc2lnbm1lbnQSDwoHZmVhdHVyZRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlEgwKBHVuaXQYAyABKAkSDQoFZXhhY3QYBCABKAkiNQoFQm91bmQSDAoEbmFtZRgBIAEoCRINCgVsaW1pdBgCIAEoAxIPCgdyZWFjaGVkGAMgASgIIrACChdWZXJpZnlDb25zdHJhaW50UmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCRIZChFzdWJqZWN0X3N5bWJvbF9pZBgDIAEoCRIOCgZlbmdpbmUYBCABKAkSEAoIcXVlc3Rpb24YBSABKAkSHwoJYXJndW1lbnRzGAYgAygLMgwuc3lzbWwuVmFsdWUSSwoPbmFtZWRfYXJndW1lbnRzGAcgAygLMjIuc3lzbWwuVmVyaWZ5Q29uc3RyYWludFJlcXVlc3QuTmFtZWRBcmd1bWVudHNFbnRyeRpDChNOYW1lZEFyZ3VtZW50c0VudHJ5EgsKA2tleRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlOgI4ASKWAQoYVmVyaWZ5Q29uc3RyYWludFJlc3BvbnNlEh8KB3ZlcmRpY3QYASABKAsyDi5zeXNtbC5WZXJkaWN0EiIKCWluc3RhbmNlcxgCIAMoCzIPLnN5c21sLkluc3RhbmNlEg0KBWVycm9yGAMgASgJEiYKC2RpYWdub3N0aWNzGAQgAygLMhEuc3lzbWwuRGlhZ25vc3RpYyKyAgoYVmVyaWZ5UmVxdWlyZW1lbnRSZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEQoJc3ltYm9sX2lkGAIgASgJEhkKEXN1YmplY3Rfc3ltYm9sX2lkGAMgASgJEg4KBmVuZ2luZRgEIAEoCRIQCghxdWVzdGlvbhgFIAEoCRIfCglhcmd1bWVudHMYBiADKAsyDC5zeXNtbC5WYWx1ZRJMCg9uYW1lZF9hcmd1bWVudHMYByADKAsyMy5zeXNtbC5WZXJpZnlSZXF1aXJlbWVudFJlcXVlc3QuTmFtZWRBcmd1bWVudHNFbnRyeRpDChNOYW1lZEFyZ3VtZW50c0VudHJ5EgsKA2tleRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlOgI4ASJtChNWZXJpZmljYXRpb25WZXJkaWN0Eg8KB2Nhc2VfaWQYASABKAkSDAoEa2luZBgCIAEoCRIOCgZkZXRhaWwYAyABKAkSDwoHc3ViY2FzZRgEIAEoCBIWCg5yZXF1aXJlbWVudF9pZBgFIAEoCSLSAQoZVmVyaWZ5UmVxdWlyZW1lbnRSZXNwb25zZRIfCgd2ZXJkaWN0GAEgASgLMg4uc3lzbWwuVmVyZGljdBIiCglpbnN0YW5jZXMYAiADKAsyDy5zeXNtbC5JbnN0YW5jZRINCgVlcnJvchgDIAEoCRImCgtkaWFnbm9zdGljcxgEIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSOQoVdmVyaWZpY2F0aW9uX3ZlcmRpY3RzGAUgAygLMhouc3lzbWwuVmVyaWZpY2F0aW9uVmVyZGljdCJkChlWZXJpZnlTYXRpc2ZhY3Rpb25SZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSEQoJc3ltYm9sX2lkGAIgASgJEg4KBmVuZ2luZRgDIAEoCRIQCghxdWVzdGlvbhgEIAEoCSKCAgoaVmVyaWZ5U2F0aXNmYWN0aW9uUmVzcG9uc2USIAoIdmVyZGljdHMYASADKAsyDi5zeXNtbC5WZXJkaWN0EiIKCWluc3RhbmNlcxgCIAMoCzIPLnN5c21sLkluc3RhbmNlEg0KBWVycm9yGAMgASgJEiYKC2RpYWdub3N0aWNzGAQgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIsCg5mYWlsdXJlX3JlYXNvbhgFIAEoDjIULnN5c21sLkZhaWx1cmVSZWFzb24SOQoVdmVyaWZpY2F0aW9uX3ZlcmRpY3RzGAYgAygLMhouc3lzbWwuVmVyaWZpY2F0aW9uVmVyZGljdCJQChdWYWxpZGF0ZUluc3RhbmNlUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCRIOCgZlbmdpbmUYAyABKAkisgIKGFZhbGlkYXRlSW5zdGFuY2VSZXNwb25zZRIgCgh2ZXJkaWN0cxgBIAMoCzIOLnN5c21sLlZlcmRpY3QSHwoHc3VtbWFyeRgCIAEoCzIOLnN5c21sLlZlcmRpY3QSIgoJaW5zdGFuY2VzGAMgAygLMg8uc3lzbWwuSW5zdGFuY2USDQoFZXJyb3IYBCABKAkSJgoLZGlhZ25vc3RpY3MYBSADKAsyES5zeXNtbC5EaWFnbm9zdGljEiwKDmZhaWx1cmVfcmVhc29uGAYgASgOMhQuc3lzbWwuRmFpbHVyZVJlYXNvbhI5ChV2ZXJpZmljYXRpb25fdmVyZGljdHMYByADKAsyGi5zeXNtbC5WZXJpZmljYXRpb25WZXJkaWN0Eg8KB2JvdW5kZWQYCCABKAgibQoTRXZhbHVhdGVDYWxjUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCRIfCglhcmd1bWVudHMYAyADKAsyDC5zeXNtbC5WYWx1ZRIOCgZlbmdpbmUYBCABKAki/QEKFEV2YWx1YXRlQ2FsY1Jlc3BvbnNlEhwKBnJlc3VsdBgBIAEoCzIMLnN5c21sLlZhbHVlEiIKB291dHB1dHMYAiADKAsyES5zeXNtbC5DYWxjT3V0cHV0Eg0KBWVycm9yGAMgASgJEiYKC2RpYWdub3N0aWNzGAQgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIsCg5mYWlsdXJlX3JlYXNvbhgFIAEoDjIULnN5c21sLkZhaWx1cmVSZWFzb24SDgoGZW5naW5lGAYgASgJEhAKCHN0cmVuZ3RoGAcgASgJEhwKBmJvdW5kcxgIIAMoCzIMLnN5c21sLkJvdW5kIjcKCkNhbGNPdXRwdXQSDAoEbmFtZRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlIpMBCg5DYXNlRXZhbHVhdGlvbhITCgtmdW5jdGlvbl9pZBgBIAEoCRIfCglhcmd1bWVudHMYAiADKAsyDC5zeXNtbC5WYWx1ZRIcCgZyZXN1bHQYAyABKAsyDC5zeXNtbC5WYWx1ZRINCgVlcnJvchgEIAEoCRIQCghzZWxlY3RlZBgFIAEoCBIMCgR0aWVkGAYgASgIIqYCChJSdW5BbmFseXNpc1JlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIRCglzeW1ib2xfaWQYAiABKAkSGQoRc3ViamVjdF9zeW1ib2xfaWQYAyABKAkSHwoJYXJndW1lbnRzGAQgAygLMgwuc3lzbWwuVmFsdWUSRgoPbmFtZWRfYXJndW1lbnRzGAUgAygLMi0uc3lzbWwuUnVuQW5hbHlzaXNSZXF1ZXN0Lk5hbWVkQXJndW1lbnRzRW50cnkSEAoIc2NoZWR1bGUYBiABKAkSDgoGZW5naW5lGAcgASgJGkMKE05hbWVkQXJndW1lbnRzRW50cnkSCwoDa2V5GAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWU6AjgBItwDChNSdW5BbmFseXNpc1Jlc3BvbnNlEiIKB291dHB1dHMYASADKAsyES5zeXNtbC5DYWxjT3V0cHV0EiAKCHZlcmRpY3RzGAIgAygLMg4uc3lzbWwuVmVyZGljdBIiCglpbnN0YW5jZXMYAyADKAsyDy5zeXNtbC5JbnN0YW5jZRINCgVlcnJvchgEIAEoCRImCgtkaWFnbm9zdGljcxgFIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSLAoOZmFpbHVyZV9yZWFzb24YBiABKA4yFC5zeXNtbC5GYWlsdXJlUmVhc29uEjkKFXZlcmlmaWNhdGlvbl92ZXJkaWN0cxgHIAMoCzIaLnN5c21sLlZlcmlmaWNhdGlvblZlcmRpY3QSIAoIb3V0Y29tZXMYCCADKAsyDi5zeXNtbC5PdXRjb21lEi0KC2V4cGxvcmF0aW9uGAkgASgLMhguc3lzbWwuRXhwbG9yYXRpb25TdGF0dXMSKgoLZXZhbHVhdGlvbnMYCiADKAsyFS5zeXNtbC5DYXNlRXZhbHVhdGlvbhIOCgZlbmdpbmUYCyABKAkSEAoIc3RyZW5ndGgYDCABKAkSHAoGYm91bmRzGA0gAygLMgwuc3lzbWwuQm91bmQiLAoQUHJvYmFiaWxpdHlSYW5nZRILCgNtaW4YASABKAESCwoDbWF4GAIgASgBIssCCgdPdXRjb21lEiwKB291dHB1dHMYASADKAsyGy5zeXNtbC5PdXRjb21lLk91dHB1dHNFbnRyeRITCgtmaW5hbF9zdGF0ZRgCIAEoCRIWCg5zdGF0ZXNfdmlzaXRlZBgDIAMoCRINCgVlcnJvchgEIAEoCRIWCg5saW5lYXJpemF0aW9ucxgFIAEoBRIPCgd3aXRuZXNzGAYgAygJEiYKC2RpYWdub3N0aWNzGAcgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxITCgtwcm9iYWJpbGl0eRgIIAEoARIyChFwcm9iYWJpbGl0eV9yYW5nZRgJIAEoCzIXLnN5c21sLlByb2JhYmlsaXR5UmFuZ2UaPAoMT3V0cHV0c0VudHJ5EgsKA2tleRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlOgI4ASK1AQoRRXhwbG9yYXRpb25TdGF0dXMSEAoIY29tcGxldGUYASABKAgSDAoEcnVucxgCIAEoBRITCgtidWRnZXRzX2hpdBgDIAMoCRITCgtydW5zX2J1ZGdldBgEIAEoBRIUCgxkZXB0aF9idWRnZXQYBSABKAUSIQoZcHJvYmFiaWxpdGllc19sb3dlcl9ib3VuZBgGIAEoCBIdChVmYWlsZWRfbGluZWFyaXphdGlvbnMYByABKAUiFAoSTGlzdEVuZ2luZXNSZXF1ZXN0IvwBCgpFbmdpbmVJbmZvEgwKBG5hbWUYASABKAkSEQoJYXV0aG9yaXR5GAIgASgJEg8KB2Fuc3dlcnMYAyADKAkSDgoGYm91bmRzGAQgAygJEg8KB3Byb2Nlc3MYBSABKAkSFQoNcHJvY2Vzc19mb3VuZBgGIAEoCRINCgVyZWFkeRgHIAEoCBITCgt1bmF2YWlsYWJsZRgIIAEoCRIMCgRraW5kGAkgASgJEhAKCHByb3RvY29sGAogASgJEg4KBnNvdXJjZRgLIAEoCRIPCgdjb21tYW5kGAwgASgJEg8KB3ZlcnNpb24YDSABKAkSDgoGc2VydmVkGA4gASgIIjkKE0xpc3RFbmdpbmVzUmVzcG9uc2USIgoHZW5naW5lcxgBIAMoCzIRLnN5c21sLkVuZ2luZUluZm8ijAEKEFBhcnNlRmlsZVJlcXVlc3QSEwoJZmlsZV9wYXRoGAEgASgJSAASEQoHY29udGVudBgCIAEoCUgAEhgKDGNvbnRlbnRfaGFzaBgDIAEoCUICGAESEAoIbGFuZ3VhZ2UYBCABKAkSGgoSc3RyaWN0X2NvbmZvcm1hbmNlGAUgASgIQggKBnNvdXJjZSJiCg5Tb3VyY2VEb2N1bWVudBITCglmaWxlX3BhdGgYASABKAlIABIRCgdjb250ZW50GAIgASgJSAASEAoIbGFuZ3VhZ2UYAyABKAkSDAoEbmFtZRgEIAEoCUIICgZzb3VyY2UidAoTUGFyc2VTb3VyY2VzUmVxdWVzdBIoCglkb2N1bWVudHMYASADKAsyFS5zeXNtbC5Tb3VyY2VEb2N1bWVudBIaChJzdHJpY3RfY29uZm9ybWFuY2UYAiABKAgSFwoPYmFzZV9tb2RlbF9oYXNoGAMgASgJIpUBChRQYXJzZVNvdXJjZXNSZXNwb25zZRISCgptb2RlbF9oYXNoGAEgASgJEiAKBXJvb3RzGAIgAygLMhEuc3lzbWwuU3ltYm9sSW5mbxImCgtkaWFnbm9zdGljcxgDIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSDQoFZXJyb3IYBCABKAkSEAoIYWZmZWN0ZWQYBSADKAkifwoRUGFyc2VGaWxlUmVzcG9uc2USEgoKbW9kZWxfaGFzaBgBIAEoCRIfCgRyb290GAIgASgLMhEuc3lzbWwuU3ltYm9sSW5mbxImCgtkaWFnbm9zdGljcxgDIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSDQoFZXJyb3IYBCABKAkiOQoQR2V0U3ltYm9sUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCSJCCg5TeW1ib2xSZXNwb25zZRIhCgZzeW1ib2wYASABKAsyES5zeXNtbC5TeW1ib2xJbmZvEg0KBWVycm9yGAIgASgJIigKEkRpYWdub3N0aWNzUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJIkwKE0RpYWdub3N0aWNzUmVzcG9uc2USJgoLZGlhZ25vc3RpY3MYASADKAsyES5zeXNtbC5EaWFnbm9zdGljEg0KBWVycm9yGAIgASgJIm8KD0V2YWx1YXRlUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhIKCmV4cHJlc3Npb24YAiABKAkSGQoRY29udGV4dF9zeW1ib2xfaWQYAyABKAkSGQoRc3ViamVjdF9zeW1ib2xfaWQYBCABKAkiZwoQRXZhbHVhdGVSZXNwb25zZRIcCgZyZXN1bHQYASABKAsyDC5zeXNtbC5WYWx1ZRINCgVlcnJvchgCIAEoCRImCgtkaWFnbm9zdGljcxgDIAMoCzIRLnN5c21sLkRpYWdub3N0aWMiwgEKCEluc3RhbmNlEgoKAmlkGAEgASgDEhYKDnR5cGVfc3ltYm9sX2lkGAIgASgJEjoKDmZlYXR1cmVfdmFsdWVzGAQgAygLMiIuc3lzbWwuSW5zdGFuY2UuRmVhdHVyZVZhbHVlc0VudHJ5GkkKEkZlYXR1cmVWYWx1ZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy5zeXNtbC5GZWF0dXJlVmFsdWU6AjgBSgQIAxAEUgVzbG90cyKEAQoMRmVhdHVyZVZhbHVlEhQKDGZlYXR1cmVfbmFtZRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlEhwKBnZhbHVlcxgDIAMoCzIMLnN5c21sLlZhbHVlEhQKDG1hdGVyaWFsaXplZBgEIAEoCBINCgVlcnJvchgFIAEoCSI7ChJJbnN0YW50aWF0ZVJlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIRCglzeW1ib2xfaWQYAiABKAkikwEKE0luc3RhbnRpYXRlUmVzcG9uc2USIQoIaW5zdGFuY2UYASABKAsyDy5zeXNtbC5JbnN0YW5jZRINCgVlcnJvchgCIAEoCRImCgtkaWFnbm9zdGljcxgDIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSIgoJaW5zdGFuY2VzGAQgAygLMg8uc3lzbWwuSW5zdGFuY2Ui6QEKFEV4ZWN1dGVBY3Rpb25SZXF1ZXN0EhIKCm1vZGVsX2hhc2gYASABKAkSGAoQYWN0aW9uX3N5bWJvbF9pZBgCIAEoCRI3CgZpbnB1dHMYAyADKAsyJy5zeXNtbC5FeGVjdXRlQWN0aW9uUmVxdWVzdC5JbnB1dHNFbnRyeRIQCghzY2hlZHVsZRgEIAEoCRIbChNwZXJmb3JtZXJfc3ltYm9sX2lkGAUgASgJGjsKC0lucHV0c0VudHJ5EgsKA2tleRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlOgI4ASLMAwoVRXhlY3V0ZUFjdGlvblJlc3BvbnNlEjoKB291dHB1dHMYASADKAsyKS5zeXNtbC5FeGVjdXRlQWN0aW9uUmVzcG9uc2UuT3V0cHV0c0VudHJ5Eg0KBWVycm9yGAIgASgJEiYKC2RpYWdub3N0aWNzGAMgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIgCghvdXRjb21lcxgEIAMoCzIOLnN5c21sLk91dGNvbWUSLQoLZXhwbG9yYXRpb24YBSABKAsyGC5zeXNtbC5FeHBsb3JhdGlvblN0YXR1cxISCgpmaW5hbF90aW1lGAYgASgBElMKFHBlcmZvcm1lcl9hdHRyaWJ1dGVzGAcgAygLMjUuc3lzbWwuRXhlY3V0ZUFjdGlvblJlc3BvbnNlLlBlcmZvcm1lckF0dHJpYnV0ZXNFbnRyeRo8CgxPdXRwdXRzRW50cnkSCwoDa2V5GAEgASgJEhsKBXZhbHVlGAIgASgLMgwuc3lzbWwuVmFsdWU6AjgBGkgKGFBlcmZvcm1lckF0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSGwoFdmFsdWUYAiABKAsyDC5zeXNtbC5WYWx1ZToCOAEimAEKE0V4ZWN1dGVTdGF0ZVJlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIfChdzdGF0ZV9tYWNoaW5lX3N5bWJvbF9pZBgCIAEoCRIOCgZldmVudHMYAyADKAkSEAoIc2NoZWR1bGUYBCABKAkSGwoTcGVyZm9ybWVyX3N5bWJvbF9pZBgFIAEoCRINCgV0cmFjZRgGIAEoCCKPAwoURXhlY3V0ZVN0YXRlUmVzcG9uc2USFgoOc3RhdGVzX3Zpc2l0ZWQYASADKAkSRAoNZmluYWxfY29udGV4dBgCIAMoCzItLnN5c21sLkV4ZWN1dGVTdGF0ZVJlc3BvbnNlLkZpbmFsQ29udGV4dEVudHJ5Eg0KBWVycm9yGAMgASgJEiYKC2RpYWdub3N0aWNzGAQgAygLMhEuc3lzbWwuRGlhZ25vc3RpYxIgCghvdXRjb21lcxgFIAMoCzIOLnN5c21sLk91dGNvbWUSLQoLZXhwbG9yYXRpb24YBiABKAsyGC5zeXNtbC5FeHBsb3JhdGlvblN0YXR1cxISCgpmaW5hbF90aW1lGAcgASgBEiMKBXRyYWNlGAggAygLMhQuc3lzbWwuRG9jdW1lbnRFdmVudBIVCg10cmFjZV9kcm9wcGVkGAkgASgFGkEKEUZpbmFsQ29udGV4dEVudHJ5EgsKA2tleRgBIAEoCRIbCgV2YWx1ZRgCIAEoCzIMLnN5c21sLlZhbHVlOgI4ASKBAgoOQ29udmVydFJlcXVlc3QSEwoJZmlsZV9wYXRoGAEgASgJSAASEQoHY29udGVudBgCIAEoCUgAEhQKCm1vZGVsX2hhc2gYBiABKAlIABITCgtmcm9tX2Zvcm1hdBgDIAEoCRIRCgl0b19mb3JtYXQYBCABKAkSHgoWdG9sZXJhdGVfc3ludGF4X2Vycm9ycxgFIAEoCBIPCgdpZF9mb3JtGAcgASgJEhEKCWRvY3VtZW50cxgIIAMoCRIPCgdjb21wYWN0GAkgASgIEhQKDG9taXRfZGVyaXZlZBgKIAEoCBIUCgxrZWVwX2Rlcml2ZWQYCyADKAlCCAoGc291cmNlIrQBCg9Db252ZXJ0UmVzcG9uc2USDwoHY29udGVudBgBIAEoCRITCgtmcm9tX2Zvcm1hdBgCIAEoCRIRCgl0b19mb3JtYXQYAyABKAkSDQoFZXJyb3IYBCABKAkSJgoLZGlhZ25vc3RpY3MYBSADKAsyES5zeXNtbC5EaWFnbm9zdGljEhQKDGV4cGVyaW1lbnRhbBgGIAEoCBIbChNleHBlcmltZW50YWxfbm90aWNlGAcgASgJIu4BCg5NaWdyYXRlUmVxdWVzdBITCglmaWxlX3BhdGgYASABKAlIABIRCgdjb250ZW50GAIgASgMSAASEwoLZnJvbV9mb3JtYXQYAyABKAkSEQoJdG9fZm9ybWF0GAQgASgJEg4KBnJlcG9ydBgFIAEoCBIPCgdyZXN1bHRzGAYgASgIEhUKC2xheW91dF9wYXRoGAcgASgJSAESGAoObGF5b3V0X2NvbnRlbnQYCCABKAlIARIWCg5pbWFnZV9iYXNlX3VybBgJIAEoCRIOCgZzdHJpY3QYCiABKAhCCAoGc291cmNlQggKBmxheW91dCLqAQoPTWlncmF0ZVJlc3BvbnNlEg8KB2NvbnRlbnQYASABKAkSEwoLZnJvbV9mb3JtYXQYAiABKAkSEQoJdG9fZm9ybWF0GAMgASgJEg0KBWVycm9yGAQgASgJEhQKDGV4cGVyaW1lbnRhbBgFIAEoCBIbChNleHBlcmltZW50YWxfbm90aWNlGAYgASgJEiYKBnJlcG9ydBgHIAEoCzIWLnN5c21sLk1pZ3JhdGlvblJlcG9ydBIPCgdyZXN1bHRzGAggASgJEiMKBWZpbGVzGAkgAygLMhQuc3lzbWwuTWlncmF0aW9uRmlsZSLDAQoPTWlncmF0aW9uUmVwb3J0Eg4KBnNvdXJjZRgBIAEoCRIQCghleHBvcnRlchgCIAEoCRIPCgdzdW1tYXJ5GAMgASgJEg4KBm1hcHBlZBgEIAEoBRIUCgxhcHByb3hpbWF0ZWQYBSABKAUSEAoIdW5tYXBwZWQYBiABKAUSDwoHc2tpcHBlZBgHIAEoBRImCgdlbnRyaWVzGAggAygLMhUuc3lzbWwuTWlncmF0aW9uRW50cnkSDAoEdGV4dBgJIAEoCSJnCg5NaWdyYXRpb25FbnRyeRIKCgJpZBgBIAEoCRIMCgRraW5kGAIgASgJEgwKBG5hbWUYAyABKAkSDgoGdGFyZ2V0GAQgASgJEg8KB3ZlcmRpY3QYBSABKAkSDAoEbm90ZRgGIAEoCSIuCg1NaWdyYXRpb25GaWxlEgwKBHBhdGgYASABKAkSDwoHY29udGVudBgCIAEoDCJ9ChFBcHBseUVkaXRzUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEigKCm9wZXJhdGlvbnMYAiADKAsyFC5zeXNtbC5FZGl0T3BlcmF0aW9uEhAKCGRvY3VtZW50GAMgASgJEhgKEGFjY2VwdF9kb2N1bWVudHMYBCABKAgiwwYKDUVkaXRPcGVyYXRpb24SKAoJc2V0X3ZhbHVlGAEgASgLMhMuc3lzbWwuU2V0VmFsdWVFZGl0SAASIwoGcmVuYW1lGAIgASgLMhEuc3lzbWwuUmVuYW1lRWRpdEgAEioKCmFkZF9tZW1iZXIYAyABKAsyFC5zeXNtbC5BZGRNZW1iZXJFZGl0SAASIwoGZGVsZXRlGAQgASgLMhEuc3lzbWwuRGVsZXRlRWRpdEgAEh8KBG1vdmUYBSABKAsyDy5zeXNtbC5Nb3ZlRWRpdEgAEjIKDmFkZF9jb25uZWN0aW9uGAYgASgLMhguc3lzbWwuQWRkQ29ubmVjdGlvbkVkaXRIABIsCgthZGRfc2F0aXNmeRgHIAEoCzIVLnN5c21sLkFkZFNhdGlzZnlFZGl0SAASSQoaYWRkX3JlcXVpcmVtZW50X2NvbnN0cmFpbnQYCCABKAsyIy5zeXNtbC5BZGRSZXF1aXJlbWVudENvbnN0cmFpbnRFZGl0SAASMgoOYWRkX3RyYW5zaXRpb24YCSABKAsyGC5zeXNtbC5BZGRUcmFuc2l0aW9uRWRpdEgAEioKCmFkZF9pbXBvcnQYCiABKAsyFC5zeXNtbC5BZGRJbXBvcnRFZGl0SAASOAoRYWRkX2RvY3VtZW50YXRpb24YCyABKAsyGy5zeXNtbC5BZGREb2N1bWVudGF0aW9uRWRpdEgAEioKCmFkZF92ZXJpZnkYDCABKAsyFC5zeXNtbC5BZGRWZXJpZnlFZGl0SAASLgoMYWRkX21ldGFkYXRhGA0gASgLMhYuc3lzbWwuQWRkTWV0YWRhdGFFZGl0SAASLgoMYWRkX3NlcXVlbmNlGA4gASgLMhYuc3lzbWwuQWRkU2VxdWVuY2VFZGl0SAASOwoTYWRkX21ldGFkYXRhX3ByZWZpeBgPIAEoCzIcLnN5c21sLkFkZE1ldGFkYXRhUHJlZml4RWRpdEgAEiwKC2FkZF9jb21tZW50GBAgASgLMhUuc3lzbWwuQWRkQ29tbWVudEVkaXRIABImCghhZGRfbm90ZRgSIAEoCzISLnN5c21sLkFkZE5vdGVFZGl0SABCCwoJb3BlcmF0aW9uIpICCg1BZGRNZW1iZXJFZGl0Eg0KBW93bmVyGAEgASgJEgwKBGtpbmQYAiABKAkSDAoEbmFtZRgDIAEoCRIMCgR0eXBlGAQgASgJEhQKDG11bHRpcGxpY2l0eRgFIAEoCRINCgV2YWx1ZRgGIAEoCRITCgtzcGVjaWFsaXplcxgHIAMoCRITCgtpc19hYnN0cmFjdBgIIAEoCBIRCglyZWRlZmluZXMYCSADKAkSEgoKaXNfZGVmYXVsdBgKIAEoCBIRCglkaXJlY3Rpb24YCyABKAkSGQoRbWV0YWRhdGFfcHJlZml4ZXMYDiADKAkSCwoDZG9jGAwgASgJEhcKD2JvZHlfZXhwcmVzc2lvbhgNIAEoCSJ5Cg5BZGRTYXRpc2Z5RWRpdBINCgVvd25lchgBIAEoCRITCgtyZXF1aXJlbWVudBgCIAEoCRIaChJzYXRpc2Z5aW5nX2ZlYXR1cmUYAyABKAkSEwoLaXNfYXNzZXJ0ZWQYBCABKAgSEgoKaXNfbmVnYXRlZBgFIAEoCCJdChxBZGRSZXF1aXJlbWVudENvbnN0cmFpbnRFZGl0Eg0KBW93bmVyGAEgASgJEgwKBGtpbmQYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCRIMCgRuYW1lGAQgASgJIpEBChFBZGRUcmFuc2l0aW9uRWRpdBINCgVvd25lchgBIAEoCRIMCgRuYW1lGAIgASgJEg4KBnNvdXJjZRgDIAEoCRIOCgZ0YXJnZXQYBCABKAkSDwoHdHJpZ2dlchgFIAEoCRINCgVndWFyZBgGIAEoCRIOCgZlZmZlY3QYByABKAkSDwoHaW5pdGlhbBgIIAEoCCIzCg1BZGRWZXJpZnlFZGl0Eg0KBW93bmVyGAEgASgJEhMKC3JlcXVpcmVtZW50GAIgASgJIjYKFE1ldGFkYXRhRmVhdHVyZVZhbHVlEg8KB2ZlYXR1cmUYASABKAkSDQoFdmFsdWUYAiABKAkilAEKD0FkZE1ldGFkYXRhRWRpdBINCgVvd25lchgBIAEoCRIVCg1tZXRhZGF0YV90eXBlGAIgASgJEgwKBG5hbWUYAyABKAkSDQoFYWJvdXQYBCADKAkSKwoGdmFsdWVzGAUgAygLMhsuc3lzbWwuTWV0YWRhdGFGZWF0dXJlVmFsdWUSEQoJc2hvcnRoYW5kGAYgASgIIj4KFUFkZE1ldGFkYXRhUHJlZml4RWRpdBIOCgZ0YXJnZXQYASABKAkSFQoNbWV0YWRhdGFfdHlwZRgCIAEoCSKAAQoNQWRkSW1wb3J0RWRpdBINCgVvd25lchgBIAEoCRISCgp2aXNpYmlsaXR5GAIgASgJEg4KBnRhcmdldBgDIAEoCRIUCgxpc19yZWN1cnNpdmUYBCABKAgSFQoNaXNfaW1wb3J0X2FsbBgFIAEoCBIPCgdmaWx0ZXJzGAYgAygJImMKFEFkZERvY3VtZW50YXRpb25FZGl0Eg4KBnRhcmdldBgBIAEoCRIMCgRib2R5GAIgASgJEgwKBG5hbWUYAyABKAkSDgoGbG9jYWxlGAQgASgJEg8KB3JlcGxhY2UYBSABKAgiWgoOQWRkQ29tbWVudEVkaXQSDQoFb3duZXIYASABKAkSDAoEYm9keRgCIAEoCRIMCgRuYW1lGAMgASgJEg0KBWFib3V0GAQgAygJEg4KBmxvY2FsZRgFIAEoCSIrCgtBZGROb3RlRWRpdBIOCgZ0YXJnZXQYASABKAkSDAoEdGV4dBgCIAEoCSLNAgoPQWRkU2VxdWVuY2VFZGl0Eg0KBW93bmVyGAEgASgJEg8KB2tleXdvcmQYAiABKAkSCwoDcmVmGAMgASgJEhMKC21lbWJlcl9raW5kGAQgASgJEhMKC21lbWJlcl9uYW1lGAUgASgJEgwKBHR5cGUYBiABKAkSDQoFYWZ0ZXIYByABKAkSEQoJY29uZGl0aW9uGAggASgJEg0KBXZhbHVlGAkgASgJEg4KBnRhcmdldBgKIAEoCRILCgN2aWEYCyABKAkSDQoFdW50aWwYDCABKAkSJAoEYm9keRgNIAMoCzIWLnN5c21sLkFkZFNlcXVlbmNlRWRpdBIpCgllbHNlX2JvZHkYDiADKAsyFi5zeXNtbC5BZGRTZXF1ZW5jZUVkaXQSFAoMbXVsdGlwbGljaXR5GA8gASgJEhEKCXBhcmFtZXRlchgQIAEoCSJuChFBZGRDb25uZWN0aW9uRWRpdBINCgVvd25lchgBIAEoCRIMCgRraW5kGAIgASgJEhAKCGZyb21fZW5kGAMgASgJEg4KBnRvX2VuZBgEIAEoCRIMCgRuYW1lGAUgASgJEgwKBHR5cGUYBiABKAkiLQoKRGVsZXRlRWRpdBIOCgZ0YXJnZXQYASABKAkSDwoHY2FzY2FkZRgCIAEoCCIpCghNb3ZlRWRpdBIOCgZ0YXJnZXQYASABKAkSDQoFb3duZXIYAiABKAkiLQoMU2V0VmFsdWVFZGl0Eg4KBnRhcmdldBgBIAEoCRINCgV2YWx1ZRgCIAEoCSIuCgpSZW5hbWVFZGl0Eg4KBnRhcmdldBgBIAEoCRIQCghuZXdfbmFtZRgCIAEoCSKQAgoSQXBwbHlFZGl0c1Jlc3BvbnNlEg8KB2NvbnRlbnQYASABKAkSIwoHYXBwbGllZBgCIAMoCzISLnN5c21sLkFwcGxpZWRFZGl0Eg0KBWVycm9yGAMgASgJEiMKB2ZhaWx1cmUYBCABKA4yEi5zeXNtbC5FZGl0RmFpbHVyZRImCgtkaWFnbm9zdGljcxgFIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSGgoScmVmZXJyaW5nX2VsZW1lbnRzGAYgAygJEigKCWRvY3VtZW50cxgHIAMoCzIVLnN5c21sLkVkaXRlZERvY3VtZW50EiIKCXJlZmVycmVycxgIIAMoCzIPLnN5c21sLlJlZmVycmVyIi8KDkVkaXRlZERvY3VtZW50EgwKBG5hbWUYASABKAkSDwoHY29udGVudBgCIAEoCSIqCghSZWZlcnJlchIMCgRuYW1lGAEgASgJEhAKCGRvY3VtZW50GAIgASgJIowBCgtBcHBsaWVkRWRpdBIXCg9vcGVyYXRpb25faW5kZXgYASABKAUSDgoGdGFyZ2V0GAIgASgJEg4KBm9mZnNldBgDIAEoBRIOCgZsZW5ndGgYBCABKAUSEAoIb2xkX3RleHQYBSABKAkSEAoIbmV3X3RleHQYBiABKAkSEAoIZG9jdW1lbnQYByABKAki/QIKClN5bWJvbEluZm8SCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIMCgRraW5kGAMgASgJEjEKCG1ldGFkYXRhGAQgAygLMh8uc3lzbWwuU3ltYm9sSW5mby5NZXRhZGF0YUVudHJ5EhEKCWNoaWxkX2lkcxgFIAMoCRIoCgphdHRyaWJ1dGVzGAYgAygLMhQuc3lzbWwuQXR0cmlidXRlSW5mbxIiCgl0eXBlX2luZm8YByABKAsyDy5zeXNtbC5UeXBlSW5mbxItCgxtdWx0aXBsaWNpdHkYCCABKAsyFy5zeXNtbC5NdWx0aXBsaWNpdHlJbmZvEi4KD3NwZWNpYWxpemF0aW9ucxgJIAMoCzIVLnN5c21sLlNwZWNpYWxpemF0aW9uEiMKG3dpdGhoZWxkX2xpYnJhcnlfYXR0cmlidXRlcxgKIAEoBRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiWAoOU3BlY2lhbGl6YXRpb24SDAoEa2luZBgBIAEoCRIQCghkZWNsYXJlZBgCIAEoCRIRCgl0YXJnZXRfaWQYAyABKAkSEwoLdGFyZ2V0X2tpbmQYBCABKAkilQEKCFR5cGVJbmZvEhAKCGRlY2xhcmVkGAEgASgJEhMKC3Jlc29sdmVkX2lkGAIgASgJEhUKDXJlc29sdmVkX2tpbmQYAyABKAkSEQoJcHJpbWl0aXZlGAQgASgJEhgKEHByaW1pdGl2ZV9zb3VyY2UYBSABKAkSEAoIcXVhbnRpdHkYBiABKAgSDAoEdW5pdBgHIAEoCSIwChBNdWx0aXBsaWNpdHlJbmZvEg0KBWxvd2VyGAEgASgJEg0KBXVwcGVyGAIgASgJIlYKDUF0dHJpYnV0ZUluZm8SDAoEbmFtZRgBIAEoCRIMCgR0eXBlGAIgASgJEhsKBXZhbHVlGAMgASgLMgwuc3lzbWwuVmFsdWUSDAoEdW5pdBgEIAEoCSKHBgoFVmFsdWUSEwoJaW50X3ZhbHVlGAEgASgDSAASFAoKcmVhbF92YWx1ZRgCIAEoAUgAEhQKCmJvb2xfdmFsdWUYAyABKAhIABIWCgxzdHJpbmdfdmFsdWUYBCABKAlIABIVCgtpbnN0YW5jZV9pZBgFIAEoA0gAEigKCHNlcXVlbmNlGAYgASgLMhQuc3lzbWwuVmFsdWVTZXF1ZW5jZUgAEg4KBG51bGwYByABKAlIABIjCghxdWFudGl0eRgIIAEoCzIPLnN5c21sLlF1YW50aXR5SAASKgoMZW51bV9saXRlcmFsGAkgASgLMhIuc3lzbWwuRW51bUxpdGVyYWxIABIPCgV1bnNldBgKIAEoCEgAEiEKB2NvbXBsZXgYCyABKAsyDi5zeXNtbC5Db21wbGV4SAASHQoFYXJyYXkYDCABKAsyDC5zeXNtbC5BcnJheUgAEh8KBnZlY3RvchgNIAEoCzINLnN5c21sLlZlY3RvckgAEjAKD3ZlY3Rvcl9xdWFudGl0eRgOIAEoCzIVLnN5c21sLlZlY3RvclF1YW50aXR5SAASMAoPbWVhc3VyZW1lbnRfcmVmGA8gASgLMhUuc3lzbWwuTWVhc3VyZW1lbnRSZWZIABISCghpbmZpbml0eRgQIAEoCEgAEiMKCGZ1bmN0aW9uGBEgASgLMg8uc3lzbWwuRnVuY3Rpb25IABIeCgNzZXQYEiABKAsyDy5zeXNtbC5WYWx1ZVNldEgAEjAKD3RlbnNvcl9xdWFudGl0eRgTIAEoCzIVLnN5c21sLlRlbnNvclF1YW50aXR5SAASJwoKbWV0YW9iamVjdBgUIAEoCzIRLnN5c21sLk1ldGFvYmplY3RIABIrCgx1bmRldGVybWluZWQYFSABKAsyEy5zeXNtbC5VbmRldGVybWluZWRIABIXCg1iaWdfaW50X3ZhbHVlGBYgASgJSAASKQoOcmF0aW9uYWxfdmFsdWUYFyABKAsyDy5zeXNtbC5SYXRpb25hbEgAQgYKBGtpbmQiMgoIUmF0aW9uYWwSEQoJbnVtZXJhdG9yGAEgASgJEhMKC2Rlbm9taW5hdG9yGAIgASgJIjYKCk1ldGFvYmplY3QSEgoKZWxlbWVudF9pZBgBIAEoCRIUCgxtZXRhY2xhc3NfaWQYAiABKAkiRgoMVW5kZXRlcm1pbmVkEg4KBnJlYXNvbhgBIAEoCRImCgVjb3VudBgCIAEoCzIXLnN5c21sLk11bHRpcGxpY2l0eUluZm8iLAoIRnVuY3Rpb24SDwoHY2FsY19pZBgBIAEoCRIPCgdzZWxmX2lkGAIgASgDIioKCFZhbHVlU2V0Eh4KCGVsZW1lbnRzGAEgAygLMgwuc3lzbWwuVmFsdWUiSQoOVGVuc29yUXVhbnRpdHkSEgoKZGltZW5zaW9ucxgBIAMoAxIjCgpjb21wb25lbnRzGAIgAygLMg8uc3lzbWwuUXVhbnRpdHkiOwoFQXJyYXkSEgoKZGltZW5zaW9ucxgBIAMoAxIeCghlbGVtZW50cxgCIAMoCzIMLnN5c21sLlZhbHVlIioKBlZlY3RvchIgCgpjb21wb25lbnRzGAEgAygLMgwuc3lzbWwuVmFsdWUiNQoOVmVjdG9yUXVhbnRpdHkSIwoKY29tcG9uZW50cxgBIAMoCzIPLnN5c21sLlF1YW50aXR5IioKB0NvbXBsZXgSDAoEcmVhbBgBIAEoARIRCglpbWFnaW5hcnkYAiABKAEiZAoLRW51bUxpdGVyYWwSEgoKbGl0ZXJhbF9pZBgBIAEoCRIWCg5lbnVtZXJhdGlvbl9pZBgCIAEoCRIMCgRuYW1lGAMgASgJEhsKBXZhbHVlGAQgASgLMgwuc3lzbWwuVmFsdWUiLwoNVmFsdWVTZXF1ZW5jZRIeCghlbGVtZW50cxgBIAMoCzIMLnN5c21sLlZhbHVlIsgBCghRdWFudGl0eRIXCg1pbnRfbWFnbml0dWRlGAEgASgDSAASGAoOcmVhbF9tYWduaXR1ZGUYAiABKAFIABIbChFiaWdfaW50X21hZ25pdHVkZRgFIAEoCUgAEi0KEnJhdGlvbmFsX21hZ25pdHVkZRgGIAEoCzIPLnN5c21sLlJhdGlvbmFsSAASDAoEdW5pdBgDIAEoCRIiCgl1bml0X3Rlcm0YBCABKAsyDy5zeXNtbC5Vbml0VGVybUILCgltYWduaXR1ZGUiUwoOTWVhc3VyZW1lbnRSZWYSDAoEdW5pdBgBIAEoCRIiCgl1bml0X3Rlcm0YAiABKAsyDy5zeXNtbC5Vbml0VGVybRIPCgd1bml0X2lkGAMgASgJIlQKCFVuaXRUZXJtEhEKCXNjYWxlX251bRgBIAEoARIRCglzY2FsZV9kZW4YAiABKAESIgoHZmFjdG9ycxgDIAMoCzIRLnN5c21sLlVuaXRGYWN0b3IiLwoKVW5pdEZhY3RvchIPCgd1bml0X2lkGAEgASgJEhAKCGV4cG9uZW50GAIgASgBIlgKCkRpYWdub3N0aWMSEAoIc2V2ZXJpdHkYASABKAkSDwoHbWVzc2FnZRgCIAEoCRIZCgRzcGFuGAMgASgLMgsuc3lzbWwuU3BhbhIMCgRjb2RlGAQgASgJIl4KBFNwYW4SDAoEZmlsZRgBIAEoCRISCgpzdGFydF9saW5lGAIgASgFEhEKCXN0YXJ0X2NvbBgDIAEoBRIQCghlbmRfbGluZRgEIAEoBRIPCgdlbmRfY29sGAUgASgFIhMKEVNlcnZlckluZm9SZXF1ZXN0IjsKElNlcnZlckluZm9SZXNwb25zZRIPCgd2ZXJzaW9uGAEgASgJEhQKDGNhcGFiaWxpdGllcxgCIAMoCSJTCgxRdWVyeVJlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIbCgVxdWVyeRgCIAEoCzIMLnN5c21sLlF1ZXJ5EhIKCm9zbGNfcXVlcnkYAyABKAkiPAoNUXVlcnlSZXNwb25zZRIrCghlbGVtZW50cxgBIAMoCzIZLnN5c21sLlF1ZXJ5UmVzdWx0RWxlbWVudCJICgVRdWVyeRINCgVzY29wZRgBIAMoCRIOCgZzZWxlY3QYAiADKAkSIAoFd2hlcmUYAyABKAsyES5zeXNtbC5Db25zdHJhaW50InwKCkNvbnN0cmFpbnQSLwoJcHJpbWl0aXZlGAEgASgLMhouc3lzbWwuUHJpbWl0aXZlQ29uc3RyYWludEgAEi8KCWNvbXBvc2l0ZRgCIAEoCzIaLnN5c21sLkNvbXBvc2l0ZUNvbnN0cmFpbnRIAEIMCgpjb25zdHJhaW50InMKE1ByaW1pdGl2ZUNvbnN0cmFpbnQSDwoHaW52ZXJzZRgBIAEoCBIQCghwcm9wZXJ0eRgCIAEoCRIqCghvcGVyYXRvchgDIAEoDjIYLnN5c21sLlByaW1pdGl2ZU9wZXJhdG9yEg0KBXZhbHVlGAQgAygJImgKE0NvbXBvc2l0ZUNvbnN0cmFpbnQSKgoIb3BlcmF0b3IYASABKA4yGC5zeXNtbC5Db21wb3NpdGVPcGVyYXRvchIlCgpjb25zdHJhaW50GAIgAygLMhEuc3lzbWwuQ29uc3RyYWludCKgAQoSUXVlcnlSZXN1bHRFbGVtZW50EgoKAmlkGAEgASgJEgwKBHR5cGUYAiABKAkSPQoKcHJvcGVydGllcxgDIAMoCzIpLnN5c21sLlF1ZXJ5UmVzdWx0RWxlbWVudC5Qcm9wZXJ0aWVzRW50cnkaMQoPUHJvcGVydGllc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEicwoKU3dlZXBSYW5nZRIRCglwYXJhbWV0ZXIYASABKAkSGwoFc3RhcnQYAiABKAsyDC5zeXNtbC5WYWx1ZRIZCgNlbmQYAyABKAsyDC5zeXNtbC5WYWx1ZRIaCgRzdGVwGAQgASgLMgwuc3lzbWwuVmFsdWUi0AIKD1J1blN3ZWVwUmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhEKCXN5bWJvbF9pZBgCIAEoCRIZChFzdWJqZWN0X3N5bWJvbF9pZBgDIAEoCRIfCglhcmd1bWVudHMYBCADKAsyDC5zeXNtbC5WYWx1ZRJDCg9uYW1lZF9hcmd1bWVudHMYBSADKAsyKi5zeXNtbC5SdW5Td2VlcFJlcXVlc3QuTmFtZWRBcmd1bWVudHNFbnRyeRIhCgZyYW5nZXMYBiADKAsyES5zeXNtbC5Td2VlcFJhbmdlEg8KB3NhbXBsZXMYByABKAMSDAoEc2VlZBgIIAEoBBIOCgZlbmdpbmUYCSABKAkaQwoTTmFtZWRBcmd1bWVudHNFbnRyeRILCgNrZXkYASABKAkSGwoFdmFsdWUYAiABKAsyDC5zeXNtbC5WYWx1ZToCOAEi9AEKCFN3ZWVwUm93EiEKBmlucHV0cxgBIAMoCzIRLnN5c21sLkNhbGNPdXRwdXQSIgoHb3V0cHV0cxgCIAMoCzIRLnN5c21sLkNhbGNPdXRwdXQSIAoIdmVyZGljdHMYAyADKAsyDi5zeXNtbC5WZXJkaWN0EhYKDmVsYXBzZWRfbWljcm9zGAQgASgDEg0KBWVycm9yGAUgASgJEiwKDmZhaWx1cmVfcmVhc29uGAYgASgOMhQuc3lzbWwuRmFpbHVyZVJlYXNvbhIqCgtldmFsdWF0aW9ucxgHIAMoCzIVLnN5c21sLkNhc2VFdmFsdWF0aW9uIq0CChBSdW5Td2VlcFJlc3BvbnNlEh0KBHJvd3MYASADKAsyDy5zeXNtbC5Td2VlcFJvdxISCgpwYXJhbWV0ZXJzGAIgAygJEg8KB3NhbXBsZWQYAyABKAgSDAoEc2VlZBgEIAEoBBINCgVlcnJvchgFIAEoCRImCgtkaWFnbm9zdGljcxgGIAMoCzIRLnN5c21sLkRpYWdub3N0aWMSLAoOZmFpbHVyZV9yZWFzb24YByABKA4yFC5zeXNtbC5GYWlsdXJlUmVhc29uEiIKCWluc3RhbmNlcxgIIAMoCzIPLnN5c21sLkluc3RhbmNlEg4KBmVuZ2luZRgJIAEoCRIQCghzdHJlbmd0aBgKIAEoCRIcCgZib3VuZHMYCyADKAsyDC5zeXNtbC5Cb3VuZCJuChdSdW5Eb2N1bWVudFF1ZXJ5UmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEhAKCHF1ZXJ5X2lkGAIgASgJEi0KCGJpbmRpbmdzGAMgAygLMhsuc3lzbWwuRG9jdW1lbnRRdWVyeUJpbmRpbmciTwoURG9jdW1lbnRRdWVyeUJpbmRpbmcSEQoJcGFyYW1ldGVyGAEgASgJEiQKBnZhbHVlcxgCIAMoCzIULnN5c21sLkRvY3VtZW50VmFsdWUiuwMKDURvY3VtZW50VmFsdWUSFAoKZWxlbWVudF9pZBgBIAEoCUgAEhYKDHN0cmluZ192YWx1ZRgCIAEoCUgAEhMKCWludF92YWx1ZRgDIAEoA0gAEhQKCnJlYWxfdmFsdWUYBCABKAFIABIUCgpib29sX3ZhbHVlGAUgASgISAASEgoIaW5maW5pdHkYBiABKAhIABIjCghxdWFudGl0eRgIIAEoCzIPLnN5c21sLlF1YW50aXR5SAASKQoHdmVyZGljdBgJIAEoCzIWLnN5c21sLkRvY3VtZW50VmVyZGljdEgAEicKBm9iamVjdBgKIAEoCzIVLnN5c21sLkRvY3VtZW50T2JqZWN0SAASJQoFc3RhdGUYCyABKAsyFC5zeXNtbC5Eb2N1bWVudFN0YXRlSAASJQoFZXZlbnQYDCABKAsyFC5zeXNtbC5Eb2N1bWVudEV2ZW50SAASFwoNYmlnX2ludF92YWx1ZRgNIAEoCUgAEikKDnJhdGlvbmFsX3ZhbHVlGA4gASgLMg8uc3lzbWwuUmF0aW9uYWxIABIUCgxlbGVtZW50X3R5cGUYByABKAlCBgoEa2luZCJaCg5Eb2N1bWVudE9iamVjdBITCgtpbnN0YW5jZV9pZBgBIAEoAxIMCgRwYXRoGAIgASgJEiUKB2VsZW1lbnQYAyABKAsyFC5zeXNtbC5Eb2N1bWVudFZhbHVlIq4BCg9Eb2N1bWVudFZlcmRpY3QSJwoJYXNzZXJ0aW9uGAEgASgLMhQuc3lzbWwuRG9jdW1lbnRWYWx1ZRIMCgRraW5kGAIgASgJEgwKBHRleHQYAyABKAkSDAoEcGF0aBgEIAEoCRIPCgd2ZXJkaWN0GAUgASgJEhEKCWNvbmRpdGlvbhgGIAEoCRIOCgZyZWFzb24YByABKAkSFAoMdmVyaWZpY2F0aW9uGAggAygJIrEBCg1Eb2N1bWVudFN0YXRlEiUKBm9iamVjdBgBIAEoCzIVLnN5c21sLkRvY3VtZW50T2JqZWN0Eg8KB21hY2hpbmUYAiABKAkSDAoEbmFtZRgDIAEoCRISCgpzdGF0ZV9wYXRoGAQgASgJEiMKBXN0YXRlGAUgASgLMhQuc3lzbWwuRG9jdW1lbnRWYWx1ZRIOCgZyZWdpb24YBiABKAkSEQoJZW5jbG9zaW5nGAcgAygJIpwCCg1Eb2N1bWVudEV2ZW50EgwKBGtpbmQYASABKAkSIgoEdGltZRgCIAEoCzIULnN5c21sLkRvY3VtZW50VmFsdWUSJQoGb2JqZWN0GAMgASgLMhUuc3lzbWwuRG9jdW1lbnRPYmplY3QSDwoHbWFjaGluZRgEIAEoCRINCgVzdGF0ZRgFIAEoCRIMCgRmcm9tGAYgASgJEgoKAnRvGAcgASgJEiUKBnRhcmdldBgIIAEoCzIVLnN5c21sLkRvY3VtZW50T2JqZWN0Eg0KBWV2ZW50GAkgASgJEg8KB3BheWxvYWQYCiADKAkSFAoMYWx0ZXJuYXRpdmVzGAsgAygJEg0KBXRha2VuGAwgASgJEgwKBHRleHQYDSABKAkiIwoTRG9jdW1lbnRRdWVyeUNvbHVtbhIMCgRuYW1lGAEgASgJIjkKEURvY3VtZW50UXVlcnlDZWxsEiQKBnZhbHVlcxgBIAMoCzIULnN5c21sLkRvY3VtZW50VmFsdWUiYgoQRG9jdW1lbnRRdWVyeVJvdxIlCgdlbGVtZW50GAEgASgLMhQuc3lzbWwuRG9jdW1lbnRWYWx1ZRInCgVjZWxscxgCIAMoCzIYLnN5c21sLkRvY3VtZW50UXVlcnlDZWxsIm4KGFJ1bkRvY3VtZW50UXVlcnlSZXNwb25zZRIrCgdjb2x1bW5zGAEgAygLMhouc3lzbWwuRG9jdW1lbnRRdWVyeUNvbHVtbhIlCgRyb3dzGAIgAygLMhcuc3lzbWwuRG9jdW1lbnRRdWVyeVJvdyJOChVSZW5kZXJEb2N1bWVudFJlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRIMCgRmb3JtGAMgASgJIjgKFlJlbmRlckRvY3VtZW50UmVzcG9uc2USEAoIbWFya2Rvd24YASABKAkSDAoEaHRtbBgCIAEoCSJEChFSZW5kZXJWaWV3UmVxdWVzdBISCgptb2RlbF9oYXNoGAEgASgJEgwKBHZpZXcYAiABKAkSDQoFcG9ydHMYAyABKAkijQIKElJlbmRlclZpZXdSZXNwb25zZRIMCgR2aWV3GAEgASgJEgwKBGtpbmQYAiABKAkSDgoGc3RhdGVkGAMgASgJEiAKBW5vZGVzGAQgAygLMhEuc3lzbWwuUmVuZGVyTm9kZRIgCgVlZGdlcxgFIAMoCzIRLnN5c21sLlJlbmRlckVkZ2USDwoHY29sdW1ucxgGIAMoCRIeCgRyb3dzGAcgAygLMhAuc3lzbWwuUmVuZGVyUm93EiMKBmNhbnZhcxgIIAEoCzITLnN5c21sLlJlbmRlckNhbnZhcxIgCgVub3RlcxgJIAMoCzIRLnN5c21sLlJlbmRlck5vdGUSDwoHbm90aWNlcxgKIAMoCSKnAgoKUmVuZGVyTm9kZRIKCgJpZBgBIAEoCRIMCgRraW5kGAIgASgJEgwKBG5hbWUYAyABKAkSGAoQbmFtZV9zeW50aGVzaXplZBgEIAEoCBIMCgR0eXBlGAUgASgJEg4KBmRldGFpbBgGIAEoCRIMCgR0ZXh0GAcgASgJEhAKCHN0YW5kX2luGAggASgIEg4KBnBhcmVudBgJIAEoCRIgCgVwb3J0cxgKIAMoCzIRLnN5c21sLlJlbmRlclBvcnQSGwoGb3JpZ2luGAsgASgLMgsuc3lzbWwuU3BhbhInCghnZW9tZXRyeRgMIAEoCzIVLnN5c21sLlJlbmRlckdlb21ldHJ5EiEKBXN0eWxlGA0gASgLMhIuc3lzbWwuUmVuZGVyU3R5bGUiRwoKUmVuZGVyUG9ydBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEgwKBHR5cGUYAyABKAkSEQoJZGlyZWN0aW9uGAQgASgJItgBCgpSZW5kZXJFZGdlEgwKBGZyb20YASABKAkSCgoCdG8YAiABKAkSEQoJZnJvbV9wb3J0GAMgASgJEg8KB3RvX3BvcnQYBCABKAkSDQoFbGFiZWwYBSABKAkSDAoEbmFtZRgGIAEoCRIMCgRraW5kGAcgASgJEhsKBm9yaWdpbhgIIAEoCzILLnN5c21sLlNwYW4SIQoFcm91dGUYCSADKAsyEi5zeXNtbC5SZW5kZXJQb2ludBIhCgVzdHlsZRgKIAEoCzISLnN5c21sLlJlbmRlclN0eWxlImoKDlJlbmRlckdlb21ldHJ5EgkKAXgYASABKAESCQoBeRgCIAEoARINCgV3aWR0aBgDIAEoARIOCgZoZWlnaHQYBCABKAESEAoIaGFzX3NpemUYBSABKAgSEQoJY29sbGFwc2VkGAYgASgIIk0KDFJlbmRlckNhbnZhcxIMCgR1bml0GAEgASgJEg0KBXdpZHRoGAIgASgBEg4KBmhlaWdodBgDIAEoARIQCghoYXNfc2l6ZRgEIAEoCCJ2CgtSZW5kZXJTdHlsZRIMCgRmaWxsGAEgASgJEgwKBGxpbmUYAiABKAkSDAoEdGV4dBgDIAEoCRIMCgRmb250GAQgASgJEhEKCWZvbnRfc2l6ZRgFIAEoARIMCgRib2xkGAYgASgIEg4KBml0YWxpYxgHIAEoCCIjCgtSZW5kZXJQb2ludBIJCgF4GAEgASgBEgkKAXkYAiABKAEiNwoJUmVuZGVyUm93Eg0KBWNlbGxzGAEgAygJEhsKBm9yaWdpbhgCIAEoCzILLnN5c21sLlNwYW4isgEKClJlbmRlck5vdGUSDAoEdGV4dBgBIAEoCRIOCgZhbmNob3IYAiABKAkSEQoJZWRnZV9mcm9tGAMgASgJEg8KB2VkZ2VfdG8YBCABKAkSCQoBeBgFIAEoARIJCgF5GAYgASgBEg0KBXdpZHRoGAcgASgBEg4KBmhlaWdodBgIIAEoARIQCghoYXNfc2l6ZRgJIAEoCBIbCgZvcmlnaW4YCiABKAsyCy5zeXNtbC5TcGFuIjoKE0V4cG9ydEdyYXBoc1JlcXVlc3QSEgoKbW9kZWxfaGFzaBgBIAEoCRIPCgdzdWJqZWN0GAIgASgJIkkKFEV4cG9ydEdyYXBoc1Jlc3BvbnNlEg8KB2NvbnRlbnQYASABKAkSDwoHdmVyc2lvbhgCIAEoBRIPCgdzdWJqZWN0GAMgASgJKrEBCg1GYWlsdXJlUmVhc29uEh4KGkZBSUxVUkVfUkVBU09OX1VOU1BFQ0lGSUVEEAASHQoZRkFJTFVSRV9SRUFTT05fRVZBTFVBVElPThABEh0KGUZBSUxVUkVfUkVBU09OX1dST05HX0tJTkQQAhIkCiBGQUlMVVJFX1JFQVNPTl9BTUJJR1VPVVNfU1VCSkVDVBADEhwKGEZBSUxVUkVfUkVBU09OX1VOREVDSURFRBAEKowFCgtFZGl0RmFpbHVyZRIcChhFRElUX0ZBSUxVUkVfVU5TUEVDSUZJRUQQABIeChpFRElUX0ZBSUxVUkVfTk9fT1BFUkFUSU9OUxABEh8KG0VESVRfRkFJTFVSRV9VTktOT1dOX1RBUkdFVBACEiEKHUVESVRfRkFJTFVSRV9BTUJJR1VPVVNfVEFSR0VUEAMSGwoXRURJVF9GQUlMVVJFX05PVF9WQUxVRUQQBBIeChpFRElUX0ZBSUxVUkVfSU5WQUxJRF9WQUxVRRAFEh0KGUVESVRfRkFJTFVSRV9JTlZBTElEX05BTUUQBhIaChZFRElUX0ZBSUxVUkVfTk9UX05BTUVEEAcSIgoeRURJVF9GQUlMVVJFX1JFTkFNRV9SRUZFUkVOQ0VEEAgSIgoeRURJVF9GQUlMVVJFX09WRVJMQVBQSU5HX0VESVRTEAkSHwobRURJVF9GQUlMVVJFX1JFU1VMVF9JTlZBTElEEAoSHgoaRURJVF9GQUlMVVJFX09XTkVSX1VOS05PV04QCxIkCiBFRElUX0ZBSUxVUkVfT1dORVJfTk9UX05BTUVTUEFDRRAMEh0KGUVESVRfRkFJTFVSRV9JTExFR0FMX0tJTkQQDRIiCh5FRElUX0ZBSUxVUkVfTUVNQkVSX05BTUVfVEFLRU4QDhIiCh5FRElUX0ZBSUxVUkVfREVMRVRFX1JFRkVSRU5DRUQQDxIkCiBFRElUX0ZBSUxVUkVfT1dORVJfSU5TSURFX1RBUkdFVBAQEiAKHEVESVRfRkFJTFVSRV9NT1ZFX1JFRkVSRU5DRUQQERIlCiFFRElUX0ZBSUxVUkVfUkVGRVJFTkNFRF9FTFNFV0hFUkUQEiqSAQoRUHJpbWl0aXZlT3BlcmF0b3ISIgoeUFJJTUlUSVZFX09QRVJBVE9SX1VOU1BFQ0lGSUVEEAASHAoYUFJJTUlUSVZFX09QRVJBVE9SX0VRVUFMEAESHgoaUFJJTUlUSVZFX09QRVJBVE9SX0dSRUFURVIQAhIbChdQUklNSVRJVkVfT1BFUkFUT1JfTEVTUxADKm4KEUNvbXBvc2l0ZU9wZXJhdG9yEiIKHkNPTVBPU0lURV9PUEVSQVRPUl9VTlNQRUNJRklFRBAAEhoKFkNPTVBPU0lURV9PUEVSQVRPUl9BTkQQARIZChVDT01QT1NJVEVfT1BFUkFUT1JfT1IQAjKFDgoMU3lzTUxTZXJ2aWNlEkQKDUdldFNlcnZlckluZm8SGC5zeXNtbC5TZXJ2ZXJJbmZvUmVxdWVzdBoZLnN5c21sLlNlcnZlckluZm9SZXNwb25zZRI+CglQYXJzZUZpbGUSFy5zeXNtbC5QYXJzZUZpbGVSZXF1ZXN0Ghguc3lzbWwuUGFyc2VGaWxlUmVzcG9uc2USRwoMUGFyc2VTb3VyY2VzEhouc3lzbWwuUGFyc2VTb3VyY2VzUmVxdWVzdBobLnN5c21sLlBhcnNlU291cmNlc1Jlc3BvbnNlEjsKCUdldFN5bWJvbBIXLnN5c21sLkdldFN5bWJvbFJlcXVlc3QaFS5zeXNtbC5TeW1ib2xSZXNwb25zZRJHCg5HZXREaWFnbm9zdGljcxIZLnN5c21sLkRpYWdub3N0aWNzUmVxdWVzdBoaLnN5c21sLkRpYWdub3N0aWNzUmVzcG9uc2USOwoIRXZhbHVhdGUSFi5zeXNtbC5FdmFsdWF0ZVJlcXVlc3QaFy5zeXNtbC5FdmFsdWF0ZVJlc3BvbnNlEkQKC0luc3RhbnRpYXRlEhkuc3lzbWwuSW5zdGFudGlhdGVSZXF1ZXN0Ghouc3lzbWwuSW5zdGFudGlhdGVSZXNwb25zZRJKCg1FeGVjdXRlQWN0aW9uEhsuc3lzbWwuRXhlY3V0ZUFjdGlvblJlcXVlc3QaHC5zeXNtbC5FeGVjdXRlQWN0aW9uUmVzcG9uc2USRwoMRXhlY3V0ZVN0YXRlEhouc3lzbWwuRXhlY3V0ZVN0YXRlUmVxdWVzdBobLnN5c21sLkV4ZWN1dGVTdGF0ZVJlc3BvbnNlEjgKB0NvbnZlcnQSFS5zeXNtbC5Db252ZXJ0UmVxdWVzdBoWLnN5c21sLkNvbnZlcnRSZXNwb25zZRI4CgdNaWdyYXRlEhUuc3lzbWwuTWlncmF0ZVJlcXVlc3QaFi5zeXNtbC5NaWdyYXRlUmVzcG9uc2USQQoKQXBwbHlFZGl0cxIYLnN5c21sLkFwcGx5RWRpdHNSZXF1ZXN0Ghkuc3lzbWwuQXBwbHlFZGl0c1Jlc3BvbnNlElMKEFZlcmlmeUNvbnN0cmFpbnQSHi5zeXNtbC5WZXJpZnlDb25zdHJhaW50UmVxdWVzdBofLnN5c21sLlZlcmlmeUNvbnN0cmFpbnRSZXNwb25zZRJWChFWZXJpZnlSZXF1aXJlbWVudBIfLnN5c21sLlZlcmlmeVJlcXVpcmVtZW50UmVxdWVzdBogLnN5c21sLlZlcmlmeVJlcXVpcmVtZW50UmVzcG9uc2USWQoSVmVyaWZ5U2F0aXNmYWN0aW9uEiAuc3lzbWwuVmVyaWZ5U2F0aXNmYWN0aW9uUmVxdWVzdBohLnN5c21sLlZlcmlmeVNhdGlzZmFjdGlvblJlc3BvbnNlElMKEFZhbGlkYXRlSW5zdGFuY2USHi5zeXNtbC5WYWxpZGF0ZUluc3RhbmNlUmVxdWVzdBofLnN5c21sLlZhbGlkYXRlSW5zdGFuY2VSZXNwb25zZRJHCgxFdmFsdWF0ZUNhbGMSGi5zeXNtbC5FdmFsdWF0ZUNhbGNSZXF1ZXN0Ghsuc3lzbWwuRXZhbHVhdGVDYWxjUmVzcG9uc2USRAoLUnVuQW5hbHlzaXMSGS5zeXNtbC5SdW5BbmFseXNpc1JlcXVlc3QaGi5zeXNtbC5SdW5BbmFseXNpc1Jlc3BvbnNlEjsKCFJ1blN3ZWVwEhYuc3lzbWwuUnVuU3dlZXBSZXF1ZXN0Ghcuc3lzbWwuUnVuU3dlZXBSZXNwb25zZRJECgtMaXN0RW5naW5lcxIZLnN5c21sLkxpc3RFbmdpbmVzUmVxdWVzdBoaLnN5c21sLkxpc3RFbmdpbmVzUmVzcG9uc2USMgoFUXVlcnkSEy5zeXNtbC5RdWVyeVJlcXVlc3QaFC5zeXNtbC5RdWVyeVJlc3BvbnNlElMKEFJ1bkRvY3VtZW50UXVlcnkSHi5zeXNtbC5SdW5Eb2N1bWVudFF1ZXJ5UmVxdWVzdBofLnN5c21sLlJ1bkRvY3VtZW50UXVlcnlSZXNwb25zZRJNCg5SZW5kZXJEb2N1bWVudBIcLnN5c21sLlJlbmRlckRvY3VtZW50UmVxdWVzdBodLnN5c21sLlJlbmRlckRvY3VtZW50UmVzcG9uc2USQQoKUmVuZGVyVmlldxIYLnN5c21sLlJlbmRlclZpZXdSZXF1ZXN0Ghkuc3lzbWwuUmVuZGVyVmlld1Jlc3BvbnNlEkcKDEV4cG9ydEdyYXBocxIaLnN5c21sLkV4cG9ydEdyYXBoc1JlcXVlc3QaGy5zeXNtbC5FeHBvcnRHcmFwaHNSZXNwb25zZUIqWihnaXRodWIuY29tL09wZW4tTUJFRS9PcGVuU3lzTUwvYXBpL3Byb3RvYgZwcm90bzM"); /** * Verdict is one verification's answer: whether the condition held, and, when @@ -310,6 +310,23 @@ export type VerifyConstraintRequest = Message<"sysml.VerifyConstraintRequest"> & * @generated from field: string question = 5; */ question: string; + + /** + * Values for the constraint's `in` parameters, in declaration order, as + * RunAnalysisRequest.arguments binds a case's; an argument the constraint + * does not take is INVALID_ARGUMENT, as is a parameter left without an + * argument or default. Reported as the "verification_arguments" capability. + * + * @generated from field: repeated sysml.Value arguments = 6; + */ + arguments: Value[]; + + /** + * Values for `in` parameters by name; see arguments. + * + * @generated from field: map named_arguments = 7; + */ + namedArguments: { [key: string]: Value }; }; /** @@ -400,6 +417,20 @@ export type VerifyRequirementRequest = Message<"sysml.VerifyRequirementRequest"> * @generated from field: string question = 5; */ question: string; + + /** + * Values for the requirement's `in` parameters, positional and by name; see + * VerifyConstraintRequest.arguments. Reported as the "verification_arguments" + * capability. + * + * @generated from field: repeated sysml.Value arguments = 6; + */ + arguments: Value[]; + + /** + * @generated from field: map named_arguments = 7; + */ + namedArguments: { [key: string]: Value }; }; /** diff --git a/client/node/test/verify.test.ts b/client/node/test/verify.test.ts index a61ee1f4c3..5b4e9f4dfe 100644 --- a/client/node/test/verify.test.ts +++ b/client/node/test/verify.test.ts @@ -209,3 +209,55 @@ test("verifyRequirement reports the verdicts of the case verifying it", async () assert.ok(verdict.verdict.verifications.length > 0); assert.ok(verdict.verdict.verifications.some((v) => /checkZero/.test(v.caseId))); }); + +const BOUND = `package Demo { + private import ScalarValues::*; + part def Thing { attribute v : Integer = 2; } + part t : Thing; + requirement def Under { + subject s : Thing; + in limit : Integer; + in slack : Integer = 0; + require constraint { s.v + slack < limit } + } + constraint def Between { + in low : Integer; + in high : Integer = 10; + low < high + } +}`; + +test("arguments bind a requirement's and a constraint's in parameters", async () => { + await using connection = await connect(); + const model = await connection.loads(BOUND); + const holds = await model.verifyRequirement("Demo::Under", { + subject: "Demo::t", + namedArguments: { limit: 5n }, + }); + assert.equal(holds.verdict.kind, "holds", holds.verdict.kind === "undecided" ? holds.verdict.error : ""); + const fails = await model.verifyRequirement("Demo::Under", { + subject: "Demo::t", + arguments: [5n, 4n], + }); + assert.equal(fails.verdict.kind, "fails", fails.verdict.kind); + const between = await model.verifyConstraint("Demo::Between", { arguments: [3n] }); + assert.equal(between.verdict.kind, "holds", between.verdict.kind); + const unknown = await model.verifyRequirement("Demo::Under", { + subject: "Demo::t", + namedArguments: { limit: 5n, bound: 1n }, + }); + assert.equal(unknown.verdict.kind, "undecided"); + assert.match(unknown.verdict.error, /bound/); +}); + +test("arguments are refused before the call without verification_arguments", async () => { + const conn = await fakeConnection(["verification"]); + await assert.rejects( + () => conn.verifyRequirement("hash", "r", { namedArguments: { limit: 5n } }), + MissingCapabilityError, + ); + await assert.rejects( + () => conn.verifyConstraint("hash", "c", { arguments: [3] }), + MissingCapabilityError, + ); +}); diff --git a/client/opensysml/types.go b/client/opensysml/types.go index 765821ac80..523ee57a1c 100644 --- a/client/opensysml/types.go +++ b/client/opensysml/types.go @@ -16,6 +16,7 @@ const ( CapabilityMigrate = sysmlgrpc.CapabilityMigrate CapabilityVerification = sysmlgrpc.CapabilityVerification CapabilityVerificationQuestions = sysmlgrpc.CapabilityVerificationQuestions + CapabilityVerificationArguments = sysmlgrpc.CapabilityVerificationArguments CapabilityQuery = sysmlgrpc.CapabilityQuery CapabilityOSLCQuery = sysmlgrpc.CapabilityOSLCQuery CapabilityDocumentQuery = sysmlgrpc.CapabilityDocumentQuery diff --git a/client/opensysml/verify.go b/client/opensysml/verify.go index 4110311558..47e1cda1ce 100644 --- a/client/opensysml/verify.go +++ b/client/opensysml/verify.go @@ -3,6 +3,8 @@ package opensysml import ( "context" "fmt" + "maps" + "slices" pb "github.com/Open-MBEE/OpenSysML/api/proto" ) @@ -258,6 +260,25 @@ type verifyOptions struct { subjectSymbolID string engine string question string + positional []Value + named []namedArgument +} + +// VerifyArguments bind the constraint's or requirement's `in` parameters in +// declaration order, as Arguments binds a case's. Binding any requires the +// verification_arguments capability, checked before anything is sent; a proof +// question takes none. +func VerifyArguments(values ...Value) VerifyOption { + return func(o *verifyOptions) { o.positional = append(o.positional, values...) } +} + +// VerifyArgument binds the `in` parameter named, as Argument binds a case's. +func VerifyArgument(name string, value Value) VerifyOption { + return func(o *verifyOptions) { o.named = append(o.named, namedArgument{name, value}) } +} + +func (o *verifyOptions) hasArguments() bool { + return len(o.positional) > 0 || len(o.named) > 0 } // Against names a part or usage to instantiate and verify against, so the @@ -289,12 +310,18 @@ func (c *client) VerifyConstraint( if err != nil { return nil, err } + arguments, named, err := c.verifyArguments(ctx, &options) + if err != nil { + return nil, err + } resp, err := c.caller.verifyConstraint(ctx, &pb.VerifyConstraintRequest{ ModelHash: hash, SymbolId: symbolID, SubjectSymbolId: options.subjectSymbolID, Engine: engineField(options.engine), Question: questionField(options.question), + Arguments: arguments, + NamedArguments: named, }) if err != nil { return nil, err @@ -317,12 +344,18 @@ func (c *client) VerifyRequirement( if err != nil { return nil, err } + arguments, named, err := c.verifyArguments(ctx, &options) + if err != nil { + return nil, err + } resp, err := c.caller.verifyRequirement(ctx, &pb.VerifyRequirementRequest{ ModelHash: hash, SymbolId: symbolID, SubjectSymbolId: options.subjectSymbolID, Engine: engineField(options.engine), Question: questionField(options.question), + Arguments: arguments, + NamedArguments: named, }) if err != nil { return nil, err @@ -353,6 +386,12 @@ func (c *client) VerifySatisfaction( Message: "VerifySatisfaction takes no subject: the assertions name their own", } } + if options.hasArguments() { + return nil, &StatusError{ + Code: CodeInvalidArgument, + Message: "VerifySatisfaction takes no arguments: nothing it checks declares parameters", + } + } resp, err := c.caller.verifySatisfaction(ctx, &pb.VerifySatisfactionRequest{ ModelHash: hash, SymbolId: symbolID, @@ -400,6 +439,12 @@ func (c *client) ValidateInstance( Message: "ValidateInstance takes no subject: the symbol named is the object validated", } } + if options.hasArguments() { + return nil, &StatusError{ + Code: CodeInvalidArgument, + Message: "ValidateInstance takes no arguments: nothing it checks declares parameters", + } + } resp, err := c.caller.validateInstance(ctx, &pb.ValidateInstanceRequest{ ModelHash: hash, SymbolId: symbolID, @@ -539,9 +584,49 @@ func (c *client) verifyOptions(ctx context.Context, opts []VerifyOption) (verify if err := c.requireQuestion(ctx, options.question); err != nil { return verifyOptions{}, err } + if options.hasArguments() { + if err := c.requireArguments(ctx); err != nil { + return verifyOptions{}, err + } + values := append([]Value(nil), options.positional...) + for _, arg := range options.named { + values = append(values, arg.value) + } + if err := c.requireValueCapabilities(ctx, values...); err != nil { + return verifyOptions{}, err + } + } return options, nil } +// verifyArguments is the request's argument bindings as sent, rationals fitted +// to the service as a case's are. +func (c *client) verifyArguments(ctx context.Context, options *verifyOptions) ([]*pb.Value, map[string]*pb.Value, error) { + var positional []*pb.Value + for _, argument := range options.positional { + sent, err := valueToProto(argument) + if err != nil { + return nil, nil, err + } + positional = append(positional, sent) + } + var named map[string]*pb.Value + if len(options.named) > 0 { + named = make(map[string]*pb.Value, len(options.named)) + for _, argument := range options.named { + sent, err := valueToProto(argument.value) + if err != nil { + return nil, nil, err + } + named[argument.name] = sent + } + } + if err := c.fitRationals(ctx, append(slices.Clone(positional), slices.Collect(maps.Values(named))...)...); err != nil { + return nil, nil, err + } + return positional, named, nil +} + // questionField is the question as sent: empty for evaluate, which every // service reads as such. func questionField(question string) string { @@ -571,6 +656,23 @@ func (c *client) requireQuestion(ctx context.Context, question string) error { return nil } +// requireArguments refuses to send argument bindings to a service without the +// verification_arguments capability, which would check the unbound parameters +// rather than refuse. +func (c *client) requireArguments(ctx context.Context) error { + info, err := c.serverInfo(ctx) + if err != nil { + return err + } + if !info.Has(CapabilityVerificationArguments) { + return &StatusError{ + Code: CodeUnimplemented, + Message: fmt.Sprintf("capability %q is unavailable", CapabilityVerificationArguments), + } + } + return nil +} + // verification builds the answer a constraint or requirement verification gives. // A request that could not be answered at all is a failure, while a condition // that could not be evaluated is an undecided verdict. diff --git a/client/opensysml/verify_arguments_internal_test.go b/client/opensysml/verify_arguments_internal_test.go new file mode 100644 index 0000000000..c35daf3687 --- /dev/null +++ b/client/opensysml/verify_arguments_internal_test.go @@ -0,0 +1,91 @@ +package opensysml + +import ( + "context" + "testing" + + pb "github.com/Open-MBEE/OpenSysML/api/proto" +) + +// argumentCaller records the verification requests it is sent. +type argumentCaller struct { + oldCaller + constraint *pb.VerifyConstraintRequest + requirement *pb.VerifyRequirementRequest +} + +func (a *argumentCaller) verifyConstraint(_ context.Context, req *pb.VerifyConstraintRequest) (*pb.VerifyConstraintResponse, error) { + a.constraint = req + return &pb.VerifyConstraintResponse{Verdict: &pb.Verdict{Kind: "constraint", Holds: true}}, nil +} + +func (a *argumentCaller) verifyRequirement(_ context.Context, req *pb.VerifyRequirementRequest) (*pb.VerifyRequirementResponse, error) { + a.requirement = req + return &pb.VerifyRequirementResponse{Verdict: &pb.Verdict{Kind: "requirement", Holds: true}}, nil +} + +func TestVerifyArgumentsAreSentAsValues(t *testing.T) { + ctx := context.Background() + model := &Model{Hash: "h"} + caller := &argumentCaller{oldCaller: oldCaller{t: t, capabilities: []string{ + CapabilityVerification, CapabilityFeatureValues, CapabilityVerificationArguments, + }}} + c := &client{caller: caller} + + out, err := c.VerifyRequirement(ctx, model, "Demo::Under", Against("Demo::t"), + VerifyArguments(Int(5)), VerifyArgument("slack", Int(1))) + if err != nil { + t.Fatalf("VerifyRequirement: %v", err) + } + if !out.Verdict.Holds { + t.Error("holds = false, want true") + } + req := caller.requirement + if req.SubjectSymbolId != "Demo::t" || len(req.Arguments) != 1 || req.Arguments[0].GetIntValue() != 5 { + t.Errorf("requirement request = %v, want subject Demo::t and argument 5", req) + } + if req.NamedArguments["slack"].GetIntValue() != 1 { + t.Errorf("named arguments = %v, want slack = 1", req.NamedArguments) + } + + if _, err := c.VerifyConstraint(ctx, model, "Demo::Between", VerifyArgument("low", Int(3))); err != nil { + t.Fatalf("VerifyConstraint: %v", err) + } + if got := caller.constraint; len(got.Arguments) != 0 || got.NamedArguments["low"].GetIntValue() != 3 { + t.Errorf("constraint request = %v, want only low = 3", got) + } +} + +func TestVerifyArgumentsAreNotSentWithoutTheCapability(t *testing.T) { + ctx := context.Background() + model := &Model{Hash: "h"} + for name, old := range map[string]*oldCaller{ + "predates verification_arguments": {t: t, capabilities: []string{CapabilityVerification, CapabilityFeatureValues}}, + "predates GetServerInfo": {t: t, infoErr: &StatusError{Code: CodeUnimplemented, Message: "unknown method"}}, + } { + t.Run(name, func(t *testing.T) { + old.t = t + c := &client{caller: old} + _, err := c.VerifyConstraint(ctx, model, "C", VerifyArguments(Int(3))) + wantUnimplemented(t, "VerifyConstraint", err) + _, err = c.VerifyRequirement(ctx, model, "R", VerifyArgument("limit", Int(5))) + wantUnimplemented(t, "VerifyRequirement", err) + }) + } +} + +func TestSatisfactionAndObjectsTakeNoArguments(t *testing.T) { + ctx := context.Background() + model := &Model{Hash: "h"} + c := &client{caller: &oldCaller{t: t, capabilities: []string{ + CapabilityVerification, CapabilityFeatureValues, CapabilityVerificationArguments, + }}} + _, err := c.VerifySatisfaction(ctx, model, "", VerifyArguments(Int(1))) + if status, ok := err.(*StatusError); !ok || status.Code != CodeInvalidArgument { + t.Errorf("VerifySatisfaction with arguments: err = %v, want INVALID_ARGUMENT", err) + } + _, err = c.ValidateInstance(ctx, model, "p", VerifyArgument("x", Int(1))) + if status, ok := err.(*StatusError); !ok || status.Code != CodeInvalidArgument { + t.Errorf("ValidateInstance with arguments: err = %v, want INVALID_ARGUMENT", err) + } +} diff --git a/client/python/opensysml/capabilities.py b/client/python/opensysml/capabilities.py index 376d3f17a0..eddb8f4160 100644 --- a/client/python/opensysml/capabilities.py +++ b/client/python/opensysml/capabilities.py @@ -45,6 +45,7 @@ #: and ``witness``. Without it the service refuses such a question with #: ``UNIMPLEMENTED``. CAPABILITY_VERIFICATION_QUESTIONS = "verification_questions" +CAPABILITY_VERIFICATION_ARGUMENTS = "verification_arguments" #: The ``Query`` RPC, which evaluates a SysML v2 API & Services ``Query`` over a #: loaded model. Without it the service refuses queries with ``UNIMPLEMENTED``. diff --git a/client/python/opensysml/connection.py b/client/python/opensysml/connection.py index 6a2dded4cb..b5f856aa8c 100644 --- a/client/python/opensysml/connection.py +++ b/client/python/opensysml/connection.py @@ -63,6 +63,7 @@ CAPABILITY_TENSOR_VALUES, CAPABILITY_VERIFICATION, CAPABILITY_VERIFICATION_QUESTIONS, + CAPABILITY_VERIFICATION_ARGUMENTS, MissingCapabilityError, ServerInfo, mismatch_reason, @@ -2262,7 +2263,7 @@ def list_engines(self): return [EngineInfo.of(pb) for pb in response.engines] def verify_constraint(self, symbol_id, model_hash, subject_symbol_id=None, engine=None, - question=None): + question=None, arguments=None, named_arguments=None): """Ask whether a constraint holds, as the REPL's ``%constraint`` does. Args: @@ -2282,7 +2283,11 @@ def verify_constraint(self, symbol_id, model_hash, subject_symbol_id=None, engin says which answer was proved; ``witness`` carries the free features' values when the answer is violated or satisfiable, and ``error`` says why nothing was decided otherwise - + arguments (list, optional): Positional arguments, as Python values, + bound to the element's ``in`` parameters in declaration order + named_arguments (dict, optional): Arguments by parameter name; a + parameter with a default may be left unbound, one without must + be bound, and a name no parameter has is refused Returns: Verdict: The answer. A condition that evaluated to false is that answer, not an exception; a failure to evaluate is reported as @@ -2303,24 +2308,29 @@ def verify_constraint(self, symbol_id, model_hash, subject_symbol_id=None, engin self._require_verification() self._require_engine(engine) self._require_question(question) + self._require_arguments(arguments, named_arguments) request = sysml_pb2.VerifyConstraintRequest( model_hash=model_hash, symbol_id=symbol_id, subject_symbol_id=subject_symbol_id or "", engine=_engine_field(engine), question=_question_field(question), + arguments=[self._python_to_value(arg) for arg in (arguments or [])], ) + for name, arg in (named_arguments or {}).items(): + request.named_arguments[name].CopyFrom(self._python_to_value(arg)) with translate_rpc_errors( unimplemented=self._capability_refusal( (CAPABILITY_VERIFICATION,) + self._engine_capabilities(engine) + self._question_capabilities(question) + + self._argument_capabilities(arguments, named_arguments) ) ): response = self._stub.VerifyConstraint(request) return self._verdict_of(response) def verify_requirement(self, symbol_id, model_hash, subject_symbol_id=None, engine=None, - question=None): + question=None, arguments=None, named_arguments=None): """Ask whether a requirement is satisfied, as ``%requirement`` does. Args: @@ -2332,7 +2342,11 @@ def verify_requirement(self, symbol_id, model_hash, subject_symbol_id=None, engi :meth:`verify_constraint` question (str, optional): The question to ask, as for :meth:`verify_constraint` - + arguments (list, optional): Positional arguments, as Python values, + bound to the element's ``in`` parameters in declaration order + named_arguments (dict, optional): Arguments by parameter name; a + parameter with a default may be left unbound, one without must + be bound, and a name no parameter has is refused Returns: Verdict: The answer @@ -2350,17 +2364,22 @@ def verify_requirement(self, symbol_id, model_hash, subject_symbol_id=None, engi self._require_verification() self._require_engine(engine) self._require_question(question) + self._require_arguments(arguments, named_arguments) request = sysml_pb2.VerifyRequirementRequest( model_hash=model_hash, symbol_id=symbol_id, subject_symbol_id=subject_symbol_id or "", engine=_engine_field(engine), question=_question_field(question), + arguments=[self._python_to_value(arg) for arg in (arguments or [])], ) + for name, arg in (named_arguments or {}).items(): + request.named_arguments[name].CopyFrom(self._python_to_value(arg)) with translate_rpc_errors( unimplemented=self._capability_refusal( (CAPABILITY_VERIFICATION,) + self._engine_capabilities(engine) + self._question_capabilities(question) + + self._argument_capabilities(arguments, named_arguments) ) ): response = self._stub.VerifyRequirement(request) @@ -2908,6 +2927,18 @@ def _require_question(self, question): for capability in self._question_capabilities(question): require(self.server_info(), capability, upgrade_remedy(capability)) + def _require_arguments(self, arguments, named_arguments): + """Refuse to send argument bindings a service without ``verification_arguments`` would ignore.""" + for capability in self._argument_capabilities(arguments, named_arguments): + require(self.server_info(), capability, upgrade_remedy(capability)) + + @staticmethod + def _argument_capabilities(arguments, named_arguments): + """The capabilities verification arguments need of the service: none when there are none.""" + if arguments or named_arguments: + return (CAPABILITY_VERIFICATION_ARGUMENTS,) + return () + @staticmethod def _question_capabilities(question): """The capabilities a question needs of the service: none for evaluate.""" diff --git a/client/python/opensysml/model.py b/client/python/opensysml/model.py index a4d991f576..abff7f3a84 100644 --- a/client/python/opensysml/model.py +++ b/client/python/opensysml/model.py @@ -757,7 +757,8 @@ def explore_state(self, state_machine_symbol_id, events=None, schedule="explore" state_machine_symbol_id, self._hash, events=events, schedule=schedule, performer=performer ) - def verify_constraint(self, symbol_id, subject=None, engine=None, question=None): + def verify_constraint(self, symbol_id, subject=None, engine=None, question=None, + arguments=None, named_arguments=None): """Ask whether one of this model's constraints holds. Args: @@ -771,6 +772,9 @@ def verify_constraint(self, symbol_id, subject=None, engine=None, question=None) default), ``"holds"`` whether the claim holds for every assignment the free features can take, or ``"satisfiable"`` whether any assignment satisfies it + arguments (list, optional): Positional arguments bound to the + element's ``in`` parameters in declaration order + named_arguments (dict, optional): Arguments by parameter name Returns: Verdict: The answer; false is the model's answer, not an exception @@ -782,10 +786,11 @@ def verify_constraint(self, symbol_id, subject=None, engine=None, question=None) """ return self._client.verify_constraint( symbol_id, self._hash, subject_symbol_id=subject, engine=engine, - question=question, + question=question, arguments=arguments, named_arguments=named_arguments, ) - def verify_requirement(self, symbol_id, subject=None, engine=None, question=None): + def verify_requirement(self, symbol_id, subject=None, engine=None, question=None, + arguments=None, named_arguments=None): """Ask whether one of this model's requirements is satisfied. Args: @@ -796,6 +801,9 @@ def verify_requirement(self, symbol_id, subject=None, engine=None, question=None :meth:`verify_constraint` question (str, optional): The question to ask, as for :meth:`verify_constraint` + arguments (list, optional): Positional arguments bound to the + element's ``in`` parameters in declaration order + named_arguments (dict, optional): Arguments by parameter name Returns: Verdict: The answer @@ -807,7 +815,7 @@ def verify_requirement(self, symbol_id, subject=None, engine=None, question=None """ return self._client.verify_requirement( symbol_id, self._hash, subject_symbol_id=subject, engine=engine, - question=question, + question=question, arguments=arguments, named_arguments=named_arguments, ) def verify_satisfaction(self, symbol_id=None, engine=None, question=None): diff --git a/client/python/opensysml/proto/sysml_pb2.py b/client/python/opensysml/proto/sysml_pb2.py index 063b9cd295..775f4d33bf 100644 --- a/client/python/opensysml/proto/sysml_pb2.py +++ b/client/python/opensysml/proto/sysml_pb2.py @@ -24,7 +24,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0bsysml.proto\x12\x05sysml\"\x86\x03\n\x07Verdict\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x12\n\nelement_id\x18\x02 \x01(\t\x12\x0f\n\x07\x65lement\x18\x03 \x01(\t\x12\r\n\x05holds\x18\x04 \x01(\x08\x12\x11\n\tcondition\x18\x05 \x01(\t\x12\x13\n\x0binstance_id\x18\x06 \x01(\x03\x12\x18\n\x10instance_type_id\x18\x07 \x01(\t\x12\r\n\x05\x65rror\x18\x08 \x01(\t\x12,\n\x0e\x66\x61ilure_reason\x18\t \x01(\x0e\x32\x14.sysml.FailureReason\x12\x16\n\x0erequirement_id\x18\n \x01(\t\x12\x0e\n\x06\x65ngine\x18\x0b \x01(\t\x12\x10\n\x08strength\x18\x0c \x01(\t\x12\x1c\n\x06\x62ounds\x18\r \x03(\x0b\x32\x0c.sysml.Bound\x12\x15\n\rinstance_path\x18\x0e \x01(\t\x12\x10\n\x08question\x18\x0f \x01(\t\x12\x0e\n\x06status\x18\x10 \x01(\t\x12)\n\x07witness\x18\x11 \x03(\x0b\x32\x18.sysml.WitnessAssignment\"^\n\x11WitnessAssignment\x12\x0f\n\x07\x66\x65\x61ture\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\x12\x0c\n\x04unit\x18\x03 \x01(\t\x12\r\n\x05\x65xact\x18\x04 \x01(\t\"5\n\x05\x42ound\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\x03\x12\x0f\n\x07reached\x18\x03 \x01(\x08\"}\n\x17VerifyConstraintRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x04 \x01(\t\x12\x10\n\x08question\x18\x05 \x01(\t\"\x96\x01\n\x18VerifyConstraintResponse\x12\x1f\n\x07verdict\x18\x01 \x01(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x02 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\"~\n\x18VerifyRequirementRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x04 \x01(\t\x12\x10\n\x08question\x18\x05 \x01(\t\"m\n\x13VerificationVerdict\x12\x0f\n\x07\x63\x61se_id\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0e\n\x06\x64\x65tail\x18\x03 \x01(\t\x12\x0f\n\x07subcase\x18\x04 \x01(\x08\x12\x16\n\x0erequirement_id\x18\x05 \x01(\t\"\xd2\x01\n\x19VerifyRequirementResponse\x12\x1f\n\x07verdict\x18\x01 \x01(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x02 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x39\n\x15verification_verdicts\x18\x05 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\"d\n\x19VerifySatisfactionRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x03 \x01(\t\x12\x10\n\x08question\x18\x04 \x01(\t\"\x82\x02\n\x1aVerifySatisfactionResponse\x12 \n\x08verdicts\x18\x01 \x03(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x02 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x05 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x39\n\x15verification_verdicts\x18\x06 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\"P\n\x17ValidateInstanceRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x03 \x01(\t\"\xb2\x02\n\x18ValidateInstanceResponse\x12 \n\x08verdicts\x18\x01 \x03(\x0b\x32\x0e.sysml.Verdict\x12\x1f\n\x07summary\x18\x02 \x01(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x03 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x06 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x39\n\x15verification_verdicts\x18\x07 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\x12\x0f\n\x07\x62ounded\x18\x08 \x01(\x08\"m\n\x13\x45valuateCalcRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x1f\n\targuments\x18\x03 \x03(\x0b\x32\x0c.sysml.Value\x12\x0e\n\x06\x65ngine\x18\x04 \x01(\t\"\xfd\x01\n\x14\x45valuateCalcResponse\x12\x1c\n\x06result\x18\x01 \x01(\x0b\x32\x0c.sysml.Value\x12\"\n\x07outputs\x18\x02 \x03(\x0b\x32\x11.sysml.CalcOutput\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x05 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x0e\n\x06\x65ngine\x18\x06 \x01(\t\x12\x10\n\x08strength\x18\x07 \x01(\t\x12\x1c\n\x06\x62ounds\x18\x08 \x03(\x0b\x32\x0c.sysml.Bound\"7\n\nCalcOutput\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\"\x93\x01\n\x0e\x43\x61seEvaluation\x12\x13\n\x0b\x66unction_id\x18\x01 \x01(\t\x12\x1f\n\targuments\x18\x02 \x03(\x0b\x32\x0c.sysml.Value\x12\x1c\n\x06result\x18\x03 \x01(\x0b\x32\x0c.sysml.Value\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x10\n\x08selected\x18\x05 \x01(\x08\x12\x0c\n\x04tied\x18\x06 \x01(\x08\"\xa6\x02\n\x12RunAnalysisRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x1f\n\targuments\x18\x04 \x03(\x0b\x32\x0c.sysml.Value\x12\x46\n\x0fnamed_arguments\x18\x05 \x03(\x0b\x32-.sysml.RunAnalysisRequest.NamedArgumentsEntry\x12\x10\n\x08schedule\x18\x06 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x07 \x01(\t\x1a\x43\n\x13NamedArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xdc\x03\n\x13RunAnalysisResponse\x12\"\n\x07outputs\x18\x01 \x03(\x0b\x32\x11.sysml.CalcOutput\x12 \n\x08verdicts\x18\x02 \x03(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x03 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x06 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x39\n\x15verification_verdicts\x18\x07 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\x12 \n\x08outcomes\x18\x08 \x03(\x0b\x32\x0e.sysml.Outcome\x12-\n\x0b\x65xploration\x18\t \x01(\x0b\x32\x18.sysml.ExplorationStatus\x12*\n\x0b\x65valuations\x18\n \x03(\x0b\x32\x15.sysml.CaseEvaluation\x12\x0e\n\x06\x65ngine\x18\x0b \x01(\t\x12\x10\n\x08strength\x18\x0c \x01(\t\x12\x1c\n\x06\x62ounds\x18\r \x03(\x0b\x32\x0c.sysml.Bound\",\n\x10ProbabilityRange\x12\x0b\n\x03min\x18\x01 \x01(\x01\x12\x0b\n\x03max\x18\x02 \x01(\x01\"\xcb\x02\n\x07Outcome\x12,\n\x07outputs\x18\x01 \x03(\x0b\x32\x1b.sysml.Outcome.OutputsEntry\x12\x13\n\x0b\x66inal_state\x18\x02 \x01(\t\x12\x16\n\x0estates_visited\x18\x03 \x03(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x16\n\x0elinearizations\x18\x05 \x01(\x05\x12\x0f\n\x07witness\x18\x06 \x03(\t\x12&\n\x0b\x64iagnostics\x18\x07 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x13\n\x0bprobability\x18\x08 \x01(\x01\x12\x32\n\x11probability_range\x18\t \x01(\x0b\x32\x17.sysml.ProbabilityRange\x1a<\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xb5\x01\n\x11\x45xplorationStatus\x12\x10\n\x08\x63omplete\x18\x01 \x01(\x08\x12\x0c\n\x04runs\x18\x02 \x01(\x05\x12\x13\n\x0b\x62udgets_hit\x18\x03 \x03(\t\x12\x13\n\x0bruns_budget\x18\x04 \x01(\x05\x12\x14\n\x0c\x64\x65pth_budget\x18\x05 \x01(\x05\x12!\n\x19probabilities_lower_bound\x18\x06 \x01(\x08\x12\x1d\n\x15\x66\x61iled_linearizations\x18\x07 \x01(\x05\"\x14\n\x12ListEnginesRequest\"\xfc\x01\n\nEngineInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tauthority\x18\x02 \x01(\t\x12\x0f\n\x07\x61nswers\x18\x03 \x03(\t\x12\x0e\n\x06\x62ounds\x18\x04 \x03(\t\x12\x0f\n\x07process\x18\x05 \x01(\t\x12\x15\n\rprocess_found\x18\x06 \x01(\t\x12\r\n\x05ready\x18\x07 \x01(\x08\x12\x13\n\x0bunavailable\x18\x08 \x01(\t\x12\x0c\n\x04kind\x18\t \x01(\t\x12\x10\n\x08protocol\x18\n \x01(\t\x12\x0e\n\x06source\x18\x0b \x01(\t\x12\x0f\n\x07\x63ommand\x18\x0c \x01(\t\x12\x0f\n\x07version\x18\r \x01(\t\x12\x0e\n\x06served\x18\x0e \x01(\x08\"9\n\x13ListEnginesResponse\x12\"\n\x07\x65ngines\x18\x01 \x03(\x0b\x32\x11.sysml.EngineInfo\"\x8c\x01\n\x10ParseFileRequest\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x18\n\x0c\x63ontent_hash\x18\x03 \x01(\tB\x02\x18\x01\x12\x10\n\x08language\x18\x04 \x01(\t\x12\x1a\n\x12strict_conformance\x18\x05 \x01(\x08\x42\x08\n\x06source\"b\n\x0eSourceDocument\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x10\n\x08language\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\tB\x08\n\x06source\"t\n\x13ParseSourcesRequest\x12(\n\tdocuments\x18\x01 \x03(\x0b\x32\x15.sysml.SourceDocument\x12\x1a\n\x12strict_conformance\x18\x02 \x01(\x08\x12\x17\n\x0f\x62\x61se_model_hash\x18\x03 \x01(\t\"\x95\x01\n\x14ParseSourcesResponse\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12 \n\x05roots\x18\x02 \x03(\x0b\x32\x11.sysml.SymbolInfo\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x10\n\x08\x61\x66\x66\x65\x63ted\x18\x05 \x03(\t\"\x7f\n\x11ParseFileResponse\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x1f\n\x04root\x18\x02 \x01(\x0b\x32\x11.sysml.SymbolInfo\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"9\n\x10GetSymbolRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\"B\n\x0eSymbolResponse\x12!\n\x06symbol\x18\x01 \x01(\x0b\x32\x11.sysml.SymbolInfo\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"(\n\x12\x44iagnosticsRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\"L\n\x13\x44iagnosticsResponse\x12&\n\x0b\x64iagnostics\x18\x01 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"o\n\x0f\x45valuateRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x12\n\nexpression\x18\x02 \x01(\t\x12\x19\n\x11\x63ontext_symbol_id\x18\x03 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x04 \x01(\t\"g\n\x10\x45valuateResponse\x12\x1c\n\x06result\x18\x01 \x01(\x0b\x32\x0c.sysml.Value\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\"\xc2\x01\n\x08Instance\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x16\n\x0etype_symbol_id\x18\x02 \x01(\t\x12:\n\x0e\x66\x65\x61ture_values\x18\x04 \x03(\x0b\x32\".sysml.Instance.FeatureValuesEntry\x1aI\n\x12\x46\x65\x61tureValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.sysml.FeatureValue:\x02\x38\x01J\x04\x08\x03\x10\x04R\x05slots\"\x84\x01\n\x0c\x46\x65\x61tureValue\x12\x14\n\x0c\x66\x65\x61ture_name\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\x12\x1c\n\x06values\x18\x03 \x03(\x0b\x32\x0c.sysml.Value\x12\x14\n\x0cmaterialized\x18\x04 \x01(\x08\x12\r\n\x05\x65rror\x18\x05 \x01(\t\";\n\x12InstantiateRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\"\x93\x01\n\x13InstantiateResponse\x12!\n\x08instance\x18\x01 \x01(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\"\n\tinstances\x18\x04 \x03(\x0b\x32\x0f.sysml.Instance\"\xe9\x01\n\x14\x45xecuteActionRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x18\n\x10\x61\x63tion_symbol_id\x18\x02 \x01(\t\x12\x37\n\x06inputs\x18\x03 \x03(\x0b\x32\'.sysml.ExecuteActionRequest.InputsEntry\x12\x10\n\x08schedule\x18\x04 \x01(\t\x12\x1b\n\x13performer_symbol_id\x18\x05 \x01(\t\x1a;\n\x0bInputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xcc\x03\n\x15\x45xecuteActionResponse\x12:\n\x07outputs\x18\x01 \x03(\x0b\x32).sysml.ExecuteActionResponse.OutputsEntry\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12 \n\x08outcomes\x18\x04 \x03(\x0b\x32\x0e.sysml.Outcome\x12-\n\x0b\x65xploration\x18\x05 \x01(\x0b\x32\x18.sysml.ExplorationStatus\x12\x12\n\nfinal_time\x18\x06 \x01(\x01\x12S\n\x14performer_attributes\x18\x07 \x03(\x0b\x32\x35.sysml.ExecuteActionResponse.PerformerAttributesEntry\x1a<\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\x1aH\n\x18PerformerAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\x98\x01\n\x13\x45xecuteStateRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x1f\n\x17state_machine_symbol_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65vents\x18\x03 \x03(\t\x12\x10\n\x08schedule\x18\x04 \x01(\t\x12\x1b\n\x13performer_symbol_id\x18\x05 \x01(\t\x12\r\n\x05trace\x18\x06 \x01(\x08\"\x8f\x03\n\x14\x45xecuteStateResponse\x12\x16\n\x0estates_visited\x18\x01 \x03(\t\x12\x44\n\rfinal_context\x18\x02 \x03(\x0b\x32-.sysml.ExecuteStateResponse.FinalContextEntry\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12 \n\x08outcomes\x18\x05 \x03(\x0b\x32\x0e.sysml.Outcome\x12-\n\x0b\x65xploration\x18\x06 \x01(\x0b\x32\x18.sysml.ExplorationStatus\x12\x12\n\nfinal_time\x18\x07 \x01(\x01\x12#\n\x05trace\x18\x08 \x03(\x0b\x32\x14.sysml.DocumentEvent\x12\x15\n\rtrace_dropped\x18\t \x01(\x05\x1a\x41\n\x11\x46inalContextEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\x81\x02\n\x0e\x43onvertRequest\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x14\n\nmodel_hash\x18\x06 \x01(\tH\x00\x12\x13\n\x0b\x66rom_format\x18\x03 \x01(\t\x12\x11\n\tto_format\x18\x04 \x01(\t\x12\x1e\n\x16tolerate_syntax_errors\x18\x05 \x01(\x08\x12\x0f\n\x07id_form\x18\x07 \x01(\t\x12\x11\n\tdocuments\x18\x08 \x03(\t\x12\x0f\n\x07\x63ompact\x18\t \x01(\x08\x12\x14\n\x0comit_derived\x18\n \x01(\x08\x12\x14\n\x0ckeep_derived\x18\x0b \x03(\tB\x08\n\x06source\"\xb4\x01\n\x0f\x43onvertResponse\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x13\n\x0b\x66rom_format\x18\x02 \x01(\t\x12\x11\n\tto_format\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x14\n\x0c\x65xperimental\x18\x06 \x01(\x08\x12\x1b\n\x13\x65xperimental_notice\x18\x07 \x01(\t\"\xee\x01\n\x0eMigrateRequest\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\x0cH\x00\x12\x13\n\x0b\x66rom_format\x18\x03 \x01(\t\x12\x11\n\tto_format\x18\x04 \x01(\t\x12\x0e\n\x06report\x18\x05 \x01(\x08\x12\x0f\n\x07results\x18\x06 \x01(\x08\x12\x15\n\x0blayout_path\x18\x07 \x01(\tH\x01\x12\x18\n\x0elayout_content\x18\x08 \x01(\tH\x01\x12\x16\n\x0eimage_base_url\x18\t \x01(\t\x12\x0e\n\x06strict\x18\n \x01(\x08\x42\x08\n\x06sourceB\x08\n\x06layout\"\xea\x01\n\x0fMigrateResponse\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x13\n\x0b\x66rom_format\x18\x02 \x01(\t\x12\x11\n\tto_format\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x14\n\x0c\x65xperimental\x18\x05 \x01(\x08\x12\x1b\n\x13\x65xperimental_notice\x18\x06 \x01(\t\x12&\n\x06report\x18\x07 \x01(\x0b\x32\x16.sysml.MigrationReport\x12\x0f\n\x07results\x18\x08 \x01(\t\x12#\n\x05\x66iles\x18\t \x03(\x0b\x32\x14.sysml.MigrationFile\"\xc3\x01\n\x0fMigrationReport\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x10\n\x08\x65xporter\x18\x02 \x01(\t\x12\x0f\n\x07summary\x18\x03 \x01(\t\x12\x0e\n\x06mapped\x18\x04 \x01(\x05\x12\x14\n\x0c\x61pproximated\x18\x05 \x01(\x05\x12\x10\n\x08unmapped\x18\x06 \x01(\x05\x12\x0f\n\x07skipped\x18\x07 \x01(\x05\x12&\n\x07\x65ntries\x18\x08 \x03(\x0b\x32\x15.sysml.MigrationEntry\x12\x0c\n\x04text\x18\t \x01(\t\"g\n\x0eMigrationEntry\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x0f\n\x07verdict\x18\x05 \x01(\t\x12\x0c\n\x04note\x18\x06 \x01(\t\".\n\rMigrationFile\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\x0c\"}\n\x11\x41pplyEditsRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12(\n\noperations\x18\x02 \x03(\x0b\x32\x14.sysml.EditOperation\x12\x10\n\x08\x64ocument\x18\x03 \x01(\t\x12\x18\n\x10\x61\x63\x63\x65pt_documents\x18\x04 \x01(\x08\"\xc3\x06\n\rEditOperation\x12(\n\tset_value\x18\x01 \x01(\x0b\x32\x13.sysml.SetValueEditH\x00\x12#\n\x06rename\x18\x02 \x01(\x0b\x32\x11.sysml.RenameEditH\x00\x12*\n\nadd_member\x18\x03 \x01(\x0b\x32\x14.sysml.AddMemberEditH\x00\x12#\n\x06\x64\x65lete\x18\x04 \x01(\x0b\x32\x11.sysml.DeleteEditH\x00\x12\x1f\n\x04move\x18\x05 \x01(\x0b\x32\x0f.sysml.MoveEditH\x00\x12\x32\n\x0e\x61\x64\x64_connection\x18\x06 \x01(\x0b\x32\x18.sysml.AddConnectionEditH\x00\x12,\n\x0b\x61\x64\x64_satisfy\x18\x07 \x01(\x0b\x32\x15.sysml.AddSatisfyEditH\x00\x12I\n\x1a\x61\x64\x64_requirement_constraint\x18\x08 \x01(\x0b\x32#.sysml.AddRequirementConstraintEditH\x00\x12\x32\n\x0e\x61\x64\x64_transition\x18\t \x01(\x0b\x32\x18.sysml.AddTransitionEditH\x00\x12*\n\nadd_import\x18\n \x01(\x0b\x32\x14.sysml.AddImportEditH\x00\x12\x38\n\x11\x61\x64\x64_documentation\x18\x0b \x01(\x0b\x32\x1b.sysml.AddDocumentationEditH\x00\x12*\n\nadd_verify\x18\x0c \x01(\x0b\x32\x14.sysml.AddVerifyEditH\x00\x12.\n\x0c\x61\x64\x64_metadata\x18\r \x01(\x0b\x32\x16.sysml.AddMetadataEditH\x00\x12.\n\x0c\x61\x64\x64_sequence\x18\x0e \x01(\x0b\x32\x16.sysml.AddSequenceEditH\x00\x12;\n\x13\x61\x64\x64_metadata_prefix\x18\x0f \x01(\x0b\x32\x1c.sysml.AddMetadataPrefixEditH\x00\x12,\n\x0b\x61\x64\x64_comment\x18\x10 \x01(\x0b\x32\x15.sysml.AddCommentEditH\x00\x12&\n\x08\x61\x64\x64_note\x18\x12 \x01(\x0b\x32\x12.sysml.AddNoteEditH\x00\x42\x0b\n\toperation\"\x92\x02\n\rAddMemberEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0c\n\x04type\x18\x04 \x01(\t\x12\x14\n\x0cmultiplicity\x18\x05 \x01(\t\x12\r\n\x05value\x18\x06 \x01(\t\x12\x13\n\x0bspecializes\x18\x07 \x03(\t\x12\x13\n\x0bis_abstract\x18\x08 \x01(\x08\x12\x11\n\tredefines\x18\t \x03(\t\x12\x12\n\nis_default\x18\n \x01(\x08\x12\x11\n\tdirection\x18\x0b \x01(\t\x12\x19\n\x11metadata_prefixes\x18\x0e \x03(\t\x12\x0b\n\x03\x64oc\x18\x0c \x01(\t\x12\x17\n\x0f\x62ody_expression\x18\r \x01(\t\"y\n\x0e\x41\x64\x64SatisfyEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x13\n\x0brequirement\x18\x02 \x01(\t\x12\x1a\n\x12satisfying_feature\x18\x03 \x01(\t\x12\x13\n\x0bis_asserted\x18\x04 \x01(\x08\x12\x12\n\nis_negated\x18\x05 \x01(\x08\"]\n\x1c\x41\x64\x64RequirementConstraintEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x12\n\nexpression\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\"\x91\x01\n\x11\x41\x64\x64TransitionEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x0f\n\x07trigger\x18\x05 \x01(\t\x12\r\n\x05guard\x18\x06 \x01(\t\x12\x0e\n\x06\x65\x66\x66\x65\x63t\x18\x07 \x01(\t\x12\x0f\n\x07initial\x18\x08 \x01(\x08\"3\n\rAddVerifyEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x13\n\x0brequirement\x18\x02 \x01(\t\"6\n\x14MetadataFeatureValue\x12\x0f\n\x07\x66\x65\x61ture\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x94\x01\n\x0f\x41\x64\x64MetadataEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x15\n\rmetadata_type\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\r\n\x05\x61\x62out\x18\x04 \x03(\t\x12+\n\x06values\x18\x05 \x03(\x0b\x32\x1b.sysml.MetadataFeatureValue\x12\x11\n\tshorthand\x18\x06 \x01(\x08\">\n\x15\x41\x64\x64MetadataPrefixEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x15\n\rmetadata_type\x18\x02 \x01(\t\"\x80\x01\n\rAddImportEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x12\n\nvisibility\x18\x02 \x01(\t\x12\x0e\n\x06target\x18\x03 \x01(\t\x12\x14\n\x0cis_recursive\x18\x04 \x01(\x08\x12\x15\n\ris_import_all\x18\x05 \x01(\x08\x12\x0f\n\x07\x66ilters\x18\x06 \x03(\t\"c\n\x14\x41\x64\x64\x44ocumentationEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0c\n\x04\x62ody\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0e\n\x06locale\x18\x04 \x01(\t\x12\x0f\n\x07replace\x18\x05 \x01(\x08\"Z\n\x0e\x41\x64\x64\x43ommentEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04\x62ody\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\r\n\x05\x61\x62out\x18\x04 \x03(\t\x12\x0e\n\x06locale\x18\x05 \x01(\t\"+\n\x0b\x41\x64\x64NoteEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\"\xcd\x02\n\x0f\x41\x64\x64SequenceEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0f\n\x07keyword\x18\x02 \x01(\t\x12\x0b\n\x03ref\x18\x03 \x01(\t\x12\x13\n\x0bmember_kind\x18\x04 \x01(\t\x12\x13\n\x0bmember_name\x18\x05 \x01(\t\x12\x0c\n\x04type\x18\x06 \x01(\t\x12\r\n\x05\x61\x66ter\x18\x07 \x01(\t\x12\x11\n\tcondition\x18\x08 \x01(\t\x12\r\n\x05value\x18\t \x01(\t\x12\x0e\n\x06target\x18\n \x01(\t\x12\x0b\n\x03via\x18\x0b \x01(\t\x12\r\n\x05until\x18\x0c \x01(\t\x12$\n\x04\x62ody\x18\r \x03(\x0b\x32\x16.sysml.AddSequenceEdit\x12)\n\telse_body\x18\x0e \x03(\x0b\x32\x16.sysml.AddSequenceEdit\x12\x14\n\x0cmultiplicity\x18\x0f \x01(\t\x12\x11\n\tparameter\x18\x10 \x01(\t\"n\n\x11\x41\x64\x64\x43onnectionEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x10\n\x08\x66rom_end\x18\x03 \x01(\t\x12\x0e\n\x06to_end\x18\x04 \x01(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x0c\n\x04type\x18\x06 \x01(\t\"-\n\nDeleteEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0f\n\x07\x63\x61scade\x18\x02 \x01(\x08\")\n\x08MoveEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\r\n\x05owner\x18\x02 \x01(\t\"-\n\x0cSetValueEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\".\n\nRenameEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"\x90\x02\n\x12\x41pplyEditsResponse\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12#\n\x07\x61pplied\x18\x02 \x03(\x0b\x32\x12.sysml.AppliedEdit\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12#\n\x07\x66\x61ilure\x18\x04 \x01(\x0e\x32\x12.sysml.EditFailure\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x1a\n\x12referring_elements\x18\x06 \x03(\t\x12(\n\tdocuments\x18\x07 \x03(\x0b\x32\x15.sysml.EditedDocument\x12\"\n\treferrers\x18\x08 \x03(\x0b\x32\x0f.sysml.Referrer\"/\n\x0e\x45\x64itedDocument\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\t\"*\n\x08Referrer\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08\x64ocument\x18\x02 \x01(\t\"\x8c\x01\n\x0b\x41ppliedEdit\x12\x17\n\x0foperation_index\x18\x01 \x01(\x05\x12\x0e\n\x06target\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x05\x12\x0e\n\x06length\x18\x04 \x01(\x05\x12\x10\n\x08old_text\x18\x05 \x01(\t\x12\x10\n\x08new_text\x18\x06 \x01(\t\x12\x10\n\x08\x64ocument\x18\x07 \x01(\t\"\xfd\x02\n\nSymbolInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04kind\x18\x03 \x01(\t\x12\x31\n\x08metadata\x18\x04 \x03(\x0b\x32\x1f.sysml.SymbolInfo.MetadataEntry\x12\x11\n\tchild_ids\x18\x05 \x03(\t\x12(\n\nattributes\x18\x06 \x03(\x0b\x32\x14.sysml.AttributeInfo\x12\"\n\ttype_info\x18\x07 \x01(\x0b\x32\x0f.sysml.TypeInfo\x12-\n\x0cmultiplicity\x18\x08 \x01(\x0b\x32\x17.sysml.MultiplicityInfo\x12.\n\x0fspecializations\x18\t \x03(\x0b\x32\x15.sysml.Specialization\x12#\n\x1bwithheld_library_attributes\x18\n \x01(\x05\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"X\n\x0eSpecialization\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x10\n\x08\x64\x65\x63lared\x18\x02 \x01(\t\x12\x11\n\ttarget_id\x18\x03 \x01(\t\x12\x13\n\x0btarget_kind\x18\x04 \x01(\t\"\x95\x01\n\x08TypeInfo\x12\x10\n\x08\x64\x65\x63lared\x18\x01 \x01(\t\x12\x13\n\x0bresolved_id\x18\x02 \x01(\t\x12\x15\n\rresolved_kind\x18\x03 \x01(\t\x12\x11\n\tprimitive\x18\x04 \x01(\t\x12\x18\n\x10primitive_source\x18\x05 \x01(\t\x12\x10\n\x08quantity\x18\x06 \x01(\x08\x12\x0c\n\x04unit\x18\x07 \x01(\t\"0\n\x10MultiplicityInfo\x12\r\n\x05lower\x18\x01 \x01(\t\x12\r\n\x05upper\x18\x02 \x01(\t\"V\n\rAttributeInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x1b\n\x05value\x18\x03 \x01(\x0b\x32\x0c.sysml.Value\x12\x0c\n\x04unit\x18\x04 \x01(\t\"\x87\x06\n\x05Value\x12\x13\n\tint_value\x18\x01 \x01(\x03H\x00\x12\x14\n\nreal_value\x18\x02 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x12\x16\n\x0cstring_value\x18\x04 \x01(\tH\x00\x12\x15\n\x0binstance_id\x18\x05 \x01(\x03H\x00\x12(\n\x08sequence\x18\x06 \x01(\x0b\x32\x14.sysml.ValueSequenceH\x00\x12\x0e\n\x04null\x18\x07 \x01(\tH\x00\x12#\n\x08quantity\x18\x08 \x01(\x0b\x32\x0f.sysml.QuantityH\x00\x12*\n\x0c\x65num_literal\x18\t \x01(\x0b\x32\x12.sysml.EnumLiteralH\x00\x12\x0f\n\x05unset\x18\n \x01(\x08H\x00\x12!\n\x07\x63omplex\x18\x0b \x01(\x0b\x32\x0e.sysml.ComplexH\x00\x12\x1d\n\x05\x61rray\x18\x0c \x01(\x0b\x32\x0c.sysml.ArrayH\x00\x12\x1f\n\x06vector\x18\r \x01(\x0b\x32\r.sysml.VectorH\x00\x12\x30\n\x0fvector_quantity\x18\x0e \x01(\x0b\x32\x15.sysml.VectorQuantityH\x00\x12\x30\n\x0fmeasurement_ref\x18\x0f \x01(\x0b\x32\x15.sysml.MeasurementRefH\x00\x12\x12\n\x08infinity\x18\x10 \x01(\x08H\x00\x12#\n\x08\x66unction\x18\x11 \x01(\x0b\x32\x0f.sysml.FunctionH\x00\x12\x1e\n\x03set\x18\x12 \x01(\x0b\x32\x0f.sysml.ValueSetH\x00\x12\x30\n\x0ftensor_quantity\x18\x13 \x01(\x0b\x32\x15.sysml.TensorQuantityH\x00\x12\'\n\nmetaobject\x18\x14 \x01(\x0b\x32\x11.sysml.MetaobjectH\x00\x12+\n\x0cundetermined\x18\x15 \x01(\x0b\x32\x13.sysml.UndeterminedH\x00\x12\x17\n\rbig_int_value\x18\x16 \x01(\tH\x00\x12)\n\x0erational_value\x18\x17 \x01(\x0b\x32\x0f.sysml.RationalH\x00\x42\x06\n\x04kind\"2\n\x08Rational\x12\x11\n\tnumerator\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65nominator\x18\x02 \x01(\t\"6\n\nMetaobject\x12\x12\n\nelement_id\x18\x01 \x01(\t\x12\x14\n\x0cmetaclass_id\x18\x02 \x01(\t\"F\n\x0cUndetermined\x12\x0e\n\x06reason\x18\x01 \x01(\t\x12&\n\x05\x63ount\x18\x02 \x01(\x0b\x32\x17.sysml.MultiplicityInfo\",\n\x08\x46unction\x12\x0f\n\x07\x63\x61lc_id\x18\x01 \x01(\t\x12\x0f\n\x07self_id\x18\x02 \x01(\x03\"*\n\x08ValueSet\x12\x1e\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x0c.sysml.Value\"I\n\x0eTensorQuantity\x12\x12\n\ndimensions\x18\x01 \x03(\x03\x12#\n\ncomponents\x18\x02 \x03(\x0b\x32\x0f.sysml.Quantity\";\n\x05\x41rray\x12\x12\n\ndimensions\x18\x01 \x03(\x03\x12\x1e\n\x08\x65lements\x18\x02 \x03(\x0b\x32\x0c.sysml.Value\"*\n\x06Vector\x12 \n\ncomponents\x18\x01 \x03(\x0b\x32\x0c.sysml.Value\"5\n\x0eVectorQuantity\x12#\n\ncomponents\x18\x01 \x03(\x0b\x32\x0f.sysml.Quantity\"*\n\x07\x43omplex\x12\x0c\n\x04real\x18\x01 \x01(\x01\x12\x11\n\timaginary\x18\x02 \x01(\x01\"d\n\x0b\x45numLiteral\x12\x12\n\nliteral_id\x18\x01 \x01(\t\x12\x16\n\x0e\x65numeration_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x1b\n\x05value\x18\x04 \x01(\x0b\x32\x0c.sysml.Value\"/\n\rValueSequence\x12\x1e\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x0c.sysml.Value\"\xc8\x01\n\x08Quantity\x12\x17\n\rint_magnitude\x18\x01 \x01(\x03H\x00\x12\x18\n\x0ereal_magnitude\x18\x02 \x01(\x01H\x00\x12\x1b\n\x11\x62ig_int_magnitude\x18\x05 \x01(\tH\x00\x12-\n\x12rational_magnitude\x18\x06 \x01(\x0b\x32\x0f.sysml.RationalH\x00\x12\x0c\n\x04unit\x18\x03 \x01(\t\x12\"\n\tunit_term\x18\x04 \x01(\x0b\x32\x0f.sysml.UnitTermB\x0b\n\tmagnitude\"S\n\x0eMeasurementRef\x12\x0c\n\x04unit\x18\x01 \x01(\t\x12\"\n\tunit_term\x18\x02 \x01(\x0b\x32\x0f.sysml.UnitTerm\x12\x0f\n\x07unit_id\x18\x03 \x01(\t\"T\n\x08UnitTerm\x12\x11\n\tscale_num\x18\x01 \x01(\x01\x12\x11\n\tscale_den\x18\x02 \x01(\x01\x12\"\n\x07\x66\x61\x63tors\x18\x03 \x03(\x0b\x32\x11.sysml.UnitFactor\"/\n\nUnitFactor\x12\x0f\n\x07unit_id\x18\x01 \x01(\t\x12\x10\n\x08\x65xponent\x18\x02 \x01(\x01\"X\n\nDiagnostic\x12\x10\n\x08severity\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x19\n\x04span\x18\x03 \x01(\x0b\x32\x0b.sysml.Span\x12\x0c\n\x04\x63ode\x18\x04 \x01(\t\"^\n\x04Span\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x12\n\nstart_line\x18\x02 \x01(\x05\x12\x11\n\tstart_col\x18\x03 \x01(\x05\x12\x10\n\x08\x65nd_line\x18\x04 \x01(\x05\x12\x0f\n\x07\x65nd_col\x18\x05 \x01(\x05\"\x13\n\x11ServerInfoRequest\";\n\x12ServerInfoResponse\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x02 \x03(\t\"S\n\x0cQueryRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x1b\n\x05query\x18\x02 \x01(\x0b\x32\x0c.sysml.Query\x12\x12\n\noslc_query\x18\x03 \x01(\t\"<\n\rQueryResponse\x12+\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x19.sysml.QueryResultElement\"H\n\x05Query\x12\r\n\x05scope\x18\x01 \x03(\t\x12\x0e\n\x06select\x18\x02 \x03(\t\x12 \n\x05where\x18\x03 \x01(\x0b\x32\x11.sysml.Constraint\"|\n\nConstraint\x12/\n\tprimitive\x18\x01 \x01(\x0b\x32\x1a.sysml.PrimitiveConstraintH\x00\x12/\n\tcomposite\x18\x02 \x01(\x0b\x32\x1a.sysml.CompositeConstraintH\x00\x42\x0c\n\nconstraint\"s\n\x13PrimitiveConstraint\x12\x0f\n\x07inverse\x18\x01 \x01(\x08\x12\x10\n\x08property\x18\x02 \x01(\t\x12*\n\x08operator\x18\x03 \x01(\x0e\x32\x18.sysml.PrimitiveOperator\x12\r\n\x05value\x18\x04 \x03(\t\"h\n\x13\x43ompositeConstraint\x12*\n\x08operator\x18\x01 \x01(\x0e\x32\x18.sysml.CompositeOperator\x12%\n\nconstraint\x18\x02 \x03(\x0b\x32\x11.sysml.Constraint\"\xa0\x01\n\x12QueryResultElement\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12=\n\nproperties\x18\x03 \x03(\x0b\x32).sysml.QueryResultElement.PropertiesEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"s\n\nSweepRange\x12\x11\n\tparameter\x18\x01 \x01(\t\x12\x1b\n\x05start\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\x12\x19\n\x03\x65nd\x18\x03 \x01(\x0b\x32\x0c.sysml.Value\x12\x1a\n\x04step\x18\x04 \x01(\x0b\x32\x0c.sysml.Value\"\xd0\x02\n\x0fRunSweepRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x1f\n\targuments\x18\x04 \x03(\x0b\x32\x0c.sysml.Value\x12\x43\n\x0fnamed_arguments\x18\x05 \x03(\x0b\x32*.sysml.RunSweepRequest.NamedArgumentsEntry\x12!\n\x06ranges\x18\x06 \x03(\x0b\x32\x11.sysml.SweepRange\x12\x0f\n\x07samples\x18\x07 \x01(\x03\x12\x0c\n\x04seed\x18\x08 \x01(\x04\x12\x0e\n\x06\x65ngine\x18\t \x01(\t\x1a\x43\n\x13NamedArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xf4\x01\n\x08SweepRow\x12!\n\x06inputs\x18\x01 \x03(\x0b\x32\x11.sysml.CalcOutput\x12\"\n\x07outputs\x18\x02 \x03(\x0b\x32\x11.sysml.CalcOutput\x12 \n\x08verdicts\x18\x03 \x03(\x0b\x32\x0e.sysml.Verdict\x12\x16\n\x0e\x65lapsed_micros\x18\x04 \x01(\x03\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12,\n\x0e\x66\x61ilure_reason\x18\x06 \x01(\x0e\x32\x14.sysml.FailureReason\x12*\n\x0b\x65valuations\x18\x07 \x03(\x0b\x32\x15.sysml.CaseEvaluation\"\xad\x02\n\x10RunSweepResponse\x12\x1d\n\x04rows\x18\x01 \x03(\x0b\x32\x0f.sysml.SweepRow\x12\x12\n\nparameters\x18\x02 \x03(\t\x12\x0f\n\x07sampled\x18\x03 \x01(\x08\x12\x0c\n\x04seed\x18\x04 \x01(\x04\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x06 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x07 \x01(\x0e\x32\x14.sysml.FailureReason\x12\"\n\tinstances\x18\x08 \x03(\x0b\x32\x0f.sysml.Instance\x12\x0e\n\x06\x65ngine\x18\t \x01(\t\x12\x10\n\x08strength\x18\n \x01(\t\x12\x1c\n\x06\x62ounds\x18\x0b \x03(\x0b\x32\x0c.sysml.Bound\"n\n\x17RunDocumentQueryRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x10\n\x08query_id\x18\x02 \x01(\t\x12-\n\x08\x62indings\x18\x03 \x03(\x0b\x32\x1b.sysml.DocumentQueryBinding\"O\n\x14\x44ocumentQueryBinding\x12\x11\n\tparameter\x18\x01 \x01(\t\x12$\n\x06values\x18\x02 \x03(\x0b\x32\x14.sysml.DocumentValue\"\xbb\x03\n\rDocumentValue\x12\x14\n\nelement_id\x18\x01 \x01(\tH\x00\x12\x16\n\x0cstring_value\x18\x02 \x01(\tH\x00\x12\x13\n\tint_value\x18\x03 \x01(\x03H\x00\x12\x14\n\nreal_value\x18\x04 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x05 \x01(\x08H\x00\x12\x12\n\x08infinity\x18\x06 \x01(\x08H\x00\x12#\n\x08quantity\x18\x08 \x01(\x0b\x32\x0f.sysml.QuantityH\x00\x12)\n\x07verdict\x18\t \x01(\x0b\x32\x16.sysml.DocumentVerdictH\x00\x12\'\n\x06object\x18\n \x01(\x0b\x32\x15.sysml.DocumentObjectH\x00\x12%\n\x05state\x18\x0b \x01(\x0b\x32\x14.sysml.DocumentStateH\x00\x12%\n\x05\x65vent\x18\x0c \x01(\x0b\x32\x14.sysml.DocumentEventH\x00\x12\x17\n\rbig_int_value\x18\r \x01(\tH\x00\x12)\n\x0erational_value\x18\x0e \x01(\x0b\x32\x0f.sysml.RationalH\x00\x12\x14\n\x0c\x65lement_type\x18\x07 \x01(\tB\x06\n\x04kind\"Z\n\x0e\x44ocumentObject\x12\x13\n\x0binstance_id\x18\x01 \x01(\x03\x12\x0c\n\x04path\x18\x02 \x01(\t\x12%\n\x07\x65lement\x18\x03 \x01(\x0b\x32\x14.sysml.DocumentValue\"\xae\x01\n\x0f\x44ocumentVerdict\x12\'\n\tassertion\x18\x01 \x01(\x0b\x32\x14.sysml.DocumentValue\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04text\x18\x03 \x01(\t\x12\x0c\n\x04path\x18\x04 \x01(\t\x12\x0f\n\x07verdict\x18\x05 \x01(\t\x12\x11\n\tcondition\x18\x06 \x01(\t\x12\x0e\n\x06reason\x18\x07 \x01(\t\x12\x14\n\x0cverification\x18\x08 \x03(\t\"\xb1\x01\n\rDocumentState\x12%\n\x06object\x18\x01 \x01(\x0b\x32\x15.sysml.DocumentObject\x12\x0f\n\x07machine\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x12\n\nstate_path\x18\x04 \x01(\t\x12#\n\x05state\x18\x05 \x01(\x0b\x32\x14.sysml.DocumentValue\x12\x0e\n\x06region\x18\x06 \x01(\t\x12\x11\n\tenclosing\x18\x07 \x03(\t\"\x9c\x02\n\rDocumentEvent\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\"\n\x04time\x18\x02 \x01(\x0b\x32\x14.sysml.DocumentValue\x12%\n\x06object\x18\x03 \x01(\x0b\x32\x15.sysml.DocumentObject\x12\x0f\n\x07machine\x18\x04 \x01(\t\x12\r\n\x05state\x18\x05 \x01(\t\x12\x0c\n\x04\x66rom\x18\x06 \x01(\t\x12\n\n\x02to\x18\x07 \x01(\t\x12%\n\x06target\x18\x08 \x01(\x0b\x32\x15.sysml.DocumentObject\x12\r\n\x05\x65vent\x18\t \x01(\t\x12\x0f\n\x07payload\x18\n \x03(\t\x12\x14\n\x0c\x61lternatives\x18\x0b \x03(\t\x12\r\n\x05taken\x18\x0c \x01(\t\x12\x0c\n\x04text\x18\r \x01(\t\"#\n\x13\x44ocumentQueryColumn\x12\x0c\n\x04name\x18\x01 \x01(\t\"9\n\x11\x44ocumentQueryCell\x12$\n\x06values\x18\x01 \x03(\x0b\x32\x14.sysml.DocumentValue\"b\n\x10\x44ocumentQueryRow\x12%\n\x07\x65lement\x18\x01 \x01(\x0b\x32\x14.sysml.DocumentValue\x12\'\n\x05\x63\x65lls\x18\x02 \x03(\x0b\x32\x18.sysml.DocumentQueryCell\"n\n\x18RunDocumentQueryResponse\x12+\n\x07\x63olumns\x18\x01 \x03(\x0b\x32\x1a.sysml.DocumentQueryColumn\x12%\n\x04rows\x18\x02 \x03(\x0b\x32\x17.sysml.DocumentQueryRow\"N\n\x15RenderDocumentRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x13\n\x0b\x64ocument_id\x18\x02 \x01(\t\x12\x0c\n\x04\x66orm\x18\x03 \x01(\t\"8\n\x16RenderDocumentResponse\x12\x10\n\x08markdown\x18\x01 \x01(\t\x12\x0c\n\x04html\x18\x02 \x01(\t\"D\n\x11RenderViewRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x0c\n\x04view\x18\x02 \x01(\t\x12\r\n\x05ports\x18\x03 \x01(\t\"\x8d\x02\n\x12RenderViewResponse\x12\x0c\n\x04view\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0e\n\x06stated\x18\x03 \x01(\t\x12 \n\x05nodes\x18\x04 \x03(\x0b\x32\x11.sysml.RenderNode\x12 \n\x05\x65\x64ges\x18\x05 \x03(\x0b\x32\x11.sysml.RenderEdge\x12\x0f\n\x07\x63olumns\x18\x06 \x03(\t\x12\x1e\n\x04rows\x18\x07 \x03(\x0b\x32\x10.sysml.RenderRow\x12#\n\x06\x63\x61nvas\x18\x08 \x01(\x0b\x32\x13.sysml.RenderCanvas\x12 \n\x05notes\x18\t \x03(\x0b\x32\x11.sysml.RenderNote\x12\x0f\n\x07notices\x18\n \x03(\t\"\xa7\x02\n\nRenderNode\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x18\n\x10name_synthesized\x18\x04 \x01(\x08\x12\x0c\n\x04type\x18\x05 \x01(\t\x12\x0e\n\x06\x64\x65tail\x18\x06 \x01(\t\x12\x0c\n\x04text\x18\x07 \x01(\t\x12\x10\n\x08stand_in\x18\x08 \x01(\x08\x12\x0e\n\x06parent\x18\t \x01(\t\x12 \n\x05ports\x18\n \x03(\x0b\x32\x11.sysml.RenderPort\x12\x1b\n\x06origin\x18\x0b \x01(\x0b\x32\x0b.sysml.Span\x12\'\n\x08geometry\x18\x0c \x01(\x0b\x32\x15.sysml.RenderGeometry\x12!\n\x05style\x18\r \x01(\x0b\x32\x12.sysml.RenderStyle\"G\n\nRenderPort\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04type\x18\x03 \x01(\t\x12\x11\n\tdirection\x18\x04 \x01(\t\"\xd8\x01\n\nRenderEdge\x12\x0c\n\x04\x66rom\x18\x01 \x01(\t\x12\n\n\x02to\x18\x02 \x01(\t\x12\x11\n\tfrom_port\x18\x03 \x01(\t\x12\x0f\n\x07to_port\x18\x04 \x01(\t\x12\r\n\x05label\x18\x05 \x01(\t\x12\x0c\n\x04name\x18\x06 \x01(\t\x12\x0c\n\x04kind\x18\x07 \x01(\t\x12\x1b\n\x06origin\x18\x08 \x01(\x0b\x32\x0b.sysml.Span\x12!\n\x05route\x18\t \x03(\x0b\x32\x12.sysml.RenderPoint\x12!\n\x05style\x18\n \x01(\x0b\x32\x12.sysml.RenderStyle\"j\n\x0eRenderGeometry\x12\t\n\x01x\x18\x01 \x01(\x01\x12\t\n\x01y\x18\x02 \x01(\x01\x12\r\n\x05width\x18\x03 \x01(\x01\x12\x0e\n\x06height\x18\x04 \x01(\x01\x12\x10\n\x08has_size\x18\x05 \x01(\x08\x12\x11\n\tcollapsed\x18\x06 \x01(\x08\"M\n\x0cRenderCanvas\x12\x0c\n\x04unit\x18\x01 \x01(\t\x12\r\n\x05width\x18\x02 \x01(\x01\x12\x0e\n\x06height\x18\x03 \x01(\x01\x12\x10\n\x08has_size\x18\x04 \x01(\x08\"v\n\x0bRenderStyle\x12\x0c\n\x04\x66ill\x18\x01 \x01(\t\x12\x0c\n\x04line\x18\x02 \x01(\t\x12\x0c\n\x04text\x18\x03 \x01(\t\x12\x0c\n\x04\x66ont\x18\x04 \x01(\t\x12\x11\n\tfont_size\x18\x05 \x01(\x01\x12\x0c\n\x04\x62old\x18\x06 \x01(\x08\x12\x0e\n\x06italic\x18\x07 \x01(\x08\"#\n\x0bRenderPoint\x12\t\n\x01x\x18\x01 \x01(\x01\x12\t\n\x01y\x18\x02 \x01(\x01\"7\n\tRenderRow\x12\r\n\x05\x63\x65lls\x18\x01 \x03(\t\x12\x1b\n\x06origin\x18\x02 \x01(\x0b\x32\x0b.sysml.Span\"\xb2\x01\n\nRenderNote\x12\x0c\n\x04text\x18\x01 \x01(\t\x12\x0e\n\x06\x61nchor\x18\x02 \x01(\t\x12\x11\n\tedge_from\x18\x03 \x01(\t\x12\x0f\n\x07\x65\x64ge_to\x18\x04 \x01(\t\x12\t\n\x01x\x18\x05 \x01(\x01\x12\t\n\x01y\x18\x06 \x01(\x01\x12\r\n\x05width\x18\x07 \x01(\x01\x12\x0e\n\x06height\x18\x08 \x01(\x01\x12\x10\n\x08has_size\x18\t \x01(\x08\x12\x1b\n\x06origin\x18\n \x01(\x0b\x32\x0b.sysml.Span\":\n\x13\x45xportGraphsRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x0f\n\x07subject\x18\x02 \x01(\t\"I\n\x14\x45xportGraphsResponse\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12\x0f\n\x07subject\x18\x03 \x01(\t*\xb1\x01\n\rFailureReason\x12\x1e\n\x1a\x46\x41ILURE_REASON_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x46\x41ILURE_REASON_EVALUATION\x10\x01\x12\x1d\n\x19\x46\x41ILURE_REASON_WRONG_KIND\x10\x02\x12$\n FAILURE_REASON_AMBIGUOUS_SUBJECT\x10\x03\x12\x1c\n\x18\x46\x41ILURE_REASON_UNDECIDED\x10\x04*\x8c\x05\n\x0b\x45\x64itFailure\x12\x1c\n\x18\x45\x44IT_FAILURE_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x45\x44IT_FAILURE_NO_OPERATIONS\x10\x01\x12\x1f\n\x1b\x45\x44IT_FAILURE_UNKNOWN_TARGET\x10\x02\x12!\n\x1d\x45\x44IT_FAILURE_AMBIGUOUS_TARGET\x10\x03\x12\x1b\n\x17\x45\x44IT_FAILURE_NOT_VALUED\x10\x04\x12\x1e\n\x1a\x45\x44IT_FAILURE_INVALID_VALUE\x10\x05\x12\x1d\n\x19\x45\x44IT_FAILURE_INVALID_NAME\x10\x06\x12\x1a\n\x16\x45\x44IT_FAILURE_NOT_NAMED\x10\x07\x12\"\n\x1e\x45\x44IT_FAILURE_RENAME_REFERENCED\x10\x08\x12\"\n\x1e\x45\x44IT_FAILURE_OVERLAPPING_EDITS\x10\t\x12\x1f\n\x1b\x45\x44IT_FAILURE_RESULT_INVALID\x10\n\x12\x1e\n\x1a\x45\x44IT_FAILURE_OWNER_UNKNOWN\x10\x0b\x12$\n EDIT_FAILURE_OWNER_NOT_NAMESPACE\x10\x0c\x12\x1d\n\x19\x45\x44IT_FAILURE_ILLEGAL_KIND\x10\r\x12\"\n\x1e\x45\x44IT_FAILURE_MEMBER_NAME_TAKEN\x10\x0e\x12\"\n\x1e\x45\x44IT_FAILURE_DELETE_REFERENCED\x10\x0f\x12$\n EDIT_FAILURE_OWNER_INSIDE_TARGET\x10\x10\x12 \n\x1c\x45\x44IT_FAILURE_MOVE_REFERENCED\x10\x11\x12%\n!EDIT_FAILURE_REFERENCED_ELSEWHERE\x10\x12*\x92\x01\n\x11PrimitiveOperator\x12\"\n\x1ePRIMITIVE_OPERATOR_UNSPECIFIED\x10\x00\x12\x1c\n\x18PRIMITIVE_OPERATOR_EQUAL\x10\x01\x12\x1e\n\x1aPRIMITIVE_OPERATOR_GREATER\x10\x02\x12\x1b\n\x17PRIMITIVE_OPERATOR_LESS\x10\x03*n\n\x11\x43ompositeOperator\x12\"\n\x1e\x43OMPOSITE_OPERATOR_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x43OMPOSITE_OPERATOR_AND\x10\x01\x12\x19\n\x15\x43OMPOSITE_OPERATOR_OR\x10\x02\x32\x85\x0e\n\x0cSysMLService\x12\x44\n\rGetServerInfo\x12\x18.sysml.ServerInfoRequest\x1a\x19.sysml.ServerInfoResponse\x12>\n\tParseFile\x12\x17.sysml.ParseFileRequest\x1a\x18.sysml.ParseFileResponse\x12G\n\x0cParseSources\x12\x1a.sysml.ParseSourcesRequest\x1a\x1b.sysml.ParseSourcesResponse\x12;\n\tGetSymbol\x12\x17.sysml.GetSymbolRequest\x1a\x15.sysml.SymbolResponse\x12G\n\x0eGetDiagnostics\x12\x19.sysml.DiagnosticsRequest\x1a\x1a.sysml.DiagnosticsResponse\x12;\n\x08\x45valuate\x12\x16.sysml.EvaluateRequest\x1a\x17.sysml.EvaluateResponse\x12\x44\n\x0bInstantiate\x12\x19.sysml.InstantiateRequest\x1a\x1a.sysml.InstantiateResponse\x12J\n\rExecuteAction\x12\x1b.sysml.ExecuteActionRequest\x1a\x1c.sysml.ExecuteActionResponse\x12G\n\x0c\x45xecuteState\x12\x1a.sysml.ExecuteStateRequest\x1a\x1b.sysml.ExecuteStateResponse\x12\x38\n\x07\x43onvert\x12\x15.sysml.ConvertRequest\x1a\x16.sysml.ConvertResponse\x12\x38\n\x07Migrate\x12\x15.sysml.MigrateRequest\x1a\x16.sysml.MigrateResponse\x12\x41\n\nApplyEdits\x12\x18.sysml.ApplyEditsRequest\x1a\x19.sysml.ApplyEditsResponse\x12S\n\x10VerifyConstraint\x12\x1e.sysml.VerifyConstraintRequest\x1a\x1f.sysml.VerifyConstraintResponse\x12V\n\x11VerifyRequirement\x12\x1f.sysml.VerifyRequirementRequest\x1a .sysml.VerifyRequirementResponse\x12Y\n\x12VerifySatisfaction\x12 .sysml.VerifySatisfactionRequest\x1a!.sysml.VerifySatisfactionResponse\x12S\n\x10ValidateInstance\x12\x1e.sysml.ValidateInstanceRequest\x1a\x1f.sysml.ValidateInstanceResponse\x12G\n\x0c\x45valuateCalc\x12\x1a.sysml.EvaluateCalcRequest\x1a\x1b.sysml.EvaluateCalcResponse\x12\x44\n\x0bRunAnalysis\x12\x19.sysml.RunAnalysisRequest\x1a\x1a.sysml.RunAnalysisResponse\x12;\n\x08RunSweep\x12\x16.sysml.RunSweepRequest\x1a\x17.sysml.RunSweepResponse\x12\x44\n\x0bListEngines\x12\x19.sysml.ListEnginesRequest\x1a\x1a.sysml.ListEnginesResponse\x12\x32\n\x05Query\x12\x13.sysml.QueryRequest\x1a\x14.sysml.QueryResponse\x12S\n\x10RunDocumentQuery\x12\x1e.sysml.RunDocumentQueryRequest\x1a\x1f.sysml.RunDocumentQueryResponse\x12M\n\x0eRenderDocument\x12\x1c.sysml.RenderDocumentRequest\x1a\x1d.sysml.RenderDocumentResponse\x12\x41\n\nRenderView\x12\x18.sysml.RenderViewRequest\x1a\x19.sysml.RenderViewResponse\x12G\n\x0c\x45xportGraphs\x12\x1a.sysml.ExportGraphsRequest\x1a\x1b.sysml.ExportGraphsResponseB*Z(github.com/Open-MBEE/OpenSysML/api/protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0bsysml.proto\x12\x05sysml\"\x86\x03\n\x07Verdict\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x12\n\nelement_id\x18\x02 \x01(\t\x12\x0f\n\x07\x65lement\x18\x03 \x01(\t\x12\r\n\x05holds\x18\x04 \x01(\x08\x12\x11\n\tcondition\x18\x05 \x01(\t\x12\x13\n\x0binstance_id\x18\x06 \x01(\x03\x12\x18\n\x10instance_type_id\x18\x07 \x01(\t\x12\r\n\x05\x65rror\x18\x08 \x01(\t\x12,\n\x0e\x66\x61ilure_reason\x18\t \x01(\x0e\x32\x14.sysml.FailureReason\x12\x16\n\x0erequirement_id\x18\n \x01(\t\x12\x0e\n\x06\x65ngine\x18\x0b \x01(\t\x12\x10\n\x08strength\x18\x0c \x01(\t\x12\x1c\n\x06\x62ounds\x18\r \x03(\x0b\x32\x0c.sysml.Bound\x12\x15\n\rinstance_path\x18\x0e \x01(\t\x12\x10\n\x08question\x18\x0f \x01(\t\x12\x0e\n\x06status\x18\x10 \x01(\t\x12)\n\x07witness\x18\x11 \x03(\x0b\x32\x18.sysml.WitnessAssignment\"^\n\x11WitnessAssignment\x12\x0f\n\x07\x66\x65\x61ture\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\x12\x0c\n\x04unit\x18\x03 \x01(\t\x12\r\n\x05\x65xact\x18\x04 \x01(\t\"5\n\x05\x42ound\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\x03\x12\x0f\n\x07reached\x18\x03 \x01(\x08\"\xb0\x02\n\x17VerifyConstraintRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x04 \x01(\t\x12\x10\n\x08question\x18\x05 \x01(\t\x12\x1f\n\targuments\x18\x06 \x03(\x0b\x32\x0c.sysml.Value\x12K\n\x0fnamed_arguments\x18\x07 \x03(\x0b\x32\x32.sysml.VerifyConstraintRequest.NamedArgumentsEntry\x1a\x43\n\x13NamedArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\x96\x01\n\x18VerifyConstraintResponse\x12\x1f\n\x07verdict\x18\x01 \x01(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x02 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\"\xb2\x02\n\x18VerifyRequirementRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x04 \x01(\t\x12\x10\n\x08question\x18\x05 \x01(\t\x12\x1f\n\targuments\x18\x06 \x03(\x0b\x32\x0c.sysml.Value\x12L\n\x0fnamed_arguments\x18\x07 \x03(\x0b\x32\x33.sysml.VerifyRequirementRequest.NamedArgumentsEntry\x1a\x43\n\x13NamedArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"m\n\x13VerificationVerdict\x12\x0f\n\x07\x63\x61se_id\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0e\n\x06\x64\x65tail\x18\x03 \x01(\t\x12\x0f\n\x07subcase\x18\x04 \x01(\x08\x12\x16\n\x0erequirement_id\x18\x05 \x01(\t\"\xd2\x01\n\x19VerifyRequirementResponse\x12\x1f\n\x07verdict\x18\x01 \x01(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x02 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x39\n\x15verification_verdicts\x18\x05 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\"d\n\x19VerifySatisfactionRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x03 \x01(\t\x12\x10\n\x08question\x18\x04 \x01(\t\"\x82\x02\n\x1aVerifySatisfactionResponse\x12 \n\x08verdicts\x18\x01 \x03(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x02 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x05 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x39\n\x15verification_verdicts\x18\x06 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\"P\n\x17ValidateInstanceRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x03 \x01(\t\"\xb2\x02\n\x18ValidateInstanceResponse\x12 \n\x08verdicts\x18\x01 \x03(\x0b\x32\x0e.sysml.Verdict\x12\x1f\n\x07summary\x18\x02 \x01(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x03 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x06 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x39\n\x15verification_verdicts\x18\x07 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\x12\x0f\n\x07\x62ounded\x18\x08 \x01(\x08\"m\n\x13\x45valuateCalcRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x1f\n\targuments\x18\x03 \x03(\x0b\x32\x0c.sysml.Value\x12\x0e\n\x06\x65ngine\x18\x04 \x01(\t\"\xfd\x01\n\x14\x45valuateCalcResponse\x12\x1c\n\x06result\x18\x01 \x01(\x0b\x32\x0c.sysml.Value\x12\"\n\x07outputs\x18\x02 \x03(\x0b\x32\x11.sysml.CalcOutput\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x05 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x0e\n\x06\x65ngine\x18\x06 \x01(\t\x12\x10\n\x08strength\x18\x07 \x01(\t\x12\x1c\n\x06\x62ounds\x18\x08 \x03(\x0b\x32\x0c.sysml.Bound\"7\n\nCalcOutput\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\"\x93\x01\n\x0e\x43\x61seEvaluation\x12\x13\n\x0b\x66unction_id\x18\x01 \x01(\t\x12\x1f\n\targuments\x18\x02 \x03(\x0b\x32\x0c.sysml.Value\x12\x1c\n\x06result\x18\x03 \x01(\x0b\x32\x0c.sysml.Value\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x10\n\x08selected\x18\x05 \x01(\x08\x12\x0c\n\x04tied\x18\x06 \x01(\x08\"\xa6\x02\n\x12RunAnalysisRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x1f\n\targuments\x18\x04 \x03(\x0b\x32\x0c.sysml.Value\x12\x46\n\x0fnamed_arguments\x18\x05 \x03(\x0b\x32-.sysml.RunAnalysisRequest.NamedArgumentsEntry\x12\x10\n\x08schedule\x18\x06 \x01(\t\x12\x0e\n\x06\x65ngine\x18\x07 \x01(\t\x1a\x43\n\x13NamedArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xdc\x03\n\x13RunAnalysisResponse\x12\"\n\x07outputs\x18\x01 \x03(\x0b\x32\x11.sysml.CalcOutput\x12 \n\x08verdicts\x18\x02 \x03(\x0b\x32\x0e.sysml.Verdict\x12\"\n\tinstances\x18\x03 \x03(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x06 \x01(\x0e\x32\x14.sysml.FailureReason\x12\x39\n\x15verification_verdicts\x18\x07 \x03(\x0b\x32\x1a.sysml.VerificationVerdict\x12 \n\x08outcomes\x18\x08 \x03(\x0b\x32\x0e.sysml.Outcome\x12-\n\x0b\x65xploration\x18\t \x01(\x0b\x32\x18.sysml.ExplorationStatus\x12*\n\x0b\x65valuations\x18\n \x03(\x0b\x32\x15.sysml.CaseEvaluation\x12\x0e\n\x06\x65ngine\x18\x0b \x01(\t\x12\x10\n\x08strength\x18\x0c \x01(\t\x12\x1c\n\x06\x62ounds\x18\r \x03(\x0b\x32\x0c.sysml.Bound\",\n\x10ProbabilityRange\x12\x0b\n\x03min\x18\x01 \x01(\x01\x12\x0b\n\x03max\x18\x02 \x01(\x01\"\xcb\x02\n\x07Outcome\x12,\n\x07outputs\x18\x01 \x03(\x0b\x32\x1b.sysml.Outcome.OutputsEntry\x12\x13\n\x0b\x66inal_state\x18\x02 \x01(\t\x12\x16\n\x0estates_visited\x18\x03 \x03(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x16\n\x0elinearizations\x18\x05 \x01(\x05\x12\x0f\n\x07witness\x18\x06 \x03(\t\x12&\n\x0b\x64iagnostics\x18\x07 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x13\n\x0bprobability\x18\x08 \x01(\x01\x12\x32\n\x11probability_range\x18\t \x01(\x0b\x32\x17.sysml.ProbabilityRange\x1a<\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xb5\x01\n\x11\x45xplorationStatus\x12\x10\n\x08\x63omplete\x18\x01 \x01(\x08\x12\x0c\n\x04runs\x18\x02 \x01(\x05\x12\x13\n\x0b\x62udgets_hit\x18\x03 \x03(\t\x12\x13\n\x0bruns_budget\x18\x04 \x01(\x05\x12\x14\n\x0c\x64\x65pth_budget\x18\x05 \x01(\x05\x12!\n\x19probabilities_lower_bound\x18\x06 \x01(\x08\x12\x1d\n\x15\x66\x61iled_linearizations\x18\x07 \x01(\x05\"\x14\n\x12ListEnginesRequest\"\xfc\x01\n\nEngineInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tauthority\x18\x02 \x01(\t\x12\x0f\n\x07\x61nswers\x18\x03 \x03(\t\x12\x0e\n\x06\x62ounds\x18\x04 \x03(\t\x12\x0f\n\x07process\x18\x05 \x01(\t\x12\x15\n\rprocess_found\x18\x06 \x01(\t\x12\r\n\x05ready\x18\x07 \x01(\x08\x12\x13\n\x0bunavailable\x18\x08 \x01(\t\x12\x0c\n\x04kind\x18\t \x01(\t\x12\x10\n\x08protocol\x18\n \x01(\t\x12\x0e\n\x06source\x18\x0b \x01(\t\x12\x0f\n\x07\x63ommand\x18\x0c \x01(\t\x12\x0f\n\x07version\x18\r \x01(\t\x12\x0e\n\x06served\x18\x0e \x01(\x08\"9\n\x13ListEnginesResponse\x12\"\n\x07\x65ngines\x18\x01 \x03(\x0b\x32\x11.sysml.EngineInfo\"\x8c\x01\n\x10ParseFileRequest\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x18\n\x0c\x63ontent_hash\x18\x03 \x01(\tB\x02\x18\x01\x12\x10\n\x08language\x18\x04 \x01(\t\x12\x1a\n\x12strict_conformance\x18\x05 \x01(\x08\x42\x08\n\x06source\"b\n\x0eSourceDocument\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x10\n\x08language\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\tB\x08\n\x06source\"t\n\x13ParseSourcesRequest\x12(\n\tdocuments\x18\x01 \x03(\x0b\x32\x15.sysml.SourceDocument\x12\x1a\n\x12strict_conformance\x18\x02 \x01(\x08\x12\x17\n\x0f\x62\x61se_model_hash\x18\x03 \x01(\t\"\x95\x01\n\x14ParseSourcesResponse\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12 \n\x05roots\x18\x02 \x03(\x0b\x32\x11.sysml.SymbolInfo\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x10\n\x08\x61\x66\x66\x65\x63ted\x18\x05 \x03(\t\"\x7f\n\x11ParseFileResponse\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x1f\n\x04root\x18\x02 \x01(\x0b\x32\x11.sysml.SymbolInfo\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"9\n\x10GetSymbolRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\"B\n\x0eSymbolResponse\x12!\n\x06symbol\x18\x01 \x01(\x0b\x32\x11.sysml.SymbolInfo\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"(\n\x12\x44iagnosticsRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\"L\n\x13\x44iagnosticsResponse\x12&\n\x0b\x64iagnostics\x18\x01 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"o\n\x0f\x45valuateRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x12\n\nexpression\x18\x02 \x01(\t\x12\x19\n\x11\x63ontext_symbol_id\x18\x03 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x04 \x01(\t\"g\n\x10\x45valuateResponse\x12\x1c\n\x06result\x18\x01 \x01(\x0b\x32\x0c.sysml.Value\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\"\xc2\x01\n\x08Instance\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x16\n\x0etype_symbol_id\x18\x02 \x01(\t\x12:\n\x0e\x66\x65\x61ture_values\x18\x04 \x03(\x0b\x32\".sysml.Instance.FeatureValuesEntry\x1aI\n\x12\x46\x65\x61tureValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.sysml.FeatureValue:\x02\x38\x01J\x04\x08\x03\x10\x04R\x05slots\"\x84\x01\n\x0c\x46\x65\x61tureValue\x12\x14\n\x0c\x66\x65\x61ture_name\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\x12\x1c\n\x06values\x18\x03 \x03(\x0b\x32\x0c.sysml.Value\x12\x14\n\x0cmaterialized\x18\x04 \x01(\x08\x12\r\n\x05\x65rror\x18\x05 \x01(\t\";\n\x12InstantiateRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\"\x93\x01\n\x13InstantiateResponse\x12!\n\x08instance\x18\x01 \x01(\x0b\x32\x0f.sysml.Instance\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\"\n\tinstances\x18\x04 \x03(\x0b\x32\x0f.sysml.Instance\"\xe9\x01\n\x14\x45xecuteActionRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x18\n\x10\x61\x63tion_symbol_id\x18\x02 \x01(\t\x12\x37\n\x06inputs\x18\x03 \x03(\x0b\x32\'.sysml.ExecuteActionRequest.InputsEntry\x12\x10\n\x08schedule\x18\x04 \x01(\t\x12\x1b\n\x13performer_symbol_id\x18\x05 \x01(\t\x1a;\n\x0bInputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xcc\x03\n\x15\x45xecuteActionResponse\x12:\n\x07outputs\x18\x01 \x03(\x0b\x32).sysml.ExecuteActionResponse.OutputsEntry\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x03 \x03(\x0b\x32\x11.sysml.Diagnostic\x12 \n\x08outcomes\x18\x04 \x03(\x0b\x32\x0e.sysml.Outcome\x12-\n\x0b\x65xploration\x18\x05 \x01(\x0b\x32\x18.sysml.ExplorationStatus\x12\x12\n\nfinal_time\x18\x06 \x01(\x01\x12S\n\x14performer_attributes\x18\x07 \x03(\x0b\x32\x35.sysml.ExecuteActionResponse.PerformerAttributesEntry\x1a<\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\x1aH\n\x18PerformerAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\x98\x01\n\x13\x45xecuteStateRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x1f\n\x17state_machine_symbol_id\x18\x02 \x01(\t\x12\x0e\n\x06\x65vents\x18\x03 \x03(\t\x12\x10\n\x08schedule\x18\x04 \x01(\t\x12\x1b\n\x13performer_symbol_id\x18\x05 \x01(\t\x12\r\n\x05trace\x18\x06 \x01(\x08\"\x8f\x03\n\x14\x45xecuteStateResponse\x12\x16\n\x0estates_visited\x18\x01 \x03(\t\x12\x44\n\rfinal_context\x18\x02 \x03(\x0b\x32-.sysml.ExecuteStateResponse.FinalContextEntry\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x04 \x03(\x0b\x32\x11.sysml.Diagnostic\x12 \n\x08outcomes\x18\x05 \x03(\x0b\x32\x0e.sysml.Outcome\x12-\n\x0b\x65xploration\x18\x06 \x01(\x0b\x32\x18.sysml.ExplorationStatus\x12\x12\n\nfinal_time\x18\x07 \x01(\x01\x12#\n\x05trace\x18\x08 \x03(\x0b\x32\x14.sysml.DocumentEvent\x12\x15\n\rtrace_dropped\x18\t \x01(\x05\x1a\x41\n\x11\x46inalContextEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\x81\x02\n\x0e\x43onvertRequest\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x14\n\nmodel_hash\x18\x06 \x01(\tH\x00\x12\x13\n\x0b\x66rom_format\x18\x03 \x01(\t\x12\x11\n\tto_format\x18\x04 \x01(\t\x12\x1e\n\x16tolerate_syntax_errors\x18\x05 \x01(\x08\x12\x0f\n\x07id_form\x18\x07 \x01(\t\x12\x11\n\tdocuments\x18\x08 \x03(\t\x12\x0f\n\x07\x63ompact\x18\t \x01(\x08\x12\x14\n\x0comit_derived\x18\n \x01(\x08\x12\x14\n\x0ckeep_derived\x18\x0b \x03(\tB\x08\n\x06source\"\xb4\x01\n\x0f\x43onvertResponse\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x13\n\x0b\x66rom_format\x18\x02 \x01(\t\x12\x11\n\tto_format\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x14\n\x0c\x65xperimental\x18\x06 \x01(\x08\x12\x1b\n\x13\x65xperimental_notice\x18\x07 \x01(\t\"\xee\x01\n\x0eMigrateRequest\x12\x13\n\tfile_path\x18\x01 \x01(\tH\x00\x12\x11\n\x07\x63ontent\x18\x02 \x01(\x0cH\x00\x12\x13\n\x0b\x66rom_format\x18\x03 \x01(\t\x12\x11\n\tto_format\x18\x04 \x01(\t\x12\x0e\n\x06report\x18\x05 \x01(\x08\x12\x0f\n\x07results\x18\x06 \x01(\x08\x12\x15\n\x0blayout_path\x18\x07 \x01(\tH\x01\x12\x18\n\x0elayout_content\x18\x08 \x01(\tH\x01\x12\x16\n\x0eimage_base_url\x18\t \x01(\t\x12\x0e\n\x06strict\x18\n \x01(\x08\x42\x08\n\x06sourceB\x08\n\x06layout\"\xea\x01\n\x0fMigrateResponse\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x13\n\x0b\x66rom_format\x18\x02 \x01(\t\x12\x11\n\tto_format\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x14\n\x0c\x65xperimental\x18\x05 \x01(\x08\x12\x1b\n\x13\x65xperimental_notice\x18\x06 \x01(\t\x12&\n\x06report\x18\x07 \x01(\x0b\x32\x16.sysml.MigrationReport\x12\x0f\n\x07results\x18\x08 \x01(\t\x12#\n\x05\x66iles\x18\t \x03(\x0b\x32\x14.sysml.MigrationFile\"\xc3\x01\n\x0fMigrationReport\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x10\n\x08\x65xporter\x18\x02 \x01(\t\x12\x0f\n\x07summary\x18\x03 \x01(\t\x12\x0e\n\x06mapped\x18\x04 \x01(\x05\x12\x14\n\x0c\x61pproximated\x18\x05 \x01(\x05\x12\x10\n\x08unmapped\x18\x06 \x01(\x05\x12\x0f\n\x07skipped\x18\x07 \x01(\x05\x12&\n\x07\x65ntries\x18\x08 \x03(\x0b\x32\x15.sysml.MigrationEntry\x12\x0c\n\x04text\x18\t \x01(\t\"g\n\x0eMigrationEntry\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x0f\n\x07verdict\x18\x05 \x01(\t\x12\x0c\n\x04note\x18\x06 \x01(\t\".\n\rMigrationFile\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\x0c\"}\n\x11\x41pplyEditsRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12(\n\noperations\x18\x02 \x03(\x0b\x32\x14.sysml.EditOperation\x12\x10\n\x08\x64ocument\x18\x03 \x01(\t\x12\x18\n\x10\x61\x63\x63\x65pt_documents\x18\x04 \x01(\x08\"\xc3\x06\n\rEditOperation\x12(\n\tset_value\x18\x01 \x01(\x0b\x32\x13.sysml.SetValueEditH\x00\x12#\n\x06rename\x18\x02 \x01(\x0b\x32\x11.sysml.RenameEditH\x00\x12*\n\nadd_member\x18\x03 \x01(\x0b\x32\x14.sysml.AddMemberEditH\x00\x12#\n\x06\x64\x65lete\x18\x04 \x01(\x0b\x32\x11.sysml.DeleteEditH\x00\x12\x1f\n\x04move\x18\x05 \x01(\x0b\x32\x0f.sysml.MoveEditH\x00\x12\x32\n\x0e\x61\x64\x64_connection\x18\x06 \x01(\x0b\x32\x18.sysml.AddConnectionEditH\x00\x12,\n\x0b\x61\x64\x64_satisfy\x18\x07 \x01(\x0b\x32\x15.sysml.AddSatisfyEditH\x00\x12I\n\x1a\x61\x64\x64_requirement_constraint\x18\x08 \x01(\x0b\x32#.sysml.AddRequirementConstraintEditH\x00\x12\x32\n\x0e\x61\x64\x64_transition\x18\t \x01(\x0b\x32\x18.sysml.AddTransitionEditH\x00\x12*\n\nadd_import\x18\n \x01(\x0b\x32\x14.sysml.AddImportEditH\x00\x12\x38\n\x11\x61\x64\x64_documentation\x18\x0b \x01(\x0b\x32\x1b.sysml.AddDocumentationEditH\x00\x12*\n\nadd_verify\x18\x0c \x01(\x0b\x32\x14.sysml.AddVerifyEditH\x00\x12.\n\x0c\x61\x64\x64_metadata\x18\r \x01(\x0b\x32\x16.sysml.AddMetadataEditH\x00\x12.\n\x0c\x61\x64\x64_sequence\x18\x0e \x01(\x0b\x32\x16.sysml.AddSequenceEditH\x00\x12;\n\x13\x61\x64\x64_metadata_prefix\x18\x0f \x01(\x0b\x32\x1c.sysml.AddMetadataPrefixEditH\x00\x12,\n\x0b\x61\x64\x64_comment\x18\x10 \x01(\x0b\x32\x15.sysml.AddCommentEditH\x00\x12&\n\x08\x61\x64\x64_note\x18\x12 \x01(\x0b\x32\x12.sysml.AddNoteEditH\x00\x42\x0b\n\toperation\"\x92\x02\n\rAddMemberEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0c\n\x04type\x18\x04 \x01(\t\x12\x14\n\x0cmultiplicity\x18\x05 \x01(\t\x12\r\n\x05value\x18\x06 \x01(\t\x12\x13\n\x0bspecializes\x18\x07 \x03(\t\x12\x13\n\x0bis_abstract\x18\x08 \x01(\x08\x12\x11\n\tredefines\x18\t \x03(\t\x12\x12\n\nis_default\x18\n \x01(\x08\x12\x11\n\tdirection\x18\x0b \x01(\t\x12\x19\n\x11metadata_prefixes\x18\x0e \x03(\t\x12\x0b\n\x03\x64oc\x18\x0c \x01(\t\x12\x17\n\x0f\x62ody_expression\x18\r \x01(\t\"y\n\x0e\x41\x64\x64SatisfyEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x13\n\x0brequirement\x18\x02 \x01(\t\x12\x1a\n\x12satisfying_feature\x18\x03 \x01(\t\x12\x13\n\x0bis_asserted\x18\x04 \x01(\x08\x12\x12\n\nis_negated\x18\x05 \x01(\x08\"]\n\x1c\x41\x64\x64RequirementConstraintEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x12\n\nexpression\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\"\x91\x01\n\x11\x41\x64\x64TransitionEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x0f\n\x07trigger\x18\x05 \x01(\t\x12\r\n\x05guard\x18\x06 \x01(\t\x12\x0e\n\x06\x65\x66\x66\x65\x63t\x18\x07 \x01(\t\x12\x0f\n\x07initial\x18\x08 \x01(\x08\"3\n\rAddVerifyEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x13\n\x0brequirement\x18\x02 \x01(\t\"6\n\x14MetadataFeatureValue\x12\x0f\n\x07\x66\x65\x61ture\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x94\x01\n\x0f\x41\x64\x64MetadataEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x15\n\rmetadata_type\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\r\n\x05\x61\x62out\x18\x04 \x03(\t\x12+\n\x06values\x18\x05 \x03(\x0b\x32\x1b.sysml.MetadataFeatureValue\x12\x11\n\tshorthand\x18\x06 \x01(\x08\">\n\x15\x41\x64\x64MetadataPrefixEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x15\n\rmetadata_type\x18\x02 \x01(\t\"\x80\x01\n\rAddImportEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x12\n\nvisibility\x18\x02 \x01(\t\x12\x0e\n\x06target\x18\x03 \x01(\t\x12\x14\n\x0cis_recursive\x18\x04 \x01(\x08\x12\x15\n\ris_import_all\x18\x05 \x01(\x08\x12\x0f\n\x07\x66ilters\x18\x06 \x03(\t\"c\n\x14\x41\x64\x64\x44ocumentationEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0c\n\x04\x62ody\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0e\n\x06locale\x18\x04 \x01(\t\x12\x0f\n\x07replace\x18\x05 \x01(\x08\"Z\n\x0e\x41\x64\x64\x43ommentEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04\x62ody\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\r\n\x05\x61\x62out\x18\x04 \x03(\t\x12\x0e\n\x06locale\x18\x05 \x01(\t\"+\n\x0b\x41\x64\x64NoteEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\"\xcd\x02\n\x0f\x41\x64\x64SequenceEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0f\n\x07keyword\x18\x02 \x01(\t\x12\x0b\n\x03ref\x18\x03 \x01(\t\x12\x13\n\x0bmember_kind\x18\x04 \x01(\t\x12\x13\n\x0bmember_name\x18\x05 \x01(\t\x12\x0c\n\x04type\x18\x06 \x01(\t\x12\r\n\x05\x61\x66ter\x18\x07 \x01(\t\x12\x11\n\tcondition\x18\x08 \x01(\t\x12\r\n\x05value\x18\t \x01(\t\x12\x0e\n\x06target\x18\n \x01(\t\x12\x0b\n\x03via\x18\x0b \x01(\t\x12\r\n\x05until\x18\x0c \x01(\t\x12$\n\x04\x62ody\x18\r \x03(\x0b\x32\x16.sysml.AddSequenceEdit\x12)\n\telse_body\x18\x0e \x03(\x0b\x32\x16.sysml.AddSequenceEdit\x12\x14\n\x0cmultiplicity\x18\x0f \x01(\t\x12\x11\n\tparameter\x18\x10 \x01(\t\"n\n\x11\x41\x64\x64\x43onnectionEdit\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x10\n\x08\x66rom_end\x18\x03 \x01(\t\x12\x0e\n\x06to_end\x18\x04 \x01(\t\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x0c\n\x04type\x18\x06 \x01(\t\"-\n\nDeleteEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x0f\n\x07\x63\x61scade\x18\x02 \x01(\x08\")\n\x08MoveEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\r\n\x05owner\x18\x02 \x01(\t\"-\n\x0cSetValueEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\".\n\nRenameEdit\x12\x0e\n\x06target\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"\x90\x02\n\x12\x41pplyEditsResponse\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12#\n\x07\x61pplied\x18\x02 \x03(\x0b\x32\x12.sysml.AppliedEdit\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12#\n\x07\x66\x61ilure\x18\x04 \x01(\x0e\x32\x12.sysml.EditFailure\x12&\n\x0b\x64iagnostics\x18\x05 \x03(\x0b\x32\x11.sysml.Diagnostic\x12\x1a\n\x12referring_elements\x18\x06 \x03(\t\x12(\n\tdocuments\x18\x07 \x03(\x0b\x32\x15.sysml.EditedDocument\x12\"\n\treferrers\x18\x08 \x03(\x0b\x32\x0f.sysml.Referrer\"/\n\x0e\x45\x64itedDocument\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\t\"*\n\x08Referrer\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08\x64ocument\x18\x02 \x01(\t\"\x8c\x01\n\x0b\x41ppliedEdit\x12\x17\n\x0foperation_index\x18\x01 \x01(\x05\x12\x0e\n\x06target\x18\x02 \x01(\t\x12\x0e\n\x06offset\x18\x03 \x01(\x05\x12\x0e\n\x06length\x18\x04 \x01(\x05\x12\x10\n\x08old_text\x18\x05 \x01(\t\x12\x10\n\x08new_text\x18\x06 \x01(\t\x12\x10\n\x08\x64ocument\x18\x07 \x01(\t\"\xfd\x02\n\nSymbolInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04kind\x18\x03 \x01(\t\x12\x31\n\x08metadata\x18\x04 \x03(\x0b\x32\x1f.sysml.SymbolInfo.MetadataEntry\x12\x11\n\tchild_ids\x18\x05 \x03(\t\x12(\n\nattributes\x18\x06 \x03(\x0b\x32\x14.sysml.AttributeInfo\x12\"\n\ttype_info\x18\x07 \x01(\x0b\x32\x0f.sysml.TypeInfo\x12-\n\x0cmultiplicity\x18\x08 \x01(\x0b\x32\x17.sysml.MultiplicityInfo\x12.\n\x0fspecializations\x18\t \x03(\x0b\x32\x15.sysml.Specialization\x12#\n\x1bwithheld_library_attributes\x18\n \x01(\x05\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"X\n\x0eSpecialization\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x10\n\x08\x64\x65\x63lared\x18\x02 \x01(\t\x12\x11\n\ttarget_id\x18\x03 \x01(\t\x12\x13\n\x0btarget_kind\x18\x04 \x01(\t\"\x95\x01\n\x08TypeInfo\x12\x10\n\x08\x64\x65\x63lared\x18\x01 \x01(\t\x12\x13\n\x0bresolved_id\x18\x02 \x01(\t\x12\x15\n\rresolved_kind\x18\x03 \x01(\t\x12\x11\n\tprimitive\x18\x04 \x01(\t\x12\x18\n\x10primitive_source\x18\x05 \x01(\t\x12\x10\n\x08quantity\x18\x06 \x01(\x08\x12\x0c\n\x04unit\x18\x07 \x01(\t\"0\n\x10MultiplicityInfo\x12\r\n\x05lower\x18\x01 \x01(\t\x12\r\n\x05upper\x18\x02 \x01(\t\"V\n\rAttributeInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x1b\n\x05value\x18\x03 \x01(\x0b\x32\x0c.sysml.Value\x12\x0c\n\x04unit\x18\x04 \x01(\t\"\x87\x06\n\x05Value\x12\x13\n\tint_value\x18\x01 \x01(\x03H\x00\x12\x14\n\nreal_value\x18\x02 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x12\x16\n\x0cstring_value\x18\x04 \x01(\tH\x00\x12\x15\n\x0binstance_id\x18\x05 \x01(\x03H\x00\x12(\n\x08sequence\x18\x06 \x01(\x0b\x32\x14.sysml.ValueSequenceH\x00\x12\x0e\n\x04null\x18\x07 \x01(\tH\x00\x12#\n\x08quantity\x18\x08 \x01(\x0b\x32\x0f.sysml.QuantityH\x00\x12*\n\x0c\x65num_literal\x18\t \x01(\x0b\x32\x12.sysml.EnumLiteralH\x00\x12\x0f\n\x05unset\x18\n \x01(\x08H\x00\x12!\n\x07\x63omplex\x18\x0b \x01(\x0b\x32\x0e.sysml.ComplexH\x00\x12\x1d\n\x05\x61rray\x18\x0c \x01(\x0b\x32\x0c.sysml.ArrayH\x00\x12\x1f\n\x06vector\x18\r \x01(\x0b\x32\r.sysml.VectorH\x00\x12\x30\n\x0fvector_quantity\x18\x0e \x01(\x0b\x32\x15.sysml.VectorQuantityH\x00\x12\x30\n\x0fmeasurement_ref\x18\x0f \x01(\x0b\x32\x15.sysml.MeasurementRefH\x00\x12\x12\n\x08infinity\x18\x10 \x01(\x08H\x00\x12#\n\x08\x66unction\x18\x11 \x01(\x0b\x32\x0f.sysml.FunctionH\x00\x12\x1e\n\x03set\x18\x12 \x01(\x0b\x32\x0f.sysml.ValueSetH\x00\x12\x30\n\x0ftensor_quantity\x18\x13 \x01(\x0b\x32\x15.sysml.TensorQuantityH\x00\x12\'\n\nmetaobject\x18\x14 \x01(\x0b\x32\x11.sysml.MetaobjectH\x00\x12+\n\x0cundetermined\x18\x15 \x01(\x0b\x32\x13.sysml.UndeterminedH\x00\x12\x17\n\rbig_int_value\x18\x16 \x01(\tH\x00\x12)\n\x0erational_value\x18\x17 \x01(\x0b\x32\x0f.sysml.RationalH\x00\x42\x06\n\x04kind\"2\n\x08Rational\x12\x11\n\tnumerator\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65nominator\x18\x02 \x01(\t\"6\n\nMetaobject\x12\x12\n\nelement_id\x18\x01 \x01(\t\x12\x14\n\x0cmetaclass_id\x18\x02 \x01(\t\"F\n\x0cUndetermined\x12\x0e\n\x06reason\x18\x01 \x01(\t\x12&\n\x05\x63ount\x18\x02 \x01(\x0b\x32\x17.sysml.MultiplicityInfo\",\n\x08\x46unction\x12\x0f\n\x07\x63\x61lc_id\x18\x01 \x01(\t\x12\x0f\n\x07self_id\x18\x02 \x01(\x03\"*\n\x08ValueSet\x12\x1e\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x0c.sysml.Value\"I\n\x0eTensorQuantity\x12\x12\n\ndimensions\x18\x01 \x03(\x03\x12#\n\ncomponents\x18\x02 \x03(\x0b\x32\x0f.sysml.Quantity\";\n\x05\x41rray\x12\x12\n\ndimensions\x18\x01 \x03(\x03\x12\x1e\n\x08\x65lements\x18\x02 \x03(\x0b\x32\x0c.sysml.Value\"*\n\x06Vector\x12 \n\ncomponents\x18\x01 \x03(\x0b\x32\x0c.sysml.Value\"5\n\x0eVectorQuantity\x12#\n\ncomponents\x18\x01 \x03(\x0b\x32\x0f.sysml.Quantity\"*\n\x07\x43omplex\x12\x0c\n\x04real\x18\x01 \x01(\x01\x12\x11\n\timaginary\x18\x02 \x01(\x01\"d\n\x0b\x45numLiteral\x12\x12\n\nliteral_id\x18\x01 \x01(\t\x12\x16\n\x0e\x65numeration_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x1b\n\x05value\x18\x04 \x01(\x0b\x32\x0c.sysml.Value\"/\n\rValueSequence\x12\x1e\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x0c.sysml.Value\"\xc8\x01\n\x08Quantity\x12\x17\n\rint_magnitude\x18\x01 \x01(\x03H\x00\x12\x18\n\x0ereal_magnitude\x18\x02 \x01(\x01H\x00\x12\x1b\n\x11\x62ig_int_magnitude\x18\x05 \x01(\tH\x00\x12-\n\x12rational_magnitude\x18\x06 \x01(\x0b\x32\x0f.sysml.RationalH\x00\x12\x0c\n\x04unit\x18\x03 \x01(\t\x12\"\n\tunit_term\x18\x04 \x01(\x0b\x32\x0f.sysml.UnitTermB\x0b\n\tmagnitude\"S\n\x0eMeasurementRef\x12\x0c\n\x04unit\x18\x01 \x01(\t\x12\"\n\tunit_term\x18\x02 \x01(\x0b\x32\x0f.sysml.UnitTerm\x12\x0f\n\x07unit_id\x18\x03 \x01(\t\"T\n\x08UnitTerm\x12\x11\n\tscale_num\x18\x01 \x01(\x01\x12\x11\n\tscale_den\x18\x02 \x01(\x01\x12\"\n\x07\x66\x61\x63tors\x18\x03 \x03(\x0b\x32\x11.sysml.UnitFactor\"/\n\nUnitFactor\x12\x0f\n\x07unit_id\x18\x01 \x01(\t\x12\x10\n\x08\x65xponent\x18\x02 \x01(\x01\"X\n\nDiagnostic\x12\x10\n\x08severity\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x19\n\x04span\x18\x03 \x01(\x0b\x32\x0b.sysml.Span\x12\x0c\n\x04\x63ode\x18\x04 \x01(\t\"^\n\x04Span\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x12\n\nstart_line\x18\x02 \x01(\x05\x12\x11\n\tstart_col\x18\x03 \x01(\x05\x12\x10\n\x08\x65nd_line\x18\x04 \x01(\x05\x12\x0f\n\x07\x65nd_col\x18\x05 \x01(\x05\"\x13\n\x11ServerInfoRequest\";\n\x12ServerInfoResponse\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x02 \x03(\t\"S\n\x0cQueryRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x1b\n\x05query\x18\x02 \x01(\x0b\x32\x0c.sysml.Query\x12\x12\n\noslc_query\x18\x03 \x01(\t\"<\n\rQueryResponse\x12+\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x19.sysml.QueryResultElement\"H\n\x05Query\x12\r\n\x05scope\x18\x01 \x03(\t\x12\x0e\n\x06select\x18\x02 \x03(\t\x12 \n\x05where\x18\x03 \x01(\x0b\x32\x11.sysml.Constraint\"|\n\nConstraint\x12/\n\tprimitive\x18\x01 \x01(\x0b\x32\x1a.sysml.PrimitiveConstraintH\x00\x12/\n\tcomposite\x18\x02 \x01(\x0b\x32\x1a.sysml.CompositeConstraintH\x00\x42\x0c\n\nconstraint\"s\n\x13PrimitiveConstraint\x12\x0f\n\x07inverse\x18\x01 \x01(\x08\x12\x10\n\x08property\x18\x02 \x01(\t\x12*\n\x08operator\x18\x03 \x01(\x0e\x32\x18.sysml.PrimitiveOperator\x12\r\n\x05value\x18\x04 \x03(\t\"h\n\x13\x43ompositeConstraint\x12*\n\x08operator\x18\x01 \x01(\x0e\x32\x18.sysml.CompositeOperator\x12%\n\nconstraint\x18\x02 \x03(\x0b\x32\x11.sysml.Constraint\"\xa0\x01\n\x12QueryResultElement\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12=\n\nproperties\x18\x03 \x03(\x0b\x32).sysml.QueryResultElement.PropertiesEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"s\n\nSweepRange\x12\x11\n\tparameter\x18\x01 \x01(\t\x12\x1b\n\x05start\x18\x02 \x01(\x0b\x32\x0c.sysml.Value\x12\x19\n\x03\x65nd\x18\x03 \x01(\x0b\x32\x0c.sysml.Value\x12\x1a\n\x04step\x18\x04 \x01(\x0b\x32\x0c.sysml.Value\"\xd0\x02\n\x0fRunSweepRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x11\n\tsymbol_id\x18\x02 \x01(\t\x12\x19\n\x11subject_symbol_id\x18\x03 \x01(\t\x12\x1f\n\targuments\x18\x04 \x03(\x0b\x32\x0c.sysml.Value\x12\x43\n\x0fnamed_arguments\x18\x05 \x03(\x0b\x32*.sysml.RunSweepRequest.NamedArgumentsEntry\x12!\n\x06ranges\x18\x06 \x03(\x0b\x32\x11.sysml.SweepRange\x12\x0f\n\x07samples\x18\x07 \x01(\x03\x12\x0c\n\x04seed\x18\x08 \x01(\x04\x12\x0e\n\x06\x65ngine\x18\t \x01(\t\x1a\x43\n\x13NamedArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1b\n\x05value\x18\x02 \x01(\x0b\x32\x0c.sysml.Value:\x02\x38\x01\"\xf4\x01\n\x08SweepRow\x12!\n\x06inputs\x18\x01 \x03(\x0b\x32\x11.sysml.CalcOutput\x12\"\n\x07outputs\x18\x02 \x03(\x0b\x32\x11.sysml.CalcOutput\x12 \n\x08verdicts\x18\x03 \x03(\x0b\x32\x0e.sysml.Verdict\x12\x16\n\x0e\x65lapsed_micros\x18\x04 \x01(\x03\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12,\n\x0e\x66\x61ilure_reason\x18\x06 \x01(\x0e\x32\x14.sysml.FailureReason\x12*\n\x0b\x65valuations\x18\x07 \x03(\x0b\x32\x15.sysml.CaseEvaluation\"\xad\x02\n\x10RunSweepResponse\x12\x1d\n\x04rows\x18\x01 \x03(\x0b\x32\x0f.sysml.SweepRow\x12\x12\n\nparameters\x18\x02 \x03(\t\x12\x0f\n\x07sampled\x18\x03 \x01(\x08\x12\x0c\n\x04seed\x18\x04 \x01(\x04\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12&\n\x0b\x64iagnostics\x18\x06 \x03(\x0b\x32\x11.sysml.Diagnostic\x12,\n\x0e\x66\x61ilure_reason\x18\x07 \x01(\x0e\x32\x14.sysml.FailureReason\x12\"\n\tinstances\x18\x08 \x03(\x0b\x32\x0f.sysml.Instance\x12\x0e\n\x06\x65ngine\x18\t \x01(\t\x12\x10\n\x08strength\x18\n \x01(\t\x12\x1c\n\x06\x62ounds\x18\x0b \x03(\x0b\x32\x0c.sysml.Bound\"n\n\x17RunDocumentQueryRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x10\n\x08query_id\x18\x02 \x01(\t\x12-\n\x08\x62indings\x18\x03 \x03(\x0b\x32\x1b.sysml.DocumentQueryBinding\"O\n\x14\x44ocumentQueryBinding\x12\x11\n\tparameter\x18\x01 \x01(\t\x12$\n\x06values\x18\x02 \x03(\x0b\x32\x14.sysml.DocumentValue\"\xbb\x03\n\rDocumentValue\x12\x14\n\nelement_id\x18\x01 \x01(\tH\x00\x12\x16\n\x0cstring_value\x18\x02 \x01(\tH\x00\x12\x13\n\tint_value\x18\x03 \x01(\x03H\x00\x12\x14\n\nreal_value\x18\x04 \x01(\x01H\x00\x12\x14\n\nbool_value\x18\x05 \x01(\x08H\x00\x12\x12\n\x08infinity\x18\x06 \x01(\x08H\x00\x12#\n\x08quantity\x18\x08 \x01(\x0b\x32\x0f.sysml.QuantityH\x00\x12)\n\x07verdict\x18\t \x01(\x0b\x32\x16.sysml.DocumentVerdictH\x00\x12\'\n\x06object\x18\n \x01(\x0b\x32\x15.sysml.DocumentObjectH\x00\x12%\n\x05state\x18\x0b \x01(\x0b\x32\x14.sysml.DocumentStateH\x00\x12%\n\x05\x65vent\x18\x0c \x01(\x0b\x32\x14.sysml.DocumentEventH\x00\x12\x17\n\rbig_int_value\x18\r \x01(\tH\x00\x12)\n\x0erational_value\x18\x0e \x01(\x0b\x32\x0f.sysml.RationalH\x00\x12\x14\n\x0c\x65lement_type\x18\x07 \x01(\tB\x06\n\x04kind\"Z\n\x0e\x44ocumentObject\x12\x13\n\x0binstance_id\x18\x01 \x01(\x03\x12\x0c\n\x04path\x18\x02 \x01(\t\x12%\n\x07\x65lement\x18\x03 \x01(\x0b\x32\x14.sysml.DocumentValue\"\xae\x01\n\x0f\x44ocumentVerdict\x12\'\n\tassertion\x18\x01 \x01(\x0b\x32\x14.sysml.DocumentValue\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04text\x18\x03 \x01(\t\x12\x0c\n\x04path\x18\x04 \x01(\t\x12\x0f\n\x07verdict\x18\x05 \x01(\t\x12\x11\n\tcondition\x18\x06 \x01(\t\x12\x0e\n\x06reason\x18\x07 \x01(\t\x12\x14\n\x0cverification\x18\x08 \x03(\t\"\xb1\x01\n\rDocumentState\x12%\n\x06object\x18\x01 \x01(\x0b\x32\x15.sysml.DocumentObject\x12\x0f\n\x07machine\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x12\n\nstate_path\x18\x04 \x01(\t\x12#\n\x05state\x18\x05 \x01(\x0b\x32\x14.sysml.DocumentValue\x12\x0e\n\x06region\x18\x06 \x01(\t\x12\x11\n\tenclosing\x18\x07 \x03(\t\"\x9c\x02\n\rDocumentEvent\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\"\n\x04time\x18\x02 \x01(\x0b\x32\x14.sysml.DocumentValue\x12%\n\x06object\x18\x03 \x01(\x0b\x32\x15.sysml.DocumentObject\x12\x0f\n\x07machine\x18\x04 \x01(\t\x12\r\n\x05state\x18\x05 \x01(\t\x12\x0c\n\x04\x66rom\x18\x06 \x01(\t\x12\n\n\x02to\x18\x07 \x01(\t\x12%\n\x06target\x18\x08 \x01(\x0b\x32\x15.sysml.DocumentObject\x12\r\n\x05\x65vent\x18\t \x01(\t\x12\x0f\n\x07payload\x18\n \x03(\t\x12\x14\n\x0c\x61lternatives\x18\x0b \x03(\t\x12\r\n\x05taken\x18\x0c \x01(\t\x12\x0c\n\x04text\x18\r \x01(\t\"#\n\x13\x44ocumentQueryColumn\x12\x0c\n\x04name\x18\x01 \x01(\t\"9\n\x11\x44ocumentQueryCell\x12$\n\x06values\x18\x01 \x03(\x0b\x32\x14.sysml.DocumentValue\"b\n\x10\x44ocumentQueryRow\x12%\n\x07\x65lement\x18\x01 \x01(\x0b\x32\x14.sysml.DocumentValue\x12\'\n\x05\x63\x65lls\x18\x02 \x03(\x0b\x32\x18.sysml.DocumentQueryCell\"n\n\x18RunDocumentQueryResponse\x12+\n\x07\x63olumns\x18\x01 \x03(\x0b\x32\x1a.sysml.DocumentQueryColumn\x12%\n\x04rows\x18\x02 \x03(\x0b\x32\x17.sysml.DocumentQueryRow\"N\n\x15RenderDocumentRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x13\n\x0b\x64ocument_id\x18\x02 \x01(\t\x12\x0c\n\x04\x66orm\x18\x03 \x01(\t\"8\n\x16RenderDocumentResponse\x12\x10\n\x08markdown\x18\x01 \x01(\t\x12\x0c\n\x04html\x18\x02 \x01(\t\"D\n\x11RenderViewRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x0c\n\x04view\x18\x02 \x01(\t\x12\r\n\x05ports\x18\x03 \x01(\t\"\x8d\x02\n\x12RenderViewResponse\x12\x0c\n\x04view\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0e\n\x06stated\x18\x03 \x01(\t\x12 \n\x05nodes\x18\x04 \x03(\x0b\x32\x11.sysml.RenderNode\x12 \n\x05\x65\x64ges\x18\x05 \x03(\x0b\x32\x11.sysml.RenderEdge\x12\x0f\n\x07\x63olumns\x18\x06 \x03(\t\x12\x1e\n\x04rows\x18\x07 \x03(\x0b\x32\x10.sysml.RenderRow\x12#\n\x06\x63\x61nvas\x18\x08 \x01(\x0b\x32\x13.sysml.RenderCanvas\x12 \n\x05notes\x18\t \x03(\x0b\x32\x11.sysml.RenderNote\x12\x0f\n\x07notices\x18\n \x03(\t\"\xa7\x02\n\nRenderNode\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x18\n\x10name_synthesized\x18\x04 \x01(\x08\x12\x0c\n\x04type\x18\x05 \x01(\t\x12\x0e\n\x06\x64\x65tail\x18\x06 \x01(\t\x12\x0c\n\x04text\x18\x07 \x01(\t\x12\x10\n\x08stand_in\x18\x08 \x01(\x08\x12\x0e\n\x06parent\x18\t \x01(\t\x12 \n\x05ports\x18\n \x03(\x0b\x32\x11.sysml.RenderPort\x12\x1b\n\x06origin\x18\x0b \x01(\x0b\x32\x0b.sysml.Span\x12\'\n\x08geometry\x18\x0c \x01(\x0b\x32\x15.sysml.RenderGeometry\x12!\n\x05style\x18\r \x01(\x0b\x32\x12.sysml.RenderStyle\"G\n\nRenderPort\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04type\x18\x03 \x01(\t\x12\x11\n\tdirection\x18\x04 \x01(\t\"\xd8\x01\n\nRenderEdge\x12\x0c\n\x04\x66rom\x18\x01 \x01(\t\x12\n\n\x02to\x18\x02 \x01(\t\x12\x11\n\tfrom_port\x18\x03 \x01(\t\x12\x0f\n\x07to_port\x18\x04 \x01(\t\x12\r\n\x05label\x18\x05 \x01(\t\x12\x0c\n\x04name\x18\x06 \x01(\t\x12\x0c\n\x04kind\x18\x07 \x01(\t\x12\x1b\n\x06origin\x18\x08 \x01(\x0b\x32\x0b.sysml.Span\x12!\n\x05route\x18\t \x03(\x0b\x32\x12.sysml.RenderPoint\x12!\n\x05style\x18\n \x01(\x0b\x32\x12.sysml.RenderStyle\"j\n\x0eRenderGeometry\x12\t\n\x01x\x18\x01 \x01(\x01\x12\t\n\x01y\x18\x02 \x01(\x01\x12\r\n\x05width\x18\x03 \x01(\x01\x12\x0e\n\x06height\x18\x04 \x01(\x01\x12\x10\n\x08has_size\x18\x05 \x01(\x08\x12\x11\n\tcollapsed\x18\x06 \x01(\x08\"M\n\x0cRenderCanvas\x12\x0c\n\x04unit\x18\x01 \x01(\t\x12\r\n\x05width\x18\x02 \x01(\x01\x12\x0e\n\x06height\x18\x03 \x01(\x01\x12\x10\n\x08has_size\x18\x04 \x01(\x08\"v\n\x0bRenderStyle\x12\x0c\n\x04\x66ill\x18\x01 \x01(\t\x12\x0c\n\x04line\x18\x02 \x01(\t\x12\x0c\n\x04text\x18\x03 \x01(\t\x12\x0c\n\x04\x66ont\x18\x04 \x01(\t\x12\x11\n\tfont_size\x18\x05 \x01(\x01\x12\x0c\n\x04\x62old\x18\x06 \x01(\x08\x12\x0e\n\x06italic\x18\x07 \x01(\x08\"#\n\x0bRenderPoint\x12\t\n\x01x\x18\x01 \x01(\x01\x12\t\n\x01y\x18\x02 \x01(\x01\"7\n\tRenderRow\x12\r\n\x05\x63\x65lls\x18\x01 \x03(\t\x12\x1b\n\x06origin\x18\x02 \x01(\x0b\x32\x0b.sysml.Span\"\xb2\x01\n\nRenderNote\x12\x0c\n\x04text\x18\x01 \x01(\t\x12\x0e\n\x06\x61nchor\x18\x02 \x01(\t\x12\x11\n\tedge_from\x18\x03 \x01(\t\x12\x0f\n\x07\x65\x64ge_to\x18\x04 \x01(\t\x12\t\n\x01x\x18\x05 \x01(\x01\x12\t\n\x01y\x18\x06 \x01(\x01\x12\r\n\x05width\x18\x07 \x01(\x01\x12\x0e\n\x06height\x18\x08 \x01(\x01\x12\x10\n\x08has_size\x18\t \x01(\x08\x12\x1b\n\x06origin\x18\n \x01(\x0b\x32\x0b.sysml.Span\":\n\x13\x45xportGraphsRequest\x12\x12\n\nmodel_hash\x18\x01 \x01(\t\x12\x0f\n\x07subject\x18\x02 \x01(\t\"I\n\x14\x45xportGraphsResponse\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12\x0f\n\x07subject\x18\x03 \x01(\t*\xb1\x01\n\rFailureReason\x12\x1e\n\x1a\x46\x41ILURE_REASON_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x46\x41ILURE_REASON_EVALUATION\x10\x01\x12\x1d\n\x19\x46\x41ILURE_REASON_WRONG_KIND\x10\x02\x12$\n FAILURE_REASON_AMBIGUOUS_SUBJECT\x10\x03\x12\x1c\n\x18\x46\x41ILURE_REASON_UNDECIDED\x10\x04*\x8c\x05\n\x0b\x45\x64itFailure\x12\x1c\n\x18\x45\x44IT_FAILURE_UNSPECIFIED\x10\x00\x12\x1e\n\x1a\x45\x44IT_FAILURE_NO_OPERATIONS\x10\x01\x12\x1f\n\x1b\x45\x44IT_FAILURE_UNKNOWN_TARGET\x10\x02\x12!\n\x1d\x45\x44IT_FAILURE_AMBIGUOUS_TARGET\x10\x03\x12\x1b\n\x17\x45\x44IT_FAILURE_NOT_VALUED\x10\x04\x12\x1e\n\x1a\x45\x44IT_FAILURE_INVALID_VALUE\x10\x05\x12\x1d\n\x19\x45\x44IT_FAILURE_INVALID_NAME\x10\x06\x12\x1a\n\x16\x45\x44IT_FAILURE_NOT_NAMED\x10\x07\x12\"\n\x1e\x45\x44IT_FAILURE_RENAME_REFERENCED\x10\x08\x12\"\n\x1e\x45\x44IT_FAILURE_OVERLAPPING_EDITS\x10\t\x12\x1f\n\x1b\x45\x44IT_FAILURE_RESULT_INVALID\x10\n\x12\x1e\n\x1a\x45\x44IT_FAILURE_OWNER_UNKNOWN\x10\x0b\x12$\n EDIT_FAILURE_OWNER_NOT_NAMESPACE\x10\x0c\x12\x1d\n\x19\x45\x44IT_FAILURE_ILLEGAL_KIND\x10\r\x12\"\n\x1e\x45\x44IT_FAILURE_MEMBER_NAME_TAKEN\x10\x0e\x12\"\n\x1e\x45\x44IT_FAILURE_DELETE_REFERENCED\x10\x0f\x12$\n EDIT_FAILURE_OWNER_INSIDE_TARGET\x10\x10\x12 \n\x1c\x45\x44IT_FAILURE_MOVE_REFERENCED\x10\x11\x12%\n!EDIT_FAILURE_REFERENCED_ELSEWHERE\x10\x12*\x92\x01\n\x11PrimitiveOperator\x12\"\n\x1ePRIMITIVE_OPERATOR_UNSPECIFIED\x10\x00\x12\x1c\n\x18PRIMITIVE_OPERATOR_EQUAL\x10\x01\x12\x1e\n\x1aPRIMITIVE_OPERATOR_GREATER\x10\x02\x12\x1b\n\x17PRIMITIVE_OPERATOR_LESS\x10\x03*n\n\x11\x43ompositeOperator\x12\"\n\x1e\x43OMPOSITE_OPERATOR_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x43OMPOSITE_OPERATOR_AND\x10\x01\x12\x19\n\x15\x43OMPOSITE_OPERATOR_OR\x10\x02\x32\x85\x0e\n\x0cSysMLService\x12\x44\n\rGetServerInfo\x12\x18.sysml.ServerInfoRequest\x1a\x19.sysml.ServerInfoResponse\x12>\n\tParseFile\x12\x17.sysml.ParseFileRequest\x1a\x18.sysml.ParseFileResponse\x12G\n\x0cParseSources\x12\x1a.sysml.ParseSourcesRequest\x1a\x1b.sysml.ParseSourcesResponse\x12;\n\tGetSymbol\x12\x17.sysml.GetSymbolRequest\x1a\x15.sysml.SymbolResponse\x12G\n\x0eGetDiagnostics\x12\x19.sysml.DiagnosticsRequest\x1a\x1a.sysml.DiagnosticsResponse\x12;\n\x08\x45valuate\x12\x16.sysml.EvaluateRequest\x1a\x17.sysml.EvaluateResponse\x12\x44\n\x0bInstantiate\x12\x19.sysml.InstantiateRequest\x1a\x1a.sysml.InstantiateResponse\x12J\n\rExecuteAction\x12\x1b.sysml.ExecuteActionRequest\x1a\x1c.sysml.ExecuteActionResponse\x12G\n\x0c\x45xecuteState\x12\x1a.sysml.ExecuteStateRequest\x1a\x1b.sysml.ExecuteStateResponse\x12\x38\n\x07\x43onvert\x12\x15.sysml.ConvertRequest\x1a\x16.sysml.ConvertResponse\x12\x38\n\x07Migrate\x12\x15.sysml.MigrateRequest\x1a\x16.sysml.MigrateResponse\x12\x41\n\nApplyEdits\x12\x18.sysml.ApplyEditsRequest\x1a\x19.sysml.ApplyEditsResponse\x12S\n\x10VerifyConstraint\x12\x1e.sysml.VerifyConstraintRequest\x1a\x1f.sysml.VerifyConstraintResponse\x12V\n\x11VerifyRequirement\x12\x1f.sysml.VerifyRequirementRequest\x1a .sysml.VerifyRequirementResponse\x12Y\n\x12VerifySatisfaction\x12 .sysml.VerifySatisfactionRequest\x1a!.sysml.VerifySatisfactionResponse\x12S\n\x10ValidateInstance\x12\x1e.sysml.ValidateInstanceRequest\x1a\x1f.sysml.ValidateInstanceResponse\x12G\n\x0c\x45valuateCalc\x12\x1a.sysml.EvaluateCalcRequest\x1a\x1b.sysml.EvaluateCalcResponse\x12\x44\n\x0bRunAnalysis\x12\x19.sysml.RunAnalysisRequest\x1a\x1a.sysml.RunAnalysisResponse\x12;\n\x08RunSweep\x12\x16.sysml.RunSweepRequest\x1a\x17.sysml.RunSweepResponse\x12\x44\n\x0bListEngines\x12\x19.sysml.ListEnginesRequest\x1a\x1a.sysml.ListEnginesResponse\x12\x32\n\x05Query\x12\x13.sysml.QueryRequest\x1a\x14.sysml.QueryResponse\x12S\n\x10RunDocumentQuery\x12\x1e.sysml.RunDocumentQueryRequest\x1a\x1f.sysml.RunDocumentQueryResponse\x12M\n\x0eRenderDocument\x12\x1c.sysml.RenderDocumentRequest\x1a\x1d.sysml.RenderDocumentResponse\x12\x41\n\nRenderView\x12\x18.sysml.RenderViewRequest\x1a\x19.sysml.RenderViewResponse\x12G\n\x0c\x45xportGraphs\x12\x1a.sysml.ExportGraphsRequest\x1a\x1b.sysml.ExportGraphsResponseB*Z(github.com/Open-MBEE/OpenSysML/api/protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -32,6 +32,10 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'Z(github.com/Open-MBEE/OpenSysML/api/proto' + _globals['_VERIFYCONSTRAINTREQUEST_NAMEDARGUMENTSENTRY']._loaded_options = None + _globals['_VERIFYCONSTRAINTREQUEST_NAMEDARGUMENTSENTRY']._serialized_options = b'8\001' + _globals['_VERIFYREQUIREMENTREQUEST_NAMEDARGUMENTSENTRY']._loaded_options = None + _globals['_VERIFYREQUIREMENTREQUEST_NAMEDARGUMENTSENTRY']._serialized_options = b'8\001' _globals['_RUNANALYSISREQUEST_NAMEDARGUMENTSENTRY']._loaded_options = None _globals['_RUNANALYSISREQUEST_NAMEDARGUMENTSENTRY']._serialized_options = b'8\001' _globals['_OUTCOME_OUTPUTSENTRY']._loaded_options = None @@ -54,308 +58,312 @@ _globals['_QUERYRESULTELEMENT_PROPERTIESENTRY']._serialized_options = b'8\001' _globals['_RUNSWEEPREQUEST_NAMEDARGUMENTSENTRY']._loaded_options = None _globals['_RUNSWEEPREQUEST_NAMEDARGUMENTSENTRY']._serialized_options = b'8\001' - _globals['_FAILUREREASON']._serialized_start=20069 - _globals['_FAILUREREASON']._serialized_end=20246 - _globals['_EDITFAILURE']._serialized_start=20249 - _globals['_EDITFAILURE']._serialized_end=20901 - _globals['_PRIMITIVEOPERATOR']._serialized_start=20904 - _globals['_PRIMITIVEOPERATOR']._serialized_end=21050 - _globals['_COMPOSITEOPERATOR']._serialized_start=21052 - _globals['_COMPOSITEOPERATOR']._serialized_end=21162 + _globals['_FAILUREREASON']._serialized_start=20430 + _globals['_FAILUREREASON']._serialized_end=20607 + _globals['_EDITFAILURE']._serialized_start=20610 + _globals['_EDITFAILURE']._serialized_end=21262 + _globals['_PRIMITIVEOPERATOR']._serialized_start=21265 + _globals['_PRIMITIVEOPERATOR']._serialized_end=21411 + _globals['_COMPOSITEOPERATOR']._serialized_start=21413 + _globals['_COMPOSITEOPERATOR']._serialized_end=21523 _globals['_VERDICT']._serialized_start=23 _globals['_VERDICT']._serialized_end=413 _globals['_WITNESSASSIGNMENT']._serialized_start=415 _globals['_WITNESSASSIGNMENT']._serialized_end=509 _globals['_BOUND']._serialized_start=511 _globals['_BOUND']._serialized_end=564 - _globals['_VERIFYCONSTRAINTREQUEST']._serialized_start=566 - _globals['_VERIFYCONSTRAINTREQUEST']._serialized_end=691 - _globals['_VERIFYCONSTRAINTRESPONSE']._serialized_start=694 - _globals['_VERIFYCONSTRAINTRESPONSE']._serialized_end=844 - _globals['_VERIFYREQUIREMENTREQUEST']._serialized_start=846 - _globals['_VERIFYREQUIREMENTREQUEST']._serialized_end=972 - _globals['_VERIFICATIONVERDICT']._serialized_start=974 - _globals['_VERIFICATIONVERDICT']._serialized_end=1083 - _globals['_VERIFYREQUIREMENTRESPONSE']._serialized_start=1086 - _globals['_VERIFYREQUIREMENTRESPONSE']._serialized_end=1296 - _globals['_VERIFYSATISFACTIONREQUEST']._serialized_start=1298 - _globals['_VERIFYSATISFACTIONREQUEST']._serialized_end=1398 - _globals['_VERIFYSATISFACTIONRESPONSE']._serialized_start=1401 - _globals['_VERIFYSATISFACTIONRESPONSE']._serialized_end=1659 - _globals['_VALIDATEINSTANCEREQUEST']._serialized_start=1661 - _globals['_VALIDATEINSTANCEREQUEST']._serialized_end=1741 - _globals['_VALIDATEINSTANCERESPONSE']._serialized_start=1744 - _globals['_VALIDATEINSTANCERESPONSE']._serialized_end=2050 - _globals['_EVALUATECALCREQUEST']._serialized_start=2052 - _globals['_EVALUATECALCREQUEST']._serialized_end=2161 - _globals['_EVALUATECALCRESPONSE']._serialized_start=2164 - _globals['_EVALUATECALCRESPONSE']._serialized_end=2417 - _globals['_CALCOUTPUT']._serialized_start=2419 - _globals['_CALCOUTPUT']._serialized_end=2474 - _globals['_CASEEVALUATION']._serialized_start=2477 - _globals['_CASEEVALUATION']._serialized_end=2624 - _globals['_RUNANALYSISREQUEST']._serialized_start=2627 - _globals['_RUNANALYSISREQUEST']._serialized_end=2921 - _globals['_RUNANALYSISREQUEST_NAMEDARGUMENTSENTRY']._serialized_start=2854 - _globals['_RUNANALYSISREQUEST_NAMEDARGUMENTSENTRY']._serialized_end=2921 - _globals['_RUNANALYSISRESPONSE']._serialized_start=2924 - _globals['_RUNANALYSISRESPONSE']._serialized_end=3400 - _globals['_PROBABILITYRANGE']._serialized_start=3402 - _globals['_PROBABILITYRANGE']._serialized_end=3446 - _globals['_OUTCOME']._serialized_start=3449 - _globals['_OUTCOME']._serialized_end=3780 - _globals['_OUTCOME_OUTPUTSENTRY']._serialized_start=3720 - _globals['_OUTCOME_OUTPUTSENTRY']._serialized_end=3780 - _globals['_EXPLORATIONSTATUS']._serialized_start=3783 - _globals['_EXPLORATIONSTATUS']._serialized_end=3964 - _globals['_LISTENGINESREQUEST']._serialized_start=3966 - _globals['_LISTENGINESREQUEST']._serialized_end=3986 - _globals['_ENGINEINFO']._serialized_start=3989 - _globals['_ENGINEINFO']._serialized_end=4241 - _globals['_LISTENGINESRESPONSE']._serialized_start=4243 - _globals['_LISTENGINESRESPONSE']._serialized_end=4300 - _globals['_PARSEFILEREQUEST']._serialized_start=4303 - _globals['_PARSEFILEREQUEST']._serialized_end=4443 - _globals['_SOURCEDOCUMENT']._serialized_start=4445 - _globals['_SOURCEDOCUMENT']._serialized_end=4543 - _globals['_PARSESOURCESREQUEST']._serialized_start=4545 - _globals['_PARSESOURCESREQUEST']._serialized_end=4661 - _globals['_PARSESOURCESRESPONSE']._serialized_start=4664 - _globals['_PARSESOURCESRESPONSE']._serialized_end=4813 - _globals['_PARSEFILERESPONSE']._serialized_start=4815 - _globals['_PARSEFILERESPONSE']._serialized_end=4942 - _globals['_GETSYMBOLREQUEST']._serialized_start=4944 - _globals['_GETSYMBOLREQUEST']._serialized_end=5001 - _globals['_SYMBOLRESPONSE']._serialized_start=5003 - _globals['_SYMBOLRESPONSE']._serialized_end=5069 - _globals['_DIAGNOSTICSREQUEST']._serialized_start=5071 - _globals['_DIAGNOSTICSREQUEST']._serialized_end=5111 - _globals['_DIAGNOSTICSRESPONSE']._serialized_start=5113 - _globals['_DIAGNOSTICSRESPONSE']._serialized_end=5189 - _globals['_EVALUATEREQUEST']._serialized_start=5191 - _globals['_EVALUATEREQUEST']._serialized_end=5302 - _globals['_EVALUATERESPONSE']._serialized_start=5304 - _globals['_EVALUATERESPONSE']._serialized_end=5407 - _globals['_INSTANCE']._serialized_start=5410 - _globals['_INSTANCE']._serialized_end=5604 - _globals['_INSTANCE_FEATUREVALUESENTRY']._serialized_start=5518 - _globals['_INSTANCE_FEATUREVALUESENTRY']._serialized_end=5591 - _globals['_FEATUREVALUE']._serialized_start=5607 - _globals['_FEATUREVALUE']._serialized_end=5739 - _globals['_INSTANTIATEREQUEST']._serialized_start=5741 - _globals['_INSTANTIATEREQUEST']._serialized_end=5800 - _globals['_INSTANTIATERESPONSE']._serialized_start=5803 - _globals['_INSTANTIATERESPONSE']._serialized_end=5950 - _globals['_EXECUTEACTIONREQUEST']._serialized_start=5953 - _globals['_EXECUTEACTIONREQUEST']._serialized_end=6186 - _globals['_EXECUTEACTIONREQUEST_INPUTSENTRY']._serialized_start=6127 - _globals['_EXECUTEACTIONREQUEST_INPUTSENTRY']._serialized_end=6186 - _globals['_EXECUTEACTIONRESPONSE']._serialized_start=6189 - _globals['_EXECUTEACTIONRESPONSE']._serialized_end=6649 - _globals['_EXECUTEACTIONRESPONSE_OUTPUTSENTRY']._serialized_start=3720 - _globals['_EXECUTEACTIONRESPONSE_OUTPUTSENTRY']._serialized_end=3780 - _globals['_EXECUTEACTIONRESPONSE_PERFORMERATTRIBUTESENTRY']._serialized_start=6577 - _globals['_EXECUTEACTIONRESPONSE_PERFORMERATTRIBUTESENTRY']._serialized_end=6649 - _globals['_EXECUTESTATEREQUEST']._serialized_start=6652 - _globals['_EXECUTESTATEREQUEST']._serialized_end=6804 - _globals['_EXECUTESTATERESPONSE']._serialized_start=6807 - _globals['_EXECUTESTATERESPONSE']._serialized_end=7206 - _globals['_EXECUTESTATERESPONSE_FINALCONTEXTENTRY']._serialized_start=7141 - _globals['_EXECUTESTATERESPONSE_FINALCONTEXTENTRY']._serialized_end=7206 - _globals['_CONVERTREQUEST']._serialized_start=7209 - _globals['_CONVERTREQUEST']._serialized_end=7466 - _globals['_CONVERTRESPONSE']._serialized_start=7469 - _globals['_CONVERTRESPONSE']._serialized_end=7649 - _globals['_MIGRATEREQUEST']._serialized_start=7652 - _globals['_MIGRATEREQUEST']._serialized_end=7890 - _globals['_MIGRATERESPONSE']._serialized_start=7893 - _globals['_MIGRATERESPONSE']._serialized_end=8127 - _globals['_MIGRATIONREPORT']._serialized_start=8130 - _globals['_MIGRATIONREPORT']._serialized_end=8325 - _globals['_MIGRATIONENTRY']._serialized_start=8327 - _globals['_MIGRATIONENTRY']._serialized_end=8430 - _globals['_MIGRATIONFILE']._serialized_start=8432 - _globals['_MIGRATIONFILE']._serialized_end=8478 - _globals['_APPLYEDITSREQUEST']._serialized_start=8480 - _globals['_APPLYEDITSREQUEST']._serialized_end=8605 - _globals['_EDITOPERATION']._serialized_start=8608 - _globals['_EDITOPERATION']._serialized_end=9443 - _globals['_ADDMEMBEREDIT']._serialized_start=9446 - _globals['_ADDMEMBEREDIT']._serialized_end=9720 - _globals['_ADDSATISFYEDIT']._serialized_start=9722 - _globals['_ADDSATISFYEDIT']._serialized_end=9843 - _globals['_ADDREQUIREMENTCONSTRAINTEDIT']._serialized_start=9845 - _globals['_ADDREQUIREMENTCONSTRAINTEDIT']._serialized_end=9938 - _globals['_ADDTRANSITIONEDIT']._serialized_start=9941 - _globals['_ADDTRANSITIONEDIT']._serialized_end=10086 - _globals['_ADDVERIFYEDIT']._serialized_start=10088 - _globals['_ADDVERIFYEDIT']._serialized_end=10139 - _globals['_METADATAFEATUREVALUE']._serialized_start=10141 - _globals['_METADATAFEATUREVALUE']._serialized_end=10195 - _globals['_ADDMETADATAEDIT']._serialized_start=10198 - _globals['_ADDMETADATAEDIT']._serialized_end=10346 - _globals['_ADDMETADATAPREFIXEDIT']._serialized_start=10348 - _globals['_ADDMETADATAPREFIXEDIT']._serialized_end=10410 - _globals['_ADDIMPORTEDIT']._serialized_start=10413 - _globals['_ADDIMPORTEDIT']._serialized_end=10541 - _globals['_ADDDOCUMENTATIONEDIT']._serialized_start=10543 - _globals['_ADDDOCUMENTATIONEDIT']._serialized_end=10642 - _globals['_ADDCOMMENTEDIT']._serialized_start=10644 - _globals['_ADDCOMMENTEDIT']._serialized_end=10734 - _globals['_ADDNOTEEDIT']._serialized_start=10736 - _globals['_ADDNOTEEDIT']._serialized_end=10779 - _globals['_ADDSEQUENCEEDIT']._serialized_start=10782 - _globals['_ADDSEQUENCEEDIT']._serialized_end=11115 - _globals['_ADDCONNECTIONEDIT']._serialized_start=11117 - _globals['_ADDCONNECTIONEDIT']._serialized_end=11227 - _globals['_DELETEEDIT']._serialized_start=11229 - _globals['_DELETEEDIT']._serialized_end=11274 - _globals['_MOVEEDIT']._serialized_start=11276 - _globals['_MOVEEDIT']._serialized_end=11317 - _globals['_SETVALUEEDIT']._serialized_start=11319 - _globals['_SETVALUEEDIT']._serialized_end=11364 - _globals['_RENAMEEDIT']._serialized_start=11366 - _globals['_RENAMEEDIT']._serialized_end=11412 - _globals['_APPLYEDITSRESPONSE']._serialized_start=11415 - _globals['_APPLYEDITSRESPONSE']._serialized_end=11687 - _globals['_EDITEDDOCUMENT']._serialized_start=11689 - _globals['_EDITEDDOCUMENT']._serialized_end=11736 - _globals['_REFERRER']._serialized_start=11738 - _globals['_REFERRER']._serialized_end=11780 - _globals['_APPLIEDEDIT']._serialized_start=11783 - _globals['_APPLIEDEDIT']._serialized_end=11923 - _globals['_SYMBOLINFO']._serialized_start=11926 - _globals['_SYMBOLINFO']._serialized_end=12307 - _globals['_SYMBOLINFO_METADATAENTRY']._serialized_start=12260 - _globals['_SYMBOLINFO_METADATAENTRY']._serialized_end=12307 - _globals['_SPECIALIZATION']._serialized_start=12309 - _globals['_SPECIALIZATION']._serialized_end=12397 - _globals['_TYPEINFO']._serialized_start=12400 - _globals['_TYPEINFO']._serialized_end=12549 - _globals['_MULTIPLICITYINFO']._serialized_start=12551 - _globals['_MULTIPLICITYINFO']._serialized_end=12599 - _globals['_ATTRIBUTEINFO']._serialized_start=12601 - _globals['_ATTRIBUTEINFO']._serialized_end=12687 - _globals['_VALUE']._serialized_start=12690 - _globals['_VALUE']._serialized_end=13465 - _globals['_RATIONAL']._serialized_start=13467 - _globals['_RATIONAL']._serialized_end=13517 - _globals['_METAOBJECT']._serialized_start=13519 - _globals['_METAOBJECT']._serialized_end=13573 - _globals['_UNDETERMINED']._serialized_start=13575 - _globals['_UNDETERMINED']._serialized_end=13645 - _globals['_FUNCTION']._serialized_start=13647 - _globals['_FUNCTION']._serialized_end=13691 - _globals['_VALUESET']._serialized_start=13693 - _globals['_VALUESET']._serialized_end=13735 - _globals['_TENSORQUANTITY']._serialized_start=13737 - _globals['_TENSORQUANTITY']._serialized_end=13810 - _globals['_ARRAY']._serialized_start=13812 - _globals['_ARRAY']._serialized_end=13871 - _globals['_VECTOR']._serialized_start=13873 - _globals['_VECTOR']._serialized_end=13915 - _globals['_VECTORQUANTITY']._serialized_start=13917 - _globals['_VECTORQUANTITY']._serialized_end=13970 - _globals['_COMPLEX']._serialized_start=13972 - _globals['_COMPLEX']._serialized_end=14014 - _globals['_ENUMLITERAL']._serialized_start=14016 - _globals['_ENUMLITERAL']._serialized_end=14116 - _globals['_VALUESEQUENCE']._serialized_start=14118 - _globals['_VALUESEQUENCE']._serialized_end=14165 - _globals['_QUANTITY']._serialized_start=14168 - _globals['_QUANTITY']._serialized_end=14368 - _globals['_MEASUREMENTREF']._serialized_start=14370 - _globals['_MEASUREMENTREF']._serialized_end=14453 - _globals['_UNITTERM']._serialized_start=14455 - _globals['_UNITTERM']._serialized_end=14539 - _globals['_UNITFACTOR']._serialized_start=14541 - _globals['_UNITFACTOR']._serialized_end=14588 - _globals['_DIAGNOSTIC']._serialized_start=14590 - _globals['_DIAGNOSTIC']._serialized_end=14678 - _globals['_SPAN']._serialized_start=14680 - _globals['_SPAN']._serialized_end=14774 - _globals['_SERVERINFOREQUEST']._serialized_start=14776 - _globals['_SERVERINFOREQUEST']._serialized_end=14795 - _globals['_SERVERINFORESPONSE']._serialized_start=14797 - _globals['_SERVERINFORESPONSE']._serialized_end=14856 - _globals['_QUERYREQUEST']._serialized_start=14858 - _globals['_QUERYREQUEST']._serialized_end=14941 - _globals['_QUERYRESPONSE']._serialized_start=14943 - _globals['_QUERYRESPONSE']._serialized_end=15003 - _globals['_QUERY']._serialized_start=15005 - _globals['_QUERY']._serialized_end=15077 - _globals['_CONSTRAINT']._serialized_start=15079 - _globals['_CONSTRAINT']._serialized_end=15203 - _globals['_PRIMITIVECONSTRAINT']._serialized_start=15205 - _globals['_PRIMITIVECONSTRAINT']._serialized_end=15320 - _globals['_COMPOSITECONSTRAINT']._serialized_start=15322 - _globals['_COMPOSITECONSTRAINT']._serialized_end=15426 - _globals['_QUERYRESULTELEMENT']._serialized_start=15429 - _globals['_QUERYRESULTELEMENT']._serialized_end=15589 - _globals['_QUERYRESULTELEMENT_PROPERTIESENTRY']._serialized_start=15540 - _globals['_QUERYRESULTELEMENT_PROPERTIESENTRY']._serialized_end=15589 - _globals['_SWEEPRANGE']._serialized_start=15591 - _globals['_SWEEPRANGE']._serialized_end=15706 - _globals['_RUNSWEEPREQUEST']._serialized_start=15709 - _globals['_RUNSWEEPREQUEST']._serialized_end=16045 - _globals['_RUNSWEEPREQUEST_NAMEDARGUMENTSENTRY']._serialized_start=2854 - _globals['_RUNSWEEPREQUEST_NAMEDARGUMENTSENTRY']._serialized_end=2921 - _globals['_SWEEPROW']._serialized_start=16048 - _globals['_SWEEPROW']._serialized_end=16292 - _globals['_RUNSWEEPRESPONSE']._serialized_start=16295 - _globals['_RUNSWEEPRESPONSE']._serialized_end=16596 - _globals['_RUNDOCUMENTQUERYREQUEST']._serialized_start=16598 - _globals['_RUNDOCUMENTQUERYREQUEST']._serialized_end=16708 - _globals['_DOCUMENTQUERYBINDING']._serialized_start=16710 - _globals['_DOCUMENTQUERYBINDING']._serialized_end=16789 - _globals['_DOCUMENTVALUE']._serialized_start=16792 - _globals['_DOCUMENTVALUE']._serialized_end=17235 - _globals['_DOCUMENTOBJECT']._serialized_start=17237 - _globals['_DOCUMENTOBJECT']._serialized_end=17327 - _globals['_DOCUMENTVERDICT']._serialized_start=17330 - _globals['_DOCUMENTVERDICT']._serialized_end=17504 - _globals['_DOCUMENTSTATE']._serialized_start=17507 - _globals['_DOCUMENTSTATE']._serialized_end=17684 - _globals['_DOCUMENTEVENT']._serialized_start=17687 - _globals['_DOCUMENTEVENT']._serialized_end=17971 - _globals['_DOCUMENTQUERYCOLUMN']._serialized_start=17973 - _globals['_DOCUMENTQUERYCOLUMN']._serialized_end=18008 - _globals['_DOCUMENTQUERYCELL']._serialized_start=18010 - _globals['_DOCUMENTQUERYCELL']._serialized_end=18067 - _globals['_DOCUMENTQUERYROW']._serialized_start=18069 - _globals['_DOCUMENTQUERYROW']._serialized_end=18167 - _globals['_RUNDOCUMENTQUERYRESPONSE']._serialized_start=18169 - _globals['_RUNDOCUMENTQUERYRESPONSE']._serialized_end=18279 - _globals['_RENDERDOCUMENTREQUEST']._serialized_start=18281 - _globals['_RENDERDOCUMENTREQUEST']._serialized_end=18359 - _globals['_RENDERDOCUMENTRESPONSE']._serialized_start=18361 - _globals['_RENDERDOCUMENTRESPONSE']._serialized_end=18417 - _globals['_RENDERVIEWREQUEST']._serialized_start=18419 - _globals['_RENDERVIEWREQUEST']._serialized_end=18487 - _globals['_RENDERVIEWRESPONSE']._serialized_start=18490 - _globals['_RENDERVIEWRESPONSE']._serialized_end=18759 - _globals['_RENDERNODE']._serialized_start=18762 - _globals['_RENDERNODE']._serialized_end=19057 - _globals['_RENDERPORT']._serialized_start=19059 - _globals['_RENDERPORT']._serialized_end=19130 - _globals['_RENDEREDGE']._serialized_start=19133 - _globals['_RENDEREDGE']._serialized_end=19349 - _globals['_RENDERGEOMETRY']._serialized_start=19351 - _globals['_RENDERGEOMETRY']._serialized_end=19457 - _globals['_RENDERCANVAS']._serialized_start=19459 - _globals['_RENDERCANVAS']._serialized_end=19536 - _globals['_RENDERSTYLE']._serialized_start=19538 - _globals['_RENDERSTYLE']._serialized_end=19656 - _globals['_RENDERPOINT']._serialized_start=19658 - _globals['_RENDERPOINT']._serialized_end=19693 - _globals['_RENDERROW']._serialized_start=19695 - _globals['_RENDERROW']._serialized_end=19750 - _globals['_RENDERNOTE']._serialized_start=19753 - _globals['_RENDERNOTE']._serialized_end=19931 - _globals['_EXPORTGRAPHSREQUEST']._serialized_start=19933 - _globals['_EXPORTGRAPHSREQUEST']._serialized_end=19991 - _globals['_EXPORTGRAPHSRESPONSE']._serialized_start=19993 - _globals['_EXPORTGRAPHSRESPONSE']._serialized_end=20066 - _globals['_SYSMLSERVICE']._serialized_start=21165 - _globals['_SYSMLSERVICE']._serialized_end=22962 + _globals['_VERIFYCONSTRAINTREQUEST']._serialized_start=567 + _globals['_VERIFYCONSTRAINTREQUEST']._serialized_end=871 + _globals['_VERIFYCONSTRAINTREQUEST_NAMEDARGUMENTSENTRY']._serialized_start=804 + _globals['_VERIFYCONSTRAINTREQUEST_NAMEDARGUMENTSENTRY']._serialized_end=871 + _globals['_VERIFYCONSTRAINTRESPONSE']._serialized_start=874 + _globals['_VERIFYCONSTRAINTRESPONSE']._serialized_end=1024 + _globals['_VERIFYREQUIREMENTREQUEST']._serialized_start=1027 + _globals['_VERIFYREQUIREMENTREQUEST']._serialized_end=1333 + _globals['_VERIFYREQUIREMENTREQUEST_NAMEDARGUMENTSENTRY']._serialized_start=804 + _globals['_VERIFYREQUIREMENTREQUEST_NAMEDARGUMENTSENTRY']._serialized_end=871 + _globals['_VERIFICATIONVERDICT']._serialized_start=1335 + _globals['_VERIFICATIONVERDICT']._serialized_end=1444 + _globals['_VERIFYREQUIREMENTRESPONSE']._serialized_start=1447 + _globals['_VERIFYREQUIREMENTRESPONSE']._serialized_end=1657 + _globals['_VERIFYSATISFACTIONREQUEST']._serialized_start=1659 + _globals['_VERIFYSATISFACTIONREQUEST']._serialized_end=1759 + _globals['_VERIFYSATISFACTIONRESPONSE']._serialized_start=1762 + _globals['_VERIFYSATISFACTIONRESPONSE']._serialized_end=2020 + _globals['_VALIDATEINSTANCEREQUEST']._serialized_start=2022 + _globals['_VALIDATEINSTANCEREQUEST']._serialized_end=2102 + _globals['_VALIDATEINSTANCERESPONSE']._serialized_start=2105 + _globals['_VALIDATEINSTANCERESPONSE']._serialized_end=2411 + _globals['_EVALUATECALCREQUEST']._serialized_start=2413 + _globals['_EVALUATECALCREQUEST']._serialized_end=2522 + _globals['_EVALUATECALCRESPONSE']._serialized_start=2525 + _globals['_EVALUATECALCRESPONSE']._serialized_end=2778 + _globals['_CALCOUTPUT']._serialized_start=2780 + _globals['_CALCOUTPUT']._serialized_end=2835 + _globals['_CASEEVALUATION']._serialized_start=2838 + _globals['_CASEEVALUATION']._serialized_end=2985 + _globals['_RUNANALYSISREQUEST']._serialized_start=2988 + _globals['_RUNANALYSISREQUEST']._serialized_end=3282 + _globals['_RUNANALYSISREQUEST_NAMEDARGUMENTSENTRY']._serialized_start=804 + _globals['_RUNANALYSISREQUEST_NAMEDARGUMENTSENTRY']._serialized_end=871 + _globals['_RUNANALYSISRESPONSE']._serialized_start=3285 + _globals['_RUNANALYSISRESPONSE']._serialized_end=3761 + _globals['_PROBABILITYRANGE']._serialized_start=3763 + _globals['_PROBABILITYRANGE']._serialized_end=3807 + _globals['_OUTCOME']._serialized_start=3810 + _globals['_OUTCOME']._serialized_end=4141 + _globals['_OUTCOME_OUTPUTSENTRY']._serialized_start=4081 + _globals['_OUTCOME_OUTPUTSENTRY']._serialized_end=4141 + _globals['_EXPLORATIONSTATUS']._serialized_start=4144 + _globals['_EXPLORATIONSTATUS']._serialized_end=4325 + _globals['_LISTENGINESREQUEST']._serialized_start=4327 + _globals['_LISTENGINESREQUEST']._serialized_end=4347 + _globals['_ENGINEINFO']._serialized_start=4350 + _globals['_ENGINEINFO']._serialized_end=4602 + _globals['_LISTENGINESRESPONSE']._serialized_start=4604 + _globals['_LISTENGINESRESPONSE']._serialized_end=4661 + _globals['_PARSEFILEREQUEST']._serialized_start=4664 + _globals['_PARSEFILEREQUEST']._serialized_end=4804 + _globals['_SOURCEDOCUMENT']._serialized_start=4806 + _globals['_SOURCEDOCUMENT']._serialized_end=4904 + _globals['_PARSESOURCESREQUEST']._serialized_start=4906 + _globals['_PARSESOURCESREQUEST']._serialized_end=5022 + _globals['_PARSESOURCESRESPONSE']._serialized_start=5025 + _globals['_PARSESOURCESRESPONSE']._serialized_end=5174 + _globals['_PARSEFILERESPONSE']._serialized_start=5176 + _globals['_PARSEFILERESPONSE']._serialized_end=5303 + _globals['_GETSYMBOLREQUEST']._serialized_start=5305 + _globals['_GETSYMBOLREQUEST']._serialized_end=5362 + _globals['_SYMBOLRESPONSE']._serialized_start=5364 + _globals['_SYMBOLRESPONSE']._serialized_end=5430 + _globals['_DIAGNOSTICSREQUEST']._serialized_start=5432 + _globals['_DIAGNOSTICSREQUEST']._serialized_end=5472 + _globals['_DIAGNOSTICSRESPONSE']._serialized_start=5474 + _globals['_DIAGNOSTICSRESPONSE']._serialized_end=5550 + _globals['_EVALUATEREQUEST']._serialized_start=5552 + _globals['_EVALUATEREQUEST']._serialized_end=5663 + _globals['_EVALUATERESPONSE']._serialized_start=5665 + _globals['_EVALUATERESPONSE']._serialized_end=5768 + _globals['_INSTANCE']._serialized_start=5771 + _globals['_INSTANCE']._serialized_end=5965 + _globals['_INSTANCE_FEATUREVALUESENTRY']._serialized_start=5879 + _globals['_INSTANCE_FEATUREVALUESENTRY']._serialized_end=5952 + _globals['_FEATUREVALUE']._serialized_start=5968 + _globals['_FEATUREVALUE']._serialized_end=6100 + _globals['_INSTANTIATEREQUEST']._serialized_start=6102 + _globals['_INSTANTIATEREQUEST']._serialized_end=6161 + _globals['_INSTANTIATERESPONSE']._serialized_start=6164 + _globals['_INSTANTIATERESPONSE']._serialized_end=6311 + _globals['_EXECUTEACTIONREQUEST']._serialized_start=6314 + _globals['_EXECUTEACTIONREQUEST']._serialized_end=6547 + _globals['_EXECUTEACTIONREQUEST_INPUTSENTRY']._serialized_start=6488 + _globals['_EXECUTEACTIONREQUEST_INPUTSENTRY']._serialized_end=6547 + _globals['_EXECUTEACTIONRESPONSE']._serialized_start=6550 + _globals['_EXECUTEACTIONRESPONSE']._serialized_end=7010 + _globals['_EXECUTEACTIONRESPONSE_OUTPUTSENTRY']._serialized_start=4081 + _globals['_EXECUTEACTIONRESPONSE_OUTPUTSENTRY']._serialized_end=4141 + _globals['_EXECUTEACTIONRESPONSE_PERFORMERATTRIBUTESENTRY']._serialized_start=6938 + _globals['_EXECUTEACTIONRESPONSE_PERFORMERATTRIBUTESENTRY']._serialized_end=7010 + _globals['_EXECUTESTATEREQUEST']._serialized_start=7013 + _globals['_EXECUTESTATEREQUEST']._serialized_end=7165 + _globals['_EXECUTESTATERESPONSE']._serialized_start=7168 + _globals['_EXECUTESTATERESPONSE']._serialized_end=7567 + _globals['_EXECUTESTATERESPONSE_FINALCONTEXTENTRY']._serialized_start=7502 + _globals['_EXECUTESTATERESPONSE_FINALCONTEXTENTRY']._serialized_end=7567 + _globals['_CONVERTREQUEST']._serialized_start=7570 + _globals['_CONVERTREQUEST']._serialized_end=7827 + _globals['_CONVERTRESPONSE']._serialized_start=7830 + _globals['_CONVERTRESPONSE']._serialized_end=8010 + _globals['_MIGRATEREQUEST']._serialized_start=8013 + _globals['_MIGRATEREQUEST']._serialized_end=8251 + _globals['_MIGRATERESPONSE']._serialized_start=8254 + _globals['_MIGRATERESPONSE']._serialized_end=8488 + _globals['_MIGRATIONREPORT']._serialized_start=8491 + _globals['_MIGRATIONREPORT']._serialized_end=8686 + _globals['_MIGRATIONENTRY']._serialized_start=8688 + _globals['_MIGRATIONENTRY']._serialized_end=8791 + _globals['_MIGRATIONFILE']._serialized_start=8793 + _globals['_MIGRATIONFILE']._serialized_end=8839 + _globals['_APPLYEDITSREQUEST']._serialized_start=8841 + _globals['_APPLYEDITSREQUEST']._serialized_end=8966 + _globals['_EDITOPERATION']._serialized_start=8969 + _globals['_EDITOPERATION']._serialized_end=9804 + _globals['_ADDMEMBEREDIT']._serialized_start=9807 + _globals['_ADDMEMBEREDIT']._serialized_end=10081 + _globals['_ADDSATISFYEDIT']._serialized_start=10083 + _globals['_ADDSATISFYEDIT']._serialized_end=10204 + _globals['_ADDREQUIREMENTCONSTRAINTEDIT']._serialized_start=10206 + _globals['_ADDREQUIREMENTCONSTRAINTEDIT']._serialized_end=10299 + _globals['_ADDTRANSITIONEDIT']._serialized_start=10302 + _globals['_ADDTRANSITIONEDIT']._serialized_end=10447 + _globals['_ADDVERIFYEDIT']._serialized_start=10449 + _globals['_ADDVERIFYEDIT']._serialized_end=10500 + _globals['_METADATAFEATUREVALUE']._serialized_start=10502 + _globals['_METADATAFEATUREVALUE']._serialized_end=10556 + _globals['_ADDMETADATAEDIT']._serialized_start=10559 + _globals['_ADDMETADATAEDIT']._serialized_end=10707 + _globals['_ADDMETADATAPREFIXEDIT']._serialized_start=10709 + _globals['_ADDMETADATAPREFIXEDIT']._serialized_end=10771 + _globals['_ADDIMPORTEDIT']._serialized_start=10774 + _globals['_ADDIMPORTEDIT']._serialized_end=10902 + _globals['_ADDDOCUMENTATIONEDIT']._serialized_start=10904 + _globals['_ADDDOCUMENTATIONEDIT']._serialized_end=11003 + _globals['_ADDCOMMENTEDIT']._serialized_start=11005 + _globals['_ADDCOMMENTEDIT']._serialized_end=11095 + _globals['_ADDNOTEEDIT']._serialized_start=11097 + _globals['_ADDNOTEEDIT']._serialized_end=11140 + _globals['_ADDSEQUENCEEDIT']._serialized_start=11143 + _globals['_ADDSEQUENCEEDIT']._serialized_end=11476 + _globals['_ADDCONNECTIONEDIT']._serialized_start=11478 + _globals['_ADDCONNECTIONEDIT']._serialized_end=11588 + _globals['_DELETEEDIT']._serialized_start=11590 + _globals['_DELETEEDIT']._serialized_end=11635 + _globals['_MOVEEDIT']._serialized_start=11637 + _globals['_MOVEEDIT']._serialized_end=11678 + _globals['_SETVALUEEDIT']._serialized_start=11680 + _globals['_SETVALUEEDIT']._serialized_end=11725 + _globals['_RENAMEEDIT']._serialized_start=11727 + _globals['_RENAMEEDIT']._serialized_end=11773 + _globals['_APPLYEDITSRESPONSE']._serialized_start=11776 + _globals['_APPLYEDITSRESPONSE']._serialized_end=12048 + _globals['_EDITEDDOCUMENT']._serialized_start=12050 + _globals['_EDITEDDOCUMENT']._serialized_end=12097 + _globals['_REFERRER']._serialized_start=12099 + _globals['_REFERRER']._serialized_end=12141 + _globals['_APPLIEDEDIT']._serialized_start=12144 + _globals['_APPLIEDEDIT']._serialized_end=12284 + _globals['_SYMBOLINFO']._serialized_start=12287 + _globals['_SYMBOLINFO']._serialized_end=12668 + _globals['_SYMBOLINFO_METADATAENTRY']._serialized_start=12621 + _globals['_SYMBOLINFO_METADATAENTRY']._serialized_end=12668 + _globals['_SPECIALIZATION']._serialized_start=12670 + _globals['_SPECIALIZATION']._serialized_end=12758 + _globals['_TYPEINFO']._serialized_start=12761 + _globals['_TYPEINFO']._serialized_end=12910 + _globals['_MULTIPLICITYINFO']._serialized_start=12912 + _globals['_MULTIPLICITYINFO']._serialized_end=12960 + _globals['_ATTRIBUTEINFO']._serialized_start=12962 + _globals['_ATTRIBUTEINFO']._serialized_end=13048 + _globals['_VALUE']._serialized_start=13051 + _globals['_VALUE']._serialized_end=13826 + _globals['_RATIONAL']._serialized_start=13828 + _globals['_RATIONAL']._serialized_end=13878 + _globals['_METAOBJECT']._serialized_start=13880 + _globals['_METAOBJECT']._serialized_end=13934 + _globals['_UNDETERMINED']._serialized_start=13936 + _globals['_UNDETERMINED']._serialized_end=14006 + _globals['_FUNCTION']._serialized_start=14008 + _globals['_FUNCTION']._serialized_end=14052 + _globals['_VALUESET']._serialized_start=14054 + _globals['_VALUESET']._serialized_end=14096 + _globals['_TENSORQUANTITY']._serialized_start=14098 + _globals['_TENSORQUANTITY']._serialized_end=14171 + _globals['_ARRAY']._serialized_start=14173 + _globals['_ARRAY']._serialized_end=14232 + _globals['_VECTOR']._serialized_start=14234 + _globals['_VECTOR']._serialized_end=14276 + _globals['_VECTORQUANTITY']._serialized_start=14278 + _globals['_VECTORQUANTITY']._serialized_end=14331 + _globals['_COMPLEX']._serialized_start=14333 + _globals['_COMPLEX']._serialized_end=14375 + _globals['_ENUMLITERAL']._serialized_start=14377 + _globals['_ENUMLITERAL']._serialized_end=14477 + _globals['_VALUESEQUENCE']._serialized_start=14479 + _globals['_VALUESEQUENCE']._serialized_end=14526 + _globals['_QUANTITY']._serialized_start=14529 + _globals['_QUANTITY']._serialized_end=14729 + _globals['_MEASUREMENTREF']._serialized_start=14731 + _globals['_MEASUREMENTREF']._serialized_end=14814 + _globals['_UNITTERM']._serialized_start=14816 + _globals['_UNITTERM']._serialized_end=14900 + _globals['_UNITFACTOR']._serialized_start=14902 + _globals['_UNITFACTOR']._serialized_end=14949 + _globals['_DIAGNOSTIC']._serialized_start=14951 + _globals['_DIAGNOSTIC']._serialized_end=15039 + _globals['_SPAN']._serialized_start=15041 + _globals['_SPAN']._serialized_end=15135 + _globals['_SERVERINFOREQUEST']._serialized_start=15137 + _globals['_SERVERINFOREQUEST']._serialized_end=15156 + _globals['_SERVERINFORESPONSE']._serialized_start=15158 + _globals['_SERVERINFORESPONSE']._serialized_end=15217 + _globals['_QUERYREQUEST']._serialized_start=15219 + _globals['_QUERYREQUEST']._serialized_end=15302 + _globals['_QUERYRESPONSE']._serialized_start=15304 + _globals['_QUERYRESPONSE']._serialized_end=15364 + _globals['_QUERY']._serialized_start=15366 + _globals['_QUERY']._serialized_end=15438 + _globals['_CONSTRAINT']._serialized_start=15440 + _globals['_CONSTRAINT']._serialized_end=15564 + _globals['_PRIMITIVECONSTRAINT']._serialized_start=15566 + _globals['_PRIMITIVECONSTRAINT']._serialized_end=15681 + _globals['_COMPOSITECONSTRAINT']._serialized_start=15683 + _globals['_COMPOSITECONSTRAINT']._serialized_end=15787 + _globals['_QUERYRESULTELEMENT']._serialized_start=15790 + _globals['_QUERYRESULTELEMENT']._serialized_end=15950 + _globals['_QUERYRESULTELEMENT_PROPERTIESENTRY']._serialized_start=15901 + _globals['_QUERYRESULTELEMENT_PROPERTIESENTRY']._serialized_end=15950 + _globals['_SWEEPRANGE']._serialized_start=15952 + _globals['_SWEEPRANGE']._serialized_end=16067 + _globals['_RUNSWEEPREQUEST']._serialized_start=16070 + _globals['_RUNSWEEPREQUEST']._serialized_end=16406 + _globals['_RUNSWEEPREQUEST_NAMEDARGUMENTSENTRY']._serialized_start=804 + _globals['_RUNSWEEPREQUEST_NAMEDARGUMENTSENTRY']._serialized_end=871 + _globals['_SWEEPROW']._serialized_start=16409 + _globals['_SWEEPROW']._serialized_end=16653 + _globals['_RUNSWEEPRESPONSE']._serialized_start=16656 + _globals['_RUNSWEEPRESPONSE']._serialized_end=16957 + _globals['_RUNDOCUMENTQUERYREQUEST']._serialized_start=16959 + _globals['_RUNDOCUMENTQUERYREQUEST']._serialized_end=17069 + _globals['_DOCUMENTQUERYBINDING']._serialized_start=17071 + _globals['_DOCUMENTQUERYBINDING']._serialized_end=17150 + _globals['_DOCUMENTVALUE']._serialized_start=17153 + _globals['_DOCUMENTVALUE']._serialized_end=17596 + _globals['_DOCUMENTOBJECT']._serialized_start=17598 + _globals['_DOCUMENTOBJECT']._serialized_end=17688 + _globals['_DOCUMENTVERDICT']._serialized_start=17691 + _globals['_DOCUMENTVERDICT']._serialized_end=17865 + _globals['_DOCUMENTSTATE']._serialized_start=17868 + _globals['_DOCUMENTSTATE']._serialized_end=18045 + _globals['_DOCUMENTEVENT']._serialized_start=18048 + _globals['_DOCUMENTEVENT']._serialized_end=18332 + _globals['_DOCUMENTQUERYCOLUMN']._serialized_start=18334 + _globals['_DOCUMENTQUERYCOLUMN']._serialized_end=18369 + _globals['_DOCUMENTQUERYCELL']._serialized_start=18371 + _globals['_DOCUMENTQUERYCELL']._serialized_end=18428 + _globals['_DOCUMENTQUERYROW']._serialized_start=18430 + _globals['_DOCUMENTQUERYROW']._serialized_end=18528 + _globals['_RUNDOCUMENTQUERYRESPONSE']._serialized_start=18530 + _globals['_RUNDOCUMENTQUERYRESPONSE']._serialized_end=18640 + _globals['_RENDERDOCUMENTREQUEST']._serialized_start=18642 + _globals['_RENDERDOCUMENTREQUEST']._serialized_end=18720 + _globals['_RENDERDOCUMENTRESPONSE']._serialized_start=18722 + _globals['_RENDERDOCUMENTRESPONSE']._serialized_end=18778 + _globals['_RENDERVIEWREQUEST']._serialized_start=18780 + _globals['_RENDERVIEWREQUEST']._serialized_end=18848 + _globals['_RENDERVIEWRESPONSE']._serialized_start=18851 + _globals['_RENDERVIEWRESPONSE']._serialized_end=19120 + _globals['_RENDERNODE']._serialized_start=19123 + _globals['_RENDERNODE']._serialized_end=19418 + _globals['_RENDERPORT']._serialized_start=19420 + _globals['_RENDERPORT']._serialized_end=19491 + _globals['_RENDEREDGE']._serialized_start=19494 + _globals['_RENDEREDGE']._serialized_end=19710 + _globals['_RENDERGEOMETRY']._serialized_start=19712 + _globals['_RENDERGEOMETRY']._serialized_end=19818 + _globals['_RENDERCANVAS']._serialized_start=19820 + _globals['_RENDERCANVAS']._serialized_end=19897 + _globals['_RENDERSTYLE']._serialized_start=19899 + _globals['_RENDERSTYLE']._serialized_end=20017 + _globals['_RENDERPOINT']._serialized_start=20019 + _globals['_RENDERPOINT']._serialized_end=20054 + _globals['_RENDERROW']._serialized_start=20056 + _globals['_RENDERROW']._serialized_end=20111 + _globals['_RENDERNOTE']._serialized_start=20114 + _globals['_RENDERNOTE']._serialized_end=20292 + _globals['_EXPORTGRAPHSREQUEST']._serialized_start=20294 + _globals['_EXPORTGRAPHSREQUEST']._serialized_end=20352 + _globals['_EXPORTGRAPHSRESPONSE']._serialized_start=20354 + _globals['_EXPORTGRAPHSRESPONSE']._serialized_end=20427 + _globals['_SYSMLSERVICE']._serialized_start=21526 + _globals['_SYSMLSERVICE']._serialized_end=23323 # @@protoc_insertion_point(module_scope) diff --git a/client/python/opensysml/proto/sysml_pb2.pyi b/client/python/opensysml/proto/sysml_pb2.pyi index f554aaa1fc..3d24684163 100644 --- a/client/python/opensysml/proto/sysml_pb2.pyi +++ b/client/python/opensysml/proto/sysml_pb2.pyi @@ -142,18 +142,29 @@ class Bound(_message.Message): def __init__(self, name: _Optional[str] = ..., limit: _Optional[int] = ..., reached: _Optional[bool] = ...) -> None: ... class VerifyConstraintRequest(_message.Message): - __slots__ = ("model_hash", "symbol_id", "subject_symbol_id", "engine", "question") + __slots__ = ("model_hash", "symbol_id", "subject_symbol_id", "engine", "question", "arguments", "named_arguments") + class NamedArgumentsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: Value + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[Value, _Mapping]] = ...) -> None: ... MODEL_HASH_FIELD_NUMBER: _ClassVar[int] SYMBOL_ID_FIELD_NUMBER: _ClassVar[int] SUBJECT_SYMBOL_ID_FIELD_NUMBER: _ClassVar[int] ENGINE_FIELD_NUMBER: _ClassVar[int] QUESTION_FIELD_NUMBER: _ClassVar[int] + ARGUMENTS_FIELD_NUMBER: _ClassVar[int] + NAMED_ARGUMENTS_FIELD_NUMBER: _ClassVar[int] model_hash: str symbol_id: str subject_symbol_id: str engine: str question: str - def __init__(self, model_hash: _Optional[str] = ..., symbol_id: _Optional[str] = ..., subject_symbol_id: _Optional[str] = ..., engine: _Optional[str] = ..., question: _Optional[str] = ...) -> None: ... + arguments: _containers.RepeatedCompositeFieldContainer[Value] + named_arguments: _containers.MessageMap[str, Value] + def __init__(self, model_hash: _Optional[str] = ..., symbol_id: _Optional[str] = ..., subject_symbol_id: _Optional[str] = ..., engine: _Optional[str] = ..., question: _Optional[str] = ..., arguments: _Optional[_Iterable[_Union[Value, _Mapping]]] = ..., named_arguments: _Optional[_Mapping[str, Value]] = ...) -> None: ... class VerifyConstraintResponse(_message.Message): __slots__ = ("verdict", "instances", "error", "diagnostics") @@ -168,18 +179,29 @@ class VerifyConstraintResponse(_message.Message): def __init__(self, verdict: _Optional[_Union[Verdict, _Mapping]] = ..., instances: _Optional[_Iterable[_Union[Instance, _Mapping]]] = ..., error: _Optional[str] = ..., diagnostics: _Optional[_Iterable[_Union[Diagnostic, _Mapping]]] = ...) -> None: ... class VerifyRequirementRequest(_message.Message): - __slots__ = ("model_hash", "symbol_id", "subject_symbol_id", "engine", "question") + __slots__ = ("model_hash", "symbol_id", "subject_symbol_id", "engine", "question", "arguments", "named_arguments") + class NamedArgumentsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: Value + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[Value, _Mapping]] = ...) -> None: ... MODEL_HASH_FIELD_NUMBER: _ClassVar[int] SYMBOL_ID_FIELD_NUMBER: _ClassVar[int] SUBJECT_SYMBOL_ID_FIELD_NUMBER: _ClassVar[int] ENGINE_FIELD_NUMBER: _ClassVar[int] QUESTION_FIELD_NUMBER: _ClassVar[int] + ARGUMENTS_FIELD_NUMBER: _ClassVar[int] + NAMED_ARGUMENTS_FIELD_NUMBER: _ClassVar[int] model_hash: str symbol_id: str subject_symbol_id: str engine: str question: str - def __init__(self, model_hash: _Optional[str] = ..., symbol_id: _Optional[str] = ..., subject_symbol_id: _Optional[str] = ..., engine: _Optional[str] = ..., question: _Optional[str] = ...) -> None: ... + arguments: _containers.RepeatedCompositeFieldContainer[Value] + named_arguments: _containers.MessageMap[str, Value] + def __init__(self, model_hash: _Optional[str] = ..., symbol_id: _Optional[str] = ..., subject_symbol_id: _Optional[str] = ..., engine: _Optional[str] = ..., question: _Optional[str] = ..., arguments: _Optional[_Iterable[_Union[Value, _Mapping]]] = ..., named_arguments: _Optional[_Mapping[str, Value]] = ...) -> None: ... class VerificationVerdict(_message.Message): __slots__ = ("case_id", "kind", "detail", "subcase", "requirement_id") diff --git a/client/python/opensysml/proto/sysml_pb2_grpc.py b/client/python/opensysml/proto/sysml_pb2_grpc.py index d6dd7a8b88..f95948ee9a 100644 --- a/client/python/opensysml/proto/sysml_pb2_grpc.py +++ b/client/python/opensysml/proto/sysml_pb2_grpc.py @@ -5,7 +5,7 @@ from . import sysml_pb2 as sysml__pb2 -GRPC_GENERATED_VERSION = '1.83.0' +GRPC_GENERATED_VERSION = '1.84.0' GRPC_VERSION = grpc.__version__ _version_not_supported = False diff --git a/client/python/tests/test_verification_arguments.py b/client/python/tests/test_verification_arguments.py new file mode 100644 index 0000000000..69d9f8eb8c --- /dev/null +++ b/client/python/tests/test_verification_arguments.py @@ -0,0 +1,168 @@ +"""Tests for the arguments a verification binds to a requirement's or constraint's ``in`` parameters. + +The unit half checks the client sends the bindings as values and refuses to +send them to a service without ``verification_arguments``. The service half +checks a real service binds them, so its tests need a service. +""" + +from unittest.mock import Mock, patch + +import pytest + +from opensysml.capabilities import ( + CAPABILITY_VERIFICATION, + CAPABILITY_VERIFICATION_ARGUMENTS, + MissingCapabilityError, +) +from opensysml.connection import Connection +from opensysml.errors import InvalidRequestError +from opensysml.proto import sysml_pb2 +from tests.service_gate import fail_if_service_promised, is_server_available + +MODEL_SOURCE = ''' +package Demo { + private import ScalarValues::*; + part def Thing { attribute v : Integer = 2; } + part t : Thing; + requirement def Under { + subject s : Thing; + in limit : Integer; + in slack : Integer = 0; + require constraint { s.v + slack < limit } + } + constraint def Between { + in low : Integer; + in high : Integer = 10; + low < high + } +} +''' + + +def make_connection(stub, capabilities=None): + """Build a Connection over a mock stub reporting the given capabilities.""" + stub.GetServerInfo.return_value = sysml_pb2.ServerInfoResponse( + version="test", + capabilities=list(capabilities or [CAPABILITY_VERIFICATION]), + ) + with patch('grpc.insecure_channel'): + with patch( + 'opensysml.proto.sysml_pb2_grpc.SysMLServiceStub', + return_value=stub, + ): + return Connection(auto_start=False) + + +def holding(kind): + return sysml_pb2.Verdict(kind=kind, element_id="Demo::x", holds=True, status="holds") + + +def test_requirement_arguments_are_sent_as_values(): + stub = Mock() + stub.VerifyRequirement.return_value = sysml_pb2.VerifyRequirementResponse( + verdict=holding("requirement"), + ) + conn = make_connection( + stub, capabilities=[CAPABILITY_VERIFICATION, CAPABILITY_VERIFICATION_ARGUMENTS], + ) + verdict = conn.verify_requirement( + "Demo::Under", "hash1", subject_symbol_id="Demo::t", + arguments=[5], named_arguments={"slack": 1}, + ) + request = stub.VerifyRequirement.call_args[0][0] + assert request.subject_symbol_id == "Demo::t" + assert [arg.int_value for arg in request.arguments] == [5] + assert request.named_arguments["slack"].int_value == 1 + assert verdict.holds + + +def test_constraint_arguments_are_sent_as_values(): + stub = Mock() + stub.VerifyConstraint.return_value = sysml_pb2.VerifyConstraintResponse( + verdict=holding("constraint"), + ) + conn = make_connection( + stub, capabilities=[CAPABILITY_VERIFICATION, CAPABILITY_VERIFICATION_ARGUMENTS], + ) + conn.verify_constraint("Demo::Between", "hash1", named_arguments={"low": 3, "high": 4.5}) + request = stub.VerifyConstraint.call_args[0][0] + assert request.named_arguments["low"].int_value == 3 + assert request.named_arguments["high"].real_value == 4.5 + assert list(request.arguments) == [] + + +def test_omitted_arguments_send_none_and_need_no_capability(): + stub = Mock() + stub.VerifyRequirement.return_value = sysml_pb2.VerifyRequirementResponse( + verdict=holding("requirement"), + ) + conn = make_connection(stub, capabilities=[CAPABILITY_VERIFICATION]) + conn.verify_requirement("Demo::Under", "hash1", subject_symbol_id="Demo::t") + request = stub.VerifyRequirement.call_args[0][0] + assert list(request.arguments) == [] + assert dict(request.named_arguments) == {} + + +@pytest.mark.parametrize("kwargs", [ + {"arguments": [5]}, + {"named_arguments": {"limit": 5}}, +]) +def test_arguments_are_refused_before_sending_without_the_capability(kwargs): + stub = Mock() + conn = make_connection(stub, capabilities=[CAPABILITY_VERIFICATION]) + with pytest.raises(MissingCapabilityError) as refused: + conn.verify_requirement("Demo::Under", "hash1", **kwargs) + assert CAPABILITY_VERIFICATION_ARGUMENTS in str(refused.value) + stub.VerifyRequirement.assert_not_called() + with pytest.raises(MissingCapabilityError): + conn.verify_constraint("Demo::Between", "hash1", **kwargs) + stub.VerifyConstraint.assert_not_called() + + +_AVAILABLE = is_server_available() +fail_if_service_promised(_AVAILABLE) + + +@pytest.mark.integration +@pytest.mark.skipif(not _AVAILABLE, reason="sysml-grpc server not running") +class TestVerificationArguments: + """Argument bindings against a real service.""" + + def setup_method(self): + self.conn = Connection(auto_start=False) + self.model = self.conn.load_from_content(MODEL_SOURCE) + + def teardown_method(self): + self.conn.close() + + def test_requirement_binds_its_subject_and_named_arguments(self): + verdict = self.model.verify_requirement( + "Demo::Under", subject="Demo::t", named_arguments={"limit": 5}, + ) + assert verdict.holds, verdict.error + failing = self.model.verify_requirement( + "Demo::Under", subject="Demo::t", arguments=[5, 4], + ) + assert not failing.holds + assert not failing.error + + def test_constraint_binds_positional_and_named_arguments(self): + assert self.model.verify_constraint("Demo::Between", arguments=[3]).holds + verdict = self.model.verify_constraint( + "Demo::Between", arguments=[3], named_arguments={"high": 1}, + ) + assert not verdict.holds + + def test_an_unbound_or_unknown_parameter_is_undecided(self): + unbound = self.model.verify_requirement("Demo::Under", subject="Demo::t") + assert unbound.error + unknown = self.model.verify_requirement( + "Demo::Under", subject="Demo::t", named_arguments={"limit": 5, "bound": 1}, + ) + assert "bound" in unknown.error + + def test_a_proof_question_takes_no_arguments(self): + with pytest.raises(InvalidRequestError): + self.model.verify_constraint( + "Demo::Between", question="holds", arguments=[3], + ) diff --git a/client/rust/conformance/src/main.rs b/client/rust/conformance/src/main.rs index 3fb93b58e3..4ebc3984d1 100644 --- a/client/rust/conformance/src/main.rs +++ b/client/rust/conformance/src/main.rs @@ -987,6 +987,7 @@ impl Runner { subject: optional(subject), engine: optional(engine), question: optional(question), + ..VerifyOptions::default() } } diff --git a/client/rust/conformance/sysml.descriptor.binpb b/client/rust/conformance/sysml.descriptor.binpb index 8753d8208eeec272ac80719d51a48a17e5f6d5d4..afa03c50b864d718fd69c2df2c779d2f1bcc0b90 100644 GIT binary patch delta 43693 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 delta 42987 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, + /// Positional arguments bound to the element's `in` parameters in declaration order. + pub arguments: Vec, + /// Arguments bound by parameter name. + pub named_arguments: BTreeMap, /// The engine to ask; `None` or [`ENGINE_AUTO`] lets the service choose. pub engine: Option, /// The question to ask; `None` or [`QUESTION_EVALUATE`] evaluates the values held. @@ -693,6 +697,19 @@ impl Connection { Ok(capabilities) } + /// The capabilities a verification with its argument bindings needs: those of + /// its engine and question, and `verification_arguments` once any is bound. + fn verify_capabilities(&self, options: &VerifyOptions) -> Result, Error> { + let mut capabilities = + self.verification_capabilities(options.engine.as_deref(), options.question.as_deref())?; + if !options.arguments.is_empty() || !options.named_arguments.is_empty() { + self.require_all(&[CAPABILITY_VERIFICATION_ARGUMENTS])?; + capabilities.push(CAPABILITY_VERIFICATION_ARGUMENTS); + capabilities = with_values(capabilities); + } + Ok(capabilities) + } + /// Ask whether a constraint holds, as `%verify` does. pub fn verify_constraint( &self, @@ -700,8 +717,7 @@ impl Connection { constraint_id: &str, options: &VerifyOptions, ) -> Result { - let capabilities = - self.verification_capabilities(options.engine.as_deref(), options.question.as_deref())?; + let capabilities = self.verify_capabilities(options)?; let response: wire::VerifyConstraintResponse = self.gated_rpc( "VerifyConstraint", wire::VerifyConstraintRequest { @@ -710,6 +726,8 @@ impl Connection { subject_symbol_id: options.subject.clone().unwrap_or_default(), engine: engine_field(options.engine.as_deref()), question: question_field(options.question.as_deref()), + arguments: self.values_to_wire(&options.arguments)?, + named_arguments: self.named_to_wire(&options.named_arguments)?, }, &capabilities, )?; @@ -730,8 +748,7 @@ impl Connection { requirement_id: &str, options: &VerifyOptions, ) -> Result { - let capabilities = - self.verification_capabilities(options.engine.as_deref(), options.question.as_deref())?; + let capabilities = self.verify_capabilities(options)?; let response: wire::VerifyRequirementResponse = self.gated_rpc( "VerifyRequirement", wire::VerifyRequirementRequest { @@ -740,6 +757,8 @@ impl Connection { subject_symbol_id: options.subject.clone().unwrap_or_default(), engine: engine_field(options.engine.as_deref()), question: question_field(options.question.as_deref()), + arguments: self.values_to_wire(&options.arguments)?, + named_arguments: self.named_to_wire(&options.named_arguments)?, }, &capabilities, )?; diff --git a/client/rust/opensysml/src/proto/sysml/sysml.rs b/client/rust/opensysml/src/proto/sysml/sysml.rs index 951f2b1187..996ce4e95b 100644 --- a/client/rust/opensysml/src/proto/sysml/sysml.rs +++ b/client/rust/opensysml/src/proto/sysml/sysml.rs @@ -122,7 +122,7 @@ pub struct Bound { pub reached: bool, } /// VerifyConstraintRequest asks whether a constraint holds, as %constraint does. -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct VerifyConstraintRequest { #[prost(string, tag="1")] pub model_hash: ::prost::alloc::string::String, @@ -151,6 +151,15 @@ pub struct VerifyConstraintRequest { /// and need an SMT solver. #[prost(string, tag="5")] pub question: ::prost::alloc::string::String, + /// Values for the constraint's `in` parameters, in declaration order, as + /// RunAnalysisRequest.arguments binds a case's; an argument the constraint + /// does not take is INVALID_ARGUMENT, as is a parameter left without an + /// argument or default. Reported as the "verification_arguments" capability. + #[prost(message, repeated, tag="6")] + pub arguments: ::prost::alloc::vec::Vec, + /// Values for `in` parameters by name; see arguments. + #[prost(map="string, message", tag="7")] + pub named_arguments: ::std::collections::HashMap<::prost::alloc::string::String, Value>, } /// VerifyConstraintResponse carries the verdict; its engine, strength and bounds /// are on the verdict. @@ -171,7 +180,7 @@ pub struct VerifyConstraintResponse { } /// VerifyRequirementRequest asks whether a requirement is satisfied, as /// %requirement does. -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct VerifyRequirementRequest { #[prost(string, tag="1")] pub model_hash: ::prost::alloc::string::String, @@ -188,6 +197,13 @@ pub struct VerifyRequirementRequest { /// The question asked; see VerifyConstraintRequest.question. #[prost(string, tag="5")] pub question: ::prost::alloc::string::String, + /// Values for the requirement's `in` parameters, positional and by name; see + /// VerifyConstraintRequest.arguments. Reported as the "verification_arguments" + /// capability. + #[prost(message, repeated, tag="6")] + pub arguments: ::prost::alloc::vec::Vec, + #[prost(map="string, message", tag="7")] + pub named_arguments: ::std::collections::HashMap<::prost::alloc::string::String, Value>, } /// VerificationVerdict is what the body of a verification case answered when it /// ran: the VerdictKind its return bound, which is a separate answer from whether diff --git a/cmd/sysml/check_test.go b/cmd/sysml/check_test.go index 8eff463915..0109ba8d26 100644 --- a/cmd/sysml/check_test.go +++ b/cmd/sysml/check_test.go @@ -753,3 +753,42 @@ func TestSelfCheckPackageFlagReportsWhatCannotApply(t *testing.T) { t.Errorf("JSON report status=%d is invalid or missing its summary:\n%s", jsonReport.status, jsonReport.output()) } } + +// boundModel reads `in` parameters in its conditions, so a check of either +// element needs arguments for them. +const boundModel = `package Bound { + private import ScalarValues::*; + part def Thing { attribute v : Integer = 2; } + part t : Thing; + requirement def Under { + subject s : Thing; + in limit : Integer; + in slack : Integer = 0; + require constraint { s.v + slack < limit } + } + constraint def Between { + in low : Integer; + in high : Integer = 10; + low < high + } +} +` + +// TestCheckArguments checks that -constraint and -requirement take arguments for +// the element's in parameters and an object as its subject, as -analysis does. +func TestCheckArguments(t *testing.T) { + binary := buildCLI(t) + + wantReport(t, check(t, binary, boundModel, "-instantiate", "Bound::t", + "-constraint", "Bound::Between(3)", "-requirement", "Bound::Under(limit = 5) Bound::t"), + 0, "✓ Constraint Bound::Between(3) passed", "✓ Requirement Bound::Under(limit = 5) satisfied") + + wantReport(t, check(t, binary, boundModel, "-instantiate", "Bound::t", "-requirement", "Bound::Under(5, 4) Bound::t"), + 1, "✗ Requirement Bound::Under(5, 4) failed") + + wantReport(t, check(t, binary, boundModel, "-instantiate", "Bound::t", "-requirement", "Bound::Under(limit = 5, bound = 1) Bound::t"), + 2, "bound") + + wantReport(t, check(t, binary, boundModel, "-constraint", "Bound::Between(3"), + 2, "not closed") +} diff --git a/cmd/sysml/usage.go b/cmd/sysml/usage.go index c5ce4c4363..635e679ab4 100644 --- a/cmd/sysml/usage.go +++ b/cmd/sysml/usage.go @@ -88,7 +88,9 @@ func doc() usage.Doc { "every verification case verifying the requirement. -analysis takes " + "arguments for the case's inputs and an object as its subject, as " + "-analysis \"Pkg::Case(3.0) Pkg::part\"; a verification case also " + - "reports the verdict its body produced.", + "reports the verdict its body produced. -constraint and -requirement " + + "take arguments for the element's in parameters and a subject the " + + "same way, as -requirement \"Pkg::Under(limit = 5) Pkg::part\".", }, }, { Title: "Running actions and state machines", @@ -650,10 +652,10 @@ func registerFlags(fs *flag.FlagSet) { fs.Var(&enabledLints, "enable-lint", "Report this opt-in lint, off by default, in the model's diagnostics: rounded-real-literal, comma-separated or repeated; -disable-lint wins") fs.BoolVar(&noRecordCache, "no-record-cache", false, "Parse every file loaded and hold it loaded, reading no interface record from the record cache and writing none; default off, or OPENSYSML_RECORD_CACHE=0") fs.BoolVar(&strictMode, "strict", false, "Judge the model as conforming SysML v2: notation no pinned production admits is an error, not a warning; a SysML v1 migration writes none of it and refers to no OpenSysML library") - fs.Var(&modelChecks.constraints, "constraint", "Evaluate this constraint and exit (repeatable)") + fs.Var(&modelChecks.constraints, "constraint", "Evaluate this constraint and exit, with arguments for its in parameters and an object as its subject, as -constraint \"Pkg::Fits(3.0) Pkg::part\" (repeatable)") fs.BoolVar(&modelChecks.selfCheck, "self-check", false, "Apply the SysMLValidation constraints to every reflectively classified model element and exit") fs.Var(&modelChecks.selfCheckPackages, "self-check-package", "Apply this package's constraint defs with the SysMLValidation ones, as -self-check-package Acme::ModelingRules; implies -self-check (repeatable)") - fs.Var(&modelChecks.requirements, "requirement", "Evaluate this requirement, and every verification case verifying it, and exit (repeatable)") + fs.Var(&modelChecks.requirements, "requirement", "Evaluate this requirement, and every verification case verifying it, and exit; takes arguments and a subject as -constraint does (repeatable)") fs.Var(&modelChecks.satisfy, "satisfy", "Evaluate every satisfaction assertion, or with -satisfy= those the named element states, and exit (repeatable)") fs.Var(&modelChecks.calcs, "calc", "Invoke this calculation and report its result, as -calc \"Fall(3, 4)\" (repeatable)") fs.Var(&modelChecks.analyses, "analysis", "Run this analysis or verification case and report its outputs and verdict, as -analysis \"Pkg::Case(3.0) Pkg::part\" (repeatable)") diff --git a/docs/clients/python/verification.md b/docs/clients/python/verification.md index 953f76ceba..7cfd9f03fa 100644 --- a/docs/clients/python/verification.md +++ b/docs/clients/python/verification.md @@ -43,6 +43,23 @@ verdict.diagnostics verdict.explain() ``` +A requirement or constraint whose condition reads `in` parameters takes their +values at verification time: `arguments` binds them positionally in declaration +order, `named_arguments` by name, and the two may be mixed, as `run_analysis` +binds a case's inputs. An unknown name, more positional values than parameters, +a parameter left without a value, default or same-named value on the checked object, or a value not of the parameter's +type is reported through `verdict.error`. Arguments need the +`verification_arguments` capability; only the evaluate question takes them. + +```python +verdict = model.verify_requirement( + "Demo::Under", + subject="Demo::sedan", + named_arguments={"limit": 5}, +) +model.verify_constraint("Demo::Between", arguments=[3], named_arguments={"high": 4}) +``` + `WrongKindError` is raised when a valid symbol is not the kind the method requires; it is an invalid request, not a false verdict. A model with no satisfaction assertions in a requested scope returns no verdicts, and diff --git a/docs/reference/api.md b/docs/reference/api.md index 4644072117..26dab465ac 100644 --- a/docs/reference/api.md +++ b/docs/reference/api.md @@ -79,6 +79,14 @@ satisfiable answer carries `Witness`, the free features' replayed values with th spellings; undecided names the reason and reports `ReasonUndecided`. A question other than evaluate needs the `verification_questions` capability, checked before anything is sent. +`VerifyConstraint` and `VerifyRequirement` also take `VerifyArguments(values...)` and +`VerifyArgument(name, value)`, binding the element's `in` parameters positionally in declaration +order or by name, as `Arguments` and `Argument` bind a case's for `RunAnalysis`. A name no parameter +has, more positional values than parameters, a parameter left without a value, default or same-named value on the checked object, or a value +not of the parameter's type is an undecided `Verdict` naming it. Arguments need the +`verification_arguments` capability, checked before anything is sent, and only the evaluate question +takes them: `QuestionHolds` and `QuestionSatisfiable` leave the free features to the solver. + ```go exploration, err := client.ExploreAction(ctx, model, "Demo::race", nil) for _, outcome := range exploration.Outcomes { diff --git a/docs/reference/cli.md b/docs/reference/cli.md index 8459356425..0b17981410 100644 --- a/docs/reference/cli.md +++ b/docs/reference/cli.md @@ -294,10 +294,10 @@ written in, so the verdicts are about that object: |------|--------| | `-validate` | Only that the model analyses cleanly and that the objects `-instantiate` asked for could be built; it says nothing about the model's constraints | | `-validate=` | Every assertion about an object `-instantiate` created and the objects it holds, as `%validate` does: each `assert constraint` the carrier's type declares or inherits, each requirement usage it carries and each `satisfy` assertion whose subject is in the tree, one verdict per assertion per object, root first and then each held object as the walk reaches it (`Fleet::car.wheels[2]`), then one verdict about the object as a whole — valid only when every assertion holds and every held object was reached, so an assertion that could not be evaluated or a walk cut short by an object graph without end leaves it undecided rather than valid, as does an object no assertion is about (`states no assertion to validate`, exit status 2). The object is named as `%validate` names it: the usage's name, a feature path to a part it holds (`Fleet::car.engine`), or the id the report prints (`#2`). A constraint declared without `assert` is not swept; name it with `-constraint`. Repeatable; `-validate=false` asks for nothing and withdraws a bare `-validate` written before it, as `-satisfy=false` does | -| `-constraint ` | One constraint, as `%constraint` does | +| `-constraint "[()] [object]"` | One constraint, as `%constraint` does. Arguments in parentheses bind the constraint's `in` parameters, positionally in declaration order or by name (`-constraint "Pkg::Between(3, high = 4)"`), evaluated as `-calc`'s are; an object `-instantiate` created after them is the subject the verdict is about (`-constraint "Pkg::Fits(3.0) Pkg::part"`). An unknown name, more positional arguments than parameters, a parameter left without an argument, default or same-named value on the checked object, or a value not of the parameter's type leaves the check undecided (exit status 2) | | `-self-check` | Applies the 50 constraints in the OpenSysML `SysMLValidation` library to each reflectively classified element in the workspace. A false result or evaluation error fails; a reflective feature not derived is counted as unevaluated, not as a failure. Runs only after the model analyses cleanly | | `-self-check-package ` | Applies the `constraint def`s of the named package — nested packages included — together with the `SysMLValidation` ones in the same element walk; implies `-self-check`. Repeatable. See [Writing self-check rules](#writing-self-check-rules) | -| `-requirement ` | One requirement, as `%requirement` does, with [the verdict of every verification case](#verification-case-verdicts) verifying it beside its own | +| `-requirement "[()] [object]"` | One requirement, as `%requirement` does, with [the verdict of every verification case](#verification-case-verdicts) verifying it beside its own. Arguments and a subject are written as for `-constraint` (`-requirement "Pkg::Under(limit = 5) Pkg::part"`) | | `-satisfy` | Every satisfaction assertion the model states, with [the verdict of every verification case](#verification-case-verdicts) verifying the requirement beside each | | `-satisfy=` | Only the assertions the named element states (`-satisfy=false` asks for none) | | `-instantiate ` | Creates an object first, so the verdicts are about it; with `-run-query` or `-render-document`, so the query reads it ([Objects the session holds](../manual/query-cookbook.md#objects-the-session-holds)). Under `-schedule explore`, `-engine check`, `smt` or `all` each run creates an object of the declaration of its own before its behaviors start, one per `-instantiate` as the session holds one per `-instantiate`, which a `-state` or `-action` named alone attaches to and a path such as `Mission::mission.vehicle` walks into ([Objects an exploration runs on](#objects-an-exploration-runs-on)) | diff --git a/docs/reference/julia-api.md b/docs/reference/julia-api.md index 18e11ff663..c2a731dcfa 100644 --- a/docs/reference/julia-api.md +++ b/docs/reference/julia-api.md @@ -124,8 +124,10 @@ client's unit semantics. `unit`, `describe`, `exponents`, `magnitudes`, ## Verification, execution, analyses, and sweeps ```julia -verify_constraint(model, "Demo::constraint"; question=nothing, engine=nothing) -verify_requirement(model, "Demo::requirement"; question=nothing, engine=nothing) +verify_constraint(model, "Demo::constraint"; question=nothing, engine=nothing, + arguments=Any[], named_arguments=Dict()) +verify_requirement(model, "Demo::requirement"; question=nothing, engine=nothing, + arguments=Any[], named_arguments=Dict()) verify_satisfaction(model, "Demo::satisfy"; question=nothing, engine=nothing) satisfied(model, "Demo::requirement"; question=nothing, engine=nothing) validate_instance(model, "Demo::car"; engine=nothing) diff --git a/docs/reference/repl-commands.md b/docs/reference/repl-commands.md index 5632321f15..a4de703442 100644 --- a/docs/reference/repl-commands.md +++ b/docs/reference/repl-commands.md @@ -94,9 +94,9 @@ into the parts it holds (`car.fl.hub`, `#3.fl`, `car.wheels[2]`). | `%seed [\|off]` | Show or set the model seed the runs started from then on — `%action`, `%state`, `%analysis`, a `%sweep` row — draw their modeled randomness from, whatever `%schedule` is: the branch a `@Probability`-weighted decision takes, the value a `RandomFunctions` call returns. `off` (the initial state) leaves it to the schedule: under `%schedule seed:` the model draws from `n` on a stream of its own, and under any other schedule a run that must draw a value is refused naming the call and this command, while a weighted decision takes its most probable branch. The seed is applied to the context the session holds as well, so a debugging session started after `%seed 7` draws from `7`; a value that is not a non-negative whole number or `off` is refused and the seed left as it was | | `%draws []` | Show or set how the runs started from then on — `%action`, `%state`, `%analysis`, a `%runs` row, the debugger's session — resolve the draws of `RandomFunctions` (`uniform`, `uniformInteger`, `triangular`, `normal`): `random` (the initial state) draws each call from the model seed; `min`, `max` and `average` resolve each call to the least, greatest or mean value of its distribution instead and need no seed (`min` and `max` read a bounded call's interval closed at both ends, so `uniform(lo, hi)` is `lo` or `hi`), so a run whose only randomness is its durations completes deterministically; `normal` with a positive deviation has no least or greatest value, so a run that calls it under `min` or `max` stops with an error naming the call and the policy (`normal(m, 0)` is `m` under every policy, `random` included, and needs no seed). Weighted decisions are not durations: they draw from the seed under every policy, and unseeded take their most probable branch. The policy is applied to the context the session holds as well, so a debugging session started after `%draws max` draws at the max, while a run under way — a paused debugging session included — keeps the policy it started under; a spelling that is none of the four, or more than one word, is refused and the policy left as it was. Every witness `%check-witness` writes records a fixed policy as `draws by `, which `%replay` runs under. Same policy as the CLI's [`-draws`](cli.md#running-an-action-many-times) | | `%clock-step []` | Show or set the step the clock of the runs started from then on — `%action`, `%state`, `%analysis`, a `%runs` row, the debugger's session — ticks by, as a simulation tool's fixed-step clock does: a wait comes due at the first multiple of the step not before the instant it ends, so under `%clock-step 1` a wait of `2.3 [s]` set at `t=0` comes due at `t=3.0`; `0` (the initial state) is a continuous clock, on which a wait comes due exactly when it ends. The step is applied to the context the session holds as well, so a debugging session's waits set after `%clock-step 10` come due on tens, while a wait already queued keeps its instant; a step that is no finite, non-negative number, or more than one word, is refused and the step left as it was. Every witness `%check-witness` writes for a stepped run records it as `clock steps by `, which `%replay` runs on. Same step as the CLI's [`-clock-step`](cli.md#running-an-action-many-times) | -| `%constraint ` | Evaluate constraint (assert/assume) | +| `%constraint [()] []` | Evaluate constraint (assert/assume). Arguments in parentheses bind the constraint's `in` parameters, positionally in declaration order (`%constraint Pkg::Between(3)`) or by name (`%constraint Pkg::Between(low = 3, high = 4)`), evaluated at the prompt like `%calc`'s; an [object reference](#object-references) after them is the subject the verdict is about (`%constraint Pkg::Fits(3.0) Pkg::part`), the object the session holds for the constraint's carrier otherwise. A name no parameter has, more positional arguments than parameters, a parameter left without an argument, default or same-named value on the checked object, or a value not of the parameter's type is refused naming it | | `%invoke [

=]` | Invoke an operation of an object's type (an action it owns), performed by that object, given as an [object reference](#object-references) (`%invoke car start`, `%invoke #3 start`, `%invoke car.engine start`), with arguments given as a positional list or as `=` pairs; mixing named and positional forms is refused. Assignments in the body write that object's feature values; declared outputs are reported. An operation given as a `calc` or `constraint` is not supported through this command | -| `%requirement ` | Evaluate requirement (subject/assume/require/actor), reporting beside its verdict the `VerdictKind` the body of every verification case verifying it produced | +| `%requirement [()] []` | Evaluate requirement (subject/assume/require/actor), reporting beside its verdict the `VerdictKind` the body of every verification case verifying it produced. Arguments for its `in` parameters and an object as its subject are written as for `%constraint` (`%requirement Pkg::Under(limit = 5) Pkg::part`) | | `%satisfy [name]` | Evaluate satisfaction assertions of the model, or of one element, reporting beside each verdict the `VerdictKind` the body of every verification case verifying the requirement produced | | `%validate ` | Evaluate every assertion about an object the session holds and the objects it holds in turn, given as an [object reference](#object-references) (`%validate car`, `%validate #3`, `%validate car.wheels[2]`): each `assert constraint` the carrier's type declares or inherits, each requirement usage it carries, and each `satisfy` assertion whose subject is in the tree — one verdict per assertion per object, root first and then each held object as the walk reaches it, each naming its object by the path from the one validated (`Demo::car.wheels[2]`, indexes counted from 1), then one verdict about the object as a whole with its `standing:`. An assertion that could not be evaluated is `?` undecided with the reason, not `✗`; the object is valid only when every assertion holds and every held object was reached, so an undecided assertion, or a walk cut short by an object graph without end, leaves it `not shown valid` rather than valid, and an object no assertion is about `states no assertion to validate` and is not shown valid either. A constraint declared without `assert` is not swept; `%constraint` checks it by name. Verifying verification cases are reported beside a requirement's verdict as `%requirement` reports them. Refuses a name no object is held under (`no instance of "car" (use %instantiate first)`) | | `%check ` | **Experimental.** Ask an external SMT solver whether a constraint, requirement or satisfaction assertion *can* be satisfied, and on `sat` print an assignment. Reports `sat`, `unsat` or `unknown`, kept distinct. Needs `z3` or `cvc5` on `PATH` (or `OPENSYSML_SMT`; see [installing a solver](../guide/01-install.md#installing-a-solver-optional)) and reports an error rather than a verdict when none is installed. Satisfiability is not evaluation: use `%constraint`/`%satisfy` to find out what holds for an object | diff --git a/docs/reference/wire-contract.md b/docs/reference/wire-contract.md index 02d69739b3..e2a6bafa99 100644 --- a/docs/reference/wire-contract.md +++ b/docs/reference/wire-contract.md @@ -1669,6 +1669,22 @@ never both. one per assertion. All three return the `instances` they built, in the same shape as `Instantiate`. +A constraint or requirement whose condition reads `in` parameters takes their values on the +request: `arguments` is a positional list bound in declaration order, `namedArguments` binds by +parameter name, and the two may be mixed, as `RunAnalysis` binds a case's inputs; the values are +`Value` messages in the shapes [`EvaluateCalc`](#evaluatecalc) accepts. A name no parameter has, +more positional values than parameters, a parameter left without a value, default or same-named value on the checked object, or a value +not of the parameter's type is an undecided `verdict` whose `error` names it, not a status error. +Only the evaluate question takes them: `holds` and `satisfiable` with any argument are +`INVALID_ARGUMENT`, since the solver chooses the free features' values. The service advertises the +fields as the `verification_arguments` capability; a request binding none needs it no more than +before. + +```console +$ … /VerifyRequirement -d '{"modelHash":"9794…8610","symbolId":"Demo::Under","subjectSymbolId":"Demo::sedan","namedArguments":{"limit":{"intValue":"5"}}}' +{"verdict":{"kind":"requirement","elementId":"Demo::Under","element":"Demo::Under","holds":true,"instanceId":"1","instanceTypeId":"Demo::sedan"},"instances":[…]} +``` + ```console $ … /VerifyConstraint -d '{"modelHash":"9794…8610","symbolId":"Demo::Vehicle::massPositive"}' {"verdict":{"kind":"constraint","elementId":"Demo::Vehicle::massPositive","element":"Demo::Vehicle::massPositive","holds":true}} diff --git a/internal/exec/runtime/check_args.go b/internal/exec/runtime/check_args.go new file mode 100644 index 0000000000..d70ba03af1 --- /dev/null +++ b/internal/exec/runtime/check_args.go @@ -0,0 +1,147 @@ +package runtime + +import ( + "fmt" + + "github.com/Open-MBEE/OpenSysML/internal/semantic/symbols" + "github.com/Open-MBEE/OpenSysML/internal/syntax/ast" +) + +// CheckArgs are the values a check of a constraint or requirement supplies for +// its `in` parameters: by position in declaration order, the subject never +// among them, or by name. The zero value supplies nothing. +type CheckArgs struct { + Positional []Value + Named map[string]Value +} + +// checkParameter is one `in` parameter a constraint or requirement declares, +// as the member closest to the checked element declares it. +type checkParameter struct { + name string + names []string + member scopedMember + def ast.Node +} + +// checkParameters are the `in` parameters sym declares or inherits, in +// declaration order, each under the declaration closest to sym. +func (ctx *Context) checkParameters(sym *symbols.Symbol, members []scopedMember) []checkParameter { + superseded := ctx.redefinedAmong(sym, members) + var params []checkParameter + index := make(map[string]int) + for _, member := range members { + usage, ok := member.node.(*ast.Usage) + if !ok || usage.Kind == ast.UsageSubject || usage.Kind == ast.UsageActor { + continue + } + if usage.Direction != ast.DirIn && usage.Direction != ast.DirInOut { + continue + } + name := effectiveName(usage) + if name == "" { + continue + } + if memberSym := memberSymbol(member.scope, usage); memberSym != nil && superseded[memberSym] { + continue + } + param := checkParameter{ + name: name, + names: ctx.memberNames(sym, member, name, usage.Ident.ShortName), + member: member, + def: usage.Value, + } + if at, seen := index[name]; seen { + if param.def == nil { + param.def = params[at].def + } + params[at] = param + continue + } + index[name] = len(params) + params = append(params, param) + } + return params +} + +// bindCheckArgs binds args to the `in` parameters of the checked element into +// bindings, under every name each parameter is known by. An argument naming no +// parameter, more positional arguments than open parameters, or a parameter left +// with no argument, no default and no same-named value on the checked object +// self to read instead is refused before any value is held. +func (ctx *Context) bindCheckArgs(sym *symbols.Symbol, kind, element string, members []scopedMember, self *Instance, args CheckArgs, bindings map[string]Value) error { + params := ctx.checkParameters(sym, members) + label := kind + " " + element + bound := make(map[string]Value, len(args.Named)+len(args.Positional)) + for name, value := range args.Named { + if !hasCheckParameter(params, name) { + return fmt.Errorf("%w: %s has no input parameter %q", ErrUnknownParameter, label, name) + } + bound[name] = value + } + open := make([]checkParameter, 0, len(params)) + for _, param := range params { + if _, ok := bound[param.name]; !ok { + open = append(open, param) + } + } + if len(args.Positional) > len(open) { + return fmt.Errorf("%w: %s takes %d argument(s), got %d", ErrCalcArity, label, len(open), len(args.Positional)) + } + for i, value := range args.Positional { + bound[open[i].name] = value + } + for _, param := range params { + if _, ok := bound[param.name]; !ok && param.def == nil && !ctx.checkParameterOptional(param) && !ctx.carriesFeature(self, param.name) { + return fmt.Errorf("%w: %s parameter %q has no argument and no default", ErrUnboundParameter, label, param.name) + } + } + + commit, rollback := ctx.beginJournal() + for _, param := range params { + value, ok := bound[param.name] + if !ok { + continue + } + if err := ctx.holdBound(sym, param.member, fmt.Sprintf("%s: argument %s", label, param.name), value); err != nil { + rollback() + return err + } + for _, name := range param.names { + bindings[name] = value + } + } + commit() + return nil +} + +// carriesFeature reports whether inst holds a value under name, which an unbound +// parameter of a check on inst reads in place of an argument. +func (ctx *Context) carriesFeature(inst *Instance, name string) bool { + if inst == nil { + return false + } + fv, err := inst.GetFeatureValue(ctx, name) + return err == nil && fv != nil +} + +func hasCheckParameter(params []checkParameter, name string) bool { + for _, param := range params { + if param.name == name { + return true + } + } + return false +} + +// checkParameterOptional reports whether a parameter written with a multiplicity +// admitting no value (`[0..1]`) may go unbound. A bare `in` parameter may not: +// a condition cannot be decided over a missing value. +func (ctx *Context) checkParameterOptional(param checkParameter) bool { + usage, ok := param.member.node.(*ast.Usage) + if !ok || usage.Multiplicity == nil { + return false + } + sym := memberSymbol(param.member.scope, param.member.node) + return sym != nil && ctx.model.semantics.EffectiveParameterRange(sym).AllowsNone() +} diff --git a/internal/exec/runtime/check_args_test.go b/internal/exec/runtime/check_args_test.go new file mode 100644 index 0000000000..17b6e1ad14 --- /dev/null +++ b/internal/exec/runtime/check_args_test.go @@ -0,0 +1,88 @@ +package runtime + +import ( + "errors" + "strings" + "testing" +) + +// checkArgsModel declares a requirement and a constraint with `in` parameters, +// one defaulted and one not, and an object to check them against. +const checkArgsModel = `package test { + private import ScalarValues::*; + requirement def Under { + in v : Integer = 2; + in limit : Integer; + in slack : Integer = 0; + require constraint { v + slack < limit } + } + constraint def Between { + in low : Integer; + in high : Integer = 10; + low < high + } +}` + +func TestCheckRequirementWithBindsArguments(t *testing.T) { + m := parseLibraryModel(t, checkArgsModel) + ctx, _ := m.fresh() + under := m.idx.LookupQualified("test::Under")[0] + scope := under.OwnerScope + + cases := []struct { + name string + args CheckArgs + holds bool + err error + msg string + }{ + {"named holds", CheckArgs{Named: map[string]Value{"limit": integerValue(5)}}, true, nil, ""}, + {"named fails", CheckArgs{Named: map[string]Value{"limit": integerValue(2)}}, false, nil, ""}, + {"positional in declaration order", CheckArgs{Positional: []Value{integerValue(1), integerValue(6), integerValue(4)}}, true, nil, ""}, + {"positional beyond the default", CheckArgs{Positional: []Value{integerValue(1), integerValue(5), integerValue(5)}}, false, nil, ""}, + {"positional after named", CheckArgs{Positional: []Value{integerValue(1)}, Named: map[string]Value{"limit": integerValue(5)}}, true, nil, ""}, + {"unknown parameter", CheckArgs{Named: map[string]Value{"bound": integerValue(1)}}, false, ErrUnknownParameter, `no input parameter "bound"`}, + {"too many arguments", CheckArgs{Positional: []Value{integerValue(1), integerValue(2), integerValue(3), integerValue(4)}}, false, ErrCalcArity, "takes 3 argument(s), got 4"}, + {"unbound without default", CheckArgs{}, false, ErrUnboundParameter, `parameter "limit" has no argument and no default`}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + result, err := ctx.CheckRequirementWith(under, scope, nil, tc.args) + if tc.err != nil { + if !errors.Is(err, tc.err) || !strings.Contains(err.Error(), tc.msg) { + t.Fatalf("err = %v, want %v containing %q", err, tc.err, tc.msg) + } + return + } + if err != nil && !errors.Is(err, ErrViolated) { + t.Fatal(err) + } + if result.Holds != tc.holds { + t.Errorf("holds = %v, want %v", result.Holds, tc.holds) + } + }) + } +} + +func TestCheckConstraintWithBindsArguments(t *testing.T) { + m := parseLibraryModel(t, checkArgsModel) + ctx, _ := m.fresh() + between := m.idx.LookupQualified("test::Between")[0] + scope := between.OwnerScope + + result, err := ctx.CheckConstraintWith(between, scope, nil, CheckArgs{Positional: []Value{integerValue(3)}}) + if err != nil || !result.Holds { + t.Fatalf("Between(3) = %v, %v; want holds", result.Holds, err) + } + result, err = ctx.CheckConstraintWith(between, scope, nil, CheckArgs{Named: map[string]Value{"low": integerValue(3), "high": integerValue(1)}}) + if (err != nil && !errors.Is(err, ErrViolated)) || result.Holds { + t.Fatalf("Between(low = 3, high = 1) = %v, %v; want fails", result.Holds, err) + } + _, err = ctx.CheckConstraintWith(between, scope, nil, CheckArgs{Named: map[string]Value{"low": NewStringValue("x")}}) + if err == nil { + t.Fatal("a String bound to an Integer parameter was held") + } + if _, err = ctx.CheckConstraintOn(between, scope, nil); !errors.Is(err, ErrUnboundParameter) { + t.Fatalf("Between with low unbound: err = %v, want ErrUnboundParameter", err) + } +} diff --git a/internal/exec/runtime/context.go b/internal/exec/runtime/context.go index b028d53019..325f78d403 100644 --- a/internal/exec/runtime/context.go +++ b/internal/exec/runtime/context.go @@ -1229,26 +1229,38 @@ func (ctx *Context) EvaluateConstraintOn(sym *symbols.Symbol, scope *symbols.Sco // reports the object it turned out to be about, which a caller labelling the // verdict needs: it is not always the instance supplied. func (ctx *Context) CheckConstraintOn(sym *symbols.Symbol, scope *symbols.Scope, self *Instance) (CheckResult, error) { + return ctx.CheckConstraintWith(sym, scope, self, CheckArgs{}) +} + +// CheckConstraintWith is CheckConstraintOn with arguments bound to the +// constraint's `in` parameters for this check, as a calc's are for an invocation. +func (ctx *Context) CheckConstraintWith(sym *symbols.Symbol, scope *symbols.Scope, self *Instance, args CheckArgs) (CheckResult, error) { defer ctx.beginRun()() if err := RequireConstraint(sym); err != nil { return CheckResult{Subject: self}, err } return ctx.checkOn(sym, "constraint", sym.Name, sym, self, func(subject carrier) (CheckResult, error) { - return ctx.checkConstraintOn(sym, scope, subject) + return ctx.checkConstraintOn(sym, scope, subject, args) }) } -// checkConstraintOn is CheckConstraintOn evaluated on the object it resolved to. -func (ctx *Context) checkConstraintOn(sym *symbols.Symbol, scope *symbols.Scope, subject carrier) (CheckResult, error) { +// checkConstraintOn is CheckConstraintWith evaluated on the object it resolved to. +func (ctx *Context) checkConstraintOn(sym *symbols.Symbol, scope *symbols.Scope, subject carrier, args CheckArgs) (CheckResult, error) { + members := ctx.chainMembers(sym, scope) + bindings := make(map[string]Value) + if err := ctx.bindCheckArgs(sym, "constraint", sym.Name, members, subject.instance, args, bindings); err != nil { + return ctx.checkResultOf(false, subject), err + } // Evaluate every condition the constraint states, inherited ones included. - conds := ctx.conditionsOf(sym, ctx.chainMembers(sym, scope)) + conds := ctx.conditionsOf(sym, members) holds, err := ctx.evaluateConditions(conditionCheck{ - sym: sym, - kind: "constraint", - what: "assertion", - self: subject.instance, - negated: NegatedDecl(sym), + sym: sym, + kind: "constraint", + what: "assertion", + self: subject.instance, + bindings: mapFrame(bindings), + negated: NegatedDecl(sym), }, conds) return ctx.checkResultOf(holds, subject), err } @@ -1535,28 +1547,42 @@ func (ctx *Context) EvaluateRequirementOn(sym *symbols.Symbol, scope *symbols.Sc // CheckRequirementOn evaluates a requirement as EvaluateRequirementOn does and // also reports the object it turned out to be about. func (ctx *Context) CheckRequirementOn(sym *symbols.Symbol, scope *symbols.Scope, self *Instance) (CheckResult, error) { + return ctx.CheckRequirementWith(sym, scope, self, CheckArgs{}) +} + +// CheckRequirementWith is CheckRequirementOn with arguments bound to the +// requirement's `in` parameters for this check, as a calc's are for an invocation. +func (ctx *Context) CheckRequirementWith(sym *symbols.Symbol, scope *symbols.Scope, self *Instance, args CheckArgs) (CheckResult, error) { defer ctx.beginRun()() if err := RequireRequirement(sym); err != nil { return CheckResult{Subject: self}, err } return ctx.checkOn(sym, "requirement", sym.Name, sym, self, func(subject carrier) (CheckResult, error) { - return ctx.checkRequirementOn(sym, scope, subject) + return ctx.checkRequirementOn(sym, scope, subject, args) }) } -// checkRequirementOn is CheckRequirementOn evaluated on the object it resolved to. -func (ctx *Context) checkRequirementOn(sym *symbols.Symbol, scope *symbols.Scope, subject carrier) (CheckResult, error) { +// checkRequirementOn is CheckRequirementWith evaluated on the object it resolved to. +func (ctx *Context) checkRequirementOn(sym *symbols.Symbol, scope *symbols.Scope, subject carrier, args CheckArgs) (CheckResult, error) { // Requirement-local bindings are shared by every member, whichever scope it // was declared in. members := ctx.chainMembers(sym, scope) - // First pass: process subject/actor bindings - reqBindings, err := ctx.memberBindings(sym, "requirement", sym.Name, members, subject.instance, nil, frame{}) - + // First pass: process subject/actor bindings, then the arguments. + // An object supplied for a requirement no type declares is its subject: + // the declaration has no carrier of its own to read one from. + var supplied *Instance + if declaringType(sym) == nil { + supplied = subject.instance + } + reqBindings, err := ctx.memberBindings(sym, "requirement", sym.Name, members, subject.instance, supplied, frame{}) if err != nil { return ctx.checkResultOf(false, subject), err } + if err := ctx.bindCheckArgs(sym, "requirement", sym.Name, members, subject.instance, args, reqBindings); err != nil { + return ctx.checkResultOf(false, subject), err + } // Second pass: evaluate the assumed and required conditions. conds := ctx.conditionsOf(sym, members) diff --git a/internal/frontend/grpc/analysis.go b/internal/frontend/grpc/analysis.go index 9bb2b72303..0f3c453cfa 100644 --- a/internal/frontend/grpc/analysis.go +++ b/internal/frontend/grpc/analysis.go @@ -328,15 +328,28 @@ func (v *verifyContext) verificationVerdicts(verdicts []runtime.VerificationVerd // so a quantity keeps the units it is commensurable with. One the service // cannot read answers the request; one needing a capability it lacks fails the call. func (v *verifyContext) analysisArgument(arg *pb.Value) (runtime.Value, *pb.RunAnalysisResponse, error) { + val, readErr, err := v.argument(arg) + if err != nil { + return runtime.Value{}, nil, err + } + if readErr != nil { + return runtime.Value{}, &pb.RunAnalysisResponse{ + Error: fmt.Sprintf("analysis argument could not be read: %v", readErr), + FailureReason: failureReason(readErr), + }, nil + } + return val, nil, nil +} + +// argument reads one argument value. A value the service cannot serve is the +// second error (a status); one that does not read as a value is the first. +func (v *verifyContext) argument(arg *pb.Value) (runtime.Value, error, error) { if err := v.service.requireValueCapabilities(arg); err != nil { return runtime.Value{}, nil, err } val, err := protoconv.ProtoToRuntimeValue(v.runtime, arg, v.cached.Index, v.sem()) if err != nil { - return runtime.Value{}, &pb.RunAnalysisResponse{ - Error: fmt.Sprintf("analysis argument could not be read: %v", err), - FailureReason: failureReason(err), - }, nil + return runtime.Value{}, err, nil } return val, nil, nil } diff --git a/internal/frontend/grpc/robustness_verify_arguments_test.go b/internal/frontend/grpc/robustness_verify_arguments_test.go new file mode 100644 index 0000000000..7d256968c4 --- /dev/null +++ b/internal/frontend/grpc/robustness_verify_arguments_test.go @@ -0,0 +1,32 @@ +package grpc + +import ( + "context" + "testing" + + pb "github.com/Open-MBEE/OpenSysML/api/proto" +) + +// TestGRPCRobustnessVerifyArguments binds a requirement's parameters badly: a +// name no parameter has, a parameter left unbound, more positional values than +// parameters, and a value of the wrong type each leave the verdict undecided, +// naming the fault, rather than failing the call or deciding anything. +func TestGRPCRobustnessVerifyArguments(t *testing.T) { + srv := mustNewService(t, 10) + hash := mustVerifyModel(t, srv, verifyArgumentsModel, "verify-arguments-robustness") + + for name, req := range map[string]*pb.VerifyRequirementRequest{ + "unknown parameter": {ModelHash: hash, SymbolId: "Demo::Under", SubjectSymbolId: "Demo::t", NamedArguments: map[string]*pb.Value{"limit": integerArg(5), "bound": integerArg(1)}}, + "unbound parameter": {ModelHash: hash, SymbolId: "Demo::Under", SubjectSymbolId: "Demo::t"}, + "too many": {ModelHash: hash, SymbolId: "Demo::Under", SubjectSymbolId: "Demo::t", Arguments: []*pb.Value{integerArg(5), integerArg(0), integerArg(1)}}, + "wrong type": {ModelHash: hash, SymbolId: "Demo::Under", SubjectSymbolId: "Demo::t", NamedArguments: map[string]*pb.Value{"limit": {Kind: &pb.Value_StringValue{StringValue: "five"}}}}, + } { + resp, err := srv.VerifyRequirement(context.Background(), req) + if err != nil { + t.Fatalf("%s: VerifyRequirement: %v", name, err) + } + if resp.Verdict == nil || resp.Verdict.Error == "" { + t.Errorf("%s: want an undecided verdict, got %v (error %q)", name, resp.Verdict, resp.Error) + } + } +} diff --git a/internal/frontend/grpc/service.go b/internal/frontend/grpc/service.go index d9d8ac2ed3..6fc97c5071 100644 --- a/internal/frontend/grpc/service.go +++ b/internal/frontend/grpc/service.go @@ -54,6 +54,11 @@ const CapabilityVerification = "verification" // and the `question`, `status` and `witness` fields of every Verdict. const CapabilityVerificationQuestions = "verification_questions" +// CapabilityVerificationArguments names the `arguments` and `named_arguments` +// fields of VerifyConstraintRequest and VerifyRequirementRequest, which bind the +// checked element's `in` parameters as RunAnalysisRequest binds a case's. +const CapabilityVerificationArguments = "verification_arguments" + // CapabilityQuery names the capability of the Query RPC, which evaluates a // SysML v2 API & Services Query over a parsed model. const CapabilityQuery = "query" @@ -306,6 +311,7 @@ var capabilities = []string{ CapabilityMemberModifiers, CapabilityTransitionAuthoring, CapabilityVerificationQuestions, + CapabilityVerificationArguments, CapabilityVerificationObjectiveAuthoring, CapabilityMetadataAuthoring, CapabilityMetadataPrefixAuthoring, diff --git a/internal/frontend/grpc/verify.go b/internal/frontend/grpc/verify.go index bb09aba058..a852139e75 100644 --- a/internal/frontend/grpc/verify.go +++ b/internal/frontend/grpc/verify.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "sort" "connectrpc.com/connect" pb "github.com/Open-MBEE/OpenSysML/api/proto" @@ -295,12 +296,19 @@ func (s *Service) VerifyConstraint(ctx context.Context, req *pb.VerifyConstraint if err != nil { return &pb.VerifyConstraintResponse{Error: err.Error()}, nil } + args, readErr, err := v.checkArgs(question, req.Arguments, req.NamedArguments) + if err != nil { + return nil, err + } + if readErr != nil { + return &pb.VerifyConstraintResponse{Error: readErr.Error()}, nil + } if question != questionEvaluate { return v.proveConstraint(ctx, question, sym, inst) } result, plan, evalErr := v.check(ctx, req.SymbolId, func(rt *runtime.Context) (runtime.CheckResult, error) { - return rt.CheckConstraintOn(sym, v.declaringScope(sym), inst) + return rt.CheckConstraintWith(sym, v.declaringScope(sym), inst, args) }) if err := callerGone(ctx, evalErr); err != nil { return nil, err @@ -312,6 +320,55 @@ func (s *Service) VerifyConstraint(ctx context.Context, req *pb.VerifyConstraint }, nil } +// checkArgs reads a verification request's argument bindings. Naming any needs +// the verification_arguments capability; a proof question takes none, the +// parameters' values being the solver's to find. The first error is a value +// that does not read, spelled for the response; the second is a status. +func (v *verifyContext) checkArgs(question string, positional []*pb.Value, named map[string]*pb.Value) (runtime.CheckArgs, error, error) { + if len(positional) == 0 && len(named) == 0 { + return runtime.CheckArgs{}, nil, nil + } + if err := v.service.requireCapability(CapabilityVerificationArguments); err != nil { + return runtime.CheckArgs{}, nil, err + } + if question != questionEvaluate { + return runtime.CheckArgs{}, nil, statusErrorf(connect.CodeInvalidArgument, + "question %q takes no arguments: the solver finds the parameters' values", question) + } + var args runtime.CheckArgs + for _, arg := range positional { + val, readErr, err := v.argument(arg) + if readErr != nil || err != nil { + return runtime.CheckArgs{}, wrapArgumentRead(readErr), err + } + args.Positional = append(args.Positional, val) + } + if len(named) > 0 { + // Read in name order so a failure names the same argument every time. + names := make([]string, 0, len(named)) + for name := range named { + names = append(names, name) + } + sort.Strings(names) + args.Named = make(map[string]runtime.Value, len(names)) + for _, name := range names { + val, readErr, err := v.argument(named[name]) + if readErr != nil || err != nil { + return runtime.CheckArgs{}, wrapArgumentRead(readErr), err + } + args.Named[name] = val + } + } + return args, nil, nil +} + +func wrapArgumentRead(err error) error { + if err == nil { + return nil + } + return fmt.Errorf("argument could not be read: %w", err) +} + // VerifyRequirement evaluates a requirement definition or usage, as the REPL's // %requirement does. func (s *Service) VerifyRequirement(ctx context.Context, req *pb.VerifyRequirementRequest) (*pb.VerifyRequirementResponse, error) { @@ -335,12 +392,19 @@ func (s *Service) VerifyRequirement(ctx context.Context, req *pb.VerifyRequireme if err != nil { return &pb.VerifyRequirementResponse{Error: err.Error()}, nil } + args, readErr, err := v.checkArgs(question, req.Arguments, req.NamedArguments) + if err != nil { + return nil, err + } + if readErr != nil { + return &pb.VerifyRequirementResponse{Error: readErr.Error()}, nil + } if question != questionEvaluate { return v.proveRequirement(ctx, question, sym, inst) } result, plan, evalErr := v.check(ctx, req.SymbolId, func(rt *runtime.Context) (runtime.CheckResult, error) { - return rt.CheckRequirementOn(sym, v.declaringScope(sym), inst) + return rt.CheckRequirementWith(sym, v.declaringScope(sym), inst, args) }) if err := callerGone(ctx, evalErr); err != nil { return nil, err diff --git a/internal/frontend/grpc/verify_arguments_test.go b/internal/frontend/grpc/verify_arguments_test.go new file mode 100644 index 0000000000..307b760802 --- /dev/null +++ b/internal/frontend/grpc/verify_arguments_test.go @@ -0,0 +1,126 @@ +package grpc + +import ( + "context" + "strings" + "testing" + + "connectrpc.com/connect" + + pb "github.com/Open-MBEE/OpenSysML/api/proto" +) + +// verifyArgumentsModel declares a requirement and a constraint whose conditions +// read `in` parameters, so a check binds them from the request. +const verifyArgumentsModel = `package Demo { + private import ScalarValues::*; + part def Thing { attribute v : Integer = 2; } + part t : Thing; + requirement def Under { + subject s : Thing; + in limit : Integer; + in slack : Integer = 0; + require constraint { s.v + slack < limit } + } + constraint def Between { + in low : Integer; + in high : Integer = 10; + low < high + } +}` + +func integerArg(n int64) *pb.Value { + return &pb.Value{Kind: &pb.Value_IntValue{IntValue: n}} +} + +func TestVerifyRequirementBindsArguments(t *testing.T) { + srv := mustNewService(t, 10) + hash := mustVerifyModel(t, srv, verifyArgumentsModel, "verify-arguments") + + resp, err := srv.VerifyRequirement(context.Background(), &pb.VerifyRequirementRequest{ + ModelHash: hash, + SymbolId: "Demo::Under", + SubjectSymbolId: "Demo::t", + NamedArguments: map[string]*pb.Value{"limit": integerArg(5)}, + }) + if err != nil { + t.Fatalf("VerifyRequirement: %v", err) + } + if resp.Error != "" || !resp.Verdict.Holds { + t.Fatalf("Under(limit = 5): holds = %v, error %q; want holds", resp.Verdict.GetHolds(), resp.Error) + } + + failing, err := srv.VerifyRequirement(context.Background(), &pb.VerifyRequirementRequest{ + ModelHash: hash, + SymbolId: "Demo::Under", + SubjectSymbolId: "Demo::t", + Arguments: []*pb.Value{integerArg(5), integerArg(4)}, + }) + if err != nil { + t.Fatalf("VerifyRequirement: %v", err) + } + if failing.Error != "" || failing.Verdict.Holds { + t.Fatalf("Under(5, 4) on t: holds = %v, error %q; want a false verdict", failing.Verdict.GetHolds(), failing.Error) + } +} + +func TestVerifyConstraintBindsArguments(t *testing.T) { + srv := mustNewService(t, 10) + hash := mustVerifyModel(t, srv, verifyArgumentsModel, "verify-constraint-arguments") + + resp, err := srv.VerifyConstraint(context.Background(), &pb.VerifyConstraintRequest{ + ModelHash: hash, + SymbolId: "Demo::Between", + Arguments: []*pb.Value{integerArg(3)}, + }) + if err != nil { + t.Fatalf("VerifyConstraint: %v", err) + } + if resp.Error != "" || !resp.Verdict.Holds { + t.Fatalf("Between(3): holds = %v, error %q; want holds", resp.Verdict.GetHolds(), resp.Error) + } + + failing, err := srv.VerifyConstraint(context.Background(), &pb.VerifyConstraintRequest{ + ModelHash: hash, + SymbolId: "Demo::Between", + Arguments: []*pb.Value{integerArg(3)}, + NamedArguments: map[string]*pb.Value{"high": integerArg(1)}, + }) + if err != nil { + t.Fatalf("VerifyConstraint: %v", err) + } + if failing.Error != "" || failing.Verdict.Holds { + t.Fatalf("Between(3, high = 1): holds = %v, error %q; want a false verdict", failing.Verdict.GetHolds(), failing.Error) + } +} + +func TestVerifyArgumentsRefusedWithoutCapabilityOrForProofs(t *testing.T) { + srv := mustNewService(t, 10) + hash := mustVerifyModel(t, srv, verifyArgumentsModel, "verify-arguments-proof") + + _, err := srv.VerifyRequirement(context.Background(), &pb.VerifyRequirementRequest{ + ModelHash: hash, + SymbolId: "Demo::Under", + SubjectSymbolId: "Demo::t", + Question: "holds", + NamedArguments: map[string]*pb.Value{"limit": integerArg(5)}, + }) + if connect.CodeOf(err) != connect.CodeInvalidArgument || !strings.Contains(err.Error(), "takes no arguments") { + t.Fatalf("holds with arguments: err = %v, want INVALID_ARGUMENT naming the arguments", err) + } + + without := mustNewServiceWithout(t, CapabilityVerificationArguments) + hash = mustVerifyModel(t, without, verifyArgumentsModel, "verify-arguments-without") + _, err = without.VerifyConstraint(context.Background(), &pb.VerifyConstraintRequest{ + ModelHash: hash, + SymbolId: "Demo::Between", + Arguments: []*pb.Value{integerArg(3)}, + }) + if connect.CodeOf(err) != connect.CodeUnimplemented { + t.Fatalf("arguments without the capability: err = %v, want UNIMPLEMENTED", err) + } + plain, err := without.VerifyConstraint(context.Background(), &pb.VerifyConstraintRequest{ModelHash: hash, SymbolId: "Demo::Between"}) + if err != nil || plain.Verdict == nil { + t.Fatalf("a request without arguments needs no capability: %v", err) + } +} diff --git a/internal/frontend/repl/check_args_test.go b/internal/frontend/repl/check_args_test.go new file mode 100644 index 0000000000..9976e198e8 --- /dev/null +++ b/internal/frontend/repl/check_args_test.go @@ -0,0 +1,54 @@ +package repl + +import "testing" + +// boundChecks declares a requirement and a constraint whose conditions read `in` +// parameters, so a check of either needs arguments for them. +const boundChecks = `package Bound { + private import ScalarValues::*; + part def Thing { attribute v : Integer = 2; } + part t : Thing; + requirement def Under { + subject s : Thing; + in limit : Integer; + in slack : Integer = 0; + require constraint { s.v + slack < limit } + } + constraint def Between { + in low : Integer; + in high : Integer = 10; + low < high + } +}` + +func TestCheckArgumentsBindParameters(t *testing.T) { + s := loadModel(t, boundChecks) + run(t, s, "%instantiate Bound::t") + for _, check := range []struct{ line, want string }{ + {"%requirement Bound::Under(limit = 5) Bound::t", "✓ Requirement Bound::Under(limit = 5) satisfied"}, + {"%requirement Bound::Under(5, 4) Bound::t", "✗ Requirement Bound::Under(5, 4) failed"}, + {"%requirement Bound::Under(5, slack = 4) Bound::t", "✗ Requirement Bound::Under(5, slack = 4) failed"}, + {"%constraint Bound::Between(3)", "✓ Constraint Bound::Between(3) passed"}, + {"%constraint Bound::Between(3, high = 1)", "✗ Constraint Bound::Between(3, high = 1) failed"}, + {"%constraint Bound::Between(low = 3, high = 4)", "✓ Constraint Bound::Between(low = 3, high = 4) passed"}, + } { + wants(t, run(t, s, check.line), check.want) + } +} + +func TestCheckArgumentsAreValidated(t *testing.T) { + s := loadModel(t, boundChecks) + run(t, s, "%instantiate Bound::t") + for _, check := range []struct{ line, want string }{ + {"%requirement Bound::Under(limit = 5, bound = 1) Bound::t", "bound"}, + {"%requirement Bound::Under Bound::t", "limit"}, + {"%constraint Bound::Between(1, 2, 3)", "takes 2 argument(s), got 3"}, + {"%constraint Bound::Between(low = \"x\")", "low"}, + {"%constraint Bound::Between(3", "not closed"}, + {"%constraint Bound::Between(3) nosuch", "nosuch"}, + } { + out := run(t, s, check.line) + wants(t, out, check.want) + rejects(t, out, "passed", "satisfied") + } +} diff --git a/internal/frontend/repl/meta.go b/internal/frontend/repl/meta.go index a524bc9b87..b5008d557e 100644 --- a/internal/frontend/repl/meta.go +++ b/internal/frontend/repl/meta.go @@ -135,6 +135,7 @@ const ( cmdRunQuery = "%run-query" cmdRenderDocument = "%render-document" argName = "" + argInvocation = "[()] []" timeLabel = " Time: " groupSession = "Session:" @@ -237,7 +238,7 @@ var metaCommandTable = []metaCommand{ {name: cmdInvoke, group: groupRuntime, args: " [... |

=...]", desc: "invoke an operation of an object's type, performed by that object, with arguments by position or by name; an object is named, #, or a path such as car.fl"}, {name: "%calc", group: groupBehavioral, args: " ", desc: "invoke a calculation with arguments"}, - {name: cmdAnalysis, group: groupBehavioral, args: "[()] []", desc: "run an analysis case and report its outputs and the verdict of its objective; arguments bind its inputs and an object is its subject"}, + {name: cmdAnalysis, group: groupBehavioral, args: argInvocation, desc: "run an analysis case and report its outputs and the verdict of its objective; arguments bind its inputs and an object is its subject"}, {name: cmdRecord, group: groupBehavioral, args: "[()] [] [into ]", desc: "run an analysis case as %analysis does and record the run into the model as AnalysisRecords elements, into the package named or a Records package beside the case's"}, {name: cmdImport, group: groupBehavioral, args: " [map ] [format csv|tsv|json|jsonl] [dry-run]", desc: "set feature values from a CSV, TSV, JSON or JSON Lines file, one row per element: an element column names it and each other column a feature, `mass [kg]` with its unit; a feature the element inherits is redefined in its body, and a value the model refuses imports nothing"}, {name: cmdSweep, group: groupBehavioral, args: "[()] []

=..[:]...", desc: "run an analysis case or calc once per value of each range, one run per row of the cartesian product, and print the table"}, @@ -246,8 +247,8 @@ var metaCommandTable = []metaCommand{ {name: cmdRunQuery, group: groupBehavioral, args: " [

=...]", desc: "execute a document query and print its rows, with each binding written as ="}, {name: "%render-run", group: groupBehavioral, args: " [form] [link=