Commit be1e5c738be332254b8a8214b300b11fc4a81778

Authored by 杨桓桓
1 parent 70bf6ae0
Exists in 2.1

del TrackingSdk

puchi_laya/bin/js/bundle.js
... ... @@ -46,7 +46,7 @@ var GameConfig = /** @class */ (function () {
46 46 exports.default = GameConfig;
47 47 GameConfig.init();
48 48  
49   -},{"./RedDrawal":3,"./TestScene":4,"./sdk/NativeAd":10,"./uitl/ScaleButtonScript":25}],2:[function(require,module,exports){
  49 +},{"./RedDrawal":3,"./TestScene":4,"./sdk/NativeAd":10,"./uitl/ScaleButtonScript":24}],2:[function(require,module,exports){
50 50 "use strict";
51 51 Object.defineProperty(exports, "__esModule", { value: true });
52 52 var GameConfig_1 = require("./GameConfig");
... ... @@ -185,7 +185,7 @@ var RedDrawal = /** @class */ (function (_super) {
185 185 }(Laya.Script));
186 186 exports.default = RedDrawal;
187 187  
188   -},{"./event/EventCenter":5,"./event/EventEnum":6,"./sdk/model/RedpacketModel":15}],4:[function(require,module,exports){
  188 +},{"./event/EventCenter":5,"./event/EventEnum":6,"./sdk/model/RedpacketModel":14}],4:[function(require,module,exports){
189 189 "use strict";
190 190 Object.defineProperty(exports, "__esModule", { value: true });
191 191 var layaMaxUI_1 = require("./ui/layaMaxUI");
... ... @@ -382,7 +382,7 @@ var TestScene = /** @class */ (function (_super) {
382 382 }(layaMaxUI_1.ui.TestSceneUI));
383 383 exports.default = TestScene;
384 384  
385   -},{"./event/EventCenter":5,"./event/EventEnum":6,"./sdk/AdManager":7,"./sdk/AppSdk":8,"./sdk/TeaSdk":12,"./sdk/model/RedpacketModel":15,"./ui/layaMaxUI":20}],5:[function(require,module,exports){
  385 +},{"./event/EventCenter":5,"./event/EventEnum":6,"./sdk/AdManager":7,"./sdk/AppSdk":8,"./sdk/TeaSdk":12,"./sdk/model/RedpacketModel":14,"./ui/layaMaxUI":19}],5:[function(require,module,exports){
386 386 "use strict";
387 387 Object.defineProperty(exports, "__esModule", { value: true });
388 388 /*
... ... @@ -562,7 +562,7 @@ var AdManager = /** @class */ (function () {
562 562 }());
563 563 exports.default = AdManager;
564 564  
565   -},{"../uitl/ObjectInstance":23,"./TTAdSdk":11,"./TeaSdk":12}],8:[function(require,module,exports){
  565 +},{"../uitl/ObjectInstance":22,"./TTAdSdk":11,"./TeaSdk":12}],8:[function(require,module,exports){
566 566 "use strict";
567 567 Object.defineProperty(exports, "__esModule", { value: true });
568 568 var ObjectInstance_1 = require("../uitl/ObjectInstance");
... ... @@ -975,7 +975,7 @@ window.onMyBridgeReady = function () {
975 975 };
976 976 };
977 977  
978   -},{"../uitl/ObjectInstance":23,"./AdManager":7,"./LuckDrawModel":9,"./model/RedpacketModel":15,"./sdkData/AppSdkData":17,"./sdkData/LuckDrawData":19}],9:[function(require,module,exports){
  978 +},{"../uitl/ObjectInstance":22,"./AdManager":7,"./LuckDrawModel":9,"./model/RedpacketModel":14,"./sdkData/AppSdkData":16,"./sdkData/LuckDrawData":18}],9:[function(require,module,exports){
979 979 "use strict";
980 980 Object.defineProperty(exports, "__esModule", { value: true });
981 981 var AppSdk_1 = require("./AppSdk");
... ... @@ -1127,7 +1127,7 @@ var LuckDrawVo = /** @class */ (function () {
1127 1127 return LuckDrawVo;
1128 1128 }());
1129 1129  
1130   -},{"../uitl/DateUtils":22,"../uitl/ObjectInstance":23,"./AppSdk":8}],10:[function(require,module,exports){
  1130 +},{"../uitl/DateUtils":21,"../uitl/ObjectInstance":22,"./AppSdk":8}],10:[function(require,module,exports){
1131 1131 "use strict";
1132 1132 Object.defineProperty(exports, "__esModule", { value: true });
1133 1133 var AdManager_1 = require("./AdManager");
... ... @@ -1338,7 +1338,7 @@ var TTAdSdk = /** @class */ (function () {
1338 1338 }());
1339 1339 exports.default = TTAdSdk;
1340 1340  
1341   -},{"../uitl/ObjectInstance":23,"./AppSdk":8,"./TeaSdk":12}],12:[function(require,module,exports){
  1341 +},{"../uitl/ObjectInstance":22,"./AppSdk":8,"./TeaSdk":12}],12:[function(require,module,exports){
1342 1342 "use strict";
1343 1343 Object.defineProperty(exports, "__esModule", { value: true });
1344 1344 var ObjectInstance_1 = require("../uitl/ObjectInstance");
... ... @@ -1380,34 +1380,7 @@ var DotKey;
1380 1380 DotKey["fullScreen"] = "fullScreen";
1381 1381 })(DotKey = exports.DotKey || (exports.DotKey = {}));
1382 1382  
1383   -},{"../uitl/ObjectInstance":23,"./AppSdk":8}],13:[function(require,module,exports){
1384   -"use strict";
1385   -Object.defineProperty(exports, "__esModule", { value: true });
1386   -var AppSdk_1 = require("./AppSdk");
1387   -var ObjectInstance_1 = require("../uitl/ObjectInstance");
1388   -var TrackingSdk = /** @class */ (function () {
1389   - function TrackingSdk() {
1390   - }
1391   - TrackingSdk.prototype.dot = function (key) {
1392   - AppSdk_1.default.I.appDotTracKing(key);
1393   - };
1394   - Object.defineProperty(TrackingSdk, "I", {
1395   - get: function () {
1396   - return ObjectInstance_1.default.get(TrackingSdk);
1397   - },
1398   - enumerable: true,
1399   - configurable: true
1400   - });
1401   - return TrackingSdk;
1402   -}());
1403   -exports.default = TrackingSdk;
1404   -var TrackingKey;
1405   -(function (TrackingKey) {
1406   - TrackingKey["RedPack1"] = "event_5";
1407   - TrackingKey["RedPack5"] = "event_6";
1408   -})(TrackingKey = exports.TrackingKey || (exports.TrackingKey = {}));
1409   -
1410   -},{"../uitl/ObjectInstance":23,"./AppSdk":8}],14:[function(require,module,exports){
  1383 +},{"../uitl/ObjectInstance":22,"./AppSdk":8}],13:[function(require,module,exports){
1411 1384 "use strict";
1412 1385 Object.defineProperty(exports, "__esModule", { value: true });
1413 1386 var ArrayUtils_1 = require("../../uitl/ArrayUtils");
... ... @@ -1493,12 +1466,11 @@ var BaseModel = /** @class */ (function () {
1493 1466 }());
1494 1467 exports.default = BaseModel;
1495 1468  
1496   -},{"../../uitl/ArrayUtils":21}],15:[function(require,module,exports){
  1469 +},{"../../uitl/ArrayUtils":20}],14:[function(require,module,exports){
1497 1470 "use strict";
1498 1471 Object.defineProperty(exports, "__esModule", { value: true });
1499 1472 var BaseModel_1 = require("./BaseModel");
1500 1473 var AdManager_1 = require("../../sdk/AdManager");
1501   -var TrackingSdk_1 = require("../../sdk/TrackingSdk");
1502 1474 var GoldConfigData_1 = require("../../sdk/sdkData/GoldConfigData");
1503 1475 var AddGoldData_1 = require("../../sdk/sdkData/AddGoldData");
1504 1476 var DateUtils_1 = require("../../uitl/DateUtils");
... ... @@ -1605,10 +1577,6 @@ var RedpacketModel = /** @class */ (function (_super) {
1605 1577 this.data.list.push(this.curRedpacket);
1606 1578 this.data.lastTime = (new Date).getTime();
1607 1579 this.data.todayCnt += 1;
1608   - if (this.data.cnt == 1)
1609   - TrackingSdk_1.default.I.dot(TrackingSdk_1.TrackingKey.RedPack1);
1610   - if (this.data.cnt == 5)
1611   - TrackingSdk_1.default.I.dot(TrackingSdk_1.TrackingKey.RedPack5);
1612 1580 this.curRedpacket = 0;
1613 1581 Util_1.default.I.setItem(Util_1.DataKey.dataCNT, this.data.cnt);
1614 1582 Util_1.default.I.setItem(Util_1.DataKey.todayCnt, this.data.todayCnt);
... ... @@ -1692,7 +1660,7 @@ var RedpacketConfigData = /** @class */ (function () {
1692 1660 return RedpacketConfigData;
1693 1661 }());
1694 1662  
1695   -},{"../../sdk/AdManager":7,"../../sdk/TrackingSdk":13,"../../sdk/sdkData/AddGoldData":16,"../../sdk/sdkData/GoldConfigData":18,"../../uitl/DateUtils":22,"../../uitl/ObjectInstance":23,"../../uitl/Util":26,"../AppSdk":8,"./BaseModel":14}],16:[function(require,module,exports){
  1663 +},{"../../sdk/AdManager":7,"../../sdk/sdkData/AddGoldData":15,"../../sdk/sdkData/GoldConfigData":17,"../../uitl/DateUtils":21,"../../uitl/ObjectInstance":22,"../../uitl/Util":25,"../AppSdk":8,"./BaseModel":13}],15:[function(require,module,exports){
1696 1664 "use strict";
1697 1665 Object.defineProperty(exports, "__esModule", { value: true });
1698 1666 var AppSdk_1 = require("../AppSdk");
... ... @@ -1724,7 +1692,7 @@ var AddGoldData = /** @class */ (function () {
1724 1692 }());
1725 1693 exports.default = AddGoldData;
1726 1694  
1727   -},{"../AppSdk":8}],17:[function(require,module,exports){
  1695 +},{"../AppSdk":8}],16:[function(require,module,exports){
1728 1696 "use strict";
1729 1697 Object.defineProperty(exports, "__esModule", { value: true });
1730 1698 var ObjectInstance_1 = require("../../uitl/ObjectInstance");
... ... @@ -1750,7 +1718,7 @@ var AppSdkData = /** @class */ (function () {
1750 1718 }());
1751 1719 exports.AppSdkData = AppSdkData;
1752 1720  
1753   -},{"../../uitl/ObjectInstance":23}],18:[function(require,module,exports){
  1721 +},{"../../uitl/ObjectInstance":22}],17:[function(require,module,exports){
1754 1722 "use strict";
1755 1723 Object.defineProperty(exports, "__esModule", { value: true });
1756 1724 var Util_1 = require("../../uitl/Util");
... ... @@ -1822,7 +1790,7 @@ var GoldConfigData = /** @class */ (function () {
1822 1790 }());
1823 1791 exports.GoldConfigData = GoldConfigData;
1824 1792  
1825   -},{"../../uitl/Util":26,"../AppSdk":8}],19:[function(require,module,exports){
  1793 +},{"../../uitl/Util":25,"../AppSdk":8}],18:[function(require,module,exports){
1826 1794 "use strict";
1827 1795 Object.defineProperty(exports, "__esModule", { value: true });
1828 1796 var ObjectInstance_1 = require("../../uitl/ObjectInstance");
... ... @@ -1865,7 +1833,7 @@ var LuckDrawData = /** @class */ (function () {
1865 1833 }());
1866 1834 exports.LuckDrawData = LuckDrawData;
1867 1835  
1868   -},{"../../uitl/ObjectInstance":23,"../../uitl/Util":26}],20:[function(require,module,exports){
  1836 +},{"../../uitl/ObjectInstance":22,"../../uitl/Util":25}],19:[function(require,module,exports){
1869 1837 "use strict";
1870 1838 Object.defineProperty(exports, "__esModule", { value: true });
1871 1839 var Scene = Laya.Scene;
... ... @@ -1887,7 +1855,7 @@ var ui;
1887 1855 REG("ui.TestSceneUI", TestSceneUI);
1888 1856 })(ui = exports.ui || (exports.ui = {}));
1889 1857  
1890   -},{}],21:[function(require,module,exports){
  1858 +},{}],20:[function(require,module,exports){
1891 1859 "use strict";
1892 1860 Object.defineProperty(exports, "__esModule", { value: true });
1893 1861 var ArrayUtils = /** @class */ (function () {
... ... @@ -1968,7 +1936,7 @@ var ArrayUtils = /** @class */ (function () {
1968 1936 }());
1969 1937 exports.default = ArrayUtils;
1970 1938  
1971   -},{}],22:[function(require,module,exports){
  1939 +},{}],21:[function(require,module,exports){
1972 1940 "use strict";
1973 1941 Object.defineProperty(exports, "__esModule", { value: true });
1974 1942 /**
... ... @@ -2263,7 +2231,7 @@ var DateUtils = /** @class */ (function () {
2263 2231 }());
2264 2232 exports.default = DateUtils;
2265 2233  
2266   -},{}],23:[function(require,module,exports){
  2234 +},{}],22:[function(require,module,exports){
2267 2235 "use strict";
2268 2236 Object.defineProperty(exports, "__esModule", { value: true });
2269 2237 var ObjectPool_1 = require("./ObjectPool");
... ... @@ -2289,7 +2257,7 @@ var ObjectInstance = /** @class */ (function () {
2289 2257 }());
2290 2258 exports.default = ObjectInstance;
2291 2259  
2292   -},{"./ObjectPool":24}],24:[function(require,module,exports){
  2260 +},{"./ObjectPool":23}],23:[function(require,module,exports){
2293 2261 "use strict";
2294 2262 Object.defineProperty(exports, "__esModule", { value: true });
2295 2263 var ObjectPool = /** @class */ (function () {
... ... @@ -2314,7 +2282,7 @@ var ObjectPool = /** @class */ (function () {
2314 2282 }());
2315 2283 exports.default = ObjectPool;
2316 2284  
2317   -},{}],25:[function(require,module,exports){
  2285 +},{}],24:[function(require,module,exports){
2318 2286 "use strict";
2319 2287 Object.defineProperty(exports, "__esModule", { value: true });
2320 2288 var ScaleButtonScript = /** @class */ (function () {
... ... @@ -2360,7 +2328,7 @@ var ScaleButtonScript = /** @class */ (function () {
2360 2328 }());
2361 2329 exports.default = ScaleButtonScript;
2362 2330  
2363   -},{}],26:[function(require,module,exports){
  2331 +},{}],25:[function(require,module,exports){
2364 2332 "use strict";
2365 2333 Object.defineProperty(exports, "__esModule", { value: true });
2366 2334 var Util = /** @class */ (function () {
... ... @@ -2399,4 +2367,4 @@ var DataKey;
2399 2367 })(DataKey = exports.DataKey || (exports.DataKey = {}));
2400 2368  
2401 2369 },{}]},{},[2])
2402   -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL0FwcGxpY2F0aW9ucy9MYXlhQWlySURFX2JldGEyXzFfMS5hcHAvQ29udGVudHMvUmVzb3VyY2VzL2FwcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwic3JjL0dhbWVDb25maWcudHMiLCJzcmMvTWFpbi50cyIsInNyYy9SZWREcmF3YWwudHMiLCJzcmMvVGVzdFNjZW5lLnRzIiwic3JjL2V2ZW50L0V2ZW50Q2VudGVyLnRzIiwic3JjL2V2ZW50L0V2ZW50RW51bS50cyIsInNyYy9zZGsvQWRNYW5hZ2VyLnRzIiwic3JjL3Nkay9BcHBTZGsudHMiLCJzcmMvc2RrL0x1Y2tEcmF3TW9kZWwudHMiLCJzcmMvc2RrL05hdGl2ZUFkLnRzIiwic3JjL3Nkay9UVEFkU2RrLnRzIiwic3JjL3Nkay9UZWFTZGsudHMiLCJzcmMvc2RrL1RyYWNraW5nU2RrLnRzIiwic3JjL3Nkay9tb2RlbC9CYXNlTW9kZWwudHMiLCJzcmMvc2RrL21vZGVsL1JlZHBhY2tldE1vZGVsLnRzIiwic3JjL3Nkay9zZGtEYXRhL0FkZEdvbGREYXRhLnRzIiwic3JjL3Nkay9zZGtEYXRhL0FwcFNka0RhdGEudHMiLCJzcmMvc2RrL3Nka0RhdGEvR29sZENvbmZpZ0RhdGEudHMiLCJzcmMvc2RrL3Nka0RhdGEvTHVja0RyYXdEYXRhLnRzIiwic3JjL3VpL2xheWFNYXhVSS50cyIsInNyYy91aXRsL0FycmF5VXRpbHMudHMiLCJzcmMvdWl0bC9EYXRlVXRpbHMudHMiLCJzcmMvdWl0bC9PYmplY3RJbnN0YW5jZS50cyIsInNyYy91aXRsL09iamVjdFBvb2wudHMiLCJzcmMvdWl0bC9TY2FsZUJ1dHRvblNjcmlwdC50cyIsInNyYy91aXRsL1V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDVkEsZ0dBQWdHO0FBQ2hH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QUFSO1FBQ0ksSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFB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cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlRoaXMgY2xhc3MgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgTGF5YUFpcklERSwgcGxlYXNlIGRvIG5vdCBtYWtlIGFueSBtb2RpZmljYXRpb25zLiAqL1xyXG5pbXBvcnQgVGVzdFNjZW5lIGZyb20gXCIuL1Rlc3RTY2VuZVwiXG5pbXBvcnQgU2NhbGVCdXR0b25TY3JpcHQgZnJvbSBcIi4vdWl0bC9TY2FsZUJ1dHRvblNjcmlwdFwiXG5pbXBvcnQgUmVkRHJhd2FsIGZyb20gXCIuL1JlZERyYXdhbFwiXG5pbXBvcnQgTmF0aXZlQWQgZnJvbSBcIi4vc2RrL05hdGl2ZUFkXCJcclxuLypcclxuKiDmuLjmiI/liJ3lp4vljJbphY3nva47XHJcbiovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVDb25maWd7XHJcbiAgICBzdGF0aWMgd2lkdGg6bnVtYmVyPTc1MDtcclxuICAgIHN0YXRpYyBoZWlnaHQ6bnVtYmVyPTEzMzQ7XHJcbiAgICBzdGF0aWMgc2NhbGVNb2RlOnN0cmluZz1cImZpeGVkd2lkdGhcIjtcclxuICAgIHN0YXRpYyBzY3JlZW5Nb2RlOnN0cmluZz1cIm5vbmVcIjtcclxuICAgIHN0YXRpYyBhbGlnblY6c3RyaW5nPVwidG9wXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25IOnN0cmluZz1cImxlZnRcIjtcclxuICAgIHN0YXRpYyBzdGFydFNjZW5lOmFueT1cIlRlc3RTY2VuZS5zY2VuZVwiO1xyXG4gICAgc3RhdGljIHNjZW5lUm9vdDpzdHJpbmc9XCJcIjtcclxuICAgIHN0YXRpYyBkZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHN0YXQ6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBwaHlzaWNzRGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBleHBvcnRTY2VuZVRvSnNvbjpib29sZWFuPXRydWU7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuICAgIHN0YXRpYyBpbml0KCl7XHJcbiAgICAgICAgdmFyIHJlZzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XHJcbiAgICAgICAgcmVnKFwiVGVzdFNjZW5lLnRzXCIsVGVzdFNjZW5lKTtcbiAgICAgICAgcmVnKFwidWl0bC9TY2FsZUJ1dHRvblNjcmlwdC50c1wiLFNjYWxlQnV0dG9uU2NyaXB0KTtcbiAgICAgICAgcmVnKFwiUmVkRHJhd2FsLnRzXCIsUmVkRHJhd2FsKTtcbiAgICAgICAgcmVnKFwic2RrL05hdGl2ZUFkLnRzXCIsTmF0aXZlQWQpO1xyXG4gICAgfVxyXG59XHJcbkdhbWVDb25maWcuaW5pdCgpOyIsImltcG9ydCBHYW1lQ29uZmlnIGZyb20gXCIuL0dhbWVDb25maWdcIjtcclxuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9zZGsvQWRNYW5hZ2VyXCI7XHJcbmltcG9ydCBSZWRwYWNrZXRNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWxcIjtcclxuaW1wb3J0IEFwcFNkayBmcm9tIFwiLi9zZGsvQXBwU2RrXCI7XHJcbmNsYXNzIE1haW4ge1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0Ly/moLnmja5JREXorr7nva7liJ3lp4vljJblvJXmk45cdFx0XHJcblx0XHRpZiAod2luZG93W1wiTGF5YTNEXCJdKSBMYXlhM0QuaW5pdChHYW1lQ29uZmlnLndpZHRoLCBHYW1lQ29uZmlnLmhlaWdodCk7XHJcblx0XHRlbHNlIExheWEuaW5pdChHYW1lQ29uZmlnLndpZHRoLCBHYW1lQ29uZmlnLmhlaWdodCwgTGF5YVtcIldlYkdMXCJdKTtcclxuXHRcdExheWFbXCJQaHlzaWNzXCJdICYmIExheWFbXCJQaHlzaWNzXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YVtcIkRlYnVnUGFuZWxcIl0gJiYgTGF5YVtcIkRlYnVnUGFuZWxcIl0uZW5hYmxlKCk7XHJcblx0XHRMYXlhLnN0YWdlLnNjYWxlTW9kZSA9IEdhbWVDb25maWcuc2NhbGVNb2RlO1xyXG5cdFx0TGF5YS5zdGFnZS5zY3JlZW5Nb2RlID0gR2FtZUNvbmZpZy5zY3JlZW5Nb2RlO1xyXG5cdFx0TGF5YS5zdGFnZS5hbGlnblYgPSBHYW1lQ29uZmlnLmFsaWduVjtcclxuXHRcdExheWEuc3RhZ2UuYWxpZ25IID0gR2FtZUNvbmZpZy5hbGlnbkg7XHJcblx0XHQvL+WFvOWuueW+ruS/oeS4jeaUr+aMgeWKoOi9vXNjZW5l5ZCO57yA5Zy65pmvXHJcblx0XHRMYXlhLlVSTC5leHBvcnRTY2VuZVRvSnNvbiA9IEdhbWVDb25maWcuZXhwb3J0U2NlbmVUb0pzb247XHJcblxyXG5cdFx0Ly/miZPlvIDosIPor5XpnaLmnb/vvIjpgJrov4dJREXorr7nva7osIPor5XmqKHlvI/vvIzmiJbogIV1cmzlnLDlnYDlop7liqBkZWJ1Zz10cnVl5Y+C5pWw77yM5Z2H5Y+v5omT5byA6LCD6K+V6Z2i5p2/77yJXHJcblx0XHRpZiAoR2FtZUNvbmZpZy5kZWJ1ZyB8fCBMYXlhLlV0aWxzLmdldFF1ZXJ5U3RyaW5nKFwiZGVidWdcIikgPT0gXCJ0cnVlXCIpIExheWEuZW5hYmxlRGVidWdQYW5lbCgpO1xyXG5cdFx0aWYgKEdhbWVDb25maWcucGh5c2ljc0RlYnVnICYmIExheWFbXCJQaHlzaWNzRGVidWdEcmF3XCJdKSBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXS5lbmFibGUoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnN0YXQpIExheWEuU3RhdC5zaG93KCk7XHJcblx0XHRMYXlhLmFsZXJ0R2xvYmFsRXJyb3IgPSB0cnVlO1xyXG5cclxuXHRcdC8v5r+A5rS76LWE5rqQ54mI5pys5o6n5Yi277yMdmVyc2lvbi5qc29u55SxSURF5Y+R5biD5Yqf6IO96Ieq5Yqo55Sf5oiQ77yM5aaC5p6c5rKh5pyJ5Lmf5LiN5b2x5ZON5ZCO57ut5rWB56iLXHJcblx0XHRMYXlhLlJlc291cmNlVmVyc2lvbi5lbmFibGUoXCJ2ZXJzaW9uLmpzb25cIiwgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCB0aGlzLm9uVmVyc2lvbkxvYWRlZCksIExheWEuUmVzb3VyY2VWZXJzaW9uLkZJTEVOQU1FX1ZFUlNJT04pO1xyXG5cdH1cclxuXHJcblx0b25WZXJzaW9uTG9hZGVkKCk6IHZvaWQge1xyXG5cdFx0Ly/mv4DmtLvlpKflsI/lm77mmKDlsITvvIzliqDovb3lsI/lm77nmoTml7blgJnvvIzlpoLmnpzlj5HnjrDlsI/lm77lnKjlpKflm77lkIjpm4bph4zpnaLvvIzliJnkvJjlhYjliqDovb3lpKflm77lkIjpm4bvvIzogIzkuI3mmK/lsI/lm75cclxuXHRcdExheWEuQXRsYXNJbmZvTWFuYWdlci5lbmFibGUoXCJmaWxlY29uZmlnLmpzb25cIiwgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCB0aGlzLm9uQ29uZmlnTG9hZGVkKSk7XHJcblx0fVxyXG5cclxuXHRvbkNvbmZpZ0xvYWRlZCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuaW5pdFNkaygpO1xyXG5cdFx0dGhpcy5sb2FkRGF0YSgpO1xyXG5cdH1cclxuXHJcblx0Lyoq5Yid5aeL5YyWU0RLICovXHJcblx0cHJpdmF0ZSBhc3luYyBpbml0U2RrKCkge1xyXG5cdFx0aWYgKEFwcFNkay5JLmlzTXlCcmlkZ2UpIHtcclxuXHRcdFx0QXBwU2RrLmluaXQoKVxyXG5cdFx0XHRhd2FpdCBBcHBTZGsuSS5pbml0U2RrKCk7XHJcblx0XHRcdHRoaXMudG9nZ2xlU2NlbmUoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdExheWEudGltZXIub25jZSgxMDAsIHRoaXMsIHRoaXMuaW5pdFNkayk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGxvYWREYXRhKCkge1xyXG5cdFx0Ly8g5aSE55CG5ri45oiP5Yqg6L29XHJcblxyXG5cclxuXHRcdC8v5Yqg6L295a6M5oiQXHJcblx0XHR0aGlzLnRvZ2dsZVNjZW5lKCk7XHJcblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjaGVja0xvYWQ6IG51bWJlciA9IDA7XHJcblx0cHJpdmF0ZSB0b2dnbGVTY2VuZSgpIHtcclxuXHRcdC8v5Yqg6L29SURF5oyH5a6a55qE5Zy65pmvXHJcblx0XHR0aGlzLmNoZWNrTG9hZCsrO1xyXG5cdFx0aWYgKHRoaXMuY2hlY2tMb2FkIDwgMikge1xyXG5cdFx0XHRyZXR1cm5cclxuXHRcdH1cclxuXHRcdEFwcFNkay5JLmhpZGVTcGxhc2goKTsvL+makOiXj+WKoOi9vemhtSDlj6/moLnmja7pnIDmsYLmlL7liLDlhbbku5bkvY3nva5cclxuXHRcdEdhbWVDb25maWcuc3RhcnRTY2VuZSAmJiBMYXlhLlNjZW5lLm9wZW4oR2FtZUNvbmZpZy5zdGFydFNjZW5lKTtcclxuXHR9XHJcbn1cclxuLy/mv4DmtLvlkK/liqjnsbtcclxubmV3IE1haW4oKTtcclxuIiwiaW1wb3J0IFJlZHBhY2tldE1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9SZWRwYWNrZXRNb2RlbFwiO1xuaW1wb3J0IHsgRXZlbnRDZW50ZXIgfSBmcm9tIFwiLi9ldmVudC9FdmVudENlbnRlclwiO1xuaW1wb3J0IHsgRXZlbnRFbnVtIH0gZnJvbSBcIi4vZXZlbnQvRXZlbnRFbnVtXCI7XG4vKipcbiAqIOS4u+eVjOmdoiAg6YeR5biB6YeR6aKdXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZERyYXdhbCBleHRlbmRzIExheWEuU2NyaXB0IHtcbiAgICAvKiogQHByb3Age25hbWU6Y29pbmxhYiwgdGlwczpcIumHkeW4gVwiLCB0eXBlOk5vZGV9Ki9cbiAgICBjb2lubGFiOiBMYXlhLkxhYmVsO1xuICAgIC8qKiBAcHJvcCB7bmFtZTp0aXBsYWIsIHRpcHM6XCLmj5DnpLpcIiwgdHlwZTpOb2RlfSovXG4gICAgdGlwbGFiOiBMYXlhLkxhYmVsO1xuXG4gICAgcHJpdmF0ZSB0b3RhbENvaW46IG51bWJlciA9IDExMDtcblxuICAgIGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9XG4gICAgb25TdGFydCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGFyKCk7XG4gICAgICAgIC8vIHRoaXMudGlwbGFiLnZpc2libGUgPSBmYWxzZTtcbiAgICB9XG4gICAgb25FbmFibGUoKSB7XG4gICAgICAgIEV2ZW50Q2VudGVyLmFkZChFdmVudEVudW0uQVBQX1NIT1csIHRoaXMsIHRoaXMudXBkYXRlU3Rhcik7XG4gICAgICAgIEV2ZW50Q2VudGVyLmFkZChFdmVudEVudW0uVVBEQVRFX0NPSU4sIHRoaXMsIHRoaXMudXBkYXRlU3Rhcik7XG4gICAgfVxuXG4gICAgb25EaXNhYmxlKCkge1xuICAgICAgICBFdmVudENlbnRlci5yZW1vdmUoRXZlbnRFbnVtLkFQUF9TSE9XLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgICAgICBFdmVudENlbnRlci5yZW1vdmUoRXZlbnRFbnVtLlVQREFURV9DT0lOLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZVN0YXIoKSB7XG4gICAgICAgIGxldCBjb2luID0gYXdhaXQgUmVkcGFja2V0TW9kZWwuSS5nZXRUb3RhbENvaW4oKTtcbiAgICAgICAgLy8gbGV0IGNvaW4gPSAxMDAwXG4gICAgICAgIHRoaXMudG90YWxDb2luID0gY29pbjtcbiAgICAgICAgdGhpcy5jb2lubGFiLnRleHQgPSAnJyArIGNvaW47XG4gICAgICAgIGxldCBzdHIgPSAn5Y+v5o+Q546wJztcbiAgICAgICAgLyoq5pu05paw5LiL5LiL5LiA5qyh5o+Q546w55qE6aKd5bqmICovXG4gICAgICAgIGxldCBuZXh0RHJhd2FsID0gYXdhaXQgUmVkcGFja2V0TW9kZWwuSS5taW5XaXRoRHJhd2FsKCk7XG4gICAgICAgIGlmICh0aGlzLnRvdGFsQ29pbiA+IDApIHtcbiAgICAgICAgICAgIGxldCBsZWZ0Q29pbiA9IG5leHREcmF3YWwgLSB0aGlzLnRvdGFsQ29pbjtcbiAgICAgICAgICAgIGlmIChsZWZ0Q29pbiA+IDApXG4gICAgICAgICAgICAgICAgc3RyID0gYOi/mOW3riR7KGxlZnRDb2luIC8gMTAwMDApLnRvRml4ZWQoMyl96YeR6aKd5Y+v5o+Q546wYDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRpcGxhYi50ZXh0ID0gc3RyO1xuICAgICAgICB0aGlzLnRpcGxhYi52aXNpYmxlID0gQm9vbGVhbihuZXh0RHJhd2FsKTtcbiAgICB9XG59IiwiaW1wb3J0IHsgdWkgfSBmcm9tIFwiLi91aS9sYXlhTWF4VUlcIjtcbmltcG9ydCBBZE1hbmFnZXIgZnJvbSBcIi4vc2RrL0FkTWFuYWdlclwiO1xuaW1wb3J0IFJlZHBhY2tldE1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9SZWRwYWNrZXRNb2RlbFwiO1xuaW1wb3J0IEFwcFNkayBmcm9tIFwiLi9zZGsvQXBwU2RrXCI7XG5pbXBvcnQgeyBEb3RLZXkgfSBmcm9tIFwiLi9zZGsvVGVhU2RrXCI7XG5pbXBvcnQgeyBFdmVudENlbnRlciB9IGZyb20gXCIuL2V2ZW50L0V2ZW50Q2VudGVyXCI7XG5pbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi9ldmVudC9FdmVudEVudW1cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdFNjZW5lIGV4dGVuZHMgdWkuVGVzdFNjZW5lVUkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICAvL+WFs+mXreWkmueCueinpuaOp++8jOWQpuWImeWwseaXoOaVjOS6hlxuICAgICAgICBMYXlhLk1vdXNlTWFuYWdlci5tdWx0aVRvdWNoRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tVGVzdFNjZW5lLS0tLS0tLScpXG4gICAgICAgIHRoaXMuTmF0aXZlQUQudmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgfVxuXG4gICAgb25FbmFibGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnRuU2VydmVyLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMub3BlblNlcnZlcik7XG4gICAgICAgIHRoaXMuYnRuRHJhd2FsLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMub3BlblBlcnNvbmFsKTtcbiAgICAgICAgdGhpcy5idG5EcmF3Lm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMub25EcmF3KTtcbiAgICAgICAgdGhpcy5idG5JbnZpdGUub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5pbnZpdGF0aW9uKTtcbiAgICAgICAgdGhpcy5idG5WaWJyYXRlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMub25WaWJyYXRlKTtcbiAgICAgICAgdGhpcy5idG5QcmVsb2FkQUQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5wcmVsb2FkQUQpO1xuICAgICAgICB0aGlzLmJ0blNob3dCYW5uZXIub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93QmFubmVyKTtcbiAgICAgICAgdGhpcy5idG5TaG93RnVsbEFkLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd0Z1bGxBZCk7XG4gICAgICAgIHRoaXMuYnRuU2hvd05hdGl2ZUFkLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd05hdGl2ZUFkKTtcbiAgICAgICAgdGhpcy5idG5TaG93SW50ZXJBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dJbnRlckFkKTtcbiAgICAgICAgdGhpcy5idG5SZXdhcmRBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dSZXdhcmRBZCk7XG4gICAgICAgIHRoaXMuYnRuUmVkcGFja2V0Lm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMub3BlblJlZHBhY2tldCk7XG5cbiAgICB9XG5cbiAgICAvKirpooTliqDovb3lub/lkYogKi9cbiAgICBhc3luYyBwcmVsb2FkQUQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1wcmVsb2FkQUQtLS0tLS0tJylcbiAgICAgICAgYXdhaXQgQWRNYW5hZ2VyLkkuaW5pdCgpO1xuICAgICAgICAvLyBNeUJyaWRnZS50ZXN0UmV0dXJuKGZ1bmN0aW9uICguLi5hcnJheSkge1xuICAgICAgICAvLyAgICAgY29uc29sZS5sb2coXCItLS0tLS0td2ViLS0tLS0tLS1vbkNsaWNrLS0tLS0+PmNvY29zIEpTLS0tLS0tLU15QnJpZGdlLnRlc3RSZXR1cm4tLS0tLS1cIiArIEpTT04uc3RyaW5naWZ5KGFycmF5KSk7XG5cbiAgICAgICAgLy8gfSk7XG4gICAgfVxuXG4gICAgLyoq5pi+56S65YWo5bGP5bm/5ZGKICovXG4gICAgc2hvd0Z1bGxBZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dGdWxsQWQtLS0tLS0tJylcbiAgICAgICAgQWRNYW5hZ2VyLkkuc2hvd0Z1bGxBZCgpO1xuICAgICAgICAvLyB2YXIgcmV0ID0gTXlCcmlkZ2UubWFwVG9TdHJpbmcoe1xuICAgICAgICAvLyAgICAgZGF0YToge1xuICAgICAgICAvLyAgICAgICAgIFwiY291bnRcIjogMiwgXCJ0aXRsZVwiOiBbeyBcIm5hbWVcIjogXCJubm5cIiwgXCJ2YWx1ZVwiOiBcIm5ubnZhbHVlXCIsIFwiZGVmYXVsdF9zaG93XCI6IDEgfVxuICAgICAgICAvLyAgICAgICAgICAgICAsIHsgXCJuYW1lXCI6IFwibW1tXCIsIFwidmFsdWVcIjogXCJtbW12YWx1ZVxcXCJhYXNkYXNkXCIgfV1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgLy8gY29uc29sZS5sb2coXCItLS0tLS0td2ViLS0tLS0tLS1vbkNsaWNrLS0tLS0+PmNvY29zIEpTLS0tLS0tLU15QnJpZGdlLm1hcFRvU3RyaW5nLS0tLS0tXCIgKyBKU09OLnN0cmluZ2lmeShyZXQpKTtcbiAgICB9XG4gICAgLyoq5pi+56S6YmFubmVyICovXG4gICAgc2hvd0Jhbm5lcigpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dCYW5uZXItLS0tLS0tJylcbiAgICAgICAgQWRNYW5hZ2VyLkkuc2hvd0Jhbm5lcigpO1xuICAgIH1cblxuICAgIC8qKuS/oeaBr+a1geW5v+WRiiAqL1xuICAgIHNob3dOYXRpdmVBZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dOYXRpdmVBZC0tLS0tLS0nKVxuICAgICAgICB0aGlzLk5hdGl2ZUFELnZpc2libGUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKuaPkuWxj+W5v+WRiiAqL1xuICAgIHNob3dJbnRlckFkKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tc2hvd0ludGVyQWQtLS0tLS0tJylcblxuICAgICAgICBBZE1hbmFnZXIuSS5zaG93SW50ZXJBZCgpO1xuICAgIH1cbiAgICAvKirmv4DlirHop4bpopHlub/lkYogKi9cbiAgICBhc3luYyBzaG93UmV3YXJkQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93UmV3YXJkQWQtLS0tLS0tJylcbiAgICAgICAgYXdhaXQgQWRNYW5hZ2VyLkkuc2hvd1Jld2FyZEFkKCd2aWRlb1R5cGUnKTtcbiAgICAgICAgLyoq5oiQ5Yqf5ZCO5omn6KGM5a+55bqU55qE5aWW5YqxICovXG4gICAgfVxuICAgIC8qKuaEj+ingeWPjemmiCAqL1xuICAgIG9wZW5TZXJ2ZXIoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1vcGVuU2VydmVyLS0tLS0tLScpXG4gICAgICAgIEFwcFNkay5JLmZlZWRiYWNrKCk7XG4gICAgfVxuXG5cbiAgICBhc3luYyBvcGVuUmVkcGFja2V0KCkge1xuICAgICAgICBsZXQgYm9sID0gUmVkcGFja2V0TW9kZWwuSS5jaGVja1JlZHBhY2tldCgpO1xuICAgICAgICBjb25zb2xlLmxvZyhib2wgKyAn57qi5YyF6I635Y+W57uT5p6c77yaY3VyUmVkcGFja2V0JyArIFJlZHBhY2tldE1vZGVsLkkuY3VyUmVkcGFja2V0KVxuICAgICAgICBpZiAoYm9sKSB7XG4gICAgICAgICAgICAvLyoq5by55Ye657qi5YyF55qE55WM6Z2iLCAg5pqC5pe25aSE55CG5oiQIOebtOaOpeeci+W5v+WRiuiOt+WPlumHkeW4gSAqL1xuICAgICAgICAgICAgQWRNYW5hZ2VyLkkuc2hvd1Jld2FyZEFkKERvdEtleS5yZXdhcmRfYWQpLnRoZW4oYXN5bmMgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5Yqg6YeR5biBXCIpXG4gICAgICAgICAgICAgICAgbGV0IGNvaW4gPSBhd2FpdCBSZWRwYWNrZXRNb2RlbC5JLmFkZENvaW4oKTsgLy8g55yL5a6M5bm/5ZGK6I635Y+W6ZKx77yI5q2k5pe25bey57uP5Yqg5Yiw6LSm5oi35LqG77yM5pqC5pyq5o+Q5L6b5o+Q5YmN55+l6YGT6I635Y+W5aSa5bCR6ZKx55qE5pa55rOV77yJXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLojrflj5bkuobpkrFcIiwgY29pbilcbiAgICAgICAgICAgICAgICBSZWRwYWNrZXRNb2RlbC5JLmdldFJlcGFja2V0KCk7Ly/orqHmlbBcbiAgICAgICAgICAgICAgICAvKirmm7TmlrDln7rmnKzmmL7npLogKi9cbiAgICAgICAgICAgICAgICBFdmVudENlbnRlci5lbWl0KEV2ZW50RW51bS5VUERBVEVfQ09JTik7XG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib25WaWRlbyBlcnJvclwiKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCfnuqLljIXojrflj5bnu5PmnpzvvJonICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXG4gICAgICAgIC8vIFZpZXdNYW5hZ2VyLkkub3BlblBvcHdpbihSZWRwYWNrZXRQb3B3aW4sIDApO1xuICAgIH1cblxuICAgIC8qKuaJk+W8gOS4quS6uuS4reW/gyAqL1xuICAgIG9wZW5QZXJzb25hbCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLW9wZW5TZXJ2ZXItLS0tLS0tJylcbiAgICAgICAgQXBwU2RrLkkucGVyc29uYWwoKTtcbiAgICB9XG4gICAgLyoq6YKA6K+35aW95Y+LICovXG4gICAgaW52aXRhdGlvbigpIHtcbiAgICAgICAgQXBwU2RrLkkuaW52aXRhdGlvbigpO1xuICAgIH1cbiAgICAvL+mch+WKqFxuICAgIHByaXZhdGUgb25WaWJyYXRlKCkge1xuICAgICAgICBBcHBTZGsuSS52aWJyYXRlKDApXG4gICAgfVxuXG5cbiAgICBnZXRQcm9wcyhkYXRhKSB7XG4gICAgICAgIGxldCBib29zdGVyO1xuICAgICAgICBsZXQgcmV3YXJkTnVtID0gZGF0YS5udW07XG4gICAgICAgIGxldCB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAvKipcbiAgICAgICAgICog5aSE55CG5ri45oiP5Lit55qE6YGT5YW35pi+56S6XG4gICAgICAgICAqL1xuICAgICAgICAvLyBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgLy8gICAgIGNhc2UgNDpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuUmVtb3ZlO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSA2OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5DaGFuZ2U7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vICAgICBjYXNlIDU6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLlJlZnJlc2g7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vICAgICBjYXNlIDc6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLlJhbmRSZW1vdmU7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vICAgICBjYXNlIDM6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLlN0YXI7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5vcGVuUG9wd2luKFJlY2VpdmVQcm9wc1BvcHdpbiwgYm9vc3RlciwgcmV3YXJkTnVtKTtcblxuICAgIH1cbiAgICAvKipcbiAgICAgKiDnnIvlub/lkYrojrflvpfnuqLljIVcbiAgICAgKi9cbiAgICBhc3luYyB3YXRjaEFEQ29pbigpIHtcbiAgICAgICAgYXdhaXQgQWRNYW5hZ2VyLkkuc2hvd1Jld2FyZEFkKCd2aWRlb1R5cGUnKTtcbiAgICAgICAgdGhpcy5nZXRDb2luKCk7XG4gICAgfVxuICAgIC8qKuebtOaOpeiOt+W+l+e6ouWMhSAqL1xuICAgIGdldENvaW4oKSB7XG4gICAgICAgIC8vXGLliLfmlrDmgLvph5HluIFcbiAgICAgICAgLy8gQXBwTWFuYWdlci5JLnJlZHBhY2tldC5nZXRSZXBhY2tldCgpXG4gICAgICAgIC8vIFZpZXdNYW5hZ2VyLkkub3BlblBvcHdpbihSZWRQYWNrZXRSZXdhcmQsIDIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25EcmF3KCkge1xuICAgICAgICBBcHBTZGsuSS5vcGVuUmV3YXJkKClcbiAgICB9XG59IiwiaW1wb3J0IHsgRXZlbnRFbnVtIH0gZnJvbSBcIi4vRXZlbnRFbnVtXCI7XG5cbi8qXG4qIG5hbWU7XG4qL1xuZXhwb3J0IGNsYXNzIEV2ZW50Q2VudGVyIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IExheWEuRXZlbnREaXNwYXRjaGVyO1xuICAgIHByaXZhdGUgc3RhdGljIGdldCBJKCk6IExheWEuRXZlbnREaXNwYXRjaGVyIHtcbiAgICAgICAgd2luZG93WydldiddID0gdGhpcy5faW5zdGFuY2U7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgTGF5YS5FdmVudERpc3BhdGNoZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZW1pdChldmVudDogRXZlbnRFbnVtLCAuLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuSS5ldmVudChldmVudC50b1N0cmluZygpLCBhcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFkZCh0eXBlOiBFdmVudEVudW0sIGNhbGxlcjogYW55LCBsaXN0ZW5lcjogRnVuY3Rpb24sIGFyZ3M/OiBBcnJheTxhbnk+KSB7XG4gICAgICAgIHRoaXMuSS5vbih0eXBlLnRvU3RyaW5nKCksIGNhbGxlciwgbGlzdGVuZXIsIGFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVtb3ZlKHR5cGU6IEV2ZW50RW51bSwgY2FsbGVyOiBhbnksIGxpc3RlbmVyOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLkkub2ZmKHR5cGUudG9TdHJpbmcoKSwgY2FsbGVyLCBsaXN0ZW5lcik7XG4gICAgfVxufSIsImV4cG9ydCBlbnVtIEV2ZW50RW51bSB7XG5cblx0Q0hFQ0tfUkVEUEFDS0VUID0gPGFueT4nY2hlY2tfcmVkcGFja2V0Jyxcblx0QVBQX1NIT1cgPSA8YW55PidhcHAuc2hvdycsXG5cdEFQUF9ISURFID0gPGFueT4nYXBwLmhpZGUnLFxuXG5cblx0VVBEQVRFX0NPSU4gPSA8YW55Pid1cGRhdGUuY29pbicsXG5cbn0iLCJpbXBvcnQgVFRBZFNkayBmcm9tIFwiLi9UVEFkU2RrXCI7XHJcbmltcG9ydCB7IEFwcFNka0RhdGEgfSBmcm9tIFwiLi9zZGtEYXRhL0FwcFNka0RhdGFcIjtcclxuaW1wb3J0IFRlYVNkaywgeyBEb3RLZXkgfSBmcm9tIFwiLi9UZWFTZGtcIjtcclxuaW1wb3J0IE9iamVjdEluc3RhbmNlIGZyb20gXCIuLi91aXRsL09iamVjdEluc3RhbmNlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZE1hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBsYXN0VmlkZW9UaW1lOiBudW1iZXI7XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgIHRoaXMucHJlbG9hZEJhbm5lcigpO1xyXG4gICAgICAgIHRoaXMucHJlbG9hZEZ1bGxBZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZWxvYWRCYW5uZXIoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRCYW5uZXJFeHByZXNzQWQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlbG9hZFJld2FyZEFkKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5zaG93UmV3YXJkVmlkZW9BZCgxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVsb2FkRnVsbEFkKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoMSk7XHJcbiAgICB9XHJcbiAgICBwcmVsb2FkTmF0aXZlQWRZTEgoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWROYXRpdmVBZFlMSCgxLCAxLCA2MDAsIDMwMCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlbG9hZEludGVyQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLnNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZCgxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVsb2FkTmF0aXZlQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRGdWxsU2NyZWVuVmlkZW9BZCgxKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUFkdmVyRGlhbG9nKCkge1xyXG4gICAgICAgIGlmICghTGF5YS5Ccm93c2VyLm9uQW5kcm9pZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFRUQWRTZGsuSS5jbG9zZUFkdmVyRGlhbG9nKClcclxuICAgIH1cclxuICAgIGNsb3NlQWRCYW5uZXIoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmNsb3NlQWRCYW5uZXIoKVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dSZXdhcmRBZChwb2ludDogRG90S2V5IHwgc3RyaW5nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJldCA9IGF3YWl0IFRUQWRTZGsuSS5zaG93UmV3YXJkVmlkZW9BZCgwLCBwb2ludCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubGFzdFZpZGVvVGltZSA9IExheWEudGltZXIuY3VyclRpbWVyO1xyXG4gICAgICAgICAgICAvLyB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJldCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgICAgIC8vIC8vIOWKoOi9vea/gOWKseinhumikeWksei0peiwg+eUqOWFqOWxj+inhumikeW5tui/lOWbnuaIkOWKn++8gVxyXG4gICAgICAgICAgICAvLyB0aGlzLnNob3dGdWxsQWQoKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlcyk7XHJcbiAgICAgICAgICAgIC8vIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAvLyB9KVxyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGFzeW5jIHNob3dGdWxsQWQoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJldCA9IGF3YWl0IFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoKTtcclxuXHJcbiAgICAgICAgICAgIFRlYVNkay5JLmRvdChEb3RLZXkuZnVsbFNjcmVlbiwgeyBmcm9tOiAnc2hvdycgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEZ1bGxBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJldCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRGdWxsQWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaG93SW50ZXJBZCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRJbnRlckFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEludGVyQWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgY2hlY2tWaWRlb0luQ2QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFZpZGVvVGltZSAmJiAoTGF5YS50aW1lci5jdXJyVGltZXIgLSB0aGlzLmxhc3RWaWRlb1RpbWUgPD0gMzAwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dCYW5uZXIoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRCYW5uZXJFeHByZXNzQWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TmF0aXZlQWQoeCwgeSwgdywgaCwgcHJlbG9hZCA9IDApIHtcclxuICAgICAgICBUVEFkU2RrLkkubG9hZE5hdGl2ZUV4cHJlc3NBZCh4LCB5LCB3LCBoLCBwcmVsb2FkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDkvJjph4/msYfkv6Hmga/mtYHlub/lkYpcclxuICAgIHNob3dOYXRpdmVBZFlMSCh4LCB5LCB3LCBoLCBwcmVsb2FkID0gMCkge1xyXG4gICAgICAgIHJldHVybiBUVEFkU2RrLkkubG9hZE5hdGl2ZUFkWUxIKHgsIHksIHcsIGgsIHByZWxvYWQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5Mb2FkTmF0aXZlQWRFdmVudCgpIHtcclxuICAgICAgICBUVEFkU2RrLkkub3BlbkxvYWROYXRpdmVBZEV2ZW50KClcclxuICAgIH1cclxuXHJcblxyXG4gICAgc3RhdGljIGdldCBJKCk6IEFkTWFuYWdlciB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChBZE1hbmFnZXIpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IE9iamVjdEluc3RhbmNlIGZyb20gXCIuLi91aXRsL09iamVjdEluc3RhbmNlXCI7XG5pbXBvcnQgQWRNYW5hZ2VyIGZyb20gXCIuL0FkTWFuYWdlclwiO1xuaW1wb3J0IFJlZHBhY2tldE1vZGVsIGZyb20gXCIuL21vZGVsL1JlZHBhY2tldE1vZGVsXCI7XG5pbXBvcnQgTHVja0RyYXdNb2RlbCBmcm9tIFwiLi9MdWNrRHJhd01vZGVsXCI7XG5pbXBvcnQgeyBBcHBTZGtEYXRhIH0gZnJvbSBcIi4vc2RrRGF0YS9BcHBTZGtEYXRhXCI7XG5pbXBvcnQgeyBMdWNrRHJhd0RhdGEgfSBmcm9tIFwiLi9zZGtEYXRhL0x1Y2tEcmF3RGF0YVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBTZGsge1xuICAgIHByaXZhdGUgX3dpZHRoOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfY2hhbm5lbDogc3RyaW5nO1xuICAgIHByaXZhdGUgX3ZlcnNpb246IHN0cmluZztcbiAgICBwcml2YXRlIF9sZXZlbDogbnVtYmVyO1xuICAgIHByaXZhdGUgX2dhbWVDb25maWc6IG51bWJlcjtcblxuICAgIHB1YmxpYyBwYW5nb2xpbklkOiBzdHJpbmc7XG4gICAgcHVibGljIGFkbmV0SWQ6IHN0cmluZztcbiAgICBwdWJsaWMgdWlkOiBudW1iZXJcbiAgICBwdWJsaWMgaXNNeUJyaWRnZTogYm9vbGVhblxuICAgIHB1YmxpYyBpc0hpZGU6IGJvb2xlYW5cblxuICAgIHN0YXRpYyBhc3luYyBpbml0KCkge1xuICAgICAgICBBcHBTZGsuSS5nZXRTeXN0ZW1JbmZvKClcbiAgICAgICAgQXBwU2RrLkkuaW5pdEdhbWVDb25maWcoKTtcbiAgICAgICAgQWRNYW5hZ2VyLkkuaW5pdCgpOy8v6aKE5Yqg6L295bm/5ZGKIFxuICAgICAgICBhd2FpdCBPYmplY3RJbnN0YW5jZS5nZXQoUmVkcGFja2V0TW9kZWwpLmluaXQoKTtcbiAgICAgICAgTHVja0RyYXdNb2RlbC5JLmluaXQoKTtcbiAgICB9XG5cbiAgICBpbml0U2RrKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRVc2VySW5mbygpO1xuICAgICAgICAgICAgcmVzb2x2ZSgxKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IG15QnJpZGdlKCkge1xuICAgICAgICBpZiAodHlwZW9mIE15QnJpZGdlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIE15QnJpZGdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignIG5vIHJlZ2lzdGVyIG15QnJpZGdlISEhJylcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbiAgICAvKirojrflj5bln7rmnKzniYjmnKzkv6Hmga/ku6Xlj4rmiYvmnLrnmoTphY3nva4gKi9cbiAgICBnZXRTeXN0ZW1JbmZvKGtleTogbnVtYmVyID0gMCkge1xuICAgICAgICBsZXQgcmV0ID0gdGhpcy5teUJyaWRnZS5nZXRTeXN0ZW1JbmZvKGtleSk7XG4gICAgICAgIGxldCB7IHcsIGgsIHZlcnNpb25OYW1lLCBjaGFubmVsLCBwYW5nb2xpbiwgYWRuZXQsIGxldmVsIH0gPSBKU09OLnBhcnNlKHJldCk7XG4gICAgICAgIFt0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0LCB0aGlzLl92ZXJzaW9uLFxuICAgICAgICB0aGlzLl9jaGFubmVsLCB0aGlzLnBhbmdvbGluSWQsXG4gICAgICAgIHRoaXMuYWRuZXRJZCwgdGhpcy5fbGV2ZWxdID0gW3csIGgsIHZlcnNpb25OYW1lLCBjaGFubmVsLCBwYW5nb2xpbiwgYWRuZXQsIGxldmVsXTtcblxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VXNlckluZm8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIi0tLS0tLS0tLS0tLS1nZXRVc2VySW5mb+WbnuiwgyDliY0tLS0tLS0tLS0tLS0tLS1cIilcbiAgICAgICAgICAgIHRoaXMubXlCcmlkZ2UuZ2V0R2FtZVVzZXJJbmZvKChyZXQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIi0tLS0tLS0tLS0tLS1nZXRVc2VySW5mb+Wbnuiwgy0tLS0tLS0tLS0tLS0tLVwiLCByZXQpXG4gICAgICAgICAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmV0KTtcbiAgICAgICAgICAgICAgICBBcHBTZGtEYXRhLkkuaW5pdERhdGEocmVzKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKDEpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBpbml0R2FtZUNvbmZpZygpIHtcbiAgICAgICAgdGhpcy5fZ2FtZUNvbmZpZyA9IHRoaXMuZ2V0R2FtZUNvbmZpZygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmch+WKqFxuICAgICAqIEBwYXJhbSBrZXkgMCDnn63pnIfliqggMSDplb/pnIfliqhcbiAgICAgKi9cbiAgICB2aWJyYXRlKGtleTogbnVtYmVyID0gMCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLm9wZW5TeXN0ZW1GdW4oa2V5KTtcbiAgICB9XG5cbiAgICAvKirpmpDol4/lkK/liqjlsY8gKi9cbiAgICBoaWRlU3BsYXNoKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmhpZGVTcGxhc2goKTtcbiAgICB9XG5cbiAgICAvKirlvLnlh7rmj5DnjrAgKi9cbiAgICB3aXRoRHJhd2FsKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLndpdGhEcmF3YWwoKTtcbiAgICB9XG4gICAgLyoq5oSP6KeB5Y+N6aaIICovXG4gICAgZmVlZGJhY2soKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuZmVlZGJhY2soKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICoga2V5IOm7mOiupDAg77yM562+5YiwIDFcbiAgICAgKi9cbiAgICBwZXJzb25hbCgpIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5wZXJzb25hbCgpO1xuICAgIH1cbiAgICAvKirpgoDor7flpb3lj4sqL1xuICAgIGludml0YXRpb24oKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuaW52aXRhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKumCgOivt+WlveWPiyovXG4gICAgb3BlblJld2FyZCgpIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5vcGVuUmV3YXJkKCk7XG4gICAgfVxuICAgIC8qKuetvuWIsCovXG4gICAgb3BlblNpZ25pbigpIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5vcGVuU2luZ2luKCk7XG4gICAgfVxuXG4gICAgcHV0RGF0YShrZXk6IFN0cmluZywgdmFsdWU6IFN0cmluZykge1xuICAgICAgICB0aGlzLm15QnJpZGdlLnB1dERhdGEoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBrZXkgIOWtmOaVsOaNrueahOaXtuWAmeeahOWUr+S4gGtleVxuICAgICAqIEByZXR1cm4gIOWtmOWCqOeahOaVsOaNrlxuICAgICAqICovXG4gICAgZ2V0RGF0YShrZXk6IFN0cmluZykge1xuICAgICAgICBsZXQgcmV0ID0gdGhpcy5teUJyaWRnZS5nZXREYXRhKGtleSk7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5ri45oiP6YWN572uXG4gICAgICovXG4gICAgcHVibGljIGdldEdhbWVDb25maWcoKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLm15QnJpZGdlLmdldEdhbWVDb25maWcoKTtcbiAgICAgICAgY29uc29sZS5sb2coXCLojrflj5bmuLjmiI/phY3nva5cIixKU09OLnN0cmluZ2lmeShyZXN1bHQpKVxuICAgICAgICBMdWNrRHJhd0RhdGEuSS5pbml0RGF0YShKU09OLnBhcnNlKHJlc3VsdClbJ2RyYXcnXSk7Ly/ovaznm5jmlbDmja7phY3nva5cbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzdWx0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICog6KaB5rGC5Y+R5pS+6YeR5biBXG4gICAgICogQHBhcmFtIGtleSAx57qi5YyFXG4gICAgICovXG4gICAgYXN5bmMgYWRkR29sZChrZXkgPSAxKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubXlCcmlkZ2UuYWRkR29sZChrZXksIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLopoHmsYLlj5HmlL7ph5HluIFcIixKU09OLnN0cmluZ2lmeShyZXMpKVxuICAgICAgICAgICAgICAgIHJlcyA9IEpTT04ucGFyc2UocmVzKVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29kZSwgZGF0YSwgbXNnIH0gPSByZXM7XG4gICAgICAgICAgICAgICAgaWYgKCcwJyA9PT0gY29kZSB8fCAhY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIOimgeaxguWPkeaUvumHkeW4gSDlj6/nv7vlgI3nsbvlnotcbiAgICAgKi9cbiAgICBhc3luYyByZXdhcmRJbmZvKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm15QnJpZGdlLnJld2FyZEluZm8ocmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXMgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIGRhdGEsIG1zZyB9ID0gcmVzO1xuICAgICAgICAgICAgICAgIGlmICgnMCcgPT09IGNvZGUgfHwgIWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhLmNvaW4pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChtc2cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cbiAgICAvKipcbiAgICAgKiDojrflj5blj4zlgI3ph5HluIFcbiAgICAgKiBAcGFyYW0gdHlwZSAx5Y6f6YeR5biBIDLlj4zlgI3ph5HluIFcbiAgICAgKi9cbiAgICBhc3luYyB0d29mb2xkUmV3YXJkKHR5cGU6IG51bWJlciA9IDEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5teUJyaWRnZS50d29mb2xkUmV3YXJkKHR5cGUsIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgcmVzID0gSlNPTi5wYXJzZShyZXMpXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2RlLCBkYXRhLCBtc2cgfSA9IHJlcztcbiAgICAgICAgICAgICAgICBpZiAoJzAnID09PSBjb2RlIHx8ICFjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YS5jb2luKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKirojrflj5bmgLvph5HluIEgKi9cbiAgICBhc3luYyBteUNvaW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubXlCcmlkZ2UubXlDb2luKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgcmVzID0gSlNPTi5wYXJzZShyZXMpXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2RlLCBkYXRhLCBtc2cgfSA9IHJlcztcbiAgICAgICAgICAgICAgICBpZiAoJzAnID09PSBjb2RlIHx8ICFjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YVsnY29pbiddKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChtc2cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuXG4gICAgLyoq6I635Y+W5b2T5YmN5o+Q546w55qE5qGj5L2NICovXG4gICAgYXN5bmMgbWluV2l0aERyYXdhbCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5teUJyaWRnZS5taW5XaXRoRHJhd2FsKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgcmVzID0gSlNPTi5wYXJzZShyZXMpXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2RlLCBkYXRhLCBtc2cgfSA9IHJlcztcbiAgICAgICAgICAgICAgICBpZiAoJzAnID09PSBjb2RlIHx8ICFjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YVsnbW9uZXknXSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKirkuIrmiqXln4vngrkgKi9cbiAgICBhcHBEb3RMb2coa2V5OiBzdHJpbmcsIHZhbHVlPykge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmFwcERvdExvZyhrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgLyoq54Ot5LqR5omT54K5ICovXG4gICAgYXBwRG90VHJhY0tpbmcoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5hcHBEb3RUcmFjS2luZyhrZXkpO1xuICAgIH1cblxuICAgIHNldENhbGxiYWNrKGZ1bk5hbWU6IHN0cmluZywgcHJhbWFzPzogYW55KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zZXRDYWxsYmFjay0tLS0gdGhpcy5teUJyaWRnZS0tLScgKyBKU09OLnN0cmluZ2lmeSh0aGlzLm15QnJpZGdlKSlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMubXlCcmlkZ2VbZnVuTmFtZV0ocHJhbWFzLCByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB7IGNvZGUsIGRhdGEgfSA9IEpTT04ucGFyc2UocmVzKTtcbiAgICAgICAgICAgICAgICBpZiAoJzAnID09PSBjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY2xvc2VBZHZlckRpYWxvZygpIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5jbG9zZUFkdmVyRGlhbG9nKCk7XG4gICAgfVxuICAgIGNsb3NlQWRCYW5uZXIoKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuY2xvc2VBZEJhbm5lcigpO1xuICAgIH1cbiAgICAvKirmv4DlirHop4bpopEgKi9cbiAgICBzaG93UmV3YXJkVmlkZW9BZCh2YWx1ZTogSVZpZGVvLCBKQkNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLm15QnJpZGdlLnNob3dSZXdhcmRWaWRlb0FkKHZhbHVlLCBKQkNhbGxiYWNrKVxuICAgIH1cbiAgICAvKiog5YWo5bGP5bm/5ZGKKi9cbiAgICBsb2FkRnVsbFNjcmVlblZpZGVvQWQoZGF0YTogYW55LCBKQkNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmxvYWRGdWxsU2NyZWVuVmlkZW9BZChkYXRhLCBKQkNhbGxiYWNrKVxuICAgIH1cbiAgICAvKirkv6Hmga/mtYHlub/lkYogKi9cbiAgICBsb2FkTmF0aXZlRXhwcmVzc0FkKGRhdGE6IGFueSwgSkJDYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5sb2FkTmF0aXZlRXhwcmVzc0FkKGRhdGEsIEpCQ2FsbGJhY2spXG4gICAgfVxuICAgIC8qKuS/oeaBr+a1geW5v+WRii0g5LyY6YeP5rGHICovXG4gICAgbG9hZE5hdGl2ZUFkWUxIKGRhdGE6IGFueSwgSkJDYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5sb2FkTmF0aXZlQWQoZGF0YSwgSkJDYWxsYmFjaylcbiAgICB9XG4gICAgLy8g5omT5byA5L+h5oGv5rWBLeS8mOmHj+axh1xuICAgIG9wZW5Mb2FkTmF0aXZlQWRFdmVudCgpe1xuICAgICAgICB0aGlzLm15QnJpZGdlLm9wZW5Mb2FkTmF0aXZlQWRFdmVudCgpXG4gICAgfVxuICAgIC8qKmJhbm5lciAqL1xuICAgIGxvYWRCYW5uZXJFeHByZXNzQWQoZGF0YTogYW55LCBKQkNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmxvYWRCYW5uZXJFeHByZXNzQWQoZGF0YSwgSkJDYWxsYmFjaylcbiAgICB9XG4gICAgLyoq5o+S5bGP5bm/5ZGKICovXG4gICAgc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKGRhdGE6IGFueSwgSkJDYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5zaG93SW50ZXJhY3Rpb25FeHByZXNzQWQoZGF0YSwgSkJDYWxsYmFjaylcbiAgICB9XG5cbiAgICBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgICB9XG4gICAgZ2V0IHdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgfVxuXG4gICAgZ2V0IGhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICB9XG5cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnNpb247XG4gICAgfVxuXG4gICAgZ2V0IGNoYW5uZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgYnJpZGdlKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgZ2FtZUNvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dhbWVDb25maWc7XG5cbiAgICB9XG4gICAgc3RhdGljIGdldCBJKCk6IEFwcFNkayB7XG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoQXBwU2RrKTtcbiAgICB9XG5cbiAgICBcbn1cbi8vICAgICAvL+i/memHjOaYr+a1j+iniOWZqOeOr+Wig+S4i++8jCDmjqXmlLZ3ZWLkvKDov4fmnaXnmoTmtojmga9cbndpbmRvdy5vbk15QnJpZGdlUmVhZHkgPSAoKSA9PiB7XG4gICAgQXBwU2RrLkkuaXNNeUJyaWRnZSA9IHRydWU7XG4gICAgY29uc29sZS5sb2coXCJvbk15QnJpZGdlUmVhZHkgbG9hZCBmaW5pc2gsIGNvc3Q6XCIgKyAobmV3IERhdGUoKS5nZXRUaW1lKCkpICsgXCJtc1wiKTtcbiAgICBNeUJyaWRnZS5BcHAub25SZXN1bWUgPSAoLi4ucmV0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCcgICAgIGxheWEgb25SZXN1bWUnLCByZXQpXG4gICAgfVxuICAgIE15QnJpZGdlLkFwcC5vblBhdXNlID0gKC4uLnJldCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnICAgIGxheWEgb25QYXVzZScsIHJldClcbiAgICB9XG59XG5cbmludGVyZmFjZSBJVmlkZW8ge1xuICAgIHByZWxvYWRpbmc6IG51bWJlcixcbiAgICB0eXBlOiBudW1iZXIsXG59IiwiXHJcbmltcG9ydCBBcHBTZGsgZnJvbSBcIi4vQXBwU2RrXCI7XHJcbmltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xyXG5pbXBvcnQgRGF0ZVV0aWxzIGZyb20gXCIuLi91aXRsL0RhdGVVdGlsc1wiO1xyXG5cclxuLyoq6L2s55uYIOiOt+WPlui9rOebmOacuuS8mueahCAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMdWNrRHJhd01vZGVsIHtcclxuICAgIHByaXZhdGUgX2RhdGE6IEx1Y2tEcmF3RGF0YTtcclxuXHJcbiAgICBwcml2YXRlIHByb3BSZW1vdmU6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIHByb3BDaGFuZ2U6IG51bWJlciA9IDA7XHJcbiAgICBhc3luYyBpbml0KCkge1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSBhd2FpdCB0aGlzLmluaXREYXRhKCk7XHJcbiAgICAgICAgQXBwU2RrLkkucHV0RGF0YSgnbHVja0RyYXdQcm9wJywgSlNPTi5zdHJpbmdpZnkoeyByZW1vdmU6IDAsIGNoYW5nZTogMCB9KSlcclxuICAgICAgICBBcHBTZGsuSS5wdXREYXRhKCdMdWNrRHJhd1RvU2lnbicsIEpTT04uc3RyaW5naWZ5KHsgaXN0b1NpZ25pbjogMCB9KSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0RGF0YSgpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IG5ldyBMdWNrRHJhd0RhdGE7XHJcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gTGF5YS5Mb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTHVja0RyYXdMYXN0VGltZScpIHx8ICcwJztcclxuICAgICAgICBkYXRhLmx1Y2tEcmF3TGFzdFRpbWUgPSBwYXJzZUludChsYXN0VGltZSk7XHJcbiAgICAgICAgbGV0IGxhc3QgPSBEYXRlVXRpbHMudGltZURheShkYXRhLmx1Y2tEcmF3TGFzdFRpbWUpO1xyXG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcclxuICAgICAgICBpZiAobGFzdCAhPSB0b2RheSkge1xyXG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGVVdGlscy5ub3dUaW1lLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0x1Y2tEcmF3TGFzdFRpbWUnLCBsYXN0VGltZSk7XHJcbiAgICAgICAgICAgIGRhdGEubHVja0RyYXdMYXN0VGltZSA9IHBhcnNlSW50KGxhc3RUaW1lKTtcclxuICAgICAgICAgICAgLyoq5Yid5aeL5YyW5pWw5o2uXHJcbiAgICAgICAgICAgICAqIDEg562+5YiwXHJcbiAgICAgICAgICAgICAqIDIg6KeG6aKRXHJcbiAgICAgICAgICAgICAqIDMg5pGH5LiA5pGHXHJcbiAgICAgICAgICAgICAqIDQg57qi5YyFXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBkYXRhLmxpc3QgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGxpc3QgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDQ7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gbmV3IEx1Y2tEcmF3Vm87XHJcbiAgICAgICAgICAgICAgICBpdGVtLnR5cGUgPSBpbmRleCArIDE7XHJcbiAgICAgICAgICAgICAgICBpdGVtLm51bSA9IDA7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmlzVXNlID0gMDtcclxuICAgICAgICAgICAgICAgIGl0ZW0udXNlTnVtID0gMDtcclxuICAgICAgICAgICAgICAgIGxpc3QucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRhLmxpc3QgPSBsaXN0O1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgbHVja0RyYXdEYXRhOiBhbnkgPSBhd2FpdCBBcHBTZGsuSS5nZXREYXRhKCdMdWNrRHJhd0RhdGEnKTtcclxuICAgICAgICAgICAgaWYgKGx1Y2tEcmF3RGF0YSlcclxuICAgICAgICAgICAgICAgIGRhdGEubGlzdCA9IGx1Y2tEcmF3RGF0YS5saXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBBcHBTZGsuSS5wdXREYXRhKCdMdWNrRHJhd0RhdGEnLCBKU09OLnN0cmluZ2lmeShkYXRhKSlcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuICAgIGdldCBkYXRhKCk6IEx1Y2tEcmF3RGF0YSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlRGF0YShpbmRleDogbnVtYmVyLCBhZGROdW06IG51bWJlciA9IDEpIHtcclxuICAgICAgICBpZih0aGlzLmRhdGEpe1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEubGlzdFtpbmRleF0ubnVtICs9IGFkZE51bTtcclxuICAgICAgICAgICAgQXBwU2RrLkkucHV0RGF0YSgnTHVja0RyYXdEYXRhJywgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UHJvcERhdGEoKSB7XHJcbiAgICAgICAgbGV0IGx1Y2tEcmF3UHJvcDogYW55ID0gYXdhaXQgQXBwU2RrLkkuZ2V0RGF0YSgnbHVja0RyYXdQcm9wJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJyAgICAtLS0tLS0teXl5eXkgbGF5YSBsdWNrRHJhd1Byb3AgJyArIEpTT04uc3RyaW5naWZ5KGx1Y2tEcmF3UHJvcCkpXHJcbiAgICAgICAgdGhpcy5wcm9wUmVtb3ZlID0gTnVtYmVyKGx1Y2tEcmF3UHJvcC5yZW1vdmUpO1xyXG4gICAgICAgIHRoaXMucHJvcENoYW5nZSA9IE51bWJlcihsdWNrRHJhd1Byb3AuY2hhbmdlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcFJlbW92ZSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVSZW1vdmVQcm9wKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDaGFuZ2VQcm9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsdWNrRHJhd1Byb3A7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlUmVtb3ZlUHJvcCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wUmVtb3ZlID4gMCkge1xyXG4gICAgICAgICAgICAvKiDlpITnkIbojrflvpfnrKwx5Liq6YGT5YW3Ki9cclxuICAgICAgICAgICAgdGhpcy5wcm9wUmVtb3ZlID0gMDtcclxuICAgICAgICAgICAgQXBwU2RrLkkucHV0RGF0YSgnbHVja0RyYXdQcm9wJywgSlNPTi5zdHJpbmdpZnkoeyByZW1vdmU6IDAsIGNoYW5nZTogdGhpcy5wcm9wQ2hhbmdlIH0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ2hhbmdlUHJvcCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wQ2hhbmdlID4gMCkge1xyXG4gICAgICAgICAgICAvKiDlpITnkIbojrflvpfnrKwy5Liq6YGT5YW3Ki9cclxuICAgICAgICAgICAgdGhpcy5wcm9wQ2hhbmdlID0gMDtcclxuICAgICAgICAgICAgQXBwU2RrLkkucHV0RGF0YSgnbHVja0RyYXdQcm9wJywgSlNPTi5zdHJpbmdpZnkoeyByZW1vdmU6IHRoaXMucHJvcFJlbW92ZSwgY2hhbmdlOiAwIH0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBJKCk6IEx1Y2tEcmF3TW9kZWwge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoTHVja0RyYXdNb2RlbCkgYXMgTHVja0RyYXdNb2RlbDtcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgTHVja0RyYXdEYXRhIHtcclxuICAgIGxpc3Q6IEx1Y2tEcmF3Vm9bXTtcclxuICAgIGx1Y2tEcmF3TGFzdFRpbWU6IG51bWJlcjtcclxufVxyXG5cclxuY2xhc3MgTHVja0RyYXdWbyB7XHJcbiAgICB0eXBlOiBudW1iZXI7XHJcbiAgICBudW06IG51bWJlcjtcclxuICAgIGlzVXNlOiBudW1iZXI7XHJcbiAgICB1c2VOdW06IG51bWJlcjtcclxufSIsImltcG9ydCBBZE1hbmFnZXIgZnJvbSBcIi4vQWRNYW5hZ2VyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdGl2ZUFkIGV4dGVuZHMgTGF5YS5TY3JpcHQge1xuICAgIG9uRW5hYmxlKCk6IHZvaWQge1xuICAgICAgICBsZXQgZ2xvYmFsUG9pbnQgPSB0aGlzLml0ZW0ubG9jYWxUb0dsb2JhbChMYXlhLlBvaW50LkVNUFRZLCB0cnVlKTtcbiAgICAgICAgQWRNYW5hZ2VyLkkuc2hvd05hdGl2ZUFkKGdsb2JhbFBvaW50LngsIGdsb2JhbFBvaW50LnksIHRoaXMuaXRlbS53aWR0aCwgdGhpcy5pdGVtLmhlaWdodCk7XG4gICAgfVxuXG4gICAgb25EaXNhYmxlKCk6IHZvaWQge1xuICAgICAgICBBZE1hbmFnZXIuSS5jbG9zZUFkdmVyRGlhbG9nKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXRlbSgpOiBMYXlhLlZpZXcge1xuICAgICAgICByZXR1cm4gdGhpcy5vd25lciBhcyBhbnk7XG4gICAgfVxufSIsImltcG9ydCBBcHBTZGsgZnJvbSBcIi4vQXBwU2RrXCI7XHJcbmltcG9ydCBUZWFTZGssIHsgRG90S2V5IH0gZnJvbSBcIi4vVGVhU2RrXCI7XHJcbmltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVFRBZFNkayB7XHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHByZWxvYWQgIDAg55u05o6l5Yqg6L2977ybMSDpooTliqDovb1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2hvd1Jld2FyZFZpZGVvQWQocHJlbG9hZDogbnVtYmVyID0gMCwgcG9pbnQ6IHN0cmluZyA9IERvdEtleS5wcm9sb2FkaW5nKSB7XHJcblxyXG4gICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAxLFxyXG4gICAgICAgICAgICBwcmVsb2FkaW5nOiBwcmVsb2FkLFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXNDb21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBBcHBTZGsuSS5zaG93UmV3YXJkVmlkZW9BZChkYXRhLCByZXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLop4bpopHlm57osINcIiwgSlNPTi5zdHJpbmdpZnkocmV0KSlcclxuICAgICAgICAgICAgICAgIGxldCB7IGNvZGUsIG1zZyB9ID0gSlNPTi5wYXJzZShyZXQpO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAtMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCdlcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIC8qKifmmoLml6Dop4bpopHlub/lkYrvvIHmr4/ml6Uw54K56YeN572uJyovO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEwMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuinhumikeeCueS6huWFs+mXrVwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb21wbGV0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLop4bpopHop4LnnIvlrozpl63lubbngrnkuoblhbPpl61cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlYVNkay5JLmRvdChEb3RLZXkucmV3YXJkX2FkLCB7IGZyb206IHBvaW50IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgndW5Db21wbGV0ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgn5Yqg6L295aSx6LSlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlYVNkay5JLmRvdChEb3RLZXkucmV3YXJkX2FkX2ZhaWwsIHsgZnJvbTogcG9pbnQsIGNvZGU6IGNvZGUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEZ1bGxTY3JlZW5WaWRlb0FkKHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogQXBwU2RrLkkud2lkdGgsXHJcbiAgICAgICAgICAgIGg6IEFwcFNkay5JLndpZHRoICogOTAgLyA2MDAsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgICAgIHR5cGU6IDFcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgQXBwU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKEpTT04uc3RyaW5naWZ5KGRhdGEpLCByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkTmF0aXZlRXhwcmVzc0FkKHgsIHksIHdpZHRoLCBoZWlnaHQsIHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgc2NhbGVYID0gQXBwU2RrLkkud2lkdGggLyBMYXlhLnN0YWdlLndpZHRoO1xyXG4gICAgICAgIGxldCBzY2FsZVkgPSBBcHBTZGsuSS5oZWlnaHQgLyBMYXlhLnN0YWdlLmhlaWdodDtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdHlwZTogMSxcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICAgICAgdzogd2lkdGggKiBzY2FsZVgsXHJcbiAgICAgICAgICAgIGg6IGhlaWdodCAqIHNjYWxlWSxcclxuICAgICAgICAgICAgbGVmdDogeCAqIHNjYWxlWCxcclxuICAgICAgICAgICAgdG9wOiB5ICogc2NhbGVZXHJcbiAgICAgICAgfVxyXG4gICAgICAgIEFwcFNkay5JLmxvYWROYXRpdmVFeHByZXNzQWQoSlNPTi5zdHJpbmdpZnkoZGF0YSksIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZE5hdGl2ZUFkWUxIKHgsIHksIHdpZHRoLCBoZWlnaHQsIHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc2NhbGVYID0gQXBwU2RrLkkud2lkdGggLyBMYXlhLnN0YWdlLndpZHRoO1xyXG4gICAgICAgICAgICBsZXQgc2NhbGVZID0gQXBwU2RrLkkuaGVpZ2h0IC8gTGF5YS5zdGFnZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogMSxcclxuICAgICAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgICAgICAgICB3OiB3aWR0aCAqIHNjYWxlWCxcclxuICAgICAgICAgICAgICAgIGg6IGhlaWdodCAqIHNjYWxlWSxcclxuICAgICAgICAgICAgICAgIGxlZnQ6IHggKiBzY2FsZVgsXHJcbiAgICAgICAgICAgICAgICBib3R0b206IEFwcFNkay5JLmhlaWdodCAtIGhlaWdodCAqIHNjYWxlWSAtIHkgKiBzY2FsZVksXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKEFwcFNkay5JLmhlaWdodCwgaGVpZ2h0LCB5LCBzY2FsZVkpXHJcbiAgICAgICAgICAgIEFwcFNkay5JLmxvYWROYXRpdmVBZFlMSChKU09OLnN0cmluZ2lmeShkYXRhKSwgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShyZXMpKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkxvYWROYXRpdmVBZEV2ZW50KCkge1xyXG4gICAgICAgIEFwcFNkay5JLm9wZW5Mb2FkTmF0aXZlQWRFdmVudCgpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEJhbm5lckV4cHJlc3NBZChwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IEFwcFNkay5JLndpZHRoLFxyXG4gICAgICAgICAgICBoOiBBcHBTZGsuSS53aWR0aCAqIDkwIC8gNjAwLFxyXG4gICAgICAgICAgICBwcmVsb2FkaW5nOiBwcmVsb2FkLFxyXG4gICAgICAgICAgICB0eXBlOiAxXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIEFwcFNkay5JLmxvYWRCYW5uZXJFeHByZXNzQWQoSlNPTi5zdHJpbmdpZnkoZGF0YSksIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlcylcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlQWR2ZXJEaWFsb2coKSB7XHJcbiAgICAgICAgQXBwU2RrLkkuY2xvc2VBZHZlckRpYWxvZygpO1xyXG4gICAgfVxyXG4gICAgY2xvc2VBZEJhbm5lcigpIHtcclxuICAgICAgICBBcHBTZGsuSS5jbG9zZUFkQmFubmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogQXBwU2RrLkkud2lkdGggKiAwLjgsXHJcbiAgICAgICAgICAgIGg6IEFwcFNkay5JLmhlaWdodCxcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgQXBwU2RrLkkuc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKEpTT04uc3RyaW5naWZ5KGRhdGEpLCByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEkoKTogVFRBZFNkayB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChUVEFkU2RrKSBhcyBUVEFkU2RrO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IE9iamVjdEluc3RhbmNlIGZyb20gXCIuLi91aXRsL09iamVjdEluc3RhbmNlXCI7XHJcbmltcG9ydCBBcHBTZGsgZnJvbSBcIi4vQXBwU2RrXCI7XHJcbi8qKlxyXG4gKiDkuIrmiqXln4vngrnivYflv5dcclxuICog5YW35L2T55qE5omT54K56ZyA6KaB6Lef6L+Q6JCl6IGU57O7XHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWFTZGsge1xyXG4gICAgZG90KGtleTogc3RyaW5nLCB2YWx1ZT8pIHtcclxuICAgICAgICBpZiAoIUxheWEuQnJvd3Nlci5vbkFuZHJvaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSAnJztcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAodmFsdWUpID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBBcHBTZGsuSS5hcHBEb3RMb2coa2V5LCB2YWx1ZSlcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEkoKTogVGVhU2RrIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KFRlYVNkaykgYXMgVGVhU2RrO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBEb3RLZXkge1xyXG4gICAgcHJvbG9hZGluZyA9ICdwcm9sb2FkaW5nJywgICAgICAgICAgICAgICAgICAvL+mihOWKoOi9vVxyXG4gICAgcmV3YXJkX2FkID0gJ3Jld2FyZF9hZCcsXHRcdCAgICAgICAgICAgIC8v6KeG6aKR5omT54K5XHJcbiAgICByZXdhcmRfYWRfZmFpbCA9ICdhZF9mYWlsJywgICAgICAgICAgICAgICAgIC8v6KeG6aKR5Yqg6L295aSx6LSlXHJcbiAgICBmdWxsU2NyZWVuID0gJ2Z1bGxTY3JlZW4nLCAgICAgICAgICAgICAgICAgIC8v5YWo5bGP6KeG6aKRXHJcbiAgICBcclxufVxyXG4iLCJpbXBvcnQgQXBwU2RrIGZyb20gXCIuL0FwcFNka1wiO1xyXG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRyYWNraW5nU2RrIHtcclxuICAgIGRvdChrZXk6IHN0cmluZykge1xyXG4gICAgICAgIEFwcFNkay5JLmFwcERvdFRyYWNLaW5nKGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBJKCk6IFRyYWNraW5nU2RrIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KFRyYWNraW5nU2RrKSBhcyBUcmFja2luZ1NkaztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGVudW0gVHJhY2tpbmdLZXkge1xyXG4gICAgUmVkUGFjazEgPSAnZXZlbnRfNScsXHJcbiAgICBSZWRQYWNrNSA9ICdldmVudF82J1xyXG59XHJcbiIsImltcG9ydCBBcnJheVV0aWxzIGZyb20gXCIuLi8uLi91aXRsL0FycmF5VXRpbHNcIjtcblxuLypcbiogbmFtZTtcbiovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlTW9kZWwge1xuICAgIHByb3RlY3RlZCBfZGF0YTogYW55ID0ge307XG4gICAgcHJpdmF0ZSB1cGRhdGVBcnI6IEFycmF5PEZ1bmN0aW9uPiA9IFtdO1xuICAgIHByaXZhdGUga2V5VXBkYXRlQXJyOiBhbnkgPSB7fTtcblxuICAgIHB1YmxpYyBhc3luYyB1cGRhdGUoZGF0YTogYW55KSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSB7XG4gICAgICAgICAgICAuLi50aGlzLl9kYXRhLFxuICAgICAgICAgICAgLi4uZGF0YVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQXJyLmZvckVhY2goZnVuYyA9PiB7XG4gICAgICAgICAgICBmdW5jKHRoaXMuX2RhdGEpO1xuICAgICAgICB9KVxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5rZXlVcGRhdGVBcnIpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IHRoaXMua2V5VXBkYXRlQXJyW2tleV07XG4gICAgICAgICAgICAgICAgYXJyICYmIGFyci5mb3JFYWNoKGZ1bmMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmdW5jKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHdhaXRGb3Ioa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9kYXRhW2tleV07XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY2IgPSBkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZlVwZGF0ZShjYiwga2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uVXBkYXRlKGNiLCBrZXksIHRydWUpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHB1YmxpYyBvblVwZGF0ZShmdW5jOiBGdW5jdGlvbiwga2V5Pzogc3RyaW5nLCBydW46IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuX2RhdGFba2V5XTtcbiAgICAgICAgICAgIHJ1biAmJiB2YWx1ZSAhPSBudWxsICYmIGZ1bmModmFsdWUpO1xuICAgICAgICAgICAgbGV0IGFyciA9IHRoaXMua2V5VXBkYXRlQXJyW2tleV07XG4gICAgICAgICAgICAhYXJyICYmICh0aGlzLmtleVVwZGF0ZUFycltrZXldID0gYXJyID0gW10pO1xuICAgICAgICAgICAgYXJyLnB1c2goZnVuYyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBydW4gJiYgZnVuYyh0aGlzLl9kYXRhKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQXJyLnB1c2goZnVuYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmVXBkYXRlKGZ1bmM6IEZ1bmN0aW9uLCBrZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgQXJyYXlVdGlscy5yZW1vdmVGcm9tQXJyKHRoaXMua2V5VXBkYXRlQXJyW2tleV0sIGZ1bmMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgQXJyYXlVdGlscy5yZW1vdmVGcm9tQXJyKHRoaXMudXBkYXRlQXJyLCBmdW5jKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckdhbWUoKSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcbiAgICB9XG59IiwiaW1wb3J0IEJhc2VNb2RlbCBmcm9tIFwiLi9CYXNlTW9kZWxcIjtcbmltcG9ydCBBZE1hbmFnZXIgZnJvbSBcIi4uLy4uL3Nkay9BZE1hbmFnZXJcIjtcbmltcG9ydCBUZWFTZGssIHsgRG90S2V5IH0gZnJvbSBcIi4uLy4uL3Nkay9UZWFTZGtcIjtcbmltcG9ydCBUcmFja2luZ1NkaywgeyBUcmFja2luZ0tleSB9IGZyb20gXCIuLi8uLi9zZGsvVHJhY2tpbmdTZGtcIjtcbmltcG9ydCB7IEdvbGRDb25maWdEYXRhIH0gZnJvbSBcIi4uLy4uL3Nkay9zZGtEYXRhL0dvbGRDb25maWdEYXRhXCI7XG5pbXBvcnQgQWRkR29sZERhdGEgZnJvbSBcIi4uLy4uL3Nkay9zZGtEYXRhL0FkZEdvbGREYXRhXCI7XG5pbXBvcnQgRGF0ZVV0aWxzIGZyb20gXCIuLi8uLi91aXRsL0RhdGVVdGlsc1wiO1xuaW1wb3J0IFV0aWwsIHsgRGF0YUtleSB9IGZyb20gXCIuLi8uLi91aXRsL1V0aWxcIjtcbmltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xuaW1wb3J0IHsgRXZlbnRDZW50ZXIgfSBmcm9tIFwiLi4vLi4vZXZlbnQvRXZlbnRDZW50ZXJcIjtcbmltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuLi8uLi9ldmVudC9FdmVudEVudW1cIjtcbmltcG9ydCBBcHBTZGsgZnJvbSBcIi4uL0FwcFNka1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWRwYWNrZXRNb2RlbCBleHRlbmRzIEJhc2VNb2RlbCB7XG4gICAgcHJpdmF0ZSBNQVggPSAyMDtcbiAgICAvKirlvZPlpKnpooblj5bnuqLljIXnmoTmnIDlpKfmrKHmlbAgKi9cbiAgICBwcml2YXRlIERBWV9NQVhfQ05UID0gNTA7XG4gICAgcHJpdmF0ZSBjb25mOiBhbnk7XG4gICAgcHVibGljIGN1clJlZHBhY2tldDogbnVtYmVyID0gMDtcbiAgICBwdWJsaWMgY29uZkxlbjogbnVtYmVyID0gMDtcblxuICAgIC8qKuWIneWni+WMlue6ouWMhemFjee9riAqL1xuICAgIGFzeW5jIGluaXQoKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5Yid5aeL5YyW57qi5YyF6YWN572uaW5pdFwiKVxuICAgICAgICBsZXQgYXJyID0gYXdhaXQgR29sZENvbmZpZ0RhdGEuSS5nZXRHb2xkQ29uZmlnKCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1SZWRwYWNrZXRNb2RlbC0tLS0tLS0nK0pTT04uc3RyaW5naWZ5KGFycikpXG4gICAgICAgIGxldCBjYXNoID0gMDtcbiAgICAgICAgdGhpcy5jb25mID0ge307XG4gICAgICAgIGFyci5mb3JFYWNoKGNvbmZEYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZltjb25mRGF0YS5pZF0gPSBjb25mRGF0YTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5pbml0RGF0YSgpKTtcbiAgICAgICAgdGhpcy5jb25mTGVuID0gdGhpcy5jb25mLmxlbmd0aDtcblxuICAgIH1cblxuICAgIGluaXREYXRhKCkge1xuICAgICAgICBsZXQgZGF0YSA9IG5ldyBSZWRwYWNrZXREYXRhO1xuICAgICAgICBsZXQgbGFzdFRpbWUgPSBVdGlsLkkuZ2V0SXRlbShEYXRhS2V5Lmxhc3RUaW1lKSB8fCAnMCc7XG4gICAgICAgIGRhdGEubGFzdFRpbWUgPSBwYXJzZUludChsYXN0VGltZSk7XG5cbiAgICAgICAgbGV0IGxhc3QgPSBEYXRlVXRpbHMudGltZURheShkYXRhLmxhc3RUaW1lKTtcbiAgICAgICAgbGV0IHRvZGF5ID0gRGF0ZVV0aWxzLnRvZGF5O1xuICAgICAgICBpZiAobGFzdCAhPSB0b2RheSkge1xuICAgICAgICAgICAgZGF0YS50b2RheUNudCA9IDA7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGVVdGlscy5ub3dUaW1lLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5Lmxhc3RUaW1lLCBsYXN0VGltZSlcbiAgICAgICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkudG9kYXlDbnQsIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHRvZGF5Q250ID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS50b2RheUNudCkgfHwgJzAnO1xuICAgICAgICAgICAgZGF0YS50b2RheUNudCA9IHBhcnNlSW50KHRvZGF5Q250KTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmxhc3RUaW1lID0gcGFyc2VJbnQobGFzdFRpbWUpO1xuICAgICAgICBsZXQgZGF0YUNudCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkuZGF0YUNOVCkgfHwgJzAnO1xuICAgICAgICBkYXRhLmNudCA9IHBhcnNlSW50KGRhdGFDbnQpO1xuICAgICAgICBkYXRhLmxpc3QgPSBbXTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgYXN5bmMgY2hlY2tSZWRwYWNrZXQoKSB7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YS50b2RheUNudCA+PSB0aGlzLkRBWV9NQVhfQ05UKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChBZE1hbmFnZXIuSS5jaGVja1ZpZGVvSW5DZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8qKue6ouWMheiOt+WPluWQjuayoeacieeci+W5v+WRiumihuWPlu+8jOWGjeasoeiOt+W+l+e6ouWMheeahOacuuS8mu+8jOS4jeS8muiOt+WPlue6ouWMhe+8jCDoh6rlt7HkuZ/lj6/ku6XlpITnkIbmiJAg5a+55bqU55qE57qi5YyF5o+Q6YaS5oiW5LiN6ZyA6KaB6L+Z6YeM55qE5Yik5patICovXG4gICAgICAgIGlmICh0aGlzLmN1clJlZHBhY2tldCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmRlZmluZWQgPT09IHRoaXMuZGF0YS5jbnQpIHRoaXMuZGF0YS5jbnQgPSAwO1xuICAgICAgICBsZXQgY250ID0gdGhpcy5kYXRhLmNudDtcbiAgICAgICAgaWYgKGNudCA+PSB0aGlzLmNvbmZMZW4pIGNudCA9IHRoaXMuY29uZkxlbiAtIDE7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5jb25mW2NudCArIDFdO1xuICAgICAgICBsZXQgcmFuMiA9IE1hdGgucmFuZG9tKCk7XG5cbiAgICAgICAgaWYgKGRhdGEgJiYgcmFuMiA8IGRhdGEucGVyKSB7XG4gICAgICAgICAgICBsZXQgY2FzaCA9IDAuMDAwMDAxO1xuICAgICAgICAgICAgdGhpcy5jdXJSZWRwYWNrZXQgPSBjYXNoO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCLnnIvop4bpopHpoobnuqLljIVcIilcbiAgICAgICAgICAgIC8vIC8vKirlvLnlh7rnuqLljIXnmoTnlYzpnaIsICDmmoLml7blpITnkIbmiJAg55u05o6l55yL5bm/5ZGK6I635Y+W6YeR5biBICovXG4gICAgICAgICAgICAvLyBhd2FpdCBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoRG90S2V5LnJld2FyZF9hZClcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5Yqg6YeR5biBXCIpXG4gICAgICAgICAgICAvLyBsZXQgY29pbiA9IGF3YWl0IHRoaXMuYWRkQ29pbigpOyAvLyDnnIvlrozlub/lkYrojrflj5bpkrHvvIjmraTml7blt7Lnu4/liqDliLDotKbmiLfkuobvvIzmmoLmnKrmj5Dkvpvmj5DliY3nn6XpgZPojrflj5blpJrlsJHpkrHnmoTmlrnms5XvvIlcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi6I635Y+W5LqG6ZKxXCIsIGNvaW4pXG4gICAgICAgICAgICAvLyB0aGlzLmdldFJlcGFja2V0KClcbiAgICAgICAgICAgIC8vIC8qKuabtOaWsOWfuuacrOaYvuekuiAqL1xuICAgICAgICAgICAgLy8gRXZlbnRDZW50ZXIuZW1pdChFdmVudEVudW0uVVBEQVRFX0NPSU4pO1xuXG4gICAgICAgICAgICAvKioqICovXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0UmVwYWNrZXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5jdXJSZWRwYWNrZXQpIHJldHVybjtcbiAgICAgICAgdGhpcy5kYXRhLmNudCArPSAxO1xuICAgICAgICB0aGlzLmRhdGEubGlzdC5wdXNoKHRoaXMuY3VyUmVkcGFja2V0KTtcbiAgICAgICAgdGhpcy5kYXRhLmxhc3RUaW1lID0gKG5ldyBEYXRlKS5nZXRUaW1lKCk7XG4gICAgICAgIHRoaXMuZGF0YS50b2RheUNudCArPSAxO1xuICAgICAgICBpZiAodGhpcy5kYXRhLmNudCA9PSAxKVxuICAgICAgICAgICAgVHJhY2tpbmdTZGsuSS5kb3QoVHJhY2tpbmdLZXkuUmVkUGFjazEpO1xuICAgICAgICBpZiAodGhpcy5kYXRhLmNudCA9PSA1KVxuICAgICAgICAgICAgVHJhY2tpbmdTZGsuSS5kb3QoVHJhY2tpbmdLZXkuUmVkUGFjazUpO1xuICAgICAgICB0aGlzLmN1clJlZHBhY2tldCA9IDA7XG4gICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkuZGF0YUNOVCwgdGhpcy5kYXRhLmNudCk7XG4gICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkudG9kYXlDbnQsIHRoaXMuZGF0YS50b2RheUNudCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICAvKiogKi9cbiAgICBhc3luYyBnZXRDdXJSZWRwYWNrZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1clJlZHBhY2tldDtcbiAgICB9XG5cbiAgICBnZXQgZGF0YSgpOiBSZWRwYWNrZXREYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIC8qKuiOt+WPluaAu+WFseeahOmHkeW4geaVsCAqL1xuICAgIGFzeW5jIGdldFRvdGFsQ29pbigpIHtcbiAgICAgICAgbGV0IHRvdGFsQ29pbiA9IGF3YWl0IEFwcFNkay5JLm15Q29pbigpO1xuICAgICAgICByZXR1cm4gdG90YWxDb2luO1xuICAgIH1cbiAgICAvKirojrflj5bmnKzmrKHlpZblirHnmoTph5HluIHmlbAgKi9cbiAgICBhc3luYyBhZGRDb2luKCkge1xuICAgICAgICBsZXQgY29pbkRhdGEgPSBhd2FpdCBBZGRHb2xkRGF0YS5hZGRDb2luKCk7XG4gICAgICAgIHJldHVybiBjb2luRGF0YTtcbiAgICB9XG5cbiAgICAvKirojrflj5bmnIDkvY7mj5DmoaMgKi9cbiAgICBhc3luYyAgbWluV2l0aERyYXdhbCgpIHtcbiAgICAgICAgbGV0IG1pbkNvaW4gPSBhd2FpdCBBcHBTZGsuSS5taW5XaXRoRHJhd2FsKCk7XG4gICAgICAgIHJldHVybiBtaW5Db2luO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IEkoKTogUmVkcGFja2V0TW9kZWwge1xuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KFJlZHBhY2tldE1vZGVsKSBhcyBSZWRwYWNrZXRNb2RlbDtcbiAgICB9XG59XG5cbmNsYXNzIFJlZHBhY2tldERhdGEge1xuICAgIGNudDogbnVtYmVyO1xuICAgIGxpc3Q6IEFycmF5PG51bWJlcj47XG4gICAgbGFzdFRpbWU6IG51bWJlcjtcbiAgICB0b2RheUNudDogbnVtYmVyO1xufVxuXG5jbGFzcyBSZWRwYWNrZXRDb25maWdEYXRhIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIHBlcjogbnVtYmVyO1xuICAgIGNhc2g6IG51bWJlcjtcbn0iLCJpbXBvcnQgQXBwU2RrIGZyb20gXCIuLi9BcHBTZGtcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWRkR29sZERhdGEge1xuICAgIHN0YXRpYyBjb2luOiBzdHJpbmcgPSAnMCc7XG4gICAgc3RhdGljIG15Y29pbjogc3RyaW5nID0gJzAnO1xuICAgIHN0YXRpYyBpbml0RGF0YShkYXRhOiBhbnkpIHtcbiAgICAgICAgaWYgKCFwYXJzZUludChkYXRhLmNvZGUpKSB7XG4gICAgICAgICAgICBBZGRHb2xkRGF0YS5jb2luID0gZGF0YS5kYXRhLmNvaW47XG4gICAgICAgICAgICBBZGRHb2xkRGF0YS5teWNvaW4gPSBkYXRhLmRhdGEubXljb2luO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgIGFkZENvaW4oKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBBcHBTZGsuSS5hZGRHb2xkKCk7XG4gICAgICAgIHJldHVybiBbcGFyc2VJbnQocmVzdWx0LmNvaW4pLCBwYXJzZUludChyZXN1bHQubXljb2luKV07XG4gICAgfVxufSIsImltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xyXG5cclxuLy8gc2Rr6L+U5Zue55qE55So5oi35L+h5oGvXHJcbmV4cG9ydCBjbGFzcyBBcHBTZGtEYXRhIGltcGxlbWVudHMgSUFwcFNka0RhdGEge1xyXG4gICAgaXNuZXc6IG51bWJlciA9IDA7XHJcbiAgICB1aWQ6IG51bWJlcjtcclxuICAgIG9wZW5pZDogc3RyaW5nO1xyXG4gICAgbmlja25hbWU6IHN0cmluZztcclxuICAgIGhlYWRpbWd1cmw6IHN0cmluZztcclxuICAgIGluaXREYXRhKGRhdGE6IGFueSkge1xyXG4gICAgICAgIGxldCBkID1kYXRhLmRhdGE7XHJcbiAgICAgICAgY29uc3QgeyBpc25ldywgdWlkLCBvcGVuaWQsIG5pY2tuYW1lLCBoZWFkaW1ndXJsIH0gPSBkO1xyXG4gICAgICAgIFt0aGlzLmlzbmV3LCB0aGlzLnVpZCwgdGhpcy5vcGVuaWQsIHRoaXMubmlja25hbWUsIHRoaXMuaGVhZGltZ3VybF0gPSBbaXNuZXcsIHVpZCwgb3BlbmlkLCBuaWNrbmFtZSwgaGVhZGltZ3VybF07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBJKCk6IEFwcFNka0RhdGEge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoQXBwU2RrRGF0YSkgYXMgQXBwU2RrRGF0YTtcclxuICAgIH1cclxufVxyXG5cclxuXHJcblxyXG5pbnRlcmZhY2UgSUFwcFNka0RhdGEge1xyXG4gICAgaXNuZXc6IG51bWJlcjtcclxuICAgIHVpZDogbnVtYmVyO1xyXG4gICAgb3BlbmlkOiBzdHJpbmc7XHJcbiAgICBuaWNrbmFtZTogc3RyaW5nO1xyXG4gICAgaGVhZGltZ3VybDogc3RyaW5nO1xyXG59IiwiaW1wb3J0IFV0aWwgZnJvbSBcIi4uLy4uL3VpdGwvVXRpbFwiO1xyXG5pbXBvcnQgQXBwU2RrIGZyb20gXCIuLi9BcHBTZGtcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBHb2xkQ29uZmlnRGF0YSB7XHJcbiAgICBhZDogT2JqZWN0O1xyXG4gICAgYWRuZXQ6IHN0cmluZztcclxuICAgIGFwcF9uYW1lOiBzdHJpbmc7XHJcbiAgICBjb2luX2NvbmZpZzogc3RyaW5nID0gJyc7XHJcbiAgICBnYW1lVXJsOiBzdHJpbmc7XHJcbiAgICBrdWFpX2FwcF9uYW1lOiBzdHJpbmc7XHJcbiAgICBwYW5nb2xpbjogc3RyaW5nO1xyXG4gICAgdFR1cmJvQWdlbnQ6IHN0cmluZztcclxuICAgIHRlYUFnZW50OiBudW1iZXI7XHJcbiAgICB0cmFja2luZzogc3RyaW5nO1xyXG4gICAgdHRBcHBMb2c6IHN0cmluZztcclxuICAgIHVtaWQ6IHN0cmluZztcclxuICAgIGdhbWVDb25maWc6IGFueTtcclxuXHJcbiAgICBjb2RlOiBudW1iZXIgPSAtMztcclxuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBHb2xkQ29uZmlnRGF0YSA9IG51bGw7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSSgpOiBHb2xkQ29uZmlnRGF0YSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKVxyXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gbmV3IEdvbGRDb25maWdEYXRhKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2U7XHJcbiAgICB9XHJcbiAgICBpbml0RGF0YShkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5jb2RlID0gZGF0YS5jb2RlO1xyXG4gICAgICAgIGlmICghZGF0YS5jb2RlKSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmRhdGE7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGUgPSBkYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpc1trZXldID0gZWxlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEdvbGRDb25maWcoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gQXBwU2RrLkkuZ2FtZUNvbmZpZztcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbmZpZ0pzb24gPSBhd2FpdCB0aGlzLmxvYWRHb2xkQ2ZnKHJlc3VsdFsnY29pbl9jb25maWcnXVswXSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGNvbmZpZ0pzb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEdvbGRDZmcocmVzOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgY29uZmlnSnNvbiA9IGF3YWl0IFV0aWwuSS5sb2FkKHJlcyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZ0pzb247XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IE9iamVjdEluc3RhbmNlIGZyb20gXCIuLi8uLi91aXRsL09iamVjdEluc3RhbmNlXCI7XHJcbmltcG9ydCBVdGlsIGZyb20gXCIuLi8uLi91aXRsL1V0aWxcIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgTHVja0RyYXdEYXRhIGltcGxlbWVudHMgSVR1cm5DZmcge1xyXG4gICAgcmVkX3R1cm50YWJsZV90aW1lczogbnVtYmVyO1xyXG4gICAgcmVkX3R1cm50YWJsZV9jb25maWc6IElUdXJuQ2VsbENmZztcclxuICAgIHNoYWtlX3R1cm50YWJsZV9jb25maWc6IElUdXJuQ2VsbENmZztcclxuICAgIHNoYWtlX3R1cm50YWJsZV90aW1lczogbnVtYmVyO1xyXG4gICAgc3RhdGljIGdldCBJKCk6IEx1Y2tEcmF3RGF0YSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChMdWNrRHJhd0RhdGEpIGFzIEx1Y2tEcmF3RGF0YTtcclxuICAgIH1cclxuICAgIGFzeW5jIGluaXREYXRhKGRhdGE6IElUdXJuQ2ZnKSB7XHJcbiAgICAgICAgY29uc3QgeyByZWRfdHVybnRhYmxlX3RpbWVzLCByZWRfdHVybnRhYmxlX2NvbmZpZyxcclxuICAgICAgICAgICAgc2hha2VfdHVybnRhYmxlX2NvbmZpZywgc2hha2VfdHVybnRhYmxlX3RpbWVzIH0gPSBkYXRhO1xyXG5cclxuICAgICAgICBbdGhpcy5yZWRfdHVybnRhYmxlX3RpbWVzLCB0aGlzLnJlZF90dXJudGFibGVfY29uZmlnLCB0aGlzLnNoYWtlX3R1cm50YWJsZV9jb25maWcsIHRoaXMuc2hha2VfdHVybnRhYmxlX3RpbWVzXSA9IFtyZWRfdHVybnRhYmxlX3RpbWVzLCByZWRfdHVybnRhYmxlX2NvbmZpZyxcclxuICAgICAgICAgICAgc2hha2VfdHVybnRhYmxlX2NvbmZpZywgc2hha2VfdHVybnRhYmxlX3RpbWVzXTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgYXN5bmMgbG9hZEdvbGRDZmcocmVzOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgY29uZmlnSnNvbiA9IGF3YWl0IFV0aWwuSS5sb2FkKHJlcyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZ0pzb247XHJcbiAgICB9XHJcbn1cclxuaW50ZXJmYWNlIElUdXJuQ2ZnIHtcclxuICAgIHJlZF90dXJudGFibGVfdGltZXM6IG51bWJlcjtcclxuICAgIHJlZF90dXJudGFibGVfY29uZmlnOiBJVHVybkNlbGxDZmc7XHJcbiAgICBzaGFrZV90dXJudGFibGVfY29uZmlnOiBJVHVybkNlbGxDZmc7XHJcbiAgICBzaGFrZV90dXJudGFibGVfdGltZXM6IG51bWJlcjtcclxufVxyXG5cclxuXHJcbmludGVyZmFjZSBJVHVybkNlbGxDZmcge1xyXG4gICAgZGF5X2xpbWl0OiBudW1iZXI7XHJcbiAgICByZXF1aXJlbWVudDogbnVtYmVyO1xyXG4gICAgdGl0bGU6IHN0cmluZ1xyXG59XHJcblxyXG4iLCIvKipUaGlzIGNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IExheWFBaXJJREUsIHBsZWFzZSBkbyBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucy4gKi9cbmltcG9ydCBWaWV3PUxheWEuVmlldztcclxuaW1wb3J0IERpYWxvZz1MYXlhLkRpYWxvZztcclxuaW1wb3J0IFNjZW5lPUxheWEuU2NlbmU7XG52YXIgUkVHOiBGdW5jdGlvbiA9IExheWEuQ2xhc3NVdGlscy5yZWdDbGFzcztcbmV4cG9ydCBtb2R1bGUgdWkge1xyXG4gICAgZXhwb3J0IGNsYXNzIFRlc3RTY2VuZVVJIGV4dGVuZHMgU2NlbmUge1xyXG5cdFx0cHVibGljIGJ0bkludml0ZTpMYXlhLlNwcml0ZTtcblx0XHRwdWJsaWMgYnRuU2VydmVyOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5WaWJyYXRlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5EcmF3YWw6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZWxvYWRBRDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Jhbm5lcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Z1bGxBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd05hdGl2ZUFkOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93SW50ZXJBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUmV3YXJkQWQ6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blJlZHBhY2tldDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgTmF0aXZlQUQ6Vmlldztcblx0XHRwdWJsaWMgYnRuRHJhdzpMYXlhLkJ1dHRvbjtcbiAgICAgICAgY29uc3RydWN0b3IoKXsgc3VwZXIoKX1cclxuICAgICAgICBjcmVhdGVDaGlsZHJlbigpOnZvaWQge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRTY2VuZShcIlRlc3RTY2VuZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBSRUcoXCJ1aS5UZXN0U2NlbmVVSVwiLFRlc3RTY2VuZVVJKTtcclxufVxyIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXJyYXlVdGlscyB7XG4gICAgLyoqXG4gICAgICog56e76Zmk5YWD57SgXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZUZyb21BcnIoYXJyOiBBcnJheTxhbnk+LCBvYmo6IGFueSkge1xuICAgICAgICBsZXQgaW5kZXggPSBhcnIuaW5kZXhPZihvYmopO1xuICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmFuZG9tRnJvbUFycihhcnI6IEFycmF5PGFueT4pIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBhcnJbaW5kZXhdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaVsOe7hOmaj+acuuaOkuW6j1xuICAgICAqL1xuICAgIHN0YXRpYyBzaHVmZmxlKGFycjogQXJyYXk8YW55Pikge1xuICAgICAgICByZXR1cm4gYXJyLnNvcnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgLSAwLjU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbmRleE9mKGFyciwgY2FsbGJhY2ssIGN0eD8pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKGN0eCwgdGhpc1tpXSwgaSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHN0YXRpYyBlYWNoKGFyciwgY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2suY2FsbChjb250ZXh0LCBhcnJbaV0sIGksIGFycikpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcXVldWUoYXJyKSB7XG4gICAgICAgIGxldCByZXMgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBwcm9taXNlIG9mIGFycikge1xuICAgICAgICAgICAgcmVzID0gYXdhaXQgcHJvbWlzZShyZXMpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UmFuZG9tQXJyYXkoYXJyLCBjb3VudCkge1xuICAgICAgICBsZXQgc2h1ZmZsZWQgPSBhcnIuc2xpY2UoMCk7XG4gICAgICAgIGxldCBsZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgICBsZXQgbWluID0gbGVuIC0gY291bnQsIHRlbXAsIGluZGV4O1xuICAgICAgICB3aGlsZSAobGVuLS0gPiBtaW4pIHtcbiAgICAgICAgICAgIGluZGV4ID0gTWF0aC5mbG9vcigobGVuICsgMSkgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgICAgIHRlbXAgPSBzaHVmZmxlZFtpbmRleF07XG4gICAgICAgICAgICBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtsZW5dO1xuICAgICAgICAgICAgc2h1ZmZsZWRbbGVuXSA9IHRlbXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNodWZmbGVkLnNsaWNlKG1pbik7XG4gICAgfVxufSIsIi8qKlxuICog5pel5pyf5bel5YW357G7XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVVdGlscyB7XG4gICAgc3RhdGljIGdldCBub3coKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5ub3dUaW1lIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBub3dUaW1lKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHRvZGF5KCk6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGhpcy5ub3dUaW1lKTtcbiAgICAgICAgbGV0IHllYXIgPSB0aW1lLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGxldCBtb250aCA9IHRpbWUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgIGxldCBkYXRlID0gdGltZS5nZXREYXRlKCk7XG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke3RoaXMuYWRkKG1vbnRoKX0tJHt0aGlzLmFkZChkYXRlKX1gO1xuICAgIH1cblxuICAgIHN0YXRpYyB0aW1lRGF5KHRpbWVOdW06IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGltZU51bSk7XG4gICAgICAgIGxldCB5ZWFyID0gdGltZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBsZXQgbW9udGggPSB0aW1lLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICBsZXQgZGF0ZSA9IHRpbWUuZ2V0RGF0ZSgpO1xuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHt0aGlzLmFkZChtb250aCl9LSR7dGhpcy5hZGQoZGF0ZSl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7np5LmlbDmoLzlvI/ljJblrZfnrKbkuLJcbiAgICAgKiBAcGFyYW0gc2Vjb25kIOenkuaVsFxuICAgICAqIEBwYXJhbSB0eXBlIDE6MDA6MDA6MDAgICAyOnl5eXktbW0tZGQgaDptOnMgICAgMzowMDowMCAgIDQ6eHjlpKnliY3vvIx4eOWwj+aXtuWJje+8jHh45YiG6ZKf5YmNXG4gICAgICogQHJldHVyblxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZChzZWNvbmQ6IG51bWJlciwgdHlwZTogbnVtYmVyID0gMSk6IHN0cmluZyB7XG4gICAgICAgIHZhciBzdHI6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQwKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDEoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kMihzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQzKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDQoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kNShzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLy8gMDogMDA6MDBcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZDAodDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gNjApO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcih0ICUgNjApO1xuICAgICAgICB2YXIgbWluczogc3RyaW5nO1xuICAgICAgICB2YXIgc2Vuczogc3RyaW5nO1xuICAgICAgICBpZiAobWluc3QgPT0gMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5zdCA8IDEwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwXCIgKyBtaW5zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIlwiICsgbWluc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZHQgPT0gMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjBcIiArIHNlY29uZHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZW5zID0gXCJcIiArIHNlY29uZHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbnMgKyBcIjpcIiArIHNlbnM7XG4gICAgfVxuXG4gICAgLy8xOiAwMDowMDowMFxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMSh0OiBudW1iZXIgPSAwKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGhvdXJzdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gMzYwMCk7XG4gICAgICAgIGxldCBob3Vyczogc3RyaW5nO1xuICAgICAgICBsZXQgZGF5ID0gJyc7XG4gICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgaG91cnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91cnN0IDwgMTApXG4gICAgICAgICAgICAgICAgaG91cnMgPSBcIjBcIiArIGhvdXJzdDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBoID0gaG91cnN0ICUgMjQ7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA+PSAyNCkge1xuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgICAgICAgICAgZGF5ID0gTWF0aC5mbG9vcihob3Vyc3QgLyAyNCkgKyAnZCAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluc3Q6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAvIDYwKTtcbiAgICAgICAgbGV0IHNlY29uZHQ6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAlIDYwKTtcbiAgICAgICAgbGV0IG1pbnM6IHN0cmluZztcbiAgICAgICAgbGV0IHNlbnM6IHN0cmluZztcbiAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobWluc3QgPCAxMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMFwiICsgbWluc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5zID0gXCJcIiArIG1pbnN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kdCA8IDEwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwXCIgKyBzZWNvbmR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VucyA9IFwiXCIgKyBzZWNvbmR0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXkgKyBob3VycyArIFwiOlwiICsgbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzM6IDAwOjAwXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQzKHQ6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgLyAzNjAwKTtcbiAgICAgICAgdmFyIG1pbnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgLyA2MCk7XG4gICAgICAgIHZhciBzZWNvbmR0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgJSA2MCk7XG4gICAgICAgIHZhciBtaW5zOiBzdHJpbmc7XG4gICAgICAgIHZhciBzZW5zOiBzdHJpbmc7XG4gICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjBcIiArIG1pbnN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWlucyA9IFwiXCIgKyBtaW5zdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMFwiICsgc2Vjb25kdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIlwiICsgc2Vjb25kdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzI6eXl5eS1tbS1kZCBoOm06c1xuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMih0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgZGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgICAgICB2YXIgeWVhcjogbnVtYmVyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICB2YXIgbW9udGg6IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7IFx0Ly/ov5Tlm57nmoTmnIjku73ku44wLTEx77ybXG4gICAgICAgIHZhciBkYXk6IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB2YXIgaG91cnM6IG51bWJlciA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgdmFyIG1pbnV0ZTogbnVtYmVyID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIHZhciBzZWNvbmQ6IG51bWJlciA9IGRhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICByZXR1cm4geWVhciArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIGRheSArIFwiIFwiICsgaG91cnMgKyBcIjpcIiArIG1pbnV0ZSArIFwiOlwiICsgc2Vjb25kO1xuXG4gICAgfVxuXG4gICAgLy80Onh45aSp5YmN77yMeHjlsI/ml7bliY3vvIx4eOWIhumSn+WJjVxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kNCh0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgdCA9IE1hdGguZmxvb3IodGltZSAvIDM2MDApO1xuICAgICAgICBpZiAodCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0ID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0IC8gMjQpICsgXCLlpKnliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ICsgXCLlsI/ml7bliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRpbWUgLyA2MCkgKyBcIuWIhumSn+WJjVwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQ1KHRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIC8vIOavj+S4quaXtumXtOWNleS9jeaJgOWvueW6lOeahOenkuaVsFxuICAgICAgICB2YXIgb25lRGF5OiBudW1iZXIgPSAzNjAwICogMjQ7XG4gICAgICAgIHZhciBvbmVIb3Vyc3Q6IG51bWJlciA9IDM2MDA7XG4gICAgICAgIHZhciBvbmVNaW5zdDogbnVtYmVyID0gNjA7XG5cbiAgICAgICAgdmFyIGRheXMgPSBNYXRoLmZsb29yKHRpbWUgLyBvbmVEYXkpO1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHRpbWUgJSBvbmVEYXkgLyBvbmVIb3Vyc3QpXG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgLyBvbmVNaW5zdCkgIC8vTWF0aC5mbG9vcih0aW1lICUgb25lRGF5ICUgb25lSG91cnN0IC8gb25lTWluc3QpO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgJSBvbmVNaW5zdCkgLy90aW1lO1xuXG4gICAgICAgIHZhciBkYXlzczogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgdmFyIGhvdXJzczogc3RyaW5nID0gXCJcIlxuICAgICAgICB2YXIgbWluc3M6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHZhciBzZWNzczogc3RyaW5nID0gXCJcIlxuICAgICAgICBpZiAodGltZSA+IDApIHtcbiAgICAgICAgICAgIC8v5aSpXG4gICAgICAgICAgICBpZiAoZGF5cyA9PSAwKSB7XG4gICAgICAgICAgICAgICAgZGF5c3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIC8v5bCP5pe2XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIC8v5YiGXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vjc3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWluc3MgKyBzZWNzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgc2Vjc3NcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCIwXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgbWluc3M7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXlzcyA9IGRheXMgKyBcIuWkqVwiO1xuICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBob3Vyc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPCAxMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiMFwiICsgaG91cnN0ICsgXCLlsI/ml7ZcIjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gXCJcIiArIGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheXNzICsgaG91cnNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFkZChudW0pIHtcbiAgICAgICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtO1xuICAgIH1cblxuXG59XG4iLCJpbXBvcnQgT2JqZWN0UG9vbCBmcm9tIFwiLi9PYmplY3RQb29sXCI7XG5cbi8qXG4qIG5hbWU7XG4qL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0SW5zdGFuY2Uge1xuICAgIHByaXZhdGUgc3RhdGljIGNsenMgPSBbXTtcbiAgICBwcml2YXRlIHN0YXRpYyBvYmplY3RzID0gW107XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldChjbHM6IGFueSkge1xuICAgICAgICBsZXQgaWR4ID0gdGhpcy5jbHpzLmluZGV4T2YoY2xzKTtcbiAgICAgICAgcmV0dXJuIChpZHggPj0gMCAmJiB0aGlzLm9iamVjdHNbaWR4XSkgfHwgdGhpcy5jcmVhdGUoY2xzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGUoY2xzOiBhbnkpIHtcbiAgICAgICAgdmFyIG9iaiA9IE9iamVjdFBvb2wucG9wKGNscyk7XG4gICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKG9iaik7XG4gICAgICAgIHRoaXMuY2x6cy5wdXNoKGNscyk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0UG9vbCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgY2xzQXJyID0gW107XG5cbiAgICBzdGF0aWMgcG9wKGNsczogYW55KSB7XG4gICAgICAgIGxldCBpZHggPSB0aGlzLmNsc0Fyci5pbmRleE9mKGNscyk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICBpZHggPSB0aGlzLmNsc0Fyci5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmNsc0Fyci5wdXNoKGNscyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGtleSA9ICdwb29sS2V5JyArIGlkeDtcbiAgICAgICAgbGV0IGl0ZW0gPSBMYXlhLlBvb2wuZ2V0SXRlbUJ5Q2xhc3Moa2V5LCBjbHMpO1xuICAgICAgICBpdGVtLnBvb2xLZXkgPSBrZXk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHN0YXRpYyBwdXNoKGl0ZW0pIHtcbiAgICAgICAgTGF5YS5Qb29sLnJlY292ZXIoaXRlbS5wb29sS2V5LCBpdGVtKTtcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFNjYWxlQnV0dG9uU2NyaXB0IHtcbiBcbiAgICBwdWJsaWMgZGVsYXlUaW1lOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBtaW5TY2FsZTogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIG1vbmtleUJveDogTGF5YS5JbWFnZTtcblxuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICrorr7nva5vd25lcuWHveaVsO+8jOWPr+S7peebtOaOpeiOt+WPluWIsOa3u+WKoOmZhOWKoOiEmuacrOeahOe7hOS7tuWunuS+iyBcbiAgICAgKiovXG4gICAgcHVibGljIHNldCBvd25lcih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMubW9ua2V5Qm94ID0gdmFsdWU7XG4gICAgICAgIC8v6Ieq5a6a5LmJ55qE6ISa5pys5Lya5pyJ5pe25bqP6Zeu6aKY77yM5omA5Lul5Zyo5q2k5re75Yqg5LiA5Liq5bu25pe2XG4gICAgICAgIHRoaXMubW9ua2V5Qm94LmZyYW1lT25jZSgyLCB0aGlzLCB0aGlzLm9uTG9hZGVkKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgb25Mb2FkZWQoKTogdm9pZCB7XG4gICAgICAgLyog6K6+572u5oyJ6ZKu5Li65Y2V5oCB5oyJ6ZKuXG4gICAgICAgICoqIOWPluWAvO+8mlxuICAgICAgICAqKiAx77ya5Y2V5oCB44CC5Zu+54mH5LiN5YGa5YiH5Ymy77yM5oyJ6ZKu55qE55qu6IKk54q25oCB5Y+q5pyJ5LiA56eN44CCXG4gICAgICAgICoqIDLvvJrkuKTmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB5oyJ5LiL5ZKM57uP6L+H5Y+K6YCJ5Lit54q25oCB55qu6IKk44CCXG4gICAgICAgICoqIDPvvJrkuInmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB57uP6L+H54q25oCB55qu6IKk44CB5oyJ5LiL5ZKM6YCJ5Lit54q25oCB55qu6IKkXG4gICAgICAgICovXG4gICAgICAgIC8v5re75Yqg6byg5qCH5oyJ5LiL5LqL5Lu25L6m5ZCs44CC5oyJ5pe25pe257yp5bCP5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5zY2FsZVNtYWxsKTtcbiAgICAgICAgLy/mt7vliqDpvKDmoIfmiqzotbfkuovku7bkvqblkKzjgILmiqzotbfml7bov5jljp/mjInpkq7jgIJcbiAgICAgICAgdGhpcy5tb25rZXlCb3gub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XG4gICAgICAgIC8v5re75Yqg6byg5qCH56a75byA5LqL5Lu25L6m5ZCs44CC56a75byA5pe26L+Y5Y6f5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgcHJpdmF0ZSBzY2FsZVNtYWxsKCk6dm9pZHtcbiAgICAgICAgLy/nvKnlsI/oh7MwLjjnmoTnvJPliqjmlYjmnpxcbiAgICAgICAgTGF5YS5Ud2Vlbi50byh0aGlzLm1vbmtleUJveCwge3NjYWxlWDowLjgsIHNjYWxlWTogMC44fSwgMik7XG4gICAgfVxuICAgIHByaXZhdGUgc2NhbGVCaWcoKTp2b2lke1xuICAgICAgICAvL+WPmOWkp+i/mOWOn+eahOe8k+WKqOaViOaenFxuICAgICAgICBMYXlhLlR3ZWVuLnRvKHRoaXMubW9ua2V5Qm94LCB7c2NhbGVYOjEsIHNjYWxlWToxfSwgMik7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFV0aWwge1xuICAgIHB1YmxpYyBsb2FkKHJlcywgb25Qcm9ncmVzcz86IExheWEuSGFuZGxlcik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoc3VjLCBmYWlsKSA9PiB7XG4gICAgICAgICAgICBMYXlhLmxvYWRlci5sb2FkKHJlcywgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCBzdWMpLCBvblByb2dyZXNzKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZS50b1N0cmluZygpKVxuICAgIH1cbiAgICBnZXRJdGVtKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBMYXlhLkxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgfVxuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVXRpbDtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJKCk6IFV0aWwge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IFV0aWwpO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gRGF0YUtleSB7XG4gICAgY3VyX3JlZF9kYXlfbGltaXQgPSAnY3VyX3JlZF9kYXlfbGltaXQnLFxuICAgIGN1cl9zaGFrZV9kYXlfbGltaXQgPSAnY3VyX3NoYWtlX2RheV9saW1pdCcsXG4gICAgc2hha2VMYXN0VGltZSA9ICdzaGFrZUxhc3RUaW1lJyxcbiAgICBkYXRhQ05UID0gJ2RhdGFDTlQnLFxuICAgIHRvZGF5Q250ID0gJ3RvZGF5Q250JyxcbiAgICBsYXN0VGltZSA9ICdsYXN0VGltZScsXG59Il19
  2370 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL0FwcGxpY2F0aW9ucy9MYXlhQWlySURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvYXBwL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvR2FtZUNvbmZpZy50cyIsInNyYy9NYWluLnRzIiwic3JjL1JlZERyYXdhbC50cyIsInNyYy9UZXN0U2NlbmUudHMiLCJzcmMvZXZlbnQvRXZlbnRDZW50ZXIudHMiLCJzcmMvZXZlbnQvRXZlbnRFbnVtLnRzIiwic3JjL3Nkay9BZE1hbmFnZXIudHMiLCJzcmMvc2RrL0FwcFNkay50cyIsInNyYy9zZGsvTHVja0RyYXdNb2RlbC50cyIsInNyYy9zZGsvTmF0aXZlQWQudHMiLCJzcmMvc2RrL1RUQWRTZGsudHMiLCJzcmMvc2RrL1RlYVNkay50cyIsInNyYy9zZGsvbW9kZWwvQmFzZU1vZGVsLnRzIiwic3JjL3Nkay9tb2RlbC9SZWRwYWNrZXRNb2RlbC50cyIsInNyYy9zZGsvc2RrRGF0YS9BZGRHb2xkRGF0YS50cyIsInNyYy9zZGsvc2RrRGF0YS9BcHBTZGtEYXRhLnRzIiwic3JjL3Nkay9zZGtEYXRhL0dvbGRDb25maWdEYXRhLnRzIiwic3JjL3Nkay9zZGtEYXRhL0x1Y2tEcmF3RGF0YS50cyIsInNyYy91aS9sYXlhTWF4VUkudHMiLCJzcmMvdWl0bC9BcnJheVV0aWxzLnRzIiwic3JjL3VpdGwvRGF0ZVV0aWxzLnRzIiwic3JjL3VpdGwvT2JqZWN0SW5zdGFuY2UudHMiLCJzcmMvdWl0bC9PYmplY3RQb29sLnRzIiwic3JjL3VpdGwvU2NhbGVCdXR0b25TY3JpcHQudHMiLCJzcmMvdWl0bC9VdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1ZBLGdHQUFnRztBQUNoRyx5Q0FBbUM7QUFDbkMsOERBQXdEO0FBQ3hELHlDQUFt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RSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxjQUFj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QUksQ0FBQyxDQUFDO1FBQ3pELENBQUM7OztPQUFBO0lBQ0wsV0FBQztBQUFELENBakJBLEFBaUJDLElBQUE7O0FBRUQsSUFBWSxPQU9YO0FBUEQsV0FBWSxPQUFPO0lBQ2Ysa0RBQXVDLENBQUE7SUFDdkMsc0RBQTJDLENBQUE7SUFDM0MsMENBQStCLENBQUE7SUFDL0IsOEJBQW1CLENBQUE7SUFDbkIsZ0NBQXFCLENBQUE7SUFDckIsZ0NBQXFCLENBQUE7QUFDekIsQ0FBQyxFQVBXLE9BQU8sR0FBUCxlQUFPLEtBQVAsZUFBTyxRQU9sQiIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcbn0pKCk7XHJcbihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIvKipUaGlzIGNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IExheWFBaXJJREUsIHBsZWFzZSBkbyBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucy4gKi9cclxuaW1wb3J0IFRlc3RTY2VuZSBmcm9tIFwiLi9UZXN0U2NlbmVcIlxuaW1wb3J0IFNjYWxlQnV0dG9uU2NyaXB0IGZyb20gXCIuL3VpdGwvU2NhbGVCdXR0b25TY3JpcHRcIlxuaW1wb3J0IFJlZERyYXdhbCBmcm9tIFwiLi9SZWREcmF3YWxcIlxuaW1wb3J0IE5hdGl2ZUFkIGZyb20gXCIuL3Nkay9OYXRpdmVBZFwiXHJcbi8qXHJcbiog5ri45oiP5Yid5aeL5YyW6YWN572uO1xyXG4qL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lQ29uZmlne1xyXG4gICAgc3RhdGljIHdpZHRoOm51bWJlcj03NTA7XHJcbiAgICBzdGF0aWMgaGVpZ2h0Om51bWJlcj0xMzM0O1xyXG4gICAgc3RhdGljIHNjYWxlTW9kZTpzdHJpbmc9XCJmaXhlZHdpZHRoXCI7XHJcbiAgICBzdGF0aWMgc2NyZWVuTW9kZTpzdHJpbmc9XCJub25lXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25WOnN0cmluZz1cInRvcFwiO1xyXG4gICAgc3RhdGljIGFsaWduSDpzdHJpbmc9XCJsZWZ0XCI7XHJcbiAgICBzdGF0aWMgc3RhcnRTY2VuZTphbnk9XCJUZXN0U2NlbmUuc2NlbmVcIjtcclxuICAgIHN0YXRpYyBzY2VuZVJvb3Q6c3RyaW5nPVwiXCI7XHJcbiAgICBzdGF0aWMgZGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBzdGF0OmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgcGh5c2ljc0RlYnVnOmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgZXhwb3J0U2NlbmVUb0pzb246Ym9vbGVhbj10cnVlO1xyXG4gICAgY29uc3RydWN0b3IoKXt9XHJcbiAgICBzdGF0aWMgaW5pdCgpe1xyXG4gICAgICAgIHZhciByZWc6IEZ1bmN0aW9uID0gTGF5YS5DbGFzc1V0aWxzLnJlZ0NsYXNzO1xyXG4gICAgICAgIHJlZyhcIlRlc3RTY2VuZS50c1wiLFRlc3RTY2VuZSk7XG4gICAgICAgIHJlZyhcInVpdGwvU2NhbGVCdXR0b25TY3JpcHQudHNcIixTY2FsZUJ1dHRvblNjcmlwdCk7XG4gICAgICAgIHJlZyhcIlJlZERyYXdhbC50c1wiLFJlZERyYXdhbCk7XG4gICAgICAgIHJlZyhcInNkay9OYXRpdmVBZC50c1wiLE5hdGl2ZUFkKTtcclxuICAgIH1cclxufVxyXG5HYW1lQ29uZmlnLmluaXQoKTsiLCJpbXBvcnQgR2FtZUNvbmZpZyBmcm9tIFwiLi9HYW1lQ29uZmlnXCI7XHJcbmltcG9ydCBBZE1hbmFnZXIgZnJvbSBcIi4vc2RrL0FkTWFuYWdlclwiO1xyXG5pbXBvcnQgUmVkcGFja2V0TW9kZWwgZnJvbSBcIi4vc2RrL21vZGVsL1JlZHBhY2tldE1vZGVsXCI7XHJcbmltcG9ydCBBcHBTZGsgZnJvbSBcIi4vc2RrL0FwcFNka1wiO1xyXG5jbGFzcyBNYWluIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdC8v5qC55o2uSURF6K6+572u5Yid5aeL5YyW5byV5pOOXHRcdFxyXG5cdFx0aWYgKHdpbmRvd1tcIkxheWEzRFwiXSkgTGF5YTNELmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQpO1xyXG5cdFx0ZWxzZSBMYXlhLmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQsIExheWFbXCJXZWJHTFwiXSk7XHJcblx0XHRMYXlhW1wiUGh5c2ljc1wiXSAmJiBMYXlhW1wiUGh5c2ljc1wiXS5lbmFibGUoKTtcclxuXHRcdExheWFbXCJEZWJ1Z1BhbmVsXCJdICYmIExheWFbXCJEZWJ1Z1BhbmVsXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YS5zdGFnZS5zY2FsZU1vZGUgPSBHYW1lQ29uZmlnLnNjYWxlTW9kZTtcclxuXHRcdExheWEuc3RhZ2Uuc2NyZWVuTW9kZSA9IEdhbWVDb25maWcuc2NyZWVuTW9kZTtcclxuXHRcdExheWEuc3RhZ2UuYWxpZ25WID0gR2FtZUNvbmZpZy5hbGlnblY7XHJcblx0XHRMYXlhLnN0YWdlLmFsaWduSCA9IEdhbWVDb25maWcuYWxpZ25IO1xyXG5cdFx0Ly/lhbzlrrnlvq7kv6HkuI3mlK/mjIHliqDovb1zY2VuZeWQjue8gOWcuuaZr1xyXG5cdFx0TGF5YS5VUkwuZXhwb3J0U2NlbmVUb0pzb24gPSBHYW1lQ29uZmlnLmV4cG9ydFNjZW5lVG9Kc29uO1xyXG5cclxuXHRcdC8v5omT5byA6LCD6K+V6Z2i5p2/77yI6YCa6L+HSURF6K6+572u6LCD6K+V5qih5byP77yM5oiW6ICFdXJs5Zyw5Z2A5aKe5YqgZGVidWc9dHJ1ZeWPguaVsO+8jOWdh+WPr+aJk+W8gOiwg+ivlemdouadv++8iVxyXG5cdFx0aWYgKEdhbWVDb25maWcuZGVidWcgfHwgTGF5YS5VdGlscy5nZXRRdWVyeVN0cmluZyhcImRlYnVnXCIpID09IFwidHJ1ZVwiKSBMYXlhLmVuYWJsZURlYnVnUGFuZWwoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnBoeXNpY3NEZWJ1ZyAmJiBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXSkgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0uZW5hYmxlKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5zdGF0KSBMYXlhLlN0YXQuc2hvdygpO1xyXG5cdFx0TGF5YS5hbGVydEdsb2JhbEVycm9yID0gdHJ1ZTtcclxuXHJcblx0XHQvL+a/gOa0u+i1hOa6kOeJiOacrOaOp+WItu+8jHZlcnNpb24uanNvbueUsUlEReWPkeW4g+WKn+iDveiHquWKqOeUn+aIkO+8jOWmguaenOayoeacieS5n+S4jeW9seWTjeWQjue7rea1geeoi1xyXG5cdFx0TGF5YS5SZXNvdXJjZVZlcnNpb24uZW5hYmxlKFwidmVyc2lvbi5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vblZlcnNpb25Mb2FkZWQpLCBMYXlhLlJlc291cmNlVmVyc2lvbi5GSUxFTkFNRV9WRVJTSU9OKTtcclxuXHR9XHJcblxyXG5cdG9uVmVyc2lvbkxvYWRlZCgpOiB2b2lkIHtcclxuXHRcdC8v5r+A5rS75aSn5bCP5Zu+5pig5bCE77yM5Yqg6L295bCP5Zu+55qE5pe25YCZ77yM5aaC5p6c5Y+R546w5bCP5Zu+5Zyo5aSn5Zu+5ZCI6ZuG6YeM6Z2i77yM5YiZ5LyY5YWI5Yqg6L295aSn5Zu+5ZCI6ZuG77yM6ICM5LiN5piv5bCP5Zu+XHJcblx0XHRMYXlhLkF0bGFzSW5mb01hbmFnZXIuZW5hYmxlKFwiZmlsZWNvbmZpZy5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vbkNvbmZpZ0xvYWRlZCkpO1xyXG5cdH1cclxuXHJcblx0b25Db25maWdMb2FkZWQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmluaXRTZGsoKTtcclxuXHRcdHRoaXMubG9hZERhdGEoKTtcclxuXHR9XHJcblxyXG5cdC8qKuWIneWni+WMllNESyAqL1xyXG5cdHByaXZhdGUgYXN5bmMgaW5pdFNkaygpIHtcclxuXHRcdGlmIChBcHBTZGsuSS5pc015QnJpZGdlKSB7XHJcblx0XHRcdEFwcFNkay5pbml0KClcclxuXHRcdFx0YXdhaXQgQXBwU2RrLkkuaW5pdFNkaygpO1xyXG5cdFx0XHR0aGlzLnRvZ2dsZVNjZW5lKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRMYXlhLnRpbWVyLm9uY2UoMTAwLCB0aGlzLCB0aGlzLmluaXRTZGspO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBsb2FkRGF0YSgpIHtcclxuXHRcdC8vIOWkhOeQhua4uOaIj+WKoOi9vVxyXG5cclxuXHRcdC8v5Yqg6L295a6M5oiQXHJcblx0XHR0aGlzLnRvZ2dsZVNjZW5lKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNoZWNrTG9hZDogbnVtYmVyID0gMDtcclxuXHRwcml2YXRlIHRvZ2dsZVNjZW5lKCkge1xyXG5cdFx0Ly/liqDovb1JREXmjIflrprnmoTlnLrmma9cclxuXHRcdHRoaXMuY2hlY2tMb2FkKys7XHJcblx0XHRpZiAodGhpcy5jaGVja0xvYWQgPCAyKSB7XHJcblx0XHRcdHJldHVyblxyXG5cdFx0fVxyXG5cdFx0QXBwU2RrLkkuaGlkZVNwbGFzaCgpOy8v6ZqQ6JeP5Yqg6L296aG1IOWPr+agueaNrumcgOaxguaUvuWIsOWFtuS7luS9jee9rlxyXG5cdFx0R2FtZUNvbmZpZy5zdGFydFNjZW5lICYmIExheWEuU2NlbmUub3BlbihHYW1lQ29uZmlnLnN0YXJ0U2NlbmUpO1xyXG5cdH1cclxufVxyXG4vL+a/gOa0u+WQr+WKqOexu1xyXG5uZXcgTWFpbigpO1xyXG4iLCJpbXBvcnQgUmVkcGFja2V0TW9kZWwgZnJvbSBcIi4vc2RrL21vZGVsL1JlZHBhY2tldE1vZGVsXCI7XG5pbXBvcnQgeyBFdmVudENlbnRlciB9IGZyb20gXCIuL2V2ZW50L0V2ZW50Q2VudGVyXCI7XG5pbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi9ldmVudC9FdmVudEVudW1cIjtcbi8qKlxuICog5Li755WM6Z2iICDph5HluIHph5Hpop1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVkRHJhd2FsIGV4dGVuZHMgTGF5YS5TY3JpcHQge1xuICAgIC8qKiBAcHJvcCB7bmFtZTpjb2lubGFiLCB0aXBzOlwi6YeR5biBXCIsIHR5cGU6Tm9kZX0qL1xuICAgIGNvaW5sYWI6IExheWEuTGFiZWw7XG4gICAgLyoqIEBwcm9wIHtuYW1lOnRpcGxhYiwgdGlwczpcIuaPkOekulwiLCB0eXBlOk5vZGV9Ki9cbiAgICB0aXBsYWI6IExheWEuTGFiZWw7XG5cbiAgICBwcml2YXRlIHRvdGFsQ29pbjogbnVtYmVyID0gMTEwO1xuXG4gICAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH1cbiAgICBvblN0YXJ0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXIoKTtcbiAgICAgICAgLy8gdGhpcy50aXBsYWIudmlzaWJsZSA9IGZhbHNlO1xuICAgIH1cbiAgICBvbkVuYWJsZSgpIHtcbiAgICAgICAgRXZlbnRDZW50ZXIuYWRkKEV2ZW50RW51bS5BUFBfU0hPVywgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICAgICAgRXZlbnRDZW50ZXIuYWRkKEV2ZW50RW51bS5VUERBVEVfQ09JTiwgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICB9XG5cbiAgICBvbkRpc2FibGUoKSB7XG4gICAgICAgIEV2ZW50Q2VudGVyLnJlbW92ZShFdmVudEVudW0uQVBQX1NIT1csIHRoaXMsIHRoaXMudXBkYXRlU3Rhcik7XG4gICAgICAgIEV2ZW50Q2VudGVyLnJlbW92ZShFdmVudEVudW0uVVBEQVRFX0NPSU4sIHRoaXMsIHRoaXMudXBkYXRlU3Rhcik7XG4gICAgfVxuXG4gICAgYXN5bmMgdXBkYXRlU3RhcigpIHtcbiAgICAgICAgbGV0IGNvaW4gPSBhd2FpdCBSZWRwYWNrZXRNb2RlbC5JLmdldFRvdGFsQ29pbigpO1xuICAgICAgICAvLyBsZXQgY29pbiA9IDEwMDBcbiAgICAgICAgdGhpcy50b3RhbENvaW4gPSBjb2luO1xuICAgICAgICB0aGlzLmNvaW5sYWIudGV4dCA9ICcnICsgY29pbjtcbiAgICAgICAgbGV0IHN0ciA9ICflj6/mj5DnjrAnO1xuICAgICAgICAvKirmm7TmlrDkuIvkuIvkuIDmrKHmj5DnjrDnmoTpop3luqYgKi9cbiAgICAgICAgbGV0IG5leHREcmF3YWwgPSBhd2FpdCBSZWRwYWNrZXRNb2RlbC5JLm1pbldpdGhEcmF3YWwoKTtcbiAgICAgICAgaWYgKHRoaXMudG90YWxDb2luID4gMCkge1xuICAgICAgICAgICAgbGV0IGxlZnRDb2luID0gbmV4dERyYXdhbCAtIHRoaXMudG90YWxDb2luO1xuICAgICAgICAgICAgaWYgKGxlZnRDb2luID4gMClcbiAgICAgICAgICAgICAgICBzdHIgPSBg6L+Y5beuJHsobGVmdENvaW4gLyAxMDAwMCkudG9GaXhlZCgzKX3ph5Hpop3lj6/mj5DnjrBgO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGlwbGFiLnRleHQgPSBzdHI7XG4gICAgICAgIHRoaXMudGlwbGFiLnZpc2libGUgPSBCb29sZWFuKG5leHREcmF3YWwpO1xuICAgIH1cbn0iLCJpbXBvcnQgeyB1aSB9IGZyb20gXCIuL3VpL2xheWFNYXhVSVwiO1xuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9zZGsvQWRNYW5hZ2VyXCI7XG5pbXBvcnQgUmVkcGFja2V0TW9kZWwgZnJvbSBcIi4vc2RrL21vZGVsL1JlZHBhY2tldE1vZGVsXCI7XG5pbXBvcnQgQXBwU2RrIGZyb20gXCIuL3Nkay9BcHBTZGtcIjtcbmltcG9ydCB7IERvdEtleSB9IGZyb20gXCIuL3Nkay9UZWFTZGtcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4vZXZlbnQvRXZlbnRDZW50ZXJcIjtcbmltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuL2V2ZW50L0V2ZW50RW51bVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0U2NlbmUgZXh0ZW5kcyB1aS5UZXN0U2NlbmVVSSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIC8v5YWz6Zet5aSa54K56Kem5o6n77yM5ZCm5YiZ5bCx5peg5pWM5LqGXG4gICAgICAgIExheWEuTW91c2VNYW5hZ2VyLm11bHRpVG91Y2hFbmFibGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1UZXN0U2NlbmUtLS0tLS0tJylcbiAgICAgICAgdGhpcy5OYXRpdmVBRC52aXNpYmxlID0gZmFsc2U7XG5cbiAgICB9XG5cbiAgICBvbkVuYWJsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idG5TZXJ2ZXIub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5vcGVuU2VydmVyKTtcbiAgICAgICAgdGhpcy5idG5EcmF3YWwub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5vcGVuUGVyc29uYWwpO1xuICAgICAgICB0aGlzLmJ0bkRyYXcub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5vbkRyYXcpO1xuICAgICAgICB0aGlzLmJ0bkludml0ZS5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLmludml0YXRpb24pO1xuICAgICAgICB0aGlzLmJ0blZpYnJhdGUub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5vblZpYnJhdGUpO1xuICAgICAgICB0aGlzLmJ0blByZWxvYWRBRC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnByZWxvYWRBRCk7XG4gICAgICAgIHRoaXMuYnRuU2hvd0Jhbm5lci5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dCYW5uZXIpO1xuICAgICAgICB0aGlzLmJ0blNob3dGdWxsQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93RnVsbEFkKTtcbiAgICAgICAgdGhpcy5idG5TaG93TmF0aXZlQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93TmF0aXZlQWQpO1xuICAgICAgICB0aGlzLmJ0blNob3dJbnRlckFkLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd0ludGVyQWQpO1xuICAgICAgICB0aGlzLmJ0blJld2FyZEFkLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd1Jld2FyZEFkKTtcbiAgICAgICAgdGhpcy5idG5SZWRwYWNrZXQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5vcGVuUmVkcGFja2V0KTtcblxuICAgIH1cblxuICAgIC8qKumihOWKoOi9veW5v+WRiiAqL1xuICAgIGFzeW5jIHByZWxvYWRBRCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXByZWxvYWRBRC0tLS0tLS0nKVxuICAgICAgICBhd2FpdCBBZE1hbmFnZXIuSS5pbml0KCk7XG4gICAgICAgIC8vIE15QnJpZGdlLnRlc3RSZXR1cm4oZnVuY3Rpb24gKC4uLmFycmF5KSB7XG4gICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhcIi0tLS0tLS13ZWItLS0tLS0tLW9uQ2xpY2stLS0tLT4+Y29jb3MgSlMtLS0tLS0tTXlCcmlkZ2UudGVzdFJldHVybi0tLS0tLVwiICsgSlNPTi5zdHJpbmdpZnkoYXJyYXkpKTtcblxuICAgICAgICAvLyB9KTtcbiAgICB9XG5cbiAgICAvKirmmL7npLrlhajlsY/lub/lkYogKi9cbiAgICBzaG93RnVsbEFkKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tc2hvd0Z1bGxBZC0tLS0tLS0nKVxuICAgICAgICBBZE1hbmFnZXIuSS5zaG93RnVsbEFkKCk7XG4gICAgICAgIC8vIHZhciByZXQgPSBNeUJyaWRnZS5tYXBUb1N0cmluZyh7XG4gICAgICAgIC8vICAgICBkYXRhOiB7XG4gICAgICAgIC8vICAgICAgICAgXCJjb3VudFwiOiAyLCBcInRpdGxlXCI6IFt7IFwibmFtZVwiOiBcIm5ublwiLCBcInZhbHVlXCI6IFwibm5udmFsdWVcIiwgXCJkZWZhdWx0X3Nob3dcIjogMSB9XG4gICAgICAgIC8vICAgICAgICAgICAgICwgeyBcIm5hbWVcIjogXCJtbW1cIiwgXCJ2YWx1ZVwiOiBcIm1tbXZhbHVlXFxcImFhc2Rhc2RcIiB9XVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9KTtcblxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIi0tLS0tLS13ZWItLS0tLS0tLW9uQ2xpY2stLS0tLT4+Y29jb3MgSlMtLS0tLS0tTXlCcmlkZ2UubWFwVG9TdHJpbmctLS0tLS1cIiArIEpTT04uc3RyaW5naWZ5KHJldCkpO1xuICAgIH1cbiAgICAvKirmmL7npLpiYW5uZXIgKi9cbiAgICBzaG93QmFubmVyKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tc2hvd0Jhbm5lci0tLS0tLS0nKVxuICAgICAgICBBZE1hbmFnZXIuSS5zaG93QmFubmVyKCk7XG4gICAgfVxuXG4gICAgLyoq5L+h5oGv5rWB5bm/5ZGKICovXG4gICAgc2hvd05hdGl2ZUFkKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tc2hvd05hdGl2ZUFkLS0tLS0tLScpXG4gICAgICAgIHRoaXMuTmF0aXZlQUQudmlzaWJsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoq5o+S5bGP5bm/5ZGKICovXG4gICAgc2hvd0ludGVyQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93SW50ZXJBZC0tLS0tLS0nKVxuXG4gICAgICAgIEFkTWFuYWdlci5JLnNob3dJbnRlckFkKCk7XG4gICAgfVxuICAgIC8qKua/gOWKseinhumikeW5v+WRiiAqL1xuICAgIGFzeW5jIHNob3dSZXdhcmRBZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dSZXdhcmRBZC0tLS0tLS0nKVxuICAgICAgICBhd2FpdCBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoJ3ZpZGVvVHlwZScpO1xuICAgICAgICAvKirmiJDlip/lkI7miafooYzlr7nlupTnmoTlpZblirEgKi9cbiAgICB9XG4gICAgLyoq5oSP6KeB5Y+N6aaIICovXG4gICAgb3BlblNlcnZlcigpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLW9wZW5TZXJ2ZXItLS0tLS0tJylcbiAgICAgICAgQXBwU2RrLkkuZmVlZGJhY2soKTtcbiAgICB9XG5cblxuICAgIGFzeW5jIG9wZW5SZWRwYWNrZXQoKSB7XG4gICAgICAgIGxldCBib2wgPSBSZWRwYWNrZXRNb2RlbC5JLmNoZWNrUmVkcGFja2V0KCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGJvbCArICfnuqLljIXojrflj5bnu5PmnpzvvJpjdXJSZWRwYWNrZXQnICsgUmVkcGFja2V0TW9kZWwuSS5jdXJSZWRwYWNrZXQpXG4gICAgICAgIGlmIChib2wpIHtcbiAgICAgICAgICAgIC8vKirlvLnlh7rnuqLljIXnmoTnlYzpnaIsICDmmoLml7blpITnkIbmiJAg55u05o6l55yL5bm/5ZGK6I635Y+W6YeR5biBICovXG4gICAgICAgICAgICBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoRG90S2V5LnJld2FyZF9hZCkudGhlbihhc3luYyAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLliqDph5HluIFcIilcbiAgICAgICAgICAgICAgICBsZXQgY29pbiA9IGF3YWl0IFJlZHBhY2tldE1vZGVsLkkuYWRkQ29pbigpOyAvLyDnnIvlrozlub/lkYrojrflj5bpkrHvvIjmraTml7blt7Lnu4/liqDliLDotKbmiLfkuobvvIzmmoLmnKrmj5Dkvpvmj5DliY3nn6XpgZPojrflj5blpJrlsJHpkrHnmoTmlrnms5XvvIlcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuiOt+WPluS6humSsVwiLCBjb2luKVxuICAgICAgICAgICAgICAgIFJlZHBhY2tldE1vZGVsLkkuZ2V0UmVwYWNrZXQoKTsvL+iuoeaVsFxuICAgICAgICAgICAgICAgIC8qKuabtOaWsOWfuuacrOaYvuekuiAqL1xuICAgICAgICAgICAgICAgIEV2ZW50Q2VudGVyLmVtaXQoRXZlbnRFbnVtLlVQREFURV9DT0lOKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvblZpZGVvIGVycm9yXCIpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coJ+e6ouWMheiOt+WPlue7k+aenO+8micgKyBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5vcGVuUG9wd2luKFJlZHBhY2tldFBvcHdpbiwgMCk7XG4gICAgfVxuXG4gICAgLyoq5omT5byA5Liq5Lq65Lit5b+DICovXG4gICAgb3BlblBlcnNvbmFsKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tb3BlblNlcnZlci0tLS0tLS0nKVxuICAgICAgICBBcHBTZGsuSS5wZXJzb25hbCgpO1xuICAgIH1cbiAgICAvKirpgoDor7flpb3lj4sgKi9cbiAgICBpbnZpdGF0aW9uKCkge1xuICAgICAgICBBcHBTZGsuSS5pbnZpdGF0aW9uKCk7XG4gICAgfVxuICAgIC8v6ZyH5YqoXG4gICAgcHJpdmF0ZSBvblZpYnJhdGUoKSB7XG4gICAgICAgIEFwcFNkay5JLnZpYnJhdGUoMClcbiAgICB9XG5cblxuICAgIGdldFByb3BzKGRhdGEpIHtcbiAgICAgICAgbGV0IGJvb3N0ZXI7XG4gICAgICAgIGxldCByZXdhcmROdW0gPSBkYXRhLm51bTtcbiAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiDlpITnkIbmuLjmiI/kuK3nmoTpgZPlhbfmmL7npLpcbiAgICAgICAgICovXG4gICAgICAgIC8vIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAvLyAgICAgY2FzZSA0OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5SZW1vdmU7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vICAgICBjYXNlIDY6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLkNoYW5nZTtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgIGNhc2UgNTpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuUmVmcmVzaDtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgIGNhc2UgNzpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuUmFuZFJlbW92ZTtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgIGNhc2UgMzpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuU3RhcjtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBWaWV3TWFuYWdlci5JLm9wZW5Qb3B3aW4oUmVjZWl2ZVByb3BzUG9wd2luLCBib29zdGVyLCByZXdhcmROdW0pO1xuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIOeci+W5v+WRiuiOt+W+l+e6ouWMhVxuICAgICAqL1xuICAgIGFzeW5jIHdhdGNoQURDb2luKCkge1xuICAgICAgICBhd2FpdCBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoJ3ZpZGVvVHlwZScpO1xuICAgICAgICB0aGlzLmdldENvaW4oKTtcbiAgICB9XG4gICAgLyoq55u05o6l6I635b6X57qi5YyFICovXG4gICAgZ2V0Q29pbigpIHtcbiAgICAgICAgLy9cYuWIt+aWsOaAu+mHkeW4gVxuICAgICAgICAvLyBBcHBNYW5hZ2VyLkkucmVkcGFja2V0LmdldFJlcGFja2V0KClcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5vcGVuUG9wd2luKFJlZFBhY2tldFJld2FyZCwgMik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRyYXcoKSB7XG4gICAgICAgIEFwcFNkay5JLm9wZW5SZXdhcmQoKVxuICAgIH1cbn0iLCJpbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi9FdmVudEVudW1cIjtcblxuLypcbiogbmFtZTtcbiovXG5leHBvcnQgY2xhc3MgRXZlbnRDZW50ZXIge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogTGF5YS5FdmVudERpc3BhdGNoZXI7XG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0IEkoKTogTGF5YS5FdmVudERpc3BhdGNoZXIge1xuICAgICAgICB3aW5kb3dbJ2V2J10gPSB0aGlzLl9pbnN0YW5jZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBMYXlhLkV2ZW50RGlzcGF0Y2hlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBlbWl0KGV2ZW50OiBFdmVudEVudW0sIC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5JLmV2ZW50KGV2ZW50LnRvU3RyaW5nKCksIGFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWRkKHR5cGU6IEV2ZW50RW51bSwgY2FsbGVyOiBhbnksIGxpc3RlbmVyOiBGdW5jdGlvbiwgYXJncz86IEFycmF5PGFueT4pIHtcbiAgICAgICAgdGhpcy5JLm9uKHR5cGUudG9TdHJpbmcoKSwgY2FsbGVyLCBsaXN0ZW5lciwgYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmUodHlwZTogRXZlbnRFbnVtLCBjYWxsZXI6IGFueSwgbGlzdGVuZXI6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuSS5vZmYodHlwZS50b1N0cmluZygpLCBjYWxsZXIsIGxpc3RlbmVyKTtcbiAgICB9XG59IiwiZXhwb3J0IGVudW0gRXZlbnRFbnVtIHtcblxuXHRDSEVDS19SRURQQUNLRVQgPSA8YW55PidjaGVja19yZWRwYWNrZXQnLFxuXHRBUFBfU0hPVyA9IDxhbnk+J2FwcC5zaG93Jyxcblx0QVBQX0hJREUgPSA8YW55PidhcHAuaGlkZScsXG5cblxuXHRVUERBVEVfQ09JTiA9IDxhbnk+J3VwZGF0ZS5jb2luJyxcblxufSIsImltcG9ydCBUVEFkU2RrIGZyb20gXCIuL1RUQWRTZGtcIjtcclxuaW1wb3J0IHsgQXBwU2RrRGF0YSB9IGZyb20gXCIuL3Nka0RhdGEvQXBwU2RrRGF0YVwiO1xyXG5pbXBvcnQgVGVhU2RrLCB7IERvdEtleSB9IGZyb20gXCIuL1RlYVNka1wiO1xyXG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFkTWFuYWdlciB7XHJcbiAgICBwcml2YXRlIGxhc3RWaWRlb1RpbWU6IG51bWJlcjtcclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMucHJlbG9hZFJld2FyZEFkKCk7XHJcbiAgICAgICAgdGhpcy5wcmVsb2FkQmFubmVyKCk7XHJcbiAgICAgICAgdGhpcy5wcmVsb2FkRnVsbEFkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlbG9hZEJhbm5lcigpIHtcclxuICAgICAgICBUVEFkU2RrLkkubG9hZEJhbm5lckV4cHJlc3NBZCgxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVsb2FkUmV3YXJkQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLnNob3dSZXdhcmRWaWRlb0FkKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZWxvYWRGdWxsQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRGdWxsU2NyZWVuVmlkZW9BZCgxKTtcclxuICAgIH1cclxuICAgIHByZWxvYWROYXRpdmVBZFlMSCgpIHtcclxuICAgICAgICBUVEFkU2RrLkkubG9hZE5hdGl2ZUFkWUxIKDEsIDEsIDYwMCwgMzAwLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVsb2FkSW50ZXJBZCgpIHtcclxuICAgICAgICBUVEFkU2RrLkkuc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZWxvYWROYXRpdmVBZCgpIHtcclxuICAgICAgICBUVEFkU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlQWR2ZXJEaWFsb2coKSB7XHJcbiAgICAgICAgaWYgKCFMYXlhLkJyb3dzZXIub25BbmRyb2lkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgVFRBZFNkay5JLmNsb3NlQWR2ZXJEaWFsb2coKVxyXG4gICAgfVxyXG4gICAgY2xvc2VBZEJhbm5lcigpIHtcclxuICAgICAgICBUVEFkU2RrLkkuY2xvc2VBZEJhbm5lcigpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd1Jld2FyZEFkKHBvaW50OiBEb3RLZXkgfCBzdHJpbmcpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dSZXdhcmRWaWRlb0FkKDAsIHBvaW50KTtcclxuICAgICAgICAgICAgLy8gdGhpcy5sYXN0VmlkZW9UaW1lID0gTGF5YS50aW1lci5jdXJyVGltZXI7XHJcbiAgICAgICAgICAgIC8vIHRoaXMucHJlbG9hZFJld2FyZEFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZFJld2FyZEFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcclxuICAgICAgICAgICAgLy8gLy8g5Yqg6L295r+A5Yqx6KeG6aKR5aSx6LSl6LCD55So5YWo5bGP6KeG6aKR5bm26L+U5Zue5oiQ5Yqf77yBXHJcbiAgICAgICAgICAgIC8vIHRoaXMuc2hvd0Z1bGxBZCgpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgLy8gICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzKTtcclxuICAgICAgICAgICAgLy8gfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMucHJlbG9hZFJld2FyZEFkKCk7XHJcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgICAgIC8vIH0pXHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgYXN5bmMgc2hvd0Z1bGxBZCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLmxvYWRGdWxsU2NyZWVuVmlkZW9BZCgpO1xyXG5cclxuICAgICAgICAgICAgVGVhU2RrLkkuZG90KERvdEtleS5mdWxsU2NyZWVuLCB7IGZyb206ICdzaG93JyB9KTtcclxuICAgICAgICAgICAgdGhpcy5wcmVsb2FkRnVsbEFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEZ1bGxBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dJbnRlckFkKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCByZXQgPSBhd2FpdCBUVEFkU2RrLkkuc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEludGVyQWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXQpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVsb2FkSW50ZXJBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjaGVja1ZpZGVvSW5DZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXN0VmlkZW9UaW1lICYmIChMYXlhLnRpbWVyLmN1cnJUaW1lciAtIHRoaXMubGFzdFZpZGVvVGltZSA8PSAzMDAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0Jhbm5lcigpIHtcclxuICAgICAgICBUVEFkU2RrLkkubG9hZEJhbm5lckV4cHJlc3NBZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dOYXRpdmVBZCh4LCB5LCB3LCBoLCBwcmVsb2FkID0gMCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkTmF0aXZlRXhwcmVzc0FkKHgsIHksIHcsIGgsIHByZWxvYWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOS8mOmHj+axh+S/oeaBr+a1geW5v+WRilxyXG4gICAgc2hvd05hdGl2ZUFkWUxIKHgsIHksIHcsIGgsIHByZWxvYWQgPSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIFRUQWRTZGsuSS5sb2FkTmF0aXZlQWRZTEgoeCwgeSwgdywgaCwgcHJlbG9hZCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkxvYWROYXRpdmVBZEV2ZW50KCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5vcGVuTG9hZE5hdGl2ZUFkRXZlbnQoKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEkoKTogQWRNYW5hZ2VyIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KEFkTWFuYWdlcik7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcbmltcG9ydCBBZE1hbmFnZXIgZnJvbSBcIi4vQWRNYW5hZ2VyXCI7XG5pbXBvcnQgUmVkcGFja2V0TW9kZWwgZnJvbSBcIi4vbW9kZWwvUmVkcGFja2V0TW9kZWxcIjtcbmltcG9ydCBMdWNrRHJhd01vZGVsIGZyb20gXCIuL0x1Y2tEcmF3TW9kZWxcIjtcbmltcG9ydCB7IEFwcFNka0RhdGEgfSBmcm9tIFwiLi9zZGtEYXRhL0FwcFNka0RhdGFcIjtcbmltcG9ydCB7IEx1Y2tEcmF3RGF0YSB9IGZyb20gXCIuL3Nka0RhdGEvTHVja0RyYXdEYXRhXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcFNkayB7XG4gICAgcHJpdmF0ZSBfd2lkdGg6IG51bWJlcjtcbiAgICBwcml2YXRlIF9oZWlnaHQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF9jaGFubmVsOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdmVyc2lvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgX2xldmVsOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfZ2FtZUNvbmZpZzogbnVtYmVyO1xuXG4gICAgcHVibGljIHBhbmdvbGluSWQ6IHN0cmluZztcbiAgICBwdWJsaWMgYWRuZXRJZDogc3RyaW5nO1xuICAgIHB1YmxpYyB1aWQ6IG51bWJlclxuICAgIHB1YmxpYyBpc015QnJpZGdlOiBib29sZWFuXG4gICAgcHVibGljIGlzSGlkZTogYm9vbGVhblxuXG4gICAgc3RhdGljIGFzeW5jIGluaXQoKSB7XG4gICAgICAgIEFwcFNkay5JLmdldFN5c3RlbUluZm8oKVxuICAgICAgICBBcHBTZGsuSS5pbml0R2FtZUNvbmZpZygpO1xuICAgICAgICBBZE1hbmFnZXIuSS5pbml0KCk7Ly/pooTliqDovb3lub/lkYogXG4gICAgICAgIGF3YWl0IE9iamVjdEluc3RhbmNlLmdldChSZWRwYWNrZXRNb2RlbCkuaW5pdCgpO1xuICAgICAgICBMdWNrRHJhd01vZGVsLkkuaW5pdCgpO1xuICAgIH1cblxuICAgIGluaXRTZGsoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldFVzZXJJbmZvKCk7XG4gICAgICAgICAgICByZXNvbHZlKDEpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgbXlCcmlkZ2UoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgTXlCcmlkZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gTXlCcmlkZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCcgbm8gcmVnaXN0ZXIgbXlCcmlkZ2UhISEnKVxuICAgICAgICB9XG4gICAgfVxuXG5cblxuICAgIC8qKuiOt+WPluWfuuacrOeJiOacrOS/oeaBr+S7peWPiuaJi+acuueahOmFjee9riAqL1xuICAgIGdldFN5c3RlbUluZm8oa2V5OiBudW1iZXIgPSAwKSB7XG4gICAgICAgIGxldCByZXQgPSB0aGlzLm15QnJpZGdlLmdldFN5c3RlbUluZm8oa2V5KTtcbiAgICAgICAgbGV0IHsgdywgaCwgdmVyc2lvbk5hbWUsIGNoYW5uZWwsIHBhbmdvbGluLCBhZG5ldCwgbGV2ZWwgfSA9IEpTT04ucGFyc2UocmV0KTtcbiAgICAgICAgW3RoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQsIHRoaXMuX3ZlcnNpb24sXG4gICAgICAgIHRoaXMuX2NoYW5uZWwsIHRoaXMucGFuZ29saW5JZCxcbiAgICAgICAgdGhpcy5hZG5ldElkLCB0aGlzLl9sZXZlbF0gPSBbdywgaCwgdmVyc2lvbk5hbWUsIGNoYW5uZWwsIHBhbmdvbGluLCBhZG5ldCwgbGV2ZWxdO1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVc2VySW5mbygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS0tLS0tLS0tLWdldFVzZXJJbmZv5Zue6LCDIOWJjS0tLS0tLS0tLS0tLS0tLVwiKVxuICAgICAgICAgICAgdGhpcy5teUJyaWRnZS5nZXRHYW1lVXNlckluZm8oKHJldCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS0tLS0tLS0tLWdldFVzZXJJbmZv5Zue6LCDLS0tLS0tLS0tLS0tLS0tXCIsIHJldClcbiAgICAgICAgICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShyZXQpO1xuICAgICAgICAgICAgICAgIEFwcFNka0RhdGEuSS5pbml0RGF0YShyZXMpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoMSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGluaXRHYW1lQ29uZmlnKCkge1xuICAgICAgICB0aGlzLl9nYW1lQ29uZmlnID0gdGhpcy5nZXRHYW1lQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6ZyH5YqoXG4gICAgICogQHBhcmFtIGtleSAwIOefremch+WKqCAxIOmVv+mch+WKqFxuICAgICAqL1xuICAgIHZpYnJhdGUoa2V5OiBudW1iZXIgPSAwKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uub3BlblN5c3RlbUZ1bihrZXkpO1xuICAgIH1cblxuICAgIC8qKumakOiXj+WQr+WKqOWxjyAqL1xuICAgIGhpZGVTcGxhc2goKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuaGlkZVNwbGFzaCgpO1xuICAgIH1cblxuICAgIC8qKuW8ueWHuuaPkOeOsCAqL1xuICAgIHdpdGhEcmF3YWwoKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uud2l0aERyYXdhbCgpO1xuICAgIH1cbiAgICAvKirmhI/op4Hlj43ppoggKi9cbiAgICBmZWVkYmFjaygpIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5mZWVkYmFjaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBrZXkg6buY6K6kMCDvvIznrb7liLAgMVxuICAgICAqL1xuICAgIHBlcnNvbmFsKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLnBlcnNvbmFsKCk7XG4gICAgfVxuICAgIC8qKumCgOivt+WlveWPiyovXG4gICAgaW52aXRhdGlvbigpIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5pbnZpdGF0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoq6YKA6K+35aW95Y+LKi9cbiAgICBvcGVuUmV3YXJkKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLm9wZW5SZXdhcmQoKTtcbiAgICB9XG4gICAgLyoq562+5YiwKi9cbiAgICBvcGVuU2lnbmluKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLm9wZW5TaW5naW4oKTtcbiAgICB9XG5cbiAgICBwdXREYXRhKGtleTogU3RyaW5nLCB2YWx1ZTogU3RyaW5nKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UucHV0RGF0YShrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIGtleSAg5a2Y5pWw5o2u55qE5pe25YCZ55qE5ZSv5LiAa2V5XG4gICAgICogQHJldHVybiAg5a2Y5YKo55qE5pWw5o2uXG4gICAgICogKi9cbiAgICBnZXREYXRhKGtleTogU3RyaW5nKSB7XG4gICAgICAgIGxldCByZXQgPSB0aGlzLm15QnJpZGdlLmdldERhdGEoa2V5KTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmV0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmuLjmiI/phY3nva5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0R2FtZUNvbmZpZygpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMubXlCcmlkZ2UuZ2V0R2FtZUNvbmZpZygpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIuiOt+WPlua4uOaIj+mFjee9rlwiLEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpXG4gICAgICAgIEx1Y2tEcmF3RGF0YS5JLmluaXREYXRhKEpTT04ucGFyc2UocmVzdWx0KVsnZHJhdyddKTsvL+i9rOebmOaVsOaNrumFjee9rlxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiDopoHmsYLlj5HmlL7ph5HluIFcbiAgICAgKiBAcGFyYW0ga2V5IDHnuqLljIVcbiAgICAgKi9cbiAgICBhc3luYyBhZGRHb2xkKGtleSA9IDEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5teUJyaWRnZS5hZGRHb2xkKGtleSwgcmVzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuimgeaxguWPkeaUvumHkeW4gVwiLEpTT04uc3RyaW5naWZ5KHJlcykpXG4gICAgICAgICAgICAgICAgcmVzID0gSlNPTi5wYXJzZShyZXMpXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2RlLCBkYXRhLCBtc2cgfSA9IHJlcztcbiAgICAgICAgICAgICAgICBpZiAoJzAnID09PSBjb2RlIHx8ICFjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG4gICAgLyoqXG4gICAgICog6KaB5rGC5Y+R5pS+6YeR5biBIOWPr+e/u+WAjeexu+Wei1xuICAgICAqL1xuICAgIGFzeW5jIHJld2FyZEluZm8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMubXlCcmlkZ2UucmV3YXJkSW5mbyhyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHJlcyA9IEpTT04ucGFyc2UocmVzKVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29kZSwgZGF0YSwgbXNnIH0gPSByZXM7XG4gICAgICAgICAgICAgICAgaWYgKCcwJyA9PT0gY29kZSB8fCAhY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEuY29pbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuICAgIC8qKlxuICAgICAqIOiOt+WPluWPjOWAjemHkeW4gVxuICAgICAqIEBwYXJhbSB0eXBlIDHljp/ph5HluIEgMuWPjOWAjemHkeW4gVxuICAgICAqL1xuICAgIGFzeW5jIHR3b2ZvbGRSZXdhcmQodHlwZTogbnVtYmVyID0gMSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm15QnJpZGdlLnR3b2ZvbGRSZXdhcmQodHlwZSwgcmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXMgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIGRhdGEsIG1zZyB9ID0gcmVzO1xuICAgICAgICAgICAgICAgIGlmICgnMCcgPT09IGNvZGUgfHwgIWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhLmNvaW4pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChtc2cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKuiOt+WPluaAu+mHkeW4gSAqL1xuICAgIGFzeW5jIG15Q29pbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5teUJyaWRnZS5teUNvaW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXMgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIGRhdGEsIG1zZyB9ID0gcmVzO1xuICAgICAgICAgICAgICAgIGlmICgnMCcgPT09IGNvZGUgfHwgIWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhWydjb2luJ10pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICAvKirojrflj5blvZPliY3mj5DnjrDnmoTmoaPkvY0gKi9cbiAgICBhc3luYyBtaW5XaXRoRHJhd2FsKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm15QnJpZGdlLm1pbldpdGhEcmF3YWwocmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXMgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIGRhdGEsIG1zZyB9ID0gcmVzO1xuICAgICAgICAgICAgICAgIGlmICgnMCcgPT09IGNvZGUgfHwgIWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhWydtb25leSddKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChtc2cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKuS4iuaKpeWfi+eCuSAqL1xuICAgIGFwcERvdExvZyhrZXk6IHN0cmluZywgdmFsdWU/KSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuYXBwRG90TG9nKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICAvKirng63kupHmiZPngrkgKi9cbiAgICBhcHBEb3RUcmFjS2luZyhrZXk6IHN0cmluZykge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmFwcERvdFRyYWNLaW5nKGtleSk7XG4gICAgfVxuXG4gICAgc2V0Q2FsbGJhY2soZnVuTmFtZTogc3RyaW5nLCBwcmFtYXM/OiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNldENhbGxiYWNrLS0tLSB0aGlzLm15QnJpZGdlLS0tJyArIEpTT04uc3RyaW5naWZ5KHRoaXMubXlCcmlkZ2UpKVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5teUJyaWRnZVtmdW5OYW1lXShwcmFtYXMsIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHsgY29kZSwgZGF0YSB9ID0gSlNPTi5wYXJzZShyZXMpO1xuICAgICAgICAgICAgICAgIGlmICgnMCcgPT09IGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjbG9zZUFkdmVyRGlhbG9nKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmNsb3NlQWR2ZXJEaWFsb2coKTtcbiAgICB9XG4gICAgY2xvc2VBZEJhbm5lcigpIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5jbG9zZUFkQmFubmVyKCk7XG4gICAgfVxuICAgIC8qKua/gOWKseinhumikSAqL1xuICAgIHNob3dSZXdhcmRWaWRlb0FkKHZhbHVlOiBJVmlkZW8sIEpCQ2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uuc2hvd1Jld2FyZFZpZGVvQWQodmFsdWUsIEpCQ2FsbGJhY2spXG4gICAgfVxuICAgIC8qKiDlhajlsY/lub/lkYoqL1xuICAgIGxvYWRGdWxsU2NyZWVuVmlkZW9BZChkYXRhOiBhbnksIEpCQ2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKGRhdGEsIEpCQ2FsbGJhY2spXG4gICAgfVxuICAgIC8qKuS/oeaBr+a1geW5v+WRiiAqL1xuICAgIGxvYWROYXRpdmVFeHByZXNzQWQoZGF0YTogYW55LCBKQkNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmxvYWROYXRpdmVFeHByZXNzQWQoZGF0YSwgSkJDYWxsYmFjaylcbiAgICB9XG4gICAgLyoq5L+h5oGv5rWB5bm/5ZGKLSDkvJjph4/msYcgKi9cbiAgICBsb2FkTmF0aXZlQWRZTEgoZGF0YTogYW55LCBKQkNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmxvYWROYXRpdmVBZChkYXRhLCBKQkNhbGxiYWNrKVxuICAgIH1cbiAgICAvLyDmiZPlvIDkv6Hmga/mtYEt5LyY6YeP5rGHXG4gICAgb3BlbkxvYWROYXRpdmVBZEV2ZW50KCl7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uub3BlbkxvYWROYXRpdmVBZEV2ZW50KClcbiAgICB9XG4gICAgLyoqYmFubmVyICovXG4gICAgbG9hZEJhbm5lckV4cHJlc3NBZChkYXRhOiBhbnksIEpCQ2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UubG9hZEJhbm5lckV4cHJlc3NBZChkYXRhLCBKQkNhbGxiYWNrKVxuICAgIH1cbiAgICAvKirmj5LlsY/lub/lkYogKi9cbiAgICBzaG93SW50ZXJhY3Rpb25FeHByZXNzQWQoZGF0YTogYW55LCBKQkNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLm15QnJpZGdlLnNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZChkYXRhLCBKQkNhbGxiYWNrKVxuICAgIH1cblxuICAgIGdldCBsZXZlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xldmVsO1xuICAgIH1cbiAgICBnZXQgd2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICB9XG5cbiAgICBnZXQgaGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgIH1cblxuICAgIGdldCB2ZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmVyc2lvbjtcbiAgICB9XG5cbiAgICBnZXQgY2hhbm5lbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5uZWw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBicmlkZ2UoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldCBnYW1lQ29uZmlnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2FtZUNvbmZpZztcblxuICAgIH1cbiAgICBzdGF0aWMgZ2V0IEkoKTogQXBwU2RrIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChBcHBTZGspO1xuICAgIH1cblxuICAgIFxufVxuLy8gICAgIC8v6L+Z6YeM5piv5rWP6KeI5Zmo546v5aKD5LiL77yMIOaOpeaUtndlYuS8oOi/h+adpeeahOa2iOaBr1xud2luZG93Lm9uTXlCcmlkZ2VSZWFkeSA9ICgpID0+IHtcbiAgICBBcHBTZGsuSS5pc015QnJpZGdlID0gdHJ1ZTtcbiAgICBjb25zb2xlLmxvZyhcIm9uTXlCcmlkZ2VSZWFkeSBsb2FkIGZpbmlzaCwgY29zdDpcIiArIChuZXcgRGF0ZSgpLmdldFRpbWUoKSkgKyBcIm1zXCIpO1xuICAgIE15QnJpZGdlLkFwcC5vblJlc3VtZSA9ICguLi5yZXQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJyAgICAgbGF5YSBvblJlc3VtZScsIHJldClcbiAgICB9XG4gICAgTXlCcmlkZ2UuQXBwLm9uUGF1c2UgPSAoLi4ucmV0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCcgICAgbGF5YSBvblBhdXNlJywgcmV0KVxuICAgIH1cbn1cblxuaW50ZXJmYWNlIElWaWRlbyB7XG4gICAgcHJlbG9hZGluZzogbnVtYmVyLFxuICAgIHR5cGU6IG51bWJlcixcbn0iLCJcbmltcG9ydCBBcHBTZGsgZnJvbSBcIi4vQXBwU2RrXCI7XG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcbmltcG9ydCBEYXRlVXRpbHMgZnJvbSBcIi4uL3VpdGwvRGF0ZVV0aWxzXCI7XG5cbi8qKui9rOebmCDojrflj5bovaznm5jmnLrkvJrnmoQgKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEx1Y2tEcmF3TW9kZWwge1xuICAgIHByaXZhdGUgX2RhdGE6IEx1Y2tEcmF3RGF0YTtcblxuICAgIHByaXZhdGUgcHJvcFJlbW92ZTogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIHByb3BDaGFuZ2U6IG51bWJlciA9IDA7XG4gICAgYXN5bmMgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGF3YWl0IHRoaXMuaW5pdERhdGEoKTtcbiAgICAgICAgQXBwU2RrLkkucHV0RGF0YSgnbHVja0RyYXdQcm9wJywgSlNPTi5zdHJpbmdpZnkoeyByZW1vdmU6IDAsIGNoYW5nZTogMCB9KSlcbiAgICAgICAgQXBwU2RrLkkucHV0RGF0YSgnTHVja0RyYXdUb1NpZ24nLCBKU09OLnN0cmluZ2lmeSh7IGlzdG9TaWduaW46IDAgfSkpXG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdERhdGEoKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IEx1Y2tEcmF3RGF0YTtcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gTGF5YS5Mb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTHVja0RyYXdMYXN0VGltZScpIHx8ICcwJztcbiAgICAgICAgZGF0YS5sdWNrRHJhd0xhc3RUaW1lID0gcGFyc2VJbnQobGFzdFRpbWUpO1xuICAgICAgICBsZXQgbGFzdCA9IERhdGVVdGlscy50aW1lRGF5KGRhdGEubHVja0RyYXdMYXN0VGltZSk7XG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcbiAgICAgICAgaWYgKGxhc3QgIT0gdG9kYXkpIHtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZVV0aWxzLm5vd1RpbWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0x1Y2tEcmF3TGFzdFRpbWUnLCBsYXN0VGltZSk7XG4gICAgICAgICAgICBkYXRhLmx1Y2tEcmF3TGFzdFRpbWUgPSBwYXJzZUludChsYXN0VGltZSk7XG4gICAgICAgICAgICAvKirliJ3lp4vljJbmlbDmja5cbiAgICAgICAgICAgICAqIDEg562+5YiwXG4gICAgICAgICAgICAgKiAyIOinhumikVxuICAgICAgICAgICAgICogMyDmkYfkuIDmkYdcbiAgICAgICAgICAgICAqIDQg57qi5YyFXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGRhdGEubGlzdCA9IFtdO1xuICAgICAgICAgICAgbGV0IGxpc3QgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCA0OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBuZXcgTHVja0RyYXdWbztcbiAgICAgICAgICAgICAgICBpdGVtLnR5cGUgPSBpbmRleCArIDE7XG4gICAgICAgICAgICAgICAgaXRlbS5udW0gPSAwO1xuICAgICAgICAgICAgICAgIGl0ZW0uaXNVc2UgPSAwO1xuICAgICAgICAgICAgICAgIGl0ZW0udXNlTnVtID0gMDtcbiAgICAgICAgICAgICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhLmxpc3QgPSBsaXN0O1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbHVja0RyYXdEYXRhOiBhbnkgPSBhd2FpdCBBcHBTZGsuSS5nZXREYXRhKCdMdWNrRHJhd0RhdGEnKTtcbiAgICAgICAgICAgIGlmIChsdWNrRHJhd0RhdGEpXG4gICAgICAgICAgICAgICAgZGF0YS5saXN0ID0gbHVja0RyYXdEYXRhLmxpc3Q7XG4gICAgICAgIH1cbiAgICAgICAgQXBwU2RrLkkucHV0RGF0YSgnTHVja0RyYXdEYXRhJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgZ2V0IGRhdGEoKTogTHVja0RyYXdEYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuXG4gICAgdXBkYXRlRGF0YShpbmRleDogbnVtYmVyLCBhZGROdW06IG51bWJlciA9IDEpIHtcbiAgICAgICAgaWYodGhpcy5kYXRhKXtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5saXN0W2luZGV4XS5udW0gKz0gYWRkTnVtO1xuICAgICAgICAgICAgQXBwU2RrLkkucHV0RGF0YSgnTHVja0RyYXdEYXRhJywgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldFByb3BEYXRhKCkge1xuICAgICAgICBsZXQgbHVja0RyYXdQcm9wOiBhbnkgPSBhd2FpdCBBcHBTZGsuSS5nZXREYXRhKCdsdWNrRHJhd1Byb3AnKTtcbiAgICAgICAgY29uc29sZS5sb2coJyAgICAtLS0tLS0teXl5eXkgbGF5YSBsdWNrRHJhd1Byb3AgJyArIEpTT04uc3RyaW5naWZ5KGx1Y2tEcmF3UHJvcCkpXG4gICAgICAgIHRoaXMucHJvcFJlbW92ZSA9IE51bWJlcihsdWNrRHJhd1Byb3AucmVtb3ZlKTtcbiAgICAgICAgdGhpcy5wcm9wQ2hhbmdlID0gTnVtYmVyKGx1Y2tEcmF3UHJvcC5jaGFuZ2UpO1xuXG4gICAgICAgIGlmICh0aGlzLnByb3BSZW1vdmUgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlbW92ZVByb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hhbmdlUHJvcCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsdWNrRHJhd1Byb3A7XG4gICAgfVxuXG4gICAgYXN5bmMgdXBkYXRlUmVtb3ZlUHJvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcFJlbW92ZSA+IDApIHtcbiAgICAgICAgICAgIC8qIOWkhOeQhuiOt+W+l+esrDHkuKrpgZPlhbcqL1xuICAgICAgICAgICAgdGhpcy5wcm9wUmVtb3ZlID0gMDtcbiAgICAgICAgICAgIEFwcFNkay5JLnB1dERhdGEoJ2x1Y2tEcmF3UHJvcCcsIEpTT04uc3RyaW5naWZ5KHsgcmVtb3ZlOiAwLCBjaGFuZ2U6IHRoaXMucHJvcENoYW5nZSB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVDaGFuZ2VQcm9wKCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wQ2hhbmdlID4gMCkge1xuICAgICAgICAgICAgLyog5aSE55CG6I635b6X56ysMuS4qumBk+WFtyovXG4gICAgICAgICAgICB0aGlzLnByb3BDaGFuZ2UgPSAwO1xuICAgICAgICAgICAgQXBwU2RrLkkucHV0RGF0YSgnbHVja0RyYXdQcm9wJywgSlNPTi5zdHJpbmdpZnkoeyByZW1vdmU6IHRoaXMucHJvcFJlbW92ZSwgY2hhbmdlOiAwIH0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgSSgpOiBMdWNrRHJhd01vZGVsIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChMdWNrRHJhd01vZGVsKSBhcyBMdWNrRHJhd01vZGVsO1xuICAgIH1cbn1cblxuY2xhc3MgTHVja0RyYXdEYXRhIHtcbiAgICBsaXN0OiBMdWNrRHJhd1ZvW107XG4gICAgbHVja0RyYXdMYXN0VGltZTogbnVtYmVyO1xufVxuXG5jbGFzcyBMdWNrRHJhd1ZvIHtcbiAgICB0eXBlOiBudW1iZXI7XG4gICAgbnVtOiBudW1iZXI7XG4gICAgaXNVc2U6IG51bWJlcjtcbiAgICB1c2VOdW06IG51bWJlcjtcbn0iLCJpbXBvcnQgQWRNYW5hZ2VyIGZyb20gXCIuL0FkTWFuYWdlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXRpdmVBZCBleHRlbmRzIExheWEuU2NyaXB0IHtcbiAgICBvbkVuYWJsZSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IGdsb2JhbFBvaW50ID0gdGhpcy5pdGVtLmxvY2FsVG9HbG9iYWwoTGF5YS5Qb2ludC5FTVBUWSwgdHJ1ZSk7XG4gICAgICAgIEFkTWFuYWdlci5JLnNob3dOYXRpdmVBZChnbG9iYWxQb2ludC54LCBnbG9iYWxQb2ludC55LCB0aGlzLml0ZW0ud2lkdGgsIHRoaXMuaXRlbS5oZWlnaHQpO1xuICAgIH1cblxuICAgIG9uRGlzYWJsZSgpOiB2b2lkIHtcbiAgICAgICAgQWRNYW5hZ2VyLkkuY2xvc2VBZHZlckRpYWxvZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGl0ZW0oKTogTGF5YS5WaWV3IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3duZXIgYXMgYW55O1xuICAgIH1cbn0iLCJpbXBvcnQgQXBwU2RrIGZyb20gXCIuL0FwcFNka1wiO1xyXG5pbXBvcnQgVGVhU2RrLCB7IERvdEtleSB9IGZyb20gXCIuL1RlYVNka1wiO1xyXG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRUQWRTZGsge1xyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBwcmVsb2FkICAwIOebtOaOpeWKoOi9ve+8mzEg6aKE5Yqg6L29XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNob3dSZXdhcmRWaWRlb0FkKHByZWxvYWQ6IG51bWJlciA9IDAsIHBvaW50OiBzdHJpbmcgPSBEb3RLZXkucHJvbG9hZGluZykge1xyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdHlwZTogMSxcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgQXBwU2RrLkkuc2hvd1Jld2FyZFZpZGVvQWQoZGF0YSwgcmV0ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6KeG6aKR5Zue6LCDXCIsIEpTT04uc3RyaW5naWZ5KHJldCkpXHJcbiAgICAgICAgICAgICAgICBsZXQgeyBjb2RlLCBtc2cgfSA9IEpTT04ucGFyc2UocmV0KTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgLTE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgnZXJyb3InKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAvKion5pqC5peg6KeG6aKR5bm/5ZGK77yB5q+P5pelMOeCuemHjee9ricqLztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEwMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEwMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLop4bpopHngrnkuoblhbPpl61cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29tcGxldGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6KeG6aKR6KeC55yL5a6M6Zet5bm254K55LqG5YWz6ZetXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZWFTZGsuSS5kb3QoRG90S2V5LnJld2FyZF9hZCwgeyBmcm9tOiBwb2ludCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoJ3VuQ29tcGxldGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoJ+WKoOi9veWksei0pScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUZWFTZGsuSS5kb3QoRG90S2V5LnJld2FyZF9hZF9mYWlsLCB7IGZyb206IHBvaW50LCBjb2RlOiBjb2RlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRGdWxsU2NyZWVuVmlkZW9BZChwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IEFwcFNkay5JLndpZHRoLFxyXG4gICAgICAgICAgICBoOiBBcHBTZGsuSS53aWR0aCAqIDkwIC8gNjAwLFxyXG4gICAgICAgICAgICBwcmVsb2FkaW5nOiBwcmVsb2FkLFxyXG4gICAgICAgICAgICB0eXBlOiAxXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIEFwcFNkay5JLmxvYWRGdWxsU2NyZWVuVmlkZW9BZChKU09OLnN0cmluZ2lmeShkYXRhKSwgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZE5hdGl2ZUV4cHJlc3NBZCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IHNjYWxlWCA9IEFwcFNkay5JLndpZHRoIC8gTGF5YS5zdGFnZS53aWR0aDtcclxuICAgICAgICBsZXQgc2NhbGVZID0gQXBwU2RrLkkuaGVpZ2h0IC8gTGF5YS5zdGFnZS5oZWlnaHQ7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IDEsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgICAgIHc6IHdpZHRoICogc2NhbGVYLFxyXG4gICAgICAgICAgICBoOiBoZWlnaHQgKiBzY2FsZVksXHJcbiAgICAgICAgICAgIGxlZnQ6IHggKiBzY2FsZVgsXHJcbiAgICAgICAgICAgIHRvcDogeSAqIHNjYWxlWVxyXG4gICAgICAgIH1cclxuICAgICAgICBBcHBTZGsuSS5sb2FkTmF0aXZlRXhwcmVzc0FkKEpTT04uc3RyaW5naWZ5KGRhdGEpLCByZXMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlcylcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWROYXRpdmVBZFlMSCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHNjYWxlWCA9IEFwcFNkay5JLndpZHRoIC8gTGF5YS5zdGFnZS53aWR0aDtcclxuICAgICAgICAgICAgbGV0IHNjYWxlWSA9IEFwcFNkay5JLmhlaWdodCAvIExheWEuc3RhZ2UuaGVpZ2h0O1xyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IDEsXHJcbiAgICAgICAgICAgICAgICBwcmVsb2FkaW5nOiBwcmVsb2FkLFxyXG4gICAgICAgICAgICAgICAgdzogd2lkdGggKiBzY2FsZVgsXHJcbiAgICAgICAgICAgICAgICBoOiBoZWlnaHQgKiBzY2FsZVksXHJcbiAgICAgICAgICAgICAgICBsZWZ0OiB4ICogc2NhbGVYLFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiBBcHBTZGsuSS5oZWlnaHQgLSBoZWlnaHQgKiBzY2FsZVkgLSB5ICogc2NhbGVZLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEpKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhBcHBTZGsuSS5oZWlnaHQsIGhlaWdodCwgeSwgc2NhbGVZKVxyXG4gICAgICAgICAgICBBcHBTZGsuSS5sb2FkTmF0aXZlQWRZTEgoSlNPTi5zdHJpbmdpZnkoZGF0YSksIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UocmVzKSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIG9wZW5Mb2FkTmF0aXZlQWRFdmVudCgpIHtcclxuICAgICAgICBBcHBTZGsuSS5vcGVuTG9hZE5hdGl2ZUFkRXZlbnQoKVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRCYW5uZXJFeHByZXNzQWQocHJlbG9hZDogbnVtYmVyID0gMCkge1xyXG4gICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgICB3OiBBcHBTZGsuSS53aWR0aCxcclxuICAgICAgICAgICAgaDogQXBwU2RrLkkud2lkdGggKiA5MCAvIDYwMCxcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICAgICAgdHlwZTogMVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBBcHBTZGsuSS5sb2FkQmFubmVyRXhwcmVzc0FkKEpTT04uc3RyaW5naWZ5KGRhdGEpLCByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUFkdmVyRGlhbG9nKCkge1xyXG4gICAgICAgIEFwcFNkay5JLmNsb3NlQWR2ZXJEaWFsb2coKTtcclxuICAgIH1cclxuICAgIGNsb3NlQWRCYW5uZXIoKSB7XHJcbiAgICAgICAgQXBwU2RrLkkuY2xvc2VBZEJhbm5lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZChwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IEFwcFNkay5JLndpZHRoICogMC44LFxyXG4gICAgICAgICAgICBoOiBBcHBTZGsuSS5oZWlnaHQsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEFwcFNkay5JLnNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZChKU09OLnN0cmluZ2lmeShkYXRhKSwgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBJKCk6IFRUQWRTZGsge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoVFRBZFNkaykgYXMgVFRBZFNkaztcclxuICAgIH1cclxufSIsImltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xyXG5pbXBvcnQgQXBwU2RrIGZyb20gXCIuL0FwcFNka1wiO1xyXG4vKipcclxuICog5LiK5oql5Z+L54K54r2H5b+XXHJcbiAqIOWFt+S9k+eahOaJk+eCuemcgOimgei3n+i/kOiQpeiBlOezu1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVhU2RrIHtcclxuICAgIGRvdChrZXk6IHN0cmluZywgdmFsdWU/KSB7XHJcbiAgICAgICAgaWYgKCFMYXlhLkJyb3dzZXIub25BbmRyb2lkKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gJyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKHZhbHVlKSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgQXBwU2RrLkkuYXBwRG90TG9nKGtleSwgdmFsdWUpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBJKCk6IFRlYVNkayB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChUZWFTZGspIGFzIFRlYVNkaztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGVudW0gRG90S2V5IHtcclxuICAgIHByb2xvYWRpbmcgPSAncHJvbG9hZGluZycsICAgICAgICAgICAgICAgICAgLy/pooTliqDovb1cclxuICAgIHJld2FyZF9hZCA9ICdyZXdhcmRfYWQnLFx0XHQgICAgICAgICAgICAvL+inhumikeaJk+eCuVxyXG4gICAgcmV3YXJkX2FkX2ZhaWwgPSAnYWRfZmFpbCcsICAgICAgICAgICAgICAgICAvL+inhumikeWKoOi9veWksei0pVxyXG4gICAgZnVsbFNjcmVlbiA9ICdmdWxsU2NyZWVuJywgICAgICAgICAgICAgICAgICAvL+WFqOWxj+inhumikVxyXG4gICAgXHJcbn1cclxuIiwiaW1wb3J0IEFycmF5VXRpbHMgZnJvbSBcIi4uLy4uL3VpdGwvQXJyYXlVdGlsc1wiO1xuXG4vKlxuKiBuYW1lO1xuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VNb2RlbCB7XG4gICAgcHJvdGVjdGVkIF9kYXRhOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIHVwZGF0ZUFycjogQXJyYXk8RnVuY3Rpb24+ID0gW107XG4gICAgcHJpdmF0ZSBrZXlVcGRhdGVBcnI6IGFueSA9IHt9O1xuXG4gICAgcHVibGljIGFzeW5jIHVwZGF0ZShkYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RhdGEsXG4gICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBcnIuZm9yRWFjaChmdW5jID0+IHtcbiAgICAgICAgICAgIGZ1bmModGhpcy5fZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmtleVVwZGF0ZUFycikge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICAgICBhcnIgJiYgYXJyLmZvckVhY2goZnVuYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmModmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd2FpdEZvcihrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2RhdGFba2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjYiA9IGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmVXBkYXRlKGNiLCBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUoY2IsIGtleSwgdHJ1ZSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHVibGljIG9uVXBkYXRlKGZ1bmM6IEZ1bmN0aW9uLCBrZXk/OiBzdHJpbmcsIHJ1bjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5fZGF0YVtrZXldO1xuICAgICAgICAgICAgcnVuICYmIHZhbHVlICE9IG51bGwgJiYgZnVuYyh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICFhcnIgJiYgKHRoaXMua2V5VXBkYXRlQXJyW2tleV0gPSBhcnIgPSBbXSk7XG4gICAgICAgICAgICBhcnIucHVzaChmdW5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJ1biAmJiBmdW5jKHRoaXMuX2RhdGEpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBcnIucHVzaChmdW5jKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvZmZVcGRhdGUoZnVuYzogRnVuY3Rpb24sIGtleT86IHN0cmluZykge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy5rZXlVcGRhdGVBcnJba2V5XSwgZnVuYyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy51cGRhdGVBcnIsIGZ1bmMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyR2FtZSgpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuICAgIH1cbn0iLCJpbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuL0Jhc2VNb2RlbFwiO1xuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi4vLi4vc2RrL0FkTWFuYWdlclwiO1xuaW1wb3J0IFRlYVNkaywgeyBEb3RLZXkgfSBmcm9tIFwiLi4vLi4vc2RrL1RlYVNka1wiO1xuaW1wb3J0IHsgR29sZENvbmZpZ0RhdGEgfSBmcm9tIFwiLi4vLi4vc2RrL3Nka0RhdGEvR29sZENvbmZpZ0RhdGFcIjtcbmltcG9ydCBBZGRHb2xkRGF0YSBmcm9tIFwiLi4vLi4vc2RrL3Nka0RhdGEvQWRkR29sZERhdGFcIjtcbmltcG9ydCBEYXRlVXRpbHMgZnJvbSBcIi4uLy4uL3VpdGwvRGF0ZVV0aWxzXCI7XG5pbXBvcnQgVXRpbCwgeyBEYXRhS2V5IH0gZnJvbSBcIi4uLy4uL3VpdGwvVXRpbFwiO1xuaW1wb3J0IE9iamVjdEluc3RhbmNlIGZyb20gXCIuLi8uLi91aXRsL09iamVjdEluc3RhbmNlXCI7XG5pbXBvcnQgeyBFdmVudENlbnRlciB9IGZyb20gXCIuLi8uLi9ldmVudC9FdmVudENlbnRlclwiO1xuaW1wb3J0IHsgRXZlbnRFbnVtIH0gZnJvbSBcIi4uLy4uL2V2ZW50L0V2ZW50RW51bVwiO1xuaW1wb3J0IEFwcFNkayBmcm9tIFwiLi4vQXBwU2RrXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZHBhY2tldE1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAgICBwcml2YXRlIE1BWCA9IDIwO1xuICAgIC8qKuW9k+WkqemihuWPlue6ouWMheeahOacgOWkp+asoeaVsCAqL1xuICAgIHByaXZhdGUgREFZX01BWF9DTlQgPSA1MDtcbiAgICBwcml2YXRlIGNvbmY6IGFueTtcbiAgICBwdWJsaWMgY3VyUmVkcGFja2V0OiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBjb25mTGVuOiBudW1iZXIgPSAwO1xuXG4gICAgLyoq5Yid5aeL5YyW57qi5YyF6YWN572uICovXG4gICAgYXN5bmMgaW5pdCgpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCLliJ3lp4vljJbnuqLljIXphY3nva5pbml0XCIpXG4gICAgICAgIGxldCBhcnIgPSBhd2FpdCBHb2xkQ29uZmlnRGF0YS5JLmdldEdvbGRDb25maWcoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLVJlZHBhY2tldE1vZGVsLS0tLS0tLScrSlNPTi5zdHJpbmdpZnkoYXJyKSlcbiAgICAgICAgbGV0IGNhc2ggPSAwO1xuICAgICAgICB0aGlzLmNvbmYgPSB7fTtcbiAgICAgICAgYXJyLmZvckVhY2goY29uZkRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb25mW2NvbmZEYXRhLmlkXSA9IGNvbmZEYXRhO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLmluaXREYXRhKCkpO1xuICAgICAgICB0aGlzLmNvbmZMZW4gPSB0aGlzLmNvbmYubGVuZ3RoO1xuXG4gICAgfVxuXG4gICAgaW5pdERhdGEoKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IFJlZHBhY2tldERhdGE7XG4gICAgICAgIGxldCBsYXN0VGltZSA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkubGFzdFRpbWUpIHx8ICcwJztcbiAgICAgICAgZGF0YS5sYXN0VGltZSA9IHBhcnNlSW50KGxhc3RUaW1lKTtcblxuICAgICAgICBsZXQgbGFzdCA9IERhdGVVdGlscy50aW1lRGF5KGRhdGEubGFzdFRpbWUpO1xuICAgICAgICBsZXQgdG9kYXkgPSBEYXRlVXRpbHMudG9kYXk7XG4gICAgICAgIGlmIChsYXN0ICE9IHRvZGF5KSB7XG4gICAgICAgICAgICBkYXRhLnRvZGF5Q250ID0gMDtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZVV0aWxzLm5vd1RpbWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkubGFzdFRpbWUsIGxhc3RUaW1lKVxuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS50b2RheUNudCwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgdG9kYXlDbnQgPSBVdGlsLkkuZ2V0SXRlbShEYXRhS2V5LnRvZGF5Q250KSB8fCAnMCc7XG4gICAgICAgICAgICBkYXRhLnRvZGF5Q250ID0gcGFyc2VJbnQodG9kYXlDbnQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEubGFzdFRpbWUgPSBwYXJzZUludChsYXN0VGltZSk7XG4gICAgICAgIGxldCBkYXRhQ250ID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5kYXRhQ05UKSB8fCAnMCc7XG4gICAgICAgIGRhdGEuY250ID0gcGFyc2VJbnQoZGF0YUNudCk7XG4gICAgICAgIGRhdGEubGlzdCA9IFtdO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBhc3luYyBjaGVja1JlZHBhY2tldCgpIHtcblxuICAgICAgICBpZiAodGhpcy5kYXRhLnRvZGF5Q250ID49IHRoaXMuREFZX01BWF9DTlQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKEFkTWFuYWdlci5JLmNoZWNrVmlkZW9JbkNkKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLyoq57qi5YyF6I635Y+W5ZCO5rKh5pyJ55yL5bm/5ZGK6aKG5Y+W77yM5YaN5qyh6I635b6X57qi5YyF55qE5py65Lya77yM5LiN5Lya6I635Y+W57qi5YyF77yMIOiHquW3seS5n+WPr+S7peWkhOeQhuaIkCDlr7nlupTnmoTnuqLljIXmj5DphpLmiJbkuI3pnIDopoHov5nph4znmoTliKTmlq0gKi9cbiAgICAgICAgaWYgKHRoaXMuY3VyUmVkcGFja2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gdGhpcy5kYXRhLmNudCkgdGhpcy5kYXRhLmNudCA9IDA7XG4gICAgICAgIGxldCBjbnQgPSB0aGlzLmRhdGEuY250O1xuICAgICAgICBpZiAoY250ID49IHRoaXMuY29uZkxlbikgY250ID0gdGhpcy5jb25mTGVuIC0gMTtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZbY250ICsgMV07XG4gICAgICAgIGxldCByYW4yID0gTWF0aC5yYW5kb20oKTtcblxuICAgICAgICBpZiAoZGF0YSAmJiByYW4yIDwgZGF0YS5wZXIpIHtcbiAgICAgICAgICAgIGxldCBjYXNoID0gMC4wMDAwMDE7XG4gICAgICAgICAgICB0aGlzLmN1clJlZHBhY2tldCA9IGNhc2g7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIueci+inhumikemihue6ouWMhVwiKVxuICAgICAgICAgICAgLy8gLy8qKuW8ueWHuue6ouWMheeahOeVjOmdoiwgIOaaguaXtuWkhOeQhuaIkCDnm7TmjqXnnIvlub/lkYrojrflj5bph5HluIEgKi9cbiAgICAgICAgICAgIC8vIGF3YWl0IEFkTWFuYWdlci5JLnNob3dSZXdhcmRBZChEb3RLZXkucmV3YXJkX2FkKVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLliqDph5HluIFcIilcbiAgICAgICAgICAgIC8vIGxldCBjb2luID0gYXdhaXQgdGhpcy5hZGRDb2luKCk7IC8vIOeci+WujOW5v+WRiuiOt+WPlumSse+8iOatpOaXtuW3sue7j+WKoOWIsOi0puaIt+S6hu+8jOaaguacquaPkOS+m+aPkOWJjeefpemBk+iOt+WPluWkmuWwkemSseeahOaWueazle+8iVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLojrflj5bkuobpkrFcIiwgY29pbilcbiAgICAgICAgICAgIC8vIHRoaXMuZ2V0UmVwYWNrZXQoKVxuICAgICAgICAgICAgLy8gLyoq5pu05paw5Z+65pys5pi+56S6ICovXG4gICAgICAgICAgICAvLyBFdmVudENlbnRlci5lbWl0KEV2ZW50RW51bS5VUERBVEVfQ09JTik7XG5cbiAgICAgICAgICAgIC8qKiogKi9cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXRSZXBhY2tldCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1clJlZHBhY2tldCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmRhdGEuY250ICs9IDE7XG4gICAgICAgIHRoaXMuZGF0YS5saXN0LnB1c2godGhpcy5jdXJSZWRwYWNrZXQpO1xuICAgICAgICB0aGlzLmRhdGEubGFzdFRpbWUgPSAobmV3IERhdGUpLmdldFRpbWUoKTtcbiAgICAgICAgdGhpcy5kYXRhLnRvZGF5Q250ICs9IDE7XG4gICAgICAgXG4gICAgICAgIHRoaXMuY3VyUmVkcGFja2V0ID0gMDtcbiAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5kYXRhQ05ULCB0aGlzLmRhdGEuY250KTtcbiAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS50b2RheUNudCwgdGhpcy5kYXRhLnRvZGF5Q250KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIC8qKiAqL1xuICAgIGFzeW5jIGdldEN1clJlZHBhY2tldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VyUmVkcGFja2V0O1xuICAgIH1cblxuICAgIGdldCBkYXRhKCk6IFJlZHBhY2tldERhdGEge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgLyoq6I635Y+W5oC75YWx55qE6YeR5biB5pWwICovXG4gICAgYXN5bmMgZ2V0VG90YWxDb2luKCkge1xuICAgICAgICBsZXQgdG90YWxDb2luID0gYXdhaXQgQXBwU2RrLkkubXlDb2luKCk7XG4gICAgICAgIHJldHVybiB0b3RhbENvaW47XG4gICAgfVxuICAgIC8qKuiOt+WPluacrOasoeWlluWKseeahOmHkeW4geaVsCAqL1xuICAgIGFzeW5jIGFkZENvaW4oKSB7XG4gICAgICAgIGxldCBjb2luRGF0YSA9IGF3YWl0IEFkZEdvbGREYXRhLmFkZENvaW4oKTtcbiAgICAgICAgcmV0dXJuIGNvaW5EYXRhO1xuICAgIH1cblxuICAgIC8qKuiOt+WPluacgOS9juaPkOahoyAqL1xuICAgIGFzeW5jICBtaW5XaXRoRHJhd2FsKCkge1xuICAgICAgICBsZXQgbWluQ29pbiA9IGF3YWl0IEFwcFNkay5JLm1pbldpdGhEcmF3YWwoKTtcbiAgICAgICAgcmV0dXJuIG1pbkNvaW47XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgSSgpOiBSZWRwYWNrZXRNb2RlbCB7XG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoUmVkcGFja2V0TW9kZWwpIGFzIFJlZHBhY2tldE1vZGVsO1xuICAgIH1cbn1cblxuY2xhc3MgUmVkcGFja2V0RGF0YSB7XG4gICAgY250OiBudW1iZXI7XG4gICAgbGlzdDogQXJyYXk8bnVtYmVyPjtcbiAgICBsYXN0VGltZTogbnVtYmVyO1xuICAgIHRvZGF5Q250OiBudW1iZXI7XG59XG5cbmNsYXNzIFJlZHBhY2tldENvbmZpZ0RhdGEge1xuICAgIGlkOiBudW1iZXI7XG4gICAgcGVyOiBudW1iZXI7XG4gICAgY2FzaDogbnVtYmVyO1xufSIsImltcG9ydCBBcHBTZGsgZnJvbSBcIi4uL0FwcFNka1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZGRHb2xkRGF0YSB7XG4gICAgc3RhdGljIGNvaW46IHN0cmluZyA9ICcwJztcbiAgICBzdGF0aWMgbXljb2luOiBzdHJpbmcgPSAnMCc7XG4gICAgc3RhdGljIGluaXREYXRhKGRhdGE6IGFueSkge1xuICAgICAgICBpZiAoIXBhcnNlSW50KGRhdGEuY29kZSkpIHtcbiAgICAgICAgICAgIEFkZEdvbGREYXRhLmNvaW4gPSBkYXRhLmRhdGEuY29pbjtcbiAgICAgICAgICAgIEFkZEdvbGREYXRhLm15Y29pbiA9IGRhdGEuZGF0YS5teWNvaW47XG4gICAgICAgICAgICBcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jICBhZGRDb2luKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgQXBwU2RrLkkuYWRkR29sZCgpO1xuICAgICAgICByZXR1cm4gW3BhcnNlSW50KHJlc3VsdC5jb2luKSwgcGFyc2VJbnQocmVzdWx0Lm15Y29pbildO1xuICAgIH1cbn0iLCJpbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uLy4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcblxuLy8gc2Rr6L+U5Zue55qE55So5oi35L+h5oGvXG5leHBvcnQgY2xhc3MgQXBwU2RrRGF0YSBpbXBsZW1lbnRzIElBcHBTZGtEYXRhIHtcbiAgICBpc25ldzogbnVtYmVyID0gMDtcbiAgICB1aWQ6IG51bWJlcjtcbiAgICBvcGVuaWQ6IHN0cmluZztcbiAgICBuaWNrbmFtZTogc3RyaW5nO1xuICAgIGhlYWRpbWd1cmw6IHN0cmluZztcbiAgICBpbml0RGF0YShkYXRhOiBhbnkpIHtcbiAgICAgICAgbGV0IGQgPWRhdGEuZGF0YTtcbiAgICAgICAgY29uc3QgeyBpc25ldywgdWlkLCBvcGVuaWQsIG5pY2tuYW1lLCBoZWFkaW1ndXJsIH0gPSBkO1xuICAgICAgICBbdGhpcy5pc25ldywgdGhpcy51aWQsIHRoaXMub3BlbmlkLCB0aGlzLm5pY2tuYW1lLCB0aGlzLmhlYWRpbWd1cmxdID0gW2lzbmV3LCB1aWQsIG9wZW5pZCwgbmlja25hbWUsIGhlYWRpbWd1cmxdO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgSSgpOiBBcHBTZGtEYXRhIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChBcHBTZGtEYXRhKSBhcyBBcHBTZGtEYXRhO1xuICAgIH1cbn1cblxuXG5cbmludGVyZmFjZSBJQXBwU2RrRGF0YSB7XG4gICAgaXNuZXc6IG51bWJlcjtcbiAgICB1aWQ6IG51bWJlcjtcbiAgICBvcGVuaWQ6IHN0cmluZztcbiAgICBuaWNrbmFtZTogc3RyaW5nO1xuICAgIGhlYWRpbWd1cmw6IHN0cmluZztcbn0iLCJpbXBvcnQgVXRpbCBmcm9tIFwiLi4vLi4vdWl0bC9VdGlsXCI7XHJcbmltcG9ydCBBcHBTZGsgZnJvbSBcIi4uL0FwcFNka1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdvbGRDb25maWdEYXRhIHtcclxuICAgIGFkOiBPYmplY3Q7XHJcbiAgICBhZG5ldDogc3RyaW5nO1xyXG4gICAgYXBwX25hbWU6IHN0cmluZztcclxuICAgIGNvaW5fY29uZmlnOiBzdHJpbmcgPSAnJztcclxuICAgIGdhbWVVcmw6IHN0cmluZztcclxuICAgIGt1YWlfYXBwX25hbWU6IHN0cmluZztcclxuICAgIHBhbmdvbGluOiBzdHJpbmc7XHJcbiAgICB0VHVyYm9BZ2VudDogc3RyaW5nO1xyXG4gICAgdGVhQWdlbnQ6IG51bWJlcjtcclxuICAgIHRyYWNraW5nOiBzdHJpbmc7XHJcbiAgICB0dEFwcExvZzogc3RyaW5nO1xyXG4gICAgdW1pZDogc3RyaW5nO1xyXG4gICAgZ2FtZUNvbmZpZzogYW55O1xyXG5cclxuICAgIGNvZGU6IG51bWJlciA9IC0zO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IEdvbGRDb25maWdEYXRhID0gbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJKCk6IEdvbGRDb25maWdEYXRhIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpXHJcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBuZXcgR29sZENvbmZpZ0RhdGEoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZTtcclxuICAgIH1cclxuICAgIGluaXREYXRhKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmNvZGUgPSBkYXRhLmNvZGU7XHJcbiAgICAgICAgaWYgKCFkYXRhLmNvZGUpIHtcclxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZGF0YTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZSA9IGRhdGFba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSBlbGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0R29sZENvbmZpZygpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBBcHBTZGsuSS5nYW1lQ29uZmlnO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29uZmlnSnNvbiA9IGF3YWl0IHRoaXMubG9hZEdvbGRDZmcocmVzdWx0Wydjb2luX2NvbmZpZyddWzBdKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoY29uZmlnSnNvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkR29sZENmZyhyZXM6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBjb25maWdKc29uID0gYXdhaXQgVXRpbC5JLmxvYWQocmVzKTtcclxuICAgICAgICByZXR1cm4gY29uZmlnSnNvbjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uLy4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcbmltcG9ydCBVdGlsIGZyb20gXCIuLi8uLi91aXRsL1V0aWxcIjtcblxuXG5leHBvcnQgY2xhc3MgTHVja0RyYXdEYXRhIGltcGxlbWVudHMgSVR1cm5DZmcge1xuICAgIHJlZF90dXJudGFibGVfdGltZXM6IG51bWJlcjtcbiAgICByZWRfdHVybnRhYmxlX2NvbmZpZzogSVR1cm5DZWxsQ2ZnO1xuICAgIHNoYWtlX3R1cm50YWJsZV9jb25maWc6IElUdXJuQ2VsbENmZztcbiAgICBzaGFrZV90dXJudGFibGVfdGltZXM6IG51bWJlcjtcbiAgICBzdGF0aWMgZ2V0IEkoKTogTHVja0RyYXdEYXRhIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChMdWNrRHJhd0RhdGEpIGFzIEx1Y2tEcmF3RGF0YTtcbiAgICB9XG4gICAgYXN5bmMgaW5pdERhdGEoZGF0YTogSVR1cm5DZmcpIHtcbiAgICAgICAgY29uc3QgeyByZWRfdHVybnRhYmxlX3RpbWVzLCByZWRfdHVybnRhYmxlX2NvbmZpZyxcbiAgICAgICAgICAgIHNoYWtlX3R1cm50YWJsZV9jb25maWcsIHNoYWtlX3R1cm50YWJsZV90aW1lcyB9ID0gZGF0YTtcblxuICAgICAgICBbdGhpcy5yZWRfdHVybnRhYmxlX3RpbWVzLCB0aGlzLnJlZF90dXJudGFibGVfY29uZmlnLCB0aGlzLnNoYWtlX3R1cm50YWJsZV9jb25maWcsIHRoaXMuc2hha2VfdHVybnRhYmxlX3RpbWVzXSA9IFtyZWRfdHVybnRhYmxlX3RpbWVzLCByZWRfdHVybnRhYmxlX2NvbmZpZyxcbiAgICAgICAgICAgIHNoYWtlX3R1cm50YWJsZV9jb25maWcsIHNoYWtlX3R1cm50YWJsZV90aW1lc107XG4gICAgfVxuXG5cbiAgICBhc3luYyBsb2FkR29sZENmZyhyZXM6IHN0cmluZykge1xuICAgICAgICBsZXQgY29uZmlnSnNvbiA9IGF3YWl0IFV0aWwuSS5sb2FkKHJlcyk7XG4gICAgICAgIHJldHVybiBjb25maWdKc29uO1xuICAgIH1cbn1cbmludGVyZmFjZSBJVHVybkNmZyB7XG4gICAgcmVkX3R1cm50YWJsZV90aW1lczogbnVtYmVyO1xuICAgIHJlZF90dXJudGFibGVfY29uZmlnOiBJVHVybkNlbGxDZmc7XG4gICAgc2hha2VfdHVybnRhYmxlX2NvbmZpZzogSVR1cm5DZWxsQ2ZnO1xuICAgIHNoYWtlX3R1cm50YWJsZV90aW1lczogbnVtYmVyO1xufVxuXG5cbmludGVyZmFjZSBJVHVybkNlbGxDZmcge1xuICAgIGRheV9saW1pdDogbnVtYmVyO1xuICAgIHJlcXVpcmVtZW50OiBudW1iZXI7XG4gICAgdGl0bGU6IHN0cmluZ1xufVxuXG4iLCIvKipUaGlzIGNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IExheWFBaXJJREUsIHBsZWFzZSBkbyBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucy4gKi9cbmltcG9ydCBWaWV3PUxheWEuVmlldztcclxuaW1wb3J0IERpYWxvZz1MYXlhLkRpYWxvZztcclxuaW1wb3J0IFNjZW5lPUxheWEuU2NlbmU7XG52YXIgUkVHOiBGdW5jdGlvbiA9IExheWEuQ2xhc3NVdGlscy5yZWdDbGFzcztcbmV4cG9ydCBtb2R1bGUgdWkge1xyXG4gICAgZXhwb3J0IGNsYXNzIFRlc3RTY2VuZVVJIGV4dGVuZHMgU2NlbmUge1xyXG5cdFx0cHVibGljIGJ0bkludml0ZTpMYXlhLlNwcml0ZTtcblx0XHRwdWJsaWMgYnRuU2VydmVyOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5WaWJyYXRlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5EcmF3YWw6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZWxvYWRBRDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Jhbm5lcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Z1bGxBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd05hdGl2ZUFkOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93SW50ZXJBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUmV3YXJkQWQ6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blJlZHBhY2tldDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgTmF0aXZlQUQ6Vmlldztcblx0XHRwdWJsaWMgYnRuRHJhdzpMYXlhLkJ1dHRvbjtcbiAgICAgICAgY29uc3RydWN0b3IoKXsgc3VwZXIoKX1cclxuICAgICAgICBjcmVhdGVDaGlsZHJlbigpOnZvaWQge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRTY2VuZShcIlRlc3RTY2VuZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBSRUcoXCJ1aS5UZXN0U2NlbmVVSVwiLFRlc3RTY2VuZVVJKTtcclxufVxyIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXJyYXlVdGlscyB7XG4gICAgLyoqXG4gICAgICog56e76Zmk5YWD57SgXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZUZyb21BcnIoYXJyOiBBcnJheTxhbnk+LCBvYmo6IGFueSkge1xuICAgICAgICBsZXQgaW5kZXggPSBhcnIuaW5kZXhPZihvYmopO1xuICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmFuZG9tRnJvbUFycihhcnI6IEFycmF5PGFueT4pIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBhcnJbaW5kZXhdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaVsOe7hOmaj+acuuaOkuW6j1xuICAgICAqL1xuICAgIHN0YXRpYyBzaHVmZmxlKGFycjogQXJyYXk8YW55Pikge1xuICAgICAgICByZXR1cm4gYXJyLnNvcnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgLSAwLjU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbmRleE9mKGFyciwgY2FsbGJhY2ssIGN0eD8pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKGN0eCwgdGhpc1tpXSwgaSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHN0YXRpYyBlYWNoKGFyciwgY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2suY2FsbChjb250ZXh0LCBhcnJbaV0sIGksIGFycikpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcXVldWUoYXJyKSB7XG4gICAgICAgIGxldCByZXMgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBwcm9taXNlIG9mIGFycikge1xuICAgICAgICAgICAgcmVzID0gYXdhaXQgcHJvbWlzZShyZXMpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UmFuZG9tQXJyYXkoYXJyLCBjb3VudCkge1xuICAgICAgICBsZXQgc2h1ZmZsZWQgPSBhcnIuc2xpY2UoMCk7XG4gICAgICAgIGxldCBsZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgICBsZXQgbWluID0gbGVuIC0gY291bnQsIHRlbXAsIGluZGV4O1xuICAgICAgICB3aGlsZSAobGVuLS0gPiBtaW4pIHtcbiAgICAgICAgICAgIGluZGV4ID0gTWF0aC5mbG9vcigobGVuICsgMSkgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgICAgIHRlbXAgPSBzaHVmZmxlZFtpbmRleF07XG4gICAgICAgICAgICBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtsZW5dO1xuICAgICAgICAgICAgc2h1ZmZsZWRbbGVuXSA9IHRlbXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNodWZmbGVkLnNsaWNlKG1pbik7XG4gICAgfVxufSIsIi8qKlxuICog5pel5pyf5bel5YW357G7XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVVdGlscyB7XG4gICAgc3RhdGljIGdldCBub3coKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5ub3dUaW1lIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBub3dUaW1lKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHRvZGF5KCk6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGhpcy5ub3dUaW1lKTtcbiAgICAgICAgbGV0IHllYXIgPSB0aW1lLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGxldCBtb250aCA9IHRpbWUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgIGxldCBkYXRlID0gdGltZS5nZXREYXRlKCk7XG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke3RoaXMuYWRkKG1vbnRoKX0tJHt0aGlzLmFkZChkYXRlKX1gO1xuICAgIH1cblxuICAgIHN0YXRpYyB0aW1lRGF5KHRpbWVOdW06IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGltZU51bSk7XG4gICAgICAgIGxldCB5ZWFyID0gdGltZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBsZXQgbW9udGggPSB0aW1lLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICBsZXQgZGF0ZSA9IHRpbWUuZ2V0RGF0ZSgpO1xuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHt0aGlzLmFkZChtb250aCl9LSR7dGhpcy5hZGQoZGF0ZSl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7np5LmlbDmoLzlvI/ljJblrZfnrKbkuLJcbiAgICAgKiBAcGFyYW0gc2Vjb25kIOenkuaVsFxuICAgICAqIEBwYXJhbSB0eXBlIDE6MDA6MDA6MDAgICAyOnl5eXktbW0tZGQgaDptOnMgICAgMzowMDowMCAgIDQ6eHjlpKnliY3vvIx4eOWwj+aXtuWJje+8jHh45YiG6ZKf5YmNXG4gICAgICogQHJldHVyblxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZChzZWNvbmQ6IG51bWJlciwgdHlwZTogbnVtYmVyID0gMSk6IHN0cmluZyB7XG4gICAgICAgIHZhciBzdHI6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQwKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDEoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kMihzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQzKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDQoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kNShzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLy8gMDogMDA6MDBcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZDAodDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gNjApO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcih0ICUgNjApO1xuICAgICAgICB2YXIgbWluczogc3RyaW5nO1xuICAgICAgICB2YXIgc2Vuczogc3RyaW5nO1xuICAgICAgICBpZiAobWluc3QgPT0gMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5zdCA8IDEwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwXCIgKyBtaW5zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIlwiICsgbWluc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZHQgPT0gMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjBcIiArIHNlY29uZHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZW5zID0gXCJcIiArIHNlY29uZHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbnMgKyBcIjpcIiArIHNlbnM7XG4gICAgfVxuXG4gICAgLy8xOiAwMDowMDowMFxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMSh0OiBudW1iZXIgPSAwKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGhvdXJzdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gMzYwMCk7XG4gICAgICAgIGxldCBob3Vyczogc3RyaW5nO1xuICAgICAgICBsZXQgZGF5ID0gJyc7XG4gICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgaG91cnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91cnN0IDwgMTApXG4gICAgICAgICAgICAgICAgaG91cnMgPSBcIjBcIiArIGhvdXJzdDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBoID0gaG91cnN0ICUgMjQ7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA+PSAyNCkge1xuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgICAgICAgICAgZGF5ID0gTWF0aC5mbG9vcihob3Vyc3QgLyAyNCkgKyAnZCAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluc3Q6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAvIDYwKTtcbiAgICAgICAgbGV0IHNlY29uZHQ6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAlIDYwKTtcbiAgICAgICAgbGV0IG1pbnM6IHN0cmluZztcbiAgICAgICAgbGV0IHNlbnM6IHN0cmluZztcbiAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobWluc3QgPCAxMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMFwiICsgbWluc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5zID0gXCJcIiArIG1pbnN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kdCA8IDEwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwXCIgKyBzZWNvbmR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VucyA9IFwiXCIgKyBzZWNvbmR0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXkgKyBob3VycyArIFwiOlwiICsgbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzM6IDAwOjAwXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQzKHQ6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgLyAzNjAwKTtcbiAgICAgICAgdmFyIG1pbnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgLyA2MCk7XG4gICAgICAgIHZhciBzZWNvbmR0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgJSA2MCk7XG4gICAgICAgIHZhciBtaW5zOiBzdHJpbmc7XG4gICAgICAgIHZhciBzZW5zOiBzdHJpbmc7XG4gICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjBcIiArIG1pbnN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWlucyA9IFwiXCIgKyBtaW5zdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMFwiICsgc2Vjb25kdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIlwiICsgc2Vjb25kdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzI6eXl5eS1tbS1kZCBoOm06c1xuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMih0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgZGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgICAgICB2YXIgeWVhcjogbnVtYmVyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICB2YXIgbW9udGg6IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7IFx0Ly/ov5Tlm57nmoTmnIjku73ku44wLTEx77ybXG4gICAgICAgIHZhciBkYXk6IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB2YXIgaG91cnM6IG51bWJlciA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgdmFyIG1pbnV0ZTogbnVtYmVyID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIHZhciBzZWNvbmQ6IG51bWJlciA9IGRhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICByZXR1cm4geWVhciArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIGRheSArIFwiIFwiICsgaG91cnMgKyBcIjpcIiArIG1pbnV0ZSArIFwiOlwiICsgc2Vjb25kO1xuXG4gICAgfVxuXG4gICAgLy80Onh45aSp5YmN77yMeHjlsI/ml7bliY3vvIx4eOWIhumSn+WJjVxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kNCh0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgdCA9IE1hdGguZmxvb3IodGltZSAvIDM2MDApO1xuICAgICAgICBpZiAodCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0ID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0IC8gMjQpICsgXCLlpKnliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ICsgXCLlsI/ml7bliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRpbWUgLyA2MCkgKyBcIuWIhumSn+WJjVwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQ1KHRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIC8vIOavj+S4quaXtumXtOWNleS9jeaJgOWvueW6lOeahOenkuaVsFxuICAgICAgICB2YXIgb25lRGF5OiBudW1iZXIgPSAzNjAwICogMjQ7XG4gICAgICAgIHZhciBvbmVIb3Vyc3Q6IG51bWJlciA9IDM2MDA7XG4gICAgICAgIHZhciBvbmVNaW5zdDogbnVtYmVyID0gNjA7XG5cbiAgICAgICAgdmFyIGRheXMgPSBNYXRoLmZsb29yKHRpbWUgLyBvbmVEYXkpO1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHRpbWUgJSBvbmVEYXkgLyBvbmVIb3Vyc3QpXG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgLyBvbmVNaW5zdCkgIC8vTWF0aC5mbG9vcih0aW1lICUgb25lRGF5ICUgb25lSG91cnN0IC8gb25lTWluc3QpO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgJSBvbmVNaW5zdCkgLy90aW1lO1xuXG4gICAgICAgIHZhciBkYXlzczogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgdmFyIGhvdXJzczogc3RyaW5nID0gXCJcIlxuICAgICAgICB2YXIgbWluc3M6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHZhciBzZWNzczogc3RyaW5nID0gXCJcIlxuICAgICAgICBpZiAodGltZSA+IDApIHtcbiAgICAgICAgICAgIC8v5aSpXG4gICAgICAgICAgICBpZiAoZGF5cyA9PSAwKSB7XG4gICAgICAgICAgICAgICAgZGF5c3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIC8v5bCP5pe2XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIC8v5YiGXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vjc3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWluc3MgKyBzZWNzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgc2Vjc3NcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCIwXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgbWluc3M7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXlzcyA9IGRheXMgKyBcIuWkqVwiO1xuICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBob3Vyc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPCAxMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiMFwiICsgaG91cnN0ICsgXCLlsI/ml7ZcIjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gXCJcIiArIGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheXNzICsgaG91cnNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFkZChudW0pIHtcbiAgICAgICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtO1xuICAgIH1cblxuXG59XG4iLCJpbXBvcnQgT2JqZWN0UG9vbCBmcm9tIFwiLi9PYmplY3RQb29sXCI7XG5cbi8qXG4qIG5hbWU7XG4qL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0SW5zdGFuY2Uge1xuICAgIHByaXZhdGUgc3RhdGljIGNsenMgPSBbXTtcbiAgICBwcml2YXRlIHN0YXRpYyBvYmplY3RzID0gW107XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldChjbHM6IGFueSkge1xuICAgICAgICBsZXQgaWR4ID0gdGhpcy5jbHpzLmluZGV4T2YoY2xzKTtcbiAgICAgICAgcmV0dXJuIChpZHggPj0gMCAmJiB0aGlzLm9iamVjdHNbaWR4XSkgfHwgdGhpcy5jcmVhdGUoY2xzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGUoY2xzOiBhbnkpIHtcbiAgICAgICAgdmFyIG9iaiA9IE9iamVjdFBvb2wucG9wKGNscyk7XG4gICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKG9iaik7XG4gICAgICAgIHRoaXMuY2x6cy5wdXNoKGNscyk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0UG9vbCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgY2xzQXJyID0gW107XG5cbiAgICBzdGF0aWMgcG9wKGNsczogYW55KSB7XG4gICAgICAgIGxldCBpZHggPSB0aGlzLmNsc0Fyci5pbmRleE9mKGNscyk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICBpZHggPSB0aGlzLmNsc0Fyci5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmNsc0Fyci5wdXNoKGNscyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGtleSA9ICdwb29sS2V5JyArIGlkeDtcbiAgICAgICAgbGV0IGl0ZW0gPSBMYXlhLlBvb2wuZ2V0SXRlbUJ5Q2xhc3Moa2V5LCBjbHMpO1xuICAgICAgICBpdGVtLnBvb2xLZXkgPSBrZXk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHN0YXRpYyBwdXNoKGl0ZW0pIHtcbiAgICAgICAgTGF5YS5Qb29sLnJlY292ZXIoaXRlbS5wb29sS2V5LCBpdGVtKTtcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFNjYWxlQnV0dG9uU2NyaXB0IHtcbiBcbiAgICBwdWJsaWMgZGVsYXlUaW1lOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBtaW5TY2FsZTogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIG1vbmtleUJveDogTGF5YS5JbWFnZTtcblxuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICrorr7nva5vd25lcuWHveaVsO+8jOWPr+S7peebtOaOpeiOt+WPluWIsOa3u+WKoOmZhOWKoOiEmuacrOeahOe7hOS7tuWunuS+iyBcbiAgICAgKiovXG4gICAgcHVibGljIHNldCBvd25lcih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMubW9ua2V5Qm94ID0gdmFsdWU7XG4gICAgICAgIC8v6Ieq5a6a5LmJ55qE6ISa5pys5Lya5pyJ5pe25bqP6Zeu6aKY77yM5omA5Lul5Zyo5q2k5re75Yqg5LiA5Liq5bu25pe2XG4gICAgICAgIHRoaXMubW9ua2V5Qm94LmZyYW1lT25jZSgyLCB0aGlzLCB0aGlzLm9uTG9hZGVkKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgb25Mb2FkZWQoKTogdm9pZCB7XG4gICAgICAgLyog6K6+572u5oyJ6ZKu5Li65Y2V5oCB5oyJ6ZKuXG4gICAgICAgICoqIOWPluWAvO+8mlxuICAgICAgICAqKiAx77ya5Y2V5oCB44CC5Zu+54mH5LiN5YGa5YiH5Ymy77yM5oyJ6ZKu55qE55qu6IKk54q25oCB5Y+q5pyJ5LiA56eN44CCXG4gICAgICAgICoqIDLvvJrkuKTmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB5oyJ5LiL5ZKM57uP6L+H5Y+K6YCJ5Lit54q25oCB55qu6IKk44CCXG4gICAgICAgICoqIDPvvJrkuInmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB57uP6L+H54q25oCB55qu6IKk44CB5oyJ5LiL5ZKM6YCJ5Lit54q25oCB55qu6IKkXG4gICAgICAgICovXG4gICAgICAgIC8v5re75Yqg6byg5qCH5oyJ5LiL5LqL5Lu25L6m5ZCs44CC5oyJ5pe25pe257yp5bCP5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5zY2FsZVNtYWxsKTtcbiAgICAgICAgLy/mt7vliqDpvKDmoIfmiqzotbfkuovku7bkvqblkKzjgILmiqzotbfml7bov5jljp/mjInpkq7jgIJcbiAgICAgICAgdGhpcy5tb25rZXlCb3gub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XG4gICAgICAgIC8v5re75Yqg6byg5qCH56a75byA5LqL5Lu25L6m5ZCs44CC56a75byA5pe26L+Y5Y6f5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgcHJpdmF0ZSBzY2FsZVNtYWxsKCk6dm9pZHtcbiAgICAgICAgLy/nvKnlsI/oh7MwLjjnmoTnvJPliqjmlYjmnpxcbiAgICAgICAgTGF5YS5Ud2Vlbi50byh0aGlzLm1vbmtleUJveCwge3NjYWxlWDowLjgsIHNjYWxlWTogMC44fSwgMik7XG4gICAgfVxuICAgIHByaXZhdGUgc2NhbGVCaWcoKTp2b2lke1xuICAgICAgICAvL+WPmOWkp+i/mOWOn+eahOe8k+WKqOaViOaenFxuICAgICAgICBMYXlhLlR3ZWVuLnRvKHRoaXMubW9ua2V5Qm94LCB7c2NhbGVYOjEsIHNjYWxlWToxfSwgMik7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFV0aWwge1xuICAgIHB1YmxpYyBsb2FkKHJlcywgb25Qcm9ncmVzcz86IExheWEuSGFuZGxlcik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoc3VjLCBmYWlsKSA9PiB7XG4gICAgICAgICAgICBMYXlhLmxvYWRlci5sb2FkKHJlcywgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCBzdWMpLCBvblByb2dyZXNzKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZS50b1N0cmluZygpKVxuICAgIH1cbiAgICBnZXRJdGVtKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBMYXlhLkxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgfVxuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVXRpbDtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJKCk6IFV0aWwge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IFV0aWwpO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gRGF0YUtleSB7XG4gICAgY3VyX3JlZF9kYXlfbGltaXQgPSAnY3VyX3JlZF9kYXlfbGltaXQnLFxuICAgIGN1cl9zaGFrZV9kYXlfbGltaXQgPSAnY3VyX3NoYWtlX2RheV9saW1pdCcsXG4gICAgc2hha2VMYXN0VGltZSA9ICdzaGFrZUxhc3RUaW1lJyxcbiAgICBkYXRhQ05UID0gJ2RhdGFDTlQnLFxuICAgIHRvZGF5Q250ID0gJ3RvZGF5Q250JyxcbiAgICBsYXN0VGltZSA9ICdsYXN0VGltZScsXG59Il19
... ...
puchi_laya/src/.DS_Store
No preview for this file type
puchi_laya/src/Main.ts
... ... @@ -50,10 +50,8 @@ class Main {
50 50 private loadData() {
51 51 // 处理游戏加载
52 52  
53   -
54 53 //加载完成
55 54 this.toggleScene();
56   -
57 55 }
58 56  
59 57 private checkLoad: number = 0;
... ...
puchi_laya/src/sdk/TrackingSdk.ts
... ... @@ -1,17 +0,0 @@
1   -import AppSdk from "./AppSdk";
2   -import ObjectInstance from "../uitl/ObjectInstance";
3   -
4   -export default class TrackingSdk {
5   - dot(key: string) {
6   - AppSdk.I.appDotTracKing(key);
7   - }
8   -
9   - static get I(): TrackingSdk {
10   - return ObjectInstance.get(TrackingSdk) as TrackingSdk;
11   - }
12   -}
13   -
14   -export enum TrackingKey {
15   - RedPack1 = 'event_5',
16   - RedPack5 = 'event_6'
17   -}
puchi_laya/src/sdk/model/RedpacketModel.ts
1 1 import BaseModel from "./BaseModel";
2 2 import AdManager from "../../sdk/AdManager";
3 3 import TeaSdk, { DotKey } from "../../sdk/TeaSdk";
4   -import TrackingSdk, { TrackingKey } from "../../sdk/TrackingSdk";
5 4 import { GoldConfigData } from "../../sdk/sdkData/GoldConfigData";
6 5 import AddGoldData from "../../sdk/sdkData/AddGoldData";
7 6 import DateUtils from "../../uitl/DateUtils";
... ... @@ -97,10 +96,7 @@ export default class RedpacketModel extends BaseModel {
97 96 this.data.list.push(this.curRedpacket);
98 97 this.data.lastTime = (new Date).getTime();
99 98 this.data.todayCnt += 1;
100   - if (this.data.cnt == 1)
101   - TrackingSdk.I.dot(TrackingKey.RedPack1);
102   - if (this.data.cnt == 5)
103   - TrackingSdk.I.dot(TrackingKey.RedPack5);
  99 +
104 100 this.curRedpacket = 0;
105 101 Util.I.setItem(DataKey.dataCNT, this.data.cnt);
106 102 Util.I.setItem(DataKey.todayCnt, this.data.todayCnt);
... ...