@dan-uni/dan-any 0.9.9 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,37 +1,32 @@
1
+ import { __webpack_require__ } from "./rslib-runtime.js";
1
2
  import "reflect-metadata/lite";
2
3
  import { IsDate, IsEmail, IsEnum, IsInt, IsNotEmpty, IsNumber, IsOptional, IsString, Max, Min, isEmail, isJSON, isObject, isString, validateOrReject } from "class-validator";
3
4
  import { XMLBuilder, XMLParser } from "fast-xml-parser";
4
5
  import json_bigint from "json-bigint";
5
6
  import { create, fromBinary, toBinary } from "@bufbuild/protobuf";
6
7
  import { file_google_protobuf_timestamp, timestampDate, timestampFromDate, timestampNow } from "@bufbuild/protobuf/wkt";
7
- import { fileDesc, messageDesc as codegenv2_messageDesc } from "@bufbuild/protobuf/codegenv2";
8
8
  import { Expose, plainToInstance } from "class-transformer";
9
9
  import hh_mm_ss from "hh-mm-ss";
10
10
  import jssha from "jssha";
11
11
  import { brotliCompressSync, brotliDecompressSync, gunzipSync, gzipSync } from "node:zlib";
12
12
  import { decode, encode as external_base16384_encode } from "base16384";
13
- var __webpack_require__ = {};
14
- (()=>{
15
- __webpack_require__.d = (exports, definition)=>{
16
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, {
17
- enumerable: true,
18
- get: definition[key]
19
- });
20
- };
21
- })();
22
- (()=>{
23
- __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
24
- })();
25
- (()=>{
26
- __webpack_require__.r = (exports)=>{
27
- if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports, Symbol.toStringTag, {
28
- value: 'Module'
29
- });
30
- Object.defineProperty(exports, '__esModule', {
31
- value: true
32
- });
33
- };
34
- })();
13
+ import { fileDesc, messageDesc as codegenv2_messageDesc } from "@bufbuild/protobuf/codegenv2";
14
+ var dm_gen_namespaceObject = {};
15
+ __webpack_require__.r(dm_gen_namespaceObject);
16
+ __webpack_require__.d(dm_gen_namespaceObject, {
17
+ DMAttr: ()=>dm_gen_DMAttr,
18
+ ExtraDanUniChapterAction: ()=>dm_gen_ExtraDanUniChapterAction,
19
+ ExtraDanUniChapterType: ()=>dm_gen_ExtraDanUniChapterType,
20
+ Modes: ()=>dm_gen_Modes,
21
+ Pools: ()=>dm_gen_Pools,
22
+ UniDM: ()=>UniDM
23
+ });
24
+ var id_gen_namespaceObject = {};
25
+ __webpack_require__.r(id_gen_namespaceObject);
26
+ __webpack_require__.d(id_gen_namespaceObject, {
27
+ UniID: ()=>id_gen_UniID,
28
+ createDMID: ()=>createDMID
29
+ });
35
30
  var platform_namespaceObject = {};
36
31
  __webpack_require__.r(platform_namespaceObject);
