diff --git a/assets/script/sdk/config/DefaultConfig.ts b/assets/script/sdk/config/DefaultConfig.ts index cf6267b..f88cd0a 100644 --- a/assets/script/sdk/config/DefaultConfig.ts +++ b/assets/script/sdk/config/DefaultConfig.ts @@ -6,8 +6,8 @@ import { IConfigData } from "./IConfigData"; */ export const DefaultConfig: IConfigData = { id: "", - name: "tt_wkbz", - vsion: "1.2.4", + name: "tt_slgjm", + vsion: "1.0.2", chanId: "tt", themeId: "1", useDoc: true, @@ -17,17 +17,17 @@ export const DefaultConfig: IConfigData = { showAddToDesk: true, showSidebar: true, platformConf: { - gameName: "悟空别走", - appid: "tt78540ee9e6303e0002", + gameName: "守了个寂寞", + appid: "tt485d3ee0d6390e0c02", shareData: [ //示例 - { id: 1, type: 1, wx: "", tt: "", res: "", desc: "悟空别走" }, + { id: 1, type: 1, wx: "", tt: "", res: "", desc: "守了个寂寞" }, // { id: 2, type: 1, wx: "", tt: "j5gfj8d1gc04g6tj3n", res: "share/share_1.jpg", desc: "他拿塔皮勾引我,我没去,因为我知道塔皮不能叠Q!" }, ], - video: ["1gmsn5axhqn5kfc1hj", 'en4kagkd7jkae8e70j', '6kn5ncen2da4gj70di'], + video: ["1nf50adpmfg1g46iad", '34a232emjk8a3diien', '3628g1j03b97166i4h'], interstitialAd: [], banner: [], - contentIDs: ["CONTENT14918755074"], // 复访(体力恢复) + contentIDs: [], // 复访(体力恢复) acquireContentIDs: [], // 获客 subscribeTmpl: { offlineEarnings: '', @@ -54,6 +54,6 @@ export const DefaultConfig: IConfigData = { pointData: { gameName: "", accessToken: "gw0MRpBbernhPztqHlulUYjLnwyAdvOm", - gid: "tt_wkbz", + gid: "tt_slgjm", } } \ No newline at end of file diff --git a/bin/tt_slgjm1.0.2.bin b/bin/tt_slgjm1.0.2.bin new file mode 100644 index 0000000..98d5639 --- /dev/null +++ b/bin/tt_slgjm1.0.2.bin @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/extensions/tools/dist/MembershipSet.js b/extensions/tools/dist/MembershipSet.js index 262e42b..e080a09 100644 --- a/extensions/tools/dist/MembershipSet.js +++ b/extensions/tools/dist/MembershipSet.js @@ -1,8 +1,13 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.membershipForEach = exports.membershipDedupeArray = exports.membershipToArray = exports.membershipFromArray = exports.membershipClear = exports.membershipDelete = exports.membershipHas = exports.membershipAdd = exports.createMembershipSet = void 0; +function bindMembershipIterator(set) { + // Map 默认 for-of 迭代 [key,value];覆盖为仅 yield key(与 Set 一致) + set[Symbol.iterator] = () => set.keys(); + return set; +} function createMembershipSet() { - return new Map(); + return bindMembershipIterator(new Map()); } exports.createMembershipSet = createMembershipSet; function membershipAdd(set, key) { @@ -31,7 +36,7 @@ function membershipFromArray(items) { } exports.membershipFromArray = membershipFromArray; function membershipToArray(set) { - return [...set.keys()]; + return [...set]; } exports.membershipToArray = membershipToArray; /** 去重数组(替代 Array.from(new Set(...)) / [...new Set(...)]) */ @@ -40,9 +45,9 @@ function membershipDedupeArray(items) { } exports.membershipDedupeArray = membershipDedupeArray; function membershipForEach(set, fn) { - for (const key of set.keys()) { + for (const key of set) { fn(key); } } exports.membershipForEach = membershipForEach; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtYmVyc2hpcFNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9NZW1iZXJzaGlwU2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLFNBQWdCLG1CQUFtQjtJQUMvQixPQUFPLElBQUksR0FBRyxFQUFXLENBQUM7QUFDOUIsQ0FBQztBQUZELGtEQUVDO0FBRUQsU0FBZ0IsYUFBYSxDQUFJLEdBQXFCLEVBQUUsR0FBTTtJQUMxRCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuQixPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFIRCxzQ0FHQztBQUVELFNBQWdCLGFBQWEsQ0FBSSxHQUE2QixFQUFFLEdBQU07SUFDbEUsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLGdCQUFnQixDQUFJLEdBQXFCLEVBQUUsR0FBTTtJQUM3RCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUZELDRDQUVDO0FBRUQsU0FBZ0IsZUFBZSxDQUFJLEdBQXFCO0lBQ3BELEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNoQixDQUFDO0FBRkQsMENBRUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBSSxLQUFrQjtJQUNyRCxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBSyxDQUFDO0lBQ3JDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1FBQ3RCLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3ZCO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBTkQsa0RBTUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBSSxHQUE2QjtJQUM5RCxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRkQsOENBRUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBZ0IscUJBQXFCLENBQUksS0FBa0I7SUFDdkQsT0FBTyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFGRCxzREFFQztBQUVELFNBQWdCLGlCQUFpQixDQUFJLEdBQTZCLEVBQUUsRUFBb0I7SUFDcEYsS0FBSyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDMUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ1g7QUFDTCxDQUFDO0FBSkQsOENBSUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICog6aG555uu56aB55So5Y6f55SfIFNldO+8iOWwj+a4uOaIj+i/kOihjOaXtuWvuemDqOWIhiBTZXQg55So5rOV5LiN56iz5a6a77yJ44CCXHJcbiAqIOeUqCBNYXA8SywgdHJ1ZT4g6KGo56S65oiQ5ZGY6ZuG5ZCI77yMQVBJIOS4jiBTZXQg5a+56b2Q44CCXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBNZW1iZXJzaGlwU2V0PEs+ID0gTWFwPEssIHRydWU+O1xyXG5leHBvcnQgdHlwZSBSZWFkb25seU1lbWJlcnNoaXBTZXQ8Sz4gPSBSZWFkb25seU1hcDxLLCB0cnVlPjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNZW1iZXJzaGlwU2V0PEs+KCk6IE1lbWJlcnNoaXBTZXQ8Sz4ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8SywgdHJ1ZT4oKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlcnNoaXBBZGQ8Sz4oc2V0OiBNZW1iZXJzaGlwU2V0PEs+LCBrZXk6IEspOiBNZW1iZXJzaGlwU2V0PEs+IHtcclxuICAgIHNldC5zZXQoa2V5LCB0cnVlKTtcclxuICAgIHJldHVybiBzZXQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJzaGlwSGFzPEs+KHNldDogUmVhZG9ubHlNZW1iZXJzaGlwU2V0PEs+LCBrZXk6IEspOiBib29sZWFuIHtcclxuICAgIHJldHVybiBzZXQuaGFzKGtleSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJzaGlwRGVsZXRlPEs+KHNldDogTWVtYmVyc2hpcFNldDxLPiwga2V5OiBLKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gc2V0LmRlbGV0ZShrZXkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVyc2hpcENsZWFyPEs+KHNldDogTWVtYmVyc2hpcFNldDxLPik6IHZvaWQge1xyXG4gICAgc2V0LmNsZWFyKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJzaGlwRnJvbUFycmF5PEs+KGl0ZW1zOiBJdGVyYWJsZTxLPik6IE1lbWJlcnNoaXBTZXQ8Sz4ge1xyXG4gICAgY29uc3Qgc2V0ID0gY3JlYXRlTWVtYmVyc2hpcFNldDxLPigpO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgc2V0LnNldChpdGVtLCB0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzZXQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJzaGlwVG9BcnJheTxLPihzZXQ6IFJlYWRvbmx5TWVtYmVyc2hpcFNldDxLPik6IEtbXSB7XHJcbiAgICByZXR1cm4gWy4uLnNldC5rZXlzKCldO1xyXG59XHJcblxyXG4vKiog5Y676YeN5pWw57uE77yI5pu/5LujIEFycmF5LmZyb20obmV3IFNldCguLi4pKSAvIFsuLi5uZXcgU2V0KC4uLild77yJICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJzaGlwRGVkdXBlQXJyYXk8Sz4oaXRlbXM6IEl0ZXJhYmxlPEs+KTogS1tdIHtcclxuICAgIHJldHVybiBtZW1iZXJzaGlwVG9BcnJheShtZW1iZXJzaGlwRnJvbUFycmF5KGl0ZW1zKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJzaGlwRm9yRWFjaDxLPihzZXQ6IFJlYWRvbmx5TWVtYmVyc2hpcFNldDxLPiwgZm46IChrZXk6IEspID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIHNldC5rZXlzKCkpIHtcclxuICAgICAgICBmbihrZXkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtYmVyc2hpcFNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9NZW1iZXJzaGlwU2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLFNBQVMsc0JBQXNCLENBQUksR0FBaUI7SUFDaEQsd0RBQXdEO0lBQ3ZELEdBQXlELENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvRixPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFnQixtQkFBbUI7SUFDL0IsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsRUFBVyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUZELGtEQUVDO0FBRUQsU0FBZ0IsYUFBYSxDQUFJLEdBQXFCLEVBQUUsR0FBTTtJQUMxRCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuQixPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFIRCxzQ0FHQztBQUVELFNBQWdCLGFBQWEsQ0FBSSxHQUE2QixFQUFFLEdBQU07SUFDbEUsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLGdCQUFnQixDQUFJLEdBQXFCLEVBQUUsR0FBTTtJQUM3RCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUZELDRDQUVDO0FBRUQsU0FBZ0IsZUFBZSxDQUFJLEdBQXFCO0lBQ3BELEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNoQixDQUFDO0FBRkQsMENBRUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBSSxLQUFrQjtJQUNyRCxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBSyxDQUFDO0lBQ3JDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1FBQ3RCLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3ZCO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBTkQsa0RBTUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBSSxHQUE2QjtJQUM5RCxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNwQixDQUFDO0FBRkQsOENBRUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBZ0IscUJBQXFCLENBQUksS0FBa0I7SUFDdkQsT0FBTyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFGRCxzREFFQztBQUVELFNBQWdCLGlCQUFpQixDQUFJLEdBQTZCLEVBQUUsRUFBb0I7SUFDcEYsS0FBSyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUU7UUFDbkIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ1g7QUFDTCxDQUFDO0FBSkQsOENBSUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICog6aG555uu56aB55So5Y6f55SfIFNldO+8iOWwj+a4uOaIj+i/kOihjOaXtuWvuemDqOWIhiBTZXQg55So5rOV5LiN56iz5a6a77yJ44CCXHJcbiAqIOeUqCBNYXA8SywgdHJ1ZT4g6KGo56S65oiQ5ZGY6ZuG5ZCI77yb6L+t5Luj5pe2IHlpZWxkIGtlee+8iOS4jiBTZXQg5LiA6Ie077yM6ICM6Z2eIE1hcCDnmoQgW2tleSwgdmFsdWVd77yJ44CCXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBNZW1iZXJzaGlwU2V0PEs+ID0gTWFwPEssIHRydWU+O1xyXG5leHBvcnQgdHlwZSBSZWFkb25seU1lbWJlcnNoaXBTZXQ8Sz4gPSBSZWFkb25seU1hcDxLLCB0cnVlPjtcclxuXHJcbmZ1bmN0aW9uIGJpbmRNZW1iZXJzaGlwSXRlcmF0b3I8Sz4oc2V0OiBNYXA8SywgdHJ1ZT4pOiBNZW1iZXJzaGlwU2V0PEs+IHtcclxuICAgIC8vIE1hcCDpu5jorqQgZm9yLW9mIOi/reS7oyBba2V5LHZhbHVlXe+8m+imhuebluS4uuS7hSB5aWVsZCBrZXnvvIjkuI4gU2V0IOS4gOiHtO+8iVxyXG4gICAgKHNldCBhcyB7IFtTeW1ib2wuaXRlcmF0b3JdPzogKCkgPT4gSXRlcmFibGVJdGVyYXRvcjxLPiB9KVtTeW1ib2wuaXRlcmF0b3JdID0gKCkgPT4gc2V0LmtleXMoKTtcclxuICAgIHJldHVybiBzZXQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNZW1iZXJzaGlwU2V0PEs+KCk6IE1lbWJlcnNoaXBTZXQ8Sz4ge1xyXG4gICAgcmV0dXJuIGJpbmRNZW1iZXJzaGlwSXRlcmF0b3IobmV3IE1hcDxLLCB0cnVlPigpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlcnNoaXBBZGQ8Sz4oc2V0OiBNZW1iZXJzaGlwU2V0PEs+LCBrZXk6IEspOiBNZW1iZXJzaGlwU2V0PEs+IHtcclxuICAgIHNldC5zZXQoa2V5LCB0cnVlKTtcclxuICAgIHJldHVybiBzZXQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJzaGlwSGFzPEs+KHNldDogUmVhZG9ubHlNZW1iZXJzaGlwU2V0PEs+LCBrZXk6IEspOiBib29sZWFuIHtcclxuICAgIHJldHVybiBzZXQuaGFzKGtleSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJzaGlwRGVsZXRlPEs+KHNldDogTWVtYmVyc2hpcFNldDxLPiwga2V5OiBLKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gc2V0LmRlbGV0ZShrZXkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVyc2hpcENsZWFyPEs+KHNldDogTWVtYmVyc2hpcFNldDxLPik6IHZvaWQge1xyXG4gICAgc2V0LmNsZWFyKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJzaGlwRnJvbUFycmF5PEs+KGl0ZW1zOiBJdGVyYWJsZTxLPik6IE1lbWJlcnNoaXBTZXQ8Sz4ge1xyXG4gICAgY29uc3Qgc2V0ID0gY3JlYXRlTWVtYmVyc2hpcFNldDxLPigpO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgc2V0LnNldChpdGVtLCB0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzZXQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJzaGlwVG9BcnJheTxLPihzZXQ6IFJlYWRvbmx5TWVtYmVyc2hpcFNldDxLPik6IEtbXSB7XHJcbiAgICByZXR1cm4gWy4uLnNldF07XHJcbn1cclxuXHJcbi8qKiDljrvph43mlbDnu4TvvIjmm7/ku6MgQXJyYXkuZnJvbShuZXcgU2V0KC4uLikpIC8gWy4uLm5ldyBTZXQoLi4uKV3vvIkgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlcnNoaXBEZWR1cGVBcnJheTxLPihpdGVtczogSXRlcmFibGU8Sz4pOiBLW10ge1xyXG4gICAgcmV0dXJuIG1lbWJlcnNoaXBUb0FycmF5KG1lbWJlcnNoaXBGcm9tQXJyYXkoaXRlbXMpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlcnNoaXBGb3JFYWNoPEs+KHNldDogUmVhZG9ubHlNZW1iZXJzaGlwU2V0PEs+LCBmbjogKGtleTogSykgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2Ygc2V0KSB7XHJcbiAgICAgICAgZm4oa2V5KTtcclxuICAgIH1cclxufVxyXG4iXX0= \ No newline at end of file diff --git a/extensions/tools/dist/build-hooks.js b/extensions/tools/dist/build-hooks.js index 8d53a0c..18c497f 100644 --- a/extensions/tools/dist/build-hooks.js +++ b/extensions/tools/dist/build-hooks.js @@ -211,6 +211,50 @@ function patchHarmonyEngineAdapter(roots) { patchEngineAdapterHarmony(path_1.default.join(root, 'engine-adapter.js')); } } +/** + * 抖音:game.json subPackages 每项 root 下必须有 game.js。 + * Cocos 3.8 开启 wasm 资源分包时会写入 `__ccWasmAssetSubpkg__` → `cocos-js/assets/`, + * 目录里通常只有 spine.js.mem*.bin,缺入口会导致开发者工具编译失败。 + * @param roots 构建输出根目录列表 + */ +function ensureBytedanceWasmSubpkgGameJs(roots) { + var _a, _b; + for (let r = 0; r < roots.length; r++) { + const root = roots[r]; + const gameJsonPath = path_1.default.join(root, 'game.json'); + if (!fs_1.default.existsSync(gameJsonPath)) + continue; + let gameJson; + try { + gameJson = JSON.parse(fs_1.default.readFileSync(gameJsonPath, 'utf8')); + } + catch (err) { + console.warn('[tools] bytedance wasm subpkg: 无法解析 game.json', gameJsonPath, err); + continue; + } + const packs = gameJson.subpackages; + if (!packs || packs.length === 0) + continue; + for (let i = 0; i < packs.length; i++) { + const packRoot = String((_b = (_a = packs[i]) === null || _a === void 0 ? void 0 : _a.root) !== null && _b !== void 0 ? _b : '').replace(/\\/g, '/'); + if (!packRoot) + continue; + // 仅补 wasm 资源分包;internal/main 由引擎生成完整入口 + if (packRoot.indexOf('cocos-js/assets') < 0) + continue; + const dir = path_1.default.join(root, packRoot.replace(/\/+$/, '')); + if (!fs_1.default.existsSync(dir)) { + console.warn('[tools] bytedance wasm subpkg 目录不存在', dir); + continue; + } + const gameJsPath = path_1.default.join(dir, 'game.js'); + if (fs_1.default.existsSync(gameJsPath)) + continue; + fs_1.default.writeFileSync(gameJsPath, '// cocos wasm asset subpackage stub for bytedance\n', 'utf8'); + console.log('[tools] bytedance wasm subpkg: 已补 game.js →', gameJsPath); + } + } +} const WECHAT_ONLY_FALLBACK_FILES = ['Sdk30rWechat.ts', 'Sdk30rWechat.ts.meta']; function getBuildPlatform(options) { var _a, _b; @@ -221,6 +265,7 @@ function wechatOnlySdkPaths(projectPath) { const destDir = path_1.default.join(projectPath, 'assets', 'script', 'sdk'); return { srcDir, destDir }; } +/** wechat-only 目录下需复制的文件(跳过说明文档) */ function listWechatOnlyFiles(srcDir) { if (!fs_1.default.existsSync(srcDir)) return []; @@ -236,6 +281,7 @@ function listWechatOnlyFiles(srcDir) { } return out; } +/** 从 assets 删除微信独占脚本,避免残留进抖音/快手包 */ function removeWechatOnlySdkFromAssets(srcDir, destDir, platform) { const names = listWechatOnlyFiles(srcDir); for (let i = 0; i < WECHAT_ONLY_FALLBACK_FILES.length; i++) { @@ -255,14 +301,19 @@ function removeWechatOnlySdkFromAssets(srcDir, destDir, platform) { console.log(`[tools] removed wechat-only 30r sdk from assets (${platform || 'unknown platform'})`); } } +/** + * 仅纯微信 wechatgame:把 tools/wechat-only 拷进 assets。 + * 抖音/快手/B 站(勾选导出 biligame)不拷,避免 30r 进包。 + */ function syncWechatOnlySdk(options, mode) { + var _a, _b; const projectPath = Editor.Project.path; if (!projectPath) return; const { srcDir, destDir } = wechatOnlySdkPaths(projectPath); const platform = getBuildPlatform(options); const isWechat = platform === 'wechatgame'; - const isBiliGame = !!(options && options.packages && options.packages['biligame-builder'] && options.packages['biligame-builder'].isBiliGame); + const isBiliGame = !!((_b = (_a = options === null || options === void 0 ? void 0 : options.packages) === null || _a === void 0 ? void 0 : _a['biligame-builder']) === null || _b === void 0 ? void 0 : _b.isBiliGame); if (mode === 'after' || !isWechat || isBiliGame) { removeWechatOnlySdkFromAssets(srcDir, destDir, isBiliGame ? 'biligame' : platform); return; @@ -298,6 +349,7 @@ function onBeforeBuild(options, _result) { exports.onBeforeBuild = onBeforeBuild; async function onAfterBuild(options, result) { try { + // 产物已编译进包,assets 里的拷贝必须删掉,避免下次抖音/快手构建误打入 syncWechatOnlySdk(options, 'after'); } catch (err) { @@ -322,10 +374,11 @@ async function onAfterBuild(options, result) { if (getBuildPlatform(options) === 'bytedance-mini-game') { const roots = collectStripRoots(options, result); patchHarmonyEngineAdapter(roots); + ensureBytedanceWasmSubpkgGameJs(roots); } } catch (err) { - console.error('[tools] onAfterBuild harmony patch failed:', err); + console.error('[tools] onAfterBuild bytedance patch failed:', err); } try { console.log('[tools] onAfterBuild: generate config bin'); @@ -337,4 +390,4 @@ async function onAfterBuild(options, result) { return true; } exports.onAfterBuild = onAfterBuild; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvYnVpbGQtaG9va3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7OztHQUdHO0FBQ0gsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixrREFBd0I7QUFDeEIsbUNBQWdDO0FBQ2hDLG1EQUl5QjtBQUVaLFFBQUEsVUFBVSxHQUFHLElBQUksQ0FBQztBQUUvQixTQUFTLFFBQVEsQ0FBQyxRQUFnQjtJQUM5QixNQUFNLEdBQUcsR0FBRyxZQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQUMsV0FBbUI7O0lBQ2pELE1BQU0sYUFBYSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sZ0JBQWdCLEdBQUcsWUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFaEUsTUFBTSxXQUFXLEdBQUcsbUVBQW1FLENBQUM7SUFDeEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDNUMsSUFBSSxDQUFDLEdBQTJCLElBQUksQ0FBQztJQUNyQyxPQUFPLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFO1FBQzdDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzdCO0lBRUQsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7SUFDNUcsTUFB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QUFHLENBQUMsQ0FBQztLQUNwRTtJQUNELElBQUk7UUFDQSxPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFDekQsaUJBQWlCLEVBQUUsQ0FBQztLQUN2QjtJQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxrREFBa0QsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUMxRTtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUF0Q0Qsb0NBc0NDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDmnoTlu7rov5vnqIvvvIjni6znq4sgd29ya2Vy77yJ5Yqg6L2955qE6ZKp5a2Q6ISa5pys77ybY3VzdG9tLWJ1aWxkZXIg55qEIGNvbmZpZ3MuKi5ob29rcyDmjIflkJHmnKzmlofku7bjgIJcbiAqIGN1c3RvbS1idWlsZGVyLnRzIOS8miByZS1leHBvcnQg5pys5paH5Lu255qE6ZKp5a2Q77yM5L6b57yW6L6R5Zmo5qCh6aqM6YCa6L+H44CCXG4gKi9cbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBsejQgZnJvbSAnbHo0anMnO1xuaW1wb3J0IHsgbWluaWZ5IH0gZnJvbSAndGVyc2VyJztcbmltcG9ydCB7XG4gICAgY3JlYXRlTWVtYmVyc2hpcFNldCxcbiAgICBtZW1iZXJzaGlwQWRkLFxuICAgIG1lbWJlcnNoaXBUb0FycmF5LFxufSBmcm9tICcuL01lbWJlcnNoaXBTZXQnO1xuXG5leHBvcnQgY29uc3QgdGhyb3dFcnJvciA9IHRydWU7XG5cbmZ1bmN0aW9uIHJlYWRKc29uKGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUNvbmZpZ05hbWVWZXJzaW9uKHByb2plY3RQYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZGtDb25maWdQYXRoID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnYXNzZXRzJywgJ3NjcmlwdCcsICdzZGsnLCAnc2RrQ29uZmlnLnRzJyk7XG4gICAgY29uc3Qgc2RrQ29uZmlnQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhzZGtDb25maWdQYXRoLCAndXRmOCcpO1xuXG4gICAgY29uc3QgaW1wb3J0UmVnZXggPSAvaW1wb3J0XFxzK1xce1xccyooXFx3KylcXHMqXFx9XFxzK2Zyb21cXHMrW1wiJ11cXC5cXC9jb25maWdcXC8oW15cIiddKylbXCInXTs/L2c7XG4gICAgY29uc3QgaW1wb3J0TWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBsZXQgbTogUmVnRXhwRXhlY0FycmF5IHwgbnVsbCA9IG51bGw7XG4gICAgd2hpbGUgKChtID0gaW1wb3J0UmVnZXguZXhlYyhzZGtDb25maWdDb250ZW50KSkpIHtcbiAgICAgICAgaW1wb3J0TWFwLnNldChtWzFdLCBtWzJdKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWdBc3NpZ24gPSBzZGtDb25maWdDb250ZW50Lm1hdGNoKC9zdGF0aWNcXHMrcmVhZG9ubHlcXHMrY29uZmlnXFxzKjpcXHMqSUNvbmZpZ0RhdGFcXHMqPVxccyooXFx3KylcXHMqOy8pO1xuICAgIGNvbnN0IHN5bWJvbCA9IGNvbmZpZ0Fzc2lnbj8uWzFdID8/ICdEZWZhdWx0Q29uZmlnJztcbiAgICBjb25zdCByZWxDb25maWcgPSBpbXBvcnRNYXAuZ2V0KHN5bWJvbCkgPz8gJ0RlZmF1bHRDb25maWcnO1xuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsICdhc3NldHMnLCAnc2NyaXB0JywgJ3NkaycsICdjb25maWcnLCBgJHtyZWxDb25maWd9LnRzYCk7XG4gICAgY29uc3QgY29uZmlnQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmOCcpO1xuXG4gICAgY29uc3QgbmFtZSA9IGNvbmZpZ0NvbnRlbnQubWF0Y2goL25hbWVcXHMqOlxccypbXCInXShbXlwiJ10rKVtcIiddLyk/LlsxXSA/PyAnY29uZmlnJztcbiAgICBjb25zdCB2c2lvbiA9IGNvbmZpZ0NvbnRlbnQubWF0Y2goL3ZzaW9uXFxzKjpcXHMqW1wiJ10oW15cIiddKylbXCInXS8pPy5bMV0gPz8gJzAuMC4wJztcbiAgICByZXR1cm4geyBuYW1lLCB2c2lvbiB9O1xufVxuXG5mdW5jdGlvbiBlbmNvZGVGb3JSdW50aW1lKGpzb25PYmo6IGFueSkge1xuICAgIGNvbnN0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShqc29uT2JqKTtcbiAgICBjb25zdCB1aW50OCA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShqc29uU3RyaW5nKTtcbiAgICBjb25zdCBjb21wcmVzc2VkID0gVWludDhBcnJheS5mcm9tKGx6NC5jb21wcmVzcyh1aW50OCkpO1xuXG4gICAgY29uc3QgYmluYXJ5ID0gQnVmZmVyLmZyb20oY29tcHJlc3NlZCkudG9TdHJpbmcoJ2xhdGluMScpO1xuICAgIGNvbnN0IGJhc2U2NCA9IEJ1ZmZlci5mcm9tKGJpbmFyeSwgJ2xhdGluMScpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oYmFzZTY0LCAnbGF0aW4xJyk7XG59XG5cbmNvbnN0IEhPVF9VUERBVEVfVEFCTEVfRklMRVM6IHsgdGFibGVLZXk6IHN0cmluZzsgZmlsZU5hbWU6IHN0cmluZyB9W10gPSBbXG4gICAgeyB0YWJsZUtleTogJ0NoYXB0ZXInLCBmaWxlTmFtZTogJ0NoYXB0ZXIuanNvbicgfSxcbiAgICB7IHRhYmxlS2V5OiAnQ29uc3Rfd2VpZ2h0JywgZmlsZU5hbWU6ICdDb25zdF93ZWlnaHQuanNvbicgfSwgXG4gICAgeyB0YWJsZUtleTogJ01vbnN0ZXInLCBmaWxlTmFtZTogJ01vbnN0ZXIuanNvbicgfSxcbiAgICB7IHRhYmxlS2V5OiAnYm94X3dlYXBvbicsIGZpbGVOYW1lOiAnYm94X3dlYXBvbi5qc29uJyB9LFxuICAgIHsgdGFibGVLZXk6ICdTa2lsbF9wb29sJywgZmlsZU5hbWU6ICdTa2lsbF9wb29sLmpzb24nIH0sXG4gICAgeyB0YWJsZUtleTogJ01vbnN0ZXIyJywgZmlsZU5hbWU6ICdNb25zdGVyMi5qc29uJyB9LFxuXTtcblxuZnVuY3Rpb24gZ2VuZXJhdGVDb25maWdCaW4oKSB7XG4gICAgY29uc3QgcHJvamVjdFBhdGggPSBFZGl0b3IuUHJvamVjdC5wYXRoO1xuICAgIGNvbnN0IGNvbmZpZ0RpciA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJ2Fzc2V0cycsICdidW5kbGVzJywgJ2ZpcnN0JywgJ2NvbmZpZycpO1xuXG4gICAgY29uc3QgbWVyZ2VKc29uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgeyB0YWJsZUtleSwgZmlsZU5hbWUgfSBvZiBIT1RfVVBEQVRFX1RBQkxFX0ZJTEVTKSB7XG4gICAgICAgIGNvbnN0IGZwID0gcGF0aC5qb2luKGNvbmZpZ0RpciwgZmlsZU5hbWUpO1xuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZnApKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFt0b29sc10gc2tpcCBiaW4gZ2VuZXJhdGU6IG1pc3NpbmcgJHtmaWxlTmFtZX1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBtZXJnZUpzb25bdGFibGVLZXldID0gcmVhZEpzb24oZnApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbmFtZSwgdnNpb24gfSA9IHJlc29sdmVDb25maWdOYW1lVmVyc2lvbihwcm9qZWN0UGF0aCk7XG4gICAgY29uc3Qgc2FmZU5hbWUgPSBgJHtuYW1lfSR7dnNpb259YC5yZXBsYWNlKC9bPD46XCIvXFxcXHw/Kl0rL2csICdfJyk7XG4gICAgY29uc3Qgb3V0RGlyID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnYmluJyk7XG4gICAgY29uc3Qgb3V0RmlsZSA9IHBhdGguam9pbihvdXREaXIsIGAke3NhZmVOYW1lfS5iaW5gKTtcbiAgICBmcy5ta2RpclN5bmMob3V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKG91dEZpbGUsIGVuY29kZUZvclJ1bnRpbWUobWVyZ2VKc29uKSk7XG4gICAgY29uc29sZS5sb2coYFt0b29sc10gZ2VuZXJhdGVkIGNvbmZpZyBiaW46ICR7b3V0RmlsZX1gKTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdEpzRmlsZXMoZGlyOiBzdHJpbmcsIGFjYzogc3RyaW5nW10pIHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyKSkgcmV0dXJuO1xuICAgIGNvbnN0IHN0ID0gZnMuc3RhdFN5bmMoZGlyKTtcbiAgICBpZiAoIXN0LmlzRGlyZWN0b3J5KCkpIHJldHVybjtcbiAgICBjb25zdCBlbnRyaWVzID0gZnMucmVhZGRpclN5bmMoZGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgY29uc3QgZnVsbCA9IHBhdGguam9pbihkaXIsIGUubmFtZSk7XG4gICAgICAgIGlmIChlLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIGNvbGxlY3RKc0ZpbGVzKGZ1bGwsIGFjYyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5pc0ZpbGUoKSAmJiBlLm5hbWUuZW5kc1dpdGgoJy5qcycpKSB7XG4gICAgICAgICAgICBhY2MucHVzaChmdWxsKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdFN0cmlwUm9vdHMob3B0aW9uczogYW55LCByZXN1bHQ6IGFueSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByb290cyA9IGNyZWF0ZU1lbWJlcnNoaXBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IGFkZCA9IChwOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGlmIChwID09IG51bGwgfHwgcCA9PT0gJycpIHJldHVybjtcbiAgICAgICAgY29uc3QgcyA9IHBhdGgubm9ybWFsaXplKFN0cmluZyhwKS5yZXBsYWNlKC9cXC8vZywgcGF0aC5zZXApKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3QgPSBmcy5zdGF0U3luYyhzKTtcbiAgICAgICAgICAgICAgICBpZiAoc3QuaXNEaXJlY3RvcnkoKSkgbWVtYmVyc2hpcEFkZChyb290cywgcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLyogaWdub3JlICovXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgYWRkKHJlc3VsdD8uZGVzdCk7XG4gICAgYWRkKHJlc3VsdD8ucGF0aHM/LmRpcik7XG4gICAgYWRkKHJlc3VsdD8ucGF0aHM/LmFzc2V0cyk7XG4gICAgYWRkKHJlc3VsdD8ucGF0aHM/LmJ1bmRsZVNjcmlwdHMpO1xuICAgIGFkZChyZXN1bHQ/LnBhdGhzPy5zdWJwYWNrYWdlcyk7XG5cbiAgICBjb25zdCBwcm9qZWN0UGF0aCA9IEVkaXRvci5Qcm9qZWN0LnBhdGg7XG4gICAgaWYgKHByb2plY3RQYXRoICYmIG9wdGlvbnM/LmJ1aWxkUGF0aCAmJiBvcHRpb25zPy5vdXRwdXROYW1lKSB7XG4gICAgICAgIGxldCBicCA9IFN0cmluZyhvcHRpb25zLmJ1aWxkUGF0aCk7XG4gICAgICAgIGlmIChicC5pbmNsdWRlcygncHJvamVjdDonKSkge1xuICAgICAgICAgICAgYnAgPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsIGJwLnJlcGxhY2UoL15wcm9qZWN0OlxcL1xcLy8sICcnKS5yZXBsYWNlKC9ecHJvamVjdDovLCAnJykpO1xuICAgICAgICB9XG4gICAgICAgIGFkZChwYXRoLmpvaW4oYnAsIG9wdGlvbnMub3V0cHV0TmFtZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBtZW1iZXJzaGlwVG9BcnJheShyb290cyk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RBbGxKc0ZpbGVzKHJvb3RzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBmaWxlcyA9IGNyZWF0ZU1lbWJlcnNoaXBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3Qgcm9vdCBvZiByb290cykge1xuICAgICAgICBjb25zdCBhY2M6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbGxlY3RKc0ZpbGVzKHJvb3QsIGFjYyk7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBhY2MpIG1lbWJlcnNoaXBBZGQoZmlsZXMsIHBhdGgubm9ybWFsaXplKGYpKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbWJlcnNoaXBUb0FycmF5KGZpbGVzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWluaWZ5U3RyaXBDb25zb2xlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBiYXNlID0ge1xuICAgICAgICBjb21wcmVzczoge1xuICAgICAgICAgICAgZHJvcF9jb25zb2xlOiB0cnVlLFxuICAgICAgICAgICAgZHJvcF9kZWJ1Z2dlcjogdHJ1ZSxcbiAgICAgICAgICAgIHBhc3NlczogMixcbiAgICAgICAgfSxcbiAgICAgICAgbWFuZ2xlOiBmYWxzZSxcbiAgICAgICAgZm9ybWF0OiB7IGNvbW1lbnRzOiAnc29tZScgYXMgY29uc3QgfSxcbiAgICAgICAgZWNtYTogMjAyMCBhcyBjb25zdCxcbiAgICB9O1xuICAgIGxldCBvdXQgPSBhd2FpdCBtaW5pZnkoc3JjLCBiYXNlKTtcbiAgICBpZiAob3V0LmNvZGUgIT0gbnVsbCkgcmV0dXJuIG91dC5jb2RlO1xuICAgIG91dCA9IGF3YWl0IG1pbmlmeShzcmMsIHsgLi4uYmFzZSwgbW9kdWxlOiB0cnVlIH0pO1xuICAgIGlmIChvdXQuY29kZSAhPSBudWxsKSByZXR1cm4gb3V0LmNvZGU7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0ZXJzZXIgcmV0dXJuZWQgZW1wdHknKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RyaXBDb25zb2xlRnJvbUJ1aWxkT3V0cHV0KHJvb3RzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGZpbGVzID0gY29sbGVjdEFsbEpzRmlsZXMocm9vdHMpO1xuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdG9vbHNdIHN0cmlwQ29uc29sZTogbm8gLmpzIHVuZGVyIHJvb3RzJywgcm9vdHMpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBvayA9IDA7XG4gICAgbGV0IGZhaWwgPSAwO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gZnMucmVhZEZpbGVTeW5jKGZpbGUsICd1dGY4Jyk7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gYXdhaXQgbWluaWZ5U3RyaXBDb25zb2xlKHNyYyk7XG4gICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIGNvZGUsICd1dGY4Jyk7XG4gICAgICAgICAgICBvaysrO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGZhaWwrKztcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW3Rvb2xzXSBzdHJpcENvbnNvbGUgc2tpcCAodGVyc2VyIGVycm9yKTogJHtmaWxlfWAsIGVycik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coYFt0b29sc10gc3RyaXBDb25zb2xlIGRvbmU6IG9rPSR7b2t9LCBmYWlsPSR7ZmFpbH0sIHJvb3RzPSR7cm9vdHMuam9pbignOyAnKX1gKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkU3RyaXBDb25zb2xlKG9wdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHYgPSBvcHRpb25zPy5wYWNrYWdlcz8udG9vbHM/LnN0cmlwQ29uc29sZTtcbiAgICBpZiAodiA9PT0gdHJ1ZSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHYgPT09ICd0cnVlJyB8fCB2ID09PSAxKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBDb2NvcyBlbmdpbmUtYWRhcHRlciDkuK0gdHQuY3JlYXRlT2Zmc2NyZWVuVmlkZW8g6bi/6JKZ5pqC5LiN5pSv5oyB77yM5p6E5bu65ZCO5pu/5o2i5Li65bim546v5aKD5Yik5pat55qE6LCD55SoICovXG5mdW5jdGlvbiBwYXRjaEVuZ2luZUFkYXB0ZXJIYXJtb255KGVuZ2luZUFkYXB0ZXJQYXRoOiBzdHJpbmcpIHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZW5naW5lQWRhcHRlclBhdGgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmVlZGxlID0gJ3R0LmNyZWF0ZU9mZnNjcmVlblZpZGVvKCknO1xuICAgIGxldCBzcmMgPSBmcy5yZWFkRmlsZVN5bmMoZW5naW5lQWRhcHRlclBhdGgsICd1dGY4Jyk7XG4gICAgaWYgKCFzcmMuaW5jbHVkZXMobmVlZGxlKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFt0b29sc10gaGFybW9ueSBwYXRjaCBza2lwOiAke25lZWRsZX0gbm90IGZvdW5kIGluICR7ZW5naW5lQWRhcHRlclBhdGh9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVwbGFjZW1lbnQgPVxuICAgICAgICAnKGZ1bmN0aW9uKHQpe3RyeXt2YXIgaT10LmdldFN5c3RlbUluZm9TeW5jKCkscD1TdHJpbmcoaS5wbGF0Zm9ybXx8XCJcIikudG9Mb3dlckNhc2UoKSxzPVN0cmluZyhpLnN5c3RlbXx8XCJcIikudG9Mb3dlckNhc2UoKTsnXG4gICAgICAgICsgJ2lmKHA9PT1cIm9wZW5oYXJtb255XCJ8fHMuaW5kZXhPZihcIm9wZW5oYXJtb255XCIpPj0wKXJldHVybiBudWxsO3ZhciBmPXRbXCJjcmVhdGVcIitcIk9mZnNjcmVlblwiK1wiVmlkZW9cIl07J1xuICAgICAgICArICdyZXR1cm4gdHlwZW9mIGY9PT1cImZ1bmN0aW9uXCI/Zi5jYWxsKHQpOm51bGx9Y2F0Y2goZSl7cmV0dXJuIG51bGx9fSkodHQpJztcbiAgICBzcmMgPSBzcmMucmVwbGFjZShuZWVkbGUsIHJlcGxhY2VtZW50KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGVuZ2luZUFkYXB0ZXJQYXRoLCBzcmMsICd1dGY4Jyk7XG4gICAgY29uc29sZS5sb2coYFt0b29sc10gaGFybW9ueSBwYXRjaCBhcHBsaWVkOiAke2VuZ2luZUFkYXB0ZXJQYXRofWApO1xufVxuXG5mdW5jdGlvbiBwYXRjaEhhcm1vbnlFbmdpbmVBZGFwdGVyKHJvb3RzOiBzdHJpbmdbXSkge1xuICAgIGZvciAoY29uc3Qgcm9vdCBvZiByb290cykge1xuICAgICAgICBwYXRjaEVuZ2luZUFkYXB0ZXJIYXJtb255KHBhdGguam9pbihyb290LCAnZW5naW5lLWFkYXB0ZXIuanMnKSk7XG4gICAgfVxufVxuXG5jb25zdCBXRUNIQVRfT05MWV9TREtfRklMRVMgPSBbJ1NkazMwcldlY2hhdC50cycsICdTZGszMHJXZWNoYXQudHMubWV0YSddO1xuXG5mdW5jdGlvbiBnZXRCdWlsZFBsYXRmb3JtKG9wdGlvbnM6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN0cmluZyhvcHRpb25zPy5wbGF0Zm9ybSA/PyBvcHRpb25zPy5idWlsZFBsYXRmb3JtID8/ICcnKTtcbn1cblxuZnVuY3Rpb24gd2VjaGF0T25seVNka1BhdGhzKHByb2plY3RQYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzcmNEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsICd0b29scycsICd3ZWNoYXQtb25seScpO1xuICAgIGNvbnN0IGRlc3REaXIgPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsICdhc3NldHMnLCAnc2NyaXB0JywgJ3NkaycpO1xuICAgIHJldHVybiB7IHNyY0RpciwgZGVzdERpciB9O1xufVxuXG4vKiogMzByIFNESyDlkKsgQGRuLXNka++8jOS4jeiDveeVmeWcqCBhc3NldHMg5ZCm5YiZ5oqW6Z+z562J5YWo5bmz5Y+w5p6E5bu66YO95Lya5omT6L+b5YyFICovXG5mdW5jdGlvbiBzeW5jV2VjaGF0T25seVNkayhvcHRpb25zOiBhbnkpIHtcbiAgICBjb25zdCBwcm9qZWN0UGF0aCA9IEVkaXRvci5Qcm9qZWN0LnBhdGg7XG4gICAgaWYgKCFwcm9qZWN0UGF0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgeyBzcmNEaXIsIGRlc3REaXIgfSA9IHdlY2hhdE9ubHlTZGtQYXRocyhwcm9qZWN0UGF0aCk7XG4gICAgY29uc3QgcGxhdGZvcm0gPSBnZXRCdWlsZFBsYXRmb3JtKG9wdGlvbnMpO1xuICAgIGNvbnN0IGlzV2VjaGF0ID0gcGxhdGZvcm0gPT09ICd3ZWNoYXRnYW1lJztcblxuICAgIGlmIChpc1dlY2hhdCkge1xuICAgICAgICBmcy5ta2RpclN5bmMoZGVzdERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBXRUNIQVRfT05MWV9TREtfRklMRVMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IHBhdGguam9pbihzcmNEaXIsIG5hbWUpO1xuICAgICAgICAgICAgY29uc3QgZGVzdCA9IHBhdGguam9pbihkZXN0RGlyLCBuYW1lKTtcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhzcmMpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBbdG9vbHNdIHdlY2hhdC1vbmx5IHNkayBtaXNzaW5nOiAke3NyY31gKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZzLmNvcHlGaWxlU3luYyhzcmMsIGRlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdbdG9vbHNdIGNvcGllZCB3ZWNoYXQtb25seSAzMHIgc2RrIGludG8gYXNzZXRzL3NjcmlwdC9zZGsnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZW1vdmVkID0gMDtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgV0VDSEFUX09OTFlfU0RLX0ZJTEVTKSB7XG4gICAgICAgIGNvbnN0IGRlc3QgPSBwYXRoLmpvaW4oZGVzdERpciwgbmFtZSk7XG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGRlc3QpKSB7XG4gICAgICAgICAgICBmcy51bmxpbmtTeW5jKGRlc3QpO1xuICAgICAgICAgICAgcmVtb3ZlZCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChyZW1vdmVkID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgW3Rvb2xzXSByZW1vdmVkIHdlY2hhdC1vbmx5IDMwciBzZGsgZnJvbSBhc3NldHMgKCR7cGxhdGZvcm0gfHwgJ3Vua25vd24gcGxhdGZvcm0nfSlgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkJlZm9yZUJ1aWxkKG9wdGlvbnM6IGFueSwgX3Jlc3VsdDogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgc3luY1dlY2hhdE9ubHlTZGsob3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t0b29sc10gb25CZWZvcmVCdWlsZCBzeW5jV2VjaGF0T25seVNkayBmYWlsZWQ6JywgZXJyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5sb2coJ1t0b29sc10gb25CZWZvcmVCdWlsZDogZ2VuZXJhdGUgY29uZmlnIGJpbicpO1xuICAgICAgICBnZW5lcmF0ZUNvbmZpZ0JpbigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbdG9vbHNdIG9uQmVmb3JlQnVpbGQgZ2VuZXJhdGUgY29uZmlnIGJpbiBmYWlsZWQ6JywgZXJyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvbkFmdGVyQnVpbGQob3B0aW9uczogYW55LCByZXN1bHQ6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmIChnZXRCdWlsZFBsYXRmb3JtKG9wdGlvbnMpICE9PSAnd2VjaGF0Z2FtZScpIHtcbiAgICAgICAgICAgIHN5bmNXZWNoYXRPbmx5U2RrKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t0b29sc10gb25BZnRlckJ1aWxkIHN5bmNXZWNoYXRPbmx5U2RrIGZhaWxlZDonLCBlcnIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAoc2hvdWxkU3RyaXBDb25zb2xlKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICBjb25zdCByb290cyA9IGNvbGxlY3RTdHJpcFJvb3RzKG9wdGlvbnMsIHJlc3VsdCk7XG4gICAgICAgICAgICBpZiAocm9vdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAnW3Rvb2xzXSBzdHJpcENvbnNvbGUg5bey5Yu+6YCJ5L2G5pyq6IO96Kej5p6Q5p6E5bu66L6T5Ye655uu5b2V77yI5qOA5p+lIHJlc3VsdC5kZXN0IC8gcGF0aHMgLyBidWlsZFBhdGgrb3V0cHV0TmFtZe+8iScsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1t0b29sc10gb25BZnRlckJ1aWxkIHN0cmlwQ29uc29sZSDihpInLCByb290cy5qb2luKCcgfCAnKSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgc3RyaXBDb25zb2xlRnJvbUJ1aWxkT3V0cHV0KHJvb3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbdG9vbHNdIG9uQWZ0ZXJCdWlsZCBzdHJpcENvbnNvbGUgZmFpbGVkOicsIGVycik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmIChnZXRCdWlsZFBsYXRmb3JtKG9wdGlvbnMpID09PSAnYnl0ZWRhbmNlLW1pbmktZ2FtZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RzID0gY29sbGVjdFN0cmlwUm9vdHMob3B0aW9ucywgcmVzdWx0KTtcbiAgICAgICAgICAgIHBhdGNoSGFybW9ueUVuZ2luZUFkYXB0ZXIocm9vdHMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t0b29sc10gb25BZnRlckJ1aWxkIGhhcm1vbnkgcGF0Y2ggZmFpbGVkOicsIGVycik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbdG9vbHNdIG9uQWZ0ZXJCdWlsZDogZ2VuZXJhdGUgY29uZmlnIGJpbicpO1xuICAgICAgICBnZW5lcmF0ZUNvbmZpZ0JpbigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbdG9vbHNdIG9uQWZ0ZXJCdWlsZCBnZW5lcmF0ZSBjb25maWcgYmluIGZhaWxlZDonLCBlcnIpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvYnVpbGQtaG9va3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7OztHQUdHO0FBQ0gsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixrREFBd0I7QUFDeEIsbUNBQWdDO0FBQ2hDLG1EQUl5QjtBQUVaLFFBQUEsVUFBVSxHQUFHLElBQUksQ0FBQztBQUUvQixTQUFTLFFBQVEsQ0FBQyxRQUFnQjtJQUM5QixNQUFNLEdBQUcsR0FBRyxZQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQUMsV0FBbUI7O0lBQ2pELE1BQU0sYUFBYSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sZ0JBQWdCLEdBQUcsWUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFaEUsTUFBTSxXQUFXLEdBQUcsbUVBQW1FLENBQUM7SUFDeEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDNUMsSUFBSSxDQUFDLEdBQTJCLElBQUksQ0FBQztJQUNyQyxPQUFPLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFO1FBQzdDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzdCO0lBRUQsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7SUFDNUcsTUFB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QUcsQ0FBQyxDQUFDO0tBQ25FO0lBQ0QsSUFBSTtRQUNBLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUsscUJBQXFCLEVBQUU7WUFDckQsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFDO0tBQ0o7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsOENBQThDLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDdEU7SUFDRCxJQUFJO1FBQ0EsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQ3pELGlCQUFpQixFQUFFLENBQUM7S0FDdkI7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0RBQWtELEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDMUU7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBdENELG9DQXNDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDmnoTlu7rov5vnqIvvvIjni6znq4sgd29ya2Vy77yJ5Yqg6L2955qE6ZKp5a2Q6ISa5pys77ybY3VzdG9tLWJ1aWxkZXIg55qEIGNvbmZpZ3MuKi5ob29rcyDmjIflkJHmnKzmlofku7bjgIJcclxuICogY3VzdG9tLWJ1aWxkZXIudHMg5LyaIHJlLWV4cG9ydCDmnKzmlofku7bnmoTpkqnlrZDvvIzkvpvnvJbovpHlmajmoKHpqozpgJrov4fjgIJcclxuICovXHJcbmltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgbHo0IGZyb20gJ2x6NGpzJztcclxuaW1wb3J0IHsgbWluaWZ5IH0gZnJvbSAndGVyc2VyJztcclxuaW1wb3J0IHtcclxuICAgIGNyZWF0ZU1lbWJlcnNoaXBTZXQsXHJcbiAgICBtZW1iZXJzaGlwQWRkLFxyXG4gICAgbWVtYmVyc2hpcFRvQXJyYXksXHJcbn0gZnJvbSAnLi9NZW1iZXJzaGlwU2V0JztcclxuXHJcbmV4cG9ydCBjb25zdCB0aHJvd0Vycm9yID0gdHJ1ZTtcclxuXHJcbmZ1bmN0aW9uIHJlYWRKc29uKGZpbGVQYXRoOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKHJhdyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVDb25maWdOYW1lVmVyc2lvbihwcm9qZWN0UGF0aDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBzZGtDb25maWdQYXRoID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnYXNzZXRzJywgJ3NjcmlwdCcsICdzZGsnLCAnc2RrQ29uZmlnLnRzJyk7XHJcbiAgICBjb25zdCBzZGtDb25maWdDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHNka0NvbmZpZ1BhdGgsICd1dGY4Jyk7XHJcblxyXG4gICAgY29uc3QgaW1wb3J0UmVnZXggPSAvaW1wb3J0XFxzK1xce1xccyooXFx3KylcXHMqXFx9XFxzK2Zyb21cXHMrW1wiJ11cXC5cXC9jb25maWdcXC8oW15cIiddKylbXCInXTs/L2c7XHJcbiAgICBjb25zdCBpbXBvcnRNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gICAgbGV0IG06IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBudWxsO1xyXG4gICAgd2hpbGUgKChtID0gaW1wb3J0UmVnZXguZXhlYyhzZGtDb25maWdDb250ZW50KSkpIHtcclxuICAgICAgICBpbXBvcnRNYXAuc2V0KG1bMV0sIG1bMl0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbmZpZ0Fzc2lnbiA9IHNka0NvbmZpZ0NvbnRlbnQubWF0Y2goL3N0YXRpY1xccytyZWFkb25seVxccytjb25maWdcXHMqOlxccypJQ29uZmlnRGF0YVxccyo9XFxzKihcXHcrKVxccyo7Lyk7XHJcbiAgICBjb25zdCBzeW1ib2wgPSBjb25maWdBc3NpZ24/LlsxXSA/PyAnRGVmYXVsdENvbmZpZyc7XHJcbiAgICBjb25zdCByZWxDb25maWcgPSBpbXBvcnRNYXAuZ2V0KHN5bWJvbCkgPz8gJ0RlZmF1bHRDb25maWcnO1xyXG4gICAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJ2Fzc2V0cycsICdzY3JpcHQnLCAnc2RrJywgJ2NvbmZpZycsIGAke3JlbENvbmZpZ30udHNgKTtcclxuICAgIGNvbnN0IGNvbmZpZ0NvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgJ3V0ZjgnKTtcclxuXHJcbiAgICBjb25zdCBuYW1lID0gY29uZmlnQ29udGVudC5tYXRjaCgvbmFtZVxccyo6XFxzKltcIiddKFteXCInXSspW1wiJ10vKT8uWzFdID8/ICdjb25maWcnO1xyXG4gICAgY29uc3QgdnNpb24gPSBjb25maWdDb250ZW50Lm1hdGNoKC92c2lvblxccyo6XFxzKltcIiddKFteXCInXSspW1wiJ10vKT8uWzFdID8/ICcwLjAuMCc7XHJcbiAgICByZXR1cm4geyBuYW1lLCB2c2lvbiB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmNvZGVGb3JSdW50aW1lKGpzb25PYmo6IGFueSkge1xyXG4gICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb25PYmopO1xyXG4gICAgY29uc3QgdWludDggPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoanNvblN0cmluZyk7XHJcbiAgICBjb25zdCBjb21wcmVzc2VkID0gVWludDhBcnJheS5mcm9tKGx6NC5jb21wcmVzcyh1aW50OCkpO1xyXG5cclxuICAgIGNvbnN0IGJpbmFyeSA9IEJ1ZmZlci5mcm9tKGNvbXByZXNzZWQpLnRvU3RyaW5nKCdsYXRpbjEnKTtcclxuICAgIGNvbnN0IGJhc2U2NCA9IEJ1ZmZlci5mcm9tKGJpbmFyeSwgJ2xhdGluMScpLnRvU3RyaW5nKCdiYXNlNjQnKTtcclxuICAgIHJldHVybiBCdWZmZXIuZnJvbShiYXNlNjQsICdsYXRpbjEnKTtcclxufVxyXG5cclxuY29uc3QgSE9UX1VQREFURV9UQUJMRV9GSUxFUzogeyB0YWJsZUtleTogc3RyaW5nOyBmaWxlTmFtZTogc3RyaW5nIH1bXSA9IFtcclxuICAgIHsgdGFibGVLZXk6ICdNb25zdGVyJywgZmlsZU5hbWU6ICdNb25zdGVyLmpzb24nIH0sXHJcbiAgICB7IHRhYmxlS2V5OiAnQ29uc3QnLCBmaWxlTmFtZTogJ0NvbnN0Lmpzb24nIH0sXHJcbiAgICB7IHRhYmxlS2V5OiAnUmFuaycsIGZpbGVOYW1lOiAnUmFuay5qc29uJyB9LFxyXG4gICAgeyB0YWJsZUtleTogJ0l0ZW0nLCBmaWxlTmFtZTogJ0l0ZW0uanNvbicgfSxcclxuICAgIHsgdGFibGVLZXk6ICdMZXZlbCcsIGZpbGVOYW1lOiAnTGV2ZWwuanNvbicgfSxcclxuICAgIHsgdGFibGVLZXk6ICdTa2lsbCcsIGZpbGVOYW1lOiAnU2tpbGwuanNvbicgfSxcclxuICAgIHsgdGFibGVLZXk6ICdCYXR0bGVidWZmJywgZmlsZU5hbWU6ICdCYXR0bGVidWZmLmpzb24nIH0sXHJcbiAgICB7IHRhYmxlS2V5OiAnV2VhcG9uJywgZmlsZU5hbWU6ICdXZWFwb24uanNvbicgfSxcclxuICAgIHsgdGFibGVLZXk6ICdUZXh0JywgZmlsZU5hbWU6ICdUZXh0Lmpzb24nIH0sXHJcbiAgICB7IHRhYmxlS2V5OiAnSGVybycsIGZpbGVOYW1lOiAnSGVyby5qc29uJyB9LFxyXG4gICAgeyB0YWJsZUtleTogJ0hlYWRpY29uJywgZmlsZU5hbWU6ICdIZWFkaWNvbi5qc29uJyB9LFxyXG5dO1xyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVDb25maWdCaW4oKSB7XHJcbiAgICBjb25zdCBwcm9qZWN0UGF0aCA9IEVkaXRvci5Qcm9qZWN0LnBhdGg7XHJcbiAgICBjb25zdCBjb25maWdEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsICdhc3NldHMnLCAnYnVuZGxlcycsICdmaXJzdCcsICdjb25maWcnKTtcclxuXHJcbiAgICBjb25zdCBtZXJnZUpzb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XHJcbiAgICBmb3IgKGNvbnN0IHsgdGFibGVLZXksIGZpbGVOYW1lIH0gb2YgSE9UX1VQREFURV9UQUJMRV9GSUxFUykge1xyXG4gICAgICAgIGNvbnN0IGZwID0gcGF0aC5qb2luKGNvbmZpZ0RpciwgZmlsZU5hbWUpO1xyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmcCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbdG9vbHNdIHNraXAgYmluIGdlbmVyYXRlOiBtaXNzaW5nICR7ZmlsZU5hbWV9YCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVyZ2VKc29uW3RhYmxlS2V5XSA9IHJlYWRKc29uKGZwKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IG5hbWUsIHZzaW9uIH0gPSByZXNvbHZlQ29uZmlnTmFtZVZlcnNpb24ocHJvamVjdFBhdGgpO1xyXG4gICAgY29uc3Qgc2FmZU5hbWUgPSBgJHtuYW1lfSR7dnNpb259YC5yZXBsYWNlKC9bPD46XCIvXFxcXHw/Kl0rL2csICdfJyk7XHJcbiAgICBjb25zdCBvdXREaXIgPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsICdiaW4nKTtcclxuICAgIGNvbnN0IG91dEZpbGUgPSBwYXRoLmpvaW4ob3V0RGlyLCBgJHtzYWZlTmFtZX0uYmluYCk7XHJcbiAgICBmcy5ta2RpclN5bmMob3V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcclxuICAgIGZzLndyaXRlRmlsZVN5bmMob3V0RmlsZSwgZW5jb2RlRm9yUnVudGltZShtZXJnZUpzb24pKTtcclxuICAgIGNvbnNvbGUubG9nKGBbdG9vbHNdIGdlbmVyYXRlZCBjb25maWcgYmluOiAke291dEZpbGV9YCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbGxlY3RKc0ZpbGVzKGRpcjogc3RyaW5nLCBhY2M6IHN0cmluZ1tdKSB7XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyKSkgcmV0dXJuO1xyXG4gICAgY29uc3Qgc3QgPSBmcy5zdGF0U3luYyhkaXIpO1xyXG4gICAgaWYgKCFzdC5pc0RpcmVjdG9yeSgpKSByZXR1cm47XHJcbiAgICBjb25zdCBlbnRyaWVzID0gZnMucmVhZGRpclN5bmMoZGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XHJcbiAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xyXG4gICAgICAgIGNvbnN0IGZ1bGwgPSBwYXRoLmpvaW4oZGlyLCBlLm5hbWUpO1xyXG4gICAgICAgIGlmIChlLmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgICAgY29sbGVjdEpzRmlsZXMoZnVsbCwgYWNjKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGUuaXNGaWxlKCkgJiYgZS5uYW1lLmVuZHNXaXRoKCcuanMnKSkge1xyXG4gICAgICAgICAgICBhY2MucHVzaChmdWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbGxlY3RTdHJpcFJvb3RzKG9wdGlvbnM6IGFueSwgcmVzdWx0OiBhbnkpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCByb290cyA9IGNyZWF0ZU1lbWJlcnNoaXBTZXQ8c3RyaW5nPigpO1xyXG4gICAgY29uc3QgYWRkID0gKHA6IHVua25vd24pID0+IHtcclxuICAgICAgICBpZiAocCA9PSBudWxsIHx8IHAgPT09ICcnKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgcyA9IHBhdGgubm9ybWFsaXplKFN0cmluZyhwKS5yZXBsYWNlKC9cXC8vZywgcGF0aC5zZXApKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhzKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3QgPSBmcy5zdGF0U3luYyhzKTtcclxuICAgICAgICAgICAgICAgIGlmIChzdC5pc0RpcmVjdG9yeSgpKSBtZW1iZXJzaGlwQWRkKHJvb3RzLCBzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICAvKiBpZ25vcmUgKi9cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGFkZChyZXN1bHQ/LmRlc3QpO1xyXG4gICAgYWRkKHJlc3VsdD8ucGF0aHM/LmRpcik7XHJcbiAgICBhZGQocmVzdWx0Py5wYXRocz8uYXNzZXRzKTtcclxuICAgIGFkZChyZXN1bHQ/LnBhdGhzPy5idW5kbGVTY3JpcHRzKTtcclxuICAgIGFkZChyZXN1bHQ/LnBhdGhzPy5zdWJwYWNrYWdlcyk7XHJcblxyXG4gICAgY29uc3QgcHJvamVjdFBhdGggPSBFZGl0b3IuUHJvamVjdC5wYXRoO1xyXG4gICAgaWYgKHByb2plY3RQYXRoICYmIG9wdGlvbnM/LmJ1aWxkUGF0aCAmJiBvcHRpb25zPy5vdXRwdXROYW1lKSB7XHJcbiAgICAgICAgbGV0IGJwID0gU3RyaW5nKG9wdGlvbnMuYnVpbGRQYXRoKTtcclxuICAgICAgICBpZiAoYnAuaW5jbHVkZXMoJ3Byb2plY3Q6JykpIHtcclxuICAgICAgICAgICAgYnAgPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsIGJwLnJlcGxhY2UoL15wcm9qZWN0OlxcL1xcLy8sICcnKS5yZXBsYWNlKC9ecHJvamVjdDovLCAnJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhZGQocGF0aC5qb2luKGJwLCBvcHRpb25zLm91dHB1dE5hbWUpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWVtYmVyc2hpcFRvQXJyYXkocm9vdHMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb2xsZWN0QWxsSnNGaWxlcyhyb290czogc3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBmaWxlcyA9IGNyZWF0ZU1lbWJlcnNoaXBTZXQ8c3RyaW5nPigpO1xyXG4gICAgZm9yIChjb25zdCByb290IG9mIHJvb3RzKSB7XHJcbiAgICAgICAgY29uc3QgYWNjOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGNvbGxlY3RKc0ZpbGVzKHJvb3QsIGFjYyk7XHJcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGFjYykgbWVtYmVyc2hpcEFkZChmaWxlcywgcGF0aC5ub3JtYWxpemUoZikpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1lbWJlcnNoaXBUb0FycmF5KGZpbGVzKTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gbWluaWZ5U3RyaXBDb25zb2xlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IGJhc2UgPSB7XHJcbiAgICAgICAgY29tcHJlc3M6IHtcclxuICAgICAgICAgICAgZHJvcF9jb25zb2xlOiB0cnVlLFxyXG4gICAgICAgICAgICBkcm9wX2RlYnVnZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICBwYXNzZXM6IDIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtYW5nbGU6IGZhbHNlLFxyXG4gICAgICAgIGZvcm1hdDogeyBjb21tZW50czogJ3NvbWUnIGFzIGNvbnN0IH0sXHJcbiAgICAgICAgZWNtYTogMjAyMCBhcyBjb25zdCxcclxuICAgIH07XHJcbiAgICBsZXQgb3V0ID0gYXdhaXQgbWluaWZ5KHNyYywgYmFzZSk7XHJcbiAgICBpZiAob3V0LmNvZGUgIT0gbnVsbCkgcmV0dXJuIG91dC5jb2RlO1xyXG4gICAgb3V0ID0gYXdhaXQgbWluaWZ5KHNyYywgeyAuLi5iYXNlLCBtb2R1bGU6IHRydWUgfSk7XHJcbiAgICBpZiAob3V0LmNvZGUgIT0gbnVsbCkgcmV0dXJuIG91dC5jb2RlO1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCd0ZXJzZXIgcmV0dXJuZWQgZW1wdHknKTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gc3RyaXBDb25zb2xlRnJvbUJ1aWxkT3V0cHV0KHJvb3RzOiBzdHJpbmdbXSkge1xyXG4gICAgY29uc3QgZmlsZXMgPSBjb2xsZWN0QWxsSnNGaWxlcyhyb290cyk7XHJcbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdbdG9vbHNdIHN0cmlwQ29uc29sZTogbm8gLmpzIHVuZGVyIHJvb3RzJywgcm9vdHMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBvayA9IDA7XHJcbiAgICBsZXQgZmFpbCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBzcmMgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZSwgJ3V0ZjgnKTtcclxuICAgICAgICAgICAgY29uc3QgY29kZSA9IGF3YWl0IG1pbmlmeVN0cmlwQ29uc29sZShzcmMpO1xyXG4gICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIGNvZGUsICd1dGY4Jyk7XHJcbiAgICAgICAgICAgIG9rKys7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGZhaWwrKztcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbdG9vbHNdIHN0cmlwQ29uc29sZSBza2lwICh0ZXJzZXIgZXJyb3IpOiAke2ZpbGV9YCwgZXJyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhgW3Rvb2xzXSBzdHJpcENvbnNvbGUgZG9uZTogb2s9JHtva30sIGZhaWw9JHtmYWlsfSwgcm9vdHM9JHtyb290cy5qb2luKCc7ICcpfWApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzaG91bGRTdHJpcENvbnNvbGUob3B0aW9uczogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB2ID0gb3B0aW9ucz8ucGFja2FnZXM/LnRvb2xzPy5zdHJpcENvbnNvbGU7XHJcbiAgICBpZiAodiA9PT0gdHJ1ZSkgcmV0dXJuIHRydWU7XHJcbiAgICBpZiAodiA9PT0gJ3RydWUnIHx8IHYgPT09IDEpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vKiogQ29jb3MgZW5naW5lLWFkYXB0ZXIg5LitIHR0LmNyZWF0ZU9mZnNjcmVlblZpZGVvIOm4v+iSmeaaguS4jeaUr+aMge+8jOaehOW7uuWQjuabv+aNouS4uuW4pueOr+Wig+WIpOaWreeahOiwg+eUqCAqL1xyXG5mdW5jdGlvbiBwYXRjaEVuZ2luZUFkYXB0ZXJIYXJtb255KGVuZ2luZUFkYXB0ZXJQYXRoOiBzdHJpbmcpIHtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhlbmdpbmVBZGFwdGVyUGF0aCkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZWVkbGUgPSAndHQuY3JlYXRlT2Zmc2NyZWVuVmlkZW8oKSc7XHJcbiAgICBsZXQgc3JjID0gZnMucmVhZEZpbGVTeW5jKGVuZ2luZUFkYXB0ZXJQYXRoLCAndXRmOCcpO1xyXG4gICAgaWYgKCFzcmMuaW5jbHVkZXMobmVlZGxlKSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgW3Rvb2xzXSBoYXJtb255IHBhdGNoIHNraXA6ICR7bmVlZGxlfSBub3QgZm91bmQgaW4gJHtlbmdpbmVBZGFwdGVyUGF0aH1gKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXBsYWNlbWVudCA9XHJcbiAgICAgICAgJyhmdW5jdGlvbih0KXt0cnl7dmFyIGk9dC5nZXRTeXN0ZW1JbmZvU3luYygpLHA9U3RyaW5nKGkucGxhdGZvcm18fFwiXCIpLnRvTG93ZXJDYXNlKCkscz1TdHJpbmcoaS5zeXN0ZW18fFwiXCIpLnRvTG93ZXJDYXNlKCk7J1xyXG4gICAgICAgICsgJ2lmKHA9PT1cIm9wZW5oYXJtb255XCJ8fHMuaW5kZXhPZihcIm9wZW5oYXJtb255XCIpPj0wKXJldHVybiBudWxsO3ZhciBmPXRbXCJjcmVhdGVcIitcIk9mZnNjcmVlblwiK1wiVmlkZW9cIl07J1xyXG4gICAgICAgICsgJ3JldHVybiB0eXBlb2YgZj09PVwiZnVuY3Rpb25cIj9mLmNhbGwodCk6bnVsbH1jYXRjaChlKXtyZXR1cm4gbnVsbH19KSh0dCknO1xyXG4gICAgc3JjID0gc3JjLnJlcGxhY2UobmVlZGxlLCByZXBsYWNlbWVudCk7XHJcbiAgICBmcy53cml0ZUZpbGVTeW5jKGVuZ2luZUFkYXB0ZXJQYXRoLCBzcmMsICd1dGY4Jyk7XHJcbiAgICBjb25zb2xlLmxvZyhgW3Rvb2xzXSBoYXJtb255IHBhdGNoIGFwcGxpZWQ6ICR7ZW5naW5lQWRhcHRlclBhdGh9YCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhdGNoSGFybW9ueUVuZ2luZUFkYXB0ZXIocm9vdHM6IHN0cmluZ1tdKSB7XHJcbiAgICBmb3IgKGNvbnN0IHJvb3Qgb2Ygcm9vdHMpIHtcclxuICAgICAgICBwYXRjaEVuZ2luZUFkYXB0ZXJIYXJtb255KHBhdGguam9pbihyb290LCAnZW5naW5lLWFkYXB0ZXIuanMnKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDmipbpn7PvvJpnYW1lLmpzb24gc3ViUGFja2FnZXMg5q+P6aG5IHJvb3Qg5LiL5b+F6aG75pyJIGdhbWUuanPjgIJcclxuICogQ29jb3MgMy44IOW8gOWQryB3YXNtIOi1hOa6kOWIhuWMheaXtuS8muWGmeWFpSBgX19jY1dhc21Bc3NldFN1YnBrZ19fYCDihpIgYGNvY29zLWpzL2Fzc2V0cy9g77yMXHJcbiAqIOebruW9lemHjOmAmuW4uOWPquaciSBzcGluZS5qcy5tZW0qLmJpbu+8jOe8uuWFpeWPo+S8muWvvOiHtOW8gOWPkeiAheW3peWFt+e8luivkeWksei0peOAglxyXG4gKiBAcGFyYW0gcm9vdHMg5p6E5bu66L6T5Ye65qC555uu5b2V5YiX6KGoXHJcbiAqL1xyXG5mdW5jdGlvbiBlbnN1cmVCeXRlZGFuY2VXYXNtU3VicGtnR2FtZUpzKHJvb3RzOiBzdHJpbmdbXSkge1xyXG4gICAgZm9yIChsZXQgciA9IDA7IHIgPCByb290cy5sZW5ndGg7IHIrKykge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSByb290c1tyXTtcclxuICAgICAgICBjb25zdCBnYW1lSnNvblBhdGggPSBwYXRoLmpvaW4ocm9vdCwgJ2dhbWUuanNvbicpO1xyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhnYW1lSnNvblBhdGgpKSBjb250aW51ZTtcclxuICAgICAgICBsZXQgZ2FtZUpzb246IHsgc3VicGFja2FnZXM/OiBBcnJheTx7IG5hbWU/OiBzdHJpbmc7IHJvb3Q/OiBzdHJpbmcgfT4gfTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBnYW1lSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGdhbWVKc29uUGF0aCwgJ3V0ZjgnKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW3Rvb2xzXSBieXRlZGFuY2Ugd2FzbSBzdWJwa2c6IOaXoOazleino+aekCBnYW1lLmpzb24nLCBnYW1lSnNvblBhdGgsIGVycik7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwYWNrcyA9IGdhbWVKc29uLnN1YnBhY2thZ2VzO1xyXG4gICAgICAgIGlmICghcGFja3MgfHwgcGFja3MubGVuZ3RoID09PSAwKSBjb250aW51ZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhY2tSb290ID0gU3RyaW5nKHBhY2tzW2ldPy5yb290ID8/ICcnKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XHJcbiAgICAgICAgICAgIGlmICghcGFja1Jvb3QpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAvLyDku4XooaUgd2FzbSDotYTmupDliIbljIXvvJtpbnRlcm5hbC9tYWluIOeUseW8leaTjueUn+aIkOWujOaVtOWFpeWPo1xyXG4gICAgICAgICAgICBpZiAocGFja1Jvb3QuaW5kZXhPZignY29jb3MtanMvYXNzZXRzJykgPCAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgZGlyID0gcGF0aC5qb2luKHJvb3QsIHBhY2tSb290LnJlcGxhY2UoL1xcLyskLywgJycpKTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGRpcikpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignW3Rvb2xzXSBieXRlZGFuY2Ugd2FzbSBzdWJwa2cg55uu5b2V5LiN5a2Y5ZyoJywgZGlyKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGdhbWVKc1BhdGggPSBwYXRoLmpvaW4oZGlyLCAnZ2FtZS5qcycpO1xyXG4gICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhnYW1lSnNQYXRoKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZ2FtZUpzUGF0aCwgJy8vIGNvY29zIHdhc20gYXNzZXQgc3VicGFja2FnZSBzdHViIGZvciBieXRlZGFuY2VcXG4nLCAndXRmOCcpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW3Rvb2xzXSBieXRlZGFuY2Ugd2FzbSBzdWJwa2c6IOW3suihpSBnYW1lLmpzIOKGkicsIGdhbWVKc1BhdGgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgV0VDSEFUX09OTFlfRkFMTEJBQ0tfRklMRVMgPSBbJ1NkazMwcldlY2hhdC50cycsICdTZGszMHJXZWNoYXQudHMubWV0YSddO1xyXG5cclxuZnVuY3Rpb24gZ2V0QnVpbGRQbGF0Zm9ybShvcHRpb25zOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFN0cmluZyhvcHRpb25zPy5wbGF0Zm9ybSA/PyBvcHRpb25zPy5idWlsZFBsYXRmb3JtID8/ICcnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gd2VjaGF0T25seVNka1BhdGhzKHByb2plY3RQYXRoOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHNyY0RpciA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJ3Rvb2xzJywgJ3dlY2hhdC1vbmx5Jyk7XHJcbiAgICBjb25zdCBkZXN0RGlyID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnYXNzZXRzJywgJ3NjcmlwdCcsICdzZGsnKTtcclxuICAgIHJldHVybiB7IHNyY0RpciwgZGVzdERpciB9O1xyXG59XHJcblxyXG4vKiogd2VjaGF0LW9ubHkg55uu5b2V5LiL6ZyA5aSN5Yi255qE5paH5Lu277yI6Lez6L+H6K+05piO5paH5qGj77yJICovXHJcbmZ1bmN0aW9uIGxpc3RXZWNoYXRPbmx5RmlsZXMoc3JjRGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc3JjRGlyKSkgcmV0dXJuIFtdO1xyXG4gICAgY29uc3QgbmFtZXMgPSBmcy5yZWFkZGlyU3luYyhzcmNEaXIpO1xyXG4gICAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBuYW1lc1tpXTtcclxuICAgICAgICBpZiAobmFtZS5lbmRzV2l0aCgnLm1kJykpIGNvbnRpbnVlO1xyXG4gICAgICAgIGNvbnN0IGZ1bGwgPSBwYXRoLmpvaW4oc3JjRGlyLCBuYW1lKTtcclxuICAgICAgICBpZiAoZnMuc3RhdFN5bmMoZnVsbCkuaXNGaWxlKCkpIG91dC5wdXNoKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5cclxuLyoqIOS7jiBhc3NldHMg5Yig6Zmk5b6u5L+h54us5Y2g6ISa5pys77yM6YG/5YWN5q6L55WZ6L+b5oqW6Z+zL+W/q+aJi+WMhSAqL1xyXG5mdW5jdGlvbiByZW1vdmVXZWNoYXRPbmx5U2RrRnJvbUFzc2V0cyhzcmNEaXI6IHN0cmluZywgZGVzdERpcjogc3RyaW5nLCBwbGF0Zm9ybTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBuYW1lcyA9IGxpc3RXZWNoYXRPbmx5RmlsZXMoc3JjRGlyKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgV0VDSEFUX09OTFlfRkFMTEJBQ0tfRklMRVMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBuID0gV0VDSEFUX09OTFlfRkFMTEJBQ0tfRklMRVNbaV07XHJcbiAgICAgICAgaWYgKG5hbWVzLmluZGV4T2YobikgPCAwKSBuYW1lcy5wdXNoKG4pO1xyXG4gICAgfVxyXG4gICAgbGV0IHJlbW92ZWQgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGRlc3QgPSBwYXRoLmpvaW4oZGVzdERpciwgbmFtZXNbaV0pO1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGRlc3QpKSB7XHJcbiAgICAgICAgICAgIGZzLnVubGlua1N5bmMoZGVzdCk7XHJcbiAgICAgICAgICAgIHJlbW92ZWQrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocmVtb3ZlZCA+IDApIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgW3Rvb2xzXSByZW1vdmVkIHdlY2hhdC1vbmx5IDMwciBzZGsgZnJvbSBhc3NldHMgKCR7cGxhdGZvcm0gfHwgJ3Vua25vd24gcGxhdGZvcm0nfSlgKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOS7hee6r+W+ruS/oSB3ZWNoYXRnYW1l77ya5oqKIHRvb2xzL3dlY2hhdC1vbmx5IOaLt+i/myBhc3NldHPjgIJcclxuICog5oqW6Z+zL+W/q+aJiy9CIOerme+8iOWLvumAieWvvOWHuiBiaWxpZ2FtZe+8ieS4jeaLt++8jOmBv+WFjSAzMHIg6L+b5YyF44CCXHJcbiAqL1xyXG5mdW5jdGlvbiBzeW5jV2VjaGF0T25seVNkayhvcHRpb25zOiBhbnksIG1vZGU6ICdiZWZvcmUnIHwgJ2FmdGVyJykge1xyXG4gICAgY29uc3QgcHJvamVjdFBhdGggPSBFZGl0b3IuUHJvamVjdC5wYXRoO1xyXG4gICAgaWYgKCFwcm9qZWN0UGF0aCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHsgc3JjRGlyLCBkZXN0RGlyIH0gPSB3ZWNoYXRPbmx5U2RrUGF0aHMocHJvamVjdFBhdGgpO1xyXG4gICAgY29uc3QgcGxhdGZvcm0gPSBnZXRCdWlsZFBsYXRmb3JtKG9wdGlvbnMpO1xyXG4gICAgY29uc3QgaXNXZWNoYXQgPSBwbGF0Zm9ybSA9PT0gJ3dlY2hhdGdhbWUnO1xyXG4gICAgY29uc3QgaXNCaWxpR2FtZSA9ICEhb3B0aW9ucz8ucGFja2FnZXM/LlsnYmlsaWdhbWUtYnVpbGRlciddPy5pc0JpbGlHYW1lO1xyXG5cclxuICAgIGlmIChtb2RlID09PSAnYWZ0ZXInIHx8ICFpc1dlY2hhdCB8fCBpc0JpbGlHYW1lKSB7XHJcbiAgICAgICAgcmVtb3ZlV2VjaGF0T25seVNka0Zyb21Bc3NldHMoc3JjRGlyLCBkZXN0RGlyLCBpc0JpbGlHYW1lID8gJ2JpbGlnYW1lJyA6IHBsYXRmb3JtKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmlsZXMgPSBsaXN0V2VjaGF0T25seUZpbGVzKHNyY0Rpcik7XHJcbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdbdG9vbHNdIHdlY2hhdC1vbmx5IHNkayBtaXNzaW5nOicsIHNyY0Rpcik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZnMubWtkaXJTeW5jKGRlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBmaWxlc1tpXTtcclxuICAgICAgICBmcy5jb3B5RmlsZVN5bmMocGF0aC5qb2luKHNyY0RpciwgbmFtZSksIHBhdGguam9pbihkZXN0RGlyLCBuYW1lKSk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygnW3Rvb2xzXSBjb3BpZWQgd2VjaGF0LW9ubHkgMzByIHNkayBpbnRvIGFzc2V0cy9zY3JpcHQvc2RrJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBvbkJlZm9yZUJ1aWxkKG9wdGlvbnM6IGFueSwgX3Jlc3VsdDogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHN5bmNXZWNoYXRPbmx5U2RrKG9wdGlvbnMsICdiZWZvcmUnKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t0b29sc10gb25CZWZvcmVCdWlsZCBzeW5jV2VjaGF0T25seVNkayBmYWlsZWQ6JywgZXJyKTtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1t0b29sc10gb25CZWZvcmVCdWlsZDogZ2VuZXJhdGUgY29uZmlnIGJpbicpO1xyXG4gICAgICAgIGdlbmVyYXRlQ29uZmlnQmluKCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdbdG9vbHNdIG9uQmVmb3JlQnVpbGQgZ2VuZXJhdGUgY29uZmlnIGJpbiBmYWlsZWQ6JywgZXJyKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25BZnRlckJ1aWxkKG9wdGlvbnM6IGFueSwgcmVzdWx0OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgLy8g5Lqn54mp5bey57yW6K+R6L+b5YyF77yMYXNzZXRzIOmHjOeahOaLt+i0neW/hemhu+WIoOaOie+8jOmBv+WFjeS4i+asoeaKlumfsy/lv6vmiYvmnoTlu7ror6/miZPlhaVcclxuICAgICAgICBzeW5jV2VjaGF0T25seVNkayhvcHRpb25zLCAnYWZ0ZXInKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t0b29sc10gb25BZnRlckJ1aWxkIHN5bmNXZWNoYXRPbmx5U2RrIGZhaWxlZDonLCBlcnIpO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgICBpZiAoc2hvdWxkU3RyaXBDb25zb2xlKG9wdGlvbnMpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvb3RzID0gY29sbGVjdFN0cmlwUm9vdHMob3B0aW9ucywgcmVzdWx0KTtcclxuICAgICAgICAgICAgaWYgKHJvb3RzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICdbdG9vbHNdIHN0cmlwQ29uc29sZSDlt7Lli77pgInkvYbmnKrog73op6PmnpDmnoTlu7rovpPlh7rnm67lvZXvvIjmo4Dmn6UgcmVzdWx0LmRlc3QgLyBwYXRocyAvIGJ1aWxkUGF0aCtvdXRwdXROYW1l77yJJyxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW3Rvb2xzXSBvbkFmdGVyQnVpbGQgc3RyaXBDb25zb2xlIOKGkicsIHJvb3RzLmpvaW4oJyB8ICcpKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHN0cmlwQ29uc29sZUZyb21CdWlsZE91dHB1dChyb290cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdbdG9vbHNdIG9uQWZ0ZXJCdWlsZCBzdHJpcENvbnNvbGUgZmFpbGVkOicsIGVycik7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGlmIChnZXRCdWlsZFBsYXRmb3JtKG9wdGlvbnMpID09PSAnYnl0ZWRhbmNlLW1pbmktZ2FtZScpIHtcclxuICAgICAgICAgICAgY29uc3Qgcm9vdHMgPSBjb2xsZWN0U3RyaXBSb290cyhvcHRpb25zLCByZXN1bHQpO1xyXG4gICAgICAgICAgICBwYXRjaEhhcm1vbnlFbmdpbmVBZGFwdGVyKHJvb3RzKTtcclxuICAgICAgICAgICAgZW5zdXJlQnl0ZWRhbmNlV2FzbVN1YnBrZ0dhbWVKcyhyb290cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignW3Rvb2xzXSBvbkFmdGVyQnVpbGQgYnl0ZWRhbmNlIHBhdGNoIGZhaWxlZDonLCBlcnIpO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnW3Rvb2xzXSBvbkFmdGVyQnVpbGQ6IGdlbmVyYXRlIGNvbmZpZyBiaW4nKTtcclxuICAgICAgICBnZW5lcmF0ZUNvbmZpZ0JpbigpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignW3Rvb2xzXSBvbkFmdGVyQnVpbGQgZ2VuZXJhdGUgY29uZmlnIGJpbiBmYWlsZWQ6JywgZXJyKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/preview-template/workbench/js/device.js b/preview-template/workbench/js/device.js index d6786f3..983c3ab 100644 --- a/preview-template/workbench/js/device.js +++ b/preview-template/workbench/js/device.js @@ -28,64 +28,126 @@ /** 主流厂商代表性 / 较新机型(逻辑分辨率) */ var DEVICES = [ - { id: 'fit', name: '适应窗口', w: 0, h: 0, frame: false, shell: 'flat', brand: '—' }, + { id: 'fit', name: '适应窗口', w: 0, h: 0, frame: false, shell: 'flat', brand: '通用' }, // —— Apple iPhone —— - { id: 'iphone-se', name: 'iPhone SE 3', w: 375, h: 667, frame: true, shell: 'classic', brand: 'Apple' }, - { id: 'iphone-8', name: 'iPhone 8', w: 375, h: 667, frame: true, shell: 'classic', brand: 'Apple' }, - { id: 'iphone-x', name: 'iPhone X / XS', w: 375, h: 812, frame: true, shell: 'notch', brand: 'Apple' }, - { id: 'iphone-xr', name: 'iPhone XR / 11', w: 414, h: 896, frame: true, shell: 'notch', brand: 'Apple' }, - { id: 'iphone-12', name: 'iPhone 12 / 13', w: 390, h: 844, frame: true, shell: 'notch', brand: 'Apple' }, - { id: 'iphone-12p', name: 'iPhone 12 / 13 Pro', w: 390, h: 844, frame: true, shell: 'notch', brand: 'Apple' }, - { id: 'iphone-12pm', name: 'iPhone 12 / 13 Pro Max', w: 428, h: 926, frame: true, shell: 'notch', brand: 'Apple' }, - { id: 'iphone-14', name: 'iPhone 14', w: 390, h: 844, frame: true, shell: 'notch', brand: 'Apple' }, - { id: 'iphone-14-plus', name: 'iPhone 14 Plus', w: 428, h: 926, frame: true, shell: 'notch', brand: 'Apple' }, - { id: 'iphone-14-pro', name: 'iPhone 14 Pro', w: 393, h: 852, frame: true, shell: 'island', brand: 'Apple' }, - { id: 'iphone-14-promax', name: 'iPhone 14 Pro Max', w: 430, h: 932, frame: true, shell: 'island', brand: 'Apple' }, - { id: 'iphone-15', name: 'iPhone 15 / 15 Plus', w: 393, h: 852, frame: true, shell: 'island', brand: 'Apple' }, - { id: 'iphone-15-pro', name: 'iPhone 15 Pro', w: 393, h: 852, frame: true, shell: 'island', brand: 'Apple' }, - { id: 'iphone-15-promax', name: 'iPhone 15 Pro Max', w: 430, h: 932, frame: true, shell: 'island', brand: 'Apple' }, - { id: 'iphone-16', name: 'iPhone 16', w: 393, h: 852, frame: true, shell: 'island', brand: 'Apple' }, - { id: 'iphone-16-pro', name: 'iPhone 16 Pro', w: 402, y: 0, h: 874, frame: true, shell: 'island', brand: 'Apple' }, - { id: 'iphone-16-promax', name: 'iPhone 16 Pro Max', w: 440, h: 956, frame: true, shell: 'island', brand: 'Apple' }, + { id: 'iphone-se', name: 'Apple iPhone SE 3', w: 375, h: 667, frame: true, shell: 'classic', brand: 'Apple' }, + { id: 'iphone-8', name: 'Apple iPhone 8', w: 375, h: 667, frame: true, shell: 'classic', brand: 'Apple' }, + { id: 'iphone-x', name: 'Apple iPhone X / XS', w: 375, h: 812, frame: true, shell: 'notch', brand: 'Apple' }, + { id: 'iphone-xr', name: 'Apple iPhone XR / 11', w: 414, h: 896, frame: true, shell: 'notch', brand: 'Apple' }, + { id: 'iphone-12', name: 'Apple iPhone 12 / 13', w: 390, h: 844, frame: true, shell: 'notch', brand: 'Apple' }, + { id: 'iphone-12p', name: 'Apple iPhone 12 / 13 Pro', w: 390, h: 844, frame: true, shell: 'notch', brand: 'Apple' }, + { id: 'iphone-12pm', name: 'Apple iPhone 12 / 13 Pro Max', w: 428, h: 926, frame: true, shell: 'notch', brand: 'Apple' }, + { id: 'iphone-14', name: 'Apple iPhone 14', w: 390, h: 844, frame: true, shell: 'notch', brand: 'Apple' }, + { id: 'iphone-14-plus', name: 'Apple iPhone 14 Plus', w: 428, h: 926, frame: true, shell: 'notch', brand: 'Apple' }, + { id: 'iphone-14-pro', name: 'Apple iPhone 14 Pro', w: 393, h: 852, frame: true, shell: 'island', brand: 'Apple' }, + { id: 'iphone-14-promax', name: 'Apple iPhone 14 Pro Max', w: 430, h: 932, frame: true, shell: 'island', brand: 'Apple' }, + { id: 'iphone-15', name: 'Apple iPhone 15 / 15 Plus', w: 393, h: 852, frame: true, shell: 'island', brand: 'Apple' }, + { id: 'iphone-15-pro', name: 'Apple iPhone 15 Pro', w: 393, h: 852, frame: true, shell: 'island', brand: 'Apple' }, + { id: 'iphone-15-promax', name: 'Apple iPhone 15 Pro Max', w: 430, h: 932, frame: true, shell: 'island', brand: 'Apple' }, + { id: 'iphone-16', name: 'Apple iPhone 16', w: 393, h: 852, frame: true, shell: 'island', brand: 'Apple' }, + { id: 'iphone-16-plus', name: 'Apple iPhone 16 Plus', w: 430, h: 932, frame: true, shell: 'island', brand: 'Apple' }, + { id: 'iphone-16-pro', name: 'Apple iPhone 16 Pro', w: 402, h: 874, frame: true, shell: 'island', brand: 'Apple' }, + { id: 'iphone-16-promax', name: 'Apple iPhone 16 Pro Max', w: 440, h: 956, frame: true, shell: 'island', brand: 'Apple' }, + { id: 'iphone-17', name: 'Apple iPhone 17', w: 393, h: 852, frame: true, shell: 'island', brand: 'Apple' }, + { id: 'iphone-17-pro', name: 'Apple iPhone 17 Pro', w: 402, h: 874, frame: true, shell: 'island', brand: 'Apple' }, + { id: 'iphone-air', name: 'Apple iPhone Air', w: 430, h: 932, frame: true, shell: 'island', brand: 'Apple' }, // —— Apple iPad —— - { id: 'ipad', name: 'iPad 10', w: 820, h: 1180, frame: true, shell: 'tabletCam', brand: 'Apple' }, - { id: 'ipad-9', name: 'iPad 9', w: 768, h: 1024, frame: true, shell: 'classic', brand: 'Apple' }, - { id: 'ipad-air', name: 'iPad Air', w: 820, h: 1180, frame: true, shell: 'tabletCam', brand: 'Apple' }, - { id: 'ipad-pro', name: 'iPad Pro 11', w: 834, h: 1194, frame: true, shell: 'tabletCam', brand: 'Apple' }, - { id: 'ipad-pro13', name: 'iPad Pro 12.9', w: 1024, h: 1366, frame: true, shell: 'tabletCam', brand: 'Apple' }, - // —— Samsung —— - { id: 'galaxy-s20', name: 'Galaxy S20', w: 360, h: 800, frame: true, shell: 'punch', brand: 'Samsung' }, - { id: 'galaxy-s21', name: 'Galaxy S21 / S22', w: 360, h: 800, frame: true, shell: 'punch', brand: 'Samsung' }, - { id: 'galaxy-s23', name: 'Galaxy S23 / S24', w: 360, h: 800, frame: true, shell: 'punch', brand: 'Samsung' }, - { id: 'galaxy-s24u', name: 'Galaxy S24 Ultra', w: 412, h: 915, frame: true, shell: 'punch', brand: 'Samsung' }, - { id: 'galaxy-note20', name: 'Galaxy Note 20', w: 412, h: 915, frame: true, shell: 'punch', brand: 'Samsung' }, - { id: 'galaxy-a54', name: 'Galaxy A54', w: 360, h: 800, frame: true, shell: 'punch', brand: 'Samsung' }, + { id: 'ipad', name: 'Apple iPad 10', w: 820, h: 1180, frame: true, shell: 'tabletCam', brand: 'Apple' }, + { id: 'ipad-9', name: 'Apple iPad 9', w: 768, h: 1024, frame: true, shell: 'classic', brand: 'Apple' }, + { id: 'ipad-air', name: 'Apple iPad Air', w: 820, h: 1180, frame: true, shell: 'tabletCam', brand: 'Apple' }, + { id: 'ipad-pro', name: 'Apple iPad Pro 11', w: 834, h: 1194, frame: true, shell: 'tabletCam', brand: 'Apple' }, + { id: 'ipad-pro13', name: 'Apple iPad Pro 13', w: 1024, h: 1366, frame: true, shell: 'tabletCam', brand: 'Apple' }, + // —— Samsung 直板 —— + { id: 'galaxy-s20', name: 'Samsung Galaxy S20', w: 360, h: 800, frame: true, shell: 'punch', brand: 'Samsung' }, + { id: 'galaxy-s21', name: 'Samsung Galaxy S21 / S22', w: 360, h: 800, frame: true, shell: 'punch', brand: 'Samsung' }, + { id: 'galaxy-s23', name: 'Samsung Galaxy S23 / S24', w: 360, h: 800, frame: true, shell: 'punch', brand: 'Samsung' }, + { id: 'galaxy-s25', name: 'Samsung Galaxy S25', w: 360, h: 800, frame: true, shell: 'punch', brand: 'Samsung' }, + { id: 'galaxy-s25u', name: 'Samsung Galaxy S25 Ultra', w: 412, h: 915, frame: true, shell: 'punch', brand: 'Samsung' }, + { id: 'galaxy-s24u', name: 'Samsung Galaxy S24 Ultra', w: 412, h: 915, frame: true, shell: 'punch', brand: 'Samsung' }, + { id: 'galaxy-note20', name: 'Samsung Galaxy Note 20', w: 412, h: 915, frame: true, shell: 'punch', brand: 'Samsung' }, + { id: 'galaxy-a54', name: 'Samsung Galaxy A54', w: 360, h: 800, frame: true, shell: 'punch', brand: 'Samsung' }, // —— Google —— - { id: 'pixel-5', name: 'Pixel 5', w: 393, h: 851, frame: true, shell: 'punch', brand: 'Google' }, - { id: 'pixel-6', name: 'Pixel 6 / 7', w: 412, h: 915, frame: true, shell: 'punch', brand: 'Google' }, - { id: 'pixel-8', name: 'Pixel 8 / 8 Pro', w: 412, h: 915, frame: true, shell: 'punch', brand: 'Google' }, - // —— 小米 / Redmi —— - { id: 'mi-13', name: '小米 13 / 14', w: 393, h: 873, frame: true, shell: 'punch', brand: 'Xiaomi' }, - { id: 'mi-14-pro', name: '小米 14 Pro', w: 400, h: 882, frame: true, shell: 'punch', brand: 'Xiaomi' }, - { id: 'redmi-note12', name: 'Redmi Note 12 / 13', w: 360, h: 800, frame: true, shell: 'teardrop', brand: 'Xiaomi' }, - { id: 'redmi-k60', name: 'Redmi K60 / K70', w: 393, h: 873, frame: true, shell: 'punch', brand: 'Xiaomi' }, - // —— 华为 / 荣耀 —— - { id: 'huawei-mate60', name: 'Mate 60 Pro', w: 400, h: 880, frame: true, shell: 'punch', brand: 'Huawei' }, - { id: 'huawei-p60', name: 'P60 / nova', w: 360, h: 800, frame: true, shell: 'punch', brand: 'Huawei' }, - { id: 'honor-magic6', name: '荣耀 Magic6', w: 360, h: 800, frame: true, shell: 'punch', brand: 'Honor' }, - // —— OPPO / 一加 / realme —— - { id: 'oppo-find', name: 'Find X6 / X7', w: 360, h: 800, frame: true, shell: 'punch', brand: 'OPPO' }, - { id: 'oppo-reno', name: 'Reno 11', w: 360, h: 800, frame: true, shell: 'punch', brand: 'OPPO' }, - { id: 'oneplus-12', name: '一加 12', w: 450, h: 1000, frame: true, shell: 'punch', brand: 'OnePlus' }, - // —— vivo / iQOO —— - { id: 'vivo-x100', name: 'vivo X100', w: 412, h: 915, frame: true, shell: 'punch', brand: 'vivo' }, - { id: 'iqoo-12', name: 'iQOO 12', w: 393, h: 873, frame: true, shell: 'punch', brand: 'iQOO' }, + { id: 'pixel-5', name: 'Google Pixel 5', w: 393, h: 851, frame: true, shell: 'punch', brand: 'Google' }, + { id: 'pixel-6', name: 'Google Pixel 6 / 7', w: 412, h: 915, frame: true, shell: 'punch', brand: 'Google' }, + { id: 'pixel-8', name: 'Google Pixel 8 / 8 Pro', w: 412, h: 915, frame: true, shell: 'punch', brand: 'Google' }, + { id: 'pixel-9', name: 'Google Pixel 9 / 9 Pro', w: 412, h: 915, frame: true, shell: 'punch', brand: 'Google' }, + // —— Xiaomi / Redmi —— + { id: 'mi-13', name: 'Xiaomi 小米 13 / 14', w: 393, h: 873, frame: true, shell: 'punch', brand: 'Xiaomi' }, + { id: 'mi-14-pro', name: 'Xiaomi 小米 14 Pro', w: 400, h: 882, frame: true, shell: 'punch', brand: 'Xiaomi' }, + { id: 'mi-15', name: 'Xiaomi 小米 15 / 15 Pro', w: 393, h: 873, frame: true, shell: 'punch', brand: 'Xiaomi' }, + { id: 'redmi-note12', name: 'Xiaomi Redmi Note 12 / 13', w: 360, h: 800, frame: true, shell: 'teardrop', brand: 'Xiaomi' }, + { id: 'redmi-k60', name: 'Xiaomi Redmi K60 / K70', w: 393, h: 873, frame: true, shell: 'punch', brand: 'Xiaomi' }, + { id: 'redmi-k80', name: 'Xiaomi Redmi K80', w: 393, h: 873, frame: true, shell: 'punch', brand: 'Xiaomi' }, + // —— Huawei / Honor —— + { id: 'huawei-mate60', name: 'Huawei Mate 60 Pro', w: 400, h: 880, frame: true, shell: 'punch', brand: 'Huawei' }, + { id: 'huawei-p60', name: 'Huawei P60 / nova', w: 360, h: 800, frame: true, shell: 'punch', brand: 'Huawei' }, + { id: 'huawei-pura70', name: 'Huawei Pura 70', w: 400, h: 880, frame: true, shell: 'punch', brand: 'Huawei' }, + { id: 'honor-magic6', name: 'Honor 荣耀 Magic6', w: 360, h: 800, frame: true, shell: 'punch', brand: 'Honor' }, + { id: 'honor-magic7', name: 'Honor 荣耀 Magic7', w: 393, h: 873, frame: true, shell: 'punch', brand: 'Honor' }, + // —— OPPO / OnePlus / vivo / iQOO —— + { id: 'oppo-find', name: 'OPPO Find X6 / X7', w: 360, h: 800, frame: true, shell: 'punch', brand: 'OPPO' }, + { id: 'oppo-find-x8', name: 'OPPO Find X8', w: 412, h: 915, frame: true, shell: 'punch', brand: 'OPPO' }, + { id: 'oppo-reno', name: 'OPPO Reno 11 / 12', w: 360, h: 800, frame: true, shell: 'punch', brand: 'OPPO' }, + { id: 'oneplus-12', name: 'OnePlus 一加 12', w: 450, h: 1000, frame: true, shell: 'punch', brand: 'OnePlus' }, + { id: 'oneplus-13', name: 'OnePlus 一加 13', w: 450, h: 1000, frame: true, shell: 'punch', brand: 'OnePlus' }, + { id: 'vivo-x100', name: 'vivo X100 / X200', w: 412, h: 915, frame: true, shell: 'punch', brand: 'vivo' }, + { id: 'iqoo-12', name: 'iQOO 12 / 13', w: 393, h: 873, frame: true, shell: 'punch', brand: 'iQOO' }, + // —— 折叠屏 · Samsung —— + { id: 'zfold2-in', name: 'Samsung Galaxy Z Fold 2 内屏', w: 2208, h: 1768, frame: true, shell: 'tabletCam', brand: 'Samsung 折叠' }, + { id: 'zfold3-in', name: 'Samsung Galaxy Z Fold 3 内屏', w: 2208, h: 1768, frame: true, shell: 'tabletCam', brand: 'Samsung 折叠' }, + { id: 'zfold4-in', name: 'Samsung Galaxy Z Fold 4 内屏', w: 2176, h: 1812, frame: true, shell: 'tabletCam', brand: 'Samsung 折叠' }, + { id: 'zfold5-in', name: 'Samsung Galaxy Z Fold 5 内屏', w: 2176, h: 1812, frame: true, shell: 'tabletCam', brand: 'Samsung 折叠' }, + { id: 'zfold6-in', name: 'Samsung Galaxy Z Fold 6 内屏', w: 2160, h: 1856, frame: true, shell: 'tabletCam', brand: 'Samsung 折叠' }, + { id: 'zfold7-in', name: 'Samsung Galaxy Z Fold 7 内屏', w: 2184, h: 1968, frame: true, shell: 'tabletCam', brand: 'Samsung 折叠' }, + { id: 'zfold8-in', name: 'Samsung Galaxy Z Fold 8 内屏', w: 2184, h: 1968, frame: true, shell: 'tabletCam', brand: 'Samsung 折叠' }, + { id: 'zfold3-out', name: 'Samsung Galaxy Z Fold 3 外屏', w: 2260, h: 832, frame: true, shell: 'punch', brand: 'Samsung 折叠' }, + { id: 'zfold5-out', name: 'Samsung Galaxy Z Fold 5 外屏', w: 2316, h: 904, frame: true, shell: 'punch', brand: 'Samsung 折叠' }, + { id: 'zfold7-out', name: 'Samsung Galaxy Z Fold 7 外屏', w: 2376, h: 968, frame: true, shell: 'punch', brand: 'Samsung 折叠' }, + { id: 'zflip3-in', name: 'Samsung Galaxy Z Flip 3 内屏', w: 2640, h: 1080, frame: true, shell: 'punch', brand: 'Samsung 折叠' }, + { id: 'zflip5-in', name: 'Samsung Galaxy Z Flip 5 内屏', w: 2640, h: 1080, frame: true, shell: 'punch', brand: 'Samsung 折叠' }, + { id: 'zflip6-in', name: 'Samsung Galaxy Z Flip 6 内屏', w: 2640, h: 1080, frame: true, shell: 'punch', brand: 'Samsung 折叠' }, + { id: 'zflip7-in', name: 'Samsung Galaxy Z Flip 7 内屏', w: 2640, h: 1080, frame: true, shell: 'punch', brand: 'Samsung 折叠' }, + // —— 折叠屏 · Huawei —— + { id: 'mate-x2', name: 'Huawei Mate X2 内屏', w: 2480, h: 2200, frame: true, shell: 'tabletCam', brand: 'Huawei 折叠' }, + { id: 'mate-x3', name: 'Huawei Mate X3 / X5 内屏', w: 2496, h: 2224, frame: true, shell: 'tabletCam', brand: 'Huawei 折叠' }, + { id: 'mate-x6', name: 'Huawei Mate X6 内屏', w: 2440, h: 2240, frame: true, shell: 'tabletCam', brand: 'Huawei 折叠' }, + { id: 'mate-x7', name: 'Huawei Mate X7 / XT 内屏', w: 2440, h: 2240, frame: true, shell: 'tabletCam', brand: 'Huawei 折叠' }, + { id: 'mate-x3-out', name: 'Huawei Mate X3 外屏', w: 2504, h: 1080, frame: true, shell: 'punch', brand: 'Huawei 折叠' }, + { id: 'mate-x6-out', name: 'Huawei Mate X6 外屏', w: 2520, h: 1080, frame: true, shell: 'punch', brand: 'Huawei 折叠' }, + { id: 'pocket2', name: 'Huawei Pocket 2 内屏', w: 2700, h: 1188, frame: true, shell: 'teardrop', brand: 'Huawei 折叠' }, + { id: 'pocket3', name: 'Huawei Pocket 3 内屏', w: 2700, h: 1188, frame: true, shell: 'teardrop', brand: 'Huawei 折叠' }, + // —— 折叠屏 · Xiaomi —— + { id: 'mix-fold2', name: 'Xiaomi MIX Fold 2 内屏', w: 2160, h: 1914, frame: true, shell: 'tabletCam', brand: 'Xiaomi 折叠' }, + { id: 'mix-fold3', name: 'Xiaomi MIX Fold 3 内屏', w: 2160, h: 1916, frame: true, shell: 'tabletCam', brand: 'Xiaomi 折叠' }, + { id: 'mix-fold4', name: 'Xiaomi MIX Fold 4 内屏', w: 2488, h: 2224, frame: true, shell: 'tabletCam', brand: 'Xiaomi 折叠' }, + { id: 'mix-fold5', name: 'Xiaomi MIX Fold 5 内屏', w: 2488, h: 2224, frame: true, shell: 'tabletCam', brand: 'Xiaomi 折叠' }, + { id: 'mix-flip', name: 'Xiaomi MIX Flip / Flip 2 内屏', w: 2912, h: 1388, frame: true, shell: 'punch', brand: 'Xiaomi 折叠' }, + // —— 折叠屏 · OPPO / OnePlus —— + { id: 'find-n', name: 'OPPO Find N / N2 内屏', w: 1920, h: 1792, frame: true, shell: 'tabletCam', brand: 'OPPO 折叠' }, + { id: 'find-n3', name: 'OPPO Find N3 内屏', w: 2344, h: 2156, frame: true, shell: 'tabletCam', brand: 'OPPO 折叠' }, + { id: 'find-n5', name: 'OPPO Find N5 内屏', w: 2248, h: 2480, frame: true, shell: 'tabletCam', brand: 'OPPO 折叠' }, + { id: 'find-n6', name: 'OPPO Find N6 内屏', w: 2248, h: 2480, frame: true, shell: 'tabletCam', brand: 'OPPO 折叠' }, + { id: 'oneplus-open', name: 'OnePlus Open / Open 2 内屏', w: 2344, h: 2156, frame: true, shell: 'tabletCam', brand: 'OnePlus 折叠' }, + // —— 折叠屏 · vivo —— + { id: 'xfold', name: 'vivo X Fold 内屏', w: 2160, h: 1916, frame: true, shell: 'tabletCam', brand: 'vivo 折叠' }, + { id: 'xfold3', name: 'vivo X Fold3 内屏', w: 2480, h: 2200, frame: true, shell: 'tabletCam', brand: 'vivo 折叠' }, + { id: 'xfold5', name: 'vivo X Fold5 内屏', w: 2480, h: 2200, frame: true, shell: 'tabletCam', brand: 'vivo 折叠' }, + { id: 'xfold-n5', name: 'vivo X Fold N5 内屏', w: 2248, h: 2480, frame: true, shell: 'tabletCam', brand: 'vivo 折叠' }, + { id: 'xflip', name: 'vivo X Flip 内屏', w: 2520, h: 1080, frame: true, shell: 'punch', brand: 'vivo 折叠' }, + // —— 折叠屏 · Honor / Google —— + { id: 'magic-v', name: 'Honor Magic V 内屏', w: 2272, h: 1984, frame: true, shell: 'tabletCam', brand: 'Honor 折叠' }, + { id: 'magic-v3', name: 'Honor Magic V3 内屏', w: 2344, h: 2156, frame: true, shell: 'tabletCam', brand: 'Honor 折叠' }, + { id: 'magic-v4', name: 'Honor Magic V4 内屏', w: 2344, h: 2156, frame: true, shell: 'tabletCam', brand: 'Honor 折叠' }, + { id: 'magic-v-flip', name: 'Honor Magic V Flip 内屏', w: 2320, h: 1080, frame: true, shell: 'punch', brand: 'Honor 折叠' }, + { id: 'pixel-fold', name: 'Google Pixel Fold 内屏', w: 2208, h: 1840, frame: true, shell: 'tabletCam', brand: 'Google 折叠' }, + { id: 'pixel-9-fold', name: 'Google Pixel 9 Pro Fold 内屏', w: 2076, h: 2152, frame: true, shell: 'tabletCam', brand: 'Google 折叠' }, + { id: 'pixel-10-fold', name: 'Google Pixel 10 Pro Fold 内屏', w: 2076, h: 2152, frame: true, shell: 'tabletCam', brand: 'Google 折叠' }, // —— 其它常见分辨率 —— - { id: 'android-360', name: 'Android 360×800', w: 360, h: 800, frame: true, shell: 'punch', brand: '通用' }, - { id: 'android-412', name: 'Android 412×915', w: 412, h: 915, frame: true, shell: 'punch', brand: '通用' }, - { id: 'android-720', name: '720×1280', w: 720, h: 1280, frame: true, shell: 'flat', brand: '通用' }, - { id: 'android-1080', name: '1080×1920', w: 1080, h: 1920, frame: true, shell: 'flat', brand: '通用' }, - { id: 'design', name: '设计分辨率', w: 750, h: 1600, frame: true, shell: 'island', brand: '通用' }, + { id: 'android-360', name: '通用 Android 360×800', w: 360, h: 800, frame: true, shell: 'punch', brand: '通用' }, + { id: 'android-412', name: '通用 Android 412×915', w: 412, h: 915, frame: true, shell: 'punch', brand: '通用' }, + { id: 'android-720', name: '通用 720×1280', w: 720, h: 1280, frame: true, shell: 'flat', brand: '通用' }, + { id: 'android-1080', name: '通用 1080×1920', w: 1080, h: 1920, frame: true, shell: 'flat', brand: '通用' }, + { id: 'design', name: '通用 设计分辨率', w: 750, h: 1600, frame: true, shell: 'island', brand: '通用' }, ]; /**