api: Re-generate API code.

This commit is contained in:
Orne Brocaar
2023-10-19 17:12:19 +01:00
parent a087c4c18b
commit dc5be942d4
29 changed files with 3298 additions and 2939 deletions

View File

@ -26,346 +26,348 @@ namespace Chirpstack.Api {
string.Concat( string.Concat(
"ChVhcGkvYXBwbGljYXRpb24ucHJvdG8SA2FwaRocZ29vZ2xlL2FwaS9hbm5v", "ChVhcGkvYXBwbGljYXRpb24ucHJvdG8SA2FwaRocZ29vZ2xlL2FwaS9hbm5v",
"dGF0aW9ucy5wcm90bxofZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90", "dGF0aW9ucy5wcm90bxofZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wcm90",
"bxobZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnByb3RvIk8KC0FwcGxpY2F0aW9u", "bxobZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnByb3RvIqYBCgtBcHBsaWNhdGlv",
"EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyAB", "bhIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMg",
"KAkSEQoJdGVuYW50X2lkGAQgASgJIqQBChNBcHBsaWNhdGlvbkxpc3RJdGVt", "ASgJEhEKCXRlbmFudF9pZBgEIAEoCRIoCgR0YWdzGAUgAygLMhouYXBpLkFw",
"EgoKAmlkGAEgASgJEi4KCmNyZWF0ZWRfYXQYAiABKAsyGi5nb29nbGUucHJv", "cGxpY2F0aW9uLlRhZ3NFbnRyeRorCglUYWdzRW50cnkSCwoDa2V5GAEgASgJ",
"dG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYAyABKAsyGi5nb29nbGUu", "Eg0KBXZhbHVlGAIgASgJOgI4ASKkAQoTQXBwbGljYXRpb25MaXN0SXRlbRIK",
"cHJvdG9idWYuVGltZXN0YW1wEgwKBG5hbWUYBCABKAkSEwoLZGVzY3JpcHRp", "CgJpZBgBIAEoCRIuCgpjcmVhdGVkX2F0GAIgASgLMhouZ29vZ2xlLnByb3Rv",
"b24YBSABKAkiQQoYQ3JlYXRlQXBwbGljYXRpb25SZXF1ZXN0EiUKC2FwcGxp", "YnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAMgASgLMhouZ29vZ2xlLnBy",
"Y2F0aW9uGAEgASgLMhAuYXBpLkFwcGxpY2F0aW9uIicKGUNyZWF0ZUFwcGxp", "b3RvYnVmLlRpbWVzdGFtcBIMCgRuYW1lGAQgASgJEhMKC2Rlc2NyaXB0aW9u",
"Y2F0aW9uUmVzcG9uc2USCgoCaWQYASABKAkiIwoVR2V0QXBwbGljYXRpb25S", "GAUgASgJIkEKGENyZWF0ZUFwcGxpY2F0aW9uUmVxdWVzdBIlCgthcHBsaWNh",
"ZXF1ZXN0EgoKAmlkGAEgASgJIrkBChZHZXRBcHBsaWNhdGlvblJlc3BvbnNl", "dGlvbhgBIAEoCzIQLmFwaS5BcHBsaWNhdGlvbiInChlDcmVhdGVBcHBsaWNh",
"EiUKC2FwcGxpY2F0aW9uGAEgASgLMhAuYXBpLkFwcGxpY2F0aW9uEi4KCmNy", "dGlvblJlc3BvbnNlEgoKAmlkGAEgASgJIiMKFUdldEFwcGxpY2F0aW9uUmVx",
"ZWF0ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4K", "dWVzdBIKCgJpZBgBIAEoCSK5AQoWR2V0QXBwbGljYXRpb25SZXNwb25zZRIl",
"CnVwZGF0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1w", "CgthcHBsaWNhdGlvbhgBIAEoCzIQLmFwaS5BcHBsaWNhdGlvbhIuCgpjcmVh",
"EhgKEG1lYXN1cmVtZW50X2tleXMYBCADKAkiQQoYVXBkYXRlQXBwbGljYXRp", "dGVkX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1",
"b25SZXF1ZXN0EiUKC2FwcGxpY2F0aW9uGAEgASgLMhAuYXBpLkFwcGxpY2F0", "cGRhdGVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIY",
"aW9uIiYKGERlbGV0ZUFwcGxpY2F0aW9uUmVxdWVzdBIKCgJpZBgBIAEoCSJb", "ChBtZWFzdXJlbWVudF9rZXlzGAQgAygJIkEKGFVwZGF0ZUFwcGxpY2F0aW9u",
"ChdMaXN0QXBwbGljYXRpb25zUmVxdWVzdBINCgVsaW1pdBgBIAEoDRIOCgZv", "UmVxdWVzdBIlCgthcHBsaWNhdGlvbhgBIAEoCzIQLmFwaS5BcHBsaWNhdGlv",
"ZmZzZXQYAiABKA0SDgoGc2VhcmNoGAMgASgJEhEKCXRlbmFudF9pZBgEIAEo", "biImChhEZWxldGVBcHBsaWNhdGlvblJlcXVlc3QSCgoCaWQYASABKAkiWwoX",
"CSJZChhMaXN0QXBwbGljYXRpb25zUmVzcG9uc2USEwoLdG90YWxfY291bnQY", "TGlzdEFwcGxpY2F0aW9uc1JlcXVlc3QSDQoFbGltaXQYASABKA0SDgoGb2Zm",
"ASABKA0SKAoGcmVzdWx0GAIgAygLMhguYXBpLkFwcGxpY2F0aW9uTGlzdEl0", "c2V0GAIgASgNEg4KBnNlYXJjaBgDIAEoCRIRCgl0ZW5hbnRfaWQYBCABKAki",
"ZW0iMQoXTGlzdEludGVncmF0aW9uc1JlcXVlc3QSFgoOYXBwbGljYXRpb25f", "WQoYTGlzdEFwcGxpY2F0aW9uc1Jlc3BvbnNlEhMKC3RvdGFsX2NvdW50GAEg",
"aWQYASABKAkiOQoTSW50ZWdyYXRpb25MaXN0SXRlbRIiCgRraW5kGAEgASgO", "ASgNEigKBnJlc3VsdBgCIAMoCzIYLmFwaS5BcHBsaWNhdGlvbkxpc3RJdGVt",
"MhQuYXBpLkludGVncmF0aW9uS2luZCJZChhMaXN0SW50ZWdyYXRpb25zUmVz", "IjEKF0xpc3RJbnRlZ3JhdGlvbnNSZXF1ZXN0EhYKDmFwcGxpY2F0aW9uX2lk",
"cG9uc2USEwoLdG90YWxfY291bnQYASABKA0SKAoGcmVzdWx0GAIgAygLMhgu", "GAEgASgJIjkKE0ludGVncmF0aW9uTGlzdEl0ZW0SIgoEa2luZBgBIAEoDjIU",
"YXBpLkludGVncmF0aW9uTGlzdEl0ZW0iygEKD0h0dHBJbnRlZ3JhdGlvbhIW", "LmFwaS5JbnRlZ3JhdGlvbktpbmQiWQoYTGlzdEludGVncmF0aW9uc1Jlc3Bv",
"Cg5hcHBsaWNhdGlvbl9pZBgBIAEoCRIyCgdoZWFkZXJzGAIgAygLMiEuYXBp", "bnNlEhMKC3RvdGFsX2NvdW50GAEgASgNEigKBnJlc3VsdBgCIAMoCzIYLmFw",
"Lkh0dHBJbnRlZ3JhdGlvbi5IZWFkZXJzRW50cnkSHwoIZW5jb2RpbmcYAyAB", "aS5JbnRlZ3JhdGlvbkxpc3RJdGVtIsoBCg9IdHRwSW50ZWdyYXRpb24SFgoO",
"KA4yDS5hcGkuRW5jb2RpbmcSGgoSZXZlbnRfZW5kcG9pbnRfdXJsGAQgASgJ", "YXBwbGljYXRpb25faWQYASABKAkSMgoHaGVhZGVycxgCIAMoCzIhLmFwaS5I",
"Gi4KDEhlYWRlcnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6", "dHRwSW50ZWdyYXRpb24uSGVhZGVyc0VudHJ5Eh8KCGVuY29kaW5nGAMgASgO",
"AjgBIkkKHENyZWF0ZUh0dHBJbnRlZ3JhdGlvblJlcXVlc3QSKQoLaW50ZWdy", "Mg0uYXBpLkVuY29kaW5nEhoKEmV2ZW50X2VuZHBvaW50X3VybBgEIAEoCRou",
"YXRpb24YASABKAsyFC5hcGkuSHR0cEludGVncmF0aW9uIjMKGUdldEh0dHBJ", "CgxIZWFkZXJzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4",
"bnRlZ3JhdGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASABKAkiRwoa", "ASJJChxDcmVhdGVIdHRwSW50ZWdyYXRpb25SZXF1ZXN0EikKC2ludGVncmF0",
"R2V0SHR0cEludGVncmF0aW9uUmVzcG9uc2USKQoLaW50ZWdyYXRpb24YASAB", "aW9uGAEgASgLMhQuYXBpLkh0dHBJbnRlZ3JhdGlvbiIzChlHZXRIdHRwSW50",
"KAsyFC5hcGkuSHR0cEludGVncmF0aW9uIkkKHFVwZGF0ZUh0dHBJbnRlZ3Jh", "ZWdyYXRpb25SZXF1ZXN0EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIkcKGkdl",
"dGlvblJlcXVlc3QSKQoLaW50ZWdyYXRpb24YASABKAsyFC5hcGkuSHR0cElu", "dEh0dHBJbnRlZ3JhdGlvblJlc3BvbnNlEikKC2ludGVncmF0aW9uGAEgASgL",
"dGVncmF0aW9uIjYKHERlbGV0ZUh0dHBJbnRlZ3JhdGlvblJlcXVlc3QSFgoO", "MhQuYXBpLkh0dHBJbnRlZ3JhdGlvbiJJChxVcGRhdGVIdHRwSW50ZWdyYXRp",
"YXBwbGljYXRpb25faWQYASABKAkilQIKE0luZmx1eERiSW50ZWdyYXRpb24S", "b25SZXF1ZXN0EikKC2ludGVncmF0aW9uGAEgASgLMhQuYXBpLkh0dHBJbnRl",
"FgoOYXBwbGljYXRpb25faWQYASABKAkSEAoIZW5kcG9pbnQYAiABKAkSCgoC", "Z3JhdGlvbiI2ChxEZWxldGVIdHRwSW50ZWdyYXRpb25SZXF1ZXN0EhYKDmFw",
"ZGIYAyABKAkSEAoIdXNlcm5hbWUYBCABKAkSEAoIcGFzc3dvcmQYBSABKAkS", "cGxpY2F0aW9uX2lkGAEgASgJIpUCChNJbmZsdXhEYkludGVncmF0aW9uEhYK",
"HQoVcmV0ZW50aW9uX3BvbGljeV9uYW1lGAYgASgJEikKCXByZWNpc2lvbhgH", "DmFwcGxpY2F0aW9uX2lkGAEgASgJEhAKCGVuZHBvaW50GAIgASgJEgoKAmRi",
"IAEoDjIWLmFwaS5JbmZsdXhEYlByZWNpc2lvbhIlCgd2ZXJzaW9uGAggASgO", "GAMgASgJEhAKCHVzZXJuYW1lGAQgASgJEhAKCHBhc3N3b3JkGAUgASgJEh0K",
"MhQuYXBpLkluZmx1eERiVmVyc2lvbhINCgV0b2tlbhgJIAEoCRIUCgxvcmdh", "FXJldGVudGlvbl9wb2xpY3lfbmFtZRgGIAEoCRIpCglwcmVjaXNpb24YByAB",
"bml6YXRpb24YCiABKAkSDgoGYnVja2V0GAsgASgJIlEKIENyZWF0ZUluZmx1", "KA4yFi5hcGkuSW5mbHV4RGJQcmVjaXNpb24SJQoHdmVyc2lvbhgIIAEoDjIU",
"eERiSW50ZWdyYXRpb25SZXF1ZXN0Ei0KC2ludGVncmF0aW9uGAEgASgLMhgu", "LmFwaS5JbmZsdXhEYlZlcnNpb24SDQoFdG9rZW4YCSABKAkSFAoMb3JnYW5p",
"YXBpLkluZmx1eERiSW50ZWdyYXRpb24iNwodR2V0SW5mbHV4RGJJbnRlZ3Jh", "emF0aW9uGAogASgJEg4KBmJ1Y2tldBgLIAEoCSJRCiBDcmVhdGVJbmZsdXhE",
"dGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASABKAkiTwoeR2V0SW5m", "YkludGVncmF0aW9uUmVxdWVzdBItCgtpbnRlZ3JhdGlvbhgBIAEoCzIYLmFw",
"bHV4RGJJbnRlZ3JhdGlvblJlc3BvbnNlEi0KC2ludGVncmF0aW9uGAEgASgL", "aS5JbmZsdXhEYkludGVncmF0aW9uIjcKHUdldEluZmx1eERiSW50ZWdyYXRp",
"MhguYXBpLkluZmx1eERiSW50ZWdyYXRpb24iUQogVXBkYXRlSW5mbHV4RGJJ", "b25SZXF1ZXN0EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIk8KHkdldEluZmx1",
"bnRlZ3JhdGlvblJlcXVlc3QSLQoLaW50ZWdyYXRpb24YASABKAsyGC5hcGku", "eERiSW50ZWdyYXRpb25SZXNwb25zZRItCgtpbnRlZ3JhdGlvbhgBIAEoCzIY",
"SW5mbHV4RGJJbnRlZ3JhdGlvbiI6CiBEZWxldGVJbmZsdXhEYkludGVncmF0", "LmFwaS5JbmZsdXhEYkludGVncmF0aW9uIlEKIFVwZGF0ZUluZmx1eERiSW50",
"aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJAChZUaGluZ3NC", "ZWdyYXRpb25SZXF1ZXN0Ei0KC2ludGVncmF0aW9uGAEgASgLMhguYXBpLklu",
"b2FyZEludGVncmF0aW9uEhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJEg4KBnNl", "Zmx1eERiSW50ZWdyYXRpb24iOgogRGVsZXRlSW5mbHV4RGJJbnRlZ3JhdGlv",
"cnZlchgCIAEoCSJXCiNDcmVhdGVUaGluZ3NCb2FyZEludGVncmF0aW9uUmVx", "blJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASABKAkiQAoWVGhpbmdzQm9h",
"dWVzdBIwCgtpbnRlZ3JhdGlvbhgBIAEoCzIbLmFwaS5UaGluZ3NCb2FyZElu", "cmRJbnRlZ3JhdGlvbhIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCRIOCgZzZXJ2",
"dGVncmF0aW9uIjoKIEdldFRoaW5nc0JvYXJkSW50ZWdyYXRpb25SZXF1ZXN0", "ZXIYAiABKAkiVwojQ3JlYXRlVGhpbmdzQm9hcmRJbnRlZ3JhdGlvblJlcXVl",
"EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIlUKIUdldFRoaW5nc0JvYXJkSW50", "c3QSMAoLaW50ZWdyYXRpb24YASABKAsyGy5hcGkuVGhpbmdzQm9hcmRJbnRl",
"ZWdyYXRpb25SZXNwb25zZRIwCgtpbnRlZ3JhdGlvbhgBIAEoCzIbLmFwaS5U", "Z3JhdGlvbiI6CiBHZXRUaGluZ3NCb2FyZEludGVncmF0aW9uUmVxdWVzdBIW",
"aGluZ3NCb2FyZEludGVncmF0aW9uIlcKI1VwZGF0ZVRoaW5nc0JvYXJkSW50", "Cg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJVCiFHZXRUaGluZ3NCb2FyZEludGVn",
"ZWdyYXRpb25SZXF1ZXN0EjAKC2ludGVncmF0aW9uGAEgASgLMhsuYXBpLlRo", "cmF0aW9uUmVzcG9uc2USMAoLaW50ZWdyYXRpb24YASABKAsyGy5hcGkuVGhp",
"aW5nc0JvYXJkSW50ZWdyYXRpb24iPQojRGVsZXRlVGhpbmdzQm9hcmRJbnRl", "bmdzQm9hcmRJbnRlZ3JhdGlvbiJXCiNVcGRhdGVUaGluZ3NCb2FyZEludGVn",
"Z3JhdGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASABKAkiQAoUTXlE", "cmF0aW9uUmVxdWVzdBIwCgtpbnRlZ3JhdGlvbhgBIAEoCzIbLmFwaS5UaGlu",
"ZXZpY2VzSW50ZWdyYXRpb24SFgoOYXBwbGljYXRpb25faWQYASABKAkSEAoI", "Z3NCb2FyZEludGVncmF0aW9uIj0KI0RlbGV0ZVRoaW5nc0JvYXJkSW50ZWdy",
"ZW5kcG9pbnQYAiABKAkiUwohQ3JlYXRlTXlEZXZpY2VzSW50ZWdyYXRpb25S", "YXRpb25SZXF1ZXN0EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIkAKFE15RGV2",
"ZXF1ZXN0Ei4KC2ludGVncmF0aW9uGAEgASgLMhkuYXBpLk15RGV2aWNlc0lu", "aWNlc0ludGVncmF0aW9uEhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJEhAKCGVu",
"dGVncmF0aW9uIjgKHkdldE15RGV2aWNlc0ludGVncmF0aW9uUmVxdWVzdBIW", "ZHBvaW50GAIgASgJIlMKIUNyZWF0ZU15RGV2aWNlc0ludGVncmF0aW9uUmVx",
"Cg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJRCh9HZXRNeURldmljZXNJbnRlZ3Jh", "dWVzdBIuCgtpbnRlZ3JhdGlvbhgBIAEoCzIZLmFwaS5NeURldmljZXNJbnRl",
"dGlvblJlc3BvbnNlEi4KC2ludGVncmF0aW9uGAEgASgLMhkuYXBpLk15RGV2", "Z3JhdGlvbiI4Ch5HZXRNeURldmljZXNJbnRlZ3JhdGlvblJlcXVlc3QSFgoO",
"aWNlc0ludGVncmF0aW9uIlMKIVVwZGF0ZU15RGV2aWNlc0ludGVncmF0aW9u", "YXBwbGljYXRpb25faWQYASABKAkiUQofR2V0TXlEZXZpY2VzSW50ZWdyYXRp",
"UmVxdWVzdBIuCgtpbnRlZ3JhdGlvbhgBIAEoCzIZLmFwaS5NeURldmljZXNJ", "b25SZXNwb25zZRIuCgtpbnRlZ3JhdGlvbhgBIAEoCzIZLmFwaS5NeURldmlj",
"bnRlZ3JhdGlvbiI7CiFEZWxldGVNeURldmljZXNJbnRlZ3JhdGlvblJlcXVl", "ZXNJbnRlZ3JhdGlvbiJTCiFVcGRhdGVNeURldmljZXNJbnRlZ3JhdGlvblJl",
"c3QSFgoOYXBwbGljYXRpb25faWQYASABKAkiegoUTG9yYUNsb3VkSW50ZWdy", "cXVlc3QSLgoLaW50ZWdyYXRpb24YASABKAsyGS5hcGkuTXlEZXZpY2VzSW50",
"YXRpb24SFgoOYXBwbGljYXRpb25faWQYASABKAkSSgoabW9kZW1fZ2VvbG9j", "ZWdyYXRpb24iOwohRGVsZXRlTXlEZXZpY2VzSW50ZWdyYXRpb25SZXF1ZXN0",
"YXRpb25fc2VydmljZXMYAiABKAsyJi5hcGkuTG9yYUNsb3VkTW9kZW1HZW9s", "EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJInoKFExvcmFDbG91ZEludGVncmF0",
"b2NhdGlvblNlcnZpY2VzItUDCiFMb3JhQ2xvdWRNb2RlbUdlb2xvY2F0aW9u", "aW9uEhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJEkoKGm1vZGVtX2dlb2xvY2F0",
"U2VydmljZXMSDQoFdG9rZW4YASABKAkSFQoNbW9kZW1fZW5hYmxlZBgCIAEo", "aW9uX3NlcnZpY2VzGAIgASgLMiYuYXBpLkxvcmFDbG91ZE1vZGVtR2VvbG9j",
"CBIXCg9mb3J3YXJkX2ZfcG9ydHMYECADKA0SGAoQZ25zc191c2VfcnhfdGlt", "YXRpb25TZXJ2aWNlcyLVAwohTG9yYUNsb3VkTW9kZW1HZW9sb2NhdGlvblNl",
"ZRgFIAEoCBIhChlnbnNzX3VzZV9nYXRld2F5X2xvY2F0aW9uGBEgASgIEhEK", "cnZpY2VzEg0KBXRva2VuGAEgASgJEhUKDW1vZGVtX2VuYWJsZWQYAiABKAgS",
"CXBhcnNlX3RsdhgGIAEoCBIeChZnZW9sb2NhdGlvbl9idWZmZXJfdHRsGAcg", "FwoPZm9yd2FyZF9mX3BvcnRzGBAgAygNEhgKEGduc3NfdXNlX3J4X3RpbWUY",
"ASgNEiMKG2dlb2xvY2F0aW9uX21pbl9idWZmZXJfc2l6ZRgIIAEoDRIYChBn", "BSABKAgSIQoZZ25zc191c2VfZ2F0ZXdheV9sb2NhdGlvbhgRIAEoCBIRCglw",
"ZW9sb2NhdGlvbl90ZG9hGAkgASgIEhgKEGdlb2xvY2F0aW9uX3Jzc2kYCiAB", "YXJzZV90bHYYBiABKAgSHgoWZ2VvbG9jYXRpb25fYnVmZmVyX3R0bBgHIAEo",
"KAgSGAoQZ2VvbG9jYXRpb25fZ25zcxgLIAEoCBImCh5nZW9sb2NhdGlvbl9n", "DRIjChtnZW9sb2NhdGlvbl9taW5fYnVmZmVyX3NpemUYCCABKA0SGAoQZ2Vv",
"bnNzX3BheWxvYWRfZmllbGQYDCABKAkSJAocZ2VvbG9jYXRpb25fZ25zc191", "bG9jYXRpb25fdGRvYRgJIAEoCBIYChBnZW9sb2NhdGlvbl9yc3NpGAogASgI",
"c2VfcnhfdGltZRgNIAEoCBIYChBnZW9sb2NhdGlvbl93aWZpGA4gASgIEiYK", "EhgKEGdlb2xvY2F0aW9uX2duc3MYCyABKAgSJgoeZ2VvbG9jYXRpb25fZ25z",
"Hmdlb2xvY2F0aW9uX3dpZmlfcGF5bG9hZF9maWVsZBgPIAEoCSJTCiFDcmVh", "c19wYXlsb2FkX2ZpZWxkGAwgASgJEiQKHGdlb2xvY2F0aW9uX2duc3NfdXNl",
"dGVMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlcXVlc3QSLgoLaW50ZWdyYXRpb24Y", "X3J4X3RpbWUYDSABKAgSGAoQZ2VvbG9jYXRpb25fd2lmaRgOIAEoCBImCh5n",
"ASABKAsyGS5hcGkuTG9yYUNsb3VkSW50ZWdyYXRpb24iOAoeR2V0TG9yYUNs", "ZW9sb2NhdGlvbl93aWZpX3BheWxvYWRfZmllbGQYDyABKAkiUwohQ3JlYXRl",
"b3VkSW50ZWdyYXRpb25SZXF1ZXN0EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJ", "TG9yYUNsb3VkSW50ZWdyYXRpb25SZXF1ZXN0Ei4KC2ludGVncmF0aW9uGAEg",
"IlEKH0dldExvcmFDbG91ZEludGVncmF0aW9uUmVzcG9uc2USLgoLaW50ZWdy", "ASgLMhkuYXBpLkxvcmFDbG91ZEludGVncmF0aW9uIjgKHkdldExvcmFDbG91",
"YXRpb24YASABKAsyGS5hcGkuTG9yYUNsb3VkSW50ZWdyYXRpb24iUwohVXBk", "ZEludGVncmF0aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJR",
"YXRlTG9yYUNsb3VkSW50ZWdyYXRpb25SZXF1ZXN0Ei4KC2ludGVncmF0aW9u", "Ch9HZXRMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlc3BvbnNlEi4KC2ludGVncmF0",
"GAEgASgLMhkuYXBpLkxvcmFDbG91ZEludGVncmF0aW9uIjsKIURlbGV0ZUxv", "aW9uGAEgASgLMhkuYXBpLkxvcmFDbG91ZEludGVncmF0aW9uIlMKIVVwZGF0",
"cmFDbG91ZEludGVncmF0aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgB", "ZUxvcmFDbG91ZEludGVncmF0aW9uUmVxdWVzdBIuCgtpbnRlZ3JhdGlvbhgB",
"IAEoCSKRAQoUR2NwUHViU3ViSW50ZWdyYXRpb24SFgoOYXBwbGljYXRpb25f", "IAEoCzIZLmFwaS5Mb3JhQ2xvdWRJbnRlZ3JhdGlvbiI7CiFEZWxldGVMb3Jh",
"aWQYASABKAkSHwoIZW5jb2RpbmcYAiABKA4yDS5hcGkuRW5jb2RpbmcSGAoQ", "Q2xvdWRJbnRlZ3JhdGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASAB",
"Y3JlZGVudGlhbHNfZmlsZRgDIAEoCRISCgpwcm9qZWN0X2lkGAQgASgJEhIK", "KAkikQEKFEdjcFB1YlN1YkludGVncmF0aW9uEhYKDmFwcGxpY2F0aW9uX2lk",
"CnRvcGljX25hbWUYBSABKAkiUwohQ3JlYXRlR2NwUHViU3ViSW50ZWdyYXRp", "GAEgASgJEh8KCGVuY29kaW5nGAIgASgOMg0uYXBpLkVuY29kaW5nEhgKEGNy",
"b25SZXF1ZXN0Ei4KC2ludGVncmF0aW9uGAEgASgLMhkuYXBpLkdjcFB1YlN1", "ZWRlbnRpYWxzX2ZpbGUYAyABKAkSEgoKcHJvamVjdF9pZBgEIAEoCRISCgp0",
"YkludGVncmF0aW9uIjgKHkdldEdjcFB1YlN1YkludGVncmF0aW9uUmVxdWVz", "b3BpY19uYW1lGAUgASgJIlMKIUNyZWF0ZUdjcFB1YlN1YkludGVncmF0aW9u",
"dBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJRCh9HZXRHY3BQdWJTdWJJbnRl", "UmVxdWVzdBIuCgtpbnRlZ3JhdGlvbhgBIAEoCzIZLmFwaS5HY3BQdWJTdWJJ",
"Z3JhdGlvblJlc3BvbnNlEi4KC2ludGVncmF0aW9uGAEgASgLMhkuYXBpLkdj", "bnRlZ3JhdGlvbiI4Ch5HZXRHY3BQdWJTdWJJbnRlZ3JhdGlvblJlcXVlc3QS",
"cFB1YlN1YkludGVncmF0aW9uIlMKIVVwZGF0ZUdjcFB1YlN1YkludGVncmF0", "FgoOYXBwbGljYXRpb25faWQYASABKAkiUQofR2V0R2NwUHViU3ViSW50ZWdy",
"aW9uUmVxdWVzdBIuCgtpbnRlZ3JhdGlvbhgBIAEoCzIZLmFwaS5HY3BQdWJT", "YXRpb25SZXNwb25zZRIuCgtpbnRlZ3JhdGlvbhgBIAEoCzIZLmFwaS5HY3BQ",
"dWJJbnRlZ3JhdGlvbiI7CiFEZWxldGVHY3BQdWJTdWJJbnRlZ3JhdGlvblJl", "dWJTdWJJbnRlZ3JhdGlvbiJTCiFVcGRhdGVHY3BQdWJTdWJJbnRlZ3JhdGlv",
"cXVlc3QSFgoOYXBwbGljYXRpb25faWQYASABKAkioQEKEUF3c1Nuc0ludGVn", "blJlcXVlc3QSLgoLaW50ZWdyYXRpb24YASABKAsyGS5hcGkuR2NwUHViU3Vi",
"cmF0aW9uEhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJEh8KCGVuY29kaW5nGAIg", "SW50ZWdyYXRpb24iOwohRGVsZXRlR2NwUHViU3ViSW50ZWdyYXRpb25SZXF1",
"ASgOMg0uYXBpLkVuY29kaW5nEg4KBnJlZ2lvbhgDIAEoCRIVCg1hY2Nlc3Nf", "ZXN0EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIqEBChFBd3NTbnNJbnRlZ3Jh",
"a2V5X2lkGAQgASgJEhkKEXNlY3JldF9hY2Nlc3Nfa2V5GAUgASgJEhEKCXRv", "dGlvbhIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCRIfCghlbmNvZGluZxgCIAEo",
"cGljX2FybhgGIAEoCSJNCh5DcmVhdGVBd3NTbnNJbnRlZ3JhdGlvblJlcXVl", "DjINLmFwaS5FbmNvZGluZxIOCgZyZWdpb24YAyABKAkSFQoNYWNjZXNzX2tl",
"c3QSKwoLaW50ZWdyYXRpb24YASABKAsyFi5hcGkuQXdzU25zSW50ZWdyYXRp", "eV9pZBgEIAEoCRIZChFzZWNyZXRfYWNjZXNzX2tleRgFIAEoCRIRCgl0b3Bp",
"b24iNQobR2V0QXdzU25zSW50ZWdyYXRpb25SZXF1ZXN0EhYKDmFwcGxpY2F0", "Y19hcm4YBiABKAkiTQoeQ3JlYXRlQXdzU25zSW50ZWdyYXRpb25SZXF1ZXN0",
"aW9uX2lkGAEgASgJIksKHEdldEF3c1Nuc0ludGVncmF0aW9uUmVzcG9uc2US", "EisKC2ludGVncmF0aW9uGAEgASgLMhYuYXBpLkF3c1Nuc0ludGVncmF0aW9u",
"KwoLaW50ZWdyYXRpb24YASABKAsyFi5hcGkuQXdzU25zSW50ZWdyYXRpb24i", "IjUKG0dldEF3c1Nuc0ludGVncmF0aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlv",
"TQoeVXBkYXRlQXdzU25zSW50ZWdyYXRpb25SZXF1ZXN0EisKC2ludGVncmF0", "bl9pZBgBIAEoCSJLChxHZXRBd3NTbnNJbnRlZ3JhdGlvblJlc3BvbnNlEisK",
"aW9uGAEgASgLMhYuYXBpLkF3c1Nuc0ludGVncmF0aW9uIjgKHkRlbGV0ZUF3", "C2ludGVncmF0aW9uGAEgASgLMhYuYXBpLkF3c1Nuc0ludGVncmF0aW9uIk0K",
"c1Nuc0ludGVncmF0aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEo", "HlVwZGF0ZUF3c1Nuc0ludGVncmF0aW9uUmVxdWVzdBIrCgtpbnRlZ3JhdGlv",
"CSKGAQoaQXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb24SFgoOYXBwbGljYXRp", "bhgBIAEoCzIWLmFwaS5Bd3NTbnNJbnRlZ3JhdGlvbiI4Ch5EZWxldGVBd3NT",
"b25faWQYASABKAkSHwoIZW5jb2RpbmcYAiABKA4yDS5hcGkuRW5jb2RpbmcS", "bnNJbnRlZ3JhdGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASABKAki",
"GQoRY29ubmVjdGlvbl9zdHJpbmcYAyABKAkSFAoMcHVibGlzaF9uYW1lGAQg", "hgEKGkF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9uEhYKDmFwcGxpY2F0aW9u",
"ASgJIl8KJ0NyZWF0ZUF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9uUmVxdWVz", "X2lkGAEgASgJEh8KCGVuY29kaW5nGAIgASgOMg0uYXBpLkVuY29kaW5nEhkK",
"dBI0CgtpbnRlZ3JhdGlvbhgBIAEoCzIfLmFwaS5BenVyZVNlcnZpY2VCdXNJ", "EWNvbm5lY3Rpb25fc3RyaW5nGAMgASgJEhQKDHB1Ymxpc2hfbmFtZRgEIAEo",
"bnRlZ3JhdGlvbiI+CiRHZXRBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJl", "CSJfCidDcmVhdGVBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlcXVlc3QS",
"cXVlc3QSFgoOYXBwbGljYXRpb25faWQYASABKAkiXQolR2V0QXp1cmVTZXJ2", "NAoLaW50ZWdyYXRpb24YASABKAsyHy5hcGkuQXp1cmVTZXJ2aWNlQnVzSW50",
"aWNlQnVzSW50ZWdyYXRpb25SZXNwb25zZRI0CgtpbnRlZ3JhdGlvbhgBIAEo", "ZWdyYXRpb24iPgokR2V0QXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb25SZXF1",
"CzIfLmFwaS5BenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvbiJfCidVcGRhdGVB", "ZXN0EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIl0KJUdldEF6dXJlU2Vydmlj",
"enVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlcXVlc3QSNAoLaW50ZWdyYXRp", "ZUJ1c0ludGVncmF0aW9uUmVzcG9uc2USNAoLaW50ZWdyYXRpb24YASABKAsy",
"b24YASABKAsyHy5hcGkuQXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb24iQQon", "Hy5hcGkuQXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb24iXwonVXBkYXRlQXp1",
"RGVsZXRlQXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb25SZXF1ZXN0EhYKDmFw", "cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb25SZXF1ZXN0EjQKC2ludGVncmF0aW9u",
"cGxpY2F0aW9uX2lkGAEgASgJIk8KFlBpbG90VGhpbmdzSW50ZWdyYXRpb24S", "GAEgASgLMh8uYXBpLkF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9uIkEKJ0Rl",
"FgoOYXBwbGljYXRpb25faWQYASABKAkSDgoGc2VydmVyGAIgASgJEg0KBXRv", "bGV0ZUF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9uUmVxdWVzdBIWCg5hcHBs",
"a2VuGAMgASgJIlcKI0NyZWF0ZVBpbG90VGhpbmdzSW50ZWdyYXRpb25SZXF1", "aWNhdGlvbl9pZBgBIAEoCSJPChZQaWxvdFRoaW5nc0ludGVncmF0aW9uEhYK",
"ZXN0EjAKC2ludGVncmF0aW9uGAEgASgLMhsuYXBpLlBpbG90VGhpbmdzSW50", "DmFwcGxpY2F0aW9uX2lkGAEgASgJEg4KBnNlcnZlchgCIAEoCRINCgV0b2tl",
"ZWdyYXRpb24iOgogR2V0UGlsb3RUaGluZ3NJbnRlZ3JhdGlvblJlcXVlc3QS", "bhgDIAEoCSJXCiNDcmVhdGVQaWxvdFRoaW5nc0ludGVncmF0aW9uUmVxdWVz",
"FgoOYXBwbGljYXRpb25faWQYASABKAkiVQohR2V0UGlsb3RUaGluZ3NJbnRl", "dBIwCgtpbnRlZ3JhdGlvbhgBIAEoCzIbLmFwaS5QaWxvdFRoaW5nc0ludGVn",
"Z3JhdGlvblJlc3BvbnNlEjAKC2ludGVncmF0aW9uGAEgASgLMhsuYXBpLlBp", "cmF0aW9uIjoKIEdldFBpbG90VGhpbmdzSW50ZWdyYXRpb25SZXF1ZXN0EhYK",
"bG90VGhpbmdzSW50ZWdyYXRpb24iVwojVXBkYXRlUGlsb3RUaGluZ3NJbnRl", "DmFwcGxpY2F0aW9uX2lkGAEgASgJIlUKIUdldFBpbG90VGhpbmdzSW50ZWdy",
"Z3JhdGlvblJlcXVlc3QSMAoLaW50ZWdyYXRpb24YASABKAsyGy5hcGkuUGls", "YXRpb25SZXNwb25zZRIwCgtpbnRlZ3JhdGlvbhgBIAEoCzIbLmFwaS5QaWxv",
"b3RUaGluZ3NJbnRlZ3JhdGlvbiI9CiNEZWxldGVQaWxvdFRoaW5nc0ludGVn", "dFRoaW5nc0ludGVncmF0aW9uIlcKI1VwZGF0ZVBpbG90VGhpbmdzSW50ZWdy",
"cmF0aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJ8ChBJZnR0", "YXRpb25SZXF1ZXN0EjAKC2ludGVncmF0aW9uGAEgASgLMhsuYXBpLlBpbG90",
"dEludGVncmF0aW9uEhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJEgsKA2tleRgC", "VGhpbmdzSW50ZWdyYXRpb24iPQojRGVsZXRlUGlsb3RUaGluZ3NJbnRlZ3Jh",
"IAEoCRIVCg11cGxpbmtfdmFsdWVzGAMgAygJEhYKDmFyYml0cmFyeV9qc29u", "dGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASABKAkifAoQSWZ0dHRJ",
"GAQgASgIEhQKDGV2ZW50X3ByZWZpeBgFIAEoCSJLCh1DcmVhdGVJZnR0dElu", "bnRlZ3JhdGlvbhIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCRILCgNrZXkYAiAB",
"dGVncmF0aW9uUmVxdWVzdBIqCgtpbnRlZ3JhdGlvbhgBIAEoCzIVLmFwaS5J", "KAkSFQoNdXBsaW5rX3ZhbHVlcxgDIAMoCRIWCg5hcmJpdHJhcnlfanNvbhgE",
"ZnR0dEludGVncmF0aW9uIjQKGkdldElmdHR0SW50ZWdyYXRpb25SZXF1ZXN0", "IAEoCBIUCgxldmVudF9wcmVmaXgYBSABKAkiSwodQ3JlYXRlSWZ0dHRJbnRl",
"EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIkkKG0dldElmdHR0SW50ZWdyYXRp", "Z3JhdGlvblJlcXVlc3QSKgoLaW50ZWdyYXRpb24YASABKAsyFS5hcGkuSWZ0",
"b25SZXNwb25zZRIqCgtpbnRlZ3JhdGlvbhgBIAEoCzIVLmFwaS5JZnR0dElu", "dHRJbnRlZ3JhdGlvbiI0ChpHZXRJZnR0dEludGVncmF0aW9uUmVxdWVzdBIW",
"dGVncmF0aW9uIksKHVVwZGF0ZUlmdHR0SW50ZWdyYXRpb25SZXF1ZXN0EioK", "Cg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJJChtHZXRJZnR0dEludGVncmF0aW9u",
"C2ludGVncmF0aW9uGAEgASgLMhUuYXBpLklmdHR0SW50ZWdyYXRpb24iNwod", "UmVzcG9uc2USKgoLaW50ZWdyYXRpb24YASABKAsyFS5hcGkuSWZ0dHRJbnRl",
"RGVsZXRlSWZ0dHRJbnRlZ3JhdGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25f", "Z3JhdGlvbiJLCh1VcGRhdGVJZnR0dEludGVncmF0aW9uUmVxdWVzdBIqCgtp",
"aWQYASABKAkiSQovR2VuZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0", "bnRlZ3JhdGlvbhgBIAEoCzIVLmFwaS5JZnR0dEludGVncmF0aW9uIjcKHURl",
"aWZpY2F0ZVJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASABKAkilgEKMEdl", "bGV0ZUlmdHR0SW50ZWdyYXRpb25SZXF1ZXN0EhYKDmFwcGxpY2F0aW9uX2lk",
"bmVyYXRlTXF0dEludGVncmF0aW9uQ2xpZW50Q2VydGlmaWNhdGVSZXNwb25z", "GAEgASgJIkkKL0dlbmVyYXRlTXF0dEludGVncmF0aW9uQ2xpZW50Q2VydGlm",
"ZRIQCgh0bHNfY2VydBgBIAEoCRIPCgd0bHNfa2V5GAIgASgJEg8KB2NhX2Nl", "aWNhdGVSZXF1ZXN0EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIpYBCjBHZW5l",
"cnQYAyABKAkSLgoKZXhwaXJlc19hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1", "cmF0ZU1xdHRJbnRlZ3JhdGlvbkNsaWVudENlcnRpZmljYXRlUmVzcG9uc2US",
"Zi5UaW1lc3RhbXAqIgoIRW5jb2RpbmcSCAoESlNPThAAEgwKCFBST1RPQlVG", "EAoIdGxzX2NlcnQYASABKAkSDwoHdGxzX2tleRgCIAEoCRIPCgdjYV9jZXJ0",
"EAEqvwEKD0ludGVncmF0aW9uS2luZBIICgRIVFRQEAASDQoJSU5GTFVYX0RC", "GAMgASgJEi4KCmV4cGlyZXNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYu",
"EAESEAoMVEhJTkdTX0JPQVJEEAISDgoKTVlfREVWSUNFUxADEg4KCkxPUkFf", "VGltZXN0YW1wKiIKCEVuY29kaW5nEggKBEpTT04QABIMCghQUk9UT0JVRhAB",
"Q0xPVUQQBBIPCgtHQ1BfUFVCX1NVQhAFEgsKB0FXU19TTlMQBhIVChFBWlVS", "Kr8BCg9JbnRlZ3JhdGlvbktpbmQSCAoESFRUUBAAEg0KCUlORkxVWF9EQhAB",
"RV9TRVJWSUNFX0JVUxAHEhAKDFBJTE9UX1RISU5HUxAIEg8KC01RVFRfR0xP", "EhAKDFRISU5HU19CT0FSRBACEg4KCk1ZX0RFVklDRVMQAxIOCgpMT1JBX0NM",
"QkFMEAkSCQoFSUZUVFQQCio/ChFJbmZsdXhEYlByZWNpc2lvbhIGCgJOUxAA", "T1VEEAQSDwoLR0NQX1BVQl9TVUIQBRILCgdBV1NfU05TEAYSFQoRQVpVUkVf",
"EgUKAVUQARIGCgJNUxACEgUKAVMQAxIFCgFNEAQSBQoBSBAFKjEKD0luZmx1", "U0VSVklDRV9CVVMQBxIQCgxQSUxPVF9USElOR1MQCBIPCgtNUVRUX0dMT0JB",
"eERiVmVyc2lvbhIOCgpJTkZMVVhEQl8xEAASDgoKSU5GTFVYREJfMhABMrg8", "TBAJEgkKBUlGVFRUEAoqPwoRSW5mbHV4RGJQcmVjaXNpb24SBgoCTlMQABIF",
"ChJBcHBsaWNhdGlvblNlcnZpY2USZQoGQ3JlYXRlEh0uYXBpLkNyZWF0ZUFw", "CgFVEAESBgoCTVMQAhIFCgFTEAMSBQoBTRAEEgUKAUgQBSoxCg9JbmZsdXhE",
"cGxpY2F0aW9uUmVxdWVzdBoeLmFwaS5DcmVhdGVBcHBsaWNhdGlvblJlc3Bv", "YlZlcnNpb24SDgoKSU5GTFVYREJfMRAAEg4KCklORkxVWERCXzIQATK4PAoS",
"bnNlIhyC0+STAhYiES9hcGkvYXBwbGljYXRpb25zOgEqEl4KA0dldBIaLmFw", "QXBwbGljYXRpb25TZXJ2aWNlEmUKBkNyZWF0ZRIdLmFwaS5DcmVhdGVBcHBs",
"aS5HZXRBcHBsaWNhdGlvblJlcXVlc3QaGy5hcGkuR2V0QXBwbGljYXRpb25S", "aWNhdGlvblJlcXVlc3QaHi5hcGkuQ3JlYXRlQXBwbGljYXRpb25SZXNwb25z",
"ZXNwb25zZSIegtPkkwIYEhYvYXBpL2FwcGxpY2F0aW9ucy97aWR9Em4KBlVw", "ZSIcgtPkkwIWIhEvYXBpL2FwcGxpY2F0aW9uczoBKhJeCgNHZXQSGi5hcGku",
"ZGF0ZRIdLmFwaS5VcGRhdGVBcHBsaWNhdGlvblJlcXVlc3QaFi5nb29nbGUu", "R2V0QXBwbGljYXRpb25SZXF1ZXN0GhsuYXBpLkdldEFwcGxpY2F0aW9uUmVz",
"cHJvdG9idWYuRW1wdHkiLYLT5JMCJxoiL2FwaS9hcHBsaWNhdGlvbnMve2Fw", "cG9uc2UiHoLT5JMCGBIWL2FwaS9hcHBsaWNhdGlvbnMve2lkfRJuCgZVcGRh",
"cGxpY2F0aW9uLmlkfToBKhJfCgZEZWxldGUSHS5hcGkuRGVsZXRlQXBwbGlj", "dGUSHS5hcGkuVXBkYXRlQXBwbGljYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnBy",
"YXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ih6C0+STAhgq", "b3RvYnVmLkVtcHR5Ii2C0+STAicaIi9hcGkvYXBwbGljYXRpb25zL3thcHBs",
"Fi9hcGkvYXBwbGljYXRpb25zL3tpZH0SXgoETGlzdBIcLmFwaS5MaXN0QXBw", "aWNhdGlvbi5pZH06ASoSXwoGRGVsZXRlEh0uYXBpLkRlbGV0ZUFwcGxpY2F0",
"bGljYXRpb25zUmVxdWVzdBodLmFwaS5MaXN0QXBwbGljYXRpb25zUmVzcG9u", "aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIegtPkkwIYKhYv",
"c2UiGYLT5JMCExIRL2FwaS9hcHBsaWNhdGlvbnMSiAEKEExpc3RJbnRlZ3Jh", "YXBpL2FwcGxpY2F0aW9ucy97aWR9El4KBExpc3QSHC5hcGkuTGlzdEFwcGxp",
"dGlvbnMSHC5hcGkuTGlzdEludGVncmF0aW9uc1JlcXVlc3QaHS5hcGkuTGlz", "Y2F0aW9uc1JlcXVlc3QaHS5hcGkuTGlzdEFwcGxpY2F0aW9uc1Jlc3BvbnNl",
"dEludGVncmF0aW9uc1Jlc3BvbnNlIjeC0+STAjESLy9hcGkvYXBwbGljYXRp", "IhmC0+STAhMSES9hcGkvYXBwbGljYXRpb25zEogBChBMaXN0SW50ZWdyYXRp",
"b25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zEp8BChVDcmVhdGVI", "b25zEhwuYXBpLkxpc3RJbnRlZ3JhdGlvbnNSZXF1ZXN0Gh0uYXBpLkxpc3RJ",
"dHRwSW50ZWdyYXRpb24SIS5hcGkuQ3JlYXRlSHR0cEludGVncmF0aW9uUmVx", "bnRlZ3JhdGlvbnNSZXNwb25zZSI3gtPkkwIxEi8vYXBpL2FwcGxpY2F0aW9u",
"dWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJLgtPkkwJFIkAvYXBpL2Fw", "cy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucxKfAQoVQ3JlYXRlSHR0",
"cGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVn", "cEludGVncmF0aW9uEiEuYXBpLkNyZWF0ZUh0dHBJbnRlZ3JhdGlvblJlcXVl",
"cmF0aW9ucy9odHRwOgEqEpMBChJHZXRIdHRwSW50ZWdyYXRpb24SHi5hcGku", "c3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiS4LT5JMCRSJAL2FwaS9hcHBs",
"R2V0SHR0cEludGVncmF0aW9uUmVxdWVzdBofLmFwaS5HZXRIdHRwSW50ZWdy", "aWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3Jh",
"YXRpb25SZXNwb25zZSI8gtPkkwI2EjQvYXBpL2FwcGxpY2F0aW9ucy97YXBw", "dGlvbnMvaHR0cDoBKhKTAQoSR2V0SHR0cEludGVncmF0aW9uEh4uYXBpLkdl",
"bGljYXRpb25faWR9L2ludGVncmF0aW9ucy9odHRwEp8BChVVcGRhdGVIdHRw", "dEh0dHBJbnRlZ3JhdGlvblJlcXVlc3QaHy5hcGkuR2V0SHR0cEludGVncmF0",
"SW50ZWdyYXRpb24SIS5hcGkuVXBkYXRlSHR0cEludGVncmF0aW9uUmVxdWVz", "aW9uUmVzcG9uc2UiPILT5JMCNhI0L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxp",
"dBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJLgtPkkwJFGkAvYXBpL2FwcGxp", "Y2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvaHR0cBKfAQoVVXBkYXRlSHR0cElu",
"dGVncmF0aW9uEiEuYXBpLlVwZGF0ZUh0dHBJbnRlZ3JhdGlvblJlcXVlc3Qa",
"Fi5nb29nbGUucHJvdG9idWYuRW1wdHkiS4LT5JMCRRpAL2FwaS9hcHBsaWNh",
"dGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlv",
"bnMvaHR0cDoBKhKQAQoVRGVsZXRlSHR0cEludGVncmF0aW9uEiEuYXBpLkRl",
"bGV0ZUh0dHBJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYu",
"RW1wdHkiPILT5JMCNio0L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9u",
"X2lkfS9pbnRlZ3JhdGlvbnMvaHR0cBKrAQoZQ3JlYXRlSW5mbHV4RGJJbnRl",
"Z3JhdGlvbhIlLmFwaS5DcmVhdGVJbmZsdXhEYkludGVncmF0aW9uUmVxdWVz",
"dBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJPgtPkkwJJIkQvYXBpL2FwcGxp",
"Y2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0", "Y2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0",
"aW9ucy9odHRwOgEqEpABChVEZWxldGVIdHRwSW50ZWdyYXRpb24SIS5hcGku", "aW9ucy9pbmZsdXhkYjoBKhKjAQoWR2V0SW5mbHV4RGJJbnRlZ3JhdGlvbhIi",
"RGVsZXRlSHR0cEludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1", "LmFwaS5HZXRJbmZsdXhEYkludGVncmF0aW9uUmVxdWVzdBojLmFwaS5HZXRJ",
"Zi5FbXB0eSI8gtPkkwI2KjQvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRp", "bmZsdXhEYkludGVncmF0aW9uUmVzcG9uc2UiQILT5JMCOhI4L2FwaS9hcHBs",
"b25faWR9L2ludGVncmF0aW9ucy9odHRwEqsBChlDcmVhdGVJbmZsdXhEYklu", "aWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvaW5mbHV4",
"dGVncmF0aW9uEiUuYXBpLkNyZWF0ZUluZmx1eERiSW50ZWdyYXRpb25SZXF1", "ZGISqwEKGVVwZGF0ZUluZmx1eERiSW50ZWdyYXRpb24SJS5hcGkuVXBkYXRl",
"ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ik+C0+STAkkiRC9hcGkvYXBw", "SW5mbHV4RGJJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYu",
"bGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdy", "RW1wdHkiT4LT5JMCSRpEL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9u",
"YXRpb25zL2luZmx1eGRiOgEqEqMBChZHZXRJbmZsdXhEYkludGVncmF0aW9u", "LmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvaW5mbHV4ZGI6ASoSnAEK",
"EiIuYXBpLkdldEluZmx1eERiSW50ZWdyYXRpb25SZXF1ZXN0GiMuYXBpLkdl", "GURlbGV0ZUluZmx1eERiSW50ZWdyYXRpb24SJS5hcGkuRGVsZXRlSW5mbHV4",
"dEluZmx1eERiSW50ZWdyYXRpb25SZXNwb25zZSJAgtPkkwI6EjgvYXBpL2Fw", "RGJJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHki",
"cGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9pbmZs", "QILT5JMCOio4L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9p",
"dXhkYhKrAQoZVXBkYXRlSW5mbHV4RGJJbnRlZ3JhdGlvbhIlLmFwaS5VcGRh", "bnRlZ3JhdGlvbnMvaW5mbHV4ZGIStAEKHENyZWF0ZVRoaW5nc0JvYXJkSW50",
"dGVJbmZsdXhEYkludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1", "ZWdyYXRpb24SKC5hcGkuQ3JlYXRlVGhpbmdzQm9hcmRJbnRlZ3JhdGlvblJl",
"Zi5FbXB0eSJPgtPkkwJJGkQvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRp", "cXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUoLT5JMCTCJHL2FwaS9h",
"b24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9pbmZsdXhkYjoBKhKc", "cHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRl",
"AQoZRGVsZXRlSW5mbHV4RGJJbnRlZ3JhdGlvbhIlLmFwaS5EZWxldGVJbmZs", "Z3JhdGlvbnMvdGhpbmdzYm9hcmQ6ASoSrwEKGUdldFRoaW5nc0JvYXJkSW50",
"dXhEYkludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0", "ZWdyYXRpb24SJS5hcGkuR2V0VGhpbmdzQm9hcmRJbnRlZ3JhdGlvblJlcXVl",
"eSJAgtPkkwI6KjgvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9", "c3QaJi5hcGkuR2V0VGhpbmdzQm9hcmRJbnRlZ3JhdGlvblJlc3BvbnNlIkOC",
"L2ludGVncmF0aW9ucy9pbmZsdXhkYhK0AQocQ3JlYXRlVGhpbmdzQm9hcmRJ", "0+STAj0SOy9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50",
"bnRlZ3JhdGlvbhIoLmFwaS5DcmVhdGVUaGluZ3NCb2FyZEludGVncmF0aW9u", "ZWdyYXRpb25zL3RoaW5nc2JvYXJkErQBChxVcGRhdGVUaGluZ3NCb2FyZElu",
"UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJSgtPkkwJMIkcvYXBp", "dGVncmF0aW9uEiguYXBpLlVwZGF0ZVRoaW5nc0JvYXJkSW50ZWdyYXRpb25S",
"L2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2lu", "ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlKC0+STAkwaRy9hcGkv",
"dGVncmF0aW9ucy90aGluZ3Nib2FyZDoBKhKvAQoZR2V0VGhpbmdzQm9hcmRJ",
"bnRlZ3JhdGlvbhIlLmFwaS5HZXRUaGluZ3NCb2FyZEludGVncmF0aW9uUmVx",
"dWVzdBomLmFwaS5HZXRUaGluZ3NCb2FyZEludGVncmF0aW9uUmVzcG9uc2Ui",
"Q4LT5JMCPRI7L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9p",
"bnRlZ3JhdGlvbnMvdGhpbmdzYm9hcmQStAEKHFVwZGF0ZVRoaW5nc0JvYXJk",
"SW50ZWdyYXRpb24SKC5hcGkuVXBkYXRlVGhpbmdzQm9hcmRJbnRlZ3JhdGlv",
"blJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUoLT5JMCTBpHL2Fw",
"aS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9p",
"bnRlZ3JhdGlvbnMvdGhpbmdzYm9hcmQ6ASoSpQEKHERlbGV0ZVRoaW5nc0Jv",
"YXJkSW50ZWdyYXRpb24SKC5hcGkuRGVsZXRlVGhpbmdzQm9hcmRJbnRlZ3Jh",
"dGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiQ4LT5JMCPSo7",
"L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlv",
"bnMvdGhpbmdzYm9hcmQSrgEKGkNyZWF0ZU15RGV2aWNlc0ludGVncmF0aW9u",
"EiYuYXBpLkNyZWF0ZU15RGV2aWNlc0ludGVncmF0aW9uUmVxdWVzdBoWLmdv",
"b2dsZS5wcm90b2J1Zi5FbXB0eSJQgtPkkwJKIkUvYXBpL2FwcGxpY2F0aW9u",
"cy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9t",
"eWRldmljZXM6ASoSpwEKF0dldE15RGV2aWNlc0ludGVncmF0aW9uEiMuYXBp",
"LkdldE15RGV2aWNlc0ludGVncmF0aW9uUmVxdWVzdBokLmFwaS5HZXRNeURl",
"dmljZXNJbnRlZ3JhdGlvblJlc3BvbnNlIkGC0+STAjsSOS9hcGkvYXBwbGlj",
"YXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL215ZGV2aWNl",
"cxKuAQoaVXBkYXRlTXlEZXZpY2VzSW50ZWdyYXRpb24SJi5hcGkuVXBkYXRl",
"TXlEZXZpY2VzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVm",
"LkVtcHR5IlCC0+STAkoaRS9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlv",
"bi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL215ZGV2aWNlczoBKhKf",
"AQoaRGVsZXRlTXlEZXZpY2VzSW50ZWdyYXRpb24SJi5hcGkuRGVsZXRlTXlE",
"ZXZpY2VzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVt",
"cHR5IkGC0+STAjsqOS9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9p",
"ZH0vaW50ZWdyYXRpb25zL215ZGV2aWNlcxKuAQoaQ3JlYXRlTG9yYUNsb3Vk",
"SW50ZWdyYXRpb24SJi5hcGkuQ3JlYXRlTG9yYUNsb3VkSW50ZWdyYXRpb25S",
"ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlCC0+STAkoiRS9hcGkv",
"YXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50", "YXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50",
"ZWdyYXRpb25zL2xvcmFjbG91ZDoBKhKnAQoXR2V0TG9yYUNsb3VkSW50ZWdy", "ZWdyYXRpb25zL3RoaW5nc2JvYXJkOgEqEqUBChxEZWxldGVUaGluZ3NCb2Fy",
"YXRpb24SIy5hcGkuR2V0TG9yYUNsb3VkSW50ZWdyYXRpb25SZXF1ZXN0GiQu", "ZEludGVncmF0aW9uEiguYXBpLkRlbGV0ZVRoaW5nc0JvYXJkSW50ZWdyYXRp",
"YXBpLkdldExvcmFDbG91ZEludGVncmF0aW9uUmVzcG9uc2UiQYLT5JMCOxI5", "b25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkOC0+STAj0qOy9h",
"L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlv", "cGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25z",
"bnMvbG9yYWNsb3VkEq4BChpVcGRhdGVMb3JhQ2xvdWRJbnRlZ3JhdGlvbhIm", "L3RoaW5nc2JvYXJkEq4BChpDcmVhdGVNeURldmljZXNJbnRlZ3JhdGlvbhIm",
"LmFwaS5VcGRhdGVMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29n", "LmFwaS5DcmVhdGVNeURldmljZXNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29n",
"bGUucHJvdG9idWYuRW1wdHkiUILT5JMCShpFL2FwaS9hcHBsaWNhdGlvbnMv", "bGUucHJvdG9idWYuRW1wdHkiUILT5JMCSiJFL2FwaS9hcHBsaWNhdGlvbnMv",
"e2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbG9y", "e2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbXlk",
"YWNsb3VkOgEqEp8BChpEZWxldGVMb3JhQ2xvdWRJbnRlZ3JhdGlvbhImLmFw", "ZXZpY2VzOgEqEqcBChdHZXRNeURldmljZXNJbnRlZ3JhdGlvbhIjLmFwaS5H",
"aS5EZWxldGVMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUu", "ZXRNeURldmljZXNJbnRlZ3JhdGlvblJlcXVlc3QaJC5hcGkuR2V0TXlEZXZp",
"cHJvdG9idWYuRW1wdHkiQYLT5JMCOyo5L2FwaS9hcHBsaWNhdGlvbnMve2Fw", "Y2VzSW50ZWdyYXRpb25SZXNwb25zZSJBgtPkkwI7EjkvYXBpL2FwcGxpY2F0",
"cGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbG9yYWNsb3VkErABChpDcmVh", "aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9teWRldmljZXMS",
"dGVHY3BQdWJTdWJJbnRlZ3JhdGlvbhImLmFwaS5DcmVhdGVHY3BQdWJTdWJJ", "rgEKGlVwZGF0ZU15RGV2aWNlc0ludGVncmF0aW9uEiYuYXBpLlVwZGF0ZU15",
"bnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUoLT", "RGV2aWNlc0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5F",
"5JMCTCJHL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0", "bXB0eSJQgtPkkwJKGkUvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24u",
"aW9uX2lkfS9pbnRlZ3JhdGlvbnMvZ2NwLXB1Yi1zdWI6ASoSqQEKF0dldEdj", "YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9teWRldmljZXM6ASoSnwEK",
"cFB1YlN1YkludGVncmF0aW9uEiMuYXBpLkdldEdjcFB1YlN1YkludGVncmF0", "GkRlbGV0ZU15RGV2aWNlc0ludGVncmF0aW9uEiYuYXBpLkRlbGV0ZU15RGV2",
"aW9uUmVxdWVzdBokLmFwaS5HZXRHY3BQdWJTdWJJbnRlZ3JhdGlvblJlc3Bv", "aWNlc0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0",
"bnNlIkOC0+STAj0SOy9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9p", "eSJBgtPkkwI7KjkvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9",
"ZH0vaW50ZWdyYXRpb25zL2djcC1wdWItc3ViErABChpVcGRhdGVHY3BQdWJT", "L2ludGVncmF0aW9ucy9teWRldmljZXMSrgEKGkNyZWF0ZUxvcmFDbG91ZElu",
"dWJJbnRlZ3JhdGlvbhImLmFwaS5VcGRhdGVHY3BQdWJTdWJJbnRlZ3JhdGlv", "dGVncmF0aW9uEiYuYXBpLkNyZWF0ZUxvcmFDbG91ZEludGVncmF0aW9uUmVx",
"blJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUoLT5JMCTBpHL2Fw", "dWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJQgtPkkwJKIkUvYXBpL2Fw",
"aS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9p", "cGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVn",
"bnRlZ3JhdGlvbnMvZ2NwLXB1Yi1zdWI6ASoSoQEKGkRlbGV0ZUdjcFB1YlN1", "cmF0aW9ucy9sb3JhY2xvdWQ6ASoSpwEKF0dldExvcmFDbG91ZEludGVncmF0",
"YkludGVncmF0aW9uEiYuYXBpLkRlbGV0ZUdjcFB1YlN1YkludGVncmF0aW9u", "aW9uEiMuYXBpLkdldExvcmFDbG91ZEludGVncmF0aW9uUmVxdWVzdBokLmFw",
"UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJDgtPkkwI9KjsvYXBp", "aS5HZXRMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlc3BvbnNlIkGC0+STAjsSOS9h",
"L2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9n", "cGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25z",
"Y3AtcHViLXN1YhKmAQoXQ3JlYXRlQXdzU25zSW50ZWdyYXRpb24SIy5hcGku", "L2xvcmFjbG91ZBKuAQoaVXBkYXRlTG9yYUNsb3VkSW50ZWdyYXRpb24SJi5h",
"Q3JlYXRlQXdzU25zSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3Rv", "cGkuVXBkYXRlTG9yYUNsb3VkSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xl",
"YnVmLkVtcHR5Ik6C0+STAkgiQy9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3Jh", "LnByb3RvYnVmLkVtcHR5IlCC0+STAkoaRS9hcGkvYXBwbGljYXRpb25zL3tp",
"dGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2F3cy1zbnM6ASoS", "bnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2xvcmFj",
"nAEKFEdldEF3c1Nuc0ludGVncmF0aW9uEiAuYXBpLkdldEF3c1Nuc0ludGVn", "bG91ZDoBKhKfAQoaRGVsZXRlTG9yYUNsb3VkSW50ZWdyYXRpb24SJi5hcGku",
"cmF0aW9uUmVxdWVzdBohLmFwaS5HZXRBd3NTbnNJbnRlZ3JhdGlvblJlc3Bv", "RGVsZXRlTG9yYUNsb3VkSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnBy",
"bnNlIj+C0+STAjkSNy9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9p", "b3RvYnVmLkVtcHR5IkGC0+STAjsqOS9hcGkvYXBwbGljYXRpb25zL3thcHBs",
"ZH0vaW50ZWdyYXRpb25zL2F3cy1zbnMSpgEKF1VwZGF0ZUF3c1Nuc0ludGVn", "aWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2xvcmFjbG91ZBKwAQoaQ3JlYXRl",
"cmF0aW9uEiMuYXBpLlVwZGF0ZUF3c1Nuc0ludGVncmF0aW9uUmVxdWVzdBoW", "R2NwUHViU3ViSW50ZWdyYXRpb24SJi5hcGkuQ3JlYXRlR2NwUHViU3ViSW50",
"Lmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJOgtPkkwJIGkMvYXBpL2FwcGxpY2F0", "ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlKC0+ST",
"aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9u", "AkwiRy9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlv",
"cy9hd3Mtc25zOgEqEpcBChdEZWxldGVBd3NTbnNJbnRlZ3JhdGlvbhIjLmFw", "bl9pZH0vaW50ZWdyYXRpb25zL2djcC1wdWItc3ViOgEqEqkBChdHZXRHY3BQ",
"aS5EZWxldGVBd3NTbnNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJv", "dWJTdWJJbnRlZ3JhdGlvbhIjLmFwaS5HZXRHY3BQdWJTdWJJbnRlZ3JhdGlv",
"dG9idWYuRW1wdHkiP4LT5JMCOSo3L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxp", "blJlcXVlc3QaJC5hcGkuR2V0R2NwUHViU3ViSW50ZWdyYXRpb25SZXNwb25z",
"Y2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXdzLXNucxLCAQogQ3JlYXRlQXp1", "ZSJDgtPkkwI9EjsvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9",
"cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb24SLC5hcGkuQ3JlYXRlQXp1cmVTZXJ2", "L2ludGVncmF0aW9ucy9nY3AtcHViLXN1YhKwAQoaVXBkYXRlR2NwUHViU3Vi",
"aWNlQnVzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVt", "SW50ZWdyYXRpb24SJi5hcGkuVXBkYXRlR2NwUHViU3ViSW50ZWdyYXRpb25S",
"cHR5IliC0+STAlIiTS9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5h", "ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlKC0+STAkwaRy9hcGkv",
"cHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2F6dXJlLXNlcnZpY2UtYnVz", "YXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50",
"OgEqEsEBCh1HZXRBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvbhIpLmFwaS5H", "ZWdyYXRpb25zL2djcC1wdWItc3ViOgEqEqEBChpEZWxldGVHY3BQdWJTdWJJ",
"ZXRBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlcXVlc3QaKi5hcGkuR2V0", "bnRlZ3JhdGlvbhImLmFwaS5EZWxldGVHY3BQdWJTdWJJbnRlZ3JhdGlvblJl",
"QXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb25SZXNwb25zZSJJgtPkkwJDEkEv", "cXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiQ4LT5JMCPSo7L2FwaS9h",
"YXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9u", "cHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvZ2Nw",
"cy9henVyZS1zZXJ2aWNlLWJ1cxLCAQogVXBkYXRlQXp1cmVTZXJ2aWNlQnVz", "LXB1Yi1zdWISpgEKF0NyZWF0ZUF3c1Nuc0ludGVncmF0aW9uEiMuYXBpLkNy",
"SW50ZWdyYXRpb24SLC5hcGkuVXBkYXRlQXp1cmVTZXJ2aWNlQnVzSW50ZWdy", "ZWF0ZUF3c1Nuc0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1",
"YXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IliC0+STAlIa", "Zi5FbXB0eSJOgtPkkwJIIkMvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRp",
"TS9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9p", "b24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9hd3Mtc25zOgEqEpwB",
"ZH0vaW50ZWdyYXRpb25zL2F6dXJlLXNlcnZpY2UtYnVzOgEqErMBCiBEZWxl", "ChRHZXRBd3NTbnNJbnRlZ3JhdGlvbhIgLmFwaS5HZXRBd3NTbnNJbnRlZ3Jh",
"dGVBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvbhIsLmFwaS5EZWxldGVBenVy", "dGlvblJlcXVlc3QaIS5hcGkuR2V0QXdzU25zSW50ZWdyYXRpb25SZXNwb25z",
"ZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9i", "ZSI/gtPkkwI5EjcvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9",
"dWYuRW1wdHkiSYLT5JMCQypBL2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0", "L2ludGVncmF0aW9ucy9hd3Mtc25zEqYBChdVcGRhdGVBd3NTbnNJbnRlZ3Jh",
"aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXp1cmUtc2VydmljZS1idXMStQEKHENy", "dGlvbhIjLmFwaS5VcGRhdGVBd3NTbnNJbnRlZ3JhdGlvblJlcXVlc3QaFi5n",
"ZWF0ZVBpbG90VGhpbmdzSW50ZWdyYXRpb24SKC5hcGkuQ3JlYXRlUGlsb3RU", "b29nbGUucHJvdG9idWYuRW1wdHkiToLT5JMCSBpDL2FwaS9hcHBsaWNhdGlv",
"aGluZ3NJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1w", "bnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMv",
"dHkiU4LT5JMCTSJIL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFw", "YXdzLXNuczoBKhKXAQoXRGVsZXRlQXdzU25zSW50ZWdyYXRpb24SIy5hcGku",
"cGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvcGlsb3QtdGhpbmdzOgEqErAB", "RGVsZXRlQXdzU25zSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3Rv",
"ChlHZXRQaWxvdFRoaW5nc0ludGVncmF0aW9uEiUuYXBpLkdldFBpbG90VGhp", "YnVmLkVtcHR5Ij+C0+STAjkqNy9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNh",
"bmdzSW50ZWdyYXRpb25SZXF1ZXN0GiYuYXBpLkdldFBpbG90VGhpbmdzSW50", "dGlvbl9pZH0vaW50ZWdyYXRpb25zL2F3cy1zbnMSwgEKIENyZWF0ZUF6dXJl",
"ZWdyYXRpb25SZXNwb25zZSJEgtPkkwI+EjwvYXBpL2FwcGxpY2F0aW9ucy97", "U2VydmljZUJ1c0ludGVncmF0aW9uEiwuYXBpLkNyZWF0ZUF6dXJlU2Vydmlj",
"YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9waWxvdC10aGluZ3MStQEK", "ZUJ1c0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0",
"HFVwZGF0ZVBpbG90VGhpbmdzSW50ZWdyYXRpb24SKC5hcGkuVXBkYXRlUGls", "eSJYgtPkkwJSIk0vYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBw",
"b3RUaGluZ3NJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYu", "bGljYXRpb25faWR9L2ludGVncmF0aW9ucy9henVyZS1zZXJ2aWNlLWJ1czoB",
"RW1wdHkiU4LT5JMCTRpIL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9u", "KhLBAQodR2V0QXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb24SKS5hcGkuR2V0",
"LmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvcGlsb3QtdGhpbmdzOgEq", "QXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb25SZXF1ZXN0GiouYXBpLkdldEF6",
"EqYBChxEZWxldGVQaWxvdFRoaW5nc0ludGVncmF0aW9uEiguYXBpLkRlbGV0", "dXJlU2VydmljZUJ1c0ludGVncmF0aW9uUmVzcG9uc2UiSYLT5JMCQxJBL2Fw",
"ZVBpbG90VGhpbmdzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3Rv", "aS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMv",
"YnVmLkVtcHR5IkSC0+STAj4qPC9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNh", "YXp1cmUtc2VydmljZS1idXMSwgEKIFVwZGF0ZUF6dXJlU2VydmljZUJ1c0lu",
"dGlvbl9pZH0vaW50ZWdyYXRpb25zL3BpbG90LXRoaW5ncxKiAQoWQ3JlYXRl", "dGVncmF0aW9uEiwuYXBpLlVwZGF0ZUF6dXJlU2VydmljZUJ1c0ludGVncmF0",
"SWZ0dHRJbnRlZ3JhdGlvbhIiLmFwaS5DcmVhdGVJZnR0dEludGVncmF0aW9u", "aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJYgtPkkwJSGk0v",
"UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJMgtPkkwJGIkEvYXBp", "YXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9",
"L2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2lu", "L2ludGVncmF0aW9ucy9henVyZS1zZXJ2aWNlLWJ1czoBKhKzAQogRGVsZXRl",
"dGVncmF0aW9ucy9pZnR0dDoBKhKXAQoTR2V0SWZ0dHRJbnRlZ3JhdGlvbhIf", "QXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb24SLC5hcGkuRGVsZXRlQXp1cmVT",
"LmFwaS5HZXRJZnR0dEludGVncmF0aW9uUmVxdWVzdBogLmFwaS5HZXRJZnR0", "ZXJ2aWNlQnVzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVm",
"dEludGVncmF0aW9uUmVzcG9uc2UiPYLT5JMCNxI1L2FwaS9hcHBsaWNhdGlv", "LkVtcHR5IkmC0+STAkMqQS9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlv",
"bnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvaWZ0dHQSogEKFlVw", "bl9pZH0vaW50ZWdyYXRpb25zL2F6dXJlLXNlcnZpY2UtYnVzErUBChxDcmVh",
"ZGF0ZUlmdHR0SW50ZWdyYXRpb24SIi5hcGkuVXBkYXRlSWZ0dHRJbnRlZ3Jh", "dGVQaWxvdFRoaW5nc0ludGVncmF0aW9uEiguYXBpLkNyZWF0ZVBpbG90VGhp",
"dGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiTILT5JMCRhpB", "bmdzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5",
"L2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lk", "IlOC0+STAk0iSC9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBs",
"fS9pbnRlZ3JhdGlvbnMvaWZ0dHQ6ASoSkwEKFkRlbGV0ZUlmdHR0SW50ZWdy", "aWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL3BpbG90LXRoaW5nczoBKhKwAQoZ",
"YXRpb24SIi5hcGkuRGVsZXRlSWZ0dHRJbnRlZ3JhdGlvblJlcXVlc3QaFi5n", "R2V0UGlsb3RUaGluZ3NJbnRlZ3JhdGlvbhIlLmFwaS5HZXRQaWxvdFRoaW5n",
"b29nbGUucHJvdG9idWYuRW1wdHkiPYLT5JMCNyo1L2FwaS9hcHBsaWNhdGlv", "c0ludGVncmF0aW9uUmVxdWVzdBomLmFwaS5HZXRQaWxvdFRoaW5nc0ludGVn",
"bnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvaWZ0dHQS4QEKKEdl", "cmF0aW9uUmVzcG9uc2UiRILT5JMCPhI8L2FwaS9hcHBsaWNhdGlvbnMve2Fw",
"bmVyYXRlTXF0dEludGVncmF0aW9uQ2xpZW50Q2VydGlmaWNhdGUSNC5hcGku", "cGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvcGlsb3QtdGhpbmdzErUBChxV",
"R2VuZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0aWZpY2F0ZVJlcXVl", "cGRhdGVQaWxvdFRoaW5nc0ludGVncmF0aW9uEiguYXBpLlVwZGF0ZVBpbG90",
"c3QaNS5hcGkuR2VuZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0aWZp", "VGhpbmdzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVt",
"Y2F0ZVJlc3BvbnNlIkiC0+STAkIiQC9hcGkvYXBwbGljYXRpb25zL3thcHBs", "cHR5IlOC0+STAk0aSC9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5h",
"aWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL21xdHQvY2VydGlmaWNhdGVCaAoR", "cHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL3BpbG90LXRoaW5nczoBKhKm",
"aW8uY2hpcnBzdGFjay5hcGlCEEFwcGxpY2F0aW9uUHJvdG9QAVouZ2l0aHVi", "AQocRGVsZXRlUGlsb3RUaGluZ3NJbnRlZ3JhdGlvbhIoLmFwaS5EZWxldGVQ",
"LmNvbS9jaGlycHN0YWNrL2NoaXJwc3RhY2svYXBpL2dvL3Y0L2FwaaoCDkNo", "aWxvdFRoaW5nc0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1",
"aXJwc3RhY2suQXBpYgZwcm90bzM=")); "Zi5FbXB0eSJEgtPkkwI+KjwvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRp",
"b25faWR9L2ludGVncmF0aW9ucy9waWxvdC10aGluZ3MSogEKFkNyZWF0ZUlm",
"dHR0SW50ZWdyYXRpb24SIi5hcGkuQ3JlYXRlSWZ0dHRJbnRlZ3JhdGlvblJl",
"cXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiTILT5JMCRiJBL2FwaS9h",
"cHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRl",
"Z3JhdGlvbnMvaWZ0dHQ6ASoSlwEKE0dldElmdHR0SW50ZWdyYXRpb24SHy5h",
"cGkuR2V0SWZ0dHRJbnRlZ3JhdGlvblJlcXVlc3QaIC5hcGkuR2V0SWZ0dHRJ",
"bnRlZ3JhdGlvblJlc3BvbnNlIj2C0+STAjcSNS9hcGkvYXBwbGljYXRpb25z",
"L3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2lmdHR0EqIBChZVcGRh",
"dGVJZnR0dEludGVncmF0aW9uEiIuYXBpLlVwZGF0ZUlmdHR0SW50ZWdyYXRp",
"b25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkyC0+STAkYaQS9h",
"cGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0v",
"aW50ZWdyYXRpb25zL2lmdHR0OgEqEpMBChZEZWxldGVJZnR0dEludGVncmF0",
"aW9uEiIuYXBpLkRlbGV0ZUlmdHR0SW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29v",
"Z2xlLnByb3RvYnVmLkVtcHR5Ij2C0+STAjcqNS9hcGkvYXBwbGljYXRpb25z",
"L3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2lmdHR0EuEBCihHZW5l",
"cmF0ZU1xdHRJbnRlZ3JhdGlvbkNsaWVudENlcnRpZmljYXRlEjQuYXBpLkdl",
"bmVyYXRlTXF0dEludGVncmF0aW9uQ2xpZW50Q2VydGlmaWNhdGVSZXF1ZXN0",
"GjUuYXBpLkdlbmVyYXRlTXF0dEludGVncmF0aW9uQ2xpZW50Q2VydGlmaWNh",
"dGVSZXNwb25zZSJIgtPkkwJCIkAvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGlj",
"YXRpb25faWR9L2ludGVncmF0aW9ucy9tcXR0L2NlcnRpZmljYXRlQmgKEWlv",
"LmNoaXJwc3RhY2suYXBpQhBBcHBsaWNhdGlvblByb3RvUAFaLmdpdGh1Yi5j",
"b20vY2hpcnBzdGFjay9jaGlycHN0YWNrL2FwaS9nby92NC9hcGmqAg5DaGly",
"cHN0YWNrLkFwaWIGcHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Api.AnnotationsReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, }, new pbr::FileDescriptor[] { global::Google.Api.AnnotationsReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Chirpstack.Api.Encoding), typeof(global::Chirpstack.Api.IntegrationKind), typeof(global::Chirpstack.Api.InfluxDbPrecision), typeof(global::Chirpstack.Api.InfluxDbVersion), }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Chirpstack.Api.Encoding), typeof(global::Chirpstack.Api.IntegrationKind), typeof(global::Chirpstack.Api.InfluxDbPrecision), typeof(global::Chirpstack.Api.InfluxDbVersion), }, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.Application), global::Chirpstack.Api.Application.Parser, new[]{ "Id", "Name", "Description", "TenantId" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.Application), global::Chirpstack.Api.Application.Parser, new[]{ "Id", "Name", "Description", "TenantId", "Tags" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.ApplicationListItem), global::Chirpstack.Api.ApplicationListItem.Parser, new[]{ "Id", "CreatedAt", "UpdatedAt", "Name", "Description" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.ApplicationListItem), global::Chirpstack.Api.ApplicationListItem.Parser, new[]{ "Id", "CreatedAt", "UpdatedAt", "Name", "Description" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateApplicationRequest), global::Chirpstack.Api.CreateApplicationRequest.Parser, new[]{ "Application" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateApplicationRequest), global::Chirpstack.Api.CreateApplicationRequest.Parser, new[]{ "Application" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateApplicationResponse), global::Chirpstack.Api.CreateApplicationResponse.Parser, new[]{ "Id" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateApplicationResponse), global::Chirpstack.Api.CreateApplicationResponse.Parser, new[]{ "Id" }, null, null, null, null),
@ -521,6 +523,7 @@ namespace Chirpstack.Api {
name_ = other.name_; name_ = other.name_;
description_ = other.description_; description_ = other.description_;
tenantId_ = other.tenantId_; tenantId_ = other.tenantId_;
tags_ = other.tags_.Clone();
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
} }
@ -591,6 +594,23 @@ namespace Chirpstack.Api {
} }
} }
/// <summary>Field number for the "tags" field.</summary>
public const int TagsFieldNumber = 5;
private static readonly pbc::MapField<string, string>.Codec _map_tags_codec
= new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForString(18, ""), 42);
private readonly pbc::MapField<string, string> tags_ = new pbc::MapField<string, string>();
/// <summary>
/// Tags (user defined).
/// These tags can be used to add additional information to the application.
/// These tags are exposed in all the integration events of devices under
/// this application.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public pbc::MapField<string, string> Tags {
get { return tags_; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) { public override bool Equals(object other) {
@ -610,6 +630,7 @@ namespace Chirpstack.Api {
if (Name != other.Name) return false; if (Name != other.Name) return false;
if (Description != other.Description) return false; if (Description != other.Description) return false;
if (TenantId != other.TenantId) return false; if (TenantId != other.TenantId) return false;
if (!Tags.Equals(other.Tags)) return false;
return Equals(_unknownFields, other._unknownFields); return Equals(_unknownFields, other._unknownFields);
} }
@ -621,6 +642,7 @@ namespace Chirpstack.Api {
if (Name.Length != 0) hash ^= Name.GetHashCode(); if (Name.Length != 0) hash ^= Name.GetHashCode();
if (Description.Length != 0) hash ^= Description.GetHashCode(); if (Description.Length != 0) hash ^= Description.GetHashCode();
if (TenantId.Length != 0) hash ^= TenantId.GetHashCode(); if (TenantId.Length != 0) hash ^= TenantId.GetHashCode();
hash ^= Tags.GetHashCode();
if (_unknownFields != null) { if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode(); hash ^= _unknownFields.GetHashCode();
} }
@ -655,6 +677,7 @@ namespace Chirpstack.Api {
output.WriteRawTag(34); output.WriteRawTag(34);
output.WriteString(TenantId); output.WriteString(TenantId);
} }
tags_.WriteTo(output, _map_tags_codec);
if (_unknownFields != null) { if (_unknownFields != null) {
_unknownFields.WriteTo(output); _unknownFields.WriteTo(output);
} }
@ -681,6 +704,7 @@ namespace Chirpstack.Api {
output.WriteRawTag(34); output.WriteRawTag(34);
output.WriteString(TenantId); output.WriteString(TenantId);
} }
tags_.WriteTo(ref output, _map_tags_codec);
if (_unknownFields != null) { if (_unknownFields != null) {
_unknownFields.WriteTo(ref output); _unknownFields.WriteTo(ref output);
} }
@ -703,6 +727,7 @@ namespace Chirpstack.Api {
if (TenantId.Length != 0) { if (TenantId.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(TenantId); size += 1 + pb::CodedOutputStream.ComputeStringSize(TenantId);
} }
size += tags_.CalculateSize(_map_tags_codec);
if (_unknownFields != null) { if (_unknownFields != null) {
size += _unknownFields.CalculateSize(); size += _unknownFields.CalculateSize();
} }
@ -727,6 +752,7 @@ namespace Chirpstack.Api {
if (other.TenantId.Length != 0) { if (other.TenantId.Length != 0) {
TenantId = other.TenantId; TenantId = other.TenantId;
} }
tags_.Add(other.tags_);
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
} }
@ -758,6 +784,10 @@ namespace Chirpstack.Api {
TenantId = input.ReadString(); TenantId = input.ReadString();
break; break;
} }
case 42: {
tags_.AddEntriesFrom(input, _map_tags_codec);
break;
}
} }
} }
#endif #endif
@ -789,6 +819,10 @@ namespace Chirpstack.Api {
TenantId = input.ReadString(); TenantId = input.ReadString();
break; break;
} }
case 42: {
tags_.AddEntriesFrom(ref input, _map_tags_codec);
break;
}
} }
} }
} }

