diff --git a/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.d.ts b/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.d.ts index 9749d7f..9893367 100644 --- a/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.d.ts +++ b/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.d.ts @@ -834,9 +834,9 @@ export declare type GetExecutionQueueRequest = Message<"olivetin.api.v1.GetExecu export declare const GetExecutionQueueRequestSchema: GenMessage; /** - * @generated from message olivetin.api.v1.ExecutionQueueGroup + * @generated from message olivetin.api.v1.ExecutionQueueAction */ -export declare type ExecutionQueueGroup = Message<"olivetin.api.v1.ExecutionQueueGroup"> & { +export declare type ExecutionQueueAction = Message<"olivetin.api.v1.ExecutionQueueAction"> & { /** * @generated from field: string binding_id = 1; */ @@ -873,6 +873,47 @@ export declare type ExecutionQueueGroup = Message<"olivetin.api.v1.ExecutionQueu entries: LogEntry[]; }; +/** + * Describes the message olivetin.api.v1.ExecutionQueueAction. + * Use `create(ExecutionQueueActionSchema)` to create a new message. + */ +export declare const ExecutionQueueActionSchema: GenMessage; + +/** + * @generated from message olivetin.api.v1.ExecutionQueueGroup + */ +export declare type ExecutionQueueGroup = Message<"olivetin.api.v1.ExecutionQueueGroup"> & { + /** + * @generated from field: string name = 1; + */ + name: string; + + /** + * @generated from field: string icon = 2; + */ + icon: string; + + /** + * @generated from field: int32 max_concurrent = 3; + */ + maxConcurrent: number; + + /** + * @generated from field: int32 active_count = 4; + */ + activeCount: number; + + /** + * @generated from field: repeated olivetin.api.v1.ExecutionQueueAction actions = 5; + */ + actions: ExecutionQueueAction[]; + + /** + * @generated from field: int32 queued_count = 6; + */ + queuedCount: number; +}; + /** * Describes the message olivetin.api.v1.ExecutionQueueGroup. * Use `create(ExecutionQueueGroupSchema)` to create a new message. diff --git a/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.js b/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.js index b6ba2b4..665e344 100644 --- a/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.js +++ b/frontend/resources/scripts/gen/olivetin/api/v1/olivetin_pb.js @@ -8,7 +8,7 @@ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2 * Describes the file olivetin/api/v1/olivetin.proto. */ export const file_olivetin_api_v1_olivetin = /*@__PURE__*/ - fileDesc("Ch5vbGl2ZXRpbi9hcGkvdjEvb2xpdmV0aW4ucHJvdG8SD29saXZldGluLmFwaS52MSKIBAoGQWN0aW9uEhIKCmJpbmRpbmdfaWQYASABKAkSDQoFdGl0bGUYAiABKAkSDAoEaWNvbhgDIAEoCRIQCghjYW5fZXhlYxgEIAEoCBIyCglhcmd1bWVudHMYBSADKAsyHy5vbGl2ZXRpbi5hcGkudjEuQWN0aW9uQXJndW1lbnQSFgoOcG9wdXBfb25fc3RhcnQYBiABKAkSDQoFb3JkZXIYByABKAUSDwoHdGltZW91dBgIIAEoBRIjChtkYXRldGltZV9yYXRlX2xpbWl0X2V4cGlyZXMYCSABKAkSFwoPZXhlY19vbl9zdGFydHVwGAogASgIEhQKDGV4ZWNfb25fY3JvbhgLIAMoCRIjChtleGVjX29uX2ZpbGVfY3JlYXRlZF9pbl9kaXIYDCADKAkSIwobZXhlY19vbl9maWxlX2NoYW5nZWRfaW5fZGlyGA0gAygJEh0KFWV4ZWNfb25fY2FsZW5kYXJfZmlsZRgOIAEoCRJAChBleGVjX29uX3dlYmhvb2tzGA8gAygLMiYub2xpdmV0aW4uYXBpLnYxLkFjdGlvbldlYmhvb2tFeGVjSGludBIVCg1qdXN0aWZpY2F0aW9uGBAgASgIEhwKFGhhc19ydW5uaW5nX2luc3RhbmNlGBEgASgIEhsKE2hhc19xdWV1ZWRfaW5zdGFuY2UYEiABKAgiwwIKFUFjdGlvbldlYmhvb2tFeGVjSGludBIQCgh0ZW1wbGF0ZRgBIAEoCRISCgptYXRjaF9wYXRoGAIgASgJEk8KDW1hdGNoX2hlYWRlcnMYAyADKAsyOC5vbGl2ZXRpbi5hcGkudjEuQWN0aW9uV2ViaG9va0V4ZWNIaW50Lk1hdGNoSGVhZGVyc0VudHJ5EksKC21hdGNoX3F1ZXJ5GAQgAygLMjYub2xpdmV0aW4uYXBpLnYxLkFjdGlvbldlYmhvb2tFeGVjSGludC5NYXRjaFF1ZXJ5RW50cnkaMwoRTWF0Y2hIZWFkZXJzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARoxCg9NYXRjaFF1ZXJ5RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASK7AgoOQWN0aW9uQXJndW1lbnQSDAoEbmFtZRgBIAEoCRINCgV0aXRsZRgCIAEoCRIMCgR0eXBlGAMgASgJEhUKDWRlZmF1bHRfdmFsdWUYBCABKAkSNgoHY2hvaWNlcxgFIAMoCzIlLm9saXZldGluLmFwaS52MS5BY3Rpb25Bcmd1bWVudENob2ljZRITCgtkZXNjcmlwdGlvbhgGIAEoCRJFCgtzdWdnZXN0aW9ucxgHIAMoCzIwLm9saXZldGluLmFwaS52MS5BY3Rpb25Bcmd1bWVudC5TdWdnZXN0aW9uc0VudHJ5Eh8KF3N1Z2dlc3Rpb25zX2Jyb3dzZXJfa2V5GAggASgJGjIKEFN1Z2dlc3Rpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASI0ChRBY3Rpb25Bcmd1bWVudENob2ljZRINCgV2YWx1ZRgBIAEoCRINCgV0aXRsZRgCIAEoCSKyAQoGRW50aXR5Eg0KBXRpdGxlGAEgASgJEhIKCnVuaXF1ZV9rZXkYAiABKAkSDAoEdHlwZRgDIAEoCRITCgtkaXJlY3RvcmllcxgEIAMoCRIzCgZmaWVsZHMYBSADKAsyIy5vbGl2ZXRpbi5hcGkudjEuRW50aXR5LkZpZWxkc0VudHJ5Gi0KC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiVAoUR2V0RGFzaGJvYXJkUmVzcG9uc2USDQoFdGl0bGUYASABKAkSLQoJZGFzaGJvYXJkGAQgASgLMhoub2xpdmV0aW4uYXBpLnYxLkRhc2hib2FyZCJfCg9FZmZlY3RpdmVQb2xpY3kSGAoQc2hvd19kaWFnbm9zdGljcxgBIAEoCBIVCg1zaG93X2xvZ19saXN0GAIgASgIEhsKE3Nob3dfdmVyc2lvbl9udW1iZXIYAyABKAgiTQoTR2V0RGFzaGJvYXJkUmVxdWVzdBINCgV0aXRsZRgBIAEoCRITCgtlbnRpdHlfdHlwZRgCIAEoCRISCgplbnRpdHlfa2V5GAMgASgJIlEKCURhc2hib2FyZBINCgV0aXRsZRgBIAEoCRI1Cghjb250ZW50cxgCIAMoCzIjLm9saXZldGluLmFwaS52MS5EYXNoYm9hcmRDb21wb25lbnQi2wEKEkRhc2hib2FyZENvbXBvbmVudBINCgV0aXRsZRgBIAEoCRIMCgR0eXBlGAIgASgJEjUKCGNvbnRlbnRzGAMgAygLMiMub2xpdmV0aW4uYXBpLnYxLkRhc2hib2FyZENvbXBvbmVudBIMCgRpY29uGAQgASgJEhEKCWNzc19jbGFzcxgFIAEoCRInCgZhY3Rpb24YBiABKAsyFy5vbGl2ZXRpbi5hcGkudjEuQWN0aW9uEhMKC2VudGl0eV90eXBlGAcgASgJEhIKCmVudGl0eV9rZXkYCCABKAkilAEKElN0YXJ0QWN0aW9uUmVxdWVzdBISCgpiaW5kaW5nX2lkGAEgASgJEjcKCWFyZ3VtZW50cxgCIAMoCzIkLm9saXZldGluLmFwaS52MS5TdGFydEFjdGlvbkFyZ3VtZW50EhoKEnVuaXF1ZV90cmFja2luZ19pZBgDIAEoCRIVCg1qdXN0aWZpY2F0aW9uGAQgASgJIjIKE1N0YXJ0QWN0aW9uQXJndW1lbnQSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoCSI0ChNTdGFydEFjdGlvblJlc3BvbnNlEh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgCIAEoCSJ+ChlTdGFydEFjdGlvbkFuZFdhaXRSZXF1ZXN0EhEKCWFjdGlvbl9pZBgBIAEoCRI3Cglhcmd1bWVudHMYAiADKAsyJC5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25Bcmd1bWVudBIVCg1qdXN0aWZpY2F0aW9uGAMgASgJIkoKGlN0YXJ0QWN0aW9uQW5kV2FpdFJlc3BvbnNlEiwKCWxvZ19lbnRyeRgBIAEoCzIZLm9saXZldGluLmFwaS52MS5Mb2dFbnRyeSIsChdTdGFydEFjdGlvbkJ5R2V0UmVxdWVzdBIRCglhY3Rpb25faWQYASABKAkiOQoYU3RhcnRBY3Rpb25CeUdldFJlc3BvbnNlEh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgCIAEoCSIzCh5TdGFydEFjdGlvbkJ5R2V0QW5kV2FpdFJlcXVlc3QSEQoJYWN0aW9uX2lkGAEgASgJIk8KH1N0YXJ0QWN0aW9uQnlHZXRBbmRXYWl0UmVzcG9uc2USLAoJbG9nX2VudHJ5GAEgASgLMhkub2xpdmV0aW4uYXBpLnYxLkxvZ0VudHJ5Il4KDkdldExvZ3NSZXF1ZXN0EhQKDHN0YXJ0X29mZnNldBgBIAEoAxITCgtkYXRlX2ZpbHRlchgCIAEoCRIRCglwYWdlX3NpemUYAyABKAMSDgoGZmlsdGVyGAQgASgJItsDCghMb2dFbnRyeRIYChBkYXRldGltZV9zdGFydGVkGAEgASgJEhQKDGFjdGlvbl90aXRsZRgCIAEoCRIOCgZvdXRwdXQYAyABKAkSEQoJdGltZWRfb3V0GAUgASgIEhEKCWV4aXRfY29kZRgGIAEoBRIMCgR1c2VyGAcgASgJEhIKCnVzZXJfY2xhc3MYCCABKAkSEwoLYWN0aW9uX2ljb24YCSABKAkSDAoEdGFncxgKIAMoCRIdChVleGVjdXRpb25fdHJhY2tpbmdfaWQYCyABKAkSGQoRZGF0ZXRpbWVfZmluaXNoZWQYDCABKAkSGQoRZXhlY3V0aW9uX3N0YXJ0ZWQYDiABKAgSGgoSZXhlY3V0aW9uX2ZpbmlzaGVkGA8gASgIEg8KB2Jsb2NrZWQYECABKAgSFgoOZGF0ZXRpbWVfaW5kZXgYESABKAMSEAoIY2FuX2tpbGwYEiABKAgSIwobZGF0ZXRpbWVfcmF0ZV9saW1pdF9leHBpcmVzGBMgASgJEhIKCmJpbmRpbmdfaWQYFCABKAkSDgoGcXVldWVkGBUgASgIEhgKEHF1ZXVlZF9mb3JfZ3JvdXAYFiABKAkSFQoNanVzdGlmaWNhdGlvbhgXIAEoCSKRAQoPR2V0TG9nc1Jlc3BvbnNlEicKBGxvZ3MYASADKAsyGS5vbGl2ZXRpbi5hcGkudjEuTG9nRW50cnkSFwoPY291bnRfcmVtYWluaW5nGAIgASgDEhEKCXBhZ2Vfc2l6ZRgDIAEoAxITCgt0b3RhbF9jb3VudBgEIAEoAxIUCgxzdGFydF9vZmZzZXQYBSABKAMiPwoUR2V0QWN0aW9uTG9nc1JlcXVlc3QSEQoJYWN0aW9uX2lkGAEgASgJEhQKDHN0YXJ0X29mZnNldBgCIAEoAyKXAQoVR2V0QWN0aW9uTG9nc1Jlc3BvbnNlEicKBGxvZ3MYASADKAsyGS5vbGl2ZXRpbi5hcGkudjEuTG9nRW50cnkSFwoPY291bnRfcmVtYWluaW5nGAIgASgDEhEKCXBhZ2Vfc2l6ZRgDIAEoAxITCgt0b3RhbF9jb3VudBgEIAEoAxIUCgxzdGFydF9vZmZzZXQYBSABKAMiGgoYR2V0RXhlY3V0aW9uUXVldWVSZXF1ZXN0IsUBChNFeGVjdXRpb25RdWV1ZUdyb3VwEhIKCmJpbmRpbmdfaWQYASABKAkSFAoMYWN0aW9uX3RpdGxlGAIgASgJEhMKC2FjdGlvbl9pY29uGAMgASgJEhYKDm1heF9jb25jdXJyZW50GAQgASgFEhQKDGFjdGl2ZV9jb3VudBgFIAEoBRIVCg1lbnRpdHlfcHJlZml4GAYgASgJEioKB2VudHJpZXMYByADKAsyGS5vbGl2ZXRpbi5hcGkudjEuTG9nRW50cnkiZwoZR2V0RXhlY3V0aW9uUXVldWVSZXNwb25zZRI0CgZncm91cHMYASADKAsyJC5vbGl2ZXRpbi5hcGkudjEuRXhlY3V0aW9uUXVldWVHcm91cBIUCgx0b3RhbF9hY3RpdmUYAiABKAUiZQobVmFsaWRhdGVBcmd1bWVudFR5cGVSZXF1ZXN0Eg0KBXZhbHVlGAEgASgJEgwKBHR5cGUYAiABKAkSEgoKYmluZGluZ19pZBgDIAEoCRIVCg1hcmd1bWVudF9uYW1lGAQgASgJIkIKHFZhbGlkYXRlQXJndW1lbnRUeXBlUmVzcG9uc2USDQoFdmFsaWQYASABKAgSEwoLZGVzY3JpcHRpb24YAiABKAkiNgoVV2F0Y2hFeGVjdXRpb25SZXF1ZXN0Eh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgBIAEoCSImChRXYXRjaEV4ZWN1dGlvblVwZGF0ZRIOCgZ1cGRhdGUYASABKAkiSgoWRXhlY3V0aW9uU3RhdHVzUmVxdWVzdBIdChVleGVjdXRpb25fdHJhY2tpbmdfaWQYASABKAkSEQoJYWN0aW9uX2lkGAIgASgJIkcKF0V4ZWN1dGlvblN0YXR1c1Jlc3BvbnNlEiwKCWxvZ19lbnRyeRgBIAEoCzIZLm9saXZldGluLmFwaS52MS5Mb2dFbnRyeSIPCg1XaG9BbUlSZXF1ZXN0ImwKDldob0FtSVJlc3BvbnNlEhoKEmF1dGhlbnRpY2F0ZWRfdXNlchgBIAEoCRIRCgl1c2VyZ3JvdXAYAiABKAkSEAoIcHJvdmlkZXIYAyABKAkSDAoEYWNscxgEIAMoCRILCgNzaWQYBSABKAkiEgoQU29zUmVwb3J0UmVxdWVzdCIiChFTb3NSZXBvcnRSZXNwb25zZRINCgVhbGVydBgBIAEoCSIRCg9EdW1wVmFyc1JlcXVlc3QilQEKEER1bXBWYXJzUmVzcG9uc2USDQoFYWxlcnQYASABKAkSQQoIY29udGVudHMYAiADKAsyLy5vbGl2ZXRpbi5hcGkudjEuRHVtcFZhcnNSZXNwb25zZS5Db250ZW50c0VudHJ5Gi8KDUNvbnRlbnRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASI7CgxEZWJ1Z0JpbmRpbmcSFAoMYWN0aW9uX3RpdGxlGAEgASgJEhUKDWVudGl0eV9wcmVmaXgYAiABKAkiHgocRHVtcFB1YmxpY0lkQWN0aW9uTWFwUmVxdWVzdCLOAQodRHVtcFB1YmxpY0lkQWN0aW9uTWFwUmVzcG9uc2USDQoFYWxlcnQYASABKAkSTgoIY29udGVudHMYAiADKAsyPC5vbGl2ZXRpbi5hcGkudjEuRHVtcFB1YmxpY0lkQWN0aW9uTWFwUmVzcG9uc2UuQ29udGVudHNFbnRyeRpOCg1Db250ZW50c0VudHJ5EgsKA2tleRgBIAEoCRIsCgV2YWx1ZRgCIAEoCzIdLm9saXZldGluLmFwaS52MS5EZWJ1Z0JpbmRpbmc6AjgBIhIKEEdldFJlYWR5elJlcXVlc3QiIwoRR2V0UmVhZHl6UmVzcG9uc2USDgoGc3RhdHVzGAEgASgJIhQKEkV2ZW50U3RyZWFtUmVxdWVzdCKZAwoTRXZlbnRTdHJlYW1SZXNwb25zZRI9Cg5lbnRpdHlfY2hhbmdlZBgCIAEoCzIjLm9saXZldGluLmFwaS52MS5FdmVudEVudGl0eUNoYW5nZWRIABI9Cg5jb25maWdfY2hhbmdlZBgDIAEoCzIjLm9saXZldGluLmFwaS52MS5FdmVudENvbmZpZ0NoYW5nZWRIABJFChJleGVjdXRpb25fZmluaXNoZWQYBCABKAsyJy5vbGl2ZXRpbi5hcGkudjEuRXZlbnRFeGVjdXRpb25GaW5pc2hlZEgAEkMKEWV4ZWN1dGlvbl9zdGFydGVkGAUgASgLMiYub2xpdmV0aW4uYXBpLnYxLkV2ZW50RXhlY3V0aW9uU3RhcnRlZEgAEjkKDG91dHB1dF9jaHVuaxgGIAEoCzIhLm9saXZldGluLmFwaS52MS5FdmVudE91dHB1dENodW5rSAASNAoJaGVhcnRiZWF0GAcgASgLMh8ub2xpdmV0aW4uYXBpLnYxLkV2ZW50SGVhcnRiZWF0SABCBwoFZXZlbnQiQQoQRXZlbnRPdXRwdXRDaHVuaxIdChVleGVjdXRpb25fdHJhY2tpbmdfaWQYASABKAkSDgoGb3V0cHV0GAIgASgJIhQKEkV2ZW50RW50aXR5Q2hhbmdlZCIUChJFdmVudENvbmZpZ0NoYW5nZWQiEAoORXZlbnRIZWFydGJlYXQiRgoWRXZlbnRFeGVjdXRpb25GaW5pc2hlZBIsCglsb2dfZW50cnkYASABKAsyGS5vbGl2ZXRpbi5hcGkudjEuTG9nRW50cnkiRQoVRXZlbnRFeGVjdXRpb25TdGFydGVkEiwKCWxvZ19lbnRyeRgBIAEoCzIZLm9saXZldGluLmFwaS52MS5Mb2dFbnRyeSIyChFLaWxsQWN0aW9uUmVxdWVzdBIdChVleGVjdXRpb25fdHJhY2tpbmdfaWQYASABKAkibQoSS2lsbEFjdGlvblJlc3BvbnNlEh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgBIAEoCRIOCgZraWxsZWQYAiABKAgSGQoRYWxyZWFkeV9jb21wbGV0ZWQYAyABKAgSDQoFZm91bmQYBCABKAgiOwoVTG9jYWxVc2VyTG9naW5SZXF1ZXN0EhAKCHVzZXJuYW1lGAEgASgJEhAKCHBhc3N3b3JkGAIgASgJIikKFkxvY2FsVXNlckxvZ2luUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCInChNQYXNzd29yZEhhc2hSZXF1ZXN0EhAKCHBhc3N3b3JkGAEgASgJIiQKFFBhc3N3b3JkSGFzaFJlc3BvbnNlEgwKBGhhc2gYASABKAkiDwoNTG9nb3V0UmVxdWVzdCIQCg5Mb2dvdXRSZXNwb25zZSIXChVHZXREaWFnbm9zdGljc1JlcXVlc3QiRQoWR2V0RGlhZ25vc3RpY3NSZXNwb25zZRITCgtTc2hGb3VuZEtleRgBIAEoCRIWCg5Tc2hGb3VuZENvbmZpZxgCIAEoCSINCgtJbml0UmVxdWVzdCLrBQoMSW5pdFJlc3BvbnNlEhIKCnNob3dGb290ZXIYASABKAgSFgoOc2hvd05hdmlnYXRpb24YAiABKAgSFwoPc2hvd05ld1ZlcnNpb25zGAMgASgIEhgKEGF2YWlsYWJsZVZlcnNpb24YBCABKAkSFgoOY3VycmVudFZlcnNpb24YBSABKAkSEQoJcGFnZVRpdGxlGAYgASgJEh4KFnNlY3Rpb25OYXZpZ2F0aW9uU3R5bGUYByABKAkSGgoSZGVmYXVsdEljb25Gb3JCYWNrGAggASgJEhYKDmVuYWJsZUN1c3RvbUpzGAkgASgIEhQKDGF1dGhMb2dpblVybBgKIAEoCRIWCg5hdXRoTG9jYWxMb2dpbhgLIAEoCBIRCglzdHlsZU1vZHMYDCADKAkSOAoPb0F1dGgyUHJvdmlkZXJzGA0gAygLMh8ub2xpdmV0aW4uYXBpLnYxLk9BdXRoMlByb3ZpZGVyEjgKD2FkZGl0aW9uYWxMaW5rcxgOIAMoCzIfLm9saXZldGluLmFwaS52MS5BZGRpdGlvbmFsTGluaxIWCg5yb290RGFzaGJvYXJkcxgPIAMoCRIaChJhdXRoZW50aWNhdGVkX3VzZXIYECABKAkSIwobYXV0aGVudGljYXRlZF91c2VyX3Byb3ZpZGVyGBEgASgJEjoKEGVmZmVjdGl2ZV9wb2xpY3kYEiABKAsyIC5vbGl2ZXRpbi5hcGkudjEuRWZmZWN0aXZlUG9saWN5EhYKDmJhbm5lcl9tZXNzYWdlGBMgASgJEhIKCmJhbm5lcl9jc3MYFCABKAkSGAoQc2hvd19kaWFnbm9zdGljcxgVIAEoCBIVCg1zaG93X2xvZ19saXN0GBYgASgIEhYKDmxvZ2luX3JlcXVpcmVkGBcgASgIEhgKEGF2YWlsYWJsZV90aGVtZXMYGCADKAkSJAocc2hvd19uYXZpZ2F0ZV9vbl9zdGFydF9pY29ucxgZIAEoCCIsCg5BZGRpdGlvbmFsTGluaxINCgV0aXRsZRgBIAEoCRILCgN1cmwYAiABKAkiOgoOT0F1dGgyUHJvdmlkZXISDQoFdGl0bGUYASABKAkSDAoEaWNvbhgDIAEoCRILCgNrZXkYBCABKAkiLQoXR2V0QWN0aW9uQmluZGluZ1JlcXVlc3QSEgoKYmluZGluZ19pZBgBIAEoCSJDChhHZXRBY3Rpb25CaW5kaW5nUmVzcG9uc2USJwoGYWN0aW9uGAEgASgLMhcub2xpdmV0aW4uYXBpLnYxLkFjdGlvbiIUChJHZXRFbnRpdGllc1JlcXVlc3QiVAoTR2V0RW50aXRpZXNSZXNwb25zZRI9ChJlbnRpdHlfZGVmaW5pdGlvbnMYASADKAsyIS5vbGl2ZXRpbi5hcGkudjEuRW50aXR5RGVmaW5pdGlvbiJpChBFbnRpdHlEZWZpbml0aW9uEg0KBXRpdGxlGAEgASgJEioKCWluc3RhbmNlcxgCIAMoCzIXLm9saXZldGluLmFwaS52MS5FbnRpdHkSGgoSdXNlZF9vbl9kYXNoYm9hcmRzGAMgAygJIjQKEEdldEVudGl0eVJlcXVlc3QSEgoKdW5pcXVlX2tleRgBIAEoCRIMCgR0eXBlGAIgASgJIjUKFFJlc3RhcnRBY3Rpb25SZXF1ZXN0Eh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgBIAEoCTLWEwoST2xpdmVUaW5BcGlTZXJ2aWNlEl0KDEdldERhc2hib2FyZBIkLm9saXZldGluLmFwaS52MS5HZXREYXNoYm9hcmRSZXF1ZXN0GiUub2xpdmV0aW4uYXBpLnYxLkdldERhc2hib2FyZFJlc3BvbnNlIgASWgoLU3RhcnRBY3Rpb24SIy5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25SZXF1ZXN0GiQub2xpdmV0aW4uYXBpLnYxLlN0YXJ0QWN0aW9uUmVzcG9uc2UiABJvChJTdGFydEFjdGlvbkFuZFdhaXQSKi5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25BbmRXYWl0UmVxdWVzdBorLm9saXZldGluLmFwaS52MS5TdGFydEFjdGlvbkFuZFdhaXRSZXNwb25zZSIAEmkKEFN0YXJ0QWN0aW9uQnlHZXQSKC5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25CeUdldFJlcXVlc3QaKS5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25CeUdldFJlc3BvbnNlIgASfgoXU3RhcnRBY3Rpb25CeUdldEFuZFdhaXQSLy5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25CeUdldEFuZFdhaXRSZXF1ZXN0GjAub2xpdmV0aW4uYXBpLnYxLlN0YXJ0QWN0aW9uQnlHZXRBbmRXYWl0UmVzcG9uc2UiABJeCg1SZXN0YXJ0QWN0aW9uEiUub2xpdmV0aW4uYXBpLnYxLlJlc3RhcnRBY3Rpb25SZXF1ZXN0GiQub2xpdmV0aW4uYXBpLnYxLlN0YXJ0QWN0aW9uUmVzcG9uc2UiABJXCgpLaWxsQWN0aW9uEiIub2xpdmV0aW4uYXBpLnYxLktpbGxBY3Rpb25SZXF1ZXN0GiMub2xpdmV0aW4uYXBpLnYxLktpbGxBY3Rpb25SZXNwb25zZSIAEmYKD0V4ZWN1dGlvblN0YXR1cxInLm9saXZldGluLmFwaS52MS5FeGVjdXRpb25TdGF0dXNSZXF1ZXN0Gigub2xpdmV0aW4uYXBpLnYxLkV4ZWN1dGlvblN0YXR1c1Jlc3BvbnNlIgASTgoHR2V0TG9ncxIfLm9saXZldGluLmFwaS52MS5HZXRMb2dzUmVxdWVzdBogLm9saXZldGluLmFwaS52MS5HZXRMb2dzUmVzcG9uc2UiABJgCg1HZXRBY3Rpb25Mb2dzEiUub2xpdmV0aW4uYXBpLnYxLkdldEFjdGlvbkxvZ3NSZXF1ZXN0GiYub2xpdmV0aW4uYXBpLnYxLkdldEFjdGlvbkxvZ3NSZXNwb25zZSIAEmwKEUdldEV4ZWN1dGlvblF1ZXVlEikub2xpdmV0aW4uYXBpLnYxLkdldEV4ZWN1dGlvblF1ZXVlUmVxdWVzdBoqLm9saXZldGluLmFwaS52MS5HZXRFeGVjdXRpb25RdWV1ZVJlc3BvbnNlIgASdQoUVmFsaWRhdGVBcmd1bWVudFR5cGUSLC5vbGl2ZXRpbi5hcGkudjEuVmFsaWRhdGVBcmd1bWVudFR5cGVSZXF1ZXN0Gi0ub2xpdmV0aW4uYXBpLnYxLlZhbGlkYXRlQXJndW1lbnRUeXBlUmVzcG9uc2UiABJLCgZXaG9BbUkSHi5vbGl2ZXRpbi5hcGkudjEuV2hvQW1JUmVxdWVzdBofLm9saXZldGluLmFwaS52MS5XaG9BbUlSZXNwb25zZSIAElQKCVNvc1JlcG9ydBIhLm9saXZldGluLmFwaS52MS5Tb3NSZXBvcnRSZXF1ZXN0GiIub2xpdmV0aW4uYXBpLnYxLlNvc1JlcG9ydFJlc3BvbnNlIgASUQoIRHVtcFZhcnMSIC5vbGl2ZXRpbi5hcGkudjEuRHVtcFZhcnNSZXF1ZXN0GiEub2xpdmV0aW4uYXBpLnYxLkR1bXBWYXJzUmVzcG9uc2UiABJ4ChVEdW1wUHVibGljSWRBY3Rpb25NYXASLS5vbGl2ZXRpbi5hcGkudjEuRHVtcFB1YmxpY0lkQWN0aW9uTWFwUmVxdWVzdBouLm9saXZldGluLmFwaS52MS5EdW1wUHVibGljSWRBY3Rpb25NYXBSZXNwb25zZSIAElQKCUdldFJlYWR5ehIhLm9saXZldGluLmFwaS52MS5HZXRSZWFkeXpSZXF1ZXN0GiIub2xpdmV0aW4uYXBpLnYxLkdldFJlYWR5elJlc3BvbnNlIgASYwoOTG9jYWxVc2VyTG9naW4SJi5vbGl2ZXRpbi5hcGkudjEuTG9jYWxVc2VyTG9naW5SZXF1ZXN0Gicub2xpdmV0aW4uYXBpLnYxLkxvY2FsVXNlckxvZ2luUmVzcG9uc2UiABJdCgxQYXNzd29yZEhhc2gSJC5vbGl2ZXRpbi5hcGkudjEuUGFzc3dvcmRIYXNoUmVxdWVzdBolLm9saXZldGluLmFwaS52MS5QYXNzd29yZEhhc2hSZXNwb25zZSIAEksKBkxvZ291dBIeLm9saXZldGluLmFwaS52MS5Mb2dvdXRSZXF1ZXN0Gh8ub2xpdmV0aW4uYXBpLnYxLkxvZ291dFJlc3BvbnNlIgASXAoLRXZlbnRTdHJlYW0SIy5vbGl2ZXRpbi5hcGkudjEuRXZlbnRTdHJlYW1SZXF1ZXN0GiQub2xpdmV0aW4uYXBpLnYxLkV2ZW50U3RyZWFtUmVzcG9uc2UiADABEmMKDkdldERpYWdub3N0aWNzEiYub2xpdmV0aW4uYXBpLnYxLkdldERpYWdub3N0aWNzUmVxdWVzdBonLm9saXZldGluLmFwaS52MS5HZXREaWFnbm9zdGljc1Jlc3BvbnNlIgASRQoESW5pdBIcLm9saXZldGluLmFwaS52MS5Jbml0UmVxdWVzdBodLm9saXZldGluLmFwaS52MS5Jbml0UmVzcG9uc2UiABJpChBHZXRBY3Rpb25CaW5kaW5nEigub2xpdmV0aW4uYXBpLnYxLkdldEFjdGlvbkJpbmRpbmdSZXF1ZXN0Gikub2xpdmV0aW4uYXBpLnYxLkdldEFjdGlvbkJpbmRpbmdSZXNwb25zZSIAEloKC0dldEVudGl0aWVzEiMub2xpdmV0aW4uYXBpLnYxLkdldEVudGl0aWVzUmVxdWVzdBokLm9saXZldGluLmFwaS52MS5HZXRFbnRpdGllc1Jlc3BvbnNlIgASSQoJR2V0RW50aXR5EiEub2xpdmV0aW4uYXBpLnYxLkdldEVudGl0eVJlcXVlc3QaFy5vbGl2ZXRpbi5hcGkudjEuRW50aXR5IgBCOFo2Z2l0aHViLmNvbS9PbGl2ZVRpbi9PbGl2ZVRpbi9nZW4vb2xpdmV0aW4vYXBpL3YxO2FwaXYxYgZwcm90bzM"); + fileDesc("Ch5vbGl2ZXRpbi9hcGkvdjEvb2xpdmV0aW4ucHJvdG8SD29saXZldGluLmFwaS52MSKIBAoGQWN0aW9uEhIKCmJpbmRpbmdfaWQYASABKAkSDQoFdGl0bGUYAiABKAkSDAoEaWNvbhgDIAEoCRIQCghjYW5fZXhlYxgEIAEoCBIyCglhcmd1bWVudHMYBSADKAsyHy5vbGl2ZXRpbi5hcGkudjEuQWN0aW9uQXJndW1lbnQSFgoOcG9wdXBfb25fc3RhcnQYBiABKAkSDQoFb3JkZXIYByABKAUSDwoHdGltZW91dBgIIAEoBRIjChtkYXRldGltZV9yYXRlX2xpbWl0X2V4cGlyZXMYCSABKAkSFwoPZXhlY19vbl9zdGFydHVwGAogASgIEhQKDGV4ZWNfb25fY3JvbhgLIAMoCRIjChtleGVjX29uX2ZpbGVfY3JlYXRlZF9pbl9kaXIYDCADKAkSIwobZXhlY19vbl9maWxlX2NoYW5nZWRfaW5fZGlyGA0gAygJEh0KFWV4ZWNfb25fY2FsZW5kYXJfZmlsZRgOIAEoCRJAChBleGVjX29uX3dlYmhvb2tzGA8gAygLMiYub2xpdmV0aW4uYXBpLnYxLkFjdGlvbldlYmhvb2tFeGVjSGludBIVCg1qdXN0aWZpY2F0aW9uGBAgASgIEhwKFGhhc19ydW5uaW5nX2luc3RhbmNlGBEgASgIEhsKE2hhc19xdWV1ZWRfaW5zdGFuY2UYEiABKAgiwwIKFUFjdGlvbldlYmhvb2tFeGVjSGludBIQCgh0ZW1wbGF0ZRgBIAEoCRISCgptYXRjaF9wYXRoGAIgASgJEk8KDW1hdGNoX2hlYWRlcnMYAyADKAsyOC5vbGl2ZXRpbi5hcGkudjEuQWN0aW9uV2ViaG9va0V4ZWNIaW50Lk1hdGNoSGVhZGVyc0VudHJ5EksKC21hdGNoX3F1ZXJ5GAQgAygLMjYub2xpdmV0aW4uYXBpLnYxLkFjdGlvbldlYmhvb2tFeGVjSGludC5NYXRjaFF1ZXJ5RW50cnkaMwoRTWF0Y2hIZWFkZXJzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARoxCg9NYXRjaFF1ZXJ5RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASK7AgoOQWN0aW9uQXJndW1lbnQSDAoEbmFtZRgBIAEoCRINCgV0aXRsZRgCIAEoCRIMCgR0eXBlGAMgASgJEhUKDWRlZmF1bHRfdmFsdWUYBCABKAkSNgoHY2hvaWNlcxgFIAMoCzIlLm9saXZldGluLmFwaS52MS5BY3Rpb25Bcmd1bWVudENob2ljZRITCgtkZXNjcmlwdGlvbhgGIAEoCRJFCgtzdWdnZXN0aW9ucxgHIAMoCzIwLm9saXZldGluLmFwaS52MS5BY3Rpb25Bcmd1bWVudC5TdWdnZXN0aW9uc0VudHJ5Eh8KF3N1Z2dlc3Rpb25zX2Jyb3dzZXJfa2V5GAggASgJGjIKEFN1Z2dlc3Rpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASI0ChRBY3Rpb25Bcmd1bWVudENob2ljZRINCgV2YWx1ZRgBIAEoCRINCgV0aXRsZRgCIAEoCSKyAQoGRW50aXR5Eg0KBXRpdGxlGAEgASgJEhIKCnVuaXF1ZV9rZXkYAiABKAkSDAoEdHlwZRgDIAEoCRITCgtkaXJlY3RvcmllcxgEIAMoCRIzCgZmaWVsZHMYBSADKAsyIy5vbGl2ZXRpbi5hcGkudjEuRW50aXR5LkZpZWxkc0VudHJ5Gi0KC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiVAoUR2V0RGFzaGJvYXJkUmVzcG9uc2USDQoFdGl0bGUYASABKAkSLQoJZGFzaGJvYXJkGAQgASgLMhoub2xpdmV0aW4uYXBpLnYxLkRhc2hib2FyZCJfCg9FZmZlY3RpdmVQb2xpY3kSGAoQc2hvd19kaWFnbm9zdGljcxgBIAEoCBIVCg1zaG93X2xvZ19saXN0GAIgASgIEhsKE3Nob3dfdmVyc2lvbl9udW1iZXIYAyABKAgiTQoTR2V0RGFzaGJvYXJkUmVxdWVzdBINCgV0aXRsZRgBIAEoCRITCgtlbnRpdHlfdHlwZRgCIAEoCRISCgplbnRpdHlfa2V5GAMgASgJIlEKCURhc2hib2FyZBINCgV0aXRsZRgBIAEoCRI1Cghjb250ZW50cxgCIAMoCzIjLm9saXZldGluLmFwaS52MS5EYXNoYm9hcmRDb21wb25lbnQi2wEKEkRhc2hib2FyZENvbXBvbmVudBINCgV0aXRsZRgBIAEoCRIMCgR0eXBlGAIgASgJEjUKCGNvbnRlbnRzGAMgAygLMiMub2xpdmV0aW4uYXBpLnYxLkRhc2hib2FyZENvbXBvbmVudBIMCgRpY29uGAQgASgJEhEKCWNzc19jbGFzcxgFIAEoCRInCgZhY3Rpb24YBiABKAsyFy5vbGl2ZXRpbi5hcGkudjEuQWN0aW9uEhMKC2VudGl0eV90eXBlGAcgASgJEhIKCmVudGl0eV9rZXkYCCABKAkilAEKElN0YXJ0QWN0aW9uUmVxdWVzdBISCgpiaW5kaW5nX2lkGAEgASgJEjcKCWFyZ3VtZW50cxgCIAMoCzIkLm9saXZldGluLmFwaS52MS5TdGFydEFjdGlvbkFyZ3VtZW50EhoKEnVuaXF1ZV90cmFja2luZ19pZBgDIAEoCRIVCg1qdXN0aWZpY2F0aW9uGAQgASgJIjIKE1N0YXJ0QWN0aW9uQXJndW1lbnQSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoCSI0ChNTdGFydEFjdGlvblJlc3BvbnNlEh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgCIAEoCSJ+ChlTdGFydEFjdGlvbkFuZFdhaXRSZXF1ZXN0EhEKCWFjdGlvbl9pZBgBIAEoCRI3Cglhcmd1bWVudHMYAiADKAsyJC5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25Bcmd1bWVudBIVCg1qdXN0aWZpY2F0aW9uGAMgASgJIkoKGlN0YXJ0QWN0aW9uQW5kV2FpdFJlc3BvbnNlEiwKCWxvZ19lbnRyeRgBIAEoCzIZLm9saXZldGluLmFwaS52MS5Mb2dFbnRyeSIsChdTdGFydEFjdGlvbkJ5R2V0UmVxdWVzdBIRCglhY3Rpb25faWQYASABKAkiOQoYU3RhcnRBY3Rpb25CeUdldFJlc3BvbnNlEh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgCIAEoCSIzCh5TdGFydEFjdGlvbkJ5R2V0QW5kV2FpdFJlcXVlc3QSEQoJYWN0aW9uX2lkGAEgASgJIk8KH1N0YXJ0QWN0aW9uQnlHZXRBbmRXYWl0UmVzcG9uc2USLAoJbG9nX2VudHJ5GAEgASgLMhkub2xpdmV0aW4uYXBpLnYxLkxvZ0VudHJ5Il4KDkdldExvZ3NSZXF1ZXN0EhQKDHN0YXJ0X29mZnNldBgBIAEoAxITCgtkYXRlX2ZpbHRlchgCIAEoCRIRCglwYWdlX3NpemUYAyABKAMSDgoGZmlsdGVyGAQgASgJItsDCghMb2dFbnRyeRIYChBkYXRldGltZV9zdGFydGVkGAEgASgJEhQKDGFjdGlvbl90aXRsZRgCIAEoCRIOCgZvdXRwdXQYAyABKAkSEQoJdGltZWRfb3V0GAUgASgIEhEKCWV4aXRfY29kZRgGIAEoBRIMCgR1c2VyGAcgASgJEhIKCnVzZXJfY2xhc3MYCCABKAkSEwoLYWN0aW9uX2ljb24YCSABKAkSDAoEdGFncxgKIAMoCRIdChVleGVjdXRpb25fdHJhY2tpbmdfaWQYCyABKAkSGQoRZGF0ZXRpbWVfZmluaXNoZWQYDCABKAkSGQoRZXhlY3V0aW9uX3N0YXJ0ZWQYDiABKAgSGgoSZXhlY3V0aW9uX2ZpbmlzaGVkGA8gASgIEg8KB2Jsb2NrZWQYECABKAgSFgoOZGF0ZXRpbWVfaW5kZXgYESABKAMSEAoIY2FuX2tpbGwYEiABKAgSIwobZGF0ZXRpbWVfcmF0ZV9saW1pdF9leHBpcmVzGBMgASgJEhIKCmJpbmRpbmdfaWQYFCABKAkSDgoGcXVldWVkGBUgASgIEhgKEHF1ZXVlZF9mb3JfZ3JvdXAYFiABKAkSFQoNanVzdGlmaWNhdGlvbhgXIAEoCSKRAQoPR2V0TG9nc1Jlc3BvbnNlEicKBGxvZ3MYASADKAsyGS5vbGl2ZXRpbi5hcGkudjEuTG9nRW50cnkSFwoPY291bnRfcmVtYWluaW5nGAIgASgDEhEKCXBhZ2Vfc2l6ZRgDIAEoAxITCgt0b3RhbF9jb3VudBgEIAEoAxIUCgxzdGFydF9vZmZzZXQYBSABKAMiPwoUR2V0QWN0aW9uTG9nc1JlcXVlc3QSEQoJYWN0aW9uX2lkGAEgASgJEhQKDHN0YXJ0X29mZnNldBgCIAEoAyKXAQoVR2V0QWN0aW9uTG9nc1Jlc3BvbnNlEicKBGxvZ3MYASADKAsyGS5vbGl2ZXRpbi5hcGkudjEuTG9nRW50cnkSFwoPY291bnRfcmVtYWluaW5nGAIgASgDEhEKCXBhZ2Vfc2l6ZRgDIAEoAxITCgt0b3RhbF9jb3VudBgEIAEoAxIUCgxzdGFydF9vZmZzZXQYBSABKAMiGgoYR2V0RXhlY3V0aW9uUXVldWVSZXF1ZXN0IsYBChRFeGVjdXRpb25RdWV1ZUFjdGlvbhISCgpiaW5kaW5nX2lkGAEgASgJEhQKDGFjdGlvbl90aXRsZRgCIAEoCRITCgthY3Rpb25faWNvbhgDIAEoCRIWCg5tYXhfY29uY3VycmVudBgEIAEoBRIUCgxhY3RpdmVfY291bnQYBSABKAUSFQoNZW50aXR5X3ByZWZpeBgGIAEoCRIqCgdlbnRyaWVzGAcgAygLMhkub2xpdmV0aW4uYXBpLnYxLkxvZ0VudHJ5Iq0BChNFeGVjdXRpb25RdWV1ZUdyb3VwEgwKBG5hbWUYASABKAkSDAoEaWNvbhgCIAEoCRIWCg5tYXhfY29uY3VycmVudBgDIAEoBRIUCgxhY3RpdmVfY291bnQYBCABKAUSNgoHYWN0aW9ucxgFIAMoCzIlLm9saXZldGluLmFwaS52MS5FeGVjdXRpb25RdWV1ZUFjdGlvbhIUCgxxdWV1ZWRfY291bnQYBiABKAUiZwoZR2V0RXhlY3V0aW9uUXVldWVSZXNwb25zZRI0CgZncm91cHMYASADKAsyJC5vbGl2ZXRpbi5hcGkudjEuRXhlY3V0aW9uUXVldWVHcm91cBIUCgx0b3RhbF9hY3RpdmUYAiABKAUiZQobVmFsaWRhdGVBcmd1bWVudFR5cGVSZXF1ZXN0Eg0KBXZhbHVlGAEgASgJEgwKBHR5cGUYAiABKAkSEgoKYmluZGluZ19pZBgDIAEoCRIVCg1hcmd1bWVudF9uYW1lGAQgASgJIkIKHFZhbGlkYXRlQXJndW1lbnRUeXBlUmVzcG9uc2USDQoFdmFsaWQYASABKAgSEwoLZGVzY3JpcHRpb24YAiABKAkiNgoVV2F0Y2hFeGVjdXRpb25SZXF1ZXN0Eh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgBIAEoCSImChRXYXRjaEV4ZWN1dGlvblVwZGF0ZRIOCgZ1cGRhdGUYASABKAkiSgoWRXhlY3V0aW9uU3RhdHVzUmVxdWVzdBIdChVleGVjdXRpb25fdHJhY2tpbmdfaWQYASABKAkSEQoJYWN0aW9uX2lkGAIgASgJIkcKF0V4ZWN1dGlvblN0YXR1c1Jlc3BvbnNlEiwKCWxvZ19lbnRyeRgBIAEoCzIZLm9saXZldGluLmFwaS52MS5Mb2dFbnRyeSIPCg1XaG9BbUlSZXF1ZXN0ImwKDldob0FtSVJlc3BvbnNlEhoKEmF1dGhlbnRpY2F0ZWRfdXNlchgBIAEoCRIRCgl1c2VyZ3JvdXAYAiABKAkSEAoIcHJvdmlkZXIYAyABKAkSDAoEYWNscxgEIAMoCRILCgNzaWQYBSABKAkiEgoQU29zUmVwb3J0UmVxdWVzdCIiChFTb3NSZXBvcnRSZXNwb25zZRINCgVhbGVydBgBIAEoCSIRCg9EdW1wVmFyc1JlcXVlc3QilQEKEER1bXBWYXJzUmVzcG9uc2USDQoFYWxlcnQYASABKAkSQQoIY29udGVudHMYAiADKAsyLy5vbGl2ZXRpbi5hcGkudjEuRHVtcFZhcnNSZXNwb25zZS5Db250ZW50c0VudHJ5Gi8KDUNvbnRlbnRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASI7CgxEZWJ1Z0JpbmRpbmcSFAoMYWN0aW9uX3RpdGxlGAEgASgJEhUKDWVudGl0eV9wcmVmaXgYAiABKAkiHgocRHVtcFB1YmxpY0lkQWN0aW9uTWFwUmVxdWVzdCLOAQodRHVtcFB1YmxpY0lkQWN0aW9uTWFwUmVzcG9uc2USDQoFYWxlcnQYASABKAkSTgoIY29udGVudHMYAiADKAsyPC5vbGl2ZXRpbi5hcGkudjEuRHVtcFB1YmxpY0lkQWN0aW9uTWFwUmVzcG9uc2UuQ29udGVudHNFbnRyeRpOCg1Db250ZW50c0VudHJ5EgsKA2tleRgBIAEoCRIsCgV2YWx1ZRgCIAEoCzIdLm9saXZldGluLmFwaS52MS5EZWJ1Z0JpbmRpbmc6AjgBIhIKEEdldFJlYWR5elJlcXVlc3QiIwoRR2V0UmVhZHl6UmVzcG9uc2USDgoGc3RhdHVzGAEgASgJIhQKEkV2ZW50U3RyZWFtUmVxdWVzdCKZAwoTRXZlbnRTdHJlYW1SZXNwb25zZRI9Cg5lbnRpdHlfY2hhbmdlZBgCIAEoCzIjLm9saXZldGluLmFwaS52MS5FdmVudEVudGl0eUNoYW5nZWRIABI9Cg5jb25maWdfY2hhbmdlZBgDIAEoCzIjLm9saXZldGluLmFwaS52MS5FdmVudENvbmZpZ0NoYW5nZWRIABJFChJleGVjdXRpb25fZmluaXNoZWQYBCABKAsyJy5vbGl2ZXRpbi5hcGkudjEuRXZlbnRFeGVjdXRpb25GaW5pc2hlZEgAEkMKEWV4ZWN1dGlvbl9zdGFydGVkGAUgASgLMiYub2xpdmV0aW4uYXBpLnYxLkV2ZW50RXhlY3V0aW9uU3RhcnRlZEgAEjkKDG91dHB1dF9jaHVuaxgGIAEoCzIhLm9saXZldGluLmFwaS52MS5FdmVudE91dHB1dENodW5rSAASNAoJaGVhcnRiZWF0GAcgASgLMh8ub2xpdmV0aW4uYXBpLnYxLkV2ZW50SGVhcnRiZWF0SABCBwoFZXZlbnQiQQoQRXZlbnRPdXRwdXRDaHVuaxIdChVleGVjdXRpb25fdHJhY2tpbmdfaWQYASABKAkSDgoGb3V0cHV0GAIgASgJIhQKEkV2ZW50RW50aXR5Q2hhbmdlZCIUChJFdmVudENvbmZpZ0NoYW5nZWQiEAoORXZlbnRIZWFydGJlYXQiRgoWRXZlbnRFeGVjdXRpb25GaW5pc2hlZBIsCglsb2dfZW50cnkYASABKAsyGS5vbGl2ZXRpbi5hcGkudjEuTG9nRW50cnkiRQoVRXZlbnRFeGVjdXRpb25TdGFydGVkEiwKCWxvZ19lbnRyeRgBIAEoCzIZLm9saXZldGluLmFwaS52MS5Mb2dFbnRyeSIyChFLaWxsQWN0aW9uUmVxdWVzdBIdChVleGVjdXRpb25fdHJhY2tpbmdfaWQYASABKAkibQoSS2lsbEFjdGlvblJlc3BvbnNlEh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgBIAEoCRIOCgZraWxsZWQYAiABKAgSGQoRYWxyZWFkeV9jb21wbGV0ZWQYAyABKAgSDQoFZm91bmQYBCABKAgiOwoVTG9jYWxVc2VyTG9naW5SZXF1ZXN0EhAKCHVzZXJuYW1lGAEgASgJEhAKCHBhc3N3b3JkGAIgASgJIikKFkxvY2FsVXNlckxvZ2luUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCInChNQYXNzd29yZEhhc2hSZXF1ZXN0EhAKCHBhc3N3b3JkGAEgASgJIiQKFFBhc3N3b3JkSGFzaFJlc3BvbnNlEgwKBGhhc2gYASABKAkiDwoNTG9nb3V0UmVxdWVzdCIQCg5Mb2dvdXRSZXNwb25zZSIXChVHZXREaWFnbm9zdGljc1JlcXVlc3QiRQoWR2V0RGlhZ25vc3RpY3NSZXNwb25zZRITCgtTc2hGb3VuZEtleRgBIAEoCRIWCg5Tc2hGb3VuZENvbmZpZxgCIAEoCSINCgtJbml0UmVxdWVzdCLrBQoMSW5pdFJlc3BvbnNlEhIKCnNob3dGb290ZXIYASABKAgSFgoOc2hvd05hdmlnYXRpb24YAiABKAgSFwoPc2hvd05ld1ZlcnNpb25zGAMgASgIEhgKEGF2YWlsYWJsZVZlcnNpb24YBCABKAkSFgoOY3VycmVudFZlcnNpb24YBSABKAkSEQoJcGFnZVRpdGxlGAYgASgJEh4KFnNlY3Rpb25OYXZpZ2F0aW9uU3R5bGUYByABKAkSGgoSZGVmYXVsdEljb25Gb3JCYWNrGAggASgJEhYKDmVuYWJsZUN1c3RvbUpzGAkgASgIEhQKDGF1dGhMb2dpblVybBgKIAEoCRIWCg5hdXRoTG9jYWxMb2dpbhgLIAEoCBIRCglzdHlsZU1vZHMYDCADKAkSOAoPb0F1dGgyUHJvdmlkZXJzGA0gAygLMh8ub2xpdmV0aW4uYXBpLnYxLk9BdXRoMlByb3ZpZGVyEjgKD2FkZGl0aW9uYWxMaW5rcxgOIAMoCzIfLm9saXZldGluLmFwaS52MS5BZGRpdGlvbmFsTGluaxIWCg5yb290RGFzaGJvYXJkcxgPIAMoCRIaChJhdXRoZW50aWNhdGVkX3VzZXIYECABKAkSIwobYXV0aGVudGljYXRlZF91c2VyX3Byb3ZpZGVyGBEgASgJEjoKEGVmZmVjdGl2ZV9wb2xpY3kYEiABKAsyIC5vbGl2ZXRpbi5hcGkudjEuRWZmZWN0aXZlUG9saWN5EhYKDmJhbm5lcl9tZXNzYWdlGBMgASgJEhIKCmJhbm5lcl9jc3MYFCABKAkSGAoQc2hvd19kaWFnbm9zdGljcxgVIAEoCBIVCg1zaG93X2xvZ19saXN0GBYgASgIEhYKDmxvZ2luX3JlcXVpcmVkGBcgASgIEhgKEGF2YWlsYWJsZV90aGVtZXMYGCADKAkSJAocc2hvd19uYXZpZ2F0ZV9vbl9zdGFydF9pY29ucxgZIAEoCCIsCg5BZGRpdGlvbmFsTGluaxINCgV0aXRsZRgBIAEoCRILCgN1cmwYAiABKAkiOgoOT0F1dGgyUHJvdmlkZXISDQoFdGl0bGUYASABKAkSDAoEaWNvbhgDIAEoCRILCgNrZXkYBCABKAkiLQoXR2V0QWN0aW9uQmluZGluZ1JlcXVlc3QSEgoKYmluZGluZ19pZBgBIAEoCSJDChhHZXRBY3Rpb25CaW5kaW5nUmVzcG9uc2USJwoGYWN0aW9uGAEgASgLMhcub2xpdmV0aW4uYXBpLnYxLkFjdGlvbiIUChJHZXRFbnRpdGllc1JlcXVlc3QiVAoTR2V0RW50aXRpZXNSZXNwb25zZRI9ChJlbnRpdHlfZGVmaW5pdGlvbnMYASADKAsyIS5vbGl2ZXRpbi5hcGkudjEuRW50aXR5RGVmaW5pdGlvbiJpChBFbnRpdHlEZWZpbml0aW9uEg0KBXRpdGxlGAEgASgJEioKCWluc3RhbmNlcxgCIAMoCzIXLm9saXZldGluLmFwaS52MS5FbnRpdHkSGgoSdXNlZF9vbl9kYXNoYm9hcmRzGAMgAygJIjQKEEdldEVudGl0eVJlcXVlc3QSEgoKdW5pcXVlX2tleRgBIAEoCRIMCgR0eXBlGAIgASgJIjUKFFJlc3RhcnRBY3Rpb25SZXF1ZXN0Eh0KFWV4ZWN1dGlvbl90cmFja2luZ19pZBgBIAEoCTLWEwoST2xpdmVUaW5BcGlTZXJ2aWNlEl0KDEdldERhc2hib2FyZBIkLm9saXZldGluLmFwaS52MS5HZXREYXNoYm9hcmRSZXF1ZXN0GiUub2xpdmV0aW4uYXBpLnYxLkdldERhc2hib2FyZFJlc3BvbnNlIgASWgoLU3RhcnRBY3Rpb24SIy5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25SZXF1ZXN0GiQub2xpdmV0aW4uYXBpLnYxLlN0YXJ0QWN0aW9uUmVzcG9uc2UiABJvChJTdGFydEFjdGlvbkFuZFdhaXQSKi5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25BbmRXYWl0UmVxdWVzdBorLm9saXZldGluLmFwaS52MS5TdGFydEFjdGlvbkFuZFdhaXRSZXNwb25zZSIAEmkKEFN0YXJ0QWN0aW9uQnlHZXQSKC5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25CeUdldFJlcXVlc3QaKS5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25CeUdldFJlc3BvbnNlIgASfgoXU3RhcnRBY3Rpb25CeUdldEFuZFdhaXQSLy5vbGl2ZXRpbi5hcGkudjEuU3RhcnRBY3Rpb25CeUdldEFuZFdhaXRSZXF1ZXN0GjAub2xpdmV0aW4uYXBpLnYxLlN0YXJ0QWN0aW9uQnlHZXRBbmRXYWl0UmVzcG9uc2UiABJeCg1SZXN0YXJ0QWN0aW9uEiUub2xpdmV0aW4uYXBpLnYxLlJlc3RhcnRBY3Rpb25SZXF1ZXN0GiQub2xpdmV0aW4uYXBpLnYxLlN0YXJ0QWN0aW9uUmVzcG9uc2UiABJXCgpLaWxsQWN0aW9uEiIub2xpdmV0aW4uYXBpLnYxLktpbGxBY3Rpb25SZXF1ZXN0GiMub2xpdmV0aW4uYXBpLnYxLktpbGxBY3Rpb25SZXNwb25zZSIAEmYKD0V4ZWN1dGlvblN0YXR1cxInLm9saXZldGluLmFwaS52MS5FeGVjdXRpb25TdGF0dXNSZXF1ZXN0Gigub2xpdmV0aW4uYXBpLnYxLkV4ZWN1dGlvblN0YXR1c1Jlc3BvbnNlIgASTgoHR2V0TG9ncxIfLm9saXZldGluLmFwaS52MS5HZXRMb2dzUmVxdWVzdBogLm9saXZldGluLmFwaS52MS5HZXRMb2dzUmVzcG9uc2UiABJgCg1HZXRBY3Rpb25Mb2dzEiUub2xpdmV0aW4uYXBpLnYxLkdldEFjdGlvbkxvZ3NSZXF1ZXN0GiYub2xpdmV0aW4uYXBpLnYxLkdldEFjdGlvbkxvZ3NSZXNwb25zZSIAEmwKEUdldEV4ZWN1dGlvblF1ZXVlEikub2xpdmV0aW4uYXBpLnYxLkdldEV4ZWN1dGlvblF1ZXVlUmVxdWVzdBoqLm9saXZldGluLmFwaS52MS5HZXRFeGVjdXRpb25RdWV1ZVJlc3BvbnNlIgASdQoUVmFsaWRhdGVBcmd1bWVudFR5cGUSLC5vbGl2ZXRpbi5hcGkudjEuVmFsaWRhdGVBcmd1bWVudFR5cGVSZXF1ZXN0Gi0ub2xpdmV0aW4uYXBpLnYxLlZhbGlkYXRlQXJndW1lbnRUeXBlUmVzcG9uc2UiABJLCgZXaG9BbUkSHi5vbGl2ZXRpbi5hcGkudjEuV2hvQW1JUmVxdWVzdBofLm9saXZldGluLmFwaS52MS5XaG9BbUlSZXNwb25zZSIAElQKCVNvc1JlcG9ydBIhLm9saXZldGluLmFwaS52MS5Tb3NSZXBvcnRSZXF1ZXN0GiIub2xpdmV0aW4uYXBpLnYxLlNvc1JlcG9ydFJlc3BvbnNlIgASUQoIRHVtcFZhcnMSIC5vbGl2ZXRpbi5hcGkudjEuRHVtcFZhcnNSZXF1ZXN0GiEub2xpdmV0aW4uYXBpLnYxLkR1bXBWYXJzUmVzcG9uc2UiABJ4ChVEdW1wUHVibGljSWRBY3Rpb25NYXASLS5vbGl2ZXRpbi5hcGkudjEuRHVtcFB1YmxpY0lkQWN0aW9uTWFwUmVxdWVzdBouLm9saXZldGluLmFwaS52MS5EdW1wUHVibGljSWRBY3Rpb25NYXBSZXNwb25zZSIAElQKCUdldFJlYWR5ehIhLm9saXZldGluLmFwaS52MS5HZXRSZWFkeXpSZXF1ZXN0GiIub2xpdmV0aW4uYXBpLnYxLkdldFJlYWR5elJlc3BvbnNlIgASYwoOTG9jYWxVc2VyTG9naW4SJi5vbGl2ZXRpbi5hcGkudjEuTG9jYWxVc2VyTG9naW5SZXF1ZXN0Gicub2xpdmV0aW4uYXBpLnYxLkxvY2FsVXNlckxvZ2luUmVzcG9uc2UiABJdCgxQYXNzd29yZEhhc2gSJC5vbGl2ZXRpbi5hcGkudjEuUGFzc3dvcmRIYXNoUmVxdWVzdBolLm9saXZldGluLmFwaS52MS5QYXNzd29yZEhhc2hSZXNwb25zZSIAEksKBkxvZ291dBIeLm9saXZldGluLmFwaS52MS5Mb2dvdXRSZXF1ZXN0Gh8ub2xpdmV0aW4uYXBpLnYxLkxvZ291dFJlc3BvbnNlIgASXAoLRXZlbnRTdHJlYW0SIy5vbGl2ZXRpbi5hcGkudjEuRXZlbnRTdHJlYW1SZXF1ZXN0GiQub2xpdmV0aW4uYXBpLnYxLkV2ZW50U3RyZWFtUmVzcG9uc2UiADABEmMKDkdldERpYWdub3N0aWNzEiYub2xpdmV0aW4uYXBpLnYxLkdldERpYWdub3N0aWNzUmVxdWVzdBonLm9saXZldGluLmFwaS52MS5HZXREaWFnbm9zdGljc1Jlc3BvbnNlIgASRQoESW5pdBIcLm9saXZldGluLmFwaS52MS5Jbml0UmVxdWVzdBodLm9saXZldGluLmFwaS52MS5Jbml0UmVzcG9uc2UiABJpChBHZXRBY3Rpb25CaW5kaW5nEigub2xpdmV0aW4uYXBpLnYxLkdldEFjdGlvbkJpbmRpbmdSZXF1ZXN0Gikub2xpdmV0aW4uYXBpLnYxLkdldEFjdGlvbkJpbmRpbmdSZXNwb25zZSIAEloKC0dldEVudGl0aWVzEiMub2xpdmV0aW4uYXBpLnYxLkdldEVudGl0aWVzUmVxdWVzdBokLm9saXZldGluLmFwaS52MS5HZXRFbnRpdGllc1Jlc3BvbnNlIgASSQoJR2V0RW50aXR5EiEub2xpdmV0aW4uYXBpLnYxLkdldEVudGl0eVJlcXVlc3QaFy5vbGl2ZXRpbi5hcGkudjEuRW50aXR5IgBCOFo2Z2l0aHViLmNvbS9PbGl2ZVRpbi9PbGl2ZVRpbi9nZW4vb2xpdmV0aW4vYXBpL3YxO2FwaXYxYgZwcm90bzM"); /** * Describes the message olivetin.api.v1.Action. @@ -185,341 +185,348 @@ export const GetActionLogsResponseSchema = /*@__PURE__*/ export const GetExecutionQueueRequestSchema = /*@__PURE__*/ messageDesc(file_olivetin_api_v1_olivetin, 24); +/** + * Describes the message olivetin.api.v1.ExecutionQueueAction. + * Use `create(ExecutionQueueActionSchema)` to create a new message. + */ +export const ExecutionQueueActionSchema = /*@__PURE__*/ + messageDesc(file_olivetin_api_v1_olivetin, 25); + /** * Describes the message olivetin.api.v1.ExecutionQueueGroup. * Use `create(ExecutionQueueGroupSchema)` to create a new message. */ export const ExecutionQueueGroupSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 25); + messageDesc(file_olivetin_api_v1_olivetin, 26); /** * Describes the message olivetin.api.v1.GetExecutionQueueResponse. * Use `create(GetExecutionQueueResponseSchema)` to create a new message. */ export const GetExecutionQueueResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 26); + messageDesc(file_olivetin_api_v1_olivetin, 27); /** * Describes the message olivetin.api.v1.ValidateArgumentTypeRequest. * Use `create(ValidateArgumentTypeRequestSchema)` to create a new message. */ export const ValidateArgumentTypeRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 27); + messageDesc(file_olivetin_api_v1_olivetin, 28); /** * Describes the message olivetin.api.v1.ValidateArgumentTypeResponse. * Use `create(ValidateArgumentTypeResponseSchema)` to create a new message. */ export const ValidateArgumentTypeResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 28); + messageDesc(file_olivetin_api_v1_olivetin, 29); /** * Describes the message olivetin.api.v1.WatchExecutionRequest. * Use `create(WatchExecutionRequestSchema)` to create a new message. */ export const WatchExecutionRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 29); + messageDesc(file_olivetin_api_v1_olivetin, 30); /** * Describes the message olivetin.api.v1.WatchExecutionUpdate. * Use `create(WatchExecutionUpdateSchema)` to create a new message. */ export const WatchExecutionUpdateSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 30); + messageDesc(file_olivetin_api_v1_olivetin, 31); /** * Describes the message olivetin.api.v1.ExecutionStatusRequest. * Use `create(ExecutionStatusRequestSchema)` to create a new message. */ export const ExecutionStatusRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 31); + messageDesc(file_olivetin_api_v1_olivetin, 32); /** * Describes the message olivetin.api.v1.ExecutionStatusResponse. * Use `create(ExecutionStatusResponseSchema)` to create a new message. */ export const ExecutionStatusResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 32); + messageDesc(file_olivetin_api_v1_olivetin, 33); /** * Describes the message olivetin.api.v1.WhoAmIRequest. * Use `create(WhoAmIRequestSchema)` to create a new message. */ export const WhoAmIRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 33); + messageDesc(file_olivetin_api_v1_olivetin, 34); /** * Describes the message olivetin.api.v1.WhoAmIResponse. * Use `create(WhoAmIResponseSchema)` to create a new message. */ export const WhoAmIResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 34); + messageDesc(file_olivetin_api_v1_olivetin, 35); /** * Describes the message olivetin.api.v1.SosReportRequest. * Use `create(SosReportRequestSchema)` to create a new message. */ export const SosReportRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 35); + messageDesc(file_olivetin_api_v1_olivetin, 36); /** * Describes the message olivetin.api.v1.SosReportResponse. * Use `create(SosReportResponseSchema)` to create a new message. */ export const SosReportResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 36); + messageDesc(file_olivetin_api_v1_olivetin, 37); /** * Describes the message olivetin.api.v1.DumpVarsRequest. * Use `create(DumpVarsRequestSchema)` to create a new message. */ export const DumpVarsRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 37); + messageDesc(file_olivetin_api_v1_olivetin, 38); /** * Describes the message olivetin.api.v1.DumpVarsResponse. * Use `create(DumpVarsResponseSchema)` to create a new message. */ export const DumpVarsResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 38); + messageDesc(file_olivetin_api_v1_olivetin, 39); /** * Describes the message olivetin.api.v1.DebugBinding. * Use `create(DebugBindingSchema)` to create a new message. */ export const DebugBindingSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 39); + messageDesc(file_olivetin_api_v1_olivetin, 40); /** * Describes the message olivetin.api.v1.DumpPublicIdActionMapRequest. * Use `create(DumpPublicIdActionMapRequestSchema)` to create a new message. */ export const DumpPublicIdActionMapRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 40); + messageDesc(file_olivetin_api_v1_olivetin, 41); /** * Describes the message olivetin.api.v1.DumpPublicIdActionMapResponse. * Use `create(DumpPublicIdActionMapResponseSchema)` to create a new message. */ export const DumpPublicIdActionMapResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 41); + messageDesc(file_olivetin_api_v1_olivetin, 42); /** * Describes the message olivetin.api.v1.GetReadyzRequest. * Use `create(GetReadyzRequestSchema)` to create a new message. */ export const GetReadyzRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 42); + messageDesc(file_olivetin_api_v1_olivetin, 43); /** * Describes the message olivetin.api.v1.GetReadyzResponse. * Use `create(GetReadyzResponseSchema)` to create a new message. */ export const GetReadyzResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 43); + messageDesc(file_olivetin_api_v1_olivetin, 44); /** * Describes the message olivetin.api.v1.EventStreamRequest. * Use `create(EventStreamRequestSchema)` to create a new message. */ export const EventStreamRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 44); + messageDesc(file_olivetin_api_v1_olivetin, 45); /** * Describes the message olivetin.api.v1.EventStreamResponse. * Use `create(EventStreamResponseSchema)` to create a new message. */ export const EventStreamResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 45); + messageDesc(file_olivetin_api_v1_olivetin, 46); /** * Describes the message olivetin.api.v1.EventOutputChunk. * Use `create(EventOutputChunkSchema)` to create a new message. */ export const EventOutputChunkSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 46); + messageDesc(file_olivetin_api_v1_olivetin, 47); /** * Describes the message olivetin.api.v1.EventEntityChanged. * Use `create(EventEntityChangedSchema)` to create a new message. */ export const EventEntityChangedSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 47); + messageDesc(file_olivetin_api_v1_olivetin, 48); /** * Describes the message olivetin.api.v1.EventConfigChanged. * Use `create(EventConfigChangedSchema)` to create a new message. */ export const EventConfigChangedSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 48); + messageDesc(file_olivetin_api_v1_olivetin, 49); /** * Describes the message olivetin.api.v1.EventHeartbeat. * Use `create(EventHeartbeatSchema)` to create a new message. */ export const EventHeartbeatSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 49); + messageDesc(file_olivetin_api_v1_olivetin, 50); /** * Describes the message olivetin.api.v1.EventExecutionFinished. * Use `create(EventExecutionFinishedSchema)` to create a new message. */ export const EventExecutionFinishedSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 50); + messageDesc(file_olivetin_api_v1_olivetin, 51); /** * Describes the message olivetin.api.v1.EventExecutionStarted. * Use `create(EventExecutionStartedSchema)` to create a new message. */ export const EventExecutionStartedSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 51); + messageDesc(file_olivetin_api_v1_olivetin, 52); /** * Describes the message olivetin.api.v1.KillActionRequest. * Use `create(KillActionRequestSchema)` to create a new message. */ export const KillActionRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 52); + messageDesc(file_olivetin_api_v1_olivetin, 53); /** * Describes the message olivetin.api.v1.KillActionResponse. * Use `create(KillActionResponseSchema)` to create a new message. */ export const KillActionResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 53); + messageDesc(file_olivetin_api_v1_olivetin, 54); /** * Describes the message olivetin.api.v1.LocalUserLoginRequest. * Use `create(LocalUserLoginRequestSchema)` to create a new message. */ export const LocalUserLoginRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 54); + messageDesc(file_olivetin_api_v1_olivetin, 55); /** * Describes the message olivetin.api.v1.LocalUserLoginResponse. * Use `create(LocalUserLoginResponseSchema)` to create a new message. */ export const LocalUserLoginResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 55); + messageDesc(file_olivetin_api_v1_olivetin, 56); /** * Describes the message olivetin.api.v1.PasswordHashRequest. * Use `create(PasswordHashRequestSchema)` to create a new message. */ export const PasswordHashRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 56); + messageDesc(file_olivetin_api_v1_olivetin, 57); /** * Describes the message olivetin.api.v1.PasswordHashResponse. * Use `create(PasswordHashResponseSchema)` to create a new message. */ export const PasswordHashResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 57); + messageDesc(file_olivetin_api_v1_olivetin, 58); /** * Describes the message olivetin.api.v1.LogoutRequest. * Use `create(LogoutRequestSchema)` to create a new message. */ export const LogoutRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 58); + messageDesc(file_olivetin_api_v1_olivetin, 59); /** * Describes the message olivetin.api.v1.LogoutResponse. * Use `create(LogoutResponseSchema)` to create a new message. */ export const LogoutResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 59); + messageDesc(file_olivetin_api_v1_olivetin, 60); /** * Describes the message olivetin.api.v1.GetDiagnosticsRequest. * Use `create(GetDiagnosticsRequestSchema)` to create a new message. */ export const GetDiagnosticsRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 60); + messageDesc(file_olivetin_api_v1_olivetin, 61); /** * Describes the message olivetin.api.v1.GetDiagnosticsResponse. * Use `create(GetDiagnosticsResponseSchema)` to create a new message. */ export const GetDiagnosticsResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 61); + messageDesc(file_olivetin_api_v1_olivetin, 62); /** * Describes the message olivetin.api.v1.InitRequest. * Use `create(InitRequestSchema)` to create a new message. */ export const InitRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 62); + messageDesc(file_olivetin_api_v1_olivetin, 63); /** * Describes the message olivetin.api.v1.InitResponse. * Use `create(InitResponseSchema)` to create a new message. */ export const InitResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 63); + messageDesc(file_olivetin_api_v1_olivetin, 64); /** * Describes the message olivetin.api.v1.AdditionalLink. * Use `create(AdditionalLinkSchema)` to create a new message. */ export const AdditionalLinkSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 64); + messageDesc(file_olivetin_api_v1_olivetin, 65); /** * Describes the message olivetin.api.v1.OAuth2Provider. * Use `create(OAuth2ProviderSchema)` to create a new message. */ export const OAuth2ProviderSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 65); + messageDesc(file_olivetin_api_v1_olivetin, 66); /** * Describes the message olivetin.api.v1.GetActionBindingRequest. * Use `create(GetActionBindingRequestSchema)` to create a new message. */ export const GetActionBindingRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 66); + messageDesc(file_olivetin_api_v1_olivetin, 67); /** * Describes the message olivetin.api.v1.GetActionBindingResponse. * Use `create(GetActionBindingResponseSchema)` to create a new message. */ export const GetActionBindingResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 67); + messageDesc(file_olivetin_api_v1_olivetin, 68); /** * Describes the message olivetin.api.v1.GetEntitiesRequest. * Use `create(GetEntitiesRequestSchema)` to create a new message. */ export const GetEntitiesRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 68); + messageDesc(file_olivetin_api_v1_olivetin, 69); /** * Describes the message olivetin.api.v1.GetEntitiesResponse. * Use `create(GetEntitiesResponseSchema)` to create a new message. */ export const GetEntitiesResponseSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 69); + messageDesc(file_olivetin_api_v1_olivetin, 70); /** * Describes the message olivetin.api.v1.EntityDefinition. * Use `create(EntityDefinitionSchema)` to create a new message. */ export const EntityDefinitionSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 70); + messageDesc(file_olivetin_api_v1_olivetin, 71); /** * Describes the message olivetin.api.v1.GetEntityRequest. * Use `create(GetEntityRequestSchema)` to create a new message. */ export const GetEntityRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 71); + messageDesc(file_olivetin_api_v1_olivetin, 72); /** * Describes the message olivetin.api.v1.RestartActionRequest. * Use `create(RestartActionRequestSchema)` to create a new message. */ export const RestartActionRequestSchema = /*@__PURE__*/ - messageDesc(file_olivetin_api_v1_olivetin, 72); + messageDesc(file_olivetin_api_v1_olivetin, 73); /** * @generated from service olivetin.api.v1.OliveTinApiService diff --git a/frontend/resources/vue/utils/executionLogEvents.js b/frontend/resources/vue/utils/executionLogEvents.js index 82ee6a4..095e3f3 100644 --- a/frontend/resources/vue/utils/executionLogEvents.js +++ b/frontend/resources/vue/utils/executionLogEvents.js @@ -36,19 +36,25 @@ export function updateLogEntryInGroups (groups, logEntry) { return null } - for (const group of groups) { - const entries = group.entries || [] - const index = entries.findIndex( - item => item.executionTrackingId === entry.executionTrackingId - ) - if (index < 0) { - continue - } + let firstMatch = null - const previous = entries[index] - entries[index] = entry - return { group, index, previous } + for (const group of groups) { + for (const action of group.actions || []) { + const entries = action.entries || [] + const index = entries.findIndex( + item => item.executionTrackingId === entry.executionTrackingId + ) + if (index < 0) { + continue + } + + const previous = entries[index] + entries[index] = entry + if (!firstMatch) { + firstMatch = { group, action, index, previous } + } + } } - return null + return firstMatch } diff --git a/frontend/resources/vue/views/LogsQueueView.vue b/frontend/resources/vue/views/LogsQueueView.vue index f405fe0..7568190 100644 --- a/frontend/resources/vue/views/LogsQueueView.vue +++ b/frontend/resources/vue/views/LogsQueueView.vue @@ -18,74 +18,73 @@
-
- -
-

- {{ group.actionTitle }} -

-

- {{ t('logs.queue-entity') }}: {{ group.entityPrefix }} -

-
-
-
- - - - - - - - - - - - - - -
{{ t('logs.timestamp') }}{{ t('logs.metadata') }}{{ t('logs.status') }}
{{ formatTimestamp(entry.datetimeStarted) }} - - User: - {{ entry.user }} - - - {{ tag }} - - - ID: - - {{ entry.executionTrackingId }} - - - - {{ t('logs.queue-position', { position: index + 1 }) }} - -
+ + + {{ t('logs.timestamp') }} + {{ t('logs.action') }} + {{ t('logs.metadata') }} + {{ t('logs.status') }} + + + + + +
@@ -95,20 +94,33 @@ import { ref, onMounted, onUnmounted } from 'vue' import Section from 'picocrank/vue/components/Section.vue' import ActionIconGlyph from '../components/ActionIconGlyph.vue' import ActionStatusDisplay from '../components/ActionStatusDisplay.vue' +import LogActionTitle from '../components/LogActionTitle.vue' import { useI18n } from 'vue-i18n' import { getExecutionLogEntry, cloneLogEntry, updateLogEntryInGroups } from '../utils/executionLogEvents.js' +const defaultActionGroupName = 'default' + const { t } = useI18n() const groups = ref([]) const loading = ref(false) +function displayActionGroupName (name) { + if (name === defaultActionGroupName) { + return t('logs.queue-default-group') + } + + return name +} + function collectCompletedEntries (currentGroups) { const completed = [] for (const group of currentGroups || []) { - for (const entry of group.entries || []) { - if (entry.executionFinished) { - completed.push(cloneLogEntry(entry)) + for (const action of group.actions || []) { + for (const entry of action.entries || []) { + if (entry.executionFinished) { + completed.push(cloneLogEntry(entry)) + } } } } @@ -126,53 +138,108 @@ function sortGroupEntries (entries) { function sortGroups (groupList) { groupList.sort((left, right) => { - const byTitle = (left.actionTitle || '').localeCompare(right.actionTitle || '') - if (byTitle !== 0) { - return byTitle + if (left.name === defaultActionGroupName) { + return 1 } - return (left.entityPrefix || '').localeCompare(right.entityPrefix || '') + if (right.name === defaultActionGroupName) { + return -1 + } + return (left.name || '').localeCompare(right.name || '') }) } -function mergeCompletedEntries (apiGroups, completedEntries) { - const merged = (apiGroups || []).map(group => ({ +function sumActionEntries (actions) { + return (actions || []).reduce((total, action) => total + (action.entries || []).length, 0) +} + +function cloneActionGroup (group) { + return { ...group, - entries: [...(group.entries || [])] - })) + actions: (group.actions || []).map(action => ({ + ...action, + entries: [...(action.entries || [])] + })) + } +} + +function findActionInGroups (groupList, bindingId) { + const matches = [] + + for (const group of groupList) { + for (const action of group.actions || []) { + if (action.bindingId === bindingId) { + matches.push({ group, action }) + } + } + } + + return matches +} + +function mergeCompletedEntries (apiGroups, completedEntries) { + const merged = (apiGroups || []).map(cloneActionGroup) for (const entry of completedEntries) { const alreadyPresent = merged.some(group => - group.entries.some(item => item.executionTrackingId === entry.executionTrackingId) + (group.actions || []).some(action => + (action.entries || []).some(item => item.executionTrackingId === entry.executionTrackingId) + ) ) if (alreadyPresent) { continue } - let group = merged.find(item => item.bindingId === entry.bindingId) - if (!group) { - group = { - bindingId: entry.bindingId, - actionTitle: entry.actionTitle, - actionIcon: entry.actionIcon, - entityPrefix: '', - maxConcurrent: 0, - activeCount: 0, - entries: [] - } - merged.push(group) + const matches = findActionInGroups(merged, entry.bindingId) + if (matches.length === 0) { + continue } - group.entries.push(entry) + for (const { action } of matches) { + action.entries.push(entry) + } } for (const group of merged) { - sortGroupEntries(group.entries) + for (const action of group.actions || []) { + sortGroupEntries(action.entries) + action.activeCount = action.entries.length + } + refreshGroupCounts(group) } sortGroups(merged) return merged } +function forEachActionWithEntry (groupList, executionTrackingId, callback) { + for (const group of groupList) { + for (const action of group.actions || []) { + const hasEntry = (action.entries || []).some( + item => item.executionTrackingId === executionTrackingId + ) + if (hasEntry) { + callback(group, action) + } + } + } +} + +function refreshGroupCounts (group) { + let queued = 0 + + for (const action of group.actions || []) { + action.activeCount = (action.entries || []).length + for (const entry of action.entries || []) { + if (entry.queued) { + queued++ + } + } + } + + group.activeCount = sumActionEntries(group.actions) + group.queuedCount = queued +} + function applyQueueEntryUpdate (logEntry, afterUpdate) { const result = updateLogEntryInGroups(groups.value, logEntry) if (!result) { @@ -182,16 +249,13 @@ function applyQueueEntryUpdate (logEntry, afterUpdate) { if (afterUpdate) { afterUpdate(result) } - sortGroupEntries(result.group.entries) - return true -} -function adjustActiveCountOnStart (group, previous, logEntry) { - const wasActive = !previous.executionFinished - const isActive = !logEntry.executionFinished - if (!wasActive && isActive) { - group.activeCount++ - } + forEachActionWithEntry(groups.value, logEntry.executionTrackingId, (group, action) => { + sortGroupEntries(action.entries) + refreshGroupCounts(group) + }) + + return true } function insertActiveQueueEntry (logEntry) { @@ -200,23 +264,22 @@ function insertActiveQueueEntry (logEntry) { return } - let group = groups.value.find(item => item.bindingId === logEntry.bindingId) - if (!group) { - group = { - bindingId: logEntry.bindingId, - actionTitle: logEntry.actionTitle || '', - actionIcon: logEntry.actionIcon || '', - entityPrefix: logEntry.entityPrefix || '', - maxConcurrent: 0, - activeCount: 0, - entries: [] - } - groups.value.push(group) + const matches = findActionInGroups(groups.value, logEntry.bindingId) + if (matches.length === 0) { + fetchQueue() + return } - group.entries.push(cloneLogEntry(logEntry)) - adjustActiveCountOnStart(group, { executionFinished: true }, logEntry) - sortGroupEntries(group.entries) + const touchedGroups = new Set() + for (const { group, action } of matches) { + action.entries.push(cloneLogEntry(logEntry)) + touchedGroups.add(group) + sortGroupEntries(action.entries) + } + + for (const group of touchedGroups) { + refreshGroupCounts(group) + } sortGroups(groups.value) } @@ -226,9 +289,7 @@ function onExecutionStarted (evt) { return } - if (!applyQueueEntryUpdate(logEntry, ({ group, previous }) => { - adjustActiveCountOnStart(group, previous, logEntry) - })) { + if (!applyQueueEntryUpdate(logEntry)) { insertActiveQueueEntry(logEntry) } } @@ -239,12 +300,7 @@ function onExecutionFinished (evt) { return } - applyQueueEntryUpdate(logEntry, ({ group, previous }) => { - const wasActive = !previous.executionFinished - if (wasActive && logEntry.executionFinished && group.activeCount > 0) { - group.activeCount-- - } - }) + applyQueueEntryUpdate(logEntry) } function formatTimestamp (timestamp) { @@ -285,50 +341,43 @@ onUnmounted(() => {