@yorkie-js/react 0.7.3 → 0.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -102,7 +102,7 @@ function varint64write(lo, hi, bytes) {
102
102
  }
103
103
  bytes.push(hi >>> 31 & 1);
104
104
  }
105
- const TWO_PWR_32_DBL$1 = 4294967296;
105
+ const TWO_PWR_32_DBL = 4294967296;
106
106
  function int64FromString(dec) {
107
107
  const minus = dec[0] === "-";
108
108
  if (minus) {
@@ -115,9 +115,9 @@ function int64FromString(dec) {
115
115
  const digit1e6 = Number(dec.slice(begin, end));
116
116
  highBits *= base;
117
117
  lowBits = lowBits * base + digit1e6;
118
- if (lowBits >= TWO_PWR_32_DBL$1) {
119
- highBits = highBits + (lowBits / TWO_PWR_32_DBL$1 | 0);
120
- lowBits = lowBits % TWO_PWR_32_DBL$1;
118
+ if (lowBits >= TWO_PWR_32_DBL) {
119
+ highBits = highBits + (lowBits / TWO_PWR_32_DBL | 0);
120
+ lowBits = lowBits % TWO_PWR_32_DBL;
121
121
  }
122
122
  }
123
123
  add1e6digit(-24, -18);
@@ -138,7 +138,7 @@ function int64ToString(lo, hi) {
138
138
  function uInt64ToString(lo, hi) {
139
139
  ({ lo, hi } = toUnsigned(lo, hi));
140
140
  if (hi <= 2097151) {
141
- return String(TWO_PWR_32_DBL$1 * hi + lo);
141
+ return String(TWO_PWR_32_DBL * hi + lo);
142
142
  }
143
143
  const low = lo & 16777215;
144
144
  const mid = (lo >>> 24 | hi << 8) & 16777215;
@@ -4385,6 +4385,19 @@ function codeToString(value) {
4385
4385
  }
4386
4386
  return name2[0].toLowerCase() + name2.substring(1).replace(/[A-Z]/g, (c) => "_" + c.toLowerCase());
4387
4387
  }
4388
+ let stringToCode;
4389
+ function codeFromString(value) {
4390
+ if (!stringToCode) {
4391
+ stringToCode = {};
4392
+ for (const value2 of Object.values(Code$1)) {
4393
+ if (typeof value2 == "string") {
4394
+ continue;
4395
+ }
4396
+ stringToCode[codeToString(value2)] = value2;
4397
+ }
4398
+ }
4399
+ return stringToCode[value];
4400
+ }
4388
4401
  class ConnectError extends Error {
4389
4402
  /**
4390
4403
  * Create a new ConnectError.
@@ -4473,6 +4486,15 @@ function decodeBinaryHeader(value, desc, options) {
4473
4486
  throw ConnectError.from(e, Code$1.DataLoss);
4474
4487
  }
4475
4488
  }
4489
+ function appendHeaders(...headers) {
4490
+ const h = new Headers();
4491
+ for (const e of headers) {
4492
+ e.forEach((value, key) => {
4493
+ h.append(key, value);
4494
+ });
4495
+ }
4496
+ return h;
4497
+ }
4476
4498
  function makeAnyClient(service, createMethod) {
4477
4499
  const client = {};
4478
4500
  for (const desc of service.methods) {
@@ -4620,10 +4642,10 @@ var __asyncValues$1 = function(o) {
4620
4642
  }, reject);
4621
4643
  }
4622
4644
  };
4623
- var __await$2 = function(v) {
4624
- return this instanceof __await$2 ? (this.v = v, this) : new __await$2(v);
4645
+ var __await$3 = function(v) {
4646
+ return this instanceof __await$3 ? (this.v = v, this) : new __await$3(v);
4625
4647
  };
4626
- var __asyncGenerator$2 = function(thisArg, _arguments, generator) {
4648
+ var __asyncGenerator$3 = function(thisArg, _arguments, generator) {
4627
4649
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
4628
4650
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
4629
4651
  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
@@ -4652,7 +4674,7 @@ var __asyncGenerator$2 = function(thisArg, _arguments, generator) {
4652
4674
  }
4653
4675
  }
4654
4676
  function step(r) {
4655
- r.value instanceof __await$2 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4677
+ r.value instanceof __await$3 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4656
4678
  }
4657
4679
  function fulfill(value) {
4658
4680
  resume("next", value);
@@ -4673,13 +4695,13 @@ var __asyncDelegator$1 = function(o) {
4673
4695
  }, i;
4674
4696
  function verb(n, f) {
4675
4697
  i[n] = o[n] ? function(v) {
4676
- return (p = !p) ? { value: __await$2(o[n](v)), done: false } : f ? f(v) : v;
4698
+ return (p = !p) ? { value: __await$3(o[n](v)), done: false } : f ? f(v) : v;
4677
4699
  } : f;
4678
4700
  }
4679
4701
  };
4680
4702
  function createAsyncIterable(items) {
4681
- return __asyncGenerator$2(this, arguments, function* createAsyncIterable_1() {
4682
- yield __await$2(yield* __asyncDelegator$1(__asyncValues$1(items)));
4703
+ return __asyncGenerator$3(this, arguments, function* createAsyncIterable_1() {
4704
+ yield __await$3(yield* __asyncDelegator$1(__asyncValues$1(items)));
4683
4705
  });
4684
4706
  }
4685
4707
  var __asyncValues = function(o) {
@@ -4701,8 +4723,8 @@ var __asyncValues = function(o) {
4701
4723
  }, reject);
4702
4724
  }
4703
4725
  };
4704
- var __await$1 = function(v) {
4705
- return this instanceof __await$1 ? (this.v = v, this) : new __await$1(v);
4726
+ var __await$2 = function(v) {
4727
+ return this instanceof __await$2 ? (this.v = v, this) : new __await$2(v);
4706
4728
  };
4707
4729
  var __asyncDelegator = function(o) {
4708
4730
  var i, p;
@@ -4713,11 +4735,11 @@ var __asyncDelegator = function(o) {
4713
4735
  }, i;
4714
4736
  function verb(n, f) {
4715
4737
  i[n] = o[n] ? function(v) {
4716
- return (p = !p) ? { value: __await$1(o[n](v)), done: false } : f ? f(v) : v;
4738
+ return (p = !p) ? { value: __await$2(o[n](v)), done: false } : f ? f(v) : v;
4717
4739
  } : f;
4718
4740
  }
4719
4741
  };
4720
- var __asyncGenerator$1 = function(thisArg, _arguments, generator) {
4742
+ var __asyncGenerator$2 = function(thisArg, _arguments, generator) {
4721
4743
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
4722
4744
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
4723
4745
  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
@@ -4746,7 +4768,7 @@ var __asyncGenerator$1 = function(thisArg, _arguments, generator) {
4746
4768
  }
4747
4769
  }
4748
4770
  function step(r) {
4749
- r.value instanceof __await$1 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4771
+ r.value instanceof __await$2 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4750
4772
  }
4751
4773
  function fulfill(value) {
4752
4774
  resume("next", value);
@@ -4826,11 +4848,11 @@ function createBiDiStreamingFn(transport, method) {
4826
4848
  }
4827
4849
  function handleStreamResponse(stream, options) {
4828
4850
  const it = (function() {
4829
- return __asyncGenerator$1(this, arguments, function* () {
4851
+ return __asyncGenerator$2(this, arguments, function* () {
4830
4852
  var _a, _b;
4831
- const response = yield __await$1(stream);
4853
+ const response = yield __await$2(stream);
4832
4854
  (_a = options === null || options === void 0 ? void 0 : options.onHeader) === null || _a === void 0 ? void 0 : _a.call(options, response.header);
4833
- yield __await$1(yield* __asyncDelegator(__asyncValues(response.message)));
4855
+ yield __await$2(yield* __asyncDelegator(__asyncValues(response.message)));
4834
4856
  (_b = options === null || options === void 0 ? void 0 : options.onTrailer) === null || _b === void 0 ? void 0 : _b.call(options, response.trailer);
4835
4857
  });
4836
4858
  })()[Symbol.asyncIterator]();
@@ -4920,12 +4942,12 @@ function trailerParse(data) {
4920
4942
  }
4921
4943
  return headers;
4922
4944
  }
4923
- const headerContentType = "Content-Type";
4924
- const headerTimeout = "Grpc-Timeout";
4945
+ const headerContentType$1 = "Content-Type";
4946
+ const headerTimeout$1 = "Grpc-Timeout";
4925
4947
  const headerGrpcStatus = "Grpc-Status";
4926
4948
  const headerGrpcMessage = "Grpc-Message";
4927
4949
  const headerStatusDetailsBin = "Grpc-Status-Details-Bin";
4928
- const headerUserAgent = "User-Agent";
4950
+ const headerUserAgent$1 = "User-Agent";
4929
4951
  const headerXUserAgent = "X-User-Agent";
4930
4952
  const headerXGrpcWeb = "X-Grpc-Web";
4931
4953
  const contentTypeProto = "application/grpc-web+proto";
@@ -5063,6 +5085,204 @@ function createJsonSerialization(desc, options) {
5063
5085
  }
5064
5086
  };
5065
5087
  }
5088
+ const contentTypeRegExp = /^application\/(connect\+)?(?:(json)(?:; ?charset=utf-?8)?|(proto))$/i;
5089
+ const contentTypeUnaryProto = "application/proto";
5090
+ const contentTypeUnaryJson = "application/json";
5091
+ const contentTypeStreamProto = "application/connect+proto";
5092
+ const contentTypeStreamJson = "application/connect+json";
5093
+ function parseContentType(contentType) {
5094
+ const match = contentType === null || contentType === void 0 ? void 0 : contentType.match(contentTypeRegExp);
5095
+ if (!match) {
5096
+ return void 0;
5097
+ }
5098
+ const stream = !!match[1];
5099
+ const binary = !!match[3];
5100
+ return { stream, binary };
5101
+ }
5102
+ (function(s, e) {
5103
+ var t = {};
5104
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5105
+ t[p] = s[p];
5106
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
5107
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
5108
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
5109
+ t[p[i]] = s[p[i]];
5110
+ }
5111
+ return t;
5112
+ });
5113
+ function errorFromJson(jsonValue, metadata, fallback) {
5114
+ var _a;
5115
+ if (metadata) {
5116
+ new Headers(metadata).forEach((value, key) => fallback.metadata.append(key, value));
5117
+ }
5118
+ if (typeof jsonValue !== "object" || jsonValue == null || Array.isArray(jsonValue)) {
5119
+ throw fallback;
5120
+ }
5121
+ let code = fallback.code;
5122
+ if ("code" in jsonValue && typeof jsonValue.code === "string") {
5123
+ code = (_a = codeFromString(jsonValue.code)) !== null && _a !== void 0 ? _a : code;
5124
+ }
5125
+ const message = jsonValue.message;
5126
+ if (message != null && typeof message !== "string") {
5127
+ throw fallback;
5128
+ }
5129
+ const error = new ConnectError(message !== null && message !== void 0 ? message : "", code, metadata);
5130
+ if ("details" in jsonValue && Array.isArray(jsonValue.details)) {
5131
+ for (const detail of jsonValue.details) {
5132
+ if (detail === null || typeof detail != "object" || Array.isArray(detail) || typeof detail.type != "string" || typeof detail.value != "string") {
5133
+ throw fallback;
5134
+ }
5135
+ try {
5136
+ error.details.push({
5137
+ type: detail.type,
5138
+ value: base64Decode(detail.value),
5139
+ debug: detail.debug
5140
+ });
5141
+ } catch (e) {
5142
+ throw fallback;
5143
+ }
5144
+ }
5145
+ }
5146
+ return error;
5147
+ }
5148
+ const endStreamFlag = 2;
5149
+ function endStreamFromJson(data) {
5150
+ const parseErr = new ConnectError("invalid end stream", Code$1.Unknown);
5151
+ let jsonValue;
5152
+ try {
5153
+ jsonValue = JSON.parse(typeof data == "string" ? data : new TextDecoder().decode(data));
5154
+ } catch (e) {
5155
+ throw parseErr;
5156
+ }
5157
+ if (typeof jsonValue != "object" || jsonValue == null || Array.isArray(jsonValue)) {
5158
+ throw parseErr;
5159
+ }
5160
+ const metadata = new Headers();
5161
+ if ("metadata" in jsonValue) {
5162
+ if (typeof jsonValue.metadata != "object" || jsonValue.metadata == null || Array.isArray(jsonValue.metadata)) {
5163
+ throw parseErr;
5164
+ }
5165
+ for (const [key, values] of Object.entries(jsonValue.metadata)) {
5166
+ if (!Array.isArray(values) || values.some((value) => typeof value != "string")) {
5167
+ throw parseErr;
5168
+ }
5169
+ for (const value of values) {
5170
+ metadata.append(key, value);
5171
+ }
5172
+ }
5173
+ }
5174
+ const error = "error" in jsonValue && jsonValue.error != null ? errorFromJson(jsonValue.error, metadata, parseErr) : void 0;
5175
+ return { metadata, error };
5176
+ }
5177
+ const headerContentType = "Content-Type";
5178
+ const headerUnaryContentLength = "Content-Length";
5179
+ const headerUnaryEncoding = "Content-Encoding";
5180
+ const headerUnaryAcceptEncoding = "Accept-Encoding";
5181
+ const headerTimeout = "Connect-Timeout-Ms";
5182
+ const headerProtocolVersion = "Connect-Protocol-Version";
5183
+ const headerUserAgent = "User-Agent";
5184
+ function codeFromHttpStatus$1(httpStatus) {
5185
+ switch (httpStatus) {
5186
+ case 400:
5187
+ return Code$1.Internal;
5188
+ case 401:
5189
+ return Code$1.Unauthenticated;
5190
+ case 403:
5191
+ return Code$1.PermissionDenied;
5192
+ case 404:
5193
+ return Code$1.Unimplemented;
5194
+ case 429:
5195
+ return Code$1.Unavailable;
5196
+ case 502:
5197
+ return Code$1.Unavailable;
5198
+ case 503:
5199
+ return Code$1.Unavailable;
5200
+ case 504:
5201
+ return Code$1.Unavailable;
5202
+ default:
5203
+ return Code$1.Unknown;
5204
+ }
5205
+ }
5206
+ function trailerDemux(header) {
5207
+ const h = new Headers(), t = new Headers();
5208
+ header.forEach((value, key) => {
5209
+ if (key.toLowerCase().startsWith("trailer-")) {
5210
+ t.append(key.substring(8), value);
5211
+ } else {
5212
+ h.append(key, value);
5213
+ }
5214
+ });
5215
+ return [h, t];
5216
+ }
5217
+ const protocolVersion = "1";
5218
+ function requestHeader$1(methodKind, useBinaryFormat, timeoutMs, userProvidedHeaders, setUserAgent) {
5219
+ const result = new Headers(userProvidedHeaders !== null && userProvidedHeaders !== void 0 ? userProvidedHeaders : {});
5220
+ if (timeoutMs !== void 0) {
5221
+ result.set(headerTimeout, `${timeoutMs}`);
5222
+ }
5223
+ result.set(headerContentType, methodKind == "unary" ? useBinaryFormat ? contentTypeUnaryProto : contentTypeUnaryJson : useBinaryFormat ? contentTypeStreamProto : contentTypeStreamJson);
5224
+ result.set(headerProtocolVersion, protocolVersion);
5225
+ if (!result.has(headerUserAgent) && setUserAgent) ;
5226
+ return result;
5227
+ }
5228
+ function validateResponse$1(methodKind, useBinaryFormat, status, headers) {
5229
+ const mimeType = headers.get(headerContentType);
5230
+ const parsedType = parseContentType(mimeType);
5231
+ if (status !== 200) {
5232
+ const errorFromStatus = new ConnectError(`HTTP ${status}`, codeFromHttpStatus$1(status), headers);
5233
+ if (methodKind == "unary" && parsedType && !parsedType.binary) {
5234
+ return { isUnaryError: true, unaryError: errorFromStatus };
5235
+ }
5236
+ throw errorFromStatus;
5237
+ }
5238
+ const allowedContentType = {
5239
+ binary: useBinaryFormat,
5240
+ stream: methodKind !== "unary"
5241
+ };
5242
+ if ((parsedType === null || parsedType === void 0 ? void 0 : parsedType.binary) !== allowedContentType.binary || parsedType.stream !== allowedContentType.stream) {
5243
+ throw new ConnectError(`unsupported content type ${mimeType}`, parsedType === void 0 ? Code$1.Unknown : Code$1.Internal, headers);
5244
+ }
5245
+ return { isUnaryError: false };
5246
+ }
5247
+ const contentTypePrefix = "application/";
5248
+ function encodeMessageForUrl(message, useBase64) {
5249
+ if (useBase64) {
5250
+ return base64Encode(message, "url");
5251
+ }
5252
+ return encodeURIComponent(new TextDecoder().decode(message));
5253
+ }
5254
+ function transformConnectPostToGetRequest(request, message, useBase64) {
5255
+ let query = `?connect=v${protocolVersion}`;
5256
+ const contentType = request.header.get(headerContentType);
5257
+ if ((contentType === null || contentType === void 0 ? void 0 : contentType.indexOf(contentTypePrefix)) === 0) {
5258
+ query += "&encoding=" + encodeURIComponent(contentType.slice(contentTypePrefix.length));
5259
+ }
5260
+ const compression = request.header.get(headerUnaryEncoding);
5261
+ if (compression !== null && compression !== "identity") {
5262
+ query += "&compression=" + encodeURIComponent(compression);
5263
+ useBase64 = true;
5264
+ }
5265
+ if (useBase64) {
5266
+ query += "&base64=1";
5267
+ }
5268
+ query += "&message=" + encodeMessageForUrl(message, useBase64);
5269
+ const url = request.url + query;
5270
+ const header = new Headers(request.header);
5271
+ for (const h of [
5272
+ headerProtocolVersion,
5273
+ headerContentType,
5274
+ headerUnaryContentLength,
5275
+ headerUnaryEncoding,
5276
+ headerUnaryAcceptEncoding
5277
+ ]) {
5278
+ header.delete(h);
5279
+ }
5280
+ return Object.assign(Object.assign({}, request), {
5281
+ requestMethod: "GET",
5282
+ url,
5283
+ header
5284
+ });
5285
+ }
5066
5286
  function runUnaryCall(opt) {
5067
5287
  const next = applyInterceptors(opt.next, opt.interceptors);
5068
5288
  const [signal, abort, done] = setupSignal(opt);
@@ -5131,6 +5351,181 @@ function assertFetchApi() {
5131
5351
  throw new Error("connect-web requires the fetch API. Are you running on an old version of Node.js? Node.js is not supported in Connect for Web - please stay tuned for Connect for Node.");
5132
5352
  }
5133
5353
  }
5354
+ var __await$1 = function(v) {
5355
+ return this instanceof __await$1 ? (this.v = v, this) : new __await$1(v);
5356
+ };
5357
+ var __asyncGenerator$1 = function(thisArg, _arguments, generator) {
5358
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
5359
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
5360
+ return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
5361
+ return this;
5362
+ }, i;
5363
+ function awaitReturn(f) {
5364
+ return function(v) {
5365
+ return Promise.resolve(v).then(f, reject);
5366
+ };
5367
+ }
5368
+ function verb(n, f) {
5369
+ if (g[n]) {
5370
+ i[n] = function(v) {
5371
+ return new Promise(function(a, b) {
5372
+ q.push([n, v, a, b]) > 1 || resume(n, v);
5373
+ });
5374
+ };
5375
+ if (f) i[n] = f(i[n]);
5376
+ }
5377
+ }
5378
+ function resume(n, v) {
5379
+ try {
5380
+ step(g[n](v));
5381
+ } catch (e) {
5382
+ settle(q[0][3], e);
5383
+ }
5384
+ }
5385
+ function step(r) {
5386
+ r.value instanceof __await$1 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
5387
+ }
5388
+ function fulfill(value) {
5389
+ resume("next", value);
5390
+ }
5391
+ function reject(value) {
5392
+ resume("throw", value);
5393
+ }
5394
+ function settle(f, v) {
5395
+ if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
5396
+ }
5397
+ };
5398
+ const fetchOptions$1 = {
5399
+ redirect: "error"
5400
+ };
5401
+ function createConnectTransport(options) {
5402
+ var _a;
5403
+ assertFetchApi();
5404
+ const useBinaryFormat = (_a = options.useBinaryFormat) !== null && _a !== void 0 ? _a : false;
5405
+ return {
5406
+ async unary(method, signal, timeoutMs, header, message, contextValues) {
5407
+ const { serialize, parse: parse2 } = createClientMethodSerializers(method, useBinaryFormat, options.jsonOptions, options.binaryOptions);
5408
+ timeoutMs = timeoutMs === void 0 ? options.defaultTimeoutMs : timeoutMs <= 0 ? void 0 : timeoutMs;
5409
+ return await runUnaryCall({
5410
+ interceptors: options.interceptors,
5411
+ signal,
5412
+ timeoutMs,
5413
+ req: {
5414
+ stream: false,
5415
+ service: method.parent,
5416
+ method,
5417
+ requestMethod: "POST",
5418
+ url: createMethodUrl(options.baseUrl, method),
5419
+ header: requestHeader$1(method.methodKind, useBinaryFormat, timeoutMs, header, false),
5420
+ contextValues: contextValues !== null && contextValues !== void 0 ? contextValues : createContextValues(),
5421
+ message
5422
+ },
5423
+ next: async (req) => {
5424
+ var _a2;
5425
+ const useGet = options.useHttpGet === true && method.idempotency === MethodOptions_IdempotencyLevel.NO_SIDE_EFFECTS;
5426
+ let body = null;
5427
+ if (useGet) {
5428
+ req = transformConnectPostToGetRequest(req, serialize(req.message), useBinaryFormat);
5429
+ } else {
5430
+ body = serialize(req.message);
5431
+ }
5432
+ const fetch2 = (_a2 = options.fetch) !== null && _a2 !== void 0 ? _a2 : globalThis.fetch;
5433
+ const response = await fetch2(req.url, Object.assign(Object.assign({}, fetchOptions$1), { method: req.requestMethod, headers: req.header, signal: req.signal, body }));
5434
+ const { isUnaryError, unaryError } = validateResponse$1(method.methodKind, useBinaryFormat, response.status, response.headers);
5435
+ if (isUnaryError) {
5436
+ throw errorFromJson(await response.json(), appendHeaders(...trailerDemux(response.headers)), unaryError);
5437
+ }
5438
+ const [demuxedHeader, demuxedTrailer] = trailerDemux(response.headers);
5439
+ return {
5440
+ stream: false,
5441
+ service: method.parent,
5442
+ method,
5443
+ header: demuxedHeader,
5444
+ message: useBinaryFormat ? parse2(new Uint8Array(await response.arrayBuffer())) : fromJson(method.output, await response.json(), getJsonOptions(options.jsonOptions)),
5445
+ trailer: demuxedTrailer
5446
+ };
5447
+ }
5448
+ });
5449
+ },
5450
+ async stream(method, signal, timeoutMs, header, input, contextValues) {
5451
+ const { serialize, parse: parse2 } = createClientMethodSerializers(method, useBinaryFormat, options.jsonOptions, options.binaryOptions);
5452
+ function parseResponseBody(body, trailerTarget, header2, signal2) {
5453
+ return __asyncGenerator$1(this, arguments, function* parseResponseBody_1() {
5454
+ const reader = createEnvelopeReadableStream(body).getReader();
5455
+ let endStreamReceived = false;
5456
+ for (; ; ) {
5457
+ const result = yield __await$1(reader.read());
5458
+ if (result.done) {
5459
+ break;
5460
+ }
5461
+ const { flags, data } = result.value;
5462
+ if ((flags & compressedFlag) === compressedFlag) {
5463
+ throw new ConnectError(`protocol error: received unsupported compressed output`, Code$1.Internal);
5464
+ }
5465
+ if ((flags & endStreamFlag) === endStreamFlag) {
5466
+ endStreamReceived = true;
5467
+ const endStream = endStreamFromJson(data);
5468
+ if (endStream.error) {
5469
+ const error = endStream.error;
5470
+ header2.forEach((value, key) => {
5471
+ error.metadata.append(key, value);
5472
+ });
5473
+ throw error;
5474
+ }
5475
+ endStream.metadata.forEach((value, key) => trailerTarget.set(key, value));
5476
+ continue;
5477
+ }
5478
+ yield yield __await$1(parse2(data));
5479
+ }
5480
+ if ("throwIfAborted" in signal2) {
5481
+ signal2.throwIfAborted();
5482
+ }
5483
+ if (!endStreamReceived) {
5484
+ throw "missing EndStreamResponse";
5485
+ }
5486
+ });
5487
+ }
5488
+ async function createRequestBody(input2) {
5489
+ if (method.methodKind != "server_streaming") {
5490
+ throw "The fetch API does not support streaming request bodies";
5491
+ }
5492
+ const r = await input2[Symbol.asyncIterator]().next();
5493
+ if (r.done == true) {
5494
+ throw "missing request message";
5495
+ }
5496
+ return encodeEnvelope(0, serialize(r.value));
5497
+ }
5498
+ timeoutMs = timeoutMs === void 0 ? options.defaultTimeoutMs : timeoutMs <= 0 ? void 0 : timeoutMs;
5499
+ return await runStreamingCall({
5500
+ interceptors: options.interceptors,
5501
+ timeoutMs,
5502
+ signal,
5503
+ req: {
5504
+ stream: true,
5505
+ service: method.parent,
5506
+ method,
5507
+ requestMethod: "POST",
5508
+ url: createMethodUrl(options.baseUrl, method),
5509
+ header: requestHeader$1(method.methodKind, useBinaryFormat, timeoutMs, header, false),
5510
+ contextValues: contextValues !== null && contextValues !== void 0 ? contextValues : createContextValues(),
5511
+ message: input
5512
+ },
5513
+ next: async (req) => {
5514
+ var _a2;
5515
+ const fetch2 = (_a2 = options.fetch) !== null && _a2 !== void 0 ? _a2 : globalThis.fetch;
5516
+ const fRes = await fetch2(req.url, Object.assign(Object.assign({}, fetchOptions$1), { method: req.requestMethod, headers: req.header, signal: req.signal, body: await createRequestBody(req.message) }));
5517
+ validateResponse$1(method.methodKind, useBinaryFormat, fRes.status, fRes.headers);
5518
+ if (fRes.body === null) {
5519
+ throw "missing response body";
5520
+ }
5521
+ const trailer = new Headers();
5522
+ const res = Object.assign(Object.assign({}, req), { header: fRes.headers, trailer, message: parseResponseBody(fRes.body, trailer, fRes.headers, req.signal) });
5523
+ return res;
5524
+ }
5525
+ });
5526
+ }
5527
+ };
5528
+ }
5134
5529
  function validateTrailer(trailer, header) {
5135
5530
  const err = findTrailerError(trailer);
5136
5531
  if (err) {
@@ -5146,12 +5541,12 @@ function validateTrailer(trailer, header) {
5146
5541
  function requestHeader(useBinaryFormat, timeoutMs, userProvidedHeaders, setUserAgent) {
5147
5542
  var _a, _b;
5148
5543
  const result = new Headers(userProvidedHeaders !== null && userProvidedHeaders !== void 0 ? userProvidedHeaders : {});
5149
- result.set(headerContentType, useBinaryFormat ? contentTypeProto : contentTypeJson);
5544
+ result.set(headerContentType$1, useBinaryFormat ? contentTypeProto : contentTypeJson);
5150
5545
  result.set(headerXGrpcWeb, "1");
5151
- const userAgent = (_b = (_a = result.get(headerUserAgent)) !== null && _a !== void 0 ? _a : result.get(headerXUserAgent)) !== null && _b !== void 0 ? _b : "connect-es/2.1.1";
5546
+ const userAgent = (_b = (_a = result.get(headerUserAgent$1)) !== null && _a !== void 0 ? _a : result.get(headerXUserAgent)) !== null && _b !== void 0 ? _b : "connect-es/2.1.1";
5152
5547
  result.set(headerXUserAgent, userAgent);
5153
5548
  if (timeoutMs !== void 0) {
5154
- result.set(headerTimeout, `${timeoutMs}m`);
5549
+ result.set(headerTimeout$1, `${timeoutMs}m`);
5155
5550
  }
5156
5551
  return result;
5157
5552
  }
@@ -5395,7 +5790,7 @@ function createGrpcWebTransport(options) {
5395
5790
  }
5396
5791
  };
5397
5792
  }
5398
- const file_src_api_yorkie_v1_resources = /* @__PURE__ */ fileDesc("CiFzcmMvYXBpL3lvcmtpZS92MS9yZXNvdXJjZXMucHJvdG8SCXlvcmtpZS52MSKuAQoIU25hcHNob3QSJAoEcm9vdBgBIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudBI1CglwcmVzZW5jZXMYAiADKAsyIi55b3JraWUudjEuU25hcHNob3QuUHJlc2VuY2VzRW50cnkaRQoOUHJlc2VuY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlOgI4ASL7AQoKQ2hhbmdlUGFjaxIUCgxkb2N1bWVudF9rZXkYASABKAkSKQoKY2hlY2twb2ludBgCIAEoCzIVLnlvcmtpZS52MS5DaGVja3BvaW50EhAKCHNuYXBzaG90GAMgASgMEiIKB2NoYW5nZXMYBCADKAsyES55b3JraWUudjEuQ2hhbmdlEjAKEW1pbl9zeW5jZWRfdGlja2V0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSEgoKaXNfcmVtb3ZlZBgGIAEoCBIwCg52ZXJzaW9uX3ZlY3RvchgHIAEoCzIYLnlvcmtpZS52MS5WZXJzaW9uVmVjdG9yIpgBCgZDaGFuZ2USHwoCaWQYASABKAsyEy55b3JraWUudjEuQ2hhbmdlSUQSDwoHbWVzc2FnZRgCIAEoCRIoCgpvcGVyYXRpb25zGAMgAygLMhQueW9ya2llLnYxLk9wZXJhdGlvbhIyCg9wcmVzZW5jZV9jaGFuZ2UYBCABKAsyGS55b3JraWUudjEuUHJlc2VuY2VDaGFuZ2UihwEKCENoYW5nZUlEEhIKCmNsaWVudF9zZXEYASABKA0SEgoKc2VydmVyX3NlcRgCIAEoAxIPCgdsYW1wb3J0GAMgASgDEhAKCGFjdG9yX2lkGAQgASgMEjAKDnZlcnNpb25fdmVjdG9yGAUgASgLMhgueW9ya2llLnYxLlZlcnNpb25WZWN0b3IidAoNVmVyc2lvblZlY3RvchI0CgZ2ZWN0b3IYASADKAsyJC55b3JraWUudjEuVmVyc2lvblZlY3Rvci5WZWN0b3JFbnRyeRotCgtWZWN0b3JFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAM6AjgBIsoaCglPcGVyYXRpb24SJwoDc2V0GAEgASgLMhgueW9ya2llLnYxLk9wZXJhdGlvbi5TZXRIABInCgNhZGQYAiABKAsyGC55b3JraWUudjEuT3BlcmF0aW9uLkFkZEgAEikKBG1vdmUYAyABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLk1vdmVIABItCgZyZW1vdmUYBCABKAsyGy55b3JraWUudjEuT3BlcmF0aW9uLlJlbW92ZUgAEikKBGVkaXQYBSABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLkVkaXRIABIrCgVzdHlsZRgHIAEoCzIaLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGVIABIxCghpbmNyZWFzZRgIIAEoCzIdLnlvcmtpZS52MS5PcGVyYXRpb24uSW5jcmVhc2VIABIyCgl0cmVlX2VkaXQYCSABKAsyHS55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0SAASNAoKdHJlZV9zdHlsZRgKIAEoCzIeLnlvcmtpZS52MS5PcGVyYXRpb24uVHJlZVN0eWxlSAASMgoJYXJyYXlfc2V0GAsgASgLMh0ueW9ya2llLnYxLk9wZXJhdGlvbi5BcnJheVNldEgAGp0BCgNTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBILCgNrZXkYAiABKAkSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrAAQoDQWRkEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSLgoPcHJldl9jcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq/AQoETW92ZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Ei4KD3ByZXZfY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCmNyZWF0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtleGVjdXRlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GpEBCgZSZW1vdmUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKgoLZXhlY3V0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrZAwoERWRpdBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSUwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyMi55b3JraWUudjEuT3BlcmF0aW9uLkVkaXQuQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5Eg8KB2NvbnRlbnQYBSABKAkSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBI9CgphdHRyaWJ1dGVzGAcgAygLMikueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0LkF0dHJpYnV0ZXNFbnRyeRpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGukDCgVTdHlsZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSPgoKYXR0cmlidXRlcxgEIAMoCzIqLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSVAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBiADKAsyMy55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlLkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRIcChRhdHRyaWJ1dGVzX3RvX3JlbW92ZRgHIAMoCRoxCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGpUBCghJbmNyZWFzZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAIgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQakwMKCFRyZWVFZGl0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIAoEZnJvbRgCIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zEh4KAnRvGAMgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSVwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyNi55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0LkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRImCghjb250ZW50cxgFIAMoCzIULnlvcmtpZS52MS5UcmVlTm9kZXMSEwoLc3BsaXRfbGV2ZWwYByABKAUSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGu0DCglUcmVlU3R5bGUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIgCgRmcm9tGAIgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSHgoCdG8YAyABKAsyEi55b3JraWUudjEuVHJlZVBvcxJCCgphdHRyaWJ1dGVzGAQgAygLMi4ueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSHAoUYXR0cmlidXRlc190b19yZW1vdmUYBiADKAkSWAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYByADKAsyNy55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVTdHlsZS5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkaMQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARrAAQoIQXJyYXlTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldEIGCgRib2R5IsUBChFKU09ORWxlbWVudFNpbXBsZRIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIgoEdHlwZRgEIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYBSABKAwiggsKC0pTT05FbGVtZW50EjgKC2pzb25fb2JqZWN0GAEgASgLMiEueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05PYmplY3RIABI2Cgpqc29uX2FycmF5GAIgASgLMiAueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05BcnJheUgAEjUKCXByaW1pdGl2ZRgDIAEoCzIgLnlvcmtpZS52MS5KU09ORWxlbWVudC5QcmltaXRpdmVIABIrCgR0ZXh0GAUgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRleHRIABIxCgdjb3VudGVyGAYgASgLMh4ueW9ya2llLnYxLkpTT05FbGVtZW50LkNvdW50ZXJIABIrCgR0cmVlGAcgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRyZWVIABquAQoKSlNPTk9iamVjdBIhCgVub2RlcxgBIAMoCzISLnlvcmtpZS52MS5SSFROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqtAQoJSlNPTkFycmF5EiEKBW5vZGVzGAEgAygLMhIueW9ya2llLnYxLlJHQU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Gr0BCglQcmltaXRpdmUSIgoEdHlwZRgBIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYAiABKAwSKQoKY3JlYXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GqkBCgRUZXh0EiIKBW5vZGVzGAEgAygLMhMueW9ya2llLnYxLlRleHROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq7AQoHQ291bnRlchIiCgR0eXBlGAEgASgOMhQueW9ya2llLnYxLlZhbHVlVHlwZRINCgV2YWx1ZRgCIAEoDBIpCgpjcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQaqQEKBFRyZWUSIgoFbm9kZXMYASADKAsyEy55b3JraWUudjEuVHJlZU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0QgYKBGJvZHkiPwoHUkhUTm9kZRILCgNrZXkYASABKAkSJwoHZWxlbWVudBgCIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudCJUCgdSR0FOb2RlEiAKBG5leHQYASABKAsyEi55b3JraWUudjEuUkdBTm9kZRInCgdlbGVtZW50GAIgASgLMhYueW9ya2llLnYxLkpTT05FbGVtZW50IlgKCE5vZGVBdHRyEg0KBXZhbHVlGAEgASgJEikKCnVwZGF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBISCgppc19yZW1vdmVkGAMgASgIIpQCCghUZXh0Tm9kZRIhCgJpZBgBIAEoCzIVLnlvcmtpZS52MS5UZXh0Tm9kZUlEEg0KBXZhbHVlGAIgASgJEikKCnJlbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtpbnNfcHJldl9pZBgEIAEoCzIVLnlvcmtpZS52MS5UZXh0Tm9kZUlEEjcKCmF0dHJpYnV0ZXMYBSADKAsyIy55b3JraWUudjEuVGV4dE5vZGUuQXR0cmlidXRlc0VudHJ5GkYKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuTm9kZUF0dHI6AjgBIkcKClRleHROb2RlSUQSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBSLdAgoIVHJlZU5vZGUSIQoCaWQYASABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBIMCgR0eXBlGAIgASgJEg0KBXZhbHVlGAMgASgJEikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtpbnNfcHJldl9pZBgFIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEioKC2luc19uZXh0X2lkGAYgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSDQoFZGVwdGgYByABKAUSNwoKYXR0cmlidXRlcxgIIAMoCzIjLnlvcmtpZS52MS5UcmVlTm9kZS5BdHRyaWJ1dGVzRW50cnkaRgoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5Ob2RlQXR0cjoCOAEiMQoJVHJlZU5vZGVzEiQKB2NvbnRlbnQYASADKAsyEy55b3JraWUudjEuVHJlZU5vZGUiRwoKVHJlZU5vZGVJRBIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDgoGb2Zmc2V0GAIgASgFImMKB1RyZWVQb3MSKAoJcGFyZW50X2lkGAEgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSLgoPbGVmdF9zaWJsaW5nX2lkGAIgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQiawoEVXNlchIKCgJpZBgBIAEoCRIVCg1hdXRoX3Byb3ZpZGVyGAIgASgJEhAKCHVzZXJuYW1lGAMgASgJEi4KCmNyZWF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIokBCgZNZW1iZXISCgoCaWQYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCRIPCgd1c2VyX2lkGAMgASgJEhAKCHVzZXJuYW1lGAQgASgJEgwKBHJvbGUYBSABKAkSLgoKaW52aXRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAi6QYKB1Byb2plY3QSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRISCgpwdWJsaWNfa2V5GAMgASgJEhIKCnNlY3JldF9rZXkYBCABKAkSGAoQYXV0aF93ZWJob29rX3VybBgFIAEoCRIcChRhdXRoX3dlYmhvb2tfbWV0aG9kcxgGIAMoCRIgChhhdXRoX3dlYmhvb2tfbWF4X3JldHJpZXMYESABKAQSJgoeYXV0aF93ZWJob29rX21pbl93YWl0X2ludGVydmFsGBIgASgJEiYKHmF1dGhfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgTIAEoCRIkChxhdXRoX3dlYmhvb2tfcmVxdWVzdF90aW1lb3V0GBQgASgJEhkKEWV2ZW50X3dlYmhvb2tfdXJsGAcgASgJEhwKFGV2ZW50X3dlYmhvb2tfZXZlbnRzGAggAygJEiEKGWV2ZW50X3dlYmhvb2tfbWF4X3JldHJpZXMYFSABKAQSJwofZXZlbnRfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgWIAEoCRInCh9ldmVudF93ZWJob29rX21heF93YWl0X2ludGVydmFsGBcgASgJEiUKHWV2ZW50X3dlYmhvb2tfcmVxdWVzdF90aW1lb3V0GBggASgJEiMKG2NsaWVudF9kZWFjdGl2YXRlX3RocmVzaG9sZBgJIAEoCRIaChJzbmFwc2hvdF90aHJlc2hvbGQYGSABKAMSGQoRc25hcHNob3RfaW50ZXJ2YWwYGiABKAMSJAocbWF4X3N1YnNjcmliZXJzX3Blcl9kb2N1bWVudBgKIAEoBRIkChxtYXhfYXR0YWNobWVudHNfcGVyX2RvY3VtZW50GAsgASgFEh0KFW1heF9zaXplX3Blcl9kb2N1bWVudBgPIAEoBRIYChByZW1vdmVfb25fZGV0YWNoGBAgASgIEh0KFWF1dG9fcmV2aXNpb25fZW5hYmxlZBgbIAEoCBIXCg9hbGxvd2VkX29yaWdpbnMYDiADKAkSLgoKY3JlYXRlZF9hdBgMIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiLwoLTWV0cmljUG9pbnQSEQoJdGltZXN0YW1wGAEgASgDEg0KBXZhbHVlGAIgASgFIqMMChZVcGRhdGFibGVQcm9qZWN0RmllbGRzEioKBG5hbWUYASABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSNgoQYXV0aF93ZWJob29rX3VybBgCIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJSChRhdXRoX3dlYmhvb2tfbWV0aG9kcxgDIAEoCzI0LnlvcmtpZS52MS5VcGRhdGFibGVQcm9qZWN0RmllbGRzLkF1dGhXZWJob29rTWV0aG9kcxI+ChhhdXRoX3dlYmhvb2tfbWF4X3JldHJpZXMYDCABKAsyHC5nb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUSRAoeYXV0aF93ZWJob29rX21pbl93YWl0X2ludGVydmFsGA0gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEkQKHmF1dGhfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgOIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJCChxhdXRoX3dlYmhvb2tfcmVxdWVzdF90aW1lb3V0GA8gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEjcKEWV2ZW50X3dlYmhvb2tfdXJsGAQgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlElIKFGV2ZW50X3dlYmhvb2tfZXZlbnRzGAUgASgLMjQueW9ya2llLnYxLlVwZGF0YWJsZVByb2plY3RGaWVsZHMuRXZlbnRXZWJob29rRXZlbnRzEj8KGWV2ZW50X3dlYmhvb2tfbWF4X3JldHJpZXMYECABKAsyHC5nb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUSRQofZXZlbnRfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgRIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJFCh9ldmVudF93ZWJob29rX21heF93YWl0X2ludGVydmFsGBIgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEkMKHWV2ZW50X3dlYmhvb2tfcmVxdWVzdF90aW1lb3V0GBMgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEjcKEnNuYXBzaG90X3RocmVzaG9sZBgUIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEjYKEXNuYXBzaG90X2ludGVydmFsGBUgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUSQQobY2xpZW50X2RlYWN0aXZhdGVfdGhyZXNob2xkGAYgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEkEKHG1heF9zdWJzY3JpYmVyc19wZXJfZG9jdW1lbnQYByABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZRJBChxtYXhfYXR0YWNobWVudHNfcGVyX2RvY3VtZW50GAggASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSOgoVbWF4X3NpemVfcGVyX2RvY3VtZW50GAogASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSNAoQcmVtb3ZlX29uX2RldGFjaBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSOQoVYXV0b19yZXZpc2lvbl9lbmFibGVkGBYgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZRJJCg9hbGxvd2VkX29yaWdpbnMYCSABKAsyMC55b3JraWUudjEuVXBkYXRhYmxlUHJvamVjdEZpZWxkcy5BbGxvd2VkT3JpZ2lucxolChJBdXRoV2ViaG9va01ldGhvZHMSDwoHbWV0aG9kcxgBIAMoCRokChJFdmVudFdlYmhvb2tFdmVudHMSDgoGZXZlbnRzGAEgAygJGiEKDkFsbG93ZWRPcmlnaW5zEg8KB29yaWdpbnMYASADKAkipwMKD0RvY3VtZW50U3VtbWFyeRIKCgJpZBgBIAEoCRILCgNrZXkYAiABKAkSDAoEcm9vdBgDIAEoCRIYChBhdHRhY2hlZF9jbGllbnRzGAcgASgFEikKDWRvY3VtZW50X3NpemUYCCABKAsyEi55b3JraWUudjEuRG9jU2l6ZRISCgpzY2hlbWFfa2V5GAkgASgJEjwKCXByZXNlbmNlcxgKIAMoCzIpLnlvcmtpZS52MS5Eb2N1bWVudFN1bW1hcnkuUHJlc2VuY2VzRW50cnkSLgoKY3JlYXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLYWNjZXNzZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wGkUKDlByZXNlbmNlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5QcmVzZW5jZToCOAEi2gEKDlByZXNlbmNlQ2hhbmdlEjIKBHR5cGUYASABKA4yJC55b3JraWUudjEuUHJlc2VuY2VDaGFuZ2UuQ2hhbmdlVHlwZRIlCghwcmVzZW5jZRgCIAEoCzITLnlvcmtpZS52MS5QcmVzZW5jZSJtCgpDaGFuZ2VUeXBlEhsKF0NIQU5HRV9UWVBFX1VOU1BFQ0lGSUVEEAASEwoPQ0hBTkdFX1RZUEVfUFVUEAESFgoSQ0hBTkdFX1RZUEVfREVMRVRFEAISFQoRQ0hBTkdFX1RZUEVfQ0xFQVIQAyJkCghQcmVzZW5jZRIrCgRkYXRhGAEgAygLMh0ueW9ya2llLnYxLlByZXNlbmNlLkRhdGFFbnRyeRorCglEYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASI0Cg5DaGFubmVsU3VtbWFyeRILCgNrZXkYASABKAkSFQoNc2Vzc2lvbl9jb3VudBgCIAEoBSI0CgpDaGVja3BvaW50EhIKCnNlcnZlcl9zZXEYASABKAMSEgoKY2xpZW50X3NlcRgCIAEoDSJhCgtUZXh0Tm9kZVBvcxIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDgoGb2Zmc2V0GAIgASgFEhcKD3JlbGF0aXZlX29mZnNldBgDIAEoBSJCCgpUaW1lVGlja2V0Eg8KB2xhbXBvcnQYASABKAMSEQoJZGVsaW1pdGVyGAIgASgNEhAKCGFjdG9yX2lkGAMgASgMIi4KDERvY0V2ZW50Qm9keRINCgV0b3BpYxgBIAEoCRIPCgdwYXlsb2FkGAIgASgMImsKCERvY0V2ZW50EiUKBHR5cGUYASABKA4yFy55b3JraWUudjEuRG9jRXZlbnRUeXBlEhEKCXB1Ymxpc2hlchgCIAEoCRIlCgRib2R5GAMgASgLMhcueW9ya2llLnYxLkRvY0V2ZW50Qm9keSLWAQoMQ2hhbm5lbEV2ZW50EioKBHR5cGUYASABKA4yHC55b3JraWUudjEuQ2hhbm5lbEV2ZW50LlR5cGUSEQoJcHVibGlzaGVyGAIgASgJEhUKDXNlc3Npb25fY291bnQYAyABKAMSCwoDc2VxGAQgASgDEg0KBXRvcGljGAUgASgJEg8KB3BheWxvYWQYBiABKAwiQwoEVHlwZRIUChBUWVBFX1VOU1BFQ0lGSUVEEAASEQoNVFlQRV9QUkVTRU5DRRABEhIKDlRZUEVfQlJPQURDQVNUEAIiJgoIRGF0YVNpemUSDAoEZGF0YRgBIAEoBRIMCgRtZXRhGAIgASgFIk0KB0RvY1NpemUSIQoEbGl2ZRgBIAEoCzITLnlvcmtpZS52MS5EYXRhU2l6ZRIfCgJnYxgCIAEoCzITLnlvcmtpZS52MS5EYXRhU2l6ZSKRAQoGU2NoZW1hEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDwoHdmVyc2lvbhgDIAEoBRIMCgRib2R5GAQgASgJEh4KBXJ1bGVzGAUgAygLMg8ueW9ya2llLnYxLlJ1bGUSLgoKY3JlYXRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiUAoMVHJlZU5vZGVSdWxlEhEKCW5vZGVfdHlwZRgBIAEoCRIPCgdjb250ZW50GAIgASgJEg0KBW1hcmtzGAMgASgJEg0KBWdyb3VwGAQgASgJIk8KBFJ1bGUSDAoEcGF0aBgBIAEoCRIMCgR0eXBlGAIgASgJEisKCnRyZWVfbm9kZXMYAyADKAsyFy55b3JraWUudjEuVHJlZU5vZGVSdWxlIoMBCg9SZXZpc2lvblN1bW1hcnkSCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSEAoIc25hcHNob3QYBCABKAkSLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAq1AIKCVZhbHVlVHlwZRITCg9WQUxVRV9UWVBFX05VTEwQABIWChJWQUxVRV9UWVBFX0JPT0xFQU4QARIWChJWQUxVRV9UWVBFX0lOVEVHRVIQAhITCg9WQUxVRV9UWVBFX0xPTkcQAxIVChFWQUxVRV9UWVBFX0RPVUJMRRAEEhUKEVZBTFVFX1RZUEVfU1RSSU5HEAUSFAoQVkFMVUVfVFlQRV9CWVRFUxAGEhMKD1ZBTFVFX1RZUEVfREFURRAHEhoKFlZBTFVFX1RZUEVfSlNPTl9PQkpFQ1QQCBIZChVWQUxVRV9UWVBFX0pTT05fQVJSQVkQCRITCg9WQUxVRV9UWVBFX1RFWFQQChIaChZWQUxVRV9UWVBFX0lOVEVHRVJfQ05UEAsSFwoTVkFMVUVfVFlQRV9MT05HX0NOVBAMEhMKD1ZBTFVFX1RZUEVfVFJFRRANKqYBCgxEb2NFdmVudFR5cGUSIwofRE9DX0VWRU5UX1RZUEVfRE9DVU1FTlRfQ0hBTkdFRBAAEiMKH0RPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX1dBVENIRUQQARIlCiFET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9VTldBVENIRUQQAhIlCiFET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9CUk9BRENBU1QQA0JFChFkZXYueW9ya2llLmFwaS52MVABWi5naXRodWIuY29tL3lvcmtpZS10ZWFtL3lvcmtpZS9hcGkveW9ya2llL3YxO3YxYgZwcm90bzM", [file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
5793
+ const file_src_api_yorkie_v1_resources = /* @__PURE__ */ fileDesc("CiFzcmMvYXBpL3lvcmtpZS92MS9yZXNvdXJjZXMucHJvdG8SCXlvcmtpZS52MSKuAQoIU25hcHNob3QSJAoEcm9vdBgBIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudBI1CglwcmVzZW5jZXMYAiADKAsyIi55b3JraWUudjEuU25hcHNob3QuUHJlc2VuY2VzRW50cnkaRQoOUHJlc2VuY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlOgI4ASL7AQoKQ2hhbmdlUGFjaxIUCgxkb2N1bWVudF9rZXkYASABKAkSKQoKY2hlY2twb2ludBgCIAEoCzIVLnlvcmtpZS52MS5DaGVja3BvaW50EhAKCHNuYXBzaG90GAMgASgMEiIKB2NoYW5nZXMYBCADKAsyES55b3JraWUudjEuQ2hhbmdlEjAKEW1pbl9zeW5jZWRfdGlja2V0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSEgoKaXNfcmVtb3ZlZBgGIAEoCBIwCg52ZXJzaW9uX3ZlY3RvchgHIAEoCzIYLnlvcmtpZS52MS5WZXJzaW9uVmVjdG9yIpgBCgZDaGFuZ2USHwoCaWQYASABKAsyEy55b3JraWUudjEuQ2hhbmdlSUQSDwoHbWVzc2FnZRgCIAEoCRIoCgpvcGVyYXRpb25zGAMgAygLMhQueW9ya2llLnYxLk9wZXJhdGlvbhIyCg9wcmVzZW5jZV9jaGFuZ2UYBCABKAsyGS55b3JraWUudjEuUHJlc2VuY2VDaGFuZ2UihwEKCENoYW5nZUlEEhIKCmNsaWVudF9zZXEYASABKA0SEgoKc2VydmVyX3NlcRgCIAEoAxIPCgdsYW1wb3J0GAMgASgDEhAKCGFjdG9yX2lkGAQgASgMEjAKDnZlcnNpb25fdmVjdG9yGAUgASgLMhgueW9ya2llLnYxLlZlcnNpb25WZWN0b3IidAoNVmVyc2lvblZlY3RvchI0CgZ2ZWN0b3IYASADKAsyJC55b3JraWUudjEuVmVyc2lvblZlY3Rvci5WZWN0b3JFbnRyeRotCgtWZWN0b3JFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAM6AjgBItkaCglPcGVyYXRpb24SJwoDc2V0GAEgASgLMhgueW9ya2llLnYxLk9wZXJhdGlvbi5TZXRIABInCgNhZGQYAiABKAsyGC55b3JraWUudjEuT3BlcmF0aW9uLkFkZEgAEikKBG1vdmUYAyABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLk1vdmVIABItCgZyZW1vdmUYBCABKAsyGy55b3JraWUudjEuT3BlcmF0aW9uLlJlbW92ZUgAEikKBGVkaXQYBSABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLkVkaXRIABIrCgVzdHlsZRgHIAEoCzIaLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGVIABIxCghpbmNyZWFzZRgIIAEoCzIdLnlvcmtpZS52MS5PcGVyYXRpb24uSW5jcmVhc2VIABIyCgl0cmVlX2VkaXQYCSABKAsyHS55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0SAASNAoKdHJlZV9zdHlsZRgKIAEoCzIeLnlvcmtpZS52MS5PcGVyYXRpb24uVHJlZVN0eWxlSAASMgoJYXJyYXlfc2V0GAsgASgLMh0ueW9ya2llLnYxLk9wZXJhdGlvbi5BcnJheVNldEgAGp0BCgNTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBILCgNrZXkYAiABKAkSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrAAQoDQWRkEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSLgoPcHJldl9jcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq/AQoETW92ZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Ei4KD3ByZXZfY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCmNyZWF0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtleGVjdXRlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GpEBCgZSZW1vdmUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKgoLZXhlY3V0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrZAwoERWRpdBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSUwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyMi55b3JraWUudjEuT3BlcmF0aW9uLkVkaXQuQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5Eg8KB2NvbnRlbnQYBSABKAkSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBI9CgphdHRyaWJ1dGVzGAcgAygLMikueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0LkF0dHJpYnV0ZXNFbnRyeRpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGukDCgVTdHlsZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSPgoKYXR0cmlidXRlcxgEIAMoCzIqLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSVAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBiADKAsyMy55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlLkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRIcChRhdHRyaWJ1dGVzX3RvX3JlbW92ZRgHIAMoCRoxCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGqQBCghJbmNyZWFzZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAIgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDQoFYWN0b3IYBCABKAkakwMKCFRyZWVFZGl0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIAoEZnJvbRgCIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zEh4KAnRvGAMgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSVwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyNi55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0LkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRImCghjb250ZW50cxgFIAMoCzIULnlvcmtpZS52MS5UcmVlTm9kZXMSEwoLc3BsaXRfbGV2ZWwYByABKAUSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGu0DCglUcmVlU3R5bGUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIgCgRmcm9tGAIgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSHgoCdG8YAyABKAsyEi55b3JraWUudjEuVHJlZVBvcxJCCgphdHRyaWJ1dGVzGAQgAygLMi4ueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSHAoUYXR0cmlidXRlc190b19yZW1vdmUYBiADKAkSWAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYByADKAsyNy55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVTdHlsZS5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkaMQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARrAAQoIQXJyYXlTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldEIGCgRib2R5IsUBChFKU09ORWxlbWVudFNpbXBsZRIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIgoEdHlwZRgEIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYBSABKAwinwsKC0pTT05FbGVtZW50EjgKC2pzb25fb2JqZWN0GAEgASgLMiEueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05PYmplY3RIABI2Cgpqc29uX2FycmF5GAIgASgLMiAueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05BcnJheUgAEjUKCXByaW1pdGl2ZRgDIAEoCzIgLnlvcmtpZS52MS5KU09ORWxlbWVudC5QcmltaXRpdmVIABIrCgR0ZXh0GAUgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRleHRIABIxCgdjb3VudGVyGAYgASgLMh4ueW9ya2llLnYxLkpTT05FbGVtZW50LkNvdW50ZXJIABIrCgR0cmVlGAcgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRyZWVIABquAQoKSlNPTk9iamVjdBIhCgVub2RlcxgBIAMoCzISLnlvcmtpZS52MS5SSFROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqtAQoJSlNPTkFycmF5EiEKBW5vZGVzGAEgAygLMhIueW9ya2llLnYxLlJHQU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Gr0BCglQcmltaXRpdmUSIgoEdHlwZRgBIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYAiABKAwSKQoKY3JlYXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GqkBCgRUZXh0EiIKBW5vZGVzGAEgAygLMhMueW9ya2llLnYxLlRleHROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrYAQoHQ291bnRlchIiCgR0eXBlGAEgASgOMhQueW9ya2llLnYxLlZhbHVlVHlwZRINCgV2YWx1ZRgCIAEoDBIpCgpjcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSFQoNaGxsX3JlZ2lzdGVycxgHIAEoDEoECAYQBxqpAQoEVHJlZRIiCgVub2RlcxgBIAMoCzITLnlvcmtpZS52MS5UcmVlTm9kZRIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXRCBgoEYm9keSI/CgdSSFROb2RlEgsKA2tleRgBIAEoCRInCgdlbGVtZW50GAIgASgLMhYueW9ya2llLnYxLkpTT05FbGVtZW50IlQKB1JHQU5vZGUSIAoEbmV4dBgBIAEoCzISLnlvcmtpZS52MS5SR0FOb2RlEicKB2VsZW1lbnQYAiABKAsyFi55b3JraWUudjEuSlNPTkVsZW1lbnQiWAoITm9kZUF0dHISDQoFdmFsdWUYASABKAkSKQoKdXBkYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EhIKCmlzX3JlbW92ZWQYAyABKAgilAIKCFRleHROb2RlEiEKAmlkGAEgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSDQoFdmFsdWUYAiABKAkSKQoKcmVtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAQgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSNwoKYXR0cmlidXRlcxgFIAMoCzIjLnlvcmtpZS52MS5UZXh0Tm9kZS5BdHRyaWJ1dGVzRW50cnkaRgoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5Ob2RlQXR0cjoCOAEiRwoKVGV4dE5vZGVJRBIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDgoGb2Zmc2V0GAIgASgFIrMDCghUcmVlTm9kZRIhCgJpZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEgwKBHR5cGUYAiABKAkSDQoFdmFsdWUYAyABKAkSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAUgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSKgoLaW5zX25leHRfaWQYBiABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBINCgVkZXB0aBgHIAEoBRI3CgphdHRyaWJ1dGVzGAggAygLMiMueW9ya2llLnYxLlRyZWVOb2RlLkF0dHJpYnV0ZXNFbnRyeRIqCgttZXJnZWRfZnJvbRgJIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEigKCW1lcmdlZF9hdBgKIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GkYKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuTm9kZUF0dHI6AjgBIjEKCVRyZWVOb2RlcxIkCgdjb250ZW50GAEgAygLMhMueW9ya2llLnYxLlRyZWVOb2RlIkcKClRyZWVOb2RlSUQSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBSJjCgdUcmVlUG9zEigKCXBhcmVudF9pZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEi4KD2xlZnRfc2libGluZ19pZBgCIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEImsKBFVzZXISCgoCaWQYASABKAkSFQoNYXV0aF9wcm92aWRlchgCIAEoCRIQCgh1c2VybmFtZRgDIAEoCRIuCgpjcmVhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKJAQoGTWVtYmVyEgoKAmlkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSDwoHdXNlcl9pZBgDIAEoCRIQCgh1c2VybmFtZRgEIAEoCRIMCgRyb2xlGAUgASgJEi4KCmludml0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIukGCgdQcm9qZWN0EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEgoKcHVibGljX2tleRgDIAEoCRISCgpzZWNyZXRfa2V5GAQgASgJEhgKEGF1dGhfd2ViaG9va191cmwYBSABKAkSHAoUYXV0aF93ZWJob29rX21ldGhvZHMYBiADKAkSIAoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGBEgASgEEiYKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgSIAEoCRImCh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYEyABKAkSJAocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgUIAEoCRIZChFldmVudF93ZWJob29rX3VybBgHIAEoCRIcChRldmVudF93ZWJob29rX2V2ZW50cxgIIAMoCRIhChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBUgASgEEicKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYFiABKAkSJwofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgXIAEoCRIlCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgYIAEoCRIjChtjbGllbnRfZGVhY3RpdmF0ZV90aHJlc2hvbGQYCSABKAkSGgoSc25hcHNob3RfdGhyZXNob2xkGBkgASgDEhkKEXNuYXBzaG90X2ludGVydmFsGBogASgDEiQKHG1heF9zdWJzY3JpYmVyc19wZXJfZG9jdW1lbnQYCiABKAUSJAocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgLIAEoBRIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYDyABKAUSGAoQcmVtb3ZlX29uX2RldGFjaBgQIAEoCBIdChVhdXRvX3JldmlzaW9uX2VuYWJsZWQYGyABKAgSFwoPYWxsb3dlZF9vcmlnaW5zGA4gAygJEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIi8KC01ldHJpY1BvaW50EhEKCXRpbWVzdGFtcBgBIAEoAxINCgV2YWx1ZRgCIAEoBSKjDAoWVXBkYXRhYmxlUHJvamVjdEZpZWxkcxIqCgRuYW1lGAEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEjYKEGF1dGhfd2ViaG9va191cmwYAiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSUgoUYXV0aF93ZWJob29rX21ldGhvZHMYAyABKAsyNC55b3JraWUudjEuVXBkYXRhYmxlUHJvamVjdEZpZWxkcy5BdXRoV2ViaG9va01ldGhvZHMSPgoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGAwgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkQKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgNIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJECh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYDiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSQgocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgPIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChFldmVudF93ZWJob29rX3VybBgEIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJSChRldmVudF93ZWJob29rX2V2ZW50cxgFIAEoCzI0LnlvcmtpZS52MS5VcGRhdGFibGVQcm9qZWN0RmllbGRzLkV2ZW50V2ViaG9va0V2ZW50cxI/ChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBAgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkUKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYESABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSRQofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgSIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJDCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgTIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChJzbmFwc2hvdF90aHJlc2hvbGQYFCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRI2ChFzbmFwc2hvdF9pbnRlcnZhbBgVIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEkEKG2NsaWVudF9kZWFjdGl2YXRlX3RocmVzaG9sZBgGIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJBChxtYXhfc3Vic2NyaWJlcnNfcGVyX2RvY3VtZW50GAcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSQQocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgIIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjoKFW1heF9zaXplX3Blcl9kb2N1bWVudBgKIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjQKEHJlbW92ZV9vbl9kZXRhY2gYCyABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlEjkKFWF1dG9fcmV2aXNpb25fZW5hYmxlZBgWIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSSQoPYWxsb3dlZF9vcmlnaW5zGAkgASgLMjAueW9ya2llLnYxLlVwZGF0YWJsZVByb2plY3RGaWVsZHMuQWxsb3dlZE9yaWdpbnMaJQoSQXV0aFdlYmhvb2tNZXRob2RzEg8KB21ldGhvZHMYASADKAkaJAoSRXZlbnRXZWJob29rRXZlbnRzEg4KBmV2ZW50cxgBIAMoCRohCg5BbGxvd2VkT3JpZ2lucxIPCgdvcmlnaW5zGAEgAygJIqcDCg9Eb2N1bWVudFN1bW1hcnkSCgoCaWQYASABKAkSCwoDa2V5GAIgASgJEgwKBHJvb3QYAyABKAkSGAoQYXR0YWNoZWRfY2xpZW50cxgHIAEoBRIpCg1kb2N1bWVudF9zaXplGAggASgLMhIueW9ya2llLnYxLkRvY1NpemUSEgoKc2NoZW1hX2tleRgJIAEoCRI8CglwcmVzZW5jZXMYCiADKAsyKS55b3JraWUudjEuRG9jdW1lbnRTdW1tYXJ5LlByZXNlbmNlc0VudHJ5Ei4KCmNyZWF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi8KC2FjY2Vzc2VkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBpFCg5QcmVzZW5jZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2U6AjgBItoBCg5QcmVzZW5jZUNoYW5nZRIyCgR0eXBlGAEgASgOMiQueW9ya2llLnYxLlByZXNlbmNlQ2hhbmdlLkNoYW5nZVR5cGUSJQoIcHJlc2VuY2UYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2UibQoKQ2hhbmdlVHlwZRIbChdDSEFOR0VfVFlQRV9VTlNQRUNJRklFRBAAEhMKD0NIQU5HRV9UWVBFX1BVVBABEhYKEkNIQU5HRV9UWVBFX0RFTEVURRACEhUKEUNIQU5HRV9UWVBFX0NMRUFSEAMiZAoIUHJlc2VuY2USKwoEZGF0YRgBIAMoCzIdLnlvcmtpZS52MS5QcmVzZW5jZS5EYXRhRW50cnkaKwoJRGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiNAoOQ2hhbm5lbFN1bW1hcnkSCwoDa2V5GAEgASgJEhUKDXNlc3Npb25fY291bnQYAiABKAUiNAoKQ2hlY2twb2ludBISCgpzZXJ2ZXJfc2VxGAEgASgDEhIKCmNsaWVudF9zZXEYAiABKA0iYQoLVGV4dE5vZGVQb3MSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBRIXCg9yZWxhdGl2ZV9vZmZzZXQYAyABKAUiQgoKVGltZVRpY2tldBIPCgdsYW1wb3J0GAEgASgDEhEKCWRlbGltaXRlchgCIAEoDRIQCghhY3Rvcl9pZBgDIAEoDCIuCgxEb2NFdmVudEJvZHkSDQoFdG9waWMYASABKAkSDwoHcGF5bG9hZBgCIAEoDCJrCghEb2NFdmVudBIlCgR0eXBlGAEgASgOMhcueW9ya2llLnYxLkRvY0V2ZW50VHlwZRIRCglwdWJsaXNoZXIYAiABKAkSJQoEYm9keRgDIAEoCzIXLnlvcmtpZS52MS5Eb2NFdmVudEJvZHki1gEKDENoYW5uZWxFdmVudBIqCgR0eXBlGAEgASgOMhwueW9ya2llLnYxLkNoYW5uZWxFdmVudC5UeXBlEhEKCXB1Ymxpc2hlchgCIAEoCRIVCg1zZXNzaW9uX2NvdW50GAMgASgDEgsKA3NlcRgEIAEoAxINCgV0b3BpYxgFIAEoCRIPCgdwYXlsb2FkGAYgASgMIkMKBFR5cGUSFAoQVFlQRV9VTlNQRUNJRklFRBAAEhEKDVRZUEVfUFJFU0VOQ0UQARISCg5UWVBFX0JST0FEQ0FTVBACIiYKCERhdGFTaXplEgwKBGRhdGEYASABKAUSDAoEbWV0YRgCIAEoBSJNCgdEb2NTaXplEiEKBGxpdmUYASABKAsyEy55b3JraWUudjEuRGF0YVNpemUSHwoCZ2MYAiABKAsyEy55b3JraWUudjEuRGF0YVNpemUikQEKBlNjaGVtYRIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAUSDAoEYm9keRgEIAEoCRIeCgVydWxlcxgFIAMoCzIPLnlvcmtpZS52MS5SdWxlEi4KCmNyZWF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKDFRyZWVOb2RlUnVsZRIRCglub2RlX3R5cGUYASABKAkSDwoHY29udGVudBgCIAEoCRINCgVtYXJrcxgDIAEoCRINCgVncm91cBgEIAEoCSJPCgRSdWxlEgwKBHBhdGgYASABKAkSDAoEdHlwZRgCIAEoCRIrCgp0cmVlX25vZGVzGAMgAygLMhcueW9ya2llLnYxLlRyZWVOb2RlUnVsZSKDAQoPUmV2aXNpb25TdW1tYXJ5EgoKAmlkGAEgASgJEg0KBWxhYmVsGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEhAKCHNuYXBzaG90GAQgASgJEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wKvwCCglWYWx1ZVR5cGUSEwoPVkFMVUVfVFlQRV9OVUxMEAASFgoSVkFMVUVfVFlQRV9CT09MRUFOEAESFgoSVkFMVUVfVFlQRV9JTlRFR0VSEAISEwoPVkFMVUVfVFlQRV9MT05HEAMSFQoRVkFMVUVfVFlQRV9ET1VCTEUQBBIVChFWQUxVRV9UWVBFX1NUUklORxAFEhQKEFZBTFVFX1RZUEVfQllURVMQBhITCg9WQUxVRV9UWVBFX0RBVEUQBxIaChZWQUxVRV9UWVBFX0pTT05fT0JKRUNUEAgSGQoVVkFMVUVfVFlQRV9KU09OX0FSUkFZEAkSEwoPVkFMVUVfVFlQRV9URVhUEAoSGgoWVkFMVUVfVFlQRV9JTlRFR0VSX0NOVBALEhcKE1ZBTFVFX1RZUEVfTE9OR19DTlQQDBITCg9WQUxVRV9UWVBFX1RSRUUQDRIgChxWQUxVRV9UWVBFX0lOVEVHRVJfREVEVVBfQ05UEA4iBAgPEA8qpgEKDERvY0V2ZW50VHlwZRIjCh9ET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9DSEFOR0VEEAASIwofRE9DX0VWRU5UX1RZUEVfRE9DVU1FTlRfV0FUQ0hFRBABEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX1VOV0FUQ0hFRBACEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX0JST0FEQ0FTVBADQkUKEWRldi55b3JraWUuYXBpLnYxUAFaLmdpdGh1Yi5jb20veW9ya2llLXRlYW0veW9ya2llL2FwaS95b3JraWUvdjE7djFiBnByb3RvMw", [file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
5399
5794
  const SnapshotSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 0);
5400
5795
  const ChangePackSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 1);
5401
5796
  const ChangeSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 2);
@@ -5462,6 +5857,7 @@ var ValueType = /* @__PURE__ */ ((ValueType2) => {
5462
5857
  ValueType2[ValueType2["INTEGER_CNT"] = 11] = "INTEGER_CNT";
5463
5858
  ValueType2[ValueType2["LONG_CNT"] = 12] = "LONG_CNT";
5464
5859
  ValueType2[ValueType2["TREE"] = 13] = "TREE";
5860
+ ValueType2[ValueType2["INTEGER_DEDUP_CNT"] = 14] = "INTEGER_DEDUP_CNT";
5465
5861
  return ValueType2;
5466
5862
  })(ValueType || {});
5467
5863
  var DocEventType$1 = /* @__PURE__ */ ((DocEventType2) => {
@@ -5471,7 +5867,7 @@ var DocEventType$1 = /* @__PURE__ */ ((DocEventType2) => {
5471
5867
  DocEventType2[DocEventType2["DOCUMENT_BROADCAST"] = 3] = "DOCUMENT_BROADCAST";
5472
5868
  return DocEventType2;
5473
5869
  })(DocEventType$1 || {});
5474
- const file_src_api_yorkie_v1_yorkie = /* @__PURE__ */ fileDesc("Ch5zcmMvYXBpL3lvcmtpZS92MS95b3JraWUucHJvdG8SCXlvcmtpZS52MSKeAQoVQWN0aXZhdGVDbGllbnRSZXF1ZXN0EhIKCmNsaWVudF9rZXkYASABKAkSQAoIbWV0YWRhdGEYAiADKAsyLi55b3JraWUudjEuQWN0aXZhdGVDbGllbnRSZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIisKFkFjdGl2YXRlQ2xpZW50UmVzcG9uc2USEQoJY2xpZW50X2lkGAEgASgJIkEKF0RlYWN0aXZhdGVDbGllbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtzeW5jaHJvbm91cxgCIAEoCCIaChhEZWFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiagoVQXR0YWNoRG9jdW1lbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRIqCgtjaGFuZ2VfcGFjaxgCIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrEhIKCnNjaGVtYV9rZXkYAyABKAkinwEKFkF0dGFjaERvY3VtZW50UmVzcG9uc2USEwoLZG9jdW1lbnRfaWQYASABKAkSKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYAyABKAUSJQoMc2NoZW1hX3J1bGVzGAQgAygLMg8ueW9ya2llLnYxLlJ1bGUiiwEKFURldGFjaERvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIeChZyZW1vdmVfaWZfbm90X2F0dGFjaGVkGAQgASgIIkQKFkRldGFjaERvY3VtZW50UmVzcG9uc2USKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayJTCgxXYXRjaFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEjAKCXJlc291cmNlcxgCIAMoCzIdLnlvcmtpZS52MS5SZXNvdXJjZURlc2NyaXB0b3IihAEKElJlc291cmNlRGVzY3JpcHRvchIxCghkb2N1bWVudBgBIAEoCzIdLnlvcmtpZS52MS5Eb2N1bWVudERlc2NyaXB0b3JIABIvCgdjaGFubmVsGAIgASgLMhwueW9ya2llLnYxLkNoYW5uZWxEZXNjcmlwdG9ySABCCgoIcmVzb3VyY2UiKQoSRG9jdW1lbnREZXNjcmlwdG9yEhMKC2RvY3VtZW50X2lkGAEgASgJIigKEUNoYW5uZWxEZXNjcmlwdG9yEhMKC2NoYW5uZWxfa2V5GAEgASgJInkKDVdhdGNoUmVzcG9uc2USOAoOaW5pdGlhbGl6YXRpb24YASABKAsyHi55b3JraWUudjEuV2F0Y2hJbml0aWFsaXphdGlvbkgAEiYKBWV2ZW50GAIgASgLMhUueW9ya2llLnYxLldhdGNoRXZlbnRIAEIGCgRib2R5IkYKE1dhdGNoSW5pdGlhbGl6YXRpb24SLwoOcmVzb3VyY2VfaW5pdHMYASADKAsyFy55b3JraWUudjEuUmVzb3VyY2VJbml0IngKDFJlc291cmNlSW5pdBIwCg1kb2N1bWVudF9pbml0GAEgASgLMhcueW9ya2llLnYxLkRvY3VtZW50SW5pdEgAEi4KDGNoYW5uZWxfaW5pdBgCIAEoCzIWLnlvcmtpZS52MS5DaGFubmVsSW5pdEgAQgYKBGluaXQiNwoMRG9jdW1lbnRJbml0EhMKC2RvY3VtZW50X2lkGAEgASgJEhIKCmNsaWVudF9pZHMYAiADKAkiRgoLQ2hhbm5lbEluaXQSEwoLY2hhbm5lbF9rZXkYASABKAkSFQoNc2Vzc2lvbl9jb3VudBgCIAEoAxILCgNzZXEYAyABKAMiewoKV2F0Y2hFdmVudBItCglkb2NfZXZlbnQYASABKAsyGC55b3JraWUudjEuRG9jV2F0Y2hFdmVudEgAEjUKDWNoYW5uZWxfZXZlbnQYAiABKAsyHC55b3JraWUudjEuQ2hhbm5lbFdhdGNoRXZlbnRIAEIHCgVldmVudCJICg1Eb2NXYXRjaEV2ZW50EhMKC2RvY3VtZW50X2lkGAEgASgJEiIKBWV2ZW50GAIgASgLMhMueW9ya2llLnYxLkRvY0V2ZW50IlAKEUNoYW5uZWxXYXRjaEV2ZW50EhMKC2NoYW5uZWxfa2V5GAEgASgJEiYKBWV2ZW50GAIgASgLMhcueW9ya2llLnYxLkNoYW5uZWxFdmVudCJrChVSZW1vdmVEb2N1bWVudFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEioKC2NoYW5nZV9wYWNrGAMgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2siRAoWUmVtb3ZlRG9jdW1lbnRSZXNwb25zZRIqCgtjaGFuZ2VfcGFjaxgBIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrIn8KFlB1c2hQdWxsQ2hhbmdlc1JlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEioKC2NoYW5nZV9wYWNrGAMgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2sSEQoJcHVzaF9vbmx5GAQgASgIIkUKF1B1c2hQdWxsQ2hhbmdlc1Jlc3BvbnNlEioKC2NoYW5nZV9wYWNrGAEgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2siYwoVQ3JlYXRlUmV2aXNpb25SZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRINCgVsYWJlbBgDIAEoCRITCgtkZXNjcmlwdGlvbhgEIAEoCSJGChZDcmVhdGVSZXZpc2lvblJlc3BvbnNlEiwKCHJldmlzaW9uGAEgASgLMhoueW9ya2llLnYxLlJldmlzaW9uU3VtbWFyeSJRChJHZXRSZXZpc2lvblJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEhMKC3JldmlzaW9uX2lkGAMgASgJIkMKE0dldFJldmlzaW9uUmVzcG9uc2USLAoIcmV2aXNpb24YASABKAsyGi55b3JraWUudjEuUmV2aXNpb25TdW1tYXJ5InUKFExpc3RSZXZpc2lvbnNSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRIRCglwYWdlX3NpemUYAyABKAUSDgoGb2Zmc2V0GAQgASgFEhIKCmlzX2ZvcndhcmQYBSABKAgiRgoVTGlzdFJldmlzaW9uc1Jlc3BvbnNlEi0KCXJldmlzaW9ucxgBIAMoCzIaLnlvcmtpZS52MS5SZXZpc2lvblN1bW1hcnkiVQoWUmVzdG9yZVJldmlzaW9uUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSEwoLcmV2aXNpb25faWQYBCABKAkiGQoXUmVzdG9yZVJldmlzaW9uUmVzcG9uc2UiPgoUQXR0YWNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJIkIKFUF0dGFjaENoYW5uZWxSZXNwb25zZRISCgpzZXNzaW9uX2lkGAEgASgJEhUKDXNlc3Npb25fY291bnQYAiABKAMiUgoURGV0YWNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJEhIKCnNlc3Npb25faWQYAyABKAkiLgoVRGV0YWNoQ2hhbm5lbFJlc3BvbnNlEhUKDXNlc3Npb25fY291bnQYASABKAMiUwoVUmVmcmVzaENoYW5uZWxSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCRISCgpzZXNzaW9uX2lkGAMgASgJIi8KFlJlZnJlc2hDaGFubmVsUmVzcG9uc2USFQoNc2Vzc2lvbl9jb3VudBgBIAEoAyJaChBCcm9hZGNhc3RSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCRINCgV0b3BpYxgDIAEoCRIPCgdwYXlsb2FkGAQgASgMIhMKEUJyb2FkY2FzdFJlc3BvbnNlMpgKCg1Zb3JraWVTZXJ2aWNlElcKDkFjdGl2YXRlQ2xpZW50EiAueW9ya2llLnYxLkFjdGl2YXRlQ2xpZW50UmVxdWVzdBohLnlvcmtpZS52MS5BY3RpdmF0ZUNsaWVudFJlc3BvbnNlIgASXQoQRGVhY3RpdmF0ZUNsaWVudBIiLnlvcmtpZS52MS5EZWFjdGl2YXRlQ2xpZW50UmVxdWVzdBojLnlvcmtpZS52MS5EZWFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiABJXCg5BdHRhY2hEb2N1bWVudBIgLnlvcmtpZS52MS5BdHRhY2hEb2N1bWVudFJlcXVlc3QaIS55b3JraWUudjEuQXR0YWNoRG9jdW1lbnRSZXNwb25zZSIAElcKDkRldGFjaERvY3VtZW50EiAueW9ya2llLnYxLkRldGFjaERvY3VtZW50UmVxdWVzdBohLnlvcmtpZS52MS5EZXRhY2hEb2N1bWVudFJlc3BvbnNlIgASVwoOUmVtb3ZlRG9jdW1lbnQSIC55b3JraWUudjEuUmVtb3ZlRG9jdW1lbnRSZXF1ZXN0GiEueW9ya2llLnYxLlJlbW92ZURvY3VtZW50UmVzcG9uc2UiABJaCg9QdXNoUHVsbENoYW5nZXMSIS55b3JraWUudjEuUHVzaFB1bGxDaGFuZ2VzUmVxdWVzdBoiLnlvcmtpZS52MS5QdXNoUHVsbENoYW5nZXNSZXNwb25zZSIAEj4KBVdhdGNoEhcueW9ya2llLnYxLldhdGNoUmVxdWVzdBoYLnlvcmtpZS52MS5XYXRjaFJlc3BvbnNlIgAwARJXCg5DcmVhdGVSZXZpc2lvbhIgLnlvcmtpZS52MS5DcmVhdGVSZXZpc2lvblJlcXVlc3QaIS55b3JraWUudjEuQ3JlYXRlUmV2aXNpb25SZXNwb25zZSIAEk4KC0dldFJldmlzaW9uEh0ueW9ya2llLnYxLkdldFJldmlzaW9uUmVxdWVzdBoeLnlvcmtpZS52MS5HZXRSZXZpc2lvblJlc3BvbnNlIgASVAoNTGlzdFJldmlzaW9ucxIfLnlvcmtpZS52MS5MaXN0UmV2aXNpb25zUmVxdWVzdBogLnlvcmtpZS52MS5MaXN0UmV2aXNpb25zUmVzcG9uc2UiABJaCg9SZXN0b3JlUmV2aXNpb24SIS55b3JraWUudjEuUmVzdG9yZVJldmlzaW9uUmVxdWVzdBoiLnlvcmtpZS52MS5SZXN0b3JlUmV2aXNpb25SZXNwb25zZSIAElQKDUF0dGFjaENoYW5uZWwSHy55b3JraWUudjEuQXR0YWNoQ2hhbm5lbFJlcXVlc3QaIC55b3JraWUudjEuQXR0YWNoQ2hhbm5lbFJlc3BvbnNlIgASVAoNRGV0YWNoQ2hhbm5lbBIfLnlvcmtpZS52MS5EZXRhY2hDaGFubmVsUmVxdWVzdBogLnlvcmtpZS52MS5EZXRhY2hDaGFubmVsUmVzcG9uc2UiABJXCg5SZWZyZXNoQ2hhbm5lbBIgLnlvcmtpZS52MS5SZWZyZXNoQ2hhbm5lbFJlcXVlc3QaIS55b3JraWUudjEuUmVmcmVzaENoYW5uZWxSZXNwb25zZSIAEkgKCUJyb2FkY2FzdBIbLnlvcmtpZS52MS5Ccm9hZGNhc3RSZXF1ZXN0GhwueW9ya2llLnYxLkJyb2FkY2FzdFJlc3BvbnNlIgBCRQoRZGV2LnlvcmtpZS5hcGkudjFQAVouZ2l0aHViLmNvbS95b3JraWUtdGVhbS95b3JraWUvYXBpL3lvcmtpZS92MTt2MWIGcHJvdG8z", [file_src_api_yorkie_v1_resources]);
5870
+ const file_src_api_yorkie_v1_yorkie = /* @__PURE__ */ fileDesc("Ch5zcmMvYXBpL3lvcmtpZS92MS95b3JraWUucHJvdG8SCXlvcmtpZS52MSKeAQoVQWN0aXZhdGVDbGllbnRSZXF1ZXN0EhIKCmNsaWVudF9rZXkYASABKAkSQAoIbWV0YWRhdGEYAiADKAsyLi55b3JraWUudjEuQWN0aXZhdGVDbGllbnRSZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIisKFkFjdGl2YXRlQ2xpZW50UmVzcG9uc2USEQoJY2xpZW50X2lkGAEgASgJIkEKF0RlYWN0aXZhdGVDbGllbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtzeW5jaHJvbm91cxgCIAEoCCIaChhEZWFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiagoVQXR0YWNoRG9jdW1lbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRIqCgtjaGFuZ2VfcGFjaxgCIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrEhIKCnNjaGVtYV9rZXkYAyABKAkinwEKFkF0dGFjaERvY3VtZW50UmVzcG9uc2USEwoLZG9jdW1lbnRfaWQYASABKAkSKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYAyABKAUSJQoMc2NoZW1hX3J1bGVzGAQgAygLMg8ueW9ya2llLnYxLlJ1bGUiiwEKFURldGFjaERvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIeChZyZW1vdmVfaWZfbm90X2F0dGFjaGVkGAQgASgIIkQKFkRldGFjaERvY3VtZW50UmVzcG9uc2USKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayJTCgxXYXRjaFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEjAKCXJlc291cmNlcxgCIAMoCzIdLnlvcmtpZS52MS5SZXNvdXJjZURlc2NyaXB0b3IihAEKElJlc291cmNlRGVzY3JpcHRvchIxCghkb2N1bWVudBgBIAEoCzIdLnlvcmtpZS52MS5Eb2N1bWVudERlc2NyaXB0b3JIABIvCgdjaGFubmVsGAIgASgLMhwueW9ya2llLnYxLkNoYW5uZWxEZXNjcmlwdG9ySABCCgoIcmVzb3VyY2UiKQoSRG9jdW1lbnREZXNjcmlwdG9yEhMKC2RvY3VtZW50X2lkGAEgASgJIigKEUNoYW5uZWxEZXNjcmlwdG9yEhMKC2NoYW5uZWxfa2V5GAEgASgJInkKDVdhdGNoUmVzcG9uc2USOAoOaW5pdGlhbGl6YXRpb24YASABKAsyHi55b3JraWUudjEuV2F0Y2hJbml0aWFsaXphdGlvbkgAEiYKBWV2ZW50GAIgASgLMhUueW9ya2llLnYxLldhdGNoRXZlbnRIAEIGCgRib2R5IkYKE1dhdGNoSW5pdGlhbGl6YXRpb24SLwoOcmVzb3VyY2VfaW5pdHMYASADKAsyFy55b3JraWUudjEuUmVzb3VyY2VJbml0IngKDFJlc291cmNlSW5pdBIwCg1kb2N1bWVudF9pbml0GAEgASgLMhcueW9ya2llLnYxLkRvY3VtZW50SW5pdEgAEi4KDGNoYW5uZWxfaW5pdBgCIAEoCzIWLnlvcmtpZS52MS5DaGFubmVsSW5pdEgAQgYKBGluaXQiNwoMRG9jdW1lbnRJbml0EhMKC2RvY3VtZW50X2lkGAEgASgJEhIKCmNsaWVudF9pZHMYAiADKAkiRgoLQ2hhbm5lbEluaXQSEwoLY2hhbm5lbF9rZXkYASABKAkSFQoNc2Vzc2lvbl9jb3VudBgCIAEoAxILCgNzZXEYAyABKAMiewoKV2F0Y2hFdmVudBItCglkb2NfZXZlbnQYASABKAsyGC55b3JraWUudjEuRG9jV2F0Y2hFdmVudEgAEjUKDWNoYW5uZWxfZXZlbnQYAiABKAsyHC55b3JraWUudjEuQ2hhbm5lbFdhdGNoRXZlbnRIAEIHCgVldmVudCJICg1Eb2NXYXRjaEV2ZW50EhMKC2RvY3VtZW50X2lkGAEgASgJEiIKBWV2ZW50GAIgASgLMhMueW9ya2llLnYxLkRvY0V2ZW50IlAKEUNoYW5uZWxXYXRjaEV2ZW50EhMKC2NoYW5uZWxfa2V5GAEgASgJEiYKBWV2ZW50GAIgASgLMhcueW9ya2llLnYxLkNoYW5uZWxFdmVudCI+ChRXYXRjaERvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkitgEKFVdhdGNoRG9jdW1lbnRSZXNwb25zZRJJCg5pbml0aWFsaXphdGlvbhgBIAEoCzIvLnlvcmtpZS52MS5XYXRjaERvY3VtZW50UmVzcG9uc2UuSW5pdGlhbGl6YXRpb25IABIkCgVldmVudBgCIAEoCzITLnlvcmtpZS52MS5Eb2NFdmVudEgAGiQKDkluaXRpYWxpemF0aW9uEhIKCmNsaWVudF9pZHMYASADKAlCBgoEYm9keSI9ChNXYXRjaENoYW5uZWxSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCSKDAQoUV2F0Y2hDaGFubmVsUmVzcG9uc2USOQoLaW5pdGlhbGl6ZWQYASABKAsyIi55b3JraWUudjEuV2F0Y2hDaGFubmVsSW5pdGlhbGl6ZWRIABIoCgVldmVudBgCIAEoCzIXLnlvcmtpZS52MS5DaGFubmVsRXZlbnRIAEIGCgRib2R5Ij0KF1dhdGNoQ2hhbm5lbEluaXRpYWxpemVkEhUKDXNlc3Npb25fY291bnQYASABKAMSCwoDc2VxGAIgASgDImsKFVJlbW92ZURvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayJEChZSZW1vdmVEb2N1bWVudFJlc3BvbnNlEioKC2NoYW5nZV9wYWNrGAEgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2sifwoWUHVzaFB1bGxDaGFuZ2VzUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIRCglwdXNoX29ubHkYBCABKAgiRQoXUHVzaFB1bGxDaGFuZ2VzUmVzcG9uc2USKgoLY2hhbmdlX3BhY2sYASABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayJjChVDcmVhdGVSZXZpc2lvblJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEg0KBWxhYmVsGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJIkYKFkNyZWF0ZVJldmlzaW9uUmVzcG9uc2USLAoIcmV2aXNpb24YASABKAsyGi55b3JraWUudjEuUmV2aXNpb25TdW1tYXJ5IlEKEkdldFJldmlzaW9uUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSEwoLcmV2aXNpb25faWQYAyABKAkiQwoTR2V0UmV2aXNpb25SZXNwb25zZRIsCghyZXZpc2lvbhgBIAEoCzIaLnlvcmtpZS52MS5SZXZpc2lvblN1bW1hcnkidQoUTGlzdFJldmlzaW9uc1JlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoBRIOCgZvZmZzZXQYBCABKAUSEgoKaXNfZm9yd2FyZBgFIAEoCCJGChVMaXN0UmV2aXNpb25zUmVzcG9uc2USLQoJcmV2aXNpb25zGAEgAygLMhoueW9ya2llLnYxLlJldmlzaW9uU3VtbWFyeSJVChZSZXN0b3JlUmV2aXNpb25SZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRITCgtyZXZpc2lvbl9pZBgEIAEoCSIZChdSZXN0b3JlUmV2aXNpb25SZXNwb25zZSI+ChRBdHRhY2hDaGFubmVsUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLY2hhbm5lbF9rZXkYAiABKAkiQgoVQXR0YWNoQ2hhbm5lbFJlc3BvbnNlEhIKCnNlc3Npb25faWQYASABKAkSFQoNc2Vzc2lvbl9jb3VudBgCIAEoAyJSChREZXRhY2hDaGFubmVsUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLY2hhbm5lbF9rZXkYAiABKAkSEgoKc2Vzc2lvbl9pZBgDIAEoCSIuChVEZXRhY2hDaGFubmVsUmVzcG9uc2USFQoNc2Vzc2lvbl9jb3VudBgBIAEoAyJTChVSZWZyZXNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJEhIKCnNlc3Npb25faWQYAyABKAkiLwoWUmVmcmVzaENoYW5uZWxSZXNwb25zZRIVCg1zZXNzaW9uX2NvdW50GAEgASgDIloKEEJyb2FkY2FzdFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJEg0KBXRvcGljGAMgASgJEg8KB3BheWxvYWQYBCABKAwiEwoRQnJvYWRjYXN0UmVzcG9uc2UyxQsKDVlvcmtpZVNlcnZpY2USVwoOQWN0aXZhdGVDbGllbnQSIC55b3JraWUudjEuQWN0aXZhdGVDbGllbnRSZXF1ZXN0GiEueW9ya2llLnYxLkFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiABJdChBEZWFjdGl2YXRlQ2xpZW50EiIueW9ya2llLnYxLkRlYWN0aXZhdGVDbGllbnRSZXF1ZXN0GiMueW9ya2llLnYxLkRlYWN0aXZhdGVDbGllbnRSZXNwb25zZSIAElcKDkF0dGFjaERvY3VtZW50EiAueW9ya2llLnYxLkF0dGFjaERvY3VtZW50UmVxdWVzdBohLnlvcmtpZS52MS5BdHRhY2hEb2N1bWVudFJlc3BvbnNlIgASVwoORGV0YWNoRG9jdW1lbnQSIC55b3JraWUudjEuRGV0YWNoRG9jdW1lbnRSZXF1ZXN0GiEueW9ya2llLnYxLkRldGFjaERvY3VtZW50UmVzcG9uc2UiABJXCg5SZW1vdmVEb2N1bWVudBIgLnlvcmtpZS52MS5SZW1vdmVEb2N1bWVudFJlcXVlc3QaIS55b3JraWUudjEuUmVtb3ZlRG9jdW1lbnRSZXNwb25zZSIAEloKD1B1c2hQdWxsQ2hhbmdlcxIhLnlvcmtpZS52MS5QdXNoUHVsbENoYW5nZXNSZXF1ZXN0GiIueW9ya2llLnYxLlB1c2hQdWxsQ2hhbmdlc1Jlc3BvbnNlIgASPgoFV2F0Y2gSFy55b3JraWUudjEuV2F0Y2hSZXF1ZXN0GhgueW9ya2llLnYxLldhdGNoUmVzcG9uc2UiADABElYKDVdhdGNoRG9jdW1lbnQSHy55b3JraWUudjEuV2F0Y2hEb2N1bWVudFJlcXVlc3QaIC55b3JraWUudjEuV2F0Y2hEb2N1bWVudFJlc3BvbnNlIgAwARJTCgxXYXRjaENoYW5uZWwSHi55b3JraWUudjEuV2F0Y2hDaGFubmVsUmVxdWVzdBofLnlvcmtpZS52MS5XYXRjaENoYW5uZWxSZXNwb25zZSIAMAESVwoOQ3JlYXRlUmV2aXNpb24SIC55b3JraWUudjEuQ3JlYXRlUmV2aXNpb25SZXF1ZXN0GiEueW9ya2llLnYxLkNyZWF0ZVJldmlzaW9uUmVzcG9uc2UiABJOCgtHZXRSZXZpc2lvbhIdLnlvcmtpZS52MS5HZXRSZXZpc2lvblJlcXVlc3QaHi55b3JraWUudjEuR2V0UmV2aXNpb25SZXNwb25zZSIAElQKDUxpc3RSZXZpc2lvbnMSHy55b3JraWUudjEuTGlzdFJldmlzaW9uc1JlcXVlc3QaIC55b3JraWUudjEuTGlzdFJldmlzaW9uc1Jlc3BvbnNlIgASWgoPUmVzdG9yZVJldmlzaW9uEiEueW9ya2llLnYxLlJlc3RvcmVSZXZpc2lvblJlcXVlc3QaIi55b3JraWUudjEuUmVzdG9yZVJldmlzaW9uUmVzcG9uc2UiABJUCg1BdHRhY2hDaGFubmVsEh8ueW9ya2llLnYxLkF0dGFjaENoYW5uZWxSZXF1ZXN0GiAueW9ya2llLnYxLkF0dGFjaENoYW5uZWxSZXNwb25zZSIAElQKDURldGFjaENoYW5uZWwSHy55b3JraWUudjEuRGV0YWNoQ2hhbm5lbFJlcXVlc3QaIC55b3JraWUudjEuRGV0YWNoQ2hhbm5lbFJlc3BvbnNlIgASVwoOUmVmcmVzaENoYW5uZWwSIC55b3JraWUudjEuUmVmcmVzaENoYW5uZWxSZXF1ZXN0GiEueW9ya2llLnYxLlJlZnJlc2hDaGFubmVsUmVzcG9uc2UiABJICglCcm9hZGNhc3QSGy55b3JraWUudjEuQnJvYWRjYXN0UmVxdWVzdBocLnlvcmtpZS52MS5Ccm9hZGNhc3RSZXNwb25zZSIAQkUKEWRldi55b3JraWUuYXBpLnYxUAFaLmdpdGh1Yi5jb20veW9ya2llLXRlYW0veW9ya2llL2FwaS95b3JraWUvdjE7djFiBnByb3RvMw", [file_src_api_yorkie_v1_resources]);
5475
5871
  const YorkieService = /* @__PURE__ */ serviceDesc(file_src_api_yorkie_v1_yorkie, 0);
5476
5872
  const file_google_rpc_error_details = /* @__PURE__ */ fileDesc("Ch5nb29nbGUvcnBjL2Vycm9yX2RldGFpbHMucHJvdG8SCmdvb2dsZS5ycGMikwEKCUVycm9ySW5mbxIOCgZyZWFzb24YASABKAkSDgoGZG9tYWluGAIgASgJEjUKCG1ldGFkYXRhGAMgAygLMiMuZ29vZ2xlLnJwYy5FcnJvckluZm8uTWV0YWRhdGFFbnRyeRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiOwoJUmV0cnlJbmZvEi4KC3JldHJ5X2RlbGF5GAEgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIjIKCURlYnVnSW5mbxIVCg1zdGFja19lbnRyaWVzGAEgAygJEg4KBmRldGFpbBgCIAEoCSKPAwoMUXVvdGFGYWlsdXJlEjYKCnZpb2xhdGlvbnMYASADKAsyIi5nb29nbGUucnBjLlF1b3RhRmFpbHVyZS5WaW9sYXRpb24axgIKCVZpb2xhdGlvbhIPCgdzdWJqZWN0GAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhMKC2FwaV9zZXJ2aWNlGAMgASgJEhQKDHF1b3RhX21ldHJpYxgEIAEoCRIQCghxdW90YV9pZBgFIAEoCRJRChBxdW90YV9kaW1lbnNpb25zGAYgAygLMjcuZ29vZ2xlLnJwYy5RdW90YUZhaWx1cmUuVmlvbGF0aW9uLlF1b3RhRGltZW5zaW9uc0VudHJ5EhMKC3F1b3RhX3ZhbHVlGAcgASgDEh8KEmZ1dHVyZV9xdW90YV92YWx1ZRgIIAEoA0gAiAEBGjYKFFF1b3RhRGltZW5zaW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCFQoTX2Z1dHVyZV9xdW90YV92YWx1ZSKVAQoTUHJlY29uZGl0aW9uRmFpbHVyZRI9Cgp2aW9sYXRpb25zGAEgAygLMikuZ29vZ2xlLnJwYy5QcmVjb25kaXRpb25GYWlsdXJlLlZpb2xhdGlvbho/CglWaW9sYXRpb24SDAoEdHlwZRgBIAEoCRIPCgdzdWJqZWN0GAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJIswBCgpCYWRSZXF1ZXN0Ej8KEGZpZWxkX3Zpb2xhdGlvbnMYASADKAsyJS5nb29nbGUucnBjLkJhZFJlcXVlc3QuRmllbGRWaW9sYXRpb24afQoORmllbGRWaW9sYXRpb24SDQoFZmllbGQYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDgoGcmVhc29uGAMgASgJEjcKEWxvY2FsaXplZF9tZXNzYWdlGAQgASgLMhwuZ29vZ2xlLnJwYy5Mb2NhbGl6ZWRNZXNzYWdlIjcKC1JlcXVlc3RJbmZvEhIKCnJlcXVlc3RfaWQYASABKAkSFAoMc2VydmluZ19kYXRhGAIgASgJImAKDFJlc291cmNlSW5mbxIVCg1yZXNvdXJjZV90eXBlGAEgASgJEhUKDXJlc291cmNlX25hbWUYAiABKAkSDQoFb3duZXIYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkiVgoESGVscBIkCgVsaW5rcxgBIAMoCzIVLmdvb2dsZS5ycGMuSGVscC5MaW5rGigKBExpbmsSEwoLZGVzY3JpcHRpb24YASABKAkSCwoDdXJsGAIgASgJIjMKEExvY2FsaXplZE1lc3NhZ2USDgoGbG9jYWxlGAEgASgJEg8KB21lc3NhZ2UYAiABKAlCbAoOY29tLmdvb2dsZS5ycGNCEUVycm9yRGV0YWlsc1Byb3RvUAFaP2dvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvcnBjL2VycmRldGFpbHM7ZXJyZGV0YWlsc6ICA1JQQ2IGcHJvdG8z", [file_google_protobuf_duration]);
5477
5873
  const ErrorInfoSchema = /* @__PURE__ */ messageDesc(file_google_rpc_error_details, 0);
@@ -5618,9 +6014,9 @@ class TimeTicket {
5618
6014
  } else if (other.lamport > this.lamport) {
5619
6015
  return -1;
5620
6016
  }
5621
- const compare2 = this.actorID.localeCompare(other.actorID);
5622
- if (compare2 !== 0) {
5623
- return compare2;
6017
+ const compare = this.actorID.localeCompare(other.actorID);
6018
+ if (compare !== 0) {
6019
+ return compare;
5624
6020
  }
5625
6021
  if (this.delimiter > other.delimiter) {
5626
6022
  return 1;
@@ -6613,923 +7009,32 @@ class SplayTree {
6613
7009
  return false;
6614
7010
  }
6615
7011
  }
6616
- var wasm = null;
6617
- try {
6618
- wasm = new WebAssembly.Instance(
6619
- new WebAssembly.Module(
6620
- new Uint8Array([
6621
- // \0asm
6622
- 0,
6623
- 97,
6624
- 115,
6625
- 109,
6626
- // version 1
6627
- 1,
6628
- 0,
6629
- 0,
6630
- 0,
6631
- // section "type"
6632
- 1,
6633
- 13,
6634
- 2,
6635
- // 0, () => i32
6636
- 96,
6637
- 0,
6638
- 1,
6639
- 127,
6640
- // 1, (i32, i32, i32, i32) => i32
6641
- 96,
6642
- 4,
6643
- 127,
6644
- 127,
6645
- 127,
6646
- 127,
6647
- 1,
6648
- 127,
6649
- // section "function"
6650
- 3,
6651
- 7,
6652
- 6,
6653
- // 0, type 0
6654
- 0,
6655
- // 1, type 1
6656
- 1,
6657
- // 2, type 1
6658
- 1,
6659
- // 3, type 1
6660
- 1,
6661
- // 4, type 1
6662
- 1,
6663
- // 5, type 1
6664
- 1,
6665
- // section "global"
6666
- 6,
6667
- 6,
6668
- 1,
6669
- // 0, "high", mutable i32
6670
- 127,
6671
- 1,
6672
- 65,
6673
- 0,
6674
- 11,
6675
- // section "export"
6676
- 7,
6677
- 50,
6678
- 6,
6679
- // 0, "mul"
6680
- 3,
6681
- 109,
6682
- 117,
6683
- 108,
6684
- 0,
6685
- 1,
6686
- // 1, "div_s"
6687
- 5,
6688
- 100,
6689
- 105,
6690
- 118,
6691
- 95,
6692
- 115,
6693
- 0,
6694
- 2,
6695
- // 2, "div_u"
6696
- 5,
6697
- 100,
6698
- 105,
6699
- 118,
6700
- 95,
6701
- 117,
6702
- 0,
6703
- 3,
6704
- // 3, "rem_s"
6705
- 5,
6706
- 114,
6707
- 101,
6708
- 109,
6709
- 95,
6710
- 115,
6711
- 0,
6712
- 4,
6713
- // 4, "rem_u"
6714
- 5,
6715
- 114,
6716
- 101,
6717
- 109,
6718
- 95,
6719
- 117,
6720
- 0,
6721
- 5,
6722
- // 5, "get_high"
6723
- 8,
6724
- 103,
6725
- 101,
6726
- 116,
6727
- 95,
6728
- 104,
6729
- 105,
6730
- 103,
6731
- 104,
6732
- 0,
6733
- 0,
6734
- // section "code"
6735
- 10,
6736
- 191,
6737
- 1,
6738
- 6,
6739
- // 0, "get_high"
6740
- 4,
6741
- 0,
6742
- 35,
6743
- 0,
6744
- 11,
6745
- // 1, "mul"
6746
- 36,
6747
- 1,
6748
- 1,
6749
- 126,
6750
- 32,
6751
- 0,
6752
- 173,
6753
- 32,
6754
- 1,
6755
- 173,
6756
- 66,
6757
- 32,
6758
- 134,
6759
- 132,
6760
- 32,
6761
- 2,
6762
- 173,
6763
- 32,
6764
- 3,
6765
- 173,
6766
- 66,
6767
- 32,
6768
- 134,
6769
- 132,
6770
- 126,
6771
- 34,
6772
- 4,
6773
- 66,
6774
- 32,
6775
- 135,
6776
- 167,
6777
- 36,
6778
- 0,
6779
- 32,
6780
- 4,
6781
- 167,
6782
- 11,
6783
- // 2, "div_s"
6784
- 36,
6785
- 1,
6786
- 1,
6787
- 126,
6788
- 32,
6789
- 0,
6790
- 173,
6791
- 32,
6792
- 1,
6793
- 173,
6794
- 66,
6795
- 32,
6796
- 134,
6797
- 132,
6798
- 32,
6799
- 2,
6800
- 173,
6801
- 32,
6802
- 3,
6803
- 173,
6804
- 66,
6805
- 32,
6806
- 134,
6807
- 132,
6808
- 127,
6809
- 34,
6810
- 4,
6811
- 66,
6812
- 32,
6813
- 135,
6814
- 167,
6815
- 36,
6816
- 0,
6817
- 32,
6818
- 4,
6819
- 167,
6820
- 11,
6821
- // 3, "div_u"
6822
- 36,
6823
- 1,
6824
- 1,
6825
- 126,
6826
- 32,
6827
- 0,
6828
- 173,
6829
- 32,
6830
- 1,
6831
- 173,
6832
- 66,
6833
- 32,
6834
- 134,
6835
- 132,
6836
- 32,
6837
- 2,
6838
- 173,
6839
- 32,
6840
- 3,
6841
- 173,
6842
- 66,
6843
- 32,
6844
- 134,
6845
- 132,
6846
- 128,
6847
- 34,
6848
- 4,
6849
- 66,
6850
- 32,
6851
- 135,
6852
- 167,
6853
- 36,
6854
- 0,
6855
- 32,
6856
- 4,
6857
- 167,
6858
- 11,
6859
- // 4, "rem_s"
6860
- 36,
6861
- 1,
6862
- 1,
6863
- 126,
6864
- 32,
6865
- 0,
6866
- 173,
6867
- 32,
6868
- 1,
6869
- 173,
6870
- 66,
6871
- 32,
6872
- 134,
6873
- 132,
6874
- 32,
6875
- 2,
6876
- 173,
6877
- 32,
6878
- 3,
6879
- 173,
6880
- 66,
6881
- 32,
6882
- 134,
6883
- 132,
6884
- 129,
6885
- 34,
6886
- 4,
6887
- 66,
6888
- 32,
6889
- 135,
6890
- 167,
6891
- 36,
6892
- 0,
6893
- 32,
6894
- 4,
6895
- 167,
6896
- 11,
6897
- // 5, "rem_u"
6898
- 36,
6899
- 1,
6900
- 1,
6901
- 126,
6902
- 32,
6903
- 0,
6904
- 173,
6905
- 32,
6906
- 1,
6907
- 173,
6908
- 66,
6909
- 32,
6910
- 134,
6911
- 132,
6912
- 32,
6913
- 2,
6914
- 173,
6915
- 32,
6916
- 3,
6917
- 173,
6918
- 66,
6919
- 32,
6920
- 134,
6921
- 132,
6922
- 130,
6923
- 34,
6924
- 4,
6925
- 66,
6926
- 32,
6927
- 135,
6928
- 167,
6929
- 36,
6930
- 0,
6931
- 32,
6932
- 4,
6933
- 167,
6934
- 11
6935
- ])
6936
- ),
6937
- {}
6938
- ).exports;
6939
- } catch {
6940
- }
6941
- function Long(low, high, unsigned) {
6942
- this.low = low | 0;
6943
- this.high = high | 0;
6944
- this.unsigned = !!unsigned;
6945
- }
6946
- Long.prototype.__isLong__;
6947
- Object.defineProperty(Long.prototype, "__isLong__", { value: true });
6948
- function isLong$1(obj) {
6949
- return (obj && obj["__isLong__"]) === true;
6950
- }
6951
- function ctz32(value) {
6952
- var c = Math.clz32(value & -value);
6953
- return value ? 31 - c : c;
6954
- }
6955
- Long.isLong = isLong$1;
6956
- var INT_CACHE = {};
6957
- var UINT_CACHE = {};
6958
- function fromInt(value, unsigned) {
6959
- var obj, cachedObj, cache;
6960
- if (unsigned) {
6961
- value >>>= 0;
6962
- if (cache = 0 <= value && value < 256) {
6963
- cachedObj = UINT_CACHE[value];
6964
- if (cachedObj) return cachedObj;
6965
- }
6966
- obj = fromBits(value, 0, true);
6967
- if (cache) UINT_CACHE[value] = obj;
6968
- return obj;
6969
- } else {
6970
- value |= 0;
6971
- if (cache = -128 <= value && value < 128) {
6972
- cachedObj = INT_CACHE[value];
6973
- if (cachedObj) return cachedObj;
6974
- }
6975
- obj = fromBits(value, value < 0 ? -1 : 0, false);
6976
- if (cache) INT_CACHE[value] = obj;
6977
- return obj;
7012
+ const removeDecimal = (number) => number < 0 ? Math.ceil(number) : Math.floor(number);
7013
+ function bigintToBytesLE(value) {
7014
+ const buf = new Uint8Array(8);
7015
+ let v = BigInt.asUintN(64, value);
7016
+ for (let i = 0; i < 8; i++) {
7017
+ buf[i] = Number(v & 0xffn);
7018
+ v >>= 8n;
6978
7019
  }
7020
+ return buf;
6979
7021
  }
6980
- Long.fromInt = fromInt;
6981
- function fromNumber(value, unsigned) {
6982
- if (isNaN(value)) return unsigned ? UZERO : ZERO;
6983
- if (unsigned) {
6984
- if (value < 0) return UZERO;
6985
- if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;
6986
- } else {
6987
- if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;
6988
- if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;
6989
- }
6990
- if (value < 0) return fromNumber(-value, unsigned).neg();
6991
- return fromBits(
6992
- value % TWO_PWR_32_DBL | 0,
6993
- value / TWO_PWR_32_DBL | 0,
6994
- unsigned
6995
- );
6996
- }
6997
- Long.fromNumber = fromNumber;
6998
- function fromBits(lowBits, highBits, unsigned) {
6999
- return new Long(lowBits, highBits, unsigned);
7000
- }
7001
- Long.fromBits = fromBits;
7002
- var pow_dbl = Math.pow;
7003
- function fromString(str, unsigned, radix) {
7004
- if (str.length === 0) throw Error("empty string");
7005
- if (typeof unsigned === "number") {
7006
- radix = unsigned;
7007
- unsigned = false;
7008
- } else {
7009
- unsigned = !!unsigned;
7010
- }
7011
- if (str === "NaN" || str === "Infinity" || str === "+Infinity" || str === "-Infinity")
7012
- return unsigned ? UZERO : ZERO;
7013
- radix = radix || 10;
7014
- if (radix < 2 || 36 < radix) throw RangeError("radix");
7015
- var p;
7016
- if ((p = str.indexOf("-")) > 0) throw Error("interior hyphen");
7017
- else if (p === 0) {
7018
- return fromString(str.substring(1), unsigned, radix).neg();
7019
- }
7020
- var radixToPower = fromNumber(pow_dbl(radix, 8));
7021
- var result = ZERO;
7022
- for (var i = 0; i < str.length; i += 8) {
7023
- var size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix);
7024
- if (size < 8) {
7025
- var power = fromNumber(pow_dbl(radix, size));
7026
- result = result.mul(power).add(fromNumber(value));
7027
- } else {
7028
- result = result.mul(radixToPower);
7029
- result = result.add(fromNumber(value));
7030
- }
7022
+ function bigintFromBytesLE(bytes) {
7023
+ let v = 0n;
7024
+ for (let i = 7; i >= 0; i--) {
7025
+ v = v << 8n | BigInt(bytes[i]);
7031
7026
  }
7032
- result.unsigned = unsigned;
7033
- return result;
7027
+ return BigInt.asIntN(64, v);
7034
7028
  }
7035
- Long.fromString = fromString;
7036
- function fromValue(val, unsigned) {
7037
- if (typeof val === "number") return fromNumber(val, unsigned);
7038
- if (typeof val === "string") return fromString(val, unsigned);
7039
- return fromBits(
7040
- val.low,
7041
- val.high,
7042
- typeof unsigned === "boolean" ? unsigned : val.unsigned
7043
- );
7044
- }
7045
- Long.fromValue = fromValue;
7046
- var TWO_PWR_16_DBL = 1 << 16;
7047
- var TWO_PWR_24_DBL = 1 << 24;
7048
- var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;
7049
- var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;
7050
- var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;
7051
- var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);
7052
- var ZERO = fromInt(0);
7053
- Long.ZERO = ZERO;
7054
- var UZERO = fromInt(0, true);
7055
- Long.UZERO = UZERO;
7056
- var ONE = fromInt(1);
7057
- Long.ONE = ONE;
7058
- var UONE = fromInt(1, true);
7059
- Long.UONE = UONE;
7060
- var NEG_ONE = fromInt(-1);
7061
- Long.NEG_ONE = NEG_ONE;
7062
- var MAX_VALUE = fromBits(4294967295 | 0, 2147483647 | 0, false);
7063
- Long.MAX_VALUE = MAX_VALUE;
7064
- var MAX_UNSIGNED_VALUE = fromBits(4294967295 | 0, 4294967295 | 0, true);
7065
- Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;
7066
- var MIN_VALUE = fromBits(0, 2147483648 | 0, false);
7067
- Long.MIN_VALUE = MIN_VALUE;
7068
- var LongPrototype = Long.prototype;
7069
- LongPrototype.toInt = function toInt() {
7070
- return this.unsigned ? this.low >>> 0 : this.low;
7071
- };
7072
- LongPrototype.toNumber = function toNumber() {
7073
- if (this.unsigned)
7074
- return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);
7075
- return this.high * TWO_PWR_32_DBL + (this.low >>> 0);
7076
- };
7077
- LongPrototype.toString = function toString(radix) {
7078
- radix = radix || 10;
7079
- if (radix < 2 || 36 < radix) throw RangeError("radix");
7080
- if (this.isZero()) return "0";
7081
- if (this.isNegative()) {
7082
- if (this.eq(MIN_VALUE)) {
7083
- var radixLong = fromNumber(radix), div = this.div(radixLong), rem1 = div.mul(radixLong).sub(this);
7084
- return div.toString(radix) + rem1.toInt().toString(radix);
7085
- } else return "-" + this.neg().toString(radix);
7086
- }
7087
- var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned), rem = this;
7088
- var result = "";
7089
- while (true) {
7090
- var remDiv = rem.div(radixToPower), intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0, digits = intval.toString(radix);
7091
- rem = remDiv;
7092
- if (rem.isZero()) return digits + result;
7093
- else {
7094
- while (digits.length < 6) digits = "0" + digits;
7095
- result = "" + digits + result;
7096
- }
7097
- }
7098
- };
7099
- LongPrototype.getHighBits = function getHighBits() {
7100
- return this.high;
7101
- };
7102
- LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {
7103
- return this.high >>> 0;
7104
- };
7105
- LongPrototype.getLowBits = function getLowBits() {
7106
- return this.low;
7107
- };
7108
- LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {
7109
- return this.low >>> 0;
7110
- };
7111
- LongPrototype.getNumBitsAbs = function getNumBitsAbs() {
7112
- if (this.isNegative())
7113
- return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();
7114
- var val = this.high != 0 ? this.high : this.low;
7115
- for (var bit = 31; bit > 0; bit--) if ((val & 1 << bit) != 0) break;
7116
- return this.high != 0 ? bit + 33 : bit + 1;
7117
- };
7118
- LongPrototype.isSafeInteger = function isSafeInteger() {
7119
- var top11Bits = this.high >> 21;
7120
- if (!top11Bits) return true;
7121
- if (this.unsigned) return false;
7122
- return top11Bits === -1 && !(this.low === 0 && this.high === -2097152);
7123
- };
7124
- LongPrototype.isZero = function isZero() {
7125
- return this.high === 0 && this.low === 0;
7126
- };
7127
- LongPrototype.eqz = LongPrototype.isZero;
7128
- LongPrototype.isNegative = function isNegative() {
7129
- return !this.unsigned && this.high < 0;
7130
- };
7131
- LongPrototype.isPositive = function isPositive() {
7132
- return this.unsigned || this.high >= 0;
7133
- };
7134
- LongPrototype.isOdd = function isOdd() {
7135
- return (this.low & 1) === 1;
7136
- };
7137
- LongPrototype.isEven = function isEven() {
7138
- return (this.low & 1) === 0;
7139
- };
7140
- LongPrototype.equals = function equals(other) {
7141
- if (!isLong$1(other)) other = fromValue(other);
7142
- if (this.unsigned !== other.unsigned && this.high >>> 31 === 1 && other.high >>> 31 === 1)
7143
- return false;
7144
- return this.high === other.high && this.low === other.low;
7145
- };
7146
- LongPrototype.eq = LongPrototype.equals;
7147
- LongPrototype.notEquals = function notEquals(other) {
7148
- return !this.eq(
7149
- /* validates */
7150
- other
7151
- );
7152
- };
7153
- LongPrototype.neq = LongPrototype.notEquals;
7154
- LongPrototype.ne = LongPrototype.notEquals;
7155
- LongPrototype.lessThan = function lessThan(other) {
7156
- return this.comp(
7157
- /* validates */
7158
- other
7159
- ) < 0;
7160
- };
7161
- LongPrototype.lt = LongPrototype.lessThan;
7162
- LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {
7163
- return this.comp(
7164
- /* validates */
7165
- other
7166
- ) <= 0;
7167
- };
7168
- LongPrototype.lte = LongPrototype.lessThanOrEqual;
7169
- LongPrototype.le = LongPrototype.lessThanOrEqual;
7170
- LongPrototype.greaterThan = function greaterThan(other) {
7171
- return this.comp(
7172
- /* validates */
7173
- other
7174
- ) > 0;
7175
- };
7176
- LongPrototype.gt = LongPrototype.greaterThan;
7177
- LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {
7178
- return this.comp(
7179
- /* validates */
7180
- other
7181
- ) >= 0;
7182
- };
7183
- LongPrototype.gte = LongPrototype.greaterThanOrEqual;
7184
- LongPrototype.ge = LongPrototype.greaterThanOrEqual;
7185
- LongPrototype.compare = function compare(other) {
7186
- if (!isLong$1(other)) other = fromValue(other);
7187
- if (this.eq(other)) return 0;
7188
- var thisNeg = this.isNegative(), otherNeg = other.isNegative();
7189
- if (thisNeg && !otherNeg) return -1;
7190
- if (!thisNeg && otherNeg) return 1;
7191
- if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;
7192
- return other.high >>> 0 > this.high >>> 0 || other.high === this.high && other.low >>> 0 > this.low >>> 0 ? -1 : 1;
7193
- };
7194
- LongPrototype.comp = LongPrototype.compare;
7195
- LongPrototype.negate = function negate2() {
7196
- if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;
7197
- return this.not().add(ONE);
7198
- };
7199
- LongPrototype.neg = LongPrototype.negate;
7200
- LongPrototype.add = function add(addend) {
7201
- if (!isLong$1(addend)) addend = fromValue(addend);
7202
- var a48 = this.high >>> 16;
7203
- var a32 = this.high & 65535;
7204
- var a16 = this.low >>> 16;
7205
- var a00 = this.low & 65535;
7206
- var b48 = addend.high >>> 16;
7207
- var b32 = addend.high & 65535;
7208
- var b16 = addend.low >>> 16;
7209
- var b00 = addend.low & 65535;
7210
- var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
7211
- c00 += a00 + b00;
7212
- c16 += c00 >>> 16;
7213
- c00 &= 65535;
7214
- c16 += a16 + b16;
7215
- c32 += c16 >>> 16;
7216
- c16 &= 65535;
7217
- c32 += a32 + b32;
7218
- c48 += c32 >>> 16;
7219
- c32 &= 65535;
7220
- c48 += a48 + b48;
7221
- c48 &= 65535;
7222
- return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
7223
- };
7224
- LongPrototype.subtract = function subtract(subtrahend) {
7225
- if (!isLong$1(subtrahend)) subtrahend = fromValue(subtrahend);
7226
- return this.add(subtrahend.neg());
7227
- };
7228
- LongPrototype.sub = LongPrototype.subtract;
7229
- LongPrototype.multiply = function multiply(multiplier) {
7230
- if (this.isZero()) return this;
7231
- if (!isLong$1(multiplier)) multiplier = fromValue(multiplier);
7232
- if (wasm) {
7233
- var low = wasm["mul"](this.low, this.high, multiplier.low, multiplier.high);
7234
- return fromBits(low, wasm["get_high"](), this.unsigned);
7235
- }
7236
- if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;
7237
- if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;
7238
- if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;
7239
- if (this.isNegative()) {
7240
- if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());
7241
- else return this.neg().mul(multiplier).neg();
7242
- } else if (multiplier.isNegative()) return this.mul(multiplier.neg()).neg();
7243
- if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))
7244
- return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);
7245
- var a48 = this.high >>> 16;
7246
- var a32 = this.high & 65535;
7247
- var a16 = this.low >>> 16;
7248
- var a00 = this.low & 65535;
7249
- var b48 = multiplier.high >>> 16;
7250
- var b32 = multiplier.high & 65535;
7251
- var b16 = multiplier.low >>> 16;
7252
- var b00 = multiplier.low & 65535;
7253
- var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
7254
- c00 += a00 * b00;
7255
- c16 += c00 >>> 16;
7256
- c00 &= 65535;
7257
- c16 += a16 * b00;
7258
- c32 += c16 >>> 16;
7259
- c16 &= 65535;
7260
- c16 += a00 * b16;
7261
- c32 += c16 >>> 16;
7262
- c16 &= 65535;
7263
- c32 += a32 * b00;
7264
- c48 += c32 >>> 16;
7265
- c32 &= 65535;
7266
- c32 += a16 * b16;
7267
- c48 += c32 >>> 16;
7268
- c32 &= 65535;
7269
- c32 += a00 * b32;
7270
- c48 += c32 >>> 16;
7271
- c32 &= 65535;
7272
- c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
7273
- c48 &= 65535;
7274
- return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
7275
- };
7276
- LongPrototype.mul = LongPrototype.multiply;
7277
- LongPrototype.divide = function divide(divisor) {
7278
- if (!isLong$1(divisor)) divisor = fromValue(divisor);
7279
- if (divisor.isZero()) throw Error("division by zero");
7280
- if (wasm) {
7281
- if (!this.unsigned && this.high === -2147483648 && divisor.low === -1 && divisor.high === -1) {
7282
- return this;
7283
- }
7284
- var low = (this.unsigned ? wasm["div_u"] : wasm["div_s"])(
7285
- this.low,
7286
- this.high,
7287
- divisor.low,
7288
- divisor.high
7289
- );
7290
- return fromBits(low, wasm["get_high"](), this.unsigned);
7291
- }
7292
- if (this.isZero()) return this.unsigned ? UZERO : ZERO;
7293
- var approx, rem, res;
7294
- if (!this.unsigned) {
7295
- if (this.eq(MIN_VALUE)) {
7296
- if (divisor.eq(ONE) || divisor.eq(NEG_ONE))
7297
- return MIN_VALUE;
7298
- else if (divisor.eq(MIN_VALUE)) return ONE;
7299
- else {
7300
- var halfThis = this.shr(1);
7301
- approx = halfThis.div(divisor).shl(1);
7302
- if (approx.eq(ZERO)) {
7303
- return divisor.isNegative() ? ONE : NEG_ONE;
7304
- } else {
7305
- rem = this.sub(divisor.mul(approx));
7306
- res = approx.add(rem.div(divisor));
7307
- return res;
7308
- }
7309
- }
7310
- } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;
7311
- if (this.isNegative()) {
7312
- if (divisor.isNegative()) return this.neg().div(divisor.neg());
7313
- return this.neg().div(divisor).neg();
7314
- } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();
7315
- res = ZERO;
7316
- } else {
7317
- if (!divisor.unsigned) divisor = divisor.toUnsigned();
7318
- if (divisor.gt(this)) return UZERO;
7319
- if (divisor.gt(this.shru(1)))
7320
- return UONE;
7321
- res = UZERO;
7322
- }
7323
- rem = this;
7324
- while (rem.gte(divisor)) {
7325
- approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));
7326
- var log2 = Math.ceil(Math.log(approx) / Math.LN2), delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48), approxRes = fromNumber(approx), approxRem = approxRes.mul(divisor);
7327
- while (approxRem.isNegative() || approxRem.gt(rem)) {
7328
- approx -= delta;
7329
- approxRes = fromNumber(approx, this.unsigned);
7330
- approxRem = approxRes.mul(divisor);
7331
- }
7332
- if (approxRes.isZero()) approxRes = ONE;
7333
- res = res.add(approxRes);
7334
- rem = rem.sub(approxRem);
7335
- }
7336
- return res;
7337
- };
7338
- LongPrototype.div = LongPrototype.divide;
7339
- LongPrototype.modulo = function modulo(divisor) {
7340
- if (!isLong$1(divisor)) divisor = fromValue(divisor);
7341
- if (wasm) {
7342
- var low = (this.unsigned ? wasm["rem_u"] : wasm["rem_s"])(
7343
- this.low,
7344
- this.high,
7345
- divisor.low,
7346
- divisor.high
7347
- );
7348
- return fromBits(low, wasm["get_high"](), this.unsigned);
7349
- }
7350
- return this.sub(this.div(divisor).mul(divisor));
7351
- };
7352
- LongPrototype.mod = LongPrototype.modulo;
7353
- LongPrototype.rem = LongPrototype.modulo;
7354
- LongPrototype.not = function not() {
7355
- return fromBits(~this.low, ~this.high, this.unsigned);
7356
- };
7357
- LongPrototype.countLeadingZeros = function countLeadingZeros() {
7358
- return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;
7359
- };
7360
- LongPrototype.clz = LongPrototype.countLeadingZeros;
7361
- LongPrototype.countTrailingZeros = function countTrailingZeros() {
7362
- return this.low ? ctz32(this.low) : ctz32(this.high) + 32;
7363
- };
7364
- LongPrototype.ctz = LongPrototype.countTrailingZeros;
7365
- LongPrototype.and = function and(other) {
7366
- if (!isLong$1(other)) other = fromValue(other);
7367
- return fromBits(this.low & other.low, this.high & other.high, this.unsigned);
7368
- };
7369
- LongPrototype.or = function or(other) {
7370
- if (!isLong$1(other)) other = fromValue(other);
7371
- return fromBits(this.low | other.low, this.high | other.high, this.unsigned);
7372
- };
7373
- LongPrototype.xor = function xor(other) {
7374
- if (!isLong$1(other)) other = fromValue(other);
7375
- return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);
7376
- };
7377
- LongPrototype.shiftLeft = function shiftLeft(numBits) {
7378
- if (isLong$1(numBits)) numBits = numBits.toInt();
7379
- if ((numBits &= 63) === 0) return this;
7380
- else if (numBits < 32)
7381
- return fromBits(
7382
- this.low << numBits,
7383
- this.high << numBits | this.low >>> 32 - numBits,
7384
- this.unsigned
7385
- );
7386
- else return fromBits(0, this.low << numBits - 32, this.unsigned);
7387
- };
7388
- LongPrototype.shl = LongPrototype.shiftLeft;
7389
- LongPrototype.shiftRight = function shiftRight(numBits) {
7390
- if (isLong$1(numBits)) numBits = numBits.toInt();
7391
- if ((numBits &= 63) === 0) return this;
7392
- else if (numBits < 32)
7393
- return fromBits(
7394
- this.low >>> numBits | this.high << 32 - numBits,
7395
- this.high >> numBits,
7396
- this.unsigned
7397
- );
7398
- else
7399
- return fromBits(
7400
- this.high >> numBits - 32,
7401
- this.high >= 0 ? 0 : -1,
7402
- this.unsigned
7403
- );
7404
- };
7405
- LongPrototype.shr = LongPrototype.shiftRight;
7406
- LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {
7407
- if (isLong$1(numBits)) numBits = numBits.toInt();
7408
- if ((numBits &= 63) === 0) return this;
7409
- if (numBits < 32)
7410
- return fromBits(
7411
- this.low >>> numBits | this.high << 32 - numBits,
7412
- this.high >>> numBits,
7413
- this.unsigned
7414
- );
7415
- if (numBits === 32) return fromBits(this.high, 0, this.unsigned);
7416
- return fromBits(this.high >>> numBits - 32, 0, this.unsigned);
7417
- };
7418
- LongPrototype.shru = LongPrototype.shiftRightUnsigned;
7419
- LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;
7420
- LongPrototype.rotateLeft = function rotateLeft(numBits) {
7421
- var b;
7422
- if (isLong$1(numBits)) numBits = numBits.toInt();
7423
- if ((numBits &= 63) === 0) return this;
7424
- if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);
7425
- if (numBits < 32) {
7426
- b = 32 - numBits;
7427
- return fromBits(
7428
- this.low << numBits | this.high >>> b,
7429
- this.high << numBits | this.low >>> b,
7430
- this.unsigned
7431
- );
7432
- }
7433
- numBits -= 32;
7434
- b = 32 - numBits;
7435
- return fromBits(
7436
- this.high << numBits | this.low >>> b,
7437
- this.low << numBits | this.high >>> b,
7438
- this.unsigned
7439
- );
7440
- };
7441
- LongPrototype.rotl = LongPrototype.rotateLeft;
7442
- LongPrototype.rotateRight = function rotateRight(numBits) {
7443
- var b;
7444
- if (isLong$1(numBits)) numBits = numBits.toInt();
7445
- if ((numBits &= 63) === 0) return this;
7446
- if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);
7447
- if (numBits < 32) {
7448
- b = 32 - numBits;
7449
- return fromBits(
7450
- this.high << b | this.low >>> numBits,
7451
- this.low << b | this.high >>> numBits,
7452
- this.unsigned
7453
- );
7029
+ function bigintFromBytesLEUnsigned(bytes) {
7030
+ let v = 0n;
7031
+ for (let i = 7; i >= 0; i--) {
7032
+ v = v << 8n | BigInt(bytes[i]);
7454
7033
  }
7455
- numBits -= 32;
7456
- b = 32 - numBits;
7457
- return fromBits(
7458
- this.low << b | this.high >>> numBits,
7459
- this.high << b | this.low >>> numBits,
7460
- this.unsigned
7461
- );
7462
- };
7463
- LongPrototype.rotr = LongPrototype.rotateRight;
7464
- LongPrototype.toSigned = function toSigned() {
7465
- if (!this.unsigned) return this;
7466
- return fromBits(this.low, this.high, false);
7467
- };
7468
- LongPrototype.toUnsigned = function toUnsigned2() {
7469
- if (this.unsigned) return this;
7470
- return fromBits(this.low, this.high, true);
7471
- };
7472
- LongPrototype.toBytes = function toBytes(le) {
7473
- return le ? this.toBytesLE() : this.toBytesBE();
7474
- };
7475
- LongPrototype.toBytesLE = function toBytesLE() {
7476
- var hi = this.high, lo = this.low;
7477
- return [
7478
- lo & 255,
7479
- lo >>> 8 & 255,
7480
- lo >>> 16 & 255,
7481
- lo >>> 24,
7482
- hi & 255,
7483
- hi >>> 8 & 255,
7484
- hi >>> 16 & 255,
7485
- hi >>> 24
7486
- ];
7487
- };
7488
- LongPrototype.toBytesBE = function toBytesBE() {
7489
- var hi = this.high, lo = this.low;
7490
- return [
7491
- hi >>> 24,
7492
- hi >>> 16 & 255,
7493
- hi >>> 8 & 255,
7494
- hi & 255,
7495
- lo >>> 24,
7496
- lo >>> 16 & 255,
7497
- lo >>> 8 & 255,
7498
- lo & 255
7499
- ];
7500
- };
7501
- Long.fromBytes = function fromBytes(bytes, unsigned, le) {
7502
- return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);
7503
- };
7504
- Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {
7505
- return new Long(
7506
- bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24,
7507
- bytes[4] | bytes[5] << 8 | bytes[6] << 16 | bytes[7] << 24,
7508
- unsigned
7509
- );
7510
- };
7511
- Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {
7512
- return new Long(
7513
- bytes[4] << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7],
7514
- bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3],
7515
- unsigned
7516
- );
7517
- };
7518
- if (typeof BigInt === "function") {
7519
- Long.fromBigInt = function fromBigInt(value, unsigned) {
7520
- var lowBits = Number(BigInt.asIntN(32, value));
7521
- var highBits = Number(BigInt.asIntN(32, value >> BigInt(32)));
7522
- return fromBits(lowBits, highBits, unsigned);
7523
- };
7524
- Long.fromValue = function fromValueWithBigInt(value, unsigned) {
7525
- if (typeof value === "bigint") return Long.fromBigInt(value, unsigned);
7526
- return fromValue(value, unsigned);
7527
- };
7528
- LongPrototype.toBigInt = function toBigInt() {
7529
- var lowBigInt = BigInt(this.low >>> 0);
7530
- var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high);
7531
- return highBigInt << BigInt(32) | lowBigInt;
7532
- };
7034
+ return v;
7035
+ }
7036
+ function bigintToInt32(value) {
7037
+ return Number(BigInt.asIntN(32, value));
7533
7038
  }
