From 0629cd77a6be9076c3bd787e85eb58e51cc890db Mon Sep 17 00:00:00 2001 From: JJTech0130 Date: Sat, 21 Oct 2023 15:53:13 -0400 Subject: [PATCH] starting cloudkit --- examples/cloudkit.proto | 592 +++++++++++++++++++++++++++++++++++++++ examples/cloudkit.py | 264 +++++++++++++++++ examples/cloudkit_pb2.py | 148 ++++++++++ 3 files changed, 1004 insertions(+) create mode 100644 examples/cloudkit.proto create mode 100644 examples/cloudkit.py create mode 100644 examples/cloudkit_pb2.py diff --git a/examples/cloudkit.proto b/examples/cloudkit.proto new file mode 100644 index 0000000..1140458 --- /dev/null +++ b/examples/cloudkit.proto @@ -0,0 +1,592 @@ +syntax = "proto2"; + +message RequestOperation { + message Header { + enum ContainerEnvironment { + PRODUCTION = 1; + SANDBOX = 2; + } + + enum Database { + PRIVATE_DB = 1; + PUBLIC_DB = 2; + SHARED_DB = 3; + } + + enum IsolationLevel { + ZONE = 1; + OPERATION = 2; + } + + optional string userToken = 1; + optional string applicationContainer = 2; + optional string applicationBundle = 3; + optional string applicationVersion = 4; + optional uint64 applicationConfigVersion = 5; + optional uint64 globalConfigVersion = 6; + optional Identifier deviceIdentifier = 7; + optional string deviceSoftwareVersion = 8; + optional string deviceHardwareVersion = 9; + optional string deviceLibraryName = 10; + optional string deviceLibraryVersion = 11; + optional string deviceFlowControlKey = 12; + optional uint64 deviceFlowControlBudget = 13; + optional uint64 deviceFlowControlBudgetCap = 14; + optional float deviceFlowControlRegeneration = 15; + optional uint64 deviceProtocolVersion = 16; + optional Locale locale = 17; + optional string mmcsProtocolVersion = 18; + optional ContainerEnvironment applicationContainerEnvironment = 19; + optional bytes clientChangeToken = 20; + optional string deviceAssignedName = 21; + optional string deviceHardwareID = 22; + optional Database targetDatabase = 23; + optional string userIDContainerID = 24; + optional IsolationLevel isolationLevel = 25; + optional int32 unk1 = 29; + optional string unk2 = 32; // UUID + optional string deviceSerial = 33; + optional int32 unk3 = 34; + optional int32 unk4 = 35; + + } + + optional Header header = 1; + optional Operation request = 2; + optional ZoneRetrieveRequest zoneRetrieveRequest = 201; + optional RecordSaveRequest recordSaveRequest = 210; + optional RecordRetrieveRequest recordRetrieveRequest = 211; + optional QueryRetrieveRequest queryRetrieveRequest = 220; + } + + message RecordSaveRequest { + optional Record record = 1; + optional int32 unk1 = 2; // 1 + optional int32 unk2 = 6; // 2 + } + + message ResponseOperation { + message Result { + message Error { + message Client { + enum Code { + UNKNOWN = 1; + EXPIRED_APP_CONFIG = 2; + EXPIRED_GLOBAL_CONFIG = 3; + BAD_SYNTAX = 4; + FORBIDDEN = 5; + THROTTLED = 6; + REFUSED = 7; + NOT_SUPPORTED = 8; + EXISTS = 9; + REQUEST_ALREADY_PROCESSED = 10; + BAD_AUTH_TOKEN = 11; + NEEDS_AUTHENTICATION = 12; + MESCAL_SIGNATURE_MISSING = 13; + INVALID_MESCAL_SIGNATURE = 14; + OP_LOCK_FAILURE = 15; + ATOMIC_FAILURE = 16; + RESET_NEEDED = 17; + FIELDS_PER_TYPE_LIMIT_EXCEEDED = 18; + TYPE_BUSY = 19; + NUM_RECORD_TYPES_LIMIT_EXCEEDED = 20; + INVALID_CONTAINER = 21; + INVALID_RECORD_TYPE_NAME = 22; + INVALID_FIELD_NAME = 23; + INVALID_FIELD_VALUE = 24; + INVALID_IDENTIFIER = 25; + FIELD_NOT_QUERYABLE = 26; + FIELD_NOT_SORTABLE = 27; + QUERY_FILTER_LIMIT_EXCEEDED = 28; + QUERY_FILTER_VALUES_LIMIT_EXCEEDED = 29; + MEMBERSHIP_QUERY_LIMIT_EXCEEDED = 30; + NOTIFICATION_ADDITIONAL_FIELD_LIMIT_EXCEEDED = 31; + NOTIFICATION_ADDITIONAL_FIELD_INVALID_TYPE = 32; + SUBSCRIPTION_LIMIT_EXCEEDED = 33; + UNIQUE_TRIGGER_LIMIT_EXCEEDED = 34; + TRIGGER_SUBSCRIPTION_BINDING_TYPE_MISMATCH = 35; + ZONE_SIZE_LIMIT_EXCEEDED = 36; + ZONE_COUNT_LIMIT_EXCEEDED = 37; + UNIQUE_FIELD_FAILURE = 38; + VALIDATING_REFERENCE_ERROR = 39; + FULL_RESET_NEEDED = 40; + ALREADY_SHARED = 41; + EMAIL_OUT_OF_NETWORK = 42; + DUPLICATE_SUBSCRIPTION = 43; + EXPIRED_PUT_RECEIPT = 46; + QUOTA_EXCEEDED = 47; + ZONE_NOT_FOUND = 48; + INVALID_BUNDLE_ID = 49; + UNSUPPORTED_DEVICE = 50; + BLACK_LISTED = 51; + RECORD_PROTECTION_INFO_TAG_MISMATCH = 52; + ZONE_PROTECTION_INFO_TAG_MISMATCH = 53; + ASSET_SIZE_LIMIT_EXCEEDED = 54; + BATCH_OPERATION_LIMIT_EXCEEDED = 55; + REQUEST_SIZE_LIMIT_EXCEEDED = 56; + RECORD_SIZE_LIMIT_EXCEEDED = 57; + DATABASE_COMMIT_SIZE_EXCEEDED = 58; + USER_DELETED_DATA_FOR_ZONE = 59; + STALE_RECORD_UPDATE = 60; + SHARE_PARTICIPANT_LIMIT_EXCEEDED = 61; + SHARE_PARTICIPANT_ERROR = 62; + } + + optional Code type = 1; + } + + message Server { + enum Code { + UNKNOWN = 1; + OVERLOADED = 2; + NOT_FOUND = 3; + CONTAINER_UNAVAILABLE = 4; + MESCAL_SIGNATURE_PARSE_ERROR = 6; + ZONE_BUSY = 7; + ZONE_UNAVAILABLE = 8; + } + + optional Code type = 1; + } + + message Extension { + optional string extensionName = 1; + optional uint32 typeCode = 2; + optional bytes extensionPayload = 3; + } + + optional Client clientError = 1; + optional Server serverError = 2; + optional Extension extensionError = 7; + optional int32 retryAfterSeconds = 3; + optional string errorDescription = 4; + optional string errorKey = 5; + optional string errorInternal = 6; + } + + enum Code { + SUCCESS = 1; + PARTIAL = 2; + FAILURE = 3; + INDETERMINATE = 4; + } + + optional Code code = 1; + optional Error error = 2; + } + + optional uint32 operationCost = 1; + optional Operation response = 2; + optional Result result = 3; + optional ZoneRetrieveResponse zoneRetrieveResponse = 201; + optional RecordRetrieveResponse recordRetrieveResponse = 211; + optional QueryRetrieveResponse queryRetrieveResponse = 220; + } + + message Operation { + enum Type { + NONE_TYPE = 0; + ZONE_SAVE_TYPE = 200; + ZONE_RETRIEVE_TYPE = 201; + ZONE_DELETE_TYPE = 202; + ZONE_RETRIEVE_CHANGES_TYPE = 203; + RECORD_SAVE_TYPE = 210; + RECORD_RETRIEVE_TYPE = 211; + RECORD_RETRIEVE_VERSIONS_TYPE = 212; + RECORD_RETRIEVE_CHANGES_TYPE = 213; + RECORD_DELETE_TYPE = 214; + QUERY_RETRIEVE_TYPE = 220; + ASSET_UPLOAD_TOKEN_RETRIEVE_TYPE = 230; + CONTAINER_DELETE_TYPE = 240; + CONTAINER_RESET_TYPE = 241; + CONTAINER_SCHEMA_PROMOTION_TYPE = 242; + USER_AVAILABLE_QUOTA_TYPE = 243; + WEB_AUTH_TOKEN_RETRIEVE_TYPE = 250; + SUBSCRIPTION_CREATE_TYPE = 300; + SUBSCRIPTION_RETRIEVE_TYPE = 301; + SUBSCRIPTION_DELETE_TYPE = 302; + USER_RETRIEVE_TYPE = 400; + USER_QUERYTYPE = 401; + USER_PRIVACY_SETTINGS_RETRIEVE_TYPE = 402; + USER_PRIVACY_SETTINGS_UPDATE_TYPE = 403; + USER_PRIVACY_SETTINGS_RESET_TYPE = 404; + USER_PRIVACY_SETTINGS_BATCH_LOOKUP = 405; + SHARE_SAVE_TYPE = 500; + SHARE_RETRIEVE_TYPE = 501; + SHARE_DELETE_TYPE = 502; + SHARE_ACCEPT_TYPE = 503; + SHARE_TOKEN_SAVE_TYPE = 510; + SHARE_TOKEN_RETRIEVE_TYPE = 511; + SHARE_TOKEN_DELETE_TYPE = 512; + POST_COMMENT_TYPE = 600; + GET_COMMENTS_TYPE = 601; + GET_COMMENT_TYPE = 613; + DELETE_COMMENT_TYPE = 602; + LIKE_TYPE = 610; + UNLIKE_TYPE = 611; + GET_LIKES_TYPE = 612; + PULSE_TYPE = 700; + PUSH_REGISTER_TYPE = 800; + PUSH_UNREGISTER_TYPE = 801; + PUSH_BADGE_TYPE = 802; + PUSH_SYNC_TYPE = 803; + PUSH_READ_TYPE = 804; + MESCAL_SIGNATURE_TYPE = 1000; + MESCAL_SESSION_INFO_TYPE = 1001; + MESCAL_CERTIFICATE_TYPE = 1002; + } + + optional string operationUUID = 1; + optional Type type = 2; + optional bool synchronousMode = 3; + optional bool last = 4; + } + + // /api/client/zone/retrieve + message ZoneRetrieveRequest { + optional RecordZoneIdentifier zoneIdentifier = 1; + } + + message ZoneRetrieveResponse { + message ZoneSummary { + optional Zone targetZone = 1; + optional bytes currentServerContinuationToken = 2; + optional bytes clientChangeToken = 3; + optional int32 deviceCount = 4; + optional int64 assetQuotaUsage = 5; + optional int64 metadataQuotaUsage = 6; + } + + repeated ZoneSummary zoneSummary = 1; + } + + // /api/client/record/retrieve + message RecordRetrieveRequest { + message RetrieveAssetURL { + enum Type { + PUBLISHED_URL = 1; + STREAMING_URL = 2; + } + + optional RequestedFields assetFields = 1; + optional int64 requestedTTL = 2; + optional Type type = 3; + } + + optional RecordIdentifier recordIdentifier = 1; + optional RequestedFields requestedFields = 2; + optional string versionETag = 3; + optional string clientVersionETag = 4; + optional RetrieveAssetURL getAssetURL = 5; + optional AssetsToDownload assetsToDownload = 6; + } + + message RecordRetrieveResponse { + optional Record record = 1; + optional bool clientVersionETagMatch = 2; + } + + // /api/client/query/retrieve + message QueryRetrieveRequest { + optional Query query = 1; + optional bytes continuationMarker = 2; + optional uint32 limit = 3; + optional RecordZoneIdentifier zoneIdentifier = 4; + optional RequestedFields requestedFields = 5; + optional AssetsToDownload assetsToDownload = 6; + } + + message QueryRetrieveResponse { + message QueryResult { + enum Type { + ID_AND_ETAG = 1; + FULL_RECORD = 2; + } + + optional RecordIdentifier identifier = 1; + optional string etag = 2; + optional Type type = 3; + optional Record record = 4; + } + + repeated QueryResult queryResults = 1; + optional bytes continuationMarker = 2; + } + + message Query { + message Filter { + enum Type { + EQUALS = 1; + NOT_EQUALS = 2; + IN = 3; + NOT_IN = 4; + LESS_THAN = 5; + LESS_THAN_OR_EQUALS = 6; + GREATER_THAN = 7; + GREATER_THAN_OR_EQUALS = 8; + NEAR = 9; + CONTAINS_ALL_TOKENS = 10; + CONTAINS_ANY_TOKENS = 11; + LIST_CONTAINS = 12; + LIST_NOT_CONTAINS = 13; + LIST_CONTAINS_ANY = 14; + LIST_NOT_CONTAINS_ANY = 15; + BEGINS_WITH = 16; + NOT_BEGINS_WITH = 17; + LIST_MEMBER_BEGINS_WITH = 18; + NOT_LIST_MEMBER_BEGINS_WITH = 19; + LIST_CONTAINS_ALL = 20; + LIST_NOT_CONTAINS_ALL = 21; + UNKNOWN = 22; + } + + optional Record.Field.Identifier fieldName = 1; + optional Record.Field.Value fieldValue = 2; + optional Location.Bound bounds = 3; + optional Type type = 4; + } + + message Sort { + enum Order { + ASCENDING = 1; + DESCENDING = 2; + UNKNOWN = 3; + } + + optional Record.Field.Identifier fieldName= 1; + optional Order order = 2; + optional Location.Coordinate coordinate = 3; + } + + enum QueryOperator { + AND = 1; + OR = 2; + } + + repeated Record.Type types = 1; + repeated Filter filters = 2; + repeated Sort sorts = 3; + optional bool distinct = 4; + optional QueryOperator queryOperator = 5; + } + + message Date { + optional double time = 1; + } + + message Asset { + optional string owner = 1; + optional bytes signature = 2; + optional bytes header = 3; + optional uint64 size = 4; + optional string downloadToken = 5; + optional bytes downloadRequest = 6; + optional string derivedContentType = 7; + optional string contentBaseURL = 8; + optional string requestor = 9; + optional RecordIdentifier recordID = 10; + optional string uploadReceipt = 11; + optional bytes data = 12; + optional string downloadBaseURL = 13; + optional uint64 downloadURLExpiration = 14; + optional ProtectionInfo protectionInfo = 15; + optional bytes referenceSignature = 17; + optional uint64 downloadTokenExpiration = 18; + } + + message DateStatistics { + optional Date creation = 1; + optional Date modification = 2; + } + + message Location { + message Bound { + optional double radius = 1; + } + + message Coordinate { + optional double lattitude = 1; + optional double longitude = 2; + optional double horizontalAccuracy = 3; + optional double altitude = 4; + optional double verticalAccuracy = 5; + optional double course = 6; + optional double speed = 7; + optional Date timestamp = 8; + } + + optional Coordinate coordinate = 1; + optional Bound bounds = 2; + } + + message Package { + optional Asset manifest = 1; + repeated Asset sections = 2; + } + + message Record { + message Field { + message Identifier { + optional string name = 1; + } + + message Value { + enum Type { + BYTES_TYPE = 1; + DATE_TYPE = 2; + STRING_TYPE = 3; + LOCATION_TYPE = 4; + REFERENCE_TYPE =5; + ASSET_TYPE = 6; + INT64_TYPE = 7; + DOUBLE_TYPE = 8; + EMPTY_LIST = 9; + DATE_LIST_TYPE = 10; + BYTES_LIST_TYPE = 11; + LOCATION_LIST_TYPE = 12; + REFERENCE_LIST_TYPE = 13; + ASSET_LIST_TYPE = 14; + STRING_LIST_TYPE = 15; + LIST_TYPE = 16; + INT64_LIST_TYPE = 17; + DOUBLE_LIST_TYPE = 18; + PACKAGE_TYPE = 19; + ENCRYPTED_BYTES_TYPE = 20; + ENCRYPTED_BYTES_LIST_TYPE = 21; + UNKNOWN = 22; + } + + optional Type type = 1; + optional bytes bytesValue = 2; + optional int64 signedValue = 4; + optional double doubleValue = 5; + optional Date dateValue = 6; + optional string stringValue = 7; + optional Location.Coordinate locationValue = 8; + optional Reference referenceValue = 9; + optional Asset assetValue = 10; + repeated Value listValues = 11; + optional Package packageValue = 12; + } + + optional Identifier identifier = 1; + optional Value value = 2; + } + + message Reference { + enum Type { + OWNING = 1; + WEAK = 2; + VALIDATING = 3; + } + + optional Type type = 1; + optional RecordIdentifier recordIdentifier = 2; + } + + message Type { + optional string name = 1; + } + + optional string etag= 1; + optional RecordIdentifier recordIdentifier = 2; + optional Record.Type type = 3; + optional Identifier createdBy = 4; + optional DateStatistics timeStatistics = 5; + repeated Record.Field recordField = 7; + optional ShareIdentifier shareId = 8;; + optional Identifier modifiedBy = 9; + repeated string conflictLoserEtag = 10; + optional string modifiedByDevice = 11; + repeated Record.Field pluginFields = 12; + optional ProtectionInfo protectionInfo = 13; + optional uint32 permission = 15; + } + + message RequestedFields { + repeated Record.Field.Identifier fields = 1; + } + + message AssetsToDownload { + optional bool allAssets = 1; + optional RequestedFields assetFields = 2; + } + + message Locale { + optional string languageCode = 1; + optional string regionCode = 2; + repeated string enabledKeyboards = 3; + optional string activeKeyboard = 4; + } + + message ShareIdentifier { + optional Identifier value = 1; + optional RecordZoneIdentifier zoneIdentifier = 2; + } + + message RecordIdentifier { + optional Identifier value = 1; + optional RecordZoneIdentifier zoneIdentifier = 2; + } + + message RecordZoneIdentifier { + optional Identifier value = 1; + optional Identifier ownerIdentifier = 2; + } + + message Identifier { + enum Type { + RECORD = 1; + DEVICE = 2; + SUBSCRIPTION = 3; + SHARE = 4; + COMMENT = 5; + RECORD_ZONE = 6; + USER = 7; + } + optional string name = 1; + optional Type type = 2; + } + + message ProtectionInfo { + optional bytes protectionInfo = 1; + optional string protectionInfoTag = 2; + } + + message Zone { + optional RecordZoneIdentifier zoneIdentifier = 1; + optional string etag= 2; + optional ProtectionInfo protectionInfo = 3; + optional ProtectionInfo recordProtectionInfo = 6; + } + + message FileTokens { + repeated FileToken fileTokens = 1; + } + + message FileToken { + optional bytes signature = 1; + optional string downloadToken = 2; + optional uint64 size = 3; + optional bytes referenceSignature = 4; + } + + message EncryptedAttributes { + optional string relativePath = 1; + optional string domain = 2; + optional uint64 birth = 3; + optional uint64 modified = 4; + optional uint64 statusChanged = 5; + optional uint64 size = 6; + optional uint32 groupID = 7; + optional uint32 userID = 8; + optional uint32 mode = 9; + optional uint64 sizeBeforeCopy = 10; + optional bytes linkTarget = 11; + optional bytes encryptionKey = 12; + optional bytes sha256Signature = 13; + optional int32 domainOrdinal = 14; + optional int32 flags = 15; + optional int32 contentEncodingMethod = 16; + optional int32 contentCompressionMethod = 17; + } \ No newline at end of file diff --git a/examples/cloudkit.py b/examples/cloudkit.py new file mode 100644 index 0000000..b1e8b3a --- /dev/null +++ b/examples/cloudkit.py @@ -0,0 +1,264 @@ +# Add parent directory to path +import sys +sys.path.append("..") +sys.path.append(".") + +import gsa +import requests +import uuid +import plistlib +from base64 import b64encode, b64decode +import json +import random + +CONFIG_PATH = "examples/cloudkit.json" +# See if we have a search party token saved +import os +if os.path.exists(CONFIG_PATH): + print("Using saved config...") + #print("Found search party token!") + with open(CONFIG_PATH, "r") as f: + j = json.load(f) + cloudkit_token = j["cloudkit_token"] + ds_prs_id = j["ds_prs_id"] + +else: + # Prompt for username and password + USERNAME = input("Username: ") + PASSWORD = input("Password: ") + + print("Authenticating with Grand Slam...") + g = gsa.authenticate(USERNAME, PASSWORD) + #print(g) + pet = g["t"]["com.apple.gs.idms.pet"]["token"] + print("Authenticated!") + #print(g) + + data = { + "apple-id": USERNAME, + #"delegates": {"com.apple.private.ids": {"protocol-version": "4"}}, + "delegates": {"com.apple.mobileme": {}}, + "password": pet, + "client-id": str(uuid.uuid4()), + + } + data = plistlib.dumps(data) + from emulated import nac + + print("Generating validation data...") + v = nac.generate_validation_data() + print("Generated validation data!") + + headers = { + "X-Apple-ADSID": g["adsid"], + "X-Mme-Nas-Qualify": b64encode(v).decode(), + "User-Agent": "com.apple.iCloudHelper/282 CFNetwork/1408.0.4 Darwin/22.5.0", + "X-Mme-Client-Info": gsa.build_client(emulated_app="accountsd") # Otherwise we get MOBILEME_TERMS_OF_SERVICE_UPDATE on some accounts + } + headers.update(gsa.generate_anisette_headers()) + + print(headers) + + print("Logging in to iCloud...") + r = requests.post( + "https://setup.icloud.com/setup/prefpane/login", + auth=(USERNAME, pet), + data=data, + headers=headers, + verify=False, + ) + + print(r) + print(r.headers) + r = plistlib.loads(r.content) + print(r) + + cloudkit_token = r['delegates']['com.apple.mobileme']['service-data']['tokens']['cloudKitToken'] + ds_prs_id = r['delegates']['com.apple.mobileme']['service-data']['appleAccountInfo']['dsPrsID'] # This can also be obtained from the grandslam response + + print("Logged in!") + + with open(CONFIG_PATH, "w") as f: + json.dump({ + "cloudkit_token": cloudkit_token, + "ds_prs_id": ds_prs_id, + }, f, indent=4) + +print("CloudKit token: ", cloudkit_token) + +headers = { + "x-cloudkit-authtoken": cloudkit_token, + "x-cloudkit-userid": "_ec5fa262446ad56fb4bda84d00e981ff", # Hash of bundle id and icloud id + "x-cloudkit-containerid": "iCloud.dev.jjtech.experiments.cktest", + "x-cloudkit-bundleid": "dev.jjtech.experiments.cktest", + "x-cloudkit-bundleversion": "1", + "x-cloudkit-databasescope": "Public", + "x-cloudkit-environment": "Sandbox", + + "accept": "application/x-protobuf", + "content-type": 'application/x-protobuf; desc="https://gateway.icloud.com:443/static/protobuf/CloudDB/CloudDBClient.desc"; messageType=RequestOperation; delimited=true', + + "x-apple-operation-id": random.randbytes(8).hex(), + "x-apple-request-uuid": str(uuid.uuid4()).upper() + + +} + +headers.update(gsa.generate_anisette_headers()) + +import cloudkit_pb2 + +# header { +# applicationContainer: "iCloud.dev.jjtech.experiments.cktest" +# applicationBundle: "dev.jjtech.experiments.cktest" +# applicationVersion: "1" +# deviceIdentifier { +# name: "776D147D-DAF3-495F-A834-12526DAECA5C" +# type: DEVICE +# } +# deviceSoftwareVersion: "13.4.1" +# deviceHardwareVersion: "MacBookPro18,3" +# deviceLibraryName: "com.apple.cloudkit.CloudKitDaemon" +# deviceLibraryVersion: "2060.11" +# locale { +# languageCode: "en-US" +# regionCode: "US" +# } +# mmcsProtocolVersion: "5.0" +# applicationContainerEnvironment: SANDBOX +# deviceAssignedName: "James\342\200\231s Laptop" +# deviceHardwareID: "776D147D-DAF3-495F-A834-12526DAECA5C" +# targetDatabase: PUBLIC_DB +# isolationLevel: ZONE +# unk1: 0 +# unk2: "7B40B37D-2503-5161-9B4E-84D20478694C" +# deviceSerial: "X5T0QFNHXP" +# unk3: 0 +# unk4: 1 +# } +# request { +# operationUUID: "B1FC75B3-D69E-4368-BD0A-93170C7A3017" +# type: RECORD_SAVE_TYPE +# last: true +# } +# recordSaveRequest { +# record { +# recordIdentifier { +# value { +# name: "699F278B-1381-4480-8297-7751B88B8F06" +# type: RECORD +# } +# zoneIdentifier { +# value { +# name: "_defaultZone" +# type: RECORD_ZONE +# } +# ownerIdentifier { +# name: "_defaultOwner" +# type: USER +# } +# } +# } +# type { +# name: "ToDoItem" +# } +# recordField { +# identifier { +# name: "name" +# } +# value { +# type: STRING_TYPE +# stringValue: "Test item" +# } +# } +# } +# unk1: 1 +# unk2: 2 +# } + +from typing import Literal + +#def build_cloudkit_record_save_request(container: str, sandbox: bool, database: Literal["PUBLIC"] | Literal["PRIVATE"] | Literal["SHARED"], zone: str, ): + +request = cloudkit_pb2.RequestOperation() +request.header.applicationContainer = "iCloud.dev.jjtech.experiments.cktest" +#request.header.applicationBundle = "dev.jjtech.experiments.cktest" +#request.header.applicationVersion = "1" +#request.header.deviceIdentifier.name = "776D147D-DAF3-495F-A834-12526DAECA5C" +#request.header.deviceIdentifier.type = cloudkit_pb2.Identifier.Type.DEVICE +#request.header.deviceSoftwareVersion = "13.4.1" +#request.header.deviceHardwareVersion = "MacBookPro18,3" +#request.header.deviceLibraryName = "com.apple.cloudkit.CloudKitDaemon" +#request.header.deviceLibraryVersion = "2060.11" +#request.header.locale.languageCode = "en-US" +#request.header.locale.regionCode = "US" +#request.header.mmcsProtocolVersion = "5.0" +request.header.applicationContainerEnvironment = cloudkit_pb2.RequestOperation.Header.ContainerEnvironment.SANDBOX +#request.header.deviceAssignedName = "James’s Laptop" +request.header.deviceHardwareID = str(uuid.uuid4()).upper() +request.header.targetDatabase = cloudkit_pb2.RequestOperation.Header.Database.PUBLIC_DB +request.header.isolationLevel = cloudkit_pb2.RequestOperation.Header.IsolationLevel.ZONE +#request.header.unk1 = 0 +#request.header.unk2 = "7B40B37D-2503-5161-9B4E-84D20478694C" +#request.header.deviceSerial = "X5T0QFNHXP" +#request.header.unk3 = 0 +#request.header.unk4 = 1 +request.request.operationUUID = str(uuid.uuid4()).upper() +request.request.type = cloudkit_pb2.Operation.Type.RECORD_SAVE_TYPE +request.request.last = True +request.recordSaveRequest.record.recordIdentifier.value.name = str(uuid.uuid4()).upper() +request.recordSaveRequest.record.recordIdentifier.value.type = cloudkit_pb2.Identifier.Type.RECORD +request.recordSaveRequest.record.recordIdentifier.zoneIdentifier.value.name = "_defaultZone" +request.recordSaveRequest.record.recordIdentifier.zoneIdentifier.value.type = cloudkit_pb2.Identifier.Type.RECORD_ZONE +request.recordSaveRequest.record.recordIdentifier.zoneIdentifier.ownerIdentifier.name = "_defaultOwner" +request.recordSaveRequest.record.recordIdentifier.zoneIdentifier.ownerIdentifier.type = cloudkit_pb2.Identifier.Type.USER +request.recordSaveRequest.record.type.name = "ToDoItem" +# RecordField is a repeated field, so we have to append to it +request.recordSaveRequest.record.recordField.append(cloudkit_pb2.Record.Field()) +request.recordSaveRequest.record.recordField[0].identifier.name = "name" +request.recordSaveRequest.record.recordField[0].value.type = cloudkit_pb2.Record.Field.Value.Type.STRING_TYPE +request.recordSaveRequest.record.recordField[0].value.stringValue = "Test pypush 5" +#request.recordSaveRequest.record.recordField.identifier.name = "name" +#request.recordSaveRequest.record.recordField.value.type = cloudkit_pb2.Record.Field.Value.Type.STRING_TYPE +#request.recordSaveRequest.record.recordField.value.stringValue = "Test item" +#request.recordSaveRequest.unk1 = 1 +#request.recordSaveRequest.unk2 = 2 + + + +# WHAT ARE THESE BYTES??? +body = b"\xfe\x03" + request.SerializeToString() +r =requests.post( + "https://gateway.icloud.com/ckdatabase/api/client/record/save", + headers=headers, + data=body, + verify=False +) + +print(r.content) +# import time + +# r = requests.post( +# "https://gateway.icloud.com/acsnservice/fetch", +# auth=(ds_prs_id, search_party_token), +# headers=gsa.generate_anisette_headers(), +# json={ +# "search": [ +# { +# "startDate": 1697662550688, +# "endDate": 1697673599999, +# "ids": [ +# "/a8rQOW7Ucg2OOBo0D3i/7IZAbvRXcO+5y/1w0QVE4s=" +# ] +# } +# ] +# } + +# ) + +# #print(r.headers) +# if r.status_code != 200 or len(r.content) == 0: +# print("Error fetching locations (ratelimit?): ", r.status_code, r.headers) +# exit(1) +# r = r.content.decode() +# print(json.dumps(json.loads(r), indent=4)) \ No newline at end of file diff --git a/examples/cloudkit_pb2.py b/examples/cloudkit_pb2.py new file mode 100644 index 0000000..3454341 --- /dev/null +++ b/examples/cloudkit_pb2.py @@ -0,0 +1,148 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: examples/cloudkit.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x65xamples/cloudkit.proto\"\x82\x0b\n\x10RequestOperation\x12(\n\x06header\x18\x01 \x01(\x0b\x32\x18.RequestOperation.Header\x12\x1b\n\x07request\x18\x02 \x01(\x0b\x32\n.Operation\x12\x32\n\x13zoneRetrieveRequest\x18\xc9\x01 \x01(\x0b\x32\x14.ZoneRetrieveRequest\x12.\n\x11recordSaveRequest\x18\xd2\x01 \x01(\x0b\x32\x12.RecordSaveRequest\x12\x36\n\x15recordRetrieveRequest\x18\xd3\x01 \x01(\x0b\x32\x16.RecordRetrieveRequest\x12\x34\n\x14queryRetrieveRequest\x18\xdc\x01 \x01(\x0b\x32\x15.QueryRetrieveRequest\x1a\xd4\x08\n\x06Header\x12\x11\n\tuserToken\x18\x01 \x01(\t\x12\x1c\n\x14\x61pplicationContainer\x18\x02 \x01(\t\x12\x19\n\x11\x61pplicationBundle\x18\x03 \x01(\t\x12\x1a\n\x12\x61pplicationVersion\x18\x04 \x01(\t\x12 \n\x18\x61pplicationConfigVersion\x18\x05 \x01(\x04\x12\x1b\n\x13globalConfigVersion\x18\x06 \x01(\x04\x12%\n\x10\x64\x65viceIdentifier\x18\x07 \x01(\x0b\x32\x0b.Identifier\x12\x1d\n\x15\x64\x65viceSoftwareVersion\x18\x08 \x01(\t\x12\x1d\n\x15\x64\x65viceHardwareVersion\x18\t \x01(\t\x12\x19\n\x11\x64\x65viceLibraryName\x18\n \x01(\t\x12\x1c\n\x14\x64\x65viceLibraryVersion\x18\x0b \x01(\t\x12\x1c\n\x14\x64\x65viceFlowControlKey\x18\x0c \x01(\t\x12\x1f\n\x17\x64\x65viceFlowControlBudget\x18\r \x01(\x04\x12\"\n\x1a\x64\x65viceFlowControlBudgetCap\x18\x0e \x01(\x04\x12%\n\x1d\x64\x65viceFlowControlRegeneration\x18\x0f \x01(\x02\x12\x1d\n\x15\x64\x65viceProtocolVersion\x18\x10 \x01(\x04\x12\x17\n\x06locale\x18\x11 \x01(\x0b\x32\x07.Locale\x12\x1b\n\x13mmcsProtocolVersion\x18\x12 \x01(\t\x12V\n\x1f\x61pplicationContainerEnvironment\x18\x13 \x01(\x0e\x32-.RequestOperation.Header.ContainerEnvironment\x12\x19\n\x11\x63lientChangeToken\x18\x14 \x01(\x0c\x12\x1a\n\x12\x64\x65viceAssignedName\x18\x15 \x01(\t\x12\x18\n\x10\x64\x65viceHardwareID\x18\x16 \x01(\t\x12\x39\n\x0etargetDatabase\x18\x17 \x01(\x0e\x32!.RequestOperation.Header.Database\x12\x19\n\x11userIDContainerID\x18\x18 \x01(\t\x12?\n\x0eisolationLevel\x18\x19 \x01(\x0e\x32\'.RequestOperation.Header.IsolationLevel\x12\x0c\n\x04unk1\x18\x1d \x01(\x05\x12\x0c\n\x04unk2\x18 \x01(\t\x12\x14\n\x0c\x64\x65viceSerial\x18! \x01(\t\x12\x0c\n\x04unk3\x18\" \x01(\x05\x12\x0c\n\x04unk4\x18# \x01(\x05\"3\n\x14\x43ontainerEnvironment\x12\x0e\n\nPRODUCTION\x10\x01\x12\x0b\n\x07SANDBOX\x10\x02\"8\n\x08\x44\x61tabase\x12\x0e\n\nPRIVATE_DB\x10\x01\x12\r\n\tPUBLIC_DB\x10\x02\x12\r\n\tSHARED_DB\x10\x03\")\n\x0eIsolationLevel\x12\x08\n\x04ZONE\x10\x01\x12\r\n\tOPERATION\x10\x02\"H\n\x11RecordSaveRequest\x12\x17\n\x06record\x18\x01 \x01(\x0b\x32\x07.Record\x12\x0c\n\x04unk1\x18\x02 \x01(\x05\x12\x0c\n\x04unk2\x18\x06 \x01(\x05\"\xdd\x15\n\x11ResponseOperation\x12\x15\n\roperationCost\x18\x01 \x01(\r\x12\x1c\n\x08response\x18\x02 \x01(\x0b\x32\n.Operation\x12)\n\x06result\x18\x03 \x01(\x0b\x32\x19.ResponseOperation.Result\x12\x34\n\x14zoneRetrieveResponse\x18\xc9\x01 \x01(\x0b\x32\x15.ZoneRetrieveResponse\x12\x38\n\x16recordRetrieveResponse\x18\xd3\x01 \x01(\x0b\x32\x17.RecordRetrieveResponse\x12\x36\n\x15queryRetrieveResponse\x18\xdc\x01 \x01(\x0b\x32\x16.QueryRetrieveResponse\x1a\xbf\x13\n\x06Result\x12,\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x1e.ResponseOperation.Result.Code\x12.\n\x05\x65rror\x18\x02 \x01(\x0b\x32\x1f.ResponseOperation.Result.Error\x1a\x94\x12\n\x05\x45rror\x12;\n\x0b\x63lientError\x18\x01 \x01(\x0b\x32&.ResponseOperation.Result.Error.Client\x12;\n\x0bserverError\x18\x02 \x01(\x0b\x32&.ResponseOperation.Result.Error.Server\x12\x41\n\x0e\x65xtensionError\x18\x07 \x01(\x0b\x32).ResponseOperation.Result.Error.Extension\x12\x19\n\x11retryAfterSeconds\x18\x03 \x01(\x05\x12\x18\n\x10\x65rrorDescription\x18\x04 \x01(\t\x12\x10\n\x08\x65rrorKey\x18\x05 \x01(\t\x12\x15\n\rerrorInternal\x18\x06 \x01(\t\x1a\xc2\r\n\x06\x43lient\x12\x39\n\x04type\x18\x01 \x01(\x0e\x32+.ResponseOperation.Result.Error.Client.Code\"\xfc\x0c\n\x04\x43ode\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x16\n\x12\x45XPIRED_APP_CONFIG\x10\x02\x12\x19\n\x15\x45XPIRED_GLOBAL_CONFIG\x10\x03\x12\x0e\n\nBAD_SYNTAX\x10\x04\x12\r\n\tFORBIDDEN\x10\x05\x12\r\n\tTHROTTLED\x10\x06\x12\x0b\n\x07REFUSED\x10\x07\x12\x11\n\rNOT_SUPPORTED\x10\x08\x12\n\n\x06\x45XISTS\x10\t\x12\x1d\n\x19REQUEST_ALREADY_PROCESSED\x10\n\x12\x12\n\x0e\x42\x41\x44_AUTH_TOKEN\x10\x0b\x12\x18\n\x14NEEDS_AUTHENTICATION\x10\x0c\x12\x1c\n\x18MESCAL_SIGNATURE_MISSING\x10\r\x12\x1c\n\x18INVALID_MESCAL_SIGNATURE\x10\x0e\x12\x13\n\x0fOP_LOCK_FAILURE\x10\x0f\x12\x12\n\x0e\x41TOMIC_FAILURE\x10\x10\x12\x10\n\x0cRESET_NEEDED\x10\x11\x12\"\n\x1e\x46IELDS_PER_TYPE_LIMIT_EXCEEDED\x10\x12\x12\r\n\tTYPE_BUSY\x10\x13\x12#\n\x1fNUM_RECORD_TYPES_LIMIT_EXCEEDED\x10\x14\x12\x15\n\x11INVALID_CONTAINER\x10\x15\x12\x1c\n\x18INVALID_RECORD_TYPE_NAME\x10\x16\x12\x16\n\x12INVALID_FIELD_NAME\x10\x17\x12\x17\n\x13INVALID_FIELD_VALUE\x10\x18\x12\x16\n\x12INVALID_IDENTIFIER\x10\x19\x12\x17\n\x13\x46IELD_NOT_QUERYABLE\x10\x1a\x12\x16\n\x12\x46IELD_NOT_SORTABLE\x10\x1b\x12\x1f\n\x1bQUERY_FILTER_LIMIT_EXCEEDED\x10\x1c\x12&\n\"QUERY_FILTER_VALUES_LIMIT_EXCEEDED\x10\x1d\x12#\n\x1fMEMBERSHIP_QUERY_LIMIT_EXCEEDED\x10\x1e\x12\x30\n,NOTIFICATION_ADDITIONAL_FIELD_LIMIT_EXCEEDED\x10\x1f\x12.\n*NOTIFICATION_ADDITIONAL_FIELD_INVALID_TYPE\x10 \x12\x1f\n\x1bSUBSCRIPTION_LIMIT_EXCEEDED\x10!\x12!\n\x1dUNIQUE_TRIGGER_LIMIT_EXCEEDED\x10\"\x12.\n*TRIGGER_SUBSCRIPTION_BINDING_TYPE_MISMATCH\x10#\x12\x1c\n\x18ZONE_SIZE_LIMIT_EXCEEDED\x10$\x12\x1d\n\x19ZONE_COUNT_LIMIT_EXCEEDED\x10%\x12\x18\n\x14UNIQUE_FIELD_FAILURE\x10&\x12\x1e\n\x1aVALIDATING_REFERENCE_ERROR\x10\'\x12\x15\n\x11\x46ULL_RESET_NEEDED\x10(\x12\x12\n\x0e\x41LREADY_SHARED\x10)\x12\x18\n\x14\x45MAIL_OUT_OF_NETWORK\x10*\x12\x1a\n\x16\x44UPLICATE_SUBSCRIPTION\x10+\x12\x17\n\x13\x45XPIRED_PUT_RECEIPT\x10.\x12\x12\n\x0eQUOTA_EXCEEDED\x10/\x12\x12\n\x0eZONE_NOT_FOUND\x10\x30\x12\x15\n\x11INVALID_BUNDLE_ID\x10\x31\x12\x16\n\x12UNSUPPORTED_DEVICE\x10\x32\x12\x10\n\x0c\x42LACK_LISTED\x10\x33\x12\'\n#RECORD_PROTECTION_INFO_TAG_MISMATCH\x10\x34\x12%\n!ZONE_PROTECTION_INFO_TAG_MISMATCH\x10\x35\x12\x1d\n\x19\x41SSET_SIZE_LIMIT_EXCEEDED\x10\x36\x12\"\n\x1e\x42\x41TCH_OPERATION_LIMIT_EXCEEDED\x10\x37\x12\x1f\n\x1bREQUEST_SIZE_LIMIT_EXCEEDED\x10\x38\x12\x1e\n\x1aRECORD_SIZE_LIMIT_EXCEEDED\x10\x39\x12!\n\x1d\x44\x41TABASE_COMMIT_SIZE_EXCEEDED\x10:\x12\x1e\n\x1aUSER_DELETED_DATA_FOR_ZONE\x10;\x12\x17\n\x13STALE_RECORD_UPDATE\x10<\x12$\n SHARE_PARTICIPANT_LIMIT_EXCEEDED\x10=\x12\x1b\n\x17SHARE_PARTICIPANT_ERROR\x10>\x1a\xda\x01\n\x06Server\x12\x39\n\x04type\x18\x01 \x01(\x0e\x32+.ResponseOperation.Result.Error.Server.Code\"\x94\x01\n\x04\x43ode\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x0e\n\nOVERLOADED\x10\x02\x12\r\n\tNOT_FOUND\x10\x03\x12\x19\n\x15\x43ONTAINER_UNAVAILABLE\x10\x04\x12 \n\x1cMESCAL_SIGNATURE_PARSE_ERROR\x10\x06\x12\r\n\tZONE_BUSY\x10\x07\x12\x14\n\x10ZONE_UNAVAILABLE\x10\x08\x1aN\n\tExtension\x12\x15\n\rextensionName\x18\x01 \x01(\t\x12\x10\n\x08typeCode\x18\x02 \x01(\r\x12\x18\n\x10\x65xtensionPayload\x18\x03 \x01(\x0c\"@\n\x04\x43ode\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0b\n\x07PARTIAL\x10\x02\x12\x0b\n\x07\x46\x41ILURE\x10\x03\x12\x11\n\rINDETERMINATE\x10\x04\"\xb8\x0b\n\tOperation\x12\x15\n\roperationUUID\x18\x01 \x01(\t\x12\x1d\n\x04type\x18\x02 \x01(\x0e\x32\x0f.Operation.Type\x12\x17\n\x0fsynchronousMode\x18\x03 \x01(\x08\x12\x0c\n\x04last\x18\x04 \x01(\x08\"\xcd\n\n\x04Type\x12\r\n\tNONE_TYPE\x10\x00\x12\x13\n\x0eZONE_SAVE_TYPE\x10\xc8\x01\x12\x17\n\x12ZONE_RETRIEVE_TYPE\x10\xc9\x01\x12\x15\n\x10ZONE_DELETE_TYPE\x10\xca\x01\x12\x1f\n\x1aZONE_RETRIEVE_CHANGES_TYPE\x10\xcb\x01\x12\x15\n\x10RECORD_SAVE_TYPE\x10\xd2\x01\x12\x19\n\x14RECORD_RETRIEVE_TYPE\x10\xd3\x01\x12\"\n\x1dRECORD_RETRIEVE_VERSIONS_TYPE\x10\xd4\x01\x12!\n\x1cRECORD_RETRIEVE_CHANGES_TYPE\x10\xd5\x01\x12\x17\n\x12RECORD_DELETE_TYPE\x10\xd6\x01\x12\x18\n\x13QUERY_RETRIEVE_TYPE\x10\xdc\x01\x12%\n ASSET_UPLOAD_TOKEN_RETRIEVE_TYPE\x10\xe6\x01\x12\x1a\n\x15\x43ONTAINER_DELETE_TYPE\x10\xf0\x01\x12\x19\n\x14\x43ONTAINER_RESET_TYPE\x10\xf1\x01\x12$\n\x1f\x43ONTAINER_SCHEMA_PROMOTION_TYPE\x10\xf2\x01\x12\x1e\n\x19USER_AVAILABLE_QUOTA_TYPE\x10\xf3\x01\x12!\n\x1cWEB_AUTH_TOKEN_RETRIEVE_TYPE\x10\xfa\x01\x12\x1d\n\x18SUBSCRIPTION_CREATE_TYPE\x10\xac\x02\x12\x1f\n\x1aSUBSCRIPTION_RETRIEVE_TYPE\x10\xad\x02\x12\x1d\n\x18SUBSCRIPTION_DELETE_TYPE\x10\xae\x02\x12\x17\n\x12USER_RETRIEVE_TYPE\x10\x90\x03\x12\x13\n\x0eUSER_QUERYTYPE\x10\x91\x03\x12(\n#USER_PRIVACY_SETTINGS_RETRIEVE_TYPE\x10\x92\x03\x12&\n!USER_PRIVACY_SETTINGS_UPDATE_TYPE\x10\x93\x03\x12%\n USER_PRIVACY_SETTINGS_RESET_TYPE\x10\x94\x03\x12\'\n\"USER_PRIVACY_SETTINGS_BATCH_LOOKUP\x10\x95\x03\x12\x14\n\x0fSHARE_SAVE_TYPE\x10\xf4\x03\x12\x18\n\x13SHARE_RETRIEVE_TYPE\x10\xf5\x03\x12\x16\n\x11SHARE_DELETE_TYPE\x10\xf6\x03\x12\x16\n\x11SHARE_ACCEPT_TYPE\x10\xf7\x03\x12\x1a\n\x15SHARE_TOKEN_SAVE_TYPE\x10\xfe\x03\x12\x1e\n\x19SHARE_TOKEN_RETRIEVE_TYPE\x10\xff\x03\x12\x1c\n\x17SHARE_TOKEN_DELETE_TYPE\x10\x80\x04\x12\x16\n\x11POST_COMMENT_TYPE\x10\xd8\x04\x12\x16\n\x11GET_COMMENTS_TYPE\x10\xd9\x04\x12\x15\n\x10GET_COMMENT_TYPE\x10\xe5\x04\x12\x18\n\x13\x44\x45LETE_COMMENT_TYPE\x10\xda\x04\x12\x0e\n\tLIKE_TYPE\x10\xe2\x04\x12\x10\n\x0bUNLIKE_TYPE\x10\xe3\x04\x12\x13\n\x0eGET_LIKES_TYPE\x10\xe4\x04\x12\x0f\n\nPULSE_TYPE\x10\xbc\x05\x12\x17\n\x12PUSH_REGISTER_TYPE\x10\xa0\x06\x12\x19\n\x14PUSH_UNREGISTER_TYPE\x10\xa1\x06\x12\x14\n\x0fPUSH_BADGE_TYPE\x10\xa2\x06\x12\x13\n\x0ePUSH_SYNC_TYPE\x10\xa3\x06\x12\x13\n\x0ePUSH_READ_TYPE\x10\xa4\x06\x12\x1a\n\x15MESCAL_SIGNATURE_TYPE\x10\xe8\x07\x12\x1d\n\x18MESCAL_SESSION_INFO_TYPE\x10\xe9\x07\x12\x1c\n\x17MESCAL_CERTIFICATE_TYPE\x10\xea\x07\"D\n\x13ZoneRetrieveRequest\x12-\n\x0ezoneIdentifier\x18\x01 \x01(\x0b\x32\x15.RecordZoneIdentifier\"\x86\x02\n\x14ZoneRetrieveResponse\x12\x36\n\x0bzoneSummary\x18\x01 \x03(\x0b\x32!.ZoneRetrieveResponse.ZoneSummary\x1a\xb5\x01\n\x0bZoneSummary\x12\x19\n\ntargetZone\x18\x01 \x01(\x0b\x32\x05.Zone\x12&\n\x1e\x63urrentServerContinuationToken\x18\x02 \x01(\x0c\x12\x19\n\x11\x63lientChangeToken\x18\x03 \x01(\x0c\x12\x13\n\x0b\x64\x65viceCount\x18\x04 \x01(\x05\x12\x17\n\x0f\x61ssetQuotaUsage\x18\x05 \x01(\x03\x12\x1a\n\x12metadataQuotaUsage\x18\x06 \x01(\x03\"\xc6\x03\n\x15RecordRetrieveRequest\x12+\n\x10recordIdentifier\x18\x01 \x01(\x0b\x32\x11.RecordIdentifier\x12)\n\x0frequestedFields\x18\x02 \x01(\x0b\x32\x10.RequestedFields\x12\x13\n\x0bversionETag\x18\x03 \x01(\t\x12\x19\n\x11\x63lientVersionETag\x18\x04 \x01(\t\x12<\n\x0bgetAssetURL\x18\x05 \x01(\x0b\x32\'.RecordRetrieveRequest.RetrieveAssetURL\x12+\n\x10\x61ssetsToDownload\x18\x06 \x01(\x0b\x32\x11.AssetsToDownload\x1a\xb9\x01\n\x10RetrieveAssetURL\x12%\n\x0b\x61ssetFields\x18\x01 \x01(\x0b\x32\x10.RequestedFields\x12\x14\n\x0crequestedTTL\x18\x02 \x01(\x03\x12:\n\x04type\x18\x03 \x01(\x0e\x32,.RecordRetrieveRequest.RetrieveAssetURL.Type\",\n\x04Type\x12\x11\n\rPUBLISHED_URL\x10\x01\x12\x11\n\rSTREAMING_URL\x10\x02\"Q\n\x16RecordRetrieveResponse\x12\x17\n\x06record\x18\x01 \x01(\x0b\x32\x07.Record\x12\x1e\n\x16\x63lientVersionETagMatch\x18\x02 \x01(\x08\"\xdf\x01\n\x14QueryRetrieveRequest\x12\x15\n\x05query\x18\x01 \x01(\x0b\x32\x06.Query\x12\x1a\n\x12\x63ontinuationMarker\x18\x02 \x01(\x0c\x12\r\n\x05limit\x18\x03 \x01(\r\x12-\n\x0ezoneIdentifier\x18\x04 \x01(\x0b\x32\x15.RecordZoneIdentifier\x12)\n\x0frequestedFields\x18\x05 \x01(\x0b\x32\x10.RequestedFields\x12+\n\x10\x61ssetsToDownload\x18\x06 \x01(\x0b\x32\x11.AssetsToDownload\"\xac\x02\n\x15QueryRetrieveResponse\x12\x38\n\x0cqueryResults\x18\x01 \x03(\x0b\x32\".QueryRetrieveResponse.QueryResult\x12\x1a\n\x12\x63ontinuationMarker\x18\x02 \x01(\x0c\x1a\xbc\x01\n\x0bQueryResult\x12%\n\nidentifier\x18\x01 \x01(\x0b\x32\x11.RecordIdentifier\x12\x0c\n\x04\x65tag\x18\x02 \x01(\t\x12\x35\n\x04type\x18\x03 \x01(\x0e\x32\'.QueryRetrieveResponse.QueryResult.Type\x12\x17\n\x06record\x18\x04 \x01(\x0b\x32\x07.Record\"(\n\x04Type\x12\x0f\n\x0bID_AND_ETAG\x10\x01\x12\x0f\n\x0b\x46ULL_RECORD\x10\x02\"\xe6\x07\n\x05Query\x12\x1b\n\x05types\x18\x01 \x03(\x0b\x32\x0c.Record.Type\x12\x1e\n\x07\x66ilters\x18\x02 \x03(\x0b\x32\r.Query.Filter\x12\x1a\n\x05sorts\x18\x03 \x03(\x0b\x32\x0b.Query.Sort\x12\x10\n\x08\x64istinct\x18\x04 \x01(\x08\x12+\n\rqueryOperator\x18\x05 \x01(\x0e\x32\x14.Query.QueryOperator\x1a\xeb\x04\n\x06\x46ilter\x12+\n\tfieldName\x18\x01 \x01(\x0b\x32\x18.Record.Field.Identifier\x12\'\n\nfieldValue\x18\x02 \x01(\x0b\x32\x13.Record.Field.Value\x12\x1f\n\x06\x62ounds\x18\x03 \x01(\x0b\x32\x0f.Location.Bound\x12 \n\x04type\x18\x04 \x01(\x0e\x32\x12.Query.Filter.Type\"\xc7\x03\n\x04Type\x12\n\n\x06\x45QUALS\x10\x01\x12\x0e\n\nNOT_EQUALS\x10\x02\x12\x06\n\x02IN\x10\x03\x12\n\n\x06NOT_IN\x10\x04\x12\r\n\tLESS_THAN\x10\x05\x12\x17\n\x13LESS_THAN_OR_EQUALS\x10\x06\x12\x10\n\x0cGREATER_THAN\x10\x07\x12\x1a\n\x16GREATER_THAN_OR_EQUALS\x10\x08\x12\x08\n\x04NEAR\x10\t\x12\x17\n\x13\x43ONTAINS_ALL_TOKENS\x10\n\x12\x17\n\x13\x43ONTAINS_ANY_TOKENS\x10\x0b\x12\x11\n\rLIST_CONTAINS\x10\x0c\x12\x15\n\x11LIST_NOT_CONTAINS\x10\r\x12\x15\n\x11LIST_CONTAINS_ANY\x10\x0e\x12\x19\n\x15LIST_NOT_CONTAINS_ANY\x10\x0f\x12\x0f\n\x0b\x42\x45GINS_WITH\x10\x10\x12\x13\n\x0fNOT_BEGINS_WITH\x10\x11\x12\x1b\n\x17LIST_MEMBER_BEGINS_WITH\x10\x12\x12\x1f\n\x1bNOT_LIST_MEMBER_BEGINS_WITH\x10\x13\x12\x15\n\x11LIST_CONTAINS_ALL\x10\x14\x12\x19\n\x15LIST_NOT_CONTAINS_ALL\x10\x15\x12\x0b\n\x07UNKNOWN\x10\x16\x1a\xb4\x01\n\x04Sort\x12+\n\tfieldName\x18\x01 \x01(\x0b\x32\x18.Record.Field.Identifier\x12 \n\x05order\x18\x02 \x01(\x0e\x32\x11.Query.Sort.Order\x12(\n\ncoordinate\x18\x03 \x01(\x0b\x32\x14.Location.Coordinate\"3\n\x05Order\x12\r\n\tASCENDING\x10\x01\x12\x0e\n\nDESCENDING\x10\x02\x12\x0b\n\x07UNKNOWN\x10\x03\" \n\rQueryOperator\x12\x07\n\x03\x41ND\x10\x01\x12\x06\n\x02OR\x10\x02\"\x14\n\x04\x44\x61te\x12\x0c\n\x04time\x18\x01 \x01(\x01\"\xa6\x03\n\x05\x41sset\x12\r\n\x05owner\x18\x01 \x01(\t\x12\x11\n\tsignature\x18\x02 \x01(\x0c\x12\x0e\n\x06header\x18\x03 \x01(\x0c\x12\x0c\n\x04size\x18\x04 \x01(\x04\x12\x15\n\rdownloadToken\x18\x05 \x01(\t\x12\x17\n\x0f\x64ownloadRequest\x18\x06 \x01(\x0c\x12\x1a\n\x12\x64\x65rivedContentType\x18\x07 \x01(\t\x12\x16\n\x0e\x63ontentBaseURL\x18\x08 \x01(\t\x12\x11\n\trequestor\x18\t \x01(\t\x12#\n\x08recordID\x18\n \x01(\x0b\x32\x11.RecordIdentifier\x12\x15\n\ruploadReceipt\x18\x0b \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x0c \x01(\x0c\x12\x17\n\x0f\x64ownloadBaseURL\x18\r \x01(\t\x12\x1d\n\x15\x64ownloadURLExpiration\x18\x0e \x01(\x04\x12\'\n\x0eprotectionInfo\x18\x0f \x01(\x0b\x32\x0f.ProtectionInfo\x12\x1a\n\x12referenceSignature\x18\x11 \x01(\x0c\x12\x1f\n\x17\x64ownloadTokenExpiration\x18\x12 \x01(\x04\"F\n\x0e\x44\x61teStatistics\x12\x17\n\x08\x63reation\x18\x01 \x01(\x0b\x32\x05.Date\x12\x1b\n\x0cmodification\x18\x02 \x01(\x0b\x32\x05.Date\"\xa4\x02\n\x08Location\x12(\n\ncoordinate\x18\x01 \x01(\x0b\x32\x14.Location.Coordinate\x12\x1f\n\x06\x62ounds\x18\x02 \x01(\x0b\x32\x0f.Location.Bound\x1a\x17\n\x05\x42ound\x12\x0e\n\x06radius\x18\x01 \x01(\x01\x1a\xb3\x01\n\nCoordinate\x12\x11\n\tlattitude\x18\x01 \x01(\x01\x12\x11\n\tlongitude\x18\x02 \x01(\x01\x12\x1a\n\x12horizontalAccuracy\x18\x03 \x01(\x01\x12\x10\n\x08\x61ltitude\x18\x04 \x01(\x01\x12\x18\n\x10verticalAccuracy\x18\x05 \x01(\x01\x12\x0e\n\x06\x63ourse\x18\x06 \x01(\x01\x12\r\n\x05speed\x18\x07 \x01(\x01\x12\x18\n\ttimestamp\x18\x08 \x01(\x0b\x32\x05.Date\"=\n\x07Package\x12\x18\n\x08manifest\x18\x01 \x01(\x0b\x32\x06.Asset\x12\x18\n\x08sections\x18\x02 \x03(\x0b\x32\x06.Asset\"\xd8\x0b\n\x06Record\x12\x0c\n\x04\x65tag\x18\x01 \x01(\t\x12+\n\x10recordIdentifier\x18\x02 \x01(\x0b\x32\x11.RecordIdentifier\x12\x1a\n\x04type\x18\x03 \x01(\x0b\x32\x0c.Record.Type\x12\x1e\n\tcreatedBy\x18\x04 \x01(\x0b\x32\x0b.Identifier\x12\'\n\x0etimeStatistics\x18\x05 \x01(\x0b\x32\x0f.DateStatistics\x12\"\n\x0brecordField\x18\x07 \x03(\x0b\x32\r.Record.Field\x12!\n\x07shareId\x18\x08 \x01(\x0b\x32\x10.ShareIdentifier\x12\x1f\n\nmodifiedBy\x18\t \x01(\x0b\x32\x0b.Identifier\x12\x19\n\x11\x63onflictLoserEtag\x18\n \x03(\t\x12\x18\n\x10modifiedByDevice\x18\x0b \x01(\t\x12#\n\x0cpluginFields\x18\x0c \x03(\x0b\x32\r.Record.Field\x12\'\n\x0eprotectionInfo\x18\r \x01(\x0b\x32\x0f.ProtectionInfo\x12\x12\n\npermission\x18\x0f \x01(\r\x1a\x89\x07\n\x05\x46ield\x12,\n\nidentifier\x18\x01 \x01(\x0b\x32\x18.Record.Field.Identifier\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.Record.Field.Value\x1a\x1a\n\nIdentifier\x12\x0c\n\x04name\x18\x01 \x01(\t\x1a\x91\x06\n\x05Value\x12&\n\x04type\x18\x01 \x01(\x0e\x32\x18.Record.Field.Value.Type\x12\x12\n\nbytesValue\x18\x02 \x01(\x0c\x12\x13\n\x0bsignedValue\x18\x04 \x01(\x03\x12\x13\n\x0b\x64oubleValue\x18\x05 \x01(\x01\x12\x18\n\tdateValue\x18\x06 \x01(\x0b\x32\x05.Date\x12\x13\n\x0bstringValue\x18\x07 \x01(\t\x12+\n\rlocationValue\x18\x08 \x01(\x0b\x32\x14.Location.Coordinate\x12)\n\x0ereferenceValue\x18\t \x01(\x0b\x32\x11.Record.Reference\x12\x1a\n\nassetValue\x18\n \x01(\x0b\x32\x06.Asset\x12\'\n\nlistValues\x18\x0b \x03(\x0b\x32\x13.Record.Field.Value\x12\x1e\n\x0cpackageValue\x18\x0c \x01(\x0b\x32\x08.Package\"\xb5\x03\n\x04Type\x12\x0e\n\nBYTES_TYPE\x10\x01\x12\r\n\tDATE_TYPE\x10\x02\x12\x0f\n\x0bSTRING_TYPE\x10\x03\x12\x11\n\rLOCATION_TYPE\x10\x04\x12\x12\n\x0eREFERENCE_TYPE\x10\x05\x12\x0e\n\nASSET_TYPE\x10\x06\x12\x0e\n\nINT64_TYPE\x10\x07\x12\x0f\n\x0b\x44OUBLE_TYPE\x10\x08\x12\x0e\n\nEMPTY_LIST\x10\t\x12\x12\n\x0e\x44\x41TE_LIST_TYPE\x10\n\x12\x13\n\x0f\x42YTES_LIST_TYPE\x10\x0b\x12\x16\n\x12LOCATION_LIST_TYPE\x10\x0c\x12\x17\n\x13REFERENCE_LIST_TYPE\x10\r\x12\x13\n\x0f\x41SSET_LIST_TYPE\x10\x0e\x12\x14\n\x10STRING_LIST_TYPE\x10\x0f\x12\r\n\tLIST_TYPE\x10\x10\x12\x13\n\x0fINT64_LIST_TYPE\x10\x11\x12\x14\n\x10\x44OUBLE_LIST_TYPE\x10\x12\x12\x10\n\x0cPACKAGE_TYPE\x10\x13\x12\x18\n\x14\x45NCRYPTED_BYTES_TYPE\x10\x14\x12\x1d\n\x19\x45NCRYPTED_BYTES_LIST_TYPE\x10\x15\x12\x0b\n\x07UNKNOWN\x10\x16\x1a\x8c\x01\n\tReference\x12$\n\x04type\x18\x01 \x01(\x0e\x32\x16.Record.Reference.Type\x12+\n\x10recordIdentifier\x18\x02 \x01(\x0b\x32\x11.RecordIdentifier\",\n\x04Type\x12\n\n\x06OWNING\x10\x01\x12\x08\n\x04WEAK\x10\x02\x12\x0e\n\nVALIDATING\x10\x03\x1a\x14\n\x04Type\x12\x0c\n\x04name\x18\x01 \x01(\t\";\n\x0fRequestedFields\x12(\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x18.Record.Field.Identifier\"L\n\x10\x41ssetsToDownload\x12\x11\n\tallAssets\x18\x01 \x01(\x08\x12%\n\x0b\x61ssetFields\x18\x02 \x01(\x0b\x32\x10.RequestedFields\"d\n\x06Locale\x12\x14\n\x0clanguageCode\x18\x01 \x01(\t\x12\x12\n\nregionCode\x18\x02 \x01(\t\x12\x18\n\x10\x65nabledKeyboards\x18\x03 \x03(\t\x12\x16\n\x0e\x61\x63tiveKeyboard\x18\x04 \x01(\t\"\\\n\x0fShareIdentifier\x12\x1a\n\x05value\x18\x01 \x01(\x0b\x32\x0b.Identifier\x12-\n\x0ezoneIdentifier\x18\x02 \x01(\x0b\x32\x15.RecordZoneIdentifier\"]\n\x10RecordIdentifier\x12\x1a\n\x05value\x18\x01 \x01(\x0b\x32\x0b.Identifier\x12-\n\x0ezoneIdentifier\x18\x02 \x01(\x0b\x32\x15.RecordZoneIdentifier\"X\n\x14RecordZoneIdentifier\x12\x1a\n\x05value\x18\x01 \x01(\x0b\x32\x0b.Identifier\x12$\n\x0fownerIdentifier\x18\x02 \x01(\x0b\x32\x0b.Identifier\"\x9f\x01\n\nIdentifier\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1e\n\x04type\x18\x02 \x01(\x0e\x32\x10.Identifier.Type\"c\n\x04Type\x12\n\n\x06RECORD\x10\x01\x12\n\n\x06\x44\x45VICE\x10\x02\x12\x10\n\x0cSUBSCRIPTION\x10\x03\x12\t\n\x05SHARE\x10\x04\x12\x0b\n\x07\x43OMMENT\x10\x05\x12\x0f\n\x0bRECORD_ZONE\x10\x06\x12\x08\n\x04USER\x10\x07\"C\n\x0eProtectionInfo\x12\x16\n\x0eprotectionInfo\x18\x01 \x01(\x0c\x12\x19\n\x11protectionInfoTag\x18\x02 \x01(\t\"\x9b\x01\n\x04Zone\x12-\n\x0ezoneIdentifier\x18\x01 \x01(\x0b\x32\x15.RecordZoneIdentifier\x12\x0c\n\x04\x65tag\x18\x02 \x01(\t\x12\'\n\x0eprotectionInfo\x18\x03 \x01(\x0b\x32\x0f.ProtectionInfo\x12-\n\x14recordProtectionInfo\x18\x06 \x01(\x0b\x32\x0f.ProtectionInfo\",\n\nFileTokens\x12\x1e\n\nfileTokens\x18\x01 \x03(\x0b\x32\n.FileToken\"_\n\tFileToken\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\x15\n\rdownloadToken\x18\x02 \x01(\t\x12\x0c\n\x04size\x18\x03 \x01(\x04\x12\x1a\n\x12referenceSignature\x18\x04 \x01(\x0c\"\xf3\x02\n\x13\x45ncryptedAttributes\x12\x14\n\x0crelativePath\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\x12\r\n\x05\x62irth\x18\x03 \x01(\x04\x12\x10\n\x08modified\x18\x04 \x01(\x04\x12\x15\n\rstatusChanged\x18\x05 \x01(\x04\x12\x0c\n\x04size\x18\x06 \x01(\x04\x12\x0f\n\x07groupID\x18\x07 \x01(\r\x12\x0e\n\x06userID\x18\x08 \x01(\r\x12\x0c\n\x04mode\x18\t \x01(\r\x12\x16\n\x0esizeBeforeCopy\x18\n \x01(\x04\x12\x12\n\nlinkTarget\x18\x0b \x01(\x0c\x12\x15\n\rencryptionKey\x18\x0c \x01(\x0c\x12\x17\n\x0fsha256Signature\x18\r \x01(\x0c\x12\x15\n\rdomainOrdinal\x18\x0e \x01(\x05\x12\r\n\x05\x66lags\x18\x0f \x01(\x05\x12\x1d\n\x15\x63ontentEncodingMethod\x18\x10 \x01(\x05\x12 \n\x18\x63ontentCompressionMethod\x18\x11 \x01(\x05') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'examples.cloudkit_pb2', _globals) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + _globals['_REQUESTOPERATION']._serialized_start=28 + _globals['_REQUESTOPERATION']._serialized_end=1438 + _globals['_REQUESTOPERATION_HEADER']._serialized_start=330 + _globals['_REQUESTOPERATION_HEADER']._serialized_end=1438 + _globals['_REQUESTOPERATION_HEADER_CONTAINERENVIRONMENT']._serialized_start=1286 + _globals['_REQUESTOPERATION_HEADER_CONTAINERENVIRONMENT']._serialized_end=1337 + _globals['_REQUESTOPERATION_HEADER_DATABASE']._serialized_start=1339 + _globals['_REQUESTOPERATION_HEADER_DATABASE']._serialized_end=1395 + _globals['_REQUESTOPERATION_HEADER_ISOLATIONLEVEL']._serialized_start=1397 + _globals['_REQUESTOPERATION_HEADER_ISOLATIONLEVEL']._serialized_end=1438 + _globals['_RECORDSAVEREQUEST']._serialized_start=1440 + _globals['_RECORDSAVEREQUEST']._serialized_end=1512 + _globals['_RESPONSEOPERATION']._serialized_start=1515 + _globals['_RESPONSEOPERATION']._serialized_end=4296 + _globals['_RESPONSEOPERATION_RESULT']._serialized_start=1801 + _globals['_RESPONSEOPERATION_RESULT']._serialized_end=4296 + _globals['_RESPONSEOPERATION_RESULT_ERROR']._serialized_start=1906 + _globals['_RESPONSEOPERATION_RESULT_ERROR']._serialized_end=4230 + _globals['_RESPONSEOPERATION_RESULT_ERROR_CLIENT']._serialized_start=2199 + _globals['_RESPONSEOPERATION_RESULT_ERROR_CLIENT']._serialized_end=3929 + _globals['_RESPONSEOPERATION_RESULT_ERROR_CLIENT_CODE']._serialized_start=2269 + _globals['_RESPONSEOPERATION_RESULT_ERROR_CLIENT_CODE']._serialized_end=3929 + _globals['_RESPONSEOPERATION_RESULT_ERROR_SERVER']._serialized_start=3932 + _globals['_RESPONSEOPERATION_RESULT_ERROR_SERVER']._serialized_end=4150 + _globals['_RESPONSEOPERATION_RESULT_ERROR_SERVER_CODE']._serialized_start=4002 + _globals['_RESPONSEOPERATION_RESULT_ERROR_SERVER_CODE']._serialized_end=4150 + _globals['_RESPONSEOPERATION_RESULT_ERROR_EXTENSION']._serialized_start=4152 + _globals['_RESPONSEOPERATION_RESULT_ERROR_EXTENSION']._serialized_end=4230 + _globals['_RESPONSEOPERATION_RESULT_CODE']._serialized_start=4232 + _globals['_RESPONSEOPERATION_RESULT_CODE']._serialized_end=4296 + _globals['_OPERATION']._serialized_start=4299 + _globals['_OPERATION']._serialized_end=5763 + _globals['_OPERATION_TYPE']._serialized_start=4406 + _globals['_OPERATION_TYPE']._serialized_end=5763 + _globals['_ZONERETRIEVEREQUEST']._serialized_start=5765 + _globals['_ZONERETRIEVEREQUEST']._serialized_end=5833 + _globals['_ZONERETRIEVERESPONSE']._serialized_start=5836 + _globals['_ZONERETRIEVERESPONSE']._serialized_end=6098 + _globals['_ZONERETRIEVERESPONSE_ZONESUMMARY']._serialized_start=5917 + _globals['_ZONERETRIEVERESPONSE_ZONESUMMARY']._serialized_end=6098 + _globals['_RECORDRETRIEVEREQUEST']._serialized_start=6101 + _globals['_RECORDRETRIEVEREQUEST']._serialized_end=6555 + _globals['_RECORDRETRIEVEREQUEST_RETRIEVEASSETURL']._serialized_start=6370 + _globals['_RECORDRETRIEVEREQUEST_RETRIEVEASSETURL']._serialized_end=6555 + _globals['_RECORDRETRIEVEREQUEST_RETRIEVEASSETURL_TYPE']._serialized_start=6511 + _globals['_RECORDRETRIEVEREQUEST_RETRIEVEASSETURL_TYPE']._serialized_end=6555 + _globals['_RECORDRETRIEVERESPONSE']._serialized_start=6557 + _globals['_RECORDRETRIEVERESPONSE']._serialized_end=6638 + _globals['_QUERYRETRIEVEREQUEST']._serialized_start=6641 + _globals['_QUERYRETRIEVEREQUEST']._serialized_end=6864 + _globals['_QUERYRETRIEVERESPONSE']._serialized_start=6867 + _globals['_QUERYRETRIEVERESPONSE']._serialized_end=7167 + _globals['_QUERYRETRIEVERESPONSE_QUERYRESULT']._serialized_start=6979 + _globals['_QUERYRETRIEVERESPONSE_QUERYRESULT']._serialized_end=7167 + _globals['_QUERYRETRIEVERESPONSE_QUERYRESULT_TYPE']._serialized_start=7127 + _globals['_QUERYRETRIEVERESPONSE_QUERYRESULT_TYPE']._serialized_end=7167 + _globals['_QUERY']._serialized_start=7170 + _globals['_QUERY']._serialized_end=8168 + _globals['_QUERY_FILTER']._serialized_start=7332 + _globals['_QUERY_FILTER']._serialized_end=7951 + _globals['_QUERY_FILTER_TYPE']._serialized_start=7496 + _globals['_QUERY_FILTER_TYPE']._serialized_end=7951 + _globals['_QUERY_SORT']._serialized_start=7954 + _globals['_QUERY_SORT']._serialized_end=8134 + _globals['_QUERY_SORT_ORDER']._serialized_start=8083 + _globals['_QUERY_SORT_ORDER']._serialized_end=8134 + _globals['_QUERY_QUERYOPERATOR']._serialized_start=8136 + _globals['_QUERY_QUERYOPERATOR']._serialized_end=8168 + _globals['_DATE']._serialized_start=8170 + _globals['_DATE']._serialized_end=8190 + _globals['_ASSET']._serialized_start=8193 + _globals['_ASSET']._serialized_end=8615 + _globals['_DATESTATISTICS']._serialized_start=8617 + _globals['_DATESTATISTICS']._serialized_end=8687 + _globals['_LOCATION']._serialized_start=8690 + _globals['_LOCATION']._serialized_end=8982 + _globals['_LOCATION_BOUND']._serialized_start=8777 + _globals['_LOCATION_BOUND']._serialized_end=8800 + _globals['_LOCATION_COORDINATE']._serialized_start=8803 + _globals['_LOCATION_COORDINATE']._serialized_end=8982 + _globals['_PACKAGE']._serialized_start=8984 + _globals['_PACKAGE']._serialized_end=9045 + _globals['_RECORD']._serialized_start=9048 + _globals['_RECORD']._serialized_end=10544 + _globals['_RECORD_FIELD']._serialized_start=9474 + _globals['_RECORD_FIELD']._serialized_end=10379 + _globals['_RECORD_FIELD_IDENTIFIER']._serialized_start=9565 + _globals['_RECORD_FIELD_IDENTIFIER']._serialized_end=9591 + _globals['_RECORD_FIELD_VALUE']._serialized_start=9594 + _globals['_RECORD_FIELD_VALUE']._serialized_end=10379 + _globals['_RECORD_FIELD_VALUE_TYPE']._serialized_start=9942 + _globals['_RECORD_FIELD_VALUE_TYPE']._serialized_end=10379 + _globals['_RECORD_REFERENCE']._serialized_start=10382 + _globals['_RECORD_REFERENCE']._serialized_end=10522 + _globals['_RECORD_REFERENCE_TYPE']._serialized_start=10478 + _globals['_RECORD_REFERENCE_TYPE']._serialized_end=10522 + _globals['_RECORD_TYPE']._serialized_start=10524 + _globals['_RECORD_TYPE']._serialized_end=10544 + _globals['_REQUESTEDFIELDS']._serialized_start=10546 + _globals['_REQUESTEDFIELDS']._serialized_end=10605 + _globals['_ASSETSTODOWNLOAD']._serialized_start=10607 + _globals['_ASSETSTODOWNLOAD']._serialized_end=10683 + _globals['_LOCALE']._serialized_start=10685 + _globals['_LOCALE']._serialized_end=10785 + _globals['_SHAREIDENTIFIER']._serialized_start=10787 + _globals['_SHAREIDENTIFIER']._serialized_end=10879 + _globals['_RECORDIDENTIFIER']._serialized_start=10881 + _globals['_RECORDIDENTIFIER']._serialized_end=10974 + _globals['_RECORDZONEIDENTIFIER']._serialized_start=10976 + _globals['_RECORDZONEIDENTIFIER']._serialized_end=11064 + _globals['_IDENTIFIER']._serialized_start=11067 + _globals['_IDENTIFIER']._serialized_end=11226 + _globals['_IDENTIFIER_TYPE']._serialized_start=11127 + _globals['_IDENTIFIER_TYPE']._serialized_end=11226 + _globals['_PROTECTIONINFO']._serialized_start=11228 + _globals['_PROTECTIONINFO']._serialized_end=11295 + _globals['_ZONE']._serialized_start=11298 + _globals['_ZONE']._serialized_end=11453 + _globals['_FILETOKENS']._serialized_start=11455 + _globals['_FILETOKENS']._serialized_end=11499 + _globals['_FILETOKEN']._serialized_start=11501 + _globals['_FILETOKEN']._serialized_end=11596 + _globals['_ENCRYPTEDATTRIBUTES']._serialized_start=11599 + _globals['_ENCRYPTEDATTRIBUTES']._serialized_end=11970 +# @@protoc_insertion_point(module_scope)