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