@dan-uni/dan-any 0.9.2 → 0.9.4
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/README.md +1 -1
- package/dist/index.js +225 -352
- package/dist/index.min.js +225 -352
- package/dist/index.umd.min.js +228 -354
- package/dist/src/index.d.ts +15 -41
- package/package.json +5 -5
- package/src/ass-gen/ass/create.ts +2 -2
- package/src/ass-gen/ass/raw.ts +19 -19
- package/src/index.test.ts +19 -12
- package/src/index.ts +100 -130
- package/src/proto/gen/bili/dm_pb.ts +1 -1
- package/src/proto/gen/danuni_pb.ts +1 -1
- package/src/utils/dm-gen.test.ts +3 -3
- package/src/utils/dm-gen.ts +30 -31
package/dist/index.js
CHANGED
|
@@ -60,7 +60,7 @@ __webpack_require__.d(dm_gen_namespaceObject, {
|
|
|
60
60
|
Pools: ()=>dm_gen_Pools,
|
|
61
61
|
UniDM: ()=>UniDM
|
|
62
62
|
});
|
|
63
|
-
var package_namespaceObject = JSON.parse('{"u2":"@dan-uni/dan-any","i8":"0.9.
|
|
63
|
+
var package_namespaceObject = JSON.parse('{"u2":"@dan-uni/dan-any","i8":"0.9.4","e8":"https://github.com/ani-uni/danuni/tree/master/packages/dan-any#readme"}');
|
|
64
64
|
const file_bili_dm = /*@__PURE__*/ fileDesc("Cg1iaWxpL2RtLnByb3RvEiBiaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MSJkCgZBdmF0YXISCgoCaWQYASABKAkSCwoDdXJsGAIgASgJEkEKC2F2YXRhcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyVHlwZSIjCgZCdWJibGUSDAoEdGV4dBgBIAEoCRILCgN1cmwYAiABKAkixgEKCEJ1YmJsZVYyEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJEkEKC2J1YmJsZV90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlVHlwZRIVCg1leHBvc3VyZV9vbmNlGAQgASgIEkUKDWV4cG9zdXJlX3R5cGUYBSABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiWwoGQnV0dG9uEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUiWAoOQnV6endvcmRDb25maWcSRgoIa2V5d29yZHMYASADKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZFNob3dDb25maWcieAoSQnV6endvcmRTaG93Q29uZmlnEgwKBG5hbWUYASABKAkSDgoGc2NoZW1hGAIgASgJEg4KBnNvdXJjZRgDIAEoBRIKCgJpZBgEIAEoAxITCgtidXp6d29yZF9pZBgFIAEoAxITCgtzY2hlbWFfdHlwZRgGIAEoBSJ7CghDaGVja0JveBIMCgR0ZXh0GAEgASgJEjwKBHR5cGUYAiABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja2JveFR5cGUSFQoNZGVmYXVsdF92YWx1ZRgDIAEoCBIMCgRzaG93GAQgASgIIm8KCkNoZWNrQm94VjISDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgiggIKC0NsaWNrQnV0dG9uEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSDAoEc2hvdxgGIAEoCBI4CgZidWJibGUYByABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGUiswIKDUNsaWNrQnV0dG9uVjISFQoNcG9ydHJhaXRfdGV4dBgBIAMoCRIWCg5sYW5kc2NhcGVfdGV4dBgCIAMoCRIbChNwb3J0cmFpdF90ZXh0X2ZvY3VzGAMgAygJEhwKFGxhbmRzY2FwZV90ZXh0X2ZvY3VzGAQgAygJEkEKC3JlbmRlcl90eXBlGAUgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIXCg90ZXh0X2lucHV0X3Bvc3QYBiABKAgSFQoNZXhwb3N1cmVfb25jZRgHIAEoCBJFCg1leHBvc3VyZV90eXBlGAggASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIksKB0NvbW1hbmQSQAoLY29tbWFuZF9kbXMYASADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0i5gEKCUNvbW1hbmREbRIKCgJpZBgBIAEoAxILCgNvaWQYAiABKAMSCwoDbWlkGAMgASgDEg8KB2NvbW1hbmQYBCABKAkSDwoHY29udGVudBgFIAEoCRIQCghwcm9ncmVzcxgGIAEoBRINCgVjdGltZRgHIAEoCRINCgVtdGltZRgIIAEoCRINCgVleHRyYRgJIAEoCRINCgVpZFN0chgKIAEoCRIMCgR0eXBlGAsgASgFEhMKC2F1dG9fY3JlYXRlGAwgASgIEhIKCmNvdW50X2Rvd24YDSABKAUSDAoEYXR0chgOIAEoBSJQCg1EYW5tYWt1QUlGbGFnEj8KCGRtX2ZsYWdzGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWciiwMKC0Rhbm1ha3VFbGVtEgoKAmlkGAEgASgDEhAKCHByb2dyZXNzGAIgASgFEgwKBG1vZGUYAyABKAUSEAoIZm9udHNpemUYBCABKAUSPwoFY29sb3IYBSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIQCghtaWRfaGFzaBgGIAEoCRIPCgdjb250ZW50GAcgASgJEg0KBWN0aW1lGAggASgDEg4KBndlaWdodBgJIAEoBRIOCgZhY3Rpb24YCiABKAkSDAoEcG9vbBgLIAEoBRIOCgZpZF9zdHIYDCABKAkSDAoEYXR0chgNIAEoBRIRCglhbmltYXRpb24YFiABKAkSDQoFZXh0cmEYFyABKAkSQgoIY29sb3JmdWwYGCABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIMCgR0eXBlGBkgASgFEgsKA29pZBgaIAEoAyIpCgtEYW5tYWt1RmxhZxIMCgRkbWlkGAEgASgDEgwKBGZsYWcYAiABKAUiSwoRRGFubWFrdUZsYWdDb25maWcSEAoIcmVjX2ZsYWcYASABKAUSEAoIcmVjX3RleHQYAiABKAkSEgoKcmVjX3N3aXRjaBgDIAEoBSKLBwoYRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnEikKIXBsYXllcl9kYW5tYWt1X3VzZV9kZWZhdWx0X2NvbmZpZxgBIAEoCBIsCiRwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9zd2l0Y2gYBCABKAgSKwojcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWwYBSABKAUSHwoXcGxheWVyX2Rhbm1ha3VfYmxvY2t0b3AYBiABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tzY3JvbGwYByABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tib3R0b20YCCABKAgSJAoccGxheWVyX2Rhbm1ha3VfYmxvY2tjb2xvcmZ1bBgJIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3JlcGVhdBgKIAEoCBIjChtwbGF5ZXJfZGFubWFrdV9ibG9ja3NwZWNpYWwYCyABKAgSHgoWcGxheWVyX2Rhbm1ha3Vfb3BhY2l0eRgMIAEoAhIkChxwbGF5ZXJfZGFubWFrdV9zY2FsaW5nZmFjdG9yGA0gASgCEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAhIcChRwbGF5ZXJfZGFubWFrdV9zcGVlZBgPIAEoBRIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBAgASgIEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgRIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgSIAEoBRKYAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBMgAygLMmQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EiUKHXBsYXllcl9kYW5tYWt1X2VuYWJsZV9oZXJkX2RtGBQgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi7AkKEURhbm11UGxheWVyQ29uZmlnEh0KFXBsYXllcl9kYW5tYWt1X3N3aXRjaBgBIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9zd2l0Y2hfc2F2ZRgCIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYAyABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJgoecGxheWVyX2Rhbm1ha3VfZW5hYmxlYmxvY2tsaXN0GBAgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9zd2l0Y2gYESABKAgSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X2NvbmZpZxgSIAEoBRImCh5wbGF5ZXJfZGFubWFrdV9pb3Nfc3dpdGNoX3NhdmUYEyABKAUSKQohcGxheWVyX2Rhbm1ha3Vfc2VuaW9yX21vZGVfc3dpdGNoGBQgASgFEi4KJnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBUgASgFEpEBCipwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92Ml9tYXAYFiADKAsyXS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgXIAEoCBImCh5wbGF5ZXJfZGFubWFrdV9ibG9ja3RvcF9ib3R0b20YGCABKAgSIAoYcGxheWVyX2Rhbm1ha3VfZG9tYWluX3YyGBkgASgFEh4KFnBsYXllcl9kYW5tYWt1X2RlbnNpdHkYGiABKAUSJQodcGxheWVyX2Rhbm1ha3Vfc3VidGl0bGVfcHJvb2YYGyABKAgSIwobcGxheWVyX2Rhbm1ha3VfcGVvcGxlX3Byb29mGBwgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEiMAoWRGFubXVQbGF5ZXJDb25maWdQYW5lbBIWCg5zZWxlY3Rpb25fdGV4dBgBIAEoCSJLChhEYW5tdVBsYXllckR5bmFtaWNDb25maWcSEAoIcHJvZ3Jlc3MYASABKAUSHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCIpADChVEYW5tdVBsYXllclZpZXdDb25maWcSYQodZGFubXVrdV9kZWZhdWx0X3BsYXllcl9jb25maWcYASABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdURlZmF1bHRQbGF5ZXJDb25maWcSUgoVZGFubXVrdV9wbGF5ZXJfY29uZmlnGAIgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcSYQodZGFubXVrdV9wbGF5ZXJfZHluYW1pY19jb25maWcYAyADKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckR5bmFtaWNDb25maWcSXQobZGFubXVrdV9wbGF5ZXJfY29uZmlnX3BhbmVsGAQgASgLMjguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWdQYW5lbCKZBQoURGFubXVXZWJQbGF5ZXJDb25maWcSEQoJZG1fc3dpdGNoGAEgASgIEhEKCWFpX3N3aXRjaBgCIAEoCBIQCghhaV9sZXZlbBgDIAEoBRIQCghibG9ja3RvcBgEIAEoCBITCgtibG9ja3Njcm9sbBgFIAEoCBITCgtibG9ja2JvdHRvbRgGIAEoCBISCgpibG9ja2NvbG9yGAcgASgIEhQKDGJsb2Nrc3BlY2lhbBgIIAEoCBIUCgxwcmV2ZW50c2hhZGUYCSABKAgSDQoFZG1hc2sYCiABKAgSDwoHb3BhY2l0eRgLIAEoAhIOCgZkbWFyZWEYDCABKAUSEQoJc3BlZWRwbHVzGA0gASgCEhAKCGZvbnRzaXplGA4gASgCEhIKCnNjcmVlbnN5bmMYDyABKAgSEQoJc3BlZWRzeW5jGBAgASgIEhIKCmZvbnRmYW1pbHkYESABKAkSDAoEYm9sZBgSIAEoCBISCgpmb250Ym9yZGVyGBMgASgFEhEKCWRyYXdfdHlwZRgUIAEoCRIaChJzZW5pb3JfbW9kZV9zd2l0Y2gYFSABKAUSEwoLYWlfbGV2ZWxfdjIYFiABKAUSYQoPYWlfbGV2ZWxfdjJfbWFwGBcgAygLMkguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcuQWlMZXZlbFYyTWFwRW50cnkSFwoPYmxvY2t0b3BfYm90dG9tGBggASgIEhIKCmRtX2FyZWFfdjIYGSABKAUSEgoKZG1fZGVuc2l0eRgaIAEoBRozChFBaUxldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIlkKCkRtQ29sb3JmdWwSPgoEdHlwZRgBIAEoDjIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWxUeXBlEgsKA3NyYxgCIAEoCSJQCg9EbUV4cG9SZXBvcnRSZXESEgoKc2Vzc2lvbl9pZBgBIAEoCRILCgNvaWQYAiABKAMSDQoFZG1pZHMYAyABKAwSDQoFc3BtaWQYBCABKAkiEQoPRG1FeHBvUmVwb3J0UmVzIm0KCkRtSGVyZFZpZXcSGwoTZGlzcGxheV9oZXJkX2RtX251bRgBIAEoBRJCCghoZXJkX2RtcxgCIAMoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlZpZXdIZXJkRG1FbGVtIpYCCgpEbU1hc2tXYWxsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIPCgdjb250ZW50GAMgASgJEk0KDGNvbnRlbnRfdHlwZRgEIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRJFCghiaXpfdHlwZRgFIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxCaXpUeXBlEkUKCGNvbnRlbnRzGAYgAygLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbENvbnRlbnQiawoRRG1NYXNrV2FsbENvbnRlbnQSRQoEdHlwZRgBIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRIPCgdjb250ZW50GAIgASgJIs0QChFEbVBsYXllckNvbmZpZ1JlcRIKCgJ0cxgBIAEoAxJFCgZzd2l0Y2gYAiABKAsyNS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3dpdGNoEk4KC3N3aXRjaF9zYXZlGAMgASgLMjkuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaFNhdmUSWwoSdXNlX2RlZmF1bHRfY29uZmlnGAQgASgLMj8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVVzZURlZmF1bHRDb25maWcSYQoVYWlfcmVjb21tZW5kZWRfc3dpdGNoGAUgASgLMkIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSXwoUYWlfcmVjb21tZW5kZWRfbGV2ZWwYBiABKAsyQS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEkkKCGJsb2NrdG9wGAcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wEk8KC2Jsb2Nrc2Nyb2xsGAggASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc2Nyb2xsEk8KC2Jsb2NrYm90dG9tGAkgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrYm90dG9tElMKDWJsb2NrY29sb3JmdWwYCiABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tjb2xvcmZ1bBJPCgtibG9ja3JlcGVhdBgLIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBJRCgxibG9ja3NwZWNpYWwYDCABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEkcKB29wYWNpdHkYDSABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1T3BhY2l0eRJTCg1zY2FsaW5nZmFjdG9yGA4gASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISRQoGZG9tYWluGA8gASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpbhJDCgVzcGVlZBgQIAEoCzI0LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTcGVlZBJXCg9lbmFibGVibG9ja2xpc3QYESABKAsyPi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0El4KGWlubGluZVBsYXllckRhbm1ha3VTd2l0Y2gYEiABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5JbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoElsKEnNlbmlvcl9tb2RlX3N3aXRjaBgTIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTZW5pb3JNb2RlU3dpdGNoEmQKF2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBQgASgLMkMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyElMKDmVuYWJsZV9oZXJkX2RtGBUgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRJWCg9ibG9ja3RvcF9ib3R0b20YFiABKAsyPS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SSgoJZG9tYWluX3YyGBcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpblYyEkcKB2RlbnNpdHkYGCABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RGVuc2l0eRJUCg5zdWJ0aXRsZV9wcm9vZhgZIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mElAKDHBlb3BsZV9wcm9vZhgaIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VQZW9wbGVQcm9vZiIvCgtEbVNlZ0NvbmZpZxIRCglwYWdlX3NpemUYASABKAMSDQoFdG90YWwYAiABKAMikQIKEERtU2VnTW9iaWxlUmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBRJACgdhaV9mbGFnGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUFJRmxhZxIVCg1zZWdtZW50X3J1bGVzGAQgAygDEkIKDGNvbG9yZnVsX3NyYxgFIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWwSEwoLY29udGV4dF9zcmMYBiABKAkiygEKDkRtU2VnTW9iaWxlUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDEhYKDnRlZW5hZ2Vyc19tb2RlGAUgASgFEgoKAnBzGAYgASgDEgoKAnBlGAcgASgDEhEKCXB1bGxfbW9kZRgIIAEoBRISCgpmcm9tX3NjZW5lGAkgASgFEg0KBXNwbWlkGAogASgJEhMKC2NvbnRleHRfZXh0GAsgASgJIlwKDURtU2VnT3R0UmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBSJMCgtEbVNlZ090dFJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJdCg1EbVNlZ1NES1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI8CgVlbGVtcxgCIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VFbGVtIkwKC0RtU2VnU0RLUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDIncKCURtU3ViVmlldxIMCgR0eXBlGAEgASgFEgsKA29pZBgCIAEoAxILCgNwaWQYAyABKAMSQgoLcG9zdF9wYW5lbDIYBCADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxWMiKhCQoLRG1WaWV3UmVwbHkSDgoGY2xvc2VkGAEgASgIEjkKBG1hc2sYAiABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb01hc2sSQQoIc3VidGl0bGUYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb1N1YnRpdGxlEhMKC3NwZWNpYWxfZG1zGAQgAygJEkQKB2FpX2ZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxJOCg1wbGF5ZXJfY29uZmlnGAYgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJWaWV3Q29uZmlnEhYKDnNlbmRfYm94X3N0eWxlGAcgASgFEg0KBWFsbG93GAggASgIEhEKCWNoZWNrX2JveBgJIAEoCBIaChJjaGVja19ib3hfc2hvd19tc2cYCiABKAkSGAoQdGV4dF9wbGFjZWhvbGRlchgLIAEoCRIZChFpbnB1dF9wbGFjZWhvbGRlchgMIAEoCRIdChVyZXBvcnRfZmlsdGVyX2NvbnRlbnQYDSADKAkSQQoLZXhwb19yZXBvcnQYDiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvUmVwb3J0EkkKD2J1enp3b3JkX2NvbmZpZxgPIAEoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1enp3b3JkQ29uZmlnEkIKC2V4cHJlc3Npb25zGBAgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgRIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGBIgAygJEkIKC3Bvc3RfcGFuZWwyGBMgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISQgoMZG1fbWFza193YWxsGBQgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbBI9CgdkbV9oZXJkGBUgASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1IZXJkVmlldxI6Cgdjb21tYW5kGBYgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZBIKCgJrdhgXIAEoCRI+CglzdWJfdmlld3MYGCADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVN1YlZpZXcSNgoDcW9lGBkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUW9lSW5mbyJtCglEbVZpZXdSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEg0KBXNwbWlkGAQgASgJEhQKDGlzX2hhcmRfYm9vdBgFIAEoBRITCgtjb250ZXh0X2V4dBgGIAEoCSKBBgoORG1XZWJWaWV3UmVwbHkSDQoFc3RhdGUYASABKAUSDAoEdGV4dBgCIAEoCRIRCgl0ZXh0X3NpZGUYAyABKAkSPQoGZG1fc2dlGAQgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdDb25maWcSQQoEZmxhZxgFIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnQ29uZmlnEhMKC3NwZWNpYWxfZG1zGAYgAygJEhEKCWNoZWNrX2JveBgHIAEoCBINCgVjb3VudBgIIAEoAxJACgtjb21tYW5kX2RtcxgJIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmREbRJNCg1wbGF5ZXJfY29uZmlnGAogASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GAsgAygJEkIKC2V4cHJlc3Npb25zGAwgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgNIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGA4gAygJEkIKC3Bvc3RfcGFuZWwyGA8gAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISPgoJc3ViX3ZpZXdzGBAgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgRIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8iKgoKRXhwb1JlcG9ydBIcChRzaG91bGRfcmVwb3J0X2F0X2VuZBgBIAEoCCJkCgpFeHByZXNzaW9uEg8KB2tleXdvcmQYASADKAkSCwoDdXJsGAIgASgJEjgKBnBlcmlvZBgDIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBlcmlvZCJJCgtFeHByZXNzaW9ucxI6CgRkYXRhGAEgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbiIqChlJbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoEg0KBXZhbHVlGAEgASgIIicKBUxhYmVsEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkihwEKB0xhYmVsVjISDQoFdGl0bGUYASABKAkSDwoHY29udGVudBgCIAMoCRIVCg1leHBvc3VyZV9vbmNlGAMgASgIEkUKDWV4cG9zdXJlX3R5cGUYBCABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiJAoGUGVyaW9kEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAyIwCh9QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEg0KBXZhbHVlGAEgASgFIjIKIVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhINCgV2YWx1ZRgBIAEoBSIxCiBQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZFN3aXRjaBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tib3R0b20SDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrcmVwZWF0Eg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBINCgV2YWx1ZRgBIAEoCCIqChlQbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEg0KBXZhbHVlGAEgASgIIiYKFVBsYXllckRhbm1ha3VCbG9ja3RvcBINCgV2YWx1ZRgBIAEoCCIsChtQbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SDQoFdmFsdWUYASABKAgiJQoUUGxheWVyRGFubWFrdURlbnNpdHkSDQoFdmFsdWUYASABKAUiJAoTUGxheWVyRGFubWFrdURvbWFpbhINCgV2YWx1ZRgBIAEoAiImChVQbGF5ZXJEYW5tYWt1RG9tYWluVjISDQoFdmFsdWUYASABKAUiKgoZUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRINCgV2YWx1ZRgBIAEoCCItChxQbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0Eg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VPcGFjaXR5Eg0KBXZhbHVlGAEgASgCIikKGFBsYXllckRhbm1ha3VQZW9wbGVQcm9vZhINCgV2YWx1ZRgBIAEoCCIrChpQbGF5ZXJEYW5tYWt1U2NhbGluZ2ZhY3RvchINCgV2YWx1ZRgBIAEoAiIuCh1QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBINCgV2YWx1ZRgBIAEoBSIjChJQbGF5ZXJEYW5tYWt1U3BlZWQSDQoFdmFsdWUYASABKAUiKwoaUGxheWVyRGFubWFrdVN1YnRpdGxlUHJvb2YSDQoFdmFsdWUYASABKAgiOAoTUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCBISCgpjYW5faWdub3JlGAIgASgIIigKF1BsYXllckRhbm1ha3VTd2l0Y2hTYXZlEg0KBXZhbHVlGAEgASgIIi4KHVBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEg0KBXZhbHVlGAEgASgIIowDCglQb3N0UGFuZWwSDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEhAKCHByaW9yaXR5GAMgASgDEg4KBmJpel9pZBgEIAEoAxJECghiaXpfdHlwZRgFIAEoDjIyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbEJpelR5cGUSQwoMY2xpY2tfYnV0dG9uGAYgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2xpY2tCdXR0b24SPwoKdGV4dF9pbnB1dBgHIAEoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dBI9CgljaGVja19ib3gYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveBI2CgV0b2FzdBgJIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0Iq0ECgtQb3N0UGFuZWxWMhINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSRAoIYml6X3R5cGUYAyABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkUKDGNsaWNrX2J1dHRvbhgEIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uVjISQQoKdGV4dF9pbnB1dBgFIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dFYyEj8KCWNoZWNrX2JveBgGIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrQm94VjISOAoFdG9hc3QYByABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdFYyEjoKBmJ1YmJsZRgIIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVYyEjgKBWxhYmVsGAkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuTGFiZWxWMhJBCgtwb3N0X3N0YXR1cxgKIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMiFwoHUW9lSW5mbxIMCgRpbmZvGAEgASgJIikKCFJlc3BvbnNlEgwKBGNvZGUYASABKAUSDwoHbWVzc2FnZRgCIAEoCSL5AgoMU3VidGl0bGVJdGVtEgoKAmlkGAEgASgDEg4KBmlkX3N0chgCIAEoCRILCgNsYW4YAyABKAkSDwoHbGFuX2RvYxgEIAEoCRIUCgxzdWJ0aXRsZV91cmwYBSABKAkSOgoGYXV0aG9yGAYgASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVXNlckluZm8SPAoEdHlwZRgHIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlVHlwZRIVCg1sYW5fZG9jX2JyaWVmGAggASgJEkEKB2FpX3R5cGUYCSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpVHlwZRJFCglhaV9zdGF0dXMYCiABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpU3RhdHVzIugCCglUZXh0SW5wdXQSHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEgwKBHNob3cYBSABKAgSOAoGYXZhdGFyGAYgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEkEKC3Bvc3Rfc3RhdHVzGAcgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFN0YXR1cxI2CgVsYWJlbBgIIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsIvsBCgtUZXh0SW5wdXRWMhIcChRwb3J0cmFpdF9wbGFjZWhvbGRlchgBIAMoCRIdChVsYW5kc2NhcGVfcGxhY2Vob2xkZXIYAiADKAkSQQoLcmVuZGVyX3R5cGUYAyABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEhgKEHBsYWNlaG9sZGVyX3Bvc3QYBCABKAgSOAoGYXZhdGFyGAUgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEhgKEHRleHRfaW5wdXRfbGltaXQYBiABKAUibwoFVG9hc3QSDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRIMCgRzaG93GAMgASgIEjgKBmJ1dHRvbhgEIAEoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1dHRvbiJiCg1Ub2FzdEJ1dHRvblYyEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUicwoHVG9hc3RWMhIMCgR0ZXh0GAEgASgJEhAKCGR1cmF0aW9uGAIgASgFEkgKD3RvYXN0X2J1dHRvbl92MhgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0QnV0dG9uVjIiXAoIVXNlckluZm8SCwoDbWlkGAEgASgDEgwKBG5hbWUYAiABKAkSCwoDc2V4GAMgASgJEgwKBGZhY2UYBCABKAkSDAoEc2lnbhgFIAEoCRIMCgRyYW5rGAYgASgFIlMKCVZpZGVvTWFzaxILCgNjaWQYASABKAMSDAoEcGxhdBgCIAEoBRILCgNmcHMYAyABKAUSDAoEdGltZRgEIAEoAxIQCghtYXNrX3VybBgFIAEoCSJwCg1WaWRlb1N1YnRpdGxlEgsKA2xhbhgBIAEoCRIPCgdsYW5fZG9jGAIgASgJEkEKCXN1YnRpdGxlcxgDIAMoCzIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlSXRlbSKSAQoOVmlld0hlcmREbUVsZW0SEAoIaGVyZF9tc2cYASABKAkSFgoOaGVyZF9zdGFydF9jbnQYAiABKAUSFAoMaGVyZF9lbmRfY250GAMgASgFEhIKCnJlZ2V4X3J1bGUYBCABKAkSFgoOc3RhcnRfcHJvZ3Jlc3MYBSABKAUSFAoMZW5kX3Byb2dyZXNzGAYgASgFKjMKCkF2YXRhclR5cGUSEgoOQXZhdGFyVHlwZU5vbmUQABIRCg1BdmF0YXJUeXBlTkZUEAEqWQoKQnViYmxlVHlwZRISCg5CdWJibGVUeXBlTm9uZRAAEhkKFUJ1YmJsZVR5cGVDbGlja0J1dHRvbhABEhwKGEJ1YmJsZVR5cGVEbVNldHRpbmdQYW5lbBACKlgKDENoZWNrYm94VHlwZRIUChBDaGVja2JveFR5cGVOb25lEAASGQoVQ2hlY2tib3hUeXBlRW5jb3VyYWdlEAESFwoTQ2hlY2tib3hUeXBlQ29sb3JETRACKjUKDkRtQ29sb3JmdWxUeXBlEgwKCE5vbmVUeXBlEAASFQoPVmlwR3JhZHVhbENvbG9yEOHUAypgChFEbU1hc2tXYWxsQml6VHlwZRILCgdVbmtub3duEAASBwoDT0dWEAESCgoGQml6UGljEAISCAoETXV0ZRADEgoKBlJlY29yZBAEEgkKBUNsb3VkEAUSCAoEQUlHQxAGKnYKFURtTWFza1dhbGxDb250ZW50VHlwZRIgChxEbU1hc2tXYWxsQ29udGVudFR5cGVVbmtub3duEAASHQoZRG1NYXNrV2FsbENvbnRlbnRUeXBlVGV4dBABEhwKGERtTWFza1dhbGxDb250ZW50VHlwZVBpYxACKjwKDEV4cG9zdXJlVHlwZRIUChBFeHBvc3VyZVR5cGVOb25lEAASFgoSRXhwb3N1cmVUeXBlRE1TZW5kEAEqgwIKEFBvc3RQYW5lbEJpelR5cGUSGAoUUG9zdFBhbmVsQml6VHlwZU5vbmUQABIdChlQb3N0UGFuZWxCaXpUeXBlRW5jb3VyYWdlEAESGwoXUG9zdFBhbmVsQml6VHlwZUNvbG9yRE0QAhIZChVQb3N0UGFuZWxCaXpUeXBlTkZURE0QAxIdChlQb3N0UGFuZWxCaXpUeXBlRnJhZ0Nsb3NlEAQSHQoZUG9zdFBhbmVsQml6VHlwZVJlY29tbWVuZBAFEhwKGFBvc3RQYW5lbEJpelR5cGVQbG90TGVhaxAGEiIKHlBvc3RQYW5lbEJpelR5cGVBbnRpSGFyYXNzbWVudBAHKjgKClBvc3RTdGF0dXMSFAoQUG9zdFN0YXR1c05vcm1hbBAAEhQKEFBvc3RTdGF0dXNDbG9zZWQQASpOCgpSZW5kZXJUeXBlEhIKDlJlbmRlclR5cGVOb25lEAASFAoQUmVuZGVyVHlwZVNpbmdsZRABEhYKElJlbmRlclR5cGVSb3RhdGlvbhACKjYKEFN1YnRpdGxlQWlTdGF0dXMSCAoETm9uZRAAEgwKCEV4cG9zdXJlEAESCgoGQXNzaXN0EAIqKwoOU3VidGl0bGVBaVR5cGUSCgoGTm9ybWFsEAASDQoJVHJhbnNsYXRlEAEqHgoMU3VidGl0bGVUeXBlEgYKAkNDEAASBgoCQUkQASpOChFUb2FzdEZ1bmN0aW9uVHlwZRIZChVUb2FzdEZ1bmN0aW9uVHlwZU5vbmUQABIeChpUb2FzdEZ1bmN0aW9uVHlwZVBvc3RQYW5lbBABMqAFCgJETRJzCgtEbVNlZ01vYmlsZRIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVxGjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdNb2JpbGVSZXBseRJkCgZEbVZpZXcSKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXEaLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXBseRJxCg5EbVBsYXllckNvbmZpZxIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtUGxheWVyQ29uZmlnUmVxGiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVzcG9uc2USagoIRG1TZWdPdHQSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnT3R0UmVwbHkSagoIRG1TZWdTREsSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnU0RLUmVwbHkSdAoMRG1FeHBvUmVwb3J0EjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVxGjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVzYgZwcm90bzM");
|
|
65
65
|
const DmSegMobileReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 30);
|
|
66
66
|
const DmWebViewReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 39);
|
|
@@ -182,7 +182,8 @@ var dm_gen_DMAttr = /*#__PURE__*/ function(DMAttr) {
|
|
|
182
182
|
}({});
|
|
183
183
|
const DMAttrUtils = {
|
|
184
184
|
fromBin (bin = 0, format) {
|
|
185
|
-
const array = toBits(bin)
|
|
185
|
+
const array = toBits(bin);
|
|
186
|
+
const attr = [];
|
|
186
187
|
if ('bili' === format) {
|
|
187
188
|
if (array[0]) attr.push("Protect");
|
|
188
189
|
if (array[1]) attr.push("FromLive");
|
|
@@ -310,7 +311,8 @@ class UniDM {
|
|
|
310
311
|
isSameAs(dan, options) {
|
|
311
312
|
if (4 === this.mode || 4 === dan.mode) return false;
|
|
312
313
|
if (!options?.skipDanuniMerge && (this.extra.danuni?.merge || dan.extra.danuni?.merge)) return false;
|
|
313
|
-
const isSame = (k)=>this[k] === dan[k]
|
|
314
|
+
const isSame = (k)=>this[k] === dan[k];
|
|
315
|
+
const checks = [
|
|
314
316
|
'SOID',
|
|
315
317
|
'content',
|
|
316
318
|
'mode',
|
|
@@ -320,9 +322,11 @@ class UniDM {
|
|
|
320
322
|
return checks;
|
|
321
323
|
}
|
|
322
324
|
minify() {
|
|
323
|
-
const def = UniDM.create()
|
|
325
|
+
const def = UniDM.create();
|
|
326
|
+
const dan = UniDM.create(this);
|
|
324
327
|
for(const key in dan){
|
|
325
|
-
const k = key
|
|
328
|
+
const k = key;
|
|
329
|
+
const v = dan[k];
|
|
326
330
|
if ('SOID' !== key) if (v) if (v === def[k]) delete dan[k];
|
|
327
331
|
else {
|
|
328
332
|
if ('attr' === k && Array.isArray(v) && 0 === v.length) delete dan[k];
|
|
@@ -427,13 +431,15 @@ class UniDM {
|
|
|
427
431
|
if (args.oid && !cid) cid = args.oid;
|
|
428
432
|
const SOID = recSOID || `def_${platform_PlatformVideoSource.Bilibili}+${id_gen_UniID.fromBili({
|
|
429
433
|
cid
|
|
430
|
-
})}
|
|
434
|
+
})}`;
|
|
435
|
+
const senderID = isEmail(args.midHash, {
|
|
431
436
|
require_tld: false
|
|
432
437
|
}) ? args.midHash : id_gen_UniID.fromBili({
|
|
433
438
|
midHash: args.midHash
|
|
434
439
|
});
|
|
435
440
|
let mode = 0;
|
|
436
|
-
const pool = args.pool
|
|
441
|
+
const pool = args.pool;
|
|
442
|
+
const extra = {
|
|
437
443
|
bili: {
|
|
438
444
|
mode: args.mode,
|
|
439
445
|
pool: args.pool,
|
|
@@ -536,7 +542,8 @@ class UniDM {
|
|
|
536
542
|
if (args.oid && !cid) cid = args.oid;
|
|
537
543
|
const SOID = `def_${platform_PlatformVideoSource.Bilibili}+${id_gen_UniID.fromBili({
|
|
538
544
|
cid
|
|
539
|
-
})}
|
|
545
|
+
})}`;
|
|
546
|
+
const senderID = id_gen_UniID.fromBili({
|
|
540
547
|
mid: args.mid
|
|
541
548
|
});
|
|
542
549
|
return this.create({
|
|
@@ -559,7 +566,8 @@ class UniDM {
|
|
|
559
566
|
}, options);
|
|
560
567
|
}
|
|
561
568
|
static fromDplayer(args, playerID, domain, options) {
|
|
562
|
-
const SOID = id_gen_UniID.fromUnknown(playerID, domain)
|
|
569
|
+
const SOID = id_gen_UniID.fromUnknown(playerID, domain);
|
|
570
|
+
const senderID = id_gen_UniID.fromUnknown(args.midHash, domain);
|
|
563
571
|
return this.create({
|
|
564
572
|
...args,
|
|
565
573
|
SOID: SOID.toString(),
|
|
@@ -581,7 +589,8 @@ class UniDM {
|
|
|
581
589
|
};
|
|
582
590
|
}
|
|
583
591
|
static fromArtplayer(args, playerID, domain, options) {
|
|
584
|
-
const SOID = id_gen_UniID.fromUnknown(playerID, domain)
|
|
592
|
+
const SOID = id_gen_UniID.fromUnknown(playerID, domain);
|
|
593
|
+
const senderID = id_gen_UniID.fromUnknown('', domain);
|
|
585
594
|
let extra = args.border ? {
|
|
586
595
|
artplayer: {
|
|
587
596
|
border: args.border,
|
|
@@ -872,126 +881,36 @@ class UniPool {
|
|
|
872
881
|
color: isShared('color') ? this.dans[0].color : void 0
|
|
873
882
|
};
|
|
874
883
|
}
|
|
875
|
-
|
|
876
|
-
const
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
},
|
|
887
|
-
{
|
|
888
|
-
val: dm_gen_Modes.Top,
|
|
889
|
-
count: 0
|
|
890
|
-
},
|
|
891
|
-
{
|
|
892
|
-
val: dm_gen_Modes.Reverse,
|
|
893
|
-
count: 0
|
|
894
|
-
},
|
|
895
|
-
{
|
|
896
|
-
val: dm_gen_Modes.Ext,
|
|
897
|
-
count: 0
|
|
898
|
-
}
|
|
899
|
-
],
|
|
900
|
-
fontsize: [],
|
|
901
|
-
color: [],
|
|
902
|
-
senderID: [],
|
|
903
|
-
content: [],
|
|
904
|
-
weight: [],
|
|
905
|
-
pool: [
|
|
906
|
-
{
|
|
907
|
-
val: dm_gen_Pools.Def,
|
|
908
|
-
count: 0
|
|
909
|
-
},
|
|
910
|
-
{
|
|
911
|
-
val: dm_gen_Pools.Sub,
|
|
912
|
-
count: 0
|
|
913
|
-
},
|
|
914
|
-
{
|
|
915
|
-
val: dm_gen_Pools.Adv,
|
|
916
|
-
count: 0
|
|
917
|
-
},
|
|
918
|
-
{
|
|
919
|
-
val: dm_gen_Pools.Ix,
|
|
920
|
-
count: 0
|
|
921
|
-
}
|
|
922
|
-
],
|
|
923
|
-
platform: []
|
|
924
|
-
};
|
|
925
|
-
const stat = this.dans.reduce((s, d)=>{
|
|
926
|
-
const SOID = s.SOID.find((i)=>i.val === d.SOID);
|
|
927
|
-
if (SOID) SOID.count++;
|
|
928
|
-
else s.SOID.push({
|
|
929
|
-
val: d.SOID,
|
|
930
|
-
count: 1
|
|
931
|
-
});
|
|
932
|
-
const mode = s.mode.find((i)=>i.val === d.mode);
|
|
933
|
-
if (mode) mode.count++;
|
|
934
|
-
else s.mode.push({
|
|
935
|
-
val: d.mode,
|
|
936
|
-
count: 1
|
|
937
|
-
});
|
|
938
|
-
const fontsize = s.fontsize.find((i)=>i.val === d.fontsize);
|
|
939
|
-
if (fontsize) fontsize.count++;
|
|
940
|
-
else s.fontsize.push({
|
|
941
|
-
val: d.fontsize,
|
|
942
|
-
count: 1
|
|
943
|
-
});
|
|
944
|
-
const color = s.color.find((i)=>i.val === d.color);
|
|
945
|
-
if (color) color.count++;
|
|
946
|
-
else s.color.push({
|
|
947
|
-
val: d.color,
|
|
948
|
-
count: 1
|
|
949
|
-
});
|
|
950
|
-
const senderID = s.senderID.find((i)=>i.val === d.senderID);
|
|
951
|
-
if (senderID) senderID.count++;
|
|
952
|
-
else s.senderID.push({
|
|
953
|
-
val: d.senderID,
|
|
954
|
-
count: 1
|
|
955
|
-
});
|
|
956
|
-
const content = s.content.find((i)=>i.val === d.content);
|
|
957
|
-
if (content) content.count++;
|
|
958
|
-
else s.content.push({
|
|
959
|
-
val: d.content,
|
|
960
|
-
count: 1
|
|
961
|
-
});
|
|
962
|
-
const weight = s.weight.find((i)=>i.val === d.weight);
|
|
963
|
-
if (weight) weight.count++;
|
|
964
|
-
else s.weight.push({
|
|
965
|
-
val: d.weight,
|
|
966
|
-
count: 1
|
|
967
|
-
});
|
|
968
|
-
const pool = s.pool.find((i)=>i.val === d.pool);
|
|
969
|
-
if (pool) pool.count++;
|
|
970
|
-
else s.pool.push({
|
|
971
|
-
val: d.pool,
|
|
972
|
-
count: 1
|
|
973
|
-
});
|
|
974
|
-
const platform = s.platform.find((i)=>i.val === d.platform);
|
|
975
|
-
if (platform) platform.count++;
|
|
976
|
-
else s.platform.push({
|
|
977
|
-
val: d.platform,
|
|
884
|
+
getShared(key) {
|
|
885
|
+
const isShared = (key)=>this.dans.every((d)=>d[key]);
|
|
886
|
+
return isShared(key) ? this.dans[0][key] : void 0;
|
|
887
|
+
}
|
|
888
|
+
getStat(key) {
|
|
889
|
+
const default_stat = [];
|
|
890
|
+
const stats = this.dans.reduce((stat, dan)=>{
|
|
891
|
+
const valWithCount = stat.find((i)=>i.val === dan[key]);
|
|
892
|
+
if (valWithCount) valWithCount.count++;
|
|
893
|
+
else stat.push({
|
|
894
|
+
val: dan[key],
|
|
978
895
|
count: 1
|
|
979
896
|
});
|
|
980
|
-
return
|
|
897
|
+
return stat;
|
|
981
898
|
}, default_stat);
|
|
982
|
-
return
|
|
899
|
+
return stats;
|
|
900
|
+
}
|
|
901
|
+
getMost(key) {
|
|
902
|
+
return this.getStat(key).sort((a, b)=>b.count - a.count)[0];
|
|
983
903
|
}
|
|
984
904
|
get most() {
|
|
985
|
-
const s = this.stat;
|
|
986
905
|
return {
|
|
987
|
-
mode:
|
|
988
|
-
fontsize:
|
|
989
|
-
color:
|
|
990
|
-
senderID:
|
|
991
|
-
content:
|
|
992
|
-
weight:
|
|
993
|
-
pool:
|
|
994
|
-
platform:
|
|
906
|
+
mode: this.getMost('mode').val,
|
|
907
|
+
fontsize: this.getMost('fontsize').val,
|
|
908
|
+
color: this.getMost('color').val,
|
|
909
|
+
senderID: this.getMost('senderID').val,
|
|
910
|
+
content: this.getMost('content').val,
|
|
911
|
+
weight: this.getMost('weight').val,
|
|
912
|
+
pool: this.getMost('pool').val,
|
|
913
|
+
platform: this.getMost('platform').val
|
|
995
914
|
};
|
|
996
915
|
}
|
|
997
916
|
static create(options) {
|
|
@@ -1115,7 +1034,8 @@ class UniPool {
|
|
|
1115
1034
|
'platform',
|
|
1116
1035
|
'pool'
|
|
1117
1036
|
].map((k)=>danmaku[k]).join('|');
|
|
1118
|
-
const extra = result[i].extra
|
|
1037
|
+
const extra = result[i].extra;
|
|
1038
|
+
const mergeData = mergeObj[key];
|
|
1119
1039
|
result[i].extraStr = src_JSON.stringify({
|
|
1120
1040
|
...extra,
|
|
1121
1041
|
danuni: {
|
|
@@ -1144,7 +1064,12 @@ class UniPool {
|
|
|
1144
1064
|
minify() {
|
|
1145
1065
|
return this.dans.map((d)=>d.minify());
|
|
1146
1066
|
}
|
|
1147
|
-
static import(file, options) {
|
|
1067
|
+
static import(file, options, mod) {
|
|
1068
|
+
if (!mod) mod = [
|
|
1069
|
+
'json',
|
|
1070
|
+
'str',
|
|
1071
|
+
'bin'
|
|
1072
|
+
];
|
|
1148
1073
|
const err = "\u65E0\u6CD5\u8BC6\u522B\u8BE5\u6587\u4EF6\uFF0C\u8BF7\u624B\u52A8\u6307\u5B9A\u683C\u5F0F\uFF01";
|
|
1149
1074
|
const parseJSON = (json)=>{
|
|
1150
1075
|
try {
|
|
@@ -1167,61 +1092,66 @@ class UniPool {
|
|
|
1167
1092
|
} catch {}
|
|
1168
1093
|
};
|
|
1169
1094
|
const parseStr = (file)=>{
|
|
1170
|
-
try {
|
|
1095
|
+
if (mod.includes('json')) try {
|
|
1171
1096
|
if (isJSON(file)) {
|
|
1172
1097
|
const json = src_JSON.parse(file);
|
|
1173
1098
|
return parseJSON(json);
|
|
1174
1099
|
}
|
|
1175
1100
|
} catch {}
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1101
|
+
if (mod.includes('str')) {
|
|
1102
|
+
try {
|
|
1103
|
+
const xmlParser = new XMLParser({
|
|
1104
|
+
ignoreAttributes: false
|
|
1105
|
+
});
|
|
1106
|
+
const xml = xmlParser.parse(file);
|
|
1107
|
+
if (xml?.i?.d) return {
|
|
1108
|
+
pool: this.fromBiliXML(file, options),
|
|
1109
|
+
fmt: 'bili.xml'
|
|
1110
|
+
};
|
|
1111
|
+
} catch {}
|
|
1112
|
+
try {
|
|
1113
|
+
return {
|
|
1114
|
+
pool: this.fromASS(file, options),
|
|
1115
|
+
fmt: 'common.ass'
|
|
1116
|
+
};
|
|
1117
|
+
} catch {}
|
|
1118
|
+
}
|
|
1192
1119
|
};
|
|
1193
1120
|
let errmesg;
|
|
1194
|
-
if (isObject(file))
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1121
|
+
if (isObject(file)) {
|
|
1122
|
+
if (file instanceof ArrayBuffer || file instanceof Uint8Array) {
|
|
1123
|
+
if (mod.includes('bin')) {
|
|
1124
|
+
try {
|
|
1125
|
+
return {
|
|
1126
|
+
pool: this.fromPb(file),
|
|
1127
|
+
fmt: 'danuni.pb.bin'
|
|
1128
|
+
};
|
|
1129
|
+
} catch {}
|
|
1130
|
+
try {
|
|
1131
|
+
return {
|
|
1132
|
+
pool: this.fromBiliGrpc(file),
|
|
1133
|
+
fmt: 'bili.pb.bin'
|
|
1134
|
+
};
|
|
1135
|
+
} catch {}
|
|
1136
|
+
try {
|
|
1137
|
+
return {
|
|
1138
|
+
pool: this.fromBiliCommandGrpc(file),
|
|
1139
|
+
fmt: 'bili.cmd.pb.bin'
|
|
1140
|
+
};
|
|
1141
|
+
} catch {}
|
|
1142
|
+
}
|
|
1143
|
+
try {
|
|
1144
|
+
const fileStr = new TextDecoder().decode(file);
|
|
1145
|
+
const prStr = parseStr(fileStr);
|
|
1146
|
+
if (prStr) return prStr;
|
|
1147
|
+
errmesg = `${err}(\u{5B9A}\u{4F4D}: bin->string)`;
|
|
1148
|
+
} catch {}
|
|
1149
|
+
} else if (mod.includes('json')) {
|
|
1150
|
+
const prJSON = parseJSON(file);
|
|
1151
|
+
if (!prJSON) throw new Error(`${err}(\u{5B9A}\u{4F4D}: json)`);
|
|
1152
|
+
return prJSON;
|
|
1153
|
+
}
|
|
1154
|
+
} else if (isString(file)) {
|
|
1225
1155
|
const prStr = parseStr(file);
|
|
1226
1156
|
if (!prStr) throw new Error(`${err}(\u{5B9A}\u{4F4D}: string)`);
|
|
1227
1157
|
return prStr;
|
|
@@ -1286,9 +1216,14 @@ class UniPool {
|
|
|
1286
1216
|
static fromBiliXML(xml, options) {
|
|
1287
1217
|
const parser = new XMLParser({
|
|
1288
1218
|
ignoreAttributes: false
|
|
1289
|
-
})
|
|
1219
|
+
});
|
|
1220
|
+
const oriData = parser.parse(xml);
|
|
1221
|
+
const dans = oriData.i.d;
|
|
1222
|
+
const fromConverted = !!oriData.danuni;
|
|
1223
|
+
const cid = BigInt(oriData.i.chatid);
|
|
1290
1224
|
return new UniPool(dans.map((d)=>{
|
|
1291
|
-
const p_str = d['@_p']
|
|
1225
|
+
const p_str = d['@_p'];
|
|
1226
|
+
const p_arr = p_str.split(',');
|
|
1292
1227
|
return UniDM.fromBili({
|
|
1293
1228
|
content: d['#text'],
|
|
1294
1229
|
progress: Number.parseFloat(p_arr[0]),
|
|
@@ -1343,14 +1278,16 @@ class UniPool {
|
|
|
1343
1278
|
});
|
|
1344
1279
|
}
|
|
1345
1280
|
static fromBiliGrpc(bin, options) {
|
|
1346
|
-
const data = fromBinary(DmSegMobileReplySchema, new Uint8Array(bin))
|
|
1281
|
+
const data = fromBinary(DmSegMobileReplySchema, new Uint8Array(bin));
|
|
1282
|
+
const json = data.elems;
|
|
1347
1283
|
return new UniPool(json.map((d)=>UniDM.fromBili({
|
|
1348
1284
|
...d,
|
|
1349
1285
|
progress: d.progress / 1000
|
|
1350
1286
|
}, d.oid, options)), options);
|
|
1351
1287
|
}
|
|
1352
1288
|
static fromBiliCommandGrpc(bin, options) {
|
|
1353
|
-
const data = fromBinary(DmWebViewReplySchema, new Uint8Array(bin))
|
|
1289
|
+
const data = fromBinary(DmWebViewReplySchema, new Uint8Array(bin));
|
|
1290
|
+
const json = data.commandDms;
|
|
1354
1291
|
return new UniPool(json.map((d)=>UniDM.fromBiliCommand(d, d.oid, options)), options);
|
|
1355
1292
|
}
|
|
1356
1293
|
static fromDplayer(json, playerID, domain = 'other', options) {
|
|
@@ -1756,7 +1693,8 @@ const ass_info = ({ playResX, playResY }, { filename, title })=>{
|
|
|
1756
1693
|
const compressTypes = [
|
|
1757
1694
|
'brotli',
|
|
1758
1695
|
'gzip'
|
|
1759
|
-
]
|
|
1696
|
+
];
|
|
1697
|
+
const baseTypes = [
|
|
1760
1698
|
'base64',
|
|
1761
1699
|
'base18384'
|
|
1762
1700
|
];
|
|
@@ -1770,19 +1708,25 @@ function raw_raw(list, config, context, compressType = 'brotli', baseType = 'bas
|
|
|
1770
1708
|
list,
|
|
1771
1709
|
config,
|
|
1772
1710
|
context
|
|
1773
|
-
}
|
|
1711
|
+
};
|
|
1712
|
+
const rawText = JSON.stringify(raw1);
|
|
1774
1713
|
let compress;
|
|
1775
1714
|
compress = 'brotli' === compressType ? brotliCompressSync(rawText) : gzipSync(rawText);
|
|
1776
1715
|
return `;RawCompressType: ${compressType}\n;RawBaseType: ${baseType}\n;Raw: ${'base64' === baseType ? compress.toString('base64') : fromUint16Array(external_base16384_encode(compress))}`;
|
|
1777
1716
|
}
|
|
1778
1717
|
function deRaw(ass) {
|
|
1779
|
-
const arr = ass.split('\n')
|
|
1718
|
+
const arr = ass.split('\n');
|
|
1719
|
+
const lineCompressType = arr.find((line)=>line.startsWith(';RawCompressType:'));
|
|
1720
|
+
const lineBaseType = arr.find((line)=>line.startsWith(';RawBaseType:'));
|
|
1721
|
+
const lineRaw = arr.find((line)=>line.startsWith(';Raw:'));
|
|
1780
1722
|
if (!lineCompressType || !lineBaseType || !lineRaw) return;
|
|
1781
1723
|
{
|
|
1782
|
-
let compressType = lineCompressType.replace(';RawCompressType: ', '').trim()
|
|
1724
|
+
let compressType = lineCompressType.replace(';RawCompressType: ', '').trim();
|
|
1725
|
+
let baseType = lineBaseType.replace(';RawBaseType: ', '').trim();
|
|
1783
1726
|
if (!compressTypes.includes(compressType)) compressType = 'gzip';
|
|
1784
1727
|
if (!baseTypes.includes(baseType)) baseType = 'base64';
|
|
1785
|
-
const text = lineRaw.replace(';Raw: ', '').trim()
|
|
1728
|
+
const text = lineRaw.replace(';Raw: ', '').trim();
|
|
1729
|
+
const buffer = 'base64' === baseType ? Buffer.from(text, 'base64') : Buffer.from(decode(Buffer.from(text, 'utf-8').toString('utf-8')));
|
|
1786
1730
|
let decompress;
|
|
1787
1731
|
decompress = 'brotli' === compressType ? brotliDecompressSync(buffer) : gunzipSync(buffer);
|
|
1788
1732
|
try {
|
|
@@ -1837,7 +1781,8 @@ const ass_create = (list, rawList, config, context = {
|
|
|
1837
1781
|
filename: 'unknown',
|
|
1838
1782
|
title: 'unknown'
|
|
1839
1783
|
}, rawConfig)=>{
|
|
1840
|
-
const Elist = UniPool2DanmakuLists(list)
|
|
1784
|
+
const Elist = UniPool2DanmakuLists(list);
|
|
1785
|
+
const ErawList = UniPool2DanmakuLists(rawList);
|
|
1841
1786
|
const content = [
|
|
1842
1787
|
ass_info(config, context),
|
|
1843
1788
|
style(config),
|
|
@@ -1930,126 +1875,36 @@ class src_UniPool {
|
|
|
1930
1875
|
color: isShared('color') ? this.dans[0].color : void 0
|
|
1931
1876
|
};
|
|
1932
1877
|
}
|
|
1933
|
-
|
|
1934
|
-
const
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
},
|
|
1945
|
-
{
|
|
1946
|
-
val: dm_gen_Modes.Top,
|
|
1947
|
-
count: 0
|
|
1948
|
-
},
|
|
1949
|
-
{
|
|
1950
|
-
val: dm_gen_Modes.Reverse,
|
|
1951
|
-
count: 0
|
|
1952
|
-
},
|
|
1953
|
-
{
|
|
1954
|
-
val: dm_gen_Modes.Ext,
|
|
1955
|
-
count: 0
|
|
1956
|
-
}
|
|
1957
|
-
],
|
|
1958
|
-
fontsize: [],
|
|
1959
|
-
color: [],
|
|
1960
|
-
senderID: [],
|
|
1961
|
-
content: [],
|
|
1962
|
-
weight: [],
|
|
1963
|
-
pool: [
|
|
1964
|
-
{
|
|
1965
|
-
val: dm_gen_Pools.Def,
|
|
1966
|
-
count: 0
|
|
1967
|
-
},
|
|
1968
|
-
{
|
|
1969
|
-
val: dm_gen_Pools.Sub,
|
|
1970
|
-
count: 0
|
|
1971
|
-
},
|
|
1972
|
-
{
|
|
1973
|
-
val: dm_gen_Pools.Adv,
|
|
1974
|
-
count: 0
|
|
1975
|
-
},
|
|
1976
|
-
{
|
|
1977
|
-
val: dm_gen_Pools.Ix,
|
|
1978
|
-
count: 0
|
|
1979
|
-
}
|
|
1980
|
-
],
|
|
1981
|
-
platform: []
|
|
1982
|
-
};
|
|
1983
|
-
const stat = this.dans.reduce((s, d)=>{
|
|
1984
|
-
const SOID = s.SOID.find((i)=>i.val === d.SOID);
|
|
1985
|
-
if (SOID) SOID.count++;
|
|
1986
|
-
else s.SOID.push({
|
|
1987
|
-
val: d.SOID,
|
|
1988
|
-
count: 1
|
|
1989
|
-
});
|
|
1990
|
-
const mode = s.mode.find((i)=>i.val === d.mode);
|
|
1991
|
-
if (mode) mode.count++;
|
|
1992
|
-
else s.mode.push({
|
|
1993
|
-
val: d.mode,
|
|
1994
|
-
count: 1
|
|
1995
|
-
});
|
|
1996
|
-
const fontsize = s.fontsize.find((i)=>i.val === d.fontsize);
|
|
1997
|
-
if (fontsize) fontsize.count++;
|
|
1998
|
-
else s.fontsize.push({
|
|
1999
|
-
val: d.fontsize,
|
|
2000
|
-
count: 1
|
|
2001
|
-
});
|
|
2002
|
-
const color = s.color.find((i)=>i.val === d.color);
|
|
2003
|
-
if (color) color.count++;
|
|
2004
|
-
else s.color.push({
|
|
2005
|
-
val: d.color,
|
|
2006
|
-
count: 1
|
|
2007
|
-
});
|
|
2008
|
-
const senderID = s.senderID.find((i)=>i.val === d.senderID);
|
|
2009
|
-
if (senderID) senderID.count++;
|
|
2010
|
-
else s.senderID.push({
|
|
2011
|
-
val: d.senderID,
|
|
2012
|
-
count: 1
|
|
2013
|
-
});
|
|
2014
|
-
const content = s.content.find((i)=>i.val === d.content);
|
|
2015
|
-
if (content) content.count++;
|
|
2016
|
-
else s.content.push({
|
|
2017
|
-
val: d.content,
|
|
2018
|
-
count: 1
|
|
2019
|
-
});
|
|
2020
|
-
const weight = s.weight.find((i)=>i.val === d.weight);
|
|
2021
|
-
if (weight) weight.count++;
|
|
2022
|
-
else s.weight.push({
|
|
2023
|
-
val: d.weight,
|
|
2024
|
-
count: 1
|
|
2025
|
-
});
|
|
2026
|
-
const pool = s.pool.find((i)=>i.val === d.pool);
|
|
2027
|
-
if (pool) pool.count++;
|
|
2028
|
-
else s.pool.push({
|
|
2029
|
-
val: d.pool,
|
|
2030
|
-
count: 1
|
|
2031
|
-
});
|
|
2032
|
-
const platform = s.platform.find((i)=>i.val === d.platform);
|
|
2033
|
-
if (platform) platform.count++;
|
|
2034
|
-
else s.platform.push({
|
|
2035
|
-
val: d.platform,
|
|
1878
|
+
getShared(key) {
|
|
1879
|
+
const isShared = (key)=>this.dans.every((d)=>d[key]);
|
|
1880
|
+
return isShared(key) ? this.dans[0][key] : void 0;
|
|
1881
|
+
}
|
|
1882
|
+
getStat(key) {
|
|
1883
|
+
const default_stat = [];
|
|
1884
|
+
const stats = this.dans.reduce((stat, dan)=>{
|
|
1885
|
+
const valWithCount = stat.find((i)=>i.val === dan[key]);
|
|
1886
|
+
if (valWithCount) valWithCount.count++;
|
|
1887
|
+
else stat.push({
|
|
1888
|
+
val: dan[key],
|
|
2036
1889
|
count: 1
|
|
2037
1890
|
});
|
|
2038
|
-
return
|
|
1891
|
+
return stat;
|
|
2039
1892
|
}, default_stat);
|
|
2040
|
-
return
|
|
1893
|
+
return stats;
|
|
1894
|
+
}
|
|
1895
|
+
getMost(key) {
|
|
1896
|
+
return this.getStat(key).sort((a, b)=>b.count - a.count)[0];
|
|
2041
1897
|
}
|
|
2042
1898
|
get most() {
|
|
2043
|
-
const s = this.stat;
|
|
2044
1899
|
return {
|
|
2045
|
-
mode:
|
|
2046
|
-
fontsize:
|
|
2047
|
-
color:
|
|
2048
|
-
senderID:
|
|
2049
|
-
content:
|
|
2050
|
-
weight:
|
|
2051
|
-
pool:
|
|
2052
|
-
platform:
|
|
1900
|
+
mode: this.getMost('mode').val,
|
|
1901
|
+
fontsize: this.getMost('fontsize').val,
|
|
1902
|
+
color: this.getMost('color').val,
|
|
1903
|
+
senderID: this.getMost('senderID').val,
|
|
1904
|
+
content: this.getMost('content').val,
|
|
1905
|
+
weight: this.getMost('weight').val,
|
|
1906
|
+
pool: this.getMost('pool').val,
|
|
1907
|
+
platform: this.getMost('platform').val
|
|
2053
1908
|
};
|
|
2054
1909
|
}
|
|
2055
1910
|
static create(options) {
|
|
@@ -2173,7 +2028,8 @@ class src_UniPool {
|
|
|
2173
2028
|
'platform',
|
|
2174
2029
|
'pool'
|
|
2175
2030
|
].map((k)=>danmaku[k]).join('|');
|
|
2176
|
-
const extra = result[i].extra
|
|
2031
|
+
const extra = result[i].extra;
|
|
2032
|
+
const mergeData = mergeObj[key];
|
|
2177
2033
|
result[i].extraStr = src_JSON_0.stringify({
|
|
2178
2034
|
...extra,
|
|
2179
2035
|
danuni: {
|
|
@@ -2202,7 +2058,12 @@ class src_UniPool {
|
|
|
2202
2058
|
minify() {
|
|
2203
2059
|
return this.dans.map((d)=>d.minify());
|
|
2204
2060
|
}
|
|
2205
|
-
static import(file, options) {
|
|
2061
|
+
static import(file, options, mod) {
|
|
2062
|
+
if (!mod) mod = [
|
|
2063
|
+
'json',
|
|
2064
|
+
'str',
|
|
2065
|
+
'bin'
|
|
2066
|
+
];
|
|
2206
2067
|
const err = "\u65E0\u6CD5\u8BC6\u522B\u8BE5\u6587\u4EF6\uFF0C\u8BF7\u624B\u52A8\u6307\u5B9A\u683C\u5F0F\uFF01";
|
|
2207
2068
|
const parseJSON = (json)=>{
|
|
2208
2069
|
try {
|
|
@@ -2225,61 +2086,66 @@ class src_UniPool {
|
|
|
2225
2086
|
} catch {}
|
|
2226
2087
|
};
|
|
2227
2088
|
const parseStr = (file)=>{
|
|
2228
|
-
try {
|
|
2089
|
+
if (mod.includes('json')) try {
|
|
2229
2090
|
if (isJSON(file)) {
|
|
2230
2091
|
const json = src_JSON_0.parse(file);
|
|
2231
2092
|
return parseJSON(json);
|
|
2232
2093
|
}
|
|
2233
2094
|
} catch {}
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2095
|
+
if (mod.includes('str')) {
|
|
2096
|
+
try {
|
|
2097
|
+
const xmlParser = new XMLParser({
|
|
2098
|
+
ignoreAttributes: false
|
|
2099
|
+
});
|
|
2100
|
+
const xml = xmlParser.parse(file);
|
|
2101
|
+
if (xml?.i?.d) return {
|
|
2102
|
+
pool: this.fromBiliXML(file, options),
|
|
2103
|
+
fmt: 'bili.xml'
|
|
2104
|
+
};
|
|
2105
|
+
} catch {}
|
|
2106
|
+
try {
|
|
2107
|
+
return {
|
|
2108
|
+
pool: this.fromASS(file, options),
|
|
2109
|
+
fmt: 'common.ass'
|
|
2110
|
+
};
|
|
2111
|
+
} catch {}
|
|
2112
|
+
}
|
|
2250
2113
|
};
|
|
2251
2114
|
let errmesg;
|
|
2252
|
-
if (isObject(file))
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
|
|
2115
|
+
if (isObject(file)) {
|
|
2116
|
+
if (file instanceof ArrayBuffer || file instanceof Uint8Array) {
|
|
2117
|
+
if (mod.includes('bin')) {
|
|
2118
|
+
try {
|
|
2119
|
+
return {
|
|
2120
|
+
pool: this.fromPb(file),
|
|
2121
|
+
fmt: 'danuni.pb.bin'
|
|
2122
|
+
};
|
|
2123
|
+
} catch {}
|
|
2124
|
+
try {
|
|
2125
|
+
return {
|
|
2126
|
+
pool: this.fromBiliGrpc(file),
|
|
2127
|
+
fmt: 'bili.pb.bin'
|
|
2128
|
+
};
|
|
2129
|
+
} catch {}
|
|
2130
|
+
try {
|
|
2131
|
+
return {
|
|
2132
|
+
pool: this.fromBiliCommandGrpc(file),
|
|
2133
|
+
fmt: 'bili.cmd.pb.bin'
|
|
2134
|
+
};
|
|
2135
|
+
} catch {}
|
|
2136
|
+
}
|
|
2137
|
+
try {
|
|
2138
|
+
const fileStr = new TextDecoder().decode(file);
|
|
2139
|
+
const prStr = parseStr(fileStr);
|
|
2140
|
+
if (prStr) return prStr;
|
|
2141
|
+
errmesg = `${err}(\u{5B9A}\u{4F4D}: bin->string)`;
|
|
2142
|
+
} catch {}
|
|
2143
|
+
} else if (mod.includes('json')) {
|
|
2144
|
+
const prJSON = parseJSON(file);
|
|
2145
|
+
if (!prJSON) throw new Error(`${err}(\u{5B9A}\u{4F4D}: json)`);
|
|
2146
|
+
return prJSON;
|
|
2147
|
+
}
|
|
2148
|
+
} else if (isString(file)) {
|
|
2283
2149
|
const prStr = parseStr(file);
|
|
2284
2150
|
if (!prStr) throw new Error(`${err}(\u{5B9A}\u{4F4D}: string)`);
|
|
2285
2151
|
return prStr;
|
|
@@ -2344,9 +2210,14 @@ class src_UniPool {
|
|
|
2344
2210
|
static fromBiliXML(xml, options) {
|
|
2345
2211
|
const parser = new XMLParser({
|
|
2346
2212
|
ignoreAttributes: false
|
|
2347
|
-
})
|
|
2213
|
+
});
|
|
2214
|
+
const oriData = parser.parse(xml);
|
|
2215
|
+
const dans = oriData.i.d;
|
|
2216
|
+
const fromConverted = !!oriData.danuni;
|
|
2217
|
+
const cid = BigInt(oriData.i.chatid);
|
|
2348
2218
|
return new src_UniPool(dans.map((d)=>{
|
|
2349
|
-
const p_str = d['@_p']
|
|
2219
|
+
const p_str = d['@_p'];
|
|
2220
|
+
const p_arr = p_str.split(',');
|
|
2350
2221
|
return UniDM.fromBili({
|
|
2351
2222
|
content: d['#text'],
|
|
2352
2223
|
progress: Number.parseFloat(p_arr[0]),
|
|
@@ -2401,14 +2272,16 @@ class src_UniPool {
|
|
|
2401
2272
|
});
|
|
2402
2273
|
}
|
|
2403
2274
|
static fromBiliGrpc(bin, options) {
|
|
2404
|
-
const data = fromBinary(DmSegMobileReplySchema, new Uint8Array(bin))
|
|
2275
|
+
const data = fromBinary(DmSegMobileReplySchema, new Uint8Array(bin));
|
|
2276
|
+
const json = data.elems;
|
|
2405
2277
|
return new src_UniPool(json.map((d)=>UniDM.fromBili({
|
|
2406
2278
|
...d,
|
|
2407
2279
|
progress: d.progress / 1000
|
|
2408
2280
|
}, d.oid, options)), options);
|
|
2409
2281
|
}
|
|
2410
2282
|
static fromBiliCommandGrpc(bin, options) {
|
|
2411
|
-
const data = fromBinary(DmWebViewReplySchema, new Uint8Array(bin))
|
|
2283
|
+
const data = fromBinary(DmWebViewReplySchema, new Uint8Array(bin));
|
|
2284
|
+
const json = data.commandDms;
|
|
2412
2285
|
return new src_UniPool(json.map((d)=>UniDM.fromBiliCommand(d, d.oid, options)), options);
|
|
2413
2286
|
}
|
|
2414
2287
|
static fromDplayer(json, playerID, domain = 'other', options) {
|