123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535 |
- (function() {
- var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
- var __module = nodeEnv ? module : {exports:{}};
- var __filename = 'preview-scripts/assets/script/frameWork/fgui/FguiMgr.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, 'e61aeS1Dn1AKZclV6WN+N79', 'FguiMgr');
- // script/frameWork/fgui/FguiMgr.ts
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
- };
- var __generator = (this && this.__generator) || function (thisArg, body) {
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
- function verb(n) { return function (v) { return step([n, v]); }; }
- function step(op) {
- if (f) throw new TypeError("Generator is already executing.");
- while (_) try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0: case 1: t = op; break;
- case 4: _.label++; return { value: op[1], done: false };
- case 5: _.label++; y = op[1]; op = [0]; continue;
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
- if (t[2]) _.ops.pop();
- _.trys.pop(); continue;
- }
- op = body.call(thisArg, _);
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
- }
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- var StringMap_1 = require("../../Collections/StringMap");
- var Config_1 = require("../../Config");
- var gameMethod_1 = require("../../common/gameMethod");
- var GameDataCenter_1 = require("../../data/GameDataCenter");
- var EventConst_1 = require("../../data/const/EventConst");
- var TypeConst_1 = require("../../data/const/TypeConst");
- var ViewZOrder_1 = require("../../data/const/ViewZOrder");
- var EventMng_1 = require("../../manager/EventMng");
- var Singleton_1 = require("../../manager/Singleton");
- var SpecialPromise_1 = require("../Promise/SpecialPromise");
- var ResCollector_1 = require("../compment/ResCollector");
- var ResKeeper_1 = require("../compment/ResKeeper");
- var FguiLoadMgr_1 = require("./FguiLoadMgr");
- var FguiView_1 = require("./mvc/FguiView");
- var FguiMgr = /** @class */ (function (_super) {
- __extends(FguiMgr, _super);
- function FguiMgr() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- /** 记录图层节点的Map */
- _this._layerNodeMap = new Map();
- /** 已开启过的ui */
- _this._opened = new StringMap_1.StringMap();
- /** 缓存被关闭的ui */
- _this._closed = new StringMap_1.StringMap();
- /** 记录所加载的包 */
- _this._addPkged = new StringMap_1.StringMap();
- return _this;
- //#endregion
- }
- FguiMgr.prototype.Init = function () {
- var _this = this;
- fgui.GRoot.create();
- fgui.GRoot.inst.width = Config_1.default.safeAreaRect.width;
- fgui.GRoot.inst.height = Config_1.default.realHeight;
- fgui.GRoot.inst.node.y = Config_1.default.realHeight + Config_1.default.safeAreaRect.y / 2;
- this._layerNodeMap = new Map();
- // 创建所有UI层级
- Object.values(ViewZOrder_1.ViewZOrder).forEach(function (layer) {
- if (typeof layer === 'number') {
- var layerName = ViewZOrder_1.ViewZOrder[layer];
- _this.createLayer(layerName + 'Layer', layer);
- }
- });
- };
- FguiMgr.prototype.createLayer = function (name, zOrder) {
- var layer = new fgui.GComponent();
- layer.name = name;
- layer.node.name = name;
- layer.sortingOrder = zOrder;
- fgui.GRoot.inst.addChild(layer);
- layer.makeFullScreen();
- this._layerNodeMap.set(zOrder, layer);
- return layer;
- };
- /**
- * @param callback 打开完毕回调函数
- * @param intent 传入到UI的参数
- */
- FguiMgr.prototype.openUI = function (uiClass, zOrder, callback, intent) {
- var _this = this;
- if (zOrder === void 0) { zOrder = ViewZOrder_1.ViewZOrder.UI; }
- if (CC_PREVIEW)
- console.log("\u6253\u5F00\u9875\u9762" + uiClass.getViewName());
- var viewKey = uiClass.getViewName();
- if (this._opened.ContainsKey(viewKey)) {
- console.log("FguiMgr::Open " + viewKey + " has already opened.");
- return;
- }
- if (this.getCacheView(uiClass, zOrder, callback)) {
- return;
- }
- var pkgName = uiClass.getPkgName();
- EventMng_1.default.emit(EventConst_1.GUIEvent.SHOW_MASK, pkgName, true);
- if (fgui.UIPackage.getByName(pkgName) == null) {
- // 加载uipackage
- FguiLoadMgr_1.default.loadPackage(pkgName, pkgName, function (error, pkg) { return __awaiter(_this, void 0, void 0, function () {
- return __generator(this, function (_a) {
- if (error) {
- EventMng_1.default.emit(EventConst_1.GUIEvent.SHOW_MASK, pkgName, false);
- console.error("FguiMgr LoadPackage[" + pkgName + "] error: " + error);
- return [2 /*return*/];
- }
- this.CreateView(uiClass, zOrder, intent, callback);
- return [2 /*return*/];
- });
- }); });
- }
- else {
- this.CreateView(uiClass, zOrder, intent, callback);
- }
- };
- /** 从缓存中加载页面 */
- FguiMgr.prototype.getCacheView = function (uiClass, zOrder, callback, intent) {
- if (zOrder === void 0) { zOrder = ViewZOrder_1.ViewZOrder.UI; }
- var viewKey = uiClass.getViewName();
- if (this._closed.ContainsKey(viewKey)) {
- var uiview_1 = this._closed.Value(viewKey);
- if (uiview_1.viewType == FguiView_1.ViewType.Full) {
- this._opened.Foreach(function (key, value) {
- if (value.viewType != FguiView_1.ViewType.Part && value.zOrder <= uiview_1.zOrder) {
- value.addFullHideCount(1);
- }
- });
- }
- this._closed.Remove(viewKey);
- this._opened.Add(viewKey, uiview_1);
- this.AddPanel(uiview_1.Panel, zOrder);
- uiview_1.show(intent);
- uiview_1.zOrder = zOrder;
- uiview_1.uiPkgName = uiClass.getPkgName();
- //回调
- callback && callback(uiview_1);
- return true;
- }
- return false;
- };
- FguiMgr.prototype.CreateView = function (uiClass, zOrder, intent, complete) {
- var _this = this;
- if (zOrder === void 0) { zOrder = ViewZOrder_1.ViewZOrder.UI; }
- var handler = new fgui.AsyncOperation();
- handler.callback = function (gObject) { return __awaiter(_this, void 0, void 0, function () {
- var panel, uiview, resKeeper, resCollector;
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (this._opened.ContainsKey(uiClass.getViewName())) {
- EventMng_1.default.emit(EventConst_1.GUIEvent.SHOW_MASK, uiClass.getPkgName(), false);
- console.error("FguiMgr::Open " + uiClass.getViewName() + " has already opened.");
- return [2 /*return*/];
- }
- panel = gObject;
- if (panel == null) {
- EventMng_1.default.emit(EventConst_1.GUIEvent.SHOW_MASK, uiClass.getPkgName(), false);
- console.error("FguiMgr createObject[" + uiClass.getViewName + "] error: GObject\u4E3A\u7A7A.");
- return [2 /*return*/];
- }
- panel.node.name = uiClass.getPrefabName();
- uiview = new uiClass();
- uiview.zOrder = zOrder;
- uiview.uiPkgName = uiClass.getPkgName();
- uiview.initForward(panel, null);
- resKeeper = ResKeeper_1.ResKeeper.Get(panel.node, true);
- resCollector = new ResCollector_1.ResCollector();
- uiview.Controller.onCollectRes(resCollector, intent);
- if (!(resCollector.GetResList().length > 0)) return [3 /*break*/, 2];
- return [4 /*yield*/, resKeeper.LoadResCollector(resCollector, SpecialPromise_1.PromiseDefault)];
- case 1:
- _a.sent();
- _a.label = 2;
- case 2:
- if (uiview.viewType == FguiView_1.ViewType.Full) {
- this._opened.Foreach(function (key, value) {
- if (value.viewType != FguiView_1.ViewType.Part && value.zOrder <= uiview.zOrder) {
- value.addFullHideCount(1);
- }
- });
- }
- this._opened.Add(uiClass.getViewName(), uiview);
- uiview.init();
- this.AddPanel(panel, zOrder);
- uiview.show(intent);
- this.AddPkgCount(uiClass.getPkgName(), uiClass.getViewName());
- EventMng_1.default.emit(EventConst_1.GUIEvent.SHOW_MASK, uiClass.getPkgName(), false);
- complete && complete(uiview);
- return [2 /*return*/];
- }
- });
- }); };
- handler.createObject(uiClass.getPkgName(), uiClass.getPrefabName());
- };
- /**
- * @param isDispose 是否销毁
- */
- FguiMgr.prototype.closeUI = function (uiClass, isDispose) {
- if (isDispose === void 0) { isDispose = false; }
- var viewKey = uiClass.getViewName();
- if (this._opened.ContainsKey(viewKey)) {
- var view_1 = this._opened.Value(viewKey);
- this._opened.Remove(viewKey);
- view_1.hide(isDispose);
- this.RemovePanel(view_1.Panel);
- if (isDispose) {
- this.DestroyView(view_1, uiClass);
- }
- else {
- this._closed.Add(viewKey, view_1);
- }
- if (view_1.viewType == FguiView_1.ViewType.Full) {
- this._opened.Foreach(function (key, value) {
- if (value.viewType != FguiView_1.ViewType.Part && value.zOrder <= view_1.zOrder) {
- value.addFullHideCount(-1);
- }
- });
- }
- }
- else if (isDispose && this._closed.ContainsKey(viewKey)) {
- var view = this._closed.Value(viewKey);
- this._closed.Remove(viewKey);
- this.DestroyView(view, uiClass);
- }
- };
- // 判断界面是否打开
- FguiMgr.prototype.isShowing = function (uiClass) {
- var viewKey = uiClass === null || uiClass === void 0 ? void 0 : uiClass.getViewName();
- if (this._opened.ContainsKey(viewKey)) {
- return true;
- }
- return false;
- };
- // 获取打开的界面
- FguiMgr.prototype.getShowingView = function (uiClass) {
- var viewKey = uiClass === null || uiClass === void 0 ? void 0 : uiClass.getViewName();
- if (this._opened.ContainsKey(viewKey)) {
- var view = this._opened.Value(viewKey);
- return view;
- }
- return null;
- };
- /**
- * 当前是否有除了指定页面以外的其他页面被打开
- */
- FguiMgr.prototype.checkOtherUIOpen = function (uilist) {
- var list = [];
- for (var _i = 0, uilist_1 = uilist; _i < uilist_1.length; _i++) {
- var i = uilist_1[_i];
- list.push(i.getViewName());
- }
- var haveother = false;
- this._opened.Foreach(function (key, value) {
- if (list.indexOf(key) < 0) {
- haveother = true;
- }
- });
- return haveother;
- };
- FguiMgr.prototype.isShowingByName = function (uiViewName) {
- return this._opened.ContainsKey(uiViewName);
- };
- // 获取打开的界面
- FguiMgr.prototype.getShowingViewByName = function (uiViewName) {
- if (this._opened.ContainsKey(uiViewName)) {
- var view = this._opened.Value(uiViewName);
- return view;
- }
- return null;
- };
- FguiMgr.prototype.findNodeByName = function (uiViewName, goName) {
- var _a, _b;
- if (this._opened.ContainsKey(uiViewName)) {
- var view = this._opened.Value(uiViewName);
- var goNames = goName.split("/");
- var go = null;
- var goTemp = view["_viewModel"][goNames[0]];
- if (gameMethod_1.gameMethod.isEmpty(goTemp)) {
- goTemp = view.Panel.getChild(goNames[0]);
- }
- for (var i = 1; i < goNames.length; i++) {
- if (goTemp === null || goTemp === void 0 ? void 0 : goTemp.Panel) {
- goTemp = (_a = goTemp.Panel) === null || _a === void 0 ? void 0 : _a.getChild(goNames[i]);
- }
- else {
- goTemp = goTemp === null || goTemp === void 0 ? void 0 : goTemp.getChild(goNames[i]);
- }
- }
- go = goTemp;
- if (!gameMethod_1.gameMethod.isEmpty(go)) {
- go.visible = true;
- }
- else {
- console.error("\u754C\u9762\uFF1A" + uiViewName + " \u627E\u4E0D\u5230\u76EE\u6807\u8282\u70B9: " + goNames);
- }
- return (_b = go === null || go === void 0 ? void 0 : go.node) !== null && _b !== void 0 ? _b : null;
- }
- return null;
- };
- FguiMgr.prototype.removePkg = function (uiClass) {
- if (!this._addPkged.ContainsKey(uiClass.getPkgName()) || this._addPkged.Value(uiClass.getPkgName()) == 0) {
- fgui.UIPackage.removePackage(uiClass.getPkgName());
- }
- else {
- console.warn("removePkg fail");
- }
- };
- FguiMgr.prototype.clearOpenUI = function () {
- var _this = this;
- this._opened.Foreach(function (viewKey, value) {
- value.hide();
- _this.RemovePanel(value.Panel);
- _this._closed.Add(viewKey, value);
- });
- this._opened.Clear();
- };
- FguiMgr.prototype.clearAllUI = function () {
- var _this = this;
- this._opened.Foreach(function (viewKey, value) {
- value.hide();
- _this.RemovePanel(value.Panel);
- });
- this.clearCacheMap();
- // this._addPkged.Foreach((pkgName: string, value: number) => {
- // fgui.UIPackage.removePackage(pkgName)
- // })
- this._addPkged.Clear();
- };
- FguiMgr.prototype.clearCacheMap = function () {
- this._opened.Clear();
- this._closed.Clear();
- };
- FguiMgr.prototype.OnUpdate = function (elapseTime) {
- this._opened.Foreach(function (k, v) {
- v.OnUpdate(elapseTime);
- }, this);
- };
- FguiMgr.prototype.OnLateUpdate = function (elapseTime) {
- this._opened.Foreach(function (k, v) {
- v.OnLateUpdate(elapseTime);
- }, this);
- };
- FguiMgr.prototype.Dispose = function () {
- //TODO 有需要再补充
- };
- /** 增加fgui pkg计数 */
- FguiMgr.prototype.AddPkgCount = function (pkgName, from) {
- var _a, _b;
- if (this._addPkged.ContainsKey(pkgName)) {
- //已存在++
- var pkgCount = this._addPkged.Value(pkgName);
- pkgCount++;
- this._addPkged.Replace(pkgName, pkgCount);
- }
- else {
- this._addPkged.Add(pkgName, 1);
- }
- if (!gameMethod_1.gameMethod.isEmpty((_b = (_a = GameDataCenter_1.default === null || GameDataCenter_1.default === void 0 ? void 0 : GameDataCenter_1.default.sevBack) === null || _a === void 0 ? void 0 : _a.switch) === null || _b === void 0 ? void 0 : _b.clientLog)) {
- console.log(from + " " + pkgName + " count: " + this._addPkged.Value(pkgName));
- }
- };
- /** 减少fgui pkg计数 */
- FguiMgr.prototype.DelPkgCount = function (pkgName, from) {
- var _a, _b, _c, _d;
- if (this._addPkged.ContainsKey(pkgName)) {
- //已存在++
- var pkgCount = this._addPkged.Value(pkgName);
- pkgCount--;
- if (!gameMethod_1.gameMethod.isEmpty((_b = (_a = GameDataCenter_1.default === null || GameDataCenter_1.default === void 0 ? void 0 : GameDataCenter_1.default.sevBack) === null || _a === void 0 ? void 0 : _a.switch) === null || _b === void 0 ? void 0 : _b.clientLog)) {
- console.log(pkgName + " count: " + pkgCount, from);
- }
- this._addPkged.Replace(pkgName, pkgCount);
- if (pkgCount <= 0 && pkgName != "Common") {
- if (!gameMethod_1.gameMethod.isEmpty((_d = (_c = GameDataCenter_1.default === null || GameDataCenter_1.default === void 0 ? void 0 : GameDataCenter_1.default.sevBack) === null || _c === void 0 ? void 0 : _c.switch) === null || _d === void 0 ? void 0 : _d.clientLog)) {
- console.log("removePackage:" + pkgName, from);
- }
- fgui.UIPackage.removePackage(pkgName);
- }
- }
- };
- FguiMgr.prototype.AddPkgByPkgName = function (pkgName, cb) {
- var _this = this;
- var _a, _b;
- if (fgui.UIPackage.getByName(pkgName) == null) {
- // 加载uipackage
- FguiLoadMgr_1.default.loadPackage(pkgName, pkgName, function (error, pkg) {
- var _a, _b;
- if (error) {
- EventMng_1.default.emit(EventConst_1.GUIEvent.SHOW_MASK, pkgName, false);
- console.error("FguiMgr LoadPackage[" + pkgName + "] error: " + error);
- return;
- }
- _this.AddPkgCount(pkgName);
- if (!gameMethod_1.gameMethod.isEmpty((_b = (_a = GameDataCenter_1.default === null || GameDataCenter_1.default === void 0 ? void 0 : GameDataCenter_1.default.sevBack) === null || _a === void 0 ? void 0 : _a.switch) === null || _b === void 0 ? void 0 : _b.clientLog)) {
- console.log(pkgName + " count: " + _this._addPkged.Value(pkgName));
- }
- cb && cb();
- });
- }
- else {
- this.AddPkgCount(pkgName);
- if (!gameMethod_1.gameMethod.isEmpty((_b = (_a = GameDataCenter_1.default === null || GameDataCenter_1.default === void 0 ? void 0 : GameDataCenter_1.default.sevBack) === null || _a === void 0 ? void 0 : _a.switch) === null || _b === void 0 ? void 0 : _b.clientLog)) {
- console.log(pkgName + " count: " + this._addPkged.Value(pkgName));
- }
- cb && cb();
- }
- };
- FguiMgr.prototype.RemovePkgByPkgName = function (pkgName) {
- //ios平台才释放,安卓平台不释放
- if (GameDataCenter_1.default.plat.instance.deviceOS != TypeConst_1.PlatFormDevType.iosH5 && GameDataCenter_1.default.plat.instance.deviceOS != TypeConst_1.PlatFormDevType.ios && GameDataCenter_1.default.plat.instance.deviceOS != TypeConst_1.PlatFormDevType.local) {
- return;
- }
- this.DelPkgCount(pkgName);
- };
- FguiMgr.prototype.AddPanel = function (panel, zOrder) {
- var layerNode = this._layerNodeMap.get(zOrder);
- if (layerNode) {
- layerNode.addChild(panel);
- }
- else {
- fgui.GRoot.inst.addChild(panel);
- }
- // UI全屏自适应
- panel.makeFullScreen();
- };
- FguiMgr.prototype.RemovePanel = function (panel) {
- fgui.GRoot.inst.removeChild(panel);
- };
- FguiMgr.prototype.DestroyView = function (uiview, uiClass) {
- //ios平台才释放,安卓平台不释放
- if (GameDataCenter_1.default.plat.instance.deviceOS != TypeConst_1.PlatFormDevType.iosH5 && GameDataCenter_1.default.plat.instance.deviceOS != TypeConst_1.PlatFormDevType.ios && GameDataCenter_1.default.plat.instance.deviceOS != TypeConst_1.PlatFormDevType.local) {
- return;
- }
- var panel = uiview.Panel;
- panel.dispose();
- this.DelPkgCount(uiClass.getPkgName());
- };
- FguiMgr.prototype.CloseUIByLayer = function (zOrder) {
- var _this = this;
- this._opened.Foreach(function (viewKey, value) {
- if (value.zOrder == zOrder) {
- var view_2 = _this._opened.Value(viewKey);
- _this._opened.Remove(viewKey);
- view_2.hide();
- _this.RemovePanel(view_2.Panel);
- _this._closed.Add(viewKey, view_2);
- if (view_2.viewType == FguiView_1.ViewType.Full) {
- _this._opened.Foreach(function (key, value) {
- if (value.viewType != FguiView_1.ViewType.Part && value.zOrder <= view_2.zOrder) {
- value.addFullHideCount(-1);
- }
- });
- }
- }
- });
- };
- /** 关闭所有的UI elseView 排除无需关闭的界面 */
- FguiMgr.prototype.CloseAllUI = function (elseView) {
- var _this = this;
- if (elseView === void 0) { elseView = []; }
- this._opened.Foreach(function (viewKey, value) {
- if (elseView.indexOf(viewKey) < 0) {
- var view_3 = _this._opened.Value(viewKey);
- _this._opened.Remove(viewKey);
- view_3.hide();
- _this.RemovePanel(view_3.Panel);
- _this._closed.Add(viewKey, view_3);
- if (view_3.viewType == FguiView_1.ViewType.Full) {
- _this._opened.Foreach(function (key, value) {
- if (value.viewType != FguiView_1.ViewType.Part && value.zOrder <= view_3.zOrder) {
- value.addFullHideCount(-1);
- }
- });
- }
- }
- });
- };
- return FguiMgr;
- }(Singleton_1.Singleton()));
- exports.default = FguiMgr;
- 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9zY3JpcHQvZnJhbWVXb3JrL2ZndWkvRmd1aU1nci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBd0Q7QUFDeEQsdUNBQWtDO0FBQ2xDLHNEQUFxRDtBQUNyRCw0REFBdUQ7QUFDdkQsMERBQXVEO0FBQ3ZELHdEQUE2RDtBQUM3RCwwREFBeUQ7QUFDekQsbURBQThDO0FBQzlDLHFEQUFvRDtBQUNwRCw0REFBMkQ7QUFDM0QseURBQXdEO0FBQ3hELG1EQUFrRDtBQUNsRCw2Q0FBd0M7QUFJeEMsMkNBQStEO0FBRy9EO0lBQXFDLDJCQUFvQjtJQUF6RDtRQUFBLHFFQThhQztRQTdhRyxpQkFBaUI7UUFDVCxtQkFBYSxHQUFxQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BFLGNBQWM7UUFDTixhQUFPLEdBQXdCLElBQUkscUJBQVMsRUFBWSxDQUFDO1FBQ2pFLGVBQWU7UUFDUCxhQUFPLEdBQXdCLElBQUkscUJBQVMsRUFBWSxDQUFDO1FBQ2pFLGNBQWM7UUFDTixlQUFTLEdBQXNCLElBQUkscUJBQVMsRUFBVSxDQUFDOztRQXFhL0QsWUFBWTtJQUNoQixDQUFDO0lBbmFHLHNCQUFJLEdBQUo7UUFBQSxpQkFlQztRQWRHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLGdCQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQTtRQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQU0sQ0FBQyxVQUFVLENBQUE7UUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxnQkFBTSxDQUFDLFVBQVUsR0FBRyxnQkFBTSxDQUFDLFlBQVksQ0FB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LENBQUE7aUJBQ0w7YUFDSjtRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUlMLGNBQUM7QUFBRCxDQTlhQSxBQThhQyxDQTlhb0MscUJBQVMsRUFBVyxHQThheEQiLCJmaWxlIjoiIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdHJpbmdNYXAgfSBmcm9tIFwiLi4vLi4vQ29sbGVjdGlvbnMvU3RyaW5nTWFwXCI7XG5pbXBvcnQgQ29uZmlnIGZyb20gXCIuLi8uLi9Db25maWdcIjtcbmltcG9ydCB7IGdhbWVNZXRob2QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2dhbWVNZXRob2RcIjtcbmltcG9ydCBHYW1lRGF0YUNlbnRlciBmcm9tIFwiLi4vLi4vZGF0YS9HYW1lRGF0YUNlbnRlclwiO1xuaW1wb3J0IHsgR1VJRXZlbnQgfSBmcm9tIFwiLi4vLi4vZGF0YS9jb25zdC9FdmVudENvbnN0XCI7XG5pbXBvcnQgeyBQbGF0Rm9ybURldlR5cGUgfSBmcm9tIFwiLi4vLi4vZGF0YS9jb25zdC9UeXBlQ29uc3RcIjtcbmltcG9ydCB7IFZpZXdaT3JkZXIgfSBmcm9tIFwiLi4vLi4vZGF0YS9jb25zdC9WaWV3Wk9yZGVyXCI7XG5pbXBvcnQgRXZlbnRNbmcgZnJvbSBcIi4uLy4uL21hbmFnZXIvRXZlbnRNbmdcIjtcbmltcG9ydCB7IFNpbmdsZXRvbiB9IGZyb20gXCIuLi8uLi9tYW5hZ2VyL1NpbmdsZXRvblwiO1xuaW1wb3J0IHsgUHJvbWlzZURlZmF1bHQgfSBmcm9tIFwiLi4vUHJvbWlzZS9TcGVjaWFsUHJvbWlzZVwiO1xuaW1wb3J0IHsgUmVzQ29sbGVjdG9yIH0gZnJvbSBcIi4uL2NvbXBtZW50L1Jlc0NvbGxlY3RvclwiO1xuaW1wb3J0IHsgUmVzS2VlcGVyIH0gZnJvbSBcIi4uL2NvbXBtZW50L1Jlc0tlZXBlclwiO1xuaW1wb3J0IEZndWlMb2FkTWdyIGZyb20gXCIuL0ZndWlMb2FkTWdyXCI7XG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gXCIuL0ludGVyZmFjZS9JRGlzcG9zYWJsZVwiO1xuaW1wb3J0IHsgSUxhdGVVcGRhdGUgfSBmcm9tIFwiLi9JbnRlcmZhY2UvSUxhdGVVcGRhdGVcIjtcbmltcG9ydCB7IElVcGRhdGUgfSBmcm9tIFwiLi9JbnRlcmZhY2UvSVVwZGF0ZVwiO1xuaW1wb3J0IHsgRmd1aUNsYXNzLCBGZ3VpVmlldywgVmlld1R5cGUgfSBmcm9tIFwiLi9tdmMvRmd1aVZpZXdcIjtcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZ3VpTWdyIGV4dGVuZHMgU2luZ2xldG9uPEZndWlNZ3I+KCkgaW1wbGVtZW50cyBJVXBkYXRlLCBJTGF0ZVVwZGF0ZSwgSURpc3Bvc2FibGUge1xuICAgIC8qKiDorrDlvZXlm77lsYLoioLngrnnmoRNYXAgKi9cbiAgICBwcml2YXRlIF9sYXllck5vZGVNYXA6IE1hcDxWaWV3Wk9yZGVyLCBmZ3VpLkdDb21wb25lbnQ+ID0gbmV3IE1hcCgpO1xuICAgIC8qKiDlt7LlvIDlkK/ov4fnmoR1aSAqL1xuICAgIHByaXZhdGUgX29wZW5lZDogU3RyaW5nTWFwPEZndWlWaWV3PiA9IG5ldyBTdHJpbmdNYXA8Rmd1aVZpZXc+KCk7XG4gICAgLyoqIOe8k+WtmOiiq+WFs+mXreeahHVpICovXG4gICAgcHJpdmF0ZSBfY2xvc2VkOiBTdHJpbmdNYXA8Rmd1aVZpZXc+ID0gbmV3IFN0cmluZ01hcDxGZ3VpVmlldz4oKTtcbiAgICAvKiog6K6w5b2V5omA5Yqg6L2955qE5YyFICovXG4gICAgcHJpdmF0ZSBfYWRkUGtnZWQ6IFN0cmluZ01hcDxudW1iZXI+ID0gbmV3IFN0cmluZ01hcDxudW1iZXI+KCk7XG5cblxuICAgIEluaXQoKTogdm9pZCB7XG4gICAgICAgIGZndWkuR1Jvb3QuY3JlYXRlKCk7XG5cbiAgICAgICAgZmd1aS5HUm9vdC5pbnN0LndpZHRoID0gQ29uZmlnLnNhZmVBcmVhUmVjdC53aWR0aFxuICAgICAgICBmZ3VpLkdSb290Lmluc3QuaGVpZ2h0ID0gQ29uZmlnLnJlYWxIZWlnaHRcbiAgICAgICAgZmd1aS5HUm9vdC5pbnN0Lm5vZGUueSA9IENvbmZpZy5yZWFsSGVpZ2h0ICsgQ29uZmlnLnNhZmVBcmVhUmVjdC55IC8gMlxuXG4gICAgICAgIHRoaXMuX2xheWVyTm9kZU1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgLy8g5Yib5bu65omA5pyJVUnlsYLnuqdcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhWaWV3Wk9yZGVyKS5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXllciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXllck5hbWUgPSBWaWV3Wk9yZGVyW2xheWVyXTtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUxheWVyKGxheWVyTmFtZSArICdMYXllcicsIGxheWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGNyZWF0ZUxheWVyKG5hbWU6IHN0cmluZywgek9yZGVyOiBudW1iZXIpOiBmZ3VpLkdDb21wb25lbnQge1xuICAgICAgICBjb25zdCBsYXllciA9IG5ldyBmZ3VpLkdDb21wb25lbnQoKTtcbiAgICAgICAgbGF5ZXIubmFtZSA9IG5hbWU7XG4gICAgICAgIGxheWVyLm5vZGUubmFtZSA9IG5hbWU7XG4gICAgICAgIGxheWVyLnNvcnRpbmdPcmRlciA9IHpPcmRlcjtcbiAgICAgICAgZmd1aS5HUm9vdC5pbnN0LmFkZENoaWxkKGxheWVyKTtcbiAgICAgICAgbGF5ZXIubWFrZUZ1bGxTY3JlZW4oKTtcbiAgICAgICAgdGhpcy5fbGF5ZXJOb2RlTWFwLnNldCh6T3JkZXIsIGxheWVyKTtcbiAgICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIOaJk+W8gOWujOavleWbnuiwg+WHveaVsFxuICAgICAqIEBwYXJhbSBpbnRlbnQg5Lyg5YWl5YiwVUnnmoTlj4LmlbBcbiAgICAqL1xuICAgIHB1YmxpYyBvcGVuVUk8VCBleHRlbmRzIEZndWlWaWV3Pih1aUNsYXNzOiBGZ3VpQ2xhc3M8VD4sIHpPcmRlcjogbnVtYmVyID0gVmlld1pPcmRlci5VSSwgY2FsbGJhY2s/OiBGdW5jdGlvbiwgaW50ZW50PzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChDQ19QUkVWSUVXKSBjb25zb2xlLmxvZyhg5omT5byA6aG16Z2iJHt1aUNsYXNzLmdldFZpZXdOYW1lKCl9YCk7XG4gICAgICAgIGNvbnN0IHZpZXdLZXkgPSB1aUNsYXNzLmdldFZpZXdOYW1lKCk7XG4gICAgICAgIGlmICh0aGlzLl9vcGVuZWQuQ29udGFpbnNLZXkodmlld0tleSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGZ3VpTWdyOjpPcGVuICR7dmlld0tleX0gaGFzIGFscmVhZHkgb3BlbmVkLmApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdldENhY2hlVmlldyh1aUNsYXNzLCB6T3JkZXIsIGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwa2dOYW1lID0gdWlDbGFzcy5nZXRQa2dOYW1lKCk7XG4gICAgICAgIEV2ZW50TW5nLmVtaXQoR1VJRXZlbnQuU0hPV19NQVNLLCBwa2dOYW1lLCB0cnVlKTtcbiAgICAgICAgaWYgKGZndWkuVUlQYWNrYWdlLmdldEJ5TmFtZShwa2dOYW1lKSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyDliqDovb11aXBhY2thZ2VcbiAgICAgICAgICAgIEZndWlMb2FkTWdyLmxvYWRQYWNrYWdlKHBrZ05hbWUsIHBrZ05hbWUsIGFzeW5jIChlcnJvciwgcGtnKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIEV2ZW50TW5nLmVtaXQoR1VJRXZlbnQuU0hPV19NQVNLLCBwa2dOYW1lLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmd1aU1nciBMb2FkUGFja2FnZVske3BrZ05hbWV9XSBlcnJvcjogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLkNyZWF0ZVZpZXcodWlDbGFzcywgek9yZGVyLCBpbnRlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5DcmVhdGVWaWV3KHVpQ2xhc3MsIHpPcmRlciwgaW50ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiog5LuO57yT5a2Y5Lit5Yqg6L296aG16Z2iICovXG4gICAgcHJpdmF0ZSBnZXRDYWNoZVZpZXc8VCBleHRlbmRzIEZndWlWaWV3Pih1aUNsYXNzOiBGZ3VpQ2xhc3M8VD4sIHpPcmRlcjogbnVtYmVyID0gVmlld1pPcmRlci5VSSwgY2FsbGJhY2s/OiBGdW5jdGlvbiwgaW50ZW50PzogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHZpZXdLZXkgPSB1aUNsYXNzLmdldFZpZXdOYW1lKCk7XG4gICAgICAgIGlmICh0aGlzLl9jbG9zZWQuQ29udGFpbnNLZXkodmlld0tleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHVpdmlldyA9IHRoaXMuX2Nsb3NlZC5WYWx1ZSh2aWV3S2V5KTtcbiAgICAgICAgICAgIGlmICh1aXZpZXcudmlld1R5cGUgPT0gVmlld1R5cGUuRnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZW5lZC5Gb3JlYWNoKChrZXk6IHN0cmluZywgdmFsdWU6IEZndWlWaWV3KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS52aWV3VHlwZSAhPSBWaWV3VHlwZS5QYXJ0ICYmIHZhbHVlLnpPcmRlciA8PSB1aXZpZXcuek9yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5hZGRGdWxsSGlkZUNvdW50KDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlZC5SZW1vdmUodmlld0tleSk7XG4gICAgICAgICAgICB0aGlzLl9vcGVuZWQuQWRkKHZpZXdLZXksIHVpdmlldyk7XG4gICAgICAgICAgICB0aGlzLkFkZFBhbmVsKHVpdmlldy5QYW5lbCwgek9yZGVyKTtcbiAgICAgICAgICAgIHVpdmlldy5zaG93KGludGVudCk7XG4gICAgICAgICAgICB1aXZpZXcuek9yZGVyID0gek9yZGVyO1xuICAgICAgICAgICAgdWl2aWV3LnVpUGtnTmFtZSA9IHVpQ2xhc3MuZ2V0UGtnTmFtZSgpO1xuICAgICAgICAgICAgLy/lm57osINcbiAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHVpdmlldyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIENyZWF0ZVZpZXc8VCBleHRlbmRzIEZndWlWaWV3Pih1aUNsYXNzOiBGZ3VpQ2xhc3M8VD4sIHpPcmRlcjogbnVtYmVyID0gVmlld1pPcmRlci5VSSwgaW50ZW50PzogYW55LCBjb21wbGV0ZT86IEZ1bmN0aW9uKSB7XG4gICAgICAgIGxldCBoYW5kbGVyID0gbmV3IGZndWkuQXN5bmNPcGVyYXRpb24oKTtcbiAgICAgICAgaGFuZGxlci5jYWxsYmFjayA9IGFzeW5jIChnT2JqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fb3BlbmVkLkNvbnRhaW5zS2V5KHVpQ2xhc3MuZ2V0Vmlld05hbWUoKSkpIHtcbiAgICAgICAgICAgICAgICBFdmVudE1uZy5lbWl0KEdVSUV2ZW50LlNIT1dfTUFTSywgdWlDbGFzcy5nZXRQa2dOYW1lKCksIGZhbHNlKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZndWlNZ3I6Ok9wZW4gJHt1aUNsYXNzLmdldFZpZXdOYW1lKCl9IGhhcyBhbHJlYWR5IG9wZW5lZC5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcGFuZWwgPSBnT2JqZWN0IGFzIGZndWkuR0NvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChwYW5lbCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgRXZlbnRNbmcuZW1pdChHVUlFdmVudC5TSE9XX01BU0ssIHVpQ2xhc3MuZ2V0UGtnTmFtZSgpLCBmYWxzZSlcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGZ3VpTWdyIGNyZWF0ZU9iamVjdFske3VpQ2xhc3MuZ2V0Vmlld05hbWV9XSBlcnJvcjogR09iamVjdOS4uuepui5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYW5lbC5ub2RlLm5hbWUgPSB1aUNsYXNzLmdldFByZWZhYk5hbWUoKTtcbiAgICAgICAgICAgIGxldCB1aXZpZXcgPSBuZXcgdWlDbGFzcygpO1xuICAgICAgICAgICAgdWl2aWV3LnpPcmRlciA9IHpPcmRlcjtcbiAgICAgICAgICAgIHVpdmlldy51aVBrZ05hbWUgPSB1aUNsYXNzLmdldFBrZ05hbWUoKTtcbiAgICAgICAgICAgIHVpdmlldy5pbml0Rm9yd2FyZChwYW5lbCwgbnVsbCk7XG4gICAgICAgICAgICBjb25zdCByZXNLZWVwZXIgPSBSZXNLZWVwZXIuR2V0KHBhbmVsLm5vZGUsIHRydWUpO1xuICAgICAgICAgICAgbGV0IHJlc0NvbGxlY3RvciA9IG5ldyBSZXNDb2xsZWN0b3IoKTtcbiAgICAgICAgICAgIHVpdmlldy5Db250cm9sbGVyLm9uQ29sbGVjdFJlcyhyZXNDb2xsZWN0b3IsIGludGVudCk7XG4gICAgICAgICAgICBpZiAocmVzQ29sbGVjdG9yLkdldFJlc0xpc3QoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcmVzS2VlcGVyLkxvYWRSZXNDb2xsZWN0b3IocmVzQ29sbGVjdG9yLCBQcm9taXNlRGVmYXVsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodWl2aWV3LnZpZXdUeXBlID09IFZpZXdUeXBlLkZ1bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVuZWQuRm9yZWFjaCgoa2V5OiBzdHJpbmcsIHZhbHVlOiBGZ3VpVmlldykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUudmlld1R5cGUgIT0gVmlld1R5cGUuUGFydCAmJiB2YWx1ZS56T3JkZXIgPD0gdWl2aWV3LnpPcmRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuYWRkRnVsbEhpZGVDb3VudCgxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vcGVuZWQuQWRkKHVpQ2xhc3MuZ2V0Vmlld05hbWUoKSwgdWl2aWV3KTtcbiAgICAgICAgICAgIHVpdmlldy5pbml0KCk7XG4gICAgICAgICAgICB0aGlzLkFkZFBhbmVsKHBhbmVsLCB6T3JkZXIpO1xuICAgICAgICAgICAgdWl2aWV3LnNob3coaW50ZW50KTtcbiAgICAgICAgICAgIHRoaXMuQWRkUGtnQ291bnQodWlDbGFzcy5nZXRQa2dOYW1lKCksIHVpQ2xhc3MuZ2V0Vmlld05hbWUoKSk7XG5cbiAgICAgICAgICAgIEV2ZW50TW5nLmVtaXQoR1VJRXZlbnQuU0hPV19NQVNLLCB1aUNsYXNzLmdldFBrZ05hbWUoKSwgZmFsc2UpXG4gICAgICAgICAgICBjb21wbGV0ZSAmJiBjb21wbGV0ZSh1aXZpZXcpO1xuICAgICAgICB9O1xuICAgICAgICBoYW5kbGVyLmNyZWF0ZU9iamVjdCh1aUNsYXNzLmdldFBrZ05hbWUoKSwgdWlDbGFzcy5nZXRQcmVmYWJOYW1lKCkpO1xuICAgIH1cblxuXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gaXNEaXNwb3NlIOaYr+WQpumUgOavgVxuICAgICovXG4gICAgcHVibGljIGNsb3NlVUk8VCBleHRlbmRzIEZndWlWaWV3Pih1aUNsYXNzOiBGZ3VpQ2xhc3M8VD4sIGlzRGlzcG9zZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHZpZXdLZXkgPSB1aUNsYXNzLmdldFZpZXdOYW1lKCk7XG4gICAgICAgIGlmICh0aGlzLl9vcGVuZWQuQ29udGFpbnNLZXkodmlld0tleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLl9vcGVuZWQuVmFsdWUodmlld0tleSk7XG4gICAgICAgICAgICB0aGlzLl9vcGVuZWQuUmVtb3ZlKHZpZXdLZXkpO1xuICAgICAgICAgICAgdmlldy5oaWRlKGlzRGlzcG9zZSk7XG4gICAgICAgICAgICB0aGlzLlJlbW92ZVBhbmVsKHZpZXcuUGFuZWwpO1xuICAgICAgICAgICAgaWYgKGlzRGlzcG9zZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuRGVzdHJveVZpZXcodmlldywgdWlDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZWQuQWRkKHZpZXdLZXksIHZpZXcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZpZXcudmlld1R5cGUgPT0gVmlld1R5cGUuRnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZW5lZC5Gb3JlYWNoKChrZXk6IHN0cmluZywgdmFsdWU6IEZndWlWaWV3KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS52aWV3VHlwZSAhPSBWaWV3VHlwZS5QYXJ0ICYmIHZhbHVlLnpPcmRlciA8PSB2aWV3LnpPcmRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuYWRkRnVsbEhpZGVDb3VudCgtMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRGlzcG9zZSAmJiB0aGlzLl9jbG9zZWQuQ29udGFpbnNLZXkodmlld0tleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLl9jbG9zZWQuVmFsdWUodmlld0tleSk7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZWQuUmVtb3ZlKHZpZXdLZXkpO1xuICAgICAgICAgICAgdGhpcy5EZXN0cm95Vmlldyh2aWV3LCB1aUNsYXNzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyDliKTmlq3nlYzpnaLmmK/lkKbmiZPlvIBcbiAgICBwdWJsaWMgaXNTaG93aW5nPFQgZXh0ZW5kcyBGZ3VpVmlldz4odWlDbGFzczogRmd1aUNsYXNzPFQ+KSB7XG4gICAgICAgIGNvbnN0IHZpZXdLZXkgPSB1aUNsYXNzPy5nZXRWaWV3TmFtZSgpO1xuICAgICAgICBpZiAodGhpcy5fb3BlbmVkLkNvbnRhaW5zS2V5KHZpZXdLZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICAvLyDojrflj5bmiZPlvIDnmoTnlYzpnaJcbiAgICBwdWJsaWMgZ2V0U2hvd2luZ1ZpZXc8VCBleHRlbmRzIEZndWlWaWV3Pih1aUNsYXNzOiBGZ3VpQ2xhc3M8VD4pIHtcbiAgICAgICAgY29uc3Qgdmlld0tleSA9IHVpQ2xhc3M/LmdldFZpZXdOYW1lKCk7XG4gICAgICAgIGlmICh0aGlzLl9vcGVuZWQuQ29udGFpbnNLZXkodmlld0tleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLl9vcGVuZWQuVmFsdWUodmlld0tleSk7XG4gICAgICAgICAgICByZXR1cm4gdmlld1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIC8qKlxuICAgICAqIOW9k+WJjeaYr+WQpuaciemZpOS6huaMh+WumumhtemdouS7peWklueahOWFtuS7lumhtemdouiiq+aJk+W8gFxuICAgICAqL1xuICAgIHB1YmxpYyBjaGVja090aGVyVUlPcGVuKHVpbGlzdDogRmd1aUNsYXNzPGFueT5bXSkge1xuICAgICAgICBsZXQgbGlzdCA9IFtdXG4gICAgICAgIGZvciAobGV0IGkgb2YgdWlsaXN0KSB7XG4gICAgICAgICAgICBsaXN0LnB1c2goaS5nZXRWaWV3TmFtZSgpKVxuICAgICAgICB9XG4gICAgICAgIGxldCBoYXZlb3RoZXI6IGJvb2xlYW4gPSBmYWxzZVxuICAgICAgICB0aGlzLl9vcGVuZWQuRm9yZWFjaCgoa2V5OiBzdHJpbmcsIHZhbHVlOiBGZ3VpVmlldykgPT4ge1xuICAgICAgICAgICAgaWYgKGxpc3QuaW5kZXhPZihrZXkpIDwgMCkge1xuICAgICAgICAgICAgICAgIGhhdmVvdGhlciA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIGhhdmVvdGhlclxuICAgIH1cblxuXG4gICAgcHVibGljIGlzU2hvd2luZ0J5TmFtZSh1aVZpZXdOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZW5lZC5Db250YWluc0tleSh1aVZpZXdOYW1lKTtcbiAgICB9XG4gICAgLy8g6I635Y+W5omT5byA55qE55WM6Z2iXG4gICAgcHVibGljIGdldFNob3dpbmdWaWV3QnlOYW1lKHVpVmlld05hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fb3BlbmVkLkNvbnRhaW5zS2V5KHVpVmlld05hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5fb3BlbmVkLlZhbHVlKHVpVmlld05hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHZpZXdcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBwdWJsaWMgZmluZE5vZGVCeU5hbWUodWlWaWV3TmFtZTogc3RyaW5nLCBnb05hbWU6IHN0cmluZyk6IGNjLk5vZGUge1xuICAgICAgICBpZiAodGhpcy5fb3BlbmVkLkNvbnRhaW5zS2V5KHVpVmlld05hbWUpKSB7XG4gICAgICAgICAgICBsZXQgdmlldyA9IHRoaXMuX29wZW5lZC5WYWx1ZSh1aVZpZXdOYW1lKTtcbiAgICAgICAgICAgIGxldCBnb05hbWVzID0gZ29OYW1lLnNwbGl0KFwiL1wiKVxuICAgICAgICAgICAgbGV0IGdvID0gbnVsbFxuICAgICAgICAgICAgbGV0IGdvVGVtcCA9IHZpZXdbXCJfdmlld01vZGVsXCJdW2dvTmFtZXNbMF1dO1xuICAgICAgICAgICAgaWYgKGdhbWVNZXRob2QuaXNFbXB0eShnb1RlbXApKSB7XG4gICAgICAgICAgICAgICAgZ29UZW1wID0gdmlldy5QYW5lbC5nZXRDaGlsZChnb05hbWVzWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZ29OYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChnb1RlbXA/LlBhbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGdvVGVtcCA9IGdvVGVtcC5QYW5lbD8uZ2V0Q2hpbGQoZ29OYW1lc1tpXSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnb1RlbXAgPSBnb1RlbXA/LmdldENoaWxkKGdvTmFtZXNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdvID0gZ29UZW1wXG4gICAgICAgICAgICBpZiAoIWdhbWVNZXRob2QuaXNFbXB0eShnbykpIHtcbiAgICAgICAgICAgICAgICBnby52aXNpYmxlID0gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGDnlYzpnaLvvJoke3VpVmlld05hbWV9IOaJvuS4jeWIsOebruagh+iKgueCuTogJHtnb05hbWVzfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ28/Lm5vZGUgPz8gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlUGtnPFQgZXh0ZW5kcyBGZ3VpVmlldz4odWlDbGFzczogRmd1aUNsYXNzPFQ+KSB7XG4gICAgICAgIGlmICghdGhpcy5fYWRkUGtnZWQuQ29udGFpbnNLZXkodWlDbGFzcy5nZXRQa2dOYW1lKCkpIHx8IHRoaXMuX2FkZFBrZ2VkLlZhbHVlKHVpQ2xhc3MuZ2V0UGtnTmFtZSgpKSA9PSAwKSB7XG4gICAgICAgICAgICBmZ3VpLlVJUGFja2FnZS5yZW1vdmVQYWNrYWdlKHVpQ2xhc3MuZ2V0UGtnTmFtZSgpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwicmVtb3ZlUGtnIGZhaWxcIilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhck9wZW5VSSgpIHtcbiAgICAgICAgdGhpcy5fb3BlbmVkLkZvcmVhY2goKHZpZXdLZXk6IHN0cmluZywgdmFsdWU6IEZndWlWaWV3KSA9PiB7XG4gICAgICAgICAgICB2YWx1ZS5oaWRlKCk7XG4gICAgICAgICAgICB0aGlzLlJlbW92ZVBhbmVsKHZhbHVlLlBhbmVsKTtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlZC5BZGQodmlld0tleSwgdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLl9vcGVuZWQuQ2xlYXIoKVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckFsbFVJKCkge1xuICAgICAgICB0aGlzLl9vcGVuZWQuRm9yZWFjaCgodmlld0tleTogc3RyaW5nLCB2YWx1ZTogRmd1aVZpZXcpID0+IHtcbiAgICAgICAgICAgIHZhbHVlLmhpZGUoKTtcbiAgICAgICAgICAgIHRoaXMuUmVtb3ZlUGFuZWwodmFsdWUuUGFuZWwpO1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLmNsZWFyQ2FjaGVNYXAoKVxuICAgICAgICAvLyB0aGlzLl9hZGRQa2dlZC5Gb3JlYWNoKChwa2dOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gICAgIGZndWkuVUlQYWNrYWdlLnJlbW92ZVBhY2thZ2UocGtnTmFtZSlcbiAgICAgICAgLy8gfSlcbiAgICAgICAgdGhpcy5fYWRkUGtnZWQuQ2xlYXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJDYWNoZU1hcCgpIHtcbiAgICAgICAgdGhpcy5fb3BlbmVkLkNsZWFyKClcbiAgICAgICAgdGhpcy5fY2xvc2VkLkNsZWFyKClcbiAgICB9XG5cblxuXG4gICAgT25VcGRhdGUoZWxhcHNlVGltZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29wZW5lZC5Gb3JlYWNoKChrLCB2KSA9PiB7XG4gICAgICAgICAgICB2Lk9uVXBkYXRlKGVsYXBzZVRpbWUpO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICB9XG4gICAgT25MYXRlVXBkYXRlKGVsYXBzZVRpbWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcGVuZWQuRm9yZWFjaCgoaywgdikgPT4ge1xuICAgICAgICAgICAgdi5PbkxhdGVVcGRhdGUoZWxhcHNlVGltZSk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgIH1cbiAgICBEaXNwb3NlKCk6IHZvaWQge1xuICAgICAgICAvL1RPRE8g5pyJ6ZyA6KaB5YaN6KGl5YWFXG4gICAgfVxuXG4gICAgLyoqIOWinuWKoGZndWkgcGtn6K6h5pWwICovXG4gICAgcHVibGljIEFkZFBrZ0NvdW50KHBrZ05hbWU6IHN0cmluZywgZnJvbT86IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fYWRkUGtnZWQuQ29udGFpbnNLZXkocGtnTmFtZSkpIHtcbiAgICAgICAgICAgIC8v5bey5a2Y5ZyoKytcbiAgICAgICAgICAgIGxldCBwa2dDb3VudCA9IHRoaXMuX2FkZFBrZ2VkLlZhbHVlKHBrZ05hbWUpO1xuICAgICAgICAgICAgcGtnQ291bnQrKztcbiAgICAgICAgICAgIHRoaXMuX2FkZFBrZ2VkLlJlcGxhY2UocGtnTmFtZSwgcGtnQ291bnQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRQa2dlZC5BZGQocGtnTmFtZSwgMSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdhbWVNZXRob2QuaXNFbXB0eShHYW1lRGF0YUNlbnRlcj8uc2V2QmFjaz8uc3dpdGNoPy5jbGllbnRMb2cpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtmcm9tfSAke3BrZ05hbWV9IGNvdW50OiAke3RoaXMuX2FkZFBrZ2VkLlZhbHVlKHBrZ05hbWUpfWApXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiog5YeP5bCRZmd1aSBwa2forqHmlbAgKi9cbiAgICBwdWJsaWMgRGVsUGtnQ291bnQocGtnTmFtZTogc3RyaW5nLCBmcm9tPzogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLl9hZGRQa2dlZC5Db250YWluc0tleShwa2dOYW1lKSkge1xuICAgICAgICAgICAgLy/lt7LlrZjlnKgrK1xuICAgICAgICAgICAgbGV0IHBrZ0NvdW50ID0gdGhpcy5fYWRkUGtnZWQuVmFsdWUocGtnTmFtZSk7XG4gICAgICAgICAgICBwa2dDb3VudC0tO1xuICAgICAgICAgICAgaWYgKCFnYW1lTWV0aG9kLmlzRW1wdHkoR2FtZURhdGFDZW50ZXI/LnNldkJhY2s/LnN3aXRjaD8uY2xpZW50TG9nKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3BrZ05hbWV9IGNvdW50OiAke3BrZ0NvdW50fWAsIGZyb20pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9hZGRQa2dlZC5SZXBsYWNlKHBrZ05hbWUsIHBrZ0NvdW50KTtcbiAgICAgICAgICAgIGlmIChwa2dDb3VudCA8PSAwICYmIHBrZ05hbWUgIT0gXCJDb21tb25cIikge1xuICAgICAgICAgICAgICAgIGlmICghZ2FtZU1ldGhvZC5pc0VtcHR5KEdhbWVEYXRhQ2VudGVyPy5zZXZCYWNrPy5zd2l0Y2g/LmNsaWVudExvZykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYHJlbW92ZVBhY2thZ2U6JHtwa2dOYW1lfWAsIGZyb20pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZndWkuVUlQYWNrYWdlLnJlbW92ZVBhY2thZ2UocGtnTmFtZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgQWRkUGtnQnlQa2dOYW1lKHBrZ05hbWU6IHN0cmluZywgY2I/OiBGdW5jdGlvbikge1xuICAgICAgICBpZiAoZmd1aS5VSVBhY2thZ2UuZ2V0QnlOYW1lKHBrZ05hbWUpID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIOWKoOi9vXVpcGFja2FnZVxuICAgICAgICAgICAgRmd1aUxvYWRNZ3IubG9hZFBhY2thZ2UocGtnTmFtZSwgcGtnTmFtZSwgKGVycm9yLCBwa2cpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgRXZlbnRNbmcuZW1pdChHVUlFdmVudC5TSE9XX01BU0ssIHBrZ05hbWUsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGZ3VpTWdyIExvYWRQYWNrYWdlWyR7cGtnTmFtZX1dIGVycm9yOiAke2Vycm9yfWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuQWRkUGtnQ291bnQocGtnTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFnYW1lTWV0aG9kLmlzRW1wdHkoR2FtZURhdGFDZW50ZXI/LnNldkJhY2s/LnN3aXRjaD8uY2xpZW50TG9nKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtwa2dOYW1lfSBjb3VudDogJHt0aGlzLl9hZGRQa2dlZC5WYWx1ZShwa2dOYW1lKX1gKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYiAmJiBjYigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLkFkZFBrZ0NvdW50KHBrZ05hbWUpO1xuICAgICAgICAgICAgaWYgKCFnYW1lTWV0aG9kLmlzRW1wdHkoR2FtZURhdGFDZW50ZXI/LnNldkJhY2s/LnN3aXRjaD8uY2xpZW50TG9nKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3BrZ05hbWV9IGNvdW50OiAke3RoaXMuX2FkZFBrZ2VkLlZhbHVlKHBrZ05hbWUpfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYiAmJiBjYigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgUmVtb3ZlUGtnQnlQa2dOYW1lKHBrZ05hbWU6IHN0cmluZykge1xuICAgICAgICAvL2lvc+W5s+WPsOaJjemHiuaUvu+8jOWuieWNk+W5s+WPsOS4jemHiuaUvlxuICAgICAgICBpZiAoR2FtZURhdGFDZW50ZXIucGxhdC5pbnN0YW5jZS5kZXZpY2VPUyAhPSBQbGF0Rm9ybURldlR5cGUuaW9zSDUgJiYgR2FtZURhdGFDZW50ZXIucGxhdC5pbnN0YW5jZS5kZXZpY2VPUyAhPSBQbGF0Rm9ybURldlR5cGUuaW9zICYmIEdhbWVEYXRhQ2VudGVyLnBsYXQuaW5zdGFuY2UuZGV2aWNlT1MgIT0gUGxhdEZvcm1EZXZUeXBlLmxvY2FsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5EZWxQa2dDb3VudChwa2dOYW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIEFkZFBhbmVsKHBhbmVsOiBmZ3VpLkdDb21wb25lbnQsIHpPcmRlcjogVmlld1pPcmRlcikge1xuICAgICAgICBjb25zdCBsYXllck5vZGUgPSB0aGlzLl9sYXllck5vZGVNYXAuZ2V0KHpPcmRlcik7XG4gICAgICAgIGlmIChsYXllck5vZGUpIHtcbiAgICAgICAgICAgIGxheWVyTm9kZS5hZGRDaGlsZChwYW5lbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZ3VpLkdSb290Lmluc3QuYWRkQ2hpbGQocGFuZWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVJ5YWo5bGP6Ieq6YCC5bqUXG4gICAgICAgIHBhbmVsLm1ha2VGdWxsU2NyZWVuKCk7XG4gICAgfVxuICAgIHByaXZhdGUgUmVtb3ZlUGFuZWwocGFuZWw6IGZndWkuR0NvbXBvbmVudCkge1xuICAgICAgICBmZ3VpLkdSb290Lmluc3QucmVtb3ZlQ2hpbGQocGFuZWwpO1xuICAgIH1cbiAgICBwcml2YXRlIERlc3Ryb3lWaWV3PFQgZXh0ZW5kcyBGZ3VpVmlldz4odWl2aWV3OiBGZ3VpVmlldywgdWlDbGFzczogRmd1aUNsYXNzPFQ+KSB7XG4gICAgICAgIC8vaW9z5bmz5Y+w5omN6YeK5pS+77yM5a6J5Y2T5bmz5Y+w5LiN6YeK5pS+XG4gICAgICAgIGlmIChHYW1lRGF0YUNlbnRlci5wbGF0Lmluc3RhbmNlLmRldmljZU9TICE9IFBsYXRGb3JtRGV2VHlwZS5pb3NINSAmJiBHYW1lRGF0YUNlbnRlci5wbGF0Lmluc3RhbmNlLmRldmljZU9TICE9IFBsYXRGb3JtRGV2VHlwZS5pb3MgJiYgR2FtZURhdGFDZW50ZXIucGxhdC5pbnN0YW5jZS5kZXZpY2VPUyAhPSBQbGF0Rm9ybURldlR5cGUubG9jYWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFuZWwgPSB1aXZpZXcuUGFuZWw7XG4gICAgICAgIHBhbmVsLmRpc3Bvc2UoKTtcbiAgICAgICAgdGhpcy5EZWxQa2dDb3VudCh1aUNsYXNzLmdldFBrZ05hbWUoKSk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgQ2xvc2VVSUJ5TGF5ZXIoek9yZGVyOiBWaWV3Wk9yZGVyKSB7XG4gICAgICAgIHRoaXMuX29wZW5lZC5Gb3JlYWNoKCh2aWV3S2V5OiBzdHJpbmcsIHZhbHVlOiBGZ3VpVmlldykgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlLnpPcmRlciA9PSB6T3JkZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5fb3BlbmVkLlZhbHVlKHZpZXdLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZW5lZC5SZW1vdmUodmlld0tleSk7XG4gICAgICAgICAgICAgICAgdmlldy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5SZW1vdmVQYW5lbCh2aWV3LlBhbmVsKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZWQuQWRkKHZpZXdLZXksIHZpZXcpO1xuICAgICAgICAgICAgICAgIGlmICh2aWV3LnZpZXdUeXBlID09IFZpZXdUeXBlLkZ1bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BlbmVkLkZvcmVhY2goKGtleTogc3RyaW5nLCB2YWx1ZTogRmd1aVZpZXcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS52aWV3VHlwZSAhPSBWaWV3VHlwZS5QYXJ0ICYmIHZhbHVlLnpPcmRlciA8PSB2aWV3LnpPcmRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmFkZEZ1bGxIaWRlQ291bnQoLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKiog5YWz6Zet5omA5pyJ55qEVUkgIGVsc2VWaWV3IOaOkumZpOaXoOmcgOWFs+mXreeahOeVjOmdoiAqL1xuICAgIHB1YmxpYyBDbG9zZUFsbFVJKGVsc2VWaWV3OiBzdHJpbmdbXSA9IFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29wZW5lZC5Gb3JlYWNoKCh2aWV3S2V5OiBzdHJpbmcsIHZhbHVlOiBGZ3VpVmlldykgPT4ge1xuICAgICAgICAgICAgaWYgKGVsc2VWaWV3LmluZGV4T2Yodmlld0tleSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMuX29wZW5lZC5WYWx1ZSh2aWV3S2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVuZWQuUmVtb3ZlKHZpZXdLZXkpO1xuICAgICAgICAgICAgICAgIHZpZXcuaGlkZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuUmVtb3ZlUGFuZWwodmlldy5QYW5lbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xvc2VkLkFkZCh2aWV3S2V5LCB2aWV3KTtcbiAgICAgICAgICAgICAgICBpZiAodmlldy52aWV3VHlwZSA9PSBWaWV3VHlwZS5GdWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wZW5lZC5Gb3JlYWNoKChrZXk6IHN0cmluZywgdmFsdWU6IEZndWlWaWV3KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUudmlld1R5cGUgIT0gVmlld1R5cGUuUGFydCAmJiB2YWx1ZS56T3JkZXIgPD0gdmlldy56T3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5hZGRGdWxsSGlkZUNvdW50KC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICAvLyNlbmRyZWdpb25cbn0iXX0=
|