@dan-uni/dan-any 0.9.8 → 1.0.0
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 +255 -242
- package/dist/index.min.js +260 -247
- package/dist/index.umd.min.js +306 -283
- package/dist/src/index.d.ts +18 -8
- package/dist/src/proto/gen/danuni_pb.d.ts +2 -2
- package/package.json +5 -5
- package/src/ass-gen/ass/dialogue.ts +4 -4
- package/src/index.ts +182 -132
- package/src/proto/gen/bili/dm_pb.ts +1 -1
- package/src/proto/gen/danuni_pb.ts +4 -4
- package/src/proto/src/danuni.proto +1 -1
- package/src/utils/dm-gen.ts +16 -19
package/dist/index.umd.min.js
CHANGED
|
@@ -10272,7 +10272,7 @@
|
|
|
10272
10272
|
function _isUint8Array(obj) {
|
|
10273
10273
|
return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
|
|
10274
10274
|
}
|
|
10275
|
-
var debugUtil = __webpack_require__("?
|
|
10275
|
+
var debugUtil = __webpack_require__("?8beb");
|
|
10276
10276
|
var debug;
|
|
10277
10277
|
debug = debugUtil && debugUtil.debuglog ? debugUtil.debuglog('stream') : function() {};
|
|
10278
10278
|
var BufferList = __webpack_require__("../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/buffer_list.js");
|
|
@@ -11653,7 +11653,7 @@
|
|
|
11653
11653
|
return ("string" === hint ? String : Number)(input);
|
|
11654
11654
|
}
|
|
11655
11655
|
var _require = __webpack_require__("../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.js"), Buffer = _require.Buffer;
|
|
11656
|
-
var _require2 = __webpack_require__("?
|
|
11656
|
+
var _require2 = __webpack_require__("?c028"), inspect = _require2.inspect;
|
|
11657
11657
|
var custom = inspect && inspect.custom || 'inspect';
|
|
11658
11658
|
function copyBuffer(src, target, offset) {
|
|
11659
11659
|
Buffer.prototype.copy.call(src, target, offset);
|
|
@@ -13153,13 +13153,13 @@
|
|
|
13153
13153
|
}
|
|
13154
13154
|
exports1.callbackify = callbackify;
|
|
13155
13155
|
},
|
|
13156
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13156
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isByteLength.js": function(module1, exports1, __webpack_require__) {
|
|
13157
13157
|
"use strict";
|
|
13158
13158
|
Object.defineProperty(exports1, "__esModule", {
|
|
13159
13159
|
value: true
|
|
13160
13160
|
});
|
|
13161
13161
|
exports1["default"] = isByteLength;
|
|
13162
|
-
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13162
|
+
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/assertString.js"));
|
|
13163
13163
|
function _interopRequireDefault(e) {
|
|
13164
13164
|
return e && e.__esModule ? e : {
|
|
13165
13165
|
default: e
|
|
@@ -13189,18 +13189,18 @@
|
|
|
13189
13189
|
module1.exports = exports1["default"];
|
|
13190
13190
|
module1.exports["default"] = exports1["default"];
|
|
13191
13191
|
},
|
|
13192
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13192
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isEmail.js": function(module1, exports1, __webpack_require__) {
|
|
13193
13193
|
"use strict";
|
|
13194
13194
|
Object.defineProperty(exports1, "__esModule", {
|
|
13195
13195
|
value: true
|
|
13196
13196
|
});
|
|
13197
13197
|
exports1["default"] = isEmail;
|
|
13198
|
-
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13199
|
-
var _checkHost = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13200
|
-
var _isByteLength = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13201
|
-
var _isFQDN = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13202
|
-
var _isIP = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13203
|
-
var _merge = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13198
|
+
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/assertString.js"));
|
|
13199
|
+
var _checkHost = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/checkHost.js"));
|
|
13200
|
+
var _isByteLength = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isByteLength.js"));
|
|
13201
|
+
var _isFQDN = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isFQDN.js"));
|
|
13202
|
+
var _isIP = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isIP.js"));
|
|
13203
|
+
var _merge = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/merge.js"));
|
|
13204
13204
|
function _interopRequireDefault(e) {
|
|
13205
13205
|
return e && e.__esModule ? e : {
|
|
13206
13206
|
default: e
|
|
@@ -13296,14 +13296,14 @@
|
|
|
13296
13296
|
module1.exports = exports1["default"];
|
|
13297
13297
|
module1.exports["default"] = exports1["default"];
|
|
13298
13298
|
},
|
|
13299
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13299
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isFQDN.js": function(module1, exports1, __webpack_require__) {
|
|
13300
13300
|
"use strict";
|
|
13301
13301
|
Object.defineProperty(exports1, "__esModule", {
|
|
13302
13302
|
value: true
|
|
13303
13303
|
});
|
|
13304
13304
|
exports1["default"] = isFQDN;
|
|
13305
|
-
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13306
|
-
var _merge = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13305
|
+
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/assertString.js"));
|
|
13306
|
+
var _merge = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/merge.js"));
|
|
13307
13307
|
function _interopRequireDefault(e) {
|
|
13308
13308
|
return e && e.__esModule ? e : {
|
|
13309
13309
|
default: e
|
|
@@ -13342,13 +13342,13 @@
|
|
|
13342
13342
|
module1.exports = exports1["default"];
|
|
13343
13343
|
module1.exports["default"] = exports1["default"];
|
|
13344
13344
|
},
|
|
13345
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13345
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isIP.js": function(module1, exports1, __webpack_require__) {
|
|
13346
13346
|
"use strict";
|
|
13347
13347
|
Object.defineProperty(exports1, "__esModule", {
|
|
13348
13348
|
value: true
|
|
13349
13349
|
});
|
|
13350
13350
|
exports1["default"] = isIP;
|
|
13351
|
-
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13351
|
+
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/assertString.js"));
|
|
13352
13352
|
function _interopRequireDefault(e) {
|
|
13353
13353
|
return e && e.__esModule ? e : {
|
|
13354
13354
|
default: e
|
|
@@ -13382,15 +13382,15 @@
|
|
|
13382
13382
|
module1.exports = exports1["default"];
|
|
13383
13383
|
module1.exports["default"] = exports1["default"];
|
|
13384
13384
|
},
|
|
13385
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13385
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isJSON.js": function(module1, exports1, __webpack_require__) {
|
|
13386
13386
|
"use strict";
|
|
13387
13387
|
Object.defineProperty(exports1, "__esModule", {
|
|
13388
13388
|
value: true
|
|
13389
13389
|
});
|
|
13390
13390
|
exports1["default"] = isJSON;
|
|
13391
|
-
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13392
|
-
var _includesArray = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13393
|
-
var _merge = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13391
|
+
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/assertString.js"));
|
|
13392
|
+
var _includesArray = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/includesArray.js"));
|
|
13393
|
+
var _merge = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/merge.js"));
|
|
13394
13394
|
function _interopRequireDefault(e) {
|
|
13395
13395
|
return e && e.__esModule ? e : {
|
|
13396
13396
|
default: e
|
|
@@ -13424,7 +13424,7 @@
|
|
|
13424
13424
|
module1.exports = exports1["default"];
|
|
13425
13425
|
module1.exports["default"] = exports1["default"];
|
|
13426
13426
|
},
|
|
13427
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13427
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/assertString.js": function(module1, exports1) {
|
|
13428
13428
|
"use strict";
|
|
13429
13429
|
Object.defineProperty(exports1, "__esModule", {
|
|
13430
13430
|
value: true
|
|
@@ -13437,7 +13437,7 @@
|
|
|
13437
13437
|
module1.exports = exports1["default"];
|
|
13438
13438
|
module1.exports["default"] = exports1["default"];
|
|
13439
13439
|
},
|
|
13440
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13440
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/checkHost.js": function(module1, exports1) {
|
|
13441
13441
|
"use strict";
|
|
13442
13442
|
Object.defineProperty(exports1, "__esModule", {
|
|
13443
13443
|
value: true
|
|
@@ -13456,7 +13456,7 @@
|
|
|
13456
13456
|
module1.exports = exports1["default"];
|
|
13457
13457
|
module1.exports["default"] = exports1["default"];
|
|
13458
13458
|
},
|
|
13459
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13459
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/includesArray.js": function(module1, exports1) {
|
|
13460
13460
|
"use strict";
|
|
13461
13461
|
Object.defineProperty(exports1, "__esModule", {
|
|
13462
13462
|
value: true
|
|
@@ -13471,7 +13471,7 @@
|
|
|
13471
13471
|
module1.exports = exports1["default"];
|
|
13472
13472
|
module1.exports["default"] = exports1["default"];
|
|
13473
13473
|
},
|
|
13474
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13474
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/merge.js": function(module1, exports1) {
|
|
13475
13475
|
"use strict";
|
|
13476
13476
|
Object.defineProperty(exports1, "__esModule", {
|
|
13477
13477
|
value: true
|
|
@@ -13564,8 +13564,8 @@
|
|
|
13564
13564
|
return number + '';
|
|
13565
13565
|
};
|
|
13566
13566
|
},
|
|
13567
|
-
"?
|
|
13568
|
-
"?
|
|
13567
|
+
"?c028": function() {},
|
|
13568
|
+
"?8beb": function() {},
|
|
13569
13569
|
"../../node_modules/.pnpm/available-typed-arrays@1.0.7/node_modules/available-typed-arrays/index.js": function(module1, __unused_webpack_exports, __webpack_require__) {
|
|
13570
13570
|
"use strict";
|
|
13571
13571
|
var possibleNames = __webpack_require__("../../node_modules/.pnpm/possible-typed-array-names@1.1.0/node_modules/possible-typed-array-names/index.js");
|
|
@@ -14211,11 +14211,11 @@ and limitations under the License.
|
|
|
14211
14211
|
"use strict";
|
|
14212
14212
|
__webpack_require__.r(__webpack_exports__);
|
|
14213
14213
|
__webpack_require__.d(__webpack_exports__, {
|
|
14214
|
-
UniDMTools: ()=>dm_gen_namespaceObject,
|
|
14215
|
-
UniIDTools: ()=>id_gen_namespaceObject,
|
|
14216
|
-
UniDM: ()=>UniDM,
|
|
14217
14214
|
platform: ()=>platform_namespaceObject,
|
|
14218
|
-
|
|
14215
|
+
UniDM: ()=>UniDM,
|
|
14216
|
+
UniDMTools: ()=>dm_gen_namespaceObject,
|
|
14217
|
+
UniPool: ()=>src_UniPool,
|
|
14218
|
+
UniIDTools: ()=>id_gen_namespaceObject
|
|
14219
14219
|
});
|
|
14220
14220
|
var platform_namespaceObject = {};
|
|
14221
14221
|
__webpack_require__.r(platform_namespaceObject);
|
|
@@ -14246,7 +14246,7 @@ and limitations under the License.
|
|
|
14246
14246
|
UniDM: ()=>UniDM
|
|
14247
14247
|
});
|
|
14248
14248
|
__webpack_require__("../../node_modules/.pnpm/reflect-metadata@0.2.2/node_modules/reflect-metadata/ReflectLite.js");
|
|
14249
|
-
var isJSON = __webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
14249
|
+
var isJSON = __webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isJSON.js");
|
|
14250
14250
|
var isJSON_default = /*#__PURE__*/ __webpack_require__.n(isJSON);
|
|
14251
14251
|
function IsJSON_isJSON(value) {
|
|
14252
14252
|
return 'string' == typeof value && isJSON_default()(value);
|
|
@@ -15086,6 +15086,15 @@ and limitations under the License.
|
|
|
15086
15086
|
this.saveTextToParentTag = saveTextToParentTag;
|
|
15087
15087
|
this.addChild = addChild;
|
|
15088
15088
|
this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes);
|
|
15089
|
+
if (this.options.stopNodes && this.options.stopNodes.length > 0) {
|
|
15090
|
+
this.stopNodesExact = new Set();
|
|
15091
|
+
this.stopNodesWildcard = new Set();
|
|
15092
|
+
for(let i = 0; i < this.options.stopNodes.length; i++){
|
|
15093
|
+
const stopNodeExp = this.options.stopNodes[i];
|
|
15094
|
+
if ('string' == typeof stopNodeExp) if (stopNodeExp.startsWith("*.")) this.stopNodesWildcard.add(stopNodeExp.substring(2));
|
|
15095
|
+
else this.stopNodesExact.add(stopNodeExp);
|
|
15096
|
+
}
|
|
15097
|
+
}
|
|
15089
15098
|
}
|
|
15090
15099
|
}
|
|
15091
15100
|
function addExternalEntities(externalEntities) {
|
|
@@ -15245,7 +15254,7 @@ and limitations under the License.
|
|
|
15245
15254
|
}
|
|
15246
15255
|
if (tagName !== xmlObj.tagname) jPath += jPath ? "." + tagName : tagName;
|
|
15247
15256
|
const startIndex = i;
|
|
15248
|
-
if (this.isItStopNode(this.
|
|
15257
|
+
if (this.isItStopNode(this.stopNodesExact, this.stopNodesWildcard, jPath, tagName)) {
|
|
15249
15258
|
let tagContent = "";
|
|
15250
15259
|
if (tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1) {
|
|
15251
15260
|
if ("/" === tagName[tagName.length - 1]) {
|
|
@@ -15330,12 +15339,9 @@ and limitations under the License.
|
|
|
15330
15339
|
}
|
|
15331
15340
|
return textData;
|
|
15332
15341
|
}
|
|
15333
|
-
function isItStopNode(
|
|
15334
|
-
|
|
15335
|
-
|
|
15336
|
-
const stopNodeExp = stopNodes[stopNodePath];
|
|
15337
|
-
if (allNodesExp === stopNodeExp || jPath === stopNodeExp) return true;
|
|
15338
|
-
}
|
|
15342
|
+
function isItStopNode(stopNodesExact, stopNodesWildcard, jPath, currentTagName) {
|
|
15343
|
+
if (stopNodesWildcard && stopNodesWildcard.has(currentTagName)) return true;
|
|
15344
|
+
if (stopNodesExact && stopNodesExact.has(jPath)) return true;
|
|
15339
15345
|
return false;
|
|
15340
15346
|
}
|
|
15341
15347
|
function tagExpWithClosingIndex(xmlData, i, closingChar = ">") {
|
|
@@ -17077,10 +17083,14 @@ and limitations under the License.
|
|
|
17077
17083
|
function reflect_reflect(messageDesc, message, check = true) {
|
|
17078
17084
|
return new ReflectMessageImpl(messageDesc, message, check);
|
|
17079
17085
|
}
|
|
17086
|
+
const messageSortedFields = new WeakMap();
|
|
17080
17087
|
class ReflectMessageImpl {
|
|
17081
17088
|
get sortedFields() {
|
|
17082
|
-
|
|
17083
|
-
|
|
17089
|
+
const cached = messageSortedFields.get(this.desc);
|
|
17090
|
+
if (cached) return cached;
|
|
17091
|
+
const sortedFields = this.desc.fields.concat().sort((a, b)=>a.number - b.number);
|
|
17092
|
+
messageSortedFields.set(this.desc, sortedFields);
|
|
17093
|
+
return sortedFields;
|
|
17084
17094
|
}
|
|
17085
17095
|
constructor(messageDesc, message, check = true){
|
|
17086
17096
|
this.lists = new Map();
|
|
@@ -20981,11 +20991,11 @@ and limitations under the License.
|
|
|
20981
20991
|
function timestamp_timestampMs(timestamp) {
|
|
20982
20992
|
return 1000 * Number(timestamp.seconds) + Math.round(timestamp.nanos / 1000000);
|
|
20983
20993
|
}
|
|
20984
|
-
var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"0.
|
|
20994
|
+
var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"1.0.0","TB":"https://github.com/ani-uni/danuni/tree/master/packages/dan-any#readme"}');
|
|
20985
20995
|
const file_bili_dm = /*@__PURE__*/ fileDesc("Cg1iaWxpL2RtLnByb3RvEiBiaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MSJkCgZBdmF0YXISCgoCaWQYASABKAkSCwoDdXJsGAIgASgJEkEKC2F2YXRhcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyVHlwZSIjCgZCdWJibGUSDAoEdGV4dBgBIAEoCRILCgN1cmwYAiABKAkixgEKCEJ1YmJsZVYyEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJEkEKC2J1YmJsZV90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlVHlwZRIVCg1leHBvc3VyZV9vbmNlGAQgASgIEkUKDWV4cG9zdXJlX3R5cGUYBSABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiWwoGQnV0dG9uEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUiWAoOQnV6endvcmRDb25maWcSRgoIa2V5d29yZHMYASADKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZFNob3dDb25maWcieAoSQnV6endvcmRTaG93Q29uZmlnEgwKBG5hbWUYASABKAkSDgoGc2NoZW1hGAIgASgJEg4KBnNvdXJjZRgDIAEoBRIKCgJpZBgEIAEoAxITCgtidXp6d29yZF9pZBgFIAEoAxITCgtzY2hlbWFfdHlwZRgGIAEoBSJ7CghDaGVja0JveBIMCgR0ZXh0GAEgASgJEjwKBHR5cGUYAiABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja2JveFR5cGUSFQoNZGVmYXVsdF92YWx1ZRgDIAEoCBIMCgRzaG93GAQgASgIIm8KCkNoZWNrQm94VjISDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgiggIKC0NsaWNrQnV0dG9uEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSDAoEc2hvdxgGIAEoCBI4CgZidWJibGUYByABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGUiswIKDUNsaWNrQnV0dG9uVjISFQoNcG9ydHJhaXRfdGV4dBgBIAMoCRIWCg5sYW5kc2NhcGVfdGV4dBgCIAMoCRIbChNwb3J0cmFpdF90ZXh0X2ZvY3VzGAMgAygJEhwKFGxhbmRzY2FwZV90ZXh0X2ZvY3VzGAQgAygJEkEKC3JlbmRlcl90eXBlGAUgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIXCg90ZXh0X2lucHV0X3Bvc3QYBiABKAgSFQoNZXhwb3N1cmVfb25jZRgHIAEoCBJFCg1leHBvc3VyZV90eXBlGAggASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIksKB0NvbW1hbmQSQAoLY29tbWFuZF9kbXMYASADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0i5gEKCUNvbW1hbmREbRIKCgJpZBgBIAEoAxILCgNvaWQYAiABKAMSCwoDbWlkGAMgASgDEg8KB2NvbW1hbmQYBCABKAkSDwoHY29udGVudBgFIAEoCRIQCghwcm9ncmVzcxgGIAEoBRINCgVjdGltZRgHIAEoCRINCgVtdGltZRgIIAEoCRINCgVleHRyYRgJIAEoCRINCgVpZFN0chgKIAEoCRIMCgR0eXBlGAsgASgFEhMKC2F1dG9fY3JlYXRlGAwgASgIEhIKCmNvdW50X2Rvd24YDSABKAUSDAoEYXR0chgOIAEoBSJQCg1EYW5tYWt1QUlGbGFnEj8KCGRtX2ZsYWdzGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWciiwMKC0Rhbm1ha3VFbGVtEgoKAmlkGAEgASgDEhAKCHByb2dyZXNzGAIgASgFEgwKBG1vZGUYAyABKAUSEAoIZm9udHNpemUYBCABKAUSPwoFY29sb3IYBSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIQCghtaWRfaGFzaBgGIAEoCRIPCgdjb250ZW50GAcgASgJEg0KBWN0aW1lGAggASgDEg4KBndlaWdodBgJIAEoBRIOCgZhY3Rpb24YCiABKAkSDAoEcG9vbBgLIAEoBRIOCgZpZF9zdHIYDCABKAkSDAoEYXR0chgNIAEoBRIRCglhbmltYXRpb24YFiABKAkSDQoFZXh0cmEYFyABKAkSQgoIY29sb3JmdWwYGCABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIMCgR0eXBlGBkgASgFEgsKA29pZBgaIAEoAyIpCgtEYW5tYWt1RmxhZxIMCgRkbWlkGAEgASgDEgwKBGZsYWcYAiABKAUiSwoRRGFubWFrdUZsYWdDb25maWcSEAoIcmVjX2ZsYWcYASABKAUSEAoIcmVjX3RleHQYAiABKAkSEgoKcmVjX3N3aXRjaBgDIAEoBSKLBwoYRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnEikKIXBsYXllcl9kYW5tYWt1X3VzZV9kZWZhdWx0X2NvbmZpZxgBIAEoCBIsCiRwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9zd2l0Y2gYBCABKAgSKwojcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWwYBSABKAUSHwoXcGxheWVyX2Rhbm1ha3VfYmxvY2t0b3AYBiABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tzY3JvbGwYByABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tib3R0b20YCCABKAgSJAoccGxheWVyX2Rhbm1ha3VfYmxvY2tjb2xvcmZ1bBgJIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3JlcGVhdBgKIAEoCBIjChtwbGF5ZXJfZGFubWFrdV9ibG9ja3NwZWNpYWwYCyABKAgSHgoWcGxheWVyX2Rhbm1ha3Vfb3BhY2l0eRgMIAEoAhIkChxwbGF5ZXJfZGFubWFrdV9zY2FsaW5nZmFjdG9yGA0gASgCEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAhIcChRwbGF5ZXJfZGFubWFrdV9zcGVlZBgPIAEoBRIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBAgASgIEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgRIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgSIAEoBRKYAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBMgAygLMmQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EiUKHXBsYXllcl9kYW5tYWt1X2VuYWJsZV9oZXJkX2RtGBQgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi7AkKEURhbm11UGxheWVyQ29uZmlnEh0KFXBsYXllcl9kYW5tYWt1X3N3aXRjaBgBIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9zd2l0Y2hfc2F2ZRgCIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYAyABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJgoecGxheWVyX2Rhbm1ha3VfZW5hYmxlYmxvY2tsaXN0GBAgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9zd2l0Y2gYESABKAgSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X2NvbmZpZxgSIAEoBRImCh5wbGF5ZXJfZGFubWFrdV9pb3Nfc3dpdGNoX3NhdmUYEyABKAUSKQohcGxheWVyX2Rhbm1ha3Vfc2VuaW9yX21vZGVfc3dpdGNoGBQgASgFEi4KJnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBUgASgFEpEBCipwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92Ml9tYXAYFiADKAsyXS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgXIAEoCBImCh5wbGF5ZXJfZGFubWFrdV9ibG9ja3RvcF9ib3R0b20YGCABKAgSIAoYcGxheWVyX2Rhbm1ha3VfZG9tYWluX3YyGBkgASgFEh4KFnBsYXllcl9kYW5tYWt1X2RlbnNpdHkYGiABKAUSJQodcGxheWVyX2Rhbm1ha3Vfc3VidGl0bGVfcHJvb2YYGyABKAgSIwobcGxheWVyX2Rhbm1ha3VfcGVvcGxlX3Byb29mGBwgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEiMAoWRGFubXVQbGF5ZXJDb25maWdQYW5lbBIWCg5zZWxlY3Rpb25fdGV4dBgBIAEoCSJLChhEYW5tdVBsYXllckR5bmFtaWNDb25maWcSEAoIcHJvZ3Jlc3MYASABKAUSHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCIpADChVEYW5tdVBsYXllclZpZXdDb25maWcSYQodZGFubXVrdV9kZWZhdWx0X3BsYXllcl9jb25maWcYASABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdURlZmF1bHRQbGF5ZXJDb25maWcSUgoVZGFubXVrdV9wbGF5ZXJfY29uZmlnGAIgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcSYQodZGFubXVrdV9wbGF5ZXJfZHluYW1pY19jb25maWcYAyADKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckR5bmFtaWNDb25maWcSXQobZGFubXVrdV9wbGF5ZXJfY29uZmlnX3BhbmVsGAQgASgLMjguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWdQYW5lbCKZBQoURGFubXVXZWJQbGF5ZXJDb25maWcSEQoJZG1fc3dpdGNoGAEgASgIEhEKCWFpX3N3aXRjaBgCIAEoCBIQCghhaV9sZXZlbBgDIAEoBRIQCghibG9ja3RvcBgEIAEoCBITCgtibG9ja3Njcm9sbBgFIAEoCBITCgtibG9ja2JvdHRvbRgGIAEoCBISCgpibG9ja2NvbG9yGAcgASgIEhQKDGJsb2Nrc3BlY2lhbBgIIAEoCBIUCgxwcmV2ZW50c2hhZGUYCSABKAgSDQoFZG1hc2sYCiABKAgSDwoHb3BhY2l0eRgLIAEoAhIOCgZkbWFyZWEYDCABKAUSEQoJc3BlZWRwbHVzGA0gASgCEhAKCGZvbnRzaXplGA4gASgCEhIKCnNjcmVlbnN5bmMYDyABKAgSEQoJc3BlZWRzeW5jGBAgASgIEhIKCmZvbnRmYW1pbHkYESABKAkSDAoEYm9sZBgSIAEoCBISCgpmb250Ym9yZGVyGBMgASgFEhEKCWRyYXdfdHlwZRgUIAEoCRIaChJzZW5pb3JfbW9kZV9zd2l0Y2gYFSABKAUSEwoLYWlfbGV2ZWxfdjIYFiABKAUSYQoPYWlfbGV2ZWxfdjJfbWFwGBcgAygLMkguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcuQWlMZXZlbFYyTWFwRW50cnkSFwoPYmxvY2t0b3BfYm90dG9tGBggASgIEhIKCmRtX2FyZWFfdjIYGSABKAUSEgoKZG1fZGVuc2l0eRgaIAEoBRozChFBaUxldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIlkKCkRtQ29sb3JmdWwSPgoEdHlwZRgBIAEoDjIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWxUeXBlEgsKA3NyYxgCIAEoCSJQCg9EbUV4cG9SZXBvcnRSZXESEgoKc2Vzc2lvbl9pZBgBIAEoCRILCgNvaWQYAiABKAMSDQoFZG1pZHMYAyABKAwSDQoFc3BtaWQYBCABKAkiEQoPRG1FeHBvUmVwb3J0UmVzIm0KCkRtSGVyZFZpZXcSGwoTZGlzcGxheV9oZXJkX2RtX251bRgBIAEoBRJCCghoZXJkX2RtcxgCIAMoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlZpZXdIZXJkRG1FbGVtIpYCCgpEbU1hc2tXYWxsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIPCgdjb250ZW50GAMgASgJEk0KDGNvbnRlbnRfdHlwZRgEIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRJFCghiaXpfdHlwZRgFIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxCaXpUeXBlEkUKCGNvbnRlbnRzGAYgAygLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbENvbnRlbnQiawoRRG1NYXNrV2FsbENvbnRlbnQSRQoEdHlwZRgBIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRIPCgdjb250ZW50GAIgASgJIs0QChFEbVBsYXllckNvbmZpZ1JlcRIKCgJ0cxgBIAEoAxJFCgZzd2l0Y2gYAiABKAsyNS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3dpdGNoEk4KC3N3aXRjaF9zYXZlGAMgASgLMjkuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaFNhdmUSWwoSdXNlX2RlZmF1bHRfY29uZmlnGAQgASgLMj8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVVzZURlZmF1bHRDb25maWcSYQoVYWlfcmVjb21tZW5kZWRfc3dpdGNoGAUgASgLMkIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSXwoUYWlfcmVjb21tZW5kZWRfbGV2ZWwYBiABKAsyQS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEkkKCGJsb2NrdG9wGAcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wEk8KC2Jsb2Nrc2Nyb2xsGAggASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc2Nyb2xsEk8KC2Jsb2NrYm90dG9tGAkgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrYm90dG9tElMKDWJsb2NrY29sb3JmdWwYCiABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tjb2xvcmZ1bBJPCgtibG9ja3JlcGVhdBgLIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBJRCgxibG9ja3NwZWNpYWwYDCABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEkcKB29wYWNpdHkYDSABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1T3BhY2l0eRJTCg1zY2FsaW5nZmFjdG9yGA4gASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISRQoGZG9tYWluGA8gASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpbhJDCgVzcGVlZBgQIAEoCzI0LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTcGVlZBJXCg9lbmFibGVibG9ja2xpc3QYESABKAsyPi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0El4KGWlubGluZVBsYXllckRhbm1ha3VTd2l0Y2gYEiABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5JbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoElsKEnNlbmlvcl9tb2RlX3N3aXRjaBgTIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTZW5pb3JNb2RlU3dpdGNoEmQKF2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBQgASgLMkMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyElMKDmVuYWJsZV9oZXJkX2RtGBUgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRJWCg9ibG9ja3RvcF9ib3R0b20YFiABKAsyPS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SSgoJZG9tYWluX3YyGBcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpblYyEkcKB2RlbnNpdHkYGCABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RGVuc2l0eRJUCg5zdWJ0aXRsZV9wcm9vZhgZIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mElAKDHBlb3BsZV9wcm9vZhgaIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VQZW9wbGVQcm9vZiIvCgtEbVNlZ0NvbmZpZxIRCglwYWdlX3NpemUYASABKAMSDQoFdG90YWwYAiABKAMikQIKEERtU2VnTW9iaWxlUmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBRJACgdhaV9mbGFnGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUFJRmxhZxIVCg1zZWdtZW50X3J1bGVzGAQgAygDEkIKDGNvbG9yZnVsX3NyYxgFIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWwSEwoLY29udGV4dF9zcmMYBiABKAkiygEKDkRtU2VnTW9iaWxlUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDEhYKDnRlZW5hZ2Vyc19tb2RlGAUgASgFEgoKAnBzGAYgASgDEgoKAnBlGAcgASgDEhEKCXB1bGxfbW9kZRgIIAEoBRISCgpmcm9tX3NjZW5lGAkgASgFEg0KBXNwbWlkGAogASgJEhMKC2NvbnRleHRfZXh0GAsgASgJIlwKDURtU2VnT3R0UmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBSJMCgtEbVNlZ090dFJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJdCg1EbVNlZ1NES1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI8CgVlbGVtcxgCIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VFbGVtIkwKC0RtU2VnU0RLUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDIncKCURtU3ViVmlldxIMCgR0eXBlGAEgASgFEgsKA29pZBgCIAEoAxILCgNwaWQYAyABKAMSQgoLcG9zdF9wYW5lbDIYBCADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxWMiKhCQoLRG1WaWV3UmVwbHkSDgoGY2xvc2VkGAEgASgIEjkKBG1hc2sYAiABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb01hc2sSQQoIc3VidGl0bGUYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb1N1YnRpdGxlEhMKC3NwZWNpYWxfZG1zGAQgAygJEkQKB2FpX2ZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxJOCg1wbGF5ZXJfY29uZmlnGAYgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJWaWV3Q29uZmlnEhYKDnNlbmRfYm94X3N0eWxlGAcgASgFEg0KBWFsbG93GAggASgIEhEKCWNoZWNrX2JveBgJIAEoCBIaChJjaGVja19ib3hfc2hvd19tc2cYCiABKAkSGAoQdGV4dF9wbGFjZWhvbGRlchgLIAEoCRIZChFpbnB1dF9wbGFjZWhvbGRlchgMIAEoCRIdChVyZXBvcnRfZmlsdGVyX2NvbnRlbnQYDSADKAkSQQoLZXhwb19yZXBvcnQYDiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvUmVwb3J0EkkKD2J1enp3b3JkX2NvbmZpZxgPIAEoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1enp3b3JkQ29uZmlnEkIKC2V4cHJlc3Npb25zGBAgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgRIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGBIgAygJEkIKC3Bvc3RfcGFuZWwyGBMgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISQgoMZG1fbWFza193YWxsGBQgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbBI9CgdkbV9oZXJkGBUgASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1IZXJkVmlldxI6Cgdjb21tYW5kGBYgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZBIKCgJrdhgXIAEoCRI+CglzdWJfdmlld3MYGCADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVN1YlZpZXcSNgoDcW9lGBkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUW9lSW5mbyJtCglEbVZpZXdSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEg0KBXNwbWlkGAQgASgJEhQKDGlzX2hhcmRfYm9vdBgFIAEoBRITCgtjb250ZXh0X2V4dBgGIAEoCSKBBgoORG1XZWJWaWV3UmVwbHkSDQoFc3RhdGUYASABKAUSDAoEdGV4dBgCIAEoCRIRCgl0ZXh0X3NpZGUYAyABKAkSPQoGZG1fc2dlGAQgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdDb25maWcSQQoEZmxhZxgFIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnQ29uZmlnEhMKC3NwZWNpYWxfZG1zGAYgAygJEhEKCWNoZWNrX2JveBgHIAEoCBINCgVjb3VudBgIIAEoAxJACgtjb21tYW5kX2RtcxgJIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmREbRJNCg1wbGF5ZXJfY29uZmlnGAogASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GAsgAygJEkIKC2V4cHJlc3Npb25zGAwgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgNIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGA4gAygJEkIKC3Bvc3RfcGFuZWwyGA8gAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISPgoJc3ViX3ZpZXdzGBAgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgRIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8iKgoKRXhwb1JlcG9ydBIcChRzaG91bGRfcmVwb3J0X2F0X2VuZBgBIAEoCCJkCgpFeHByZXNzaW9uEg8KB2tleXdvcmQYASADKAkSCwoDdXJsGAIgASgJEjgKBnBlcmlvZBgDIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBlcmlvZCJJCgtFeHByZXNzaW9ucxI6CgRkYXRhGAEgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbiIqChlJbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoEg0KBXZhbHVlGAEgASgIIicKBUxhYmVsEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkihwEKB0xhYmVsVjISDQoFdGl0bGUYASABKAkSDwoHY29udGVudBgCIAMoCRIVCg1leHBvc3VyZV9vbmNlGAMgASgIEkUKDWV4cG9zdXJlX3R5cGUYBCABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiJAoGUGVyaW9kEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAyIwCh9QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEg0KBXZhbHVlGAEgASgFIjIKIVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhINCgV2YWx1ZRgBIAEoBSIxCiBQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZFN3aXRjaBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tib3R0b20SDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrcmVwZWF0Eg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBINCgV2YWx1ZRgBIAEoCCIqChlQbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEg0KBXZhbHVlGAEgASgIIiYKFVBsYXllckRhbm1ha3VCbG9ja3RvcBINCgV2YWx1ZRgBIAEoCCIsChtQbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SDQoFdmFsdWUYASABKAgiJQoUUGxheWVyRGFubWFrdURlbnNpdHkSDQoFdmFsdWUYASABKAUiJAoTUGxheWVyRGFubWFrdURvbWFpbhINCgV2YWx1ZRgBIAEoAiImChVQbGF5ZXJEYW5tYWt1RG9tYWluVjISDQoFdmFsdWUYASABKAUiKgoZUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRINCgV2YWx1ZRgBIAEoCCItChxQbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0Eg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VPcGFjaXR5Eg0KBXZhbHVlGAEgASgCIikKGFBsYXllckRhbm1ha3VQZW9wbGVQcm9vZhINCgV2YWx1ZRgBIAEoCCIrChpQbGF5ZXJEYW5tYWt1U2NhbGluZ2ZhY3RvchINCgV2YWx1ZRgBIAEoAiIuCh1QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBINCgV2YWx1ZRgBIAEoBSIjChJQbGF5ZXJEYW5tYWt1U3BlZWQSDQoFdmFsdWUYASABKAUiKwoaUGxheWVyRGFubWFrdVN1YnRpdGxlUHJvb2YSDQoFdmFsdWUYASABKAgiOAoTUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCBISCgpjYW5faWdub3JlGAIgASgIIigKF1BsYXllckRhbm1ha3VTd2l0Y2hTYXZlEg0KBXZhbHVlGAEgASgIIi4KHVBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEg0KBXZhbHVlGAEgASgIIowDCglQb3N0UGFuZWwSDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEhAKCHByaW9yaXR5GAMgASgDEg4KBmJpel9pZBgEIAEoAxJECghiaXpfdHlwZRgFIAEoDjIyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbEJpelR5cGUSQwoMY2xpY2tfYnV0dG9uGAYgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2xpY2tCdXR0b24SPwoKdGV4dF9pbnB1dBgHIAEoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dBI9CgljaGVja19ib3gYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveBI2CgV0b2FzdBgJIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0Iq0ECgtQb3N0UGFuZWxWMhINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSRAoIYml6X3R5cGUYAyABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkUKDGNsaWNrX2J1dHRvbhgEIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uVjISQQoKdGV4dF9pbnB1dBgFIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dFYyEj8KCWNoZWNrX2JveBgGIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrQm94VjISOAoFdG9hc3QYByABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdFYyEjoKBmJ1YmJsZRgIIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVYyEjgKBWxhYmVsGAkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuTGFiZWxWMhJBCgtwb3N0X3N0YXR1cxgKIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMiFwoHUW9lSW5mbxIMCgRpbmZvGAEgASgJIikKCFJlc3BvbnNlEgwKBGNvZGUYASABKAUSDwoHbWVzc2FnZRgCIAEoCSL5AgoMU3VidGl0bGVJdGVtEgoKAmlkGAEgASgDEg4KBmlkX3N0chgCIAEoCRILCgNsYW4YAyABKAkSDwoHbGFuX2RvYxgEIAEoCRIUCgxzdWJ0aXRsZV91cmwYBSABKAkSOgoGYXV0aG9yGAYgASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVXNlckluZm8SPAoEdHlwZRgHIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlVHlwZRIVCg1sYW5fZG9jX2JyaWVmGAggASgJEkEKB2FpX3R5cGUYCSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpVHlwZRJFCglhaV9zdGF0dXMYCiABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpU3RhdHVzIugCCglUZXh0SW5wdXQSHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEgwKBHNob3cYBSABKAgSOAoGYXZhdGFyGAYgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEkEKC3Bvc3Rfc3RhdHVzGAcgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFN0YXR1cxI2CgVsYWJlbBgIIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsIvsBCgtUZXh0SW5wdXRWMhIcChRwb3J0cmFpdF9wbGFjZWhvbGRlchgBIAMoCRIdChVsYW5kc2NhcGVfcGxhY2Vob2xkZXIYAiADKAkSQQoLcmVuZGVyX3R5cGUYAyABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEhgKEHBsYWNlaG9sZGVyX3Bvc3QYBCABKAgSOAoGYXZhdGFyGAUgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEhgKEHRleHRfaW5wdXRfbGltaXQYBiABKAUibwoFVG9hc3QSDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRIMCgRzaG93GAMgASgIEjgKBmJ1dHRvbhgEIAEoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1dHRvbiJiCg1Ub2FzdEJ1dHRvblYyEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUicwoHVG9hc3RWMhIMCgR0ZXh0GAEgASgJEhAKCGR1cmF0aW9uGAIgASgFEkgKD3RvYXN0X2J1dHRvbl92MhgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0QnV0dG9uVjIiXAoIVXNlckluZm8SCwoDbWlkGAEgASgDEgwKBG5hbWUYAiABKAkSCwoDc2V4GAMgASgJEgwKBGZhY2UYBCABKAkSDAoEc2lnbhgFIAEoCRIMCgRyYW5rGAYgASgFIlMKCVZpZGVvTWFzaxILCgNjaWQYASABKAMSDAoEcGxhdBgCIAEoBRILCgNmcHMYAyABKAUSDAoEdGltZRgEIAEoAxIQCghtYXNrX3VybBgFIAEoCSJwCg1WaWRlb1N1YnRpdGxlEgsKA2xhbhgBIAEoCRIPCgdsYW5fZG9jGAIgASgJEkEKCXN1YnRpdGxlcxgDIAMoCzIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlSXRlbSKSAQoOVmlld0hlcmREbUVsZW0SEAoIaGVyZF9tc2cYASABKAkSFgoOaGVyZF9zdGFydF9jbnQYAiABKAUSFAoMaGVyZF9lbmRfY250GAMgASgFEhIKCnJlZ2V4X3J1bGUYBCABKAkSFgoOc3RhcnRfcHJvZ3Jlc3MYBSABKAUSFAoMZW5kX3Byb2dyZXNzGAYgASgFKjMKCkF2YXRhclR5cGUSEgoOQXZhdGFyVHlwZU5vbmUQABIRCg1BdmF0YXJUeXBlTkZUEAEqWQoKQnViYmxlVHlwZRISCg5CdWJibGVUeXBlTm9uZRAAEhkKFUJ1YmJsZVR5cGVDbGlja0J1dHRvbhABEhwKGEJ1YmJsZVR5cGVEbVNldHRpbmdQYW5lbBACKlgKDENoZWNrYm94VHlwZRIUChBDaGVja2JveFR5cGVOb25lEAASGQoVQ2hlY2tib3hUeXBlRW5jb3VyYWdlEAESFwoTQ2hlY2tib3hUeXBlQ29sb3JETRACKjUKDkRtQ29sb3JmdWxUeXBlEgwKCE5vbmVUeXBlEAASFQoPVmlwR3JhZHVhbENvbG9yEOHUAypgChFEbU1hc2tXYWxsQml6VHlwZRILCgdVbmtub3duEAASBwoDT0dWEAESCgoGQml6UGljEAISCAoETXV0ZRADEgoKBlJlY29yZBAEEgkKBUNsb3VkEAUSCAoEQUlHQxAGKnYKFURtTWFza1dhbGxDb250ZW50VHlwZRIgChxEbU1hc2tXYWxsQ29udGVudFR5cGVVbmtub3duEAASHQoZRG1NYXNrV2FsbENvbnRlbnRUeXBlVGV4dBABEhwKGERtTWFza1dhbGxDb250ZW50VHlwZVBpYxACKjwKDEV4cG9zdXJlVHlwZRIUChBFeHBvc3VyZVR5cGVOb25lEAASFgoSRXhwb3N1cmVUeXBlRE1TZW5kEAEqgwIKEFBvc3RQYW5lbEJpelR5cGUSGAoUUG9zdFBhbmVsQml6VHlwZU5vbmUQABIdChlQb3N0UGFuZWxCaXpUeXBlRW5jb3VyYWdlEAESGwoXUG9zdFBhbmVsQml6VHlwZUNvbG9yRE0QAhIZChVQb3N0UGFuZWxCaXpUeXBlTkZURE0QAxIdChlQb3N0UGFuZWxCaXpUeXBlRnJhZ0Nsb3NlEAQSHQoZUG9zdFBhbmVsQml6VHlwZVJlY29tbWVuZBAFEhwKGFBvc3RQYW5lbEJpelR5cGVQbG90TGVhaxAGEiIKHlBvc3RQYW5lbEJpelR5cGVBbnRpSGFyYXNzbWVudBAHKjgKClBvc3RTdGF0dXMSFAoQUG9zdFN0YXR1c05vcm1hbBAAEhQKEFBvc3RTdGF0dXNDbG9zZWQQASpOCgpSZW5kZXJUeXBlEhIKDlJlbmRlclR5cGVOb25lEAASFAoQUmVuZGVyVHlwZVNpbmdsZRABEhYKElJlbmRlclR5cGVSb3RhdGlvbhACKjYKEFN1YnRpdGxlQWlTdGF0dXMSCAoETm9uZRAAEgwKCEV4cG9zdXJlEAESCgoGQXNzaXN0EAIqKwoOU3VidGl0bGVBaVR5cGUSCgoGTm9ybWFsEAASDQoJVHJhbnNsYXRlEAEqHgoMU3VidGl0bGVUeXBlEgYKAkNDEAASBgoCQUkQASpOChFUb2FzdEZ1bmN0aW9uVHlwZRIZChVUb2FzdEZ1bmN0aW9uVHlwZU5vbmUQABIeChpUb2FzdEZ1bmN0aW9uVHlwZVBvc3RQYW5lbBABMqAFCgJETRJzCgtEbVNlZ01vYmlsZRIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVxGjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdNb2JpbGVSZXBseRJkCgZEbVZpZXcSKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXEaLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXBseRJxCg5EbVBsYXllckNvbmZpZxIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtUGxheWVyQ29uZmlnUmVxGiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVzcG9uc2USagoIRG1TZWdPdHQSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnT3R0UmVwbHkSagoIRG1TZWdTREsSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnU0RLUmVwbHkSdAoMRG1FeHBvUmVwb3J0EjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVxGjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVzYgZwcm90bzM");
|
|
20986
20996
|
const DmSegMobileReplySchema = /*@__PURE__*/ message_messageDesc(file_bili_dm, 30);
|
|
20987
20997
|
const DmWebViewReplySchema = /*@__PURE__*/ message_messageDesc(file_bili_dm, 39);
|
|
20988
|
-
const file_danuni = /*@__PURE__*/ fileDesc("
|
|
20998
|
+
const file_danuni = /*@__PURE__*/ fileDesc("CgxkYW51bmkucHJvdG8SEWRhbnVuaS5kYW5tYWt1LnYxIjIKCmxpc3REYW5SZXESCgoCSUQYASABKAkSEAoDc2VnGAIgASgFSACIAQFCBgoEX3NlZyLUAgoHRGFubWFrdRIMCgRTT0lEGAEgASgJEgwKBERNSUQYAiABKAkSEAoIcHJvZ3Jlc3MYAyABKAUSJQoEbW9kZRgEIAEoDjIXLmRhbnVuaS5kYW5tYWt1LnYxLk1vZGUSEAoIZm9udHNpemUYBSABKAUSDQoFY29sb3IYBiABKAUSEAoIc2VuZGVySUQYByABKAkSDwoHY29udGVudBgIIAEoCRIpCgVjdGltZRgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDgoGd2VpZ2h0GAogASgFEiUKBHBvb2wYCyABKA4yFy5kYW51bmkuZGFubWFrdS52MS5Qb29sEgwKBGF0dHIYDCADKAkSFQoIcGxhdGZvcm0YDSABKAlIAIgBARISCgVleHRyYRgOIAEoCUgBiAEBQgsKCV9wbGF0Zm9ybUIICgZfZXh0cmEiPAoMRGFubWFrdVJlcGx5EiwKCGRhbm1ha3VzGAEgAygLMhouZGFudW5pLmRhbm1ha3UudjEuRGFubWFrdSo9CgRNb2RlEgoKBk5vcm1hbBAAEgoKBkJvdHRvbRABEgcKA1RvcBACEgsKB1JldmVyc2UQAxIHCgNFeHQQBCopCgRQb29sEgcKA0RlZhAAEgcKA1N1YhABEgcKA0FkdhACEgYKAkl4EAMyXQoORGFubWFrdVNlcnZpY2USSwoHbGlzdERhbhIdLmRhbnVuaS5kYW5tYWt1LnYxLmxpc3REYW5SZXEaHy5kYW51bmkuZGFubWFrdS52MS5EYW5tYWt1UmVwbHkiAFAAYgZwcm90bzM", [
|
|
20989
20999
|
file_google_protobuf_timestamp
|
|
20990
21000
|
]);
|
|
20991
21001
|
const DanmakuReplySchema = /*@__PURE__*/ message_messageDesc(file_danuni, 2);
|
|
@@ -22016,7 +22026,7 @@ and limitations under the License.
|
|
|
22016
22026
|
if ('string' == typeof schemaNameOrObject) return container_getFromContainer(Validator_Validator).validateOrReject(schemaNameOrObject, objectOrValidationOptions, maybeValidatorOptions);
|
|
22017
22027
|
return container_getFromContainer(Validator_Validator).validateOrReject(schemaNameOrObject, objectOrValidationOptions);
|
|
22018
22028
|
}
|
|
22019
|
-
var isEmail = __webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
22029
|
+
var isEmail = __webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isEmail.js");
|
|
22020
22030
|
var isEmail_default = /*#__PURE__*/ __webpack_require__.n(isEmail);
|
|
22021
22031
|
var IS_EMAIL = 'isEmail';
|
|
22022
22032
|
function IsEmail_isEmail(value, options) {
|
|
@@ -23431,6 +23441,7 @@ and limitations under the License.
|
|
|
23431
23441
|
return this.options.dmid(this);
|
|
23432
23442
|
}
|
|
23433
23443
|
isSameAs(dan, options) {
|
|
23444
|
+
if (this === dan) return true;
|
|
23434
23445
|
if (4 === this.mode || 4 === dan.mode) return false;
|
|
23435
23446
|
if (!options?.skipDanuniMerge && (this.extra.danuni?.merge || dan.extra.danuni?.merge)) return false;
|
|
23436
23447
|
const isSame = (k)=>this[k] === dan[k];
|
|
@@ -23444,26 +23455,22 @@ and limitations under the License.
|
|
|
23444
23455
|
return checks;
|
|
23445
23456
|
}
|
|
23446
23457
|
minify() {
|
|
23447
|
-
const def = UniDM
|
|
23448
|
-
const dan = UniDM.create(this);
|
|
23449
|
-
const shouldKeep = (key, value)=>{
|
|
23450
|
-
if ('SOID' === key) return true;
|
|
23451
|
-
if (null == value) return false;
|
|
23452
|
-
if (value === def[key]) return false;
|
|
23453
|
-
if ('attr' === key && Array.isArray(value) && 0 === value.length) return false;
|
|
23454
|
-
if ('extraStr' === key && '{}' === value) return false;
|
|
23455
|
-
return true;
|
|
23456
|
-
};
|
|
23458
|
+
const def = new UniDM();
|
|
23457
23459
|
const result = {
|
|
23458
|
-
SOID:
|
|
23460
|
+
SOID: this.SOID
|
|
23459
23461
|
};
|
|
23460
|
-
|
|
23461
|
-
|
|
23462
|
-
|
|
23463
|
-
|
|
23464
|
-
|
|
23465
|
-
|
|
23466
|
-
|
|
23462
|
+
if (this.progress !== def.progress) result.progress = this.progress;
|
|
23463
|
+
if (this.mode !== def.mode) result.mode = this.mode;
|
|
23464
|
+
if (this.fontsize !== def.fontsize) result.fontsize = this.fontsize;
|
|
23465
|
+
if (this.color !== def.color) result.color = this.color;
|
|
23466
|
+
if (this.senderID !== def.senderID) result.senderID = this.senderID;
|
|
23467
|
+
if (this.content !== def.content) result.content = this.content;
|
|
23468
|
+
if (this.weight !== def.weight) result.weight = this.weight;
|
|
23469
|
+
if (this.pool !== def.pool) result.pool = this.pool;
|
|
23470
|
+
if (this.attr.length > 0) result.attr = this.attr;
|
|
23471
|
+
if (void 0 !== this.platform) result.platform = this.platform;
|
|
23472
|
+
if (this.extraStr && '{}' !== this.extraStr) result.extraStr = this.extraStr;
|
|
23473
|
+
if (void 0 !== this.DMID) result.DMID = this.DMID;
|
|
23467
23474
|
return result;
|
|
23468
23475
|
}
|
|
23469
23476
|
downgradeAdvcancedDan({ include, exclude, cleanExtra = false } = {}) {
|
|
@@ -24015,46 +24022,91 @@ and limitations under the License.
|
|
|
24015
24022
|
return fn(this);
|
|
24016
24023
|
}
|
|
24017
24024
|
get shared() {
|
|
24018
|
-
|
|
24019
|
-
|
|
24020
|
-
|
|
24021
|
-
|
|
24022
|
-
|
|
24023
|
-
|
|
24024
|
-
|
|
24025
|
-
|
|
24026
|
-
|
|
24025
|
+
if (0 === this.dans.length) return {};
|
|
24026
|
+
const keys = [
|
|
24027
|
+
'SOID',
|
|
24028
|
+
'senderID',
|
|
24029
|
+
'platform',
|
|
24030
|
+
'pool',
|
|
24031
|
+
'mode',
|
|
24032
|
+
'color'
|
|
24033
|
+
];
|
|
24034
|
+
const result = {};
|
|
24035
|
+
for (const key of keys){
|
|
24036
|
+
const sharedVal = this.getShared(key);
|
|
24037
|
+
if (void 0 !== sharedVal) result[key] = sharedVal;
|
|
24038
|
+
}
|
|
24039
|
+
return result;
|
|
24027
24040
|
}
|
|
24028
24041
|
getShared(key) {
|
|
24029
|
-
|
|
24030
|
-
|
|
24042
|
+
if (0 === this.dans.length) return;
|
|
24043
|
+
const firstVal = this.dans[0][key];
|
|
24044
|
+
for(let i = 1; i < this.dans.length; i++)if (this.dans[i][key] !== firstVal) return;
|
|
24045
|
+
return firstVal;
|
|
24031
24046
|
}
|
|
24032
24047
|
getStat(key) {
|
|
24033
|
-
const
|
|
24034
|
-
const
|
|
24035
|
-
const
|
|
24036
|
-
|
|
24037
|
-
|
|
24038
|
-
|
|
24039
|
-
count: 1
|
|
24040
|
-
});
|
|
24041
|
-
return stat;
|
|
24042
|
-
}, default_stat);
|
|
24043
|
-
return stats;
|
|
24048
|
+
const statMap = new Map();
|
|
24049
|
+
for (const dan of this.dans){
|
|
24050
|
+
const val = dan[key];
|
|
24051
|
+
statMap.set(val, (statMap.get(val) || 0) + 1);
|
|
24052
|
+
}
|
|
24053
|
+
return statMap;
|
|
24044
24054
|
}
|
|
24045
24055
|
getMost(key) {
|
|
24046
|
-
|
|
24056
|
+
const stats = this.getStat(key);
|
|
24057
|
+
if (0 === stats.size) return {
|
|
24058
|
+
val: void 0,
|
|
24059
|
+
count: 0
|
|
24060
|
+
};
|
|
24061
|
+
let mostVal;
|
|
24062
|
+
let maxCount = 0;
|
|
24063
|
+
for (const [val, count] of stats.entries())if (count > maxCount) {
|
|
24064
|
+
maxCount = count;
|
|
24065
|
+
mostVal = val;
|
|
24066
|
+
}
|
|
24067
|
+
return {
|
|
24068
|
+
val: mostVal,
|
|
24069
|
+
count: maxCount
|
|
24070
|
+
};
|
|
24047
24071
|
}
|
|
24048
24072
|
get most() {
|
|
24073
|
+
const keys = [
|
|
24074
|
+
'mode',
|
|
24075
|
+
'fontsize',
|
|
24076
|
+
'color',
|
|
24077
|
+
'senderID',
|
|
24078
|
+
'content',
|
|
24079
|
+
'weight',
|
|
24080
|
+
'pool',
|
|
24081
|
+
'platform'
|
|
24082
|
+
];
|
|
24083
|
+
const statMaps = new Map();
|
|
24084
|
+
for (const dan of this.dans)for (const key of keys){
|
|
24085
|
+
if (!statMaps.has(key)) statMaps.set(key, new Map());
|
|
24086
|
+
const statMap = statMaps.get(key);
|
|
24087
|
+
const val = dan[key];
|
|
24088
|
+
statMap.set(val, (statMap.get(val) || 0) + 1);
|
|
24089
|
+
}
|
|
24090
|
+
const result = {};
|
|
24091
|
+
for (const key of keys){
|
|
24092
|
+
const statMap = statMaps.get(key);
|
|
24093
|
+
let mostVal;
|
|
24094
|
+
let maxCount = 0;
|
|
24095
|
+
for (const [val, count] of statMap.entries())if (count > maxCount) {
|
|
24096
|
+
maxCount = count;
|
|
24097
|
+
mostVal = val;
|
|
24098
|
+
}
|
|
24099
|
+
result[key] = mostVal;
|
|
24100
|
+
}
|
|
24049
24101
|
return {
|
|
24050
|
-
mode:
|
|
24051
|
-
fontsize:
|
|
24052
|
-
color:
|
|
24053
|
-
senderID:
|
|
24054
|
-
content:
|
|
24055
|
-
weight:
|
|
24056
|
-
pool:
|
|
24057
|
-
platform:
|
|
24102
|
+
mode: result.mode,
|
|
24103
|
+
fontsize: result.fontsize,
|
|
24104
|
+
color: result.color,
|
|
24105
|
+
senderID: result.senderID,
|
|
24106
|
+
content: result.content,
|
|
24107
|
+
weight: result.weight,
|
|
24108
|
+
pool: result.pool,
|
|
24109
|
+
platform: result.platform
|
|
24058
24110
|
};
|
|
24059
24111
|
}
|
|
24060
24112
|
static create(options) {
|
|
@@ -24082,7 +24134,7 @@ and limitations under the License.
|
|
|
24082
24134
|
return this;
|
|
24083
24135
|
}
|
|
24084
24136
|
split(key) {
|
|
24085
|
-
if (this.
|
|
24137
|
+
if (this.getShared(key)) return [
|
|
24086
24138
|
this
|
|
24087
24139
|
];
|
|
24088
24140
|
const set = new Set(this.dans.map((d)=>d[key]));
|
|
@@ -24104,44 +24156,27 @@ and limitations under the License.
|
|
|
24104
24156
|
this.options.dedupe = false;
|
|
24105
24157
|
}
|
|
24106
24158
|
merge(lifetime = 0) {
|
|
24107
|
-
if (!this.
|
|
24159
|
+
if (!this.getShared('SOID')) {
|
|
24108
24160
|
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
24109
24161
|
return this;
|
|
24110
24162
|
}
|
|
24111
24163
|
if (lifetime <= 0) return this;
|
|
24112
|
-
const
|
|
24113
|
-
|
|
24114
|
-
|
|
24115
|
-
|
|
24116
|
-
|
|
24117
|
-
'platform'
|
|
24118
|
-
].map((k)=>danmaku[k]).join('|');
|
|
24164
|
+
const result = [];
|
|
24165
|
+
const cache = {};
|
|
24166
|
+
const mergeObj = {};
|
|
24167
|
+
for (const danmaku of this.dans){
|
|
24168
|
+
const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
|
|
24119
24169
|
const cached = cache[key];
|
|
24120
|
-
|
|
24121
|
-
if (cached && danmaku.progress - lastAppearTime <= lifetime && danmaku.isSameAs(cached, {
|
|
24170
|
+
if (cached && danmaku.progress - cached.progress <= lifetime && danmaku.isSameAs(cached, {
|
|
24122
24171
|
skipDanuniMerge: true
|
|
24123
24172
|
})) {
|
|
24124
|
-
|
|
24125
|
-
senders.
|
|
24126
|
-
|
|
24127
|
-
|
|
24128
|
-
|
|
24129
|
-
count: senders.length,
|
|
24130
|
-
duration: Number.parseFloat((danmaku.progress - cached.progress).toFixed(3)),
|
|
24131
|
-
senders,
|
|
24132
|
-
taolu_count: senders.length,
|
|
24133
|
-
taolu_senders: senders
|
|
24134
|
-
};
|
|
24135
|
-
danmaku.extraStr = src_JSON.stringify(extra);
|
|
24173
|
+
mergeObj[key].senders.push(danmaku.senderID);
|
|
24174
|
+
mergeObj[key].count = mergeObj[key].senders.length;
|
|
24175
|
+
mergeObj[key].taolu_count = mergeObj[key].count;
|
|
24176
|
+
mergeObj[key].taolu_senders = mergeObj[key].senders;
|
|
24177
|
+
mergeObj[key].duration = Number.parseFloat((danmaku.progress - cached.progress).toFixed(3));
|
|
24136
24178
|
cache[key] = danmaku;
|
|
24137
|
-
|
|
24138
|
-
return [
|
|
24139
|
-
result,
|
|
24140
|
-
cache,
|
|
24141
|
-
mergeObj
|
|
24142
|
-
];
|
|
24143
|
-
}
|
|
24144
|
-
{
|
|
24179
|
+
} else {
|
|
24145
24180
|
mergeObj[key] = {
|
|
24146
24181
|
count: 1,
|
|
24147
24182
|
duration: 0,
|
|
@@ -24154,55 +24189,31 @@ and limitations under the License.
|
|
|
24154
24189
|
]
|
|
24155
24190
|
};
|
|
24156
24191
|
cache[key] = danmaku;
|
|
24157
|
-
const extra = danmaku.extra;
|
|
24158
|
-
extra.danuni = extra.danuni || {};
|
|
24159
|
-
extra.danuni.merge = mergeObj[key];
|
|
24160
|
-
danmaku.extraStr = src_JSON.stringify(extra);
|
|
24161
24192
|
result.push(danmaku);
|
|
24162
|
-
return [
|
|
24163
|
-
result,
|
|
24164
|
-
cache,
|
|
24165
|
-
mergeObj
|
|
24166
|
-
];
|
|
24167
24193
|
}
|
|
24168
|
-
}
|
|
24169
|
-
|
|
24170
|
-
{}
|
|
24171
|
-
{}
|
|
24172
|
-
]);
|
|
24173
|
-
const [result, _cache, mergeObj] = mergeContext;
|
|
24174
|
-
result.forEach((danmaku, i)=>{
|
|
24175
|
-
const key = [
|
|
24176
|
-
'content',
|
|
24177
|
-
'mode',
|
|
24178
|
-
'platform',
|
|
24179
|
-
'pool'
|
|
24180
|
-
].map((k)=>danmaku[k]).join('|');
|
|
24181
|
-
const extra = result[i].extra;
|
|
24194
|
+
}
|
|
24195
|
+
for (const danmaku of result){
|
|
24196
|
+
const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
|
|
24182
24197
|
const mergeData = mergeObj[key];
|
|
24183
|
-
|
|
24184
|
-
|
|
24185
|
-
|
|
24186
|
-
|
|
24187
|
-
|
|
24188
|
-
}
|
|
24189
|
-
});
|
|
24190
|
-
if (mergeData?.count) if (mergeData.count <= 1) {
|
|
24191
|
-
const updatedExtra = {
|
|
24192
|
-
...extra
|
|
24193
|
-
};
|
|
24194
|
-
if (updatedExtra.danuni) {
|
|
24195
|
-
delete updatedExtra.danuni.merge;
|
|
24196
|
-
if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
|
|
24197
|
-
}
|
|
24198
|
-
result[i].extraStr = Object.keys(updatedExtra).length > 0 ? src_JSON.stringify(updatedExtra) : void 0;
|
|
24199
|
-
} else {
|
|
24200
|
-
result[i].senderID = 'merge[bot]@dan-any';
|
|
24201
|
-
result[i].attr ? result[i].attr.push(dm_gen_DMAttr.Protect) : result[i].attr = [
|
|
24198
|
+
const extra = danmaku.extra;
|
|
24199
|
+
if (mergeData.count > 1) {
|
|
24200
|
+
danmaku.senderID = 'merge[bot]@dan-any';
|
|
24201
|
+
if (danmaku.attr) {
|
|
24202
|
+
if (!danmaku.attr.includes(dm_gen_DMAttr.Protect)) danmaku.attr.push(dm_gen_DMAttr.Protect);
|
|
24203
|
+
} else danmaku.attr = [
|
|
24202
24204
|
dm_gen_DMAttr.Protect
|
|
24203
24205
|
];
|
|
24206
|
+
extra.danuni = extra.danuni || {};
|
|
24207
|
+
extra.danuni.merge = mergeData;
|
|
24208
|
+
danmaku.extraStr = src_JSON.stringify(extra);
|
|
24209
|
+
} else {
|
|
24210
|
+
if (extra.danuni?.merge) {
|
|
24211
|
+
delete extra.danuni.merge;
|
|
24212
|
+
if (0 === Object.keys(extra.danuni).length) delete extra.danuni;
|
|
24213
|
+
}
|
|
24214
|
+
danmaku.extraStr = Object.keys(extra).length > 0 ? src_JSON.stringify(extra) : void 0;
|
|
24204
24215
|
}
|
|
24205
|
-
}
|
|
24216
|
+
}
|
|
24206
24217
|
return new UniPool(result, this.options, this.info);
|
|
24207
24218
|
}
|
|
24208
24219
|
minify() {
|
|
@@ -24225,14 +24236,18 @@ and limitations under the License.
|
|
|
24225
24236
|
pool: this.fromArtplayer(json, json.danuni?.data ?? '', void 0, options),
|
|
24226
24237
|
fmt: 'artplayer.json'
|
|
24227
24238
|
};
|
|
24228
|
-
if (json.count && json.comments && json.comments.every((d)=>d.m)) return {
|
|
24239
|
+
if (json.count && json.comments && Array.isArray(json.comments) && json.comments.every((d)=>d.m)) return {
|
|
24229
24240
|
pool: this.fromDDPlay(json, json.danuni?.data ?? '', options),
|
|
24230
24241
|
fmt: 'ddplay.json'
|
|
24231
24242
|
};
|
|
24232
|
-
else if (json
|
|
24243
|
+
else if (0 == json.code && json.data && Array.isArray(json.data) && json.data.every((d)=>Array.isArray(d))) return {
|
|
24233
24244
|
pool: this.fromDplayer(json, json.danuni?.data ?? '', void 0, options),
|
|
24234
24245
|
fmt: 'dplayer.json'
|
|
24235
24246
|
};
|
|
24247
|
+
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 {
|
|
24248
|
+
pool: this.fromBiliUp(json, options),
|
|
24249
|
+
fmt: 'bili.up.json'
|
|
24250
|
+
};
|
|
24236
24251
|
} catch {}
|
|
24237
24252
|
};
|
|
24238
24253
|
const parseStr = (file)=>{
|
|
@@ -24400,7 +24415,7 @@ and limitations under the License.
|
|
|
24400
24415
|
source: 'k-v',
|
|
24401
24416
|
danuni: {
|
|
24402
24417
|
...DanUniConvertTipTemplate,
|
|
24403
|
-
data: this.
|
|
24418
|
+
data: this.getShared('SOID')
|
|
24404
24419
|
},
|
|
24405
24420
|
d: this.dans.map((dan)=>dan.toBiliXML(options))
|
|
24406
24421
|
}
|
|
@@ -24539,7 +24554,7 @@ and limitations under the License.
|
|
|
24539
24554
|
substyle: {}
|
|
24540
24555
|
};
|
|
24541
24556
|
const finalOptions = options ?? defaultOptions;
|
|
24542
|
-
const fn = this.
|
|
24557
|
+
const fn = this.getShared('SOID');
|
|
24543
24558
|
return generateASS(this, {
|
|
24544
24559
|
filename: fn,
|
|
24545
24560
|
title: fn,
|
|
@@ -24748,10 +24763,10 @@ and limitations under the License.
|
|
|
24748
24763
|
return `${hour}:${pad(minute)}:${pad(second)}.${minorSecond}`;
|
|
24749
24764
|
};
|
|
24750
24765
|
const encode = (text)=>text.toString().replaceAll('{', '{').replaceAll('}', '}').replaceAll(/\r|\n/g, '');
|
|
24751
|
-
const scrollCommand = ({ start, end, top })
|
|
24752
|
-
const fixCommand = ({ top, left })
|
|
24753
|
-
const colorCommand = (color)
|
|
24754
|
-
const borderColorCommand = (color)
|
|
24766
|
+
const scrollCommand = ({ start, end, top })=>String.raw`\move(${start},${top},${end},${top})`;
|
|
24767
|
+
const fixCommand = ({ top, left })=>String.raw`\an8\pos(${left},${top})`;
|
|
24768
|
+
const colorCommand = (color)=>String.raw`\c${formatColor(color)}`;
|
|
24769
|
+
const borderColorCommand = (color)=>String.raw`\3c${formatColor(color)}`;
|
|
24755
24770
|
const dialogue = (danmaku, config)=>{
|
|
24756
24771
|
const { fontSizeType, content, time } = danmaku;
|
|
24757
24772
|
const { scrollTime, fixTime } = config;
|
|
@@ -25019,46 +25034,91 @@ and limitations under the License.
|
|
|
25019
25034
|
return fn(this);
|
|
25020
25035
|
}
|
|
25021
25036
|
get shared() {
|
|
25022
|
-
|
|
25023
|
-
|
|
25024
|
-
|
|
25025
|
-
|
|
25026
|
-
|
|
25027
|
-
|
|
25028
|
-
|
|
25029
|
-
|
|
25030
|
-
|
|
25037
|
+
if (0 === this.dans.length) return {};
|
|
25038
|
+
const keys = [
|
|
25039
|
+
'SOID',
|
|
25040
|
+
'senderID',
|
|
25041
|
+
'platform',
|
|
25042
|
+
'pool',
|
|
25043
|
+
'mode',
|
|
25044
|
+
'color'
|
|
25045
|
+
];
|
|
25046
|
+
const result = {};
|
|
25047
|
+
for (const key of keys){
|
|
25048
|
+
const sharedVal = this.getShared(key);
|
|
25049
|
+
if (void 0 !== sharedVal) result[key] = sharedVal;
|
|
25050
|
+
}
|
|
25051
|
+
return result;
|
|
25031
25052
|
}
|
|
25032
25053
|
getShared(key) {
|
|
25033
|
-
|
|
25034
|
-
|
|
25054
|
+
if (0 === this.dans.length) return;
|
|
25055
|
+
const firstVal = this.dans[0][key];
|
|
25056
|
+
for(let i = 1; i < this.dans.length; i++)if (this.dans[i][key] !== firstVal) return;
|
|
25057
|
+
return firstVal;
|
|
25035
25058
|
}
|
|
25036
25059
|
getStat(key) {
|
|
25037
|
-
const
|
|
25038
|
-
const
|
|
25039
|
-
const
|
|
25040
|
-
|
|
25041
|
-
|
|
25042
|
-
|
|
25043
|
-
count: 1
|
|
25044
|
-
});
|
|
25045
|
-
return stat;
|
|
25046
|
-
}, default_stat);
|
|
25047
|
-
return stats;
|
|
25060
|
+
const statMap = new Map();
|
|
25061
|
+
for (const dan of this.dans){
|
|
25062
|
+
const val = dan[key];
|
|
25063
|
+
statMap.set(val, (statMap.get(val) || 0) + 1);
|
|
25064
|
+
}
|
|
25065
|
+
return statMap;
|
|
25048
25066
|
}
|
|
25049
25067
|
getMost(key) {
|
|
25050
|
-
|
|
25068
|
+
const stats = this.getStat(key);
|
|
25069
|
+
if (0 === stats.size) return {
|
|
25070
|
+
val: void 0,
|
|
25071
|
+
count: 0
|
|
25072
|
+
};
|
|
25073
|
+
let mostVal;
|
|
25074
|
+
let maxCount = 0;
|
|
25075
|
+
for (const [val, count] of stats.entries())if (count > maxCount) {
|
|
25076
|
+
maxCount = count;
|
|
25077
|
+
mostVal = val;
|
|
25078
|
+
}
|
|
25079
|
+
return {
|
|
25080
|
+
val: mostVal,
|
|
25081
|
+
count: maxCount
|
|
25082
|
+
};
|
|
25051
25083
|
}
|
|
25052
25084
|
get most() {
|
|
25085
|
+
const keys = [
|
|
25086
|
+
'mode',
|
|
25087
|
+
'fontsize',
|
|
25088
|
+
'color',
|
|
25089
|
+
'senderID',
|
|
25090
|
+
'content',
|
|
25091
|
+
'weight',
|
|
25092
|
+
'pool',
|
|
25093
|
+
'platform'
|
|
25094
|
+
];
|
|
25095
|
+
const statMaps = new Map();
|
|
25096
|
+
for (const dan of this.dans)for (const key of keys){
|
|
25097
|
+
if (!statMaps.has(key)) statMaps.set(key, new Map());
|
|
25098
|
+
const statMap = statMaps.get(key);
|
|
25099
|
+
const val = dan[key];
|
|
25100
|
+
statMap.set(val, (statMap.get(val) || 0) + 1);
|
|
25101
|
+
}
|
|
25102
|
+
const result = {};
|
|
25103
|
+
for (const key of keys){
|
|
25104
|
+
const statMap = statMaps.get(key);
|
|
25105
|
+
let mostVal;
|
|
25106
|
+
let maxCount = 0;
|
|
25107
|
+
for (const [val, count] of statMap.entries())if (count > maxCount) {
|
|
25108
|
+
maxCount = count;
|
|
25109
|
+
mostVal = val;
|
|
25110
|
+
}
|
|
25111
|
+
result[key] = mostVal;
|
|
25112
|
+
}
|
|
25053
25113
|
return {
|
|
25054
|
-
mode:
|
|
25055
|
-
fontsize:
|
|
25056
|
-
color:
|
|
25057
|
-
senderID:
|
|
25058
|
-
content:
|
|
25059
|
-
weight:
|
|
25060
|
-
pool:
|
|
25061
|
-
platform:
|
|
25114
|
+
mode: result.mode,
|
|
25115
|
+
fontsize: result.fontsize,
|
|
25116
|
+
color: result.color,
|
|
25117
|
+
senderID: result.senderID,
|
|
25118
|
+
content: result.content,
|
|
25119
|
+
weight: result.weight,
|
|
25120
|
+
pool: result.pool,
|
|
25121
|
+
platform: result.platform
|
|
25062
25122
|
};
|
|
25063
25123
|
}
|
|
25064
25124
|
static create(options) {
|
|
@@ -25086,7 +25146,7 @@ and limitations under the License.
|
|
|
25086
25146
|
return this;
|
|
25087
25147
|
}
|
|
25088
25148
|
split(key) {
|
|
25089
|
-
if (this.
|
|
25149
|
+
if (this.getShared(key)) return [
|
|
25090
25150
|
this
|
|
25091
25151
|
];
|
|
25092
25152
|
const set = new Set(this.dans.map((d)=>d[key]));
|
|
@@ -25108,44 +25168,27 @@ and limitations under the License.
|
|
|
25108
25168
|
this.options.dedupe = false;
|
|
25109
25169
|
}
|
|
25110
25170
|
merge(lifetime = 0) {
|
|
25111
|
-
if (!this.
|
|
25171
|
+
if (!this.getShared('SOID')) {
|
|
25112
25172
|
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
25113
25173
|
return this;
|
|
25114
25174
|
}
|
|
25115
25175
|
if (lifetime <= 0) return this;
|
|
25116
|
-
const
|
|
25117
|
-
|
|
25118
|
-
|
|
25119
|
-
|
|
25120
|
-
|
|
25121
|
-
'platform'
|
|
25122
|
-
].map((k)=>danmaku[k]).join('|');
|
|
25176
|
+
const result = [];
|
|
25177
|
+
const cache = {};
|
|
25178
|
+
const mergeObj = {};
|
|
25179
|
+
for (const danmaku of this.dans){
|
|
25180
|
+
const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
|
|
25123
25181
|
const cached = cache[key];
|
|
25124
|
-
|
|
25125
|
-
if (cached && danmaku.progress - lastAppearTime <= lifetime && danmaku.isSameAs(cached, {
|
|
25182
|
+
if (cached && danmaku.progress - cached.progress <= lifetime && danmaku.isSameAs(cached, {
|
|
25126
25183
|
skipDanuniMerge: true
|
|
25127
25184
|
})) {
|
|
25128
|
-
|
|
25129
|
-
senders.
|
|
25130
|
-
|
|
25131
|
-
|
|
25132
|
-
|
|
25133
|
-
count: senders.length,
|
|
25134
|
-
duration: Number.parseFloat((danmaku.progress - cached.progress).toFixed(3)),
|
|
25135
|
-
senders,
|
|
25136
|
-
taolu_count: senders.length,
|
|
25137
|
-
taolu_senders: senders
|
|
25138
|
-
};
|
|
25139
|
-
danmaku.extraStr = src_JSON_0.stringify(extra);
|
|
25185
|
+
mergeObj[key].senders.push(danmaku.senderID);
|
|
25186
|
+
mergeObj[key].count = mergeObj[key].senders.length;
|
|
25187
|
+
mergeObj[key].taolu_count = mergeObj[key].count;
|
|
25188
|
+
mergeObj[key].taolu_senders = mergeObj[key].senders;
|
|
25189
|
+
mergeObj[key].duration = Number.parseFloat((danmaku.progress - cached.progress).toFixed(3));
|
|
25140
25190
|
cache[key] = danmaku;
|
|
25141
|
-
|
|
25142
|
-
return [
|
|
25143
|
-
result,
|
|
25144
|
-
cache,
|
|
25145
|
-
mergeObj
|
|
25146
|
-
];
|
|
25147
|
-
}
|
|
25148
|
-
{
|
|
25191
|
+
} else {
|
|
25149
25192
|
mergeObj[key] = {
|
|
25150
25193
|
count: 1,
|
|
25151
25194
|
duration: 0,
|
|
@@ -25158,55 +25201,31 @@ and limitations under the License.
|
|
|
25158
25201
|
]
|
|
25159
25202
|
};
|
|
25160
25203
|
cache[key] = danmaku;
|
|
25161
|
-
const extra = danmaku.extra;
|
|
25162
|
-
extra.danuni = extra.danuni || {};
|
|
25163
|
-
extra.danuni.merge = mergeObj[key];
|
|
25164
|
-
danmaku.extraStr = src_JSON_0.stringify(extra);
|
|
25165
25204
|
result.push(danmaku);
|
|
25166
|
-
return [
|
|
25167
|
-
result,
|
|
25168
|
-
cache,
|
|
25169
|
-
mergeObj
|
|
25170
|
-
];
|
|
25171
25205
|
}
|
|
25172
|
-
}
|
|
25173
|
-
|
|
25174
|
-
{}
|
|
25175
|
-
{}
|
|
25176
|
-
]);
|
|
25177
|
-
const [result, _cache, mergeObj] = mergeContext;
|
|
25178
|
-
result.forEach((danmaku, i)=>{
|
|
25179
|
-
const key = [
|
|
25180
|
-
'content',
|
|
25181
|
-
'mode',
|
|
25182
|
-
'platform',
|
|
25183
|
-
'pool'
|
|
25184
|
-
].map((k)=>danmaku[k]).join('|');
|
|
25185
|
-
const extra = result[i].extra;
|
|
25206
|
+
}
|
|
25207
|
+
for (const danmaku of result){
|
|
25208
|
+
const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
|
|
25186
25209
|
const mergeData = mergeObj[key];
|
|
25187
|
-
|
|
25188
|
-
|
|
25189
|
-
|
|
25190
|
-
|
|
25191
|
-
|
|
25192
|
-
}
|
|
25193
|
-
});
|
|
25194
|
-
if (mergeData?.count) if (mergeData.count <= 1) {
|
|
25195
|
-
const updatedExtra = {
|
|
25196
|
-
...extra
|
|
25197
|
-
};
|
|
25198
|
-
if (updatedExtra.danuni) {
|
|
25199
|
-
delete updatedExtra.danuni.merge;
|
|
25200
|
-
if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
|
|
25201
|
-
}
|
|
25202
|
-
result[i].extraStr = Object.keys(updatedExtra).length > 0 ? src_JSON_0.stringify(updatedExtra) : void 0;
|
|
25203
|
-
} else {
|
|
25204
|
-
result[i].senderID = 'merge[bot]@dan-any';
|
|
25205
|
-
result[i].attr ? result[i].attr.push(dm_gen_DMAttr.Protect) : result[i].attr = [
|
|
25210
|
+
const extra = danmaku.extra;
|
|
25211
|
+
if (mergeData.count > 1) {
|
|
25212
|
+
danmaku.senderID = 'merge[bot]@dan-any';
|
|
25213
|
+
if (danmaku.attr) {
|
|
25214
|
+
if (!danmaku.attr.includes(dm_gen_DMAttr.Protect)) danmaku.attr.push(dm_gen_DMAttr.Protect);
|
|
25215
|
+
} else danmaku.attr = [
|
|
25206
25216
|
dm_gen_DMAttr.Protect
|
|
25207
25217
|
];
|
|
25218
|
+
extra.danuni = extra.danuni || {};
|
|
25219
|
+
extra.danuni.merge = mergeData;
|
|
25220
|
+
danmaku.extraStr = src_JSON_0.stringify(extra);
|
|
25221
|
+
} else {
|
|
25222
|
+
if (extra.danuni?.merge) {
|
|
25223
|
+
delete extra.danuni.merge;
|
|
25224
|
+
if (0 === Object.keys(extra.danuni).length) delete extra.danuni;
|
|
25225
|
+
}
|
|
25226
|
+
danmaku.extraStr = Object.keys(extra).length > 0 ? src_JSON_0.stringify(extra) : void 0;
|
|
25208
25227
|
}
|
|
25209
|
-
}
|
|
25228
|
+
}
|
|
25210
25229
|
return new src_UniPool(result, this.options, this.info);
|
|
25211
25230
|
}
|
|
25212
25231
|
minify() {
|
|
@@ -25229,14 +25248,18 @@ and limitations under the License.
|
|
|
25229
25248
|
pool: this.fromArtplayer(json, json.danuni?.data ?? '', void 0, options),
|
|
25230
25249
|
fmt: 'artplayer.json'
|
|
25231
25250
|
};
|
|
25232
|
-
if (json.count && json.comments && json.comments.every((d)=>d.m)) return {
|
|
25251
|
+
if (json.count && json.comments && Array.isArray(json.comments) && json.comments.every((d)=>d.m)) return {
|
|
25233
25252
|
pool: this.fromDDPlay(json, json.danuni?.data ?? '', options),
|
|
25234
25253
|
fmt: 'ddplay.json'
|
|
25235
25254
|
};
|
|
25236
|
-
else if (json
|
|
25255
|
+
else if (0 == json.code && json.data && Array.isArray(json.data) && json.data.every((d)=>Array.isArray(d))) return {
|
|
25237
25256
|
pool: this.fromDplayer(json, json.danuni?.data ?? '', void 0, options),
|
|
25238
25257
|
fmt: 'dplayer.json'
|
|
25239
25258
|
};
|
|
25259
|
+
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 {
|
|
25260
|
+
pool: this.fromBiliUp(json, options),
|
|
25261
|
+
fmt: 'bili.up.json'
|
|
25262
|
+
};
|
|
25240
25263
|
} catch {}
|
|
25241
25264
|
};
|
|
25242
25265
|
const parseStr = (file)=>{
|
|
@@ -25404,7 +25427,7 @@ and limitations under the License.
|
|
|
25404
25427
|
source: 'k-v',
|
|
25405
25428
|
danuni: {
|
|
25406
25429
|
...src_DanUniConvertTipTemplate,
|
|
25407
|
-
data: this.
|
|
25430
|
+
data: this.getShared('SOID')
|
|
25408
25431
|
},
|
|
25409
25432
|
d: this.dans.map((dan)=>dan.toBiliXML(options))
|
|
25410
25433
|
}
|
|
@@ -25543,7 +25566,7 @@ and limitations under the License.
|
|
|
25543
25566
|
substyle: {}
|
|
25544
25567
|
};
|
|
25545
25568
|
const finalOptions = options ?? defaultOptions;
|
|
25546
|
-
const fn = this.
|
|
25569
|
+
const fn = this.getShared('SOID');
|
|
25547
25570
|
return generateASS(this, {
|
|
25548
25571
|
filename: fn,
|
|
25549
25572
|
title: fn,
|