githolon 0.107.4 → 0.108.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/full-cli.mjs CHANGED
@@ -3142,62 +3142,65 @@ var init_pack_auth_contract = __esm({
3142
3142
 
3143
3143
  // ../cloud/web-client/src/_adapter/proto/nomos/kernel/v1/kernel_pb.js
3144
3144
  import { enumDesc, fileDesc, messageDesc, serviceDesc, tsEnum } from "@bufbuild/protobuf/codegenv2";
3145
- var file_nomos_kernel_v1_kernel, CallRequestSchema, CallResponseSchema, SignPreparedOfferRequestSchema, PrepareRemoteOfferRequestSchema, PrepareRemoteOfferResponseSchema, SignOfferPreparationRequestSchema, WorkspaceTargetSchema, DirectiveCallSchema, AuthoringOptionsSchema, CapturedClockSchema, BirthCertificateSchema, OfferRequestSchema, QueryRequestSchema, QueryAuthoritySchema, RowsQuerySchema, PageQuerySchema, ByIdQuerySchema, NomosRefSchema, ResolveRefsQuerySchema, ReferenceVersionsQuerySchema, ReferenceVersionCheckSchema, TallyQuerySchema, SpatialQuerySchema, NamedQuerySchema, FrontierTransitionRequestSchema, AuthorizationObjectSchema, AuthorizationSubjectSchema, AuthorizationConsistencySchema, AuthorizationCheckRequestSchema, SyncRequestSchema, TestRequestSchema, SetTestRootRequestSchema, CustodyRequestSchema, PackDeltaRequestSchema, ApplyPackRequestSchema, RepoStatsRequestSchema, IntentsAboveRequestSchema, HistorySummaryRequestSchema, WriteRefRequestSchema, DeleteRefRequestSchema, LawClosureInfoRequestSchema, CheckpointExportRequestSchema, CheckpointImportRequestSchema, RestoreMainRequestSchema, NomosValueSchema, NomosStructSchema, QueryOperationSchema, QueryOperation, KernelLawCapabilitySchema, KernelLawCapability, IntentTransportRequirementSchema, IntentTransportRequirement;
3145
+ var file_nomos_kernel_v1_kernel, CallRequestSchema, CallResponseSchema, SignPreparedOfferRequestSchema, PrepareRemoteOfferRequestSchema, PrepareRemoteOfferResponseSchema, SignOfferPreparationRequestSchema, WorkspaceTargetSchema, DirectiveCallSchema, AuthoringOptionsSchema, CapturedClockSchema, BirthCertificateSchema, SignBirthCertificateRequestSchema, OfferRequestSchema, QueryRequestSchema, QueryAuthoritySchema, RowsQuerySchema, PageQuerySchema, ByIdQuerySchema, NomosRefSchema, ResolveRefsQuerySchema, ReferenceVersionsQuerySchema, ReferenceVersionCheckSchema, TallyQuerySchema, SpatialQuerySchema, NamedQuerySchema, FrontierTransitionRequestSchema, AuthorizationObjectSchema, AuthorizationSubjectSchema, AuthorizationConsistencySchema, AuthorizationCheckRequestSchema, SyncRequestSchema, TestRequestSchema, SetTestRootRequestSchema, CustodyRequestSchema, PackDeltaRequestSchema, ApplyPackRequestSchema, RepoStatsRequestSchema, IntentsAboveRequestSchema, HistorySummaryRequestSchema, WriteRefRequestSchema, DeleteRefRequestSchema, LawClosureInfoRequestSchema, CheckpointExportRequestSchema, CheckpointImportRequestSchema, RestoreMainRequestSchema, NomosValueSchema, NomosStructSchema, BirthOutcomeStatusSchema, BirthOutcomeStatus, QueryOperationSchema, QueryOperation, KernelLawCapabilitySchema, KernelLawCapability, IntentTransportRequirementSchema, IntentTransportRequirement;
3146
3146
  var init_kernel_pb = __esm({
3147
3147
  "../cloud/web-client/src/_adapter/proto/nomos/kernel/v1/kernel_pb.js"() {
3148
3148
  "use strict";
3149
- file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEi/gQKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEiwKBHRlc3QYECABKAsyHC5ub21vcy5rZXJuZWwudjEuVGVzdFJlcXVlc3RIABJIChNzaWduX3ByZXBhcmVkX29mZmVyGBEgASgLMikubm9tb3Mua2VybmVsLnYxLlNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdEgAEkoKFHByZXBhcmVfcmVtb3RlX29mZmVyGBIgASgLMioubm9tb3Mua2VybmVsLnYxLlByZXBhcmVSZW1vdGVPZmZlclJlcXVlc3RIABJOChZzaWduX29mZmVyX3ByZXBhcmF0aW9uGBMgASgLMiwubm9tb3Mua2VybmVsLnYxLlNpZ25PZmZlclByZXBhcmF0aW9uUmVxdWVzdEgAQgsKCW9wZXJhdGlvbiK0BQoMQ2FsbFJlc3BvbnNlEhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIrCgdmYWlsdXJlGAogASgLMhgubm9tb3Mua2VybmVsLnYxLkZhaWx1cmVIABItCgRvcGVuGAsgASgLMh0ubm9tb3Mua2VybmVsLnYxLk9wZW5SZXNwb25zZUgAEi8KBW9mZmVyGAwgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIABIvCgVxdWVyeRgNIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5RdWVyeVJlc3BvbnNlSAASMQoGb3V0Ym94GA4gASgLMh8ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlc3BvbnNlSAASLQoEc3luYxgPIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5TeW5jUmVzcG9uc2VIABIzCgdjdXN0b2R5GBAgASgLMiAubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlSZXNwb25zZUgAEi0KBHRlc3QYESABKAsyHS5ub21vcy5rZXJuZWwudjEuVGVzdFJlc3BvbnNlSAASSQoTc2lnbl9wcmVwYXJlZF9vZmZlchgSIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5TaWduUHJlcGFyZWRPZmZlclJlc3BvbnNlSAASSwoUcHJlcGFyZV9yZW1vdGVfb2ZmZXIYEyABKAsyKy5ub21vcy5rZXJuZWwudjEuUHJlcGFyZVJlbW90ZU9mZmVyUmVzcG9uc2VIABJPChZzaWduX29mZmVyX3ByZXBhcmF0aW9uGBQgASgLMi0ubm9tb3Mua2VybmVsLnYxLlNpZ25PZmZlclByZXBhcmF0aW9uUmVzcG9uc2VIAEIJCgdvdXRjb21lIlcKB0ZhaWx1cmUSDAoEY29kZRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiPAoMT3BlblJlc3BvbnNlEiwKBnJlc3VsdBgBIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCL3AgoNT2ZmZXJSZXNwb25zZRIyCghhZG1pdHRlZBgBIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlckFkbWl0dGVkSAASMAoHcmVmdXNlZBgCIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlZnVzZWRIABI7Cg1kZWFkX2xldHRlcmVkGAMgASgLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyRGVhZExldHRlcmVkSAASOAoLcXVhcmFudGluZWQYBCABKAsyIS5ub21vcy5rZXJuZWwudjEuT2ZmZXJRdWFyYW50aW5lZEgAEkoKFWJsb2NrZWRfb25fZGVwZW5kZW5jeRgFIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5PZmZlckJsb2NrZWRPbkRlcGVuZGVuY3lIABIyCghwcmVwYXJlZBgGIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclByZXBhcmVkSABCCQoHb3V0Y29tZSI9Cg1PZmZlckFkbWl0dGVkEiwKBnJlc3VsdBgBIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCKWAQoMT2ZmZXJSZWZ1c2VkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESLwoHcmVmdXNhbBgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsEjEKC2RpYWdub3N0aWNzGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0QgsKCV9vZmZlcl9pZCJ6ChFPZmZlckRlYWRMZXR0ZXJlZBIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEg4KBnJlYXNvbhgCIAEoCRIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQirgEKEE9mZmVyUXVhcmFudGluZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIZChFhdXRob3JlZF9sYXdfaGFzaBgCIAEoCRIYChBjdXJyZW50X2xhd19oYXNoGAMgASgJEg4KBnJlYXNvbhgEIAEoCRIxCgtkaWFnbm9zdGljcxgFIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQigQEKGE9mZmVyQmxvY2tlZE9uRGVwZW5kZW5jeRIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEg4KBmRldGFpbBgCIAEoCRIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQihQEKDU9mZmVyUHJlcGFyZWQSHAoUYXV0aG9yZWRfY2hhbmdlX3VzZGEYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRIhChlhdXRob3Jfc2lnbmF0dXJlX3JlcXVpcmVkGAQgASgIImoKGFNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdBIcChRhdXRob3JlZF9jaGFuZ2VfdXNkYRgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIVCg1hdXRob3Jfc2VjcmV0GAMgASgMIjcKGVNpZ25QcmVwYXJlZE9mZmVyUmVzcG9uc2USGgoSc2lnbmVkX2NoYW5nZV91c2RhGAEgASgMIo4BChlQcmVwYXJlUmVtb3RlT2ZmZXJSZXF1ZXN0EhUKDW9mZmVyX3JlcXVlc3QYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRISCgpwdWJsaWNfa2V5GAQgASgMEhEKCXNpZ25hdHVyZRgFIAEoDCJQChlPZmZlclByZXBhcmF0aW9uQ2hhbGxlbmdlEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAEgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAiABKAkimQEKGlByZXBhcmVSZW1vdGVPZmZlclJlc3BvbnNlEj8KCWNoYWxsZW5nZRgBIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5PZmZlclByZXBhcmF0aW9uQ2hhbGxlbmdlSAASLwoFb2ZmZXIYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAQgkKB291dGNvbWUigAEKG1NpZ25PZmZlclByZXBhcmF0aW9uUmVxdWVzdBIVCg1vZmZlcl9yZXF1ZXN0GAEgASgMEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAIgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAyABKAkSFQoNYXV0aG9yX3NlY3JldBgEIAEoDCJFChxTaWduT2ZmZXJQcmVwYXJhdGlvblJlc3BvbnNlEhIKCnB1YmxpY19rZXkYASABKAwSEQoJc2lnbmF0dXJlGAIgASgMIoEBCg1LZXJuZWxSZWZ1c2FsEjAKBGNvZGUYASABKA4yIi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbENvZGUSDwoHbWVzc2FnZRgCIAEoCRItCgdkZXRhaWxzGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IrgDCg1RdWVyeVJlc3BvbnNlEiwKBXZhbHVlGAEgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWVIABJKChNhdXRob3JpemF0aW9uX2NoZWNrGAogASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25DaGVja1Jlc3BvbnNlSAASTAoUYXV0aG9yaXphdGlvbl9leHBhbmQYCyABKAsyLC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGFuZFJlc3BvbnNlSAASPgoNb3NnaV9yZXNvdXJjZRgMIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5Pc2dpUmVzb3VyY2VSZXNwb25zZUgAEkoKE2Zyb250aWVyX3RyYW5zaXRpb24YDSABKAsyKy5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uUmVzcG9uc2VIABJJChh2ZXJpZnlfY2hhaW5fZGlhZ25vc3RpY3MYFCABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljc0IICgZyZXN1bHQiSAoNT3NnaUF0dHJpYnV0ZRIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgJEhEKBHR5cGUYAyABKAlIAIgBAUIHCgVfdHlwZSIsCg1Pc2dpRGlyZWN0aXZlEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiABKAkiiwEKDk9zZ2lDYXBhYmlsaXR5EhEKCW5hbWVzcGFjZRgBIAEoCRIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lBdHRyaWJ1dGUSMgoKZGlyZWN0aXZlcxgDIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpRGlyZWN0aXZlIowBCg9Pc2dpUmVxdWlyZW1lbnQSEQoJbmFtZXNwYWNlGAEgASgJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaUF0dHJpYnV0ZRIyCgpkaXJlY3RpdmVzGAMgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lEaXJlY3RpdmUimgEKFE9zZ2lSZXNvdXJjZVJlc3BvbnNlEhMKC3NvdXJjZV91c2RhGAEgASgMEjUKDGNhcGFiaWxpdGllcxgCIAMoCzIfLm5vbW9zLmtlcm5lbC52MS5Pc2dpQ2FwYWJpbGl0eRI2CgxyZXF1aXJlbWVudHMYAyADKAsyIC5ub21vcy5rZXJuZWwudjEuT3NnaVJlcXVpcmVtZW50IucBChNWZXJpZnlDaGFpblN0ZXBTcGFuEg0KBWluZGV4GAEgASgEEhIKCmNvbW1pdF9vaWQYAiABKAkSDgoGZG9tYWluGAMgASgJEhEKCWRpcmVjdGl2ZRgEIAEoCRIQCgh0b3RhbF91cxgFIAEoBBI2CgZwaGFzZXMYBiABKAsyJi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEkAKDmVuZ2luZV90aW1pbmdzGAcgAygLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRW5naW5lVGltaW5nIpgCChVWZXJpZnlDaGFpblN0ZXBQaGFzZXMSHgoWcnVudGltZV9sYXdfcmVmcmVzaF91cxgBIAEoBBITCgttYW5pZmVzdF91cxgCIAEoBBIZChFsYXdfcmVzb2x1dGlvbl91cxgDIAEoBBIdChVtYW5hZ2VkX3RyYW5zaXRpb25fdXMYBCABKAQSFAoMcHJpbmNpcGFsX3VzGAUgASgEEhQKDGV2b2x1dGlvbl91cxgGIAEoBBIaChJjb2xvY2F0ZWRfcmVhZHNfdXMYByABKAQSIQoZdHlwZWRfaW5zdGFsbF92ZXJpZmllcl91cxgIIAEoBBIUCgxhZG1pc3Npb25fdXMYCSABKAQSDwoHZm9sZF91cxgKIAEoBCLaBQoWVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcxIuCgR3YWxrGAEgASgOMiAubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluV2FsaxIQCgh0b3RhbF91cxgCIAEoBBIbChNyZWZlcmVuY2VfbG9va3VwX3VzGAMgASgEEhoKEnJlcG9zaXRvcnlfb3Blbl91cxgEIAEoBBIVCg1jaGFpbl9yZWFkX3VzGAUgASgEEhYKDmVuZ2luZV9pbml0X3VzGAYgASgEEhgKEHRpbWVsaW5lX3JlYWRfdXMYByABKAQSGAoQbGF3X2h5ZHJhdGlvbl91cxgIIAEoBBIbChNyZWNvdmVyeV9wcmVzY2FuX3VzGAkgASgEEhgKEGZvbGRfZnJvbnRpZXJfdXMYCiABKAQSMwoFc3RlcHMYCyADKAsyJC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwU3BhbhJACg5lbmdpbmVfdGltaW5ncxgMIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkVuZ2luZVRpbWluZxJNChVsYXdfaHlkcmF0aW9uX3RpbWluZ3MYDSADKAsyLi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5MYXdIeWRyYXRpb25UaW1pbmcSGQoRbGF3X2Nsb3N1cmVfY291bnQYDiABKAQSHgoWbGF3X2Nsb3N1cmVfY2FjaGVfaGl0cxgPIAEoBBIgChhsYXdfY2xvc3VyZV9jYWNoZV9taXNzZXMYECABKAQSEgoKc3RlcF9jb3VudBgRIAEoBBIVCg1zdGVwX3RvdGFsX3VzGBIgASgEEkEKEXN0ZXBfcGhhc2VfdG90YWxzGBMgASgLMiYubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFBoYXNlcxIaChJvbWl0dGVkX3N0ZXBfY291bnQYFCABKAQiOgoXVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcSDQoFcGhhc2UYASABKAkSEAoIdG90YWxfdXMYAiABKAQiQAodVmVyaWZ5Q2hhaW5MYXdIeWRyYXRpb25UaW1pbmcSDQoFcGhhc2UYASABKAkSEAoIdG90YWxfdXMYAiABKAQitgIKDU91dGJvdW5kT2ZmZXISCgoCaWQYASABKAkSEwoLZGVzdGluYXRpb24YAiABKAkSFAoMc2VhbGVkX29mZmVyGAMgASgMEhQKDGNvbnRlbnRfdHlwZRgEIAEoCRIYChBzb3VyY2Vfd29ya3NwYWNlGAUgASgJEhQKDGN1c3RvZHlfaGVhZBgGIAEoCRIXCg9jYXVzZWRfYnlfb2ZmZXIYByABKAkSGwoTc2NoZWR1bGVkX2F0X21pbGxpcxgIIAEoBBIaChJkZWFkbGluZV9hdF9taWxsaXMYCSABKAQSFAoMY3VzdG9keV9wYXRoGAogASgJEhMKC2N1c3RvZHlfb2lkGAsgASgJEhQKDGRlbGl2ZXJ5X3JlZhgMIAEoCRIVCg1vYmxpZ2F0aW9uX2lkGA0gASgJIngKDk91dGJveFJlc3BvbnNlEi4KBm9mZmVycxgBIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5PdXRib3VuZE9mZmVyEh8KEm5leHRfZHVlX2F0X21pbGxpcxgCIAEoBEgAiAEBQhUKE19uZXh0X2R1ZV9hdF9taWxsaXMiPAoMU3luY1Jlc3BvbnNlEiwKBnJlc3VsdBgBIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCJCCg9Xb3Jrc3BhY2VUYXJnZXQSDAoEcmVwbxgBIAEoCRIRCgl3b3Jrc3BhY2UYAiABKAkSDgoGYnJhbmNoGAMgASgJIk4KC09wZW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDQoFc3BhbnMYAiABKAgiYQoNRGlyZWN0aXZlQ2FsbBIOCgZkb21haW4YASABKAkSEQoJZGlyZWN0aXZlGAIgASgJEi0KB3BheWxvYWQYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3Qi1gIKEEF1dGhvcmluZ09wdGlvbnMSDQoFYWN0b3IYASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIVCg1hdXRob3Jfc2VjcmV0GAMgASgMEh0KEHZhbGlkX2Zyb21fZXBvY2gYBCABKARIAIgBARIfChJwcmluY2lwYWxfdmVyaWZpZWQYBSABKAhIAYgBARILCgNybmcYBiADKAESGAoQZGVmZXJfcHJvamVjdGlvbhgHIAEoCBINCgVzcGFucxgIIAEoCBIPCgdkcnlfcnVuGAkgASgIEhAKCHNlcXVlbmNlGAogASgEEi0KBWNsb2NrGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLkNhcHR1cmVkQ2xvY2sSFAoMcHJlcGFyZV9vbmx5GAwgASgIQhMKEV92YWxpZF9mcm9tX2Vwb2NoQhUKE19wcmluY2lwYWxfdmVyaWZpZWQiSgoNQ2FwdHVyZWRDbG9jaxIXCg9waHlzaWNhbF9taWxsaXMYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIsMDChBCaXJ0aENlcnRpZmljYXRlEg0KBWNoaWxkGAEgASgJEg8KB2ZvdW5kZXIYAiABKAkSEAoIdmVyaWZpZWQYAyABKAgSEgoKcGFyZW50X2tleRgEIAEoDBIRCglwYXJlbnRfaWQYBSABKAkSDQoFZXBvY2gYBiABKAMSEQoJc2lnbmF0dXJlGAcgASgMEhkKDHZlcmlmaWVkX3ZpYRgIIAEoCUgAiAEBEhYKCWlkcF90b2tlbhgJIAEoCUgBiAEBEhsKDmNhcHR1cmVkX2Nsb2NrGAogASgDSAKIAQESIQoUYXV0aF9wcm92aWRlcl9pc3N1ZXIYCyABKAlIA4gBARIfChJhdXRoX3Byb3ZpZGVyX2p3a3MYDCABKAlIBIgBARIjChZhdXRoX3Byb3ZpZGVyX2F1ZGllbmNlGA0gASgJSAWIAQFCDwoNX3ZlcmlmaWVkX3ZpYUIMCgpfaWRwX3Rva2VuQhEKD19jYXB0dXJlZF9jbG9ja0IXChVfYXV0aF9wcm92aWRlcl9pc3N1ZXJCFQoTX2F1dGhfcHJvdmlkZXJfandrc0IZChdfYXV0aF9wcm92aWRlcl9hdWRpZW5jZSKcBAoMT2ZmZXJSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSLgoEY2FsbBgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVDYWxsSAASHAoSc2VhbGVkX2NoYW5nZV91c2RhGAcgASgMSAASNAoJYXV0aG9yaW5nGAMgASgLMiEubm9tb3Mua2VybmVsLnYxLkF1dGhvcmluZ09wdGlvbnMSEAoIbGF3X3VzZHoYBCABKAwSMwoMYXR0ZXN0YXRpb25zGAUgAygLMh0ubm9tb3Mua2VybmVsLnYxLkF0dGVzdGVkUmVhZBI9ChJjb25mbGljdF9zbmFwc2hvdHMYBiADKAsyIS5ub21vcy5rZXJuZWwudjEuQ29uZmxpY3RTbmFwc2hvdBIaChJleGVjdXRpb25fbGF3X3VzZHoYCCABKAwSIAoTY29udHJvbGxlcl9sYXdfaGFzaBgJIAEoCUgBiAEBEh0KEGNhbmRpZGF0ZV9jb21taXQYCiABKAlIAogBARI8ChFiaXJ0aF9jZXJ0aWZpY2F0ZRgLIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5CaXJ0aENlcnRpZmljYXRlQggKBmludGVudEIWChRfY29udHJvbGxlcl9sYXdfaGFzaEITChFfY2FuZGlkYXRlX2NvbW1pdCKTAQoMQXR0ZXN0ZWRSZWFkEhAKCHF1ZXJ5X2lkGAEgASgJEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBIrCgZyZXN1bHQYAyABKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZRITCgthdHRlc3RhdGlvbhgEIAEoDCJ1ChBDb25mbGljdFNuYXBzaG90EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhQKDGFnZ3JlZ2F0ZV9pZBgCIAEoCRINCgVmaWVsZBgDIAEoCRIVCg10YXJnZXRfc2NoZW1hGAQgASgJEg0KBXRva2VuGAUgASgJIrAGCgxRdWVyeVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIyCglhdXRob3JpdHkYAiABKAsyHy5ub21vcy5rZXJuZWwudjEuUXVlcnlBdXRob3JpdHkSDQoFc3BhbnMYAyABKAgSKgoEcm93cxgKIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5Sb3dzUXVlcnlIABIqCgRwYWdlGAsgASgLMhoubm9tb3Mua2VybmVsLnYxLlBhZ2VRdWVyeUgAEisKBWJ5X2lkGAwgASgLMhoubm9tb3Mua2VybmVsLnYxLkJ5SWRRdWVyeUgAEjkKDHJlc29sdmVfcmVmcxgNIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmc1F1ZXJ5SAASRQoScmVmZXJlbmNlX3ZlcnNpb25zGA4gASgLMicubm9tb3Mua2VybmVsLnYxLlJlZmVyZW5jZVZlcnNpb25zUXVlcnlIABIsCgVjb3VudBgPIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5UYWxseVF1ZXJ5SAASKgoDc3VtGBAgASgLMhsubm9tb3Mua2VybmVsLnYxLlRhbGx5UXVlcnlIABIwCgdzcGF0aWFsGBEgASgLMh0ubm9tb3Mua2VybmVsLnYxLlNwYXRpYWxRdWVyeUgAEiwKBW5hbWVkGBIgASgLMhsubm9tb3Mua2VybmVsLnYxLk5hbWVkUXVlcnlIABJJChNhdXRob3JpemF0aW9uX2NoZWNrGBMgASgLMioubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25DaGVja1JlcXVlc3RIABJLChRhdXRob3JpemF0aW9uX2V4cGFuZBgUIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwYW5kUmVxdWVzdEgAEkkKE2Zyb250aWVyX3RyYW5zaXRpb24YFSABKAsyKi5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uUmVxdWVzdEgAQgcKBXF1ZXJ5IpIBCg5RdWVyeUF1dGhvcml0eRIXCg9wcmluY2lwYWxfY2xhaW0YASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIQCghub3dfdW5peBgDIAEoBBIVCg1hdXRob3Jfc2VjcmV0GAQgASgMEioKBGtleXMYBSADKAsyHC5ub21vcy5rZXJuZWwudjEuSW5qZWN0ZWRLZXkiOAoLSW5qZWN0ZWRLZXkSDQoFc2NvcGUYASABKAkSDQoFZXBvY2gYAiABKAQSCwoDa2V5GAMgASgMIlsKCVJvd3NRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJInkKCVBhZ2VRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSDQoFbGltaXQYAyABKA0SDQoFYWZ0ZXIYBCABKAkSEQoJcHJpbmNpcGFsGAUgASgJIkwKCUJ5SWRRdWVyeRIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSEQoJcHJpbmNpcGFsGAMgASgJIlwKCE5vbW9zUmVmEhEKCXdvcmtzcGFjZRgBIAEoCRIWCg5hZ2dyZWdhdGVfdHlwZRgCIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAyABKAkSDwoHdmVyc2lvbhgEIAEoCSJOChBSZXNvbHZlUmVmc1F1ZXJ5EicKBHJlZnMYASADKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSEQoJcHJpbmNpcGFsGAIgASgJIk4KFlJlZmVyZW5jZVZlcnNpb25zUXVlcnkSNAoEcmVmcxgBIAMoCzImLm5vbW9zLmtlcm5lbC52MS5SZWZlcmVuY2VWZXJzaW9uQ2hlY2sihAEKFVJlZmVyZW5jZVZlcnNpb25DaGVjaxIpCgZwaW5uZWQYASABKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSKQoGc2VyaWVzGAIgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhUKDWN1cnJlbnRfZmllbGQYAyABKAkiXAoKVGFsbHlRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJIl4KDFNwYXRpYWxRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJInEKCk5hbWVkUXVlcnkSMgoJb3BlcmF0aW9uGAEgASgOMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5T3BlcmF0aW9uEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCKxAQoZRnJvbnRpZXJUcmFuc2l0aW9uUmVxdWVzdBIOCgZkb21haW4YASABKAkSFgoOY2FuZGlkYXRlX2hhc2gYAiABKAkSDwoHYXRfaGFzaBgDIAEoCRIhChlhY2tub3dsZWRnZW1lbnRfcHJpbmNpcGFsGAQgASgJEiAKE3Jlc3RvcmVfcHJldmlvdXNfb2YYBSABKAlIAIgBAUIWChRfcmVzdG9yZV9wcmV2aW91c19vZiJaCiVGcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhgKEHNvdXJjZV9zdGFibGVfaWQYASABKAkSFwoPYWNrbm93bGVkZ2VtZW50GAIgASgJIvUBCh5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbnMSDwoHcmV0aXJlZBgBIAMoCRJHCgdyZXR5cGVkGAIgAygLMjYubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uTWFwRW50cnkSRwoHcmViaW5kcxgDIAMoCzI2Lm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhwKD2Fja25vd2xlZGdlZF9ieRgEIAEoCUgAiAEBQhIKEF9hY2tub3dsZWRnZWRfYnkiPQobRnJvbnRpZXJUcmFuc2l0aW9uVmlvbGF0aW9uEg4KBmRvbWFpbhgBIAEoCRIOCgZkZXRhaWwYAiABKAki1wIKGkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlEg8KB2F0X2hhc2gYASABKAkSGQoMY3VycmVudF9oYXNoGAIgASgJSACIAQESFQoNYXRfc3RhdGVfcm9vdBgDIAEoCRIWCg5jYW5kaWRhdGVfaGFzaBgEIAEoCRIOCgZkb21haW4YBSABKAkSDwoHZG9tYWlucxgGIAMoCRINCgVyZWFkeRgHIAEoCBJACgp2aW9sYXRpb25zGAggAygLMiwubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblZpb2xhdGlvbhJKCgxkaXNwb3NpdGlvbnMYCSABKAsyLy5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25zSAGIAQFCDwoNX2N1cnJlbnRfaGFzaEIPCg1fZGlzcG9zaXRpb25zIi8KE0F1dGhvcml6YXRpb25PYmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSJUChRBdXRob3JpemF0aW9uU3ViamVjdBIMCgR0eXBlGAEgASgJEgoKAmlkGAIgASgJEhUKCHJlbGF0aW9uGAMgASgJSACIAQFCCwoJX3JlbGF0aW9uIpwBChhSZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBIQCghyZWxhdGlvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0IoEBChhBdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSIwoZY3VycmVudF92ZXJpZmllZF9mcm9udGllchgBIAEoCEgAEhkKD2F0X2xlYXN0X2NvbW1pdBgCIAEoCUgAEhYKDGV4YWN0X2NvbW1pdBgDIAEoCUgAQg0KC3JlcXVpcmVtZW50ImYKHUF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EhQKDGNvbmRpdGlvbl9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3Qi9wIKGUF1dGhvcml6YXRpb25DaGVja1JlcXVlc3QSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBISCgpwZXJtaXNzaW9uGAIgASgJEjYKB3N1YmplY3QYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvblN1YmplY3QSPgoLY29uc2lzdGVuY3kYBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBSADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgGIAEoCUgAiAEBEhsKE2luY2x1ZGVfZXhwbGFuYXRpb24YByABKAhCFgoUX2V4cGVjdGVkX21vZGVsX2hhc2gi7QIKGkF1dGhvcml6YXRpb25FeHBhbmRSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI+Cgtjb25zaXN0ZW5jeRgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSPwoHY29udGV4dBgEIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIgChNleHBlY3RlZF9tb2RlbF9oYXNoGAUgASgJSACIAQESDQoFbGltaXQYBiABKA0SEgoFYWZ0ZXIYByABKAlIAYgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAggASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoQggKBl9hZnRlciK9AQoZUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI4CgV0dXBsZRgBIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSEAoIdHVwbGVfaWQYAiABKAkSGgoSYXNzZXJ0aW9uX2V2ZW50X2lkGAMgASgJEiAKE3Jldm9jYXRpb25fZXZlbnRfaWQYBCABKAlIAIgBAUIWChRfcmV2b2NhdGlvbl9ldmVudF9pZCLhAwoYQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uEkYKCW9wZXJhdGlvbhgBIAEoDjIzLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24uT3BlcmF0aW9uEhAKCHJlbGF0aW9uGAIgASgJEg4KBnJlc3VsdBgDIAEoCBI8CghldmlkZW5jZRgEIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUV2aWRlbmNlEjsKCGNoaWxkcmVuGAUgAygLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbiLfAQoJT3BlcmF0aW9uEhkKFU9QRVJBVElPTl9VTlNQRUNJRklFRBAAEhQKEE9QRVJBVElPTl9ESVJFQ1QQARIeChpPUEVSQVRJT05fQ09NUFVURURfVVNFUlNFVBACEh4KGk9QRVJBVElPTl9UVVBMRV9UT19VU0VSU0VUEAMSEwoPT1BFUkFUSU9OX1VOSU9OEAQSGgoWT1BFUkFUSU9OX0lOVEVSU0VDVElPThAFEhcKE09QRVJBVElPTl9FWENMVVNJT04QBhIXChNPUEVSQVRJT05fQ09ORElUSU9OEAcidwoaQXV0aG9yaXphdGlvbkRlY2lzaW9uQmFzaXMSIAoYYXV0aG9yaXphdGlvbl9tb2RlbF9oYXNoGAEgASgJEiEKGXJlbGF0aW9uc2hpcF9zdGF0ZV9jb21taXQYAiABKAkSFAoMY29udGV4dF9oYXNoGAMgASgMIr4BChpBdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZRIPCgdhbGxvd2VkGAEgASgIEjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEkMKC2V4cGxhbmF0aW9uGAMgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbkgAiAEBQg4KDF9leHBsYW5hdGlvbiKDAgobQXV0aG9yaXphdGlvbkV4cGFuZFJlc3BvbnNlEjcKCHN1YmplY3RzGAEgAygLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0EjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEhEKBG5leHQYAyABKAlIAIgBARJDCgtleHBsYW5hdGlvbhgEIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAYgBAUIHCgVfbmV4dEIOCgxfZXhwbGFuYXRpb24icAoNT3V0Ym94UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Ei0KBWNsb2NrGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLkNhcHR1cmVkQ2xvY2siYwoLU3luY1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIRCglmcm9tX2Jhc2UYAiABKAkSDwoHdG9faGVhZBgDIAEoCSJTCgtUZXN0UmVxdWVzdBI3CghzZXRfcm9vdBgBIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5TZXRUZXN0Um9vdFJlcXVlc3RIAEILCglvcGVyYXRpb24iKAoSU2V0VGVzdFJvb3RSZXF1ZXN0EhIKCnB1YmxpY19rZXkYASABKAwiPQoMVGVzdFJlc3BvbnNlEi0KBnJlc3VsdBgBIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWQi1QsKDkN1c3RvZHlSZXF1ZXN0EjcKCnBhY2tfZGVsdGEYCiABKAsyIS5ub21vcy5rZXJuZWwudjEuUGFja0RlbHRhUmVxdWVzdEgAEjcKCmFwcGx5X3BhY2sYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuQXBwbHlQYWNrUmVxdWVzdEgAEjcKCnJlcG9fc3RhdHMYDCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVwb1N0YXRzUmVxdWVzdEgAEj0KDWludGVudHNfYWJvdmUYDSABKAsyJC5ub21vcy5rZXJuZWwudjEuSW50ZW50c0Fib3ZlUmVxdWVzdEgAEj8KDmluc3BlY3RfY2hhbmdlGA4gASgLMiUubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDaGFuZ2VSZXF1ZXN0SAASTgoWZW5jb2RlX3JlZnVzYWxfdmVyZGljdBgPIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5FbmNvZGVSZWZ1c2FsVmVyZGljdFJlcXVlc3RIABJQChdpbnNwZWN0X3JlZnVzYWxfdmVyZGljdBgQIAEoCzItLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0UmVmdXNhbFZlcmRpY3RSZXF1ZXN0SAASNQoJcmVhZF9ibG9iGBEgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRCbG9iUmVxdWVzdEgAEjkKC3Jlc29sdmVfcmVmGBIgASgLMiIubm9tb3Mua2VybmVsLnYxLlJlc29sdmVSZWZSZXF1ZXN0SAASNQoJbGlzdF9yZWZzGBMgASgLMiAubm9tb3Mua2VybmVsLnYxLkxpc3RSZWZzUmVxdWVzdEgAEjUKCXdyaXRlX3JlZhgUIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xcml0ZVJlZlJlcXVlc3RIABI3CgpkZWxldGVfcmVmGBUgASgLMiEubm9tb3Mua2VybmVsLnYxLkRlbGV0ZVJlZlJlcXVlc3RIABJEChF3cml0ZV9tZXRhX2NvbW1pdBgWIAEoCzInLm5vbW9zLmtlcm5lbC52MS5Xcml0ZU1ldGFDb21taXRSZXF1ZXN0SAASQgoQbGF3X2Nsb3N1cmVfaW5mbxgXIAEoCzImLm5vbW9zLmtlcm5lbC52MS5MYXdDbG9zdXJlSW5mb1JlcXVlc3RIABJFChFjaGVja3BvaW50X2V4cG9ydBgYIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50RXhwb3J0UmVxdWVzdEgAEkUKEWNoZWNrcG9pbnRfaW1wb3J0GBkgASgLMigubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRJbXBvcnRSZXF1ZXN0SAASQwoQY2FwYWNpdHlfcmVzZXJ2ZRgaIAEoCzInLm5vbW9zLmtlcm5lbC52MS5DYXBhY2l0eVJlc2VydmVSZXF1ZXN0SAASOwoMcmVzdG9yZV9tYWluGBsgASgLMiMubm9tb3Mua2VybmVsLnYxLlJlc3RvcmVNYWluUmVxdWVzdEgAEk4KFnJlc29sdmVfc3RhdGVfcG9zaXRpb24YHCABKAsyLC5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXF1ZXN0SAASRwoScmVzaWRlbnRfZm9vdHByaW50GB0gASgLMikubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50UmVxdWVzdEgAEkEKD2hpc3Rvcnlfc3VtbWFyeRgeIAEoCzImLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5U3VtbWFyeVJlcXVlc3RIABJaChxwcm92ZV9jb21wYWN0aW9uX2VxdWl2YWxlbmNlGB8gASgLMjIubm9tb3Mua2VybmVsLnYxLlByb3ZlQ29tcGFjdGlvbkVxdWl2YWxlbmNlUmVxdWVzdEgAQgsKCW9wZXJhdGlvbiIoChhSZXNpZGVudEZvb3RwcmludFJlcXVlc3QSDAoEZGVlcBgBIAEoCCKfAgoRUmVzaWRlbnRGb290cHJpbnQSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIYChByZWFkX21vZGVsX2J5dGVzGAMgASgEEh0KFXJlYWRfbW9kZWxfcnVzdF9ieXRlcxgEIAEoBBIYChBmb2xkX3N0YXRlX2J5dGVzGAUgASgEEhMKC2ZvbGRfaW1hZ2VzGAYgASgNEh8KF3NoYXJlZF9hdHRyaWJ1dGVkX2J5dGVzGAcgASgEEhIKCmFnZ3JlZ2F0ZXMYCCABKAQSNgoKY29tcG9uZW50cxgJIAMoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudENvbXBvbmVudBISCgpjb21wdXRlX3VzGAogASgEImkKEVJlc2lkZW50Q29tcG9uZW50EjQKBGtpbmQYASABKA4yJi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRDb21wb25lbnRLaW5kEg0KBWJ5dGVzGAIgASgEEg8KB2NlaWxpbmcYAyABKAgiygEKGVJlc2lkZW50Rm9vdHByaW50UmVzcG9uc2USNQoJcmVzaWRlbnRzGAEgAygLMiIubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50EhwKFGFsbG9jYXRvcl9saXZlX2J5dGVzGAIgASgEEhgKEGF0dHJpYnV0ZWRfYnl0ZXMYAyABKAQSGQoRdW5hY2NvdW50ZWRfYnl0ZXMYBCABKAQSFQoNYWNjb3VudGluZ191cxgFIAEoBBIMCgRkZWVwGAYgASgIIpwBChBQYWNrRGVsdGFSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEhEKBGJhc2UYAyABKAlIAYgBARIOCgZicmFuY2gYBCABKAkSHQoQc3RhZ2VkX3BhY2tfZmlsZRgFIAEoCUgCiAEBQgcKBV9oZWFkQgcKBV9iYXNlQhMKEV9zdGFnZWRfcGFja19maWxlInIKEEFwcGx5UGFja1JlcXVlc3QSDAoEcmVwbxgBIAEoCRIOCgRwYWNrGAIgASgMSAASGgoQc3RhZ2VkX3BhY2tfZmlsZRgEIAEoCUgAEhEKBGhlYWQYAyABKAlIAYgBAUIICgZzb3VyY2VCBwoFX2hlYWQiIAoQUmVwb1N0YXRzUmVxdWVzdBIMCgRyZXBvGAEgASgJIqwBChNJbnRlbnRzQWJvdmVSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEhEKBGJhc2UYAyABKAlIAYgBARIOCgZicmFuY2gYBCABKAkSDQoFbGltaXQYBSABKAQSGAoQY29tcGxldGVfbG9naWNhbBgGIAEoCBIWCg5jb21wYWN0X3N0b3JlZBgHIAEoCEIHCgVfaGVhZEIHCgVfYmFzZSJtChVIaXN0b3J5U3VtbWFyeVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESDgoGYnJhbmNoGAMgASgJEhEKBGJhc2UYBCABKAlIAYgBAUIHCgVfaGVhZEIHCgVfYmFzZSIrChRJbnNwZWN0Q2hhbmdlUmVxdWVzdBITCgtjaGFuZ2VfdXNkYRgBIAEoDCLfAQoOUmVmdXNhbFZlcmRpY3QSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIQCgNvaWQYAiABKAlIAYgBARITCgZkb21haW4YAyABKAlIAogBARIZCgxkaXJlY3RpdmVfaWQYBCABKAlIA4gBARIUCgdzZXNzaW9uGAUgASgJSASIAQESEQoJcGFya2VkX2F0GAYgASgJEg4KBnJlYXNvbhgHIAEoCUILCglfb2ZmZXJfaWRCBgoEX29pZEIJCgdfZG9tYWluQg8KDV9kaXJlY3RpdmVfaWRCCgoIX3Nlc3Npb24iTwobRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0EjAKB3ZlcmRpY3QYASABKAsyHy5ub21vcy5rZXJuZWwudjEuUmVmdXNhbFZlcmRpY3QiNAocSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdBIUCgx2ZXJkaWN0X3VzZGEYASABKAwi1AEKFUNvbXBhY3Rpb25FcXVpdmFsZW5jZRITCgtzb3VyY2VfaGVhZBgBIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgCIAEoCRIWCg5jYW5kaWRhdGVfaGVhZBgDIAEoCRIZChFjYW5kaWRhdGVfZ2VuZXNpcxgEIAEoCRIWCg5zb3VyY2VfaW50ZW50cxgFIAEoBBIXCg9jYXJyaWVkX2ludGVudHMYBiABKAQSFgoOcGFya2VkX2ludGVudHMYByABKAQSEgoKZXF1aXZhbGVudBgIIAEoCCJ9CiFQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlcXVlc3QSEwoLc291cmNlX3JlcG8YASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSFgoOY2FuZGlkYXRlX3JlcG8YAyABKAkSFgoOY2FuZGlkYXRlX2hlYWQYBCABKAkiOgoPUmVhZEJsb2JSZXF1ZXN0EgwKBHJlcG8YASABKAkSCwoDb2lkGAIgASgJEgwKBHBhdGgYAyABKAkiNAoRUmVzb2x2ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkiLwoPTGlzdFJlZnNSZXF1ZXN0EgwKBHJlcG8YASABKAkSDgoGcHJlZml4GAIgASgJIkIKD1dyaXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCRIOCgZ0YXJnZXQYAyABKAkiMwoQRGVsZXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCSIpCghNZXRhRmlsZRIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAwirgEKFldyaXRlTWV0YUNvbW1pdFJlcXVlc3QSDAoEcmVwbxgBIAEoCRIPCgdwYXJlbnRzGAIgAygJEigKBWZpbGVzGAMgAygLMhkubm9tb3Mua2VybmVsLnYxLk1ldGFGaWxlEg8KB21lc3NhZ2UYBCABKAkSFAoMdGltZV9zZWNvbmRzGAUgASgSEhYKCXJlZmVyZW5jZRgGIAEoCUgAiAEBQgwKCl9yZWZlcmVuY2UiZwoVTGF3Q2xvc3VyZUluZm9SZXF1ZXN0EhQKDGNsb3N1cmVfZmlsZRgBIAEoCRI4CgpjYXBhYmlsaXR5GAIgASgOMiQubm9tb3Mua2VybmVsLnYxLktlcm5lbExhd0NhcGFiaWxpdHkihwEKF0NoZWNrcG9pbnRFeHBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSIQoUc3RhZ2VkX2Zyb250aWVyX2ZpbGUYAiABKAlIAIgBAUIXChVfc3RhZ2VkX2Zyb250aWVyX2ZpbGUiQQoLRnJvbnRpZXJIbGMSEAoIcGh5c2ljYWwYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIt0EChdWZXJpZmllZEZyb250aWVyUmVjZWlwdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgNvaWQYAiABKAkSDwoHaW50ZW50cxgDIAEoBBITCgtwbGFuc19yZXJ1bhgEIAEoBBIcCg9jb250cm9sbGVyX2hhc2gYBSABKAlIAIgBARIZChFpbnN0YWxsZWRfZG9tYWlucxgGIAMoCRIOCgZsaW5lYXIYByABKAgSMwoIbGFzdF9obGMYCCABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAYgBARIUCgdsYXN0X2lkGAkgASgJSAKIAQESEQoJc3RhdGVfb2lkGAogASgJEhQKDHN0YXRlX3NoYTI1NhgLIAEoCRI5Cg5zdGF0ZV9sYXN0X2hsYxgMIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gDiAEBEhoKDXN0YXRlX2xhc3RfaWQYDSABKAlIBIgBARIXCg9tYW5pZmVzdF9zaGEyNTYYDiABKAkSHgoWbGF3X2Nsb3N1cmVfaWRlbnRpdGllcxgPIAMoCRIaChJyZXNvbHZhYmxlX2RvbWFpbnMYECADKAkSIgoVcHJvamVjdGlvbl9zdGF0ZV9yb290GBEgASgJSAWIAQFCEgoQX2NvbnRyb2xsZXJfaGFzaEILCglfbGFzdF9obGNCCgoIX2xhc3RfaWRCEQoPX3N0YXRlX2xhc3RfaGxjQhAKDl9zdGF0ZV9sYXN0X2lkQhgKFl9wcm9qZWN0aW9uX3N0YXRlX3Jvb3QiRQoVRm9sZEZyb250aWVyQWdncmVnYXRlEhQKDGFnZ3JlZ2F0ZV9pZBgBIAEoCRIWCg5hZ2dyZWdhdGVfdXNkYRgCIAEoDCJBChdGb2xkRnJvbnRpZXJGaW5nZXJwcmludBIRCglpbnRlbnRfaWQYASABKAkSEwoLZmluZ2VycHJpbnQYAiABKAki1gMKFEZvbGRGcm9udGllclNuYXBzaG90EhYKDmZvcm1hdF92ZXJzaW9uGAEgASgNEgsKA3RpcBgCIAEoCRIPCgdnZW5lc2lzGAMgASgJEhUKDWhpc3RvcnlfZGVwdGgYBCABKAQSOgoKYWdncmVnYXRlcxgFIAMoCzImLm5vbW9zLmtlcm5lbC52MS5Gb2xkRnJvbnRpZXJBZ2dyZWdhdGUSOAoNaGxjX3dhdGVybWFyaxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gAiAEBEjMKCGxhc3RfaGxjGAcgASgLMhwubm9tb3Mua2VybmVsLnYxLkZyb250aWVySGxjSAGIAQESFAoHbGFzdF9pZBgIIAEoCUgCiAEBEhYKDnN0cmlrZV90YXJnZXRzGAkgAygJEkUKE2ludGVudF9maW5nZXJwcmludHMYCiADKAsyKC5ub21vcy5rZXJuZWwudjEuRm9sZEZyb250aWVyRmluZ2VycHJpbnQSFwoKc3RhdGVfcm9vdBgLIAEoCUgDiAEBQhAKDl9obGNfd2F0ZXJtYXJrQgsKCV9sYXN0X2hsY0IKCghfbGFzdF9pZEINCgtfc3RhdGVfcm9vdCKbAwoYU3RvcmVkQ2hlY2twb2ludE1hbmlmZXN0EhYKDmZvcm1hdF92ZXJzaW9uGAEgASgNEhMKBmN1cnNvchgCIAEoCUgAiAEBEhgKEGNoZWNrcG9pbnRfYnl0ZXMYAyABKAQSEAoIbGF3X2hhc2gYBCABKAkSOwoLY29tcHJlc3Npb24YBSABKA4yJi5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludENvbXByZXNzaW9uEhEKCXJhd19ieXRlcxgGIAEoBBIUCgxzdG9yZWRfYnl0ZXMYByABKAQSHQoVZnJvbnRpZXJfc3RvcmVkX2J5dGVzGAggASgEEhcKCnN0YXRlX3Jvb3QYCSABKAlIAYgBARJQChl2ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0GAogASgLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmaWVkRnJvbnRpZXJSZWNlaXB0SAKIAQFCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIcChpfdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdCLBAwoXQ2hlY2twb2ludEltcG9ydFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBISCghmcm9udGllchgCIAEoDEgAEh4KFHN0YWdlZF9mcm9udGllcl9maWxlGAYgASgJSAASEwoGY3Vyc29yGAMgASgJSAGIAQESFwoKc3RhdGVfcm9vdBgEIAEoCUgCiAEBEg0KBXNwYW5zGAUgASgIEhEKBGhlYWQYByABKAlIA4gBARJQChl2ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0GAggASgLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmaWVkRnJvbnRpZXJSZWNlaXB0SASIAQESSgoTdmVyaWZpY2F0aW9uX3BvbGljeRgJIAEoDjItLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50VmVyaWZpY2F0aW9uUG9saWN5QhEKD2Zyb250aWVyX3NvdXJjZUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QgcKBV9oZWFkQhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0IjEKFkNhcGFjaXR5UmVzZXJ2ZVJlcXVlc3QSFwoPYWdncmVnYXRlX2NvdW50GAEgASgEImkKElJlc3RvcmVNYWluUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EgwKBGhlYWQYAiABKAkSEwoLZGlhZ25vc3RpY3MYAyABKAgiaQobUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJbWFpbl9oZWFkGAIgASgJEhUKDWhpbnRlZF9jb21taXQYAyABKAkSEgoKc3RhdGVfcm9vdBgEIAEoCSLjCwoPQ3VzdG9keVJlc3BvbnNlEjgKCnBhY2tfZGVsdGEYCiABKAsyIi5ub21vcy5rZXJuZWwudjEuUGFja0RlbHRhUmVzcG9uc2VIABI4CgphcHBseV9wYWNrGAsgASgLMiIubm9tb3Mua2VybmVsLnYxLkFwcGx5UGFja1Jlc3BvbnNlSAASOAoKcmVwb19zdGF0cxgMIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXBvU3RhdHNSZXNwb25zZUgAEj4KDWludGVudHNfYWJvdmUYDSABKAsyJS5ub21vcy5rZXJuZWwudjEuSW50ZW50c0Fib3ZlUmVzcG9uc2VIABJACg5pbnNwZWN0X2NoYW5nZRgOIAEoCzImLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q2hhbmdlUmVzcG9uc2VIABJPChZlbmNvZGVfcmVmdXNhbF92ZXJkaWN0GA8gASgLMi0ubm9tb3Mua2VybmVsLnYxLkVuY29kZVJlZnVzYWxWZXJkaWN0UmVzcG9uc2VIABJRChdpbnNwZWN0X3JlZnVzYWxfdmVyZGljdBgQIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0UmVmdXNhbFZlcmRpY3RSZXNwb25zZUgAEjYKCXJlYWRfYmxvYhgRIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZWFkQmxvYlJlc3BvbnNlSAASOgoLcmVzb2x2ZV9yZWYYEiABKAsyIy5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZlJlc3BvbnNlSAASNgoJbGlzdF9yZWZzGBMgASgLMiEubm9tb3Mua2VybmVsLnYxLkxpc3RSZWZzUmVzcG9uc2VIABIyCgl3cml0ZV9yZWYYFCABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkSAASMwoKZGVsZXRlX3JlZhgVIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWRIABJFChF3cml0ZV9tZXRhX2NvbW1pdBgWIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5Xcml0ZU1ldGFDb21taXRSZXNwb25zZUgAEkMKEGxhd19jbG9zdXJlX2luZm8YFyABKAsyJy5ub21vcy5rZXJuZWwudjEuTGF3Q2xvc3VyZUluZm9SZXNwb25zZUgAEkYKEWNoZWNrcG9pbnRfZXhwb3J0GBggASgLMikubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRFeHBvcnRSZXNwb25zZUgAEkYKEWNoZWNrcG9pbnRfaW1wb3J0GBkgASgLMikubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRJbXBvcnRSZXNwb25zZUgAEkQKEGNhcGFjaXR5X3Jlc2VydmUYGiABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2FwYWNpdHlSZXNlcnZlUmVzcG9uc2VIABI8CgxyZXN0b3JlX21haW4YGyABKAsyJC5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5SZXNwb25zZUgAEk8KFnJlc29sdmVfc3RhdGVfcG9zaXRpb24YHCABKAsyLS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZUgAEkgKEnJlc2lkZW50X2Zvb3RwcmludBgdIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudEZvb3RwcmludFJlc3BvbnNlSAASQgoPaGlzdG9yeV9zdW1tYXJ5GB4gASgLMicubm9tb3Mua2VybmVsLnYxLkhpc3RvcnlTdW1tYXJ5UmVzcG9uc2VIABJbChxwcm92ZV9jb21wYWN0aW9uX2VxdWl2YWxlbmNlGB8gASgLMjMubm9tb3Mua2VybmVsLnYxLlByb3ZlQ29tcGFjdGlvbkVxdWl2YWxlbmNlUmVzcG9uc2VIAEILCglvcGVyYXRpb24iMAoRUGFja0RlbHRhUmVzcG9uc2USDAoEcGFjaxgBIAEoDBINCgVieXRlcxgCIAEoBCI8ChFBcHBseVBhY2tSZXNwb25zZRIUCgxvYmplY3RfY291bnQYASABKAQSEQoJcGFja19oYXNoGAIgASgJIqcBChFSZXBvU3RhdHNSZXNwb25zZRITCgt0b3RhbF9ieXRlcxgBIAEoBBIUCgxvYmplY3RfYnl0ZXMYAiABKAQSFQoNbG9vc2Vfb2JqZWN0cxgDIAEoBBITCgtsb29zZV9ieXRlcxgEIAEoBBISCgpwYWNrX2ZpbGVzGAUgASgEEhIKCnBhY2tfYnl0ZXMYBiABKAQSEwoLaW5kZXhfYnl0ZXMYByABKAQi4gEKDEludGVudFJlY29yZBILCgNvaWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEwoLY2hhbmdlX3VzZGEYBSABKAwSLgoIc2VtYW50aWMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSSgoVdHJhbnNwb3J0X3JlcXVpcmVtZW50GAcgASgOMisubm9tb3Mua2VybmVsLnYxLkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50IkYKFEludGVudHNBYm92ZVJlc3BvbnNlEi4KB2ludGVudHMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuSW50ZW50UmVjb3JkInQKFkhpc3RvcnlTdW1tYXJ5UmVzcG9uc2USDAoEaGVhZBgBIAEoCRIOCgZvbGRlc3QYAiABKAkSFAoMY29tbWl0X2NvdW50GAMgASgEEhAKCGNvbXBsZXRlGAQgASgIEhQKDHJlYWNoZWRfYmFzZRgFIAEoCCJCChNOb21pbmFsQ2FsbElkZW50aXR5EhMKC2RvbWFpbl9wYXRoGAEgASgJEhYKDmRpcmVjdGl2ZV9wYXRoGAIgASgJIogBChhMaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSHwoXdGFyZ2V0X2Nsb3N1cmVfaWRlbnRpdHkYASABKAkSFAoMaW5zdGFsbGVkX2J5GAIgASgJEjUKBXBoYXNlGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkxpZmVjeWNsZUluc3RhbGxQaGFzZSJaCh1Xb3Jrc3BhY2VSZXNpZGVuY3lSZXF1aXJlbWVudBIRCgl3b3Jrc3BhY2UYASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSEQoJZm9sZF9yb290GAMgASgJIrQCChVJbnNwZWN0Q2hhbmdlUmVzcG9uc2USLgoIc2VtYW50aWMYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJaW50ZW50X2lkGAIgASgJEjIKBGNhbGwYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuTm9taW5hbENhbGxJZGVudGl0eRIQCghhdXRob3JlZBgEIAEoCBJEChFsaWZlY3ljbGVfaW5zdGFsbBgFIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSTAoUcmVxdWlyZWRfcmVzaWRlbmNpZXMYBiADKAsyLi5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQiTAocUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZRIaCg1yZXNvbHZlZF9oZWFkGAEgASgJSACIAQFCEAoOX3Jlc29sdmVkX2hlYWQiNAocRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZRIUCgx2ZXJkaWN0X3VzZGEYASABKAwiUQodSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2USMAoHdmVyZGljdBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5SZWZ1c2FsVmVyZGljdCJ1CiJQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlc3BvbnNlEjgKCGV2aWRlbmNlGAEgASgLMiYubm9tb3Mua2VybmVsLnYxLkNvbXBhY3Rpb25FcXVpdmFsZW5jZRIVCg1ldmlkZW5jZV91c2RhGAIgASgMIi8KEFJlYWRCbG9iUmVzcG9uc2USDQoFZm91bmQYASABKAgSDAoEYmxvYhgCIAEoDCIuChJSZXNvbHZlUmVmUmVzcG9uc2USEAoDb2lkGAEgASgJSACIAQFCBgoEX29pZCIrCglSZWZSZWNvcmQSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCSI8ChBMaXN0UmVmc1Jlc3BvbnNlEigKBHJlZnMYASADKAsyGi5ub21vcy5rZXJuZWwudjEuUmVmUmVjb3JkIg4KDEFja25vd2xlZGdlZCImChdXcml0ZU1ldGFDb21taXRSZXNwb25zZRILCgNvaWQYASABKAkigwEKFkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2USEAoIaWRlbnRpdHkYASABKAkSGQoRcm9vdF9sb2dpY2FsX3BhdGgYAiABKAkSEwoLYXNzZXRfY291bnQYAyABKAQSEgoKcHJpbV9jb3VudBgEIAEoBBITCgtkb21haW5fa2V5cxgFIAMoCSLfAwoYQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlEg0KBWVtcHR5GAEgASgIEhMKBmN1cnNvchgCIAEoCUgAiAEBEhAKCGZyb250aWVyGAMgASgMEhcKCnN0YXRlX3Jvb3QYBCABKAlIAYgBARISCgpzdGF0ZV90cmVlGAUgASgIEg4KBnBpbm5lZBgGIAEoCBIbChNyZWFkX2luZGV4X3NuYXBzaG90GAcgASgIEiMKG3JlYWRfaW5kZXhfc25hcHNob3RfcGVuZGluZxgIIAEoCBIkChdyZWFkX2luZGV4X3NxbGl0ZV9ieXRlcxgJIAEoBEgCiAEBEiUKGHJlYWRfaW5kZXhfY3VzdG9keV9ieXRlcxgKIAEoBEgDiAEBElAKGXZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQYCyABKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZpZWRGcm9udGllclJlY2VpcHRIBIgBAUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QhoKGF9yZWFkX2luZGV4X3NxbGl0ZV9ieXRlc0IbChlfcmVhZF9pbmRleF9jdXN0b2R5X2J5dGVzQhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0ItcCChhDaGVja3BvaW50SW1wb3J0UmVzcG9uc2USEAoIcmVzdG9yZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPZnJvbnRpZXJfc2VlZGVkGAMgASgIEiUKHWZyb250aWVyX3ZlcmlmaWNhdGlvbl9wZW5kaW5nGAQgASgIEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBITCgZjdXJzb3IYByABKAlIAYgBARIRCglyZWFkX29ubHkYCCABKAgSFwoPbGF6eV9yZWFkX2luZGV4GAkgASgIEjcKCWFzc3VyYW5jZRgKIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlQgkKB19yZWFzb25CCQoHX2N1cnNvciJKChdDYXBhY2l0eVJlc2VydmVSZXNwb25zZRIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQSFgoOcmVzZXJ2ZWRfYnl0ZXMYAiABKAQi+QIKEFJlc3RvcmVNYWluU3BhbnMSEAoIdG90YWxfdXMYASABKAQSGgoSbGl2ZV9yZWZfbG9va3VwX3VzGAIgASgEEhgKEHRhcmdldF9kZWNvZGVfdXMYAyABKAQSJAocY3VzdG9keV9jb21wbGV0ZW5lc3NfcmVhZF91cxgEIAEoBBIZChFxdWFyYW50aW5lX3JlZl91cxgFIAEoBBIlCh1jaGFpbl9zaWduYXR1cmVfbGF3X3JlcGxheV91cxgGIAEoBBIZChF2ZXJkaWN0X2RlY29kZV91cxgHIAEoBBIjChtwcm9tb3RlX2FuZF9jbGVhbnVwX3JlZnNfdXMYCCABKAQSGwoTZnJvbnRpZXJfcmVidWlsZF91cxgJIAEoBBIZChFmcm9udGllcl9zdG9yZV91cxgKIAEoBBI9Cgx2ZXJpZmljYXRpb24YCyABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcyLvAQoTUmVzdG9yZU1haW5SZXNwb25zZRIMCgRoZWFkGAEgASgJEhAKCHZlcmlmaWVkGAIgASgIEgwKBHdhbGsYAyABKAkSMAoFc3BhbnMYBCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5TcGFucxItCgd2ZXJkaWN0GAUgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EjcKCWFzc3VyYW5jZRgGIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhAKCGFjY2VwdGVkGAcgASgIIpsCCgpOb21vc1ZhbHVlEiUKBG51bGwYASABKAsyFS5ub21vcy5rZXJuZWwudjEuTnVsbEgAEhEKB2Jvb2xlYW4YAiABKAhIABIYCg5zaWduZWRfaW50ZWdlchgDIAEoEkgAEhoKEHVuc2lnbmVkX2ludGVnZXIYBCABKARIABIYCg5mbG9hdGluZ19wb2ludBgFIAEoAUgAEg4KBHRleHQYBiABKAlIABIPCgVieXRlcxgHIAEoDEgAEioKBGxpc3QYCCABKAsyGi5ub21vcy5rZXJuZWwudjEuTm9tb3NMaXN0SAASLgoGb2JqZWN0GAkgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0SABCBgoEa2luZCIGCgROdWxsIjgKCU5vbW9zTGlzdBIrCgZ2YWx1ZXMYASADKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZSKTAQoLTm9tb3NTdHJ1Y3QSOAoGZmllbGRzGAEgAygLMigubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0LkZpZWxkc0VudHJ5GkoKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIqCgV2YWx1ZRgCIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlOgI4ASrpEgoRS2VybmVsUmVmdXNhbENvZGUSIwofS0VSTkVMX1JFRlVTQUxfQ09ERV9VTlNQRUNJRklFRBAAEiUKIUtFUk5FTF9SRUZVU0FMX0NPREVfQkFEX1NJR05BVFVSRRABEiQKIEtFUk5FTF9SRUZVU0FMX0NPREVfVU5BVVRIT1JJWkVEEAISJwojS0VSTkVMX1JFRlVTQUxfQ09ERV9QT0xJQ1lfRElTQUJMRUQQAxIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX1VOQ0VSVElGSUVEX1BPTElDWRAEEiMKH0tFUk5FTF9SRUZVU0FMX0NPREVfUkVGRVJFTlRJQUwQBRIvCitLRVJORUxfUkVGVVNBTF9DT0RFX1BPSU5UX1NUQVRFX1VOQVZBSUxBQkxFEAYSJAogS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBfRVhDRUVERUQQBxItCilLRVJORUxfUkVGVVNBTF9DT0RFX0NBUF9DT1VOVF9VTkFWQUlMQUJMRRAIEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfRVZJREVOQ0VfVU5CQUNLRUQQCRImCiJLRVJORUxfUkVGVVNBTF9DT0RFX09SUEhBTl9SRUNFSVBUEAoSNgoyS0VSTkVMX1JFRlVTQUxfQ09ERV9SRUNFSVBUX09OX1RFUk1JTkFMX09CTElHQVRJT04QCxIiCh5LRVJORUxfUkVGVVNBTF9DT0RFX05PVF9NSU5URUQQDBIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX0RPTUFJTl9MSUZFQ1lDTEUQDRIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX1RZUEVfVEFHX01JU01BVENIEA4SLAooS0VSTkVMX1JFRlVTQUxfQ09ERV9SRVRJUkVEX1JFQURfU1VSRkFDRRAPEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQ1JPU1NfV09SS1NQQUNFX0RFQ0xJTkVEEBASKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BR0dSRUdBVEVfSU5WQVJJQU5UEBESKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9XT1JLU1BBQ0VfSU5WQVJJQU5UEBISLgoqS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX0NPTkZMSUNUEBMSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9SRVFVSVJFRBAUEjQKMEtFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfVU5ERUNMQVJFRBAVEjEKLUtFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfSU5WQUxJRBAWEi8KK0tFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfU1RBTEUQFxIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfVU5ERUNMQVJFRBAYEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9QUklWQVRFEBkSMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOREVDTEFSRUQQGhIzCi9LRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5UUlVTVEVEX0tFWRAbEjYKMktFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTlRSVVNURURfU09VUkNFEBwSLAooS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX0ZPUkdFRBAdEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9TVEFMRRAeEi4KKktFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9PVkVSU0laRRAfEjcKM0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9ESVNIT05PUkVEX1NPVVJDRRAgEjUKMUtFUk5FTF9SRUZVU0FMX0NPREVfRVFVSVZPQ0FUSU9OX0VWSURFTkNFX0lOVkFMSUQQIRIzCi9LRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEFUSU9OX1JFQ0VJUFRfSU5WQUxJRBAiEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfS0VZX1JPU1RFUl9NSVNNQVRDSBAjEi8KK0tFUk5FTF9SRUZVU0FMX0NPREVfS0VZX0VQT0NIX05PVF9NT05PVE9OSUMQJBIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX1dSSVRFX0VQT0NIX1NUQUxFECUSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9FTlZFTE9QRV9TSURfTUlTTUFUQ0gQJhIyCi5LRVJORUxfUkVGVVNBTF9DT0RFX1JFVk9LRURfTUVNQkVSX1JFU1VSUkVDVEVEECcSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9GT1JHRURfUFJJTkNJUEFMECgSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9PV05FRF9LRVlfQU5DSE9SECkSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9PV05FRF9SRUNPVkVSWRAqEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfU1VSRkFDRURfQkFTSVNfQUhFQUQQKxIyCi5LRVJORUxfUkVGVVNBTF9DT0RFX1NJR05FUl9FUE9DSF9PVVRfT0ZfV0lORE9XECwSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9FVk9MVkVfUkVGVVNFRBAtEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNUQVRJT05fSU5WQUxJRBAuEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfUEFSRU5UX0RJRF9OT1RfQVRURVNUEC8SKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9DRVJUX0NIQUlOX0JST0tFThAwEioKJktFUk5FTF9SRUZVU0FMX0NPREVfTk9UX1JPT1RFRF9BVF9ST09UEDESKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9ERUxFR0FUSU9OX0lOVkFMSUQQMhIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX1BMQU5fUkVKRUNURUQQMyqKAQoPVmVyaWZ5Q2hhaW5XYWxrEiEKHVZFUklGWV9DSEFJTl9XQUxLX1VOU1BFQ0lGSUVEEAASGgoWVkVSSUZZX0NIQUlOX1dBTEtfRlVMTBABEhwKGFZFUklGWV9DSEFJTl9XQUxLX1NVRkZJWBACEhoKFlZFUklGWV9DSEFJTl9XQUxLX01FTU8QAyqIDAoOUXVlcnlPcGVyYXRpb24SHwobUVVFUllfT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASHAoYUVVFUllfT1BFUkFUSU9OX0VYVFJFTVVNEAESJQohUVVFUllfT1BFUkFUSU9OX1BFTkRJTkdfQ09ORkxJQ1RTEAISLAooUVVFUllfT1BFUkFUSU9OX1BFTkRJTkdfQ09ORkxJQ1RfU1VNTUFSWRADEiAKHFFVRVJZX09QRVJBVElPTl9SRUFEX1BPU1RVUkUQBBIfChtRVUVSWV9PUEVSQVRJT05fQ1VSUkVOVF9MQVcQBRIjCh9RVUVSWV9PUEVSQVRJT05fSU5URVJGQUNFX09GRkVSEAYSJwojUVVFUllfT1BFUkFUSU9OX1JFTEFUSU9OX0dBVEVfT0ZGRVIQBxIdChlRVUVSWV9PUEVSQVRJT05fU0NFTkVfTEFXEAgSIQodUVVFUllfT1BFUkFUSU9OX0lOU1RBTExFRF9MQVcQCRIcChhRVUVSWV9PUEVSQVRJT05fREVTQ1JJQkUQChIjCh9RVUVSWV9PUEVSQVRJT05fS0VSTkVMX1JFU09VUkNFEAsSIwofUVVFUllfT1BFUkFUSU9OX0RFVkVMT1BFUl9TUEFOUxAMEikKJVFVRVJZX09QRVJBVElPTl9ERUNMQVJFRF9DQVBBQklMSVRJRVMQDRIdChlRVUVSWV9PUEVSQVRJT05fUkVBRElORVNTEA4SJAogUVVFUllfT1BFUkFUSU9OX1BST0pFQ1RJT05fU1RBVFMQDxIlCiFRVUVSWV9PUEVSQVRJT05fTUVNT1JZX0RST1BfUFJPQkUQEBIYChRRVUVSWV9PUEVSQVRJT05fV0FSTRAREhsKF1FVRVJZX09QRVJBVElPTl9SRUZSRVNIEBISIAocUVVFUllfT1BFUkFUSU9OX1ZFUklGWV9DSEFJThATEiUKIVFVRVJZX09QRVJBVElPTl9ISVNUT1JZX1BSRUZMSUdIVBAUEhkKFVFVRVJZX09QRVJBVElPTl9ST1VURRAVEhgKFFFVRVJZX09QRVJBVElPTl9NSU5UEBYSIQodUVVFUllfT1BFUkFUSU9OX0NSWVBUT19LRVlHRU4QFxIlCiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1NFQUxfRklFTEQQGBIsCihRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX0JMSU5EX0lOREVYX1RPS0VOEBkSKgomUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9TQ09QRV9LRVkQGhIvCitRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX09XTkVEX0RFVklDRV9SRVFVRVNUEBsSMQotUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9QUkVQQVJFX0FQUFJPVkFMEBwSMQotUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9QUkVQQVJFX1JFQ09WRVJZEB0SIwofUVVFUllfT1BFUkFUSU9OX0NSWVBUT19XUkFQX0tFWRAeEiUKIVFVRVJZX09QRVJBVElPTl9DUllQVE9fVU5XUkFQX0tFWRAfEiEKHVFVRVJZX09QRVJBVElPTl9BVVRIT1JfS0VZR0VOECASJAogUVVFUllfT1BFUkFUSU9OX0FUVEVTVEFUSU9OX1NJR04QIRIgChxRVUVSWV9PUEVSQVRJT05fUkVDRUlQVF9QQVRIECISHQoZUVVFUllfT1BFUkFUSU9OX0NFUlRfU0lHThAjEiUKIVFVRVJZX09QRVJBVElPTl9CSVJUSF9UUlVTVF9TVEFURRAkEiEKHVFVRVJZX09QRVJBVElPTl9FUkFfQ0VSVF9TSUdOECUSKAokUVVFUllfT1BFUkFUSU9OX0RFTEVHQVRJT05fQ0VSVF9TSUdOECYSKQolUVVFUllfT1BFUkFUSU9OX0NBTk9OSUNBTElaRV9GUk9OVElFUhAnEisKJ1FVRVJZX09QRVJBVElPTl9DQU5PTklDQUxJWkVfUFJPSkVDVElPThAoKtICChVSZXNpZGVudENvbXBvbmVudEtpbmQSJwojUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfVU5TUEVDSUZJRUQQABImCiJSRVNJREVOVF9DT01QT05FTlRfS0lORF9GT0xEX1NUQVRFEAESLQopUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfUkVBRF9NT0RFTF9TUUxJVEUQAhIuCipSRVNJREVOVF9DT01QT05FTlRfS0lORF9SRUFEX01PREVMX0lOREVYRVMQAxItCilSRVNJREVOVF9DT01QT05FTlRfS0lORF9TSEFSRURfQVRUUklCVVRFRBAEEiwKKFJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1dPUktTUEFDRV9DQUNIRVMQBRIsCihSRVNJREVOVF9DT01QT05FTlRfS0lORF9HSVRfT0JKRUNUX0NBQ0hFEAYqbAoTS2VybmVsTGF3Q2FwYWJpbGl0eRIlCiFLRVJORUxfTEFXX0NBUEFCSUxJVFlfVU5TUEVDSUZJRUQQABIuCipLRVJORUxfTEFXX0NBUEFCSUxJVFlfU1RBR0VfWkVST19CT09UU1RSQVAQASpZChVDaGVja3BvaW50Q29tcHJlc3Npb24SHwobQ0hFQ0tQT0lOVF9DT01QUkVTU0lPTl9OT05FEAASHwobQ0hFQ0tQT0lOVF9DT01QUkVTU0lPTl9HWklQEAEqkQEKHENoZWNrcG9pbnRWZXJpZmljYXRpb25Qb2xpY3kSMwovQ0hFQ0tQT0lOVF9WRVJJRklDQVRJT05fUE9MSUNZX1ZFUklGWV9DQU5PTklDQUwQABI8CjhDSEVDS1BPSU5UX1ZFUklGSUNBVElPTl9QT0xJQ1lfVFJVU1RfUFJFVklPVVNMWV9WRVJJRklFRBABKoABChNDaGVja3BvaW50QXNzdXJhbmNlEiQKIENIRUNLUE9JTlRfQVNTVVJBTkNFX1VOU1BFQ0lGSUVEEAASIAocQ0hFQ0tQT0lOVF9BU1NVUkFOQ0VfVFJVU1RFRBABEiEKHUNIRUNLUE9JTlRfQVNTVVJBTkNFX1ZFUklGSUVEEAIqqAEKGkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50EiwKKElOVEVOVF9UUkFOU1BPUlRfUkVRVUlSRU1FTlRfVU5TUEVDSUZJRUQQABIuCipJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1NFQUxFRF9DSEFOR0UQARIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX0NPTU1JVF9UUkVFEAIqiQEKFUxpZmVjeWNsZUluc3RhbGxQaGFzZRInCiNMSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9VTlNQRUNJRklFRBAAEiIKHkxJRkVDWUNMRV9JTlNUQUxMX1BIQVNFX0FDVElWRRABEiMKH0xJRkVDWUNMRV9JTlNUQUxMX1BIQVNFX1BFTkRJTkcQAjJZChJOb21vc0tlcm5lbFNlcnZpY2USQwoEQ2FsbBIcLm5vbW9zLmtlcm5lbC52MS5DYWxsUmVxdWVzdBodLm5vbW9zLmtlcm5lbC52MS5DYWxsUmVzcG9uc2ViBnByb3RvMw");
3149
+ file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEizgUKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEiwKBHRlc3QYECABKAsyHC5ub21vcy5rZXJuZWwudjEuVGVzdFJlcXVlc3RIABJIChNzaWduX3ByZXBhcmVkX29mZmVyGBEgASgLMikubm9tb3Mua2VybmVsLnYxLlNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdEgAEkoKFHByZXBhcmVfcmVtb3RlX29mZmVyGBIgASgLMioubm9tb3Mua2VybmVsLnYxLlByZXBhcmVSZW1vdGVPZmZlclJlcXVlc3RIABJOChZzaWduX29mZmVyX3ByZXBhcmF0aW9uGBMgASgLMiwubm9tb3Mua2VybmVsLnYxLlNpZ25PZmZlclByZXBhcmF0aW9uUmVxdWVzdEgAEk4KFnNpZ25fYmlydGhfY2VydGlmaWNhdGUYFCABKAsyLC5ub21vcy5rZXJuZWwudjEuU2lnbkJpcnRoQ2VydGlmaWNhdGVSZXF1ZXN0SABCCwoJb3BlcmF0aW9uIoUGCgxDYWxsUmVzcG9uc2USGAoQcHJvdG9jb2xfdmVyc2lvbhgBIAEoDRISCgpyZXF1ZXN0X2lkGAIgASgJEisKB2ZhaWx1cmUYCiABKAsyGC5ub21vcy5rZXJuZWwudjEuRmFpbHVyZUgAEi0KBG9wZW4YCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT3BlblJlc3BvbnNlSAASLwoFb2ZmZXIYDCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAEi8KBXF1ZXJ5GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5UmVzcG9uc2VIABIxCgZvdXRib3gYDiABKAsyHy5ub21vcy5rZXJuZWwudjEuT3V0Ym94UmVzcG9uc2VIABItCgRzeW5jGA8gASgLMh0ubm9tb3Mua2VybmVsLnYxLlN5bmNSZXNwb25zZUgAEjMKB2N1c3RvZHkYECABKAsyIC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlc3BvbnNlSAASLQoEdGVzdBgRIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5UZXN0UmVzcG9uc2VIABJJChNzaWduX3ByZXBhcmVkX29mZmVyGBIgASgLMioubm9tb3Mua2VybmVsLnYxLlNpZ25QcmVwYXJlZE9mZmVyUmVzcG9uc2VIABJLChRwcmVwYXJlX3JlbW90ZV9vZmZlchgTIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5QcmVwYXJlUmVtb3RlT2ZmZXJSZXNwb25zZUgAEk8KFnNpZ25fb2ZmZXJfcHJlcGFyYXRpb24YFCABKAsyLS5ub21vcy5rZXJuZWwudjEuU2lnbk9mZmVyUHJlcGFyYXRpb25SZXNwb25zZUgAEk8KFnNpZ25fYmlydGhfY2VydGlmaWNhdGUYFSABKAsyLS5ub21vcy5rZXJuZWwudjEuU2lnbkJpcnRoQ2VydGlmaWNhdGVSZXNwb25zZUgAQgkKB291dGNvbWUiVwoHRmFpbHVyZRIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSLQoHZGV0YWlscxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCI8CgxPcGVuUmVzcG9uc2USLAoGcmVzdWx0GAEgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IvcCCg1PZmZlclJlc3BvbnNlEjIKCGFkbWl0dGVkGAEgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyQWRtaXR0ZWRIABIwCgdyZWZ1c2VkGAIgASgLMh0ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVmdXNlZEgAEjsKDWRlYWRfbGV0dGVyZWQYAyABKAsyIi5ub21vcy5rZXJuZWwudjEuT2ZmZXJEZWFkTGV0dGVyZWRIABI4CgtxdWFyYW50aW5lZBgEIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5PZmZlclF1YXJhbnRpbmVkSAASSgoVYmxvY2tlZF9vbl9kZXBlbmRlbmN5GAUgASgLMikubm9tb3Mua2VybmVsLnYxLk9mZmVyQmxvY2tlZE9uRGVwZW5kZW5jeUgAEjIKCHByZXBhcmVkGAYgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUHJlcGFyZWRIAEIJCgdvdXRjb21lIoMDCg1PZmZlckFkbWl0dGVkEgwKBGhlYWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEhcKCmludGVudF9vdXQYAyABKAlIAIgBARIzCgdjcmVhdGVkGAQgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEjQKCGFmZmVjdGVkGAUgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEiwKBGJvcm4YBiADKAsyHi5ub21vcy5rZXJuZWwudjEuQm9ybldvcmtzcGFjZRI1Cg5iaXJ0aF9vdXRjb21lcxgHIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSNwoMa2VybmVsX3NwYW5zGAggASgLMhwubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5zSAGIAQESDwoHZHJ5X3J1bhgJIAEoCEINCgtfaW50ZW50X291dEIPCg1fa2VybmVsX3NwYW5zIi0KEU9mZmVyQWdncmVnYXRlUmVmEgwKBHR5cGUYASABKAkSCgoCaWQYAiABKAkiMAoNQm9ybldvcmtzcGFjZRIRCgl3b3Jrc3BhY2UYASABKAkSDAoEaGVhZBgCIAEoCSKJAwoMQmlydGhPdXRjb21lEhYKCXdvcmtzcGFjZRgBIAEoCUgAiAEBEjMKBnN0YXR1cxgCIAEoDjIjLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWVTdGF0dXMSEwoGcmVhc29uGAMgASgJSAGIAQESEQoEY29kZRgEIAEoCUgCiAEBEhAKCHJlcGxheWVkGAUgASgIEhUKCGxhd19oYXNoGAYgASgJSAOIAQESHQoQcGFyZW50X3dvcmtzcGFjZRgHIAEoCUgEiAEBEhwKD2NoaWxkX3dvcmtzcGFjZRgIIAEoCUgFiAEBEicKGmNlcnRpZmljYXRlX3JlZnVzYWxfcmVhc29uGAkgASgJSAaIAQFCDAoKX3dvcmtzcGFjZUIJCgdfcmVhc29uQgcKBV9jb2RlQgsKCV9sYXdfaGFzaEITChFfcGFyZW50X3dvcmtzcGFjZUISChBfY2hpbGRfd29ya3NwYWNlQh0KG19jZXJ0aWZpY2F0ZV9yZWZ1c2FsX3JlYXNvbiIvChBLZXJuZWxTcGFuTWV0cmljEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiABKAQiowEKCktlcm5lbFNwYW4SDQoFbGFiZWwYASABKAkSEAoIdG90YWxfdXMYAiABKAQSDwoHcmVjb3JkcxgDIAEoBBIxCgZwaGFzZXMYBCADKAsyIS5ub21vcy5rZXJuZWwudjEuS2VybmVsU3Bhbk1ldHJpYxIwCgVub3RlcxgFIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljInEKC0tlcm5lbFNwYW5zEi8KCm9wZXJhdGlvbnMYASADKAsyGy5ub21vcy5rZXJuZWwudjEuS2VybmVsU3BhbhIxCgZlbmdpbmUYAiADKAsyIS5ub21vcy5rZXJuZWwudjEuS2VybmVsU3Bhbk1ldHJpYyKWAQoMT2ZmZXJSZWZ1c2VkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESLwoHcmVmdXNhbBgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsEjEKC2RpYWdub3N0aWNzGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0QgsKCV9vZmZlcl9pZCJ6ChFPZmZlckRlYWRMZXR0ZXJlZBIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEg4KBnJlYXNvbhgCIAEoCRIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQirgEKEE9mZmVyUXVhcmFudGluZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIZChFhdXRob3JlZF9sYXdfaGFzaBgCIAEoCRIYChBjdXJyZW50X2xhd19oYXNoGAMgASgJEg4KBnJlYXNvbhgEIAEoCRIxCgtkaWFnbm9zdGljcxgFIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQigQEKGE9mZmVyQmxvY2tlZE9uRGVwZW5kZW5jeRIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEg4KBmRldGFpbBgCIAEoCRIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQihQEKDU9mZmVyUHJlcGFyZWQSHAoUYXV0aG9yZWRfY2hhbmdlX3VzZGEYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRIhChlhdXRob3Jfc2lnbmF0dXJlX3JlcXVpcmVkGAQgASgIImoKGFNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdBIcChRhdXRob3JlZF9jaGFuZ2VfdXNkYRgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIVCg1hdXRob3Jfc2VjcmV0GAMgASgMIjcKGVNpZ25QcmVwYXJlZE9mZmVyUmVzcG9uc2USGgoSc2lnbmVkX2NoYW5nZV91c2RhGAEgASgMIq0BChlQcmVwYXJlUmVtb3RlT2ZmZXJSZXF1ZXN0EhUKDW9mZmVyX3JlcXVlc3QYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRISCgpwdWJsaWNfa2V5GAQgASgMEhEKCXNpZ25hdHVyZRgFIAEoDBIdChVyZXF1aXJlZF9jdXN0b2R5X2hlYWQYBiABKAkiUAoZT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZRIZChF3b3Jrc3BhY2VfYmluZGluZxgBIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAIgASgJIpkBChpQcmVwYXJlUmVtb3RlT2ZmZXJSZXNwb25zZRI/CgljaGFsbGVuZ2UYASABKAsyKi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZUgAEi8KBW9mZmVyGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIAEIJCgdvdXRjb21lIoABChtTaWduT2ZmZXJQcmVwYXJhdGlvblJlcXVlc3QSFQoNb2ZmZXJfcmVxdWVzdBgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAMgASgJEhUKDWF1dGhvcl9zZWNyZXQYBCABKAwiRQocU2lnbk9mZmVyUHJlcGFyYXRpb25SZXNwb25zZRISCgpwdWJsaWNfa2V5GAEgASgMEhEKCXNpZ25hdHVyZRgCIAEoDCKBAQoNS2VybmVsUmVmdXNhbBIwCgRjb2RlGAEgASgOMiIubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxDb2RlEg8KB21lc3NhZ2UYAiABKAkSLQoHZGV0YWlscxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCK4AwoNUXVlcnlSZXNwb25zZRIsCgV2YWx1ZRgBIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlSAASSgoTYXV0aG9yaXphdGlvbl9jaGVjaxgKIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZUgAEkwKFGF1dGhvcml6YXRpb25fZXhwYW5kGAsgASgLMiwubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZUgAEj4KDW9zZ2lfcmVzb3VyY2UYDCABKAsyJS5ub21vcy5rZXJuZWwudjEuT3NnaVJlc291cmNlUmVzcG9uc2VIABJKChNmcm9udGllcl90cmFuc2l0aW9uGA0gASgLMisubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlSAASSQoYdmVyaWZ5X2NoYWluX2RpYWdub3N0aWNzGBQgASgLMicubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRGlhZ25vc3RpY3NCCAoGcmVzdWx0IkgKDU9zZ2lBdHRyaWJ1dGUSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoCRIRCgR0eXBlGAMgASgJSACIAQFCBwoFX3R5cGUiLAoNT3NnaURpcmVjdGl2ZRIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgJIosBCg5Pc2dpQ2FwYWJpbGl0eRIRCgluYW1lc3BhY2UYASABKAkSMgoKYXR0cmlidXRlcxgCIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpQXR0cmlidXRlEjIKCmRpcmVjdGl2ZXMYAyADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaURpcmVjdGl2ZSKMAQoPT3NnaVJlcXVpcmVtZW50EhEKCW5hbWVzcGFjZRgBIAEoCRIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lBdHRyaWJ1dGUSMgoKZGlyZWN0aXZlcxgDIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpRGlyZWN0aXZlIpoBChRPc2dpUmVzb3VyY2VSZXNwb25zZRITCgtzb3VyY2VfdXNkYRgBIAEoDBI1CgxjYXBhYmlsaXRpZXMYAiADKAsyHy5ub21vcy5rZXJuZWwudjEuT3NnaUNhcGFiaWxpdHkSNgoMcmVxdWlyZW1lbnRzGAMgAygLMiAubm9tb3Mua2VybmVsLnYxLk9zZ2lSZXF1aXJlbWVudCLnAQoTVmVyaWZ5Q2hhaW5TdGVwU3BhbhINCgVpbmRleBgBIAEoBBISCgpjb21taXRfb2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEAoIdG90YWxfdXMYBSABKAQSNgoGcGhhc2VzGAYgASgLMiYubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFBoYXNlcxJACg5lbmdpbmVfdGltaW5ncxgHIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkVuZ2luZVRpbWluZyKYAgoVVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEh4KFnJ1bnRpbWVfbGF3X3JlZnJlc2hfdXMYASABKAQSEwoLbWFuaWZlc3RfdXMYAiABKAQSGQoRbGF3X3Jlc29sdXRpb25fdXMYAyABKAQSHQoVbWFuYWdlZF90cmFuc2l0aW9uX3VzGAQgASgEEhQKDHByaW5jaXBhbF91cxgFIAEoBBIUCgxldm9sdXRpb25fdXMYBiABKAQSGgoSY29sb2NhdGVkX3JlYWRzX3VzGAcgASgEEiEKGXR5cGVkX2luc3RhbGxfdmVyaWZpZXJfdXMYCCABKAQSFAoMYWRtaXNzaW9uX3VzGAkgASgEEg8KB2ZvbGRfdXMYCiABKAQi2gUKFlZlcmlmeUNoYWluRGlhZ25vc3RpY3MSLgoEd2FsaxgBIAEoDjIgLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbldhbGsSEAoIdG90YWxfdXMYAiABKAQSGwoTcmVmZXJlbmNlX2xvb2t1cF91cxgDIAEoBBIaChJyZXBvc2l0b3J5X29wZW5fdXMYBCABKAQSFQoNY2hhaW5fcmVhZF91cxgFIAEoBBIWCg5lbmdpbmVfaW5pdF91cxgGIAEoBBIYChB0aW1lbGluZV9yZWFkX3VzGAcgASgEEhgKEGxhd19oeWRyYXRpb25fdXMYCCABKAQSGwoTcmVjb3ZlcnlfcHJlc2Nhbl91cxgJIAEoBBIYChBmb2xkX2Zyb250aWVyX3VzGAogASgEEjMKBXN0ZXBzGAsgAygLMiQubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFNwYW4SQAoOZW5naW5lX3RpbWluZ3MYDCADKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcSTQoVbGF3X2h5ZHJhdGlvbl90aW1pbmdzGA0gAygLMi4ubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluTGF3SHlkcmF0aW9uVGltaW5nEhkKEWxhd19jbG9zdXJlX2NvdW50GA4gASgEEh4KFmxhd19jbG9zdXJlX2NhY2hlX2hpdHMYDyABKAQSIAoYbGF3X2Nsb3N1cmVfY2FjaGVfbWlzc2VzGBAgASgEEhIKCnN0ZXBfY291bnQYESABKAQSFQoNc3RlcF90b3RhbF91cxgSIAEoBBJBChFzdGVwX3BoYXNlX3RvdGFscxgTIAEoCzImLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpblN0ZXBQaGFzZXMSGgoSb21pdHRlZF9zdGVwX2NvdW50GBQgASgEIjoKF1ZlcmlmeUNoYWluRW5naW5lVGltaW5nEg0KBXBoYXNlGAEgASgJEhAKCHRvdGFsX3VzGAIgASgEIkAKHVZlcmlmeUNoYWluTGF3SHlkcmF0aW9uVGltaW5nEg0KBXBoYXNlGAEgASgJEhAKCHRvdGFsX3VzGAIgASgEIrYCCg1PdXRib3VuZE9mZmVyEgoKAmlkGAEgASgJEhMKC2Rlc3RpbmF0aW9uGAIgASgJEhQKDHNlYWxlZF9vZmZlchgDIAEoDBIUCgxjb250ZW50X3R5cGUYBCABKAkSGAoQc291cmNlX3dvcmtzcGFjZRgFIAEoCRIUCgxjdXN0b2R5X2hlYWQYBiABKAkSFwoPY2F1c2VkX2J5X29mZmVyGAcgASgJEhsKE3NjaGVkdWxlZF9hdF9taWxsaXMYCCABKAQSGgoSZGVhZGxpbmVfYXRfbWlsbGlzGAkgASgEEhQKDGN1c3RvZHlfcGF0aBgKIAEoCRITCgtjdXN0b2R5X29pZBgLIAEoCRIUCgxkZWxpdmVyeV9yZWYYDCABKAkSFQoNb2JsaWdhdGlvbl9pZBgNIAEoCSJ4Cg5PdXRib3hSZXNwb25zZRIuCgZvZmZlcnMYASADKAsyHi5ub21vcy5rZXJuZWwudjEuT3V0Ym91bmRPZmZlchIfChJuZXh0X2R1ZV9hdF9taWxsaXMYAiABKARIAIgBAUIVChNfbmV4dF9kdWVfYXRfbWlsbGlzIjwKDFN5bmNSZXNwb25zZRIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiQgoPV29ya3NwYWNlVGFyZ2V0EgwKBHJlcG8YASABKAkSEQoJd29ya3NwYWNlGAIgASgJEg4KBmJyYW5jaBgDIAEoCSJOCgtPcGVuUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Eg0KBXNwYW5zGAIgASgIImEKDURpcmVjdGl2ZUNhbGwSDgoGZG9tYWluGAEgASgJEhEKCWRpcmVjdGl2ZRgCIAEoCRItCgdwYXlsb2FkGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0ItYCChBBdXRob3JpbmdPcHRpb25zEg0KBWFjdG9yGAEgASgJEhIKCmF1dGhfdG9rZW4YAiABKAwSFQoNYXV0aG9yX3NlY3JldBgDIAEoDBIdChB2YWxpZF9mcm9tX2Vwb2NoGAQgASgESACIAQESHwoScHJpbmNpcGFsX3ZlcmlmaWVkGAUgASgISAGIAQESCwoDcm5nGAYgAygBEhgKEGRlZmVyX3Byb2plY3Rpb24YByABKAgSDQoFc3BhbnMYCCABKAgSDwoHZHJ5X3J1bhgJIAEoCBIQCghzZXF1ZW5jZRgKIAEoBBItCgVjbG9jaxgLIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrEhQKDHByZXBhcmVfb25seRgMIAEoCEITChFfdmFsaWRfZnJvbV9lcG9jaEIVChNfcHJpbmNpcGFsX3ZlcmlmaWVkIkoKDUNhcHR1cmVkQ2xvY2sSFwoPcGh5c2ljYWxfbWlsbGlzGAEgASgEEg8KB2xvZ2ljYWwYAiABKA0SDwoHcmVwbGljYRgDIAEoBCLDAwoQQmlydGhDZXJ0aWZpY2F0ZRINCgVjaGlsZBgBIAEoCRIPCgdmb3VuZGVyGAIgASgJEhAKCHZlcmlmaWVkGAMgASgIEhIKCnBhcmVudF9rZXkYBCABKAwSEQoJcGFyZW50X2lkGAUgASgJEg0KBWVwb2NoGAYgASgDEhEKCXNpZ25hdHVyZRgHIAEoDBIZCgx2ZXJpZmllZF92aWEYCCABKAlIAIgBARIWCglpZHBfdG9rZW4YCSABKAlIAYgBARIbCg5jYXB0dXJlZF9jbG9jaxgKIAEoA0gCiAEBEiEKFGF1dGhfcHJvdmlkZXJfaXNzdWVyGAsgASgJSAOIAQESHwoSYXV0aF9wcm92aWRlcl9qd2tzGAwgASgJSASIAQESIwoWYXV0aF9wcm92aWRlcl9hdWRpZW5jZRgNIAEoCUgFiAEBQg8KDV92ZXJpZmllZF92aWFCDAoKX2lkcF90b2tlbkIRCg9fY2FwdHVyZWRfY2xvY2tCFwoVX2F1dGhfcHJvdmlkZXJfaXNzdWVyQhUKE19hdXRoX3Byb3ZpZGVyX2p3a3NCGQoXX2F1dGhfcHJvdmlkZXJfYXVkaWVuY2UibAobU2lnbkJpcnRoQ2VydGlmaWNhdGVSZXF1ZXN0EjYKC2NlcnRpZmljYXRlGAEgASgLMiEubm9tb3Mua2VybmVsLnYxLkJpcnRoQ2VydGlmaWNhdGUSFQoNc2lnbmVyX3NlY3JldBgCIAEoDCJWChxTaWduQmlydGhDZXJ0aWZpY2F0ZVJlc3BvbnNlEjYKC2NlcnRpZmljYXRlGAEgASgLMiEubm9tb3Mua2VybmVsLnYxLkJpcnRoQ2VydGlmaWNhdGUinAQKDE9mZmVyUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Ei4KBGNhbGwYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQ2FsbEgAEhwKEnNlYWxlZF9jaGFuZ2VfdXNkYRgHIAEoDEgAEjQKCWF1dGhvcmluZxgDIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpbmdPcHRpb25zEhAKCGxhd191c2R6GAQgASgMEjMKDGF0dGVzdGF0aW9ucxgFIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5BdHRlc3RlZFJlYWQSPQoSY29uZmxpY3Rfc25hcHNob3RzGAYgAygLMiEubm9tb3Mua2VybmVsLnYxLkNvbmZsaWN0U25hcHNob3QSGgoSZXhlY3V0aW9uX2xhd191c2R6GAggASgMEiAKE2NvbnRyb2xsZXJfbGF3X2hhc2gYCSABKAlIAYgBARIdChBjYW5kaWRhdGVfY29tbWl0GAogASgJSAKIAQESPAoRYmlydGhfY2VydGlmaWNhdGUYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZUIICgZpbnRlbnRCFgoUX2NvbnRyb2xsZXJfbGF3X2hhc2hCEwoRX2NhbmRpZGF0ZV9jb21taXQikwEKDEF0dGVzdGVkUmVhZBIQCghxdWVyeV9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSKwoGcmVzdWx0GAMgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWUSEwoLYXR0ZXN0YXRpb24YBCABKAwidQoQQ29uZmxpY3RTbmFwc2hvdBIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSDQoFZmllbGQYAyABKAkSFQoNdGFyZ2V0X3NjaGVtYRgEIAEoCRINCgV0b2tlbhgFIAEoCSKwBgoMUXVlcnlSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSMgoJYXV0aG9yaXR5GAIgASgLMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5QXV0aG9yaXR5Eg0KBXNwYW5zGAMgASgIEioKBHJvd3MYCiABKAsyGi5ub21vcy5rZXJuZWwudjEuUm93c1F1ZXJ5SAASKgoEcGFnZRgLIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5QYWdlUXVlcnlIABIrCgVieV9pZBgMIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5CeUlkUXVlcnlIABI5CgxyZXNvbHZlX3JlZnMYDSABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZnNRdWVyeUgAEkUKEnJlZmVyZW5jZV92ZXJzaW9ucxgOIAEoCzInLm5vbW9zLmtlcm5lbC52MS5SZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5SAASLAoFY291bnQYDyABKAsyGy5ub21vcy5rZXJuZWwudjEuVGFsbHlRdWVyeUgAEioKA3N1bRgQIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5UYWxseVF1ZXJ5SAASMAoHc3BhdGlhbBgRIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5TcGF0aWFsUXVlcnlIABIsCgVuYW1lZBgSIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5OYW1lZFF1ZXJ5SAASSQoTYXV0aG9yaXphdGlvbl9jaGVjaxgTIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXF1ZXN0SAASSwoUYXV0aG9yaXphdGlvbl9leHBhbmQYFCABKAsyKy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGFuZFJlcXVlc3RIABJJChNmcm9udGllcl90cmFuc2l0aW9uGBUgASgLMioubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlcXVlc3RIAEIHCgVxdWVyeSKSAQoOUXVlcnlBdXRob3JpdHkSFwoPcHJpbmNpcGFsX2NsYWltGAEgASgJEhIKCmF1dGhfdG9rZW4YAiABKAwSEAoIbm93X3VuaXgYAyABKAQSFQoNYXV0aG9yX3NlY3JldBgEIAEoDBIqCgRrZXlzGAUgAygLMhwubm9tb3Mua2VybmVsLnYxLkluamVjdGVkS2V5IjgKC0luamVjdGVkS2V5Eg0KBXNjb3BlGAEgASgJEg0KBWVwb2NoGAIgASgEEgsKA2tleRgDIAEoDCJbCglSb3dzUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCXByaW5jaXBhbBgDIAEoCSJ5CglQYWdlUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Eg0KBWxpbWl0GAMgASgNEg0KBWFmdGVyGAQgASgJEhEKCXByaW5jaXBhbBgFIAEoCSJMCglCeUlkUXVlcnkSFgoOYWdncmVnYXRlX3R5cGUYASABKAkSFAoMYWdncmVnYXRlX2lkGAIgASgJEhEKCXByaW5jaXBhbBgDIAEoCSJcCghOb21vc1JlZhIRCgl3b3Jrc3BhY2UYASABKAkSFgoOYWdncmVnYXRlX3R5cGUYAiABKAkSFAoMYWdncmVnYXRlX2lkGAMgASgJEg8KB3ZlcnNpb24YBCABKAkiTgoQUmVzb2x2ZVJlZnNRdWVyeRInCgRyZWZzGAEgAygLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhEKCXByaW5jaXBhbBgCIAEoCSJOChZSZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5EjQKBHJlZnMYASADKAsyJi5ub21vcy5rZXJuZWwudjEuUmVmZXJlbmNlVmVyc2lvbkNoZWNrIoQBChVSZWZlcmVuY2VWZXJzaW9uQ2hlY2sSKQoGcGlubmVkGAEgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEikKBnNlcmllcxgCIAEoCzIZLm5vbW9zLmtlcm5lbC52MS5Ob21vc1JlZhIVCg1jdXJyZW50X2ZpZWxkGAMgASgJIlwKClRhbGx5UXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCXByaW5jaXBhbBgDIAEoCSJeCgxTcGF0aWFsUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCXByaW5jaXBhbBgDIAEoCSJxCgpOYW1lZFF1ZXJ5EjIKCW9wZXJhdGlvbhgBIAEoDjIfLm5vbW9zLmtlcm5lbC52MS5RdWVyeU9wZXJhdGlvbhIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QisQEKGUZyb250aWVyVHJhbnNpdGlvblJlcXVlc3QSDgoGZG9tYWluGAEgASgJEhYKDmNhbmRpZGF0ZV9oYXNoGAIgASgJEg8KB2F0X2hhc2gYAyABKAkSIQoZYWNrbm93bGVkZ2VtZW50X3ByaW5jaXBhbBgEIAEoCRIgChNyZXN0b3JlX3ByZXZpb3VzX29mGAUgASgJSACIAQFCFgoUX3Jlc3RvcmVfcHJldmlvdXNfb2YiWgolRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25NYXBFbnRyeRIYChBzb3VyY2Vfc3RhYmxlX2lkGAEgASgJEhcKD2Fja25vd2xlZGdlbWVudBgCIAEoCSL1AQoeRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25zEg8KB3JldGlyZWQYASADKAkSRwoHcmV0eXBlZBgCIAMoCzI2Lm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EkcKB3JlYmluZHMYAyADKAsyNi5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25NYXBFbnRyeRIcCg9hY2tub3dsZWRnZWRfYnkYBCABKAlIAIgBAUISChBfYWNrbm93bGVkZ2VkX2J5Ij0KG0Zyb250aWVyVHJhbnNpdGlvblZpb2xhdGlvbhIOCgZkb21haW4YASABKAkSDgoGZGV0YWlsGAIgASgJItcCChpGcm9udGllclRyYW5zaXRpb25SZXNwb25zZRIPCgdhdF9oYXNoGAEgASgJEhkKDGN1cnJlbnRfaGFzaBgCIAEoCUgAiAEBEhUKDWF0X3N0YXRlX3Jvb3QYAyABKAkSFgoOY2FuZGlkYXRlX2hhc2gYBCABKAkSDgoGZG9tYWluGAUgASgJEg8KB2RvbWFpbnMYBiADKAkSDQoFcmVhZHkYByABKAgSQAoKdmlvbGF0aW9ucxgIIAMoCzIsLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25WaW9sYXRpb24SSgoMZGlzcG9zaXRpb25zGAkgASgLMi8ubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uc0gBiAEBQg8KDV9jdXJyZW50X2hhc2hCDwoNX2Rpc3Bvc2l0aW9ucyIvChNBdXRob3JpemF0aW9uT2JqZWN0EgwKBHR5cGUYASABKAkSCgoCaWQYAiABKAkiVAoUQXV0aG9yaXphdGlvblN1YmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCRIVCghyZWxhdGlvbhgDIAEoCUgAiAEBQgsKCV9yZWxhdGlvbiKcAQoYUmVsYXRpb25zaGlwVHVwbGVBZGRyZXNzEjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEAoIcmVsYXRpb24YAiABKAkSNgoHc3ViamVjdBgDIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uU3ViamVjdCKBAQoYQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5EiMKGWN1cnJlbnRfdmVyaWZpZWRfZnJvbnRpZXIYASABKAhIABIZCg9hdF9sZWFzdF9jb21taXQYAiABKAlIABIWCgxleGFjdF9jb21taXQYAyABKAlIAEINCgtyZXF1aXJlbWVudCJmCh1BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIUCgxjb25kaXRpb25faWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IvcCChlBdXRob3JpemF0aW9uQ2hlY2tSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0Ej4KC2NvbnNpc3RlbmN5GAQgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25zaXN0ZW5jeRI/Cgdjb250ZXh0GAUgAygLMi4ubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EiAKE2V4cGVjdGVkX21vZGVsX2hhc2gYBiABKAlIAIgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAcgASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoIu0CChpBdXRob3JpemF0aW9uRXhwYW5kUmVxdWVzdBI2CghyZXNvdXJjZRgBIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uT2JqZWN0EhIKCnBlcm1pc3Npb24YAiABKAkSPgoLY29uc2lzdGVuY3kYAyABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBCADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgFIAEoCUgAiAEBEg0KBWxpbWl0GAYgASgNEhIKBWFmdGVyGAcgASgJSAGIAQESGwoTaW5jbHVkZV9leHBsYW5hdGlvbhgIIAEoCEIWChRfZXhwZWN0ZWRfbW9kZWxfaGFzaEIICgZfYWZ0ZXIivQEKGVJlbGF0aW9uc2hpcFR1cGxlRXZpZGVuY2USOAoFdHVwbGUYASABKAsyKS5ub21vcy5rZXJuZWwudjEuUmVsYXRpb25zaGlwVHVwbGVBZGRyZXNzEhAKCHR1cGxlX2lkGAIgASgJEhoKEmFzc2VydGlvbl9ldmVudF9pZBgDIAEoCRIgChNyZXZvY2F0aW9uX2V2ZW50X2lkGAQgASgJSACIAQFCFgoUX3Jldm9jYXRpb25fZXZlbnRfaWQi4QMKGEF1dGhvcml6YXRpb25FeHBsYW5hdGlvbhJGCglvcGVyYXRpb24YASABKA4yMy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uLk9wZXJhdGlvbhIQCghyZWxhdGlvbhgCIAEoCRIOCgZyZXN1bHQYAyABKAgSPAoIZXZpZGVuY2UYBCADKAsyKi5ub21vcy5rZXJuZWwudjEuUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI7CghjaGlsZHJlbhgFIAMoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24i3wEKCU9wZXJhdGlvbhIZChVPUEVSQVRJT05fVU5TUEVDSUZJRUQQABIUChBPUEVSQVRJT05fRElSRUNUEAESHgoaT1BFUkFUSU9OX0NPTVBVVEVEX1VTRVJTRVQQAhIeChpPUEVSQVRJT05fVFVQTEVfVE9fVVNFUlNFVBADEhMKD09QRVJBVElPTl9VTklPThAEEhoKFk9QRVJBVElPTl9JTlRFUlNFQ1RJT04QBRIXChNPUEVSQVRJT05fRVhDTFVTSU9OEAYSFwoTT1BFUkFUSU9OX0NPTkRJVElPThAHIncKGkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEiAKGGF1dGhvcml6YXRpb25fbW9kZWxfaGFzaBgBIAEoCRIhChlyZWxhdGlvbnNoaXBfc3RhdGVfY29tbWl0GAIgASgJEhQKDGNvbnRleHRfaGFzaBgDIAEoDCK+AQoaQXV0aG9yaXphdGlvbkNoZWNrUmVzcG9uc2USDwoHYWxsb3dlZBgBIAEoCBI6CgViYXNpcxgCIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRGVjaXNpb25CYXNpcxJDCgtleHBsYW5hdGlvbhgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAIgBAUIOCgxfZXhwbGFuYXRpb24igwIKG0F1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZRI3CghzdWJqZWN0cxgBIAMoCzIlLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uU3ViamVjdBI6CgViYXNpcxgCIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRGVjaXNpb25CYXNpcxIRCgRuZXh0GAMgASgJSACIAQESQwoLZXhwbGFuYXRpb24YBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uSAGIAQFCBwoFX25leHRCDgoMX2V4cGxhbmF0aW9uInAKDU91dGJveFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBItCgVjbG9jaxgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrImMKC1N5bmNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEQoJZnJvbV9iYXNlGAIgASgJEg8KB3RvX2hlYWQYAyABKAkiUwoLVGVzdFJlcXVlc3QSNwoIc2V0X3Jvb3QYASABKAsyIy5ub21vcy5rZXJuZWwudjEuU2V0VGVzdFJvb3RSZXF1ZXN0SABCCwoJb3BlcmF0aW9uIigKElNldFRlc3RSb290UmVxdWVzdBISCgpwdWJsaWNfa2V5GAEgASgMIj0KDFRlc3RSZXNwb25zZRItCgZyZXN1bHQYASABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkItULCg5DdXN0b2R5UmVxdWVzdBI3CgpwYWNrX2RlbHRhGAogASgLMiEubm9tb3Mua2VybmVsLnYxLlBhY2tEZWx0YVJlcXVlc3RIABI3CgphcHBseV9wYWNrGAsgASgLMiEubm9tb3Mua2VybmVsLnYxLkFwcGx5UGFja1JlcXVlc3RIABI3CgpyZXBvX3N0YXRzGAwgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1JlcXVlc3RIABI9Cg1pbnRlbnRzX2Fib3ZlGA0gASgLMiQubm9tb3Mua2VybmVsLnYxLkludGVudHNBYm92ZVJlcXVlc3RIABI/Cg5pbnNwZWN0X2NoYW5nZRgOIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q2hhbmdlUmVxdWVzdEgAEk4KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLC5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0SAASUAoXaW5zcGVjdF9yZWZ1c2FsX3ZlcmRpY3QYECABKAsyLS5ub21vcy5rZXJuZWwudjEuSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdEgAEjUKCXJlYWRfYmxvYhgRIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5SZWFkQmxvYlJlcXVlc3RIABI5CgtyZXNvbHZlX3JlZhgSIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVxdWVzdEgAEjUKCWxpc3RfcmVmcxgTIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5MaXN0UmVmc1JlcXVlc3RIABI1Cgl3cml0ZV9yZWYYFCABKAsyIC5ub21vcy5rZXJuZWwudjEuV3JpdGVSZWZSZXF1ZXN0SAASNwoKZGVsZXRlX3JlZhgVIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5EZWxldGVSZWZSZXF1ZXN0SAASRAoRd3JpdGVfbWV0YV9jb21taXQYFiABKAsyJy5ub21vcy5rZXJuZWwudjEuV3JpdGVNZXRhQ29tbWl0UmVxdWVzdEgAEkIKEGxhd19jbG9zdXJlX2luZm8YFyABKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3Q2xvc3VyZUluZm9SZXF1ZXN0SAASRQoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlcXVlc3RIABJFChFjaGVja3BvaW50X2ltcG9ydBgZIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50SW1wb3J0UmVxdWVzdEgAEkMKEGNhcGFjaXR5X3Jlc2VydmUYGiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ2FwYWNpdHlSZXNlcnZlUmVxdWVzdEgAEjsKDHJlc3RvcmVfbWFpbhgbIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlcXVlc3RIABJOChZyZXNvbHZlX3N0YXRlX3Bvc2l0aW9uGBwgASgLMiwubm9tb3Mua2VybmVsLnYxLlJlc29sdmVTdGF0ZVBvc2l0aW9uUmVxdWVzdEgAEkcKEnJlc2lkZW50X2Zvb3RwcmludBgdIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudEZvb3RwcmludFJlcXVlc3RIABJBCg9oaXN0b3J5X3N1bW1hcnkYHiABKAsyJi5ub21vcy5rZXJuZWwudjEuSGlzdG9yeVN1bW1hcnlSZXF1ZXN0SAASWgoccHJvdmVfY29tcGFjdGlvbl9lcXVpdmFsZW5jZRgfIAEoCzIyLm5vbW9zLmtlcm5lbC52MS5Qcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlcXVlc3RIAEILCglvcGVyYXRpb24iKAoYUmVzaWRlbnRGb290cHJpbnRSZXF1ZXN0EgwKBGRlZXAYASABKAginwIKEVJlc2lkZW50Rm9vdHByaW50EhEKCXdvcmtzcGFjZRgBIAEoCRIOCgZicmFuY2gYAiABKAkSGAoQcmVhZF9tb2RlbF9ieXRlcxgDIAEoBBIdChVyZWFkX21vZGVsX3J1c3RfYnl0ZXMYBCABKAQSGAoQZm9sZF9zdGF0ZV9ieXRlcxgFIAEoBBITCgtmb2xkX2ltYWdlcxgGIAEoDRIfChdzaGFyZWRfYXR0cmlidXRlZF9ieXRlcxgHIAEoBBISCgphZ2dyZWdhdGVzGAggASgEEjYKCmNvbXBvbmVudHMYCSADKAsyIi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRDb21wb25lbnQSEgoKY29tcHV0ZV91cxgKIAEoBCJpChFSZXNpZGVudENvbXBvbmVudBI0CgRraW5kGAEgASgOMiYubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Q29tcG9uZW50S2luZBINCgVieXRlcxgCIAEoBBIPCgdjZWlsaW5nGAMgASgIIsoBChlSZXNpZGVudEZvb3RwcmludFJlc3BvbnNlEjUKCXJlc2lkZW50cxgBIAMoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudEZvb3RwcmludBIcChRhbGxvY2F0b3JfbGl2ZV9ieXRlcxgCIAEoBBIYChBhdHRyaWJ1dGVkX2J5dGVzGAMgASgEEhkKEXVuYWNjb3VudGVkX2J5dGVzGAQgASgEEhUKDWFjY291bnRpbmdfdXMYBSABKAQSDAoEZGVlcBgGIAEoCCKcAQoQUGFja0RlbHRhUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKBGhlYWQYAiABKAlIAIgBARIRCgRiYXNlGAMgASgJSAGIAQESDgoGYnJhbmNoGAQgASgJEh0KEHN0YWdlZF9wYWNrX2ZpbGUYBSABKAlIAogBAUIHCgVfaGVhZEIHCgVfYmFzZUITChFfc3RhZ2VkX3BhY2tfZmlsZSJyChBBcHBseVBhY2tSZXF1ZXN0EgwKBHJlcG8YASABKAkSDgoEcGFjaxgCIAEoDEgAEhoKEHN0YWdlZF9wYWNrX2ZpbGUYBCABKAlIABIRCgRoZWFkGAMgASgJSAGIAQFCCAoGc291cmNlQgcKBV9oZWFkIiAKEFJlcG9TdGF0c1JlcXVlc3QSDAoEcmVwbxgBIAEoCSKsAQoTSW50ZW50c0Fib3ZlUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKBGhlYWQYAiABKAlIAIgBARIRCgRiYXNlGAMgASgJSAGIAQESDgoGYnJhbmNoGAQgASgJEg0KBWxpbWl0GAUgASgEEhgKEGNvbXBsZXRlX2xvZ2ljYWwYBiABKAgSFgoOY29tcGFjdF9zdG9yZWQYByABKAhCBwoFX2hlYWRCBwoFX2Jhc2UibQoVSGlzdG9yeVN1bW1hcnlSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEg4KBmJyYW5jaBgDIAEoCRIRCgRiYXNlGAQgASgJSAGIAQFCBwoFX2hlYWRCBwoFX2Jhc2UiKwoUSW5zcGVjdENoYW5nZVJlcXVlc3QSEwoLY2hhbmdlX3VzZGEYASABKAwi3wEKDlJlZnVzYWxWZXJkaWN0EhUKCG9mZmVyX2lkGAEgASgJSACIAQESEAoDb2lkGAIgASgJSAGIAQESEwoGZG9tYWluGAMgASgJSAKIAQESGQoMZGlyZWN0aXZlX2lkGAQgASgJSAOIAQESFAoHc2Vzc2lvbhgFIAEoCUgEiAEBEhEKCXBhcmtlZF9hdBgGIAEoCRIOCgZyZWFzb24YByABKAlCCwoJX29mZmVyX2lkQgYKBF9vaWRCCQoHX2RvbWFpbkIPCg1fZGlyZWN0aXZlX2lkQgoKCF9zZXNzaW9uIk8KG0VuY29kZVJlZnVzYWxWZXJkaWN0UmVxdWVzdBIwCgd2ZXJkaWN0GAEgASgLMh8ubm9tb3Mua2VybmVsLnYxLlJlZnVzYWxWZXJkaWN0IjQKHEluc3BlY3RSZWZ1c2FsVmVyZGljdFJlcXVlc3QSFAoMdmVyZGljdF91c2RhGAEgASgMItQBChVDb21wYWN0aW9uRXF1aXZhbGVuY2USEwoLc291cmNlX2hlYWQYASABKAkSFgoOc291cmNlX2dlbmVzaXMYAiABKAkSFgoOY2FuZGlkYXRlX2hlYWQYAyABKAkSGQoRY2FuZGlkYXRlX2dlbmVzaXMYBCABKAkSFgoOc291cmNlX2ludGVudHMYBSABKAQSFwoPY2FycmllZF9pbnRlbnRzGAYgASgEEhYKDnBhcmtlZF9pbnRlbnRzGAcgASgEEhIKCmVxdWl2YWxlbnQYCCABKAgifQohUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXF1ZXN0EhMKC3NvdXJjZV9yZXBvGAEgASgJEhMKC3NvdXJjZV9oZWFkGAIgASgJEhYKDmNhbmRpZGF0ZV9yZXBvGAMgASgJEhYKDmNhbmRpZGF0ZV9oZWFkGAQgASgJIjoKD1JlYWRCbG9iUmVxdWVzdBIMCgRyZXBvGAEgASgJEgsKA29pZBgCIAEoCRIMCgRwYXRoGAMgASgJIjQKEVJlc29sdmVSZWZSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJcmVmZXJlbmNlGAIgASgJIi8KD0xpc3RSZWZzUmVxdWVzdBIMCgRyZXBvGAEgASgJEg4KBnByZWZpeBgCIAEoCSJCCg9Xcml0ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkSDgoGdGFyZ2V0GAMgASgJIjMKEERlbGV0ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkiKQoITWV0YUZpbGUSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgMIq4BChZXcml0ZU1ldGFDb21taXRSZXF1ZXN0EgwKBHJlcG8YASABKAkSDwoHcGFyZW50cxgCIAMoCRIoCgVmaWxlcxgDIAMoCzIZLm5vbW9zLmtlcm5lbC52MS5NZXRhRmlsZRIPCgdtZXNzYWdlGAQgASgJEhQKDHRpbWVfc2Vjb25kcxgFIAEoEhIWCglyZWZlcmVuY2UYBiABKAlIAIgBAUIMCgpfcmVmZXJlbmNlImcKFUxhd0Nsb3N1cmVJbmZvUmVxdWVzdBIUCgxjbG9zdXJlX2ZpbGUYASABKAkSOAoKY2FwYWJpbGl0eRgCIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxMYXdDYXBhYmlsaXR5IocBChdDaGVja3BvaW50RXhwb3J0UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EiEKFHN0YWdlZF9mcm9udGllcl9maWxlGAIgASgJSACIAQFCFwoVX3N0YWdlZF9mcm9udGllcl9maWxlIkEKC0Zyb250aWVySGxjEhAKCHBoeXNpY2FsGAEgASgEEg8KB2xvZ2ljYWwYAiABKA0SDwoHcmVwbGljYRgDIAEoBCLdBAoXVmVyaWZpZWRGcm9udGllclJlY2VpcHQSFgoOZm9ybWF0X3ZlcnNpb24YASABKA0SCwoDb2lkGAIgASgJEg8KB2ludGVudHMYAyABKAQSEwoLcGxhbnNfcmVydW4YBCABKAQSHAoPY29udHJvbGxlcl9oYXNoGAUgASgJSACIAQESGQoRaW5zdGFsbGVkX2RvbWFpbnMYBiADKAkSDgoGbGluZWFyGAcgASgIEjMKCGxhc3RfaGxjGAggASgLMhwubm9tb3Mua2VybmVsLnYxLkZyb250aWVySGxjSAGIAQESFAoHbGFzdF9pZBgJIAEoCUgCiAEBEhEKCXN0YXRlX29pZBgKIAEoCRIUCgxzdGF0ZV9zaGEyNTYYCyABKAkSOQoOc3RhdGVfbGFzdF9obGMYDCABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIA4gBARIaCg1zdGF0ZV9sYXN0X2lkGA0gASgJSASIAQESFwoPbWFuaWZlc3Rfc2hhMjU2GA4gASgJEh4KFmxhd19jbG9zdXJlX2lkZW50aXRpZXMYDyADKAkSGgoScmVzb2x2YWJsZV9kb21haW5zGBAgAygJEiIKFXByb2plY3Rpb25fc3RhdGVfcm9vdBgRIAEoCUgFiAEBQhIKEF9jb250cm9sbGVyX2hhc2hCCwoJX2xhc3RfaGxjQgoKCF9sYXN0X2lkQhEKD19zdGF0ZV9sYXN0X2hsY0IQCg5fc3RhdGVfbGFzdF9pZEIYChZfcHJvamVjdGlvbl9zdGF0ZV9yb290IkUKFUZvbGRGcm9udGllckFnZ3JlZ2F0ZRIUCgxhZ2dyZWdhdGVfaWQYASABKAkSFgoOYWdncmVnYXRlX3VzZGEYAiABKAwiQQoXRm9sZEZyb250aWVyRmluZ2VycHJpbnQSEQoJaW50ZW50X2lkGAEgASgJEhMKC2ZpbmdlcnByaW50GAIgASgJItYDChRGb2xkRnJvbnRpZXJTbmFwc2hvdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgN0aXAYAiABKAkSDwoHZ2VuZXNpcxgDIAEoCRIVCg1oaXN0b3J5X2RlcHRoGAQgASgEEjoKCmFnZ3JlZ2F0ZXMYBSADKAsyJi5ub21vcy5rZXJuZWwudjEuRm9sZEZyb250aWVyQWdncmVnYXRlEjgKDWhsY193YXRlcm1hcmsYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAIgBARIzCghsYXN0X2hsYxgHIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gBiAEBEhQKB2xhc3RfaWQYCCABKAlIAogBARIWCg5zdHJpa2VfdGFyZ2V0cxgJIAMoCRJFChNpbnRlbnRfZmluZ2VycHJpbnRzGAogAygLMigubm9tb3Mua2VybmVsLnYxLkZvbGRGcm9udGllckZpbmdlcnByaW50EhcKCnN0YXRlX3Jvb3QYCyABKAlIA4gBAUIQCg5faGxjX3dhdGVybWFya0ILCglfbGFzdF9obGNCCgoIX2xhc3RfaWRCDQoLX3N0YXRlX3Jvb3QimwMKGFN0b3JlZENoZWNrcG9pbnRNYW5pZmVzdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRITCgZjdXJzb3IYAiABKAlIAIgBARIYChBjaGVja3BvaW50X2J5dGVzGAMgASgEEhAKCGxhd19oYXNoGAQgASgJEjsKC2NvbXByZXNzaW9uGAUgASgOMiYubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRDb21wcmVzc2lvbhIRCglyYXdfYnl0ZXMYBiABKAQSFAoMc3RvcmVkX2J5dGVzGAcgASgEEh0KFWZyb250aWVyX3N0b3JlZF9ieXRlcxgIIAEoBBIXCgpzdGF0ZV9yb290GAkgASgJSAGIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgKIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgCiAEBQgkKB19jdXJzb3JCDQoLX3N0YXRlX3Jvb3RCHAoaX3ZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQiwQMKF0NoZWNrcG9pbnRJbXBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEgoIZnJvbnRpZXIYAiABKAxIABIeChRzdGFnZWRfZnJvbnRpZXJfZmlsZRgGIAEoCUgAEhMKBmN1cnNvchgDIAEoCUgBiAEBEhcKCnN0YXRlX3Jvb3QYBCABKAlIAogBARINCgVzcGFucxgFIAEoCBIRCgRoZWFkGAcgASgJSAOIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgIIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgEiAEBEkoKE3ZlcmlmaWNhdGlvbl9wb2xpY3kYCSABKA4yLS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludFZlcmlmaWNhdGlvblBvbGljeUIRCg9mcm9udGllcl9zb3VyY2VCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIHCgVfaGVhZEIcChpfdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdCIxChZDYXBhY2l0eVJlc2VydmVSZXF1ZXN0EhcKD2FnZ3JlZ2F0ZV9jb3VudBgBIAEoBCJpChJSZXN0b3JlTWFpblJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIMCgRoZWFkGAIgASgJEhMKC2RpYWdub3N0aWNzGAMgASgIImkKG1Jlc29sdmVTdGF0ZVBvc2l0aW9uUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCW1haW5faGVhZBgCIAEoCRIVCg1oaW50ZWRfY29tbWl0GAMgASgJEhIKCnN0YXRlX3Jvb3QYBCABKAki4wsKD0N1c3RvZHlSZXNwb25zZRI4CgpwYWNrX2RlbHRhGAogASgLMiIubm9tb3Mua2VybmVsLnYxLlBhY2tEZWx0YVJlc3BvbnNlSAASOAoKYXBwbHlfcGFjaxgLIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5BcHBseVBhY2tSZXNwb25zZUgAEjgKCnJlcG9fc3RhdHMYDCABKAsyIi5ub21vcy5rZXJuZWwudjEuUmVwb1N0YXRzUmVzcG9uc2VIABI+Cg1pbnRlbnRzX2Fib3ZlGA0gASgLMiUubm9tb3Mua2VybmVsLnYxLkludGVudHNBYm92ZVJlc3BvbnNlSAASQAoOaW5zcGVjdF9jaGFuZ2UYDiABKAsyJi5ub21vcy5rZXJuZWwudjEuSW5zcGVjdENoYW5nZVJlc3BvbnNlSAASTwoWZW5jb2RlX3JlZnVzYWxfdmVyZGljdBgPIAEoCzItLm5vbW9zLmtlcm5lbC52MS5FbmNvZGVSZWZ1c2FsVmVyZGljdFJlc3BvbnNlSAASUQoXaW5zcGVjdF9yZWZ1c2FsX3ZlcmRpY3QYECABKAsyLi5ub21vcy5rZXJuZWwudjEuSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2VIABI2CglyZWFkX2Jsb2IYESABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVhZEJsb2JSZXNwb25zZUgAEjoKC3Jlc29sdmVfcmVmGBIgASgLMiMubm9tb3Mua2VybmVsLnYxLlJlc29sdmVSZWZSZXNwb25zZUgAEjYKCWxpc3RfcmVmcxgTIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5MaXN0UmVmc1Jlc3BvbnNlSAASMgoJd3JpdGVfcmVmGBQgASgLMh0ubm9tb3Mua2VybmVsLnYxLkFja25vd2xlZGdlZEgAEjMKCmRlbGV0ZV9yZWYYFSABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkSAASRQoRd3JpdGVfbWV0YV9jb21taXQYFiABKAsyKC5ub21vcy5rZXJuZWwudjEuV3JpdGVNZXRhQ29tbWl0UmVzcG9uc2VIABJDChBsYXdfY2xvc3VyZV9pbmZvGBcgASgLMicubm9tb3Mua2VybmVsLnYxLkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2VIABJGChFjaGVja3BvaW50X2V4cG9ydBgYIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50RXhwb3J0UmVzcG9uc2VIABJGChFjaGVja3BvaW50X2ltcG9ydBgZIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50SW1wb3J0UmVzcG9uc2VIABJEChBjYXBhY2l0eV9yZXNlcnZlGBogASgLMigubm9tb3Mua2VybmVsLnYxLkNhcGFjaXR5UmVzZXJ2ZVJlc3BvbnNlSAASPAoMcmVzdG9yZV9tYWluGBsgASgLMiQubm9tb3Mua2VybmVsLnYxLlJlc3RvcmVNYWluUmVzcG9uc2VIABJPChZyZXNvbHZlX3N0YXRlX3Bvc2l0aW9uGBwgASgLMi0ubm9tb3Mua2VybmVsLnYxLlJlc29sdmVTdGF0ZVBvc2l0aW9uUmVzcG9uc2VIABJIChJyZXNpZGVudF9mb290cHJpbnQYHSABKAsyKi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRGb290cHJpbnRSZXNwb25zZUgAEkIKD2hpc3Rvcnlfc3VtbWFyeRgeIAEoCzInLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5U3VtbWFyeVJlc3BvbnNlSAASWwoccHJvdmVfY29tcGFjdGlvbl9lcXVpdmFsZW5jZRgfIAEoCzIzLm5vbW9zLmtlcm5lbC52MS5Qcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlc3BvbnNlSABCCwoJb3BlcmF0aW9uIjAKEVBhY2tEZWx0YVJlc3BvbnNlEgwKBHBhY2sYASABKAwSDQoFYnl0ZXMYAiABKAQiPAoRQXBwbHlQYWNrUmVzcG9uc2USFAoMb2JqZWN0X2NvdW50GAEgASgEEhEKCXBhY2tfaGFzaBgCIAEoCSKnAQoRUmVwb1N0YXRzUmVzcG9uc2USEwoLdG90YWxfYnl0ZXMYASABKAQSFAoMb2JqZWN0X2J5dGVzGAIgASgEEhUKDWxvb3NlX29iamVjdHMYAyABKAQSEwoLbG9vc2VfYnl0ZXMYBCABKAQSEgoKcGFja19maWxlcxgFIAEoBBISCgpwYWNrX2J5dGVzGAYgASgEEhMKC2luZGV4X2J5dGVzGAcgASgEIuIBCgxJbnRlbnRSZWNvcmQSCwoDb2lkGAEgASgJEhEKCWludGVudF9pZBgCIAEoCRIOCgZkb21haW4YAyABKAkSEQoJZGlyZWN0aXZlGAQgASgJEhMKC2NoYW5nZV91c2RhGAUgASgMEi4KCHNlbWFudGljGAYgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EkoKFXRyYW5zcG9ydF9yZXF1aXJlbWVudBgHIAEoDjIrLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRUcmFuc3BvcnRSZXF1aXJlbWVudCJGChRJbnRlbnRzQWJvdmVSZXNwb25zZRIuCgdpbnRlbnRzGAEgAygLMh0ubm9tb3Mua2VybmVsLnYxLkludGVudFJlY29yZCJ0ChZIaXN0b3J5U3VtbWFyeVJlc3BvbnNlEgwKBGhlYWQYASABKAkSDgoGb2xkZXN0GAIgASgJEhQKDGNvbW1pdF9jb3VudBgDIAEoBBIQCghjb21wbGV0ZRgEIAEoCBIUCgxyZWFjaGVkX2Jhc2UYBSABKAgiQgoTTm9taW5hbENhbGxJZGVudGl0eRITCgtkb21haW5fcGF0aBgBIAEoCRIWCg5kaXJlY3RpdmVfcGF0aBgCIAEoCSKIAQoYTGlmZWN5Y2xlSW5zdGFsbElkZW50aXR5Eh8KF3RhcmdldF9jbG9zdXJlX2lkZW50aXR5GAEgASgJEhQKDGluc3RhbGxlZF9ieRgCIAEoCRI1CgVwaGFzZRgDIAEoDjImLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsUGhhc2UiWgodV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQSEQoJd29ya3NwYWNlGAEgASgJEhMKC3NvdXJjZV9oZWFkGAIgASgJEhEKCWZvbGRfcm9vdBgDIAEoCSK0AgoVSW5zcGVjdENoYW5nZVJlc3BvbnNlEi4KCHNlbWFudGljGAEgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCWludGVudF9pZBgCIAEoCRIyCgRjYWxsGAMgASgLMiQubm9tb3Mua2VybmVsLnYxLk5vbWluYWxDYWxsSWRlbnRpdHkSEAoIYXV0aG9yZWQYBCABKAgSRAoRbGlmZWN5Y2xlX2luc3RhbGwYBSABKAsyKS5ub21vcy5rZXJuZWwudjEuTGlmZWN5Y2xlSW5zdGFsbElkZW50aXR5EkwKFHJlcXVpcmVkX3Jlc2lkZW5jaWVzGAYgAygLMi4ubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVJlc2lkZW5jeVJlcXVpcmVtZW50IkwKHFJlc29sdmVTdGF0ZVBvc2l0aW9uUmVzcG9uc2USGgoNcmVzb2x2ZWRfaGVhZBgBIAEoCUgAiAEBQhAKDl9yZXNvbHZlZF9oZWFkIjQKHEVuY29kZVJlZnVzYWxWZXJkaWN0UmVzcG9uc2USFAoMdmVyZGljdF91c2RhGAEgASgMIlEKHUluc3BlY3RSZWZ1c2FsVmVyZGljdFJlc3BvbnNlEjAKB3ZlcmRpY3QYASABKAsyHy5ub21vcy5rZXJuZWwudjEuUmVmdXNhbFZlcmRpY3QidQoiUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXNwb25zZRI4CghldmlkZW5jZRgBIAEoCzImLm5vbW9zLmtlcm5lbC52MS5Db21wYWN0aW9uRXF1aXZhbGVuY2USFQoNZXZpZGVuY2VfdXNkYRgCIAEoDCIvChBSZWFkQmxvYlJlc3BvbnNlEg0KBWZvdW5kGAEgASgIEgwKBGJsb2IYAiABKAwiLgoSUmVzb2x2ZVJlZlJlc3BvbnNlEhAKA29pZBgBIAEoCUgAiAEBQgYKBF9vaWQiKwoJUmVmUmVjb3JkEhEKCXJlZmVyZW5jZRgBIAEoCRILCgNvaWQYAiABKAkiPAoQTGlzdFJlZnNSZXNwb25zZRIoCgRyZWZzGAEgAygLMhoubm9tb3Mua2VybmVsLnYxLlJlZlJlY29yZCIOCgxBY2tub3dsZWRnZWQiJgoXV3JpdGVNZXRhQ29tbWl0UmVzcG9uc2USCwoDb2lkGAEgASgJIoMBChZMYXdDbG9zdXJlSW5mb1Jlc3BvbnNlEhAKCGlkZW50aXR5GAEgASgJEhkKEXJvb3RfbG9naWNhbF9wYXRoGAIgASgJEhMKC2Fzc2V0X2NvdW50GAMgASgEEhIKCnByaW1fY291bnQYBCABKAQSEwoLZG9tYWluX2tleXMYBSADKAki3wMKGENoZWNrcG9pbnRFeHBvcnRSZXNwb25zZRINCgVlbXB0eRgBIAEoCBITCgZjdXJzb3IYAiABKAlIAIgBARIQCghmcm9udGllchgDIAEoDBIXCgpzdGF0ZV9yb290GAQgASgJSAGIAQESEgoKc3RhdGVfdHJlZRgFIAEoCBIOCgZwaW5uZWQYBiABKAgSGwoTcmVhZF9pbmRleF9zbmFwc2hvdBgHIAEoCBIjChtyZWFkX2luZGV4X3NuYXBzaG90X3BlbmRpbmcYCCABKAgSJAoXcmVhZF9pbmRleF9zcWxpdGVfYnl0ZXMYCSABKARIAogBARIlChhyZWFkX2luZGV4X2N1c3RvZHlfYnl0ZXMYCiABKARIA4gBARJQChl2ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0GAsgASgLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmaWVkRnJvbnRpZXJSZWNlaXB0SASIAQFCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIaChhfcmVhZF9pbmRleF9zcWxpdGVfYnl0ZXNCGwoZX3JlYWRfaW5kZXhfY3VzdG9keV9ieXRlc0IcChpfdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdCLXAgoYQ2hlY2twb2ludEltcG9ydFJlc3BvbnNlEhAKCHJlc3RvcmVkGAEgASgIEhMKBnJlYXNvbhgCIAEoCUgAiAEBEhcKD2Zyb250aWVyX3NlZWRlZBgDIAEoCBIlCh1mcm9udGllcl92ZXJpZmljYXRpb25fcGVuZGluZxgEIAEoCBIXCg9hZ2dyZWdhdGVfY291bnQYBSABKAQSKwoFc3BhbnMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEwoGY3Vyc29yGAcgASgJSAGIAQESEQoJcmVhZF9vbmx5GAggASgIEhcKD2xhenlfcmVhZF9pbmRleBgJIAEoCBI3Cglhc3N1cmFuY2UYCiABKA4yJC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEFzc3VyYW5jZUIJCgdfcmVhc29uQgkKB19jdXJzb3IiSgoXQ2FwYWNpdHlSZXNlcnZlUmVzcG9uc2USFwoPYWdncmVnYXRlX2NvdW50GAEgASgEEhYKDnJlc2VydmVkX2J5dGVzGAIgASgEIvkCChBSZXN0b3JlTWFpblNwYW5zEhAKCHRvdGFsX3VzGAEgASgEEhoKEmxpdmVfcmVmX2xvb2t1cF91cxgCIAEoBBIYChB0YXJnZXRfZGVjb2RlX3VzGAMgASgEEiQKHGN1c3RvZHlfY29tcGxldGVuZXNzX3JlYWRfdXMYBCABKAQSGQoRcXVhcmFudGluZV9yZWZfdXMYBSABKAQSJQodY2hhaW5fc2lnbmF0dXJlX2xhd19yZXBsYXlfdXMYBiABKAQSGQoRdmVyZGljdF9kZWNvZGVfdXMYByABKAQSIwobcHJvbW90ZV9hbmRfY2xlYW51cF9yZWZzX3VzGAggASgEEhsKE2Zyb250aWVyX3JlYnVpbGRfdXMYCSABKAQSGQoRZnJvbnRpZXJfc3RvcmVfdXMYCiABKAQSPQoMdmVyaWZpY2F0aW9uGAsgASgLMicubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRGlhZ25vc3RpY3Mi7wEKE1Jlc3RvcmVNYWluUmVzcG9uc2USDAoEaGVhZBgBIAEoCRIQCgh2ZXJpZmllZBgCIAEoCBIMCgR3YWxrGAMgASgJEjAKBXNwYW5zGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlc3RvcmVNYWluU3BhbnMSLQoHdmVyZGljdBgFIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBI3Cglhc3N1cmFuY2UYBiABKA4yJC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEFzc3VyYW5jZRIQCghhY2NlcHRlZBgHIAEoCCKbAgoKTm9tb3NWYWx1ZRIlCgRudWxsGAEgASgLMhUubm9tb3Mua2VybmVsLnYxLk51bGxIABIRCgdib29sZWFuGAIgASgISAASGAoOc2lnbmVkX2ludGVnZXIYAyABKBJIABIaChB1bnNpZ25lZF9pbnRlZ2VyGAQgASgESAASGAoOZmxvYXRpbmdfcG9pbnQYBSABKAFIABIOCgR0ZXh0GAYgASgJSAASDwoFYnl0ZXMYByABKAxIABIqCgRsaXN0GAggASgLMhoubm9tb3Mua2VybmVsLnYxLk5vbW9zTGlzdEgAEi4KBm9iamVjdBgJIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEgAQgYKBGtpbmQiBgoETnVsbCI4CglOb21vc0xpc3QSKwoGdmFsdWVzGAEgAygLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWUikwEKC05vbW9zU3RydWN0EjgKBmZpZWxkcxgBIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdC5GaWVsZHNFbnRyeRpKCgtGaWVsZHNFbnRyeRILCgNrZXkYASABKAkSKgoFdmFsdWUYAiABKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZToCOAEq6gEKEkJpcnRoT3V0Y29tZVN0YXR1cxIkCiBCSVJUSF9PVVRDT01FX1NUQVRVU19VTlNQRUNJRklFRBAAEh0KGUJJUlRIX09VVENPTUVfU1RBVFVTX0JPUk4QARIhCh1CSVJUSF9PVVRDT01FX1NUQVRVU19ERUZFUlJFRBACEh8KG0JJUlRIX09VVENPTUVfU1RBVFVTX0ZBSUxFRBADEiAKHEJJUlRIX09VVENPTUVfU1RBVFVTX1JFRlVTRUQQBBIpCiVCSVJUSF9PVVRDT01FX1NUQVRVU19VTldBUlJBTlRFRF9DRVJUEAUq6RIKEUtlcm5lbFJlZnVzYWxDb2RlEiMKH0tFUk5FTF9SRUZVU0FMX0NPREVfVU5TUEVDSUZJRUQQABIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX0JBRF9TSUdOQVRVUkUQARIkCiBLRVJORUxfUkVGVVNBTF9DT0RFX1VOQVVUSE9SSVpFRBACEicKI0tFUk5FTF9SRUZVU0FMX0NPREVfUE9MSUNZX0RJU0FCTEVEEAMSKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9VTkNFUlRJRklFRF9QT0xJQ1kQBBIjCh9LRVJORUxfUkVGVVNBTF9DT0RFX1JFRkVSRU5USUFMEAUSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9QT0lOVF9TVEFURV9VTkFWQUlMQUJMRRAGEiQKIEtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQX0VYQ0VFREVEEAcSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBfQ09VTlRfVU5BVkFJTEFCTEUQCBIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX0VWSURFTkNFX1VOQkFDS0VEEAkSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9PUlBIQU5fUkVDRUlQVBAKEjYKMktFUk5FTF9SRUZVU0FMX0NPREVfUkVDRUlQVF9PTl9URVJNSU5BTF9PQkxJR0FUSU9OEAsSIgoeS0VSTkVMX1JFRlVTQUxfQ09ERV9OT1RfTUlOVEVEEAwSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9ET01BSU5fTElGRUNZQ0xFEA0SKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9UWVBFX1RBR19NSVNNQVRDSBAOEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfUkVUSVJFRF9SRUFEX1NVUkZBQ0UQDxIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0NST1NTX1dPUktTUEFDRV9ERUNMSU5FRBAQEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQUdHUkVHQVRFX0lOVkFSSUFOVBAREisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfV09SS1NQQUNFX0lOVkFSSUFOVBASEi4KKktFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9DT05GTElDVBATEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfUkVRVUlSRUQQFBI0CjBLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1VOREVDTEFSRUQQFRIxCi1LRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX0lOVkFMSUQQFhIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1NUQUxFEBcSMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX1VOREVDTEFSRUQQGBItCilLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfUFJJVkFURRAZEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTkRFQ0xBUkVEEBoSMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOVFJVU1RFRF9LRVkQGxI2CjJLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5UUlVTVEVEX1NPVVJDRRAcEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9GT1JHRUQQHRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfU1RBTEUQHhIuCipLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfT1ZFUlNJWkUQHxI3CjNLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfRElTSE9OT1JFRF9TT1VSQ0UQIBI1CjFLRVJORUxfUkVGVVNBTF9DT0RFX0VRVUlWT0NBVElPTl9FVklERU5DRV9JTlZBTElEECESMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RBVElPTl9SRUNFSVBUX0lOVkFMSUQQIhIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9ST1NURVJfTUlTTUFUQ0gQIxIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9FUE9DSF9OT1RfTU9OT1RPTklDECQSKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9XUklURV9FUE9DSF9TVEFMRRAlEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfRU5WRUxPUEVfU0lEX01JU01BVENIECYSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9SRVZPS0VEX01FTUJFUl9SRVNVUlJFQ1RFRBAnEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfRk9SR0VEX1BSSU5DSVBBTBAoEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfS0VZX0FOQ0hPUhApEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfUkVDT1ZFUlkQKhIsCihLRVJORUxfUkVGVVNBTF9DT0RFX1NVUkZBQ0VEX0JBU0lTX0FIRUFEECsSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9TSUdORVJfRVBPQ0hfT1VUX09GX1dJTkRPVxAsEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfRVZPTFZFX1JFRlVTRUQQLRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEFUSU9OX0lOVkFMSUQQLhItCilLRVJORUxfUkVGVVNBTF9DT0RFX1BBUkVOVF9ESURfTk9UX0FUVEVTVBAvEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfQ0VSVF9DSEFJTl9CUk9LRU4QMBIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX05PVF9ST09URURfQVRfUk9PVBAxEioKJktFUk5FTF9SRUZVU0FMX0NPREVfREVMRUdBVElPTl9JTlZBTElEEDISJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9QTEFOX1JFSkVDVEVEEDMqigEKD1ZlcmlmeUNoYWluV2FsaxIhCh1WRVJJRllfQ0hBSU5fV0FMS19VTlNQRUNJRklFRBAAEhoKFlZFUklGWV9DSEFJTl9XQUxLX0ZVTEwQARIcChhWRVJJRllfQ0hBSU5fV0FMS19TVUZGSVgQAhIaChZWRVJJRllfQ0hBSU5fV0FMS19NRU1PEAMqiAwKDlF1ZXJ5T3BlcmF0aW9uEh8KG1FVRVJZX09QRVJBVElPTl9VTlNQRUNJRklFRBAAEhwKGFFVRVJZX09QRVJBVElPTl9FWFRSRU1VTRABEiUKIVFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUUxACEiwKKFFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUX1NVTU1BUlkQAxIgChxRVUVSWV9PUEVSQVRJT05fUkVBRF9QT1NUVVJFEAQSHwobUVVFUllfT1BFUkFUSU9OX0NVUlJFTlRfTEFXEAUSIwofUVVFUllfT1BFUkFUSU9OX0lOVEVSRkFDRV9PRkZFUhAGEicKI1FVRVJZX09QRVJBVElPTl9SRUxBVElPTl9HQVRFX09GRkVSEAcSHQoZUVVFUllfT1BFUkFUSU9OX1NDRU5FX0xBVxAIEiEKHVFVRVJZX09QRVJBVElPTl9JTlNUQUxMRURfTEFXEAkSHAoYUVVFUllfT1BFUkFUSU9OX0RFU0NSSUJFEAoSIwofUVVFUllfT1BFUkFUSU9OX0tFUk5FTF9SRVNPVVJDRRALEiMKH1FVRVJZX09QRVJBVElPTl9ERVZFTE9QRVJfU1BBTlMQDBIpCiVRVUVSWV9PUEVSQVRJT05fREVDTEFSRURfQ0FQQUJJTElUSUVTEA0SHQoZUVVFUllfT1BFUkFUSU9OX1JFQURJTkVTUxAOEiQKIFFVRVJZX09QRVJBVElPTl9QUk9KRUNUSU9OX1NUQVRTEA8SJQohUVVFUllfT1BFUkFUSU9OX01FTU9SWV9EUk9QX1BST0JFEBASGAoUUVVFUllfT1BFUkFUSU9OX1dBUk0QERIbChdRVUVSWV9PUEVSQVRJT05fUkVGUkVTSBASEiAKHFFVRVJZX09QRVJBVElPTl9WRVJJRllfQ0hBSU4QExIlCiFRVUVSWV9PUEVSQVRJT05fSElTVE9SWV9QUkVGTElHSFQQFBIZChVRVUVSWV9PUEVSQVRJT05fUk9VVEUQFRIYChRRVUVSWV9PUEVSQVRJT05fTUlOVBAWEiEKHVFVRVJZX09QRVJBVElPTl9DUllQVE9fS0VZR0VOEBcSJQohUVVFUllfT1BFUkFUSU9OX0NSWVBUT19TRUFMX0ZJRUxEEBgSLAooUVVFUllfT1BFUkFUSU9OX0NSWVBUT19CTElORF9JTkRFWF9UT0tFThAZEioKJlFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfU0NPUEVfS0VZEBoSLworUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9ERVZJQ0VfUkVRVUVTVBAbEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9BUFBST1ZBTBAcEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9SRUNPVkVSWRAdEiMKH1FVRVJZX09QRVJBVElPTl9DUllQVE9fV1JBUF9LRVkQHhIlCiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1VOV1JBUF9LRVkQHxIhCh1RVUVSWV9PUEVSQVRJT05fQVVUSE9SX0tFWUdFThAgEiQKIFFVRVJZX09QRVJBVElPTl9BVFRFU1RBVElPTl9TSUdOECESIAocUVVFUllfT1BFUkFUSU9OX1JFQ0VJUFRfUEFUSBAiEh0KGVFVRVJZX09QRVJBVElPTl9DRVJUX1NJR04QIxIlCiFRVUVSWV9PUEVSQVRJT05fQklSVEhfVFJVU1RfU1RBVEUQJBIhCh1RVUVSWV9PUEVSQVRJT05fRVJBX0NFUlRfU0lHThAlEigKJFFVRVJZX09QRVJBVElPTl9ERUxFR0FUSU9OX0NFUlRfU0lHThAmEikKJVFVRVJZX09QRVJBVElPTl9DQU5PTklDQUxJWkVfRlJPTlRJRVIQJxIrCidRVUVSWV9PUEVSQVRJT05fQ0FOT05JQ0FMSVpFX1BST0pFQ1RJT04QKCrSAgoVUmVzaWRlbnRDb21wb25lbnRLaW5kEicKI1JFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1VOU1BFQ0lGSUVEEAASJgoiUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfRk9MRF9TVEFURRABEi0KKVJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1JFQURfTU9ERUxfU1FMSVRFEAISLgoqUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfUkVBRF9NT0RFTF9JTkRFWEVTEAMSLQopUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfU0hBUkVEX0FUVFJJQlVURUQQBBIsCihSRVNJREVOVF9DT01QT05FTlRfS0lORF9XT1JLU1BBQ0VfQ0FDSEVTEAUSLAooUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfR0lUX09CSkVDVF9DQUNIRRAGKmwKE0tlcm5lbExhd0NhcGFiaWxpdHkSJQohS0VSTkVMX0xBV19DQVBBQklMSVRZX1VOU1BFQ0lGSUVEEAASLgoqS0VSTkVMX0xBV19DQVBBQklMSVRZX1NUQUdFX1pFUk9fQk9PVFNUUkFQEAEqWQoVQ2hlY2twb2ludENvbXByZXNzaW9uEh8KG0NIRUNLUE9JTlRfQ09NUFJFU1NJT05fTk9ORRAAEh8KG0NIRUNLUE9JTlRfQ09NUFJFU1NJT05fR1pJUBABKpEBChxDaGVja3BvaW50VmVyaWZpY2F0aW9uUG9saWN5EjMKL0NIRUNLUE9JTlRfVkVSSUZJQ0FUSU9OX1BPTElDWV9WRVJJRllfQ0FOT05JQ0FMEAASPAo4Q0hFQ0tQT0lOVF9WRVJJRklDQVRJT05fUE9MSUNZX1RSVVNUX1BSRVZJT1VTTFlfVkVSSUZJRUQQASqAAQoTQ2hlY2twb2ludEFzc3VyYW5jZRIkCiBDSEVDS1BPSU5UX0FTU1VSQU5DRV9VTlNQRUNJRklFRBAAEiAKHENIRUNLUE9JTlRfQVNTVVJBTkNFX1RSVVNURUQQARIhCh1DSEVDS1BPSU5UX0FTU1VSQU5DRV9WRVJJRklFRBACKqgBChpJbnRlbnRUcmFuc3BvcnRSZXF1aXJlbWVudBIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1VOU1BFQ0lGSUVEEAASLgoqSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9TRUFMRURfQ0hBTkdFEAESLAooSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9DT01NSVRfVFJFRRACKokBChVMaWZlY3ljbGVJbnN0YWxsUGhhc2USJwojTElGRUNZQ0xFX0lOU1RBTExfUEhBU0VfVU5TUEVDSUZJRUQQABIiCh5MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9BQ1RJVkUQARIjCh9MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9QRU5ESU5HEAIyWQoSTm9tb3NLZXJuZWxTZXJ2aWNlEkMKBENhbGwSHC5ub21vcy5rZXJuZWwudjEuQ2FsbFJlcXVlc3QaHS5ub21vcy5rZXJuZWwudjEuQ2FsbFJlc3BvbnNlYgZwcm90bzM");
3150
3150
  CallRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 0);
3151
3151
  CallResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 1);
3152
- SignPreparedOfferRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 11);
3153
- PrepareRemoteOfferRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 13);
3154
- PrepareRemoteOfferResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 15);
3155
- SignOfferPreparationRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 16);
3156
- WorkspaceTargetSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 33);
3157
- DirectiveCallSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 35);
3158
- AuthoringOptionsSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 36);
3159
- CapturedClockSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 37);
3160
- BirthCertificateSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 38);
3161
- OfferRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 39);
3162
- QueryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 42);
3163
- QueryAuthoritySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 43);
3164
- RowsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 45);
3165
- PageQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 46);
3166
- ByIdQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 47);
3167
- NomosRefSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 48);
3168
- ResolveRefsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 49);
3169
- ReferenceVersionsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 50);
3170
- ReferenceVersionCheckSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 51);
3171
- TallyQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 52);
3172
- SpatialQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 53);
3173
- NamedQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 54);
3174
- FrontierTransitionRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 55);
3175
- AuthorizationObjectSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 60);
3176
- AuthorizationSubjectSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 61);
3177
- AuthorizationConsistencySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 63);
3178
- AuthorizationCheckRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 65);
3179
- SyncRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 73);
3180
- TestRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 74);
3181
- SetTestRootRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 75);
3182
- CustodyRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 77);
3183
- PackDeltaRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 82);
3184
- ApplyPackRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 83);
3185
- RepoStatsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 84);
3186
- IntentsAboveRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 85);
3187
- HistorySummaryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 86);
3188
- WriteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 96);
3189
- DeleteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 97);
3190
- LawClosureInfoRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 100);
3191
- CheckpointExportRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 101);
3192
- CheckpointImportRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 108);
3193
- RestoreMainRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 110);
3194
- NomosValueSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 139);
3195
- NomosStructSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 142);
3196
- QueryOperationSchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 2);
3152
+ SignPreparedOfferRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 17);
3153
+ PrepareRemoteOfferRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 19);
3154
+ PrepareRemoteOfferResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 21);
3155
+ SignOfferPreparationRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 22);
3156
+ WorkspaceTargetSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 39);
3157
+ DirectiveCallSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 41);
3158
+ AuthoringOptionsSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 42);
3159
+ CapturedClockSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 43);
3160
+ BirthCertificateSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 44);
3161
+ SignBirthCertificateRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 45);
3162
+ OfferRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 47);
3163
+ QueryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 50);
3164
+ QueryAuthoritySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 51);
3165
+ RowsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 53);
3166
+ PageQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 54);
3167
+ ByIdQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 55);
3168
+ NomosRefSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 56);
3169
+ ResolveRefsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 57);
3170
+ ReferenceVersionsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 58);
3171
+ ReferenceVersionCheckSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 59);
3172
+ TallyQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 60);
3173
+ SpatialQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 61);
3174
+ NamedQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 62);
3175
+ FrontierTransitionRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 63);
3176
+ AuthorizationObjectSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 68);
3177
+ AuthorizationSubjectSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 69);
3178
+ AuthorizationConsistencySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 71);
3179
+ AuthorizationCheckRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 73);
3180
+ SyncRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 81);
3181
+ TestRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 82);
3182
+ SetTestRootRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 83);
3183
+ CustodyRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 85);
3184
+ PackDeltaRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 90);
3185
+ ApplyPackRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 91);
3186
+ RepoStatsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 92);
3187
+ IntentsAboveRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 93);
3188
+ HistorySummaryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 94);
3189
+ WriteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 104);
3190
+ DeleteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 105);
3191
+ LawClosureInfoRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 108);
3192
+ CheckpointExportRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 109);
3193
+ CheckpointImportRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 116);
3194
+ RestoreMainRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 118);
3195
+ NomosValueSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 147);
3196
+ NomosStructSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 150);
3197
+ BirthOutcomeStatusSchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 0);
3198
+ BirthOutcomeStatus = /* @__PURE__ */ tsEnum(BirthOutcomeStatusSchema);
3199
+ QueryOperationSchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 3);
3197
3200
  QueryOperation = /* @__PURE__ */ tsEnum(QueryOperationSchema);
3198
- KernelLawCapabilitySchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 4);
3201
+ KernelLawCapabilitySchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 5);
3199
3202
  KernelLawCapability = /* @__PURE__ */ tsEnum(KernelLawCapabilitySchema);
3200
- IntentTransportRequirementSchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 8);
3203
+ IntentTransportRequirementSchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 9);
3201
3204
  IntentTransportRequirement = /* @__PURE__ */ tsEnum(IntentTransportRequirementSchema);
3202
3205
  }
3203
3206
  });
@@ -4702,11 +4705,11 @@ var init_kernel_coherence = __esm({
4702
4705
  });
4703
4706
 
4704
4707
  // ../cloud/web-client/src/signing.ts
4705
- function signBirthCert(certSign2, { child, founder, verified = true, parentKey, parentId = "", epoch = 0, verifiedVia, idpToken, capturedClock }, deviceSecret) {
4708
+ function signBirthCert(certSign2, { child, founder, verified = true, parentKey, parentId = "", epoch = 0, verifiedVia, idpToken, capturedClock, authProviderIssuer, authProviderJwks, authProviderAudience }, deviceSecret) {
4706
4709
  if (typeof certSign2 !== "function") throw new Error("signBirthCert requires the kernel `certSign` op wrapper");
4707
4710
  if (!child || typeof child !== "string") throw new Error("signBirthCert requires `child` (the named workspace/identity the cert authorizes)");
4708
4711
  if (!founder || typeof founder !== "string") throw new Error("signBirthCert requires `founder` (the subject the cert binds \u2014 `user:<uid>`)");
4709
- if (!parentKey || typeof parentKey !== "string") throw new Error("signBirthCert requires `parentKey` (base64 ed25519 public half this cert names)");
4712
+ if (parentKey !== void 0 && (typeof parentKey !== "string" || parentKey.length === 0)) throw new Error("signBirthCert `parentKey` must be a non-empty base64 ed25519 public half when supplied");
4710
4713
  if (!deviceSecret || typeof deviceSecret !== "string") throw new Error("signBirthCert requires the signer's `deviceSecret` (base64) \u2014 the signature IS the authorization");
4711
4714
  return certSign2({
4712
4715
  child,
@@ -4719,7 +4722,10 @@ function signBirthCert(certSign2, { child, founder, verified = true, parentKey,
4719
4722
  // keyless premise — forwarded only when present (the op reads them optionally; absent ⇒ classic bytes).
4720
4723
  ...verifiedVia !== void 0 ? { verifiedVia } : {},
4721
4724
  ...idpToken !== void 0 ? { idpToken } : {},
4722
- ...capturedClock !== void 0 ? { capturedClock } : {}
4725
+ ...capturedClock !== void 0 ? { capturedClock } : {},
4726
+ ...authProviderIssuer !== void 0 ? { authProviderIssuer } : {},
4727
+ ...authProviderJwks !== void 0 ? { authProviderJwks } : {},
4728
+ ...authProviderAudience !== void 0 ? { authProviderAudience } : {}
4723
4729
  });
4724
4730
  }
4725
4731
  function mintKeylessDelegation(certSign2, { user: user2, deviceKey, childName, parentId = "", verifiedVia, idpToken, capturedClock, epoch = 0 }, deviceSecret) {
@@ -4849,6 +4855,34 @@ var init_dead_letters = __esm({
4849
4855
  });
4850
4856
 
4851
4857
  // ../cloud/web-client/src/governance_offers.ts
4858
+ function openApiRequestBodyProperties(operation, specification) {
4859
+ const content = operation.requestBody && typeof operation.requestBody === "object" ? operation.requestBody.content : void 0;
4860
+ const media = content && typeof content === "object" ? content["application/json"] : void 0;
4861
+ let schema = media && typeof media === "object" ? media.schema : void 0;
4862
+ if (schema && typeof schema === "object" && typeof schema.$ref === "string") {
4863
+ const ref = schema.$ref;
4864
+ if (!ref.startsWith("#/")) {
4865
+ throw new Error(`Nomos framework OpenAPI uses unsupported non-local request schema ref '${ref}'`);
4866
+ }
4867
+ let resolved = specification;
4868
+ for (const raw of ref.slice(2).split("/")) {
4869
+ const segment = raw.replace(/~1/g, "/").replace(/~0/g, "~");
4870
+ resolved = resolved && typeof resolved === "object" ? resolved[segment] : void 0;
4871
+ }
4872
+ schema = resolved;
4873
+ }
4874
+ const properties = schema && typeof schema === "object" ? schema.properties : void 0;
4875
+ return properties && typeof properties === "object" ? Object.keys(properties).sort() : [];
4876
+ }
4877
+ function firstDeviceDelegationPayload(route, certificate, typedPayload) {
4878
+ const declared = new Set(route.requestBodyProperties);
4879
+ if (declared.has("delegationCertificate")) {
4880
+ return { delegationCertificate: typedPayload };
4881
+ }
4882
+ throw new Error(
4883
+ `Nomos application route '${route.domain}${route.path}' does not declare the typed 'delegationCertificate' contract [nomos.application.contract_missing]`
4884
+ );
4885
+ }
4852
4886
  function jwtClaimOf(token, claim) {
4853
4887
  try {
4854
4888
  const B = (
@@ -4863,7 +4897,7 @@ function jwtClaimOf(token, claim) {
4863
4897
  }
4864
4898
  }
4865
4899
  function createGovernanceOffers(ctx) {
4866
- const { offerDirective, serialize, queryById, queryRows, attestationSignKernel, _fetch, base, workspace, deviceSecret, authHeaders, receivingGroupNameOf: receivingGroupNameOf2, sha256hexBytes: sha256hexBytes2, bytesUnb64: bytesUnb642, actorForShareQuote: actorForShareQuote2, installedInterfaceInner, mintKeylessDelegation: mintKeylessDelegation2, signWorkspaceOffer, resolveFrameworkRoute } = ctx;
4900
+ const { offerDirective, serialize, queryById, queryRows, attestationSignKernel, _fetch, base, workspace, deviceSecret, authHeaders, receivingGroupNameOf: receivingGroupNameOf2, sha256hexBytes: sha256hexBytes2, bytesUnb64: bytesUnb642, birthCertificateLawPayload: birthCertificateLawPayload2, actorForShareQuote: actorForShareQuote2, installedInterfaceInner, mintKeylessDelegation: mintKeylessDelegation2, signWorkspaceOffer, resolveFrameworkRoute } = ctx;
4867
4901
  const g = {
4868
4902
  /**
4869
4903
  * AUTHOR a SIGNED governance/framework intent locally and return the sealed offer bytes (base64) ready to
@@ -4930,7 +4964,15 @@ function createGovernanceOffers(ctx) {
4930
4964
  if (d) errorInfo = { code: d.code, message: text2.slice(0, 500), operation: directiveId, workspace: target, attributes: d.attributes };
4931
4965
  }
4932
4966
  }
4933
- return { ok: r.ok, status: r.status, body, ...errorInfo ? { errorInfo } : {}, ...staged ? { staged } : {} };
4967
+ const admittedHead = body && typeof body === "object" && typeof body.head === "string" ? body.head.toLowerCase() : "";
4968
+ return {
4969
+ ok: r.ok,
4970
+ status: r.status,
4971
+ body,
4972
+ ...GIT_OBJECT_ID.test(admittedHead) ? { head: admittedHead } : {},
4973
+ ...errorInfo ? { errorInfo } : {},
4974
+ ...staged ? { staged } : {}
4975
+ };
4934
4976
  },
4935
4977
  /**
4936
4978
  * MAKE A WORKSPACE — the one-call tenant path (sign + relay). Seals a directive (default `createWorkspace`)
@@ -5149,24 +5191,31 @@ function createGovernanceOffers(ctx) {
5149
5191
  if (!authorSecret) throw new Error("ensureParentSignerEnrollment: the signer tuple is absent on the parent and no `authorSecret`/`device.secret` was supplied to lawfully re-enroll it");
5150
5192
  const token = keyless ? typeof signIn === "function" ? await signIn(keyHash) : idToken : null;
5151
5193
  let resolved = domain ? { domain, directiveId } : null;
5194
+ let enrollmentRoute;
5152
5195
  if (!resolved && parent === workspace && typeof installedInterfaceInner === "function") {
5153
5196
  const offer = installedInterfaceInner();
5154
5197
  const declaring = Object.entries(offer || {}).filter(([, iface]) => iface && iface.directives && Object.prototype.hasOwnProperty.call(iface.directives, directiveId)).map(([d]) => d);
5155
5198
  if (declaring.length === 1) resolved = { domain: declaring[0], directiveId };
5156
5199
  else if (declaring.length > 1) throw new Error(`ensureParentSignerEnrollment: '${directiveId}' is declared by ${declaring.length} installed domains on ${parent} (${declaring.join(", ")}) \u2014 pass { domain } explicitly`);
5157
5200
  }
5158
- if (!resolved && keyless && directiveId === "enrollFirstDevice") {
5159
- const route = await resolveFrameworkRoute({
5201
+ if (keyless && directiveId === "enrollFirstDevice") {
5202
+ enrollmentRoute = await resolveFrameworkRoute({
5160
5203
  parent,
5161
5204
  operationId: directiveId,
5162
5205
  method: "post",
5163
5206
  token: token || void 0,
5164
- principal
5207
+ principal,
5208
+ ...domain ? { preferredDomain: domain } : {}
5165
5209
  });
5166
- resolved = { domain: route.domain, directiveId };
5210
+ if (resolved && resolved.domain !== enrollmentRoute.domain) {
5211
+ throw new Error(
5212
+ `ensureParentSignerEnrollment: requested domain '${resolved.domain}' disagrees with the law-declared application/home domain '${enrollmentRoute.domain}'`
5213
+ );
5214
+ }
5215
+ resolved = { domain: enrollmentRoute.domain, directiveId };
5167
5216
  }
5168
5217
  if (!resolved) resolved = await g.discoverDirectiveDomain({ ws: parent, directiveId, authToken });
5169
- let delegationCert;
5218
+ let delegationPayload;
5170
5219
  if (keyless) {
5171
5220
  if (typeof mintKeylessDelegation2 !== "function") throw new Error("ensureParentSignerEnrollment: the keyless lane needs a signing holon (mintKeylessDelegation) to build the delegation cert \u2014 open the holon with a device key");
5172
5221
  if (!authorSecret) throw new Error("ensureParentSignerEnrollment: the keyless lane needs the device secret (device.secret/authorSecret) to self-sign the delegation cert");
@@ -5176,7 +5225,14 @@ function createGovernanceOffers(ctx) {
5176
5225
  { user: principal, deviceKey: publicKey, childName, parentId: parent, verifiedVia: iss, idpToken: token, capturedClock: Date.now(), epoch: validFromEpoch },
5177
5226
  authorSecret
5178
5227
  );
5179
- delegationCert = typeof cert === "string" ? cert : JSON.stringify(cert);
5228
+ if (!enrollmentRoute) {
5229
+ throw new Error("ensureParentSignerEnrollment: no law-derived enrollFirstDevice contract");
5230
+ }
5231
+ delegationPayload = firstDeviceDelegationPayload(
5232
+ enrollmentRoute,
5233
+ cert,
5234
+ birthCertificateLawPayload2(cert)
5235
+ );
5180
5236
  }
5181
5237
  const payload = keyless ? {
5182
5238
  keyHash,
@@ -5184,7 +5240,7 @@ function createGovernanceOffers(ctx) {
5184
5240
  validFromEpoch,
5185
5241
  grantedAt: (/* @__PURE__ */ new Date()).toISOString(),
5186
5242
  idpToken: token,
5187
- delegationCert
5243
+ ...delegationPayload ?? {}
5188
5244
  } : {
5189
5245
  keyHash,
5190
5246
  grantedBy: principal,
@@ -5256,11 +5312,13 @@ function createGovernanceOffers(ctx) {
5256
5312
  };
5257
5313
  return g;
5258
5314
  }
5315
+ var GIT_OBJECT_ID;
5259
5316
  var init_governance_offers = __esm({
5260
5317
  "../cloud/web-client/src/governance_offers.ts"() {
5261
5318
  "use strict";
5262
5319
  init_principal();
5263
5320
  init_errors();
5321
+ GIT_OBJECT_ID = /^[0-9a-f]{40}$/;
5264
5322
  }
5265
5323
  });
5266
5324
 
@@ -5353,6 +5411,81 @@ var init_intent_offer_codec = __esm({
5353
5411
  }
5354
5412
  });
5355
5413
 
5414
+ // ../cloud/web-client/src/_adapter/offer-result.ts
5415
+ function presentProtoInteger(value) {
5416
+ return value <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(value) : value;
5417
+ }
5418
+ function presentKernelSpans(value) {
5419
+ const observations = {};
5420
+ for (const operation of value.operations) {
5421
+ observations[operation.label] = {
5422
+ totalUs: presentProtoInteger(operation.totalUs),
5423
+ phases: Object.fromEntries(operation.phases.map(({ name, value: value2 }) => [name, presentProtoInteger(value2)])),
5424
+ notes: Object.fromEntries(operation.notes.map(({ name, value: value2 }) => [name, presentProtoInteger(value2)]))
5425
+ };
5426
+ }
5427
+ if (value.engine.length > 0) {
5428
+ observations.engine = Object.fromEntries(
5429
+ value.engine.map(({ name, value: value2 }) => [name, presentProtoInteger(value2)])
5430
+ );
5431
+ }
5432
+ return observations;
5433
+ }
5434
+ function presentBirthStatus(status2) {
5435
+ switch (status2) {
5436
+ case BirthOutcomeStatus.BORN:
5437
+ return "born";
5438
+ case BirthOutcomeStatus.DEFERRED:
5439
+ return "deferred";
5440
+ case BirthOutcomeStatus.FAILED:
5441
+ return "failed";
5442
+ case BirthOutcomeStatus.REFUSED:
5443
+ return "refused";
5444
+ case BirthOutcomeStatus.UNWARRANTED_CERT:
5445
+ return "unwarranted-cert";
5446
+ case BirthOutcomeStatus.UNSPECIFIED:
5447
+ throw new Error("kernel returned a birth outcome without a status");
5448
+ default: {
5449
+ const exhaustive = status2;
5450
+ throw new Error(`kernel returned an unknown birth outcome status: ${String(exhaustive)}`);
5451
+ }
5452
+ }
5453
+ }
5454
+ function presentOfferAdmitted(admitted) {
5455
+ if (admitted.intentId.length === 0) {
5456
+ throw new Error("kernel admitted an offer without its stable intent identity");
5457
+ }
5458
+ return {
5459
+ ok: true,
5460
+ outcome: "admitted",
5461
+ ...admitted.head.length > 0 ? { head: admitted.head } : {},
5462
+ intentId: admitted.intentId,
5463
+ ...admitted.intentOut !== void 0 ? { intentOut: admitted.intentOut } : {},
5464
+ created: admitted.created.map(({ type, id }) => ({ type, id })),
5465
+ affected: admitted.affected.map(({ type, id }) => ({ type, id })),
5466
+ born: admitted.born.map(({ workspace, head }) => ({ workspace, head })),
5467
+ birthOutcomes: admitted.birthOutcomes.map((birth) => ({
5468
+ ...birth.workspace !== void 0 ? { workspace: birth.workspace } : {},
5469
+ status: presentBirthStatus(birth.status),
5470
+ ...birth.reason !== void 0 ? { reason: birth.reason } : {},
5471
+ ...birth.code !== void 0 ? { code: birth.code } : {},
5472
+ replayed: birth.replayed,
5473
+ ...birth.lawHash !== void 0 ? { lawHash: birth.lawHash } : {},
5474
+ ...birth.parentWorkspace !== void 0 ? { parentWorkspace: birth.parentWorkspace } : {},
5475
+ ...birth.childWorkspace !== void 0 ? { childWorkspace: birth.childWorkspace } : {},
5476
+ ...birth.certificateRefusalReason !== void 0 ? { certificateRefusalReason: birth.certificateRefusalReason } : {}
5477
+ })),
5478
+ ...admitted.kernelSpans !== void 0 ? { kernelSpans: presentKernelSpans(admitted.kernelSpans) } : {},
5479
+ ...admitted.dryRun ? { dryRun: true } : {}
5480
+ };
5481
+ }
5482
+ var init_offer_result = __esm({
5483
+ "../cloud/web-client/src/_adapter/offer-result.ts"() {
5484
+ "use strict";
5485
+ init_kernel_pb();
5486
+ }
5487
+ });
5488
+
5356
5489
  // ../cloud/web-client/src/domain_readiness.ts
5357
5490
  async function prepareDomainUntilReady({
5358
5491
  domain,
@@ -6759,11 +6892,7 @@ ${String(commit).toLowerCase()}`;
6759
6892
  const outcome = response.outcome.value.outcome;
6760
6893
  switch (outcome.case) {
6761
6894
  case "admitted":
6762
- return {
6763
- ok: true,
6764
- outcome: "admitted",
6765
- ...nmsInternalStructFromProto(outcome.value.result)
6766
- };
6895
+ return presentOfferAdmitted(outcome.value);
6767
6896
  case "refused": {
6768
6897
  const refusal = outcome.value.refusal;
6769
6898
  return {
@@ -7827,7 +7956,7 @@ ${String(commit).toLowerCase()}`;
7827
7956
  } catch {
7828
7957
  }
7829
7958
  if (!delegationPresent) {
7830
- const delegation = namedQueryTyped(QueryOperation.CERT_SIGN, {
7959
+ const delegation = signBirthCertificateTyped({
7831
7960
  child,
7832
7961
  founder: actor,
7833
7962
  verified: true,
@@ -7837,12 +7966,12 @@ ${String(commit).toLowerCase()}`;
7837
7966
  // S_parent is this harness device. The parent cert below attests the same public key and
7838
7967
  // is signed by S_test_root, so the walk is device -> parent -> root exactly as production.
7839
7968
  secret: certSecret
7840
- }).cert;
7969
+ });
7841
7970
  const ds = seq++;
7842
7971
  const delegationPayload = {
7843
7972
  user: actor,
7844
7973
  deviceKey: devicePub,
7845
- certJson: JSON.stringify(delegation),
7974
+ certificate: birthCertificateLawPayload2(delegation),
7846
7975
  enrolledAt: "1970-01-01T00:00:00.000Z"
7847
7976
  };
7848
7977
  const delegationEnvelope = {
@@ -7873,7 +8002,7 @@ ${String(commit).toLowerCase()}`;
7873
8002
  } catch {
7874
8003
  }
7875
8004
  if (!parentWarranted) {
7876
- const parentCert = namedQueryTyped(QueryOperation.CERT_SIGN, {
8005
+ const parentCert = signBirthCertificateTyped({
7877
8006
  child: workspace,
7878
8007
  founder: actor,
7879
8008
  verified: true,
@@ -7881,7 +8010,7 @@ ${String(commit).toLowerCase()}`;
7881
8010
  parentId: "root",
7882
8011
  epoch: 0,
7883
8012
  secret: __testRootSecret
7884
- }).cert;
8013
+ });
7885
8014
  const authorHarnessStep = (stepDirectiveId, stepPayload, stepActor = actor) => {
7886
8015
  const hs = seq++;
7887
8016
  const stepEnvelope = {
@@ -7910,7 +8039,7 @@ ${String(commit).toLowerCase()}`;
7910
8039
  parentId: "root",
7911
8040
  parentKey: devicePub,
7912
8041
  epoch: 0,
7913
- certChain: JSON.stringify({ links: [parentCert] })
8042
+ links: [birthCertificateLawPayload2(parentCert)]
7914
8043
  });
7915
8044
  authorHarnessStep("seedGenesis", {
7916
8045
  principal: actor,
@@ -8621,24 +8750,73 @@ ${String(commit).toLowerCase()}`;
8621
8750
  if (!verdict.ok) throw new KernelCoherenceError(verdict);
8622
8751
  return verdict;
8623
8752
  };
8624
- const certificateBytes2 = (value) => value instanceof Uint8Array ? value : Uint8Array.from(Array.isArray(value) ? value.map(Number) : []);
8625
- const preparedBirthCertificate = (raw) => create4(BirthCertificateSchema, {
8626
- child: String(raw.child ?? ""),
8627
- founder: String(raw.founder ?? ""),
8628
- verified: raw.verified === true,
8629
- parentKey: certificateBytes2(raw.parent_key),
8630
- parentId: String(raw.parent_id ?? ""),
8631
- epoch: BigInt(Number(raw.epoch ?? 0)),
8632
- signature: certificateBytes2(raw.signature),
8633
- verifiedVia: raw.verified_via,
8634
- idpToken: raw.idp_token,
8635
- capturedClock: raw.captured_clock === void 0 ? void 0 : BigInt(Number(raw.captured_clock)),
8636
- authProviderIssuer: raw.auth_provider_issuer,
8637
- authProviderJwks: raw.auth_provider_jwks,
8638
- authProviderAudience: raw.auth_provider_audience
8753
+ const preparedBirthCertificate = (certificate) => create4(BirthCertificateSchema, certificate);
8754
+ const birthCertificateLawPayload2 = (certificate) => ({
8755
+ child: certificate.child,
8756
+ founder: certificate.founder,
8757
+ verified: certificate.verified,
8758
+ parentKey: b64(certificate.parentKey),
8759
+ parentId: certificate.parentId,
8760
+ epoch: Number(certificate.epoch),
8761
+ signature: b64(certificate.signature),
8762
+ ...certificate.verifiedVia === void 0 ? {} : { verifiedVia: certificate.verifiedVia },
8763
+ ...certificate.idpToken === void 0 ? {} : { idpToken: certificate.idpToken },
8764
+ ...certificate.capturedClock === void 0 ? {} : { capturedClock: Number(certificate.capturedClock) },
8765
+ ...certificate.authProviderIssuer === void 0 ? {} : { authProviderIssuer: certificate.authProviderIssuer },
8766
+ ...certificate.authProviderJwks === void 0 ? {} : { authProviderJwks: certificate.authProviderJwks },
8767
+ ...certificate.authProviderAudience === void 0 ? {} : { authProviderAudience: certificate.authProviderAudience }
8639
8768
  });
8640
- const signWorkspaceOffer = async ({ target, domain, directiveId, payload, actor, authorSecret: signingSecret, authToken: targetToken, domainHash, birthCertificate }) => {
8769
+ const signBirthCertificateTyped = ({
8770
+ child,
8771
+ founder,
8772
+ verified = true,
8773
+ parentKey,
8774
+ parentId = "",
8775
+ epoch = 0,
8776
+ secret,
8777
+ verifiedVia,
8778
+ idpToken,
8779
+ capturedClock,
8780
+ authProviderIssuer,
8781
+ authProviderJwks,
8782
+ authProviderAudience
8783
+ }) => {
8784
+ const response = callTyped({
8785
+ case: "signBirthCertificate",
8786
+ value: create4(SignBirthCertificateRequestSchema, {
8787
+ certificate: create4(BirthCertificateSchema, {
8788
+ child: String(child),
8789
+ founder: String(founder),
8790
+ verified,
8791
+ parentKey: parentKey ? bytesUnb64(parentKey) : new Uint8Array(),
8792
+ parentId,
8793
+ epoch: BigInt(epoch),
8794
+ signature: new Uint8Array(),
8795
+ verifiedVia,
8796
+ idpToken,
8797
+ capturedClock: capturedClock === void 0 ? void 0 : BigInt(capturedClock),
8798
+ authProviderIssuer,
8799
+ authProviderJwks,
8800
+ authProviderAudience
8801
+ }),
8802
+ signerSecret: bytesUnb64(secret)
8803
+ })
8804
+ });
8805
+ if (response.outcome.case === "failure") {
8806
+ throw new Error(`${response.outcome.value.code}: ${response.outcome.value.message}`);
8807
+ }
8808
+ if (response.outcome.case !== "signBirthCertificate" || !response.outcome.value.certificate) {
8809
+ throw new Error(
8810
+ `kernel returned '${response.outcome.case || "empty"}' while signing a birth certificate`
8811
+ );
8812
+ }
8813
+ return response.outcome.value.certificate;
8814
+ };
8815
+ const signWorkspaceOffer = async ({ target, domain, directiveId, payload, actor, authorSecret: signingSecret, authToken: targetToken, domainHash, birthCertificate, requiredCustodyHead }) => {
8641
8816
  if (!target || typeof target !== "string") throw new Error("cross-workspace offer requires a target workspace");
8817
+ if (requiredCustodyHead !== void 0 && !OID40_RE.test(requiredCustodyHead)) {
8818
+ throw new Error("cross-workspace offer requiredCustodyHead must be a 40-hex custody commit");
8819
+ }
8642
8820
  if (target === workspace) {
8643
8821
  return offerDirective(domain, directiveId, payload, {
8644
8822
  actor,
@@ -8688,6 +8866,7 @@ ${String(commit).toLowerCase()}`;
8688
8866
  headers: { "content-type": "application/vnd.nomos.prepare-remote-offer-request+protobuf" },
8689
8867
  body: toBinary4(PrepareRemoteOfferRequestSchema, create4(PrepareRemoteOfferRequestSchema, {
8690
8868
  offerRequest: offerRequest2,
8869
+ requiredCustodyHead: requiredCustodyHead?.toLowerCase() ?? "",
8691
8870
  ...proof
8692
8871
  }))
8693
8872
  });
@@ -9258,13 +9437,20 @@ ${String(commit).toLowerCase()}`;
9258
9437
  if (!item || typeof item !== "object") continue;
9259
9438
  for (const verb of ["get", "post"]) {
9260
9439
  const operation = item[verb];
9440
+ if (!operation || typeof operation !== "object") continue;
9261
9441
  const route = operation?.["x-nomos"];
9262
9442
  const domain = typeof route?.domain === "string" ? route.domain : "";
9263
9443
  const id = typeof route?.directiveId === "string" ? route.directiveId : typeof route?.queryId === "string" ? route.queryId : "";
9264
9444
  if (verb === "post" && route?.directiveId === "nomosInternalBirthReceivingGroup7c1f5e" && domain && !homeDomains.includes(domain)) {
9265
9445
  homeDomains.push(domain);
9266
9446
  }
9267
- if (verb === method && id === operationId && domain) candidates.push({ domain, path: path2 });
9447
+ if (verb === method && id === operationId && domain) {
9448
+ candidates.push({
9449
+ domain,
9450
+ path: path2,
9451
+ requestBodyProperties: openApiRequestBodyProperties(operation, spec)
9452
+ });
9453
+ }
9268
9454
  }
9269
9455
  }
9270
9456
  }
@@ -9304,6 +9490,7 @@ ${String(commit).toLowerCase()}`;
9304
9490
  receivingGroupNameOf,
9305
9491
  sha256hexBytes,
9306
9492
  bytesUnb64,
9493
+ birthCertificateLawPayload: birthCertificateLawPayload2,
9307
9494
  actorForShareQuote,
9308
9495
  installedInterfaceInner,
9309
9496
  signWorkspaceOffer,
@@ -9311,7 +9498,7 @@ ${String(commit).toLowerCase()}`;
9311
9498
  // Build the keyless delegation cert through the kernel cert_sign op (the SAME single-source-of-truth path
9312
9499
  // as the holon method below) so the keyless enroll can seed the user's SignerDelegation.
9313
9500
  mintKeylessDelegation: (spec, secret) => mintKeylessDelegation(
9314
- (args) => namedQueryTyped(QueryOperation.CERT_SIGN, args).cert,
9501
+ signBirthCertificateTyped,
9315
9502
  spec,
9316
9503
  secret
9317
9504
  )
@@ -9958,7 +10145,7 @@ ${String(commit).toLowerCase()}`;
9958
10145
  * the snake_case cert JSON (`signature` a byte array) — the EXACT shape `verify_to_root` parses. `secret`
9959
10146
  * is the device SECRET (base64) whose public half IS `parentKey`; it is handed to the LOCAL wasm only.
9960
10147
  */
9961
- certSign: ({ child, founder, verified = true, parentKey, parentId = "", epoch = 0, secret, verifiedVia, idpToken, capturedClock, authProviderIssuer, authProviderJwks, authProviderAudience } = {}) => serialize(async () => namedQueryTyped(QueryOperation.CERT_SIGN, {
10148
+ certSign: ({ child, founder, verified = true, parentKey, parentId = "", epoch = 0, secret, verifiedVia, idpToken, capturedClock, authProviderIssuer, authProviderJwks, authProviderAudience } = {}) => serialize(async () => signBirthCertificateTyped({
9962
10149
  child,
9963
10150
  founder,
9964
10151
  verified: !!verified,
@@ -9972,7 +10159,7 @@ ${String(commit).toLowerCase()}`;
9972
10159
  ...authProviderIssuer ? { authProviderIssuer } : {},
9973
10160
  ...authProviderJwks ? { authProviderJwks } : {},
9974
10161
  ...authProviderAudience ? { authProviderAudience } : {}
9975
- }).cert),
10162
+ })),
9976
10163
  /**
9977
10164
  * ISSUE A ROLE-DELEGATION CERT (the `.delegatedRole()` lane, kernel op `delegationCertSign`). A platform
9978
10165
  * signs — with its grantor secret `S_P` — a cert granting `relation` to `subject`, carrying the lineage
@@ -9989,7 +10176,7 @@ ${String(commit).toLowerCase()}`;
9989
10176
  * Used for the home_cert (links[0], signed by the user's device S_U) at home birth. Returns the cert JSON.
9990
10177
  */
9991
10178
  signBirthCert: (fields, deviceSecret2) => signBirthCert(
9992
- (args) => namedQueryTyped(QueryOperation.CERT_SIGN, args).cert,
10179
+ signBirthCertificateTyped,
9993
10180
  fields,
9994
10181
  deviceSecret2
9995
10182
  ),
@@ -10000,7 +10187,7 @@ ${String(commit).toLowerCase()}`;
10000
10187
  * choosing who to enroll) is the TENANT. Returns the delegation cert JSON (record it via enrollDelegation).
10001
10188
  */
10002
10189
  mintDelegation: (spec, signerSecret) => mintDelegation(
10003
- (args) => namedQueryTyped(QueryOperation.CERT_SIGN, args).cert,
10190
+ signBirthCertificateTyped,
10004
10191
  spec,
10005
10192
  signerSecret
10006
10193
  ),
@@ -10012,7 +10199,7 @@ ${String(commit).toLowerCase()}`;
10012
10199
  * `enrollFirstDevice.delegationCert`; verify_to_root's keyless branch re-verifies the token to K_root.
10013
10200
  */
10014
10201
  mintKeylessDelegation: (spec, deviceSecret2) => mintKeylessDelegation(
10015
- (args) => namedQueryTyped(QueryOperation.CERT_SIGN, args).cert,
10202
+ signBirthCertificateTyped,
10016
10203
  spec,
10017
10204
  deviceSecret2
10018
10205
  ),
@@ -10105,19 +10292,10 @@ ${String(commit).toLowerCase()}`;
10105
10292
  if (!verifiedVia) throw new Error("enrollFirstDevice requires `verifiedVia` (the parent AuthProvider issuer) \u2014 the token carried no `iss`");
10106
10293
  const childName = await receivingGroupNameOf(principal2);
10107
10294
  const delegationCertObj = spec.includeDelegation === false ? void 0 : mintKeylessDelegation(
10108
- (args) => namedQueryTyped(QueryOperation.CERT_SIGN, args).cert,
10295
+ signBirthCertificateTyped,
10109
10296
  { user: principal2, deviceKey: device.public, childName, parentId: parent, verifiedVia, idpToken: token, capturedClock: Date.now(), epoch: Number(validFromEpoch) || 0 },
10110
10297
  device.secret
10111
10298
  );
10112
- const delegationCert = delegationCertObj === void 0 ? void 0 : typeof delegationCertObj === "string" ? delegationCertObj : JSON.stringify(delegationCertObj);
10113
- const payload = {
10114
- keyHash,
10115
- verifiedVia,
10116
- validFromEpoch,
10117
- grantedAt: spec.grantedAt || (/* @__PURE__ */ new Date()).toISOString(),
10118
- idpToken: token,
10119
- ...delegationCert !== void 0 ? { delegationCert } : {}
10120
- };
10121
10299
  const authToken2 = spec.authToken || token;
10122
10300
  const enrollRoute = await frameworkRoute({
10123
10301
  parent,
@@ -10127,6 +10305,19 @@ ${String(commit).toLowerCase()}`;
10127
10305
  principal: principal2,
10128
10306
  ...typeof domain === "string" && domain ? { preferredDomain: domain } : {}
10129
10307
  });
10308
+ const delegationPayload = delegationCertObj === void 0 ? {} : firstDeviceDelegationPayload(
10309
+ enrollRoute,
10310
+ delegationCertObj,
10311
+ birthCertificateLawPayload2(delegationCertObj)
10312
+ );
10313
+ const payload = {
10314
+ keyHash,
10315
+ verifiedVia,
10316
+ validFromEpoch,
10317
+ grantedAt: spec.grantedAt || (/* @__PURE__ */ new Date()).toISOString(),
10318
+ idpToken: token,
10319
+ ...delegationPayload
10320
+ };
10130
10321
  const sealed = await signWorkspaceOffer({
10131
10322
  target: parent,
10132
10323
  domain: enrollRoute.domain,
@@ -10261,9 +10452,10 @@ ${String(commit).toLowerCase()}`;
10261
10452
  }
10262
10453
  const device = spec.device && spec.device.secret && spec.device.public ? spec.device : namedQueryTyped(QueryOperation.AUTHOR_KEYGEN);
10263
10454
  const enrolSpan = span("receive", "application custody: enrol first device", "application-open");
10455
+ let requiredParentCustodyHead;
10264
10456
  try {
10265
10457
  if (spec.idToken || typeof spec.signIn === "function") {
10266
- await api.enrollFirstDevice({
10458
+ const enrollment = await api.enrollFirstDevice({
10267
10459
  parent,
10268
10460
  principal: principal2,
10269
10461
  device,
@@ -10274,6 +10466,12 @@ ${String(commit).toLowerCase()}`;
10274
10466
  domain: spec.enrollDomain || homeDomain,
10275
10467
  validFromEpoch: spec.validFromEpoch
10276
10468
  });
10469
+ requiredParentCustodyHead = enrollment.verdict?.head;
10470
+ if (!requiredParentCustodyHead || !OID40_RE.test(requiredParentCustodyHead)) {
10471
+ throw new Error(
10472
+ `enrollFirstDevice at '${parent}' admitted without an exact custody head; refusing to prepare birth against an unbound resident frontier`
10473
+ );
10474
+ }
10277
10475
  } else {
10278
10476
  try {
10279
10477
  await api.enrollDevice({ principal: principal2, publicKey: device.public, authToken: at });
@@ -10346,7 +10544,8 @@ ${String(commit).toLowerCase()}`;
10346
10544
  actor: owner,
10347
10545
  authorSecret: device.secret,
10348
10546
  authToken: typeof at === "string" ? at : void 0,
10349
- birthCertificate: homeCert
10547
+ birthCertificate: homeCert,
10548
+ requiredCustodyHead: requiredParentCustodyHead
10350
10549
  }).finally(() => sealSpan.end());
10351
10550
  const admissionSpan = span("receive", "application custody: admit birth remotely", "application-open");
10352
10551
  const offerBody = await governanceOffers.postGovernanceOffer({
@@ -12386,6 +12585,7 @@ var init_src2 = __esm({
12386
12585
  init_serialized_scheduler();
12387
12586
  init_kernel_pb();
12388
12587
  init_intent_offer_codec();
12588
+ init_offer_result();
12389
12589
  init_domain_readiness();
12390
12590
  init_intent_offer_codec();
12391
12591
  init_kernel_provider_wasm();
@@ -12945,84 +13145,162 @@ var init_managed_promotion2 = __esm({
12945
13145
 
12946
13146
  // vendor/engine/proto/nomos/kernel/v1/kernel_pb.js
12947
13147
  import { enumDesc as enumDesc3, fileDesc as fileDesc3, messageDesc as messageDesc3, serviceDesc as serviceDesc3, tsEnum as tsEnum3 } from "@bufbuild/protobuf/codegenv2";
12948
- var file_nomos_kernel_v1_kernel2, CallRequestSchema2, CallResponseSchema2, PrepareRemoteOfferRequestSchema2, PrepareRemoteOfferResponseSchema2, WorkspaceTargetSchema2, DirectiveCallSchema3, AuthoringOptionsSchema3, CapturedClockSchema3, BirthCertificateSchema3, OfferRequestSchema3, QueryRequestSchema3, QueryAuthoritySchema3, InjectedKeySchema, RowsQuerySchema3, PageQuerySchema3, ByIdQuerySchema3, TallyQuerySchema3, SpatialQuerySchema3, NamedQuerySchema3, FrontierTransitionRequestSchema2, AuthorizationObjectSchema3, AuthorizationSubjectSchema3, AuthorizationConsistencySchema3, AuthorizationCheckRequestSchema3, AuthorizationExpandRequestSchema, OutboxRequestSchema, SyncRequestSchema3, TestRequestSchema3, SetTestRootRequestSchema3, CustodyRequestSchema2, ResidentFootprintRequestSchema, PackDeltaRequestSchema2, ApplyPackRequestSchema2, RepoStatsRequestSchema2, IntentsAboveRequestSchema3, InspectChangeRequestSchema, RefusalVerdictSchema, EncodeRefusalVerdictRequestSchema, InspectRefusalVerdictRequestSchema, ProveCompactionEquivalenceRequestSchema, ReadBlobRequestSchema, ResolveRefRequestSchema, ListRefsRequestSchema, WriteRefRequestSchema3, DeleteRefRequestSchema3, WriteMetaCommitRequestSchema, LawClosureInfoRequestSchema2, CheckpointExportRequestSchema2, VerifiedFrontierReceiptSchema, StoredCheckpointManifestSchema, CheckpointImportRequestSchema3, CapacityReserveRequestSchema2, RestoreMainRequestSchema2, ResolveStatePositionRequestSchema, NomosValueSchema2, NomosStructSchema2, QueryOperationSchema2, QueryOperation3, KernelLawCapabilitySchema2, KernelLawCapability2, CheckpointCompressionSchema, CheckpointCompression, CheckpointVerificationPolicySchema, CheckpointVerificationPolicy, CheckpointAssuranceSchema, CheckpointAssurance, IntentTransportRequirementSchema2, IntentTransportRequirement2, LifecycleInstallPhaseSchema, LifecycleInstallPhase;
13148
+ var file_nomos_kernel_v1_kernel2, CallRequestSchema2, CallResponseSchema2, PrepareRemoteOfferRequestSchema2, PrepareRemoteOfferResponseSchema2, WorkspaceTargetSchema2, DirectiveCallSchema3, AuthoringOptionsSchema3, CapturedClockSchema3, BirthCertificateSchema3, SignBirthCertificateRequestSchema2, OfferRequestSchema3, QueryRequestSchema3, QueryAuthoritySchema3, InjectedKeySchema, RowsQuerySchema3, PageQuerySchema3, ByIdQuerySchema3, TallyQuerySchema3, SpatialQuerySchema3, NamedQuerySchema3, FrontierTransitionRequestSchema2, AuthorizationObjectSchema3, AuthorizationSubjectSchema3, AuthorizationConsistencySchema3, AuthorizationCheckRequestSchema3, AuthorizationExpandRequestSchema, OutboxRequestSchema, SyncRequestSchema3, TestRequestSchema3, SetTestRootRequestSchema3, CustodyRequestSchema2, ResidentFootprintRequestSchema, PackDeltaRequestSchema2, ApplyPackRequestSchema2, RepoStatsRequestSchema2, IntentsAboveRequestSchema3, InspectChangeRequestSchema, RefusalVerdictSchema, EncodeRefusalVerdictRequestSchema, InspectRefusalVerdictRequestSchema, ProveCompactionEquivalenceRequestSchema, ReadBlobRequestSchema, ResolveRefRequestSchema, ListRefsRequestSchema, WriteRefRequestSchema3, DeleteRefRequestSchema3, WriteMetaCommitRequestSchema, LawClosureInfoRequestSchema2, CheckpointExportRequestSchema2, VerifiedFrontierReceiptSchema, StoredCheckpointManifestSchema, CheckpointImportRequestSchema3, CapacityReserveRequestSchema2, RestoreMainRequestSchema2, ResolveStatePositionRequestSchema, NomosValueSchema2, NomosStructSchema2, BirthOutcomeStatusSchema2, BirthOutcomeStatus2, QueryOperationSchema2, QueryOperation3, KernelLawCapabilitySchema2, KernelLawCapability2, CheckpointCompressionSchema, CheckpointCompression, CheckpointVerificationPolicySchema, CheckpointVerificationPolicy, CheckpointAssuranceSchema, CheckpointAssurance, IntentTransportRequirementSchema2, IntentTransportRequirement2, LifecycleInstallPhaseSchema, LifecycleInstallPhase;
12949
13149
  var init_kernel_pb2 = __esm({
12950
13150
  "vendor/engine/proto/nomos/kernel/v1/kernel_pb.js"() {
12951
13151
  "use strict";
12952
- file_nomos_kernel_v1_kernel2 = /* @__PURE__ */ fileDesc3("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEi/gQKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEiwKBHRlc3QYECABKAsyHC5ub21vcy5rZXJuZWwudjEuVGVzdFJlcXVlc3RIABJIChNzaWduX3ByZXBhcmVkX29mZmVyGBEgASgLMikubm9tb3Mua2VybmVsLnYxLlNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdEgAEkoKFHByZXBhcmVfcmVtb3RlX29mZmVyGBIgASgLMioubm9tb3Mua2VybmVsLnYxLlByZXBhcmVSZW1vdGVPZmZlclJlcXVlc3RIABJOChZzaWduX29mZmVyX3ByZXBhcmF0aW9uGBMgASgLMiwubm9tb3Mua2VybmVsLnYxLlNpZ25PZmZlclByZXBhcmF0aW9uUmVxdWVzdEgAQgsKCW9wZXJhdGlvbiK0BQoMQ2FsbFJlc3BvbnNlEhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIrCgdmYWlsdXJlGAogASgLMhgubm9tb3Mua2VybmVsLnYxLkZhaWx1cmVIABItCgRvcGVuGAsgASgLMh0ubm9tb3Mua2VybmVsLnYxLk9wZW5SZXNwb25zZUgAEi8KBW9mZmVyGAwgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIABIvCgVxdWVyeRgNIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5RdWVyeVJlc3BvbnNlSAASMQoGb3V0Ym94GA4gASgLMh8ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlc3BvbnNlSAASLQoEc3luYxgPIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5TeW5jUmVzcG9uc2VIABIzCgdjdXN0b2R5GBAgASgLMiAubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlSZXNwb25zZUgAEi0KBHRlc3QYESABKAsyHS5ub21vcy5rZXJuZWwudjEuVGVzdFJlc3BvbnNlSAASSQoTc2lnbl9wcmVwYXJlZF9vZmZlchgSIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5TaWduUHJlcGFyZWRPZmZlclJlc3BvbnNlSAASSwoUcHJlcGFyZV9yZW1vdGVfb2ZmZXIYEyABKAsyKy5ub21vcy5rZXJuZWwudjEuUHJlcGFyZVJlbW90ZU9mZmVyUmVzcG9uc2VIABJPChZzaWduX29mZmVyX3ByZXBhcmF0aW9uGBQgASgLMi0ubm9tb3Mua2VybmVsLnYxLlNpZ25PZmZlclByZXBhcmF0aW9uUmVzcG9uc2VIAEIJCgdvdXRjb21lIlcKB0ZhaWx1cmUSDAoEY29kZRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiPAoMT3BlblJlc3BvbnNlEiwKBnJlc3VsdBgBIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCL3AgoNT2ZmZXJSZXNwb25zZRIyCghhZG1pdHRlZBgBIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlckFkbWl0dGVkSAASMAoHcmVmdXNlZBgCIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlZnVzZWRIABI7Cg1kZWFkX2xldHRlcmVkGAMgASgLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyRGVhZExldHRlcmVkSAASOAoLcXVhcmFudGluZWQYBCABKAsyIS5ub21vcy5rZXJuZWwudjEuT2ZmZXJRdWFyYW50aW5lZEgAEkoKFWJsb2NrZWRfb25fZGVwZW5kZW5jeRgFIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5PZmZlckJsb2NrZWRPbkRlcGVuZGVuY3lIABIyCghwcmVwYXJlZBgGIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclByZXBhcmVkSABCCQoHb3V0Y29tZSI9Cg1PZmZlckFkbWl0dGVkEiwKBnJlc3VsdBgBIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCKWAQoMT2ZmZXJSZWZ1c2VkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESLwoHcmVmdXNhbBgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsEjEKC2RpYWdub3N0aWNzGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0QgsKCV9vZmZlcl9pZCJ6ChFPZmZlckRlYWRMZXR0ZXJlZBIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEg4KBnJlYXNvbhgCIAEoCRIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQirgEKEE9mZmVyUXVhcmFudGluZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIZChFhdXRob3JlZF9sYXdfaGFzaBgCIAEoCRIYChBjdXJyZW50X2xhd19oYXNoGAMgASgJEg4KBnJlYXNvbhgEIAEoCRIxCgtkaWFnbm9zdGljcxgFIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQigQEKGE9mZmVyQmxvY2tlZE9uRGVwZW5kZW5jeRIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEg4KBmRldGFpbBgCIAEoCRIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQihQEKDU9mZmVyUHJlcGFyZWQSHAoUYXV0aG9yZWRfY2hhbmdlX3VzZGEYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRIhChlhdXRob3Jfc2lnbmF0dXJlX3JlcXVpcmVkGAQgASgIImoKGFNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdBIcChRhdXRob3JlZF9jaGFuZ2VfdXNkYRgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIVCg1hdXRob3Jfc2VjcmV0GAMgASgMIjcKGVNpZ25QcmVwYXJlZE9mZmVyUmVzcG9uc2USGgoSc2lnbmVkX2NoYW5nZV91c2RhGAEgASgMIo4BChlQcmVwYXJlUmVtb3RlT2ZmZXJSZXF1ZXN0EhUKDW9mZmVyX3JlcXVlc3QYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRISCgpwdWJsaWNfa2V5GAQgASgMEhEKCXNpZ25hdHVyZRgFIAEoDCJQChlPZmZlclByZXBhcmF0aW9uQ2hhbGxlbmdlEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAEgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAiABKAkimQEKGlByZXBhcmVSZW1vdGVPZmZlclJlc3BvbnNlEj8KCWNoYWxsZW5nZRgBIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5PZmZlclByZXBhcmF0aW9uQ2hhbGxlbmdlSAASLwoFb2ZmZXIYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAQgkKB291dGNvbWUigAEKG1NpZ25PZmZlclByZXBhcmF0aW9uUmVxdWVzdBIVCg1vZmZlcl9yZXF1ZXN0GAEgASgMEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAIgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAyABKAkSFQoNYXV0aG9yX3NlY3JldBgEIAEoDCJFChxTaWduT2ZmZXJQcmVwYXJhdGlvblJlc3BvbnNlEhIKCnB1YmxpY19rZXkYASABKAwSEQoJc2lnbmF0dXJlGAIgASgMIoEBCg1LZXJuZWxSZWZ1c2FsEjAKBGNvZGUYASABKA4yIi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbENvZGUSDwoHbWVzc2FnZRgCIAEoCRItCgdkZXRhaWxzGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IrgDCg1RdWVyeVJlc3BvbnNlEiwKBXZhbHVlGAEgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWVIABJKChNhdXRob3JpemF0aW9uX2NoZWNrGAogASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25DaGVja1Jlc3BvbnNlSAASTAoUYXV0aG9yaXphdGlvbl9leHBhbmQYCyABKAsyLC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGFuZFJlc3BvbnNlSAASPgoNb3NnaV9yZXNvdXJjZRgMIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5Pc2dpUmVzb3VyY2VSZXNwb25zZUgAEkoKE2Zyb250aWVyX3RyYW5zaXRpb24YDSABKAsyKy5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uUmVzcG9uc2VIABJJChh2ZXJpZnlfY2hhaW5fZGlhZ25vc3RpY3MYFCABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljc0IICgZyZXN1bHQiSAoNT3NnaUF0dHJpYnV0ZRIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgJEhEKBHR5cGUYAyABKAlIAIgBAUIHCgVfdHlwZSIsCg1Pc2dpRGlyZWN0aXZlEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiABKAkiiwEKDk9zZ2lDYXBhYmlsaXR5EhEKCW5hbWVzcGFjZRgBIAEoCRIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lBdHRyaWJ1dGUSMgoKZGlyZWN0aXZlcxgDIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpRGlyZWN0aXZlIowBCg9Pc2dpUmVxdWlyZW1lbnQSEQoJbmFtZXNwYWNlGAEgASgJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaUF0dHJpYnV0ZRIyCgpkaXJlY3RpdmVzGAMgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lEaXJlY3RpdmUimgEKFE9zZ2lSZXNvdXJjZVJlc3BvbnNlEhMKC3NvdXJjZV91c2RhGAEgASgMEjUKDGNhcGFiaWxpdGllcxgCIAMoCzIfLm5vbW9zLmtlcm5lbC52MS5Pc2dpQ2FwYWJpbGl0eRI2CgxyZXF1aXJlbWVudHMYAyADKAsyIC5ub21vcy5rZXJuZWwudjEuT3NnaVJlcXVpcmVtZW50IucBChNWZXJpZnlDaGFpblN0ZXBTcGFuEg0KBWluZGV4GAEgASgEEhIKCmNvbW1pdF9vaWQYAiABKAkSDgoGZG9tYWluGAMgASgJEhEKCWRpcmVjdGl2ZRgEIAEoCRIQCgh0b3RhbF91cxgFIAEoBBI2CgZwaGFzZXMYBiABKAsyJi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEkAKDmVuZ2luZV90aW1pbmdzGAcgAygLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRW5naW5lVGltaW5nIpgCChVWZXJpZnlDaGFpblN0ZXBQaGFzZXMSHgoWcnVudGltZV9sYXdfcmVmcmVzaF91cxgBIAEoBBITCgttYW5pZmVzdF91cxgCIAEoBBIZChFsYXdfcmVzb2x1dGlvbl91cxgDIAEoBBIdChVtYW5hZ2VkX3RyYW5zaXRpb25fdXMYBCABKAQSFAoMcHJpbmNpcGFsX3VzGAUgASgEEhQKDGV2b2x1dGlvbl91cxgGIAEoBBIaChJjb2xvY2F0ZWRfcmVhZHNfdXMYByABKAQSIQoZdHlwZWRfaW5zdGFsbF92ZXJpZmllcl91cxgIIAEoBBIUCgxhZG1pc3Npb25fdXMYCSABKAQSDwoHZm9sZF91cxgKIAEoBCLaBQoWVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcxIuCgR3YWxrGAEgASgOMiAubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluV2FsaxIQCgh0b3RhbF91cxgCIAEoBBIbChNyZWZlcmVuY2VfbG9va3VwX3VzGAMgASgEEhoKEnJlcG9zaXRvcnlfb3Blbl91cxgEIAEoBBIVCg1jaGFpbl9yZWFkX3VzGAUgASgEEhYKDmVuZ2luZV9pbml0X3VzGAYgASgEEhgKEHRpbWVsaW5lX3JlYWRfdXMYByABKAQSGAoQbGF3X2h5ZHJhdGlvbl91cxgIIAEoBBIbChNyZWNvdmVyeV9wcmVzY2FuX3VzGAkgASgEEhgKEGZvbGRfZnJvbnRpZXJfdXMYCiABKAQSMwoFc3RlcHMYCyADKAsyJC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwU3BhbhJACg5lbmdpbmVfdGltaW5ncxgMIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkVuZ2luZVRpbWluZxJNChVsYXdfaHlkcmF0aW9uX3RpbWluZ3MYDSADKAsyLi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5MYXdIeWRyYXRpb25UaW1pbmcSGQoRbGF3X2Nsb3N1cmVfY291bnQYDiABKAQSHgoWbGF3X2Nsb3N1cmVfY2FjaGVfaGl0cxgPIAEoBBIgChhsYXdfY2xvc3VyZV9jYWNoZV9taXNzZXMYECABKAQSEgoKc3RlcF9jb3VudBgRIAEoBBIVCg1zdGVwX3RvdGFsX3VzGBIgASgEEkEKEXN0ZXBfcGhhc2VfdG90YWxzGBMgASgLMiYubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFBoYXNlcxIaChJvbWl0dGVkX3N0ZXBfY291bnQYFCABKAQiOgoXVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcSDQoFcGhhc2UYASABKAkSEAoIdG90YWxfdXMYAiABKAQiQAodVmVyaWZ5Q2hhaW5MYXdIeWRyYXRpb25UaW1pbmcSDQoFcGhhc2UYASABKAkSEAoIdG90YWxfdXMYAiABKAQitgIKDU91dGJvdW5kT2ZmZXISCgoCaWQYASABKAkSEwoLZGVzdGluYXRpb24YAiABKAkSFAoMc2VhbGVkX29mZmVyGAMgASgMEhQKDGNvbnRlbnRfdHlwZRgEIAEoCRIYChBzb3VyY2Vfd29ya3NwYWNlGAUgASgJEhQKDGN1c3RvZHlfaGVhZBgGIAEoCRIXCg9jYXVzZWRfYnlfb2ZmZXIYByABKAkSGwoTc2NoZWR1bGVkX2F0X21pbGxpcxgIIAEoBBIaChJkZWFkbGluZV9hdF9taWxsaXMYCSABKAQSFAoMY3VzdG9keV9wYXRoGAogASgJEhMKC2N1c3RvZHlfb2lkGAsgASgJEhQKDGRlbGl2ZXJ5X3JlZhgMIAEoCRIVCg1vYmxpZ2F0aW9uX2lkGA0gASgJIngKDk91dGJveFJlc3BvbnNlEi4KBm9mZmVycxgBIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5PdXRib3VuZE9mZmVyEh8KEm5leHRfZHVlX2F0X21pbGxpcxgCIAEoBEgAiAEBQhUKE19uZXh0X2R1ZV9hdF9taWxsaXMiPAoMU3luY1Jlc3BvbnNlEiwKBnJlc3VsdBgBIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCJCCg9Xb3Jrc3BhY2VUYXJnZXQSDAoEcmVwbxgBIAEoCRIRCgl3b3Jrc3BhY2UYAiABKAkSDgoGYnJhbmNoGAMgASgJIk4KC09wZW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDQoFc3BhbnMYAiABKAgiYQoNRGlyZWN0aXZlQ2FsbBIOCgZkb21haW4YASABKAkSEQoJZGlyZWN0aXZlGAIgASgJEi0KB3BheWxvYWQYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3Qi1gIKEEF1dGhvcmluZ09wdGlvbnMSDQoFYWN0b3IYASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIVCg1hdXRob3Jfc2VjcmV0GAMgASgMEh0KEHZhbGlkX2Zyb21fZXBvY2gYBCABKARIAIgBARIfChJwcmluY2lwYWxfdmVyaWZpZWQYBSABKAhIAYgBARILCgNybmcYBiADKAESGAoQZGVmZXJfcHJvamVjdGlvbhgHIAEoCBINCgVzcGFucxgIIAEoCBIPCgdkcnlfcnVuGAkgASgIEhAKCHNlcXVlbmNlGAogASgEEi0KBWNsb2NrGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLkNhcHR1cmVkQ2xvY2sSFAoMcHJlcGFyZV9vbmx5GAwgASgIQhMKEV92YWxpZF9mcm9tX2Vwb2NoQhUKE19wcmluY2lwYWxfdmVyaWZpZWQiSgoNQ2FwdHVyZWRDbG9jaxIXCg9waHlzaWNhbF9taWxsaXMYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIsMDChBCaXJ0aENlcnRpZmljYXRlEg0KBWNoaWxkGAEgASgJEg8KB2ZvdW5kZXIYAiABKAkSEAoIdmVyaWZpZWQYAyABKAgSEgoKcGFyZW50X2tleRgEIAEoDBIRCglwYXJlbnRfaWQYBSABKAkSDQoFZXBvY2gYBiABKAMSEQoJc2lnbmF0dXJlGAcgASgMEhkKDHZlcmlmaWVkX3ZpYRgIIAEoCUgAiAEBEhYKCWlkcF90b2tlbhgJIAEoCUgBiAEBEhsKDmNhcHR1cmVkX2Nsb2NrGAogASgDSAKIAQESIQoUYXV0aF9wcm92aWRlcl9pc3N1ZXIYCyABKAlIA4gBARIfChJhdXRoX3Byb3ZpZGVyX2p3a3MYDCABKAlIBIgBARIjChZhdXRoX3Byb3ZpZGVyX2F1ZGllbmNlGA0gASgJSAWIAQFCDwoNX3ZlcmlmaWVkX3ZpYUIMCgpfaWRwX3Rva2VuQhEKD19jYXB0dXJlZF9jbG9ja0IXChVfYXV0aF9wcm92aWRlcl9pc3N1ZXJCFQoTX2F1dGhfcHJvdmlkZXJfandrc0IZChdfYXV0aF9wcm92aWRlcl9hdWRpZW5jZSKcBAoMT2ZmZXJSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSLgoEY2FsbBgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVDYWxsSAASHAoSc2VhbGVkX2NoYW5nZV91c2RhGAcgASgMSAASNAoJYXV0aG9yaW5nGAMgASgLMiEubm9tb3Mua2VybmVsLnYxLkF1dGhvcmluZ09wdGlvbnMSEAoIbGF3X3VzZHoYBCABKAwSMwoMYXR0ZXN0YXRpb25zGAUgAygLMh0ubm9tb3Mua2VybmVsLnYxLkF0dGVzdGVkUmVhZBI9ChJjb25mbGljdF9zbmFwc2hvdHMYBiADKAsyIS5ub21vcy5rZXJuZWwudjEuQ29uZmxpY3RTbmFwc2hvdBIaChJleGVjdXRpb25fbGF3X3VzZHoYCCABKAwSIAoTY29udHJvbGxlcl9sYXdfaGFzaBgJIAEoCUgBiAEBEh0KEGNhbmRpZGF0ZV9jb21taXQYCiABKAlIAogBARI8ChFiaXJ0aF9jZXJ0aWZpY2F0ZRgLIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5CaXJ0aENlcnRpZmljYXRlQggKBmludGVudEIWChRfY29udHJvbGxlcl9sYXdfaGFzaEITChFfY2FuZGlkYXRlX2NvbW1pdCKTAQoMQXR0ZXN0ZWRSZWFkEhAKCHF1ZXJ5X2lkGAEgASgJEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBIrCgZyZXN1bHQYAyABKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZRITCgthdHRlc3RhdGlvbhgEIAEoDCJ1ChBDb25mbGljdFNuYXBzaG90EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhQKDGFnZ3JlZ2F0ZV9pZBgCIAEoCRINCgVmaWVsZBgDIAEoCRIVCg10YXJnZXRfc2NoZW1hGAQgASgJEg0KBXRva2VuGAUgASgJIrAGCgxRdWVyeVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIyCglhdXRob3JpdHkYAiABKAsyHy5ub21vcy5rZXJuZWwudjEuUXVlcnlBdXRob3JpdHkSDQoFc3BhbnMYAyABKAgSKgoEcm93cxgKIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5Sb3dzUXVlcnlIABIqCgRwYWdlGAsgASgLMhoubm9tb3Mua2VybmVsLnYxLlBhZ2VRdWVyeUgAEisKBWJ5X2lkGAwgASgLMhoubm9tb3Mua2VybmVsLnYxLkJ5SWRRdWVyeUgAEjkKDHJlc29sdmVfcmVmcxgNIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmc1F1ZXJ5SAASRQoScmVmZXJlbmNlX3ZlcnNpb25zGA4gASgLMicubm9tb3Mua2VybmVsLnYxLlJlZmVyZW5jZVZlcnNpb25zUXVlcnlIABIsCgVjb3VudBgPIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5UYWxseVF1ZXJ5SAASKgoDc3VtGBAgASgLMhsubm9tb3Mua2VybmVsLnYxLlRhbGx5UXVlcnlIABIwCgdzcGF0aWFsGBEgASgLMh0ubm9tb3Mua2VybmVsLnYxLlNwYXRpYWxRdWVyeUgAEiwKBW5hbWVkGBIgASgLMhsubm9tb3Mua2VybmVsLnYxLk5hbWVkUXVlcnlIABJJChNhdXRob3JpemF0aW9uX2NoZWNrGBMgASgLMioubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25DaGVja1JlcXVlc3RIABJLChRhdXRob3JpemF0aW9uX2V4cGFuZBgUIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwYW5kUmVxdWVzdEgAEkkKE2Zyb250aWVyX3RyYW5zaXRpb24YFSABKAsyKi5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uUmVxdWVzdEgAQgcKBXF1ZXJ5IpIBCg5RdWVyeUF1dGhvcml0eRIXCg9wcmluY2lwYWxfY2xhaW0YASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIQCghub3dfdW5peBgDIAEoBBIVCg1hdXRob3Jfc2VjcmV0GAQgASgMEioKBGtleXMYBSADKAsyHC5ub21vcy5rZXJuZWwudjEuSW5qZWN0ZWRLZXkiOAoLSW5qZWN0ZWRLZXkSDQoFc2NvcGUYASABKAkSDQoFZXBvY2gYAiABKAQSCwoDa2V5GAMgASgMIlsKCVJvd3NRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJInkKCVBhZ2VRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSDQoFbGltaXQYAyABKA0SDQoFYWZ0ZXIYBCABKAkSEQoJcHJpbmNpcGFsGAUgASgJIkwKCUJ5SWRRdWVyeRIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSEQoJcHJpbmNpcGFsGAMgASgJIlwKCE5vbW9zUmVmEhEKCXdvcmtzcGFjZRgBIAEoCRIWCg5hZ2dyZWdhdGVfdHlwZRgCIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAyABKAkSDwoHdmVyc2lvbhgEIAEoCSJOChBSZXNvbHZlUmVmc1F1ZXJ5EicKBHJlZnMYASADKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSEQoJcHJpbmNpcGFsGAIgASgJIk4KFlJlZmVyZW5jZVZlcnNpb25zUXVlcnkSNAoEcmVmcxgBIAMoCzImLm5vbW9zLmtlcm5lbC52MS5SZWZlcmVuY2VWZXJzaW9uQ2hlY2sihAEKFVJlZmVyZW5jZVZlcnNpb25DaGVjaxIpCgZwaW5uZWQYASABKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSKQoGc2VyaWVzGAIgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhUKDWN1cnJlbnRfZmllbGQYAyABKAkiXAoKVGFsbHlRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJIl4KDFNwYXRpYWxRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJInEKCk5hbWVkUXVlcnkSMgoJb3BlcmF0aW9uGAEgASgOMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5T3BlcmF0aW9uEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCKxAQoZRnJvbnRpZXJUcmFuc2l0aW9uUmVxdWVzdBIOCgZkb21haW4YASABKAkSFgoOY2FuZGlkYXRlX2hhc2gYAiABKAkSDwoHYXRfaGFzaBgDIAEoCRIhChlhY2tub3dsZWRnZW1lbnRfcHJpbmNpcGFsGAQgASgJEiAKE3Jlc3RvcmVfcHJldmlvdXNfb2YYBSABKAlIAIgBAUIWChRfcmVzdG9yZV9wcmV2aW91c19vZiJaCiVGcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhgKEHNvdXJjZV9zdGFibGVfaWQYASABKAkSFwoPYWNrbm93bGVkZ2VtZW50GAIgASgJIvUBCh5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbnMSDwoHcmV0aXJlZBgBIAMoCRJHCgdyZXR5cGVkGAIgAygLMjYubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uTWFwRW50cnkSRwoHcmViaW5kcxgDIAMoCzI2Lm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhwKD2Fja25vd2xlZGdlZF9ieRgEIAEoCUgAiAEBQhIKEF9hY2tub3dsZWRnZWRfYnkiPQobRnJvbnRpZXJUcmFuc2l0aW9uVmlvbGF0aW9uEg4KBmRvbWFpbhgBIAEoCRIOCgZkZXRhaWwYAiABKAki1wIKGkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlEg8KB2F0X2hhc2gYASABKAkSGQoMY3VycmVudF9oYXNoGAIgASgJSACIAQESFQoNYXRfc3RhdGVfcm9vdBgDIAEoCRIWCg5jYW5kaWRhdGVfaGFzaBgEIAEoCRIOCgZkb21haW4YBSABKAkSDwoHZG9tYWlucxgGIAMoCRINCgVyZWFkeRgHIAEoCBJACgp2aW9sYXRpb25zGAggAygLMiwubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblZpb2xhdGlvbhJKCgxkaXNwb3NpdGlvbnMYCSABKAsyLy5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25zSAGIAQFCDwoNX2N1cnJlbnRfaGFzaEIPCg1fZGlzcG9zaXRpb25zIi8KE0F1dGhvcml6YXRpb25PYmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSJUChRBdXRob3JpemF0aW9uU3ViamVjdBIMCgR0eXBlGAEgASgJEgoKAmlkGAIgASgJEhUKCHJlbGF0aW9uGAMgASgJSACIAQFCCwoJX3JlbGF0aW9uIpwBChhSZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBIQCghyZWxhdGlvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0IoEBChhBdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSIwoZY3VycmVudF92ZXJpZmllZF9mcm9udGllchgBIAEoCEgAEhkKD2F0X2xlYXN0X2NvbW1pdBgCIAEoCUgAEhYKDGV4YWN0X2NvbW1pdBgDIAEoCUgAQg0KC3JlcXVpcmVtZW50ImYKHUF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EhQKDGNvbmRpdGlvbl9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3Qi9wIKGUF1dGhvcml6YXRpb25DaGVja1JlcXVlc3QSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBISCgpwZXJtaXNzaW9uGAIgASgJEjYKB3N1YmplY3QYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvblN1YmplY3QSPgoLY29uc2lzdGVuY3kYBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBSADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgGIAEoCUgAiAEBEhsKE2luY2x1ZGVfZXhwbGFuYXRpb24YByABKAhCFgoUX2V4cGVjdGVkX21vZGVsX2hhc2gi7QIKGkF1dGhvcml6YXRpb25FeHBhbmRSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI+Cgtjb25zaXN0ZW5jeRgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSPwoHY29udGV4dBgEIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIgChNleHBlY3RlZF9tb2RlbF9oYXNoGAUgASgJSACIAQESDQoFbGltaXQYBiABKA0SEgoFYWZ0ZXIYByABKAlIAYgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAggASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoQggKBl9hZnRlciK9AQoZUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI4CgV0dXBsZRgBIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSEAoIdHVwbGVfaWQYAiABKAkSGgoSYXNzZXJ0aW9uX2V2ZW50X2lkGAMgASgJEiAKE3Jldm9jYXRpb25fZXZlbnRfaWQYBCABKAlIAIgBAUIWChRfcmV2b2NhdGlvbl9ldmVudF9pZCLhAwoYQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uEkYKCW9wZXJhdGlvbhgBIAEoDjIzLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24uT3BlcmF0aW9uEhAKCHJlbGF0aW9uGAIgASgJEg4KBnJlc3VsdBgDIAEoCBI8CghldmlkZW5jZRgEIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUV2aWRlbmNlEjsKCGNoaWxkcmVuGAUgAygLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbiLfAQoJT3BlcmF0aW9uEhkKFU9QRVJBVElPTl9VTlNQRUNJRklFRBAAEhQKEE9QRVJBVElPTl9ESVJFQ1QQARIeChpPUEVSQVRJT05fQ09NUFVURURfVVNFUlNFVBACEh4KGk9QRVJBVElPTl9UVVBMRV9UT19VU0VSU0VUEAMSEwoPT1BFUkFUSU9OX1VOSU9OEAQSGgoWT1BFUkFUSU9OX0lOVEVSU0VDVElPThAFEhcKE09QRVJBVElPTl9FWENMVVNJT04QBhIXChNPUEVSQVRJT05fQ09ORElUSU9OEAcidwoaQXV0aG9yaXphdGlvbkRlY2lzaW9uQmFzaXMSIAoYYXV0aG9yaXphdGlvbl9tb2RlbF9oYXNoGAEgASgJEiEKGXJlbGF0aW9uc2hpcF9zdGF0ZV9jb21taXQYAiABKAkSFAoMY29udGV4dF9oYXNoGAMgASgMIr4BChpBdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZRIPCgdhbGxvd2VkGAEgASgIEjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEkMKC2V4cGxhbmF0aW9uGAMgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbkgAiAEBQg4KDF9leHBsYW5hdGlvbiKDAgobQXV0aG9yaXphdGlvbkV4cGFuZFJlc3BvbnNlEjcKCHN1YmplY3RzGAEgAygLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0EjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEhEKBG5leHQYAyABKAlIAIgBARJDCgtleHBsYW5hdGlvbhgEIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAYgBAUIHCgVfbmV4dEIOCgxfZXhwbGFuYXRpb24icAoNT3V0Ym94UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Ei0KBWNsb2NrGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLkNhcHR1cmVkQ2xvY2siYwoLU3luY1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIRCglmcm9tX2Jhc2UYAiABKAkSDwoHdG9faGVhZBgDIAEoCSJTCgtUZXN0UmVxdWVzdBI3CghzZXRfcm9vdBgBIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5TZXRUZXN0Um9vdFJlcXVlc3RIAEILCglvcGVyYXRpb24iKAoSU2V0VGVzdFJvb3RSZXF1ZXN0EhIKCnB1YmxpY19rZXkYASABKAwiPQoMVGVzdFJlc3BvbnNlEi0KBnJlc3VsdBgBIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWQi1QsKDkN1c3RvZHlSZXF1ZXN0EjcKCnBhY2tfZGVsdGEYCiABKAsyIS5ub21vcy5rZXJuZWwudjEuUGFja0RlbHRhUmVxdWVzdEgAEjcKCmFwcGx5X3BhY2sYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuQXBwbHlQYWNrUmVxdWVzdEgAEjcKCnJlcG9fc3RhdHMYDCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVwb1N0YXRzUmVxdWVzdEgAEj0KDWludGVudHNfYWJvdmUYDSABKAsyJC5ub21vcy5rZXJuZWwudjEuSW50ZW50c0Fib3ZlUmVxdWVzdEgAEj8KDmluc3BlY3RfY2hhbmdlGA4gASgLMiUubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDaGFuZ2VSZXF1ZXN0SAASTgoWZW5jb2RlX3JlZnVzYWxfdmVyZGljdBgPIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5FbmNvZGVSZWZ1c2FsVmVyZGljdFJlcXVlc3RIABJQChdpbnNwZWN0X3JlZnVzYWxfdmVyZGljdBgQIAEoCzItLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0UmVmdXNhbFZlcmRpY3RSZXF1ZXN0SAASNQoJcmVhZF9ibG9iGBEgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRCbG9iUmVxdWVzdEgAEjkKC3Jlc29sdmVfcmVmGBIgASgLMiIubm9tb3Mua2VybmVsLnYxLlJlc29sdmVSZWZSZXF1ZXN0SAASNQoJbGlzdF9yZWZzGBMgASgLMiAubm9tb3Mua2VybmVsLnYxLkxpc3RSZWZzUmVxdWVzdEgAEjUKCXdyaXRlX3JlZhgUIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xcml0ZVJlZlJlcXVlc3RIABI3CgpkZWxldGVfcmVmGBUgASgLMiEubm9tb3Mua2VybmVsLnYxLkRlbGV0ZVJlZlJlcXVlc3RIABJEChF3cml0ZV9tZXRhX2NvbW1pdBgWIAEoCzInLm5vbW9zLmtlcm5lbC52MS5Xcml0ZU1ldGFDb21taXRSZXF1ZXN0SAASQgoQbGF3X2Nsb3N1cmVfaW5mbxgXIAEoCzImLm5vbW9zLmtlcm5lbC52MS5MYXdDbG9zdXJlSW5mb1JlcXVlc3RIABJFChFjaGVja3BvaW50X2V4cG9ydBgYIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50RXhwb3J0UmVxdWVzdEgAEkUKEWNoZWNrcG9pbnRfaW1wb3J0GBkgASgLMigubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRJbXBvcnRSZXF1ZXN0SAASQwoQY2FwYWNpdHlfcmVzZXJ2ZRgaIAEoCzInLm5vbW9zLmtlcm5lbC52MS5DYXBhY2l0eVJlc2VydmVSZXF1ZXN0SAASOwoMcmVzdG9yZV9tYWluGBsgASgLMiMubm9tb3Mua2VybmVsLnYxLlJlc3RvcmVNYWluUmVxdWVzdEgAEk4KFnJlc29sdmVfc3RhdGVfcG9zaXRpb24YHCABKAsyLC5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXF1ZXN0SAASRwoScmVzaWRlbnRfZm9vdHByaW50GB0gASgLMikubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50UmVxdWVzdEgAEkEKD2hpc3Rvcnlfc3VtbWFyeRgeIAEoCzImLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5U3VtbWFyeVJlcXVlc3RIABJaChxwcm92ZV9jb21wYWN0aW9uX2VxdWl2YWxlbmNlGB8gASgLMjIubm9tb3Mua2VybmVsLnYxLlByb3ZlQ29tcGFjdGlvbkVxdWl2YWxlbmNlUmVxdWVzdEgAQgsKCW9wZXJhdGlvbiIoChhSZXNpZGVudEZvb3RwcmludFJlcXVlc3QSDAoEZGVlcBgBIAEoCCKfAgoRUmVzaWRlbnRGb290cHJpbnQSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIYChByZWFkX21vZGVsX2J5dGVzGAMgASgEEh0KFXJlYWRfbW9kZWxfcnVzdF9ieXRlcxgEIAEoBBIYChBmb2xkX3N0YXRlX2J5dGVzGAUgASgEEhMKC2ZvbGRfaW1hZ2VzGAYgASgNEh8KF3NoYXJlZF9hdHRyaWJ1dGVkX2J5dGVzGAcgASgEEhIKCmFnZ3JlZ2F0ZXMYCCABKAQSNgoKY29tcG9uZW50cxgJIAMoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudENvbXBvbmVudBISCgpjb21wdXRlX3VzGAogASgEImkKEVJlc2lkZW50Q29tcG9uZW50EjQKBGtpbmQYASABKA4yJi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRDb21wb25lbnRLaW5kEg0KBWJ5dGVzGAIgASgEEg8KB2NlaWxpbmcYAyABKAgiygEKGVJlc2lkZW50Rm9vdHByaW50UmVzcG9uc2USNQoJcmVzaWRlbnRzGAEgAygLMiIubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50EhwKFGFsbG9jYXRvcl9saXZlX2J5dGVzGAIgASgEEhgKEGF0dHJpYnV0ZWRfYnl0ZXMYAyABKAQSGQoRdW5hY2NvdW50ZWRfYnl0ZXMYBCABKAQSFQoNYWNjb3VudGluZ191cxgFIAEoBBIMCgRkZWVwGAYgASgIIpwBChBQYWNrRGVsdGFSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEhEKBGJhc2UYAyABKAlIAYgBARIOCgZicmFuY2gYBCABKAkSHQoQc3RhZ2VkX3BhY2tfZmlsZRgFIAEoCUgCiAEBQgcKBV9oZWFkQgcKBV9iYXNlQhMKEV9zdGFnZWRfcGFja19maWxlInIKEEFwcGx5UGFja1JlcXVlc3QSDAoEcmVwbxgBIAEoCRIOCgRwYWNrGAIgASgMSAASGgoQc3RhZ2VkX3BhY2tfZmlsZRgEIAEoCUgAEhEKBGhlYWQYAyABKAlIAYgBAUIICgZzb3VyY2VCBwoFX2hlYWQiIAoQUmVwb1N0YXRzUmVxdWVzdBIMCgRyZXBvGAEgASgJIqwBChNJbnRlbnRzQWJvdmVSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEhEKBGJhc2UYAyABKAlIAYgBARIOCgZicmFuY2gYBCABKAkSDQoFbGltaXQYBSABKAQSGAoQY29tcGxldGVfbG9naWNhbBgGIAEoCBIWCg5jb21wYWN0X3N0b3JlZBgHIAEoCEIHCgVfaGVhZEIHCgVfYmFzZSJtChVIaXN0b3J5U3VtbWFyeVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESDgoGYnJhbmNoGAMgASgJEhEKBGJhc2UYBCABKAlIAYgBAUIHCgVfaGVhZEIHCgVfYmFzZSIrChRJbnNwZWN0Q2hhbmdlUmVxdWVzdBITCgtjaGFuZ2VfdXNkYRgBIAEoDCLfAQoOUmVmdXNhbFZlcmRpY3QSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIQCgNvaWQYAiABKAlIAYgBARITCgZkb21haW4YAyABKAlIAogBARIZCgxkaXJlY3RpdmVfaWQYBCABKAlIA4gBARIUCgdzZXNzaW9uGAUgASgJSASIAQESEQoJcGFya2VkX2F0GAYgASgJEg4KBnJlYXNvbhgHIAEoCUILCglfb2ZmZXJfaWRCBgoEX29pZEIJCgdfZG9tYWluQg8KDV9kaXJlY3RpdmVfaWRCCgoIX3Nlc3Npb24iTwobRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0EjAKB3ZlcmRpY3QYASABKAsyHy5ub21vcy5rZXJuZWwudjEuUmVmdXNhbFZlcmRpY3QiNAocSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdBIUCgx2ZXJkaWN0X3VzZGEYASABKAwi1AEKFUNvbXBhY3Rpb25FcXVpdmFsZW5jZRITCgtzb3VyY2VfaGVhZBgBIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgCIAEoCRIWCg5jYW5kaWRhdGVfaGVhZBgDIAEoCRIZChFjYW5kaWRhdGVfZ2VuZXNpcxgEIAEoCRIWCg5zb3VyY2VfaW50ZW50cxgFIAEoBBIXCg9jYXJyaWVkX2ludGVudHMYBiABKAQSFgoOcGFya2VkX2ludGVudHMYByABKAQSEgoKZXF1aXZhbGVudBgIIAEoCCJ9CiFQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlcXVlc3QSEwoLc291cmNlX3JlcG8YASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSFgoOY2FuZGlkYXRlX3JlcG8YAyABKAkSFgoOY2FuZGlkYXRlX2hlYWQYBCABKAkiOgoPUmVhZEJsb2JSZXF1ZXN0EgwKBHJlcG8YASABKAkSCwoDb2lkGAIgASgJEgwKBHBhdGgYAyABKAkiNAoRUmVzb2x2ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkiLwoPTGlzdFJlZnNSZXF1ZXN0EgwKBHJlcG8YASABKAkSDgoGcHJlZml4GAIgASgJIkIKD1dyaXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCRIOCgZ0YXJnZXQYAyABKAkiMwoQRGVsZXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCSIpCghNZXRhRmlsZRIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAwirgEKFldyaXRlTWV0YUNvbW1pdFJlcXVlc3QSDAoEcmVwbxgBIAEoCRIPCgdwYXJlbnRzGAIgAygJEigKBWZpbGVzGAMgAygLMhkubm9tb3Mua2VybmVsLnYxLk1ldGFGaWxlEg8KB21lc3NhZ2UYBCABKAkSFAoMdGltZV9zZWNvbmRzGAUgASgSEhYKCXJlZmVyZW5jZRgGIAEoCUgAiAEBQgwKCl9yZWZlcmVuY2UiZwoVTGF3Q2xvc3VyZUluZm9SZXF1ZXN0EhQKDGNsb3N1cmVfZmlsZRgBIAEoCRI4CgpjYXBhYmlsaXR5GAIgASgOMiQubm9tb3Mua2VybmVsLnYxLktlcm5lbExhd0NhcGFiaWxpdHkihwEKF0NoZWNrcG9pbnRFeHBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSIQoUc3RhZ2VkX2Zyb250aWVyX2ZpbGUYAiABKAlIAIgBAUIXChVfc3RhZ2VkX2Zyb250aWVyX2ZpbGUiQQoLRnJvbnRpZXJIbGMSEAoIcGh5c2ljYWwYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIt0EChdWZXJpZmllZEZyb250aWVyUmVjZWlwdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgNvaWQYAiABKAkSDwoHaW50ZW50cxgDIAEoBBITCgtwbGFuc19yZXJ1bhgEIAEoBBIcCg9jb250cm9sbGVyX2hhc2gYBSABKAlIAIgBARIZChFpbnN0YWxsZWRfZG9tYWlucxgGIAMoCRIOCgZsaW5lYXIYByABKAgSMwoIbGFzdF9obGMYCCABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAYgBARIUCgdsYXN0X2lkGAkgASgJSAKIAQESEQoJc3RhdGVfb2lkGAogASgJEhQKDHN0YXRlX3NoYTI1NhgLIAEoCRI5Cg5zdGF0ZV9sYXN0X2hsYxgMIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gDiAEBEhoKDXN0YXRlX2xhc3RfaWQYDSABKAlIBIgBARIXCg9tYW5pZmVzdF9zaGEyNTYYDiABKAkSHgoWbGF3X2Nsb3N1cmVfaWRlbnRpdGllcxgPIAMoCRIaChJyZXNvbHZhYmxlX2RvbWFpbnMYECADKAkSIgoVcHJvamVjdGlvbl9zdGF0ZV9yb290GBEgASgJSAWIAQFCEgoQX2NvbnRyb2xsZXJfaGFzaEILCglfbGFzdF9obGNCCgoIX2xhc3RfaWRCEQoPX3N0YXRlX2xhc3RfaGxjQhAKDl9zdGF0ZV9sYXN0X2lkQhgKFl9wcm9qZWN0aW9uX3N0YXRlX3Jvb3QiRQoVRm9sZEZyb250aWVyQWdncmVnYXRlEhQKDGFnZ3JlZ2F0ZV9pZBgBIAEoCRIWCg5hZ2dyZWdhdGVfdXNkYRgCIAEoDCJBChdGb2xkRnJvbnRpZXJGaW5nZXJwcmludBIRCglpbnRlbnRfaWQYASABKAkSEwoLZmluZ2VycHJpbnQYAiABKAki1gMKFEZvbGRGcm9udGllclNuYXBzaG90EhYKDmZvcm1hdF92ZXJzaW9uGAEgASgNEgsKA3RpcBgCIAEoCRIPCgdnZW5lc2lzGAMgASgJEhUKDWhpc3RvcnlfZGVwdGgYBCABKAQSOgoKYWdncmVnYXRlcxgFIAMoCzImLm5vbW9zLmtlcm5lbC52MS5Gb2xkRnJvbnRpZXJBZ2dyZWdhdGUSOAoNaGxjX3dhdGVybWFyaxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gAiAEBEjMKCGxhc3RfaGxjGAcgASgLMhwubm9tb3Mua2VybmVsLnYxLkZyb250aWVySGxjSAGIAQESFAoHbGFzdF9pZBgIIAEoCUgCiAEBEhYKDnN0cmlrZV90YXJnZXRzGAkgAygJEkUKE2ludGVudF9maW5nZXJwcmludHMYCiADKAsyKC5ub21vcy5rZXJuZWwudjEuRm9sZEZyb250aWVyRmluZ2VycHJpbnQSFwoKc3RhdGVfcm9vdBgLIAEoCUgDiAEBQhAKDl9obGNfd2F0ZXJtYXJrQgsKCV9sYXN0X2hsY0IKCghfbGFzdF9pZEINCgtfc3RhdGVfcm9vdCKbAwoYU3RvcmVkQ2hlY2twb2ludE1hbmlmZXN0EhYKDmZvcm1hdF92ZXJzaW9uGAEgASgNEhMKBmN1cnNvchgCIAEoCUgAiAEBEhgKEGNoZWNrcG9pbnRfYnl0ZXMYAyABKAQSEAoIbGF3X2hhc2gYBCABKAkSOwoLY29tcHJlc3Npb24YBSABKA4yJi5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludENvbXByZXNzaW9uEhEKCXJhd19ieXRlcxgGIAEoBBIUCgxzdG9yZWRfYnl0ZXMYByABKAQSHQoVZnJvbnRpZXJfc3RvcmVkX2J5dGVzGAggASgEEhcKCnN0YXRlX3Jvb3QYCSABKAlIAYgBARJQChl2ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0GAogASgLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmaWVkRnJvbnRpZXJSZWNlaXB0SAKIAQFCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIcChpfdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdCLBAwoXQ2hlY2twb2ludEltcG9ydFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBISCghmcm9udGllchgCIAEoDEgAEh4KFHN0YWdlZF9mcm9udGllcl9maWxlGAYgASgJSAASEwoGY3Vyc29yGAMgASgJSAGIAQESFwoKc3RhdGVfcm9vdBgEIAEoCUgCiAEBEg0KBXNwYW5zGAUgASgIEhEKBGhlYWQYByABKAlIA4gBARJQChl2ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0GAggASgLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmaWVkRnJvbnRpZXJSZWNlaXB0SASIAQESSgoTdmVyaWZpY2F0aW9uX3BvbGljeRgJIAEoDjItLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50VmVyaWZpY2F0aW9uUG9saWN5QhEKD2Zyb250aWVyX3NvdXJjZUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QgcKBV9oZWFkQhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0IjEKFkNhcGFjaXR5UmVzZXJ2ZVJlcXVlc3QSFwoPYWdncmVnYXRlX2NvdW50GAEgASgEImkKElJlc3RvcmVNYWluUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EgwKBGhlYWQYAiABKAkSEwoLZGlhZ25vc3RpY3MYAyABKAgiaQobUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJbWFpbl9oZWFkGAIgASgJEhUKDWhpbnRlZF9jb21taXQYAyABKAkSEgoKc3RhdGVfcm9vdBgEIAEoCSLjCwoPQ3VzdG9keVJlc3BvbnNlEjgKCnBhY2tfZGVsdGEYCiABKAsyIi5ub21vcy5rZXJuZWwudjEuUGFja0RlbHRhUmVzcG9uc2VIABI4CgphcHBseV9wYWNrGAsgASgLMiIubm9tb3Mua2VybmVsLnYxLkFwcGx5UGFja1Jlc3BvbnNlSAASOAoKcmVwb19zdGF0cxgMIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXBvU3RhdHNSZXNwb25zZUgAEj4KDWludGVudHNfYWJvdmUYDSABKAsyJS5ub21vcy5rZXJuZWwudjEuSW50ZW50c0Fib3ZlUmVzcG9uc2VIABJACg5pbnNwZWN0X2NoYW5nZRgOIAEoCzImLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q2hhbmdlUmVzcG9uc2VIABJPChZlbmNvZGVfcmVmdXNhbF92ZXJkaWN0GA8gASgLMi0ubm9tb3Mua2VybmVsLnYxLkVuY29kZVJlZnVzYWxWZXJkaWN0UmVzcG9uc2VIABJRChdpbnNwZWN0X3JlZnVzYWxfdmVyZGljdBgQIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0UmVmdXNhbFZlcmRpY3RSZXNwb25zZUgAEjYKCXJlYWRfYmxvYhgRIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZWFkQmxvYlJlc3BvbnNlSAASOgoLcmVzb2x2ZV9yZWYYEiABKAsyIy5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZlJlc3BvbnNlSAASNgoJbGlzdF9yZWZzGBMgASgLMiEubm9tb3Mua2VybmVsLnYxLkxpc3RSZWZzUmVzcG9uc2VIABIyCgl3cml0ZV9yZWYYFCABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkSAASMwoKZGVsZXRlX3JlZhgVIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWRIABJFChF3cml0ZV9tZXRhX2NvbW1pdBgWIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5Xcml0ZU1ldGFDb21taXRSZXNwb25zZUgAEkMKEGxhd19jbG9zdXJlX2luZm8YFyABKAsyJy5ub21vcy5rZXJuZWwudjEuTGF3Q2xvc3VyZUluZm9SZXNwb25zZUgAEkYKEWNoZWNrcG9pbnRfZXhwb3J0GBggASgLMikubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRFeHBvcnRSZXNwb25zZUgAEkYKEWNoZWNrcG9pbnRfaW1wb3J0GBkgASgLMikubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRJbXBvcnRSZXNwb25zZUgAEkQKEGNhcGFjaXR5X3Jlc2VydmUYGiABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2FwYWNpdHlSZXNlcnZlUmVzcG9uc2VIABI8CgxyZXN0b3JlX21haW4YGyABKAsyJC5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5SZXNwb25zZUgAEk8KFnJlc29sdmVfc3RhdGVfcG9zaXRpb24YHCABKAsyLS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZUgAEkgKEnJlc2lkZW50X2Zvb3RwcmludBgdIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudEZvb3RwcmludFJlc3BvbnNlSAASQgoPaGlzdG9yeV9zdW1tYXJ5GB4gASgLMicubm9tb3Mua2VybmVsLnYxLkhpc3RvcnlTdW1tYXJ5UmVzcG9uc2VIABJbChxwcm92ZV9jb21wYWN0aW9uX2VxdWl2YWxlbmNlGB8gASgLMjMubm9tb3Mua2VybmVsLnYxLlByb3ZlQ29tcGFjdGlvbkVxdWl2YWxlbmNlUmVzcG9uc2VIAEILCglvcGVyYXRpb24iMAoRUGFja0RlbHRhUmVzcG9uc2USDAoEcGFjaxgBIAEoDBINCgVieXRlcxgCIAEoBCI8ChFBcHBseVBhY2tSZXNwb25zZRIUCgxvYmplY3RfY291bnQYASABKAQSEQoJcGFja19oYXNoGAIgASgJIqcBChFSZXBvU3RhdHNSZXNwb25zZRITCgt0b3RhbF9ieXRlcxgBIAEoBBIUCgxvYmplY3RfYnl0ZXMYAiABKAQSFQoNbG9vc2Vfb2JqZWN0cxgDIAEoBBITCgtsb29zZV9ieXRlcxgEIAEoBBISCgpwYWNrX2ZpbGVzGAUgASgEEhIKCnBhY2tfYnl0ZXMYBiABKAQSEwoLaW5kZXhfYnl0ZXMYByABKAQi4gEKDEludGVudFJlY29yZBILCgNvaWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEwoLY2hhbmdlX3VzZGEYBSABKAwSLgoIc2VtYW50aWMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSSgoVdHJhbnNwb3J0X3JlcXVpcmVtZW50GAcgASgOMisubm9tb3Mua2VybmVsLnYxLkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50IkYKFEludGVudHNBYm92ZVJlc3BvbnNlEi4KB2ludGVudHMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuSW50ZW50UmVjb3JkInQKFkhpc3RvcnlTdW1tYXJ5UmVzcG9uc2USDAoEaGVhZBgBIAEoCRIOCgZvbGRlc3QYAiABKAkSFAoMY29tbWl0X2NvdW50GAMgASgEEhAKCGNvbXBsZXRlGAQgASgIEhQKDHJlYWNoZWRfYmFzZRgFIAEoCCJCChNOb21pbmFsQ2FsbElkZW50aXR5EhMKC2RvbWFpbl9wYXRoGAEgASgJEhYKDmRpcmVjdGl2ZV9wYXRoGAIgASgJIogBChhMaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSHwoXdGFyZ2V0X2Nsb3N1cmVfaWRlbnRpdHkYASABKAkSFAoMaW5zdGFsbGVkX2J5GAIgASgJEjUKBXBoYXNlGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkxpZmVjeWNsZUluc3RhbGxQaGFzZSJaCh1Xb3Jrc3BhY2VSZXNpZGVuY3lSZXF1aXJlbWVudBIRCgl3b3Jrc3BhY2UYASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSEQoJZm9sZF9yb290GAMgASgJIrQCChVJbnNwZWN0Q2hhbmdlUmVzcG9uc2USLgoIc2VtYW50aWMYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJaW50ZW50X2lkGAIgASgJEjIKBGNhbGwYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuTm9taW5hbENhbGxJZGVudGl0eRIQCghhdXRob3JlZBgEIAEoCBJEChFsaWZlY3ljbGVfaW5zdGFsbBgFIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSTAoUcmVxdWlyZWRfcmVzaWRlbmNpZXMYBiADKAsyLi5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQiTAocUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZRIaCg1yZXNvbHZlZF9oZWFkGAEgASgJSACIAQFCEAoOX3Jlc29sdmVkX2hlYWQiNAocRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZRIUCgx2ZXJkaWN0X3VzZGEYASABKAwiUQodSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2USMAoHdmVyZGljdBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5SZWZ1c2FsVmVyZGljdCJ1CiJQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlc3BvbnNlEjgKCGV2aWRlbmNlGAEgASgLMiYubm9tb3Mua2VybmVsLnYxLkNvbXBhY3Rpb25FcXVpdmFsZW5jZRIVCg1ldmlkZW5jZV91c2RhGAIgASgMIi8KEFJlYWRCbG9iUmVzcG9uc2USDQoFZm91bmQYASABKAgSDAoEYmxvYhgCIAEoDCIuChJSZXNvbHZlUmVmUmVzcG9uc2USEAoDb2lkGAEgASgJSACIAQFCBgoEX29pZCIrCglSZWZSZWNvcmQSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCSI8ChBMaXN0UmVmc1Jlc3BvbnNlEigKBHJlZnMYASADKAsyGi5ub21vcy5rZXJuZWwudjEuUmVmUmVjb3JkIg4KDEFja25vd2xlZGdlZCImChdXcml0ZU1ldGFDb21taXRSZXNwb25zZRILCgNvaWQYASABKAkigwEKFkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2USEAoIaWRlbnRpdHkYASABKAkSGQoRcm9vdF9sb2dpY2FsX3BhdGgYAiABKAkSEwoLYXNzZXRfY291bnQYAyABKAQSEgoKcHJpbV9jb3VudBgEIAEoBBITCgtkb21haW5fa2V5cxgFIAMoCSLfAwoYQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlEg0KBWVtcHR5GAEgASgIEhMKBmN1cnNvchgCIAEoCUgAiAEBEhAKCGZyb250aWVyGAMgASgMEhcKCnN0YXRlX3Jvb3QYBCABKAlIAYgBARISCgpzdGF0ZV90cmVlGAUgASgIEg4KBnBpbm5lZBgGIAEoCBIbChNyZWFkX2luZGV4X3NuYXBzaG90GAcgASgIEiMKG3JlYWRfaW5kZXhfc25hcHNob3RfcGVuZGluZxgIIAEoCBIkChdyZWFkX2luZGV4X3NxbGl0ZV9ieXRlcxgJIAEoBEgCiAEBEiUKGHJlYWRfaW5kZXhfY3VzdG9keV9ieXRlcxgKIAEoBEgDiAEBElAKGXZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQYCyABKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZpZWRGcm9udGllclJlY2VpcHRIBIgBAUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QhoKGF9yZWFkX2luZGV4X3NxbGl0ZV9ieXRlc0IbChlfcmVhZF9pbmRleF9jdXN0b2R5X2J5dGVzQhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0ItcCChhDaGVja3BvaW50SW1wb3J0UmVzcG9uc2USEAoIcmVzdG9yZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPZnJvbnRpZXJfc2VlZGVkGAMgASgIEiUKHWZyb250aWVyX3ZlcmlmaWNhdGlvbl9wZW5kaW5nGAQgASgIEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBITCgZjdXJzb3IYByABKAlIAYgBARIRCglyZWFkX29ubHkYCCABKAgSFwoPbGF6eV9yZWFkX2luZGV4GAkgASgIEjcKCWFzc3VyYW5jZRgKIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlQgkKB19yZWFzb25CCQoHX2N1cnNvciJKChdDYXBhY2l0eVJlc2VydmVSZXNwb25zZRIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQSFgoOcmVzZXJ2ZWRfYnl0ZXMYAiABKAQi+QIKEFJlc3RvcmVNYWluU3BhbnMSEAoIdG90YWxfdXMYASABKAQSGgoSbGl2ZV9yZWZfbG9va3VwX3VzGAIgASgEEhgKEHRhcmdldF9kZWNvZGVfdXMYAyABKAQSJAocY3VzdG9keV9jb21wbGV0ZW5lc3NfcmVhZF91cxgEIAEoBBIZChFxdWFyYW50aW5lX3JlZl91cxgFIAEoBBIlCh1jaGFpbl9zaWduYXR1cmVfbGF3X3JlcGxheV91cxgGIAEoBBIZChF2ZXJkaWN0X2RlY29kZV91cxgHIAEoBBIjChtwcm9tb3RlX2FuZF9jbGVhbnVwX3JlZnNfdXMYCCABKAQSGwoTZnJvbnRpZXJfcmVidWlsZF91cxgJIAEoBBIZChFmcm9udGllcl9zdG9yZV91cxgKIAEoBBI9Cgx2ZXJpZmljYXRpb24YCyABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcyLvAQoTUmVzdG9yZU1haW5SZXNwb25zZRIMCgRoZWFkGAEgASgJEhAKCHZlcmlmaWVkGAIgASgIEgwKBHdhbGsYAyABKAkSMAoFc3BhbnMYBCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5TcGFucxItCgd2ZXJkaWN0GAUgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EjcKCWFzc3VyYW5jZRgGIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhAKCGFjY2VwdGVkGAcgASgIIpsCCgpOb21vc1ZhbHVlEiUKBG51bGwYASABKAsyFS5ub21vcy5rZXJuZWwudjEuTnVsbEgAEhEKB2Jvb2xlYW4YAiABKAhIABIYCg5zaWduZWRfaW50ZWdlchgDIAEoEkgAEhoKEHVuc2lnbmVkX2ludGVnZXIYBCABKARIABIYCg5mbG9hdGluZ19wb2ludBgFIAEoAUgAEg4KBHRleHQYBiABKAlIABIPCgVieXRlcxgHIAEoDEgAEioKBGxpc3QYCCABKAsyGi5ub21vcy5rZXJuZWwudjEuTm9tb3NMaXN0SAASLgoGb2JqZWN0GAkgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0SABCBgoEa2luZCIGCgROdWxsIjgKCU5vbW9zTGlzdBIrCgZ2YWx1ZXMYASADKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZSKTAQoLTm9tb3NTdHJ1Y3QSOAoGZmllbGRzGAEgAygLMigubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0LkZpZWxkc0VudHJ5GkoKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIqCgV2YWx1ZRgCIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlOgI4ASrpEgoRS2VybmVsUmVmdXNhbENvZGUSIwofS0VSTkVMX1JFRlVTQUxfQ09ERV9VTlNQRUNJRklFRBAAEiUKIUtFUk5FTF9SRUZVU0FMX0NPREVfQkFEX1NJR05BVFVSRRABEiQKIEtFUk5FTF9SRUZVU0FMX0NPREVfVU5BVVRIT1JJWkVEEAISJwojS0VSTkVMX1JFRlVTQUxfQ09ERV9QT0xJQ1lfRElTQUJMRUQQAxIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX1VOQ0VSVElGSUVEX1BPTElDWRAEEiMKH0tFUk5FTF9SRUZVU0FMX0NPREVfUkVGRVJFTlRJQUwQBRIvCitLRVJORUxfUkVGVVNBTF9DT0RFX1BPSU5UX1NUQVRFX1VOQVZBSUxBQkxFEAYSJAogS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBfRVhDRUVERUQQBxItCilLRVJORUxfUkVGVVNBTF9DT0RFX0NBUF9DT1VOVF9VTkFWQUlMQUJMRRAIEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfRVZJREVOQ0VfVU5CQUNLRUQQCRImCiJLRVJORUxfUkVGVVNBTF9DT0RFX09SUEhBTl9SRUNFSVBUEAoSNgoyS0VSTkVMX1JFRlVTQUxfQ09ERV9SRUNFSVBUX09OX1RFUk1JTkFMX09CTElHQVRJT04QCxIiCh5LRVJORUxfUkVGVVNBTF9DT0RFX05PVF9NSU5URUQQDBIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX0RPTUFJTl9MSUZFQ1lDTEUQDRIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX1RZUEVfVEFHX01JU01BVENIEA4SLAooS0VSTkVMX1JFRlVTQUxfQ09ERV9SRVRJUkVEX1JFQURfU1VSRkFDRRAPEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQ1JPU1NfV09SS1NQQUNFX0RFQ0xJTkVEEBASKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BR0dSRUdBVEVfSU5WQVJJQU5UEBESKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9XT1JLU1BBQ0VfSU5WQVJJQU5UEBISLgoqS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX0NPTkZMSUNUEBMSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9SRVFVSVJFRBAUEjQKMEtFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfVU5ERUNMQVJFRBAVEjEKLUtFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfSU5WQUxJRBAWEi8KK0tFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfU1RBTEUQFxIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfVU5ERUNMQVJFRBAYEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9QUklWQVRFEBkSMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOREVDTEFSRUQQGhIzCi9LRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5UUlVTVEVEX0tFWRAbEjYKMktFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTlRSVVNURURfU09VUkNFEBwSLAooS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX0ZPUkdFRBAdEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9TVEFMRRAeEi4KKktFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9PVkVSU0laRRAfEjcKM0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9ESVNIT05PUkVEX1NPVVJDRRAgEjUKMUtFUk5FTF9SRUZVU0FMX0NPREVfRVFVSVZPQ0FUSU9OX0VWSURFTkNFX0lOVkFMSUQQIRIzCi9LRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEFUSU9OX1JFQ0VJUFRfSU5WQUxJRBAiEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfS0VZX1JPU1RFUl9NSVNNQVRDSBAjEi8KK0tFUk5FTF9SRUZVU0FMX0NPREVfS0VZX0VQT0NIX05PVF9NT05PVE9OSUMQJBIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX1dSSVRFX0VQT0NIX1NUQUxFECUSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9FTlZFTE9QRV9TSURfTUlTTUFUQ0gQJhIyCi5LRVJORUxfUkVGVVNBTF9DT0RFX1JFVk9LRURfTUVNQkVSX1JFU1VSUkVDVEVEECcSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9GT1JHRURfUFJJTkNJUEFMECgSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9PV05FRF9LRVlfQU5DSE9SECkSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9PV05FRF9SRUNPVkVSWRAqEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfU1VSRkFDRURfQkFTSVNfQUhFQUQQKxIyCi5LRVJORUxfUkVGVVNBTF9DT0RFX1NJR05FUl9FUE9DSF9PVVRfT0ZfV0lORE9XECwSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9FVk9MVkVfUkVGVVNFRBAtEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNUQVRJT05fSU5WQUxJRBAuEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfUEFSRU5UX0RJRF9OT1RfQVRURVNUEC8SKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9DRVJUX0NIQUlOX0JST0tFThAwEioKJktFUk5FTF9SRUZVU0FMX0NPREVfTk9UX1JPT1RFRF9BVF9ST09UEDESKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9ERUxFR0FUSU9OX0lOVkFMSUQQMhIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX1BMQU5fUkVKRUNURUQQMyqKAQoPVmVyaWZ5Q2hhaW5XYWxrEiEKHVZFUklGWV9DSEFJTl9XQUxLX1VOU1BFQ0lGSUVEEAASGgoWVkVSSUZZX0NIQUlOX1dBTEtfRlVMTBABEhwKGFZFUklGWV9DSEFJTl9XQUxLX1NVRkZJWBACEhoKFlZFUklGWV9DSEFJTl9XQUxLX01FTU8QAyqIDAoOUXVlcnlPcGVyYXRpb24SHwobUVVFUllfT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASHAoYUVVFUllfT1BFUkFUSU9OX0VYVFJFTVVNEAESJQohUVVFUllfT1BFUkFUSU9OX1BFTkRJTkdfQ09ORkxJQ1RTEAISLAooUVVFUllfT1BFUkFUSU9OX1BFTkRJTkdfQ09ORkxJQ1RfU1VNTUFSWRADEiAKHFFVRVJZX09QRVJBVElPTl9SRUFEX1BPU1RVUkUQBBIfChtRVUVSWV9PUEVSQVRJT05fQ1VSUkVOVF9MQVcQBRIjCh9RVUVSWV9PUEVSQVRJT05fSU5URVJGQUNFX09GRkVSEAYSJwojUVVFUllfT1BFUkFUSU9OX1JFTEFUSU9OX0dBVEVfT0ZGRVIQBxIdChlRVUVSWV9PUEVSQVRJT05fU0NFTkVfTEFXEAgSIQodUVVFUllfT1BFUkFUSU9OX0lOU1RBTExFRF9MQVcQCRIcChhRVUVSWV9PUEVSQVRJT05fREVTQ1JJQkUQChIjCh9RVUVSWV9PUEVSQVRJT05fS0VSTkVMX1JFU09VUkNFEAsSIwofUVVFUllfT1BFUkFUSU9OX0RFVkVMT1BFUl9TUEFOUxAMEikKJVFVRVJZX09QRVJBVElPTl9ERUNMQVJFRF9DQVBBQklMSVRJRVMQDRIdChlRVUVSWV9PUEVSQVRJT05fUkVBRElORVNTEA4SJAogUVVFUllfT1BFUkFUSU9OX1BST0pFQ1RJT05fU1RBVFMQDxIlCiFRVUVSWV9PUEVSQVRJT05fTUVNT1JZX0RST1BfUFJPQkUQEBIYChRRVUVSWV9PUEVSQVRJT05fV0FSTRAREhsKF1FVRVJZX09QRVJBVElPTl9SRUZSRVNIEBISIAocUVVFUllfT1BFUkFUSU9OX1ZFUklGWV9DSEFJThATEiUKIVFVRVJZX09QRVJBVElPTl9ISVNUT1JZX1BSRUZMSUdIVBAUEhkKFVFVRVJZX09QRVJBVElPTl9ST1VURRAVEhgKFFFVRVJZX09QRVJBVElPTl9NSU5UEBYSIQodUVVFUllfT1BFUkFUSU9OX0NSWVBUT19LRVlHRU4QFxIlCiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1NFQUxfRklFTEQQGBIsCihRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX0JMSU5EX0lOREVYX1RPS0VOEBkSKgomUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9TQ09QRV9LRVkQGhIvCitRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX09XTkVEX0RFVklDRV9SRVFVRVNUEBsSMQotUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9QUkVQQVJFX0FQUFJPVkFMEBwSMQotUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9QUkVQQVJFX1JFQ09WRVJZEB0SIwofUVVFUllfT1BFUkFUSU9OX0NSWVBUT19XUkFQX0tFWRAeEiUKIVFVRVJZX09QRVJBVElPTl9DUllQVE9fVU5XUkFQX0tFWRAfEiEKHVFVRVJZX09QRVJBVElPTl9BVVRIT1JfS0VZR0VOECASJAogUVVFUllfT1BFUkFUSU9OX0FUVEVTVEFUSU9OX1NJR04QIRIgChxRVUVSWV9PUEVSQVRJT05fUkVDRUlQVF9QQVRIECISHQoZUVVFUllfT1BFUkFUSU9OX0NFUlRfU0lHThAjEiUKIVFVRVJZX09QRVJBVElPTl9CSVJUSF9UUlVTVF9TVEFURRAkEiEKHVFVRVJZX09QRVJBVElPTl9FUkFfQ0VSVF9TSUdOECUSKAokUVVFUllfT1BFUkFUSU9OX0RFTEVHQVRJT05fQ0VSVF9TSUdOECYSKQolUVVFUllfT1BFUkFUSU9OX0NBTk9OSUNBTElaRV9GUk9OVElFUhAnEisKJ1FVRVJZX09QRVJBVElPTl9DQU5PTklDQUxJWkVfUFJPSkVDVElPThAoKtICChVSZXNpZGVudENvbXBvbmVudEtpbmQSJwojUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfVU5TUEVDSUZJRUQQABImCiJSRVNJREVOVF9DT01QT05FTlRfS0lORF9GT0xEX1NUQVRFEAESLQopUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfUkVBRF9NT0RFTF9TUUxJVEUQAhIuCipSRVNJREVOVF9DT01QT05FTlRfS0lORF9SRUFEX01PREVMX0lOREVYRVMQAxItCilSRVNJREVOVF9DT01QT05FTlRfS0lORF9TSEFSRURfQVRUUklCVVRFRBAEEiwKKFJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1dPUktTUEFDRV9DQUNIRVMQBRIsCihSRVNJREVOVF9DT01QT05FTlRfS0lORF9HSVRfT0JKRUNUX0NBQ0hFEAYqbAoTS2VybmVsTGF3Q2FwYWJpbGl0eRIlCiFLRVJORUxfTEFXX0NBUEFCSUxJVFlfVU5TUEVDSUZJRUQQABIuCipLRVJORUxfTEFXX0NBUEFCSUxJVFlfU1RBR0VfWkVST19CT09UU1RSQVAQASpZChVDaGVja3BvaW50Q29tcHJlc3Npb24SHwobQ0hFQ0tQT0lOVF9DT01QUkVTU0lPTl9OT05FEAASHwobQ0hFQ0tQT0lOVF9DT01QUkVTU0lPTl9HWklQEAEqkQEKHENoZWNrcG9pbnRWZXJpZmljYXRpb25Qb2xpY3kSMwovQ0hFQ0tQT0lOVF9WRVJJRklDQVRJT05fUE9MSUNZX1ZFUklGWV9DQU5PTklDQUwQABI8CjhDSEVDS1BPSU5UX1ZFUklGSUNBVElPTl9QT0xJQ1lfVFJVU1RfUFJFVklPVVNMWV9WRVJJRklFRBABKoABChNDaGVja3BvaW50QXNzdXJhbmNlEiQKIENIRUNLUE9JTlRfQVNTVVJBTkNFX1VOU1BFQ0lGSUVEEAASIAocQ0hFQ0tQT0lOVF9BU1NVUkFOQ0VfVFJVU1RFRBABEiEKHUNIRUNLUE9JTlRfQVNTVVJBTkNFX1ZFUklGSUVEEAIqqAEKGkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50EiwKKElOVEVOVF9UUkFOU1BPUlRfUkVRVUlSRU1FTlRfVU5TUEVDSUZJRUQQABIuCipJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1NFQUxFRF9DSEFOR0UQARIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX0NPTU1JVF9UUkVFEAIqiQEKFUxpZmVjeWNsZUluc3RhbGxQaGFzZRInCiNMSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9VTlNQRUNJRklFRBAAEiIKHkxJRkVDWUNMRV9JTlNUQUxMX1BIQVNFX0FDVElWRRABEiMKH0xJRkVDWUNMRV9JTlNUQUxMX1BIQVNFX1BFTkRJTkcQAjJZChJOb21vc0tlcm5lbFNlcnZpY2USQwoEQ2FsbBIcLm5vbW9zLmtlcm5lbC52MS5DYWxsUmVxdWVzdBodLm5vbW9zLmtlcm5lbC52MS5DYWxsUmVzcG9uc2ViBnByb3RvMw");
13152
+ file_nomos_kernel_v1_kernel2 = /* @__PURE__ */ fileDesc3("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEizgUKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEiwKBHRlc3QYECABKAsyHC5ub21vcy5rZXJuZWwudjEuVGVzdFJlcXVlc3RIABJIChNzaWduX3ByZXBhcmVkX29mZmVyGBEgASgLMikubm9tb3Mua2VybmVsLnYxLlNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdEgAEkoKFHByZXBhcmVfcmVtb3RlX29mZmVyGBIgASgLMioubm9tb3Mua2VybmVsLnYxLlByZXBhcmVSZW1vdGVPZmZlclJlcXVlc3RIABJOChZzaWduX29mZmVyX3ByZXBhcmF0aW9uGBMgASgLMiwubm9tb3Mua2VybmVsLnYxLlNpZ25PZmZlclByZXBhcmF0aW9uUmVxdWVzdEgAEk4KFnNpZ25fYmlydGhfY2VydGlmaWNhdGUYFCABKAsyLC5ub21vcy5rZXJuZWwudjEuU2lnbkJpcnRoQ2VydGlmaWNhdGVSZXF1ZXN0SABCCwoJb3BlcmF0aW9uIoUGCgxDYWxsUmVzcG9uc2USGAoQcHJvdG9jb2xfdmVyc2lvbhgBIAEoDRISCgpyZXF1ZXN0X2lkGAIgASgJEisKB2ZhaWx1cmUYCiABKAsyGC5ub21vcy5rZXJuZWwudjEuRmFpbHVyZUgAEi0KBG9wZW4YCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT3BlblJlc3BvbnNlSAASLwoFb2ZmZXIYDCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAEi8KBXF1ZXJ5GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5UmVzcG9uc2VIABIxCgZvdXRib3gYDiABKAsyHy5ub21vcy5rZXJuZWwudjEuT3V0Ym94UmVzcG9uc2VIABItCgRzeW5jGA8gASgLMh0ubm9tb3Mua2VybmVsLnYxLlN5bmNSZXNwb25zZUgAEjMKB2N1c3RvZHkYECABKAsyIC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlc3BvbnNlSAASLQoEdGVzdBgRIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5UZXN0UmVzcG9uc2VIABJJChNzaWduX3ByZXBhcmVkX29mZmVyGBIgASgLMioubm9tb3Mua2VybmVsLnYxLlNpZ25QcmVwYXJlZE9mZmVyUmVzcG9uc2VIABJLChRwcmVwYXJlX3JlbW90ZV9vZmZlchgTIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5QcmVwYXJlUmVtb3RlT2ZmZXJSZXNwb25zZUgAEk8KFnNpZ25fb2ZmZXJfcHJlcGFyYXRpb24YFCABKAsyLS5ub21vcy5rZXJuZWwudjEuU2lnbk9mZmVyUHJlcGFyYXRpb25SZXNwb25zZUgAEk8KFnNpZ25fYmlydGhfY2VydGlmaWNhdGUYFSABKAsyLS5ub21vcy5rZXJuZWwudjEuU2lnbkJpcnRoQ2VydGlmaWNhdGVSZXNwb25zZUgAQgkKB291dGNvbWUiVwoHRmFpbHVyZRIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSLQoHZGV0YWlscxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCI8CgxPcGVuUmVzcG9uc2USLAoGcmVzdWx0GAEgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IvcCCg1PZmZlclJlc3BvbnNlEjIKCGFkbWl0dGVkGAEgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyQWRtaXR0ZWRIABIwCgdyZWZ1c2VkGAIgASgLMh0ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVmdXNlZEgAEjsKDWRlYWRfbGV0dGVyZWQYAyABKAsyIi5ub21vcy5rZXJuZWwudjEuT2ZmZXJEZWFkTGV0dGVyZWRIABI4CgtxdWFyYW50aW5lZBgEIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5PZmZlclF1YXJhbnRpbmVkSAASSgoVYmxvY2tlZF9vbl9kZXBlbmRlbmN5GAUgASgLMikubm9tb3Mua2VybmVsLnYxLk9mZmVyQmxvY2tlZE9uRGVwZW5kZW5jeUgAEjIKCHByZXBhcmVkGAYgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUHJlcGFyZWRIAEIJCgdvdXRjb21lIoMDCg1PZmZlckFkbWl0dGVkEgwKBGhlYWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEhcKCmludGVudF9vdXQYAyABKAlIAIgBARIzCgdjcmVhdGVkGAQgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEjQKCGFmZmVjdGVkGAUgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEiwKBGJvcm4YBiADKAsyHi5ub21vcy5rZXJuZWwudjEuQm9ybldvcmtzcGFjZRI1Cg5iaXJ0aF9vdXRjb21lcxgHIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSNwoMa2VybmVsX3NwYW5zGAggASgLMhwubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5zSAGIAQESDwoHZHJ5X3J1bhgJIAEoCEINCgtfaW50ZW50X291dEIPCg1fa2VybmVsX3NwYW5zIi0KEU9mZmVyQWdncmVnYXRlUmVmEgwKBHR5cGUYASABKAkSCgoCaWQYAiABKAkiMAoNQm9ybldvcmtzcGFjZRIRCgl3b3Jrc3BhY2UYASABKAkSDAoEaGVhZBgCIAEoCSKJAwoMQmlydGhPdXRjb21lEhYKCXdvcmtzcGFjZRgBIAEoCUgAiAEBEjMKBnN0YXR1cxgCIAEoDjIjLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWVTdGF0dXMSEwoGcmVhc29uGAMgASgJSAGIAQESEQoEY29kZRgEIAEoCUgCiAEBEhAKCHJlcGxheWVkGAUgASgIEhUKCGxhd19oYXNoGAYgASgJSAOIAQESHQoQcGFyZW50X3dvcmtzcGFjZRgHIAEoCUgEiAEBEhwKD2NoaWxkX3dvcmtzcGFjZRgIIAEoCUgFiAEBEicKGmNlcnRpZmljYXRlX3JlZnVzYWxfcmVhc29uGAkgASgJSAaIAQFCDAoKX3dvcmtzcGFjZUIJCgdfcmVhc29uQgcKBV9jb2RlQgsKCV9sYXdfaGFzaEITChFfcGFyZW50X3dvcmtzcGFjZUISChBfY2hpbGRfd29ya3NwYWNlQh0KG19jZXJ0aWZpY2F0ZV9yZWZ1c2FsX3JlYXNvbiIvChBLZXJuZWxTcGFuTWV0cmljEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiABKAQiowEKCktlcm5lbFNwYW4SDQoFbGFiZWwYASABKAkSEAoIdG90YWxfdXMYAiABKAQSDwoHcmVjb3JkcxgDIAEoBBIxCgZwaGFzZXMYBCADKAsyIS5ub21vcy5rZXJuZWwudjEuS2VybmVsU3Bhbk1ldHJpYxIwCgVub3RlcxgFIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljInEKC0tlcm5lbFNwYW5zEi8KCm9wZXJhdGlvbnMYASADKAsyGy5ub21vcy5rZXJuZWwudjEuS2VybmVsU3BhbhIxCgZlbmdpbmUYAiADKAsyIS5ub21vcy5rZXJuZWwudjEuS2VybmVsU3Bhbk1ldHJpYyKWAQoMT2ZmZXJSZWZ1c2VkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESLwoHcmVmdXNhbBgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsEjEKC2RpYWdub3N0aWNzGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0QgsKCV9vZmZlcl9pZCJ6ChFPZmZlckRlYWRMZXR0ZXJlZBIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEg4KBnJlYXNvbhgCIAEoCRIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQirgEKEE9mZmVyUXVhcmFudGluZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIZChFhdXRob3JlZF9sYXdfaGFzaBgCIAEoCRIYChBjdXJyZW50X2xhd19oYXNoGAMgASgJEg4KBnJlYXNvbhgEIAEoCRIxCgtkaWFnbm9zdGljcxgFIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQigQEKGE9mZmVyQmxvY2tlZE9uRGVwZW5kZW5jeRIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEg4KBmRldGFpbBgCIAEoCRIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQihQEKDU9mZmVyUHJlcGFyZWQSHAoUYXV0aG9yZWRfY2hhbmdlX3VzZGEYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRIhChlhdXRob3Jfc2lnbmF0dXJlX3JlcXVpcmVkGAQgASgIImoKGFNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdBIcChRhdXRob3JlZF9jaGFuZ2VfdXNkYRgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIVCg1hdXRob3Jfc2VjcmV0GAMgASgMIjcKGVNpZ25QcmVwYXJlZE9mZmVyUmVzcG9uc2USGgoSc2lnbmVkX2NoYW5nZV91c2RhGAEgASgMIq0BChlQcmVwYXJlUmVtb3RlT2ZmZXJSZXF1ZXN0EhUKDW9mZmVyX3JlcXVlc3QYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRISCgpwdWJsaWNfa2V5GAQgASgMEhEKCXNpZ25hdHVyZRgFIAEoDBIdChVyZXF1aXJlZF9jdXN0b2R5X2hlYWQYBiABKAkiUAoZT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZRIZChF3b3Jrc3BhY2VfYmluZGluZxgBIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAIgASgJIpkBChpQcmVwYXJlUmVtb3RlT2ZmZXJSZXNwb25zZRI/CgljaGFsbGVuZ2UYASABKAsyKi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZUgAEi8KBW9mZmVyGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIAEIJCgdvdXRjb21lIoABChtTaWduT2ZmZXJQcmVwYXJhdGlvblJlcXVlc3QSFQoNb2ZmZXJfcmVxdWVzdBgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAMgASgJEhUKDWF1dGhvcl9zZWNyZXQYBCABKAwiRQocU2lnbk9mZmVyUHJlcGFyYXRpb25SZXNwb25zZRISCgpwdWJsaWNfa2V5GAEgASgMEhEKCXNpZ25hdHVyZRgCIAEoDCKBAQoNS2VybmVsUmVmdXNhbBIwCgRjb2RlGAEgASgOMiIubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxDb2RlEg8KB21lc3NhZ2UYAiABKAkSLQoHZGV0YWlscxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCK4AwoNUXVlcnlSZXNwb25zZRIsCgV2YWx1ZRgBIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlSAASSgoTYXV0aG9yaXphdGlvbl9jaGVjaxgKIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZUgAEkwKFGF1dGhvcml6YXRpb25fZXhwYW5kGAsgASgLMiwubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZUgAEj4KDW9zZ2lfcmVzb3VyY2UYDCABKAsyJS5ub21vcy5rZXJuZWwudjEuT3NnaVJlc291cmNlUmVzcG9uc2VIABJKChNmcm9udGllcl90cmFuc2l0aW9uGA0gASgLMisubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlSAASSQoYdmVyaWZ5X2NoYWluX2RpYWdub3N0aWNzGBQgASgLMicubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRGlhZ25vc3RpY3NCCAoGcmVzdWx0IkgKDU9zZ2lBdHRyaWJ1dGUSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoCRIRCgR0eXBlGAMgASgJSACIAQFCBwoFX3R5cGUiLAoNT3NnaURpcmVjdGl2ZRIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgJIosBCg5Pc2dpQ2FwYWJpbGl0eRIRCgluYW1lc3BhY2UYASABKAkSMgoKYXR0cmlidXRlcxgCIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpQXR0cmlidXRlEjIKCmRpcmVjdGl2ZXMYAyADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaURpcmVjdGl2ZSKMAQoPT3NnaVJlcXVpcmVtZW50EhEKCW5hbWVzcGFjZRgBIAEoCRIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lBdHRyaWJ1dGUSMgoKZGlyZWN0aXZlcxgDIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpRGlyZWN0aXZlIpoBChRPc2dpUmVzb3VyY2VSZXNwb25zZRITCgtzb3VyY2VfdXNkYRgBIAEoDBI1CgxjYXBhYmlsaXRpZXMYAiADKAsyHy5ub21vcy5rZXJuZWwudjEuT3NnaUNhcGFiaWxpdHkSNgoMcmVxdWlyZW1lbnRzGAMgAygLMiAubm9tb3Mua2VybmVsLnYxLk9zZ2lSZXF1aXJlbWVudCLnAQoTVmVyaWZ5Q2hhaW5TdGVwU3BhbhINCgVpbmRleBgBIAEoBBISCgpjb21taXRfb2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEAoIdG90YWxfdXMYBSABKAQSNgoGcGhhc2VzGAYgASgLMiYubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFBoYXNlcxJACg5lbmdpbmVfdGltaW5ncxgHIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkVuZ2luZVRpbWluZyKYAgoVVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEh4KFnJ1bnRpbWVfbGF3X3JlZnJlc2hfdXMYASABKAQSEwoLbWFuaWZlc3RfdXMYAiABKAQSGQoRbGF3X3Jlc29sdXRpb25fdXMYAyABKAQSHQoVbWFuYWdlZF90cmFuc2l0aW9uX3VzGAQgASgEEhQKDHByaW5jaXBhbF91cxgFIAEoBBIUCgxldm9sdXRpb25fdXMYBiABKAQSGgoSY29sb2NhdGVkX3JlYWRzX3VzGAcgASgEEiEKGXR5cGVkX2luc3RhbGxfdmVyaWZpZXJfdXMYCCABKAQSFAoMYWRtaXNzaW9uX3VzGAkgASgEEg8KB2ZvbGRfdXMYCiABKAQi2gUKFlZlcmlmeUNoYWluRGlhZ25vc3RpY3MSLgoEd2FsaxgBIAEoDjIgLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbldhbGsSEAoIdG90YWxfdXMYAiABKAQSGwoTcmVmZXJlbmNlX2xvb2t1cF91cxgDIAEoBBIaChJyZXBvc2l0b3J5X29wZW5fdXMYBCABKAQSFQoNY2hhaW5fcmVhZF91cxgFIAEoBBIWCg5lbmdpbmVfaW5pdF91cxgGIAEoBBIYChB0aW1lbGluZV9yZWFkX3VzGAcgASgEEhgKEGxhd19oeWRyYXRpb25fdXMYCCABKAQSGwoTcmVjb3ZlcnlfcHJlc2Nhbl91cxgJIAEoBBIYChBmb2xkX2Zyb250aWVyX3VzGAogASgEEjMKBXN0ZXBzGAsgAygLMiQubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFNwYW4SQAoOZW5naW5lX3RpbWluZ3MYDCADKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcSTQoVbGF3X2h5ZHJhdGlvbl90aW1pbmdzGA0gAygLMi4ubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluTGF3SHlkcmF0aW9uVGltaW5nEhkKEWxhd19jbG9zdXJlX2NvdW50GA4gASgEEh4KFmxhd19jbG9zdXJlX2NhY2hlX2hpdHMYDyABKAQSIAoYbGF3X2Nsb3N1cmVfY2FjaGVfbWlzc2VzGBAgASgEEhIKCnN0ZXBfY291bnQYESABKAQSFQoNc3RlcF90b3RhbF91cxgSIAEoBBJBChFzdGVwX3BoYXNlX3RvdGFscxgTIAEoCzImLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpblN0ZXBQaGFzZXMSGgoSb21pdHRlZF9zdGVwX2NvdW50GBQgASgEIjoKF1ZlcmlmeUNoYWluRW5naW5lVGltaW5nEg0KBXBoYXNlGAEgASgJEhAKCHRvdGFsX3VzGAIgASgEIkAKHVZlcmlmeUNoYWluTGF3SHlkcmF0aW9uVGltaW5nEg0KBXBoYXNlGAEgASgJEhAKCHRvdGFsX3VzGAIgASgEIrYCCg1PdXRib3VuZE9mZmVyEgoKAmlkGAEgASgJEhMKC2Rlc3RpbmF0aW9uGAIgASgJEhQKDHNlYWxlZF9vZmZlchgDIAEoDBIUCgxjb250ZW50X3R5cGUYBCABKAkSGAoQc291cmNlX3dvcmtzcGFjZRgFIAEoCRIUCgxjdXN0b2R5X2hlYWQYBiABKAkSFwoPY2F1c2VkX2J5X29mZmVyGAcgASgJEhsKE3NjaGVkdWxlZF9hdF9taWxsaXMYCCABKAQSGgoSZGVhZGxpbmVfYXRfbWlsbGlzGAkgASgEEhQKDGN1c3RvZHlfcGF0aBgKIAEoCRITCgtjdXN0b2R5X29pZBgLIAEoCRIUCgxkZWxpdmVyeV9yZWYYDCABKAkSFQoNb2JsaWdhdGlvbl9pZBgNIAEoCSJ4Cg5PdXRib3hSZXNwb25zZRIuCgZvZmZlcnMYASADKAsyHi5ub21vcy5rZXJuZWwudjEuT3V0Ym91bmRPZmZlchIfChJuZXh0X2R1ZV9hdF9taWxsaXMYAiABKARIAIgBAUIVChNfbmV4dF9kdWVfYXRfbWlsbGlzIjwKDFN5bmNSZXNwb25zZRIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiQgoPV29ya3NwYWNlVGFyZ2V0EgwKBHJlcG8YASABKAkSEQoJd29ya3NwYWNlGAIgASgJEg4KBmJyYW5jaBgDIAEoCSJOCgtPcGVuUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Eg0KBXNwYW5zGAIgASgIImEKDURpcmVjdGl2ZUNhbGwSDgoGZG9tYWluGAEgASgJEhEKCWRpcmVjdGl2ZRgCIAEoCRItCgdwYXlsb2FkGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0ItYCChBBdXRob3JpbmdPcHRpb25zEg0KBWFjdG9yGAEgASgJEhIKCmF1dGhfdG9rZW4YAiABKAwSFQoNYXV0aG9yX3NlY3JldBgDIAEoDBIdChB2YWxpZF9mcm9tX2Vwb2NoGAQgASgESACIAQESHwoScHJpbmNpcGFsX3ZlcmlmaWVkGAUgASgISAGIAQESCwoDcm5nGAYgAygBEhgKEGRlZmVyX3Byb2plY3Rpb24YByABKAgSDQoFc3BhbnMYCCABKAgSDwoHZHJ5X3J1bhgJIAEoCBIQCghzZXF1ZW5jZRgKIAEoBBItCgVjbG9jaxgLIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrEhQKDHByZXBhcmVfb25seRgMIAEoCEITChFfdmFsaWRfZnJvbV9lcG9jaEIVChNfcHJpbmNpcGFsX3ZlcmlmaWVkIkoKDUNhcHR1cmVkQ2xvY2sSFwoPcGh5c2ljYWxfbWlsbGlzGAEgASgEEg8KB2xvZ2ljYWwYAiABKA0SDwoHcmVwbGljYRgDIAEoBCLDAwoQQmlydGhDZXJ0aWZpY2F0ZRINCgVjaGlsZBgBIAEoCRIPCgdmb3VuZGVyGAIgASgJEhAKCHZlcmlmaWVkGAMgASgIEhIKCnBhcmVudF9rZXkYBCABKAwSEQoJcGFyZW50X2lkGAUgASgJEg0KBWVwb2NoGAYgASgDEhEKCXNpZ25hdHVyZRgHIAEoDBIZCgx2ZXJpZmllZF92aWEYCCABKAlIAIgBARIWCglpZHBfdG9rZW4YCSABKAlIAYgBARIbCg5jYXB0dXJlZF9jbG9jaxgKIAEoA0gCiAEBEiEKFGF1dGhfcHJvdmlkZXJfaXNzdWVyGAsgASgJSAOIAQESHwoSYXV0aF9wcm92aWRlcl9qd2tzGAwgASgJSASIAQESIwoWYXV0aF9wcm92aWRlcl9hdWRpZW5jZRgNIAEoCUgFiAEBQg8KDV92ZXJpZmllZF92aWFCDAoKX2lkcF90b2tlbkIRCg9fY2FwdHVyZWRfY2xvY2tCFwoVX2F1dGhfcHJvdmlkZXJfaXNzdWVyQhUKE19hdXRoX3Byb3ZpZGVyX2p3a3NCGQoXX2F1dGhfcHJvdmlkZXJfYXVkaWVuY2UibAobU2lnbkJpcnRoQ2VydGlmaWNhdGVSZXF1ZXN0EjYKC2NlcnRpZmljYXRlGAEgASgLMiEubm9tb3Mua2VybmVsLnYxLkJpcnRoQ2VydGlmaWNhdGUSFQoNc2lnbmVyX3NlY3JldBgCIAEoDCJWChxTaWduQmlydGhDZXJ0aWZpY2F0ZVJlc3BvbnNlEjYKC2NlcnRpZmljYXRlGAEgASgLMiEubm9tb3Mua2VybmVsLnYxLkJpcnRoQ2VydGlmaWNhdGUinAQKDE9mZmVyUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Ei4KBGNhbGwYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQ2FsbEgAEhwKEnNlYWxlZF9jaGFuZ2VfdXNkYRgHIAEoDEgAEjQKCWF1dGhvcmluZxgDIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpbmdPcHRpb25zEhAKCGxhd191c2R6GAQgASgMEjMKDGF0dGVzdGF0aW9ucxgFIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5BdHRlc3RlZFJlYWQSPQoSY29uZmxpY3Rfc25hcHNob3RzGAYgAygLMiEubm9tb3Mua2VybmVsLnYxLkNvbmZsaWN0U25hcHNob3QSGgoSZXhlY3V0aW9uX2xhd191c2R6GAggASgMEiAKE2NvbnRyb2xsZXJfbGF3X2hhc2gYCSABKAlIAYgBARIdChBjYW5kaWRhdGVfY29tbWl0GAogASgJSAKIAQESPAoRYmlydGhfY2VydGlmaWNhdGUYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZUIICgZpbnRlbnRCFgoUX2NvbnRyb2xsZXJfbGF3X2hhc2hCEwoRX2NhbmRpZGF0ZV9jb21taXQikwEKDEF0dGVzdGVkUmVhZBIQCghxdWVyeV9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSKwoGcmVzdWx0GAMgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWUSEwoLYXR0ZXN0YXRpb24YBCABKAwidQoQQ29uZmxpY3RTbmFwc2hvdBIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSDQoFZmllbGQYAyABKAkSFQoNdGFyZ2V0X3NjaGVtYRgEIAEoCRINCgV0b2tlbhgFIAEoCSKwBgoMUXVlcnlSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSMgoJYXV0aG9yaXR5GAIgASgLMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5QXV0aG9yaXR5Eg0KBXNwYW5zGAMgASgIEioKBHJvd3MYCiABKAsyGi5ub21vcy5rZXJuZWwudjEuUm93c1F1ZXJ5SAASKgoEcGFnZRgLIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5QYWdlUXVlcnlIABIrCgVieV9pZBgMIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5CeUlkUXVlcnlIABI5CgxyZXNvbHZlX3JlZnMYDSABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZnNRdWVyeUgAEkUKEnJlZmVyZW5jZV92ZXJzaW9ucxgOIAEoCzInLm5vbW9zLmtlcm5lbC52MS5SZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5SAASLAoFY291bnQYDyABKAsyGy5ub21vcy5rZXJuZWwudjEuVGFsbHlRdWVyeUgAEioKA3N1bRgQIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5UYWxseVF1ZXJ5SAASMAoHc3BhdGlhbBgRIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5TcGF0aWFsUXVlcnlIABIsCgVuYW1lZBgSIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5OYW1lZFF1ZXJ5SAASSQoTYXV0aG9yaXphdGlvbl9jaGVjaxgTIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXF1ZXN0SAASSwoUYXV0aG9yaXphdGlvbl9leHBhbmQYFCABKAsyKy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGFuZFJlcXVlc3RIABJJChNmcm9udGllcl90cmFuc2l0aW9uGBUgASgLMioubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlcXVlc3RIAEIHCgVxdWVyeSKSAQoOUXVlcnlBdXRob3JpdHkSFwoPcHJpbmNpcGFsX2NsYWltGAEgASgJEhIKCmF1dGhfdG9rZW4YAiABKAwSEAoIbm93X3VuaXgYAyABKAQSFQoNYXV0aG9yX3NlY3JldBgEIAEoDBIqCgRrZXlzGAUgAygLMhwubm9tb3Mua2VybmVsLnYxLkluamVjdGVkS2V5IjgKC0luamVjdGVkS2V5Eg0KBXNjb3BlGAEgASgJEg0KBWVwb2NoGAIgASgEEgsKA2tleRgDIAEoDCJbCglSb3dzUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCXByaW5jaXBhbBgDIAEoCSJ5CglQYWdlUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Eg0KBWxpbWl0GAMgASgNEg0KBWFmdGVyGAQgASgJEhEKCXByaW5jaXBhbBgFIAEoCSJMCglCeUlkUXVlcnkSFgoOYWdncmVnYXRlX3R5cGUYASABKAkSFAoMYWdncmVnYXRlX2lkGAIgASgJEhEKCXByaW5jaXBhbBgDIAEoCSJcCghOb21vc1JlZhIRCgl3b3Jrc3BhY2UYASABKAkSFgoOYWdncmVnYXRlX3R5cGUYAiABKAkSFAoMYWdncmVnYXRlX2lkGAMgASgJEg8KB3ZlcnNpb24YBCABKAkiTgoQUmVzb2x2ZVJlZnNRdWVyeRInCgRyZWZzGAEgAygLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhEKCXByaW5jaXBhbBgCIAEoCSJOChZSZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5EjQKBHJlZnMYASADKAsyJi5ub21vcy5rZXJuZWwudjEuUmVmZXJlbmNlVmVyc2lvbkNoZWNrIoQBChVSZWZlcmVuY2VWZXJzaW9uQ2hlY2sSKQoGcGlubmVkGAEgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEikKBnNlcmllcxgCIAEoCzIZLm5vbW9zLmtlcm5lbC52MS5Ob21vc1JlZhIVCg1jdXJyZW50X2ZpZWxkGAMgASgJIlwKClRhbGx5UXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCXByaW5jaXBhbBgDIAEoCSJeCgxTcGF0aWFsUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCXByaW5jaXBhbBgDIAEoCSJxCgpOYW1lZFF1ZXJ5EjIKCW9wZXJhdGlvbhgBIAEoDjIfLm5vbW9zLmtlcm5lbC52MS5RdWVyeU9wZXJhdGlvbhIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QisQEKGUZyb250aWVyVHJhbnNpdGlvblJlcXVlc3QSDgoGZG9tYWluGAEgASgJEhYKDmNhbmRpZGF0ZV9oYXNoGAIgASgJEg8KB2F0X2hhc2gYAyABKAkSIQoZYWNrbm93bGVkZ2VtZW50X3ByaW5jaXBhbBgEIAEoCRIgChNyZXN0b3JlX3ByZXZpb3VzX29mGAUgASgJSACIAQFCFgoUX3Jlc3RvcmVfcHJldmlvdXNfb2YiWgolRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25NYXBFbnRyeRIYChBzb3VyY2Vfc3RhYmxlX2lkGAEgASgJEhcKD2Fja25vd2xlZGdlbWVudBgCIAEoCSL1AQoeRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25zEg8KB3JldGlyZWQYASADKAkSRwoHcmV0eXBlZBgCIAMoCzI2Lm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EkcKB3JlYmluZHMYAyADKAsyNi5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25NYXBFbnRyeRIcCg9hY2tub3dsZWRnZWRfYnkYBCABKAlIAIgBAUISChBfYWNrbm93bGVkZ2VkX2J5Ij0KG0Zyb250aWVyVHJhbnNpdGlvblZpb2xhdGlvbhIOCgZkb21haW4YASABKAkSDgoGZGV0YWlsGAIgASgJItcCChpGcm9udGllclRyYW5zaXRpb25SZXNwb25zZRIPCgdhdF9oYXNoGAEgASgJEhkKDGN1cnJlbnRfaGFzaBgCIAEoCUgAiAEBEhUKDWF0X3N0YXRlX3Jvb3QYAyABKAkSFgoOY2FuZGlkYXRlX2hhc2gYBCABKAkSDgoGZG9tYWluGAUgASgJEg8KB2RvbWFpbnMYBiADKAkSDQoFcmVhZHkYByABKAgSQAoKdmlvbGF0aW9ucxgIIAMoCzIsLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25WaW9sYXRpb24SSgoMZGlzcG9zaXRpb25zGAkgASgLMi8ubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uc0gBiAEBQg8KDV9jdXJyZW50X2hhc2hCDwoNX2Rpc3Bvc2l0aW9ucyIvChNBdXRob3JpemF0aW9uT2JqZWN0EgwKBHR5cGUYASABKAkSCgoCaWQYAiABKAkiVAoUQXV0aG9yaXphdGlvblN1YmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCRIVCghyZWxhdGlvbhgDIAEoCUgAiAEBQgsKCV9yZWxhdGlvbiKcAQoYUmVsYXRpb25zaGlwVHVwbGVBZGRyZXNzEjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEAoIcmVsYXRpb24YAiABKAkSNgoHc3ViamVjdBgDIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uU3ViamVjdCKBAQoYQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5EiMKGWN1cnJlbnRfdmVyaWZpZWRfZnJvbnRpZXIYASABKAhIABIZCg9hdF9sZWFzdF9jb21taXQYAiABKAlIABIWCgxleGFjdF9jb21taXQYAyABKAlIAEINCgtyZXF1aXJlbWVudCJmCh1BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIUCgxjb25kaXRpb25faWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IvcCChlBdXRob3JpemF0aW9uQ2hlY2tSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0Ej4KC2NvbnNpc3RlbmN5GAQgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25zaXN0ZW5jeRI/Cgdjb250ZXh0GAUgAygLMi4ubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EiAKE2V4cGVjdGVkX21vZGVsX2hhc2gYBiABKAlIAIgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAcgASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoIu0CChpBdXRob3JpemF0aW9uRXhwYW5kUmVxdWVzdBI2CghyZXNvdXJjZRgBIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uT2JqZWN0EhIKCnBlcm1pc3Npb24YAiABKAkSPgoLY29uc2lzdGVuY3kYAyABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBCADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgFIAEoCUgAiAEBEg0KBWxpbWl0GAYgASgNEhIKBWFmdGVyGAcgASgJSAGIAQESGwoTaW5jbHVkZV9leHBsYW5hdGlvbhgIIAEoCEIWChRfZXhwZWN0ZWRfbW9kZWxfaGFzaEIICgZfYWZ0ZXIivQEKGVJlbGF0aW9uc2hpcFR1cGxlRXZpZGVuY2USOAoFdHVwbGUYASABKAsyKS5ub21vcy5rZXJuZWwudjEuUmVsYXRpb25zaGlwVHVwbGVBZGRyZXNzEhAKCHR1cGxlX2lkGAIgASgJEhoKEmFzc2VydGlvbl9ldmVudF9pZBgDIAEoCRIgChNyZXZvY2F0aW9uX2V2ZW50X2lkGAQgASgJSACIAQFCFgoUX3Jldm9jYXRpb25fZXZlbnRfaWQi4QMKGEF1dGhvcml6YXRpb25FeHBsYW5hdGlvbhJGCglvcGVyYXRpb24YASABKA4yMy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uLk9wZXJhdGlvbhIQCghyZWxhdGlvbhgCIAEoCRIOCgZyZXN1bHQYAyABKAgSPAoIZXZpZGVuY2UYBCADKAsyKi5ub21vcy5rZXJuZWwudjEuUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI7CghjaGlsZHJlbhgFIAMoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24i3wEKCU9wZXJhdGlvbhIZChVPUEVSQVRJT05fVU5TUEVDSUZJRUQQABIUChBPUEVSQVRJT05fRElSRUNUEAESHgoaT1BFUkFUSU9OX0NPTVBVVEVEX1VTRVJTRVQQAhIeChpPUEVSQVRJT05fVFVQTEVfVE9fVVNFUlNFVBADEhMKD09QRVJBVElPTl9VTklPThAEEhoKFk9QRVJBVElPTl9JTlRFUlNFQ1RJT04QBRIXChNPUEVSQVRJT05fRVhDTFVTSU9OEAYSFwoTT1BFUkFUSU9OX0NPTkRJVElPThAHIncKGkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEiAKGGF1dGhvcml6YXRpb25fbW9kZWxfaGFzaBgBIAEoCRIhChlyZWxhdGlvbnNoaXBfc3RhdGVfY29tbWl0GAIgASgJEhQKDGNvbnRleHRfaGFzaBgDIAEoDCK+AQoaQXV0aG9yaXphdGlvbkNoZWNrUmVzcG9uc2USDwoHYWxsb3dlZBgBIAEoCBI6CgViYXNpcxgCIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRGVjaXNpb25CYXNpcxJDCgtleHBsYW5hdGlvbhgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAIgBAUIOCgxfZXhwbGFuYXRpb24igwIKG0F1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZRI3CghzdWJqZWN0cxgBIAMoCzIlLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uU3ViamVjdBI6CgViYXNpcxgCIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRGVjaXNpb25CYXNpcxIRCgRuZXh0GAMgASgJSACIAQESQwoLZXhwbGFuYXRpb24YBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uSAGIAQFCBwoFX25leHRCDgoMX2V4cGxhbmF0aW9uInAKDU91dGJveFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBItCgVjbG9jaxgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrImMKC1N5bmNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEQoJZnJvbV9iYXNlGAIgASgJEg8KB3RvX2hlYWQYAyABKAkiUwoLVGVzdFJlcXVlc3QSNwoIc2V0X3Jvb3QYASABKAsyIy5ub21vcy5rZXJuZWwudjEuU2V0VGVzdFJvb3RSZXF1ZXN0SABCCwoJb3BlcmF0aW9uIigKElNldFRlc3RSb290UmVxdWVzdBISCgpwdWJsaWNfa2V5GAEgASgMIj0KDFRlc3RSZXNwb25zZRItCgZyZXN1bHQYASABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkItULCg5DdXN0b2R5UmVxdWVzdBI3CgpwYWNrX2RlbHRhGAogASgLMiEubm9tb3Mua2VybmVsLnYxLlBhY2tEZWx0YVJlcXVlc3RIABI3CgphcHBseV9wYWNrGAsgASgLMiEubm9tb3Mua2VybmVsLnYxLkFwcGx5UGFja1JlcXVlc3RIABI3CgpyZXBvX3N0YXRzGAwgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1JlcXVlc3RIABI9Cg1pbnRlbnRzX2Fib3ZlGA0gASgLMiQubm9tb3Mua2VybmVsLnYxLkludGVudHNBYm92ZVJlcXVlc3RIABI/Cg5pbnNwZWN0X2NoYW5nZRgOIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q2hhbmdlUmVxdWVzdEgAEk4KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLC5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0SAASUAoXaW5zcGVjdF9yZWZ1c2FsX3ZlcmRpY3QYECABKAsyLS5ub21vcy5rZXJuZWwudjEuSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdEgAEjUKCXJlYWRfYmxvYhgRIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5SZWFkQmxvYlJlcXVlc3RIABI5CgtyZXNvbHZlX3JlZhgSIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVxdWVzdEgAEjUKCWxpc3RfcmVmcxgTIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5MaXN0UmVmc1JlcXVlc3RIABI1Cgl3cml0ZV9yZWYYFCABKAsyIC5ub21vcy5rZXJuZWwudjEuV3JpdGVSZWZSZXF1ZXN0SAASNwoKZGVsZXRlX3JlZhgVIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5EZWxldGVSZWZSZXF1ZXN0SAASRAoRd3JpdGVfbWV0YV9jb21taXQYFiABKAsyJy5ub21vcy5rZXJuZWwudjEuV3JpdGVNZXRhQ29tbWl0UmVxdWVzdEgAEkIKEGxhd19jbG9zdXJlX2luZm8YFyABKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3Q2xvc3VyZUluZm9SZXF1ZXN0SAASRQoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlcXVlc3RIABJFChFjaGVja3BvaW50X2ltcG9ydBgZIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50SW1wb3J0UmVxdWVzdEgAEkMKEGNhcGFjaXR5X3Jlc2VydmUYGiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ2FwYWNpdHlSZXNlcnZlUmVxdWVzdEgAEjsKDHJlc3RvcmVfbWFpbhgbIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlcXVlc3RIABJOChZyZXNvbHZlX3N0YXRlX3Bvc2l0aW9uGBwgASgLMiwubm9tb3Mua2VybmVsLnYxLlJlc29sdmVTdGF0ZVBvc2l0aW9uUmVxdWVzdEgAEkcKEnJlc2lkZW50X2Zvb3RwcmludBgdIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudEZvb3RwcmludFJlcXVlc3RIABJBCg9oaXN0b3J5X3N1bW1hcnkYHiABKAsyJi5ub21vcy5rZXJuZWwudjEuSGlzdG9yeVN1bW1hcnlSZXF1ZXN0SAASWgoccHJvdmVfY29tcGFjdGlvbl9lcXVpdmFsZW5jZRgfIAEoCzIyLm5vbW9zLmtlcm5lbC52MS5Qcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlcXVlc3RIAEILCglvcGVyYXRpb24iKAoYUmVzaWRlbnRGb290cHJpbnRSZXF1ZXN0EgwKBGRlZXAYASABKAginwIKEVJlc2lkZW50Rm9vdHByaW50EhEKCXdvcmtzcGFjZRgBIAEoCRIOCgZicmFuY2gYAiABKAkSGAoQcmVhZF9tb2RlbF9ieXRlcxgDIAEoBBIdChVyZWFkX21vZGVsX3J1c3RfYnl0ZXMYBCABKAQSGAoQZm9sZF9zdGF0ZV9ieXRlcxgFIAEoBBITCgtmb2xkX2ltYWdlcxgGIAEoDRIfChdzaGFyZWRfYXR0cmlidXRlZF9ieXRlcxgHIAEoBBISCgphZ2dyZWdhdGVzGAggASgEEjYKCmNvbXBvbmVudHMYCSADKAsyIi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRDb21wb25lbnQSEgoKY29tcHV0ZV91cxgKIAEoBCJpChFSZXNpZGVudENvbXBvbmVudBI0CgRraW5kGAEgASgOMiYubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Q29tcG9uZW50S2luZBINCgVieXRlcxgCIAEoBBIPCgdjZWlsaW5nGAMgASgIIsoBChlSZXNpZGVudEZvb3RwcmludFJlc3BvbnNlEjUKCXJlc2lkZW50cxgBIAMoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudEZvb3RwcmludBIcChRhbGxvY2F0b3JfbGl2ZV9ieXRlcxgCIAEoBBIYChBhdHRyaWJ1dGVkX2J5dGVzGAMgASgEEhkKEXVuYWNjb3VudGVkX2J5dGVzGAQgASgEEhUKDWFjY291bnRpbmdfdXMYBSABKAQSDAoEZGVlcBgGIAEoCCKcAQoQUGFja0RlbHRhUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKBGhlYWQYAiABKAlIAIgBARIRCgRiYXNlGAMgASgJSAGIAQESDgoGYnJhbmNoGAQgASgJEh0KEHN0YWdlZF9wYWNrX2ZpbGUYBSABKAlIAogBAUIHCgVfaGVhZEIHCgVfYmFzZUITChFfc3RhZ2VkX3BhY2tfZmlsZSJyChBBcHBseVBhY2tSZXF1ZXN0EgwKBHJlcG8YASABKAkSDgoEcGFjaxgCIAEoDEgAEhoKEHN0YWdlZF9wYWNrX2ZpbGUYBCABKAlIABIRCgRoZWFkGAMgASgJSAGIAQFCCAoGc291cmNlQgcKBV9oZWFkIiAKEFJlcG9TdGF0c1JlcXVlc3QSDAoEcmVwbxgBIAEoCSKsAQoTSW50ZW50c0Fib3ZlUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKBGhlYWQYAiABKAlIAIgBARIRCgRiYXNlGAMgASgJSAGIAQESDgoGYnJhbmNoGAQgASgJEg0KBWxpbWl0GAUgASgEEhgKEGNvbXBsZXRlX2xvZ2ljYWwYBiABKAgSFgoOY29tcGFjdF9zdG9yZWQYByABKAhCBwoFX2hlYWRCBwoFX2Jhc2UibQoVSGlzdG9yeVN1bW1hcnlSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEg4KBmJyYW5jaBgDIAEoCRIRCgRiYXNlGAQgASgJSAGIAQFCBwoFX2hlYWRCBwoFX2Jhc2UiKwoUSW5zcGVjdENoYW5nZVJlcXVlc3QSEwoLY2hhbmdlX3VzZGEYASABKAwi3wEKDlJlZnVzYWxWZXJkaWN0EhUKCG9mZmVyX2lkGAEgASgJSACIAQESEAoDb2lkGAIgASgJSAGIAQESEwoGZG9tYWluGAMgASgJSAKIAQESGQoMZGlyZWN0aXZlX2lkGAQgASgJSAOIAQESFAoHc2Vzc2lvbhgFIAEoCUgEiAEBEhEKCXBhcmtlZF9hdBgGIAEoCRIOCgZyZWFzb24YByABKAlCCwoJX29mZmVyX2lkQgYKBF9vaWRCCQoHX2RvbWFpbkIPCg1fZGlyZWN0aXZlX2lkQgoKCF9zZXNzaW9uIk8KG0VuY29kZVJlZnVzYWxWZXJkaWN0UmVxdWVzdBIwCgd2ZXJkaWN0GAEgASgLMh8ubm9tb3Mua2VybmVsLnYxLlJlZnVzYWxWZXJkaWN0IjQKHEluc3BlY3RSZWZ1c2FsVmVyZGljdFJlcXVlc3QSFAoMdmVyZGljdF91c2RhGAEgASgMItQBChVDb21wYWN0aW9uRXF1aXZhbGVuY2USEwoLc291cmNlX2hlYWQYASABKAkSFgoOc291cmNlX2dlbmVzaXMYAiABKAkSFgoOY2FuZGlkYXRlX2hlYWQYAyABKAkSGQoRY2FuZGlkYXRlX2dlbmVzaXMYBCABKAkSFgoOc291cmNlX2ludGVudHMYBSABKAQSFwoPY2FycmllZF9pbnRlbnRzGAYgASgEEhYKDnBhcmtlZF9pbnRlbnRzGAcgASgEEhIKCmVxdWl2YWxlbnQYCCABKAgifQohUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXF1ZXN0EhMKC3NvdXJjZV9yZXBvGAEgASgJEhMKC3NvdXJjZV9oZWFkGAIgASgJEhYKDmNhbmRpZGF0ZV9yZXBvGAMgASgJEhYKDmNhbmRpZGF0ZV9oZWFkGAQgASgJIjoKD1JlYWRCbG9iUmVxdWVzdBIMCgRyZXBvGAEgASgJEgsKA29pZBgCIAEoCRIMCgRwYXRoGAMgASgJIjQKEVJlc29sdmVSZWZSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJcmVmZXJlbmNlGAIgASgJIi8KD0xpc3RSZWZzUmVxdWVzdBIMCgRyZXBvGAEgASgJEg4KBnByZWZpeBgCIAEoCSJCCg9Xcml0ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkSDgoGdGFyZ2V0GAMgASgJIjMKEERlbGV0ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkiKQoITWV0YUZpbGUSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgMIq4BChZXcml0ZU1ldGFDb21taXRSZXF1ZXN0EgwKBHJlcG8YASABKAkSDwoHcGFyZW50cxgCIAMoCRIoCgVmaWxlcxgDIAMoCzIZLm5vbW9zLmtlcm5lbC52MS5NZXRhRmlsZRIPCgdtZXNzYWdlGAQgASgJEhQKDHRpbWVfc2Vjb25kcxgFIAEoEhIWCglyZWZlcmVuY2UYBiABKAlIAIgBAUIMCgpfcmVmZXJlbmNlImcKFUxhd0Nsb3N1cmVJbmZvUmVxdWVzdBIUCgxjbG9zdXJlX2ZpbGUYASABKAkSOAoKY2FwYWJpbGl0eRgCIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxMYXdDYXBhYmlsaXR5IocBChdDaGVja3BvaW50RXhwb3J0UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EiEKFHN0YWdlZF9mcm9udGllcl9maWxlGAIgASgJSACIAQFCFwoVX3N0YWdlZF9mcm9udGllcl9maWxlIkEKC0Zyb250aWVySGxjEhAKCHBoeXNpY2FsGAEgASgEEg8KB2xvZ2ljYWwYAiABKA0SDwoHcmVwbGljYRgDIAEoBCLdBAoXVmVyaWZpZWRGcm9udGllclJlY2VpcHQSFgoOZm9ybWF0X3ZlcnNpb24YASABKA0SCwoDb2lkGAIgASgJEg8KB2ludGVudHMYAyABKAQSEwoLcGxhbnNfcmVydW4YBCABKAQSHAoPY29udHJvbGxlcl9oYXNoGAUgASgJSACIAQESGQoRaW5zdGFsbGVkX2RvbWFpbnMYBiADKAkSDgoGbGluZWFyGAcgASgIEjMKCGxhc3RfaGxjGAggASgLMhwubm9tb3Mua2VybmVsLnYxLkZyb250aWVySGxjSAGIAQESFAoHbGFzdF9pZBgJIAEoCUgCiAEBEhEKCXN0YXRlX29pZBgKIAEoCRIUCgxzdGF0ZV9zaGEyNTYYCyABKAkSOQoOc3RhdGVfbGFzdF9obGMYDCABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIA4gBARIaCg1zdGF0ZV9sYXN0X2lkGA0gASgJSASIAQESFwoPbWFuaWZlc3Rfc2hhMjU2GA4gASgJEh4KFmxhd19jbG9zdXJlX2lkZW50aXRpZXMYDyADKAkSGgoScmVzb2x2YWJsZV9kb21haW5zGBAgAygJEiIKFXByb2plY3Rpb25fc3RhdGVfcm9vdBgRIAEoCUgFiAEBQhIKEF9jb250cm9sbGVyX2hhc2hCCwoJX2xhc3RfaGxjQgoKCF9sYXN0X2lkQhEKD19zdGF0ZV9sYXN0X2hsY0IQCg5fc3RhdGVfbGFzdF9pZEIYChZfcHJvamVjdGlvbl9zdGF0ZV9yb290IkUKFUZvbGRGcm9udGllckFnZ3JlZ2F0ZRIUCgxhZ2dyZWdhdGVfaWQYASABKAkSFgoOYWdncmVnYXRlX3VzZGEYAiABKAwiQQoXRm9sZEZyb250aWVyRmluZ2VycHJpbnQSEQoJaW50ZW50X2lkGAEgASgJEhMKC2ZpbmdlcnByaW50GAIgASgJItYDChRGb2xkRnJvbnRpZXJTbmFwc2hvdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgN0aXAYAiABKAkSDwoHZ2VuZXNpcxgDIAEoCRIVCg1oaXN0b3J5X2RlcHRoGAQgASgEEjoKCmFnZ3JlZ2F0ZXMYBSADKAsyJi5ub21vcy5rZXJuZWwudjEuRm9sZEZyb250aWVyQWdncmVnYXRlEjgKDWhsY193YXRlcm1hcmsYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAIgBARIzCghsYXN0X2hsYxgHIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gBiAEBEhQKB2xhc3RfaWQYCCABKAlIAogBARIWCg5zdHJpa2VfdGFyZ2V0cxgJIAMoCRJFChNpbnRlbnRfZmluZ2VycHJpbnRzGAogAygLMigubm9tb3Mua2VybmVsLnYxLkZvbGRGcm9udGllckZpbmdlcnByaW50EhcKCnN0YXRlX3Jvb3QYCyABKAlIA4gBAUIQCg5faGxjX3dhdGVybWFya0ILCglfbGFzdF9obGNCCgoIX2xhc3RfaWRCDQoLX3N0YXRlX3Jvb3QimwMKGFN0b3JlZENoZWNrcG9pbnRNYW5pZmVzdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRITCgZjdXJzb3IYAiABKAlIAIgBARIYChBjaGVja3BvaW50X2J5dGVzGAMgASgEEhAKCGxhd19oYXNoGAQgASgJEjsKC2NvbXByZXNzaW9uGAUgASgOMiYubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRDb21wcmVzc2lvbhIRCglyYXdfYnl0ZXMYBiABKAQSFAoMc3RvcmVkX2J5dGVzGAcgASgEEh0KFWZyb250aWVyX3N0b3JlZF9ieXRlcxgIIAEoBBIXCgpzdGF0ZV9yb290GAkgASgJSAGIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgKIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgCiAEBQgkKB19jdXJzb3JCDQoLX3N0YXRlX3Jvb3RCHAoaX3ZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQiwQMKF0NoZWNrcG9pbnRJbXBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEgoIZnJvbnRpZXIYAiABKAxIABIeChRzdGFnZWRfZnJvbnRpZXJfZmlsZRgGIAEoCUgAEhMKBmN1cnNvchgDIAEoCUgBiAEBEhcKCnN0YXRlX3Jvb3QYBCABKAlIAogBARINCgVzcGFucxgFIAEoCBIRCgRoZWFkGAcgASgJSAOIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgIIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgEiAEBEkoKE3ZlcmlmaWNhdGlvbl9wb2xpY3kYCSABKA4yLS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludFZlcmlmaWNhdGlvblBvbGljeUIRCg9mcm9udGllcl9zb3VyY2VCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIHCgVfaGVhZEIcChpfdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdCIxChZDYXBhY2l0eVJlc2VydmVSZXF1ZXN0EhcKD2FnZ3JlZ2F0ZV9jb3VudBgBIAEoBCJpChJSZXN0b3JlTWFpblJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIMCgRoZWFkGAIgASgJEhMKC2RpYWdub3N0aWNzGAMgASgIImkKG1Jlc29sdmVTdGF0ZVBvc2l0aW9uUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCW1haW5faGVhZBgCIAEoCRIVCg1oaW50ZWRfY29tbWl0GAMgASgJEhIKCnN0YXRlX3Jvb3QYBCABKAki4wsKD0N1c3RvZHlSZXNwb25zZRI4CgpwYWNrX2RlbHRhGAogASgLMiIubm9tb3Mua2VybmVsLnYxLlBhY2tEZWx0YVJlc3BvbnNlSAASOAoKYXBwbHlfcGFjaxgLIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5BcHBseVBhY2tSZXNwb25zZUgAEjgKCnJlcG9fc3RhdHMYDCABKAsyIi5ub21vcy5rZXJuZWwudjEuUmVwb1N0YXRzUmVzcG9uc2VIABI+Cg1pbnRlbnRzX2Fib3ZlGA0gASgLMiUubm9tb3Mua2VybmVsLnYxLkludGVudHNBYm92ZVJlc3BvbnNlSAASQAoOaW5zcGVjdF9jaGFuZ2UYDiABKAsyJi5ub21vcy5rZXJuZWwudjEuSW5zcGVjdENoYW5nZVJlc3BvbnNlSAASTwoWZW5jb2RlX3JlZnVzYWxfdmVyZGljdBgPIAEoCzItLm5vbW9zLmtlcm5lbC52MS5FbmNvZGVSZWZ1c2FsVmVyZGljdFJlc3BvbnNlSAASUQoXaW5zcGVjdF9yZWZ1c2FsX3ZlcmRpY3QYECABKAsyLi5ub21vcy5rZXJuZWwudjEuSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2VIABI2CglyZWFkX2Jsb2IYESABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVhZEJsb2JSZXNwb25zZUgAEjoKC3Jlc29sdmVfcmVmGBIgASgLMiMubm9tb3Mua2VybmVsLnYxLlJlc29sdmVSZWZSZXNwb25zZUgAEjYKCWxpc3RfcmVmcxgTIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5MaXN0UmVmc1Jlc3BvbnNlSAASMgoJd3JpdGVfcmVmGBQgASgLMh0ubm9tb3Mua2VybmVsLnYxLkFja25vd2xlZGdlZEgAEjMKCmRlbGV0ZV9yZWYYFSABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkSAASRQoRd3JpdGVfbWV0YV9jb21taXQYFiABKAsyKC5ub21vcy5rZXJuZWwudjEuV3JpdGVNZXRhQ29tbWl0UmVzcG9uc2VIABJDChBsYXdfY2xvc3VyZV9pbmZvGBcgASgLMicubm9tb3Mua2VybmVsLnYxLkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2VIABJGChFjaGVja3BvaW50X2V4cG9ydBgYIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50RXhwb3J0UmVzcG9uc2VIABJGChFjaGVja3BvaW50X2ltcG9ydBgZIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50SW1wb3J0UmVzcG9uc2VIABJEChBjYXBhY2l0eV9yZXNlcnZlGBogASgLMigubm9tb3Mua2VybmVsLnYxLkNhcGFjaXR5UmVzZXJ2ZVJlc3BvbnNlSAASPAoMcmVzdG9yZV9tYWluGBsgASgLMiQubm9tb3Mua2VybmVsLnYxLlJlc3RvcmVNYWluUmVzcG9uc2VIABJPChZyZXNvbHZlX3N0YXRlX3Bvc2l0aW9uGBwgASgLMi0ubm9tb3Mua2VybmVsLnYxLlJlc29sdmVTdGF0ZVBvc2l0aW9uUmVzcG9uc2VIABJIChJyZXNpZGVudF9mb290cHJpbnQYHSABKAsyKi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRGb290cHJpbnRSZXNwb25zZUgAEkIKD2hpc3Rvcnlfc3VtbWFyeRgeIAEoCzInLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5U3VtbWFyeVJlc3BvbnNlSAASWwoccHJvdmVfY29tcGFjdGlvbl9lcXVpdmFsZW5jZRgfIAEoCzIzLm5vbW9zLmtlcm5lbC52MS5Qcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlc3BvbnNlSABCCwoJb3BlcmF0aW9uIjAKEVBhY2tEZWx0YVJlc3BvbnNlEgwKBHBhY2sYASABKAwSDQoFYnl0ZXMYAiABKAQiPAoRQXBwbHlQYWNrUmVzcG9uc2USFAoMb2JqZWN0X2NvdW50GAEgASgEEhEKCXBhY2tfaGFzaBgCIAEoCSKnAQoRUmVwb1N0YXRzUmVzcG9uc2USEwoLdG90YWxfYnl0ZXMYASABKAQSFAoMb2JqZWN0X2J5dGVzGAIgASgEEhUKDWxvb3NlX29iamVjdHMYAyABKAQSEwoLbG9vc2VfYnl0ZXMYBCABKAQSEgoKcGFja19maWxlcxgFIAEoBBISCgpwYWNrX2J5dGVzGAYgASgEEhMKC2luZGV4X2J5dGVzGAcgASgEIuIBCgxJbnRlbnRSZWNvcmQSCwoDb2lkGAEgASgJEhEKCWludGVudF9pZBgCIAEoCRIOCgZkb21haW4YAyABKAkSEQoJZGlyZWN0aXZlGAQgASgJEhMKC2NoYW5nZV91c2RhGAUgASgMEi4KCHNlbWFudGljGAYgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EkoKFXRyYW5zcG9ydF9yZXF1aXJlbWVudBgHIAEoDjIrLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRUcmFuc3BvcnRSZXF1aXJlbWVudCJGChRJbnRlbnRzQWJvdmVSZXNwb25zZRIuCgdpbnRlbnRzGAEgAygLMh0ubm9tb3Mua2VybmVsLnYxLkludGVudFJlY29yZCJ0ChZIaXN0b3J5U3VtbWFyeVJlc3BvbnNlEgwKBGhlYWQYASABKAkSDgoGb2xkZXN0GAIgASgJEhQKDGNvbW1pdF9jb3VudBgDIAEoBBIQCghjb21wbGV0ZRgEIAEoCBIUCgxyZWFjaGVkX2Jhc2UYBSABKAgiQgoTTm9taW5hbENhbGxJZGVudGl0eRITCgtkb21haW5fcGF0aBgBIAEoCRIWCg5kaXJlY3RpdmVfcGF0aBgCIAEoCSKIAQoYTGlmZWN5Y2xlSW5zdGFsbElkZW50aXR5Eh8KF3RhcmdldF9jbG9zdXJlX2lkZW50aXR5GAEgASgJEhQKDGluc3RhbGxlZF9ieRgCIAEoCRI1CgVwaGFzZRgDIAEoDjImLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsUGhhc2UiWgodV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQSEQoJd29ya3NwYWNlGAEgASgJEhMKC3NvdXJjZV9oZWFkGAIgASgJEhEKCWZvbGRfcm9vdBgDIAEoCSK0AgoVSW5zcGVjdENoYW5nZVJlc3BvbnNlEi4KCHNlbWFudGljGAEgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCWludGVudF9pZBgCIAEoCRIyCgRjYWxsGAMgASgLMiQubm9tb3Mua2VybmVsLnYxLk5vbWluYWxDYWxsSWRlbnRpdHkSEAoIYXV0aG9yZWQYBCABKAgSRAoRbGlmZWN5Y2xlX2luc3RhbGwYBSABKAsyKS5ub21vcy5rZXJuZWwudjEuTGlmZWN5Y2xlSW5zdGFsbElkZW50aXR5EkwKFHJlcXVpcmVkX3Jlc2lkZW5jaWVzGAYgAygLMi4ubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVJlc2lkZW5jeVJlcXVpcmVtZW50IkwKHFJlc29sdmVTdGF0ZVBvc2l0aW9uUmVzcG9uc2USGgoNcmVzb2x2ZWRfaGVhZBgBIAEoCUgAiAEBQhAKDl9yZXNvbHZlZF9oZWFkIjQKHEVuY29kZVJlZnVzYWxWZXJkaWN0UmVzcG9uc2USFAoMdmVyZGljdF91c2RhGAEgASgMIlEKHUluc3BlY3RSZWZ1c2FsVmVyZGljdFJlc3BvbnNlEjAKB3ZlcmRpY3QYASABKAsyHy5ub21vcy5rZXJuZWwudjEuUmVmdXNhbFZlcmRpY3QidQoiUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXNwb25zZRI4CghldmlkZW5jZRgBIAEoCzImLm5vbW9zLmtlcm5lbC52MS5Db21wYWN0aW9uRXF1aXZhbGVuY2USFQoNZXZpZGVuY2VfdXNkYRgCIAEoDCIvChBSZWFkQmxvYlJlc3BvbnNlEg0KBWZvdW5kGAEgASgIEgwKBGJsb2IYAiABKAwiLgoSUmVzb2x2ZVJlZlJlc3BvbnNlEhAKA29pZBgBIAEoCUgAiAEBQgYKBF9vaWQiKwoJUmVmUmVjb3JkEhEKCXJlZmVyZW5jZRgBIAEoCRILCgNvaWQYAiABKAkiPAoQTGlzdFJlZnNSZXNwb25zZRIoCgRyZWZzGAEgAygLMhoubm9tb3Mua2VybmVsLnYxLlJlZlJlY29yZCIOCgxBY2tub3dsZWRnZWQiJgoXV3JpdGVNZXRhQ29tbWl0UmVzcG9uc2USCwoDb2lkGAEgASgJIoMBChZMYXdDbG9zdXJlSW5mb1Jlc3BvbnNlEhAKCGlkZW50aXR5GAEgASgJEhkKEXJvb3RfbG9naWNhbF9wYXRoGAIgASgJEhMKC2Fzc2V0X2NvdW50GAMgASgEEhIKCnByaW1fY291bnQYBCABKAQSEwoLZG9tYWluX2tleXMYBSADKAki3wMKGENoZWNrcG9pbnRFeHBvcnRSZXNwb25zZRINCgVlbXB0eRgBIAEoCBITCgZjdXJzb3IYAiABKAlIAIgBARIQCghmcm9udGllchgDIAEoDBIXCgpzdGF0ZV9yb290GAQgASgJSAGIAQESEgoKc3RhdGVfdHJlZRgFIAEoCBIOCgZwaW5uZWQYBiABKAgSGwoTcmVhZF9pbmRleF9zbmFwc2hvdBgHIAEoCBIjChtyZWFkX2luZGV4X3NuYXBzaG90X3BlbmRpbmcYCCABKAgSJAoXcmVhZF9pbmRleF9zcWxpdGVfYnl0ZXMYCSABKARIAogBARIlChhyZWFkX2luZGV4X2N1c3RvZHlfYnl0ZXMYCiABKARIA4gBARJQChl2ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0GAsgASgLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmaWVkRnJvbnRpZXJSZWNlaXB0SASIAQFCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIaChhfcmVhZF9pbmRleF9zcWxpdGVfYnl0ZXNCGwoZX3JlYWRfaW5kZXhfY3VzdG9keV9ieXRlc0IcChpfdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdCLXAgoYQ2hlY2twb2ludEltcG9ydFJlc3BvbnNlEhAKCHJlc3RvcmVkGAEgASgIEhMKBnJlYXNvbhgCIAEoCUgAiAEBEhcKD2Zyb250aWVyX3NlZWRlZBgDIAEoCBIlCh1mcm9udGllcl92ZXJpZmljYXRpb25fcGVuZGluZxgEIAEoCBIXCg9hZ2dyZWdhdGVfY291bnQYBSABKAQSKwoFc3BhbnMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEwoGY3Vyc29yGAcgASgJSAGIAQESEQoJcmVhZF9vbmx5GAggASgIEhcKD2xhenlfcmVhZF9pbmRleBgJIAEoCBI3Cglhc3N1cmFuY2UYCiABKA4yJC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEFzc3VyYW5jZUIJCgdfcmVhc29uQgkKB19jdXJzb3IiSgoXQ2FwYWNpdHlSZXNlcnZlUmVzcG9uc2USFwoPYWdncmVnYXRlX2NvdW50GAEgASgEEhYKDnJlc2VydmVkX2J5dGVzGAIgASgEIvkCChBSZXN0b3JlTWFpblNwYW5zEhAKCHRvdGFsX3VzGAEgASgEEhoKEmxpdmVfcmVmX2xvb2t1cF91cxgCIAEoBBIYChB0YXJnZXRfZGVjb2RlX3VzGAMgASgEEiQKHGN1c3RvZHlfY29tcGxldGVuZXNzX3JlYWRfdXMYBCABKAQSGQoRcXVhcmFudGluZV9yZWZfdXMYBSABKAQSJQodY2hhaW5fc2lnbmF0dXJlX2xhd19yZXBsYXlfdXMYBiABKAQSGQoRdmVyZGljdF9kZWNvZGVfdXMYByABKAQSIwobcHJvbW90ZV9hbmRfY2xlYW51cF9yZWZzX3VzGAggASgEEhsKE2Zyb250aWVyX3JlYnVpbGRfdXMYCSABKAQSGQoRZnJvbnRpZXJfc3RvcmVfdXMYCiABKAQSPQoMdmVyaWZpY2F0aW9uGAsgASgLMicubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRGlhZ25vc3RpY3Mi7wEKE1Jlc3RvcmVNYWluUmVzcG9uc2USDAoEaGVhZBgBIAEoCRIQCgh2ZXJpZmllZBgCIAEoCBIMCgR3YWxrGAMgASgJEjAKBXNwYW5zGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlc3RvcmVNYWluU3BhbnMSLQoHdmVyZGljdBgFIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBI3Cglhc3N1cmFuY2UYBiABKA4yJC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEFzc3VyYW5jZRIQCghhY2NlcHRlZBgHIAEoCCKbAgoKTm9tb3NWYWx1ZRIlCgRudWxsGAEgASgLMhUubm9tb3Mua2VybmVsLnYxLk51bGxIABIRCgdib29sZWFuGAIgASgISAASGAoOc2lnbmVkX2ludGVnZXIYAyABKBJIABIaChB1bnNpZ25lZF9pbnRlZ2VyGAQgASgESAASGAoOZmxvYXRpbmdfcG9pbnQYBSABKAFIABIOCgR0ZXh0GAYgASgJSAASDwoFYnl0ZXMYByABKAxIABIqCgRsaXN0GAggASgLMhoubm9tb3Mua2VybmVsLnYxLk5vbW9zTGlzdEgAEi4KBm9iamVjdBgJIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEgAQgYKBGtpbmQiBgoETnVsbCI4CglOb21vc0xpc3QSKwoGdmFsdWVzGAEgAygLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWUikwEKC05vbW9zU3RydWN0EjgKBmZpZWxkcxgBIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdC5GaWVsZHNFbnRyeRpKCgtGaWVsZHNFbnRyeRILCgNrZXkYASABKAkSKgoFdmFsdWUYAiABKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZToCOAEq6gEKEkJpcnRoT3V0Y29tZVN0YXR1cxIkCiBCSVJUSF9PVVRDT01FX1NUQVRVU19VTlNQRUNJRklFRBAAEh0KGUJJUlRIX09VVENPTUVfU1RBVFVTX0JPUk4QARIhCh1CSVJUSF9PVVRDT01FX1NUQVRVU19ERUZFUlJFRBACEh8KG0JJUlRIX09VVENPTUVfU1RBVFVTX0ZBSUxFRBADEiAKHEJJUlRIX09VVENPTUVfU1RBVFVTX1JFRlVTRUQQBBIpCiVCSVJUSF9PVVRDT01FX1NUQVRVU19VTldBUlJBTlRFRF9DRVJUEAUq6RIKEUtlcm5lbFJlZnVzYWxDb2RlEiMKH0tFUk5FTF9SRUZVU0FMX0NPREVfVU5TUEVDSUZJRUQQABIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX0JBRF9TSUdOQVRVUkUQARIkCiBLRVJORUxfUkVGVVNBTF9DT0RFX1VOQVVUSE9SSVpFRBACEicKI0tFUk5FTF9SRUZVU0FMX0NPREVfUE9MSUNZX0RJU0FCTEVEEAMSKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9VTkNFUlRJRklFRF9QT0xJQ1kQBBIjCh9LRVJORUxfUkVGVVNBTF9DT0RFX1JFRkVSRU5USUFMEAUSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9QT0lOVF9TVEFURV9VTkFWQUlMQUJMRRAGEiQKIEtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQX0VYQ0VFREVEEAcSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBfQ09VTlRfVU5BVkFJTEFCTEUQCBIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX0VWSURFTkNFX1VOQkFDS0VEEAkSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9PUlBIQU5fUkVDRUlQVBAKEjYKMktFUk5FTF9SRUZVU0FMX0NPREVfUkVDRUlQVF9PTl9URVJNSU5BTF9PQkxJR0FUSU9OEAsSIgoeS0VSTkVMX1JFRlVTQUxfQ09ERV9OT1RfTUlOVEVEEAwSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9ET01BSU5fTElGRUNZQ0xFEA0SKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9UWVBFX1RBR19NSVNNQVRDSBAOEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfUkVUSVJFRF9SRUFEX1NVUkZBQ0UQDxIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0NST1NTX1dPUktTUEFDRV9ERUNMSU5FRBAQEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQUdHUkVHQVRFX0lOVkFSSUFOVBAREisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfV09SS1NQQUNFX0lOVkFSSUFOVBASEi4KKktFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9DT05GTElDVBATEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfUkVRVUlSRUQQFBI0CjBLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1VOREVDTEFSRUQQFRIxCi1LRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX0lOVkFMSUQQFhIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1NUQUxFEBcSMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX1VOREVDTEFSRUQQGBItCilLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfUFJJVkFURRAZEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTkRFQ0xBUkVEEBoSMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOVFJVU1RFRF9LRVkQGxI2CjJLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5UUlVTVEVEX1NPVVJDRRAcEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9GT1JHRUQQHRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfU1RBTEUQHhIuCipLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfT1ZFUlNJWkUQHxI3CjNLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfRElTSE9OT1JFRF9TT1VSQ0UQIBI1CjFLRVJORUxfUkVGVVNBTF9DT0RFX0VRVUlWT0NBVElPTl9FVklERU5DRV9JTlZBTElEECESMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RBVElPTl9SRUNFSVBUX0lOVkFMSUQQIhIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9ST1NURVJfTUlTTUFUQ0gQIxIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9FUE9DSF9OT1RfTU9OT1RPTklDECQSKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9XUklURV9FUE9DSF9TVEFMRRAlEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfRU5WRUxPUEVfU0lEX01JU01BVENIECYSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9SRVZPS0VEX01FTUJFUl9SRVNVUlJFQ1RFRBAnEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfRk9SR0VEX1BSSU5DSVBBTBAoEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfS0VZX0FOQ0hPUhApEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfUkVDT1ZFUlkQKhIsCihLRVJORUxfUkVGVVNBTF9DT0RFX1NVUkZBQ0VEX0JBU0lTX0FIRUFEECsSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9TSUdORVJfRVBPQ0hfT1VUX09GX1dJTkRPVxAsEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfRVZPTFZFX1JFRlVTRUQQLRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEFUSU9OX0lOVkFMSUQQLhItCilLRVJORUxfUkVGVVNBTF9DT0RFX1BBUkVOVF9ESURfTk9UX0FUVEVTVBAvEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfQ0VSVF9DSEFJTl9CUk9LRU4QMBIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX05PVF9ST09URURfQVRfUk9PVBAxEioKJktFUk5FTF9SRUZVU0FMX0NPREVfREVMRUdBVElPTl9JTlZBTElEEDISJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9QTEFOX1JFSkVDVEVEEDMqigEKD1ZlcmlmeUNoYWluV2FsaxIhCh1WRVJJRllfQ0hBSU5fV0FMS19VTlNQRUNJRklFRBAAEhoKFlZFUklGWV9DSEFJTl9XQUxLX0ZVTEwQARIcChhWRVJJRllfQ0hBSU5fV0FMS19TVUZGSVgQAhIaChZWRVJJRllfQ0hBSU5fV0FMS19NRU1PEAMqiAwKDlF1ZXJ5T3BlcmF0aW9uEh8KG1FVRVJZX09QRVJBVElPTl9VTlNQRUNJRklFRBAAEhwKGFFVRVJZX09QRVJBVElPTl9FWFRSRU1VTRABEiUKIVFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUUxACEiwKKFFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUX1NVTU1BUlkQAxIgChxRVUVSWV9PUEVSQVRJT05fUkVBRF9QT1NUVVJFEAQSHwobUVVFUllfT1BFUkFUSU9OX0NVUlJFTlRfTEFXEAUSIwofUVVFUllfT1BFUkFUSU9OX0lOVEVSRkFDRV9PRkZFUhAGEicKI1FVRVJZX09QRVJBVElPTl9SRUxBVElPTl9HQVRFX09GRkVSEAcSHQoZUVVFUllfT1BFUkFUSU9OX1NDRU5FX0xBVxAIEiEKHVFVRVJZX09QRVJBVElPTl9JTlNUQUxMRURfTEFXEAkSHAoYUVVFUllfT1BFUkFUSU9OX0RFU0NSSUJFEAoSIwofUVVFUllfT1BFUkFUSU9OX0tFUk5FTF9SRVNPVVJDRRALEiMKH1FVRVJZX09QRVJBVElPTl9ERVZFTE9QRVJfU1BBTlMQDBIpCiVRVUVSWV9PUEVSQVRJT05fREVDTEFSRURfQ0FQQUJJTElUSUVTEA0SHQoZUVVFUllfT1BFUkFUSU9OX1JFQURJTkVTUxAOEiQKIFFVRVJZX09QRVJBVElPTl9QUk9KRUNUSU9OX1NUQVRTEA8SJQohUVVFUllfT1BFUkFUSU9OX01FTU9SWV9EUk9QX1BST0JFEBASGAoUUVVFUllfT1BFUkFUSU9OX1dBUk0QERIbChdRVUVSWV9PUEVSQVRJT05fUkVGUkVTSBASEiAKHFFVRVJZX09QRVJBVElPTl9WRVJJRllfQ0hBSU4QExIlCiFRVUVSWV9PUEVSQVRJT05fSElTVE9SWV9QUkVGTElHSFQQFBIZChVRVUVSWV9PUEVSQVRJT05fUk9VVEUQFRIYChRRVUVSWV9PUEVSQVRJT05fTUlOVBAWEiEKHVFVRVJZX09QRVJBVElPTl9DUllQVE9fS0VZR0VOEBcSJQohUVVFUllfT1BFUkFUSU9OX0NSWVBUT19TRUFMX0ZJRUxEEBgSLAooUVVFUllfT1BFUkFUSU9OX0NSWVBUT19CTElORF9JTkRFWF9UT0tFThAZEioKJlFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfU0NPUEVfS0VZEBoSLworUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9ERVZJQ0VfUkVRVUVTVBAbEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9BUFBST1ZBTBAcEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9SRUNPVkVSWRAdEiMKH1FVRVJZX09QRVJBVElPTl9DUllQVE9fV1JBUF9LRVkQHhIlCiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1VOV1JBUF9LRVkQHxIhCh1RVUVSWV9PUEVSQVRJT05fQVVUSE9SX0tFWUdFThAgEiQKIFFVRVJZX09QRVJBVElPTl9BVFRFU1RBVElPTl9TSUdOECESIAocUVVFUllfT1BFUkFUSU9OX1JFQ0VJUFRfUEFUSBAiEh0KGVFVRVJZX09QRVJBVElPTl9DRVJUX1NJR04QIxIlCiFRVUVSWV9PUEVSQVRJT05fQklSVEhfVFJVU1RfU1RBVEUQJBIhCh1RVUVSWV9PUEVSQVRJT05fRVJBX0NFUlRfU0lHThAlEigKJFFVRVJZX09QRVJBVElPTl9ERUxFR0FUSU9OX0NFUlRfU0lHThAmEikKJVFVRVJZX09QRVJBVElPTl9DQU5PTklDQUxJWkVfRlJPTlRJRVIQJxIrCidRVUVSWV9PUEVSQVRJT05fQ0FOT05JQ0FMSVpFX1BST0pFQ1RJT04QKCrSAgoVUmVzaWRlbnRDb21wb25lbnRLaW5kEicKI1JFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1VOU1BFQ0lGSUVEEAASJgoiUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfRk9MRF9TVEFURRABEi0KKVJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1JFQURfTU9ERUxfU1FMSVRFEAISLgoqUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfUkVBRF9NT0RFTF9JTkRFWEVTEAMSLQopUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfU0hBUkVEX0FUVFJJQlVURUQQBBIsCihSRVNJREVOVF9DT01QT05FTlRfS0lORF9XT1JLU1BBQ0VfQ0FDSEVTEAUSLAooUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfR0lUX09CSkVDVF9DQUNIRRAGKmwKE0tlcm5lbExhd0NhcGFiaWxpdHkSJQohS0VSTkVMX0xBV19DQVBBQklMSVRZX1VOU1BFQ0lGSUVEEAASLgoqS0VSTkVMX0xBV19DQVBBQklMSVRZX1NUQUdFX1pFUk9fQk9PVFNUUkFQEAEqWQoVQ2hlY2twb2ludENvbXByZXNzaW9uEh8KG0NIRUNLUE9JTlRfQ09NUFJFU1NJT05fTk9ORRAAEh8KG0NIRUNLUE9JTlRfQ09NUFJFU1NJT05fR1pJUBABKpEBChxDaGVja3BvaW50VmVyaWZpY2F0aW9uUG9saWN5EjMKL0NIRUNLUE9JTlRfVkVSSUZJQ0FUSU9OX1BPTElDWV9WRVJJRllfQ0FOT05JQ0FMEAASPAo4Q0hFQ0tQT0lOVF9WRVJJRklDQVRJT05fUE9MSUNZX1RSVVNUX1BSRVZJT1VTTFlfVkVSSUZJRUQQASqAAQoTQ2hlY2twb2ludEFzc3VyYW5jZRIkCiBDSEVDS1BPSU5UX0FTU1VSQU5DRV9VTlNQRUNJRklFRBAAEiAKHENIRUNLUE9JTlRfQVNTVVJBTkNFX1RSVVNURUQQARIhCh1DSEVDS1BPSU5UX0FTU1VSQU5DRV9WRVJJRklFRBACKqgBChpJbnRlbnRUcmFuc3BvcnRSZXF1aXJlbWVudBIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1VOU1BFQ0lGSUVEEAASLgoqSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9TRUFMRURfQ0hBTkdFEAESLAooSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9DT01NSVRfVFJFRRACKokBChVMaWZlY3ljbGVJbnN0YWxsUGhhc2USJwojTElGRUNZQ0xFX0lOU1RBTExfUEhBU0VfVU5TUEVDSUZJRUQQABIiCh5MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9BQ1RJVkUQARIjCh9MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9QRU5ESU5HEAIyWQoSTm9tb3NLZXJuZWxTZXJ2aWNlEkMKBENhbGwSHC5ub21vcy5rZXJuZWwudjEuQ2FsbFJlcXVlc3QaHS5ub21vcy5rZXJuZWwudjEuQ2FsbFJlc3BvbnNlYgZwcm90bzM");
12953
13153
  CallRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 0);
12954
13154
  CallResponseSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 1);
12955
- PrepareRemoteOfferRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 13);
12956
- PrepareRemoteOfferResponseSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 15);
12957
- WorkspaceTargetSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 33);
12958
- DirectiveCallSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 35);
12959
- AuthoringOptionsSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 36);
12960
- CapturedClockSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 37);
12961
- BirthCertificateSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 38);
12962
- OfferRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 39);
12963
- QueryRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 42);
12964
- QueryAuthoritySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 43);
12965
- InjectedKeySchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 44);
12966
- RowsQuerySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 45);
12967
- PageQuerySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 46);
12968
- ByIdQuerySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 47);
12969
- TallyQuerySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 52);
12970
- SpatialQuerySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 53);
12971
- NamedQuerySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 54);
12972
- FrontierTransitionRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 55);
12973
- AuthorizationObjectSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 60);
12974
- AuthorizationSubjectSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 61);
12975
- AuthorizationConsistencySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 63);
12976
- AuthorizationCheckRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 65);
12977
- AuthorizationExpandRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 66);
12978
- OutboxRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 72);
12979
- SyncRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 73);
12980
- TestRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 74);
12981
- SetTestRootRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 75);
12982
- CustodyRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 77);
12983
- ResidentFootprintRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 78);
12984
- PackDeltaRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 82);
12985
- ApplyPackRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 83);
12986
- RepoStatsRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 84);
12987
- IntentsAboveRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 85);
12988
- InspectChangeRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 87);
12989
- RefusalVerdictSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 88);
12990
- EncodeRefusalVerdictRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 89);
12991
- InspectRefusalVerdictRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 90);
12992
- ProveCompactionEquivalenceRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 92);
12993
- ReadBlobRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 93);
12994
- ResolveRefRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 94);
12995
- ListRefsRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 95);
12996
- WriteRefRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 96);
12997
- DeleteRefRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 97);
12998
- WriteMetaCommitRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 99);
12999
- LawClosureInfoRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 100);
13000
- CheckpointExportRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 101);
13001
- VerifiedFrontierReceiptSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 103);
13002
- StoredCheckpointManifestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 107);
13003
- CheckpointImportRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 108);
13004
- CapacityReserveRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 109);
13005
- RestoreMainRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 110);
13006
- ResolveStatePositionRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 111);
13007
- NomosValueSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 139);
13008
- NomosStructSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 142);
13009
- QueryOperationSchema2 = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 2);
13155
+ PrepareRemoteOfferRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 19);
13156
+ PrepareRemoteOfferResponseSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 21);
13157
+ WorkspaceTargetSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 39);
13158
+ DirectiveCallSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 41);
13159
+ AuthoringOptionsSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 42);
13160
+ CapturedClockSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 43);
13161
+ BirthCertificateSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 44);
13162
+ SignBirthCertificateRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 45);
13163
+ OfferRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 47);
13164
+ QueryRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 50);
13165
+ QueryAuthoritySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 51);
13166
+ InjectedKeySchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 52);
13167
+ RowsQuerySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 53);
13168
+ PageQuerySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 54);
13169
+ ByIdQuerySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 55);
13170
+ TallyQuerySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 60);
13171
+ SpatialQuerySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 61);
13172
+ NamedQuerySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 62);
13173
+ FrontierTransitionRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 63);
13174
+ AuthorizationObjectSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 68);
13175
+ AuthorizationSubjectSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 69);
13176
+ AuthorizationConsistencySchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 71);
13177
+ AuthorizationCheckRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 73);
13178
+ AuthorizationExpandRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 74);
13179
+ OutboxRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 80);
13180
+ SyncRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 81);
13181
+ TestRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 82);
13182
+ SetTestRootRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 83);
13183
+ CustodyRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 85);
13184
+ ResidentFootprintRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 86);
13185
+ PackDeltaRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 90);
13186
+ ApplyPackRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 91);
13187
+ RepoStatsRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 92);
13188
+ IntentsAboveRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 93);
13189
+ InspectChangeRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 95);
13190
+ RefusalVerdictSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 96);
13191
+ EncodeRefusalVerdictRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 97);
13192
+ InspectRefusalVerdictRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 98);
13193
+ ProveCompactionEquivalenceRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 100);
13194
+ ReadBlobRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 101);
13195
+ ResolveRefRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 102);
13196
+ ListRefsRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 103);
13197
+ WriteRefRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 104);
13198
+ DeleteRefRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 105);
13199
+ WriteMetaCommitRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 107);
13200
+ LawClosureInfoRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 108);
13201
+ CheckpointExportRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 109);
13202
+ VerifiedFrontierReceiptSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 111);
13203
+ StoredCheckpointManifestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 115);
13204
+ CheckpointImportRequestSchema3 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 116);
13205
+ CapacityReserveRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 117);
13206
+ RestoreMainRequestSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 118);
13207
+ ResolveStatePositionRequestSchema = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 119);
13208
+ NomosValueSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 147);
13209
+ NomosStructSchema2 = /* @__PURE__ */ messageDesc3(file_nomos_kernel_v1_kernel2, 150);
13210
+ BirthOutcomeStatusSchema2 = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 0);
13211
+ BirthOutcomeStatus2 = /* @__PURE__ */ tsEnum3(BirthOutcomeStatusSchema2);
13212
+ QueryOperationSchema2 = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 3);
13010
13213
  QueryOperation3 = /* @__PURE__ */ tsEnum3(QueryOperationSchema2);
13011
- KernelLawCapabilitySchema2 = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 4);
13214
+ KernelLawCapabilitySchema2 = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 5);
13012
13215
  KernelLawCapability2 = /* @__PURE__ */ tsEnum3(KernelLawCapabilitySchema2);
13013
- CheckpointCompressionSchema = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 5);
13216
+ CheckpointCompressionSchema = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 6);
13014
13217
  CheckpointCompression = /* @__PURE__ */ tsEnum3(CheckpointCompressionSchema);
13015
- CheckpointVerificationPolicySchema = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 6);
13218
+ CheckpointVerificationPolicySchema = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 7);
13016
13219
  CheckpointVerificationPolicy = /* @__PURE__ */ tsEnum3(CheckpointVerificationPolicySchema);
13017
- CheckpointAssuranceSchema = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 7);
13220
+ CheckpointAssuranceSchema = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 8);
13018
13221
  CheckpointAssurance = /* @__PURE__ */ tsEnum3(CheckpointAssuranceSchema);
13019
- IntentTransportRequirementSchema2 = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 8);
13222
+ IntentTransportRequirementSchema2 = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 9);
13020
13223
  IntentTransportRequirement2 = /* @__PURE__ */ tsEnum3(IntentTransportRequirementSchema2);
13021
- LifecycleInstallPhaseSchema = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 9);
13224
+ LifecycleInstallPhaseSchema = /* @__PURE__ */ enumDesc3(file_nomos_kernel_v1_kernel2, 10);
13022
13225
  LifecycleInstallPhase = /* @__PURE__ */ tsEnum3(LifecycleInstallPhaseSchema);
13023
13226
  }
13024
13227
  });
13025
13228
 
13229
+ // vendor/engine/offer-result.ts
13230
+ function presentProtoInteger2(value) {
13231
+ return value <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(value) : value;
13232
+ }
13233
+ function presentKernelSpans2(value) {
13234
+ const observations = {};
13235
+ for (const operation of value.operations) {
13236
+ observations[operation.label] = {
13237
+ totalUs: presentProtoInteger2(operation.totalUs),
13238
+ phases: Object.fromEntries(operation.phases.map(({ name, value: value2 }) => [name, presentProtoInteger2(value2)])),
13239
+ notes: Object.fromEntries(operation.notes.map(({ name, value: value2 }) => [name, presentProtoInteger2(value2)]))
13240
+ };
13241
+ }
13242
+ if (value.engine.length > 0) {
13243
+ observations.engine = Object.fromEntries(
13244
+ value.engine.map(({ name, value: value2 }) => [name, presentProtoInteger2(value2)])
13245
+ );
13246
+ }
13247
+ return observations;
13248
+ }
13249
+ function presentBirthStatus2(status2) {
13250
+ switch (status2) {
13251
+ case BirthOutcomeStatus2.BORN:
13252
+ return "born";
13253
+ case BirthOutcomeStatus2.DEFERRED:
13254
+ return "deferred";
13255
+ case BirthOutcomeStatus2.FAILED:
13256
+ return "failed";
13257
+ case BirthOutcomeStatus2.REFUSED:
13258
+ return "refused";
13259
+ case BirthOutcomeStatus2.UNWARRANTED_CERT:
13260
+ return "unwarranted-cert";
13261
+ case BirthOutcomeStatus2.UNSPECIFIED:
13262
+ throw new Error("kernel returned a birth outcome without a status");
13263
+ default: {
13264
+ const exhaustive = status2;
13265
+ throw new Error(`kernel returned an unknown birth outcome status: ${String(exhaustive)}`);
13266
+ }
13267
+ }
13268
+ }
13269
+ function presentOfferAdmitted2(admitted) {
13270
+ if (admitted.intentId.length === 0) {
13271
+ throw new Error("kernel admitted an offer without its stable intent identity");
13272
+ }
13273
+ return {
13274
+ ok: true,
13275
+ outcome: "admitted",
13276
+ ...admitted.head.length > 0 ? { head: admitted.head } : {},
13277
+ intentId: admitted.intentId,
13278
+ ...admitted.intentOut !== void 0 ? { intentOut: admitted.intentOut } : {},
13279
+ created: admitted.created.map(({ type, id }) => ({ type, id })),
13280
+ affected: admitted.affected.map(({ type, id }) => ({ type, id })),
13281
+ born: admitted.born.map(({ workspace, head }) => ({ workspace, head })),
13282
+ birthOutcomes: admitted.birthOutcomes.map((birth) => ({
13283
+ ...birth.workspace !== void 0 ? { workspace: birth.workspace } : {},
13284
+ status: presentBirthStatus2(birth.status),
13285
+ ...birth.reason !== void 0 ? { reason: birth.reason } : {},
13286
+ ...birth.code !== void 0 ? { code: birth.code } : {},
13287
+ replayed: birth.replayed,
13288
+ ...birth.lawHash !== void 0 ? { lawHash: birth.lawHash } : {},
13289
+ ...birth.parentWorkspace !== void 0 ? { parentWorkspace: birth.parentWorkspace } : {},
13290
+ ...birth.childWorkspace !== void 0 ? { childWorkspace: birth.childWorkspace } : {},
13291
+ ...birth.certificateRefusalReason !== void 0 ? { certificateRefusalReason: birth.certificateRefusalReason } : {}
13292
+ })),
13293
+ ...admitted.kernelSpans !== void 0 ? { kernelSpans: presentKernelSpans2(admitted.kernelSpans) } : {},
13294
+ ...admitted.dryRun ? { dryRun: true } : {}
13295
+ };
13296
+ }
13297
+ var init_offer_result2 = __esm({
13298
+ "vendor/engine/offer-result.ts"() {
13299
+ "use strict";
13300
+ init_kernel_pb2();
13301
+ }
13302
+ });
13303
+
13026
13304
  // vendor/engine/engine.ts
13027
13305
  var engine_exports = {};
13028
13306
  __export(engine_exports, {
@@ -13040,6 +13318,7 @@ __export(engine_exports, {
13040
13318
  authorOn: () => authorOn,
13041
13319
  backupHead: () => backupHead,
13042
13320
  backupToCustody: () => backupToCustody,
13321
+ birthCertificateLawPayload: () => birthCertificateLawPayload,
13043
13322
  boot: () => boot,
13044
13323
  certSign: () => certSign,
13045
13324
  check: () => check,
@@ -13140,6 +13419,7 @@ __export(engine_exports, {
13140
13419
  readiness: () => readiness,
13141
13420
  rebirthCompact: () => rebirthCompact,
13142
13421
  reconcileBornPacks: () => reconcileBornPacks,
13422
+ reconcileRequiredCustodyHead: () => reconcileRequiredCustodyHead,
13143
13423
  refreshProjection: () => refreshProjection,
13144
13424
  refusedSummary: () => refusedSummary,
13145
13425
  replicateIntents: () => replicateIntents,
@@ -13311,25 +13591,7 @@ function offerResult(response) {
13311
13591
  const outcome = response.outcome;
13312
13592
  switch (outcome.case) {
13313
13593
  case "admitted": {
13314
- const value = jsStruct2(outcome.value.result);
13315
- if (typeof value.intentId !== "string" || value.intentId.length === 0) {
13316
- throw new Error(
13317
- `kernel admitted an offer without its stable intent identity (returned fields: ${Object.keys(value).sort().join(", ") || "none"})`
13318
- );
13319
- }
13320
- return {
13321
- ok: true,
13322
- outcome: "admitted",
13323
- ...typeof value.head === "string" ? { head: value.head } : {},
13324
- intentId: value.intentId,
13325
- ...value.intentOut !== void 0 ? { intentOut: value.intentOut } : {},
13326
- created: Array.isArray(value.created) ? value.created : [],
13327
- affected: Array.isArray(value.affected) ? value.affected : [],
13328
- born: Array.isArray(value.born) ? value.born : [],
13329
- birthOutcomes: Array.isArray(value.birthOutcomes) ? value.birthOutcomes : [],
13330
- ...value.kernelSpans !== void 0 ? { kernelSpans: value.kernelSpans } : {},
13331
- ...value.dryRun === true ? { dryRun: true } : {}
13332
- };
13594
+ return presentOfferAdmitted2(outcome.value);
13333
13595
  }
13334
13596
  case "prepared":
13335
13597
  throw new Error("prepared offers are typed transport bytes; use prepareRemoteOffer rather than the admitted-offer adapter");
@@ -14245,7 +14507,13 @@ async function admitIntentOffers(eng, ws, ledger, offers, { receiptFence = null,
14245
14507
  if (intentId) main2.ids.add(intentId);
14246
14508
  main2.oids.add(res.head);
14247
14509
  main2.head = res.head;
14248
- rec.admitted.push({ oid, intent: intentId, head: res.head });
14510
+ rec.admitted.push({
14511
+ oid,
14512
+ intent: intentId,
14513
+ head: res.head,
14514
+ created: res.created,
14515
+ affected: res.affected
14516
+ });
14249
14517
  admittedTotal += 1;
14250
14518
  if (Array.isArray(res.born) && res.born.length) born.push(...res.born);
14251
14519
  if (Array.isArray(res.birthOutcomes) && res.birthOutcomes.length) birthOutcomes.push(...res.birthOutcomes);
@@ -14507,6 +14775,26 @@ async function mountWorkspace(eng, ws, ledger) {
14507
14775
  eng.mounted.set(ws, m);
14508
14776
  return m;
14509
14777
  }
14778
+ async function reconcileRequiredCustodyHead(eng, ws, ledger, requiredCustodyHead) {
14779
+ if (!/^[0-9a-f]{40}$/.test(requiredCustodyHead)) {
14780
+ throw new Error("required custody head must be a lowercase 40-hex git object id");
14781
+ }
14782
+ const current = eng.mounted.has(ws) ? kgit.resolveRef(eng, gitdirOf(ws), BRANCH2) : "";
14783
+ if (current === requiredCustodyHead) return eng.mounted.get(ws);
14784
+ if (current && isDirty(eng, ws)) {
14785
+ throw new Error(
14786
+ `workspace '${ws}' has verified but unsealed resident work; refusing to discard it while reconciling custody`
14787
+ );
14788
+ }
14789
+ if (eng.mounted.has(ws)) unmount(eng, ws);
14790
+ const mounted = await mountWorkspace(eng, ws, ledger);
14791
+ if (!mounted.restored || mounted.restoreError) {
14792
+ throw new Error(
14793
+ `workspace '${ws}' could not reconcile required custody ${requiredCustodyHead}: ${mounted.restoreError || "custody has no verified main"}`
14794
+ );
14795
+ }
14796
+ return mounted;
14797
+ }
14510
14798
  function assertAuthored(res, what) {
14511
14799
  if (!res || res.ok === false) throw new Error(`${what}: ${String(res && res.error || "law refused the intent").slice(0, 500)}`);
14512
14800
  return res;
@@ -16391,7 +16679,7 @@ function warmKernelCaches(eng, opts = {}) {
16391
16679
  ...opts.interactiveOnly ? { interactiveOnly: true } : {}
16392
16680
  });
16393
16681
  }
16394
- var enc7, dec7, BRANCH2, PROTO_ABI_VERSION2, protoRequestSequence2, certificateBytes, protoBirthCertificate, RESULT_PACK_INLINE_MAX, dirOf, repoArgOf, gitdirOf, headOf, unpack2, unsignedWasiPointers2, log, protoTarget2, protoAuthority, repoArgOfGitdir, bytesFromB64, kgit, closureInstallPayload, routeTagHexOfHomeKey2, SUMMARY_SEP, summaryKey, splitSummaryKey, NOMOS_SHARD_ROWS_READ, groupOf, tallyOf, isExtremumRead, extremumMonotone, MAX_INLINE_INTENT_OFFER_BYTES, MAX_STAGED_INTENT_OFFER_BYTES, CKPT_REF, pushVia, fullRef, applyPackInto, importCustodyObjects, syncCandidate, custodyLsRefs, capturedReadUnix, queryArguments, queryAuthorityOptions, qById, query2, queryStructured, queryPage, queryProfile, authorizationAddress, authorizationSubject, currentAuthorizationFrontier, check, expand, cryptoSealField, cryptoOwnedScopeKey, cryptoOwnedDeviceRequest, cryptoOwnedPrepareApproval, cryptoOwnedPrepareRecovery, cryptoKeygen, authorKeygen, eraCertSign, delegationCertSign, attestationSign, certSign, cryptoWrapKey, cryptoUnwrapKey, readPosture, count, sum, pendingConflicts, pendingConflictSummary, spatialBboxParams, spatialWithin, extremum, nomosActive, refusedRefName, GENESIS_WARRANT_ID, isWarranted, projectionStats, memoryDropProbe, readiness;
16682
+ var enc7, dec7, BRANCH2, PROTO_ABI_VERSION2, protoRequestSequence2, protoBirthCertificate, RESULT_PACK_INLINE_MAX, dirOf, repoArgOf, gitdirOf, headOf, birthCertificateLawPayload, unpack2, unsignedWasiPointers2, log, protoTarget2, protoAuthority, repoArgOfGitdir, bytesFromB64, kgit, closureInstallPayload, routeTagHexOfHomeKey2, SUMMARY_SEP, summaryKey, splitSummaryKey, NOMOS_SHARD_ROWS_READ, groupOf, tallyOf, isExtremumRead, extremumMonotone, MAX_INLINE_INTENT_OFFER_BYTES, MAX_STAGED_INTENT_OFFER_BYTES, CKPT_REF, pushVia, fullRef, applyPackInto, importCustodyObjects, syncCandidate, custodyLsRefs, capturedReadUnix, queryArguments, queryAuthorityOptions, qById, query2, queryStructured, queryPage, queryProfile, authorizationAddress, authorizationSubject, currentAuthorizationFrontier, check, expand, cryptoSealField, cryptoOwnedScopeKey, cryptoOwnedDeviceRequest, cryptoOwnedPrepareApproval, cryptoOwnedPrepareRecovery, cryptoKeygen, authorKeygen, eraCertSign, delegationCertSign, attestationSign, certSign, cryptoWrapKey, cryptoUnwrapKey, readPosture, count, sum, pendingConflicts, pendingConflictSummary, spatialBboxParams, spatialWithin, extremum, nomosActive, refusedRefName, GENESIS_WARRANT_ID, isWarranted, projectionStats, memoryDropProbe, readiness;
16395
16683
  var init_engine = __esm({
16396
16684
  "vendor/engine/engine.ts"() {
16397
16685
  "use strict";
@@ -16399,33 +16687,34 @@ var init_engine = __esm({
16399
16687
  init_tree2();
16400
16688
  init_custody_transport2();
16401
16689
  init_managed_promotion2();
16690
+ init_offer_result2();
16402
16691
  init_kernel_pb2();
16403
16692
  enc7 = new TextEncoder();
16404
16693
  dec7 = new TextDecoder();
16405
16694
  BRANCH2 = "main";
16406
16695
  PROTO_ABI_VERSION2 = 1;
16407
16696
  protoRequestSequence2 = 0;
16408
- certificateBytes = (value) => value instanceof Uint8Array ? value : Uint8Array.from(value ?? []);
16409
- protoBirthCertificate = (certificate) => create5(BirthCertificateSchema3, {
16410
- child: certificate.child,
16411
- founder: certificate.founder,
16412
- verified: certificate.verified,
16413
- parentKey: certificateBytes(certificate.parentKey ?? certificate.parent_key),
16414
- parentId: certificate.parentId ?? certificate.parent_id ?? "",
16415
- epoch: BigInt(certificate.epoch),
16416
- signature: certificateBytes(certificate.signature),
16417
- verifiedVia: certificate.verifiedVia ?? certificate.verified_via,
16418
- idpToken: certificate.idpToken ?? certificate.idp_token,
16419
- capturedClock: certificate.capturedClock === void 0 && certificate.captured_clock === void 0 ? void 0 : BigInt(certificate.capturedClock ?? certificate.captured_clock),
16420
- authProviderIssuer: certificate.authProviderIssuer ?? certificate.auth_provider_issuer,
16421
- authProviderJwks: certificate.authProviderJwks ?? certificate.auth_provider_jwks,
16422
- authProviderAudience: certificate.authProviderAudience ?? certificate.auth_provider_audience
16423
- });
16697
+ protoBirthCertificate = (certificate) => create5(BirthCertificateSchema3, certificate);
16424
16698
  RESULT_PACK_INLINE_MAX = 256 * 1024;
16425
16699
  dirOf = (n) => n;
16426
16700
  repoArgOf = (ws) => `/work/ws/${ws}`;
16427
16701
  gitdirOf = (ws) => `/work/ws/${ws}/nomos.git`;
16428
16702
  headOf = (eng, ws) => kgit.resolveRef(eng, gitdirOf(ws), BRANCH2) ?? "";
16703
+ birthCertificateLawPayload = (certificate) => ({
16704
+ child: certificate.child,
16705
+ founder: certificate.founder,
16706
+ verified: certificate.verified,
16707
+ parentKey: b64Bytes(certificate.parentKey),
16708
+ parentId: certificate.parentId,
16709
+ epoch: Number(certificate.epoch),
16710
+ signature: b64Bytes(certificate.signature),
16711
+ ...certificate.verifiedVia === void 0 ? {} : { verifiedVia: certificate.verifiedVia },
16712
+ ...certificate.idpToken === void 0 ? {} : { idpToken: certificate.idpToken },
16713
+ ...certificate.capturedClock === void 0 ? {} : { capturedClock: Number(certificate.capturedClock) },
16714
+ ...certificate.authProviderIssuer === void 0 ? {} : { authProviderIssuer: certificate.authProviderIssuer },
16715
+ ...certificate.authProviderJwks === void 0 ? {} : { authProviderJwks: certificate.authProviderJwks },
16716
+ ...certificate.authProviderAudience === void 0 ? {} : { authProviderAudience: certificate.authProviderAudience }
16717
+ });
16429
16718
  unpack2 = (p) => {
16430
16719
  const v = BigInt.asUintN(64, typeof p === "bigint" ? p : BigInt(p));
16431
16720
  return { ptr: Number(v >> 32n & 0xffffffffn), len: Number(v & 0xffffffffn) };
@@ -16906,22 +17195,36 @@ var init_engine = __esm({
16906
17195
  authProviderIssuer,
16907
17196
  authProviderJwks,
16908
17197
  authProviderAudience
16909
- }) => namedQueryProto(eng, "root", QueryOperation3.CERT_SIGN, {
16910
- child,
16911
- founder,
16912
- verified,
16913
- parentKey,
16914
- parentId,
16915
- epoch,
16916
- secret,
16917
- // forwarded only when present (the op reads them optionally; absent ⇒ classic cert bytes).
16918
- ...verifiedVia !== void 0 ? { verifiedVia } : {},
16919
- ...idpToken !== void 0 ? { idpToken } : {},
16920
- ...capturedClock !== void 0 ? { capturedClock } : {},
16921
- ...authProviderIssuer !== void 0 ? { authProviderIssuer } : {},
16922
- ...authProviderJwks !== void 0 ? { authProviderJwks } : {},
16923
- ...authProviderAudience !== void 0 ? { authProviderAudience } : {}
16924
- }).cert;
17198
+ }) => {
17199
+ const response = callProto(eng.ex, {
17200
+ case: "signBirthCertificate",
17201
+ value: create5(SignBirthCertificateRequestSchema2, {
17202
+ certificate: create5(BirthCertificateSchema3, {
17203
+ child,
17204
+ founder,
17205
+ verified,
17206
+ parentKey: parentKey ? bytesFromB64(parentKey) : new Uint8Array(),
17207
+ parentId,
17208
+ epoch: BigInt(epoch),
17209
+ signature: new Uint8Array(),
17210
+ verifiedVia,
17211
+ idpToken,
17212
+ capturedClock: capturedClock === void 0 ? void 0 : BigInt(capturedClock),
17213
+ authProviderIssuer,
17214
+ authProviderJwks,
17215
+ authProviderAudience
17216
+ }),
17217
+ signerSecret: bytesFromB64(secret)
17218
+ })
17219
+ }, eng.STDERR);
17220
+ if (response.outcome.case === "failure") {
17221
+ throw new Error(`${response.outcome.value.code}: ${response.outcome.value.message}`);
17222
+ }
17223
+ if (response.outcome.case !== "signBirthCertificate" || !response.outcome.value.certificate) {
17224
+ throw new Error(`kernel returned '${response.outcome.case || "empty"}' while signing a birth certificate`);
17225
+ }
17226
+ return response.outcome.value.certificate;
17227
+ };
16925
17228
  cryptoWrapKey = (eng, { recipientPub, scopeKey }) => {
16926
17229
  const result = namedQueryProto(eng, "root", QueryOperation3.CRYPTO_WRAP_KEY, { recipientPub, scopeKey });
16927
17230
  return { hpkeEpk: String(result.hpkeEpk ?? ""), ct: String(result.ct ?? "") };
@@ -17398,34 +17701,6 @@ __export(governance_exports, {
17398
17701
  import { createHash, createPrivateKey, createPublicKey } from "node:crypto";
17399
17702
  import { mkdirSync as mkdirSync3, readFileSync as readFileSync3, writeFileSync as writeFileSync4 } from "node:fs";
17400
17703
  import { dirname as dirname3, join as join4 } from "node:path";
17401
- function requireKernelBirthCertificate(value) {
17402
- const bytes = (field) => {
17403
- const raw = value[field];
17404
- if (raw instanceof Uint8Array) return raw;
17405
- if (Array.isArray(raw) && raw.every((entry) => Number.isInteger(entry) && Number(entry) >= 0 && Number(entry) <= 255)) {
17406
- return raw;
17407
- }
17408
- throw new Error(`certSign returned no valid ${field} bytes`);
17409
- };
17410
- if (typeof value.child !== "string" || typeof value.founder !== "string" || typeof value.verified !== "boolean" || typeof value.parent_id !== "string" || typeof value.epoch !== "number") {
17411
- throw new Error("certSign returned an invalid typed birth certificate");
17412
- }
17413
- return {
17414
- child: value.child,
17415
- founder: value.founder,
17416
- verified: value.verified,
17417
- parent_key: bytes("parent_key"),
17418
- parent_id: value.parent_id,
17419
- epoch: value.epoch,
17420
- signature: bytes("signature"),
17421
- ...typeof value.verified_via === "string" ? { verified_via: value.verified_via } : {},
17422
- ...typeof value.idp_token === "string" ? { idp_token: value.idp_token } : {},
17423
- ...typeof value.captured_clock === "number" ? { captured_clock: value.captured_clock } : {},
17424
- ...typeof value.auth_provider_issuer === "string" ? { auth_provider_issuer: value.auth_provider_issuer } : {},
17425
- ...typeof value.auth_provider_jwks === "string" ? { auth_provider_jwks: value.auth_provider_jwks } : {},
17426
- ...typeof value.auth_provider_audience === "string" ? { auth_provider_audience: value.auth_provider_audience } : {}
17427
- };
17428
- }
17429
17704
  async function clientConnect() {
17430
17705
  const mod = await Promise.resolve().then(() => (init_src2(), src_exports));
17431
17706
  return mod.connect;
@@ -17904,7 +18179,7 @@ async function ensureSovereignHome(opts = {}) {
17904
18179
  const frameworkHash = domains.currentLaw?.["nomos"];
17905
18180
  const lawHash = domains.currentLaw?.["workspaces"];
17906
18181
  if (!frameworkHash || !lawHash) throw new Error("root does not report the framework and governance laws needed for birth");
17907
- const birthCertificate = requireKernelBirthCertificate(await root.certSign({
18182
+ const birthCertificate = await root.certSign({
17908
18183
  child: home,
17909
18184
  founder: actor,
17910
18185
  verified: true,
@@ -17912,7 +18187,7 @@ async function ensureSovereignHome(opts = {}) {
17912
18187
  parentId: "root",
17913
18188
  epoch: 0,
17914
18189
  secret: device.secret
17915
- }));
18190
+ });
17916
18191
  const now = Date.now();
17917
18192
  const pool = await descendantPoolForBirth(cloud, "root", opts);
17918
18193
  const birth = await signAndPostOffer(
@@ -18069,7 +18344,7 @@ async function ensureApplicationWorkspace(application, opts = {}) {
18069
18344
  if (!frameworkHash2 || !lawHash2) {
18070
18345
  throw new Error(`parent '${requestedParent}' does not carry the framework/governance law needed to birth '${application}'`);
18071
18346
  }
18072
- const birthCertificate2 = requireKernelBirthCertificate(await parent2.certSign({
18347
+ const birthCertificate2 = await parent2.certSign({
18073
18348
  child: application,
18074
18349
  founder: actor,
18075
18350
  verified: true,
@@ -18086,7 +18361,7 @@ async function ensureApplicationWorkspace(application, opts = {}) {
18086
18361
  authProviderJwks: authProvider.keys,
18087
18362
  authProviderAudience: authProvider.audience
18088
18363
  } : {}
18089
- }));
18364
+ });
18090
18365
  const now2 = Date.now();
18091
18366
  const pool2 = await descendantPoolForBirth(cloud, requestedParent, opts);
18092
18367
  const birth2 = await signAndPostOffer(
@@ -18163,7 +18438,7 @@ async function ensureApplicationWorkspace(application, opts = {}) {
18163
18438
  throw new Error(`the signed session home does not carry the framework law needed to birth '${application}'`);
18164
18439
  }
18165
18440
  const parent = await connectGovernance(cloud, home.home, home.principal);
18166
- const birthCertificate = requireKernelBirthCertificate(await parent.certSign({
18441
+ const birthCertificate = await parent.certSign({
18167
18442
  child: application,
18168
18443
  founder: home.principal,
18169
18444
  verified: true,
@@ -18171,7 +18446,7 @@ async function ensureApplicationWorkspace(application, opts = {}) {
18171
18446
  parentId: home.home,
18172
18447
  epoch: 0,
18173
18448
  secret: home.device.secret
18174
- }));
18449
+ });
18175
18450
  const bare = lineageIdentity(home.principal);
18176
18451
  const now = Date.now();
18177
18452
  const pool = await descendantPoolForBirth(cloud, home.home, opts);
@@ -23755,7 +24030,7 @@ function warrantParentForBirth(eng, parentWs, parentDomain, lawHash, genesisOwne
23755
24030
  const ed = authorFrameworkAs("enrollDelegation", {
23756
24031
  user: birthActor,
23757
24032
  deviceKey: dev2.public,
23758
- certJson: JSON.stringify(childDelegation),
24033
+ certificate: birthCertificateLawPayload(childDelegation),
23759
24034
  enrolledAt: stamp
23760
24035
  }, birthActor);
23761
24036
  const hasDelegation = !(ed.ok === false && /no directive registered/i.test(ed.error ?? ""));
@@ -23769,7 +24044,7 @@ function warrantParentForBirth(eng, parentWs, parentDomain, lawHash, genesisOwne
23769
24044
  parentId: parentWs,
23770
24045
  parentKey: dev2.public,
23771
24046
  epoch: 0,
23772
- certChain: JSON.stringify({ links: [parentCert] })
24047
+ links: [birthCertificateLawPayload(parentCert)]
23773
24048
  }, genesisOwner);
23774
24049
  const hasParentAttestation = !(sba.ok === false && /no directive registered/i.test(sba.error ?? ""));
23775
24050
  if (sba.ok === false && !/already|create-once|attest|no directive registered/i.test(sba.error ?? "")) return { ok: false, error: `seedBirthAttestation refused: ${sba.error}` };
@@ -26001,6 +26276,7 @@ async function status(wsArg, opts) {
26001
26276
  // src/proof_upgrade.ts
26002
26277
  init_engine();
26003
26278
  init_cloud();
26279
+ init_governance();
26004
26280
  init_local_holon();
26005
26281
  import { existsSync as existsSync11 } from "node:fs";
26006
26282
  import { join as join13 } from "node:path";
@@ -26044,13 +26320,28 @@ function parseUpgradeProofArguments(args) {
26044
26320
  }
26045
26321
  }
26046
26322
  const target = flagValue(args, "--target");
26323
+ const cloud = flagValue(args, "--cloud");
26324
+ const principal = flagValue(args, "--principal");
26325
+ const as = flagValue(args, "--as");
26326
+ if (principal.value !== void 0 && as.value !== void 0) {
26327
+ throw new Error("pass either --principal or --as, not both");
26328
+ }
26047
26329
  const acceptance = flagValue(args, "--acceptance-reason");
26048
26330
  const candidateFile = flagValue(args, "--file");
26049
- for (const index of [...target.indexes, ...acceptance.indexes, ...candidateFile.indexes]) consumed.add(index);
26331
+ for (const index of [
26332
+ ...target.indexes,
26333
+ ...cloud.indexes,
26334
+ ...principal.indexes,
26335
+ ...as.indexes,
26336
+ ...acceptance.indexes,
26337
+ ...candidateFile.indexes
26338
+ ]) consumed.add(index);
26050
26339
  return {
26051
26340
  requested: true,
26052
26341
  ...source === void 0 ? {} : { source },
26053
26342
  ...target.value === void 0 ? {} : { target: target.value },
26343
+ ...cloud.value === void 0 ? {} : { cloud: cloud.value },
26344
+ ...(as.value ?? principal.value) === void 0 ? {} : { principal: as.value ?? principal.value },
26054
26345
  ...acceptance.value === void 0 ? {} : { acceptanceReason: acceptance.value },
26055
26346
  ...candidateFile.value === void 0 ? {} : { candidateFile: candidateFile.value },
26056
26347
  consumed
@@ -26119,15 +26410,19 @@ function printDifferences(report) {
26119
26410
  }
26120
26411
  if (report.divergences.length > 12) out11(` changed + ${report.divergences.length - 12} more difference(s)`);
26121
26412
  }
26122
- function localAuthorIdentity() {
26123
- const credentials = loadCreds();
26124
- const actor = activePrincipal() ?? ACTOR;
26125
- const device = getDeviceKey(actor);
26126
- const session = credentials.session?.uid === actor ? credentials.session : void 0;
26413
+ function localAuthorIdentity(explicitPrincipal) {
26414
+ const selectedPrincipal = explicitPrincipal ?? activePrincipal() ?? ACTOR;
26415
+ const actor = canonicalPrincipal2(selectedPrincipal);
26416
+ const bareActor = actor.startsWith("user:") ? actor.slice("user:".length) : actor;
26417
+ const device = getDeviceKey(selectedPrincipal) ?? getDeviceKey(actor) ?? getDeviceKey(bareActor);
26418
+ if (device?.secret === void 0) {
26419
+ throw new Error(
26420
+ `upgrade proof needs an enrolled signing device for '${actor}' \u2014 select one with --as <uid> or import/enroll its key first`
26421
+ );
26422
+ }
26127
26423
  return {
26128
26424
  actor,
26129
- ...device?.secret ? { authorSecret: device.secret } : {},
26130
- ...session?.accessToken ? { authToken: session.accessToken } : {}
26425
+ authorSecret: device.secret
26131
26426
  };
26132
26427
  }
26133
26428
  async function runUpgradeProof(sourceArg, lawUsdzPath, opts = {}) {
@@ -26145,7 +26440,7 @@ async function runUpgradeProof(sourceArg, lawUsdzPath, opts = {}) {
26145
26440
  return 1;
26146
26441
  }
26147
26442
  try {
26148
- const identity = localAuthorIdentity();
26443
+ const identity = localAuthorIdentity(opts.principal);
26149
26444
  const { eng: sourceEngine, runtime } = await holonEngine(cloud, identity.actor);
26150
26445
  const mounted = await mountReadOnlyCopy(sourceEngine, source, cloud);
26151
26446
  const sourceVerdict = verifyChainLocal(sourceEngine, WORKSPACE);
@@ -26575,6 +26870,8 @@ async function runProof(args) {
26575
26870
  }
26576
26871
  return runUpgradeProof(upgrade.source, lawUsdzPath, {
26577
26872
  ...upgrade.target === void 0 ? {} : { target: upgrade.target },
26873
+ ...upgrade.cloud === void 0 ? {} : { cloud: upgrade.cloud },
26874
+ ...upgrade.principal === void 0 ? {} : { principal: upgrade.principal },
26578
26875
  ...upgrade.acceptanceReason === void 0 ? {} : { acceptanceReason: upgrade.acceptanceReason }
26579
26876
  });
26580
26877
  }