View File

@ -399,8 +399,8 @@ namespace Chirpstack.Api {
private readonly pbc::MapField<string, string> tags_ = new pbc::MapField<string, string>(); private readonly pbc::MapField<string, string> tags_ = new pbc::MapField<string, string>();
/// <summary> /// <summary>
/// Tags (user defined). /// Tags (user defined).
/// These tags are exposed in the event payloads or to integration. Tags are /// These tags can be used to add additional information to the device.
/// intended for aggregation and filtering. /// These tags are exposed in all the integration events.
/// </summary> /// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]

View File

@ -167,7 +167,8 @@ namespace Chirpstack.Api {
/// </summary> /// </summary>
[pbr::OriginalName("UNKNOWN")] Unknown = 0, [pbr::OriginalName("UNKNOWN")] Unknown = 0,
/// <summary> /// <summary>
/// Incrementing counters that never decrease (these are not reset on each reading). /// Incrementing counters that never decrease (these are not reset on each
/// reading).
/// </summary> /// </summary>
[pbr::OriginalName("COUNTER")] Counter = 1, [pbr::OriginalName("COUNTER")] Counter = 1,
/// <summary> /// <summary>
@ -543,8 +544,8 @@ namespace Chirpstack.Api {
private uint deviceStatusReqInterval_; private uint deviceStatusReqInterval_;
/// <summary> /// <summary>
/// Device-status request interval (times / day). /// Device-status request interval (times / day).
/// This defines the times per day that ChirpStack will request the device-status /// This defines the times per day that ChirpStack will request the
/// from the device. /// device-status from the device.
/// </summary> /// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
@ -605,7 +606,8 @@ namespace Chirpstack.Api {
private uint classBTimeout_; private uint classBTimeout_;
/// <summary> /// <summary>
/// Class-B timeout (seconds). /// Class-B timeout (seconds).
/// This is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested). /// This is the maximum time ChirpStack will wait to receive an acknowledgement
/// from the device (if requested).
/// </summary> /// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
@ -669,7 +671,8 @@ namespace Chirpstack.Api {
private uint classCTimeout_; private uint classCTimeout_;
/// <summary> /// <summary>
/// Class-C timeout (seconds). /// Class-C timeout (seconds).
/// This is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested). /// This is the maximum time ChirpStack will wait to receive an acknowledgement
/// from the device (if requested).
/// </summary> /// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
@ -746,7 +749,10 @@ namespace Chirpstack.Api {
= new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForString(18, ""), 202); = new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForString(18, ""), 202);
private readonly pbc::MapField<string, string> tags_ = new pbc::MapField<string, string>(); private readonly pbc::MapField<string, string> tags_ = new pbc::MapField<string, string>();
/// <summary> /// <summary>
/// User defined tags. /// Tags (user defined).
/// These tags can be used to add additional information the the
/// device-profile. These tags are exposed in all the integration events of
/// devices using this device-profile.
/// </summary> /// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]

View File

@ -9,7 +9,8 @@ using grpc = global::Grpc.Core;
namespace Chirpstack.Api { namespace Chirpstack.Api {
/// <summary> /// <summary>
/// DeviceProfileService is the service providing API methods for managing device-profiles. /// DeviceProfileService is the service providing API methods for managing
/// device-profiles.
/// </summary> /// </summary>
public static partial class DeviceProfileService public static partial class DeviceProfileService
{ {

View File

@ -26,80 +26,82 @@ namespace Chirpstack.Api {
string.Concat( string.Concat(
"ChBhcGkvdGVuYW50LnByb3RvEgNhcGkaHGdvb2dsZS9hcGkvYW5ub3RhdGlv", "ChBhcGkvdGVuYW50LnByb3RvEgNhcGkaHGdvb2dsZS9hcGkvYW5ub3RhdGlv",
"bnMucHJvdG8aH2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucHJvdG8aG2dv", "bnMucHJvdG8aH2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucHJvdG8aG2dv",
"b2dsZS9wcm90b2J1Zi9lbXB0eS5wcm90byLDAQoGVGVuYW50EgoKAmlkGAEg", "b2dsZS9wcm90b2J1Zi9lbXB0eS5wcm90byKVAgoGVGVuYW50EgoKAmlkGAEg",
"ASgJEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSGQoRY2Fu", "ASgJEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSGQoRY2Fu",
"X2hhdmVfZ2F0ZXdheXMYBCABKAgSGQoRbWF4X2dhdGV3YXlfY291bnQYBSAB", "X2hhdmVfZ2F0ZXdheXMYBCABKAgSGQoRbWF4X2dhdGV3YXlfY291bnQYBSAB",
"KA0SGAoQbWF4X2RldmljZV9jb3VudBgGIAEoDRIbChNwcml2YXRlX2dhdGV3", "KA0SGAoQbWF4X2RldmljZV9jb3VudBgGIAEoDRIbChNwcml2YXRlX2dhdGV3",
"YXlzX3VwGAcgASgIEh0KFXByaXZhdGVfZ2F0ZXdheXNfZG93bhgIIAEoCCKW", "YXlzX3VwGAcgASgIEh0KFXByaXZhdGVfZ2F0ZXdheXNfZG93bhgIIAEoCBIj",
"AgoOVGVuYW50TGlzdEl0ZW0SCgoCaWQYASABKAkSLgoKY3JlYXRlZF9hdBgC", "CgR0YWdzGAkgAygLMhUuYXBpLlRlbmFudC5UYWdzRW50cnkaKwoJVGFnc0Vu",
"IAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9h", "dHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEilgIKDlRlbmFu",
"dBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDAoEbmFtZRgE", "dExpc3RJdGVtEgoKAmlkGAEgASgJEi4KCmNyZWF0ZWRfYXQYAiABKAsyGi5n",
"IAEoCRIZChFjYW5faGF2ZV9nYXRld2F5cxgFIAEoCBIbChNwcml2YXRlX2dh", "b29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYAyABKAsy",
"dGV3YXlzX3VwGAYgASgIEh0KFXByaXZhdGVfZ2F0ZXdheXNfZG93bhgJIAEo", "Gi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEgwKBG5hbWUYBCABKAkSGQoR",
"CBIZChFtYXhfZ2F0ZXdheV9jb3VudBgHIAEoDRIYChBtYXhfZGV2aWNlX2Nv", "Y2FuX2hhdmVfZ2F0ZXdheXMYBSABKAgSGwoTcHJpdmF0ZV9nYXRld2F5c191",
"dW50GAggASgNIjIKE0NyZWF0ZVRlbmFudFJlcXVlc3QSGwoGdGVuYW50GAEg", "cBgGIAEoCBIdChVwcml2YXRlX2dhdGV3YXlzX2Rvd24YCSABKAgSGQoRbWF4",
"ASgLMgsuYXBpLlRlbmFudCIiChRDcmVhdGVUZW5hbnRSZXNwb25zZRIKCgJp", "X2dhdGV3YXlfY291bnQYByABKA0SGAoQbWF4X2RldmljZV9jb3VudBgIIAEo",
"ZBgBIAEoCSIeChBHZXRUZW5hbnRSZXF1ZXN0EgoKAmlkGAEgASgJIpABChFH", "DSIyChNDcmVhdGVUZW5hbnRSZXF1ZXN0EhsKBnRlbmFudBgBIAEoCzILLmFw",
"ZXRUZW5hbnRSZXNwb25zZRIbCgZ0ZW5hbnQYASABKAsyCy5hcGkuVGVuYW50", "aS5UZW5hbnQiIgoUQ3JlYXRlVGVuYW50UmVzcG9uc2USCgoCaWQYASABKAki",
"Ei4KCmNyZWF0ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0", "HgoQR2V0VGVuYW50UmVxdWVzdBIKCgJpZBgBIAEoCSKQAQoRR2V0VGVuYW50",
"YW1wEi4KCnVwZGF0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGlt", "UmVzcG9uc2USGwoGdGVuYW50GAEgASgLMgsuYXBpLlRlbmFudBIuCgpjcmVh",
"ZXN0YW1wIjIKE1VwZGF0ZVRlbmFudFJlcXVlc3QSGwoGdGVuYW50GAEgASgL", "dGVkX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1",
"MgsuYXBpLlRlbmFudCIhChNEZWxldGVUZW5hbnRSZXF1ZXN0EgoKAmlkGAEg", "cGRhdGVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIy",
"ASgJIlQKEkxpc3RUZW5hbnRzUmVxdWVzdBINCgVsaW1pdBgBIAEoDRIOCgZv", "ChNVcGRhdGVUZW5hbnRSZXF1ZXN0EhsKBnRlbmFudBgBIAEoCzILLmFwaS5U",
"ZmZzZXQYAiABKA0SDgoGc2VhcmNoGAMgASgJEg8KB3VzZXJfaWQYBCABKAki", "ZW5hbnQiIQoTRGVsZXRlVGVuYW50UmVxdWVzdBIKCgJpZBgBIAEoCSJUChJM",
"TwoTTGlzdFRlbmFudHNSZXNwb25zZRITCgt0b3RhbF9jb3VudBgBIAEoDRIj", "aXN0VGVuYW50c1JlcXVlc3QSDQoFbGltaXQYASABKA0SDgoGb2Zmc2V0GAIg",
"CgZyZXN1bHQYAiADKAsyEy5hcGkuVGVuYW50TGlzdEl0ZW0ihAEKClRlbmFu", "ASgNEg4KBnNlYXJjaBgDIAEoCRIPCgd1c2VyX2lkGAQgASgJIk8KE0xpc3RU",
"dFVzZXISEQoJdGVuYW50X2lkGAEgASgJEg8KB3VzZXJfaWQYAiABKAkSEAoI", "ZW5hbnRzUmVzcG9uc2USEwoLdG90YWxfY291bnQYASABKA0SIwoGcmVzdWx0",
"aXNfYWRtaW4YAyABKAgSFwoPaXNfZGV2aWNlX2FkbWluGAQgASgIEhgKEGlz", "GAIgAygLMhMuYXBpLlRlbmFudExpc3RJdGVtIoQBCgpUZW5hbnRVc2VyEhEK",
"X2dhdGV3YXlfYWRtaW4YBSABKAgSDQoFZW1haWwYBiABKAki7AEKElRlbmFu", "CXRlbmFudF9pZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgJEhAKCGlzX2FkbWlu",
"dFVzZXJMaXN0SXRlbRIRCgl0ZW5hbnRfaWQYASABKAkSDwoHdXNlcl9pZBgC", "GAMgASgIEhcKD2lzX2RldmljZV9hZG1pbhgEIAEoCBIYChBpc19nYXRld2F5",
"IAEoCRIuCgpjcmVhdGVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRp", "X2FkbWluGAUgASgIEg0KBWVtYWlsGAYgASgJIuwBChJUZW5hbnRVc2VyTGlz",
"bWVzdGFtcBIuCgp1cGRhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVm", "dEl0ZW0SEQoJdGVuYW50X2lkGAEgASgJEg8KB3VzZXJfaWQYAiABKAkSLgoK",
"LlRpbWVzdGFtcBINCgVlbWFpbBgFIAEoCRIQCghpc19hZG1pbhgGIAEoCBIX", "Y3JlYXRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAS",
"Cg9pc19kZXZpY2VfYWRtaW4YByABKAgSGAoQaXNfZ2F0ZXdheV9hZG1pbhgI", "LgoKdXBkYXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3Rh",
"IAEoCCI8ChRBZGRUZW5hbnRVc2VyUmVxdWVzdBIkCgt0ZW5hbnRfdXNlchgB", "bXASDQoFZW1haWwYBSABKAkSEAoIaXNfYWRtaW4YBiABKAgSFwoPaXNfZGV2",
"IAEoCzIPLmFwaS5UZW5hbnRVc2VyIjoKFEdldFRlbmFudFVzZXJSZXF1ZXN0", "aWNlX2FkbWluGAcgASgIEhgKEGlzX2dhdGV3YXlfYWRtaW4YCCABKAgiPAoU",
"EhEKCXRlbmFudF9pZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgJIp0BChVHZXRU", "QWRkVGVuYW50VXNlclJlcXVlc3QSJAoLdGVuYW50X3VzZXIYASABKAsyDy5h",
"ZW5hbnRVc2VyUmVzcG9uc2USJAoLdGVuYW50X3VzZXIYASABKAsyDy5hcGku", "cGkuVGVuYW50VXNlciI6ChRHZXRUZW5hbnRVc2VyUmVxdWVzdBIRCgl0ZW5h",
"VGVuYW50VXNlchIuCgpjcmVhdGVkX2F0GAIgASgLMhouZ29vZ2xlLnByb3Rv", "bnRfaWQYASABKAkSDwoHdXNlcl9pZBgCIAEoCSKdAQoVR2V0VGVuYW50VXNl",
"YnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAMgASgLMhouZ29vZ2xlLnBy", "clJlc3BvbnNlEiQKC3RlbmFudF91c2VyGAEgASgLMg8uYXBpLlRlbmFudFVz",
"b3RvYnVmLlRpbWVzdGFtcCI/ChdVcGRhdGVUZW5hbnRVc2VyUmVxdWVzdBIk", "ZXISLgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1l",
"Cgt0ZW5hbnRfdXNlchgBIAEoCzIPLmFwaS5UZW5hbnRVc2VyIj0KF0RlbGV0", "c3RhbXASLgoKdXBkYXRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5U",
"ZVRlbmFudFVzZXJSZXF1ZXN0EhEKCXRlbmFudF9pZBgBIAEoCRIPCgd1c2Vy", "aW1lc3RhbXAiPwoXVXBkYXRlVGVuYW50VXNlclJlcXVlc3QSJAoLdGVuYW50",
"X2lkGAIgASgJIkoKFkxpc3RUZW5hbnRVc2Vyc1JlcXVlc3QSEQoJdGVuYW50", "X3VzZXIYASABKAsyDy5hcGkuVGVuYW50VXNlciI9ChdEZWxldGVUZW5hbnRV",
"X2lkGAEgASgJEg0KBWxpbWl0GAIgASgNEg4KBm9mZnNldBgDIAEoDSJXChdM", "c2VyUmVxdWVzdBIRCgl0ZW5hbnRfaWQYASABKAkSDwoHdXNlcl9pZBgCIAEo",
"aXN0VGVuYW50VXNlcnNSZXNwb25zZRITCgt0b3RhbF9jb3VudBgBIAEoDRIn", "CSJKChZMaXN0VGVuYW50VXNlcnNSZXF1ZXN0EhEKCXRlbmFudF9pZBgBIAEo",
"CgZyZXN1bHQYAiADKAsyFy5hcGkuVGVuYW50VXNlckxpc3RJdGVtMqIICg1U", "CRINCgVsaW1pdBgCIAEoDRIOCgZvZmZzZXQYAyABKA0iVwoXTGlzdFRlbmFu",
"ZW5hbnRTZXJ2aWNlElYKBkNyZWF0ZRIYLmFwaS5DcmVhdGVUZW5hbnRSZXF1", "dFVzZXJzUmVzcG9uc2USEwoLdG90YWxfY291bnQYASABKA0SJwoGcmVzdWx0",
"ZXN0GhkuYXBpLkNyZWF0ZVRlbmFudFJlc3BvbnNlIheC0+STAhEiDC9hcGkv", "GAIgAygLMhcuYXBpLlRlbmFudFVzZXJMaXN0SXRlbTKiCAoNVGVuYW50U2Vy",
"dGVuYW50czoBKhJPCgNHZXQSFS5hcGkuR2V0VGVuYW50UmVxdWVzdBoWLmFw", "dmljZRJWCgZDcmVhdGUSGC5hcGkuQ3JlYXRlVGVuYW50UmVxdWVzdBoZLmFw",
"aS5HZXRUZW5hbnRSZXNwb25zZSIZgtPkkwITEhEvYXBpL3RlbmFudHMve2lk", "aS5DcmVhdGVUZW5hbnRSZXNwb25zZSIXgtPkkwIRIgwvYXBpL3RlbmFudHM6",
"fRJfCgZVcGRhdGUSGC5hcGkuVXBkYXRlVGVuYW50UmVxdWVzdBoWLmdvb2ds", "ASoSTwoDR2V0EhUuYXBpLkdldFRlbmFudFJlcXVlc3QaFi5hcGkuR2V0VGVu",
"ZS5wcm90b2J1Zi5FbXB0eSIjgtPkkwIdGhgvYXBpL3RlbmFudHMve3RlbmFu", "YW50UmVzcG9uc2UiGYLT5JMCExIRL2FwaS90ZW5hbnRzL3tpZH0SXwoGVXBk",
"dC5pZH06ASoSVQoGRGVsZXRlEhguYXBpLkRlbGV0ZVRlbmFudFJlcXVlc3Qa", "YXRlEhguYXBpLlVwZGF0ZVRlbmFudFJlcXVlc3QaFi5nb29nbGUucHJvdG9i",
"Fi5nb29nbGUucHJvdG9idWYuRW1wdHkiGYLT5JMCEyoRL2FwaS90ZW5hbnRz", "dWYuRW1wdHkiI4LT5JMCHRoYL2FwaS90ZW5hbnRzL3t0ZW5hbnQuaWR9OgEq",
"L3tpZH0STwoETGlzdBIXLmFwaS5MaXN0VGVuYW50c1JlcXVlc3QaGC5hcGku", "ElUKBkRlbGV0ZRIYLmFwaS5EZWxldGVUZW5hbnRSZXF1ZXN0GhYuZ29vZ2xl",
"TGlzdFRlbmFudHNSZXNwb25zZSIUgtPkkwIOEgwvYXBpL3RlbmFudHMScwoH", "LnByb3RvYnVmLkVtcHR5IhmC0+STAhMqES9hcGkvdGVuYW50cy97aWR9Ek8K",
"QWRkVXNlchIZLmFwaS5BZGRUZW5hbnRVc2VyUmVxdWVzdBoWLmdvb2dsZS5w", "BExpc3QSFy5hcGkuTGlzdFRlbmFudHNSZXF1ZXN0GhguYXBpLkxpc3RUZW5h",
"cm90b2J1Zi5FbXB0eSI1gtPkkwIvIiovYXBpL3RlbmFudHMve3RlbmFudF91", "bnRzUmVzcG9uc2UiFILT5JMCDhIML2FwaS90ZW5hbnRzEnMKB0FkZFVzZXIS",
"c2VyLnRlbmFudF9pZH0vdXNlcnM6ASoScgoHR2V0VXNlchIZLmFwaS5HZXRU", "GS5hcGkuQWRkVGVuYW50VXNlclJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYu",
"ZW5hbnRVc2VyUmVxdWVzdBoaLmFwaS5HZXRUZW5hbnRVc2VyUmVzcG9uc2Ui", "RW1wdHkiNYLT5JMCLyIqL2FwaS90ZW5hbnRzL3t0ZW5hbnRfdXNlci50ZW5h",
"MILT5JMCKhIoL2FwaS90ZW5hbnRzL3t0ZW5hbnRfaWR9L3VzZXJzL3t1c2Vy", "bnRfaWR9L3VzZXJzOgEqEnIKB0dldFVzZXISGS5hcGkuR2V0VGVuYW50VXNl",
"X2lkfRKPAQoKVXBkYXRlVXNlchIcLmFwaS5VcGRhdGVUZW5hbnRVc2VyUmVx", "clJlcXVlc3QaGi5hcGkuR2V0VGVuYW50VXNlclJlc3BvbnNlIjCC0+STAioS",
"dWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJLgtPkkwJFGkAvYXBpL3Rl", "KC9hcGkvdGVuYW50cy97dGVuYW50X2lkfS91c2Vycy97dXNlcl9pZH0SjwEK",
"bmFudHMve3RlbmFudF91c2VyLnRlbmFudF9pZH0vdXNlcnMve3RlbmFudF91", "ClVwZGF0ZVVzZXISHC5hcGkuVXBkYXRlVGVuYW50VXNlclJlcXVlc3QaFi5n",
"c2VyLnVzZXJfaWR9OgEqEnQKCkRlbGV0ZVVzZXISHC5hcGkuRGVsZXRlVGVu", "b29nbGUucHJvdG9idWYuRW1wdHkiS4LT5JMCRRpAL2FwaS90ZW5hbnRzL3t0",
"YW50VXNlclJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiMILT5JMC", "ZW5hbnRfdXNlci50ZW5hbnRfaWR9L3VzZXJzL3t0ZW5hbnRfdXNlci51c2Vy",
"KiooL2FwaS90ZW5hbnRzL3t0ZW5hbnRfaWR9L3VzZXJzL3t1c2VyX2lkfRJu", "X2lkfToBKhJ0CgpEZWxldGVVc2VyEhwuYXBpLkRlbGV0ZVRlbmFudFVzZXJS",
"CglMaXN0VXNlcnMSGy5hcGkuTGlzdFRlbmFudFVzZXJzUmVxdWVzdBocLmFw", "ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjCC0+STAioqKC9hcGkv",
"aS5MaXN0VGVuYW50VXNlcnNSZXNwb25zZSImgtPkkwIgEh4vYXBpL3RlbmFu", "dGVuYW50cy97dGVuYW50X2lkfS91c2Vycy97dXNlcl9pZH0SbgoJTGlzdFVz",
"dHMve3RlbmFudF9pZH0vdXNlcnNCYwoRaW8uY2hpcnBzdGFjay5hcGlCC1Rl", "ZXJzEhsuYXBpLkxpc3RUZW5hbnRVc2Vyc1JlcXVlc3QaHC5hcGkuTGlzdFRl",
"bmFudFByb3RvUAFaLmdpdGh1Yi5jb20vY2hpcnBzdGFjay9jaGlycHN0YWNr", "bmFudFVzZXJzUmVzcG9uc2UiJoLT5JMCIBIeL2FwaS90ZW5hbnRzL3t0ZW5h",
"L2FwaS9nby92NC9hcGmqAg5DaGlycHN0YWNrLkFwaWIGcHJvdG8z")); "bnRfaWR9L3VzZXJzQmMKEWlvLmNoaXJwc3RhY2suYXBpQgtUZW5hbnRQcm90",
"b1ABWi5naXRodWIuY29tL2NoaXJwc3RhY2svY2hpcnBzdGFjay9hcGkvZ28v",
"djQvYXBpqgIOQ2hpcnBzdGFjay5BcGliBnByb3RvMw=="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Api.AnnotationsReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, }, new pbr::FileDescriptor[] { global::Google.Api.AnnotationsReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.Tenant), global::Chirpstack.Api.Tenant.Parser, new[]{ "Id", "Name", "Description", "CanHaveGateways", "MaxGatewayCount", "MaxDeviceCount", "PrivateGatewaysUp", "PrivateGatewaysDown" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.Tenant), global::Chirpstack.Api.Tenant.Parser, new[]{ "Id", "Name", "Description", "CanHaveGateways", "MaxGatewayCount", "MaxDeviceCount", "PrivateGatewaysUp", "PrivateGatewaysDown", "Tags" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.TenantListItem), global::Chirpstack.Api.TenantListItem.Parser, new[]{ "Id", "CreatedAt", "UpdatedAt", "Name", "CanHaveGateways", "PrivateGatewaysUp", "PrivateGatewaysDown", "MaxGatewayCount", "MaxDeviceCount" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.TenantListItem), global::Chirpstack.Api.TenantListItem.Parser, new[]{ "Id", "CreatedAt", "UpdatedAt", "Name", "CanHaveGateways", "PrivateGatewaysUp", "PrivateGatewaysDown", "MaxGatewayCount", "MaxDeviceCount" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateTenantRequest), global::Chirpstack.Api.CreateTenantRequest.Parser, new[]{ "Tenant" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateTenantRequest), global::Chirpstack.Api.CreateTenantRequest.Parser, new[]{ "Tenant" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateTenantResponse), global::Chirpstack.Api.CreateTenantResponse.Parser, new[]{ "Id" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateTenantResponse), global::Chirpstack.Api.CreateTenantResponse.Parser, new[]{ "Id" }, null, null, null, null),
@ -166,6 +168,7 @@ namespace Chirpstack.Api {
maxDeviceCount_ = other.maxDeviceCount_; maxDeviceCount_ = other.maxDeviceCount_;
privateGatewaysUp_ = other.privateGatewaysUp_; privateGatewaysUp_ = other.privateGatewaysUp_;
privateGatewaysDown_ = other.privateGatewaysDown_; privateGatewaysDown_ = other.privateGatewaysDown_;
tags_ = other.tags_.Clone();
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
} }
@ -303,6 +306,22 @@ namespace Chirpstack.Api {
} }
} }
/// <summary>Field number for the "tags" field.</summary>
public const int TagsFieldNumber = 9;
private static readonly pbc::MapField<string, string>.Codec _map_tags_codec
= new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForString(18, ""), 74);
private readonly pbc::MapField<string, string> tags_ = new pbc::MapField<string, string>();
/// <summary>
/// Tags (user defined).
/// These tags can be used to add additional information to the tenant. These
/// tags are NOT exposed in the integration events.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public pbc::MapField<string, string> Tags {
get { return tags_; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) { public override bool Equals(object other) {
@ -326,6 +345,7 @@ namespace Chirpstack.Api {
if (MaxDeviceCount != other.MaxDeviceCount) return false; if (MaxDeviceCount != other.MaxDeviceCount) return false;
if (PrivateGatewaysUp != other.PrivateGatewaysUp) return false; if (PrivateGatewaysUp != other.PrivateGatewaysUp) return false;
if (PrivateGatewaysDown != other.PrivateGatewaysDown) return false; if (PrivateGatewaysDown != other.PrivateGatewaysDown) return false;
if (!Tags.Equals(other.Tags)) return false;
return Equals(_unknownFields, other._unknownFields); return Equals(_unknownFields, other._unknownFields);
} }
@ -341,6 +361,7 @@ namespace Chirpstack.Api {
if (MaxDeviceCount != 0) hash ^= MaxDeviceCount.GetHashCode(); if (MaxDeviceCount != 0) hash ^= MaxDeviceCount.GetHashCode();
if (PrivateGatewaysUp != false) hash ^= PrivateGatewaysUp.GetHashCode(); if (PrivateGatewaysUp != false) hash ^= PrivateGatewaysUp.GetHashCode();
if (PrivateGatewaysDown != false) hash ^= PrivateGatewaysDown.GetHashCode(); if (PrivateGatewaysDown != false) hash ^= PrivateGatewaysDown.GetHashCode();
hash ^= Tags.GetHashCode();
if (_unknownFields != null) { if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode(); hash ^= _unknownFields.GetHashCode();
} }
@ -391,6 +412,7 @@ namespace Chirpstack.Api {
output.WriteRawTag(64); output.WriteRawTag(64);
output.WriteBool(PrivateGatewaysDown); output.WriteBool(PrivateGatewaysDown);
} }
tags_.WriteTo(output, _map_tags_codec);
if (_unknownFields != null) { if (_unknownFields != null) {
_unknownFields.WriteTo(output); _unknownFields.WriteTo(output);
} }
@ -433,6 +455,7 @@ namespace Chirpstack.Api {
output.WriteRawTag(64); output.WriteRawTag(64);
output.WriteBool(PrivateGatewaysDown); output.WriteBool(PrivateGatewaysDown);
} }
tags_.WriteTo(ref output, _map_tags_codec);
if (_unknownFields != null) { if (_unknownFields != null) {
_unknownFields.WriteTo(ref output); _unknownFields.WriteTo(ref output);
} }
@ -467,6 +490,7 @@ namespace Chirpstack.Api {
if (PrivateGatewaysDown != false) { if (PrivateGatewaysDown != false) {
size += 1 + 1; size += 1 + 1;
} }
size += tags_.CalculateSize(_map_tags_codec);
if (_unknownFields != null) { if (_unknownFields != null) {
size += _unknownFields.CalculateSize(); size += _unknownFields.CalculateSize();
} }
@ -503,6 +527,7 @@ namespace Chirpstack.Api {
if (other.PrivateGatewaysDown != false) { if (other.PrivateGatewaysDown != false) {
PrivateGatewaysDown = other.PrivateGatewaysDown; PrivateGatewaysDown = other.PrivateGatewaysDown;
} }
tags_.Add(other.tags_);
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
} }
@ -550,6 +575,10 @@ namespace Chirpstack.Api {
PrivateGatewaysDown = input.ReadBool(); PrivateGatewaysDown = input.ReadBool();
break; break;
} }
case 74: {
tags_.AddEntriesFrom(input, _map_tags_codec);
break;
}
} }
} }
#endif #endif
@ -597,6 +626,10 @@ namespace Chirpstack.Api {
PrivateGatewaysDown = input.ReadBool(); PrivateGatewaysDown = input.ReadBool();
break; break;
} }
case 74: {
tags_.AddEntriesFrom(ref input, _map_tags_codec);
break;
}
} }
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -51,8 +51,8 @@ type Device struct {
// exposed in the event payloads. // exposed in the event payloads.
Variables map[string]string `protobuf:"bytes,8,rep,name=variables,proto3" json:"variables,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Variables map[string]string `protobuf:"bytes,8,rep,name=variables,proto3" json:"variables,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// Tags (user defined). // Tags (user defined).
// These tags are exposed in the event payloads or to integration. Tags are // These tags can be used to add additional information to the device.
// intended for aggregation and filtering. // These tags are exposed in all the integration events.
Tags map[string]string `protobuf:"bytes,9,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Tags map[string]string `protobuf:"bytes,9,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// JoinEUI (optional, EUI64). // JoinEUI (optional, EUI64).
// This field will be automatically set / updated on OTAA. However, in some // This field will be automatically set / updated on OTAA. However, in some

View File

@ -81,7 +81,8 @@ type MeasurementKind int32
const ( const (
// Unknown (in which case it is not tracked). // Unknown (in which case it is not tracked).
MeasurementKind_UNKNOWN MeasurementKind = 0 MeasurementKind_UNKNOWN MeasurementKind = 0
// Incrementing counters that never decrease (these are not reset on each reading). // Incrementing counters that never decrease (these are not reset on each
// reading).
MeasurementKind_COUNTER MeasurementKind = 1 MeasurementKind_COUNTER MeasurementKind = 1
// Counters that do get reset upon reading. // Counters that do get reset upon reading.
MeasurementKind_ABSOLUTE MeasurementKind = 2 MeasurementKind_ABSOLUTE MeasurementKind = 2
@ -354,8 +355,8 @@ type DeviceProfile struct {
// been received, the device is considered inactive. // been received, the device is considered inactive.
UplinkInterval uint32 `protobuf:"varint,11,opt,name=uplink_interval,json=uplinkInterval,proto3" json:"uplink_interval,omitempty"` UplinkInterval uint32 `protobuf:"varint,11,opt,name=uplink_interval,json=uplinkInterval,proto3" json:"uplink_interval,omitempty"`
// Device-status request interval (times / day). // Device-status request interval (times / day).
// This defines the times per day that ChirpStack will request the device-status // This defines the times per day that ChirpStack will request the
// from the device. // device-status from the device.
DeviceStatusReqInterval uint32 `protobuf:"varint,12,opt,name=device_status_req_interval,json=deviceStatusReqInterval,proto3" json:"device_status_req_interval,omitempty"` DeviceStatusReqInterval uint32 `protobuf:"varint,12,opt,name=device_status_req_interval,json=deviceStatusReqInterval,proto3" json:"device_status_req_interval,omitempty"`
// Supports OTAA. // Supports OTAA.
SupportsOtaa bool `protobuf:"varint,13,opt,name=supports_otaa,json=supportsOtaa,proto3" json:"supports_otaa,omitempty"` SupportsOtaa bool `protobuf:"varint,13,opt,name=supports_otaa,json=supportsOtaa,proto3" json:"supports_otaa,omitempty"`
@ -364,7 +365,8 @@ type DeviceProfile struct {
// Supports Class-C. // Supports Class-C.
SupportsClassC bool `protobuf:"varint,15,opt,name=supports_class_c,json=supportsClassC,proto3" json:"supports_class_c,omitempty"` SupportsClassC bool `protobuf:"varint,15,opt,name=supports_class_c,json=supportsClassC,proto3" json:"supports_class_c,omitempty"`
// Class-B timeout (seconds). // Class-B timeout (seconds).
// This is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested). // This is the maximum time ChirpStack will wait to receive an acknowledgement
// from the device (if requested).
ClassBTimeout uint32 `protobuf:"varint,16,opt,name=class_b_timeout,json=classBTimeout,proto3" json:"class_b_timeout,omitempty"` ClassBTimeout uint32 `protobuf:"varint,16,opt,name=class_b_timeout,json=classBTimeout,proto3" json:"class_b_timeout,omitempty"`
// Class-B ping-slots per beacon period. // Class-B ping-slots per beacon period.
// Valid options are: 0 - 7. // Valid options are: 0 - 7.
@ -376,7 +378,8 @@ type DeviceProfile struct {
// Class-B ping-slot freq (Hz). // Class-B ping-slot freq (Hz).
ClassBPingSlotFreq uint32 `protobuf:"varint,19,opt,name=class_b_ping_slot_freq,json=classBPingSlotFreq,proto3" json:"class_b_ping_slot_freq,omitempty"` ClassBPingSlotFreq uint32 `protobuf:"varint,19,opt,name=class_b_ping_slot_freq,json=classBPingSlotFreq,proto3" json:"class_b_ping_slot_freq,omitempty"`
// Class-C timeout (seconds). // Class-C timeout (seconds).
// This is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested). // This is the maximum time ChirpStack will wait to receive an acknowledgement
// from the device (if requested).
ClassCTimeout uint32 `protobuf:"varint,20,opt,name=class_c_timeout,json=classCTimeout,proto3" json:"class_c_timeout,omitempty"` ClassCTimeout uint32 `protobuf:"varint,20,opt,name=class_c_timeout,json=classCTimeout,proto3" json:"class_c_timeout,omitempty"`
// RX1 delay (for ABP). // RX1 delay (for ABP).
AbpRx1Delay uint32 `protobuf:"varint,21,opt,name=abp_rx1_delay,json=abpRx1Delay,proto3" json:"abp_rx1_delay,omitempty"` AbpRx1Delay uint32 `protobuf:"varint,21,opt,name=abp_rx1_delay,json=abpRx1Delay,proto3" json:"abp_rx1_delay,omitempty"`
@ -386,7 +389,10 @@ type DeviceProfile struct {
AbpRx2Dr uint32 `protobuf:"varint,23,opt,name=abp_rx2_dr,json=abpRx2Dr,proto3" json:"abp_rx2_dr,omitempty"` AbpRx2Dr uint32 `protobuf:"varint,23,opt,name=abp_rx2_dr,json=abpRx2Dr,proto3" json:"abp_rx2_dr,omitempty"`
// RX2 frequency (for ABP, Hz). // RX2 frequency (for ABP, Hz).
AbpRx2Freq uint32 `protobuf:"varint,24,opt,name=abp_rx2_freq,json=abpRx2Freq,proto3" json:"abp_rx2_freq,omitempty"` AbpRx2Freq uint32 `protobuf:"varint,24,opt,name=abp_rx2_freq,json=abpRx2Freq,proto3" json:"abp_rx2_freq,omitempty"`
// User defined tags. // Tags (user defined).
// These tags can be used to add additional information the the
// device-profile. These tags are exposed in all the integration events of
// devices using this device-profile.
Tags map[string]string `protobuf:"bytes,25,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Tags map[string]string `protobuf:"bytes,25,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// Measurements. // Measurements.
// If defined, ChirpStack will visualize these metrics in the web-interface. // If defined, ChirpStack will visualize these metrics in the web-interface.

View File

@ -52,6 +52,10 @@ type Tenant struct {
// do want to share uplinks with other tenants (private_gateways_up=false), // do want to share uplinks with other tenants (private_gateways_up=false),
// but you want to prevent other tenants from using gateway airtime. // but you want to prevent other tenants from using gateway airtime.
PrivateGatewaysDown bool `protobuf:"varint,8,opt,name=private_gateways_down,json=privateGatewaysDown,proto3" json:"private_gateways_down,omitempty"` PrivateGatewaysDown bool `protobuf:"varint,8,opt,name=private_gateways_down,json=privateGatewaysDown,proto3" json:"private_gateways_down,omitempty"`
// Tags (user defined).
// These tags can be used to add additional information to the tenant. These
// tags are NOT exposed in the integration events.
Tags map[string]string `protobuf:"bytes,9,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
} }
func (x *Tenant) Reset() { func (x *Tenant) Reset() {
@ -142,6 +146,13 @@ func (x *Tenant) GetPrivateGatewaysDown() bool {
return false return false
} }
func (x *Tenant) GetTags() map[string]string {
if x != nil {
return x.Tags
}
return nil
}
type TenantListItem struct { type TenantListItem struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -1320,7 +1331,7 @@ var file_api_tenant_proto_rawDesc = []byte{
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x22, 0xb4, 0x02, 0x0a, 0x06, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x0e, 0x6f, 0x74, 0x6f, 0x22, 0x98, 0x03, 0x0a, 0x06, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x0e,
0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12,
0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
@ -1339,222 +1350,229 @@ var file_api_tenant_proto_rawDesc = []byte{
0x77, 0x61, 0x79, 0x73, 0x55, 0x70, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x77, 0x61, 0x79, 0x73, 0x55, 0x70, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
0x65, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x65, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18,
0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x47, 0x61, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x47, 0x61,
0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x44, 0x6f, 0x77, 0x6e, 0x22, 0x90, 0x03, 0x0a, 0x0e, 0x54, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x61,
0x65, 0x6e, 0x61, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54,
0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74,
0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x90,
0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x03, 0x0a, 0x0e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18,
0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x61, 0x6e, 0x5f, 0x68, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
0x61, 0x76, 0x65, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x05, 0x20, 0x01, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a,
0x28, 0x08, 0x52, 0x0f, 0x63, 0x61, 0x6e, 0x48, 0x61, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
0x61, 0x79, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x67, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x5f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70,
0x52, 0x11, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x73, 0x55, 0x70, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x67, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x63,
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x61, 0x6e, 0x5f, 0x68, 0x61, 0x76, 0x65, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73,
0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x61, 0x6e, 0x48, 0x61, 0x76, 0x65, 0x47,
0x61, 0x79, 0x73, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x72, 0x69, 0x76, 0x61,
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x74, 0x65, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x5f, 0x75, 0x70, 0x18, 0x06,
0x28, 0x0d, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74,
0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x77, 0x61, 0x79, 0x73, 0x55, 0x70, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, 0x69, 0x76, 0x61,
0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6d, 0x74, 0x65, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x5f, 0x64, 0x6f, 0x77, 0x6e,
0x61, 0x78, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x0a, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x47,
0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x6d,
0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x61, 0x78, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x47, 0x61, 0x74, 0x65, 0x77,
0x74, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, 0x26, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, 0x64,
0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28,
0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x0d, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e,
0x64, 0x22, 0x22, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x74, 0x22, 0x3a, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61,
0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xae, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54,
0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, 0x26, 0x0a,
0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73,
0x69, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x22, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75,
0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64,
0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x3a, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a,
0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61,
0x6e, 0x74, 0x22, 0x25, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61,
0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x73, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xae, 0x01, 0x0a, 0x11, 0x47, 0x65,
0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x23, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x06, 0x74, 0x65,
0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x63, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12,
0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52,
0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x3a, 0x0a, 0x13, 0x55, 0x70,
0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x61, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
0x75, 0x6c, 0x74, 0x22, 0xc5, 0x01, 0x0a, 0x0a, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x06,
0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, 0x25, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a,
0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x73, 0x0a,
0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75,
0x64, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01,
0x6d, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66,
0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28,
0x73, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65,
0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72,
0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x06, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0xc3, 0x02, 0x0a, 0x12,
0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74,
0x65, 0x6d, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12,
0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61,
0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61,
0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x14,
0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65,
0x6d, 0x61, 0x69, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e,
0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12,
0x26, 0x0a, 0x0f, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x6d,
0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x67, 0x61,
0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28,
0x08, 0x52, 0x0e, 0x69, 0x73, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x41, 0x64, 0x6d, 0x69,
0x6e, 0x22, 0x48, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73,
0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x0b, 0x74, 0x65, 0x6e,
0x61, 0x6e, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52,
0x0a, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x22, 0x4c, 0x0a, 0x14, 0x47,
0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64,
0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xbf, 0x01, 0x0a, 0x15, 0x47, 0x65,
0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x0b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x75, 0x73,
0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54,
0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0a, 0x74, 0x65, 0x6e, 0x61, 0x6e,
0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74,
0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x4b, 0x0a, 0x17, 0x55,
0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x0b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74,
0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0a, 0x74, 0x65,
0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x22, 0x4f, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65,
0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64,
0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x16, 0x4c, 0x69, 0x73,
0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64,
0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74,
0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x6b,
0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74,
0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a,
0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x65, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x72, 0x65,
0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52,
0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x32, 0xa2, 0x08, 0x0a, 0x0d, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xc5, 0x01, 0x0a, 0x0a, 0x54, 0x65, 0x6e, 0x61,
0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x56, 0x0a, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74,
0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e,
0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02,
0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08,
0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x73, 0x5f, 0x64, 0x65,
0x6e, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x61, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08,
0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x52, 0x0d, 0x69, 0x73, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12,
0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x61, 0x64,
0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x47, 0x61, 0x74,
0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x65, 0x77, 0x61, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61,
0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x5f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x69, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22,
0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0xc3, 0x02, 0x0a, 0x12, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69,
0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74,
0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e,
0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a,
0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72,
0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74,
0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
0x41, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28,
0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61,
0x64, 0x6d, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64,
0x6d, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x69,
0x73, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18,
0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x48, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x54, 0x65, 0x6e, 0x61,
0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a,
0x0b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55,
0x73, 0x65, 0x72, 0x52, 0x0a, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x22,
0x4c, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e,
0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61,
0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xbf, 0x01,
0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x0b, 0x74, 0x65, 0x6e, 0x61, 0x6e,
0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0a, 0x74,
0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65,
0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74,
0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f,
0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22,
0x4b, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55,
0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x0b, 0x74, 0x65,
0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72,
0x52, 0x0a, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x22, 0x4f, 0x0a, 0x17,
0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e,
0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61,
0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x63, 0x0a,
0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e,
0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61,
0x6e, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66,
0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73,
0x65, 0x74, 0x22, 0x6b, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74,
0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a,
0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2f,
0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c,
0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x32,
0xa2, 0x08, 0x0a, 0x0d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x12, 0x56, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61,
0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x03, 0x47, 0x65, 0x74,
0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65,
0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65,
0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x5f, 0x0a, 0x06, 0x55, 0x70,
0x64, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01,
0x2a, 0x1a, 0x18, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f,
0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x69, 0x64, 0x7d, 0x12, 0x55, 0x0a, 0x06, 0x44,
0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65,
0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x2a,
0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69,
0x64, 0x7d, 0x12, 0x4f, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65,
0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61,
0x6e, 0x74, 0x73, 0x12, 0x73, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x19,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73,
0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
0x79, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x61,
0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61,
0x6e, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69,
0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x72, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55,
0x73, 0x65, 0x72, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e,
0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73,
0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x2a, 0x12, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73,
0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65,
0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x8f, 0x01, 0x0a,
0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73,
0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
0x79, 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x3a, 0x01, 0x2a, 0x1a, 0x40, 0x2f, 0x61,
0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61,
0x6e, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69,
0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74,
0x5f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x74,
0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55,
0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,
0x74, 0x79, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x1a, 0x18, 0x2f, 0x74, 0x79, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x2a, 0x28, 0x2f, 0x61, 0x70, 0x69,
0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74,
0x61, 0x6e, 0x74, 0x2e, 0x69, 0x64, 0x7d, 0x12, 0x55, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72,
0x65, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x6e, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72,
0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x73, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c,
0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x2a, 0x11, 0x2f, 0x61, 0x70, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55,
0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x4f, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3,
0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e,
0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75,
0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x65, 0x72, 0x73, 0x42, 0x63, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x54, 0x65, 0x6e, 0x61, 0x6e,
0x0e, 0x12, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
0x73, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f,
0x2e, 0x41, 0x64, 0x64, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x35, 0x82, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x33,
0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x75,
0x73, 0x65, 0x72, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75,
0x73, 0x65, 0x72, 0x73, 0x12, 0x72, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12,
0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55,
0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28,
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65,
0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b,
0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x8f, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64,
0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70,
0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4b, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x45, 0x3a, 0x01, 0x2a, 0x1a, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74,
0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x75,
0x73, 0x65, 0x72, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75,
0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x75, 0x73, 0x65,
0x72, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x74, 0x0a, 0x0a, 0x44, 0x65,
0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44,
0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x30,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x2a, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e,
0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d,
0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d,
0x12, 0x6e, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73,
0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20,
0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b,
0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73,
0x42, 0x63, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63,
0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x50, 0x72, 0x6f,
0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72,
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34,
0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63,
0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (
@ -1569,7 +1587,7 @@ func file_api_tenant_proto_rawDescGZIP() []byte {
return file_api_tenant_proto_rawDescData return file_api_tenant_proto_rawDescData
} }
var file_api_tenant_proto_msgTypes = make([]protoimpl.MessageInfo, 19) var file_api_tenant_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
var file_api_tenant_proto_goTypes = []interface{}{ var file_api_tenant_proto_goTypes = []interface{}{
(*Tenant)(nil), // 0: api.Tenant (*Tenant)(nil), // 0: api.Tenant
(*TenantListItem)(nil), // 1: api.TenantListItem (*TenantListItem)(nil), // 1: api.TenantListItem
@ -1590,51 +1608,53 @@ var file_api_tenant_proto_goTypes = []interface{}{
(*DeleteTenantUserRequest)(nil), // 16: api.DeleteTenantUserRequest (*DeleteTenantUserRequest)(nil), // 16: api.DeleteTenantUserRequest
(*ListTenantUsersRequest)(nil), // 17: api.ListTenantUsersRequest (*ListTenantUsersRequest)(nil), // 17: api.ListTenantUsersRequest
(*ListTenantUsersResponse)(nil), // 18: api.ListTenantUsersResponse (*ListTenantUsersResponse)(nil), // 18: api.ListTenantUsersResponse
(*timestamppb.Timestamp)(nil), // 19: google.protobuf.Timestamp nil, // 19: api.Tenant.TagsEntry
(*emptypb.Empty)(nil), // 20: google.protobuf.Empty (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp
(*emptypb.Empty)(nil), // 21: google.protobuf.Empty
} }
var file_api_tenant_proto_depIdxs = []int32{ var file_api_tenant_proto_depIdxs = []int32{
19, // 0: api.TenantListItem.created_at:type_name -> google.protobuf.Timestamp 19, // 0: api.Tenant.tags:type_name -> api.Tenant.TagsEntry
19, // 1: api.TenantListItem.updated_at:type_name -> google.protobuf.Timestamp 20, // 1: api.TenantListItem.created_at:type_name -> google.protobuf.Timestamp
0, // 2: api.CreateTenantRequest.tenant:type_name -> api.Tenant 20, // 2: api.TenantListItem.updated_at:type_name -> google.protobuf.Timestamp
0, // 3: api.GetTenantResponse.tenant:type_name -> api.Tenant 0, // 3: api.CreateTenantRequest.tenant:type_name -> api.Tenant
19, // 4: api.GetTenantResponse.created_at:type_name -> google.protobuf.Timestamp 0, // 4: api.GetTenantResponse.tenant:type_name -> api.Tenant
19, // 5: api.GetTenantResponse.updated_at:type_name -> google.protobuf.Timestamp 20, // 5: api.GetTenantResponse.created_at:type_name -> google.protobuf.Timestamp
0, // 6: api.UpdateTenantRequest.tenant:type_name -> api.Tenant 20, // 6: api.GetTenantResponse.updated_at:type_name -> google.protobuf.Timestamp
1, // 7: api.ListTenantsResponse.result:type_name -> api.TenantListItem 0, // 7: api.UpdateTenantRequest.tenant:type_name -> api.Tenant
19, // 8: api.TenantUserListItem.created_at:type_name -> google.protobuf.Timestamp 1, // 8: api.ListTenantsResponse.result:type_name -> api.TenantListItem
19, // 9: api.TenantUserListItem.updated_at:type_name -> google.protobuf.Timestamp 20, // 9: api.TenantUserListItem.created_at:type_name -> google.protobuf.Timestamp
10, // 10: api.AddTenantUserRequest.tenant_user:type_name -> api.TenantUser 20, // 10: api.TenantUserListItem.updated_at:type_name -> google.protobuf.Timestamp
10, // 11: api.GetTenantUserResponse.tenant_user:type_name -> api.TenantUser 10, // 11: api.AddTenantUserRequest.tenant_user:type_name -> api.TenantUser
19, // 12: api.GetTenantUserResponse.created_at:type_name -> google.protobuf.Timestamp 10, // 12: api.GetTenantUserResponse.tenant_user:type_name -> api.TenantUser
19, // 13: api.GetTenantUserResponse.updated_at:type_name -> google.protobuf.Timestamp 20, // 13: api.GetTenantUserResponse.created_at:type_name -> google.protobuf.Timestamp
10, // 14: api.UpdateTenantUserRequest.tenant_user:type_name -> api.TenantUser 20, // 14: api.GetTenantUserResponse.updated_at:type_name -> google.protobuf.Timestamp
11, // 15: api.ListTenantUsersResponse.result:type_name -> api.TenantUserListItem 10, // 15: api.UpdateTenantUserRequest.tenant_user:type_name -> api.TenantUser
2, // 16: api.TenantService.Create:input_type -> api.CreateTenantRequest 11, // 16: api.ListTenantUsersResponse.result:type_name -> api.TenantUserListItem
4, // 17: api.TenantService.Get:input_type -> api.GetTenantRequest 2, // 17: api.TenantService.Create:input_type -> api.CreateTenantRequest
6, // 18: api.TenantService.Update:input_type -> api.UpdateTenantRequest 4, // 18: api.TenantService.Get:input_type -> api.GetTenantRequest
7, // 19: api.TenantService.Delete:input_type -> api.DeleteTenantRequest 6, // 19: api.TenantService.Update:input_type -> api.UpdateTenantRequest
8, // 20: api.TenantService.List:input_type -> api.ListTenantsRequest 7, // 20: api.TenantService.Delete:input_type -> api.DeleteTenantRequest
12, // 21: api.TenantService.AddUser:input_type -> api.AddTenantUserRequest 8, // 21: api.TenantService.List:input_type -> api.ListTenantsRequest
13, // 22: api.TenantService.GetUser:input_type -> api.GetTenantUserRequest 12, // 22: api.TenantService.AddUser:input_type -> api.AddTenantUserRequest
15, // 23: api.TenantService.UpdateUser:input_type -> api.UpdateTenantUserRequest 13, // 23: api.TenantService.GetUser:input_type -> api.GetTenantUserRequest
16, // 24: api.TenantService.DeleteUser:input_type -> api.DeleteTenantUserRequest 15, // 24: api.TenantService.UpdateUser:input_type -> api.UpdateTenantUserRequest
17, // 25: api.TenantService.ListUsers:input_type -> api.ListTenantUsersRequest 16, // 25: api.TenantService.DeleteUser:input_type -> api.DeleteTenantUserRequest
3, // 26: api.TenantService.Create:output_type -> api.CreateTenantResponse 17, // 26: api.TenantService.ListUsers:input_type -> api.ListTenantUsersRequest
5, // 27: api.TenantService.Get:output_type -> api.GetTenantResponse 3, // 27: api.TenantService.Create:output_type -> api.CreateTenantResponse
20, // 28: api.TenantService.Update:output_type -> google.protobuf.Empty 5, // 28: api.TenantService.Get:output_type -> api.GetTenantResponse
20, // 29: api.TenantService.Delete:output_type -> google.protobuf.Empty 21, // 29: api.TenantService.Update:output_type -> google.protobuf.Empty
9, // 30: api.TenantService.List:output_type -> api.ListTenantsResponse 21, // 30: api.TenantService.Delete:output_type -> google.protobuf.Empty
20, // 31: api.TenantService.AddUser:output_type -> google.protobuf.Empty 9, // 31: api.TenantService.List:output_type -> api.ListTenantsResponse
14, // 32: api.TenantService.GetUser:output_type -> api.GetTenantUserResponse 21, // 32: api.TenantService.AddUser:output_type -> google.protobuf.Empty
20, // 33: api.TenantService.UpdateUser:output_type -> google.protobuf.Empty 14, // 33: api.TenantService.GetUser:output_type -> api.GetTenantUserResponse
20, // 34: api.TenantService.DeleteUser:output_type -> google.protobuf.Empty 21, // 34: api.TenantService.UpdateUser:output_type -> google.protobuf.Empty
18, // 35: api.TenantService.ListUsers:output_type -> api.ListTenantUsersResponse 21, // 35: api.TenantService.DeleteUser:output_type -> google.protobuf.Empty
26, // [26:36] is the sub-list for method output_type 18, // 36: api.TenantService.ListUsers:output_type -> api.ListTenantUsersResponse
16, // [16:26] is the sub-list for method input_type 27, // [27:37] is the sub-list for method output_type
16, // [16:16] is the sub-list for extension type_name 17, // [17:27] is the sub-list for method input_type
16, // [16:16] is the sub-list for extension extendee 17, // [17:17] is the sub-list for extension type_name
0, // [0:16] is the sub-list for field type_name 17, // [17:17] is the sub-list for extension extendee
0, // [0:17] is the sub-list for field type_name
} }
func init() { file_api_tenant_proto_init() } func init() { file_api_tenant_proto_init() }
@ -1878,7 +1898,7 @@ func file_api_tenant_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_api_tenant_proto_rawDesc, RawDescriptor: file_api_tenant_proto_rawDesc,
NumEnums: 0, NumEnums: 0,
NumMessages: 19, NumMessages: 20,
NumExtensions: 0, NumExtensions: 0,
NumServices: 1, NumServices: 1,
}, },

View File

@ -18,6 +18,9 @@ export class Application extends jspb.Message {
getTenantId(): string; getTenantId(): string;
setTenantId(value: string): Application; setTenantId(value: string): Application;
getTagsMap(): jspb.Map<string, string>;
clearTagsMap(): Application;
serializeBinary(): Uint8Array; serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): Application.AsObject; toObject(includeInstance?: boolean): Application.AsObject;
static toObject(includeInstance: boolean, msg: Application): Application.AsObject; static toObject(includeInstance: boolean, msg: Application): Application.AsObject;
@ -32,6 +35,7 @@ export namespace Application {
name: string, name: string,
description: string, description: string,
tenantId: string, tenantId: string,
tagsMap: Array<[string, string]>,
} }
} }

View File

@ -1729,7 +1729,8 @@ proto.api.Application.toObject = function(includeInstance, msg) {
id: jspb.Message.getFieldWithDefault(msg, 1, ""), id: jspb.Message.getFieldWithDefault(msg, 1, ""),
name: jspb.Message.getFieldWithDefault(msg, 2, ""), name: jspb.Message.getFieldWithDefault(msg, 2, ""),
description: jspb.Message.getFieldWithDefault(msg, 3, ""), description: jspb.Message.getFieldWithDefault(msg, 3, ""),
tenantId: jspb.Message.getFieldWithDefault(msg, 4, "") tenantId: jspb.Message.getFieldWithDefault(msg, 4, ""),
tagsMap: (f = msg.getTagsMap()) ? f.toObject(includeInstance, undefined) : []
}; };
if (includeInstance) { if (includeInstance) {
@ -1782,6 +1783,12 @@ proto.api.Application.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {string} */ (reader.readString()); var value = /** @type {string} */ (reader.readString());
msg.setTenantId(value); msg.setTenantId(value);
break; break;
case 5:
var value = msg.getTagsMap();
reader.readMessage(value, function(message, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
});
break;
default: default:
reader.skipField(); reader.skipField();
break; break;
@ -1839,6 +1846,10 @@ proto.api.Application.serializeBinaryToWriter = function(message, writer) {
f f
); );
} }
f = message.getTagsMap(true);
if (f && f.getLength() > 0) {
f.serializeBinary(5, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
}
}; };
@ -1914,6 +1925,28 @@ proto.api.Application.prototype.setTenantId = function(value) {
}; };
/**
* map<string, string> tags = 5;
* @param {boolean=} opt_noLazyCreate Do not create the map if
* empty, instead returning `undefined`
* @return {!jspb.Map<string,string>}
*/
proto.api.Application.prototype.getTagsMap = function(opt_noLazyCreate) {
return /** @type {!jspb.Map<string,string>} */ (
jspb.Message.getMapField(this, 5, opt_noLazyCreate,
null));
};
/**
* Clears values from the map. The map will be non-null.
* @return {!proto.api.Application} returns this
*/
proto.api.Application.prototype.clearTagsMap = function() {
this.getTagsMap().clear();
return this;};

View File

@ -30,6 +30,9 @@ export class Tenant extends jspb.Message {
getPrivateGatewaysDown(): boolean; getPrivateGatewaysDown(): boolean;
setPrivateGatewaysDown(value: boolean): Tenant; setPrivateGatewaysDown(value: boolean): Tenant;
getTagsMap(): jspb.Map<string, string>;
clearTagsMap(): Tenant;
serializeBinary(): Uint8Array; serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): Tenant.AsObject; toObject(includeInstance?: boolean): Tenant.AsObject;
static toObject(includeInstance: boolean, msg: Tenant): Tenant.AsObject; static toObject(includeInstance: boolean, msg: Tenant): Tenant.AsObject;
@ -48,6 +51,7 @@ export namespace Tenant {
maxDeviceCount: number, maxDeviceCount: number,
privateGatewaysUp: boolean, privateGatewaysUp: boolean,
privateGatewaysDown: boolean, privateGatewaysDown: boolean,
tagsMap: Array<[string, string]>,
} }
} }

View File

@ -475,7 +475,8 @@ proto.api.Tenant.toObject = function(includeInstance, msg) {
maxGatewayCount: jspb.Message.getFieldWithDefault(msg, 5, 0), maxGatewayCount: jspb.Message.getFieldWithDefault(msg, 5, 0),
maxDeviceCount: jspb.Message.getFieldWithDefault(msg, 6, 0), maxDeviceCount: jspb.Message.getFieldWithDefault(msg, 6, 0),
privateGatewaysUp: jspb.Message.getBooleanFieldWithDefault(msg, 7, false), privateGatewaysUp: jspb.Message.getBooleanFieldWithDefault(msg, 7, false),
privateGatewaysDown: jspb.Message.getBooleanFieldWithDefault(msg, 8, false) privateGatewaysDown: jspb.Message.getBooleanFieldWithDefault(msg, 8, false),
tagsMap: (f = msg.getTagsMap()) ? f.toObject(includeInstance, undefined) : []
}; };
if (includeInstance) { if (includeInstance) {
@ -544,6 +545,12 @@ proto.api.Tenant.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {boolean} */ (reader.readBool()); var value = /** @type {boolean} */ (reader.readBool());
msg.setPrivateGatewaysDown(value); msg.setPrivateGatewaysDown(value);
break; break;
case 9:
var value = msg.getTagsMap();
reader.readMessage(value, function(message, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
});
break;
default: default:
reader.skipField(); reader.skipField();
break; break;
@ -629,6 +636,10 @@ proto.api.Tenant.serializeBinaryToWriter = function(message, writer) {
f f
); );
} }
f = message.getTagsMap(true);
if (f && f.getLength() > 0) {
f.serializeBinary(9, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
}
}; };
@ -776,6 +787,28 @@ proto.api.Tenant.prototype.setPrivateGatewaysDown = function(value) {
}; };
/**
* map<string, string> tags = 9;
* @param {boolean=} opt_noLazyCreate Do not create the map if
* empty, instead returning `undefined`
* @return {!jspb.Map<string,string>}
*/
proto.api.Tenant.prototype.getTagsMap = function(opt_noLazyCreate) {
return /** @type {!jspb.Map<string,string>} */ (
jspb.Message.getMapField(this, 9, opt_noLazyCreate,
null));
};
/**
* Clears values from the map. The map will be non-null.
* @return {!proto.api.Tenant} returns this
*/
proto.api.Tenant.prototype.clearTagsMap = function() {
this.getTagsMap().clear();
return this;};

View File

@ -19,6 +19,8 @@ export class Application extends jspb.Message {
getTenantId(): string; getTenantId(): string;
setTenantId(value: string): void; setTenantId(value: string): void;
getTagsMap(): jspb.Map<string, string>;
clearTagsMap(): void;
serializeBinary(): Uint8Array; serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): Application.AsObject; toObject(includeInstance?: boolean): Application.AsObject;
static toObject(includeInstance: boolean, msg: Application): Application.AsObject; static toObject(includeInstance: boolean, msg: Application): Application.AsObject;
@ -35,6 +37,7 @@ export namespace Application {
name: string, name: string,
description: string, description: string,
tenantId: string, tenantId: string,
tagsMap: Array<[string, string]>,
} }
} }

View File

@ -1729,7 +1729,8 @@ proto.api.Application.toObject = function(includeInstance, msg) {
id: jspb.Message.getFieldWithDefault(msg, 1, ""), id: jspb.Message.getFieldWithDefault(msg, 1, ""),
name: jspb.Message.getFieldWithDefault(msg, 2, ""), name: jspb.Message.getFieldWithDefault(msg, 2, ""),
description: jspb.Message.getFieldWithDefault(msg, 3, ""), description: jspb.Message.getFieldWithDefault(msg, 3, ""),
tenantId: jspb.Message.getFieldWithDefault(msg, 4, "") tenantId: jspb.Message.getFieldWithDefault(msg, 4, ""),
tagsMap: (f = msg.getTagsMap()) ? f.toObject(includeInstance, undefined) : []
}; };
if (includeInstance) { if (includeInstance) {
@ -1782,6 +1783,12 @@ proto.api.Application.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {string} */ (reader.readString()); var value = /** @type {string} */ (reader.readString());
msg.setTenantId(value); msg.setTenantId(value);
break; break;
case 5:
var value = msg.getTagsMap();
reader.readMessage(value, function(message, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
});
break;
default: default:
reader.skipField(); reader.skipField();
break; break;
@ -1839,6 +1846,10 @@ proto.api.Application.serializeBinaryToWriter = function(message, writer) {
f f
); );
} }
f = message.getTagsMap(true);
if (f && f.getLength() > 0) {
f.serializeBinary(5, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
}
}; };
@ -1914,6 +1925,28 @@ proto.api.Application.prototype.setTenantId = function(value) {
}; };
/**
* map<string, string> tags = 5;
* @param {boolean=} opt_noLazyCreate Do not create the map if
* empty, instead returning `undefined`
* @return {!jspb.Map<string,string>}
*/
proto.api.Application.prototype.getTagsMap = function(opt_noLazyCreate) {
return /** @type {!jspb.Map<string,string>} */ (
jspb.Message.getMapField(this, 5, opt_noLazyCreate,
null));
};
/**
* Clears values from the map. The map will be non-null.
* @return {!proto.api.Application} returns this
*/
proto.api.Application.prototype.clearTagsMap = function() {
this.getTagsMap().clear();
return this;};

View File

@ -119,7 +119,8 @@ function deserialize_google_protobuf_Empty(buffer_arg) {
} }
// DeviceProfileService is the service providing API methods for managing device-profiles. // DeviceProfileService is the service providing API methods for managing
// device-profiles.
var DeviceProfileServiceService = exports.DeviceProfileServiceService = { var DeviceProfileServiceService = exports.DeviceProfileServiceService = {
// Create the given device-profile. // Create the given device-profile.
create: { create: {

View File

@ -31,6 +31,8 @@ export class Tenant extends jspb.Message {
getPrivateGatewaysDown(): boolean; getPrivateGatewaysDown(): boolean;
setPrivateGatewaysDown(value: boolean): void; setPrivateGatewaysDown(value: boolean): void;
getTagsMap(): jspb.Map<string, string>;
clearTagsMap(): void;
serializeBinary(): Uint8Array; serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): Tenant.AsObject; toObject(includeInstance?: boolean): Tenant.AsObject;
static toObject(includeInstance: boolean, msg: Tenant): Tenant.AsObject; static toObject(includeInstance: boolean, msg: Tenant): Tenant.AsObject;
@ -51,6 +53,7 @@ export namespace Tenant {
maxDeviceCount: number, maxDeviceCount: number,
privateGatewaysUp: boolean, privateGatewaysUp: boolean,
privateGatewaysDown: boolean, privateGatewaysDown: boolean,
tagsMap: Array<[string, string]>,
} }
} }

View File

@ -475,7 +475,8 @@ proto.api.Tenant.toObject = function(includeInstance, msg) {
maxGatewayCount: jspb.Message.getFieldWithDefault(msg, 5, 0), maxGatewayCount: jspb.Message.getFieldWithDefault(msg, 5, 0),
maxDeviceCount: jspb.Message.getFieldWithDefault(msg, 6, 0), maxDeviceCount: jspb.Message.getFieldWithDefault(msg, 6, 0),
privateGatewaysUp: jspb.Message.getBooleanFieldWithDefault(msg, 7, false), privateGatewaysUp: jspb.Message.getBooleanFieldWithDefault(msg, 7, false),
privateGatewaysDown: jspb.Message.getBooleanFieldWithDefault(msg, 8, false) privateGatewaysDown: jspb.Message.getBooleanFieldWithDefault(msg, 8, false),
tagsMap: (f = msg.getTagsMap()) ? f.toObject(includeInstance, undefined) : []
}; };
if (includeInstance) { if (includeInstance) {
@ -544,6 +545,12 @@ proto.api.Tenant.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {boolean} */ (reader.readBool()); var value = /** @type {boolean} */ (reader.readBool());
msg.setPrivateGatewaysDown(value); msg.setPrivateGatewaysDown(value);
break; break;
case 9:
var value = msg.getTagsMap();
reader.readMessage(value, function(message, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
});
break;
default: default:
reader.skipField(); reader.skipField();
break; break;
@ -629,6 +636,10 @@ proto.api.Tenant.serializeBinaryToWriter = function(message, writer) {
f f
); );
} }
f = message.getTagsMap(true);
if (f && f.getLength() > 0) {
f.serializeBinary(9, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
}
}; };
@ -776,6 +787,28 @@ proto.api.Tenant.prototype.setPrivateGatewaysDown = function(value) {
}; };
/**
* map<string, string> tags = 9;
* @param {boolean=} opt_noLazyCreate Do not create the map if
* empty, instead returning `undefined`
* @return {!jspb.Map<string,string>}
*/
proto.api.Tenant.prototype.getTagsMap = function(opt_noLazyCreate) {
return /** @type {!jspb.Map<string,string>} */ (
jspb.Message.getMapField(this, 9, opt_noLazyCreate,
null));
};
/**
* Clears values from the map. The map will be non-null.
* @return {!proto.api.Tenant} returns this
*/
proto.api.Tenant.prototype.clearTagsMap = function() {
this.getTagsMap().clear();
return this;};

43
api/md/api/api.md vendored
View File

@ -5,6 +5,7 @@
- [api/application.proto](#api_application-proto) - [api/application.proto](#api_application-proto)
- [Application](#api-Application) - [Application](#api-Application)
- [Application.TagsEntry](#api-Application-TagsEntry)
- [ApplicationListItem](#api-ApplicationListItem) - [ApplicationListItem](#api-ApplicationListItem)
- [AwsSnsIntegration](#api-AwsSnsIntegration) - [AwsSnsIntegration](#api-AwsSnsIntegration)
- [AzureServiceBusIntegration](#api-AzureServiceBusIntegration) - [AzureServiceBusIntegration](#api-AzureServiceBusIntegration)
@ -227,6 +228,7 @@
- [ListTenantsRequest](#api-ListTenantsRequest) - [ListTenantsRequest](#api-ListTenantsRequest)
- [ListTenantsResponse](#api-ListTenantsResponse) - [ListTenantsResponse](#api-ListTenantsResponse)
- [Tenant](#api-Tenant) - [Tenant](#api-Tenant)
- [Tenant.TagsEntry](#api-Tenant-TagsEntry)
- [TenantListItem](#api-TenantListItem) - [TenantListItem](#api-TenantListItem)
- [TenantUser](#api-TenantUser) - [TenantUser](#api-TenantUser)
- [TenantUserListItem](#api-TenantUserListItem) - [TenantUserListItem](#api-TenantUserListItem)
@ -274,6 +276,23 @@
| name | [string](#string) | | Application name. | | name | [string](#string) | | Application name. |
| description | [string](#string) | | Application description. | | description | [string](#string) | | Application description. |
| tenant_id | [string](#string) | | Tenant ID (UUID). | | tenant_id | [string](#string) | | Tenant ID (UUID). |
| tags | [Application.TagsEntry](#api-Application-TagsEntry) | repeated | Tags (user defined). These tags can be used to add additional information to the application. These tags are exposed in all the integration events of devices under this application. |
<a name="api-Application-TagsEntry"></a>
### Application.TagsEntry
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| key | [string](#string) | | |
| value | [string](#string) | | |
@ -1726,7 +1745,7 @@ applications.
| skip_fcnt_check | [bool](#bool) | | Skip frame-counter checks (this is insecure, but could be helpful for debugging). | | skip_fcnt_check | [bool](#bool) | | Skip frame-counter checks (this is insecure, but could be helpful for debugging). |
| is_disabled | [bool](#bool) | | Device is disabled. | | is_disabled | [bool](#bool) | | Device is disabled. |
| variables | [Device.VariablesEntry](#api-Device-VariablesEntry) | repeated | Variables (user defined). These variables can be used together with integrations to store tokens / secrets that must be configured per device. These variables are not exposed in the event payloads. | | variables | [Device.VariablesEntry](#api-Device-VariablesEntry) | repeated | Variables (user defined). These variables can be used together with integrations to store tokens / secrets that must be configured per device. These variables are not exposed in the event payloads. |
| tags | [Device.TagsEntry](#api-Device-TagsEntry) | repeated | Tags (user defined). These tags are exposed in the event payloads or to integration. Tags are intended for aggregation and filtering. | | tags | [Device.TagsEntry](#api-Device-TagsEntry) | repeated | Tags (user defined). These tags can be used to add additional information to the device. These tags are exposed in all the integration events. |
| join_eui | [string](#string) | | JoinEUI (optional, EUI64). This field will be automatically set / updated on OTAA. However, in some cases it must be pre-configured. For example to allow OTAA using a Relay. In this case the Relay needs to know the JoinEUI &#43; DevEUI combinations of the devices for which it needs to forward uplinks. | | join_eui | [string](#string) | | JoinEUI (optional, EUI64). This field will be automatically set / updated on OTAA. However, in some cases it must be pre-configured. For example to allow OTAA using a Relay. In this case the Relay needs to know the JoinEUI &#43; DevEUI combinations of the devices for which it needs to forward uplinks. |
@ -2444,7 +2463,7 @@ The actual number of ping-slots per beacon period equals to 2^k. |
| abp_rx1_dr_offset | [uint32](#uint32) | | RX1 DR offset (for ABP). | | abp_rx1_dr_offset | [uint32](#uint32) | | RX1 DR offset (for ABP). |
| abp_rx2_dr | [uint32](#uint32) | | RX2 DR (for ABP). | | abp_rx2_dr | [uint32](#uint32) | | RX2 DR (for ABP). |
| abp_rx2_freq | [uint32](#uint32) | | RX2 frequency (for ABP, Hz). | | abp_rx2_freq | [uint32](#uint32) | | RX2 frequency (for ABP, Hz). |
| tags | [DeviceProfile.TagsEntry](#api-DeviceProfile-TagsEntry) | repeated | User defined tags. | | tags | [DeviceProfile.TagsEntry](#api-DeviceProfile-TagsEntry) | repeated | Tags (user defined). These tags can be used to add additional information the the device-profile. These tags are exposed in all the integration events of devices using this device-profile. |
| measurements | [DeviceProfile.MeasurementsEntry](#api-DeviceProfile-MeasurementsEntry) | repeated | Measurements. If defined, ChirpStack will visualize these metrics in the web-interface. | | measurements | [DeviceProfile.MeasurementsEntry](#api-DeviceProfile-MeasurementsEntry) | repeated | Measurements. If defined, ChirpStack will visualize these metrics in the web-interface. |
| auto_detect_measurements | [bool](#bool) | | Auto-detect measurements. If set to true, measurements will be automatically added based on the keys of the decoded payload. In cases where the decoded payload contains random keys in the data, you want to set this to false. | | auto_detect_measurements | [bool](#bool) | | Auto-detect measurements. If set to true, measurements will be automatically added based on the keys of the decoded payload. In cases where the decoded payload contains random keys in the data, you want to set this to false. |
| region_config_id | [string](#string) | | Region configuration ID. If set, devices will only use the associated region. If let blank, then devices will use all regions matching the selected common-name. Note that multiple region configurations can exist for the same common-name, e.g. to provide an 8 channel and 16 channel configuration for the US915 band. | | region_config_id | [string](#string) | | Region configuration ID. If set, devices will only use the associated region. If let blank, then devices will use all regions matching the selected common-name. Note that multiple region configurations can exist for the same common-name, e.g. to provide an 8 channel and 16 channel configuration for the US915 band. |
@ -2758,7 +2777,8 @@ Valid values (0 - 3): 0 = 1 1 = 2 2 = 4 3 = 12 |
<a name="api-DeviceProfileService"></a> <a name="api-DeviceProfileService"></a>
### DeviceProfileService ### DeviceProfileService
DeviceProfileService is the service providing API methods for managing device-profiles. DeviceProfileService is the service providing API methods for managing
device-profiles.
| Method Name | Request Type | Response Type | Description | | Method Name | Request Type | Response Type | Description |
| ----------- | ------------ | ------------- | ------------| | ----------- | ------------ | ------------- | ------------|
@ -3782,6 +3802,23 @@ MulticastGroupService is the service managing multicast-groups.
| max_device_count | [uint32](#uint32) | | Max. device count for tenant. When set to 0, the tenant can have unlimited devices. | | max_device_count | [uint32](#uint32) | | Max. device count for tenant. When set to 0, the tenant can have unlimited devices. |
| private_gateways_up | [bool](#bool) | | Private gateways (uplink). If enabled, then uplink messages will not be shared with other tenants. | | private_gateways_up | [bool](#bool) | | Private gateways (uplink). If enabled, then uplink messages will not be shared with other tenants. |
| private_gateways_down | [bool](#bool) | | Private gateways (downlink). If enabled, then other tenants will not be able to schedule downlink messages through the gateways of this tenant. For example, in case you do want to share uplinks with other tenants (private_gateways_up=false), but you want to prevent other tenants from using gateway airtime. | | private_gateways_down | [bool](#bool) | | Private gateways (downlink). If enabled, then other tenants will not be able to schedule downlink messages through the gateways of this tenant. For example, in case you do want to share uplinks with other tenants (private_gateways_up=false), but you want to prevent other tenants from using gateway airtime. |
| tags | [Tenant.TagsEntry](#api-Tenant-TagsEntry) | repeated | Tags (user defined). These tags can be used to add additional information to the tenant. These tags are NOT exposed in the integration events. |
<a name="api-Tenant-TagsEntry"></a>
### Tenant.TagsEntry
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| key | [string](#string) | | |
| value | [string](#string) | | |

View File

@ -459,6 +459,12 @@ message Application {
// Tenant ID (UUID). // Tenant ID (UUID).
string tenant_id = 4; string tenant_id = 4;
// Tags (user defined).
// These tags can be used to add additional information to the application.
// These tags are exposed in all the integration events of devices under
// this application.
map<string, string> tags = 5;
} }
message ApplicationListItem { message ApplicationListItem {

View File

@ -208,8 +208,8 @@ message Device {
map<string, string> variables = 8; map<string, string> variables = 8;
// Tags (user defined). // Tags (user defined).
// These tags are exposed in the event payloads or to integration. Tags are // These tags can be used to add additional information to the device.
// intended for aggregation and filtering. // These tags are exposed in all the integration events.
map<string, string> tags = 9; map<string, string> tags = 9;
// JoinEUI (optional, EUI64). // JoinEUI (optional, EUI64).

View File

@ -28,7 +28,8 @@ enum MeasurementKind {
// Unknown (in which case it is not tracked). // Unknown (in which case it is not tracked).
UNKNOWN = 0; UNKNOWN = 0;
// Incrementing counters that never decrease (these are not reset on each reading). // Incrementing counters that never decrease (these are not reset on each
// reading).
COUNTER = 1; COUNTER = 1;
// Counters that do get reset upon reading. // Counters that do get reset upon reading.
@ -79,7 +80,6 @@ enum SecondChAckOffset {
// 3200 kHz. // 3200 kHz.
KHZ_3200 = 5; KHZ_3200 = 5;
} }
enum RelayModeActivation { enum RelayModeActivation {
@ -96,49 +96,51 @@ enum RelayModeActivation {
END_DEVICE_CONTROLLED = 3; END_DEVICE_CONTROLLED = 3;
} }
// DeviceProfileService is the service providing API methods for managing device-profiles. // DeviceProfileService is the service providing API methods for managing
// device-profiles.
service DeviceProfileService { service DeviceProfileService {
// Create the given device-profile. // Create the given device-profile.
rpc Create(CreateDeviceProfileRequest) returns (CreateDeviceProfileResponse) { rpc Create(CreateDeviceProfileRequest) returns (CreateDeviceProfileResponse) {
option(google.api.http) = { option (google.api.http) = {
post: "/api/device-profiles" post : "/api/device-profiles"
body: "*" body : "*"
}; };
} }
// Get the device-profile for the given ID. // Get the device-profile for the given ID.
rpc Get(GetDeviceProfileRequest) returns (GetDeviceProfileResponse) { rpc Get(GetDeviceProfileRequest) returns (GetDeviceProfileResponse) {
option(google.api.http) = { option (google.api.http) = {
get: "/api/device-profiles/{id}" get : "/api/device-profiles/{id}"
}; };
} }
// Update the given device-profile. // Update the given device-profile.
rpc Update(UpdateDeviceProfileRequest) returns (google.protobuf.Empty) { rpc Update(UpdateDeviceProfileRequest) returns (google.protobuf.Empty) {
option(google.api.http) = { option (google.api.http) = {
put: "/api/device-profiles/{device_profile.id}" put : "/api/device-profiles/{device_profile.id}"
body: "*" body : "*"
}; };
} }
// Delete the device-profile with the given ID. // Delete the device-profile with the given ID.
rpc Delete(DeleteDeviceProfileRequest) returns (google.protobuf.Empty) { rpc Delete(DeleteDeviceProfileRequest) returns (google.protobuf.Empty) {
option(google.api.http) = { option (google.api.http) = {
delete: "/api/device-profiles/{id}" delete : "/api/device-profiles/{id}"
}; };
} }
// List the available device-profiles. // List the available device-profiles.
rpc List(ListDeviceProfilesRequest) returns (ListDeviceProfilesResponse) { rpc List(ListDeviceProfilesRequest) returns (ListDeviceProfilesResponse) {
option(google.api.http) = { option (google.api.http) = {
get: "/api/device-profiles" get : "/api/device-profiles"
}; };
} }
// List available ADR algorithms. // List available ADR algorithms.
rpc ListAdrAlgorithms(google.protobuf.Empty) returns (ListDeviceProfileAdrAlgorithmsResponse) { rpc ListAdrAlgorithms(google.protobuf.Empty)
option(google.api.http) = { returns (ListDeviceProfileAdrAlgorithmsResponse) {
get: "/api/device-profiles/adr-algorithms" option (google.api.http) = {
get : "/api/device-profiles/adr-algorithms"
}; };
} }
} }
@ -185,8 +187,8 @@ message DeviceProfile {
uint32 uplink_interval = 11; uint32 uplink_interval = 11;
// Device-status request interval (times / day). // Device-status request interval (times / day).
// This defines the times per day that ChirpStack will request the device-status // This defines the times per day that ChirpStack will request the
// from the device. // device-status from the device.
uint32 device_status_req_interval = 12; uint32 device_status_req_interval = 12;
// Supports OTAA. // Supports OTAA.
@ -199,7 +201,8 @@ message DeviceProfile {
bool supports_class_c = 15; bool supports_class_c = 15;
// Class-B timeout (seconds). // Class-B timeout (seconds).
// This is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested). // This is the maximum time ChirpStack will wait to receive an acknowledgement
// from the device (if requested).
uint32 class_b_timeout = 16; uint32 class_b_timeout = 16;
// Class-B ping-slots per beacon period. // Class-B ping-slots per beacon period.
@ -215,7 +218,8 @@ message DeviceProfile {
uint32 class_b_ping_slot_freq = 19; uint32 class_b_ping_slot_freq = 19;
// Class-C timeout (seconds). // Class-C timeout (seconds).
// This is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested). // This is the maximum time ChirpStack will wait to receive an acknowledgement
// from the device (if requested).
uint32 class_c_timeout = 20; uint32 class_c_timeout = 20;
// RX1 delay (for ABP). // RX1 delay (for ABP).
@ -230,7 +234,10 @@ message DeviceProfile {
// RX2 frequency (for ABP, Hz). // RX2 frequency (for ABP, Hz).
uint32 abp_rx2_freq = 24; uint32 abp_rx2_freq = 24;
// User defined tags. // Tags (user defined).
// These tags can be used to add additional information the the
// device-profile. These tags are exposed in all the integration events of
// devices using this device-profile.
map<string, string> tags = 25; map<string, string> tags = 25;
// Measurements. // Measurements.

View File

@ -16,76 +16,76 @@ import "google/protobuf/empty.proto";
service TenantService { service TenantService {
// Create a new tenant. // Create a new tenant.
rpc Create(CreateTenantRequest) returns (CreateTenantResponse) { rpc Create(CreateTenantRequest) returns (CreateTenantResponse) {
option(google.api.http) = { option (google.api.http) = {
post: "/api/tenants" post : "/api/tenants"
body: "*" body : "*"
}; };
} }
// Get the tenant for the given ID. // Get the tenant for the given ID.
rpc Get(GetTenantRequest) returns (GetTenantResponse) { rpc Get(GetTenantRequest) returns (GetTenantResponse) {
option(google.api.http) = { option (google.api.http) = {
get: "/api/tenants/{id}" get : "/api/tenants/{id}"
}; };
} }
// Update the given tenant. // Update the given tenant.
rpc Update(UpdateTenantRequest) returns (google.protobuf.Empty) { rpc Update(UpdateTenantRequest) returns (google.protobuf.Empty) {
option(google.api.http) = { option (google.api.http) = {
put: "/api/tenants/{tenant.id}" put : "/api/tenants/{tenant.id}"
body: "*" body : "*"
}; };
} }
// Delete the tenant with the given ID. // Delete the tenant with the given ID.
rpc Delete(DeleteTenantRequest) returns (google.protobuf.Empty) { rpc Delete(DeleteTenantRequest) returns (google.protobuf.Empty) {
option(google.api.http) = { option (google.api.http) = {
delete: "/api/tenants/{id}" delete : "/api/tenants/{id}"
}; };
} }
// Get the list of tenants. // Get the list of tenants.
rpc List(ListTenantsRequest) returns (ListTenantsResponse) { rpc List(ListTenantsRequest) returns (ListTenantsResponse) {
option(google.api.http) = { option (google.api.http) = {
get: "/api/tenants" get : "/api/tenants"
}; };
} }
// Add an user to the tenant. // Add an user to the tenant.
// Note: the user must already exist. // Note: the user must already exist.
rpc AddUser(AddTenantUserRequest) returns (google.protobuf.Empty) { rpc AddUser(AddTenantUserRequest) returns (google.protobuf.Empty) {
option(google.api.http) = { option (google.api.http) = {
post: "/api/tenants/{tenant_user.tenant_id}/users" post : "/api/tenants/{tenant_user.tenant_id}/users"
body: "*" body : "*"
}; };
} }
// Get the the tenant user for the given tenant and user IDs. // Get the the tenant user for the given tenant and user IDs.
rpc GetUser(GetTenantUserRequest) returns (GetTenantUserResponse) { rpc GetUser(GetTenantUserRequest) returns (GetTenantUserResponse) {
option(google.api.http) = { option (google.api.http) = {
get: "/api/tenants/{tenant_id}/users/{user_id}" get : "/api/tenants/{tenant_id}/users/{user_id}"
}; };
} }
// Update the given tenant user. // Update the given tenant user.
rpc UpdateUser(UpdateTenantUserRequest) returns (google.protobuf.Empty) { rpc UpdateUser(UpdateTenantUserRequest) returns (google.protobuf.Empty) {
option(google.api.http) = { option (google.api.http) = {
put: "/api/tenants/{tenant_user.tenant_id}/users/{tenant_user.user_id}" put : "/api/tenants/{tenant_user.tenant_id}/users/{tenant_user.user_id}"
body: "*" body : "*"
}; };
} }
// Delete the given tenant user. // Delete the given tenant user.
rpc DeleteUser(DeleteTenantUserRequest) returns (google.protobuf.Empty) { rpc DeleteUser(DeleteTenantUserRequest) returns (google.protobuf.Empty) {
option(google.api.http) = { option (google.api.http) = {
delete: "/api/tenants/{tenant_id}/users/{user_id}" delete : "/api/tenants/{tenant_id}/users/{user_id}"
}; };
} }
// Get the list of tenant users. // Get the list of tenant users.
rpc ListUsers(ListTenantUsersRequest) returns (ListTenantUsersResponse) { rpc ListUsers(ListTenantUsersRequest) returns (ListTenantUsersResponse) {
option(google.api.http) = { option (google.api.http) = {
get: "/api/tenants/{tenant_id}/users" get : "/api/tenants/{tenant_id}/users"
}; };
} }
} }
@ -122,6 +122,11 @@ message Tenant {
// do want to share uplinks with other tenants (private_gateways_up=false), // do want to share uplinks with other tenants (private_gateways_up=false),
// but you want to prevent other tenants from using gateway airtime. // but you want to prevent other tenants from using gateway airtime.
bool private_gateways_down = 8; bool private_gateways_down = 8;
// Tags (user defined).
// These tags can be used to add additional information to the tenant. These
// tags are NOT exposed in the integration events.
map<string, string> tags = 9;
} }
message TenantListItem { message TenantListItem {

File diff suppressed because one or more lines are too long

View File

@ -64,16 +64,25 @@ INFLUXDB_1: InfluxDbVersion
INFLUXDB_2: InfluxDbVersion INFLUXDB_2: InfluxDbVersion
class Application(_message.Message): class Application(_message.Message):
__slots__ = ["id", "name", "description", "tenant_id"] __slots__ = ["id", "name", "description", "tenant_id", "tags"]
class TagsEntry(_message.Message):
__slots__ = ["key", "value"]
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: str
def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
ID_FIELD_NUMBER: _ClassVar[int] ID_FIELD_NUMBER: _ClassVar[int]
NAME_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int]
DESCRIPTION_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
TENANT_ID_FIELD_NUMBER: _ClassVar[int] TENANT_ID_FIELD_NUMBER: _ClassVar[int]
TAGS_FIELD_NUMBER: _ClassVar[int]
id: str id: str
name: str name: str
description: str description: str
tenant_id: str tenant_id: str
def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., tenant_id: _Optional[str] = ...) -> None: ... tags: _containers.ScalarMap[str, str]
def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., tenant_id: _Optional[str] = ..., tags: _Optional[_Mapping[str, str]] = ...) -> None: ...
class ApplicationListItem(_message.Message): class ApplicationListItem(_message.Message):
__slots__ = ["id", "created_at", "updated_at", "name", "description"] __slots__ = ["id", "created_at", "updated_at", "name", "description"]

View File

@ -7,7 +7,8 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
class DeviceProfileServiceStub(object): class DeviceProfileServiceStub(object):
"""DeviceProfileService is the service providing API methods for managing device-profiles. """DeviceProfileService is the service providing API methods for managing
device-profiles.
""" """
def __init__(self, channel): def __init__(self, channel):
@ -49,7 +50,8 @@ class DeviceProfileServiceStub(object):
class DeviceProfileServiceServicer(object): class DeviceProfileServiceServicer(object):
"""DeviceProfileService is the service providing API methods for managing device-profiles. """DeviceProfileService is the service providing API methods for managing
device-profiles.
""" """
def Create(self, request, context): def Create(self, request, context):
@ -135,7 +137,8 @@ def add_DeviceProfileServiceServicer_to_server(servicer, server):
# This class is part of an EXPERIMENTAL API. # This class is part of an EXPERIMENTAL API.
class DeviceProfileService(object): class DeviceProfileService(object):
"""DeviceProfileService is the service providing API methods for managing device-profiles. """DeviceProfileService is the service providing API methods for managing
device-profiles.
""" """
@staticmethod @staticmethod

File diff suppressed because one or more lines are too long

View File

@ -9,7 +9,14 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor DESCRIPTOR: _descriptor.FileDescriptor
class Tenant(_message.Message): class Tenant(_message.Message):
__slots__ = ["id", "name", "description", "can_have_gateways", "max_gateway_count", "max_device_count", "private_gateways_up", "private_gateways_down"] __slots__ = ["id", "name", "description", "can_have_gateways", "max_gateway_count", "max_device_count", "private_gateways_up", "private_gateways_down", "tags"]
class TagsEntry(_message.Message):
__slots__ = ["key", "value"]
KEY_FIELD_NUMBER: _ClassVar[int]
VALUE_FIELD_NUMBER: _ClassVar[int]
key: str
value: str
def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
ID_FIELD_NUMBER: _ClassVar[int] ID_FIELD_NUMBER: _ClassVar[int]
NAME_FIELD_NUMBER: _ClassVar[int] NAME_FIELD_NUMBER: _ClassVar[int]
DESCRIPTION_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
@ -18,6 +25,7 @@ class Tenant(_message.Message):
MAX_DEVICE_COUNT_FIELD_NUMBER: _ClassVar[int] MAX_DEVICE_COUNT_FIELD_NUMBER: _ClassVar[int]
PRIVATE_GATEWAYS_UP_FIELD_NUMBER: _ClassVar[int] PRIVATE_GATEWAYS_UP_FIELD_NUMBER: _ClassVar[int]
PRIVATE_GATEWAYS_DOWN_FIELD_NUMBER: _ClassVar[int] PRIVATE_GATEWAYS_DOWN_FIELD_NUMBER: _ClassVar[int]
TAGS_FIELD_NUMBER: _ClassVar[int]
id: str id: str
name: str name: str
description: str description: str
@ -26,7 +34,8 @@ class Tenant(_message.Message):
max_device_count: int max_device_count: int
private_gateways_up: bool private_gateways_up: bool
private_gateways_down: bool private_gateways_down: bool
def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., can_have_gateways: bool = ..., max_gateway_count: _Optional[int] = ..., max_device_count: _Optional[int] = ..., private_gateways_up: bool = ..., private_gateways_down: bool = ...) -> None: ... tags: _containers.ScalarMap[str, str]
def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., can_have_gateways: bool = ..., max_gateway_count: _Optional[int] = ..., max_device_count: _Optional[int] = ..., private_gateways_up: bool = ..., private_gateways_down: bool = ..., tags: _Optional[_Mapping[str, str]] = ...) -> None: ...
class TenantListItem(_message.Message): class TenantListItem(_message.Message):
__slots__ = ["id", "created_at", "updated_at", "name", "can_have_gateways", "private_gateways_up", "private_gateways_down", "max_gateway_count", "max_device_count"] __slots__ = ["id", "created_at", "updated_at", "name", "can_have_gateways", "private_gateways_up", "private_gateways_down", "max_gateway_count", "max_device_count"]

View File

@ -28,7 +28,8 @@ enum MeasurementKind {
// Unknown (in which case it is not tracked). // Unknown (in which case it is not tracked).
UNKNOWN = 0; UNKNOWN = 0;
// Incrementing counters that never decrease (these are not reset on each reading). // Incrementing counters that never decrease (these are not reset on each
// reading).
COUNTER = 1; COUNTER = 1;
// Counters that do get reset upon reading. // Counters that do get reset upon reading.
@ -79,7 +80,6 @@ enum SecondChAckOffset {
// 3200 kHz. // 3200 kHz.
KHZ_3200 = 5; KHZ_3200 = 5;
} }
enum RelayModeActivation { enum RelayModeActivation {
@ -96,49 +96,51 @@ enum RelayModeActivation {
END_DEVICE_CONTROLLED = 3; END_DEVICE_CONTROLLED = 3;
} }
// DeviceProfileService is the service providing API methods for managing device-profiles. // DeviceProfileService is the service providing API methods for managing
// device-profiles.
service DeviceProfileService { service DeviceProfileService {
// Create the given device-profile. // Create the given device-profile.
rpc Create(CreateDeviceProfileRequest) returns (CreateDeviceProfileResponse) { rpc Create(CreateDeviceProfileRequest) returns (CreateDeviceProfileResponse) {
option(google.api.http) = { option (google.api.http) = {
post: "/api/device-profiles" post : "/api/device-profiles"
body: "*" body : "*"
}; };
} }
// Get the device-profile for the given ID. // Get the device-profile for the given ID.
rpc Get(GetDeviceProfileRequest) returns (GetDeviceProfileResponse) { rpc Get(GetDeviceProfileRequest) returns (GetDeviceProfileResponse) {
option(google.api.http) = { option (google.api.http) = {
get: "/api/device-profiles/{id}" get : "/api/device-profiles/{id}"
}; };
} }
// Update the given device-profile. // Update the given device-profile.
rpc Update(UpdateDeviceProfileRequest) returns (google.protobuf.Empty) { rpc Update(UpdateDeviceProfileRequest) returns (google.protobuf.Empty) {
option(google.api.http) = { option (google.api.http) = {
put: "/api/device-profiles/{device_profile.id}" put : "/api/device-profiles/{device_profile.id}"
body: "*" body : "*"
}; };
} }
// Delete the device-profile with the given ID. // Delete the device-profile with the given ID.
rpc Delete(DeleteDeviceProfileRequest) returns (google.protobuf.Empty) { rpc Delete(DeleteDeviceProfileRequest) returns (google.protobuf.Empty) {
option(google.api.http) = { option (google.api.http) = {
delete: "/api/device-profiles/{id}" delete : "/api/device-profiles/{id}"
}; };
} }
// List the available device-profiles. // List the available device-profiles.
rpc List(ListDeviceProfilesRequest) returns (ListDeviceProfilesResponse) { rpc List(ListDeviceProfilesRequest) returns (ListDeviceProfilesResponse) {
option(google.api.http) = { option (google.api.http) = {
get: "/api/device-profiles" get : "/api/device-profiles"
}; };
} }
// List available ADR algorithms. // List available ADR algorithms.
rpc ListAdrAlgorithms(google.protobuf.Empty) returns (ListDeviceProfileAdrAlgorithmsResponse) { rpc ListAdrAlgorithms(google.protobuf.Empty)
option(google.api.http) = { returns (ListDeviceProfileAdrAlgorithmsResponse) {
get: "/api/device-profiles/adr-algorithms" option (google.api.http) = {
get : "/api/device-profiles/adr-algorithms"
}; };
} }
} }
@ -185,8 +187,8 @@ message DeviceProfile {
uint32 uplink_interval = 11; uint32 uplink_interval = 11;
// Device-status request interval (times / day). // Device-status request interval (times / day).
// This defines the times per day that ChirpStack will request the device-status // This defines the times per day that ChirpStack will request the
// from the device. // device-status from the device.
uint32 device_status_req_interval = 12; uint32 device_status_req_interval = 12;
// Supports OTAA. // Supports OTAA.
@ -199,7 +201,8 @@ message DeviceProfile {
bool supports_class_c = 15; bool supports_class_c = 15;
// Class-B timeout (seconds). // Class-B timeout (seconds).
// This is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested). // This is the maximum time ChirpStack will wait to receive an acknowledgement
// from the device (if requested).
uint32 class_b_timeout = 16; uint32 class_b_timeout = 16;
// Class-B ping-slots per beacon period. // Class-B ping-slots per beacon period.
@ -215,7 +218,8 @@ message DeviceProfile {
uint32 class_b_ping_slot_freq = 19; uint32 class_b_ping_slot_freq = 19;
// Class-C timeout (seconds). // Class-C timeout (seconds).
// This is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested). // This is the maximum time ChirpStack will wait to receive an acknowledgement
// from the device (if requested).
uint32 class_c_timeout = 20; uint32 class_c_timeout = 20;
// RX1 delay (for ABP). // RX1 delay (for ABP).
@ -230,7 +234,10 @@ message DeviceProfile {
// RX2 frequency (for ABP, Hz). // RX2 frequency (for ABP, Hz).
uint32 abp_rx2_freq = 24; uint32 abp_rx2_freq = 24;
// User defined tags. // Tags (user defined).
// These tags can be used to add additional information the the
// device-profile. These tags are exposed in all the integration events of
// devices using this device-profile.
map<string, string> tags = 25; map<string, string> tags = 25;
// Measurements. // Measurements.