37
32
  __webpack_require__.d(platform_namespaceObject, {
@@ -44,30 +39,43 @@ __webpack_require__.d(platform_namespaceObject, {
44
39
  PlatformVideoSource: ()=>platform_PlatformVideoSource,
45
40
  PlatformVideoSources: ()=>PlatformVideoSources
46
41
  });
47
- var id_gen_namespaceObject = {};
48
- __webpack_require__.r(id_gen_namespaceObject);
49
- __webpack_require__.d(id_gen_namespaceObject, {
50
- UniID: ()=>id_gen_UniID,
51
- createDMID: ()=>createDMID
52
- });
53
- var dm_gen_namespaceObject = {};
54
- __webpack_require__.r(dm_gen_namespaceObject);
55
- __webpack_require__.d(dm_gen_namespaceObject, {
56
- DMAttr: ()=>dm_gen_DMAttr,
57
- ExtraDanUniChapterAction: ()=>dm_gen_ExtraDanUniChapterAction,
58
- ExtraDanUniChapterType: ()=>dm_gen_ExtraDanUniChapterType,
59
- Modes: ()=>dm_gen_Modes,
60
- Pools: ()=>dm_gen_Pools,
61
- UniDM: ()=>UniDM
62
- });
63
- var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"0.9.9","TB":"https://github.com/ani-uni/danuni/tree/master/packages/dan-any#readme"}');
64
- const file_bili_dm = /*@__PURE__*/ fileDesc("Cg1iaWxpL2RtLnByb3RvEiBiaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MSJkCgZBdmF0YXISCgoCaWQYASABKAkSCwoDdXJsGAIgASgJEkEKC2F2YXRhcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyVHlwZSIjCgZCdWJibGUSDAoEdGV4dBgBIAEoCRILCgN1cmwYAiABKAkixgEKCEJ1YmJsZVYyEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJEkEKC2J1YmJsZV90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlVHlwZRIVCg1leHBvc3VyZV9vbmNlGAQgASgIEkUKDWV4cG9zdXJlX3R5cGUYBSABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiWwoGQnV0dG9uEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUiWAoOQnV6endvcmRDb25maWcSRgoIa2V5d29yZHMYASADKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZFNob3dDb25maWcieAoSQnV6endvcmRTaG93Q29uZmlnEgwKBG5hbWUYASABKAkSDgoGc2NoZW1hGAIgASgJEg4KBnNvdXJjZRgDIAEoBRIKCgJpZBgEIAEoAxITCgtidXp6d29yZF9pZBgFIAEoAxITCgtzY2hlbWFfdHlwZRgGIAEoBSJ7CghDaGVja0JveBIMCgR0ZXh0GAEgASgJEjwKBHR5cGUYAiABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja2JveFR5cGUSFQoNZGVmYXVsdF92YWx1ZRgDIAEoCBIMCgRzaG93GAQgASgIIm8KCkNoZWNrQm94VjISDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgiggIKC0NsaWNrQnV0dG9uEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSDAoEc2hvdxgGIAEoCBI4CgZidWJibGUYByABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGUiswIKDUNsaWNrQnV0dG9uVjISFQoNcG9ydHJhaXRfdGV4dBgBIAMoCRIWCg5sYW5kc2NhcGVfdGV4dBgCIAMoCRIbChNwb3J0cmFpdF90ZXh0X2ZvY3VzGAMgAygJEhwKFGxhbmRzY2FwZV90ZXh0X2ZvY3VzGAQgAygJEkEKC3JlbmRlcl90eXBlGAUgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIXCg90ZXh0X2lucHV0X3Bvc3QYBiABKAgSFQoNZXhwb3N1cmVfb25jZRgHIAEoCBJFCg1leHBvc3VyZV90eXBlGAggASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIksKB0NvbW1hbmQSQAoLY29tbWFuZF9kbXMYASADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0i5gEKCUNvbW1hbmREbRIKCgJpZBgBIAEoAxILCgNvaWQYAiABKAMSCwoDbWlkGAMgASgDEg8KB2NvbW1hbmQYBCABKAkSDwoHY29udGVudBgFIAEoCRIQCghwcm9ncmVzcxgGIAEoBRINCgVjdGltZRgHIAEoCRINCgVtdGltZRgIIAEoCRINCgVleHRyYRgJIAEoCRINCgVpZFN0chgKIAEoCRIMCgR0eXBlGAsgASgFEhMKC2F1dG9fY3JlYXRlGAwgASgIEhIKCmNvdW50X2Rvd24YDSABKAUSDAoEYXR0chgOIAEoBSJQCg1EYW5tYWt1QUlGbGFnEj8KCGRtX2ZsYWdzGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWciiwMKC0Rhbm1ha3VFbGVtEgoKAmlkGAEgASgDEhAKCHByb2dyZXNzGAIgASgFEgwKBG1vZGUYAyABKAUSEAoIZm9udHNpemUYBCABKAUSPwoFY29sb3IYBSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIQCghtaWRfaGFzaBgGIAEoCRIPCgdjb250ZW50GAcgASgJEg0KBWN0aW1lGAggASgDEg4KBndlaWdodBgJIAEoBRIOCgZhY3Rpb24YCiABKAkSDAoEcG9vbBgLIAEoBRIOCgZpZF9zdHIYDCABKAkSDAoEYXR0chgNIAEoBRIRCglhbmltYXRpb24YFiABKAkSDQoFZXh0cmEYFyABKAkSQgoIY29sb3JmdWwYGCABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIMCgR0eXBlGBkgASgFEgsKA29pZBgaIAEoAyIpCgtEYW5tYWt1RmxhZxIMCgRkbWlkGAEgASgDEgwKBGZsYWcYAiABKAUiSwoRRGFubWFrdUZsYWdDb25maWcSEAoIcmVjX2ZsYWcYASABKAUSEAoIcmVjX3RleHQYAiABKAkSEgoKcmVjX3N3aXRjaBgDIAEoBSKLBwoYRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnEikKIXBsYXllcl9kYW5tYWt1X3VzZV9kZWZhdWx0X2NvbmZpZxgBIAEoCBIsCiRwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9zd2l0Y2gYBCABKAgSKwojcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWwYBSABKAUSHwoXcGxheWVyX2Rhbm1ha3VfYmxvY2t0b3AYBiABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tzY3JvbGwYByABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tib3R0b20YCCABKAgSJAoccGxheWVyX2Rhbm1ha3VfYmxvY2tjb2xvcmZ1bBgJIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3JlcGVhdBgKIAEoCBIjChtwbGF5ZXJfZGFubWFrdV9ibG9ja3NwZWNpYWwYCyABKAgSHgoWcGxheWVyX2Rhbm1ha3Vfb3BhY2l0eRgMIAEoAhIkChxwbGF5ZXJfZGFubWFrdV9zY2FsaW5nZmFjdG9yGA0gASgCEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAhIcChRwbGF5ZXJfZGFubWFrdV9zcGVlZBgPIAEoBRIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBAgASgIEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgRIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgSIAEoBRKYAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBMgAygLMmQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EiUKHXBsYXllcl9kYW5tYWt1X2VuYWJsZV9oZXJkX2RtGBQgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi7AkKEURhbm11UGxheWVyQ29uZmlnEh0KFXBsYXllcl9kYW5tYWt1X3N3aXRjaBgBIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9zd2l0Y2hfc2F2ZRgCIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYAyABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJgoecGxheWVyX2Rhbm1ha3VfZW5hYmxlYmxvY2tsaXN0GBAgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9zd2l0Y2gYESABKAgSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X2NvbmZpZxgSIAEoBRImCh5wbGF5ZXJfZGFubWFrdV9pb3Nfc3dpdGNoX3NhdmUYEyABKAUSKQohcGxheWVyX2Rhbm1ha3Vfc2VuaW9yX21vZGVfc3dpdGNoGBQgASgFEi4KJnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBUgASgFEpEBCipwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92Ml9tYXAYFiADKAsyXS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgXIAEoCBImCh5wbGF5ZXJfZGFubWFrdV9ibG9ja3RvcF9ib3R0b20YGCABKAgSIAoYcGxheWVyX2Rhbm1ha3VfZG9tYWluX3YyGBkgASgFEh4KFnBsYXllcl9kYW5tYWt1X2RlbnNpdHkYGiABKAUSJQodcGxheWVyX2Rhbm1ha3Vfc3VidGl0bGVfcHJvb2YYGyABKAgSIwobcGxheWVyX2Rhbm1ha3VfcGVvcGxlX3Byb29mGBwgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEiMAoWRGFubXVQbGF5ZXJDb25maWdQYW5lbBIWCg5zZWxlY3Rpb25fdGV4dBgBIAEoCSJLChhEYW5tdVBsYXllckR5bmFtaWNDb25maWcSEAoIcHJvZ3Jlc3MYASABKAUSHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCIpADChVEYW5tdVBsYXllclZpZXdDb25maWcSYQodZGFubXVrdV9kZWZhdWx0X3BsYXllcl9jb25maWcYASABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdURlZmF1bHRQbGF5ZXJDb25maWcSUgoVZGFubXVrdV9wbGF5ZXJfY29uZmlnGAIgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcSYQodZGFubXVrdV9wbGF5ZXJfZHluYW1pY19jb25maWcYAyADKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckR5bmFtaWNDb25maWcSXQobZGFubXVrdV9wbGF5ZXJfY29uZmlnX3BhbmVsGAQgASgLMjguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWdQYW5lbCKZBQoURGFubXVXZWJQbGF5ZXJDb25maWcSEQoJZG1fc3dpdGNoGAEgASgIEhEKCWFpX3N3aXRjaBgCIAEoCBIQCghhaV9sZXZlbBgDIAEoBRIQCghibG9ja3RvcBgEIAEoCBITCgtibG9ja3Njcm9sbBgFIAEoCBITCgtibG9ja2JvdHRvbRgGIAEoCBISCgpibG9ja2NvbG9yGAcgASgIEhQKDGJsb2Nrc3BlY2lhbBgIIAEoCBIUCgxwcmV2ZW50c2hhZGUYCSABKAgSDQoFZG1hc2sYCiABKAgSDwoHb3BhY2l0eRgLIAEoAhIOCgZkbWFyZWEYDCABKAUSEQoJc3BlZWRwbHVzGA0gASgCEhAKCGZvbnRzaXplGA4gASgCEhIKCnNjcmVlbnN5bmMYDyABKAgSEQoJc3BlZWRzeW5jGBAgASgIEhIKCmZvbnRmYW1pbHkYESABKAkSDAoEYm9sZBgSIAEoCBISCgpmb250Ym9yZGVyGBMgASgFEhEKCWRyYXdfdHlwZRgUIAEoCRIaChJzZW5pb3JfbW9kZV9zd2l0Y2gYFSABKAUSEwoLYWlfbGV2ZWxfdjIYFiABKAUSYQoPYWlfbGV2ZWxfdjJfbWFwGBcgAygLMkguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcuQWlMZXZlbFYyTWFwRW50cnkSFwoPYmxvY2t0b3BfYm90dG9tGBggASgIEhIKCmRtX2FyZWFfdjIYGSABKAUSEgoKZG1fZGVuc2l0eRgaIAEoBRozChFBaUxldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIlkKCkRtQ29sb3JmdWwSPgoEdHlwZRgBIAEoDjIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWxUeXBlEgsKA3NyYxgCIAEoCSJQCg9EbUV4cG9SZXBvcnRSZXESEgoKc2Vzc2lvbl9pZBgBIAEoCRILCgNvaWQYAiABKAMSDQoFZG1pZHMYAyABKAwSDQoFc3BtaWQYBCABKAkiEQoPRG1FeHBvUmVwb3J0UmVzIm0KCkRtSGVyZFZpZXcSGwoTZGlzcGxheV9oZXJkX2RtX251bRgBIAEoBRJCCghoZXJkX2RtcxgCIAMoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlZpZXdIZXJkRG1FbGVtIpYCCgpEbU1hc2tXYWxsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIPCgdjb250ZW50GAMgASgJEk0KDGNvbnRlbnRfdHlwZRgEIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRJFCghiaXpfdHlwZRgFIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxCaXpUeXBlEkUKCGNvbnRlbnRzGAYgAygLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbENvbnRlbnQiawoRRG1NYXNrV2FsbENvbnRlbnQSRQoEdHlwZRgBIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRIPCgdjb250ZW50GAIgASgJIs0QChFEbVBsYXllckNvbmZpZ1JlcRIKCgJ0cxgBIAEoAxJFCgZzd2l0Y2gYAiABKAsyNS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3dpdGNoEk4KC3N3aXRjaF9zYXZlGAMgASgLMjkuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaFNhdmUSWwoSdXNlX2RlZmF1bHRfY29uZmlnGAQgASgLMj8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVVzZURlZmF1bHRDb25maWcSYQoVYWlfcmVjb21tZW5kZWRfc3dpdGNoGAUgASgLMkIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSXwoUYWlfcmVjb21tZW5kZWRfbGV2ZWwYBiABKAsyQS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEkkKCGJsb2NrdG9wGAcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wEk8KC2Jsb2Nrc2Nyb2xsGAggASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc2Nyb2xsEk8KC2Jsb2NrYm90dG9tGAkgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrYm90dG9tElMKDWJsb2NrY29sb3JmdWwYCiABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tjb2xvcmZ1bBJPCgtibG9ja3JlcGVhdBgLIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBJRCgxibG9ja3NwZWNpYWwYDCABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEkcKB29wYWNpdHkYDSABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1T3BhY2l0eRJTCg1zY2FsaW5nZmFjdG9yGA4gASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISRQoGZG9tYWluGA8gASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpbhJDCgVzcGVlZBgQIAEoCzI0LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTcGVlZBJXCg9lbmFibGVibG9ja2xpc3QYESABKAsyPi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0El4KGWlubGluZVBsYXllckRhbm1ha3VTd2l0Y2gYEiABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5JbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoElsKEnNlbmlvcl9tb2RlX3N3aXRjaBgTIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTZW5pb3JNb2RlU3dpdGNoEmQKF2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBQgASgLMkMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyElMKDmVuYWJsZV9oZXJkX2RtGBUgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRJWCg9ibG9ja3RvcF9ib3R0b20YFiABKAsyPS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SSgoJZG9tYWluX3YyGBcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpblYyEkcKB2RlbnNpdHkYGCABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RGVuc2l0eRJUCg5zdWJ0aXRsZV9wcm9vZhgZIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mElAKDHBlb3BsZV9wcm9vZhgaIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VQZW9wbGVQcm9vZiIvCgtEbVNlZ0NvbmZpZxIRCglwYWdlX3NpemUYASABKAMSDQoFdG90YWwYAiABKAMikQIKEERtU2VnTW9iaWxlUmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBRJACgdhaV9mbGFnGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUFJRmxhZxIVCg1zZWdtZW50X3J1bGVzGAQgAygDEkIKDGNvbG9yZnVsX3NyYxgFIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWwSEwoLY29udGV4dF9zcmMYBiABKAkiygEKDkRtU2VnTW9iaWxlUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDEhYKDnRlZW5hZ2Vyc19tb2RlGAUgASgFEgoKAnBzGAYgASgDEgoKAnBlGAcgASgDEhEKCXB1bGxfbW9kZRgIIAEoBRISCgpmcm9tX3NjZW5lGAkgASgFEg0KBXNwbWlkGAogASgJEhMKC2NvbnRleHRfZXh0GAsgASgJIlwKDURtU2VnT3R0UmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBSJMCgtEbVNlZ090dFJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJdCg1EbVNlZ1NES1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI8CgVlbGVtcxgCIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VFbGVtIkwKC0RtU2VnU0RLUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDIncKCURtU3ViVmlldxIMCgR0eXBlGAEgASgFEgsKA29pZBgCIAEoAxILCgNwaWQYAyABKAMSQgoLcG9zdF9wYW5lbDIYBCADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxWMiKhCQoLRG1WaWV3UmVwbHkSDgoGY2xvc2VkGAEgASgIEjkKBG1hc2sYAiABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb01hc2sSQQoIc3VidGl0bGUYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb1N1YnRpdGxlEhMKC3NwZWNpYWxfZG1zGAQgAygJEkQKB2FpX2ZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxJOCg1wbGF5ZXJfY29uZmlnGAYgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJWaWV3Q29uZmlnEhYKDnNlbmRfYm94X3N0eWxlGAcgASgFEg0KBWFsbG93GAggASgIEhEKCWNoZWNrX2JveBgJIAEoCBIaChJjaGVja19ib3hfc2hvd19tc2cYCiABKAkSGAoQdGV4dF9wbGFjZWhvbGRlchgLIAEoCRIZChFpbnB1dF9wbGFjZWhvbGRlchgMIAEoCRIdChVyZXBvcnRfZmlsdGVyX2NvbnRlbnQYDSADKAkSQQoLZXhwb19yZXBvcnQYDiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvUmVwb3J0EkkKD2J1enp3b3JkX2NvbmZpZxgPIAEoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1enp3b3JkQ29uZmlnEkIKC2V4cHJlc3Npb25zGBAgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgRIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGBIgAygJEkIKC3Bvc3RfcGFuZWwyGBMgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISQgoMZG1fbWFza193YWxsGBQgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbBI9CgdkbV9oZXJkGBUgASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1IZXJkVmlldxI6Cgdjb21tYW5kGBYgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZBIKCgJrdhgXIAEoCRI+CglzdWJfdmlld3MYGCADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVN1YlZpZXcSNgoDcW9lGBkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUW9lSW5mbyJtCglEbVZpZXdSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEg0KBXNwbWlkGAQgASgJEhQKDGlzX2hhcmRfYm9vdBgFIAEoBRITCgtjb250ZXh0X2V4dBgGIAEoCSKBBgoORG1XZWJWaWV3UmVwbHkSDQoFc3RhdGUYASABKAUSDAoEdGV4dBgCIAEoCRIRCgl0ZXh0X3NpZGUYAyABKAkSPQoGZG1fc2dlGAQgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdDb25maWcSQQoEZmxhZxgFIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnQ29uZmlnEhMKC3NwZWNpYWxfZG1zGAYgAygJEhEKCWNoZWNrX2JveBgHIAEoCBINCgVjb3VudBgIIAEoAxJACgtjb21tYW5kX2RtcxgJIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmREbRJNCg1wbGF5ZXJfY29uZmlnGAogASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GAsgAygJEkIKC2V4cHJlc3Npb25zGAwgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgNIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGA4gAygJEkIKC3Bvc3RfcGFuZWwyGA8gAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISPgoJc3ViX3ZpZXdzGBAgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgRIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8iKgoKRXhwb1JlcG9ydBIcChRzaG91bGRfcmVwb3J0X2F0X2VuZBgBIAEoCCJkCgpFeHByZXNzaW9uEg8KB2tleXdvcmQYASADKAkSCwoDdXJsGAIgASgJEjgKBnBlcmlvZBgDIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBlcmlvZCJJCgtFeHByZXNzaW9ucxI6CgRkYXRhGAEgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbiIqChlJbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoEg0KBXZhbHVlGAEgASgIIicKBUxhYmVsEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkihwEKB0xhYmVsVjISDQoFdGl0bGUYASABKAkSDwoHY29udGVudBgCIAMoCRIVCg1leHBvc3VyZV9vbmNlGAMgASgIEkUKDWV4cG9zdXJlX3R5cGUYBCABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiJAoGUGVyaW9kEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAyIwCh9QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEg0KBXZhbHVlGAEgASgFIjIKIVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhINCgV2YWx1ZRgBIAEoBSIxCiBQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZFN3aXRjaBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tib3R0b20SDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrcmVwZWF0Eg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBINCgV2YWx1ZRgBIAEoCCIqChlQbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEg0KBXZhbHVlGAEgASgIIiYKFVBsYXllckRhbm1ha3VCbG9ja3RvcBINCgV2YWx1ZRgBIAEoCCIsChtQbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SDQoFdmFsdWUYASABKAgiJQoUUGxheWVyRGFubWFrdURlbnNpdHkSDQoFdmFsdWUYASABKAUiJAoTUGxheWVyRGFubWFrdURvbWFpbhINCgV2YWx1ZRgBIAEoAiImChVQbGF5ZXJEYW5tYWt1RG9tYWluVjISDQoFdmFsdWUYASABKAUiKgoZUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRINCgV2YWx1ZRgBIAEoCCItChxQbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0Eg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VPcGFjaXR5Eg0KBXZhbHVlGAEgASgCIikKGFBsYXllckRhbm1ha3VQZW9wbGVQcm9vZhINCgV2YWx1ZRgBIAEoCCIrChpQbGF5ZXJEYW5tYWt1U2NhbGluZ2ZhY3RvchINCgV2YWx1ZRgBIAEoAiIuCh1QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBINCgV2YWx1ZRgBIAEoBSIjChJQbGF5ZXJEYW5tYWt1U3BlZWQSDQoFdmFsdWUYASABKAUiKwoaUGxheWVyRGFubWFrdVN1YnRpdGxlUHJvb2YSDQoFdmFsdWUYASABKAgiOAoTUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCBISCgpjYW5faWdub3JlGAIgASgIIigKF1BsYXllckRhbm1ha3VTd2l0Y2hTYXZlEg0KBXZhbHVlGAEgASgIIi4KHVBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEg0KBXZhbHVlGAEgASgIIowDCglQb3N0UGFuZWwSDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEhAKCHByaW9yaXR5GAMgASgDEg4KBmJpel9pZBgEIAEoAxJECghiaXpfdHlwZRgFIAEoDjIyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbEJpelR5cGUSQwoMY2xpY2tfYnV0dG9uGAYgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2xpY2tCdXR0b24SPwoKdGV4dF9pbnB1dBgHIAEoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dBI9CgljaGVja19ib3gYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveBI2CgV0b2FzdBgJIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0Iq0ECgtQb3N0UGFuZWxWMhINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSRAoIYml6X3R5cGUYAyABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkUKDGNsaWNrX2J1dHRvbhgEIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uVjISQQoKdGV4dF9pbnB1dBgFIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dFYyEj8KCWNoZWNrX2JveBgGIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrQm94VjISOAoFdG9hc3QYByABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdFYyEjoKBmJ1YmJsZRgIIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVYyEjgKBWxhYmVsGAkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuTGFiZWxWMhJBCgtwb3N0X3N0YXR1cxgKIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMiFwoHUW9lSW5mbxIMCgRpbmZvGAEgASgJIikKCFJlc3BvbnNlEgwKBGNvZGUYASABKAUSDwoHbWVzc2FnZRgCIAEoCSL5AgoMU3VidGl0bGVJdGVtEgoKAmlkGAEgASgDEg4KBmlkX3N0chgCIAEoCRILCgNsYW4YAyABKAkSDwoHbGFuX2RvYxgEIAEoCRIUCgxzdWJ0aXRsZV91cmwYBSABKAkSOgoGYXV0aG9yGAYgASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVXNlckluZm8SPAoEdHlwZRgHIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlVHlwZRIVCg1sYW5fZG9jX2JyaWVmGAggASgJEkEKB2FpX3R5cGUYCSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpVHlwZRJFCglhaV9zdGF0dXMYCiABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpU3RhdHVzIugCCglUZXh0SW5wdXQSHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEgwKBHNob3cYBSABKAgSOAoGYXZhdGFyGAYgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEkEKC3Bvc3Rfc3RhdHVzGAcgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFN0YXR1cxI2CgVsYWJlbBgIIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsIvsBCgtUZXh0SW5wdXRWMhIcChRwb3J0cmFpdF9wbGFjZWhvbGRlchgBIAMoCRIdChVsYW5kc2NhcGVfcGxhY2Vob2xkZXIYAiADKAkSQQoLcmVuZGVyX3R5cGUYAyABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEhgKEHBsYWNlaG9sZGVyX3Bvc3QYBCABKAgSOAoGYXZhdGFyGAUgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEhgKEHRleHRfaW5wdXRfbGltaXQYBiABKAUibwoFVG9hc3QSDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRIMCgRzaG93GAMgASgIEjgKBmJ1dHRvbhgEIAEoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1dHRvbiJiCg1Ub2FzdEJ1dHRvblYyEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUicwoHVG9hc3RWMhIMCgR0ZXh0GAEgASgJEhAKCGR1cmF0aW9uGAIgASgFEkgKD3RvYXN0X2J1dHRvbl92MhgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0QnV0dG9uVjIiXAoIVXNlckluZm8SCwoDbWlkGAEgASgDEgwKBG5hbWUYAiABKAkSCwoDc2V4GAMgASgJEgwKBGZhY2UYBCABKAkSDAoEc2lnbhgFIAEoCRIMCgRyYW5rGAYgASgFIlMKCVZpZGVvTWFzaxILCgNjaWQYASABKAMSDAoEcGxhdBgCIAEoBRILCgNmcHMYAyABKAUSDAoEdGltZRgEIAEoAxIQCghtYXNrX3VybBgFIAEoCSJwCg1WaWRlb1N1YnRpdGxlEgsKA2xhbhgBIAEoCRIPCgdsYW5fZG9jGAIgASgJEkEKCXN1YnRpdGxlcxgDIAMoCzIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlSXRlbSKSAQoOVmlld0hlcmREbUVsZW0SEAoIaGVyZF9tc2cYASABKAkSFgoOaGVyZF9zdGFydF9jbnQYAiABKAUSFAoMaGVyZF9lbmRfY250GAMgASgFEhIKCnJlZ2V4X3J1bGUYBCABKAkSFgoOc3RhcnRfcHJvZ3Jlc3MYBSABKAUSFAoMZW5kX3Byb2dyZXNzGAYgASgFKjMKCkF2YXRhclR5cGUSEgoOQXZhdGFyVHlwZU5vbmUQABIRCg1BdmF0YXJUeXBlTkZUEAEqWQoKQnViYmxlVHlwZRISCg5CdWJibGVUeXBlTm9uZRAAEhkKFUJ1YmJsZVR5cGVDbGlja0J1dHRvbhABEhwKGEJ1YmJsZVR5cGVEbVNldHRpbmdQYW5lbBACKlgKDENoZWNrYm94VHlwZRIUChBDaGVja2JveFR5cGVOb25lEAASGQoVQ2hlY2tib3hUeXBlRW5jb3VyYWdlEAESFwoTQ2hlY2tib3hUeXBlQ29sb3JETRACKjUKDkRtQ29sb3JmdWxUeXBlEgwKCE5vbmVUeXBlEAASFQoPVmlwR3JhZHVhbENvbG9yEOHUAypgChFEbU1hc2tXYWxsQml6VHlwZRILCgdVbmtub3duEAASBwoDT0dWEAESCgoGQml6UGljEAISCAoETXV0ZRADEgoKBlJlY29yZBAEEgkKBUNsb3VkEAUSCAoEQUlHQxAGKnYKFURtTWFza1dhbGxDb250ZW50VHlwZRIgChxEbU1hc2tXYWxsQ29udGVudFR5cGVVbmtub3duEAASHQoZRG1NYXNrV2FsbENvbnRlbnRUeXBlVGV4dBABEhwKGERtTWFza1dhbGxDb250ZW50VHlwZVBpYxACKjwKDEV4cG9zdXJlVHlwZRIUChBFeHBvc3VyZVR5cGVOb25lEAASFgoSRXhwb3N1cmVUeXBlRE1TZW5kEAEqgwIKEFBvc3RQYW5lbEJpelR5cGUSGAoUUG9zdFBhbmVsQml6VHlwZU5vbmUQABIdChlQb3N0UGFuZWxCaXpUeXBlRW5jb3VyYWdlEAESGwoXUG9zdFBhbmVsQml6VHlwZUNvbG9yRE0QAhIZChVQb3N0UGFuZWxCaXpUeXBlTkZURE0QAxIdChlQb3N0UGFuZWxCaXpUeXBlRnJhZ0Nsb3NlEAQSHQoZUG9zdFBhbmVsQml6VHlwZVJlY29tbWVuZBAFEhwKGFBvc3RQYW5lbEJpelR5cGVQbG90TGVhaxAGEiIKHlBvc3RQYW5lbEJpelR5cGVBbnRpSGFyYXNzbWVudBAHKjgKClBvc3RTdGF0dXMSFAoQUG9zdFN0YXR1c05vcm1hbBAAEhQKEFBvc3RTdGF0dXNDbG9zZWQQASpOCgpSZW5kZXJUeXBlEhIKDlJlbmRlclR5cGVOb25lEAASFAoQUmVuZGVyVHlwZVNpbmdsZRABEhYKElJlbmRlclR5cGVSb3RhdGlvbhACKjYKEFN1YnRpdGxlQWlTdGF0dXMSCAoETm9uZRAAEgwKCEV4cG9zdXJlEAESCgoGQXNzaXN0EAIqKwoOU3VidGl0bGVBaVR5cGUSCgoGTm9ybWFsEAASDQoJVHJhbnNsYXRlEAEqHgoMU3VidGl0bGVUeXBlEgYKAkNDEAASBgoCQUkQASpOChFUb2FzdEZ1bmN0aW9uVHlwZRIZChVUb2FzdEZ1bmN0aW9uVHlwZU5vbmUQABIeChpUb2FzdEZ1bmN0aW9uVHlwZVBvc3RQYW5lbBABMqAFCgJETRJzCgtEbVNlZ01vYmlsZRIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVxGjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdNb2JpbGVSZXBseRJkCgZEbVZpZXcSKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXEaLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXBseRJxCg5EbVBsYXllckNvbmZpZxIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtUGxheWVyQ29uZmlnUmVxGiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVzcG9uc2USagoIRG1TZWdPdHQSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnT3R0UmVwbHkSagoIRG1TZWdTREsSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnU0RLUmVwbHkSdAoMRG1FeHBvUmVwb3J0EjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVxGjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVzYgZwcm90bzM");
65
- const DmSegMobileReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 30);
66
- const DmWebViewReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 39);
67
- const file_danuni = /*@__PURE__*/ fileDesc("CgxkYW51bmkucHJvdG8SEWRhbnVuaS5kYW5tYWt1LnYxIjIKCmxpc3REYW5SZXESCgoCSUQYASABKAkSEAoDc2VnGAIgASgFSACIAQFCBgoEX3NlZyLCAgoHRGFubWFrdRIMCgRTT0lEGAEgASgJEgwKBERNSUQYAiABKAkSEAoIcHJvZ3Jlc3MYAyABKAUSJQoEbW9kZRgEIAEoDjIXLmRhbnVuaS5kYW5tYWt1LnYxLk1vZGUSEAoIZm9udHNpemUYBSABKAUSDQoFY29sb3IYBiABKAUSEAoIc2VuZGVySUQYByABKAkSDwoHY29udGVudBgIIAEoCRIpCgVjdGltZRgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDgoGd2VpZ2h0GAogASgFEiUKBHBvb2wYCyABKA4yFy5kYW51bmkuZGFubWFrdS52MS5Qb29sEgwKBGF0dHIYDCADKAkSEAoIcGxhdGZvcm0YDSABKAkSEgoFZXh0cmEYDiABKAlIAIgBAUIICgZfZXh0cmEiPAoMRGFubWFrdVJlcGx5EiwKCGRhbm1ha3VzGAEgAygLMhouZGFudW5pLmRhbm1ha3UudjEuRGFubWFrdSo9CgRNb2RlEgoKBk5vcm1hbBAAEgoKBkJvdHRvbRABEgcKA1RvcBACEgsKB1JldmVyc2UQAxIHCgNFeHQQBCopCgRQb29sEgcKA0RlZhAAEgcKA1N1YhABEgcKA0FkdhACEgYKAkl4EAMyXQoORGFubWFrdVNlcnZpY2USSwoHbGlzdERhbhIdLmRhbnVuaS5kYW5tYWt1LnYxLmxpc3REYW5SZXEaHy5kYW51bmkuZGFubWFrdS52MS5EYW5tYWt1UmVwbHkiAFAAYgZwcm90bzM", [
68
- file_google_protobuf_timestamp
69
- ]);
70
- const DanmakuReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_danuni, 2);
42
+ var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"1.0.1","TB":"https://github.com/ani-uni/danuni/tree/master/packages/dan-any#readme"}');
43
+ const color_pad = (s)=>s.length < 2 ? `0${s}` : s;
44
+ const decimalToHex = (n)=>color_pad(n.toString(16));
45
+ const isDarkColor = ({ r, g, b })=>0.299 * r + 0.587 * g + 0.114 * b < 0x30;
46
+ const WHITE = {
47
+ r: 255,
48
+ g: 255,
49
+ b: 255
50
+ };
51
+ const BLACK = {
52
+ r: 0,
53
+ g: 0,
54
+ b: 0
55
+ };
56
+ const hexColorToRGB = (hex)=>{
57
+ if (0 === hex.indexOf('#')) hex = hex.slice(1);
58
+ const [r, g, b] = 3 === hex.length ? hex.split('').map((c)=>c + c) : hex.match(/../g) || [];
59
+ return {
60
+ r: Number.parseInt(r, 16),
61
+ g: Number.parseInt(g, 16),
62
+ b: Number.parseInt(b, 16)
63
+ };
64
+ };
65
+ const formatColor = ({ r, g, b }, opacity)=>{
66
+ const color = [
67
+ b,
68
+ g,
69
+ r
70
+ ];
71
+ if (void 0 !== opacity) {
72
+ const alpha = Math.round((1 - opacity) * 255);
73
+ color.unshift(alpha);
74
+ }
75
+ return `&H${color.map(decimalToHex).join('').toUpperCase()}`;
76
+ };
77
+ const getDecoratingColor = (color)=>isDarkColor(color) ? WHITE : BLACK;
78
+ const isWhite = (color)=>255 === color.r && 255 === color.g && 255 === color.b;
71
79
  var platform_PlatformInfoSource = /*#__PURE__*/ function(PlatformInfoSource) {
72
80
  PlatformInfoSource["Bangumi"] = "bgm";
73
81
  PlatformInfoSource["TMDB"] = "tmdb";
@@ -309,8 +317,16 @@ class UniDM {
309
317
  return this.options.dmid(this);
310
318
  }
311
319
  isSameAs(dan, options) {
320
+ if (this === dan) return true;
312
321
  if (4 === this.mode || 4 === dan.mode) return false;
313
322
  if (!options?.skipDanuniMerge && (this.extra.danuni?.merge || dan.extra.danuni?.merge)) return false;
323
+ if (this.extra.bili?.dmid && dan.extra.bili?.dmid) {
324
+ if (this.extra.bili.dmid && !dan.extra.bili.dmid || !this.extra.bili.dmid && dan.extra.bili.dmid) return false;
325
+ if (this.extra.bili.dmid === dan.extra.bili.dmid) return true;
326
+ return false;
327
+ }
328
+ if (this.extra.artplayer && !dan.extra.artplayer || !this.extra.artplayer && dan.extra.artplayer) return false;
329
+ if (this.extra.artplayer && dan.extra.artplayer && (this.extra.artplayer.border !== dan.extra.artplayer.border || dm_gen_JSON.stringify(this.extra.artplayer.style) !== dm_gen_JSON.stringify(dan.extra.artplayer.style))) return false;
314
330
  const isSame = (k)=>this[k] === dan[k];
315
331
  const checks = [
316
332
  'SOID',
@@ -322,26 +338,22 @@ class UniDM {
322
338
  return checks;
323
339
  }
324
340
  minify() {
325
- const def = UniDM.create();
326
- const dan = UniDM.create(this);
327
- const shouldKeep = (key, value)=>{
328
- if ('SOID' === key) return true;
329
- if (null == value) return false;
330
- if (value === def[key]) return false;
331
- if ('attr' === key && Array.isArray(value) && 0 === value.length) return false;
332
- if ('extraStr' === key && '{}' === value) return false;
333
- return true;
334
- };
341
+ const def = new UniDM();
335
342
  const result = {
336
- SOID: dan.SOID
343
+ SOID: this.SOID
337
344
  };
338
- for (const key of Object.keys(dan)){
339
- const value = dan[key];
340
- if (shouldKeep(key, value)) {
341
- if ('SOID' === key) continue;
342
- Reflect.set(result, key, value);
343
- }
344
- }
345
+ if (this.progress !== def.progress) result.progress = this.progress;
346
+ if (this.mode !== def.mode) result.mode = this.mode;
347
+ if (this.fontsize !== def.fontsize) result.fontsize = this.fontsize;
348
+ if (this.color !== def.color) result.color = this.color;
349
+ if (this.senderID !== def.senderID) result.senderID = this.senderID;
350
+ if (this.content !== def.content) result.content = this.content;
351
+ if (this.weight !== def.weight) result.weight = this.weight;
352
+ if (this.pool !== def.pool) result.pool = this.pool;
353
+ if (this.attr.length > 0) result.attr = this.attr;
354
+ if (void 0 !== this.platform) result.platform = this.platform;
355
+ if (this.extraStr && '{}' !== this.extraStr) result.extraStr = this.extraStr;
356
+ if (void 0 !== this.DMID) result.DMID = this.DMID;
345
357
  return result;
346
358
  }
347
359
  downgradeAdvcancedDan({ include, exclude, cleanExtra = false } = {}) {
@@ -673,7 +685,7 @@ class UniDM {
673
685
  color: this.color,
674
686
  uid: this.senderID,
675
687
  m: this.content,
676
- cid: this.DMID ? Number.parseInt(Buffer.from(this.DMID).toString('hex'), 16) : 0
688
+ cid: this.DMID ? BigInt(`0x${Buffer.from(this.DMID).toString('hex')}`) : 0n
677
689
  };
678
690
  }
679
691
  constructor(){
@@ -682,789 +694,193 @@ class UniDM {
682
694
  this.mode = 0;
683
695
  this.fontsize = 25;
684
696
  this.color = 16777215;
685
- this.senderID = id_gen_UniID.fromNull().toString();
686
- this.content = '';
687
- this.ctime = new Date();
688
- this.weight = 0;
689
- this.pool = 0;
690
- this.attr = [];
691
- this.options = {
692
- dmid: createDMID
693
- };
694
- }
695
- }
696
- _ts_decorate([
697
- IsEmail({
698
- require_tld: false
699
- }),
700
- IsString(),
701
- IsNotEmpty(),
702
- Expose(),
703
- _ts_metadata("design:type", String)
704
- ], UniDM.prototype, "SOID", void 0);
705
- _ts_decorate([
706
- Min(0),
707
- IsNumber(),
708
- IsNotEmpty(),
709
- Expose(),
710
- _ts_metadata("design:type", Number)
711
- ], UniDM.prototype, "progress", void 0);
712
- _ts_decorate([
713
- IsEnum(dm_gen_Modes),
714
- IsNotEmpty(),
715
- Expose(),
716
- _ts_metadata("design:type", Number)
717
- ], UniDM.prototype, "mode", void 0);
718
- _ts_decorate([
719
- Max(64),
720
- Min(12),
721
- IsNumber(),
722
- IsNotEmpty(),
723
- Expose(),
724
- _ts_metadata("design:type", Number)
725
- ], UniDM.prototype, "fontsize", void 0);
726
- _ts_decorate([
727
- IsNumber(),
728
- IsNotEmpty(),
729
- Expose(),
730
- _ts_metadata("design:type", Number)
731
- ], UniDM.prototype, "color", void 0);
732
- _ts_decorate([
733
- IsEmail({
734
- require_tld: false
735
- }),
736
- IsString(),
737
- IsNotEmpty(),
738
- Expose(),
739
- _ts_metadata("design:type", String)
740
- ], UniDM.prototype, "senderID", void 0);
741
- _ts_decorate([
742
- IsString(),
743
- IsNotEmpty(),
744
- Expose(),
745
- _ts_metadata("design:type", String)
746
- ], UniDM.prototype, "content", void 0);
747
- _ts_decorate([
748
- IsDate(),
749
- IsNotEmpty(),
750
- Expose(),
751
- _ts_metadata("design:type", "undefined" == typeof Date ? Object : Date)
752
- ], UniDM.prototype, "ctime", void 0);
753
- _ts_decorate([
754
- Max(11),
755
- Min(0),
756
- IsInt(),
757
- IsNotEmpty(),
758
- Expose(),
759
- _ts_metadata("design:type", Number)
760
- ], UniDM.prototype, "weight", void 0);
761
- _ts_decorate([
762
- IsEnum(dm_gen_Pools),
763
- IsNotEmpty(),
764
- Expose(),
765
- _ts_metadata("design:type", Number)
766
- ], UniDM.prototype, "pool", void 0);
767
- _ts_decorate([
768
- IsEnum(dm_gen_DMAttr, {
769
- each: true
770
- }),
771
- IsNotEmpty(),
772
- Expose(),
773
- _ts_metadata("design:type", Array)
774
- ], UniDM.prototype, "attr", void 0);
775
- _ts_decorate([
776
- IsString(),
777
- IsOptional(),
778
- Expose(),
779
- _ts_metadata("design:type", Object)
780
- ], UniDM.prototype, "platform", void 0);
781
- _ts_decorate([
782
- IsString(),
783
- IsOptional(),
784
- Expose(),
785
- _ts_metadata("design:type", String)
786
- ], UniDM.prototype, "extraStr", void 0);
787
- _ts_decorate([
788
- IsString(),
789
- IsOptional(),
790
- Expose(),
791
- _ts_metadata("design:type", String)
792
- ], UniDM.prototype, "DMID", void 0);
793
- _ts_decorate([
794
- Expose(),
795
- _ts_metadata("design:type", Function),
796
- _ts_metadata("design:paramtypes", [
797
- "undefined" == typeof Options ? Object : Options
798
- ]),
799
- _ts_metadata("design:returntype", void 0)
800
- ], UniDM.prototype, "init", null);
801
- _ts_decorate([
802
- Expose(),
803
- _ts_metadata("design:type", Function),
804
- _ts_metadata("design:paramtypes", []),
805
- _ts_metadata("design:returntype", Promise)
806
- ], UniDM.prototype, "validate", null);
807
- _ts_decorate([
808
- Expose(),
809
- _ts_metadata("design:type", "undefined" == typeof Extra ? Object : Extra),
810
- _ts_metadata("design:paramtypes", [])
811
- ], UniDM.prototype, "extra", null);
812
- _ts_decorate([
813
- Expose(),
814
- _ts_metadata("design:type", void 0),
815
- _ts_metadata("design:paramtypes", [])
816
- ], UniDM.prototype, "isFrom3rdPlatform", null);
817
- _ts_decorate([
818
- Expose(),
819
- _ts_metadata("design:type", Function),
820
- _ts_metadata("design:paramtypes", []),
821
- _ts_metadata("design:returntype", void 0)
822
- ], UniDM.prototype, "toDMID", null);
823
- _ts_decorate([
824
- Expose(),
825
- _ts_metadata("design:type", Function),
826
- _ts_metadata("design:paramtypes", [
827
- Object,
828
- Object
829
- ]),
830
- _ts_metadata("design:returntype", Boolean)
831
- ], UniDM.prototype, "isSameAs", null);
832
- _ts_decorate([
833
- Expose(),
834
- _ts_metadata("design:type", Function),
835
- _ts_metadata("design:paramtypes", []),
836
- _ts_metadata("design:returntype", void 0)
837
- ], UniDM.prototype, "minify", null);
838
- _ts_decorate([
839
- Expose(),
840
- _ts_metadata("design:type", Function),
841
- _ts_metadata("design:paramtypes", [
842
- Object
843
- ]),
844
- _ts_metadata("design:returntype", void 0)
845
- ], UniDM.prototype, "downgradeAdvcancedDan", null);
846
- _ts_decorate([
847
- Expose(),
848
- _ts_metadata("design:type", Function),
849
- _ts_metadata("design:paramtypes", [
850
- Object
851
- ]),
852
- _ts_metadata("design:returntype", void 0)
853
- ], UniDM.prototype, "toBiliXML", null);
854
- _ts_decorate([
855
- Expose(),
856
- _ts_metadata("design:type", Function),
857
- _ts_metadata("design:paramtypes", []),
858
- _ts_metadata("design:returntype", "undefined" == typeof DMDplayer ? Object : DMDplayer)
859
- ], UniDM.prototype, "toDplayer", null);
860
- _ts_decorate([
861
- Expose(),
862
- _ts_metadata("design:type", Function),
863
- _ts_metadata("design:paramtypes", []),
864
- _ts_metadata("design:returntype", "undefined" == typeof DMArtplayer ? Object : DMArtplayer)
865
- ], UniDM.prototype, "toArtplayer", null);
866
- _ts_decorate([
867
- Expose(),
868
- _ts_metadata("design:type", Function),
869
- _ts_metadata("design:paramtypes", []),
870
- _ts_metadata("design:returntype", "undefined" == typeof DMDDplay ? Object : DMDDplay)
871
- ], UniDM.prototype, "toDDplay", null);
872
- const src_JSON = json_bigint({
873
- useNativeBigInt: true
874
- });
875
- const DanUniConvertTipTemplate = {
876
- meassage: 'Converted by DanUni!',
877
- version: `JS/TS ${package_namespaceObject.UU} (v${package_namespaceObject.rE})`
878
- };
879
- class UniPool {
880
- constructor(dans, options = {}, info = {
881
- fromConverted: false
882
- }){
883
- this.dans = dans;
884
- this.options = options;
885
- this.info = info;
886
- if (false !== options.dedupe) options.dedupe = true;
887
- if (this.options.dedupe) this.dedupe();
888
- }
889
- async pipe(fn) {
890
- return fn(this);
891
- }
892
- pipeSync(fn) {
893
- return fn(this);
894
- }
895
- get shared() {
896
- const isShared = (key)=>this.dans.every((d)=>d[key]);
897
- return {
898
- SOID: isShared('SOID') ? this.dans[0].SOID : void 0,
899
- senderID: isShared('senderID') ? this.dans[0].senderID : void 0,
900
- platform: isShared('platform') ? this.dans[0].platform : void 0,
901
- pool: isShared('pool') ? this.dans[0].pool : void 0,
902
- mode: isShared('mode') ? this.dans[0].mode : void 0,
903
- color: isShared('color') ? this.dans[0].color : void 0
904
- };
905
- }
906
- getShared(key) {
907
- const isShared = (key)=>this.dans.every((d)=>d[key]);
908
- return isShared(key) ? this.dans[0][key] : void 0;
909
- }
910
- getStat(key) {
911
- const default_stat = [];
912
- const stats = this.dans.reduce((stat, dan)=>{
913
- const valWithCount = stat.find((i)=>i.val === dan[key]);
914
- if (valWithCount) valWithCount.count++;
915
- else stat.push({
916
- val: dan[key],
917
- count: 1
918
- });
919
- return stat;
920
- }, default_stat);
921
- return stats;
922
- }
923
- getMost(key) {
924
- return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
925
- }
926
- get most() {
927
- return {
928
- mode: this.getMost('mode').val,
929
- fontsize: this.getMost('fontsize').val,
930
- color: this.getMost('color').val,
931
- senderID: this.getMost('senderID').val,
932
- content: this.getMost('content').val,
933
- weight: this.getMost('weight').val,
934
- pool: this.getMost('pool').val,
935
- platform: this.getMost('platform').val
936
- };
937
- }
938
- static create(options) {
939
- return new UniPool([], options);
940
- }
941
- assign(dans) {
942
- if (dans instanceof UniPool) return new UniPool([
943
- ...this.dans,
944
- ...dans.dans
945
- ], {
946
- ...this.options,
947
- ...dans.options
948
- }, {
949
- ...this.info,
950
- ...dans.info
951
- });
952
- if (dans instanceof UniDM) return new UniPool([
953
- ...this.dans,
954
- dans
955
- ], this.options, this.info);
956
- if (Array.isArray(dans) && dans.every((d)=>d instanceof UniDM)) return new UniPool([
957
- ...this.dans,
958
- ...dans
959
- ], this.options, this.info);
960
- return this;
961
- }
962
- split(key) {
963
- if (this.shared[key]) return [
964
- this
965
- ];
966
- const set = new Set(this.dans.map((d)=>d[key]));
967
- return [
968
- ...set
969
- ].map((v)=>new UniPool(this.dans.filter((d)=>d[key] === v), {
970
- ...this.options,
971
- dedupe: false
972
- }, this.info));
973
- }
974
- dedupe() {
975
- if (false !== this.options.dmid) {
976
- const map = new Map();
977
- this.dans.forEach((d)=>map.set(d.DMID || d.toDMID(), d));
978
- this.dans = [
979
- ...map.values()
980
- ];
981
- }
982
- this.options.dedupe = false;
983
- }
984
- merge(lifetime = 0) {
985
- if (!this.shared.SOID) {
986
- console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
987
- return this;
988
- }
989
- if (lifetime <= 0) return this;
990
- const mergeContext = this.dans.reduce(([result, cache, mergeObj], danmaku)=>{
991
- const key = [
992
- 'content',
993
- 'mode',
994
- 'pool',
995
- 'platform'
996
- ].map((k)=>danmaku[k]).join('|');
997
- const cached = cache[key];
998
- const lastAppearTime = cached?.progress || 0;
999
- if (cached && danmaku.progress - lastAppearTime <= lifetime && danmaku.isSameAs(cached, {
1000
- skipDanuniMerge: true
1001
- })) {
1002
- const senders = mergeObj[key].senders;
1003
- senders.push(danmaku.senderID);
1004
- const extra = danmaku.extra;
1005
- extra.danuni = extra.danuni || {};
1006
- extra.danuni.merge = {
1007
- count: senders.length,
1008
- duration: Number.parseFloat((danmaku.progress - cached.progress).toFixed(3)),
1009
- senders,
1010
- taolu_count: senders.length,
1011
- taolu_senders: senders
1012
- };
1013
- danmaku.extraStr = src_JSON.stringify(extra);
1014
- cache[key] = danmaku;
1015
- mergeObj[key] = extra.danuni.merge;
1016
- return [
1017
- result,
1018
- cache,
1019
- mergeObj
1020
- ];
1021
- }
1022
- {
1023
- mergeObj[key] = {
1024
- count: 1,
1025
- duration: 0,
1026
- senders: [
1027
- danmaku.senderID
1028
- ],
1029
- taolu_count: 1,
1030
- taolu_senders: [
1031
- danmaku.senderID
1032
- ]
1033
- };
1034
- cache[key] = danmaku;
1035
- const extra = danmaku.extra;
1036
- extra.danuni = extra.danuni || {};
1037
- extra.danuni.merge = mergeObj[key];
1038
- danmaku.extraStr = src_JSON.stringify(extra);
1039
- result.push(danmaku);
1040
- return [
1041
- result,
1042
- cache,
1043
- mergeObj
1044
- ];
1045
- }
1046
- }, [
1047
- [],
1048
- {},
1049
- {}
1050
- ]);
1051
- const [result, _cache, mergeObj] = mergeContext;
1052
- result.forEach((danmaku, i)=>{
1053
- const key = [
1054
- 'content',
1055
- 'mode',
1056
- 'platform',
1057
- 'pool'
1058
- ].map((k)=>danmaku[k]).join('|');
1059
- const extra = result[i].extra;
1060
- const mergeData = mergeObj[key];
1061
- result[i].extraStr = src_JSON.stringify({
1062
- ...extra,
1063
- danuni: {
1064
- ...extra.danuni,
1065
- merge: mergeData
1066
- }
1067
- });
1068
- if (mergeData?.count) if (mergeData.count <= 1) {
1069
- const updatedExtra = {
1070
- ...extra
1071
- };
1072
- if (updatedExtra.danuni) {
1073
- delete updatedExtra.danuni.merge;
1074
- if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
1075
- }
1076
- result[i].extraStr = Object.keys(updatedExtra).length > 0 ? src_JSON.stringify(updatedExtra) : void 0;
1077
- } else {
1078
- result[i].senderID = 'merge[bot]@dan-any';
1079
- result[i].attr ? result[i].attr.push(dm_gen_DMAttr.Protect) : result[i].attr = [
1080
- dm_gen_DMAttr.Protect
1081
- ];
1082
- }
1083
- });
1084
- return new UniPool(result, this.options, this.info);
1085
- }
1086
- minify() {
1087
- return this.dans.map((d)=>d.minify());
1088
- }
1089
- static import(file, options, mod) {
1090
- if (!mod) mod = [
1091
- 'json',
1092
- 'str',
1093
- 'bin'
1094
- ];
1095
- const err = '无法识别该文件,请手动指定格式!';
1096
- const parseJSON = (json)=>{
1097
- try {
1098
- if (Array.isArray(json) && json.every((d)=>d.SOID)) return {
1099
- pool: new UniPool(json, options),
1100
- fmt: 'danuni.json'
1101
- };
1102
- if (json.danmuku && json.danmuku.every((d)=>d.text)) return {
1103
- pool: this.fromArtplayer(json, json.danuni?.data ?? '', void 0, options),
1104
- fmt: 'artplayer.json'
1105
- };
1106
- if (json.count && json.comments && json.comments.every((d)=>d.m)) return {
1107
- pool: this.fromDDPlay(json, json.danuni?.data ?? '', options),
1108
- fmt: 'ddplay.json'
1109
- };
1110
- else if (0 == json.code && json.data && Array.isArray(json.data) && json.data.every((d)=>Array.isArray(d))) return {
1111
- pool: this.fromDplayer(json, json.danuni?.data ?? '', void 0, options),
1112
- fmt: 'dplayer.json'
1113
- };
1114
- else if (0 == json.code && '0' == json.message && json.data && json.data.page && json.data.result && Array.isArray(json.data.result) && json.data.result.every((d)=>d.id && d.oid)) return {
1115
- pool: this.fromBiliUp(json, options),
1116
- fmt: 'bili.up.json'
1117
- };
1118
- } catch {}
1119
- };
1120
- const parseStr = (file)=>{
1121
- if (mod.includes('json')) try {
1122
- if (isJSON(file)) {
1123
- const json = src_JSON.parse(file);
1124
- return parseJSON(json);
1125
- }
1126
- } catch {}
1127
- if (mod.includes('str')) {
1128
- try {
1129
- const xmlParser = new XMLParser({
1130
- ignoreAttributes: false
1131
- });
1132
- const xml = xmlParser.parse(file);
1133
- if (xml?.i?.d) return {
1134
- pool: this.fromBiliXML(file, options),
1135
- fmt: 'bili.xml'
1136
- };
1137
- } catch {}
1138
- try {
1139
- return {
1140
- pool: this.fromASS(file, options),
1141
- fmt: 'common.ass'
1142
- };
1143
- } catch {}
1144
- }
1145
- };
1146
- let errmesg;
1147
- if (isObject(file)) {
1148
- if (file instanceof ArrayBuffer || file instanceof Uint8Array) {
1149
- if (mod.includes('bin')) {
1150
- try {
1151
- return {
1152
- pool: this.fromPb(file),
1153
- fmt: 'danuni.pb.bin'
1154
- };
1155
- } catch {}
1156
- try {
1157
- return {
1158
- pool: this.fromBiliGrpc(file),
1159
- fmt: 'bili.pb.bin'
1160
- };
1161
- } catch {}
1162
- try {
1163
- return {
1164
- pool: this.fromBiliCommandGrpc(file),
1165
- fmt: 'bili.cmd.pb.bin'
1166
- };
1167
- } catch {}
1168
- }
1169
- try {
1170
- const fileStr = new TextDecoder().decode(file);
1171
- const prStr = parseStr(fileStr);
1172
- if (prStr) return prStr;
1173
- errmesg = `${err}(定位: bin->string)`;
1174
- } catch {}
1175
- } else if (mod.includes('json')) {
1176
- const prJSON = parseJSON(file);
1177
- if (!prJSON) throw new Error(`${err}(定位: json)`);
1178
- return prJSON;
1179
- }
1180
- } else if (isString(file)) {
1181
- const prStr = parseStr(file);
1182
- if (!prStr) throw new Error(`${err}(定位: string)`);
1183
- return prStr;
1184
- }
1185
- throw new Error(errmesg ?? err);
1186
- }
1187
- convert2(format, continue_on_error = false) {
1188
- switch(format){
1189
- case 'danuni.json':
1190
- return this.dans;
1191
- case 'danuni.pb.bin':
1192
- return this.toPb();
1193
- case 'bili.xml':
1194
- return this.toBiliXML();
1195
- case 'dplayer.json':
1196
- return this.toDplayer();
1197
- case 'artplayer.json':
1198
- return this.toArtplayer();
1199
- case 'ddplay.json':
1200
- return this.toDDplay();
1201
- default:
1202
- {
1203
- const message = '(err) Unknown format or unsupported now!';
1204
- if (continue_on_error) return message;
1205
- throw new Error(message);
1206
- }
1207
- }
1208
- }
1209
- static fromPb(bin, options) {
1210
- const data = fromBinary(DanmakuReplySchema, new Uint8Array(bin));
1211
- return new UniPool(data.danmakus.map((d)=>UniDM.create({
1212
- ...d,
1213
- progress: d.progress / 1000,
1214
- mode: d.mode,
1215
- ctime: timestampDate(d.ctime || timestampNow()),
1216
- pool: d.pool,
1217
- attr: d.attr,
1218
- extra: void 0,
1219
- extraStr: d.extra
1220
- }, options)), options);
1221
- }
1222
- toPb() {
1223
- return toBinary(DanmakuReplySchema, create(DanmakuReplySchema, {
1224
- danmakus: this.dans.map((d)=>({
1225
- SOID: d.SOID,
1226
- DMID: d.DMID,
1227
- progress: Math.round(1000 * d.progress),
1228
- mode: d.mode,
1229
- fontsize: d.fontsize,
1230
- color: d.color,
1231
- senderID: d.senderID,
1232
- content: d.content,
1233
- ctime: timestampFromDate(d.ctime),
1234
- weight: d.weight,
1235
- pool: d.pool,
1236
- attr: d.attr,
1237
- platform: d.platform,
1238
- extra: d.extraStr
1239
- }))
1240
- }));
1241
- }
1242
- static fromBiliXML(xml, options) {
1243
- const parser = new XMLParser({
1244
- ignoreAttributes: false
1245
- });
1246
- const oriData = parser.parse(xml);
1247
- const dans = oriData.i.d;
1248
- const fromConverted = !!oriData.i.danuni;
1249
- const cid = BigInt(oriData.i.chatid);
1250
- return new UniPool(dans.map((d)=>UniDM.fromBili(UniDM.parseBiliSingle(d['@_p'], d['#text']), cid, options, fromConverted ? oriData.i.danuni?.data : void 0)).filter((d)=>null !== d), options, {
1251
- fromConverted
1252
- });
1253
- }
1254
- toBiliXML(options) {
1255
- const genCID = (id)=>{
1256
- const UniID = id_gen_UniID.fromString(id);
1257
- if (UniID.domain === platform_PlatformVideoSource.Bilibili) {
1258
- const cid = UniID.id.replaceAll(`def_${platform_PlatformVideoSource.Bilibili}+`, '');
1259
- if (cid) return cid;
1260
- }
1261
- return !options?.cid || id;
1262
- };
1263
- if (options?.avoidSenderIDWithAt) {
1264
- const ok = this.dans.every((d)=>d.senderID.endsWith(`@${platform_PlatformVideoSource.Bilibili}`));
1265
- if (!ok) throw new Error('存在其他来源的senderID,请关闭该功能再试!');
1266
- }
1267
- const builder = new XMLBuilder({
1268
- ignoreAttributes: false
1269
- });
1270
- return builder.build({
1271
- '?xml': {
1272
- '@_version': '1.0',
1273
- '@_encoding': 'UTF-8'
1274
- },
1275
- i: {
1276
- chatserver: 'chat.bilibili.com',
1277
- chatid: genCID(this.dans[0].SOID),
1278
- mission: 0,
1279
- maxlimit: this.dans.length,
1280
- state: 0,
1281
- real_name: 0,
1282
- source: 'k-v',
1283
- danuni: {
1284
- ...DanUniConvertTipTemplate,
1285
- data: this.shared.SOID
1286
- },
1287
- d: this.dans.map((dan)=>dan.toBiliXML(options))
1288
- }
1289
- });
1290
- }
1291
- static fromBiliGrpc(bin, options) {
1292
- const data = fromBinary(DmSegMobileReplySchema, new Uint8Array(bin));
1293
- const json = data.elems;
1294
- return new UniPool(json.map((d)=>UniDM.fromBili({
1295
- ...d,
1296
- progress: d.progress / 1000
1297
- }, d.oid, options)), options);
1298
- }
1299
- static fromBiliCommandGrpc(bin, options) {
1300
- const data = fromBinary(DmWebViewReplySchema, new Uint8Array(bin));
1301
- const json = data.commandDms;
1302
- return new UniPool(json.map((d)=>UniDM.fromBiliCommand(d, d.oid, options)), options);
1303
- }
1304
- static fromBiliUp(json, options) {
1305
- return new UniPool(json.data.result.map((d)=>{
1306
- const attrBin = d.attrs ? d.attrs.split(',').map(Number).reduce((bin, bitPosition)=>bin | 1 << bitPosition - 1, 0) : 0;
1307
- return UniDM.fromBili({
1308
- id: BigInt(d.id_str || d.id),
1309
- progress: d.progress / 1000,
1310
- mode: d.mode,
1311
- fontsize: d.fontsize,
1312
- color: Number.parseInt(d.color, 16),
1313
- mid: d.mid,
1314
- midHash: d.mid_hash,
1315
- content: d.msg,
1316
- ctime: BigInt(d.ctime),
1317
- pool: d.pool,
1318
- attr: attrBin,
1319
- oid: BigInt(d.oid)
1320
- }, BigInt(d.oid), options);
1321
- }), options);
1322
- }
1323
- static fromDplayer(json, playerID, domain = 'other', options) {
1324
- return new UniPool(json.data.map((d)=>UniDM.fromDplayer({
1325
- content: d[4],
1326
- progress: d[0],
1327
- mode: d[1],
1328
- color: d[2],
1329
- midHash: d[3]
1330
- }, playerID, domain, options)), options, {
1331
- fromConverted: !!json.danuni
1332
- });
1333
- }
1334
- toDplayer() {
1335
- return {
1336
- code: 0,
1337
- danuni: {
1338
- ...DanUniConvertTipTemplate,
1339
- data: this.dans[0].SOID.split('@')[0]
1340
- },
1341
- data: this.dans.map((dan)=>{
1342
- const d = dan.toDplayer();
1343
- return [
1344
- d.progress,
1345
- d.mode,
1346
- d.color,
1347
- d.midHash,
1348
- d.content
1349
- ];
1350
- })
1351
- };
1352
- }
1353
- static fromArtplayer(json, playerID, domain = 'other', options) {
1354
- return new UniPool(json.danmuku.map((d)=>UniDM.fromArtplayer({
1355
- content: d.text,
1356
- progress: d.time || 0,
1357
- mode: d.mode || 0,
1358
- color: Number((d.color || 'FFFFFF').replace('#', '0x')),
1359
- style: d.style
1360
- }, playerID, domain, options)), options, {
1361
- fromConverted: !!json.danuni
1362
- });
1363
- }
1364
- toArtplayer() {
1365
- return {
1366
- danuni: {
1367
- ...DanUniConvertTipTemplate,
1368
- data: this.dans[0].SOID.split('@')[0]
1369
- },
1370
- danmuku: this.dans.map((dan)=>{
1371
- const d = dan.toArtplayer();
1372
- return {
1373
- text: d.content,
1374
- time: d.progress,
1375
- mode: d.mode,
1376
- color: `#${d.color.toString(16).toUpperCase() || 'FFFFFF'}`,
1377
- border: d.border,
1378
- style: d.style
1379
- };
1380
- })
1381
- };
1382
- }
1383
- static fromDDPlay(json, episodeId, options) {
1384
- return new UniPool(json.comments.map((d)=>{
1385
- const p_arr = d.p.split(',');
1386
- return UniDM.fromDDplay({
1387
- cid: d.cid,
1388
- color: Number.parseInt(p_arr[2]),
1389
- m: d.m,
1390
- mode: Number.parseInt(p_arr[1]),
1391
- progress: Number.parseFloat(p_arr[0]),
1392
- uid: p_arr[3]
1393
- }, episodeId, void 0, options);
1394
- }), options, {
1395
- fromConverted: !!json.danuni
1396
- });
1397
- }
1398
- toDDplay() {
1399
- const episodeId = this.dans[0].SOID.split('@')[0].replaceAll(`def_${platform_PlatformDanmakuOnlySource.DanDanPlay}+`, '');
1400
- return {
1401
- danuni: {
1402
- ...DanUniConvertTipTemplate,
1403
- data: episodeId
1404
- },
1405
- count: this.dans.length,
1406
- comments: this.dans.map((dan)=>{
1407
- const d = dan.toDDplay();
1408
- return {
1409
- cid: d.cid,
1410
- p: `${d.progress},${d.mode},${d.color},${d.uid}`,
1411
- m: d.m
1412
- };
1413
- })
1414
- };
1415
- }
1416
- static fromASS(ass, options) {
1417
- return parseAssRawField(ass, options);
1418
- }
1419
- toASS(canvasCtx, options) {
1420
- const defaultOptions = {
1421
- substyle: {}
1422
- };
1423
- const finalOptions = options ?? defaultOptions;
1424
- const fn = this.shared.SOID;
1425
- return generateASS(this, {
1426
- filename: fn,
1427
- title: fn,
1428
- ...finalOptions
1429
- }, canvasCtx);
1430
- }
1431
- }
1432
- const color_pad = (s)=>s.length < 2 ? `0${s}` : s;
1433
- const decimalToHex = (n)=>color_pad(n.toString(16));
1434
- const isDarkColor = ({ r, g, b })=>0.299 * r + 0.587 * g + 0.114 * b < 0x30;
1435
- const WHITE = {
1436
- r: 255,
1437
- g: 255,
1438
- b: 255
1439
- };
1440
- const BLACK = {
1441
- r: 0,
1442
- g: 0,
1443
- b: 0
1444
- };
1445
- const hexColorToRGB = (hex)=>{
1446
- if (0 === hex.indexOf('#')) hex = hex.slice(1);
1447
- const [r, g, b] = 3 === hex.length ? hex.split('').map((c)=>c + c) : hex.match(/../g) || [];
1448
- return {
1449
- r: Number.parseInt(r, 16),
1450
- g: Number.parseInt(g, 16),
1451
- b: Number.parseInt(b, 16)
1452
- };
1453
- };
1454
- const formatColor = ({ r, g, b }, opacity)=>{
1455
- const color = [
1456
- b,
1457
- g,
1458
- r
1459
- ];
1460
- if (void 0 !== opacity) {
1461
- const alpha = Math.round((1 - opacity) * 255);
1462
- color.unshift(alpha);
697
+ this.senderID = id_gen_UniID.fromNull().toString();
698
+ this.content = '';
699
+ this.ctime = new Date();
700
+ this.weight = 0;
701
+ this.pool = 0;
702
+ this.attr = [];
703
+ this.options = {
704
+ dmid: createDMID
705
+ };
1463
706
  }
1464
- return `&H${color.map(decimalToHex).join('').toUpperCase()}`;
1465
- };
1466
- const getDecoratingColor = (color)=>isDarkColor(color) ? WHITE : BLACK;
1467
- const isWhite = (color)=>255 === color.r && 255 === color.g && 255 === color.b;
707
+ }
708
+ _ts_decorate([
709
+ IsEmail({
710
+ require_tld: false
711
+ }),
712
+ IsString(),
713
+ IsNotEmpty(),
714
+ Expose(),
715
+ _ts_metadata("design:type", String)
716
+ ], UniDM.prototype, "SOID", void 0);
717
+ _ts_decorate([
718
+ Min(0),
719
+ IsNumber(),
720
+ IsNotEmpty(),
721
+ Expose(),
722
+ _ts_metadata("design:type", Number)
723
+ ], UniDM.prototype, "progress", void 0);
724
+ _ts_decorate([
725
+ IsEnum(dm_gen_Modes),
726
+ IsNotEmpty(),
727
+ Expose(),
728
+ _ts_metadata("design:type", Number)
729
+ ], UniDM.prototype, "mode", void 0);
730
+ _ts_decorate([
731
+ Max(64),
732
+ Min(12),
733
+ IsNumber(),
734
+ IsNotEmpty(),
735
+ Expose(),
736
+ _ts_metadata("design:type", Number)
737
+ ], UniDM.prototype, "fontsize", void 0);
738
+ _ts_decorate([
739
+ IsNumber(),
740
+ IsNotEmpty(),
741
+ Expose(),
742
+ _ts_metadata("design:type", Number)
743
+ ], UniDM.prototype, "color", void 0);
744
+ _ts_decorate([
745
+ IsEmail({
746
+ require_tld: false
747
+ }),
748
+ IsString(),
749
+ IsNotEmpty(),
750
+ Expose(),
751
+ _ts_metadata("design:type", String)
752
+ ], UniDM.prototype, "senderID", void 0);
753
+ _ts_decorate([
754
+ IsString(),
755
+ IsNotEmpty(),
756
+ Expose(),
757
+ _ts_metadata("design:type", String)
758
+ ], UniDM.prototype, "content", void 0);
759
+ _ts_decorate([
760
+ IsDate(),
761
+ IsNotEmpty(),
762
+ Expose(),
763
+ _ts_metadata("design:type", "u" < typeof Date ? Object : Date)
764
+ ], UniDM.prototype, "ctime", void 0);
765
+ _ts_decorate([
766
+ Max(11),
767
+ Min(0),
768
+ IsInt(),
769
+ IsNotEmpty(),
770
+ Expose(),
771
+ _ts_metadata("design:type", Number)
772
+ ], UniDM.prototype, "weight", void 0);
773
+ _ts_decorate([
774
+ IsEnum(dm_gen_Pools),
775
+ IsNotEmpty(),
776
+ Expose(),
777
+ _ts_metadata("design:type", Number)
778
+ ], UniDM.prototype, "pool", void 0);
779
+ _ts_decorate([
780
+ IsEnum(dm_gen_DMAttr, {
781
+ each: true
782
+ }),
783
+ IsNotEmpty(),
784
+ Expose(),
785
+ _ts_metadata("design:type", Array)
786
+ ], UniDM.prototype, "attr", void 0);
787
+ _ts_decorate([
788
+ IsString(),
789
+ IsOptional(),
790
+ Expose(),
791
+ _ts_metadata("design:type", Object)
792
+ ], UniDM.prototype, "platform", void 0);
793
+ _ts_decorate([
794
+ IsString(),
795
+ IsOptional(),
796
+ Expose(),
797
+ _ts_metadata("design:type", String)
798
+ ], UniDM.prototype, "extraStr", void 0);
799
+ _ts_decorate([
800
+ IsString(),
801
+ IsOptional(),
802
+ Expose(),
803
+ _ts_metadata("design:type", String)
804
+ ], UniDM.prototype, "DMID", void 0);
805
+ _ts_decorate([
806
+ Expose(),
807
+ _ts_metadata("design:type", Function),
808
+ _ts_metadata("design:paramtypes", [
809
+ "u" < typeof Options ? Object : Options
810
+ ]),
811
+ _ts_metadata("design:returntype", void 0)
812
+ ], UniDM.prototype, "init", null);
813
+ _ts_decorate([
814
+ Expose(),
815
+ _ts_metadata("design:type", Function),
816
+ _ts_metadata("design:paramtypes", []),
817
+ _ts_metadata("design:returntype", Promise)
818
+ ], UniDM.prototype, "validate", null);
819
+ _ts_decorate([
820
+ Expose(),
821
+ _ts_metadata("design:type", "u" < typeof Extra ? Object : Extra),
822
+ _ts_metadata("design:paramtypes", [])
823
+ ], UniDM.prototype, "extra", null);
824
+ _ts_decorate([
825
+ Expose(),
826
+ _ts_metadata("design:type", void 0),
827
+ _ts_metadata("design:paramtypes", [])
828
+ ], UniDM.prototype, "isFrom3rdPlatform", null);
829
+ _ts_decorate([
830
+ Expose(),
831
+ _ts_metadata("design:type", Function),
832
+ _ts_metadata("design:paramtypes", []),
833
+ _ts_metadata("design:returntype", void 0)
834
+ ], UniDM.prototype, "toDMID", null);
835
+ _ts_decorate([
836
+ Expose(),
837
+ _ts_metadata("design:type", Function),
838
+ _ts_metadata("design:paramtypes", [
839
+ Object,
840
+ Object
841
+ ]),
842
+ _ts_metadata("design:returntype", Boolean)
843
+ ], UniDM.prototype, "isSameAs", null);
844
+ _ts_decorate([
845
+ Expose(),
846
+ _ts_metadata("design:type", Function),
847
+ _ts_metadata("design:paramtypes", []),
848
+ _ts_metadata("design:returntype", void 0)
849
+ ], UniDM.prototype, "minify", null);
850
+ _ts_decorate([
851
+ Expose(),
852
+ _ts_metadata("design:type", Function),
853
+ _ts_metadata("design:paramtypes", [
854
+ Object
855
+ ]),
856
+ _ts_metadata("design:returntype", void 0)
857
+ ], UniDM.prototype, "downgradeAdvcancedDan", null);
858
+ _ts_decorate([
859
+ Expose(),
860
+ _ts_metadata("design:type", Function),
861
+ _ts_metadata("design:paramtypes", [
862
+ Object
863
+ ]),
864
+ _ts_metadata("design:returntype", void 0)
865
+ ], UniDM.prototype, "toBiliXML", null);
866
+ _ts_decorate([
867
+ Expose(),
868
+ _ts_metadata("design:type", Function),
869
+ _ts_metadata("design:paramtypes", []),
870
+ _ts_metadata("design:returntype", "u" < typeof DMDplayer ? Object : DMDplayer)
871
+ ], UniDM.prototype, "toDplayer", null);
872
+ _ts_decorate([
873
+ Expose(),
874
+ _ts_metadata("design:type", Function),
875
+ _ts_metadata("design:paramtypes", []),
876
+ _ts_metadata("design:returntype", "u" < typeof DMArtplayer ? Object : DMArtplayer)
877
+ ], UniDM.prototype, "toArtplayer", null);
878
+ _ts_decorate([
879
+ Expose(),
880
+ _ts_metadata("design:type", Function),
881
+ _ts_metadata("design:paramtypes", []),
882
+ _ts_metadata("design:returntype", "u" < typeof DMDDplay ? Object : DMDDplay)
883
+ ], UniDM.prototype, "toDDplay", null);
1468
884
  const DanmakuType = {
1469
885
  SCROLL: 1,
1470
886
  BOTTOM: 2,
@@ -1630,10 +1046,10 @@ const formatTime = (seconds)=>{
1630
1046
  return `${hour}:${pad(minute)}:${pad(second)}.${minorSecond}`;
1631
1047
  };
1632
1048
  const encode = (text)=>text.toString().replaceAll('{', '{').replaceAll('}', '}').replaceAll(/\r|\n/g, '');
1633
- const scrollCommand = ({ start, end, top })=>`\\move(${start},${top},${end},${top})`;
1634
- const fixCommand = ({ top, left })=>`\\an8\\pos(${left},${top})`;
1635
- const colorCommand = (color)=>`\\c${formatColor(color)}`;
1636
- const borderColorCommand = (color)=>`\\3c${formatColor(color)}`;
1049
+ const scrollCommand = ({ start, end, top })=>String.raw`\move(${start},${top},${end},${top})`;
1050
+ const fixCommand = ({ top, left })=>String.raw`\an8\pos(${left},${top})`;
1051
+ const colorCommand = (color)=>String.raw`\c${formatColor(color)}`;
1052
+ const borderColorCommand = (color)=>String.raw`\3c${formatColor(color)}`;
1637
1053
  const dialogue = (danmaku, config)=>{
1638
1054
  const { fontSizeType, content, time } = danmaku;
1639
1055
  const { scrollTime, fixTime } = config;
@@ -1874,14 +1290,21 @@ function parseAssRawField(ass, options) {
1874
1290
  if (raw) return DanmakuList2UniPool(raw.list, options);
1875
1291
  return UniPool.create();
1876
1292
  }
1877
- const src_JSON_0 = json_bigint({
1293
+ const file_bili_dm = /*@__PURE__*/ fileDesc("Cg1iaWxpL2RtLnByb3RvEiBiaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MSJkCgZBdmF0YXISCgoCaWQYASABKAkSCwoDdXJsGAIgASgJEkEKC2F2YXRhcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyVHlwZSIjCgZCdWJibGUSDAoEdGV4dBgBIAEoCRILCgN1cmwYAiABKAkixgEKCEJ1YmJsZVYyEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJEkEKC2J1YmJsZV90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlVHlwZRIVCg1leHBvc3VyZV9vbmNlGAQgASgIEkUKDWV4cG9zdXJlX3R5cGUYBSABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiWwoGQnV0dG9uEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUiWAoOQnV6endvcmRDb25maWcSRgoIa2V5d29yZHMYASADKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZFNob3dDb25maWcieAoSQnV6endvcmRTaG93Q29uZmlnEgwKBG5hbWUYASABKAkSDgoGc2NoZW1hGAIgASgJEg4KBnNvdXJjZRgDIAEoBRIKCgJpZBgEIAEoAxITCgtidXp6d29yZF9pZBgFIAEoAxITCgtzY2hlbWFfdHlwZRgGIAEoBSJ7CghDaGVja0JveBIMCgR0ZXh0GAEgASgJEjwKBHR5cGUYAiABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja2JveFR5cGUSFQoNZGVmYXVsdF92YWx1ZRgDIAEoCBIMCgRzaG93GAQgASgIIm8KCkNoZWNrQm94VjISDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgiggIKC0NsaWNrQnV0dG9uEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSDAoEc2hvdxgGIAEoCBI4CgZidWJibGUYByABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGUiswIKDUNsaWNrQnV0dG9uVjISFQoNcG9ydHJhaXRfdGV4dBgBIAMoCRIWCg5sYW5kc2NhcGVfdGV4dBgCIAMoCRIbChNwb3J0cmFpdF90ZXh0X2ZvY3VzGAMgAygJEhwKFGxhbmRzY2FwZV90ZXh0X2ZvY3VzGAQgAygJEkEKC3JlbmRlcl90eXBlGAUgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIXCg90ZXh0X2lucHV0X3Bvc3QYBiABKAgSFQoNZXhwb3N1cmVfb25jZRgHIAEoCBJFCg1leHBvc3VyZV90eXBlGAggASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIksKB0NvbW1hbmQSQAoLY29tbWFuZF9kbXMYASADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0i5gEKCUNvbW1hbmREbRIKCgJpZBgBIAEoAxILCgNvaWQYAiABKAMSCwoDbWlkGAMgASgDEg8KB2NvbW1hbmQYBCABKAkSDwoHY29udGVudBgFIAEoCRIQCghwcm9ncmVzcxgGIAEoBRINCgVjdGltZRgHIAEoCRINCgVtdGltZRgIIAEoCRINCgVleHRyYRgJIAEoCRINCgVpZFN0chgKIAEoCRIMCgR0eXBlGAsgASgFEhMKC2F1dG9fY3JlYXRlGAwgASgIEhIKCmNvdW50X2Rvd24YDSABKAUSDAoEYXR0chgOIAEoBSJQCg1EYW5tYWt1QUlGbGFnEj8KCGRtX2ZsYWdzGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWciiwMKC0Rhbm1ha3VFbGVtEgoKAmlkGAEgASgDEhAKCHByb2dyZXNzGAIgASgFEgwKBG1vZGUYAyABKAUSEAoIZm9udHNpemUYBCABKAUSPwoFY29sb3IYBSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIQCghtaWRfaGFzaBgGIAEoCRIPCgdjb250ZW50GAcgASgJEg0KBWN0aW1lGAggASgDEg4KBndlaWdodBgJIAEoBRIOCgZhY3Rpb24YCiABKAkSDAoEcG9vbBgLIAEoBRIOCgZpZF9zdHIYDCABKAkSDAoEYXR0chgNIAEoBRIRCglhbmltYXRpb24YFiABKAkSDQoFZXh0cmEYFyABKAkSQgoIY29sb3JmdWwYGCABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIMCgR0eXBlGBkgASgFEgsKA29pZBgaIAEoAyIpCgtEYW5tYWt1RmxhZxIMCgRkbWlkGAEgASgDEgwKBGZsYWcYAiABKAUiSwoRRGFubWFrdUZsYWdDb25maWcSEAoIcmVjX2ZsYWcYASABKAUSEAoIcmVjX3RleHQYAiABKAkSEgoKcmVjX3N3aXRjaBgDIAEoBSKLBwoYRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnEikKIXBsYXllcl9kYW5tYWt1X3VzZV9kZWZhdWx0X2NvbmZpZxgBIAEoCBIsCiRwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9zd2l0Y2gYBCABKAgSKwojcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWwYBSABKAUSHwoXcGxheWVyX2Rhbm1ha3VfYmxvY2t0b3AYBiABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tzY3JvbGwYByABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tib3R0b20YCCABKAgSJAoccGxheWVyX2Rhbm1ha3VfYmxvY2tjb2xvcmZ1bBgJIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3JlcGVhdBgKIAEoCBIjChtwbGF5ZXJfZGFubWFrdV9ibG9ja3NwZWNpYWwYCyABKAgSHgoWcGxheWVyX2Rhbm1ha3Vfb3BhY2l0eRgMIAEoAhIkChxwbGF5ZXJfZGFubWFrdV9zY2FsaW5nZmFjdG9yGA0gASgCEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAhIcChRwbGF5ZXJfZGFubWFrdV9zcGVlZBgPIAEoBRIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBAgASgIEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgRIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgSIAEoBRKYAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBMgAygLMmQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EiUKHXBsYXllcl9kYW5tYWt1X2VuYWJsZV9oZXJkX2RtGBQgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi7AkKEURhbm11UGxheWVyQ29uZmlnEh0KFXBsYXllcl9kYW5tYWt1X3N3aXRjaBgBIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9zd2l0Y2hfc2F2ZRgCIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYAyABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJgoecGxheWVyX2Rhbm1ha3VfZW5hYmxlYmxvY2tsaXN0GBAgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9zd2l0Y2gYESABKAgSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X2NvbmZpZxgSIAEoBRImCh5wbGF5ZXJfZGFubWFrdV9pb3Nfc3dpdGNoX3NhdmUYEyABKAUSKQohcGxheWVyX2Rhbm1ha3Vfc2VuaW9yX21vZGVfc3dpdGNoGBQgASgFEi4KJnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBUgASgFEpEBCipwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92Ml9tYXAYFiADKAsyXS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgXIAEoCBImCh5wbGF5ZXJfZGFubWFrdV9ibG9ja3RvcF9ib3R0b20YGCABKAgSIAoYcGxheWVyX2Rhbm1ha3VfZG9tYWluX3YyGBkgASgFEh4KFnBsYXllcl9kYW5tYWt1X2RlbnNpdHkYGiABKAUSJQodcGxheWVyX2Rhbm1ha3Vfc3VidGl0bGVfcHJvb2YYGyABKAgSIwobcGxheWVyX2Rhbm1ha3VfcGVvcGxlX3Byb29mGBwgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEiMAoWRGFubXVQbGF5ZXJDb25maWdQYW5lbBIWCg5zZWxlY3Rpb25fdGV4dBgBIAEoCSJLChhEYW5tdVBsYXllckR5bmFtaWNDb25maWcSEAoIcHJvZ3Jlc3MYASABKAUSHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCIpADChVEYW5tdVBsYXllclZpZXdDb25maWcSYQodZGFubXVrdV9kZWZhdWx0X3BsYXllcl9jb25maWcYASABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdURlZmF1bHRQbGF5ZXJDb25maWcSUgoVZGFubXVrdV9wbGF5ZXJfY29uZmlnGAIgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcSYQodZGFubXVrdV9wbGF5ZXJfZHluYW1pY19jb25maWcYAyADKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckR5bmFtaWNDb25maWcSXQobZGFubXVrdV9wbGF5ZXJfY29uZmlnX3BhbmVsGAQgASgLMjguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWdQYW5lbCKZBQoURGFubXVXZWJQbGF5ZXJDb25maWcSEQoJZG1fc3dpdGNoGAEgASgIEhEKCWFpX3N3aXRjaBgCIAEoCBIQCghhaV9sZXZlbBgDIAEoBRIQCghibG9ja3RvcBgEIAEoCBITCgtibG9ja3Njcm9sbBgFIAEoCBITCgtibG9ja2JvdHRvbRgGIAEoCBISCgpibG9ja2NvbG9yGAcgASgIEhQKDGJsb2Nrc3BlY2lhbBgIIAEoCBIUCgxwcmV2ZW50c2hhZGUYCSABKAgSDQoFZG1hc2sYCiABKAgSDwoHb3BhY2l0eRgLIAEoAhIOCgZkbWFyZWEYDCABKAUSEQoJc3BlZWRwbHVzGA0gASgCEhAKCGZvbnRzaXplGA4gASgCEhIKCnNjcmVlbnN5bmMYDyABKAgSEQoJc3BlZWRzeW5jGBAgASgIEhIKCmZvbnRmYW1pbHkYESABKAkSDAoEYm9sZBgSIAEoCBISCgpmb250Ym9yZGVyGBMgASgFEhEKCWRyYXdfdHlwZRgUIAEoCRIaChJzZW5pb3JfbW9kZV9zd2l0Y2gYFSABKAUSEwoLYWlfbGV2ZWxfdjIYFiABKAUSYQoPYWlfbGV2ZWxfdjJfbWFwGBcgAygLMkguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcuQWlMZXZlbFYyTWFwRW50cnkSFwoPYmxvY2t0b3BfYm90dG9tGBggASgIEhIKCmRtX2FyZWFfdjIYGSABKAUSEgoKZG1fZGVuc2l0eRgaIAEoBRozChFBaUxldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIlkKCkRtQ29sb3JmdWwSPgoEdHlwZRgBIAEoDjIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWxUeXBlEgsKA3NyYxgCIAEoCSJQCg9EbUV4cG9SZXBvcnRSZXESEgoKc2Vzc2lvbl9pZBgBIAEoCRILCgNvaWQYAiABKAMSDQoFZG1pZHMYAyABKAwSDQoFc3BtaWQYBCABKAkiEQoPRG1FeHBvUmVwb3J0UmVzIm0KCkRtSGVyZFZpZXcSGwoTZGlzcGxheV9oZXJkX2RtX251bRgBIAEoBRJCCghoZXJkX2RtcxgCIAMoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlZpZXdIZXJkRG1FbGVtIpYCCgpEbU1hc2tXYWxsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIPCgdjb250ZW50GAMgASgJEk0KDGNvbnRlbnRfdHlwZRgEIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRJFCghiaXpfdHlwZRgFIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxCaXpUeXBlEkUKCGNvbnRlbnRzGAYgAygLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbENvbnRlbnQiawoRRG1NYXNrV2FsbENvbnRlbnQSRQoEdHlwZRgBIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRIPCgdjb250ZW50GAIgASgJIs0QChFEbVBsYXllckNvbmZpZ1JlcRIKCgJ0cxgBIAEoAxJFCgZzd2l0Y2gYAiABKAsyNS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3dpdGNoEk4KC3N3aXRjaF9zYXZlGAMgASgLMjkuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaFNhdmUSWwoSdXNlX2RlZmF1bHRfY29uZmlnGAQgASgLMj8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVVzZURlZmF1bHRDb25maWcSYQoVYWlfcmVjb21tZW5kZWRfc3dpdGNoGAUgASgLMkIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSXwoUYWlfcmVjb21tZW5kZWRfbGV2ZWwYBiABKAsyQS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEkkKCGJsb2NrdG9wGAcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wEk8KC2Jsb2Nrc2Nyb2xsGAggASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc2Nyb2xsEk8KC2Jsb2NrYm90dG9tGAkgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrYm90dG9tElMKDWJsb2NrY29sb3JmdWwYCiABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tjb2xvcmZ1bBJPCgtibG9ja3JlcGVhdBgLIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBJRCgxibG9ja3NwZWNpYWwYDCABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEkcKB29wYWNpdHkYDSABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1T3BhY2l0eRJTCg1zY2FsaW5nZmFjdG9yGA4gASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISRQoGZG9tYWluGA8gASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpbhJDCgVzcGVlZBgQIAEoCzI0LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTcGVlZBJXCg9lbmFibGVibG9ja2xpc3QYESABKAsyPi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0El4KGWlubGluZVBsYXllckRhbm1ha3VTd2l0Y2gYEiABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5JbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoElsKEnNlbmlvcl9tb2RlX3N3aXRjaBgTIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTZW5pb3JNb2RlU3dpdGNoEmQKF2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBQgASgLMkMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyElMKDmVuYWJsZV9oZXJkX2RtGBUgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRJWCg9ibG9ja3RvcF9ib3R0b20YFiABKAsyPS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SSgoJZG9tYWluX3YyGBcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpblYyEkcKB2RlbnNpdHkYGCABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RGVuc2l0eRJUCg5zdWJ0aXRsZV9wcm9vZhgZIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mElAKDHBlb3BsZV9wcm9vZhgaIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VQZW9wbGVQcm9vZiIvCgtEbVNlZ0NvbmZpZxIRCglwYWdlX3NpemUYASABKAMSDQoFdG90YWwYAiABKAMikQIKEERtU2VnTW9iaWxlUmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBRJACgdhaV9mbGFnGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUFJRmxhZxIVCg1zZWdtZW50X3J1bGVzGAQgAygDEkIKDGNvbG9yZnVsX3NyYxgFIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWwSEwoLY29udGV4dF9zcmMYBiABKAkiygEKDkRtU2VnTW9iaWxlUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDEhYKDnRlZW5hZ2Vyc19tb2RlGAUgASgFEgoKAnBzGAYgASgDEgoKAnBlGAcgASgDEhEKCXB1bGxfbW9kZRgIIAEoBRISCgpmcm9tX3NjZW5lGAkgASgFEg0KBXNwbWlkGAogASgJEhMKC2NvbnRleHRfZXh0GAsgASgJIlwKDURtU2VnT3R0UmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBSJMCgtEbVNlZ090dFJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJdCg1EbVNlZ1NES1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI8CgVlbGVtcxgCIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VFbGVtIkwKC0RtU2VnU0RLUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDIncKCURtU3ViVmlldxIMCgR0eXBlGAEgASgFEgsKA29pZBgCIAEoAxILCgNwaWQYAyABKAMSQgoLcG9zdF9wYW5lbDIYBCADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxWMiKhCQoLRG1WaWV3UmVwbHkSDgoGY2xvc2VkGAEgASgIEjkKBG1hc2sYAiABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb01hc2sSQQoIc3VidGl0bGUYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb1N1YnRpdGxlEhMKC3NwZWNpYWxfZG1zGAQgAygJEkQKB2FpX2ZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxJOCg1wbGF5ZXJfY29uZmlnGAYgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJWaWV3Q29uZmlnEhYKDnNlbmRfYm94X3N0eWxlGAcgASgFEg0KBWFsbG93GAggASgIEhEKCWNoZWNrX2JveBgJIAEoCBIaChJjaGVja19ib3hfc2hvd19tc2cYCiABKAkSGAoQdGV4dF9wbGFjZWhvbGRlchgLIAEoCRIZChFpbnB1dF9wbGFjZWhvbGRlchgMIAEoCRIdChVyZXBvcnRfZmlsdGVyX2NvbnRlbnQYDSADKAkSQQoLZXhwb19yZXBvcnQYDiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvUmVwb3J0EkkKD2J1enp3b3JkX2NvbmZpZxgPIAEoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1enp3b3JkQ29uZmlnEkIKC2V4cHJlc3Npb25zGBAgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgRIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGBIgAygJEkIKC3Bvc3RfcGFuZWwyGBMgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISQgoMZG1fbWFza193YWxsGBQgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbBI9CgdkbV9oZXJkGBUgASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1IZXJkVmlldxI6Cgdjb21tYW5kGBYgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZBIKCgJrdhgXIAEoCRI+CglzdWJfdmlld3MYGCADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVN1YlZpZXcSNgoDcW9lGBkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUW9lSW5mbyJtCglEbVZpZXdSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEg0KBXNwbWlkGAQgASgJEhQKDGlzX2hhcmRfYm9vdBgFIAEoBRITCgtjb250ZXh0X2V4dBgGIAEoCSKBBgoORG1XZWJWaWV3UmVwbHkSDQoFc3RhdGUYASABKAUSDAoEdGV4dBgCIAEoCRIRCgl0ZXh0X3NpZGUYAyABKAkSPQoGZG1fc2dlGAQgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdDb25maWcSQQoEZmxhZxgFIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnQ29uZmlnEhMKC3NwZWNpYWxfZG1zGAYgAygJEhEKCWNoZWNrX2JveBgHIAEoCBINCgVjb3VudBgIIAEoAxJACgtjb21tYW5kX2RtcxgJIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmREbRJNCg1wbGF5ZXJfY29uZmlnGAogASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GAsgAygJEkIKC2V4cHJlc3Npb25zGAwgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgNIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGA4gAygJEkIKC3Bvc3RfcGFuZWwyGA8gAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISPgoJc3ViX3ZpZXdzGBAgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgRIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8iKgoKRXhwb1JlcG9ydBIcChRzaG91bGRfcmVwb3J0X2F0X2VuZBgBIAEoCCJkCgpFeHByZXNzaW9uEg8KB2tleXdvcmQYASADKAkSCwoDdXJsGAIgASgJEjgKBnBlcmlvZBgDIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBlcmlvZCJJCgtFeHByZXNzaW9ucxI6CgRkYXRhGAEgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbiIqChlJbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoEg0KBXZhbHVlGAEgASgIIicKBUxhYmVsEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkihwEKB0xhYmVsVjISDQoFdGl0bGUYASABKAkSDwoHY29udGVudBgCIAMoCRIVCg1leHBvc3VyZV9vbmNlGAMgASgIEkUKDWV4cG9zdXJlX3R5cGUYBCABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiJAoGUGVyaW9kEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAyIwCh9QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEg0KBXZhbHVlGAEgASgFIjIKIVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhINCgV2YWx1ZRgBIAEoBSIxCiBQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZFN3aXRjaBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tib3R0b20SDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrcmVwZWF0Eg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBINCgV2YWx1ZRgBIAEoCCIqChlQbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEg0KBXZhbHVlGAEgASgIIiYKFVBsYXllckRhbm1ha3VCbG9ja3RvcBINCgV2YWx1ZRgBIAEoCCIsChtQbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SDQoFdmFsdWUYASABKAgiJQoUUGxheWVyRGFubWFrdURlbnNpdHkSDQoFdmFsdWUYASABKAUiJAoTUGxheWVyRGFubWFrdURvbWFpbhINCgV2YWx1ZRgBIAEoAiImChVQbGF5ZXJEYW5tYWt1RG9tYWluVjISDQoFdmFsdWUYASABKAUiKgoZUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRINCgV2YWx1ZRgBIAEoCCItChxQbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0Eg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VPcGFjaXR5Eg0KBXZhbHVlGAEgASgCIikKGFBsYXllckRhbm1ha3VQZW9wbGVQcm9vZhINCgV2YWx1ZRgBIAEoCCIrChpQbGF5ZXJEYW5tYWt1U2NhbGluZ2ZhY3RvchINCgV2YWx1ZRgBIAEoAiIuCh1QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBINCgV2YWx1ZRgBIAEoBSIjChJQbGF5ZXJEYW5tYWt1U3BlZWQSDQoFdmFsdWUYASABKAUiKwoaUGxheWVyRGFubWFrdVN1YnRpdGxlUHJvb2YSDQoFdmFsdWUYASABKAgiOAoTUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCBISCgpjYW5faWdub3JlGAIgASgIIigKF1BsYXllckRhbm1ha3VTd2l0Y2hTYXZlEg0KBXZhbHVlGAEgASgIIi4KHVBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEg0KBXZhbHVlGAEgASgIIowDCglQb3N0UGFuZWwSDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEhAKCHByaW9yaXR5GAMgASgDEg4KBmJpel9pZBgEIAEoAxJECghiaXpfdHlwZRgFIAEoDjIyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbEJpelR5cGUSQwoMY2xpY2tfYnV0dG9uGAYgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2xpY2tCdXR0b24SPwoKdGV4dF9pbnB1dBgHIAEoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dBI9CgljaGVja19ib3gYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveBI2CgV0b2FzdBgJIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0Iq0ECgtQb3N0UGFuZWxWMhINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSRAoIYml6X3R5cGUYAyABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkUKDGNsaWNrX2J1dHRvbhgEIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uVjISQQoKdGV4dF9pbnB1dBgFIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dFYyEj8KCWNoZWNrX2JveBgGIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrQm94VjISOAoFdG9hc3QYByABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdFYyEjoKBmJ1YmJsZRgIIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVYyEjgKBWxhYmVsGAkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuTGFiZWxWMhJBCgtwb3N0X3N0YXR1cxgKIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMiFwoHUW9lSW5mbxIMCgRpbmZvGAEgASgJIikKCFJlc3BvbnNlEgwKBGNvZGUYASABKAUSDwoHbWVzc2FnZRgCIAEoCSL5AgoMU3VidGl0bGVJdGVtEgoKAmlkGAEgASgDEg4KBmlkX3N0chgCIAEoCRILCgNsYW4YAyABKAkSDwoHbGFuX2RvYxgEIAEoCRIUCgxzdWJ0aXRsZV91cmwYBSABKAkSOgoGYXV0aG9yGAYgASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVXNlckluZm8SPAoEdHlwZRgHIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlVHlwZRIVCg1sYW5fZG9jX2JyaWVmGAggASgJEkEKB2FpX3R5cGUYCSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpVHlwZRJFCglhaV9zdGF0dXMYCiABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpU3RhdHVzIugCCglUZXh0SW5wdXQSHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEgwKBHNob3cYBSABKAgSOAoGYXZhdGFyGAYgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEkEKC3Bvc3Rfc3RhdHVzGAcgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFN0YXR1cxI2CgVsYWJlbBgIIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsIvsBCgtUZXh0SW5wdXRWMhIcChRwb3J0cmFpdF9wbGFjZWhvbGRlchgBIAMoCRIdChVsYW5kc2NhcGVfcGxhY2Vob2xkZXIYAiADKAkSQQoLcmVuZGVyX3R5cGUYAyABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEhgKEHBsYWNlaG9sZGVyX3Bvc3QYBCABKAgSOAoGYXZhdGFyGAUgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEhgKEHRleHRfaW5wdXRfbGltaXQYBiABKAUibwoFVG9hc3QSDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRIMCgRzaG93GAMgASgIEjgKBmJ1dHRvbhgEIAEoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1dHRvbiJiCg1Ub2FzdEJ1dHRvblYyEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUicwoHVG9hc3RWMhIMCgR0ZXh0GAEgASgJEhAKCGR1cmF0aW9uGAIgASgFEkgKD3RvYXN0X2J1dHRvbl92MhgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0QnV0dG9uVjIiXAoIVXNlckluZm8SCwoDbWlkGAEgASgDEgwKBG5hbWUYAiABKAkSCwoDc2V4GAMgASgJEgwKBGZhY2UYBCABKAkSDAoEc2lnbhgFIAEoCRIMCgRyYW5rGAYgASgFIlMKCVZpZGVvTWFzaxILCgNjaWQYASABKAMSDAoEcGxhdBgCIAEoBRILCgNmcHMYAyABKAUSDAoEdGltZRgEIAEoAxIQCghtYXNrX3VybBgFIAEoCSJwCg1WaWRlb1N1YnRpdGxlEgsKA2xhbhgBIAEoCRIPCgdsYW5fZG9jGAIgASgJEkEKCXN1YnRpdGxlcxgDIAMoCzIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlSXRlbSKSAQoOVmlld0hlcmREbUVsZW0SEAoIaGVyZF9tc2cYASABKAkSFgoOaGVyZF9zdGFydF9jbnQYAiABKAUSFAoMaGVyZF9lbmRfY250GAMgASgFEhIKCnJlZ2V4X3J1bGUYBCABKAkSFgoOc3RhcnRfcHJvZ3Jlc3MYBSABKAUSFAoMZW5kX3Byb2dyZXNzGAYgASgFKjMKCkF2YXRhclR5cGUSEgoOQXZhdGFyVHlwZU5vbmUQABIRCg1BdmF0YXJUeXBlTkZUEAEqWQoKQnViYmxlVHlwZRISCg5CdWJibGVUeXBlTm9uZRAAEhkKFUJ1YmJsZVR5cGVDbGlja0J1dHRvbhABEhwKGEJ1YmJsZVR5cGVEbVNldHRpbmdQYW5lbBACKlgKDENoZWNrYm94VHlwZRIUChBDaGVja2JveFR5cGVOb25lEAASGQoVQ2hlY2tib3hUeXBlRW5jb3VyYWdlEAESFwoTQ2hlY2tib3hUeXBlQ29sb3JETRACKjUKDkRtQ29sb3JmdWxUeXBlEgwKCE5vbmVUeXBlEAASFQoPVmlwR3JhZHVhbENvbG9yEOHUAypgChFEbU1hc2tXYWxsQml6VHlwZRILCgdVbmtub3duEAASBwoDT0dWEAESCgoGQml6UGljEAISCAoETXV0ZRADEgoKBlJlY29yZBAEEgkKBUNsb3VkEAUSCAoEQUlHQxAGKnYKFURtTWFza1dhbGxDb250ZW50VHlwZRIgChxEbU1hc2tXYWxsQ29udGVudFR5cGVVbmtub3duEAASHQoZRG1NYXNrV2FsbENvbnRlbnRUeXBlVGV4dBABEhwKGERtTWFza1dhbGxDb250ZW50VHlwZVBpYxACKjwKDEV4cG9zdXJlVHlwZRIUChBFeHBvc3VyZVR5cGVOb25lEAASFgoSRXhwb3N1cmVUeXBlRE1TZW5kEAEqgwIKEFBvc3RQYW5lbEJpelR5cGUSGAoUUG9zdFBhbmVsQml6VHlwZU5vbmUQABIdChlQb3N0UGFuZWxCaXpUeXBlRW5jb3VyYWdlEAESGwoXUG9zdFBhbmVsQml6VHlwZUNvbG9yRE0QAhIZChVQb3N0UGFuZWxCaXpUeXBlTkZURE0QAxIdChlQb3N0UGFuZWxCaXpUeXBlRnJhZ0Nsb3NlEAQSHQoZUG9zdFBhbmVsQml6VHlwZVJlY29tbWVuZBAFEhwKGFBvc3RQYW5lbEJpelR5cGVQbG90TGVhaxAGEiIKHlBvc3RQYW5lbEJpelR5cGVBbnRpSGFyYXNzbWVudBAHKjgKClBvc3RTdGF0dXMSFAoQUG9zdFN0YXR1c05vcm1hbBAAEhQKEFBvc3RTdGF0dXNDbG9zZWQQASpOCgpSZW5kZXJUeXBlEhIKDlJlbmRlclR5cGVOb25lEAASFAoQUmVuZGVyVHlwZVNpbmdsZRABEhYKElJlbmRlclR5cGVSb3RhdGlvbhACKjYKEFN1YnRpdGxlQWlTdGF0dXMSCAoETm9uZRAAEgwKCEV4cG9zdXJlEAESCgoGQXNzaXN0EAIqKwoOU3VidGl0bGVBaVR5cGUSCgoGTm9ybWFsEAASDQoJVHJhbnNsYXRlEAEqHgoMU3VidGl0bGVUeXBlEgYKAkNDEAASBgoCQUkQASpOChFUb2FzdEZ1bmN0aW9uVHlwZRIZChVUb2FzdEZ1bmN0aW9uVHlwZU5vbmUQABIeChpUb2FzdEZ1bmN0aW9uVHlwZVBvc3RQYW5lbBABMqAFCgJETRJzCgtEbVNlZ01vYmlsZRIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVxGjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdNb2JpbGVSZXBseRJkCgZEbVZpZXcSKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXEaLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXBseRJxCg5EbVBsYXllckNvbmZpZxIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtUGxheWVyQ29uZmlnUmVxGiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVzcG9uc2USagoIRG1TZWdPdHQSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnT3R0UmVwbHkSagoIRG1TZWdTREsSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnU0RLUmVwbHkSdAoMRG1FeHBvUmVwb3J0EjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVxGjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVzYgZwcm90bzM");
1294
+ const DmSegMobileReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 30);
1295
+ const DmWebViewReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 39);
1296
+ const file_danuni = /*@__PURE__*/ fileDesc("CgxkYW51bmkucHJvdG8SEWRhbnVuaS5kYW5tYWt1LnYxIjIKCmxpc3REYW5SZXESCgoCSUQYASABKAkSEAoDc2VnGAIgASgFSACIAQFCBgoEX3NlZyLUAgoHRGFubWFrdRIMCgRTT0lEGAEgASgJEgwKBERNSUQYAiABKAkSEAoIcHJvZ3Jlc3MYAyABKAUSJQoEbW9kZRgEIAEoDjIXLmRhbnVuaS5kYW5tYWt1LnYxLk1vZGUSEAoIZm9udHNpemUYBSABKAUSDQoFY29sb3IYBiABKAUSEAoIc2VuZGVySUQYByABKAkSDwoHY29udGVudBgIIAEoCRIpCgVjdGltZRgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDgoGd2VpZ2h0GAogASgFEiUKBHBvb2wYCyABKA4yFy5kYW51bmkuZGFubWFrdS52MS5Qb29sEgwKBGF0dHIYDCADKAkSFQoIcGxhdGZvcm0YDSABKAlIAIgBARISCgVleHRyYRgOIAEoCUgBiAEBQgsKCV9wbGF0Zm9ybUIICgZfZXh0cmEiPAoMRGFubWFrdVJlcGx5EiwKCGRhbm1ha3VzGAEgAygLMhouZGFudW5pLmRhbm1ha3UudjEuRGFubWFrdSo9CgRNb2RlEgoKBk5vcm1hbBAAEgoKBkJvdHRvbRABEgcKA1RvcBACEgsKB1JldmVyc2UQAxIHCgNFeHQQBCopCgRQb29sEgcKA0RlZhAAEgcKA1N1YhABEgcKA0FkdhACEgYKAkl4EAMyXQoORGFubWFrdVNlcnZpY2USSwoHbGlzdERhbhIdLmRhbnVuaS5kYW5tYWt1LnYxLmxpc3REYW5SZXEaHy5kYW51bmkuZGFubWFrdS52MS5EYW5tYWt1UmVwbHkiAFAAYgZwcm90bzM", [
1297
+ file_google_protobuf_timestamp
1298
+ ]);
1299
+ const DanmakuReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_danuni, 2);
1300
+ const src_JSON = json_bigint({
1878
1301
  useNativeBigInt: true
1879
1302
  });
1880
- const src_DanUniConvertTipTemplate = {
1303
+ const DanUniConvertTipTemplate = {
1881
1304
  meassage: 'Converted by DanUni!',
1882
1305
  version: `JS/TS ${package_namespaceObject.UU} (v${package_namespaceObject.rE})`
1883
1306
  };
1884
- class src_UniPool {
1307
+ class UniPool {
1885
1308
  constructor(dans, options = {}, info = {
1886
1309
  fromConverted: false
1887
1310
  }){
@@ -1898,53 +1321,98 @@ class src_UniPool {
1898
1321
  return fn(this);
1899
1322
  }
1900
1323
  get shared() {
1901
- const isShared = (key)=>this.dans.every((d)=>d[key]);
1902
- return {
1903
- SOID: isShared('SOID') ? this.dans[0].SOID : void 0,
1904
- senderID: isShared('senderID') ? this.dans[0].senderID : void 0,
1905
- platform: isShared('platform') ? this.dans[0].platform : void 0,
1906
- pool: isShared('pool') ? this.dans[0].pool : void 0,
1907
- mode: isShared('mode') ? this.dans[0].mode : void 0,
1908
- color: isShared('color') ? this.dans[0].color : void 0
1909
- };
1324
+ if (0 === this.dans.length) return {};
1325
+ const keys = [
1326
+ 'SOID',
1327
+ 'senderID',
1328
+ 'platform',
1329
+ 'pool',
1330
+ 'mode',
1331
+ 'color'
1332
+ ];
1333
+ const result = {};
1334
+ for (const key of keys){
1335
+ const sharedVal = this.getShared(key);
1336
+ if (void 0 !== sharedVal) result[key] = sharedVal;
1337
+ }
1338
+ return result;
1910
1339
  }
1911
1340
  getShared(key) {
1912
- const isShared = (key)=>this.dans.every((d)=>d[key]);
1913
- return isShared(key) ? this.dans[0][key] : void 0;
1341
+ if (0 === this.dans.length) return;
1342
+ const firstVal = this.dans[0][key];
1343
+ for(let i = 1; i < this.dans.length; i++)if (this.dans[i][key] !== firstVal) return;
1344
+ return firstVal;
1914
1345
  }
1915
1346
  getStat(key) {
1916
- const default_stat = [];
1917
- const stats = this.dans.reduce((stat, dan)=>{
1918
- const valWithCount = stat.find((i)=>i.val === dan[key]);
1919
- if (valWithCount) valWithCount.count++;
1920
- else stat.push({
1921
- val: dan[key],
1922
- count: 1
1923
- });
1924
- return stat;
1925
- }, default_stat);
1926
- return stats;
1347
+ const statMap = new Map();
1348
+ for (const dan of this.dans){
1349
+ const val = dan[key];
1350
+ statMap.set(val, (statMap.get(val) || 0) + 1);
1351
+ }
1352
+ return statMap;
1927
1353
  }
1928
1354
  getMost(key) {
1929
- return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
1355
+ const stats = this.getStat(key);
1356
+ if (0 === stats.size) return {
1357
+ val: void 0,
1358
+ count: 0
1359
+ };
1360
+ let mostVal;
1361
+ let maxCount = 0;
1362
+ for (const [val, count] of stats.entries())if (count > maxCount) {
1363
+ maxCount = count;
1364
+ mostVal = val;
1365
+ }
1366
+ return {
1367
+ val: mostVal,
1368
+ count: maxCount
1369
+ };
1930
1370
  }
1931
1371
  get most() {
1372
+ const keys = [
1373
+ 'mode',
1374
+ 'fontsize',
1375
+ 'color',
1376
+ 'senderID',
1377
+ 'content',
1378
+ 'weight',
1379
+ 'pool',
1380
+ 'platform'
1381
+ ];
1382
+ const statMaps = new Map();
1383
+ for (const dan of this.dans)for (const key of keys){
1384
+ if (!statMaps.has(key)) statMaps.set(key, new Map());
1385
+ const statMap = statMaps.get(key);
1386
+ const val = dan[key];
1387
+ statMap.set(val, (statMap.get(val) || 0) + 1);
1388
+ }
1389
+ const result = {};
1390
+ for (const key of keys){
1391
+ const statMap = statMaps.get(key);
1392
+ let mostVal;
1393
+ let maxCount = 0;
1394
+ for (const [val, count] of statMap.entries())if (count > maxCount) {
1395
+ maxCount = count;
1396
+ mostVal = val;
1397
+ }
1398
+ result[key] = mostVal;
1399
+ }
1932
1400
  return {
1933
- mode: this.getMost('mode').val,
1934
- fontsize: this.getMost('fontsize').val,
1935
- color: this.getMost('color').val,
1936
- senderID: this.getMost('senderID').val,
1937
- content: this.getMost('content').val,
1938
- weight: this.getMost('weight').val,
1939
- pool: this.getMost('pool').val,
1940
- platform: this.getMost('platform').val
1401
+ mode: result.mode,
1402
+ fontsize: result.fontsize,
1403
+ color: result.color,
1404
+ senderID: result.senderID,
1405
+ content: result.content,
1406
+ weight: result.weight,
1407
+ pool: result.pool,
1408
+ platform: result.platform
1941
1409
  };
1942
1410
  }
1943
1411
  static create(options) {
1944
- return new src_UniPool([], options);
1412
+ return new UniPool([], options);
1945
1413
  }
1946
1414
  assign(dans) {
1947
- if (dans instanceof src_UniPool) return new src_UniPool([
1415
+ if (dans instanceof UniPool) return new UniPool([
1948
1416
  ...this.dans,
1949
1417
  ...dans.dans
1950
1418
  ], {
@@ -1954,24 +1422,24 @@ class src_UniPool {
1954
1422
  ...this.info,
1955
1423
  ...dans.info
1956
1424
  });
1957
- if (dans instanceof UniDM) return new src_UniPool([
1425
+ if (dans instanceof UniDM) return new UniPool([
1958
1426
  ...this.dans,
1959
1427
  dans
1960
1428
  ], this.options, this.info);
1961
- if (Array.isArray(dans) && dans.every((d)=>d instanceof UniDM)) return new src_UniPool([
1429
+ if (Array.isArray(dans) && dans.every((d)=>d instanceof UniDM)) return new UniPool([
1962
1430
  ...this.dans,
1963
1431
  ...dans
1964
1432
  ], this.options, this.info);
1965
1433
  return this;
1966
1434
  }
1967
1435
  split(key) {
1968
- if (this.shared[key]) return [
1436
+ if (this.getShared(key)) return [
1969
1437
  this
1970
1438
  ];
1971
1439
  const set = new Set(this.dans.map((d)=>d[key]));
1972
1440
  return [
1973
1441
  ...set
1974
- ].map((v)=>new src_UniPool(this.dans.filter((d)=>d[key] === v), {
1442
+ ].map((v)=>new UniPool(this.dans.filter((d)=>d[key] === v), {
1975
1443
  ...this.options,
1976
1444
  dedupe: false
1977
1445
  }, this.info));
@@ -1987,44 +1455,27 @@ class src_UniPool {
1987
1455
  this.options.dedupe = false;
1988
1456
  }
1989
1457
  merge(lifetime = 0) {
1990
- if (!this.shared.SOID) {
1458
+ if (!this.getShared('SOID')) {
1991
1459
  console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
1992
1460
  return this;
1993
1461
  }
1994
1462
  if (lifetime <= 0) return this;
1995
- const mergeContext = this.dans.reduce(([result, cache, mergeObj], danmaku)=>{
1996
- const key = [
1997
- 'content',
1998
- 'mode',
1999
- 'pool',
2000
- 'platform'
2001
- ].map((k)=>danmaku[k]).join('|');
1463
+ const result = [];
1464
+ const cache = {};
1465
+ const mergeObj = {};
1466
+ for (const danmaku of this.dans){
1467
+ const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
2002
1468
  const cached = cache[key];
2003
- const lastAppearTime = cached?.progress || 0;
2004
- if (cached && danmaku.progress - lastAppearTime <= lifetime && danmaku.isSameAs(cached, {
1469
+ if (cached && danmaku.progress - cached.progress <= lifetime && danmaku.isSameAs(cached, {
2005
1470
  skipDanuniMerge: true
2006
1471
  })) {
2007
- const senders = mergeObj[key].senders;
2008
- senders.push(danmaku.senderID);
2009
- const extra = danmaku.extra;
2010
- extra.danuni = extra.danuni || {};
2011
- extra.danuni.merge = {
2012
- count: senders.length,
2013
- duration: Number.parseFloat((danmaku.progress - cached.progress).toFixed(3)),
2014
- senders,
2015
- taolu_count: senders.length,
2016
- taolu_senders: senders
2017
- };
2018
- danmaku.extraStr = src_JSON_0.stringify(extra);
1472
+ mergeObj[key].senders.push(danmaku.senderID);
1473
+ mergeObj[key].count = mergeObj[key].senders.length;
1474
+ mergeObj[key].taolu_count = mergeObj[key].count;
1475
+ mergeObj[key].taolu_senders = mergeObj[key].senders;
1476
+ mergeObj[key].duration = Number.parseFloat((danmaku.progress - cached.progress).toFixed(3));
2019
1477
  cache[key] = danmaku;
2020
- mergeObj[key] = extra.danuni.merge;
2021
- return [
2022
- result,
2023
- cache,
2024
- mergeObj
2025
- ];
2026
- }
2027
- {
1478
+ } else {
2028
1479
  mergeObj[key] = {
2029
1480
  count: 1,
2030
1481
  duration: 0,
@@ -2037,56 +1488,32 @@ class src_UniPool {
2037
1488
  ]
2038
1489
  };
2039
1490
  cache[key] = danmaku;
2040
- const extra = danmaku.extra;
2041
- extra.danuni = extra.danuni || {};
2042
- extra.danuni.merge = mergeObj[key];
2043
- danmaku.extraStr = src_JSON_0.stringify(extra);
2044
1491
  result.push(danmaku);
2045
- return [
2046
- result,
2047
- cache,
2048
- mergeObj
2049
- ];
2050
1492
  }
2051
- }, [
2052
- [],
2053
- {},
2054
- {}
2055
- ]);
2056
- const [result, _cache, mergeObj] = mergeContext;
2057
- result.forEach((danmaku, i)=>{
2058
- const key = [
2059
- 'content',
2060
- 'mode',
2061
- 'platform',
2062
- 'pool'
2063
- ].map((k)=>danmaku[k]).join('|');
2064
- const extra = result[i].extra;
1493
+ }
1494
+ for (const danmaku of result){
1495
+ const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
2065
1496
  const mergeData = mergeObj[key];
2066
- result[i].extraStr = src_JSON_0.stringify({
2067
- ...extra,
2068
- danuni: {
2069
- ...extra.danuni,
2070
- merge: mergeData
2071
- }
2072
- });
2073
- if (mergeData?.count) if (mergeData.count <= 1) {
2074
- const updatedExtra = {
2075
- ...extra
2076
- };
2077
- if (updatedExtra.danuni) {
2078
- delete updatedExtra.danuni.merge;
2079
- if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
2080
- }
2081
- result[i].extraStr = Object.keys(updatedExtra).length > 0 ? src_JSON_0.stringify(updatedExtra) : void 0;
2082
- } else {
2083
- result[i].senderID = 'merge[bot]@dan-any';
2084
- result[i].attr ? result[i].attr.push(dm_gen_DMAttr.Protect) : result[i].attr = [
1497
+ const extra = danmaku.extra;
1498
+ if (mergeData.count > 1) {
1499
+ danmaku.senderID = 'merge[bot]@dan-any';
1500
+ if (danmaku.attr) {
1501
+ if (!danmaku.attr.includes(dm_gen_DMAttr.Protect)) danmaku.attr.push(dm_gen_DMAttr.Protect);
1502
+ } else danmaku.attr = [
2085
1503
  dm_gen_DMAttr.Protect
2086
1504
  ];
1505
+ extra.danuni = extra.danuni || {};
1506
+ extra.danuni.merge = mergeData;
1507
+ danmaku.extraStr = src_JSON.stringify(extra);
1508
+ } else {
1509
+ if (extra.danuni?.merge) {
1510
+ delete extra.danuni.merge;
1511
+ if (0 === Object.keys(extra.danuni).length) delete extra.danuni;
1512
+ }
1513
+ danmaku.extraStr = Object.keys(extra).length > 0 ? src_JSON.stringify(extra) : void 0;
2087
1514
  }
2088
- });
2089
- return new src_UniPool(result, this.options, this.info);
1515
+ }
1516
+ return new UniPool(result, this.options, this.info);
2090
1517
  }
2091
1518
  minify() {
2092
1519
  return this.dans.map((d)=>d.minify());
@@ -2101,14 +1528,14 @@ class src_UniPool {
2101
1528
  const parseJSON = (json)=>{
2102
1529
  try {
2103
1530
  if (Array.isArray(json) && json.every((d)=>d.SOID)) return {
2104
- pool: new src_UniPool(json, options),
1531
+ pool: new UniPool(json, options),
2105
1532
  fmt: 'danuni.json'
2106
1533
  };
2107
1534
  if (json.danmuku && json.danmuku.every((d)=>d.text)) return {
2108
1535
  pool: this.fromArtplayer(json, json.danuni?.data ?? '', void 0, options),
2109
1536
  fmt: 'artplayer.json'
2110
1537
  };
2111
- if (json.count && json.comments && json.comments.every((d)=>d.m)) return {
1538
+ if (json.count && json.comments && Array.isArray(json.comments) && json.comments.every((d)=>d.m)) return {
2112
1539
  pool: this.fromDDPlay(json, json.danuni?.data ?? '', options),
2113
1540
  fmt: 'ddplay.json'
2114
1541
  };
@@ -2125,7 +1552,7 @@ class src_UniPool {
2125
1552
  const parseStr = (file)=>{
2126
1553
  if (mod.includes('json')) try {
2127
1554
  if (isJSON(file)) {
2128
- const json = src_JSON_0.parse(file);
1555
+ const json = src_JSON.parse(file);
2129
1556
  return parseJSON(json);
2130
1557
  }
2131
1558
  } catch {}
@@ -2213,7 +1640,7 @@ class src_UniPool {
2213
1640
  }
2214
1641
  static fromPb(bin, options) {
2215
1642
  const data = fromBinary(DanmakuReplySchema, new Uint8Array(bin));
2216
- return new src_UniPool(data.danmakus.map((d)=>UniDM.create({
1643
+ return new UniPool(data.danmakus.map((d)=>UniDM.create({
2217
1644
  ...d,
2218
1645
  progress: d.progress / 1000,
2219
1646
  mode: d.mode,
@@ -2252,7 +1679,7 @@ class src_UniPool {
2252
1679
  const dans = oriData.i.d;
2253
1680
  const fromConverted = !!oriData.i.danuni;
2254
1681
  const cid = BigInt(oriData.i.chatid);
2255
- return new src_UniPool(dans.map((d)=>UniDM.fromBili(UniDM.parseBiliSingle(d['@_p'], d['#text']), cid, options, fromConverted ? oriData.i.danuni?.data : void 0)).filter((d)=>null !== d), options, {
1682
+ return new UniPool(dans.map((d)=>UniDM.fromBili(UniDM.parseBiliSingle(d['@_p'], d['#text']), cid, options, fromConverted ? oriData.i.danuni?.data : void 0)).filter((d)=>null !== d), options, {
2256
1683
  fromConverted
2257
1684
  });
2258
1685
  }
@@ -2286,8 +1713,8 @@ class src_UniPool {
2286
1713
  real_name: 0,
2287
1714
  source: 'k-v',
2288
1715
  danuni: {
2289
- ...src_DanUniConvertTipTemplate,
2290
- data: this.shared.SOID
1716
+ ...DanUniConvertTipTemplate,
1717
+ data: this.getShared('SOID')
2291
1718
  },
2292
1719
  d: this.dans.map((dan)=>dan.toBiliXML(options))
2293
1720
  }
@@ -2296,7 +1723,7 @@ class src_UniPool {
2296
1723
  static fromBiliGrpc(bin, options) {
2297
1724
  const data = fromBinary(DmSegMobileReplySchema, new Uint8Array(bin));
2298
1725
  const json = data.elems;
2299
- return new src_UniPool(json.map((d)=>UniDM.fromBili({
1726
+ return new UniPool(json.map((d)=>UniDM.fromBili({
2300
1727
  ...d,
2301
1728
  progress: d.progress / 1000
2302
1729
  }, d.oid, options)), options);
@@ -2304,10 +1731,10 @@ class src_UniPool {
2304
1731
  static fromBiliCommandGrpc(bin, options) {
2305
1732
  const data = fromBinary(DmWebViewReplySchema, new Uint8Array(bin));
2306
1733
  const json = data.commandDms;
2307
- return new src_UniPool(json.map((d)=>UniDM.fromBiliCommand(d, d.oid, options)), options);
1734
+ return new UniPool(json.map((d)=>UniDM.fromBiliCommand(d, d.oid, options)), options);
2308
1735
  }
2309
1736
  static fromBiliUp(json, options) {
2310
- return new src_UniPool(json.data.result.map((d)=>{
1737
+ return new UniPool(json.data.result.map((d)=>{
2311
1738
  const attrBin = d.attrs ? d.attrs.split(',').map(Number).reduce((bin, bitPosition)=>bin | 1 << bitPosition - 1, 0) : 0;
2312
1739
  return UniDM.fromBili({
2313
1740
  id: BigInt(d.id_str || d.id),
@@ -2326,7 +1753,7 @@ class src_UniPool {
2326
1753
  }), options);
2327
1754
  }
2328
1755
  static fromDplayer(json, playerID, domain = 'other', options) {
2329
- return new src_UniPool(json.data.map((d)=>UniDM.fromDplayer({
1756
+ return new UniPool(json.data.map((d)=>UniDM.fromDplayer({
2330
1757
  content: d[4],
2331
1758
  progress: d[0],
2332
1759
  mode: d[1],
@@ -2340,7 +1767,7 @@ class src_UniPool {
2340
1767
  return {
2341
1768
  code: 0,
2342
1769
  danuni: {
2343
- ...src_DanUniConvertTipTemplate,
1770
+ ...DanUniConvertTipTemplate,
2344
1771
  data: this.dans[0].SOID.split('@')[0]
2345
1772
  },
2346
1773
  data: this.dans.map((dan)=>{
@@ -2356,7 +1783,7 @@ class src_UniPool {
2356
1783
  };
2357
1784
  }
2358
1785
  static fromArtplayer(json, playerID, domain = 'other', options) {
2359
- return new src_UniPool(json.danmuku.map((d)=>UniDM.fromArtplayer({
1786
+ return new UniPool(json.danmuku.map((d)=>UniDM.fromArtplayer({
2360
1787
  content: d.text,
2361
1788
  progress: d.time || 0,
2362
1789
  mode: d.mode || 0,
@@ -2369,7 +1796,7 @@ class src_UniPool {
2369
1796
  toArtplayer() {
2370
1797
  return {
2371
1798
  danuni: {
2372
- ...src_DanUniConvertTipTemplate,
1799
+ ...DanUniConvertTipTemplate,
2373
1800
  data: this.dans[0].SOID.split('@')[0]
2374
1801
  },
2375
1802
  danmuku: this.dans.map((dan)=>{
@@ -2386,7 +1813,7 @@ class src_UniPool {
2386
1813
  };
2387
1814
  }
2388
1815
  static fromDDPlay(json, episodeId, options) {
2389
- return new src_UniPool(json.comments.map((d)=>{
1816
+ return new UniPool(json.comments.map((d)=>{
2390
1817
  const p_arr = d.p.split(',');
2391
1818
  return UniDM.fromDDplay({
2392
1819
  cid: d.cid,
@@ -2404,7 +1831,7 @@ class src_UniPool {
2404
1831
  const episodeId = this.dans[0].SOID.split('@')[0].replaceAll(`def_${platform_PlatformDanmakuOnlySource.DanDanPlay}+`, '');
2405
1832
  return {
2406
1833
  danuni: {
2407
- ...src_DanUniConvertTipTemplate,
1834
+ ...DanUniConvertTipTemplate,
2408
1835
  data: episodeId
2409
1836
  },
2410
1837
  count: this.dans.length,
@@ -2426,7 +1853,7 @@ class src_UniPool {
2426
1853
  substyle: {}
2427
1854
  };
2428
1855
  const finalOptions = options ?? defaultOptions;
2429
- const fn = this.shared.SOID;
1856
+ const fn = this.getShared('SOID');
2430
1857
  return generateASS(this, {
2431
1858
  filename: fn,
2432
1859
  title: fn,
@@ -2434,4 +1861,4 @@ class src_UniPool {
2434
1861
  }, canvasCtx);
2435
1862
  }
2436
1863
  }
2437
- export { UniDM, dm_gen_namespaceObject as UniDMTools, id_gen_namespaceObject as UniIDTools, src_UniPool as UniPool, platform_namespaceObject as platform };
1864
+ export { UniDM, UniPool, dm_gen_namespaceObject as UniDMTools, id_gen_namespaceObject as UniIDTools, platform_namespaceObject as platform };