7534
7039
  var PrimitiveType = /* @__PURE__ */ ((PrimitiveType2) => {
7535
7040
  PrimitiveType2[PrimitiveType2["Null"] = 0] = "Null";
@@ -7577,11 +7082,11 @@ class Primitive extends CRDTElement {
7577
7082
  case 5:
7578
7083
  return new TextDecoder("utf-8").decode(bytes);
7579
7084
  case 3:
7580
- return Long.fromBytesLE(Array.from(bytes));
7085
+ return bigintFromBytesLE(bytes);
7581
7086
  case 6:
7582
7087
  return bytes;
7583
7088
  case 7:
7584
- return new Date(Long.fromBytesLE(Array.from(bytes), true).toNumber());
7089
+ return new Date(Number(bigintFromBytesLEUnsigned(bytes)));
7585
7090
  default:
7586
7091
  throw new YorkieError(
7587
7092
  Code.ErrUnimplemented,
@@ -7682,13 +7187,13 @@ class Primitive extends CRDTElement {
7682
7187
  } else {
7683
7188
  return 4;
7684
7189
  }
7190
+ case "bigint":
7191
+ return 3;
7685
7192
  case "string":
7686
7193
  return 5;
7687
7194
  case "object":
7688
7195
  if (value === null) {
7689
7196
  return 0;
7690
- } else if (value instanceof Long) {
7691
- return 3;
7692
7197
  } else if (value instanceof Uint8Array) {
7693
7198
  return 6;
7694
7199
  } else if (value instanceof Date) {
@@ -7758,9 +7263,7 @@ class Primitive extends CRDTElement {
7758
7263
  return new TextEncoder().encode(this.value);
7759
7264
  }
7760
7265
  case 3: {
7761
- const longVal = this.value;
7762
- const longToBytes = longVal.toBytesLE();
7763
- return Uint8Array.from(longToBytes);
7266
+ return bigintToBytesLE(this.value);
7764
7267
  }
7765
7268
  case 6: {
7766
7269
  const bytesVal = this.value;
@@ -7768,11 +7271,7 @@ class Primitive extends CRDTElement {
7768
7271
  }
7769
7272
  case 7: {
7770
7273
  const dateVal = this.value;
7771
- const dateToBytes = Long.fromNumber(
7772
- dateVal.getTime(),
7773
- true
7774
- ).toBytesLE();
7775
- return Uint8Array.from(dateToBytes);
7274
+ return bigintToBytesLE(BigInt(dateVal.getTime()));
7776
7275
  }
7777
7276
  default:
7778
7277
  throw new YorkieError(
@@ -8845,10 +8344,10 @@ class LLRBTree {
8845
8344
  let node = this.root;
8846
8345
  let result = void 0;
8847
8346
  while (node) {
8848
- const compare2 = this.comparator(key, node.key);
8849
- if (compare2 === 0) {
8347
+ const compare = this.comparator(key, node.key);
8348
+ if (compare === 0) {
8850
8349
  return node;
8851
- } else if (compare2 < 0) {
8350
+ } else if (compare < 0) {
8852
8351
  node = node.left;
8853
8352
  } else {
8854
8353
  result = node;
@@ -8884,12 +8383,12 @@ class LLRBTree {
8884
8383
  }
8885
8384
  getInternal(key, node) {
8886
8385
  while (node) {
8887
- const compare2 = this.comparator(key, node.key);
8888
- if (compare2 === 0) {
8386
+ const compare = this.comparator(key, node.key);
8387
+ if (compare === 0) {
8889
8388
  return node;
8890
- } else if (compare2 < 0) {
8389
+ } else if (compare < 0) {
8891
8390
  node = node.left;
8892
- } else if (compare2 > 0) {
8391
+ } else if (compare > 0) {
8893
8392
  node = node.right;
8894
8393
  }
8895
8394
  }
@@ -8900,10 +8399,10 @@ class LLRBTree {
8900
8399
  this.counter += 1;
8901
8400
  return new LLRBNode(key, value, true);
8902
8401
  }
8903
- const compare2 = this.comparator(key, node.key);
8904
- if (compare2 < 0) {
8402
+ const compare = this.comparator(key, node.key);
8403
+ if (compare < 0) {
8905
8404
  node.left = this.putInternal(key, value, node.left);
8906
- } else if (compare2 > 0) {
8405
+ } else if (compare > 0) {
8907
8406
  node.right = this.putInternal(key, value, node.right);
8908
8407
  } else {
8909
8408
  node.value = value;
@@ -9202,9 +8701,9 @@ class RGATreeSplitNode extends SplayNode {
9202
8701
  */
9203
8702
  static createComparator() {
9204
8703
  return (p1, p2) => {
9205
- const compare2 = p1.getCreatedAt().compare(p2.getCreatedAt());
9206
- if (compare2 !== 0) {
9207
- return compare2;
8704
+ const compare = p1.getCreatedAt().compare(p2.getCreatedAt());
8705
+ if (compare !== 0) {
8706
+ return compare;
9208
8707
  }
9209
8708
  if (p1.getOffset() > p2.getOffset()) {
9210
8709
  return 1;
@@ -11253,6 +10752,24 @@ class IndexTreeNode {
11253
10752
  * In this method, the child is physically removed from the tree.
11254
10753
  */
11255
10754
  removeChild(child) {
10755
+ if (this.isText) {
10756
+ throw new YorkieError(Code.ErrRefused, "Text node cannot have children");
10757
+ }
10758
+ const offset = this._children.indexOf(child);
10759
+ if (offset === -1) {
10760
+ return;
10761
+ }
10762
+ this._children.splice(offset, 1);
10763
+ child.updateAncestorsSize(-child.paddedSize(true), true);
10764
+ child.parent = void 0;
10765
+ }
10766
+ /**
10767
+ * `detachChild` removes the given child from this node's children list
10768
+ * and updates both visibleSize and totalSize. Unlike `removeChild` which
10769
+ * is used for GC purge of tombstoned nodes, `detachChild` is used for
10770
+ * moving alive nodes between parents.
10771
+ */
10772
+ detachChild(child) {
11256
10773
  if (this.isText) {
11257
10774
  throw new YorkieError(Code.ErrRefused, "Text node cannot have children");
11258
10775
  }
@@ -11261,25 +10778,46 @@ class IndexTreeNode {
11261
10778
  throw new YorkieError(Code.ErrInvalidArgument, "child not found");
11262
10779
  }
11263
10780
  this._children.splice(offset, 1);
10781
+ child.updateAncestorsSize(-child.paddedSize());
11264
10782
  child.updateAncestorsSize(-child.paddedSize(true), true);
11265
10783
  child.parent = void 0;
11266
10784
  }
11267
10785
  /**
11268
10786
  * `splitElement` splits the given element at the given offset.
11269
10787
  */
11270
- splitElement(offset, issueTimeTicket) {
10788
+ splitElement(offset, issueTimeTicket, versionVector) {
11271
10789
  const diff = { data: 0, meta: 0 };
11272
10790
  const prvSize = this.getDataSize();
11273
10791
  const clone = this.cloneElement(issueTimeTicket);
11274
10792
  this.parent.insertAfterInternal(clone, this);
11275
10793
  clone.updateAncestorsSize(clone.paddedSize());
11276
10794
  clone.updateAncestorsSize(clone.paddedSize(true), true);
11277
- const leftChildren = this.children.slice(0, offset);
11278
- const rightChildren = this.children.slice(offset);
11279
- this._children = leftChildren;
11280
- clone._children = rightChildren;
10795
+ const left = this._children.slice(0, offset);
10796
+ const right = this._children.slice(offset);
10797
+ const allChildren = [...left, ...right];
10798
+ const actualRight = [];
10799
+ for (const child of right) {
10800
+ if ("mergedFrom" in child && child.mergedFrom != null && "mergedAt" in child && child.mergedAt != null) {
10801
+ if (versionVector) {
10802
+ const mergedAt = child.mergedAt;
10803
+ if (!versionVector.afterOrEqual(mergedAt)) {
10804
+ const mergedFrom = child.mergedFrom;
10805
+ const sourceIsChild = allChildren.some(
10806
+ (sibling) => "id" in sibling && sibling.id.equals(mergedFrom)
10807
+ );
10808
+ if (sourceIsChild) {
10809
+ left.push(child);
10810
+ continue;
10811
+ }
10812
+ }
10813
+ }
10814
+ }
10815
+ actualRight.push(child);
10816
+ }
10817
+ this._children = left;
10818
+ clone._children = actualRight;
11281
10819
  this.visibleSize = this._children.reduce(
11282
- (acc, child) => acc + child.paddedSize(),
10820
+ (acc, child) => acc + (child.isRemoved ? 0 : child.paddedSize()),
11283
10821
  0
11284
10822
  );
11285
10823
  this.totalSize = this._children.reduce(
@@ -11287,7 +10825,7 @@ class IndexTreeNode {
11287
10825
  0
11288
10826
  );
11289
10827
  clone.visibleSize = clone._children.reduce(
11290
- (acc, child) => acc + child.paddedSize(true),
10828
+ (acc, child) => acc + (child.isRemoved ? 0 : child.paddedSize()),
11291
10829
  0
11292
10830
  );
11293
10831
  clone.totalSize = clone._children.reduce(
@@ -11822,9 +11360,9 @@ class CRDTTreeNodeID {
11822
11360
  */
11823
11361
  static createComparator() {
11824
11362
  return (idA, idB) => {
11825
- const compare2 = idA.getCreatedAt().compare(idB.getCreatedAt());
11826
- if (compare2 !== 0) {
11827
- return compare2;
11363
+ const compare = idA.getCreatedAt().compare(idB.getCreatedAt());
11364
+ if (compare !== 0) {
11365
+ return compare;
11828
11366
  }
11829
11367
  if (idA.getOffset() > idB.getOffset()) {
11830
11368
  return 1;
@@ -11893,6 +11431,29 @@ class CRDTTreeNode extends IndexTreeNode {
11893
11431
  * `insNextID` is the previous node id of this node after the node is split.
11894
11432
  */
11895
11433
  insNextID;
11434
+ /**
11435
+ * `mergedFrom` records the source parent's ID when this node was moved
11436
+ * by a concurrent merge. Persisted in the snapshot encoding as the
11437
+ * witness of the merge relationship.
11438
+ */
11439
+ mergedFrom;
11440
+ /**
11441
+ * `mergedAt` records the immutable ticket of the merge operation.
11442
+ * Persisted alongside `mergedFrom` because the source parent's
11443
+ * `removedAt` may be overwritten by later LWW tombstones and thus
11444
+ * cannot serve as the merge-time causal boundary for splitElement's
11445
+ * Fix 8 version-vector check.
11446
+ */
11447
+ mergedAt;
11448
+ /**
11449
+ * `mergedInto` is a runtime cache set on the source parent pointing
11450
+ * at the merge target. Set locally during merge execution and rebuilt
11451
+ * from `mergedFrom` on snapshot load. Used for the fast
11452
+ * "is this tombstoned parent a merge source?" check in
11453
+ * `FindTreeNodesWithSplitText`; the alternative (scanning
11454
+ * `nodeMapByID` on every position resolution) would be too expensive.
11455
+ */
11456
+ mergedInto;
11896
11457
  _value = "";
11897
11458
  constructor(id, type, opts, attributes, removedAt) {
11898
11459
  super(type);
@@ -11942,6 +11503,9 @@ class CRDTTreeNode extends IndexTreeNode {
11942
11503
  });
11943
11504
  clone.insPrevID = this.insPrevID;
11944
11505
  clone.insNextID = this.insNextID;
11506
+ clone.mergedFrom = this.mergedFrom;
11507
+ clone.mergedAt = this.mergedAt;
11508
+ clone.mergedInto = this.mergedInto;
11945
11509
  return clone;
11946
11510
  }
11947
11511
  /**
@@ -11994,13 +11558,16 @@ class CRDTTreeNode extends IndexTreeNode {
11994
11558
  * `cloneText` clones this text node with the given offset.
11995
11559
  */
11996
11560
  cloneText(offset) {
11997
- return new CRDTTreeNode(
11561
+ const clone = new CRDTTreeNode(
11998
11562
  CRDTTreeNodeID.of(this.id.getCreatedAt(), offset),
11999
11563
  this.type,
12000
11564
  void 0,
12001
11565
  void 0,
12002
11566
  this.removedAt
12003
11567
  );
11568
+ clone.mergedFrom = this.mergedFrom;
11569
+ clone.mergedAt = this.mergedAt;
11570
+ return clone;
12004
11571
  }
12005
11572
  /**
12006
11573
  * `cloneElement` clones this element node with the given issueTimeTicket function.
@@ -12017,8 +11584,8 @@ class CRDTTreeNode extends IndexTreeNode {
12017
11584
  /**
12018
11585
  * `split` splits the given offset of this node.
12019
11586
  */
12020
- split(tree, offset, issueTimeTicket) {
12021
- const [split, diff] = this.isText ? this.splitText(offset, this.id.getOffset()) : this.splitElement(offset, issueTimeTicket);
11587
+ split(tree, offset, issueTimeTicket, versionVector) {
11588
+ const [split, diff] = this.isText ? this.splitText(offset, this.id.getOffset()) : this.splitElement(offset, issueTimeTicket, versionVector);
12022
11589
  if (split) {
12023
11590
  split.insPrevID = this.id;
12024
11591
  if (this.insNextID) {
@@ -12131,6 +11698,13 @@ class CRDTTreeNode extends IndexTreeNode {
12131
11698
  return pairs;
12132
11699
  }
12133
11700
  }
11701
+ function ticketKnown(vv, ticket) {
11702
+ if (vv === void 0) {
11703
+ return true;
11704
+ }
11705
+ const l = vv.get(ticket.getActorID());
11706
+ return l !== void 0 && l >= ticket.getLamport();
11707
+ }
12134
11708
  function toTreeNode$1(node) {
12135
11709
  if (node.isText) {
12136
11710
  const currentNode = node;
@@ -12192,6 +11766,33 @@ class CRDTTree extends CRDTElement {
12192
11766
  this.indexTree.traverseAll((node) => {
12193
11767
  this.nodeMapByID.put(node.id, node);
12194
11768
  });
11769
+ this.rebuildMergeState();
11770
+ }
11771
+ /**
11772
+ * `rebuildMergeState` reconstructs the `mergedInto` cache on source
11773
+ * parents from the persisted `mergedFrom` field on moved children.
11774
+ * For snapshots written before `mergedAt` was added to the proto,
11775
+ * it also falls back to the source's `removedAt` — an approximation
11776
+ * that may be wrong if the source was later overwritten by a
11777
+ * concurrent delete, but this is the best we can do without the
11778
+ * persisted merge ticket.
11779
+ */
11780
+ rebuildMergeState() {
11781
+ this.indexTree.traverseAll((node) => {
11782
+ if (!node.mergedFrom || !node.parent) {
11783
+ return;
11784
+ }
11785
+ const src = this.findFloorNode(node.mergedFrom);
11786
+ if (!src) {
11787
+ return;
11788
+ }
11789
+ if (!node.mergedAt && src.removedAt) {
11790
+ node.mergedAt = src.removedAt;
11791
+ }
11792
+ if (!src.mergedInto) {
11793
+ src.mergedInto = node.parent.id;
11794
+ }
11795
+ });
12195
11796
  }
12196
11797
  /**
12197
11798
  * `create` creates a new instance of `CRDTTree`.
@@ -12209,6 +11810,51 @@ class CRDTTree extends CRDTElement {
12209
11810
  }
12210
11811
  return entry.value;
12211
11812
  }
11813
+ /**
11814
+ * `advancePastUnknownSplitSiblings` follows the insNextID chain of the
11815
+ * given node, advancing past element-type split siblings that the editing
11816
+ * client did not know about (not in versionVector).
11817
+ */
11818
+ advancePastUnknownSplitSiblings(node, versionVector) {
11819
+ if (!versionVector || !node) {
11820
+ return node;
11821
+ }
11822
+ let current = node;
11823
+ while (current.insNextID) {
11824
+ const next = this.findFloorNode(current.insNextID);
11825
+ if (!next || next.isText) {
11826
+ break;
11827
+ }
11828
+ if (next.parent !== current.parent) {
11829
+ break;
11830
+ }
11831
+ const actorID = next.id.getCreatedAt().getActorID();
11832
+ const knownLamport = versionVector.get(actorID);
11833
+ if (knownLamport !== void 0 && knownLamport >= next.id.getCreatedAt().getLamport()) {
11834
+ break;
11835
+ }
11836
+ current = next;
11837
+ }
11838
+ return current;
11839
+ }
11840
+ /**
11841
+ * `hasUnknownSplitSibling` checks whether the given element node has a
11842
+ * split sibling (via insNextID) whose creation the editor did not know
11843
+ * about. Used to prevent styling via End tokens when a concurrent split
11844
+ * extended the range into the split sibling.
11845
+ */
11846
+ hasUnknownSplitSibling(node, versionVector) {
11847
+ if (!node.insNextID) {
11848
+ return false;
11849
+ }
11850
+ const next = this.findFloorNode(node.insNextID);
11851
+ if (!next || next.isText) {
11852
+ return false;
11853
+ }
11854
+ const actorID = next.id.getCreatedAt().getActorID();
11855
+ const knownLamport = versionVector.get(actorID);
11856
+ return knownLamport === void 0 || knownLamport < next.id.getCreatedAt().getLamport();
11857
+ }
12212
11858
  /**
12213
11859
  * `registerNode` registers the given node to the tree.
12214
11860
  */
@@ -12232,6 +11878,23 @@ class CRDTTree extends CRDTElement {
12232
11878
  let leftNode = leftSibling;
12233
11879
  const isLeftMost = parent === leftNode;
12234
11880
  const realParent = leftNode.parent && !isLeftMost ? leftNode.parent : parent;
11881
+ if (realParent.isRemoved && isLeftMost && realParent.mergedInto) {
11882
+ const mergeTarget = this.findFloorNode(realParent.mergedInto);
11883
+ if (mergeTarget && !mergeTarget.isRemoved) {
11884
+ const allCh = mergeTarget.allChildren;
11885
+ for (let i = 0; i < allCh.length; i++) {
11886
+ const targetChild = allCh[i];
11887
+ if (!targetChild.mergedFrom || !targetChild.mergedFrom.equals(realParent.id)) {
11888
+ continue;
11889
+ }
11890
+ if (i === 0) {
11891
+ return [[mergeTarget, mergeTarget], diff];
11892
+ }
11893
+ return [[mergeTarget, allCh[i - 1]], diff];
11894
+ }
11895
+ return [[mergeTarget, mergeTarget], diff];
11896
+ }
11897
+ }
12235
11898
  if (leftNode.isText) {
12236
11899
  const [, splitedDiff] = leftNode.split(
12237
11900
  this,
@@ -12257,18 +11920,23 @@ class CRDTTree extends CRDTElement {
12257
11920
  */
12258
11921
  style(range, attributes, editedAt, versionVector) {
12259
11922
  const diff = { data: 0, meta: 0 };
12260
- const [[fromParent, fromLeft], diffFrom] = this.findNodesAndSplitText(
11923
+ const [[fromParent, fromLeftRaw], diffFrom] = this.findNodesAndSplitText(
12261
11924
  range[0],
12262
11925
  editedAt
12263
11926
  );
12264
- const [[toParent, toLeft], diffTo] = this.findNodesAndSplitText(
11927
+ const [[toParent, toLeftRaw], diffTo] = this.findNodesAndSplitText(
12265
11928
  range[1],
12266
11929
  editedAt
12267
11930
  );
12268
11931
  addDataSizes(diff, diffTo, diffFrom);
11932
+ const fromLeft = fromLeftRaw !== fromParent ? this.advancePastUnknownSplitSiblings(fromLeftRaw, versionVector) : fromLeftRaw;
11933
+ const toLeft = toLeftRaw !== toParent ? this.advancePastUnknownSplitSiblings(toLeftRaw, versionVector) : toLeftRaw;
12269
11934
  const changes = [];
12270
11935
  const attrs = attributes ? parseObjectValues(attributes) : {};
12271
11936
  const pairs = [];
11937
+ const prevAttributes = /* @__PURE__ */ new Map();
11938
+ const newAttrKeys = [];
11939
+ let capturedPrev = false;
12272
11940
  this.traverseInPosRange(
12273
11941
  fromParent,
12274
11942
  fromLeft,
@@ -12281,6 +11949,19 @@ class CRDTTree extends CRDTElement {
12281
11949
  clientLamportAtChange = versionVector.get(actorID) ? versionVector.get(actorID) : 0n;
12282
11950
  }
12283
11951
  if (node.canStyle(editedAt, clientLamportAtChange) && attributes) {
11952
+ if (tokenType === TokenType.End && versionVector !== void 0 && this.hasUnknownSplitSibling(node, versionVector)) {
11953
+ return;
11954
+ }
11955
+ if (!capturedPrev) {
11956
+ for (const key of Object.keys(attributes)) {
11957
+ if (node.attrs?.has(key)) {
11958
+ prevAttributes.set(key, node.attrs.get(key));
11959
+ } else {
11960
+ newAttrKeys.push(key);
11961
+ }
11962
+ }
11963
+ capturedPrev = true;
11964
+ }
12284
11965
  const updatedAttrPairs = node.setAttrs(attributes, editedAt);
12285
11966
  const affectedAttrs = updatedAttrPairs.reduce(
12286
11967
  (acc, [, curr]) => {
@@ -12319,7 +12000,7 @@ class CRDTTree extends CRDTElement {
12319
12000
  }
12320
12001
  }
12321
12002
  );
12322
- return [pairs, changes, diff];
12003
+ return [pairs, changes, diff, prevAttributes, newAttrKeys];
12323
12004
  }
12324
12005
  /**
12325
12006
  * `removeStyle` removes the given attributes of the given range.
@@ -12337,21 +12018,34 @@ class CRDTTree extends CRDTElement {
12337
12018
  addDataSizes(diff, diffTo, diffFrom);
12338
12019
  const changes = [];
12339
12020
  const pairs = [];
12021
+ const prevAttributes = /* @__PURE__ */ new Map();
12022
+ let capturedPrev = false;
12340
12023
  this.traverseInPosRange(
12341
12024
  fromParent,
12342
12025
  fromLeft,
12343
12026
  toParent,
12344
12027
  toLeft,
12345
- ([node]) => {
12028
+ ([node, tokenType]) => {
12346
12029
  const actorID = node.getCreatedAt().getActorID();
12347
12030
  let clientLamportAtChange = MaxLamport;
12348
12031
  if (versionVector != void 0) {
12349
12032
  clientLamportAtChange = versionVector.get(actorID) ? versionVector.get(actorID) : 0n;
12350
12033
  }
12351
12034
  if (node.canStyle(editedAt, clientLamportAtChange) && attributesToRemove) {
12035
+ if (tokenType === TokenType.End && versionVector !== void 0 && this.hasUnknownSplitSibling(node, versionVector)) {
12036
+ return;
12037
+ }
12352
12038
  if (!node.attrs) {
12353
12039
  node.attrs = new RHT();
12354
12040
  }
12041
+ if (!capturedPrev) {
12042
+ for (const key of attributesToRemove) {
12043
+ if (node.attrs.has(key)) {
12044
+ prevAttributes.set(key, node.attrs.get(key));
12045
+ }
12046
+ }
12047
+ capturedPrev = true;
12048
+ }
12355
12049
  for (const value of attributesToRemove) {
12356
12050
  const nodesTobeRemoved = node.attrs.remove(value, editedAt);
12357
12051
  for (const rhtNode of nodesTobeRemoved) {
@@ -12372,7 +12066,7 @@ class CRDTTree extends CRDTElement {
12372
12066
  }
12373
12067
  }
12374
12068
  );
12375
- return [pairs, changes, diff];
12069
+ return [pairs, changes, diff, prevAttributes];
12376
12070
  }
12377
12071
  /**
12378
12072
  * `edit` edits the tree with the given range and content.
@@ -12380,20 +12074,24 @@ class CRDTTree extends CRDTElement {
12380
12074
  */
12381
12075
  edit(range, contents, splitLevel, editedAt, issueTimeTicket, versionVector) {
12382
12076
  const diff = { data: 0, meta: 0 };
12383
- const [[fromParent, fromLeft], diffFrom] = this.findNodesAndSplitText(
12077
+ const [[fromParent, fromLeftRaw], diffFrom] = this.findNodesAndSplitText(
12384
12078
  range[0],
12385
12079
  editedAt
12386
12080
  );
12387
- const [[toParent, toLeft], diffTo] = this.findNodesAndSplitText(
12081
+ const [[toParent, toLeftRaw], diffTo] = this.findNodesAndSplitText(
12388
12082
  range[1],
12389
12083
  editedAt
12390
12084
  );
12391
12085
  addDataSizes(diff, diffTo, diffFrom);
12086
+ const fromLeft = fromLeftRaw !== fromParent ? this.advancePastUnknownSplitSiblings(fromLeftRaw, versionVector) : fromLeftRaw;
12087
+ const toLeft = toLeftRaw !== toParent ? this.advancePastUnknownSplitSiblings(toLeftRaw, versionVector) : toLeftRaw;
12392
12088
  const fromIdx = this.toIndex(fromParent, fromLeft);
12393
12089
  const fromPath = this.toPath(fromParent, fromLeft);
12394
12090
  const nodesToBeRemoved = [];
12395
12091
  const tokensToBeRemoved = [];
12396
12092
  const toBeMovedToFromParents = [];
12093
+ const toBeMergedNodes = [];
12094
+ const preTombstoned = /* @__PURE__ */ new Set();
12397
12095
  this.traverseInPosRange(
12398
12096
  fromParent,
12399
12097
  fromLeft,
@@ -12401,24 +12099,39 @@ class CRDTTree extends CRDTElement {
12401
12099
  toLeft,
12402
12100
  ([node, tokenType], ended) => {
12403
12101
  if (tokenType === TokenType.Start && !ended) {
12404
- for (const child of node.children) {
12405
- toBeMovedToFromParents.push(child);
12102
+ if (ticketKnown(versionVector, node.id.getCreatedAt())) {
12103
+ toBeMergedNodes.push(node);
12104
+ for (const child of node.children) {
12105
+ toBeMovedToFromParents.push(child);
12106
+ }
12406
12107
  }
12407
12108
  }
12408
- const isLocal = versionVector === void 0;
12409
- let creationKnown = false;
12410
- const createdAtVV = versionVector?.get(
12411
- node.id.getCreatedAt().getActorID()
12109
+ const creationKnown = ticketKnown(
12110
+ versionVector,
12111
+ node.id.getCreatedAt()
12412
12112
  );
12413
- creationKnown = isLocal || createdAtVV !== void 0 && createdAtVV >= node.id.getCreatedAt().getLamport();
12414
- let tombstoneKnown = false;
12415
- if (node.removedAt) {
12416
- const removedAtVV = versionVector?.get(node.removedAt.getActorID());
12417
- tombstoneKnown = isLocal || removedAtVV !== void 0 && removedAtVV >= node.removedAt.getLamport();
12418
- }
12419
- if (node.canDelete(editedAt, creationKnown, tombstoneKnown) || nodesToBeRemoved.includes(node.parent)) {
12113
+ const tombstoneKnown = !!node.removedAt && ticketKnown(versionVector, node.removedAt);
12114
+ if (node.canDelete(editedAt, creationKnown, tombstoneKnown) || nodesToBeRemoved.includes(node.parent) && !toBeMergedNodes.includes(node.parent)) {
12420
12115
  if (tokenType === TokenType.Text || tokenType === TokenType.Start) {
12116
+ if (node.isRemoved) {
12117
+ preTombstoned.add(node.id.toIDString());
12118
+ }
12421
12119
  nodesToBeRemoved.push(node);
12120
+ if (!node.isText && node.insNextID && !toBeMergedNodes.includes(node)) {
12121
+ let next = this.findFloorNode(node.insNextID);
12122
+ while (next) {
12123
+ if (!ticketKnown(versionVector, next.id.getCreatedAt())) {
12124
+ nodesToBeRemoved.push(next);
12125
+ traverseAll(next, (n) => {
12126
+ if (n !== next) {
12127
+ nodesToBeRemoved.push(n);
12128
+ }
12129
+ });
12130
+ }
12131
+ if (!next.insNextID) break;
12132
+ next = this.findFloorNode(next.insNextID);
12133
+ }
12134
+ }
12422
12135
  }
12423
12136
  tokensToBeRemoved.push([node, tokenType]);
12424
12137
  }
@@ -12431,22 +12144,66 @@ class CRDTTree extends CRDTElement {
12431
12144
  );
12432
12145
  const pairs = [];
12433
12146
  for (const node of nodesToBeRemoved) {
12434
- node.remove(editedAt);
12435
- if (node.isRemoved) {
12147
+ if (node.remove(editedAt)) {
12436
12148
  pairs.push({ parent: this, child: node });
12437
12149
  }
12438
12150
  }
12439
12151
  for (const node of toBeMovedToFromParents) {
12440
12152
  if (!node.removedAt) {
12153
+ if (node.parent) {
12154
+ node.mergedFrom = node.parent.id;
12155
+ node.mergedAt = editedAt;
12156
+ }
12157
+ if (node.parent) {
12158
+ try {
12159
+ node.parent.detachChild(node);
12160
+ } catch {
12161
+ }
12162
+ }
12441
12163
  fromParent.append(node);
12442
12164
  }
12443
12165
  }
12166
+ for (const src of toBeMergedNodes) {
12167
+ src.mergedInto = fromParent.id;
12168
+ }
12169
+ for (const node of nodesToBeRemoved) {
12170
+ if (!node.mergedInto || toBeMergedNodes.includes(node) || node.mergedInto.equals(fromParent.id)) {
12171
+ continue;
12172
+ }
12173
+ const mergeTarget = this.findFloorNode(node.mergedInto);
12174
+ if (!mergeTarget) {
12175
+ continue;
12176
+ }
12177
+ for (const targetChild of mergeTarget.allChildren) {
12178
+ if (!targetChild.mergedFrom || !targetChild.mergedFrom.equals(node.id)) {
12179
+ continue;
12180
+ }
12181
+ if (targetChild.removedAt) {
12182
+ continue;
12183
+ }
12184
+ if (targetChild.remove(editedAt)) {
12185
+ pairs.push({ parent: this, child: targetChild });
12186
+ }
12187
+ traverseAll(targetChild, (n) => {
12188
+ if (n !== targetChild && !n.removedAt) {
12189
+ if (n.remove(editedAt)) {
12190
+ pairs.push({ parent: this, child: n });
12191
+ }
12192
+ }
12193
+ });
12194
+ }
12195
+ }
12444
12196
  if (splitLevel > 0) {
12445
12197
  let splitCount = 0;
12446
12198
  let parent = fromParent;
12447
12199
  let left = fromLeft;
12448
12200
  while (splitCount < splitLevel) {
12449
- parent.split(this, parent.findOffset(left) + 1, issueTimeTicket);
12201
+ parent.split(
12202
+ this,
12203
+ parent.findOffset(left, true) + 1,
12204
+ issueTimeTicket,
12205
+ versionVector
12206
+ );
12450
12207
  left = parent;
12451
12208
  parent = parent.parent;
12452
12209
  splitCount++;
@@ -12796,6 +12553,9 @@ class CRDTTree extends CRDTElement {
12796
12553
  traverseInPosRange(fromParent, fromLeft, toParent, toLeft, callback, includeRemoved = false) {
12797
12554
  const fromIdx = this.toIndex(fromParent, fromLeft, includeRemoved);
12798
12555
  const toIdx = this.toIndex(toParent, toLeft, includeRemoved);
12556
+ if (fromIdx > toIdx) {
12557
+ return;
12558
+ }
12799
12559
  this.indexTree.tokensBetween(fromIdx, toIdx, callback, includeRemoved);
12800
12560
  }
12801
12561
  /**
@@ -12954,6 +12714,13 @@ class TreeEditOperation extends Operation {
12954
12714
  toIdx;
12955
12715
  lastFromIdx;
12956
12716
  lastToIdx;
12717
+ /**
12718
+ * `redoSplitLevel` is set on boundary-deletion undo ops that were generated
12719
+ * to reverse a split. When this op executes (as undo), `toReverseOperation`
12720
+ * uses this value to generate a proper split op for redo, rather than
12721
+ * re-inserting the raw tombstoned boundary nodes as content.
12722
+ */
12723
+ redoSplitLevel;
12957
12724
  constructor(parentCreatedAt, fromPos, toPos, contents, splitLevel, executedAt, isUndoOp, fromIdx, toIdx) {
12958
12725
  super(parentCreatedAt, executedAt);
12959
12726
  this.fromPos = fromPos;
@@ -13039,7 +12806,13 @@ class TreeEditOperation extends Operation {
13039
12806
  0
13040
12807
  );
13041
12808
  this.lastToIdx = preEditFromIdx + removedSize;
13042
- const reverseOp = this.splitLevel === 0 ? this.toReverseOperation(tree, removedNodes, preEditFromIdx) : void 0;
12809
+ let reverseOp;
12810
+ const isPureL1Split = this.splitLevel === 1 && !this.contents?.length && removedNodes.length === 0;
12811
+ if (this.splitLevel === 0) {
12812
+ reverseOp = this.toReverseOperation(tree, removedNodes, preEditFromIdx);
12813
+ } else if (isPureL1Split) {
12814
+ reverseOp = this.toSplitReverseOperation(tree, preEditFromIdx);
12815
+ }
13043
12816
  root.acc(diff);
13044
12817
  for (const pair of pairs) {
13045
12818
  root.registerGCPair(pair);
@@ -13075,6 +12848,24 @@ class TreeEditOperation extends Operation {
13075
12848
  * @param preEditFromIdx - The from index captured BEFORE the edit
13076
12849
  */
13077
12850
  toReverseOperation(tree, removedNodes, preEditFromIdx) {
12851
+ if (this.redoSplitLevel !== void 0 && this.redoSplitLevel > 0) {
12852
+ const splitRedoFromPos = tree.findPos(preEditFromIdx);
12853
+ const splitRedoOp = TreeEditOperation.create(
12854
+ this.getParentCreatedAt(),
12855
+ splitRedoFromPos,
12856
+ splitRedoFromPos,
12857
+ void 0,
12858
+ // no inserted content
12859
+ this.redoSplitLevel,
12860
+ void 0,
12861
+ // executedAt assigned at redo time
12862
+ true,
12863
+ // isUndoOp (treated as undo/redo op)
12864
+ preEditFromIdx,
12865
+ preEditFromIdx
12866
+ );
12867
+ return splitRedoOp;
12868
+ }
13078
12869
  const insertedContentSize = this.contents ? this.contents.reduce((sum, node) => sum + node.paddedSize(), 0) : 0;
13079
12870
  const maxNeededIdx = preEditFromIdx + insertedContentSize;
13080
12871
  if (maxNeededIdx > tree.getSize()) {
@@ -13112,6 +12903,45 @@ class TreeEditOperation extends Operation {
13112
12903
  reverseToIdx
13113
12904
  );
13114
12905
  }
12906
+ /**
12907
+ * `toSplitReverseOperation` creates the reverse operation for a split edit.
12908
+ *
12909
+ * A split creates element boundaries (close + open tags). The reverse
12910
+ * is a boundary deletion: a splitLevel=0 edit that removes those tokens,
12911
+ * merging the split elements back together.
12912
+ *
12913
+ * boundarySize = 2 * splitLevel (each level creates 1 close + 1 open tag)
12914
+ *
12915
+ * @param tree - The CRDTTree after the split has been applied
12916
+ * @param preEditFromIdx - The from index captured BEFORE the split
12917
+ */
12918
+ toSplitReverseOperation(tree, preEditFromIdx) {
12919
+ const boundarySize = 2 * this.splitLevel;
12920
+ const reverseFromIdx = preEditFromIdx;
12921
+ const reverseToIdx = preEditFromIdx + boundarySize;
12922
+ if (reverseToIdx > tree.getSize()) {
12923
+ return void 0;
12924
+ }
12925
+ const reverseFromPos = tree.findPos(reverseFromIdx);
12926
+ const reverseToPos = tree.findPos(reverseToIdx);
12927
+ const boundaryDeletionOp = TreeEditOperation.create(
12928
+ this.getParentCreatedAt(),
12929
+ reverseFromPos,
12930
+ reverseToPos,
12931
+ void 0,
12932
+ // no content — this is a deletion
12933
+ 0,
12934
+ // splitLevel=0: boundary deletion
12935
+ void 0,
12936
+ // executedAt assigned at undo time
12937
+ true,
12938
+ // isUndoOp
12939
+ reverseFromIdx,
12940
+ reverseToIdx
12941
+ );
12942
+ boundaryDeletionOp.redoSplitLevel = this.splitLevel;
12943
+ return boundaryDeletionOp;
12944
+ }
13115
12945
  /**
13116
12946
  * `normalizePos` returns the visible-index range of this operation.
13117
12947
  * For undo ops, returns the stored (possibly reconciled) indices.
@@ -13817,35 +13647,196 @@ class Checkpoint {
13817
13647
  }
13818
13648
  }
13819
13649
  const InitialCheckpoint = new Checkpoint(0n, 0);
13820
- const removeDecimal = (number) => number < 0 ? Math.ceil(number) : Math.floor(number);
13650
+ const hllPrecision = 14;
13651
+ const hllRegisterCount = 1 << hllPrecision;
13652
+ const prime64x1 = 0x9e3779b185ebca87n;
13653
+ const prime64x2 = 0xc2b2ae3d27d4eb4fn;
13654
+ const prime64x3 = 0x165667b19e3779f9n;
13655
+ const prime64x4 = 0x85ebca77c2b2ae63n;
13656
+ const prime64x5 = 0x27d4eb2f165667c5n;
13657
+ const mask64 = 0xffffffffffffffffn;
13658
+ class HLL {
13659
+ registers;
13660
+ constructor() {
13661
+ this.registers = new Uint8Array(hllRegisterCount);
13662
+ }
13663
+ /**
13664
+ * `add` adds a value to the HLL and returns true if the register was updated.
13665
+ */
13666
+ add(value) {
13667
+ const hash = xxhash64(value);
13668
+ const idx = Number(hash >> BigInt(64 - hllPrecision));
13669
+ const remaining = hash << BigInt(hllPrecision) & mask64 | 1n << BigInt(hllPrecision - 1);
13670
+ const rho = countLeadingZeros64(remaining) + 1;
13671
+ if (rho > this.registers[idx]) {
13672
+ this.registers[idx] = rho;
13673
+ return true;
13674
+ }
13675
+ return false;
13676
+ }
13677
+ /**
13678
+ * `count` returns the approximate cardinality estimate.
13679
+ */
13680
+ count() {
13681
+ const m = hllRegisterCount;
13682
+ const alpha = 0.7213 / (1 + 1.079 / m);
13683
+ let sum = 0;
13684
+ let zeros = 0;
13685
+ for (let i = 0; i < m; i++) {
13686
+ sum += Math.pow(2, -this.registers[i]);
13687
+ if (this.registers[i] === 0) zeros++;
13688
+ }
13689
+ let estimate = alpha * m * m / sum;
13690
+ if (estimate <= 2.5 * m && zeros > 0) {
13691
+ estimate = m * Math.log(m / zeros);
13692
+ }
13693
+ return Math.round(estimate);
13694
+ }
13695
+ /**
13696
+ * `merge` merges another HLL into this one by taking the max of each register.
13697
+ * This operation is commutative, associative, and idempotent.
13698
+ */
13699
+ merge(other) {
13700
+ for (let i = 0; i < hllRegisterCount; i++) {
13701
+ if (other.registers[i] > this.registers[i]) {
13702
+ this.registers[i] = other.registers[i];
13703
+ }
13704
+ }
13705
+ }
13706
+ /**
13707
+ * `toBytes` serializes the HLL registers to a byte array.
13708
+ */
13709
+ toBytes() {
13710
+ return new Uint8Array(this.registers);
13711
+ }
13712
+ /**
13713
+ * `restore` restores the HLL registers from a byte array.
13714
+ * Throws if the data length does not match the register count.
13715
+ */
13716
+ restore(data) {
13717
+ if (data.length !== hllRegisterCount) {
13718
+ throw new Error(
13719
+ `invalid HLL register payload: got ${data.length} bytes, want ${hllRegisterCount}`
13720
+ );
13721
+ }
13722
+ this.registers.set(data);
13723
+ }
13724
+ }
13725
+ function xxhash64(input) {
13726
+ const buf = new TextEncoder().encode(input);
13727
+ const len = buf.length;
13728
+ let h64;
13729
+ let offset = 0;
13730
+ const seed = 0n;
13731
+ if (len >= 32) {
13732
+ let v1 = seed + prime64x1 + prime64x2 & mask64;
13733
+ let v2 = seed + prime64x2 & mask64;
13734
+ let v3 = seed;
13735
+ let v4 = seed - prime64x1 & mask64;
13736
+ while (offset <= len - 32) {
13737
+ v1 = xxRound(v1, readU64LE(buf, offset));
13738
+ offset += 8;
13739
+ v2 = xxRound(v2, readU64LE(buf, offset));
13740
+ offset += 8;
13741
+ v3 = xxRound(v3, readU64LE(buf, offset));
13742
+ offset += 8;
13743
+ v4 = xxRound(v4, readU64LE(buf, offset));
13744
+ offset += 8;
13745
+ }
13746
+ h64 = rotl64(v1, 1n) + rotl64(v2, 7n) + rotl64(v3, 12n) + rotl64(v4, 18n) & mask64;
13747
+ h64 = xxMergeRound(h64, v1);
13748
+ h64 = xxMergeRound(h64, v2);
13749
+ h64 = xxMergeRound(h64, v3);
13750
+ h64 = xxMergeRound(h64, v4);
13751
+ } else {
13752
+ h64 = seed + prime64x5 & mask64;
13753
+ }
13754
+ h64 = h64 + BigInt(len) & mask64;
13755
+ while (offset + 8 <= len) {
13756
+ const k1 = xxRound(0n, readU64LE(buf, offset));
13757
+ h64 = rotl64(h64 ^ k1, 27n) * prime64x1 + prime64x4 & mask64;
13758
+ offset += 8;
13759
+ }
13760
+ if (offset + 4 <= len) {
13761
+ h64 = h64 ^ readU32LE(buf, offset) * prime64x1 & mask64;
13762
+ h64 = rotl64(h64, 23n) * prime64x2 + prime64x3 & mask64;
13763
+ offset += 4;
13764
+ }
13765
+ while (offset < len) {
13766
+ h64 = h64 ^ BigInt(buf[offset]) * prime64x5 & mask64;
13767
+ h64 = rotl64(h64, 11n) * prime64x1 & mask64;
13768
+ offset++;
13769
+ }
13770
+ h64 = (h64 ^ h64 >> 33n) * prime64x2 & mask64;
13771
+ h64 = (h64 ^ h64 >> 29n) * prime64x3 & mask64;
13772
+ h64 = (h64 ^ h64 >> 32n) & mask64;
13773
+ return h64;
13774
+ }
13775
+ function rotl64(x, r) {
13776
+ return (x << r | x >> 64n - r) & mask64;
13777
+ }
13778
+ function xxRound(acc, input) {
13779
+ acc = acc + input * prime64x2 & mask64;
13780
+ acc = rotl64(acc, 31n);
13781
+ return acc * prime64x1 & mask64;
13782
+ }
13783
+ function xxMergeRound(acc, val) {
13784
+ val = xxRound(0n, val);
13785
+ acc = (acc ^ val) & mask64;
13786
+ return acc * prime64x1 + prime64x4 & mask64;
13787
+ }
13788
+ function readU64LE(buf, offset) {
13789
+ let val = 0n;
13790
+ for (let i = 7; i >= 0; i--) {
13791
+ val = val << 8n | BigInt(buf[offset + i]);
13792
+ }
13793
+ return val;
13794
+ }
13795
+ function readU32LE(buf, offset) {
13796
+ return BigInt(buf[offset]) | BigInt(buf[offset + 1]) << 8n | BigInt(buf[offset + 2]) << 16n | BigInt(buf[offset + 3]) << 24n;
13797
+ }
13798
+ function countLeadingZeros64(x) {
13799
+ if (x === 0n) return 64;
13800
+ let n = 0;
13801
+ while ((x & 1n << 63n) === 0n) {
13802
+ n++;
13803
+ x <<= 1n;
13804
+ }
13805
+ return n;
13806
+ }
13821
13807
  var CounterType = /* @__PURE__ */ ((CounterType2) => {
13822
13808
  CounterType2[CounterType2["Int"] = 0] = "Int";
13823
13809
  CounterType2[CounterType2["Long"] = 1] = "Long";
13810
+ CounterType2[CounterType2["IntDedup"] = 2] = "IntDedup";
13824
13811
  return CounterType2;
13825
13812
  })(CounterType || {});
13826
13813
  class CRDTCounter extends CRDTElement {
13827
13814
  valueType;
13828
13815
  value;
13816
+ hll;
13829
13817
  constructor(valueType, value, createdAt) {
13830
13818
  super(createdAt);
13831
13819
  this.valueType = valueType;
13832
13820
  switch (valueType) {
13821
+ case 2:
13822
+ this.value = 0;
13823
+ break;
13833
13824
  case 0:
13834
13825
  if (typeof value === "number") {
13835
13826
  if (value > Math.pow(2, 31) - 1 || value < -Math.pow(2, 31)) {
13836
- this.value = Long.fromNumber(value).toInt();
13827
+ this.value = bigintToInt32(BigInt(value));
13837
13828
  } else {
13838
13829
  this.value = removeDecimal(value);
13839
13830
  }
13840
13831
  } else {
13841
- this.value = value.toInt();
13832
+ this.value = bigintToInt32(value);
13842
13833
  }
13843
13834
  break;
13844
13835
  case 1:
13845
13836
  if (typeof value === "number") {
13846
- this.value = Long.fromNumber(value);
13837
+ this.value = BigInt.asIntN(64, BigInt(Math.trunc(value)));
13847
13838
  } else {
13848
- this.value = value;
13839
+ this.value = BigInt.asIntN(64, value);
13849
13840
  }
13850
13841
  break;
13851
13842
  default:
@@ -13854,6 +13845,9 @@ class CRDTCounter extends CRDTElement {
13854
13845
  `unimplemented type: ${valueType}`
13855
13846
  );
13856
13847
  }
13848
+ if (this.isDedup()) {
13849
+ this.hll ??= new HLL();
13850
+ }
13857
13851
  }
13858
13852
  /**
13859
13853
  * `of` creates a new instance of Counter.
@@ -13867,9 +13861,10 @@ class CRDTCounter extends CRDTElement {
13867
13861
  static valueFromBytes(counterType, bytes) {
13868
13862
  switch (counterType) {
13869
13863
  case 0:
13864
+ case 2:
13870
13865
  return bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24;
13871
13866
  case 1:
13872
- return Long.fromBytesLE(Array.from(bytes));
13867
+ return bigintFromBytesLE(bytes);
13873
13868
  default:
13874
13869
  throw new YorkieError(
13875
13870
  Code.ErrUnimplemented,
@@ -13881,7 +13876,10 @@ class CRDTCounter extends CRDTElement {
13881
13876
  * `getDataSize` returns the data usage of this element.
13882
13877
  */
13883
13878
  getDataSize() {
13884
- const data = this.valueType === 0 ? 4 : 8;
13879
+ let data = this.valueType === 0 || this.valueType === 2 ? 4 : 8;
13880
+ if (this.isDedup() && this.hll) {
13881
+ data += this.hll.toBytes().length;
13882
+ }
13885
13883
  return {
13886
13884
  data,
13887
13885
  meta: this.getMetaUsage()
@@ -13920,6 +13918,9 @@ class CRDTCounter extends CRDTElement {
13920
13918
  );
13921
13919
  clone.setRemovedAt(this.getRemovedAt());
13922
13920
  clone.setMovedAt(this.getMovedAt());
13921
+ if (this.isDedup() && this.hll) {
13922
+ clone.restoreHLL(this.hll.toBytes());
13923
+ }
13923
13924
  return clone;
13924
13925
  }
13925
13926
  /**
@@ -13933,12 +13934,8 @@ class CRDTCounter extends CRDTElement {
13933
13934
  */
13934
13935
  static getCounterType(value) {
13935
13936
  switch (typeof value) {
13936
- case "object":
13937
- if (value instanceof Long) {
13938
- return 1;
13939
- } else {
13940
- return;
13941
- }
13937
+ case "bigint":
13938
+ return 1;
13942
13939
  case "number":
13943
13940
  if (value > Math.pow(2, 31) - 1 || value < -Math.pow(2, 31)) {
13944
13941
  return 1;
@@ -13966,7 +13963,7 @@ class CRDTCounter extends CRDTElement {
13966
13963
  */
13967
13964
  isNumericType() {
13968
13965
  const t = this.valueType;
13969
- return t === 0 || t === 1;
13966
+ return t === 0 || t === 1 || t === 2;
13970
13967
  }
13971
13968
  /**
13972
13969
  * `getValueType` get counter value type.
@@ -13985,7 +13982,8 @@ class CRDTCounter extends CRDTElement {
13985
13982
  */
13986
13983
  toBytes() {
13987
13984
  switch (this.valueType) {
13988
- case 0: {
13985
+ case 0:
13986
+ case 2: {
13989
13987
  const intVal = this.value;
13990
13988
  return new Uint8Array([
13991
13989
  intVal & 255,
@@ -13995,9 +13993,7 @@ class CRDTCounter extends CRDTElement {
13995
13993
  ]);
13996
13994
  }
13997
13995
  case 1: {
13998
- const longVal = this.value;
13999
- const longToBytes = longVal.toBytesLE();
14000
- return Uint8Array.from(longToBytes);
13996
+ return bigintToBytesLE(this.value);
14001
13997
  }
14002
13998
  default:
14003
13999
  throw new YorkieError(
@@ -14006,10 +14002,76 @@ class CRDTCounter extends CRDTElement {
14006
14002
  );
14007
14003
  }
14008
14004
  }
14005
+ /**
14006
+ * `isDedup` returns whether dedup mode is enabled (derived from ValueType).
14007
+ */
14008
+ isDedup() {
14009
+ return this.valueType === 2;
14010
+ }
14011
+ /**
14012
+ * `increaseDedup` increases the counter using HLL-based dedup.
14013
+ * Only updates the value if the actor is new (not seen before).
14014
+ */
14015
+ increaseDedup(v, actor) {
14016
+ if (!this.isDedup() || !this.hll) {
14017
+ return this.increase(v);
14018
+ }
14019
+ if (!this.isNumericType() || !v.isNumericType()) {
14020
+ throw new TypeError(`Unsupported type of value: ${typeof v.getValue()}`);
14021
+ }
14022
+ if (!actor) {
14023
+ throw new YorkieError(
14024
+ Code.ErrInvalidArgument,
14025
+ "dedup counter requires actor"
14026
+ );
14027
+ }
14028
+ const val = v.getValue();
14029
+ const isUnit = v.getType() === PrimitiveType.Long ? val === 1n : val === 1;
14030
+ if (!isUnit) {
14031
+ throw new YorkieError(
14032
+ Code.ErrInvalidArgument,
14033
+ "dedup counter only supports increment by 1"
14034
+ );
14035
+ }
14036
+ if (this.hll.add(actor)) {
14037
+ this.recomputeValue();
14038
+ }
14039
+ return this;
14040
+ }
14041
+ /**
14042
+ * `hllBytes` returns the HLL register bytes, or undefined if not in dedup mode.
14043
+ */
14044
+ hllBytes() {
14045
+ return this.hll?.toBytes();
14046
+ }
14047
+ /**
14048
+ * `restoreHLL` restores the HLL state from serialized bytes.
14049
+ */
14050
+ restoreHLL(data) {
14051
+ if (!this.hll) {
14052
+ this.hll = new HLL();
14053
+ }
14054
+ this.hll.restore(data);
14055
+ this.recomputeValue();
14056
+ }
14057
+ /**
14058
+ * `recomputeValue` updates the counter value from the HLL cardinality estimate.
14059
+ */
14060
+ recomputeValue() {
14061
+ if (!this.hll) return;
14062
+ this.value = this.hll.count();
14063
+ }
14009
14064
  /**
14010
14065
  * `increase` increases numeric data.
14066
+ * Dedup counters must use increaseDedup() instead.
14011
14067
  */
14012
14068
  increase(v) {
14069
+ if (this.isDedup()) {
14070
+ throw new YorkieError(
14071
+ Code.ErrInvalidArgument,
14072
+ "dedup counter requires actor, use increaseDedup()"
14073
+ );
14074
+ }
14013
14075
  function checkNumericType(target) {
14014
14076
  if (!target.isNumericType()) {
14015
14077
  throw new TypeError(
@@ -14020,14 +14082,17 @@ class CRDTCounter extends CRDTElement {
14020
14082
  checkNumericType(this);
14021
14083
  checkNumericType(v);
14022
14084
  if (this.valueType === 1) {
14023
- this.value = this.value.add(v.getValue());
14085
+ const delta = typeof v.getValue() === "bigint" ? v.getValue() : BigInt(Math.trunc(v.getValue()));
14086
+ this.value = BigInt.asIntN(64, this.value + delta);
14024
14087
  } else {
14025
14088
  if (v.getType() === PrimitiveType.Long) {
14026
- this.value = this.value + v.getValue().toInt();
14089
+ this.value = this.value + bigintToInt32(v.getValue());
14027
14090
  } else {
14028
- this.value = Long.fromNumber(
14029
- this.value + removeDecimal(v.getValue())
14030
- ).toInt();
14091
+ this.value = bigintToInt32(
14092
+ BigInt(
14093
+ this.value + removeDecimal(v.getValue())
14094
+ )
14095
+ );
14031
14096
  }
14032
14097
  }
14033
14098
  return this;
@@ -14035,15 +14100,23 @@ class CRDTCounter extends CRDTElement {
14035
14100
  }
14036
14101
  class IncreaseOperation extends Operation {
14037
14102
  value;
14038
- constructor(parentCreatedAt, value, executedAt) {
14103
+ actor;
14104
+ constructor(parentCreatedAt, value, executedAt, actor) {
14039
14105
  super(parentCreatedAt, executedAt);
14040
14106
  this.value = value;
14107
+ this.actor = actor || "";
14041
14108
  }
14042
14109
  /**
14043
14110
  * `create` creates a new instance of IncreaseOperation.
14044
14111
  */
14045
- static create(parentCreatedAt, value, executedAt) {
14046
- return new IncreaseOperation(parentCreatedAt, value, executedAt);
14112
+ static create(parentCreatedAt, value, executedAt, actor) {
14113
+ return new IncreaseOperation(parentCreatedAt, value, executedAt, actor);
14114
+ }
14115
+ /**
14116
+ * `getActor` returns the actor ID associated with this operation.
14117
+ */
14118
+ getActor() {
14119
+ return this.actor;
14047
14120
  }
14048
14121
  /**
14049
14122
  * `execute` executes this operation on the given `CRDTRoot`.
@@ -14064,7 +14137,17 @@ class IncreaseOperation extends Operation {
14064
14137
  }
14065
14138
  const counter = parentObject;
14066
14139
  const value = this.value.deepcopy();
14067
- counter.increase(value);
14140
+ if (counter.isDedup()) {
14141
+ if (!this.actor) {
14142
+ throw new YorkieError(
14143
+ Code.ErrInvalidArgument,
14144
+ "dedup counter requires actor"
14145
+ );
14146
+ }
14147
+ counter.increaseDedup(value, this.actor);
14148
+ } else {
14149
+ counter.increase(value);
14150
+ }
14068
14151
  return {
14069
14152
  opInfos: [
14070
14153
  {
@@ -14073,7 +14156,9 @@ class IncreaseOperation extends Operation {
14073
14156
  value: value.getValue()
14074
14157
  }
14075
14158
  ],
14076
- reverseOp: this.toReverseOperation()
14159
+ // Dedup counters do not support undo/redo because HLL cannot
14160
+ // remove an actor once added.
14161
+ reverseOp: this.actor ? void 0 : this.toReverseOperation()
14077
14162
  };
14078
14163
  }
14079
14164
  /**
@@ -14082,7 +14167,7 @@ class IncreaseOperation extends Operation {
14082
14167
  toReverseOperation() {
14083
14168
  const primitiveValue = this.value.deepcopy();
14084
14169
  const valueType = primitiveValue.getType();
14085
- const value = valueType === PrimitiveType.Long ? primitiveValue.getValue().multiply(-1) : primitiveValue.getValue() * -1;
14170
+ const value = valueType === PrimitiveType.Long ? -primitiveValue.getValue() : primitiveValue.getValue() * -1;
14086
14171
  const reverseOp = IncreaseOperation.create(
14087
14172
  this.getParentCreatedAt(),
14088
14173
  Primitive.of(value, primitiveValue.getCreatedAt())
@@ -14167,28 +14252,67 @@ class TreeStyleOperation extends Operation {
14167
14252
  let changes;
14168
14253
  let pairs;
14169
14254
  let diff = { data: 0, meta: 0 };
14255
+ const reversePrevAttributes = /* @__PURE__ */ new Map();
14256
+ const reverseAttrsToRemove = [];
14170
14257
  if (this.attributes.size) {
14171
14258
  const attributes = {};
14172
14259
  [...this.attributes].forEach(([key, value]) => attributes[key] = value);
14173
- [pairs, changes, diff] = tree.style(
14260
+ let prevAttributes;
14261
+ let newAttrKeys;
14262
+ [pairs, changes, diff, prevAttributes, newAttrKeys] = tree.style(
14174
14263
  [this.fromPos, this.toPos],
14175
14264
  attributes,
14176
14265
  this.getExecutedAt(),
14177
14266
  versionVector
14178
14267
  );
14268
+ for (const [key, value] of prevAttributes) {
14269
+ reversePrevAttributes.set(key, value);
14270
+ }
14271
+ reverseAttrsToRemove.push(...newAttrKeys);
14179
14272
  } else {
14180
14273
  const attributesToRemove = this.attributesToRemove;
14181
- [pairs, changes, diff] = tree.removeStyle(
14274
+ let prevAttributes;
14275
+ [pairs, changes, diff, prevAttributes] = tree.removeStyle(
14182
14276
  [this.fromPos, this.toPos],
14183
14277
  attributesToRemove,
14184
14278
  this.getExecutedAt(),
14185
14279
  versionVector
14186
14280
  );
14281
+ for (const [key, value] of prevAttributes) {
14282
+ reversePrevAttributes.set(key, value);
14283
+ }
14187
14284
  }
14188
14285
  root.acc(diff);
14189
14286
  for (const pair of pairs) {
14190
14287
  root.registerGCPair(pair);
14191
14288
  }
14289
+ let reverseOp;
14290
+ if (reversePrevAttributes.size > 0 && reverseAttrsToRemove.length > 0) {
14291
+ reverseOp = new TreeStyleOperation(
14292
+ this.getParentCreatedAt(),
14293
+ this.fromPos,
14294
+ this.toPos,
14295
+ reversePrevAttributes,
14296
+ reverseAttrsToRemove,
14297
+ void 0
14298
+ );
14299
+ } else if (reverseAttrsToRemove.length > 0) {
14300
+ reverseOp = TreeStyleOperation.createTreeRemoveStyleOperation(
14301
+ this.getParentCreatedAt(),
14302
+ this.fromPos,
14303
+ this.toPos,
14304
+ reverseAttrsToRemove,
14305
+ void 0
14306
+ );
14307
+ } else if (reversePrevAttributes.size > 0) {
14308
+ reverseOp = TreeStyleOperation.create(
14309
+ this.getParentCreatedAt(),
14310
+ this.fromPos,
14311
+ this.toPos,
14312
+ reversePrevAttributes,
14313
+ void 0
14314
+ );
14315
+ }
14192
14316
  return {
14193
14317
  opInfos: changes.map(({ from, to, value, fromPath, toPath }) => {
14194
14318
  return {
@@ -14200,7 +14324,8 @@ class TreeStyleOperation extends Operation {
14200
14324
  toPath,
14201
14325
  path: root.createPath(this.getParentCreatedAt())
14202
14326
  };
14203
- })
14327
+ }),
14328
+ reverseOp
14204
14329
  };
14205
14330
  }
14206
14331
  /**
@@ -14421,6 +14546,8 @@ function toCounterType(valueType) {
14421
14546
  return ValueType.INTEGER_CNT;
14422
14547
  case CounterType.Long:
14423
14548
  return ValueType.LONG_CNT;
14549
+ case CounterType.IntDedup:
14550
+ return ValueType.INTEGER_DEDUP_CNT;
14424
14551
  default:
14425
14552
  throw new YorkieError(
14426
14553
  Code.ErrInvalidType,
@@ -14593,6 +14720,7 @@ function toOperation(operation) {
14593
14720
  pbIncreaseOperation.executedAt = toTimeTicket(
14594
14721
  increaseOperation.getExecutedAt()
14595
14722
  );
14723
+ pbIncreaseOperation.actor = increaseOperation.getActor();
14596
14724
  pbOperation.body.case = "increase";
14597
14725
  pbOperation.body.value = pbIncreaseOperation;
14598
14726
  } else if (operation instanceof TreeEditOperation) {
@@ -14769,6 +14897,12 @@ function toTreeNodes(node) {
14769
14897
  if (n.insNextID) {
14770
14898
  pbTreeNode.insNextId = toTreeNodeID(n.insNextID);
14771
14899
  }
14900
+ if (n.mergedFrom) {
14901
+ pbTreeNode.mergedFrom = toTreeNodeID(n.mergedFrom);
14902
+ }
14903
+ if (n.mergedAt) {
14904
+ pbTreeNode.mergedAt = toTimeTicket(n.mergedAt);
14905
+ }
14772
14906
  if (n.attrs) {
14773
14907
  pbTreeNode.attributes = toRHT(n.attrs);
14774
14908
  }
@@ -14838,7 +14972,8 @@ function toCounter(counter) {
14838
14972
  value: counter.toBytes(),
14839
14973
  createdAt: toTimeTicket(counter.getCreatedAt()),
14840
14974
  movedAt: toTimeTicket(counter.getMovedAt()),
14841
- removedAt: toTimeTicket(counter.getRemovedAt())
14975
+ removedAt: toTimeTicket(counter.getRemovedAt()),
14976
+ hllRegisters: counter.hllBytes() || new Uint8Array()
14842
14977
  })
14843
14978
  }
14844
14979
  });
@@ -15002,6 +15137,8 @@ function fromCounterType(pbValueType) {
15002
15137
  return CounterType.Int;
15003
15138
  case ValueType.LONG_CNT:
15004
15139
  return CounterType.Long;
15140
+ case ValueType.INTEGER_DEDUP_CNT:
15141
+ return CounterType.IntDedup;
15005
15142
  }
15006
15143
  throw new YorkieError(
15007
15144
  Code.ErrUnimplemented,
@@ -15044,6 +15181,7 @@ function fromElementSimple(pbElementSimple) {
15044
15181
  );
15045
15182
  case ValueType.INTEGER_CNT:
15046
15183
  case ValueType.LONG_CNT:
15184
+ case ValueType.INTEGER_DEDUP_CNT:
15047
15185
  return CRDTCounter.create(
15048
15186
  fromCounterType(pbElementSimple.type),
15049
15187
  CRDTCounter.valueFromBytes(
@@ -15151,6 +15289,12 @@ function fromTreeNode(pbTreeNode) {
15151
15289
  if (pbTreeNode.insNextId) {
15152
15290
  node.insNextID = fromTreeNodeID(pbTreeNode.insNextId);
15153
15291
  }
15292
+ if (pbTreeNode.mergedFrom) {
15293
+ node.mergedFrom = fromTreeNodeID(pbTreeNode.mergedFrom);
15294
+ }
15295
+ if (pbTreeNode.mergedAt) {
15296
+ node.mergedAt = fromTimeTicket(pbTreeNode.mergedAt);
15297
+ }
15154
15298
  node.removedAt = fromTimeTicket(pbTreeNode.removedAt);
15155
15299
  return node;
15156
15300
  }
@@ -15220,7 +15364,8 @@ function fromOperation(pbOperation) {
15220
15364
  return IncreaseOperation.create(
15221
15365
  fromTimeTicket(pbIncreaseOperation.parentCreatedAt),
15222
15366
  fromElementSimple(pbIncreaseOperation.value),
15223
- fromTimeTicket(pbIncreaseOperation.executedAt)
15367
+ fromTimeTicket(pbIncreaseOperation.executedAt),
15368
+ pbIncreaseOperation.actor || void 0
15224
15369
  );
15225
15370
  } else if (pbOperation.body.case === "treeEdit") {
15226
15371
  const pbTreeEditOperation = pbOperation.body.value;
@@ -15368,6 +15513,9 @@ function fromCounter(pbCounter) {
15368
15513
  );
15369
15514
  counter.setMovedAt(fromTimeTicket(pbCounter.movedAt));
15370
15515
  counter.setRemovedAt(fromTimeTicket(pbCounter.removedAt));
15516
+ if (counter.isDedup() && pbCounter.hllRegisters.length > 0) {
15517
+ counter.restoreHLL(pbCounter.hllRegisters);
15518
+ }
15371
15519
  return counter;
15372
15520
  }
15373
15521
  function fromTree(pbTree) {
@@ -16837,7 +16985,7 @@ class Text {
16837
16985
  return this.text.indexRangeToPosRange(fromIdx, toIdx);
16838
16986
  }
16839
16987
  }
16840
- class Counter {
16988
+ class BaseCounter {
16841
16989
  valueType;
16842
16990
  value;
16843
16991
  context;
@@ -16847,7 +16995,7 @@ class Counter {
16847
16995
  this.value = value;
16848
16996
  }
16849
16997
  /**
16850
- * `initialize` initialize this text with context and internal text.
16998
+ * `initialize` links this proxy to a ChangeContext and CRDTCounter.
16851
16999
  */
16852
17000
  initialize(context, counter) {
16853
17001
  this.valueType = counter.getValueType();
@@ -16856,17 +17004,11 @@ class Counter {
16856
17004
  this.value = counter.getValue();
16857
17005
  }
16858
17006
  /**
16859
- * `getID` returns the ID of this text.
17007
+ * `getID` returns the ID of this counter.
16860
17008
  */
16861
17009
  getID() {
16862
17010
  return this.counter.getID();
16863
17011
  }
16864
- /**
16865
- * `getValue` returns the value of this counter;
16866
- */
16867
- getValue() {
16868
- return this.value;
16869
- }
16870
17012
  /**
16871
17013
  * `getValueType` returns the value type of this counter.
16872
17014
  */
@@ -16874,15 +17016,45 @@ class Counter {
16874
17016
  return this.valueType;
16875
17017
  }
16876
17018
  /**
16877
- * `increase` increases numeric data.
17019
+ * `toJSForTest` returns value with meta data for testing.
16878
17020
  */
16879
- increase(v) {
17021
+ toJSForTest() {
17022
+ if (!this.context || !this.counter) {
17023
+ throw new YorkieError(
17024
+ Code.ErrNotInitialized,
17025
+ "Counter is not initialized yet"
17026
+ );
17027
+ }
17028
+ return this.counter.toJSForTest();
17029
+ }
17030
+ /**
17031
+ * `ensureInitialized` throws if this counter has not been initialized.
17032
+ */
17033
+ ensureInitialized() {
16880
17034
  if (!this.context || !this.counter) {
16881
17035
  throw new YorkieError(
16882
17036
  Code.ErrNotInitialized,
16883
17037
  "Counter is not initialized yet"
16884
17038
  );
16885
17039
  }
17040
+ }
17041
+ }
17042
+ class Counter extends BaseCounter {
17043
+ constructor(value) {
17044
+ const type = typeof value === "bigint" ? CounterType.Long : CounterType.Int;
17045
+ super(type, value);
17046
+ }
17047
+ /**
17048
+ * `getValue` returns the value of this counter.
17049
+ */
17050
+ getValue() {
17051
+ return this.value;
17052
+ }
17053
+ /**
17054
+ * `increase` increases numeric data.
17055
+ */
17056
+ increase(v) {
17057
+ this.ensureInitialized();
16886
17058
  const ticket = this.context.issueTimeTicket();
16887
17059
  const value = Primitive.of(v, ticket);
16888
17060
  if (!value.isNumericType()) {
@@ -16896,19 +17068,44 @@ class Counter {
16896
17068
  );
16897
17069
  return this;
16898
17070
  }
17071
+ }
17072
+ class DedupCounter extends BaseCounter {
17073
+ constructor() {
17074
+ super(CounterType.IntDedup, 0);
17075
+ }
16899
17076
  /**
16900
- * `toJSForTest` returns value with meta data for testing.
17077
+ * `getValue` returns the value of this counter. Always a number since
17078
+ * DedupCounter only supports IntDedup.
16901
17079
  */
16902
- toJSForTest() {
16903
- if (!this.context || !this.counter) {
16904
- throw new YorkieError(
16905
- Code.ErrNotInitialized,
16906
- "Counter is not initialized yet"
16907
- );
17080
+ getValue() {
17081
+ return this.value;
17082
+ }
17083
+ /**
17084
+ * `add` records a unique actor in the dedup counter. If the actor has
17085
+ * already been counted, the call is ignored.
17086
+ */
17087
+ add(actor) {
17088
+ this.ensureInitialized();
17089
+ if (!actor) {
17090
+ throw new YorkieError(Code.ErrInvalidArgument, "actor is required");
16908
17091
  }
16909
- return this.counter.toJSForTest();
17092
+ const ticket = this.context.issueTimeTicket();
17093
+ const value = Primitive.of(1, ticket);
17094
+ this.counter.increaseDedup(value, actor);
17095
+ this.context.push(
17096
+ IncreaseOperation.create(
17097
+ this.counter.getCreatedAt(),
17098
+ value,
17099
+ ticket,
17100
+ actor
17101
+ )
17102
+ );
17103
+ return this;
16910
17104
  }
16911
17105
  }
17106
+ function isCounter$1(value) {
17107
+ return value instanceof Counter || value instanceof DedupCounter;
17108
+ }
16912
17109
  function toTreeNode(node) {
16913
17110
  if (node.isText) {
16914
17111
  return {
@@ -17712,7 +17909,12 @@ function toWrappedElement(context, elem) {
17712
17909
  } else if (elem instanceof CRDTText) {
17713
17910
  return new Text(context, elem);
17714
17911
  } else if (elem instanceof CRDTCounter) {
17715
- const counter = new Counter(CounterType.Int, 0);
17912
+ if (elem.isDedup()) {
17913
+ const counter2 = new DedupCounter();
17914
+ counter2.initialize(context, elem);
17915
+ return counter2;
17916
+ }
17917
+ const counter = new Counter(0);
17716
17918
  counter.initialize(context, elem);
17717
17919
  return counter;
17718
17920
  } else if (elem instanceof CRDTTree) {
@@ -17742,7 +17944,7 @@ function buildCRDTElement(context, value, createdAt) {
17742
17944
  if (value instanceof Text) {
17743
17945
  element = CRDTText.create(RGATreeSplit.create(), createdAt);
17744
17946
  value.initialize(context, element);
17745
- } else if (value instanceof Counter) {
17947
+ } else if (isCounter$1(value)) {
17746
17948
  element = CRDTCounter.create(
17747
17949
  value.getValueType(),
17748
17950
  value.getValue(),
@@ -20025,7 +20227,7 @@ function createAuthInterceptor(apiKey, token) {
20025
20227
  };
20026
20228
  }
20027
20229
  const name$1 = "@yorkie-js/sdk";
20028
- const version$1 = "0.7.3";
20230
+ const version$1 = "0.7.5";
20029
20231
  const pkg$1 = {
20030
20232
  name: name$1,
20031
20233
  version: version$1
@@ -20369,21 +20571,19 @@ class Client {
20369
20571
  this.channelHeartbeatInterval = opts.channelHeartbeatInterval ?? DefaultClientOptions.channelHeartbeatInterval;
20370
20572
  const { authInterceptor, setToken } = createAuthInterceptor(this.apiKey);
20371
20573
  this.setAuthToken = setToken;
20574
+ const transportOptions = {
20575
+ baseUrl: rpcAddr,
20576
+ interceptors: [authInterceptor, createMetricInterceptor(opts?.userAgent)],
20577
+ fetch: (input, init) => {
20578
+ return fetch(input, {
20579
+ ...init,
20580
+ keepalive: this.keepalive
20581
+ });
20582
+ }
20583
+ };
20372
20584
  this.rpcClient = createClient(
20373
20585
  YorkieService,
20374
- createGrpcWebTransport({
20375
- baseUrl: rpcAddr,
20376
- interceptors: [
20377
- authInterceptor,
20378
- createMetricInterceptor(opts?.userAgent)
20379
- ],
20380
- fetch: (input, init) => {
20381
- return fetch(input, {
20382
- ...init,
20383
- keepalive: this.keepalive
20384
- });
20385
- }
20386
- })
20586
+ opts.useGrpcWebTransport ? createGrpcWebTransport(transportOptions) : createConnectTransport(transportOptions)
20387
20587
  );
20388
20588
  this.taskQueue = [];
20389
20589
  }
@@ -21881,10 +22081,6 @@ const YSON = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty
21881
22081
  textToString,
21882
22082
  treeToXML
21883
22083
  }, Symbol.toStringTag, { value: "Module" }));
21884
- ({
21885
- IntType: CounterType.Int,
21886
- LongType: CounterType.Long
21887
- });
21888
22084
  if (typeof globalThis !== "undefined") {
21889
22085
  globalThis.yorkie = {
21890
22086
  Client,
@@ -21892,18 +22088,17 @@ if (typeof globalThis !== "undefined") {
21892
22088
  Primitive,
21893
22089
  Text,
21894
22090
  Counter,
22091
+ DedupCounter,
21895
22092
  Tree,
21896
22093
  Channel: Channel2,
21897
22094
  ChannelEventType,
21898
22095
  YSON,
21899
22096
  LogLevel,
21900
- setLogLevel,
21901
- IntType: CounterType.Int,
21902
- LongType: CounterType.Long
22097
+ setLogLevel
21903
22098
  };
21904
22099
  }
21905
22100
  const name = "@yorkie-js/react";
21906
- const version = "0.7.3";
22101
+ const version = "0.7.5";
21907
22102
  const pkg = {
21908
22103
  name,
21909
22104
  version