From a94b502ce6df7ba711361678e6157f3371bf743c Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Mon, 19 Oct 2026 19:16:39 -0400 Subject: [PATCH] feat(contracts): carry operator credentials on alarm acknowledgement Claude-Session: https://claude.ai/code/session_016J6isfcgqy4SB2RK3ZvFvT --- .../descriptors/mxaccessgw-client-v1.protoset | Bin 124000 -> 125524 bytes clients/rust/protos/mxaccess_gateway.proto | 43 +- .../Generated/MxaccessGateway.cs | 926 +++++++++++------- .../Protos/mxaccess_gateway.proto | 43 +- .../WorkerLaunchEnvironment.cs | 6 + .../ProtobufContractRoundTripTests.cs | 36 + 6 files changed, 651 insertions(+), 403 deletions(-) diff --git a/clients/proto/descriptors/mxaccessgw-client-v1.protoset b/clients/proto/descriptors/mxaccessgw-client-v1.protoset index 3e1541ca98d8ec254986d3bb813d716655707dcd..002fe83cd1a8cf8ae26e0172f2dd713308abeacf 100644 GIT binary patch delta 22721 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�!^(zGPq9J^%Eq6>y%wTkCZB3ul%0610jkEn%)NS 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 diff --git a/clients/rust/protos/mxaccess_gateway.proto b/clients/rust/protos/mxaccess_gateway.proto index 6b00da9..915b1e8 100644 --- a/clients/rust/protos/mxaccess_gateway.proto +++ b/clients/rust/protos/mxaccess_gateway.proto @@ -391,10 +391,13 @@ message AlarmFailoverConfig { int32 failback_stable_probes = 3; // clean probes before switching back (>=1) } -// Acknowledge a single alarm by its GUID. Operator identity fields are -// recorded atomically with the ack transition in the alarm-history log. -// The reply's hresult / native_status surfaces AVEVA's -// AlarmAckByGUID return code. +// Acknowledge a single alarm by its GUID. The worker resolves the GUID to the +// alarm's Galaxy reference from its active-alarm snapshot and acknowledges it +// by writing `comment` to `.AckMsg` over MXAccess after +// AuthenticateUser as the operator, so the alarm history records the real +// operator. The reply's hresult / native_status is 0 when the write was +// applied (or sent but unconfirmed), otherwise the AuthenticateUser HRESULT or +// the OnWriteComplete status detail. message AcknowledgeAlarmCommand { // Canonical 8-4-4-4-12 GUID string (e.g. "BCC47053-9542-4D65-BDAA-BCDEA6A32A73"). string alarm_guid = 1; @@ -403,6 +406,10 @@ message AcknowledgeAlarmCommand { string operator_node = 4; string operator_domain = 5; string operator_full_name = 6; + // Operator credential used for AuthenticateUser before the AckMsg write. + // Implementations must keep this field out of logs, metrics labels, command + // lines, and diagnostics. + string operator_password = 7; } // Snapshot the currently-active alarm set. Optional filter prefix scopes @@ -414,9 +421,7 @@ message QueryActiveAlarmsCommand { // Acknowledge a single alarm by its (name, provider, group) tuple. Used // when the public RPC's AlarmFullReference (Provider!Group.Tag) cannot -// be resolved to a GUID directly. The worker invokes -// wwAlarmConsumerClass.AlarmAckByName which reaches the same alarm -// history path as AlarmAckByGUID. +// be resolved to a GUID directly. The worker acknowledges by writing `comment` to `.AckMsg` (Galaxy provider only) after AuthenticateUser as the operator. message AcknowledgeAlarmByNameCommand { // Tag/alarm name (e.g. "TestMachine_001.TestAlarm001"). Tag itself // may contain dots; the gateway-side parser splits on the first dot @@ -431,6 +436,10 @@ message AcknowledgeAlarmByNameCommand { string operator_node = 6; string operator_domain = 7; string operator_full_name = 8; + // Operator credential used for AuthenticateUser before the AckMsg write. + // Implementations must keep this field out of logs, metrics labels, command + // lines, and diagnostics. + string operator_password = 9; } message UnsubscribeBulkCommand { @@ -725,11 +734,11 @@ message DrainEventsReply { // Reply payload for AcknowledgeAlarmCommand AND // AcknowledgeAlarmByNameCommand — both ack command kinds reuse this // payload case (`MxCommandReply.acknowledge_alarm`); there is no -// dedicated by-name reply case. Surfaces AVEVA's native ack return -// code (AlarmAckByGUID for the GUID arm, AlarmAckByName for the -// by-name arm); 0 means success. The MxCommandReply's hresult field +// dedicated by-name reply case. Surfaces the ack outcome: 0 when the +// AckMsg write was applied or sent but unconfirmed; otherwise the +// AuthenticateUser HRESULT or the OnWriteComplete status detail. The MxCommandReply's hresult field // carries the same value and is preferred for protocol consumers — -// this payload exists so the gateway-side WorkerAlarmRpcDispatcher +// this payload exists so GatewayAlarmMonitor // can echo native_status into AcknowledgeAlarmReply.hresult without // unpacking the outer envelope. message AcknowledgeAlarmReplyPayload { @@ -987,6 +996,15 @@ message AcknowledgeAlarmRequest { // Operator principal performing the acknowledgement. The lmxopcua side // resolves this from the OPC UA session prior to invoking the RPC. string operator_user = 5; + // Operator's Galaxy (or OS) password. The gateway authenticates as + // operator_user with it before writing the acknowledgement so the alarm + // history records the real operator. May be empty for accounts without a + // password. Credential-sensitive: implementations must keep this field out + // of logs, metrics labels, command lines, and diagnostics. + string operator_password = 6; + // Optional domain for OS-authenticated galaxies. When set the gateway + // authenticates as "\". + string operator_domain = 7; } message AcknowledgeAlarmReply { @@ -997,8 +1015,7 @@ message AcknowledgeAlarmReply { ProtocolStatus protocol_status = 3; // Native ack return code echoed from the worker. The worker carries the // ack outcome as a single int32 (AcknowledgeAlarmReplyPayload.native_status, - // = AlarmAckByName / AlarmAckByGUID return code; 0 = success); the gateway's - // WorkerAlarmRpcDispatcher copies that value here. This is the authoritative + // 0 = applied or sent; otherwise the AuthenticateUser HRESULT or OnWriteComplete detail); GatewayAlarmMonitor copies that value here. This is the authoritative // ack-outcome field for the public RPC. Absent only when the worker reply // omitted the value entirely (a protocol violation). optional int32 hresult = 4; diff --git a/src/ZB.MOM.WW.MxGateway.Contracts/Generated/MxaccessGateway.cs b/src/ZB.MOM.WW.MxGateway.Contracts/Generated/MxaccessGateway.cs index 8075357..9e1229e 100644 --- a/src/ZB.MOM.WW.MxGateway.Contracts/Generated/MxaccessGateway.cs +++ b/src/ZB.MOM.WW.MxGateway.Contracts/Generated/MxaccessGateway.cs @@ -172,370 +172,373 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { "cmlvcml0eV9zdWJ0YWcYBiABKAkihQEKE0FsYXJtRmFpbG92ZXJDb25maWcS", "JQodY29uc2VjdXRpdmVfZmFpbHVyZV90aHJlc2hvbGQYASABKAUSJwofZmFp", "bGJhY2tfcHJvYmVfaW50ZXJ2YWxfc2Vjb25kcxgCIAEoBRIeChZmYWlsYmFj", - "a19zdGFibGVfcHJvYmVzGAMgASgFIqEBChdBY2tub3dsZWRnZUFsYXJtQ29t", + "a19zdGFibGVfcHJvYmVzGAMgASgFIrwBChdBY2tub3dsZWRnZUFsYXJtQ29t", "bWFuZBISCgphbGFybV9ndWlkGAEgASgJEg8KB2NvbW1lbnQYAiABKAkSFQoN", "b3BlcmF0b3JfdXNlchgDIAEoCRIVCg1vcGVyYXRvcl9ub2RlGAQgASgJEhcK", "D29wZXJhdG9yX2RvbWFpbhgFIAEoCRIaChJvcGVyYXRvcl9mdWxsX25hbWUY", - "BiABKAkiNwoYUXVlcnlBY3RpdmVBbGFybXNDb21tYW5kEhsKE2FsYXJtX2Zp", - "bHRlcl9wcmVmaXgYASABKAki0gEKHUFja25vd2xlZGdlQWxhcm1CeU5hbWVD", - "b21tYW5kEhIKCmFsYXJtX25hbWUYASABKAkSFQoNcHJvdmlkZXJfbmFtZRgC", - "IAEoCRISCgpncm91cF9uYW1lGAMgASgJEg8KB2NvbW1lbnQYBCABKAkSFQoN", - "b3BlcmF0b3JfdXNlchgFIAEoCRIVCg1vcGVyYXRvcl9ub2RlGAYgASgJEhcK", - "D29wZXJhdG9yX2RvbWFpbhgHIAEoCRIaChJvcGVyYXRvcl9mdWxsX25hbWUY", - "CCABKAkiRQoWVW5zdWJzY3JpYmVCdWxrQ29tbWFuZBIVCg1zZXJ2ZXJfaGFu", - "ZGxlGAEgASgFEhQKDGl0ZW1faGFuZGxlcxgCIAMoBSJfChBXcml0ZUJ1bGtD", - "b21tYW5kEhUKDXNlcnZlcl9oYW5kbGUYASABKAUSNAoHZW50cmllcxgCIAMo", - "CzIjLm14YWNjZXNzX2dhdGV3YXkudjEuV3JpdGVCdWxrRW50cnkiYwoOV3Jp", - "dGVCdWxrRW50cnkSEwoLaXRlbV9oYW5kbGUYASABKAUSKwoFdmFsdWUYAiAB", - "KAsyHC5teGFjY2Vzc19nYXRld2F5LnYxLk14VmFsdWUSDwoHdXNlcl9pZBgD", - "IAEoBSJhChFXcml0ZTJCdWxrQ29tbWFuZBIVCg1zZXJ2ZXJfaGFuZGxlGAEg", - "ASgFEjUKB2VudHJpZXMYAiADKAsyJC5teGFjY2Vzc19nYXRld2F5LnYxLldy", - "aXRlMkJ1bGtFbnRyeSKbAQoPV3JpdGUyQnVsa0VudHJ5EhMKC2l0ZW1faGFu", - "ZGxlGAEgASgFEisKBXZhbHVlGAIgASgLMhwubXhhY2Nlc3NfZ2F0ZXdheS52", - "MS5NeFZhbHVlEjUKD3RpbWVzdGFtcF92YWx1ZRgDIAEoCzIcLm14YWNjZXNz", - "X2dhdGV3YXkudjEuTXhWYWx1ZRIPCgd1c2VyX2lkGAQgASgFIm0KF1dyaXRl", - "U2VjdXJlZEJ1bGtDb21tYW5kEhUKDXNlcnZlcl9oYW5kbGUYASABKAUSOwoH", - "ZW50cmllcxgCIAMoCzIqLm14YWNjZXNzX2dhdGV3YXkudjEuV3JpdGVTZWN1", - "cmVkQnVsa0VudHJ5IowBChVXcml0ZVNlY3VyZWRCdWxrRW50cnkSEwoLaXRl", - "bV9oYW5kbGUYASABKAUSFwoPY3VycmVudF91c2VyX2lkGAIgASgFEhgKEHZl", - "cmlmaWVyX3VzZXJfaWQYAyABKAUSKwoFdmFsdWUYBCABKAsyHC5teGFjY2Vz", - "c19nYXRld2F5LnYxLk14VmFsdWUibwoYV3JpdGVTZWN1cmVkMkJ1bGtDb21t", - "YW5kEhUKDXNlcnZlcl9oYW5kbGUYASABKAUSPAoHZW50cmllcxgCIAMoCzIr", - "Lm14YWNjZXNzX2dhdGV3YXkudjEuV3JpdGVTZWN1cmVkMkJ1bGtFbnRyeSLE", - "AQoWV3JpdGVTZWN1cmVkMkJ1bGtFbnRyeRITCgtpdGVtX2hhbmRsZRgBIAEo", - "BRIXCg9jdXJyZW50X3VzZXJfaWQYAiABKAUSGAoQdmVyaWZpZXJfdXNlcl9p", - "ZBgDIAEoBRIrCgV2YWx1ZRgEIAEoCzIcLm14YWNjZXNzX2dhdGV3YXkudjEu", - "TXhWYWx1ZRI1Cg90aW1lc3RhbXBfdmFsdWUYBSABKAsyHC5teGFjY2Vzc19n", - "YXRld2F5LnYxLk14VmFsdWUiUwoPUmVhZEJ1bGtDb21tYW5kEhUKDXNlcnZl", - "cl9oYW5kbGUYASABKAUSFQoNdGFnX2FkZHJlc3NlcxgCIAMoCRISCgp0aW1l", - "b3V0X21zGAMgASgNIh4KC1BpbmdDb21tYW5kEg8KB21lc3NhZ2UYASABKAki", - "GAoWR2V0U2Vzc2lvblN0YXRlQ29tbWFuZCIWChRHZXRXb3JrZXJJbmZvQ29t", - "bWFuZCIoChJEcmFpbkV2ZW50c0NvbW1hbmQSEgoKbWF4X2V2ZW50cxgBIAEo", - "DSJIChVTaHV0ZG93bldvcmtlckNvbW1hbmQSLwoMZ3JhY2VfcGVyaW9kGAEg", - "ASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIoYPCg5NeENvbW1hbmRS", - "ZXBseRISCgpzZXNzaW9uX2lkGAEgASgJEhYKDmNvcnJlbGF0aW9uX2lkGAIg", - "ASgJEjAKBGtpbmQYAyABKA4yIi5teGFjY2Vzc19nYXRld2F5LnYxLk14Q29t", - "bWFuZEtpbmQSPAoPcHJvdG9jb2xfc3RhdHVzGAQgASgLMiMubXhhY2Nlc3Nf", - "Z2F0ZXdheS52MS5Qcm90b2NvbFN0YXR1cxIUCgdocmVzdWx0GAUgASgFSAGI", - "AQESMgoMcmV0dXJuX3ZhbHVlGAYgASgLMhwubXhhY2Nlc3NfZ2F0ZXdheS52", - "MS5NeFZhbHVlEjQKCHN0YXR1c2VzGAcgAygLMiIubXhhY2Nlc3NfZ2F0ZXdh", - "eS52MS5NeFN0YXR1c1Byb3h5EhoKEmRpYWdub3N0aWNfbWVzc2FnZRgIIAEo", - "CRI2CghyZWdpc3RlchgUIAEoCzIiLm14YWNjZXNzX2dhdGV3YXkudjEuUmVn", - "aXN0ZXJSZXBseUgAEjUKCGFkZF9pdGVtGBUgASgLMiEubXhhY2Nlc3NfZ2F0", - "ZXdheS52MS5BZGRJdGVtUmVwbHlIABI3CglhZGRfaXRlbTIYFiABKAsyIi5t", - "eGFjY2Vzc19nYXRld2F5LnYxLkFkZEl0ZW0yUmVwbHlIABJGChFhZGRfYnVm", - "ZmVyZWRfaXRlbRgXIAEoCzIpLm14YWNjZXNzX2dhdGV3YXkudjEuQWRkQnVm", - "ZmVyZWRJdGVtUmVwbHlIABI0CgdzdXNwZW5kGBggASgLMiEubXhhY2Nlc3Nf", - "Z2F0ZXdheS52MS5TdXNwZW5kUmVwbHlIABI2CghhY3RpdmF0ZRgZIAEoCzIi", - "Lm14YWNjZXNzX2dhdGV3YXkudjEuQWN0aXZhdGVSZXBseUgAEkcKEWF1dGhl", - "bnRpY2F0ZV91c2VyGBogASgLMioubXhhY2Nlc3NfZ2F0ZXdheS52MS5BdXRo", - "ZW50aWNhdGVVc2VyUmVwbHlIABJLChRhcmNoZXN0cmFfdXNlcl90b19pZBgb", - "IAEoCzIrLm14YWNjZXNzX2dhdGV3YXkudjEuQXJjaGVzdHJBVXNlclRvSWRS", - "ZXBseUgAEkAKDWFkZF9pdGVtX2J1bGsYHCABKAsyJy5teGFjY2Vzc19nYXRl", - "d2F5LnYxLkJ1bGtTdWJzY3JpYmVSZXBseUgAEkMKEGFkdmlzZV9pdGVtX2J1", - "bGsYHSABKAsyJy5teGFjY2Vzc19nYXRld2F5LnYxLkJ1bGtTdWJzY3JpYmVS", - "ZXBseUgAEkMKEHJlbW92ZV9pdGVtX2J1bGsYHiABKAsyJy5teGFjY2Vzc19n", - "YXRld2F5LnYxLkJ1bGtTdWJzY3JpYmVSZXBseUgAEkYKE3VuX2FkdmlzZV9p", - "dGVtX2J1bGsYHyABKAsyJy5teGFjY2Vzc19nYXRld2F5LnYxLkJ1bGtTdWJz", - "Y3JpYmVSZXBseUgAEkEKDnN1YnNjcmliZV9idWxrGCAgASgLMicubXhhY2Nl", - "c3NfZ2F0ZXdheS52MS5CdWxrU3Vic2NyaWJlUmVwbHlIABJDChB1bnN1YnNj", - "cmliZV9idWxrGCEgASgLMicubXhhY2Nlc3NfZ2F0ZXdheS52MS5CdWxrU3Vi", - "c2NyaWJlUmVwbHlIABJOChFhY2tub3dsZWRnZV9hbGFybRgiIAEoCzIxLm14", - "YWNjZXNzX2dhdGV3YXkudjEuQWNrbm93bGVkZ2VBbGFybVJlcGx5UGF5bG9h", - "ZEgAElEKE3F1ZXJ5X2FjdGl2ZV9hbGFybXMYIyABKAsyMi5teGFjY2Vzc19n", - "YXRld2F5LnYxLlF1ZXJ5QWN0aXZlQWxhcm1zUmVwbHlQYXlsb2FkSAASOQoK", - "d3JpdGVfYnVsaxgkIAEoCzIjLm14YWNjZXNzX2dhdGV3YXkudjEuQnVsa1dy", - "aXRlUmVwbHlIABI6Cgt3cml0ZTJfYnVsaxglIAEoCzIjLm14YWNjZXNzX2dh", - "dGV3YXkudjEuQnVsa1dyaXRlUmVwbHlIABJBChJ3cml0ZV9zZWN1cmVkX2J1", - "bGsYJiABKAsyIy5teGFjY2Vzc19nYXRld2F5LnYxLkJ1bGtXcml0ZVJlcGx5", - "SAASQgoTd3JpdGVfc2VjdXJlZDJfYnVsaxgnIAEoCzIjLm14YWNjZXNzX2dh", - "dGV3YXkudjEuQnVsa1dyaXRlUmVwbHlIABI3CglyZWFkX2J1bGsYKCABKAsy", - "Ii5teGFjY2Vzc19nYXRld2F5LnYxLkJ1bGtSZWFkUmVwbHlIABI/Cg1zZXNz", - "aW9uX3N0YXRlGGQgASgLMiYubXhhY2Nlc3NfZ2F0ZXdheS52MS5TZXNzaW9u", - "U3RhdGVSZXBseUgAEjsKC3dvcmtlcl9pbmZvGGUgASgLMiQubXhhY2Nlc3Nf", - "Z2F0ZXdheS52MS5Xb3JrZXJJbmZvUmVwbHlIABI9CgxkcmFpbl9ldmVudHMY", - "ZiABKAsyJS5teGFjY2Vzc19nYXRld2F5LnYxLkRyYWluRXZlbnRzUmVwbHlI", - "AEIJCgdwYXlsb2FkQgoKCF9ocmVzdWx0IiYKDVJlZ2lzdGVyUmVwbHkSFQoN", - "c2VydmVyX2hhbmRsZRgBIAEoBSIjCgxBZGRJdGVtUmVwbHkSEwoLaXRlbV9o", - "YW5kbGUYASABKAUiJAoNQWRkSXRlbTJSZXBseRITCgtpdGVtX2hhbmRsZRgB", - "IAEoBSIrChRBZGRCdWZmZXJlZEl0ZW1SZXBseRITCgtpdGVtX2hhbmRsZRgB", - "IAEoBSJCCgxTdXNwZW5kUmVwbHkSMgoGc3RhdHVzGAEgASgLMiIubXhhY2Nl", - "c3NfZ2F0ZXdheS52MS5NeFN0YXR1c1Byb3h5IkMKDUFjdGl2YXRlUmVwbHkS", - "MgoGc3RhdHVzGAEgASgLMiIubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeFN0YXR1", - "c1Byb3h5IigKFUF1dGhlbnRpY2F0ZVVzZXJSZXBseRIPCgd1c2VyX2lkGAEg", - "ASgFIikKFkFyY2hlc3RyQVVzZXJUb0lkUmVwbHkSDwoHdXNlcl9pZBgBIAEo", - "BSKBAQoPU3Vic2NyaWJlUmVzdWx0EhUKDXNlcnZlcl9oYW5kbGUYASABKAUS", - "EwoLdGFnX2FkZHJlc3MYAiABKAkSEwoLaXRlbV9oYW5kbGUYAyABKAUSFgoO", - "d2FzX3N1Y2Nlc3NmdWwYBCABKAgSFQoNZXJyb3JfbWVzc2FnZRgFIAEoCSJL", - "ChJCdWxrU3Vic2NyaWJlUmVwbHkSNQoHcmVzdWx0cxgBIAMoCzIkLm14YWNj", - "ZXNzX2dhdGV3YXkudjEuU3Vic2NyaWJlUmVzdWx0IsQBCg9CdWxrV3JpdGVS", - "ZXN1bHQSFQoNc2VydmVyX2hhbmRsZRgBIAEoBRITCgtpdGVtX2hhbmRsZRgC", - "IAEoBRIWCg53YXNfc3VjY2Vzc2Z1bBgDIAEoCBIUCgdocmVzdWx0GAQgASgF", - "SACIAQESNAoIc3RhdHVzZXMYBSADKAsyIi5teGFjY2Vzc19nYXRld2F5LnYx", - "Lk14U3RhdHVzUHJveHkSFQoNZXJyb3JfbWVzc2FnZRgGIAEoCUIKCghfaHJl", - "c3VsdCJHCg5CdWxrV3JpdGVSZXBseRI1CgdyZXN1bHRzGAEgAygLMiQubXhh", - "Y2Nlc3NfZ2F0ZXdheS52MS5CdWxrV3JpdGVSZXN1bHQivgIKDkJ1bGtSZWFk", - "UmVzdWx0EhUKDXNlcnZlcl9oYW5kbGUYASABKAUSEwoLdGFnX2FkZHJlc3MY", - "AiABKAkSEwoLaXRlbV9oYW5kbGUYAyABKAUSFgoOd2FzX3N1Y2Nlc3NmdWwY", - "BCABKAgSEgoKd2FzX2NhY2hlZBgFIAEoCBIrCgV2YWx1ZRgGIAEoCzIcLm14", - "YWNjZXNzX2dhdGV3YXkudjEuTXhWYWx1ZRIPCgdxdWFsaXR5GAcgASgFEjQK", - "EHNvdXJjZV90aW1lc3RhbXAYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGlt", - "ZXN0YW1wEjQKCHN0YXR1c2VzGAkgAygLMiIubXhhY2Nlc3NfZ2F0ZXdheS52", - "MS5NeFN0YXR1c1Byb3h5EhUKDWVycm9yX21lc3NhZ2UYCiABKAkiRQoNQnVs", - "a1JlYWRSZXBseRI0CgdyZXN1bHRzGAEgAygLMiMubXhhY2Nlc3NfZ2F0ZXdh", - "eS52MS5CdWxrUmVhZFJlc3VsdCJFChFTZXNzaW9uU3RhdGVSZXBseRIwCgVz", - "dGF0ZRgBIAEoDjIhLm14YWNjZXNzX2dhdGV3YXkudjEuU2Vzc2lvblN0YXRl", - "InUKD1dvcmtlckluZm9SZXBseRIZChF3b3JrZXJfcHJvY2Vzc19pZBgBIAEo", - "BRIWCg53b3JrZXJfdmVyc2lvbhgCIAEoCRIXCg9teGFjY2Vzc19wcm9naWQY", - "AyABKAkSFgoObXhhY2Nlc3NfY2xzaWQYBCABKAkiQAoQRHJhaW5FdmVudHNS", - "ZXBseRIsCgZldmVudHMYASADKAsyHC5teGFjY2Vzc19nYXRld2F5LnYxLk14", - "RXZlbnQiNQocQWNrbm93bGVkZ2VBbGFybVJlcGx5UGF5bG9hZBIVCg1uYXRp", - "dmVfc3RhdHVzGAEgASgFIngKHVF1ZXJ5QWN0aXZlQWxhcm1zUmVwbHlQYXls", - "b2FkEjsKCXNuYXBzaG90cxgBIAMoCzIoLm14YWNjZXNzX2dhdGV3YXkudjEu", - "QWN0aXZlQWxhcm1TbmFwc2hvdBIaChJzbmFwc2hvdF90cnVuY2F0ZWQYAiAB", - "KAgijwgKB014RXZlbnQSMgoGZmFtaWx5GAEgASgOMiIubXhhY2Nlc3NfZ2F0", - "ZXdheS52MS5NeEV2ZW50RmFtaWx5EhIKCnNlc3Npb25faWQYAiABKAkSFQoN", - "c2VydmVyX2hhbmRsZRgDIAEoBRITCgtpdGVtX2hhbmRsZRgEIAEoBRIrCgV2", - "YWx1ZRgFIAEoCzIcLm14YWNjZXNzX2dhdGV3YXkudjEuTXhWYWx1ZRIPCgdx", - "dWFsaXR5GAYgASgFEjQKEHNvdXJjZV90aW1lc3RhbXAYByABKAsyGi5nb29n", - "bGUucHJvdG9idWYuVGltZXN0YW1wEjQKCHN0YXR1c2VzGAggAygLMiIubXhh", - "Y2Nlc3NfZ2F0ZXdheS52MS5NeFN0YXR1c1Byb3h5EhcKD3dvcmtlcl9zZXF1", - "ZW5jZRgJIAEoBBI0ChB3b3JrZXJfdGltZXN0YW1wGAogASgLMhouZ29vZ2xl", - "LnByb3RvYnVmLlRpbWVzdGFtcBI9ChlnYXRld2F5X3JlY2VpdmVfdGltZXN0", - "YW1wGAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIUCgdocmVz", - "dWx0GAwgASgFSAGIAQESEgoKcmF3X3N0YXR1cxgNIAEoCRI3CgpyZXBsYXlf", - "Z2FwGA4gASgLMh4ubXhhY2Nlc3NfZ2F0ZXdheS52MS5SZXBsYXlHYXBIAogB", - "ARJACg5vbl9kYXRhX2NoYW5nZRgUIAEoCzImLm14YWNjZXNzX2dhdGV3YXku", - "djEuT25EYXRhQ2hhbmdlRXZlbnRIABJGChFvbl93cml0ZV9jb21wbGV0ZRgV", - "IAEoCzIpLm14YWNjZXNzX2dhdGV3YXkudjEuT25Xcml0ZUNvbXBsZXRlRXZl", - "bnRIABJJChJvcGVyYXRpb25fY29tcGxldGUYFiABKAsyKy5teGFjY2Vzc19n", - "YXRld2F5LnYxLk9wZXJhdGlvbkNvbXBsZXRlRXZlbnRIABJRChdvbl9idWZm", - "ZXJlZF9kYXRhX2NoYW5nZRgXIAEoCzIuLm14YWNjZXNzX2dhdGV3YXkudjEu", - "T25CdWZmZXJlZERhdGFDaGFuZ2VFdmVudEgAEkoKE29uX2FsYXJtX3RyYW5z", - "aXRpb24YGCABKAsyKy5teGFjY2Vzc19nYXRld2F5LnYxLk9uQWxhcm1UcmFu", - "c2l0aW9uRXZlbnRIABJeCh5vbl9hbGFybV9wcm92aWRlcl9tb2RlX2NoYW5n", - "ZWQYGSABKAsyNC5teGFjY2Vzc19nYXRld2F5LnYxLk9uQWxhcm1Qcm92aWRl", - "ck1vZGVDaGFuZ2VkRXZlbnRIAEIGCgRib2R5QgoKCF9ocmVzdWx0Qg0KC19y", - "ZXBsYXlfZ2FwIlAKCVJlcGxheUdhcBIgChhyZXF1ZXN0ZWRfYWZ0ZXJfc2Vx", - "dWVuY2UYASABKAQSIQoZb2xkZXN0X2F2YWlsYWJsZV9zZXF1ZW5jZRgCIAEo", - "BCITChFPbkRhdGFDaGFuZ2VFdmVudCIWChRPbldyaXRlQ29tcGxldGVFdmVu", - "dCIYChZPcGVyYXRpb25Db21wbGV0ZUV2ZW50ItQBChlPbkJ1ZmZlcmVkRGF0", - "YUNoYW5nZUV2ZW50EjIKCWRhdGFfdHlwZRgBIAEoDjIfLm14YWNjZXNzX2dh", - "dGV3YXkudjEuTXhEYXRhVHlwZRI0Cg5xdWFsaXR5X3ZhbHVlcxgCIAEoCzIc", - "Lm14YWNjZXNzX2dhdGV3YXkudjEuTXhBcnJheRI2ChB0aW1lc3RhbXBfdmFs", - "dWVzGAMgASgLMhwubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeEFycmF5EhUKDXJh", - "d19kYXRhX3R5cGUYBCABKAUi0AQKFk9uQWxhcm1UcmFuc2l0aW9uRXZlbnQS", - "HAoUYWxhcm1fZnVsbF9yZWZlcmVuY2UYASABKAkSHwoXc291cmNlX29iamVj", - "dF9yZWZlcmVuY2UYAiABKAkSFwoPYWxhcm1fdHlwZV9uYW1lGAMgASgJEkEK", - "D3RyYW5zaXRpb25fa2luZBgEIAEoDjIoLm14YWNjZXNzX2dhdGV3YXkudjEu", - "QWxhcm1UcmFuc2l0aW9uS2luZBIQCghzZXZlcml0eRgFIAEoBRI8Chhvcmln", - "aW5hbF9yYWlzZV90aW1lc3RhbXAYBiABKAsyGi5nb29nbGUucHJvdG9idWYu", - "VGltZXN0YW1wEjgKFHRyYW5zaXRpb25fdGltZXN0YW1wGAcgASgLMhouZ29v", - "Z2xlLnByb3RvYnVmLlRpbWVzdGFtcBIVCg1vcGVyYXRvcl91c2VyGAggASgJ", - "EhgKEG9wZXJhdG9yX2NvbW1lbnQYCSABKAkSEAoIY2F0ZWdvcnkYCiABKAkS", - "EwoLZGVzY3JpcHRpb24YCyABKAkSMwoNY3VycmVudF92YWx1ZRgMIAEoCzIc", - "Lm14YWNjZXNzX2dhdGV3YXkudjEuTXhWYWx1ZRIxCgtsaW1pdF92YWx1ZRgN", - "IAEoCzIcLm14YWNjZXNzX2dhdGV3YXkudjEuTXhWYWx1ZRIQCghkZWdyYWRl", - "ZBgOIAEoCBI/Cg9zb3VyY2VfcHJvdmlkZXIYDyABKA4yJi5teGFjY2Vzc19n", - "YXRld2F5LnYxLkFsYXJtUHJvdmlkZXJNb2RlIqABCh9PbkFsYXJtUHJvdmlk", - "ZXJNb2RlQ2hhbmdlZEV2ZW50EjQKBG1vZGUYASABKA4yJi5teGFjY2Vzc19n", - "YXRld2F5LnYxLkFsYXJtUHJvdmlkZXJNb2RlEg4KBnJlYXNvbhgCIAEoCRIP", - "CgdocmVzdWx0GAMgASgFEiYKAmF0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVm", - "LlRpbWVzdGFtcCLxBAoTQWN0aXZlQWxhcm1TbmFwc2hvdBIcChRhbGFybV9m", - "dWxsX3JlZmVyZW5jZRgBIAEoCRIfChdzb3VyY2Vfb2JqZWN0X3JlZmVyZW5j", - "ZRgCIAEoCRIXCg9hbGFybV90eXBlX25hbWUYAyABKAkSEAoIc2V2ZXJpdHkY", - "BCABKAUSPAoYb3JpZ2luYWxfcmFpc2VfdGltZXN0YW1wGAUgASgLMhouZ29v", - "Z2xlLnByb3RvYnVmLlRpbWVzdGFtcBI/Cg1jdXJyZW50X3N0YXRlGAYgASgO", - "MigubXhhY2Nlc3NfZ2F0ZXdheS52MS5BbGFybUNvbmRpdGlvblN0YXRlEhAK", - "CGNhdGVnb3J5GAcgASgJEhMKC2Rlc2NyaXB0aW9uGAggASgJEj0KGWxhc3Rf", - "dHJhbnNpdGlvbl90aW1lc3RhbXAYCSABKAsyGi5nb29nbGUucHJvdG9idWYu", - "VGltZXN0YW1wEhUKDW9wZXJhdG9yX3VzZXIYCiABKAkSGAoQb3BlcmF0b3Jf", - "Y29tbWVudBgLIAEoCRIzCg1jdXJyZW50X3ZhbHVlGAwgASgLMhwubXhhY2Nl", - "c3NfZ2F0ZXdheS52MS5NeFZhbHVlEjEKC2xpbWl0X3ZhbHVlGA0gASgLMhwu", - "bXhhY2Nlc3NfZ2F0ZXdheS52MS5NeFZhbHVlEhAKCGRlZ3JhZGVkGA4gASgI", - "Ej8KD3NvdXJjZV9wcm92aWRlchgPIAEoDjImLm14YWNjZXNzX2dhdGV3YXku", - "djEuQWxhcm1Qcm92aWRlck1vZGUSHwoXZnJvbV90cnVuY2F0ZWRfc25hcHNo", - "b3QYECABKAgikAEKF0Fja25vd2xlZGdlQWxhcm1SZXF1ZXN0Eh0KFWNsaWVu", - "dF9jb3JyZWxhdGlvbl9pZBgCIAEoCRIcChRhbGFybV9mdWxsX3JlZmVyZW5j", - "ZRgDIAEoCRIPCgdjb21tZW50GAQgASgJEhUKDW9wZXJhdG9yX3VzZXIYBSAB", - "KAlKBAgBEAJSCnNlc3Npb25faWQi8QEKFUFja25vd2xlZGdlQWxhcm1SZXBs", - "eRIWCg5jb3JyZWxhdGlvbl9pZBgCIAEoCRI8Cg9wcm90b2NvbF9zdGF0dXMY", - "AyABKAsyIy5teGFjY2Vzc19nYXRld2F5LnYxLlByb3RvY29sU3RhdHVzEhQK", - "B2hyZXN1bHQYBCABKAVIAIgBARIyCgZzdGF0dXMYBSABKAsyIi5teGFjY2Vz", - "c19nYXRld2F5LnYxLk14U3RhdHVzUHJveHkSGgoSZGlhZ25vc3RpY19tZXNz", - "YWdlGAYgASgJQgoKCF9ocmVzdWx0SgQIARACUgpzZXNzaW9uX2lkIlEKE1N0", - "cmVhbUFsYXJtc1JlcXVlc3QSHQoVY2xpZW50X2NvcnJlbGF0aW9uX2lkGAEg", - "ASgJEhsKE2FsYXJtX2ZpbHRlcl9wcmVmaXgYAiABKAkiyQIKEEFsYXJtRmVl", - "ZE1lc3NhZ2USQAoMYWN0aXZlX2FsYXJtGAEgASgLMigubXhhY2Nlc3NfZ2F0", - "ZXdheS52MS5BY3RpdmVBbGFybVNuYXBzaG90SAASGwoRc25hcHNob3RfY29t", - "cGxldGUYAiABKAhIABJBCgp0cmFuc2l0aW9uGAMgASgLMisubXhhY2Nlc3Nf", - "Z2F0ZXdheS52MS5PbkFsYXJtVHJhbnNpdGlvbkV2ZW50SAASQwoPcHJvdmlk", - "ZXJfc3RhdHVzGAQgASgLMigubXhhY2Nlc3NfZ2F0ZXdheS52MS5BbGFybVBy", - "b3ZpZGVyU3RhdHVzSAASQwoPc25hcHNob3Rfc3RhdHVzGAUgASgLMigubXhh", - "Y2Nlc3NfZ2F0ZXdheS52MS5BbGFybVNuYXBzaG90U3RhdHVzSABCCQoHcGF5", - "bG9hZCKYAQoTQWxhcm1Qcm92aWRlclN0YXR1cxI0CgRtb2RlGAEgASgOMiYu", - "bXhhY2Nlc3NfZ2F0ZXdheS52MS5BbGFybVByb3ZpZGVyTW9kZRIQCghkZWdy", - "YWRlZBgCIAEoCBIOCgZyZWFzb24YAyABKAkSKQoFc2luY2UYBCABKAsyGi5n", - "b29nbGUucHJvdG9idWYuVGltZXN0YW1wIigKE0FsYXJtU25hcHNob3RTdGF0", - "dXMSEQoJdHJ1bmNhdGVkGAEgASgIIusBCg1NeFN0YXR1c1Byb3h5Eg8KB3N1", - "Y2Nlc3MYASABKAUSNwoIY2F0ZWdvcnkYAiABKA4yJS5teGFjY2Vzc19nYXRl", - "d2F5LnYxLk14U3RhdHVzQ2F0ZWdvcnkSOAoLZGV0ZWN0ZWRfYnkYAyABKA4y", - "Iy5teGFjY2Vzc19nYXRld2F5LnYxLk14U3RhdHVzU291cmNlEg4KBmRldGFp", - "bBgEIAEoBRIUCgxyYXdfY2F0ZWdvcnkYBSABKAUSFwoPcmF3X2RldGVjdGVk", - "X2J5GAYgASgFEhcKD2RpYWdub3N0aWNfdGV4dBgHIAEoCSLpAwoHTXhWYWx1", - "ZRIyCglkYXRhX3R5cGUYASABKA4yHy5teGFjY2Vzc19nYXRld2F5LnYxLk14", - "RGF0YVR5cGUSFAoMdmFyaWFudF90eXBlGAIgASgJEg8KB2lzX251bGwYAyAB", - "KAgSFgoOcmF3X2RpYWdub3N0aWMYBCABKAkSFQoNcmF3X2RhdGFfdHlwZRgF", - "IAEoBRIUCgpib29sX3ZhbHVlGAogASgISAASFQoLaW50MzJfdmFsdWUYCyAB", - "KAVIABIVCgtpbnQ2NF92YWx1ZRgMIAEoA0gAEhUKC2Zsb2F0X3ZhbHVlGA0g", - "ASgCSAASFgoMZG91YmxlX3ZhbHVlGA4gASgBSAASFgoMc3RyaW5nX3ZhbHVl", - "GA8gASgJSAASNQoPdGltZXN0YW1wX3ZhbHVlGBAgASgLMhouZ29vZ2xlLnBy", - "b3RvYnVmLlRpbWVzdGFtcEgAEjMKC2FycmF5X3ZhbHVlGBEgASgLMhwubXhh", - "Y2Nlc3NfZ2F0ZXdheS52MS5NeEFycmF5SAASEwoJcmF3X3ZhbHVlGBIgASgM", - "SAASQAoSc3BhcnNlX2FycmF5X3ZhbHVlGBMgASgLMiIubXhhY2Nlc3NfZ2F0", - "ZXdheS52MS5NeFNwYXJzZUFycmF5SABCBgoEa2luZCL+BAoHTXhBcnJheRI6", - "ChFlbGVtZW50X2RhdGFfdHlwZRgBIAEoDjIfLm14YWNjZXNzX2dhdGV3YXku", - "djEuTXhEYXRhVHlwZRIUCgx2YXJpYW50X3R5cGUYAiABKAkSEgoKZGltZW5z", - "aW9ucxgDIAMoDRIWCg5yYXdfZGlhZ25vc3RpYxgEIAEoCRIdChVyYXdfZWxl", - "bWVudF9kYXRhX3R5cGUYBSABKAUSNQoLYm9vbF92YWx1ZXMYCiABKAsyHi5t", - "eGFjY2Vzc19nYXRld2F5LnYxLkJvb2xBcnJheUgAEjcKDGludDMyX3ZhbHVl", - "cxgLIAEoCzIfLm14YWNjZXNzX2dhdGV3YXkudjEuSW50MzJBcnJheUgAEjcK", - "DGludDY0X3ZhbHVlcxgMIAEoCzIfLm14YWNjZXNzX2dhdGV3YXkudjEuSW50", - "NjRBcnJheUgAEjcKDGZsb2F0X3ZhbHVlcxgNIAEoCzIfLm14YWNjZXNzX2dh", - "dGV3YXkudjEuRmxvYXRBcnJheUgAEjkKDWRvdWJsZV92YWx1ZXMYDiABKAsy", - "IC5teGFjY2Vzc19nYXRld2F5LnYxLkRvdWJsZUFycmF5SAASOQoNc3RyaW5n", - "X3ZhbHVlcxgPIAEoCzIgLm14YWNjZXNzX2dhdGV3YXkudjEuU3RyaW5nQXJy", - "YXlIABI/ChB0aW1lc3RhbXBfdmFsdWVzGBAgASgLMiMubXhhY2Nlc3NfZ2F0", - "ZXdheS52MS5UaW1lc3RhbXBBcnJheUgAEjMKCnJhd192YWx1ZXMYESABKAsy", - "HS5teGFjY2Vzc19nYXRld2F5LnYxLlJhd0FycmF5SABCCAoGdmFsdWVzIpkB", - "Cg1NeFNwYXJzZUFycmF5EjoKEWVsZW1lbnRfZGF0YV90eXBlGAEgASgOMh8u", - "bXhhY2Nlc3NfZ2F0ZXdheS52MS5NeERhdGFUeXBlEhQKDHRvdGFsX2xlbmd0", - "aBgCIAEoDRI2CghlbGVtZW50cxgDIAMoCzIkLm14YWNjZXNzX2dhdGV3YXku", - "djEuTXhTcGFyc2VFbGVtZW50Ik0KD014U3BhcnNlRWxlbWVudBINCgVpbmRl", - "eBgBIAEoDRIrCgV2YWx1ZRgCIAEoCzIcLm14YWNjZXNzX2dhdGV3YXkudjEu", - "TXhWYWx1ZSIbCglCb29sQXJyYXkSDgoGdmFsdWVzGAEgAygIIhwKCkludDMy", - "QXJyYXkSDgoGdmFsdWVzGAEgAygFIhwKCkludDY0QXJyYXkSDgoGdmFsdWVz", - "GAEgAygDIhwKCkZsb2F0QXJyYXkSDgoGdmFsdWVzGAEgAygCIh0KC0RvdWJs", - "ZUFycmF5Eg4KBnZhbHVlcxgBIAMoASIdCgtTdHJpbmdBcnJheRIOCgZ2YWx1", - "ZXMYASADKAkiPAoOVGltZXN0YW1wQXJyYXkSKgoGdmFsdWVzGAEgAygLMhou", - "Z29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIaCghSYXdBcnJheRIOCgZ2YWx1", - "ZXMYASADKAwiWAoOUHJvdG9jb2xTdGF0dXMSNQoEY29kZRgBIAEoDjInLm14", - "YWNjZXNzX2dhdGV3YXkudjEuUHJvdG9jb2xTdGF0dXNDb2RlEg8KB21lc3Nh", - "Z2UYAiABKAkqzAsKDU14Q29tbWFuZEtpbmQSHwobTVhfQ09NTUFORF9LSU5E", - "X1VOU1BFQ0lGSUVEEAASHAoYTVhfQ09NTUFORF9LSU5EX1JFR0lTVEVSEAES", - "HgoaTVhfQ09NTUFORF9LSU5EX1VOUkVHSVNURVIQAhIcChhNWF9DT01NQU5E", - "X0tJTkRfQUREX0lURU0QAxIdChlNWF9DT01NQU5EX0tJTkRfQUREX0lURU0y", - "EAQSHwobTVhfQ09NTUFORF9LSU5EX1JFTU9WRV9JVEVNEAUSGgoWTVhfQ09N", - "TUFORF9LSU5EX0FEVklTRRAGEh0KGU1YX0NPTU1BTkRfS0lORF9VTl9BRFZJ", - "U0UQBxImCiJNWF9DT01NQU5EX0tJTkRfQURWSVNFX1NVUEVSVklTT1JZEAgS", - "JQohTVhfQ09NTUFORF9LSU5EX0FERF9CVUZGRVJFRF9JVEVNEAkSMAosTVhf", - "Q09NTUFORF9LSU5EX1NFVF9CVUZGRVJFRF9VUERBVEVfSU5URVJWQUwQChIb", - "ChdNWF9DT01NQU5EX0tJTkRfU1VTUEVORBALEhwKGE1YX0NPTU1BTkRfS0lO", - "RF9BQ1RJVkFURRAMEhkKFU1YX0NPTU1BTkRfS0lORF9XUklURRANEhoKFk1Y", - "X0NPTU1BTkRfS0lORF9XUklURTIQDhIhCh1NWF9DT01NQU5EX0tJTkRfV1JJ", - "VEVfU0VDVVJFRBAPEiIKHk1YX0NPTU1BTkRfS0lORF9XUklURV9TRUNVUkVE", - "MhAQEiUKIU1YX0NPTU1BTkRfS0lORF9BVVRIRU5USUNBVEVfVVNFUhAREigK", - "JE1YX0NPTU1BTkRfS0lORF9BUkNIRVNUUkFfVVNFUl9UT19JRBASEiEKHU1Y", - "X0NPTU1BTkRfS0lORF9BRERfSVRFTV9CVUxLEBMSJAogTVhfQ09NTUFORF9L", - "SU5EX0FEVklTRV9JVEVNX0JVTEsQFBIkCiBNWF9DT01NQU5EX0tJTkRfUkVN", - "T1ZFX0lURU1fQlVMSxAVEicKI01YX0NPTU1BTkRfS0lORF9VTl9BRFZJU0Vf", - "SVRFTV9CVUxLEBYSIgoeTVhfQ09NTUFORF9LSU5EX1NVQlNDUklCRV9CVUxL", - "EBcSJAogTVhfQ09NTUFORF9LSU5EX1VOU1VCU0NSSUJFX0JVTEsQGBIkCiBN", - "WF9DT01NQU5EX0tJTkRfU1VCU0NSSUJFX0FMQVJNUxAZEiYKIk1YX0NPTU1B", - "TkRfS0lORF9VTlNVQlNDUklCRV9BTEFSTVMQGhIlCiFNWF9DT01NQU5EX0tJ", - "TkRfQUNLTk9XTEVER0VfQUxBUk0QGxInCiNNWF9DT01NQU5EX0tJTkRfUVVF", - "UllfQUNUSVZFX0FMQVJNUxAcEi0KKU1YX0NPTU1BTkRfS0lORF9BQ0tOT1dM", - "RURHRV9BTEFSTV9CWV9OQU1FEB0SHgoaTVhfQ09NTUFORF9LSU5EX1dSSVRF", - "X0JVTEsQHhIfChtNWF9DT01NQU5EX0tJTkRfV1JJVEUyX0JVTEsQHxImCiJN", - "WF9DT01NQU5EX0tJTkRfV1JJVEVfU0VDVVJFRF9CVUxLECASJwojTVhfQ09N", - "TUFORF9LSU5EX1dSSVRFX1NFQ1VSRUQyX0JVTEsQIRIdChlNWF9DT01NQU5E", - "X0tJTkRfUkVBRF9CVUxLECISKwonTVhfQ09NTUFORF9LSU5EX1VQREFURV9B", - "TEFSTV9XQVRDSF9MSVNUECMSGAoUTVhfQ09NTUFORF9LSU5EX1BJTkcQZBIl", - "CiFNWF9DT01NQU5EX0tJTkRfR0VUX1NFU1NJT05fU1RBVEUQZRIjCh9NWF9D", - "T01NQU5EX0tJTkRfR0VUX1dPUktFUl9JTkZPEGYSIAocTVhfQ09NTUFORF9L", - "SU5EX0RSQUlOX0VWRU5UUxBnEiMKH01YX0NPTU1BTkRfS0lORF9TSFVURE9X", - "Tl9XT1JLRVIQaCp6ChFBbGFybVByb3ZpZGVyTW9kZRIjCh9BTEFSTV9QUk9W", - "SURFUl9NT0RFX1VOU1BFQ0lGSUVEEAASIAocQUxBUk1fUFJPVklERVJfTU9E", - "RV9BTEFSTU1HUhABEh4KGkFMQVJNX1BST1ZJREVSX01PREVfU1VCVEFHEAIq", - "rQIKDU14RXZlbnRGYW1pbHkSHwobTVhfRVZFTlRfRkFNSUxZX1VOU1BFQ0lG", - "SUVEEAASIgoeTVhfRVZFTlRfRkFNSUxZX09OX0RBVEFfQ0hBTkdFEAESJQoh", - "TVhfRVZFTlRfRkFNSUxZX09OX1dSSVRFX0NPTVBMRVRFEAISJgoiTVhfRVZF", - "TlRfRkFNSUxZX09QRVJBVElPTl9DT01QTEVURRADEisKJ01YX0VWRU5UX0ZB", - "TUlMWV9PTl9CVUZGRVJFRF9EQVRBX0NIQU5HRRAEEicKI01YX0VWRU5UX0ZB", - "TUlMWV9PTl9BTEFSTV9UUkFOU0lUSU9OEAUSMgouTVhfRVZFTlRfRkFNSUxZ", - "X09OX0FMQVJNX1BST1ZJREVSX01PREVfQ0hBTkdFRBAGKsoBChNBbGFybVRy", - "YW5zaXRpb25LaW5kEiUKIUFMQVJNX1RSQU5TSVRJT05fS0lORF9VTlNQRUNJ", - "RklFRBAAEh8KG0FMQVJNX1RSQU5TSVRJT05fS0lORF9SQUlTRRABEiUKIUFM", - "QVJNX1RSQU5TSVRJT05fS0lORF9BQ0tOT1dMRURHRRACEh8KG0FMQVJNX1RS", - "QU5TSVRJT05fS0lORF9DTEVBUhADEiMKH0FMQVJNX1RSQU5TSVRJT05fS0lO", - "RF9SRVRSSUdHRVIQBCqqAQoTQWxhcm1Db25kaXRpb25TdGF0ZRIlCiFBTEFS", - "TV9DT05ESVRJT05fU1RBVEVfVU5TUEVDSUZJRUQQABIgChxBTEFSTV9DT05E", - "SVRJT05fU1RBVEVfQUNUSVZFEAESJgoiQUxBUk1fQ09ORElUSU9OX1NUQVRF", - "X0FDVElWRV9BQ0tFRBACEiIKHkFMQVJNX0NPTkRJVElPTl9TVEFURV9JTkFD", - "VElWRRADKqUDChBNeFN0YXR1c0NhdGVnb3J5EiIKHk1YX1NUQVRVU19DQVRF", - "R09SWV9VTlNQRUNJRklFRBAAEh4KGk1YX1NUQVRVU19DQVRFR09SWV9VTktO", - "T1dOEAESGQoVTVhfU1RBVFVTX0NBVEVHT1JZX09LEAISHgoaTVhfU1RBVFVT", - "X0NBVEVHT1JZX1BFTkRJTkcQAxIeChpNWF9TVEFUVVNfQ0FURUdPUllfV0FS", - "TklORxAEEioKJk1YX1NUQVRVU19DQVRFR09SWV9DT01NVU5JQ0FUSU9OX0VS", - "Uk9SEAUSKgomTVhfU1RBVFVTX0NBVEVHT1JZX0NPTkZJR1VSQVRJT05fRVJS", - "T1IQBhIoCiRNWF9TVEFUVVNfQ0FURUdPUllfT1BFUkFUSU9OQUxfRVJST1IQ", - "BxIlCiFNWF9TVEFUVVNfQ0FURUdPUllfU0VDVVJJVFlfRVJST1IQCBIlCiFN", - "WF9TVEFUVVNfQ0FURUdPUllfU09GVFdBUkVfRVJST1IQCRIiCh5NWF9TVEFU", - "VVNfQ0FURUdPUllfT1RIRVJfRVJST1IQCirKAgoOTXhTdGF0dXNTb3VyY2US", - "IAocTVhfU1RBVFVTX1NPVVJDRV9VTlNQRUNJRklFRBAAEhwKGE1YX1NUQVRV", - "U19TT1VSQ0VfVU5LTk9XThABEiMKH01YX1NUQVRVU19TT1VSQ0VfUkVRVUVT", - "VElOR19MTVgQAhIjCh9NWF9TVEFUVVNfU09VUkNFX1JFU1BPTkRJTkdfTE1Y", - "EAMSIwofTVhfU1RBVFVTX1NPVVJDRV9SRVFVRVNUSU5HX05NWBAEEiMKH01Y", - "X1NUQVRVU19TT1VSQ0VfUkVTUE9ORElOR19OTVgQBRIxCi1NWF9TVEFUVVNf", - "U09VUkNFX1JFUVVFU1RJTkdfQVVUT01BVElPTl9PQkpFQ1QQBhIxCi1NWF9T", - "VEFUVVNfU09VUkNFX1JFU1BPTkRJTkdfQVVUT01BVElPTl9PQkpFQ1QQByrd", - "BAoKTXhEYXRhVHlwZRIcChhNWF9EQVRBX1RZUEVfVU5TUEVDSUZJRUQQABIY", - "ChRNWF9EQVRBX1RZUEVfVU5LTk9XThABEhgKFE1YX0RBVEFfVFlQRV9OT19E", - "QVRBEAISGAoUTVhfREFUQV9UWVBFX0JPT0xFQU4QAxIYChRNWF9EQVRBX1RZ", - "UEVfSU5URUdFUhAEEhYKEk1YX0RBVEFfVFlQRV9GTE9BVBAFEhcKE01YX0RB", - "VEFfVFlQRV9ET1VCTEUQBhIXChNNWF9EQVRBX1RZUEVfU1RSSU5HEAcSFQoR", - "TVhfREFUQV9UWVBFX1RJTUUQCBIdChlNWF9EQVRBX1RZUEVfRUxBUFNFRF9U", - "SU1FEAkSHwobTVhfREFUQV9UWVBFX1JFRkVSRU5DRV9UWVBFEAoSHAoYTVhf", - "REFUQV9UWVBFX1NUQVRVU19UWVBFEAsSFQoRTVhfREFUQV9UWVBFX0VOVU0Q", - "DBItCilNWF9EQVRBX1RZUEVfU0VDVVJJVFlfQ0xBU1NJRklDQVRJT05fRU5V", - "TRANEiIKHk1YX0RBVEFfVFlQRV9EQVRBX1FVQUxJVFlfVFlQRRAOEh8KG01Y", - "X0RBVEFfVFlQRV9RVUFMSUZJRURfRU5VTRAPEiEKHU1YX0RBVEFfVFlQRV9R", - "VUFMSUZJRURfU1RSVUNUEBASKQolTVhfREFUQV9UWVBFX0lOVEVSTkFUSU9O", - "QUxJWkVEX1NUUklORxAREhsKF01YX0RBVEFfVFlQRV9CSUdfU1RSSU5HEBIS", - "FAoQTVhfREFUQV9UWVBFX0VORBATKqMDChJQcm90b2NvbFN0YXR1c0NvZGUS", - "JAogUFJPVE9DT0xfU1RBVFVTX0NPREVfVU5TUEVDSUZJRUQQABIbChdQUk9U", - "T0NPTF9TVEFUVVNfQ09ERV9PSxABEigKJFBST1RPQ09MX1NUQVRVU19DT0RF", - "X0lOVkFMSURfUkVRVUVTVBACEioKJlBST1RPQ09MX1NUQVRVU19DT0RFX1NF", - "U1NJT05fTk9UX0ZPVU5EEAMSKgomUFJPVE9DT0xfU1RBVFVTX0NPREVfU0VT", - "U0lPTl9OT1RfUkVBRFkQBBIrCidQUk9UT0NPTF9TVEFUVVNfQ09ERV9XT1JL", - "RVJfVU5BVkFJTEFCTEUQBRIgChxQUk9UT0NPTF9TVEFUVVNfQ09ERV9USU1F", - "T1VUEAYSIQodUFJPVE9DT0xfU1RBVFVTX0NPREVfQ0FOQ0VMRUQQBxIrCidQ", - "Uk9UT0NPTF9TVEFUVVNfQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04QCBIpCiVQ", - "Uk9UT0NPTF9TVEFUVVNfQ09ERV9NWEFDQ0VTU19GQUlMVVJFEAkqvwIKDFNl", - "c3Npb25TdGF0ZRIdChlTRVNTSU9OX1NUQVRFX1VOU1BFQ0lGSUVEEAASGgoW", - "U0VTU0lPTl9TVEFURV9DUkVBVElORxABEiEKHVNFU1NJT05fU1RBVEVfU1RB", - "UlRJTkdfV09SS0VSEAISIgoeU0VTU0lPTl9TVEFURV9XQUlUSU5HX0ZPUl9Q", - "SVBFEAMSHQoZU0VTU0lPTl9TVEFURV9IQU5EU0hBS0lORxAEEiUKIVNFU1NJ", - "T05fU1RBVEVfSU5JVElBTElaSU5HX1dPUktFUhAFEhcKE1NFU1NJT05fU1RB", - "VEVfUkVBRFkQBhIZChVTRVNTSU9OX1NUQVRFX0NMT1NJTkcQBxIYChRTRVNT", - "SU9OX1NUQVRFX0NMT1NFRBAIEhkKFVNFU1NJT05fU1RBVEVfRkFVTFRFRBAJ", - "MsMFCg9NeEFjY2Vzc0dhdGV3YXkSXQoLT3BlblNlc3Npb24SJy5teGFjY2Vz", - "c19nYXRld2F5LnYxLk9wZW5TZXNzaW9uUmVxdWVzdBolLm14YWNjZXNzX2dh", - "dGV3YXkudjEuT3BlblNlc3Npb25SZXBseRJgCgxDbG9zZVNlc3Npb24SKC5t", - "eGFjY2Vzc19nYXRld2F5LnYxLkNsb3NlU2Vzc2lvblJlcXVlc3QaJi5teGFj", - "Y2Vzc19nYXRld2F5LnYxLkNsb3NlU2Vzc2lvblJlcGx5ElQKBkludm9rZRIl", - "Lm14YWNjZXNzX2dhdGV3YXkudjEuTXhDb21tYW5kUmVxdWVzdBojLm14YWNj", - "ZXNzX2dhdGV3YXkudjEuTXhDb21tYW5kUmVwbHkSWAoMU3RyZWFtRXZlbnRz", - "EigubXhhY2Nlc3NfZ2F0ZXdheS52MS5TdHJlYW1FdmVudHNSZXF1ZXN0Ghwu", - "bXhhY2Nlc3NfZ2F0ZXdheS52MS5NeEV2ZW50MAESbAoQQWNrbm93bGVkZ2VB", - "bGFybRIsLm14YWNjZXNzX2dhdGV3YXkudjEuQWNrbm93bGVkZ2VBbGFybVJl", - "cXVlc3QaKi5teGFjY2Vzc19nYXRld2F5LnYxLkFja25vd2xlZGdlQWxhcm1S", - "ZXBseRJhCgxTdHJlYW1BbGFybXMSKC5teGFjY2Vzc19nYXRld2F5LnYxLlN0", - "cmVhbUFsYXJtc1JlcXVlc3QaJS5teGFjY2Vzc19nYXRld2F5LnYxLkFsYXJt", - "RmVlZE1lc3NhZ2UwARJuChFRdWVyeUFjdGl2ZUFsYXJtcxItLm14YWNjZXNz", - "X2dhdGV3YXkudjEuUXVlcnlBY3RpdmVBbGFybXNSZXF1ZXN0GigubXhhY2Nl", - "c3NfZ2F0ZXdheS52MS5BY3RpdmVBbGFybVNuYXBzaG90MAFCJqoCI1pCLk1P", - "TS5XVy5NeEdhdGV3YXkuQ29udHJhY3RzLlByb3RvYgZwcm90bzM=")); + "BiABKAkSGQoRb3BlcmF0b3JfcGFzc3dvcmQYByABKAkiNwoYUXVlcnlBY3Rp", + "dmVBbGFybXNDb21tYW5kEhsKE2FsYXJtX2ZpbHRlcl9wcmVmaXgYASABKAki", + "7QEKHUFja25vd2xlZGdlQWxhcm1CeU5hbWVDb21tYW5kEhIKCmFsYXJtX25h", + "bWUYASABKAkSFQoNcHJvdmlkZXJfbmFtZRgCIAEoCRISCgpncm91cF9uYW1l", + "GAMgASgJEg8KB2NvbW1lbnQYBCABKAkSFQoNb3BlcmF0b3JfdXNlchgFIAEo", + "CRIVCg1vcGVyYXRvcl9ub2RlGAYgASgJEhcKD29wZXJhdG9yX2RvbWFpbhgH", + "IAEoCRIaChJvcGVyYXRvcl9mdWxsX25hbWUYCCABKAkSGQoRb3BlcmF0b3Jf", + "cGFzc3dvcmQYCSABKAkiRQoWVW5zdWJzY3JpYmVCdWxrQ29tbWFuZBIVCg1z", + "ZXJ2ZXJfaGFuZGxlGAEgASgFEhQKDGl0ZW1faGFuZGxlcxgCIAMoBSJfChBX", + "cml0ZUJ1bGtDb21tYW5kEhUKDXNlcnZlcl9oYW5kbGUYASABKAUSNAoHZW50", + "cmllcxgCIAMoCzIjLm14YWNjZXNzX2dhdGV3YXkudjEuV3JpdGVCdWxrRW50", + "cnkiYwoOV3JpdGVCdWxrRW50cnkSEwoLaXRlbV9oYW5kbGUYASABKAUSKwoF", + "dmFsdWUYAiABKAsyHC5teGFjY2Vzc19nYXRld2F5LnYxLk14VmFsdWUSDwoH", + "dXNlcl9pZBgDIAEoBSJhChFXcml0ZTJCdWxrQ29tbWFuZBIVCg1zZXJ2ZXJf", + "aGFuZGxlGAEgASgFEjUKB2VudHJpZXMYAiADKAsyJC5teGFjY2Vzc19nYXRl", + "d2F5LnYxLldyaXRlMkJ1bGtFbnRyeSKbAQoPV3JpdGUyQnVsa0VudHJ5EhMK", + "C2l0ZW1faGFuZGxlGAEgASgFEisKBXZhbHVlGAIgASgLMhwubXhhY2Nlc3Nf", + "Z2F0ZXdheS52MS5NeFZhbHVlEjUKD3RpbWVzdGFtcF92YWx1ZRgDIAEoCzIc", + "Lm14YWNjZXNzX2dhdGV3YXkudjEuTXhWYWx1ZRIPCgd1c2VyX2lkGAQgASgF", + "Im0KF1dyaXRlU2VjdXJlZEJ1bGtDb21tYW5kEhUKDXNlcnZlcl9oYW5kbGUY", + "ASABKAUSOwoHZW50cmllcxgCIAMoCzIqLm14YWNjZXNzX2dhdGV3YXkudjEu", + "V3JpdGVTZWN1cmVkQnVsa0VudHJ5IowBChVXcml0ZVNlY3VyZWRCdWxrRW50", + "cnkSEwoLaXRlbV9oYW5kbGUYASABKAUSFwoPY3VycmVudF91c2VyX2lkGAIg", + "ASgFEhgKEHZlcmlmaWVyX3VzZXJfaWQYAyABKAUSKwoFdmFsdWUYBCABKAsy", + "HC5teGFjY2Vzc19nYXRld2F5LnYxLk14VmFsdWUibwoYV3JpdGVTZWN1cmVk", + "MkJ1bGtDb21tYW5kEhUKDXNlcnZlcl9oYW5kbGUYASABKAUSPAoHZW50cmll", + "cxgCIAMoCzIrLm14YWNjZXNzX2dhdGV3YXkudjEuV3JpdGVTZWN1cmVkMkJ1", + "bGtFbnRyeSLEAQoWV3JpdGVTZWN1cmVkMkJ1bGtFbnRyeRITCgtpdGVtX2hh", + "bmRsZRgBIAEoBRIXCg9jdXJyZW50X3VzZXJfaWQYAiABKAUSGAoQdmVyaWZp", + "ZXJfdXNlcl9pZBgDIAEoBRIrCgV2YWx1ZRgEIAEoCzIcLm14YWNjZXNzX2dh", + "dGV3YXkudjEuTXhWYWx1ZRI1Cg90aW1lc3RhbXBfdmFsdWUYBSABKAsyHC5t", + "eGFjY2Vzc19nYXRld2F5LnYxLk14VmFsdWUiUwoPUmVhZEJ1bGtDb21tYW5k", + "EhUKDXNlcnZlcl9oYW5kbGUYASABKAUSFQoNdGFnX2FkZHJlc3NlcxgCIAMo", + "CRISCgp0aW1lb3V0X21zGAMgASgNIh4KC1BpbmdDb21tYW5kEg8KB21lc3Nh", + "Z2UYASABKAkiGAoWR2V0U2Vzc2lvblN0YXRlQ29tbWFuZCIWChRHZXRXb3Jr", + "ZXJJbmZvQ29tbWFuZCIoChJEcmFpbkV2ZW50c0NvbW1hbmQSEgoKbWF4X2V2", + "ZW50cxgBIAEoDSJIChVTaHV0ZG93bldvcmtlckNvbW1hbmQSLwoMZ3JhY2Vf", + "cGVyaW9kGAEgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIoYPCg5N", + "eENvbW1hbmRSZXBseRISCgpzZXNzaW9uX2lkGAEgASgJEhYKDmNvcnJlbGF0", + "aW9uX2lkGAIgASgJEjAKBGtpbmQYAyABKA4yIi5teGFjY2Vzc19nYXRld2F5", + "LnYxLk14Q29tbWFuZEtpbmQSPAoPcHJvdG9jb2xfc3RhdHVzGAQgASgLMiMu", + "bXhhY2Nlc3NfZ2F0ZXdheS52MS5Qcm90b2NvbFN0YXR1cxIUCgdocmVzdWx0", + "GAUgASgFSAGIAQESMgoMcmV0dXJuX3ZhbHVlGAYgASgLMhwubXhhY2Nlc3Nf", + "Z2F0ZXdheS52MS5NeFZhbHVlEjQKCHN0YXR1c2VzGAcgAygLMiIubXhhY2Nl", + "c3NfZ2F0ZXdheS52MS5NeFN0YXR1c1Byb3h5EhoKEmRpYWdub3N0aWNfbWVz", + "c2FnZRgIIAEoCRI2CghyZWdpc3RlchgUIAEoCzIiLm14YWNjZXNzX2dhdGV3", + "YXkudjEuUmVnaXN0ZXJSZXBseUgAEjUKCGFkZF9pdGVtGBUgASgLMiEubXhh", + "Y2Nlc3NfZ2F0ZXdheS52MS5BZGRJdGVtUmVwbHlIABI3CglhZGRfaXRlbTIY", + "FiABKAsyIi5teGFjY2Vzc19nYXRld2F5LnYxLkFkZEl0ZW0yUmVwbHlIABJG", + "ChFhZGRfYnVmZmVyZWRfaXRlbRgXIAEoCzIpLm14YWNjZXNzX2dhdGV3YXku", + "djEuQWRkQnVmZmVyZWRJdGVtUmVwbHlIABI0CgdzdXNwZW5kGBggASgLMiEu", + "bXhhY2Nlc3NfZ2F0ZXdheS52MS5TdXNwZW5kUmVwbHlIABI2CghhY3RpdmF0", + "ZRgZIAEoCzIiLm14YWNjZXNzX2dhdGV3YXkudjEuQWN0aXZhdGVSZXBseUgA", + "EkcKEWF1dGhlbnRpY2F0ZV91c2VyGBogASgLMioubXhhY2Nlc3NfZ2F0ZXdh", + "eS52MS5BdXRoZW50aWNhdGVVc2VyUmVwbHlIABJLChRhcmNoZXN0cmFfdXNl", + "cl90b19pZBgbIAEoCzIrLm14YWNjZXNzX2dhdGV3YXkudjEuQXJjaGVzdHJB", + "VXNlclRvSWRSZXBseUgAEkAKDWFkZF9pdGVtX2J1bGsYHCABKAsyJy5teGFj", + "Y2Vzc19nYXRld2F5LnYxLkJ1bGtTdWJzY3JpYmVSZXBseUgAEkMKEGFkdmlz", + "ZV9pdGVtX2J1bGsYHSABKAsyJy5teGFjY2Vzc19nYXRld2F5LnYxLkJ1bGtT", + "dWJzY3JpYmVSZXBseUgAEkMKEHJlbW92ZV9pdGVtX2J1bGsYHiABKAsyJy5t", + "eGFjY2Vzc19nYXRld2F5LnYxLkJ1bGtTdWJzY3JpYmVSZXBseUgAEkYKE3Vu", + "X2FkdmlzZV9pdGVtX2J1bGsYHyABKAsyJy5teGFjY2Vzc19nYXRld2F5LnYx", + "LkJ1bGtTdWJzY3JpYmVSZXBseUgAEkEKDnN1YnNjcmliZV9idWxrGCAgASgL", + "MicubXhhY2Nlc3NfZ2F0ZXdheS52MS5CdWxrU3Vic2NyaWJlUmVwbHlIABJD", + "ChB1bnN1YnNjcmliZV9idWxrGCEgASgLMicubXhhY2Nlc3NfZ2F0ZXdheS52", + "MS5CdWxrU3Vic2NyaWJlUmVwbHlIABJOChFhY2tub3dsZWRnZV9hbGFybRgi", + "IAEoCzIxLm14YWNjZXNzX2dhdGV3YXkudjEuQWNrbm93bGVkZ2VBbGFybVJl", + "cGx5UGF5bG9hZEgAElEKE3F1ZXJ5X2FjdGl2ZV9hbGFybXMYIyABKAsyMi5t", + "eGFjY2Vzc19nYXRld2F5LnYxLlF1ZXJ5QWN0aXZlQWxhcm1zUmVwbHlQYXls", + "b2FkSAASOQoKd3JpdGVfYnVsaxgkIAEoCzIjLm14YWNjZXNzX2dhdGV3YXku", + "djEuQnVsa1dyaXRlUmVwbHlIABI6Cgt3cml0ZTJfYnVsaxglIAEoCzIjLm14", + "YWNjZXNzX2dhdGV3YXkudjEuQnVsa1dyaXRlUmVwbHlIABJBChJ3cml0ZV9z", + "ZWN1cmVkX2J1bGsYJiABKAsyIy5teGFjY2Vzc19nYXRld2F5LnYxLkJ1bGtX", + "cml0ZVJlcGx5SAASQgoTd3JpdGVfc2VjdXJlZDJfYnVsaxgnIAEoCzIjLm14", + "YWNjZXNzX2dhdGV3YXkudjEuQnVsa1dyaXRlUmVwbHlIABI3CglyZWFkX2J1", + "bGsYKCABKAsyIi5teGFjY2Vzc19nYXRld2F5LnYxLkJ1bGtSZWFkUmVwbHlI", + "ABI/Cg1zZXNzaW9uX3N0YXRlGGQgASgLMiYubXhhY2Nlc3NfZ2F0ZXdheS52", + "MS5TZXNzaW9uU3RhdGVSZXBseUgAEjsKC3dvcmtlcl9pbmZvGGUgASgLMiQu", + "bXhhY2Nlc3NfZ2F0ZXdheS52MS5Xb3JrZXJJbmZvUmVwbHlIABI9CgxkcmFp", + "bl9ldmVudHMYZiABKAsyJS5teGFjY2Vzc19nYXRld2F5LnYxLkRyYWluRXZl", + "bnRzUmVwbHlIAEIJCgdwYXlsb2FkQgoKCF9ocmVzdWx0IiYKDVJlZ2lzdGVy", + "UmVwbHkSFQoNc2VydmVyX2hhbmRsZRgBIAEoBSIjCgxBZGRJdGVtUmVwbHkS", + "EwoLaXRlbV9oYW5kbGUYASABKAUiJAoNQWRkSXRlbTJSZXBseRITCgtpdGVt", + "X2hhbmRsZRgBIAEoBSIrChRBZGRCdWZmZXJlZEl0ZW1SZXBseRITCgtpdGVt", + "X2hhbmRsZRgBIAEoBSJCCgxTdXNwZW5kUmVwbHkSMgoGc3RhdHVzGAEgASgL", + "MiIubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeFN0YXR1c1Byb3h5IkMKDUFjdGl2", + "YXRlUmVwbHkSMgoGc3RhdHVzGAEgASgLMiIubXhhY2Nlc3NfZ2F0ZXdheS52", + "MS5NeFN0YXR1c1Byb3h5IigKFUF1dGhlbnRpY2F0ZVVzZXJSZXBseRIPCgd1", + "c2VyX2lkGAEgASgFIikKFkFyY2hlc3RyQVVzZXJUb0lkUmVwbHkSDwoHdXNl", + "cl9pZBgBIAEoBSKBAQoPU3Vic2NyaWJlUmVzdWx0EhUKDXNlcnZlcl9oYW5k", + "bGUYASABKAUSEwoLdGFnX2FkZHJlc3MYAiABKAkSEwoLaXRlbV9oYW5kbGUY", + "AyABKAUSFgoOd2FzX3N1Y2Nlc3NmdWwYBCABKAgSFQoNZXJyb3JfbWVzc2Fn", + "ZRgFIAEoCSJLChJCdWxrU3Vic2NyaWJlUmVwbHkSNQoHcmVzdWx0cxgBIAMo", + "CzIkLm14YWNjZXNzX2dhdGV3YXkudjEuU3Vic2NyaWJlUmVzdWx0IsQBCg9C", + "dWxrV3JpdGVSZXN1bHQSFQoNc2VydmVyX2hhbmRsZRgBIAEoBRITCgtpdGVt", + "X2hhbmRsZRgCIAEoBRIWCg53YXNfc3VjY2Vzc2Z1bBgDIAEoCBIUCgdocmVz", + "dWx0GAQgASgFSACIAQESNAoIc3RhdHVzZXMYBSADKAsyIi5teGFjY2Vzc19n", + "YXRld2F5LnYxLk14U3RhdHVzUHJveHkSFQoNZXJyb3JfbWVzc2FnZRgGIAEo", + "CUIKCghfaHJlc3VsdCJHCg5CdWxrV3JpdGVSZXBseRI1CgdyZXN1bHRzGAEg", + "AygLMiQubXhhY2Nlc3NfZ2F0ZXdheS52MS5CdWxrV3JpdGVSZXN1bHQivgIK", + "DkJ1bGtSZWFkUmVzdWx0EhUKDXNlcnZlcl9oYW5kbGUYASABKAUSEwoLdGFn", + "X2FkZHJlc3MYAiABKAkSEwoLaXRlbV9oYW5kbGUYAyABKAUSFgoOd2FzX3N1", + "Y2Nlc3NmdWwYBCABKAgSEgoKd2FzX2NhY2hlZBgFIAEoCBIrCgV2YWx1ZRgG", + "IAEoCzIcLm14YWNjZXNzX2dhdGV3YXkudjEuTXhWYWx1ZRIPCgdxdWFsaXR5", + "GAcgASgFEjQKEHNvdXJjZV90aW1lc3RhbXAYCCABKAsyGi5nb29nbGUucHJv", + "dG9idWYuVGltZXN0YW1wEjQKCHN0YXR1c2VzGAkgAygLMiIubXhhY2Nlc3Nf", + "Z2F0ZXdheS52MS5NeFN0YXR1c1Byb3h5EhUKDWVycm9yX21lc3NhZ2UYCiAB", + "KAkiRQoNQnVsa1JlYWRSZXBseRI0CgdyZXN1bHRzGAEgAygLMiMubXhhY2Nl", + "c3NfZ2F0ZXdheS52MS5CdWxrUmVhZFJlc3VsdCJFChFTZXNzaW9uU3RhdGVS", + "ZXBseRIwCgVzdGF0ZRgBIAEoDjIhLm14YWNjZXNzX2dhdGV3YXkudjEuU2Vz", + "c2lvblN0YXRlInUKD1dvcmtlckluZm9SZXBseRIZChF3b3JrZXJfcHJvY2Vz", + "c19pZBgBIAEoBRIWCg53b3JrZXJfdmVyc2lvbhgCIAEoCRIXCg9teGFjY2Vz", + "c19wcm9naWQYAyABKAkSFgoObXhhY2Nlc3NfY2xzaWQYBCABKAkiQAoQRHJh", + "aW5FdmVudHNSZXBseRIsCgZldmVudHMYASADKAsyHC5teGFjY2Vzc19nYXRl", + "d2F5LnYxLk14RXZlbnQiNQocQWNrbm93bGVkZ2VBbGFybVJlcGx5UGF5bG9h", + "ZBIVCg1uYXRpdmVfc3RhdHVzGAEgASgFIngKHVF1ZXJ5QWN0aXZlQWxhcm1z", + "UmVwbHlQYXlsb2FkEjsKCXNuYXBzaG90cxgBIAMoCzIoLm14YWNjZXNzX2dh", + "dGV3YXkudjEuQWN0aXZlQWxhcm1TbmFwc2hvdBIaChJzbmFwc2hvdF90cnVu", + "Y2F0ZWQYAiABKAgijwgKB014RXZlbnQSMgoGZmFtaWx5GAEgASgOMiIubXhh", + "Y2Nlc3NfZ2F0ZXdheS52MS5NeEV2ZW50RmFtaWx5EhIKCnNlc3Npb25faWQY", + "AiABKAkSFQoNc2VydmVyX2hhbmRsZRgDIAEoBRITCgtpdGVtX2hhbmRsZRgE", + "IAEoBRIrCgV2YWx1ZRgFIAEoCzIcLm14YWNjZXNzX2dhdGV3YXkudjEuTXhW", + "YWx1ZRIPCgdxdWFsaXR5GAYgASgFEjQKEHNvdXJjZV90aW1lc3RhbXAYByAB", + "KAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjQKCHN0YXR1c2VzGAgg", + "AygLMiIubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeFN0YXR1c1Byb3h5EhcKD3dv", + "cmtlcl9zZXF1ZW5jZRgJIAEoBBI0ChB3b3JrZXJfdGltZXN0YW1wGAogASgL", + "MhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI9ChlnYXRld2F5X3JlY2Vp", + "dmVfdGltZXN0YW1wGAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFt", + "cBIUCgdocmVzdWx0GAwgASgFSAGIAQESEgoKcmF3X3N0YXR1cxgNIAEoCRI3", + "CgpyZXBsYXlfZ2FwGA4gASgLMh4ubXhhY2Nlc3NfZ2F0ZXdheS52MS5SZXBs", + "YXlHYXBIAogBARJACg5vbl9kYXRhX2NoYW5nZRgUIAEoCzImLm14YWNjZXNz", + "X2dhdGV3YXkudjEuT25EYXRhQ2hhbmdlRXZlbnRIABJGChFvbl93cml0ZV9j", + "b21wbGV0ZRgVIAEoCzIpLm14YWNjZXNzX2dhdGV3YXkudjEuT25Xcml0ZUNv", + "bXBsZXRlRXZlbnRIABJJChJvcGVyYXRpb25fY29tcGxldGUYFiABKAsyKy5t", + "eGFjY2Vzc19nYXRld2F5LnYxLk9wZXJhdGlvbkNvbXBsZXRlRXZlbnRIABJR", + "Chdvbl9idWZmZXJlZF9kYXRhX2NoYW5nZRgXIAEoCzIuLm14YWNjZXNzX2dh", + "dGV3YXkudjEuT25CdWZmZXJlZERhdGFDaGFuZ2VFdmVudEgAEkoKE29uX2Fs", + "YXJtX3RyYW5zaXRpb24YGCABKAsyKy5teGFjY2Vzc19nYXRld2F5LnYxLk9u", + "QWxhcm1UcmFuc2l0aW9uRXZlbnRIABJeCh5vbl9hbGFybV9wcm92aWRlcl9t", + "b2RlX2NoYW5nZWQYGSABKAsyNC5teGFjY2Vzc19nYXRld2F5LnYxLk9uQWxh", + "cm1Qcm92aWRlck1vZGVDaGFuZ2VkRXZlbnRIAEIGCgRib2R5QgoKCF9ocmVz", + "dWx0Qg0KC19yZXBsYXlfZ2FwIlAKCVJlcGxheUdhcBIgChhyZXF1ZXN0ZWRf", + "YWZ0ZXJfc2VxdWVuY2UYASABKAQSIQoZb2xkZXN0X2F2YWlsYWJsZV9zZXF1", + "ZW5jZRgCIAEoBCITChFPbkRhdGFDaGFuZ2VFdmVudCIWChRPbldyaXRlQ29t", + "cGxldGVFdmVudCIYChZPcGVyYXRpb25Db21wbGV0ZUV2ZW50ItQBChlPbkJ1", + "ZmZlcmVkRGF0YUNoYW5nZUV2ZW50EjIKCWRhdGFfdHlwZRgBIAEoDjIfLm14", + "YWNjZXNzX2dhdGV3YXkudjEuTXhEYXRhVHlwZRI0Cg5xdWFsaXR5X3ZhbHVl", + "cxgCIAEoCzIcLm14YWNjZXNzX2dhdGV3YXkudjEuTXhBcnJheRI2ChB0aW1l", + "c3RhbXBfdmFsdWVzGAMgASgLMhwubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeEFy", + "cmF5EhUKDXJhd19kYXRhX3R5cGUYBCABKAUi0AQKFk9uQWxhcm1UcmFuc2l0", + "aW9uRXZlbnQSHAoUYWxhcm1fZnVsbF9yZWZlcmVuY2UYASABKAkSHwoXc291", + "cmNlX29iamVjdF9yZWZlcmVuY2UYAiABKAkSFwoPYWxhcm1fdHlwZV9uYW1l", + "GAMgASgJEkEKD3RyYW5zaXRpb25fa2luZBgEIAEoDjIoLm14YWNjZXNzX2dh", + "dGV3YXkudjEuQWxhcm1UcmFuc2l0aW9uS2luZBIQCghzZXZlcml0eRgFIAEo", + "BRI8ChhvcmlnaW5hbF9yYWlzZV90aW1lc3RhbXAYBiABKAsyGi5nb29nbGUu", + "cHJvdG9idWYuVGltZXN0YW1wEjgKFHRyYW5zaXRpb25fdGltZXN0YW1wGAcg", + "ASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIVCg1vcGVyYXRvcl91", + "c2VyGAggASgJEhgKEG9wZXJhdG9yX2NvbW1lbnQYCSABKAkSEAoIY2F0ZWdv", + "cnkYCiABKAkSEwoLZGVzY3JpcHRpb24YCyABKAkSMwoNY3VycmVudF92YWx1", + "ZRgMIAEoCzIcLm14YWNjZXNzX2dhdGV3YXkudjEuTXhWYWx1ZRIxCgtsaW1p", + "dF92YWx1ZRgNIAEoCzIcLm14YWNjZXNzX2dhdGV3YXkudjEuTXhWYWx1ZRIQ", + "CghkZWdyYWRlZBgOIAEoCBI/Cg9zb3VyY2VfcHJvdmlkZXIYDyABKA4yJi5t", + "eGFjY2Vzc19nYXRld2F5LnYxLkFsYXJtUHJvdmlkZXJNb2RlIqABCh9PbkFs", + "YXJtUHJvdmlkZXJNb2RlQ2hhbmdlZEV2ZW50EjQKBG1vZGUYASABKA4yJi5t", + "eGFjY2Vzc19nYXRld2F5LnYxLkFsYXJtUHJvdmlkZXJNb2RlEg4KBnJlYXNv", + "bhgCIAEoCRIPCgdocmVzdWx0GAMgASgFEiYKAmF0GAQgASgLMhouZ29vZ2xl", + "LnByb3RvYnVmLlRpbWVzdGFtcCLxBAoTQWN0aXZlQWxhcm1TbmFwc2hvdBIc", + "ChRhbGFybV9mdWxsX3JlZmVyZW5jZRgBIAEoCRIfChdzb3VyY2Vfb2JqZWN0", + "X3JlZmVyZW5jZRgCIAEoCRIXCg9hbGFybV90eXBlX25hbWUYAyABKAkSEAoI", + "c2V2ZXJpdHkYBCABKAUSPAoYb3JpZ2luYWxfcmFpc2VfdGltZXN0YW1wGAUg", + "ASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI/Cg1jdXJyZW50X3N0", + "YXRlGAYgASgOMigubXhhY2Nlc3NfZ2F0ZXdheS52MS5BbGFybUNvbmRpdGlv", + "blN0YXRlEhAKCGNhdGVnb3J5GAcgASgJEhMKC2Rlc2NyaXB0aW9uGAggASgJ", + "Ej0KGWxhc3RfdHJhbnNpdGlvbl90aW1lc3RhbXAYCSABKAsyGi5nb29nbGUu", + "cHJvdG9idWYuVGltZXN0YW1wEhUKDW9wZXJhdG9yX3VzZXIYCiABKAkSGAoQ", + "b3BlcmF0b3JfY29tbWVudBgLIAEoCRIzCg1jdXJyZW50X3ZhbHVlGAwgASgL", + "MhwubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeFZhbHVlEjEKC2xpbWl0X3ZhbHVl", + "GA0gASgLMhwubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeFZhbHVlEhAKCGRlZ3Jh", + "ZGVkGA4gASgIEj8KD3NvdXJjZV9wcm92aWRlchgPIAEoDjImLm14YWNjZXNz", + "X2dhdGV3YXkudjEuQWxhcm1Qcm92aWRlck1vZGUSHwoXZnJvbV90cnVuY2F0", + "ZWRfc25hcHNob3QYECABKAgixAEKF0Fja25vd2xlZGdlQWxhcm1SZXF1ZXN0", + "Eh0KFWNsaWVudF9jb3JyZWxhdGlvbl9pZBgCIAEoCRIcChRhbGFybV9mdWxs", + "X3JlZmVyZW5jZRgDIAEoCRIPCgdjb21tZW50GAQgASgJEhUKDW9wZXJhdG9y", + "X3VzZXIYBSABKAkSGQoRb3BlcmF0b3JfcGFzc3dvcmQYBiABKAkSFwoPb3Bl", + "cmF0b3JfZG9tYWluGAcgASgJSgQIARACUgpzZXNzaW9uX2lkIvEBChVBY2tu", + "b3dsZWRnZUFsYXJtUmVwbHkSFgoOY29ycmVsYXRpb25faWQYAiABKAkSPAoP", + "cHJvdG9jb2xfc3RhdHVzGAMgASgLMiMubXhhY2Nlc3NfZ2F0ZXdheS52MS5Q", + "cm90b2NvbFN0YXR1cxIUCgdocmVzdWx0GAQgASgFSACIAQESMgoGc3RhdHVz", + "GAUgASgLMiIubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeFN0YXR1c1Byb3h5EhoK", + "EmRpYWdub3N0aWNfbWVzc2FnZRgGIAEoCUIKCghfaHJlc3VsdEoECAEQAlIK", + "c2Vzc2lvbl9pZCJRChNTdHJlYW1BbGFybXNSZXF1ZXN0Eh0KFWNsaWVudF9j", + "b3JyZWxhdGlvbl9pZBgBIAEoCRIbChNhbGFybV9maWx0ZXJfcHJlZml4GAIg", + "ASgJIskCChBBbGFybUZlZWRNZXNzYWdlEkAKDGFjdGl2ZV9hbGFybRgBIAEo", + "CzIoLm14YWNjZXNzX2dhdGV3YXkudjEuQWN0aXZlQWxhcm1TbmFwc2hvdEgA", + "EhsKEXNuYXBzaG90X2NvbXBsZXRlGAIgASgISAASQQoKdHJhbnNpdGlvbhgD", + "IAEoCzIrLm14YWNjZXNzX2dhdGV3YXkudjEuT25BbGFybVRyYW5zaXRpb25F", + "dmVudEgAEkMKD3Byb3ZpZGVyX3N0YXR1cxgEIAEoCzIoLm14YWNjZXNzX2dh", + "dGV3YXkudjEuQWxhcm1Qcm92aWRlclN0YXR1c0gAEkMKD3NuYXBzaG90X3N0", + "YXR1cxgFIAEoCzIoLm14YWNjZXNzX2dhdGV3YXkudjEuQWxhcm1TbmFwc2hv", + "dFN0YXR1c0gAQgkKB3BheWxvYWQimAEKE0FsYXJtUHJvdmlkZXJTdGF0dXMS", + "NAoEbW9kZRgBIAEoDjImLm14YWNjZXNzX2dhdGV3YXkudjEuQWxhcm1Qcm92", + "aWRlck1vZGUSEAoIZGVncmFkZWQYAiABKAgSDgoGcmVhc29uGAMgASgJEikK", + "BXNpbmNlGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIoChNB", + "bGFybVNuYXBzaG90U3RhdHVzEhEKCXRydW5jYXRlZBgBIAEoCCLrAQoNTXhT", + "dGF0dXNQcm94eRIPCgdzdWNjZXNzGAEgASgFEjcKCGNhdGVnb3J5GAIgASgO", + "MiUubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeFN0YXR1c0NhdGVnb3J5EjgKC2Rl", + "dGVjdGVkX2J5GAMgASgOMiMubXhhY2Nlc3NfZ2F0ZXdheS52MS5NeFN0YXR1", + "c1NvdXJjZRIOCgZkZXRhaWwYBCABKAUSFAoMcmF3X2NhdGVnb3J5GAUgASgF", + "EhcKD3Jhd19kZXRlY3RlZF9ieRgGIAEoBRIXCg9kaWFnbm9zdGljX3RleHQY", + "ByABKAki6QMKB014VmFsdWUSMgoJZGF0YV90eXBlGAEgASgOMh8ubXhhY2Nl", + "c3NfZ2F0ZXdheS52MS5NeERhdGFUeXBlEhQKDHZhcmlhbnRfdHlwZRgCIAEo", + "CRIPCgdpc19udWxsGAMgASgIEhYKDnJhd19kaWFnbm9zdGljGAQgASgJEhUK", + "DXJhd19kYXRhX3R5cGUYBSABKAUSFAoKYm9vbF92YWx1ZRgKIAEoCEgAEhUK", + "C2ludDMyX3ZhbHVlGAsgASgFSAASFQoLaW50NjRfdmFsdWUYDCABKANIABIV", + "CgtmbG9hdF92YWx1ZRgNIAEoAkgAEhYKDGRvdWJsZV92YWx1ZRgOIAEoAUgA", + "EhYKDHN0cmluZ192YWx1ZRgPIAEoCUgAEjUKD3RpbWVzdGFtcF92YWx1ZRgQ", + "IAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIABIzCgthcnJheV92", + "YWx1ZRgRIAEoCzIcLm14YWNjZXNzX2dhdGV3YXkudjEuTXhBcnJheUgAEhMK", + "CXJhd192YWx1ZRgSIAEoDEgAEkAKEnNwYXJzZV9hcnJheV92YWx1ZRgTIAEo", + "CzIiLm14YWNjZXNzX2dhdGV3YXkudjEuTXhTcGFyc2VBcnJheUgAQgYKBGtp", + "bmQi/gQKB014QXJyYXkSOgoRZWxlbWVudF9kYXRhX3R5cGUYASABKA4yHy5t", + "eGFjY2Vzc19nYXRld2F5LnYxLk14RGF0YVR5cGUSFAoMdmFyaWFudF90eXBl", + "GAIgASgJEhIKCmRpbWVuc2lvbnMYAyADKA0SFgoOcmF3X2RpYWdub3N0aWMY", + "BCABKAkSHQoVcmF3X2VsZW1lbnRfZGF0YV90eXBlGAUgASgFEjUKC2Jvb2xf", + "dmFsdWVzGAogASgLMh4ubXhhY2Nlc3NfZ2F0ZXdheS52MS5Cb29sQXJyYXlI", + "ABI3CgxpbnQzMl92YWx1ZXMYCyABKAsyHy5teGFjY2Vzc19nYXRld2F5LnYx", + "LkludDMyQXJyYXlIABI3CgxpbnQ2NF92YWx1ZXMYDCABKAsyHy5teGFjY2Vz", + "c19nYXRld2F5LnYxLkludDY0QXJyYXlIABI3CgxmbG9hdF92YWx1ZXMYDSAB", + "KAsyHy5teGFjY2Vzc19nYXRld2F5LnYxLkZsb2F0QXJyYXlIABI5Cg1kb3Vi", + "bGVfdmFsdWVzGA4gASgLMiAubXhhY2Nlc3NfZ2F0ZXdheS52MS5Eb3VibGVB", + "cnJheUgAEjkKDXN0cmluZ192YWx1ZXMYDyABKAsyIC5teGFjY2Vzc19nYXRl", + "d2F5LnYxLlN0cmluZ0FycmF5SAASPwoQdGltZXN0YW1wX3ZhbHVlcxgQIAEo", + "CzIjLm14YWNjZXNzX2dhdGV3YXkudjEuVGltZXN0YW1wQXJyYXlIABIzCgpy", + "YXdfdmFsdWVzGBEgASgLMh0ubXhhY2Nlc3NfZ2F0ZXdheS52MS5SYXdBcnJh", + "eUgAQggKBnZhbHVlcyKZAQoNTXhTcGFyc2VBcnJheRI6ChFlbGVtZW50X2Rh", + "dGFfdHlwZRgBIAEoDjIfLm14YWNjZXNzX2dhdGV3YXkudjEuTXhEYXRhVHlw", + "ZRIUCgx0b3RhbF9sZW5ndGgYAiABKA0SNgoIZWxlbWVudHMYAyADKAsyJC5t", + "eGFjY2Vzc19nYXRld2F5LnYxLk14U3BhcnNlRWxlbWVudCJNCg9NeFNwYXJz", + "ZUVsZW1lbnQSDQoFaW5kZXgYASABKA0SKwoFdmFsdWUYAiABKAsyHC5teGFj", + "Y2Vzc19nYXRld2F5LnYxLk14VmFsdWUiGwoJQm9vbEFycmF5Eg4KBnZhbHVl", + "cxgBIAMoCCIcCgpJbnQzMkFycmF5Eg4KBnZhbHVlcxgBIAMoBSIcCgpJbnQ2", + "NEFycmF5Eg4KBnZhbHVlcxgBIAMoAyIcCgpGbG9hdEFycmF5Eg4KBnZhbHVl", + "cxgBIAMoAiIdCgtEb3VibGVBcnJheRIOCgZ2YWx1ZXMYASADKAEiHQoLU3Ry", + "aW5nQXJyYXkSDgoGdmFsdWVzGAEgAygJIjwKDlRpbWVzdGFtcEFycmF5EioK", + "BnZhbHVlcxgBIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiGgoI", + "UmF3QXJyYXkSDgoGdmFsdWVzGAEgAygMIlgKDlByb3RvY29sU3RhdHVzEjUK", + "BGNvZGUYASABKA4yJy5teGFjY2Vzc19nYXRld2F5LnYxLlByb3RvY29sU3Rh", + "dHVzQ29kZRIPCgdtZXNzYWdlGAIgASgJKswLCg1NeENvbW1hbmRLaW5kEh8K", + "G01YX0NPTU1BTkRfS0lORF9VTlNQRUNJRklFRBAAEhwKGE1YX0NPTU1BTkRf", + "S0lORF9SRUdJU1RFUhABEh4KGk1YX0NPTU1BTkRfS0lORF9VTlJFR0lTVEVS", + "EAISHAoYTVhfQ09NTUFORF9LSU5EX0FERF9JVEVNEAMSHQoZTVhfQ09NTUFO", + "RF9LSU5EX0FERF9JVEVNMhAEEh8KG01YX0NPTU1BTkRfS0lORF9SRU1PVkVf", + "SVRFTRAFEhoKFk1YX0NPTU1BTkRfS0lORF9BRFZJU0UQBhIdChlNWF9DT01N", + "QU5EX0tJTkRfVU5fQURWSVNFEAcSJgoiTVhfQ09NTUFORF9LSU5EX0FEVklT", + "RV9TVVBFUlZJU09SWRAIEiUKIU1YX0NPTU1BTkRfS0lORF9BRERfQlVGRkVS", + "RURfSVRFTRAJEjAKLE1YX0NPTU1BTkRfS0lORF9TRVRfQlVGRkVSRURfVVBE", + "QVRFX0lOVEVSVkFMEAoSGwoXTVhfQ09NTUFORF9LSU5EX1NVU1BFTkQQCxIc", + "ChhNWF9DT01NQU5EX0tJTkRfQUNUSVZBVEUQDBIZChVNWF9DT01NQU5EX0tJ", + "TkRfV1JJVEUQDRIaChZNWF9DT01NQU5EX0tJTkRfV1JJVEUyEA4SIQodTVhf", + "Q09NTUFORF9LSU5EX1dSSVRFX1NFQ1VSRUQQDxIiCh5NWF9DT01NQU5EX0tJ", + "TkRfV1JJVEVfU0VDVVJFRDIQEBIlCiFNWF9DT01NQU5EX0tJTkRfQVVUSEVO", + "VElDQVRFX1VTRVIQERIoCiRNWF9DT01NQU5EX0tJTkRfQVJDSEVTVFJBX1VT", + "RVJfVE9fSUQQEhIhCh1NWF9DT01NQU5EX0tJTkRfQUREX0lURU1fQlVMSxAT", + "EiQKIE1YX0NPTU1BTkRfS0lORF9BRFZJU0VfSVRFTV9CVUxLEBQSJAogTVhf", + "Q09NTUFORF9LSU5EX1JFTU9WRV9JVEVNX0JVTEsQFRInCiNNWF9DT01NQU5E", + "X0tJTkRfVU5fQURWSVNFX0lURU1fQlVMSxAWEiIKHk1YX0NPTU1BTkRfS0lO", + "RF9TVUJTQ1JJQkVfQlVMSxAXEiQKIE1YX0NPTU1BTkRfS0lORF9VTlNVQlND", + "UklCRV9CVUxLEBgSJAogTVhfQ09NTUFORF9LSU5EX1NVQlNDUklCRV9BTEFS", + "TVMQGRImCiJNWF9DT01NQU5EX0tJTkRfVU5TVUJTQ1JJQkVfQUxBUk1TEBoS", + "JQohTVhfQ09NTUFORF9LSU5EX0FDS05PV0xFREdFX0FMQVJNEBsSJwojTVhf", + "Q09NTUFORF9LSU5EX1FVRVJZX0FDVElWRV9BTEFSTVMQHBItCilNWF9DT01N", + "QU5EX0tJTkRfQUNLTk9XTEVER0VfQUxBUk1fQllfTkFNRRAdEh4KGk1YX0NP", + "TU1BTkRfS0lORF9XUklURV9CVUxLEB4SHwobTVhfQ09NTUFORF9LSU5EX1dS", + "SVRFMl9CVUxLEB8SJgoiTVhfQ09NTUFORF9LSU5EX1dSSVRFX1NFQ1VSRURf", + "QlVMSxAgEicKI01YX0NPTU1BTkRfS0lORF9XUklURV9TRUNVUkVEMl9CVUxL", + "ECESHQoZTVhfQ09NTUFORF9LSU5EX1JFQURfQlVMSxAiEisKJ01YX0NPTU1B", + "TkRfS0lORF9VUERBVEVfQUxBUk1fV0FUQ0hfTElTVBAjEhgKFE1YX0NPTU1B", + "TkRfS0lORF9QSU5HEGQSJQohTVhfQ09NTUFORF9LSU5EX0dFVF9TRVNTSU9O", + "X1NUQVRFEGUSIwofTVhfQ09NTUFORF9LSU5EX0dFVF9XT1JLRVJfSU5GTxBm", + "EiAKHE1YX0NPTU1BTkRfS0lORF9EUkFJTl9FVkVOVFMQZxIjCh9NWF9DT01N", + "QU5EX0tJTkRfU0hVVERPV05fV09SS0VSEGgqegoRQWxhcm1Qcm92aWRlck1v", + "ZGUSIwofQUxBUk1fUFJPVklERVJfTU9ERV9VTlNQRUNJRklFRBAAEiAKHEFM", + "QVJNX1BST1ZJREVSX01PREVfQUxBUk1NR1IQARIeChpBTEFSTV9QUk9WSURF", + "Ul9NT0RFX1NVQlRBRxACKq0CCg1NeEV2ZW50RmFtaWx5Eh8KG01YX0VWRU5U", + "X0ZBTUlMWV9VTlNQRUNJRklFRBAAEiIKHk1YX0VWRU5UX0ZBTUlMWV9PTl9E", + "QVRBX0NIQU5HRRABEiUKIU1YX0VWRU5UX0ZBTUlMWV9PTl9XUklURV9DT01Q", + "TEVURRACEiYKIk1YX0VWRU5UX0ZBTUlMWV9PUEVSQVRJT05fQ09NUExFVEUQ", + "AxIrCidNWF9FVkVOVF9GQU1JTFlfT05fQlVGRkVSRURfREFUQV9DSEFOR0UQ", + "BBInCiNNWF9FVkVOVF9GQU1JTFlfT05fQUxBUk1fVFJBTlNJVElPThAFEjIK", + "Lk1YX0VWRU5UX0ZBTUlMWV9PTl9BTEFSTV9QUk9WSURFUl9NT0RFX0NIQU5H", + "RUQQBirKAQoTQWxhcm1UcmFuc2l0aW9uS2luZBIlCiFBTEFSTV9UUkFOU0lU", + "SU9OX0tJTkRfVU5TUEVDSUZJRUQQABIfChtBTEFSTV9UUkFOU0lUSU9OX0tJ", + "TkRfUkFJU0UQARIlCiFBTEFSTV9UUkFOU0lUSU9OX0tJTkRfQUNLTk9XTEVE", + "R0UQAhIfChtBTEFSTV9UUkFOU0lUSU9OX0tJTkRfQ0xFQVIQAxIjCh9BTEFS", + "TV9UUkFOU0lUSU9OX0tJTkRfUkVUUklHR0VSEAQqqgEKE0FsYXJtQ29uZGl0", + "aW9uU3RhdGUSJQohQUxBUk1fQ09ORElUSU9OX1NUQVRFX1VOU1BFQ0lGSUVE", + "EAASIAocQUxBUk1fQ09ORElUSU9OX1NUQVRFX0FDVElWRRABEiYKIkFMQVJN", + "X0NPTkRJVElPTl9TVEFURV9BQ1RJVkVfQUNLRUQQAhIiCh5BTEFSTV9DT05E", + "SVRJT05fU1RBVEVfSU5BQ1RJVkUQAyqlAwoQTXhTdGF0dXNDYXRlZ29yeRIi", + "Ch5NWF9TVEFUVVNfQ0FURUdPUllfVU5TUEVDSUZJRUQQABIeChpNWF9TVEFU", + "VVNfQ0FURUdPUllfVU5LTk9XThABEhkKFU1YX1NUQVRVU19DQVRFR09SWV9P", + "SxACEh4KGk1YX1NUQVRVU19DQVRFR09SWV9QRU5ESU5HEAMSHgoaTVhfU1RB", + "VFVTX0NBVEVHT1JZX1dBUk5JTkcQBBIqCiZNWF9TVEFUVVNfQ0FURUdPUllf", + "Q09NTVVOSUNBVElPTl9FUlJPUhAFEioKJk1YX1NUQVRVU19DQVRFR09SWV9D", + "T05GSUdVUkFUSU9OX0VSUk9SEAYSKAokTVhfU1RBVFVTX0NBVEVHT1JZX09Q", + "RVJBVElPTkFMX0VSUk9SEAcSJQohTVhfU1RBVFVTX0NBVEVHT1JZX1NFQ1VS", + "SVRZX0VSUk9SEAgSJQohTVhfU1RBVFVTX0NBVEVHT1JZX1NPRlRXQVJFX0VS", + "Uk9SEAkSIgoeTVhfU1RBVFVTX0NBVEVHT1JZX09USEVSX0VSUk9SEAoqygIK", + "Dk14U3RhdHVzU291cmNlEiAKHE1YX1NUQVRVU19TT1VSQ0VfVU5TUEVDSUZJ", + "RUQQABIcChhNWF9TVEFUVVNfU09VUkNFX1VOS05PV04QARIjCh9NWF9TVEFU", + "VVNfU09VUkNFX1JFUVVFU1RJTkdfTE1YEAISIwofTVhfU1RBVFVTX1NPVVJD", + "RV9SRVNQT05ESU5HX0xNWBADEiMKH01YX1NUQVRVU19TT1VSQ0VfUkVRVUVT", + "VElOR19OTVgQBBIjCh9NWF9TVEFUVVNfU09VUkNFX1JFU1BPTkRJTkdfTk1Y", + "EAUSMQotTVhfU1RBVFVTX1NPVVJDRV9SRVFVRVNUSU5HX0FVVE9NQVRJT05f", + "T0JKRUNUEAYSMQotTVhfU1RBVFVTX1NPVVJDRV9SRVNQT05ESU5HX0FVVE9N", + "QVRJT05fT0JKRUNUEAcq3QQKCk14RGF0YVR5cGUSHAoYTVhfREFUQV9UWVBF", + "X1VOU1BFQ0lGSUVEEAASGAoUTVhfREFUQV9UWVBFX1VOS05PV04QARIYChRN", + "WF9EQVRBX1RZUEVfTk9fREFUQRACEhgKFE1YX0RBVEFfVFlQRV9CT09MRUFO", + "EAMSGAoUTVhfREFUQV9UWVBFX0lOVEVHRVIQBBIWChJNWF9EQVRBX1RZUEVf", + "RkxPQVQQBRIXChNNWF9EQVRBX1RZUEVfRE9VQkxFEAYSFwoTTVhfREFUQV9U", + "WVBFX1NUUklORxAHEhUKEU1YX0RBVEFfVFlQRV9USU1FEAgSHQoZTVhfREFU", + "QV9UWVBFX0VMQVBTRURfVElNRRAJEh8KG01YX0RBVEFfVFlQRV9SRUZFUkVO", + "Q0VfVFlQRRAKEhwKGE1YX0RBVEFfVFlQRV9TVEFUVVNfVFlQRRALEhUKEU1Y", + "X0RBVEFfVFlQRV9FTlVNEAwSLQopTVhfREFUQV9UWVBFX1NFQ1VSSVRZX0NM", + "QVNTSUZJQ0FUSU9OX0VOVU0QDRIiCh5NWF9EQVRBX1RZUEVfREFUQV9RVUFM", + "SVRZX1RZUEUQDhIfChtNWF9EQVRBX1RZUEVfUVVBTElGSUVEX0VOVU0QDxIh", + "Ch1NWF9EQVRBX1RZUEVfUVVBTElGSUVEX1NUUlVDVBAQEikKJU1YX0RBVEFf", + "VFlQRV9JTlRFUk5BVElPTkFMSVpFRF9TVFJJTkcQERIbChdNWF9EQVRBX1RZ", + "UEVfQklHX1NUUklORxASEhQKEE1YX0RBVEFfVFlQRV9FTkQQEyqjAwoSUHJv", + "dG9jb2xTdGF0dXNDb2RlEiQKIFBST1RPQ09MX1NUQVRVU19DT0RFX1VOU1BF", + "Q0lGSUVEEAASGwoXUFJPVE9DT0xfU1RBVFVTX0NPREVfT0sQARIoCiRQUk9U", + "T0NPTF9TVEFUVVNfQ09ERV9JTlZBTElEX1JFUVVFU1QQAhIqCiZQUk9UT0NP", + "TF9TVEFUVVNfQ09ERV9TRVNTSU9OX05PVF9GT1VORBADEioKJlBST1RPQ09M", + "X1NUQVRVU19DT0RFX1NFU1NJT05fTk9UX1JFQURZEAQSKwonUFJPVE9DT0xf", + "U1RBVFVTX0NPREVfV09SS0VSX1VOQVZBSUxBQkxFEAUSIAocUFJPVE9DT0xf", + "U1RBVFVTX0NPREVfVElNRU9VVBAGEiEKHVBST1RPQ09MX1NUQVRVU19DT0RF", + "X0NBTkNFTEVEEAcSKwonUFJPVE9DT0xfU1RBVFVTX0NPREVfUFJPVE9DT0xf", + "VklPTEFUSU9OEAgSKQolUFJPVE9DT0xfU1RBVFVTX0NPREVfTVhBQ0NFU1Nf", + "RkFJTFVSRRAJKr8CCgxTZXNzaW9uU3RhdGUSHQoZU0VTU0lPTl9TVEFURV9V", + "TlNQRUNJRklFRBAAEhoKFlNFU1NJT05fU1RBVEVfQ1JFQVRJTkcQARIhCh1T", + "RVNTSU9OX1NUQVRFX1NUQVJUSU5HX1dPUktFUhACEiIKHlNFU1NJT05fU1RB", + "VEVfV0FJVElOR19GT1JfUElQRRADEh0KGVNFU1NJT05fU1RBVEVfSEFORFNI", + "QUtJTkcQBBIlCiFTRVNTSU9OX1NUQVRFX0lOSVRJQUxJWklOR19XT1JLRVIQ", + "BRIXChNTRVNTSU9OX1NUQVRFX1JFQURZEAYSGQoVU0VTU0lPTl9TVEFURV9D", + "TE9TSU5HEAcSGAoUU0VTU0lPTl9TVEFURV9DTE9TRUQQCBIZChVTRVNTSU9O", + "X1NUQVRFX0ZBVUxURUQQCTLDBQoPTXhBY2Nlc3NHYXRld2F5El0KC09wZW5T", + "ZXNzaW9uEicubXhhY2Nlc3NfZ2F0ZXdheS52MS5PcGVuU2Vzc2lvblJlcXVl", + "c3QaJS5teGFjY2Vzc19nYXRld2F5LnYxLk9wZW5TZXNzaW9uUmVwbHkSYAoM", + "Q2xvc2VTZXNzaW9uEigubXhhY2Nlc3NfZ2F0ZXdheS52MS5DbG9zZVNlc3Np", + "b25SZXF1ZXN0GiYubXhhY2Nlc3NfZ2F0ZXdheS52MS5DbG9zZVNlc3Npb25S", + "ZXBseRJUCgZJbnZva2USJS5teGFjY2Vzc19nYXRld2F5LnYxLk14Q29tbWFu", + "ZFJlcXVlc3QaIy5teGFjY2Vzc19nYXRld2F5LnYxLk14Q29tbWFuZFJlcGx5", + "ElgKDFN0cmVhbUV2ZW50cxIoLm14YWNjZXNzX2dhdGV3YXkudjEuU3RyZWFt", + "RXZlbnRzUmVxdWVzdBocLm14YWNjZXNzX2dhdGV3YXkudjEuTXhFdmVudDAB", + "EmwKEEFja25vd2xlZGdlQWxhcm0SLC5teGFjY2Vzc19nYXRld2F5LnYxLkFj", + "a25vd2xlZGdlQWxhcm1SZXF1ZXN0GioubXhhY2Nlc3NfZ2F0ZXdheS52MS5B", + "Y2tub3dsZWRnZUFsYXJtUmVwbHkSYQoMU3RyZWFtQWxhcm1zEigubXhhY2Nl", + "c3NfZ2F0ZXdheS52MS5TdHJlYW1BbGFybXNSZXF1ZXN0GiUubXhhY2Nlc3Nf", + "Z2F0ZXdheS52MS5BbGFybUZlZWRNZXNzYWdlMAESbgoRUXVlcnlBY3RpdmVB", + "bGFybXMSLS5teGFjY2Vzc19nYXRld2F5LnYxLlF1ZXJ5QWN0aXZlQWxhcm1z", + "UmVxdWVzdBooLm14YWNjZXNzX2dhdGV3YXkudjEuQWN0aXZlQWxhcm1TbmFw", + "c2hvdDABQiaqAiNaQi5NT00uV1cuTXhHYXRld2F5LkNvbnRyYWN0cy5Qcm90", + "b2IGcHJvdG8z")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { global::Google.Protobuf.WellKnownTypes.DurationReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, }, new pbr::GeneratedClrTypeInfo(new[] {typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.MxCommandKind), typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.AlarmProviderMode), typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.MxEventFamily), typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.AlarmTransitionKind), typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.AlarmConditionState), typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.MxStatusCategory), typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.MxStatusSource), typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.MxDataType), typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.ProtocolStatusCode), typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.SessionState), }, null, new pbr::GeneratedClrTypeInfo[] { @@ -575,9 +578,9 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.UnsubscribeAlarmsCommand), global::ZB.MOM.WW.MxGateway.Contracts.Proto.UnsubscribeAlarmsCommand.Parser, null, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.AlarmSubtagTarget), global::ZB.MOM.WW.MxGateway.Contracts.Proto.AlarmSubtagTarget.Parser, new[]{ "AlarmFullReference", "SourceObjectReference", "ActiveSubtag", "AckedSubtag", "AckCommentSubtag", "PrioritySubtag" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.AlarmFailoverConfig), global::ZB.MOM.WW.MxGateway.Contracts.Proto.AlarmFailoverConfig.Parser, new[]{ "ConsecutiveFailureThreshold", "FailbackProbeIntervalSeconds", "FailbackStableProbes" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmCommand), global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmCommand.Parser, new[]{ "AlarmGuid", "Comment", "OperatorUser", "OperatorNode", "OperatorDomain", "OperatorFullName" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmCommand), global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmCommand.Parser, new[]{ "AlarmGuid", "Comment", "OperatorUser", "OperatorNode", "OperatorDomain", "OperatorFullName", "OperatorPassword" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.QueryActiveAlarmsCommand), global::ZB.MOM.WW.MxGateway.Contracts.Proto.QueryActiveAlarmsCommand.Parser, new[]{ "AlarmFilterPrefix" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmByNameCommand), global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmByNameCommand.Parser, new[]{ "AlarmName", "ProviderName", "GroupName", "Comment", "OperatorUser", "OperatorNode", "OperatorDomain", "OperatorFullName" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmByNameCommand), global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmByNameCommand.Parser, new[]{ "AlarmName", "ProviderName", "GroupName", "Comment", "OperatorUser", "OperatorNode", "OperatorDomain", "OperatorFullName", "OperatorPassword" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.UnsubscribeBulkCommand), global::ZB.MOM.WW.MxGateway.Contracts.Proto.UnsubscribeBulkCommand.Parser, new[]{ "ServerHandle", "ItemHandles" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.WriteBulkCommand), global::ZB.MOM.WW.MxGateway.Contracts.Proto.WriteBulkCommand.Parser, new[]{ "ServerHandle", "Entries" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.WriteBulkEntry), global::ZB.MOM.WW.MxGateway.Contracts.Proto.WriteBulkEntry.Parser, new[]{ "ItemHandle", "Value", "UserId" }, null, null, null, null), @@ -622,7 +625,7 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.OnAlarmTransitionEvent), global::ZB.MOM.WW.MxGateway.Contracts.Proto.OnAlarmTransitionEvent.Parser, new[]{ "AlarmFullReference", "SourceObjectReference", "AlarmTypeName", "TransitionKind", "Severity", "OriginalRaiseTimestamp", "TransitionTimestamp", "OperatorUser", "OperatorComment", "Category", "Description", "CurrentValue", "LimitValue", "Degraded", "SourceProvider" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.OnAlarmProviderModeChangedEvent), global::ZB.MOM.WW.MxGateway.Contracts.Proto.OnAlarmProviderModeChangedEvent.Parser, new[]{ "Mode", "Reason", "Hresult", "At" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.ActiveAlarmSnapshot), global::ZB.MOM.WW.MxGateway.Contracts.Proto.ActiveAlarmSnapshot.Parser, new[]{ "AlarmFullReference", "SourceObjectReference", "AlarmTypeName", "Severity", "OriginalRaiseTimestamp", "CurrentState", "Category", "Description", "LastTransitionTimestamp", "OperatorUser", "OperatorComment", "CurrentValue", "LimitValue", "Degraded", "SourceProvider", "FromTruncatedSnapshot" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmRequest), global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmRequest.Parser, new[]{ "ClientCorrelationId", "AlarmFullReference", "Comment", "OperatorUser" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmRequest), global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmRequest.Parser, new[]{ "ClientCorrelationId", "AlarmFullReference", "Comment", "OperatorUser", "OperatorPassword", "OperatorDomain" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmReply), global::ZB.MOM.WW.MxGateway.Contracts.Proto.AcknowledgeAlarmReply.Parser, new[]{ "CorrelationId", "ProtocolStatus", "Hresult", "Status", "DiagnosticMessage" }, new[]{ "Hresult" }, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.StreamAlarmsRequest), global::ZB.MOM.WW.MxGateway.Contracts.Proto.StreamAlarmsRequest.Parser, new[]{ "ClientCorrelationId", "AlarmFilterPrefix" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.MxGateway.Contracts.Proto.AlarmFeedMessage), global::ZB.MOM.WW.MxGateway.Contracts.Proto.AlarmFeedMessage.Parser, new[]{ "ActiveAlarm", "SnapshotComplete", "Transition", "ProviderStatus", "SnapshotStatus" }, new[]{ "Payload" }, null, null, null), @@ -12586,10 +12589,13 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { } /// - /// Acknowledge a single alarm by its GUID. Operator identity fields are - /// recorded atomically with the ack transition in the alarm-history log. - /// The reply's hresult / native_status surfaces AVEVA's - /// AlarmAckByGUID return code. + /// Acknowledge a single alarm by its GUID. The worker resolves the GUID to the + /// alarm's Galaxy reference from its active-alarm snapshot and acknowledges it + /// by writing `comment` to `<TAGNAME>.AckMsg` over MXAccess after + /// AuthenticateUser as the operator, so the alarm history records the real + /// operator. The reply's hresult / native_status is 0 when the write was + /// applied (or sent but unconfirmed), otherwise the AuthenticateUser HRESULT or + /// the OnWriteComplete status detail. /// [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] public sealed partial class AcknowledgeAlarmCommand : pb::IMessage @@ -12632,6 +12638,7 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { operatorNode_ = other.operatorNode_; operatorDomain_ = other.operatorDomain_; operatorFullName_ = other.operatorFullName_; + operatorPassword_ = other.operatorPassword_; _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); } @@ -12716,6 +12723,23 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { } } + /// Field number for the "operator_password" field. + public const int OperatorPasswordFieldNumber = 7; + private string operatorPassword_ = ""; + /// + /// Operator credential used for AuthenticateUser before the AckMsg write. + /// Implementations must keep this field out of logs, metrics labels, command + /// lines, and diagnostics. + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public string OperatorPassword { + get { return operatorPassword_; } + set { + operatorPassword_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] public override bool Equals(object other) { @@ -12737,6 +12761,7 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { if (OperatorNode != other.OperatorNode) return false; if (OperatorDomain != other.OperatorDomain) return false; if (OperatorFullName != other.OperatorFullName) return false; + if (OperatorPassword != other.OperatorPassword) return false; return Equals(_unknownFields, other._unknownFields); } @@ -12750,6 +12775,7 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { if (OperatorNode.Length != 0) hash ^= OperatorNode.GetHashCode(); if (OperatorDomain.Length != 0) hash ^= OperatorDomain.GetHashCode(); if (OperatorFullName.Length != 0) hash ^= OperatorFullName.GetHashCode(); + if (OperatorPassword.Length != 0) hash ^= OperatorPassword.GetHashCode(); if (_unknownFields != null) { hash ^= _unknownFields.GetHashCode(); } @@ -12792,6 +12818,10 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { output.WriteRawTag(50); output.WriteString(OperatorFullName); } + if (OperatorPassword.Length != 0) { + output.WriteRawTag(58); + output.WriteString(OperatorPassword); + } if (_unknownFields != null) { _unknownFields.WriteTo(output); } @@ -12826,6 +12856,10 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { output.WriteRawTag(50); output.WriteString(OperatorFullName); } + if (OperatorPassword.Length != 0) { + output.WriteRawTag(58); + output.WriteString(OperatorPassword); + } if (_unknownFields != null) { _unknownFields.WriteTo(ref output); } @@ -12854,6 +12888,9 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { if (OperatorFullName.Length != 0) { size += 1 + pb::CodedOutputStream.ComputeStringSize(OperatorFullName); } + if (OperatorPassword.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(OperatorPassword); + } if (_unknownFields != null) { size += _unknownFields.CalculateSize(); } @@ -12884,6 +12921,9 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { if (other.OperatorFullName.Length != 0) { OperatorFullName = other.OperatorFullName; } + if (other.OperatorPassword.Length != 0) { + OperatorPassword = other.OperatorPassword; + } _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); } @@ -12927,6 +12967,10 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { OperatorFullName = input.ReadString(); break; } + case 58: { + OperatorPassword = input.ReadString(); + break; + } } } #endif @@ -12970,6 +13014,10 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { OperatorFullName = input.ReadString(); break; } + case 58: { + OperatorPassword = input.ReadString(); + break; + } } } } @@ -13183,9 +13231,7 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { /// /// Acknowledge a single alarm by its (name, provider, group) tuple. Used /// when the public RPC's AlarmFullReference (Provider!Group.Tag) cannot - /// be resolved to a GUID directly. The worker invokes - /// wwAlarmConsumerClass.AlarmAckByName which reaches the same alarm - /// history path as AlarmAckByGUID. + /// be resolved to a GUID directly. The worker acknowledges by writing `comment` to `<alarm_name>.AckMsg` (Galaxy provider only) after AuthenticateUser as the operator. /// [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] public sealed partial class AcknowledgeAlarmByNameCommand : pb::IMessage @@ -13230,6 +13276,7 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { operatorNode_ = other.operatorNode_; operatorDomain_ = other.operatorDomain_; operatorFullName_ = other.operatorFullName_; + operatorPassword_ = other.operatorPassword_; _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); } @@ -13346,6 +13393,23 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { } } + /// Field number for the "operator_password" field. + public const int OperatorPasswordFieldNumber = 9; + private string operatorPassword_ = ""; + /// + /// Operator credential used for AuthenticateUser before the AckMsg write. + /// Implementations must keep this field out of logs, metrics labels, command + /// lines, and diagnostics. + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public string OperatorPassword { + get { return operatorPassword_; } + set { + operatorPassword_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] public override bool Equals(object other) { @@ -13369,6 +13433,7 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { if (OperatorNode != other.OperatorNode) return false; if (OperatorDomain != other.OperatorDomain) return false; if (OperatorFullName != other.OperatorFullName) return false; + if (OperatorPassword != other.OperatorPassword) return false; return Equals(_unknownFields, other._unknownFields); } @@ -13384,6 +13449,7 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { if (OperatorNode.Length != 0) hash ^= OperatorNode.GetHashCode(); if (OperatorDomain.Length != 0) hash ^= OperatorDomain.GetHashCode(); if (OperatorFullName.Length != 0) hash ^= OperatorFullName.GetHashCode(); + if (OperatorPassword.Length != 0) hash ^= OperatorPassword.GetHashCode(); if (_unknownFields != null) { hash ^= _unknownFields.GetHashCode(); } @@ -13434,6 +13500,10 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { output.WriteRawTag(66); output.WriteString(OperatorFullName); } + if (OperatorPassword.Length != 0) { + output.WriteRawTag(74); + output.WriteString(OperatorPassword); + } if (_unknownFields != null) { _unknownFields.WriteTo(output); } @@ -13476,6 +13546,10 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { output.WriteRawTag(66); output.WriteString(OperatorFullName); } + if (OperatorPassword.Length != 0) { + output.WriteRawTag(74); + output.WriteString(OperatorPassword); + } if (_unknownFields != null) { _unknownFields.WriteTo(ref output); } @@ -13510,6 +13584,9 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { if (OperatorFullName.Length != 0) { size += 1 + pb::CodedOutputStream.ComputeStringSize(OperatorFullName); } + if (OperatorPassword.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(OperatorPassword); + } if (_unknownFields != null) { size += _unknownFields.CalculateSize(); } @@ -13546,6 +13623,9 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { if (other.OperatorFullName.Length != 0) { OperatorFullName = other.OperatorFullName; } + if (other.OperatorPassword.Length != 0) { + OperatorPassword = other.OperatorPassword; + } _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); } @@ -13597,6 +13677,10 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { OperatorFullName = input.ReadString(); break; } + case 74: { + OperatorPassword = input.ReadString(); + break; + } } } #endif @@ -13648,6 +13732,10 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { OperatorFullName = input.ReadString(); break; } + case 74: { + OperatorPassword = input.ReadString(); + break; + } } } } @@ -23278,11 +23366,11 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { /// Reply payload for AcknowledgeAlarmCommand AND /// AcknowledgeAlarmByNameCommand — both ack command kinds reuse this /// payload case (`MxCommandReply.acknowledge_alarm`); there is no - /// dedicated by-name reply case. Surfaces AVEVA's native ack return - /// code (AlarmAckByGUID for the GUID arm, AlarmAckByName for the - /// by-name arm); 0 means success. The MxCommandReply's hresult field + /// dedicated by-name reply case. Surfaces the ack outcome: 0 when the + /// AckMsg write was applied or sent but unconfirmed; otherwise the + /// AuthenticateUser HRESULT or the OnWriteComplete status detail. The MxCommandReply's hresult field /// carries the same value and is preferred for protocol consumers — - /// this payload exists so the gateway-side WorkerAlarmRpcDispatcher + /// this payload exists so GatewayAlarmMonitor /// can echo native_status into AcknowledgeAlarmReply.hresult without /// unpacking the outer envelope. /// @@ -27891,6 +27979,8 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { alarmFullReference_ = other.alarmFullReference_; comment_ = other.comment_; operatorUser_ = other.operatorUser_; + operatorPassword_ = other.operatorPassword_; + operatorDomain_ = other.operatorDomain_; _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); } @@ -27958,6 +28048,41 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { } } + /// Field number for the "operator_password" field. + public const int OperatorPasswordFieldNumber = 6; + private string operatorPassword_ = ""; + /// + /// Operator's Galaxy (or OS) password. The gateway authenticates as + /// operator_user with it before writing the acknowledgement so the alarm + /// history records the real operator. May be empty for accounts without a + /// password. Credential-sensitive: implementations must keep this field out + /// of logs, metrics labels, command lines, and diagnostics. + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public string OperatorPassword { + get { return operatorPassword_; } + set { + operatorPassword_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "operator_domain" field. + public const int OperatorDomainFieldNumber = 7; + private string operatorDomain_ = ""; + /// + /// Optional domain for OS-authenticated galaxies. When set the gateway + /// authenticates as "<operator_domain>\<operator_user>". + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public string OperatorDomain { + get { return operatorDomain_; } + set { + operatorDomain_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] public override bool Equals(object other) { @@ -27977,6 +28102,8 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { if (AlarmFullReference != other.AlarmFullReference) return false; if (Comment != other.Comment) return false; if (OperatorUser != other.OperatorUser) return false; + if (OperatorPassword != other.OperatorPassword) return false; + if (OperatorDomain != other.OperatorDomain) return false; return Equals(_unknownFields, other._unknownFields); } @@ -27988,6 +28115,8 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { if (AlarmFullReference.Length != 0) hash ^= AlarmFullReference.GetHashCode(); if (Comment.Length != 0) hash ^= Comment.GetHashCode(); if (OperatorUser.Length != 0) hash ^= OperatorUser.GetHashCode(); + if (OperatorPassword.Length != 0) hash ^= OperatorPassword.GetHashCode(); + if (OperatorDomain.Length != 0) hash ^= OperatorDomain.GetHashCode(); if (_unknownFields != null) { hash ^= _unknownFields.GetHashCode(); } @@ -28022,6 +28151,14 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { output.WriteRawTag(42); output.WriteString(OperatorUser); } + if (OperatorPassword.Length != 0) { + output.WriteRawTag(50); + output.WriteString(OperatorPassword); + } + if (OperatorDomain.Length != 0) { + output.WriteRawTag(58); + output.WriteString(OperatorDomain); + } if (_unknownFields != null) { _unknownFields.WriteTo(output); } @@ -28048,6 +28185,14 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { output.WriteRawTag(42); output.WriteString(OperatorUser); } + if (OperatorPassword.Length != 0) { + output.WriteRawTag(50); + output.WriteString(OperatorPassword); + } + if (OperatorDomain.Length != 0) { + output.WriteRawTag(58); + output.WriteString(OperatorDomain); + } if (_unknownFields != null) { _unknownFields.WriteTo(ref output); } @@ -28070,6 +28215,12 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { if (OperatorUser.Length != 0) { size += 1 + pb::CodedOutputStream.ComputeStringSize(OperatorUser); } + if (OperatorPassword.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(OperatorPassword); + } + if (OperatorDomain.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(OperatorDomain); + } if (_unknownFields != null) { size += _unknownFields.CalculateSize(); } @@ -28094,6 +28245,12 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { if (other.OperatorUser.Length != 0) { OperatorUser = other.OperatorUser; } + if (other.OperatorPassword.Length != 0) { + OperatorPassword = other.OperatorPassword; + } + if (other.OperatorDomain.Length != 0) { + OperatorDomain = other.OperatorDomain; + } _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); } @@ -28129,6 +28286,14 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { OperatorUser = input.ReadString(); break; } + case 50: { + OperatorPassword = input.ReadString(); + break; + } + case 58: { + OperatorDomain = input.ReadString(); + break; + } } } #endif @@ -28164,6 +28329,14 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { OperatorUser = input.ReadString(); break; } + case 50: { + OperatorPassword = input.ReadString(); + break; + } + case 58: { + OperatorDomain = input.ReadString(); + break; + } } } } @@ -28254,8 +28427,7 @@ namespace ZB.MOM.WW.MxGateway.Contracts.Proto { /// /// Native ack return code echoed from the worker. The worker carries the /// ack outcome as a single int32 (AcknowledgeAlarmReplyPayload.native_status, - /// = AlarmAckByName / AlarmAckByGUID return code; 0 = success); the gateway's - /// WorkerAlarmRpcDispatcher copies that value here. This is the authoritative + /// 0 = applied or sent; otherwise the AuthenticateUser HRESULT or OnWriteComplete detail); GatewayAlarmMonitor copies that value here. This is the authoritative /// ack-outcome field for the public RPC. Absent only when the worker reply /// omitted the value entirely (a protocol violation). /// diff --git a/src/ZB.MOM.WW.MxGateway.Contracts/Protos/mxaccess_gateway.proto b/src/ZB.MOM.WW.MxGateway.Contracts/Protos/mxaccess_gateway.proto index 6b00da9..915b1e8 100644 --- a/src/ZB.MOM.WW.MxGateway.Contracts/Protos/mxaccess_gateway.proto +++ b/src/ZB.MOM.WW.MxGateway.Contracts/Protos/mxaccess_gateway.proto @@ -391,10 +391,13 @@ message AlarmFailoverConfig { int32 failback_stable_probes = 3; // clean probes before switching back (>=1) } -// Acknowledge a single alarm by its GUID. Operator identity fields are -// recorded atomically with the ack transition in the alarm-history log. -// The reply's hresult / native_status surfaces AVEVA's -// AlarmAckByGUID return code. +// Acknowledge a single alarm by its GUID. The worker resolves the GUID to the +// alarm's Galaxy reference from its active-alarm snapshot and acknowledges it +// by writing `comment` to `.AckMsg` over MXAccess after +// AuthenticateUser as the operator, so the alarm history records the real +// operator. The reply's hresult / native_status is 0 when the write was +// applied (or sent but unconfirmed), otherwise the AuthenticateUser HRESULT or +// the OnWriteComplete status detail. message AcknowledgeAlarmCommand { // Canonical 8-4-4-4-12 GUID string (e.g. "BCC47053-9542-4D65-BDAA-BCDEA6A32A73"). string alarm_guid = 1; @@ -403,6 +406,10 @@ message AcknowledgeAlarmCommand { string operator_node = 4; string operator_domain = 5; string operator_full_name = 6; + // Operator credential used for AuthenticateUser before the AckMsg write. + // Implementations must keep this field out of logs, metrics labels, command + // lines, and diagnostics. + string operator_password = 7; } // Snapshot the currently-active alarm set. Optional filter prefix scopes @@ -414,9 +421,7 @@ message QueryActiveAlarmsCommand { // Acknowledge a single alarm by its (name, provider, group) tuple. Used // when the public RPC's AlarmFullReference (Provider!Group.Tag) cannot -// be resolved to a GUID directly. The worker invokes -// wwAlarmConsumerClass.AlarmAckByName which reaches the same alarm -// history path as AlarmAckByGUID. +// be resolved to a GUID directly. The worker acknowledges by writing `comment` to `.AckMsg` (Galaxy provider only) after AuthenticateUser as the operator. message AcknowledgeAlarmByNameCommand { // Tag/alarm name (e.g. "TestMachine_001.TestAlarm001"). Tag itself // may contain dots; the gateway-side parser splits on the first dot @@ -431,6 +436,10 @@ message AcknowledgeAlarmByNameCommand { string operator_node = 6; string operator_domain = 7; string operator_full_name = 8; + // Operator credential used for AuthenticateUser before the AckMsg write. + // Implementations must keep this field out of logs, metrics labels, command + // lines, and diagnostics. + string operator_password = 9; } message UnsubscribeBulkCommand { @@ -725,11 +734,11 @@ message DrainEventsReply { // Reply payload for AcknowledgeAlarmCommand AND // AcknowledgeAlarmByNameCommand — both ack command kinds reuse this // payload case (`MxCommandReply.acknowledge_alarm`); there is no -// dedicated by-name reply case. Surfaces AVEVA's native ack return -// code (AlarmAckByGUID for the GUID arm, AlarmAckByName for the -// by-name arm); 0 means success. The MxCommandReply's hresult field +// dedicated by-name reply case. Surfaces the ack outcome: 0 when the +// AckMsg write was applied or sent but unconfirmed; otherwise the +// AuthenticateUser HRESULT or the OnWriteComplete status detail. The MxCommandReply's hresult field // carries the same value and is preferred for protocol consumers — -// this payload exists so the gateway-side WorkerAlarmRpcDispatcher +// this payload exists so GatewayAlarmMonitor // can echo native_status into AcknowledgeAlarmReply.hresult without // unpacking the outer envelope. message AcknowledgeAlarmReplyPayload { @@ -987,6 +996,15 @@ message AcknowledgeAlarmRequest { // Operator principal performing the acknowledgement. The lmxopcua side // resolves this from the OPC UA session prior to invoking the RPC. string operator_user = 5; + // Operator's Galaxy (or OS) password. The gateway authenticates as + // operator_user with it before writing the acknowledgement so the alarm + // history records the real operator. May be empty for accounts without a + // password. Credential-sensitive: implementations must keep this field out + // of logs, metrics labels, command lines, and diagnostics. + string operator_password = 6; + // Optional domain for OS-authenticated galaxies. When set the gateway + // authenticates as "\". + string operator_domain = 7; } message AcknowledgeAlarmReply { @@ -997,8 +1015,7 @@ message AcknowledgeAlarmReply { ProtocolStatus protocol_status = 3; // Native ack return code echoed from the worker. The worker carries the // ack outcome as a single int32 (AcknowledgeAlarmReplyPayload.native_status, - // = AlarmAckByName / AlarmAckByGUID return code; 0 = success); the gateway's - // WorkerAlarmRpcDispatcher copies that value here. This is the authoritative + // 0 = applied or sent; otherwise the AuthenticateUser HRESULT or OnWriteComplete detail); GatewayAlarmMonitor copies that value here. This is the authoritative // ack-outcome field for the public RPC. Absent only when the worker reply // omitted the value entirely (a protocol violation). optional int32 hresult = 4; diff --git a/src/ZB.MOM.WW.MxGateway.Contracts/WorkerLaunchEnvironment.cs b/src/ZB.MOM.WW.MxGateway.Contracts/WorkerLaunchEnvironment.cs index 47a84e1..0ea7988 100644 --- a/src/ZB.MOM.WW.MxGateway.Contracts/WorkerLaunchEnvironment.cs +++ b/src/ZB.MOM.WW.MxGateway.Contracts/WorkerLaunchEnvironment.cs @@ -22,4 +22,10 @@ public static class WorkerLaunchEnvironment /// Maximum alarm records requested in one current-alarm fetch. public const string MaxAlarmsPerFetch = "MXGATEWAY_ALARM_MAX_ALARMS_PER_FETCH"; + + /// + /// MXAccess client name the worker's alarm-ack writer registers with. The + /// Historian records it as the acknowledgement's OperatorNode. + /// + public const string AlarmAckClientName = "MXGATEWAY_ALARM_ACK_CLIENT_NAME"; } diff --git a/src/ZB.MOM.WW.MxGateway.Tests/Contracts/ProtobufContractRoundTripTests.cs b/src/ZB.MOM.WW.MxGateway.Tests/Contracts/ProtobufContractRoundTripTests.cs index 238ca35..f774476 100644 --- a/src/ZB.MOM.WW.MxGateway.Tests/Contracts/ProtobufContractRoundTripTests.cs +++ b/src/ZB.MOM.WW.MxGateway.Tests/Contracts/ProtobufContractRoundTripTests.cs @@ -310,11 +310,47 @@ public sealed class ProtobufContractRoundTripTests AlarmFullReference = "Tank01.Level.HiHi", Comment = "shift handover", OperatorUser = "operator2", + OperatorPassword = "s3cret", + OperatorDomain = "CORP", }; var parsed = AcknowledgeAlarmRequest.Parser.ParseFrom(original.ToByteArray()); Assert.Equal(original, parsed); + Assert.Equal("s3cret", parsed.OperatorPassword); + Assert.Equal("CORP", parsed.OperatorDomain); + } + + /// Verifies that the worker ack commands round-trip the operator password. + [Fact] + public void AcknowledgeAlarmCommands_RoundTripOperatorPassword() + { + MxCommand byGuid = new() + { + Kind = MxCommandKind.AcknowledgeAlarm, + AcknowledgeAlarmCommand = new AcknowledgeAlarmCommand + { + AlarmGuid = "BCC47053-9542-4D65-BDAA-BCDEA6A32A73", + OperatorUser = "alice", + OperatorDomain = "CORP", + OperatorPassword = "s3cret", + }, + }; + MxCommand byName = new() + { + Kind = MxCommandKind.AcknowledgeAlarmByName, + AcknowledgeAlarmByNameCommand = new AcknowledgeAlarmByNameCommand + { + AlarmName = "TestMachine_001.TestAlarm001", + ProviderName = "Galaxy", + GroupName = "TestArea", + OperatorUser = "alice", + OperatorPassword = "s3cret", + }, + }; + + Assert.Equal("s3cret", MxCommand.Parser.ParseFrom(byGuid.ToByteArray()).AcknowledgeAlarmCommand.OperatorPassword); + Assert.Equal("s3cret", MxCommand.Parser.ParseFrom(byName.ToByteArray()).AcknowledgeAlarmByNameCommand.OperatorPassword); } /// Verifies that AcknowledgeAlarmReply round-trips with status, hresult, and diagnostics.