difenduandada
2024-12-31 34abe6963b344c882358274957f4b992456fee40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/common/downloadmanager.js';
                    var __require = nodeEnv ? function (request) {
                        return cc.require(request);
                    } : function (request) {
                        return __quick_compile_project__.require(request, __filename);
                    };
                    function __define (exports, require, module) {
                        if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
cc._RF.push(module, '36187xGjVFOz6dZMgh6XWg8', 'downloadmanager');
// Scripts/common/downloadmanager.js
 
"use strict";
 
window.DownloadManager = cc.Class({
  ctor: function ctor() {
    this._spinesCache = [];
  },
  checkAnimaCache: function checkAnimaCache() {
    return;
    cc.sys.localStorage.removeItem("sszg_anima_cache_1");
    var cache_info = cc.sys.localStorage.getItem("sszg_anima_cache_1");
 
    if (cache_info) {
      cache_info = JSON.parse(cache_info);
 
      if (cache_info.status != "finish") {
        var finish_num = parseInt(cache_info.status);
 
        if (typeof finish_num == "number" && finish_num > 0 && finish_num < CacheAnimas.length) {
          for (var anima_i = finish_num + 1; anima_i < CacheAnimas.length - 1; anima_i++) {
            this.downloadSpine(CacheAnimas[anima_i], anima_i);
          }
        }
      }
    } else {
      for (var anima_i in CacheAnimas) {
        this.downloadSpine(CacheAnimas[anima_i], anima_i);
      }
    }
  },
  downloadSpine: function downloadSpine(spine_id, index) {
    var spine_info = {
      spine_id: spine_id,
      index: index
    };
 
    this._spinesCache.push(spine_info);
 
    if (this._spinesCache.length > 0 && !this._downTimer) {
      this._downTimer = gcore.Timer.set(this.preDownLoad.bind(this), 500, -1);
    }
  },
  preDownLoad: function preDownLoad() {
    var load_status = cc.loader.getDownLoadStatus();
 
    if (!load_status) {
      // 主队列没有下载任务
      var spine_info = this._spinesCache.shift();
 
      if (spine_info.index) {
        var status = spine_info.index;
 
        if (spine_info.index >= CacheAnimas.length - 1) {
          status = "finish";
        }
 
        cc.sys.localStorage.setItem("sszg_anima_cache_1", JSON.stringify({
          status: status
        }));
      }
 
      this.doDownloadSpine(spine_info.spine_id);
 
      if (this._spinesCache.length <= 0 && this._downTimer) {
        gcore.Timer.del(this._downTimer);
        this._downTimer = null;
      }
    }
  },
  doDownloadSpine: function doDownloadSpine(spine_id) {
    if (!spine_id) return;
    var spine_path = "spine/" + spine_id + "/"; // spien文件
 
    var spine_uuids = cc.loader.getDirUuids(spine_path, sp.SkeletonData);
    cc.log(spine_uuids); // for (var spine_i in spine_uuids) {
    //     var spine_url = cc.loader.getUrlWithUuid(spine_uuids[spine_i]);
    //     this.downloadText(spine_url);
    // }
    // // 图片和纹理
    // var img_uuids = cc.loader.getDirUuids(spine_path, cc.Texture2D);
    // for (var img_i in img_uuids) {
    //     var texture_url = cc.loader.getUrlWithUuid(img_uuids[img_i]);
    //     var img_url = texture_url.replace(".json", ".png");
    //     this.downloadText(texture_url);
    //     this.downloadImage(img_url); 
    // }
  },
  downloadText: function downloadText(url, callback) {
    var xhr = cc.loader.getXMLHttpRequest(),
        // var xhr = new ActiveXObject("MSXML2.XMLHTTP");
    errInfo = 'Load text file failed: ' + url;
    xhr.open('GET', url, true);
    if (xhr.overrideMimeType) xhr.overrideMimeType('text\/plain; charset=utf-8');
 
    xhr.onload = function () {
      if (xhr.readyState === 4) {
        if (xhr.status === 200 || xhr.status === 0) {
          callback && callback(null, xhr.responseText);
        } else {
          callback && callback({
            status: xhr.status,
            errorMessage: errInfo + '(wrong status)'
          });
        }
      } else {
        callback && callback({
          status: xhr.status,
          errorMessage: errInfo + '(wrong readyState)'
        });
      }
    };
 
    xhr.onerror = function () {
      callback && callback({
        status: xhr.status,
        errorMessage: errInfo + '(error)'
      });
    };
 
    xhr.ontimeout = function () {
      callback && callback({
        status: xhr.status,
        errorMessage: errInfo + '(time out)'
      });
    };
 
    xhr.send(null);
  },
  downloadImage: function downloadImage(url, callback, isCrossOrigin) {
    if (!url) return;
    if (isCrossOrigin === undefined) isCrossOrigin = true;
    var img = new Image();
 
    if (isCrossOrigin && window.location.protocol !== 'file:') {
      img.crossOrigin = 'anonymous';
    } else {
      img.crossOrigin = null;
    }
 
    if (img.complete && img.naturalWidth > 0 && img.src === url) {
      return img;
    } else {
      var loadCallback = function loadCallback() {
        img.removeEventListener('load', loadCallback);
        img.removeEventListener('error', errorCallback);
      };
 
      var errorCallback = function errorCallback() {
        img.removeEventListener('load', loadCallback);
        img.removeEventListener('error', errorCallback);
      };
 
      img.addEventListener('load', loadCallback);
      img.addEventListener('error', errorCallback);
      img.src = url;
    }
  }
});
 
DownloadManager.getInstance = function () {
  if (!DownloadManager.instance) {
    DownloadManager.instance = new DownloadManager();
  }
 
  return DownloadManager.instance;
};
 
module.exports = DownloadManager;
 
cc._RF.pop();
                    }
                    if (nodeEnv) {
                        __define(__module.exports, __require, __module);
                    }
                    else {
                        __quick_compile_project__.registerModuleFunc(__filename, function () {
                            __define(__module.exports, __require, __module);
                        });
                    }
                })();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcY29tbW9uXFxkb3dubG9hZG1hbmFnZXIuanMiXSwibmFtZXMiOlsid2luZG93IiwiRG93bmxvYWRNYW5hZ2VyIiwiY2MiLCJDbGFzcyIsImN0b3IiLCJfc3BpbmVzQ2FjaGUiLCJjaGVja0FuaW1hQ2FjaGUiLCJzeXMiLCJsb2NhbFN0b3JhZ2UiLCJyZW1vdmVJdGVtIiwiY2FjaGVfaW5mbyIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJzdGF0dXMiLCJmaW5pc2hfbnVtIiwicGFyc2VJbnQiLCJDYWNoZUFuaW1hcyIsImxlbmd0aCIsImFuaW1hX2kiLCJkb3dubG9hZFNwaW5lIiwic3BpbmVfaWQiLCJpbmRleCIsInNwaW5lX2luZm8iLCJwdXNoIiwiX2Rvd25UaW1lciIsImdjb3JlIiwiVGltZXIiLCJzZXQiLCJwcmVEb3duTG9hZCIsImJpbmQiLCJsb2FkX3N0YXR1cyIsImxvYWRlciIsImdldERvd25Mb2FkU3RhdHVzIiwic2hpZnQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiZG9Eb3dubG9hZFNwaW5lIiwiZGVsIiwic3BpbmVfcGF0aCIsInNwaW5lX3V1aWRzIiwiZ2V0RGlyVXVpZHMiLCJzcCIsIlNrZWxldG9uRGF0YSIsImxvZyIsImRvd25sb2FkVGV4dCIsInVybCIsImNhbGxiYWNrIiwieGhyIiwiZ2V0WE1MSHR0cFJlcXVlc3QiLCJlcnJJbmZvIiwib3BlbiIsIm92ZXJyaWRlTWltZVR5cGUiLCJvbmxvYWQiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VUZXh0IiwiZXJyb3JNZXNzYWdlIiwib25lcnJvciIsIm9udGltZW91dCIsInNlbmQiLCJkb3dubG9hZEltYWdlIiwiaXNDcm9zc09yaWdpbiIsInVuZGVmaW5lZCIsImltZyIsIkltYWdlIiwibG9jYXRpb24iLCJwcm90b2NvbCIsImNyb3NzT3JpZ2luIiwiY29tcGxldGUiLCJuYXR1cmFsV2lkdGgiLCJzcmMiLCJsb2FkQ2FsbGJhY2siLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZXJyb3JDYWxsYmFjayIsImFkZEV2ZW50TGlzdGVuZXIiLCJnZXRJbnN0YW5jZSIsImluc3RhbmNlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQUEsTUFBTSxDQUFDQyxlQUFQLEdBQXlCQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUNqQ0MsRUFBQUEsSUFBSSxFQUFFLGdCQUFXO0FBQ1YsU0FBS0MsWUFBTCxHQUFvQixFQUFwQjtBQUNOLEdBSGdDO0FBSzlCQyxFQUFBQSxlQUFlLEVBQUUsMkJBQVc7QUFDeEI7QUFDQUosSUFBQUEsRUFBRSxDQUFDSyxHQUFILENBQU9DLFlBQVAsQ0FBb0JDLFVBQXBCLENBQStCLG9CQUEvQjtBQUNBLFFBQUlDLFVBQVUsR0FBR1IsRUFBRSxDQUFDSyxHQUFILENBQU9DLFlBQVAsQ0FBb0JHLE9BQXBCLENBQTRCLG9CQUE1QixDQUFqQjs7QUFDQSxRQUFJRCxVQUFKLEVBQWdCO0FBQ1pBLE1BQUFBLFVBQVUsR0FBR0UsSUFBSSxDQUFDQyxLQUFMLENBQVdILFVBQVgsQ0FBYjs7QUFDQSxVQUFJQSxVQUFVLENBQUNJLE1BQVgsSUFBcUIsUUFBekIsRUFBbUM7QUFDL0IsWUFBSUMsVUFBVSxHQUFHQyxRQUFRLENBQUNOLFVBQVUsQ0FBQ0ksTUFBWixDQUF6Qjs7QUFDQSxZQUFJLE9BQU9DLFVBQVAsSUFBcUIsUUFBckIsSUFBaUNBLFVBQVUsR0FBRyxDQUE5QyxJQUFtREEsVUFBVSxHQUFHRSxXQUFXLENBQUNDLE1BQWhGLEVBQXdGO0FBQ3BGLGVBQUssSUFBSUMsT0FBTyxHQUFHSixVQUFVLEdBQUcsQ0FBaEMsRUFBbUNJLE9BQU8sR0FBR0YsV0FBVyxDQUFDQyxNQUFaLEdBQXFCLENBQWxFLEVBQXFFQyxPQUFPLEVBQTVFLEVBQWlGO0FBQzdFLGlCQUFLQyxhQUFMLENBQW1CSCxXQUFXLENBQUNFLE9BQUQsQ0FBOUIsRUFBeUNBLE9BQXpDO0FBQ0g7QUFDSjtBQUNKO0FBQ0osS0FWRCxNQVVP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QXdCLE9BQXhCLEVBQWlDQyxhQUFqQztBQUNILE9BSEQ7O0FBSUFWLE1BQUFBLEdBQUcsQ0FBQ1csZ0JBQUosQ0FBcUIsTUFBckIsRUFBNkJILFlBQTdCO0FBQ0FSLE1BQUFBLEdBQUcsQ0FBQ1csZ0JBQUosQ0FBcUIsT0FBckIsRUFBOEJELGFBQTlCO0FBQ0FWLE1BQUFBLEdBQUcsQ0FBQ08sR0FBSixHQUFVeEIsR0FBVjtBQUNIO0FBQ0o7QUF2STZCLENBQVQsQ0FBekI7O0FBNElBN0MsZUFBZSxDQUFDMEUsV0FBaEIsR0FBOEIsWUFBWTtBQUN0QyxNQUFJLENBQUMxRSxlQUFlLENBQUMyRSxRQUFyQixFQUErQjtBQUMzQjNFLElBQUFBLGVBQWUsQ0FBQzJFLFFBQWhCLEdBQTJCLElBQUkzRSxlQUFKLEVBQTNCO0FBQ0g7O0FBQ0QsU0FBT0EsZUFBZSxDQUFDMkUsUUFBdkI7QUFDSCxDQUxEOztBQU9BQyxNQUFNLENBQUNDLE9BQVAsR0FBaUI3RSxlQUFqQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsid2luZG93LkRvd25sb2FkTWFuYWdlciA9IGNjLkNsYXNzKHtcclxuXHRjdG9yOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLl9zcGluZXNDYWNoZSA9IFtdO1xyXG5cdH0sXHJcblxyXG4gICAgY2hlY2tBbmltYUNhY2hlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgICBjYy5zeXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJzc3pnX2FuaW1hX2NhY2hlXzFcIik7XHJcbiAgICAgICAgdmFyIGNhY2hlX2luZm8gPSBjYy5zeXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJzc3pnX2FuaW1hX2NhY2hlXzFcIik7XHJcbiAgICAgICAgaWYgKGNhY2hlX2luZm8pIHsgXHJcbiAgICAgICAgICAgIGNhY2hlX2luZm8gPSBKU09OLnBhcnNlKGNhY2hlX2luZm8pO1xyXG4gICAgICAgICAgICBpZiAoY2FjaGVfaW5mby5zdGF0dXMgIT0gXCJmaW5pc2hcIikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpbmlzaF9udW0gPSBwYXJzZUludChjYWNoZV9pbmZvLnN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZpbmlzaF9udW0gPT0gXCJudW1iZXJcIiAmJiBmaW5pc2hfbnVtID4gMCAmJiBmaW5pc2hfbnVtIDwgQ2FjaGVBbmltYXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYW5pbWFfaSA9IGZpbmlzaF9udW0gKyAxOyBhbmltYV9pIDwgQ2FjaGVBbmltYXMubGVuZ3RoIC0gMTsgYW5pbWFfaSArKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkU3BpbmUoQ2FjaGVBbmltYXNbYW5pbWFfaV0sIGFuaW1hX2kpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGFuaW1hX2kgaW4gQ2FjaGVBbmltYXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRTcGluZShDYWNoZUFuaW1hc1thbmltYV9pXSwgYW5pbWFfaSk7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGRvd25sb2FkU3BpbmU6IGZ1bmN0aW9uKHNwaW5lX2lkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBzcGluZV9pbmZvID0ge3NwaW5lX2lkOiBzcGluZV9pZCwgaW5kZXg6IGluZGV4fTtcclxuICAgICAgICB0aGlzLl9zcGluZXNDYWNoZS5wdXNoKHNwaW5lX2luZm8pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fc3BpbmVzQ2FjaGUubGVuZ3RoID4gMCAmJiAhdGhpcy5fZG93blRpbWVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Rvd25UaW1lciA9IGdjb3JlLlRpbWVyLnNldCh0aGlzLnByZURvd25Mb2FkLmJpbmQodGhpcyksIDUwMCwgLTEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcHJlRG93bkxvYWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBsb2FkX3N0YXR1cyA9IGNjLmxvYWRlci5nZXREb3duTG9hZFN0YXR1cygpO1xyXG4gICAgICAgIGlmICghbG9hZF9zdGF0dXMpIHsgICAgICAgIC8vIOS4u+mYn+WIl+ayoeacieS4i+i9veS7u+WKoVxyXG4gICAgICAgICAgICB2YXIgc3BpbmVfaW5mbyA9IHRoaXMuX3NwaW5lc0NhY2hlLnNoaWZ0KCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc3BpbmVfaW5mby5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHNwaW5lX2luZm8uaW5kZXg7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3BpbmVfaW5mby5pbmRleCA+PSBDYWNoZUFuaW1hcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gXCJmaW5pc2hcIlxyXG4gICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgIGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInNzemdfYW5pbWFfY2FjaGVfMVwiLCBKU09OLnN0cmluZ2lmeSh7c3RhdHVzOiBzdGF0dXN9KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kb0Rvd25sb2FkU3BpbmUoc3BpbmVfaW5mby5zcGluZV9pZCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3BpbmVzQ2FjaGUubGVuZ3RoIDw9IDAgJiYgdGhpcy5fZG93blRpbWVyKSB7XHJcbiAgICAgICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy5fZG93blRpbWVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Rvd25UaW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGRvRG93bmxvYWRTcGluZTogZnVuY3Rpb24oc3BpbmVfaWQpIHtcclxuICAgICAgICBpZiAoIXNwaW5lX2lkKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuXHJcbiAgICAgICAgdmFyIHNwaW5lX3BhdGggPSBcInNwaW5lL1wiICsgc3BpbmVfaWQgKyBcIi9cIjtcclxuICAgICAgICAvLyBzcGllbuaWh+S7tlxyXG4gICAgICAgIHZhciBzcGluZV91dWlkcyA9IGNjLmxvYWRlci5nZXREaXJVdWlkcyhzcGluZV9wYXRoLCBzcC5Ta2VsZXRvbkRhdGEpO1xyXG5cclxuICAgICAgICBjYy5sb2coc3BpbmVfdXVpZHMpO1xyXG5cclxuICAgICAgICAvLyBmb3IgKHZhciBzcGluZV9pIGluIHNwaW5lX3V1aWRzKSB7XHJcbiAgICAgICAgLy8gICAgIHZhciBzcGluZV91cmwgPSBjYy5sb2FkZXIuZ2V0VXJsV2l0aFV1aWQoc3BpbmVfdXVpZHNbc3BpbmVfaV0pO1xyXG5cclxuICAgICAgICAvLyAgICAgdGhpcy5kb3dubG9hZFRleHQoc3BpbmVfdXJsKTtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIC8vIC8vIOWbvueJh+WSjOe6ueeQhlxyXG4gICAgICAgIC8vIHZhciBpbWdfdXVpZHMgPSBjYy5sb2FkZXIuZ2V0RGlyVXVpZHMoc3BpbmVfcGF0aCwgY2MuVGV4dHVyZTJEKTtcclxuICAgICAgICAvLyBmb3IgKHZhciBpbWdfaSBpbiBpbWdfdXVpZHMpIHtcclxuICAgICAgICAvLyAgICAgdmFyIHRleHR1cmVfdXJsID0gY2MubG9hZGVyLmdldFVybFdpdGhVdWlkKGltZ191dWlkc1tpbWdfaV0pO1xyXG4gICAgICAgIC8vICAgICB2YXIgaW1nX3VybCA9IHRleHR1cmVfdXJsLnJlcGxhY2UoXCIuanNvblwiLCBcIi5wbmdcIik7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuZG93bmxvYWRUZXh0KHRleHR1cmVfdXJsKTtcclxuICAgICAgICAvLyAgICAgdGhpcy5kb3dubG9hZEltYWdlKGltZ191cmwpOyBcclxuICAgICAgICAvLyB9XHJcbiAgICB9LFxyXG5cclxuICAgIGRvd25sb2FkVGV4dDogZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgeGhyID0gY2MubG9hZGVyLmdldFhNTEh0dHBSZXF1ZXN0KCksXHJcbiAgICAgICAgLy8gdmFyIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KFwiTVNYTUwyLlhNTEhUVFBcIik7XHJcbiAgICAgICAgZXJySW5mbyA9ICdMb2FkIHRleHQgZmlsZSBmYWlsZWQ6ICcgKyB1cmw7XHJcbiAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XHJcbiAgICAgICAgaWYgKHhoci5vdmVycmlkZU1pbWVUeXBlKSB4aHIub3ZlcnJpZGVNaW1lVHlwZSgndGV4dFxcL3BsYWluOyBjaGFyc2V0PXV0Zi04Jyk7XHJcbiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwIHx8IHhoci5zdGF0dXMgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhudWxsLCB4aHIucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHtzdGF0dXM6eGhyLnN0YXR1cywgZXJyb3JNZXNzYWdlOmVyckluZm8gKyAnKHdyb25nIHN0YXR1cyknfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayh7c3RhdHVzOnhoci5zdGF0dXMsIGVycm9yTWVzc2FnZTplcnJJbmZvICsgJyh3cm9uZyByZWFkeVN0YXRlKSd9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayh7c3RhdHVzOnhoci5zdGF0dXMsIGVycm9yTWVzc2FnZTplcnJJbmZvICsgJyhlcnJvciknfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soe3N0YXR1czp4aHIuc3RhdHVzLCBlcnJvck1lc3NhZ2U6ZXJySW5mbyArICcodGltZSBvdXQpJ30pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRvd25sb2FkSW1hZ2U6IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2ssIGlzQ3Jvc3NPcmlnaW4pIHsgICAgIFxyXG4gICAgICAgIGlmICghdXJsKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzQ3Jvc3NPcmlnaW4gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgaXNDcm9zc09yaWdpbiA9IHRydWU7XHJcbiAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgIGlmIChpc0Nyb3NzT3JpZ2luICYmIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6Jykge1xyXG4gICAgICAgICAgICBpbWcuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuY3Jvc3NPcmlnaW4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW1nLmNvbXBsZXRlICYmIGltZy5uYXR1cmFsV2lkdGggPiAwICYmIGltZy5zcmMgPT09IHVybCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW1nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBsb2FkQ2FsbGJhY2sgPSBmdW5jdGlvbiBsb2FkQ2FsbGJhY2soKSB7XHJcbiAgICAgICAgICAgICAgICBpbWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIGxvYWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICBpbWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvckNhbGxiYWNrKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbiBlcnJvckNhbGxiYWNrKCkge1xyXG4gICAgICAgICAgICAgICAgaW1nLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBsb2FkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICAgICAgaW1nLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgbG9hZENhbGxiYWNrKTtcclxuICAgICAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGltZy5zcmMgPSB1cmw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcblxyXG59KVxyXG5cclxuRG93bmxvYWRNYW5hZ2VyLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFEb3dubG9hZE1hbmFnZXIuaW5zdGFuY2UpIHtcclxuICAgICAgICBEb3dubG9hZE1hbmFnZXIuaW5zdGFuY2UgPSBuZXcgRG93bmxvYWRNYW5hZ2VyKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRG93bmxvYWRNYW5hZ2VyLmluc3RhbmNlO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IERvd25sb2FkTWFuYWdlcjsiXX0=