WaterControl/temp/quick-scripts/dst/tiledmap-optimize-resource/Script/TmoTiledLayer.js
2024-07-10 18:35:07 +08:00

204 lines
26 KiB
JavaScript

(function() {
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
var __module = nodeEnv ? module : {exports:{}};
var __filename = 'preview-scripts/tiledmap-optimize-resource/Script/TmoTiledLayer.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, 'd60cfrGbXBLBbplLoT7TBn7', 'TmoTiledLayer');
// Script/TmoTiledLayer.js
"use strict";
exports.__esModule = true;
exports["default"] = void 0;
// Learn cc.Class:
// - https://docs.cocos.com/creator/manual/en/scripting/class.html
// Learn Attribute:
// - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
// - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
var _mat4_temp = cc.mat4();
var _vec2_temp = cc.v2();
var _vec2_temp2 = cc.v2();
var _default = cc.Class({
"extends": cc.TiledLayer,
// 此处修改 增加firstTmxLayer参数
_init: function _init(layerInfo, mapInfo, tilesets, textures, texGrids, tiledMap, firstTmxLayer) {
// 修改结束
this._cullingDirty = true;
this._layerInfo = layerInfo;
this._mapInfo = mapInfo; // 此处修改 保存firstTmxLayer参数
this._firstTmxLayer = firstTmxLayer;
this._tiledMap = tiledMap; // 修改结束
var size = layerInfo._layerSize; // layerInfo
this._layerName = layerInfo.name;
this._tiles = layerInfo._tiles;
this._properties = layerInfo.properties;
this._layerSize = size;
this._minGID = layerInfo._minGID;
this._maxGID = layerInfo._maxGID;
this._opacity = layerInfo._opacity;
this._renderOrder = mapInfo.renderOrder;
this._staggerAxis = mapInfo.getStaggerAxis();
this._staggerIndex = mapInfo.getStaggerIndex();
this._hexSideLength = mapInfo.getHexSideLength();
this._animations = mapInfo.getTileAnimations(); // tilesets
this._tilesets = tilesets; // textures
this._textures = textures; // grid texture
this._texGrids = texGrids; // mapInfo
this._layerOrientation = mapInfo.orientation;
this._mapTileSize = mapInfo.getTileSize();
var maptw = this._mapTileSize.width;
var mapth = this._mapTileSize.height;
var layerW = this._layerSize.width;
var layerH = this._layerSize.height;
if (this._layerOrientation === cc.TiledMap.Orientation.HEX) {
// handle hex map
var TiledMap = cc.TiledMap;
var StaggerAxis = TiledMap.StaggerAxis;
var StaggerIndex = TiledMap.StaggerIndex;
var width = 0,
height = 0;
this._odd_even = this._staggerIndex === StaggerIndex.STAGGERINDEX_ODD ? 1 : -1;
if (this._staggerAxis === StaggerAxis.STAGGERAXIS_X) {
this._diffX1 = (maptw - this._hexSideLength) / 2;
this._diffY1 = 0;
height = mapth * (layerH + 0.5);
width = (maptw + this._hexSideLength) * Math.floor(layerW / 2) + maptw * (layerW % 2);
} else {
this._diffX1 = 0;
this._diffY1 = (mapth - this._hexSideLength) / 2;
width = maptw * (layerW + 0.5);
height = (mapth + this._hexSideLength) * Math.floor(layerH / 2) + mapth * (layerH % 2);
}
this.node.setContentSize(width, height);
} else if (this._layerOrientation === cc.TiledMap.Orientation.ISO) {
var wh = layerW + layerH;
this.node.setContentSize(maptw * 0.5 * wh, mapth * 0.5 * wh);
} else {
this.node.setContentSize(layerW * maptw, layerH * mapth);
} // offset (after layer orientation is set);
this._offset = cc.v2(layerInfo.offset.x, -layerInfo.offset.y);
this._useAutomaticVertexZ = false;
this._vertexZvalue = 0;
this._syncAnchorPoint();
this._prepareToRender();
},
_updateCulling: function _updateCulling() {
if (CC_EDITOR) {
this.enableCulling(false);
} else if (this._enableCulling) {
// 此处修改 若不为首个layer 直接复用firstLayer的结果
// this._firstTmxLayer不为空时 表示当前layer不是首个layer
var firstTmxLayer = this._firstTmxLayer;
if (!!firstTmxLayer) {
this._cullingRect = firstTmxLayer._cullingRect;
this._cullingDirty = firstTmxLayer._cacheCullingDirty;
return;
} // 修改结束
this.node._updateWorldMatrix();
cc.Mat4.invert(_mat4_temp, this.node._worldMatrix);
var rect = cc.visibleRect;
var camera = cc.Camera.findCamera(this.node);
if (camera) {
_vec2_temp.x = 0;
_vec2_temp.y = 0;
_vec2_temp2.x = _vec2_temp.x + rect.width;
_vec2_temp2.y = _vec2_temp.y + rect.height;
camera.getScreenToWorldPoint(_vec2_temp, _vec2_temp);
camera.getScreenToWorldPoint(_vec2_temp2, _vec2_temp2);
cc.Vec2.transformMat4(_vec2_temp, _vec2_temp, _mat4_temp);
cc.Vec2.transformMat4(_vec2_temp2, _vec2_temp2, _mat4_temp);
this._updateViewPort(_vec2_temp.x, _vec2_temp.y, _vec2_temp2.x - _vec2_temp.x, _vec2_temp2.y - _vec2_temp.y); // 此处修改 若为首个layer 缓存_cullingDirty。
// _cullingDirty会在填充渲染数据后被改为false 所以需要缓存这里的结果
if (!firstTmxLayer) {
this._cacheCullingDirty = this._cullingDirty;
} // 修改结束
}
}
},
_traverseAllGrid: function _traverseAllGrid() {
var tiles = this._tiles;
var texGrids = this._texGrids;
var tilesetIndexArr = this._tilesetIndexArr;
var tilesetIndexToArrIndex = this._tilesetIndexToArrIndex = {};
var TiledMap = cc.TiledMap;
var TileFlag = TiledMap.TileFlag;
var FLIPPED_MASK = TileFlag.FLIPPED_MASK;
var singleTexture = this._tiledMap.isSingleTexture();
tilesetIndexArr.length = 0;
for (var i = 0; i < tiles.length; i++) {
var gid = tiles[i];
if (gid === 0) continue;
gid = (gid & FLIPPED_MASK) >>> 0;
var grid = texGrids[gid];
if (!grid) {
cc.error("CCTiledLayer:_traverseAllGrid grid is null, gid is:", gid);
continue;
}
var tilesetIdx = grid.texId;
if (tilesetIndexToArrIndex[tilesetIdx] !== undefined) continue;
tilesetIndexToArrIndex[tilesetIdx] = tilesetIndexArr.length;
tilesetIndexArr.push(tilesetIdx); // 此处修改 当只有一个图集时 可以直接停止遍历
if (singleTexture) {
break;
} // 修改结束
}
}
});
exports["default"] = _default;
module.exports = exports["default"];
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhY2thZ2VzXFxUaWxlZE1hcE9wdGltaXplclxccmVzb3VyY2VcXFNjcmlwdFxcVG1vVGlsZWRMYXllci5qcyJdLCJuYW1lcyI6WyJfbWF0NF90ZW1wIiwiY2MiLCJtYXQ0IiwiX3ZlYzJfdGVtcCIsInYyIiwiX3ZlYzJfdGVtcDIiLCJDbGFzcyIsIlRpbGVkTGF5ZXIiLCJfaW5pdCIsImxheWVySW5mbyIsIm1hcEluZm8iLCJ0aWxlc2V0cyIsInRleHR1cmVzIiwidGV4R3JpZHMiLCJ0aWxlZE1hcCIsImZpcnN0VG14TGF5ZXIiLCJfY3VsbGluZ0RpcnR5IiwiX2xheWVySW5mbyIsIl9tYXBJbmZvIiwiX2ZpcnN0VG14TGF5ZXIiLCJfdGlsZWRNYXAiLCJzaXplIiwiX2xheWVyU2l6ZSIsIl9sYXllck5hbWUiLCJuYW1lIiwiX3RpbGVzIiwiX3Byb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiX21pbkdJRCIsIl9tYXhHSUQiLCJfb3BhY2l0eSIsIl9yZW5kZXJPcmRlciIsInJlbmRlck9yZGVyIiwiX3N0YWdnZXJBeGlzIiwiZ2V0U3RhZ2dlckF4aXMiLCJfc3RhZ2dlckluZGV4IiwiZ2V0U3RhZ2dlckluZGV4IiwiX2hleFNpZGVMZW5ndGgiLCJnZXRIZXhTaWRlTGVuZ3RoIiwiX2FuaW1hdGlvbnMiLCJnZXRUaWxlQW5pbWF0aW9ucyIsIl90aWxlc2V0cyIsIl90ZXh0dXJlcyIsIl90ZXhHcmlkcyIsIl9sYXllck9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iLCJfbWFwVGlsZVNpemUiLCJnZXRUaWxlU2l6ZSIsIm1hcHR3Iiwid2lkdGgiLCJtYXB0aCIsImhlaWdodCIsImxheWVyVyIsImxheWVySCIsIlRpbGVkTWFwIiwiT3JpZW50YXRpb24iLCJIRVgiLCJTdGFnZ2VyQXhpcyIsIlN0YWdnZXJJbmRleCIsIl9vZGRfZXZlbiIsIlNUQUdHRVJJTkRFWF9PREQiLCJTVEFHR0VSQVhJU19YIiwiX2RpZmZYMSIsIl9kaWZmWTEiLCJNYXRoIiwiZmxvb3IiLCJub2RlIiwic2V0Q29udGVudFNpemUiLCJJU08iLCJ3aCIsIl9vZmZzZXQiLCJvZmZzZXQiLCJ4IiwieSIsIl91c2VBdXRvbWF0aWNWZXJ0ZXhaIiwiX3ZlcnRleFp2YWx1ZSIsIl9zeW5jQW5jaG9yUG9pbnQiLCJfcHJlcGFyZVRvUmVuZGVyIiwiX3VwZGF0ZUN1bGxpbmciLCJDQ19FRElUT1IiLCJlbmFibGVDdWxsaW5nIiwiX2VuYWJsZUN1bGxpbmciLCJfY3VsbGluZ1JlY3QiLCJfY2FjaGVDdWxsaW5nRGlydHkiLCJfdXBkYXRlV29ybGRNYXRyaXgiLCJNYXQ0IiwiaW52ZXJ0IiwiX3dvcmxkTWF0cml4IiwicmVjdCIsInZpc2libGVSZWN0IiwiY2FtZXJhIiwiQ2FtZXJhIiwiZmluZENhbWVyYSIsImdldFNjcmVlblRvV29ybGRQb2ludCIsIlZlYzIiLCJ0cmFuc2Zvcm1NYXQ0IiwiX3VwZGF0ZVZpZXdQb3J0IiwiX3RyYXZlcnNlQWxsR3JpZCIsInRpbGVzIiwidGlsZXNldEluZGV4QXJyIiwiX3RpbGVzZXRJbmRleEFyciIsInRpbGVzZXRJbmRleFRvQXJySW5kZXgiLCJfdGlsZXNldEluZGV4VG9BcnJJbmRleCIsIlRpbGVGbGFnIiwiRkxJUFBFRF9NQVNLIiwic2luZ2xlVGV4dHVyZSIsImlzU2luZ2xlVGV4dHVyZSIsImxlbmd0aCIsImkiLCJnaWQiLCJncmlkIiwiZXJyb3IiLCJ0aWxlc2V0SWR4IiwidGV4SWQiLCJ1bmRlZmluZWQiLCJwdXNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUlBLFVBQVUsR0FBR0MsRUFBRSxDQUFDQyxJQUFILEVBQWpCOztBQUNBLElBQUlDLFVBQVUsR0FBR0YsRUFBRSxDQUFDRyxFQUFILEVBQWpCOztBQUNBLElBQUlDLFdBQVcsR0FBR0osRUFBRSxDQUFDRyxFQUFILEVBQWxCOztlQUVlSCxFQUFFLENBQUNLLEtBQUgsQ0FBUztBQUNwQixhQUFTTCxFQUFFLENB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akQsUUFBUSxDQUFDaUQsUUFBMUI7QUFDQSxRQUFNQyxZQUFZLEdBQUdELFFBQVEsQ0FBQ0MsWUFBOUI7O0FBRUEsUUFBSUMsYUFBYSxHQUFHLEtBQUtyRixTQUFMLENBQWVzRixlQUFmLEVBQXBCOztBQUVBUCxJQUFBQSxlQUFlLENBQUNRLE1BQWhCLEdBQXlCLENBQXpCOztBQUNBLFNBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR1YsS0FBSyxDQUFDUyxNQUExQixFQUFrQ0MsQ0FBQyxFQUFuQyxFQUF1QztBQUNuQyxVQUFJQyxHQUFHLEdBQUdYLEtBQUssQ0FBQ1UsQ0FBRCxDQUFmO0FBQ0EsVUFBSUMsR0FBRyxLQUFLLENBQVosRUFBZTtBQUNmQSxNQUFBQSxHQUFHLEdBQUksQ0FBQ0EsR0FBRyxHQUFHTCxZQUFQLE1BQXlCLENBQWhDO0FBQ0EsVUFBSU0sSUFBSSxHQUFHakcsUUFBUSxDQUFDZ0csR0FBRCxDQUFuQjs7QUFDQSxVQUFJLENBQUNDLElBQUwsRUFBVztBQUNQN0csUUFBQUEsRUFBRSxDQUFDOEcsS0FBSCxDQUFTLHFEQUFULEVBQWdFRixHQUFoRTtBQUNBO0FBQ0g7O0FBQ0QsVUFBSUcsVUFBVSxHQUFHRixJQUFJLENBQUNHLEtBQXRCO0FBQ0EsVUFBSVosc0JBQXNCLENBQUNXLFVBQUQsQ0FBdEIsS0FBdUNFLFNBQTNDLEVBQXNEO0FBQ3REYixNQUFBQSxzQkFBc0IsQ0FBQ1csVUFBRCxDQUF0QixHQUFxQ2IsZUFBZSxDQUFDUSxNQUFyRDtBQUNBUixNQUFBQSxlQUFlLENBQUNnQixJQUFoQixDQUFxQkgsVUFBckIsRUFabUMsQ0FjbkM7O0FBQ0EsVUFBSVAsYUFBSixFQUFtQjtBQUNmO0FBQ0gsT0FqQmtDLENBa0JuQzs7QUFDSDtBQUNKO0FBdkptQixDQUFUIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBMZWFybiBjYy5DbGFzczpcclxuLy8gIC0gaHR0cHM6Ly9kb2NzLmNvY29zLmNvbS9jcmVhdG9yL21hbnVhbC9lbi9zY3JpcHRpbmcvY2xhc3MuaHRtbFxyXG4vLyBMZWFybiBBdHRyaWJ1dGU6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL3JlZmVyZW5jZS9hdHRyaWJ1dGVzLmh0bWxcclxuLy8gTGVhcm4gbGlmZS1jeWNsZSBjYWxsYmFja3M6XHJcbi8vICAtIGh0dHBzOi8vZG9jcy5jb2Nvcy5jb20vY3JlYXRvci9tYW51YWwvZW4vc2NyaXB0aW5nL2xpZmUtY3ljbGUtY2FsbGJhY2tzLmh0bWxcclxuXHJcbmxldCBfbWF0NF90ZW1wID0gY2MubWF0NCgpO1xyXG5sZXQgX3ZlYzJfdGVtcCA9IGNjLnYyKCk7XHJcbmxldCBfdmVjMl90ZW1wMiA9IGNjLnYyKCk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjYy5DbGFzcyh7XHJcbiAgICBleHRlbmRzOiBjYy5UaWxlZExheWVyLFxyXG5cclxuICAgIC8vIOatpOWkhOS/ruaUuSDlop7liqBmaXJzdFRteExheWVy5Y+C5pWwXHJcbiAgICBfaW5pdChsYXllckluZm8sIG1hcEluZm8sIHRpbGVzZXRzLCB0ZXh0dXJlcywgdGV4R3JpZHMsIHRpbGVkTWFwLCBmaXJzdFRteExheWVyKSB7XHJcbiAgICAgICAgLy8g5L+u5pS557uT5p2fXHJcbiAgICAgICAgdGhpcy5fY3VsbGluZ0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9sYXllckluZm8gPSBsYXllckluZm87XHJcbiAgICAgICAgdGhpcy5fbWFwSW5mbyA9IG1hcEluZm87XHJcbiAgICAgICAgLy8g5q2k5aSE5L+u5pS5IOS/neWtmGZpcnN0VG14TGF5ZXLlj4LmlbBcclxuICAgICAgICB0aGlzLl9maXJzdFRteExheWVyID0gZmlyc3RUbXhMYXllcjtcclxuICAgICAgICB0aGlzLl90aWxlZE1hcCA9IHRpbGVkTWFwO1xyXG4gICAgICAgIC8vIOS/ruaUuee7k+adn1xyXG5cclxuICAgICAgICBsZXQgc2l6ZSA9IGxheWVySW5mby5fbGF5ZXJTaXplO1xyXG5cclxuICAgICAgICAvLyBsYXllckluZm9cclxuICAgICAgICB0aGlzLl9sYXllck5hbWUgPSBsYXllckluZm8ubmFtZTtcclxuICAgICAgICB0aGlzLl90aWxlcyA9IGxheWVySW5mby5fdGlsZXM7XHJcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IGxheWVySW5mby5wcm9wZXJ0aWVzO1xyXG4gICAgICAgIHRoaXMuX2xheWVyU2l6ZSA9IHNpemU7XHJcbiAgICAgICAgdGhpcy5fbWluR0lEID0gbGF5ZXJJbmZvLl9taW5HSUQ7XHJcbiAgICAgICAgdGhpcy5fbWF4R0lEID0gbGF5ZXJJbmZvLl9tYXhHSUQ7XHJcbiAgICAgICAgdGhpcy5fb3BhY2l0eSA9IGxheWVySW5mby5fb3BhY2l0eTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJPcmRlciA9IG1hcEluZm8ucmVuZGVyT3JkZXI7XHJcbiAgICAgICAgdGhpcy5fc3RhZ2dlckF4aXMgPSBtYXBJbmZvLmdldFN0YWdnZXJBeGlzKCk7XHJcbiAgICAgICAgdGhpcy5fc3RhZ2dlckluZGV4ID0gbWFwSW5mby5nZXRTdGFnZ2VySW5kZXgoKTtcclxuICAgICAgICB0aGlzLl9oZXhTaWRlTGVuZ3RoID0gbWFwSW5mby5nZXRIZXhTaWRlTGVuZ3RoKCk7XHJcbiAgICAgICAgdGhpcy5fYW5pbWF0aW9ucyA9IG1hcEluZm8uZ2V0VGlsZUFuaW1hdGlvbnMoKTtcclxuXHJcbiAgICAgICAgLy8gdGlsZXNldHNcclxuICAgICAgICB0aGlzLl90aWxlc2V0cyA9IHRpbGVzZXRzO1xyXG4gICAgICAgIC8vIHRleHR1cmVzXHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB0ZXh0dXJlcztcclxuICAgICAgICAvLyBncmlkIHRleHR1cmVcclxuICAgICAgICB0aGlzLl90ZXhHcmlkcyA9IHRleEdyaWRzO1xyXG5cclxuICAgICAgICAvLyBtYXBJbmZvXHJcbiAgICAgICAgdGhpcy5fbGF5ZXJPcmllbnRhdGlvbiA9IG1hcEluZm8ub3JpZW50YXRpb247XHJcbiAgICAgICAgdGhpcy5fbWFwVGlsZVNpemUgPSBtYXBJbmZvLmdldFRpbGVTaXplKCk7XHJcblxyXG4gICAgICAgIGxldCBtYXB0dyA9IHRoaXMuX21hcFRpbGVTaXplLndpZHRoO1xyXG4gICAgICAgIGxldCBtYXB0aCA9IHRoaXMuX21hcFRpbGVTaXplLmhlaWdodDtcclxuICAgICAgICBsZXQgbGF5ZXJXID0gdGhpcy5fbGF5ZXJTaXplLndpZHRoO1xyXG4gICAgICAgIGxldCBsYXllckggPSB0aGlzLl9sYXllclNpemUuaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fbGF5ZXJPcmllbnRhdGlvbiA9PT0gY2MuVGlsZWRNYXAuT3JpZW50YXRpb24uSEVYKSB7XHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBoZXggbWFwXHJcbiAgICAgICAgICAgIGNvbnN0IFRpbGVkTWFwID0gY2MuVGlsZWRNYXA7XHJcbiAgICAgICAgICAgIGNvbnN0IFN0YWdnZXJBeGlzID0gVGlsZWRNYXAuU3RhZ2dlckF4aXM7XHJcbiAgICAgICAgICAgIGNvbnN0IFN0YWdnZXJJbmRleCA9IFRpbGVkTWFwLlN0YWdnZXJJbmRleDtcclxuICAgICAgICAgICAgbGV0IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX29kZF9ldmVuID0gKHRoaXMuX3N0YWdnZXJJbmRleCA9PT0gU3RhZ2dlckluZGV4LlNUQUdHRVJJTkRFWF9PREQpID8gMSA6IC0xO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3RhZ2dlckF4aXMgPT09IFN0YWdnZXJBeGlzLlNUQUdHRVJBWElTX1gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RpZmZYMSA9IChtYXB0dyAtIHRoaXMuX2hleFNpZGVMZW5ndGgpIC8gMjtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RpZmZZMSA9IDA7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBtYXB0aCAqIChsYXllckggKyAwLjUpO1xyXG4gICAgICAgICAgICAgICAgd2lkdGggPSAobWFwdHcgKyB0aGlzLl9oZXhTaWRlTGVuZ3RoKSAqIE1hdGguZmxvb3IobGF5ZXJXIC8gMikgKyBtYXB0dyAqIChsYXllclcgJSAyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RpZmZYMSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWZmWTEgPSAobWFwdGggLSB0aGlzLl9oZXhTaWRlTGVuZ3RoKSAvIDI7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IG1hcHR3ICogKGxheWVyVyArIDAuNSk7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSAobWFwdGggKyB0aGlzLl9oZXhTaWRlTGVuZ3RoKSAqIE1hdGguZmxvb3IobGF5ZXJIIC8gMikgKyBtYXB0aCAqIChsYXllckggJSAyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm5vZGUuc2V0Q29udGVudFNpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9sYXllck9yaWVudGF0aW9uID09PSBjYy5UaWxlZE1hcC5PcmllbnRhdGlvbi5JU08pIHtcclxuICAgICAgICAgICAgbGV0IHdoID0gbGF5ZXJXICsgbGF5ZXJIO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuc2V0Q29udGVudFNpemUobWFwdHcgKiAwLjUgKiB3aCwgbWFwdGggKiAwLjUgKiB3aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLnNldENvbnRlbnRTaXplKGxheWVyVyAqIG1hcHR3LCBsYXllckggKiBtYXB0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBvZmZzZXQgKGFmdGVyIGxheWVyIG9yaWVudGF0aW9uIGlzIHNldCk7XHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0ID0gY2MudjIobGF5ZXJJbmZvLm9mZnNldC54LCAtbGF5ZXJJbmZvLm9mZnNldC55KTtcclxuICAgICAgICB0aGlzLl91c2VBdXRvbWF0aWNWZXJ0ZXhaID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fdmVydGV4WnZhbHVlID0gMDtcclxuICAgICAgICB0aGlzLl9zeW5jQW5jaG9yUG9pbnQoKTtcclxuICAgICAgICB0aGlzLl9wcmVwYXJlVG9SZW5kZXIoKTtcclxuICAgIH0sXHJcbiAgICBfdXBkYXRlQ3VsbGluZygpIHtcclxuICAgICAgICBpZiAoQ0NfRURJVE9SKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlQ3VsbGluZyhmYWxzZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9lbmFibGVDdWxsaW5nKSB7XHJcbiAgICAgICAgICAgIC8vIOatpOWkhOS/ruaUuSDoi6XkuI3kuLrpppbkuKpsYXllciDnm7TmjqXlpI3nlKhmaXJzdExheWVy55qE57uT5p6cXHJcbiAgICAgICAgICAgIC8vIHRoaXMuX2ZpcnN0VG14TGF5ZXLkuI3kuLrnqbrml7Yg6KGo56S65b2T5YmNbGF5ZXLkuI3mmK/pppbkuKpsYXllclxyXG4gICAgICAgICAgICBsZXQgZmlyc3RUbXhMYXllciA9IHRoaXMuX2ZpcnN0VG14TGF5ZXI7XHJcbiAgICAgICAgICAgIGlmICghIWZpcnN0VG14TGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2N1bGxpbmdSZWN0ID0gZmlyc3RUbXhMYXllci5fY3VsbGluZ1JlY3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jdWxsaW5nRGlydHkgPSBmaXJzdFRteExheWVyLl9jYWNoZUN1bGxpbmdEaXJ0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyDkv67mlLnnu5PmnZ9cclxuXHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5fdXBkYXRlV29ybGRNYXRyaXgoKTtcclxuICAgICAgICAgICAgY2MuTWF0NC5pbnZlcnQoX21hdDRfdGVtcCwgdGhpcy5ub2RlLl93b3JsZE1hdHJpeCk7XHJcbiAgICAgICAgICAgIGxldCByZWN0ID0gY2MudmlzaWJsZVJlY3Q7XHJcbiAgICAgICAgICAgIGxldCBjYW1lcmEgPSBjYy5DYW1lcmEuZmluZENhbWVyYSh0aGlzLm5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoY2FtZXJhKSB7XHJcbiAgICAgICAgICAgICAgICBfdmVjMl90ZW1wLnggPSAwO1xyXG4gICAgICAgICAgICAgICAgX3ZlYzJfdGVtcC55ID0gMDtcclxuICAgICAgICAgICAgICAgIF92ZWMyX3RlbXAyLnggPSBfdmVjMl90ZW1wLnggKyByZWN0LndpZHRoO1xyXG4gICAgICAgICAgICAgICAgX3ZlYzJfdGVtcDIueSA9IF92ZWMyX3RlbXAueSArIHJlY3QuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmdldFNjcmVlblRvV29ybGRQb2ludChfdmVjMl90ZW1wLCBfdmVjMl90ZW1wKTtcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5nZXRTY3JlZW5Ub1dvcmxkUG9pbnQoX3ZlYzJfdGVtcDIsIF92ZWMyX3RlbXAyKTtcclxuICAgICAgICAgICAgICAgIGNjLlZlYzIudHJhbnNmb3JtTWF0NChfdmVjMl90ZW1wLCBfdmVjMl90ZW1wLCBfbWF0NF90ZW1wKTtcclxuICAgICAgICAgICAgICAgIGNjLlZlYzIudHJhbnNmb3JtTWF0NChfdmVjMl90ZW1wMiwgX3ZlYzJfdGVtcDIsIF9tYXQ0X3RlbXApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZpZXdQb3J0KF92ZWMyX3RlbXAueCwgX3ZlYzJfdGVtcC55LCBfdmVjMl90ZW1wMi54IC0gX3ZlYzJfdGVtcC54LCBfdmVjMl90ZW1wMi55IC0gX3ZlYzJfdGVtcC55KTtcclxuICAgICAgICAgICAgICAgIC8vIOatpOWkhOS/ruaUuSDoi6XkuLrpppbkuKpsYXllciDnvJPlrZhfY3VsbGluZ0RpcnR544CCXHJcbiAgICAgICAgICAgICAgICAvLyBfY3VsbGluZ0RpcnR55Lya5Zyo5aGr5YWF5riy5p+T5pWw5o2u5ZCO6KKr5pS55Li6ZmFsc2Ug5omA5Lul6ZyA6KaB57yT5a2Y6L+Z6YeM55qE57uT5p6cXHJcbiAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VG14TGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZUN1bGxpbmdEaXJ0eSA9IHRoaXMuX2N1bGxpbmdEaXJ0eTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIOS/ruaUuee7k+adn1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIF90cmF2ZXJzZUFsbEdyaWQgKCkge1xyXG4gICAgICAgIGxldCB0aWxlcyA9IHRoaXMuX3RpbGVzO1xyXG4gICAgICAgIGxldCB0ZXhHcmlkcyA9IHRoaXMuX3RleEdyaWRzO1xyXG4gICAgICAgIGxldCB0aWxlc2V0SW5kZXhBcnIgPSB0aGlzLl90aWxlc2V0SW5kZXhBcnI7XHJcbiAgICAgICAgbGV0IHRpbGVzZXRJbmRleFRvQXJySW5kZXggPSB0aGlzLl90aWxlc2V0SW5kZXhUb0FyckluZGV4ID0ge307XHJcblxyXG4gICAgICAgIGNvbnN0IFRpbGVkTWFwID0gY2MuVGlsZWRNYXA7XHJcbiAgICAgICAgY29uc3QgVGlsZUZsYWcgPSBUaWxlZE1hcC5UaWxlRmxhZztcclxuICAgICAgICBjb25zdCBGTElQUEVEX01BU0sgPSBUaWxlRmxhZy5GTElQUEVEX01BU0s7XHJcblxyXG4gICAgICAgIGxldCBzaW5nbGVUZXh0dXJlID0gdGhpcy5fdGlsZWRNYXAuaXNTaW5nbGVUZXh0dXJlKCk7XHJcblxyXG4gICAgICAgIHRpbGVzZXRJbmRleEFyci5sZW5ndGggPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGdpZCA9IHRpbGVzW2ldO1xyXG4gICAgICAgICAgICBpZiAoZ2lkID09PSAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgZ2lkID0gKChnaWQgJiBGTElQUEVEX01BU0spID4+PiAwKTtcclxuICAgICAgICAgICAgbGV0IGdyaWQgPSB0ZXhHcmlkc1tnaWRdO1xyXG4gICAgICAgICAgICBpZiAoIWdyaWQpIHtcclxuICAgICAgICAgICAgICAgIGNjLmVycm9yKFwiQ0NUaWxlZExheWVyOl90cmF2ZXJzZUFsbEdyaWQgZ3JpZCBpcyBudWxsLCBnaWQgaXM6XCIsIGdpZCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgdGlsZXNldElkeCA9IGdyaWQudGV4SWQ7XHJcbiAgICAgICAgICAgIGlmICh0aWxlc2V0SW5kZXhUb0FyckluZGV4W3RpbGVzZXRJZHhdICE9PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB0aWxlc2V0SW5kZXhUb0FyckluZGV4W3RpbGVzZXRJZHhdID0gdGlsZXNldEluZGV4QXJyLmxlbmd0aDtcclxuICAgICAgICAgICAgdGlsZXNldEluZGV4QXJyLnB1c2godGlsZXNldElkeCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyDmraTlpITkv67mlLkg5b2T5Y+q5pyJ5LiA5Liq5Zu+6ZuG5pe2IOWPr+S7peebtOaOpeWBnOatoumBjeWOhlxyXG4gICAgICAgICAgICBpZiAoc2luZ2xlVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8g5L+u5pS557uT5p2fXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxufSk7XHJcbiJdfQ==