for-modules 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,750 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Player = void 0;
7
+ var _Filters = require("./Filters");
8
+ var _Utils = require("./Utils");
9
+ var _ = _interopRequireWildcard(require("lodash"));
10
+ var _PlayerCheck = _interopRequireDefault(require("../Utils/PlayerCheck"));
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
12
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
13
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
14
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
15
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
16
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
17
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
18
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
19
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
20
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
21
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
22
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
25
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
26
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
27
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
28
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
29
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
30
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
31
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
32
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
33
+ var Player = exports.Player = /*#__PURE__*/function () {
34
+ /**
35
+ * Creates a new player, returns one if it already exists.
36
+ * @param options
37
+ */
38
+ function Player(options) {
39
+ var _options$volume;
40
+ _classCallCheck(this, Player);
41
+ /** The Queue for the Player. */
42
+ _defineProperty(this, "queue", new (_Utils.Structure.get("Queue"))());
43
+ /** Whether the queue repeats the track. */
44
+ _defineProperty(this, "trackRepeat", false);
45
+ /** Whether the queue repeats the queue. */
46
+ _defineProperty(this, "queueRepeat", false);
47
+ /**Whether the queue repeats and shuffles after each song. */
48
+ _defineProperty(this, "dynamicRepeat", false);
49
+ /** The time the player is in the track. */
50
+ _defineProperty(this, "position", 0);
51
+ /** Whether the player is playing. */
52
+ _defineProperty(this, "playing", false);
53
+ /** Whether the player is paused. */
54
+ _defineProperty(this, "paused", false);
55
+ /** The voice channel for the player. */
56
+ _defineProperty(this, "voiceChannel", null);
57
+ /** The text channel for the player. */
58
+ _defineProperty(this, "textChannel", null);
59
+ /** The current state of the player. */
60
+ _defineProperty(this, "state", "DISCONNECTED");
61
+ /** The equalizer bands array. */
62
+ _defineProperty(this, "bands", new Array(15).fill(0.0));
63
+ /** The autoplay state of the player. */
64
+ _defineProperty(this, "isAutoplay", false);
65
+ _defineProperty(this, "data", {});
66
+ this.options = options;
67
+ if (!this.manager) this.manager = _Utils.Structure.get("Player")._manager;
68
+ if (!this.manager) throw new RangeError("Manager has not been initiated.");
69
+ if (this.manager.players.has(options.guild)) {
70
+ return this.manager.players.get(options.guild);
71
+ }
72
+ (0, _PlayerCheck["default"])(options);
73
+ this.guild = options.guild;
74
+ this.voiceState = Object.assign({
75
+ op: "voiceUpdate",
76
+ guild_id: options.guild
77
+ });
78
+ if (options.voiceChannel) this.voiceChannel = options.voiceChannel;
79
+ if (options.textChannel) this.textChannel = options.textChannel;
80
+ var node = this.manager.nodes.get(options.node);
81
+ this.node = node || this.manager.useableNodes;
82
+ if (!this.node) throw new RangeError("No available nodes.");
83
+ this.manager.players.set(options.guild, this);
84
+ this.manager.emit("PlayerCreate", this);
85
+ this.setVolume((_options$volume = options.volume) !== null && _options$volume !== void 0 ? _options$volume : 100);
86
+ this.filters = new _Filters.Filters(this);
87
+ }
88
+
89
+ /**
90
+ * Same as Manager#search() but a shortcut on the player itself.
91
+ * @param query
92
+ * @param requester
93
+ */
94
+ return _createClass(Player, [{
95
+ key: "set",
96
+ value:
97
+ /**
98
+ * Set custom data.
99
+ * @param key
100
+ * @param value
101
+ */
102
+ function set(key, value) {
103
+ this.data[key] = value;
104
+ }
105
+
106
+ /**
107
+ * Get custom data.
108
+ * @param key
109
+ */
110
+ }, {
111
+ key: "get",
112
+ value: function get(key) {
113
+ return this.data[key];
114
+ }
115
+
116
+ /** @hidden */
117
+ }, {
118
+ key: "search",
119
+ value: function search(query, requester) {
120
+ return this.manager.search(query, requester);
121
+ }
122
+
123
+ /** Connect to the voice channel. */
124
+ }, {
125
+ key: "connect",
126
+ value: function connect() {
127
+ if (!this.voiceChannel) throw new RangeError("No voice channel has been set.");
128
+ this.state = "CONNECTING";
129
+ this.manager.options.send(this.guild, {
130
+ op: 4,
131
+ d: {
132
+ guild_id: this.guild,
133
+ channel_id: this.voiceChannel,
134
+ self_mute: this.options.selfMute || false,
135
+ self_deaf: this.options.selfDeafen || false
136
+ }
137
+ });
138
+ this.state = "CONNECTED";
139
+ return this;
140
+ }
141
+
142
+ /**
143
+ * Moves the player to a different node.
144
+ *
145
+ * @param {string} [node] - The ID of the node to move to.
146
+ * @returns {this} - The player instance.
147
+ */
148
+ }, {
149
+ key: "moveNode",
150
+ value: (function () {
151
+ var _moveNode = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(node) {
152
+ var _this = this,
153
+ _this$queue$current,
154
+ _voiceState;
155
+ var destroyOldNode, currentNode, destinationNode, position, fetchedPlayer;
156
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
157
+ while (1) switch (_context2.prev = _context2.next) {
158
+ case 0:
159
+ node = node || this.manager.leastLoadNode.first().options.identifier || this.manager.nodes.filter(function (n) {
160
+ return n.connected;
161
+ }).first().options.identifier;
162
+ if (this.manager.nodes.has(node)) {
163
+ _context2.next = 3;
164
+ break;
165
+ }
166
+ throw new RangeError("No nodes available.");
167
+ case 3:
168
+ if (!(this.node.options.identifier === node)) {
169
+ _context2.next = 5;
170
+ break;
171
+ }
172
+ return _context2.abrupt("return", this);
173
+ case 5:
174
+ destroyOldNode = /*#__PURE__*/function () {
175
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(node) {
176
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
177
+ while (1) switch (_context.prev = _context.next) {
178
+ case 0:
179
+ _this.state = "MOVING";
180
+ if (!(_this.manager.nodes.get(node.options.identifier) && _this.manager.nodes.get(node.options.identifier).connected)) {
181
+ _context.next = 4;
182
+ break;
183
+ }
184
+ _context.next = 4;
185
+ return node.rest.destroyPlayer(_this.guild);
186
+ case 4:
187
+ setTimeout(function () {
188
+ return _this.state = "CONNECTED";
189
+ }, 5000);
190
+ case 5:
191
+ case "end":
192
+ return _context.stop();
193
+ }
194
+ }, _callee);
195
+ }));
196
+ return function destroyOldNode(_x2) {
197
+ return _ref.apply(this, arguments);
198
+ };
199
+ }();
200
+ currentNode = this.node;
201
+ destinationNode = this.manager.nodes.get(node);
202
+ position = this.position;
203
+ if (!currentNode.connected) {
204
+ _context2.next = 14;
205
+ break;
206
+ }
207
+ _context2.next = 12;
208
+ return currentNode.rest.get("/v4/sessions/".concat(currentNode.sessionId, "/players/").concat(this.guild));
209
+ case 12:
210
+ fetchedPlayer = _context2.sent;
211
+ position = fetchedPlayer.track.info.position;
212
+ case 14:
213
+ _context2.next = 16;
214
+ return destinationNode.rest.updatePlayer({
215
+ guildId: this.guild,
216
+ data: {
217
+ encodedTrack: (_this$queue$current = this.queue.current) === null || _this$queue$current === void 0 ? void 0 : _this$queue$current.track,
218
+ position: position,
219
+ volume: this.volume,
220
+ paused: this.paused,
221
+ filters: {
222
+ distortion: this.filters.distortion,
223
+ equalizer: this.filters.equalizer,
224
+ karaoke: this.filters.karaoke,
225
+ rotation: this.filters.rotation,
226
+ timescale: this.filters.timescale,
227
+ vibrato: this.filters.vibrato,
228
+ volume: this.filters.volume
229
+ }
230
+ }
231
+ });
232
+ case 16:
233
+ _context2.next = 18;
234
+ return destinationNode.rest.updatePlayer({
235
+ guildId: this.guild,
236
+ data: {
237
+ voice: {
238
+ token: this.voiceState.event.token,
239
+ endpoint: this.voiceState.event.endpoint,
240
+ sessionId: (_voiceState = this.voiceState) === null || _voiceState === void 0 ? void 0 : _voiceState.sessionId
241
+ }
242
+ }
243
+ });
244
+ case 18:
245
+ this.node = destinationNode;
246
+ destroyOldNode(currentNode);
247
+ return _context2.abrupt("return", this);
248
+ case 21:
249
+ case "end":
250
+ return _context2.stop();
251
+ }
252
+ }, _callee2, this);
253
+ }));
254
+ function moveNode(_x) {
255
+ return _moveNode.apply(this, arguments);
256
+ }
257
+ return moveNode;
258
+ }() /** Disconnect from the voice channel. */)
259
+ }, {
260
+ key: "disconnect",
261
+ value: function disconnect() {
262
+ if (this.voiceChannel === null) return this;
263
+ this.state = "DISCONNECTING";
264
+ this.pause(true);
265
+ this.manager.options.send(this.guild, {
266
+ op: 4,
267
+ d: {
268
+ guild_id: this.guild,
269
+ channel_id: null,
270
+ self_mute: false,
271
+ self_deaf: false
272
+ }
273
+ });
274
+ this.voiceChannel = null;
275
+ this.state = "DISCONNECTED";
276
+ return this;
277
+ }
278
+
279
+ /** Destroys the player. */
280
+ }, {
281
+ key: "destroy",
282
+ value: function destroy() {
283
+ var disconnect = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
284
+ this.state = "DESTROYING";
285
+ if (disconnect) {
286
+ this.disconnect();
287
+ }
288
+ this.node.rest.destroyPlayer(this.guild);
289
+ this.manager.emit("PlayerDestroy", this);
290
+ this.manager.players["delete"](this.guild);
291
+ }
292
+
293
+ /**
294
+ * Sets the player voice channel.
295
+ * @param channel
296
+ */
297
+ }, {
298
+ key: "setVoiceChannel",
299
+ value: function setVoiceChannel(channel) {
300
+ if (typeof channel !== "string") throw new TypeError("Channel must be a non-empty string.");
301
+ this.voiceChannel = channel;
302
+ this.connect();
303
+ return this;
304
+ }
305
+
306
+ /**
307
+ * Sets the player text channel.
308
+ * @param channel
309
+ */
310
+ }, {
311
+ key: "setTextChannel",
312
+ value: function setTextChannel(channel) {
313
+ if (typeof channel !== "string") throw new TypeError("Channel must be a non-empty string.");
314
+ this.textChannel = channel;
315
+ return this;
316
+ }
317
+
318
+ /** Sets the now playing message. */
319
+ }, {
320
+ key: "setNowPlayingMessage",
321
+ value: function setNowPlayingMessage(message) {
322
+ if (!message) {
323
+ throw new TypeError("You must provide the message of the now playing message.");
324
+ }
325
+ return this.nowPlayingMessage = message;
326
+ }
327
+
328
+ /** Plays the next track. */
329
+ }, {
330
+ key: "play",
331
+ value: function () {
332
+ var _play = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(optionsOrTrack, playOptions) {
333
+ var _this$queue$current2;
334
+ var finalOptions;
335
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
336
+ while (1) switch (_context3.prev = _context3.next) {
337
+ case 0:
338
+ if (typeof optionsOrTrack !== "undefined" && _Utils.TrackUtils.validate(optionsOrTrack)) {
339
+ if (this.queue.current) this.queue.previous = this.queue.current;
340
+ this.queue.current = optionsOrTrack;
341
+ }
342
+ if (this.queue.current) {
343
+ _context3.next = 3;
344
+ break;
345
+ }
346
+ throw new RangeError("No current track.");
347
+ case 3:
348
+ finalOptions = playOptions ? playOptions : ["startTime", "endTime", "noReplace"].every(function (v) {
349
+ return Object.keys(optionsOrTrack || {}).includes(v);
350
+ }) ? optionsOrTrack : {};
351
+ if (!_Utils.TrackUtils.isUnresolvedTrack(this.queue.current)) {
352
+ _context3.next = 17;
353
+ break;
354
+ }
355
+ _context3.prev = 5;
356
+ _context3.next = 8;
357
+ return _Utils.TrackUtils.getClosestTrack(this.queue.current);
358
+ case 8:
359
+ this.queue.current = _context3.sent;
360
+ _context3.next = 17;
361
+ break;
362
+ case 11:
363
+ _context3.prev = 11;
364
+ _context3.t0 = _context3["catch"](5);
365
+ this.manager.emit("TrackError", this, this.queue.current, _context3.t0);
366
+ if (!this.queue[0]) {
367
+ _context3.next = 16;
368
+ break;
369
+ }
370
+ return _context3.abrupt("return", this.play(this.queue[0]));
371
+ case 16:
372
+ return _context3.abrupt("return");
373
+ case 17:
374
+ _context3.next = 19;
375
+ return this.node.rest.updatePlayer({
376
+ guildId: this.guild,
377
+ data: _objectSpread({
378
+ encodedTrack: (_this$queue$current2 = this.queue.current) === null || _this$queue$current2 === void 0 ? void 0 : _this$queue$current2.track
379
+ }, finalOptions)
380
+ });
381
+ case 19:
382
+ Object.assign(this, {
383
+ position: 0,
384
+ playing: true
385
+ });
386
+ case 20:
387
+ case "end":
388
+ return _context3.stop();
389
+ }
390
+ }, _callee3, this, [[5, 11]]);
391
+ }));
392
+ function play(_x3, _x4) {
393
+ return _play.apply(this, arguments);
394
+ }
395
+ return play;
396
+ }()
397
+ /**
398
+ * Sets the autoplay-state of the player.
399
+ * @param autoplayState
400
+ * @param botUser
401
+ */
402
+ }, {
403
+ key: "setAutoplay",
404
+ value: function setAutoplay(autoplayState, botUser) {
405
+ if (typeof autoplayState !== "boolean") {
406
+ throw new TypeError("autoplayState must be a boolean.");
407
+ }
408
+ if (_typeof(botUser) !== "object") {
409
+ throw new TypeError("botUser must be a user-object.");
410
+ }
411
+ this.isAutoplay = autoplayState;
412
+ this.set("Internal_BotUser", botUser);
413
+ return this;
414
+ }
415
+
416
+ /**
417
+ * Gets recommended tracks and returns an array of tracks.
418
+ * @param track
419
+ * @param requester
420
+ */
421
+ }, {
422
+ key: "getRecommended",
423
+ value: (function () {
424
+ var _getRecommended = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(track, requester) {
425
+ var node, hasSpotifyURL, hasYouTubeURL, _res, info, isSpotifyPluginEnabled, isSpotifySourceManagerEnabled, trackID, artistID, identifier, recommendedResult, playlistData, recommendedTracks, _tracks, videoID, _res2, searchURI, res, tracks, filteredTracks, _iterator, _step, _track, _track$title$split$ma, _track$title$split$ma2, author, title;
426
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
427
+ while (1) switch (_context4.prev = _context4.next) {
428
+ case 0:
429
+ node = this.manager.useableNodes;
430
+ if (node) {
431
+ _context4.next = 3;
432
+ break;
433
+ }
434
+ throw new Error("No available nodes.");
435
+ case 3:
436
+ hasSpotifyURL = ["spotify.com", "open.spotify.com"].some(function (url) {
437
+ return track.uri.includes(url);
438
+ });
439
+ hasYouTubeURL = ["youtube.com", "youtu.be"].some(function (url) {
440
+ return track.uri.includes(url);
441
+ });
442
+ if (!hasSpotifyURL) {
443
+ _context4.next = 27;
444
+ break;
445
+ }
446
+ _context4.next = 8;
447
+ return node.rest.get("/v4/info");
448
+ case 8:
449
+ _res = _context4.sent;
450
+ info = _res;
451
+ isSpotifyPluginEnabled = info.plugins.some(function (plugin) {
452
+ return plugin.name === "lavasrc-plugin";
453
+ });
454
+ isSpotifySourceManagerEnabled = info.sourceManagers.includes("spotify");
455
+ if (!(isSpotifyPluginEnabled && isSpotifySourceManagerEnabled)) {
456
+ _context4.next = 27;
457
+ break;
458
+ }
459
+ trackID = node.extractSpotifyTrackID(track.uri);
460
+ artistID = node.extractSpotifyArtistID(track.pluginInfo.artistUrl);
461
+ identifier = "";
462
+ if (trackID && artistID) {
463
+ identifier = "sprec:seed_artists=".concat(artistID, "&seed_tracks=").concat(trackID);
464
+ } else if (trackID) {
465
+ identifier = "sprec:seed_tracks=".concat(trackID);
466
+ } else if (artistID) {
467
+ identifier = "sprec:seed_artists=".concat(artistID);
468
+ }
469
+ if (!identifier) {
470
+ _context4.next = 27;
471
+ break;
472
+ }
473
+ _context4.next = 20;
474
+ return node.rest.get("/v4/loadtracks?identifier=".concat(encodeURIComponent(identifier)));
475
+ case 20:
476
+ recommendedResult = _context4.sent;
477
+ if (!(recommendedResult.loadType === "playlist")) {
478
+ _context4.next = 27;
479
+ break;
480
+ }
481
+ playlistData = recommendedResult.data;
482
+ recommendedTracks = playlistData.tracks;
483
+ if (!recommendedTracks) {
484
+ _context4.next = 27;
485
+ break;
486
+ }
487
+ _tracks = recommendedTracks.map(function (track) {
488
+ return _Utils.TrackUtils.build(track, requester);
489
+ });
490
+ return _context4.abrupt("return", _tracks);
491
+ case 27:
492
+ videoID = track.uri.substring(track.uri.indexOf("=") + 1);
493
+ if (hasYouTubeURL) {
494
+ _context4.next = 33;
495
+ break;
496
+ }
497
+ _context4.next = 31;
498
+ return this.manager.search("".concat(track.author, " - ").concat(track.title));
499
+ case 31:
500
+ _res2 = _context4.sent;
501
+ videoID = _res2.tracks[0].uri.substring(_res2.tracks[0].uri.indexOf("=") + 1);
502
+ case 33:
503
+ searchURI = "https://www.youtube.com/watch?v=".concat(videoID, "&list=RD").concat(videoID);
504
+ _context4.next = 36;
505
+ return this.manager.search(searchURI);
506
+ case 36:
507
+ res = _context4.sent;
508
+ if (!(res.loadType === "empty" || res.loadType === "error")) {
509
+ _context4.next = 39;
510
+ break;
511
+ }
512
+ return _context4.abrupt("return");
513
+ case 39:
514
+ tracks = res.tracks;
515
+ if (res.loadType === "playlist") {
516
+ tracks = res.playlist.tracks;
517
+ }
518
+ filteredTracks = tracks.filter(function (track) {
519
+ return track.uri !== "https://www.youtube.com/watch?v=".concat(videoID);
520
+ });
521
+ if (this.manager.options.replaceYouTubeCredentials) {
522
+ _iterator = _createForOfIteratorHelper(filteredTracks);
523
+ try {
524
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
525
+ _track = _step.value;
526
+ _track.author = _track.author.replace("- Topic", "");
527
+ _track.title = _track.title.replace("Topic -", "");
528
+ if (_track.title.includes("-")) {
529
+ _track$title$split$ma = _track.title.split("-").map(function (str) {
530
+ return str.trim();
531
+ }), _track$title$split$ma2 = _slicedToArray(_track$title$split$ma, 2), author = _track$title$split$ma2[0], title = _track$title$split$ma2[1];
532
+ _track.author = author;
533
+ _track.title = title;
534
+ }
535
+ }
536
+ } catch (err) {
537
+ _iterator.e(err);
538
+ } finally {
539
+ _iterator.f();
540
+ }
541
+ }
542
+ return _context4.abrupt("return", filteredTracks);
543
+ case 44:
544
+ case "end":
545
+ return _context4.stop();
546
+ }
547
+ }, _callee4, this);
548
+ }));
549
+ function getRecommended(_x5, _x6) {
550
+ return _getRecommended.apply(this, arguments);
551
+ }
552
+ return getRecommended;
553
+ }()
554
+ /**
555
+ * Sets the player volume.
556
+ * @param volume
557
+ */
558
+ )
559
+ }, {
560
+ key: "setVolume",
561
+ value: function setVolume(volume) {
562
+ if (isNaN(volume)) throw new TypeError("Volume must be a number.");
563
+ this.node.rest.updatePlayer({
564
+ guildId: this.options.guild,
565
+ data: {
566
+ volume: volume
567
+ }
568
+ });
569
+ this.volume = volume;
570
+ return this;
571
+ }
572
+
573
+ /**
574
+ * Sets the track repeat.
575
+ * @param repeat
576
+ */
577
+ }, {
578
+ key: "setTrackRepeat",
579
+ value: function setTrackRepeat(repeat) {
580
+ if (typeof repeat !== "boolean") throw new TypeError('Repeat can only be "true" or "false".');
581
+ var oldPlayer = _objectSpread({}, this);
582
+ if (repeat) {
583
+ this.trackRepeat = true;
584
+ this.queueRepeat = false;
585
+ this.dynamicRepeat = false;
586
+ } else {
587
+ this.trackRepeat = false;
588
+ this.queueRepeat = false;
589
+ this.dynamicRepeat = false;
590
+ }
591
+ this.manager.emit("PlayerStateUpdate", oldPlayer, this);
592
+ return this;
593
+ }
594
+
595
+ /**
596
+ * Sets the queue repeat.
597
+ * @param repeat
598
+ */
599
+ }, {
600
+ key: "setQueueRepeat",
601
+ value: function setQueueRepeat(repeat) {
602
+ if (typeof repeat !== "boolean") throw new TypeError('Repeat can only be "true" or "false".');
603
+ var oldPlayer = _objectSpread({}, this);
604
+ if (repeat) {
605
+ this.trackRepeat = false;
606
+ this.queueRepeat = true;
607
+ this.dynamicRepeat = false;
608
+ } else {
609
+ this.trackRepeat = false;
610
+ this.queueRepeat = false;
611
+ this.dynamicRepeat = false;
612
+ }
613
+ this.manager.emit("PlayerStateUpdate", oldPlayer, this);
614
+ return this;
615
+ }
616
+
617
+ /**
618
+ * Sets the queue to repeat and shuffles the queue after each song.
619
+ * @param repeat "true" or "false".
620
+ * @param ms After how many milliseconds to trigger dynamic repeat.
621
+ */
622
+ }, {
623
+ key: "setDynamicRepeat",
624
+ value: function setDynamicRepeat(repeat, ms) {
625
+ var _this2 = this;
626
+ if (typeof repeat !== "boolean") {
627
+ throw new TypeError('Repeat can only be "true" or "false".');
628
+ }
629
+ if (this.queue.size <= 1) {
630
+ throw new RangeError("The queue size must be greater than 1.");
631
+ }
632
+ var oldPlayer = _objectSpread({}, this);
633
+ if (repeat) {
634
+ this.trackRepeat = false;
635
+ this.queueRepeat = false;
636
+ this.dynamicRepeat = true;
637
+ this.dynamicLoopInterval = setInterval(function () {
638
+ if (!_this2.dynamicRepeat) return;
639
+ var shuffled = _.shuffle(_this2.queue);
640
+ _this2.queue.clear();
641
+ shuffled.forEach(function (track) {
642
+ _this2.queue.add(track);
643
+ });
644
+ }, ms);
645
+ } else {
646
+ clearInterval(this.dynamicLoopInterval);
647
+ this.trackRepeat = false;
648
+ this.queueRepeat = false;
649
+ this.dynamicRepeat = false;
650
+ }
651
+ this.manager.emit("PlayerStateUpdate", oldPlayer, this);
652
+ return this;
653
+ }
654
+
655
+ /** Restarts the current track to the start. */
656
+ }, {
657
+ key: "restart",
658
+ value: function restart() {
659
+ var _this$queue$current3, _this$queue$current4;
660
+ if (!((_this$queue$current3 = this.queue.current) !== null && _this$queue$current3 !== void 0 && _this$queue$current3.track)) {
661
+ if (this.queue.length) this.play();
662
+ return;
663
+ }
664
+ this.node.rest.updatePlayer({
665
+ guildId: this.guild,
666
+ data: {
667
+ position: 0,
668
+ encodedTrack: (_this$queue$current4 = this.queue.current) === null || _this$queue$current4 === void 0 ? void 0 : _this$queue$current4.track
669
+ }
670
+ });
671
+ }
672
+
673
+ /** Stops the current track, optionally give an amount to skip to, e.g 5 would play the 5th song. */
674
+ }, {
675
+ key: "stop",
676
+ value: function stop(amount) {
677
+ if (typeof amount === "number" && amount > 1) {
678
+ if (amount > this.queue.length) throw new RangeError("Cannot skip more than the queue length.");
679
+ this.queue.splice(0, amount - 1);
680
+ }
681
+ this.node.rest.updatePlayer({
682
+ guildId: this.guild,
683
+ data: {
684
+ encodedTrack: null
685
+ }
686
+ });
687
+ return this;
688
+ }
689
+
690
+ /**
691
+ * Pauses the current track.
692
+ * @param pause
693
+ */
694
+ }, {
695
+ key: "pause",
696
+ value: function pause(_pause) {
697
+ if (typeof _pause !== "boolean") throw new RangeError('Pause can only be "true" or "false".');
698
+ if (this.paused === _pause || !this.queue.totalSize) return this;
699
+ var oldPlayer = _objectSpread({}, this);
700
+ this.playing = !_pause;
701
+ this.paused = _pause;
702
+ this.node.rest.updatePlayer({
703
+ guildId: this.guild,
704
+ data: {
705
+ paused: _pause
706
+ }
707
+ });
708
+ this.manager.emit("PlayerStateUpdate", oldPlayer, this);
709
+ return this;
710
+ }
711
+
712
+ /** Go back to the previous song. */
713
+ }, {
714
+ key: "previous",
715
+ value: function previous() {
716
+ this.queue.unshift(this.queue.previous);
717
+ this.stop();
718
+ return this;
719
+ }
720
+
721
+ /**
722
+ * Seeks to the position in the current track.
723
+ * @param position
724
+ */
725
+ }, {
726
+ key: "seek",
727
+ value: function seek(position) {
728
+ if (!this.queue.current) return undefined;
729
+ position = Number(position);
730
+ if (isNaN(position)) throw new RangeError("Position must be a number.");
731
+ if (position < 0 || position > this.queue.current.duration) position = Math.max(Math.min(position, this.queue.current.duration), 0);
732
+ this.position = position;
733
+ this.node.rest.updatePlayer({
734
+ guildId: this.guild,
735
+ data: {
736
+ position: position
737
+ }
738
+ });
739
+ return this;
740
+ }
741
+ }], [{
742
+ key: "init",
743
+ value: function init(manager) {
744
+ this._manager = manager;
745
+ }
746
+ }]);
747
+ }();
748
+ /** If track partials are set some of these will be `undefined` as they were removed. */
749
+ /** Unresolved tracks can't be played normally, they will resolve before playing into a Track. */
750
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRmlsdGVycyIsInJlcXVpcmUiLCJfVXRpbHMiLCJfIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfUGxheWVyQ2hlY2siLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsIl9fZXNNb2R1bGUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJXZWFrTWFwIiwiciIsInQiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwibCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZiIsIm8iLCJuZXh0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImxlbmd0aCIsIkFycmF5IiwiaXNBcnJheSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX24iLCJGIiwicyIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwicHJvdG90eXBlIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsImMiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImgiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsImtleSIsIl9jcmVhdGVDbGFzcyIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiUGxheWVyIiwiZXhwb3J0cyIsIm9wdGlvbnMiLCJfb3B0aW9ucyR2b2x1bWUiLCJTdHJ1Y3R1cmUiLCJmaWxsIiwibWFuYWdlciIsIl9tYW5hZ2VyIiwiUmFuZ2VFcnJvciIsInBsYXllcnMiLCJndWlsZCIsInBsYXllckNoZWNrIiwidm9pY2VTdGF0ZSIsImFzc2lnbiIsIm9wIiwiZ3VpbGRfaWQiLCJ2b2ljZUNoYW5uZWwiLCJ0ZXh0Q2hhbm5lbCIsIm5vZGUiLCJub2RlcyIsInVzZWFibGVOb2RlcyIsImVtaXQiLCJzZXRWb2x1bWUiLCJ2b2x1bWUiLCJmaWx0ZXJzIiwiRmlsdGVycyIsImRhdGEiLCJzZWFyY2giLCJxdWVyeSIsInJlcXVlc3RlciIsImNvbm5lY3QiLCJzdGF0ZSIsInNlbmQiLCJjaGFubmVsX2lkIiwic2VsZl9tdXRlIiwic2VsZk11dGUiLCJzZWxmX2RlYWYiLCJzZWxmRGVhZmVuIiwiX21vdmVOb2RlIiwiX2NhbGxlZTIiLCJfdGhpcyIsIl90aGlzJHF1ZXVlJGN1cnJlbnQiLCJfdm9pY2VTdGF0ZSIsImRlc3Ryb3lPbGROb2RlIiwiY3VycmVudE5vZGUiLCJkZXN0aW5hdGlvbk5vZGUiLCJwb3NpdGlvbiIsImZldGNoZWRQbGF5ZXIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJsZWFzdExvYWROb2RlIiwiZmlyc3QiLCJpZGVudGlmaWVyIiwiY29ubmVjdGVkIiwiX3JlZiIsIl9jYWxsZWUiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicmVzdCIsImRlc3Ryb3lQbGF5ZXIiLCJzZXRUaW1lb3V0IiwiX3gyIiwiY29uY2F0Iiwic2Vzc2lvbklkIiwidHJhY2siLCJpbmZvIiwidXBkYXRlUGxheWVyIiwiZ3VpbGRJZCIsImVuY29kZWRUcmFjayIsInF1ZXVlIiwiY3VycmVudCIsInBhdXNlZCIsImRpc3RvcnRpb24iLCJlcXVhbGl6ZXIiLCJrYXJhb2tlIiwicm90YXRpb24iLCJ0aW1lc2NhbGUiLCJ2aWJyYXRvIiwidm9pY2UiLCJ0b2tlbiIsImV2ZW50IiwiZW5kcG9pbnQiLCJtb3ZlTm9kZSIsIl94IiwiZGlzY29ubmVjdCIsInBhdXNlIiwiZGVzdHJveSIsInVuZGVmaW5lZCIsInNldFZvaWNlQ2hhbm5lbCIsImNoYW5uZWwiLCJzZXRUZXh0Q2hhbm5lbCIsInNldE5vd1BsYXlpbmdNZXNzYWdlIiwibWVzc2FnZSIsIm5vd1BsYXlpbmdNZXNzYWdlIiwiX3BsYXkiLCJfY2FsbGVlMyIsIm9wdGlvbnNPclRyYWNrIiwicGxheU9wdGlvbnMiLCJfdGhpcyRxdWV1ZSRjdXJyZW50MiIsImZpbmFsT3B0aW9ucyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIlRyYWNrVXRpbHMiLCJ2YWxpZGF0ZSIsInByZXZpb3VzIiwiZXZlcnkiLCJpbmNsdWRlcyIsImlzVW5yZXNvbHZlZFRyYWNrIiwiZ2V0Q2xvc2VzdFRyYWNrIiwidDAiLCJwbGF5IiwicGxheWluZyIsIl94MyIsIl94NCIsInNldEF1dG9wbGF5IiwiYXV0b3BsYXlTdGF0ZSIsImJvdFVzZXIiLCJpc0F1dG9wbGF5IiwiX2dldFJlY29tbWVuZGVkIiwiX2NhbGxlZTQiLCJoYXNTcG90aWZ5VVJMIiwiaGFzWW91VHViZVVSTCIsIl9yZXMiLCJpc1Nwb3RpZnlQbHVnaW5FbmFibGVkIiwiaXNTcG90aWZ5U291cmNlTWFuYWdlckVuYWJsZWQiLCJ0cmFja0lEIiwiYXJ0aXN0SUQiLCJyZWNvbW1lbmRlZFJlc3VsdCIsInBsYXlsaXN0RGF0YSIsInJlY29tbWVuZGVkVHJhY2tzIiwiX3RyYWNrcyIsInZpZGVvSUQiLCJfcmVzMiIsInNlYXJjaFVSSSIsInJlcyIsInRyYWNrcyIsImZpbHRlcmVkVHJhY2tzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJfdHJhY2siLCJfdHJhY2skdGl0bGUkc3BsaXQkbWEiLCJfdHJhY2skdGl0bGUkc3BsaXQkbWEyIiwiYXV0aG9yIiwidGl0bGUiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJzb21lIiwidXJsIiwidXJpIiwicGx1Z2lucyIsInBsdWdpbiIsInNvdXJjZU1hbmFnZXJzIiwiZXh0cmFjdFNwb3RpZnlUcmFja0lEIiwiZXh0cmFjdFNwb3RpZnlBcnRpc3RJRCIsInBsdWdpbkluZm8iLCJhcnRpc3RVcmwiLCJlbmNvZGVVUklDb21wb25lbnQiLCJsb2FkVHlwZSIsIm1hcCIsImJ1aWxkIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsInBsYXlsaXN0IiwicmVwbGFjZVlvdVR1YmVDcmVkZW50aWFscyIsInJlcGxhY2UiLCJzcGxpdCIsInN0ciIsInRyaW0iLCJlcnIiLCJnZXRSZWNvbW1lbmRlZCIsIl94NSIsIl94NiIsInNldFRyYWNrUmVwZWF0IiwicmVwZWF0Iiwib2xkUGxheWVyIiwidHJhY2tSZXBlYXQiLCJxdWV1ZVJlcGVhdCIsImR5bmFtaWNSZXBlYXQiLCJzZXRRdWV1ZVJlcGVhdCIsInNldER5bmFtaWNSZXBlYXQiLCJtcyIsIl90aGlzMiIsInNpemUiLCJkeW5hbWljTG9vcEludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJzaHVmZmxlZCIsInNodWZmbGUiLCJjbGVhciIsImFkZCIsImNsZWFySW50ZXJ2YWwiLCJyZXN0YXJ0IiwiX3RoaXMkcXVldWUkY3VycmVudDMiLCJfdGhpcyRxdWV1ZSRjdXJyZW50NCIsImFtb3VudCIsInNwbGljZSIsInRvdGFsU2l6ZSIsInVuc2hpZnQiLCJzZWVrIiwiZHVyYXRpb24iLCJNYXRoIiwibWF4IiwibWluIiwiaW5pdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdHJ1Y3R1cmVzL1BsYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJzIH0gZnJvbSBcIi4vRmlsdGVyc1wiO1xuaW1wb3J0IHsgTGF2YWxpbmtSZXNwb25zZSwgTWFuYWdlciwgUGxheWxpc3RSYXdEYXRhLCBTZWFyY2hRdWVyeSwgU2VhcmNoUmVzdWx0IH0gZnJvbSBcIi4vTWFuYWdlclwiO1xuaW1wb3J0IHsgTGF2YWxpbmtJbmZvLCBOb2RlIH0gZnJvbSBcIi4vTm9kZVwiO1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiLi9RdWV1ZVwiO1xuaW1wb3J0IHsgU2l6ZXMsIFN0YXRlLCBTdHJ1Y3R1cmUsIFRyYWNrU291cmNlTmFtZSwgVHJhY2tVdGlscywgVm9pY2VTdGF0ZSB9IGZyb20gXCIuL1V0aWxzXCI7XG5pbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCBwbGF5ZXJDaGVjayBmcm9tIFwiLi4vVXRpbHMvUGxheWVyQ2hlY2tcIjtcbmltcG9ydCB7IENsaWVudFVzZXIsIE1lc3NhZ2UsIFVzZXIgfSBmcm9tIFwiZGlzY29yZC5qc1wiO1xuXG5leHBvcnQgY2xhc3MgUGxheWVyIHtcblx0LyoqIFRoZSBRdWV1ZSBmb3IgdGhlIFBsYXllci4gKi9cblx0cHVibGljIHJlYWRvbmx5IHF1ZXVlID0gbmV3IChTdHJ1Y3R1cmUuZ2V0KFwiUXVldWVcIikpKCkgYXMgUXVldWU7XG5cdC8qKiBUaGUgZmlsdGVycyBhcHBsaWVkIHRvIHRoZSBhdWRpby4gKi9cblx0cHVibGljIGZpbHRlcnM6IEZpbHRlcnM7XG5cdC8qKiBXaGV0aGVyIHRoZSBxdWV1ZSByZXBlYXRzIHRoZSB0cmFjay4gKi9cblx0cHVibGljIHRyYWNrUmVwZWF0ID0gZmFsc2U7XG5cdC8qKiBXaGV0aGVyIHRoZSBxdWV1ZSByZXBlYXRzIHRoZSBxdWV1ZS4gKi9cblx0cHVibGljIHF1ZXVlUmVwZWF0ID0gZmFsc2U7XG5cdC8qKldoZXRoZXIgdGhlIHF1ZXVlIHJlcGVhdHMgYW5kIHNodWZmbGVzIGFmdGVyIGVhY2ggc29uZy4gKi9cblx0cHVibGljIGR5bmFtaWNSZXBlYXQgPSBmYWxzZTtcblx0LyoqIFRoZSB0aW1lIHRoZSBwbGF5ZXIgaXMgaW4gdGhlIHRyYWNrLiAqL1xuXHRwdWJsaWMgcG9zaXRpb24gPSAwO1xuXHQvKiogV2hldGhlciB0aGUgcGxheWVyIGlzIHBsYXlpbmcuICovXG5cdHB1YmxpYyBwbGF5aW5nID0gZmFsc2U7XG5cdC8qKiBXaGV0aGVyIHRoZSBwbGF5ZXIgaXMgcGF1c2VkLiAqL1xuXHRwdWJsaWMgcGF1c2VkID0gZmFsc2U7XG5cdC8qKiBUaGUgdm9sdW1lIGZvciB0aGUgcGxheWVyICovXG5cdHB1YmxpYyB2b2x1bWU6IG51bWJlcjtcblx0LyoqIFRoZSBOb2RlIGZvciB0aGUgUGxheWVyLiAqL1xuXHRwdWJsaWMgbm9kZTogTm9kZTtcblx0LyoqIFRoZSBndWlsZCBmb3IgdGhlIHBsYXllci4gKi9cblx0cHVibGljIGd1aWxkOiBzdHJpbmc7XG5cdC8qKiBUaGUgdm9pY2UgY2hhbm5lbCBmb3IgdGhlIHBsYXllci4gKi9cblx0cHVibGljIHZvaWNlQ2hhbm5lbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdC8qKiBUaGUgdGV4dCBjaGFubmVsIGZvciB0aGUgcGxheWVyLiAqL1xuXHRwdWJsaWMgdGV4dENoYW5uZWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHQvKipUaGUgbm93IHBsYXlpbmcgbWVzc2FnZS4gKi9cblx0cHVibGljIG5vd1BsYXlpbmdNZXNzYWdlPzogTWVzc2FnZTtcblx0LyoqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwbGF5ZXIuICovXG5cdHB1YmxpYyBzdGF0ZTogU3RhdGUgPSBcIkRJU0NPTk5FQ1RFRFwiO1xuXHQvKiogVGhlIGVxdWFsaXplciBiYW5kcyBhcnJheS4gKi9cblx0cHVibGljIGJhbmRzID0gbmV3IEFycmF5PG51bWJlcj4oMTUpLmZpbGwoMC4wKTtcblx0LyoqIFRoZSB2b2ljZSBzdGF0ZSBvYmplY3QgZnJvbSBEaXNjb3JkLiAqL1xuXHRwdWJsaWMgdm9pY2VTdGF0ZTogVm9pY2VTdGF0ZTtcblx0LyoqIFRoZSBNYW5hZ2VyLiAqL1xuXHRwdWJsaWMgbWFuYWdlcjogTWFuYWdlcjtcblx0LyoqIFRoZSBhdXRvcGxheSBzdGF0ZSBvZiB0aGUgcGxheWVyLiAqL1xuXHRwdWJsaWMgaXNBdXRvcGxheTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdHByaXZhdGUgc3RhdGljIF9tYW5hZ2VyOiBNYW5hZ2VyO1xuXHRwcml2YXRlIHJlYWRvbmx5IGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdHByaXZhdGUgZHluYW1pY0xvb3BJbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQ7XG5cblx0LyoqXG5cdCAqIFNldCBjdXN0b20gZGF0YS5cblx0ICogQHBhcmFtIGtleVxuXHQgKiBAcGFyYW0gdmFsdWVcblx0ICovXG5cdHB1YmxpYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG5cdFx0dGhpcy5kYXRhW2tleV0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgY3VzdG9tIGRhdGEuXG5cdCAqIEBwYXJhbSBrZXlcblx0ICovXG5cdHB1YmxpYyBnZXQ8VD4oa2V5OiBzdHJpbmcpOiBUIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRhW2tleV0gYXMgVDtcblx0fVxuXG5cdC8qKiBAaGlkZGVuICovXG5cdHB1YmxpYyBzdGF0aWMgaW5pdChtYW5hZ2VyOiBNYW5hZ2VyKTogdm9pZCB7XG5cdFx0dGhpcy5fbWFuYWdlciA9IG1hbmFnZXI7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBwbGF5ZXIsIHJldHVybnMgb25lIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocHVibGljIG9wdGlvbnM6IFBsYXllck9wdGlvbnMpIHtcblx0XHRpZiAoIXRoaXMubWFuYWdlcikgdGhpcy5tYW5hZ2VyID0gU3RydWN0dXJlLmdldChcIlBsYXllclwiKS5fbWFuYWdlcjtcblx0XHRpZiAoIXRoaXMubWFuYWdlcikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJNYW5hZ2VyIGhhcyBub3QgYmVlbiBpbml0aWF0ZWQuXCIpO1xuXG5cdFx0aWYgKHRoaXMubWFuYWdlci5wbGF5ZXJzLmhhcyhvcHRpb25zLmd1aWxkKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMubWFuYWdlci5wbGF5ZXJzLmdldChvcHRpb25zLmd1aWxkKTtcblx0XHR9XG5cblx0XHRwbGF5ZXJDaGVjayhvcHRpb25zKTtcblxuXHRcdHRoaXMuZ3VpbGQgPSBvcHRpb25zLmd1aWxkO1xuXHRcdHRoaXMudm9pY2VTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0b3A6IFwidm9pY2VVcGRhdGVcIixcblx0XHRcdGd1aWxkX2lkOiBvcHRpb25zLmd1aWxkLFxuXHRcdH0pO1xuXG5cdFx0aWYgKG9wdGlvbnMudm9pY2VDaGFubmVsKSB0aGlzLnZvaWNlQ2hhbm5lbCA9IG9wdGlvbnMudm9pY2VDaGFubmVsO1xuXHRcdGlmIChvcHRpb25zLnRleHRDaGFubmVsKSB0aGlzLnRleHRDaGFubmVsID0gb3B0aW9ucy50ZXh0Q2hhbm5lbDtcblxuXHRcdGNvbnN0IG5vZGUgPSB0aGlzLm1hbmFnZXIubm9kZXMuZ2V0KG9wdGlvbnMubm9kZSk7XG5cdFx0dGhpcy5ub2RlID0gbm9kZSB8fCB0aGlzLm1hbmFnZXIudXNlYWJsZU5vZGVzO1xuXG5cdFx0aWYgKCF0aGlzLm5vZGUpIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTm8gYXZhaWxhYmxlIG5vZGVzLlwiKTtcblxuXHRcdHRoaXMubWFuYWdlci5wbGF5ZXJzLnNldChvcHRpb25zLmd1aWxkLCB0aGlzKTtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIlBsYXllckNyZWF0ZVwiLCB0aGlzKTtcblx0XHR0aGlzLnNldFZvbHVtZShvcHRpb25zLnZvbHVtZSA/PyAxMDApO1xuXHRcdHRoaXMuZmlsdGVycyA9IG5ldyBGaWx0ZXJzKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhbWUgYXMgTWFuYWdlciNzZWFyY2goKSBidXQgYSBzaG9ydGN1dCBvbiB0aGUgcGxheWVyIGl0c2VsZi5cblx0ICogQHBhcmFtIHF1ZXJ5XG5cdCAqIEBwYXJhbSByZXF1ZXN0ZXJcblx0ICovXG5cdHB1YmxpYyBzZWFyY2gocXVlcnk6IHN0cmluZyB8IFNlYXJjaFF1ZXJ5LCByZXF1ZXN0ZXI/OiBVc2VyIHwgQ2xpZW50VXNlcik6IFByb21pc2U8U2VhcmNoUmVzdWx0PiB7XG5cdFx0cmV0dXJuIHRoaXMubWFuYWdlci5zZWFyY2gocXVlcnksIHJlcXVlc3Rlcik7XG5cdH1cblxuXHQvKiogQ29ubmVjdCB0byB0aGUgdm9pY2UgY2hhbm5lbC4gKi9cblx0cHVibGljIGNvbm5lY3QoKTogdGhpcyB7XG5cdFx0aWYgKCF0aGlzLnZvaWNlQ2hhbm5lbCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJObyB2b2ljZSBjaGFubmVsIGhhcyBiZWVuIHNldC5cIik7XG5cdFx0dGhpcy5zdGF0ZSA9IFwiQ09OTkVDVElOR1wiO1xuXG5cdFx0dGhpcy5tYW5hZ2VyLm9wdGlvbnMuc2VuZCh0aGlzLmd1aWxkLCB7XG5cdFx0XHRvcDogNCxcblx0XHRcdGQ6IHtcblx0XHRcdFx0Z3VpbGRfaWQ6IHRoaXMuZ3VpbGQsXG5cdFx0XHRcdGNoYW5uZWxfaWQ6IHRoaXMudm9pY2VDaGFubmVsLFxuXHRcdFx0XHRzZWxmX211dGU6IHRoaXMub3B0aW9ucy5zZWxmTXV0ZSB8fCBmYWxzZSxcblx0XHRcdFx0c2VsZl9kZWFmOiB0aGlzLm9wdGlvbnMuc2VsZkRlYWZlbiB8fCBmYWxzZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHR0aGlzLnN0YXRlID0gXCJDT05ORUNURURcIjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBNb3ZlcyB0aGUgcGxheWVyIHRvIGEgZGlmZmVyZW50IG5vZGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbbm9kZV0gLSBUaGUgSUQgb2YgdGhlIG5vZGUgdG8gbW92ZSB0by5cblx0ICogQHJldHVybnMge3RoaXN9IC0gVGhlIHBsYXllciBpbnN0YW5jZS5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBtb3ZlTm9kZShub2RlPzogc3RyaW5nKTogUHJvbWlzZTx0aGlzPiB7XG5cdFx0bm9kZSA9IG5vZGUgfHwgdGhpcy5tYW5hZ2VyLmxlYXN0TG9hZE5vZGUuZmlyc3QoKS5vcHRpb25zLmlkZW50aWZpZXIgfHwgdGhpcy5tYW5hZ2VyLm5vZGVzLmZpbHRlcigobikgPT4gbi5jb25uZWN0ZWQpLmZpcnN0KCkub3B0aW9ucy5pZGVudGlmaWVyO1xuXHRcdGlmICghdGhpcy5tYW5hZ2VyLm5vZGVzLmhhcyhub2RlKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJObyBub2RlcyBhdmFpbGFibGUuXCIpO1xuXHRcdGlmICh0aGlzLm5vZGUub3B0aW9ucy5pZGVudGlmaWVyID09PSBub2RlKSByZXR1cm4gdGhpcztcblxuXHRcdGNvbnN0IGRlc3Ryb3lPbGROb2RlID0gYXN5bmMgKG5vZGU6IE5vZGUpID0+IHtcblx0XHRcdHRoaXMuc3RhdGUgPSBcIk1PVklOR1wiO1xuXG5cdFx0XHRpZiAodGhpcy5tYW5hZ2VyLm5vZGVzLmdldChub2RlLm9wdGlvbnMuaWRlbnRpZmllcikgJiYgdGhpcy5tYW5hZ2VyLm5vZGVzLmdldChub2RlLm9wdGlvbnMuaWRlbnRpZmllcikuY29ubmVjdGVkKSBhd2FpdCBub2RlLnJlc3QuZGVzdHJveVBsYXllcih0aGlzLmd1aWxkKTtcblxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiAodGhpcy5zdGF0ZSA9IFwiQ09OTkVDVEVEXCIpLCA1MDAwKTtcblx0XHR9O1xuXG5cdFx0Y29uc3QgY3VycmVudE5vZGUgPSB0aGlzLm5vZGU7XG5cdFx0Y29uc3QgZGVzdGluYXRpb25Ob2RlID0gdGhpcy5tYW5hZ2VyLm5vZGVzLmdldChub2RlKTtcblx0XHRsZXQgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uO1xuXG5cdFx0aWYgKGN1cnJlbnROb2RlLmNvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgZmV0Y2hlZFBsYXllcjogYW55ID0gYXdhaXQgY3VycmVudE5vZGUucmVzdC5nZXQoYC92NC9zZXNzaW9ucy8ke2N1cnJlbnROb2RlLnNlc3Npb25JZH0vcGxheWVycy8ke3RoaXMuZ3VpbGR9YCk7XG5cdFx0XHRwb3NpdGlvbiA9IGZldGNoZWRQbGF5ZXIudHJhY2suaW5mby5wb3NpdGlvbjtcblx0XHR9XG5cblx0XHRhd2FpdCBkZXN0aW5hdGlvbk5vZGUucmVzdC51cGRhdGVQbGF5ZXIoe1xuXHRcdFx0Z3VpbGRJZDogdGhpcy5ndWlsZCxcblx0XHRcdGRhdGE6IHtcblx0XHRcdFx0ZW5jb2RlZFRyYWNrOiB0aGlzLnF1ZXVlLmN1cnJlbnQ/LnRyYWNrLFxuXHRcdFx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0XHRcdHZvbHVtZTogdGhpcy52b2x1bWUsXG5cdFx0XHRcdHBhdXNlZDogdGhpcy5wYXVzZWQsXG5cdFx0XHRcdGZpbHRlcnM6IHtcblx0XHRcdFx0XHRkaXN0b3J0aW9uOiB0aGlzLmZpbHRlcnMuZGlzdG9ydGlvbixcblx0XHRcdFx0XHRlcXVhbGl6ZXI6IHRoaXMuZmlsdGVycy5lcXVhbGl6ZXIsXG5cdFx0XHRcdFx0a2FyYW9rZTogdGhpcy5maWx0ZXJzLmthcmFva2UsXG5cdFx0XHRcdFx0cm90YXRpb246IHRoaXMuZmlsdGVycy5yb3RhdGlvbixcblx0XHRcdFx0XHR0aW1lc2NhbGU6IHRoaXMuZmlsdGVycy50aW1lc2NhbGUsXG5cdFx0XHRcdFx0dmlicmF0bzogdGhpcy5maWx0ZXJzLnZpYnJhdG8sXG5cdFx0XHRcdFx0dm9sdW1lOiB0aGlzLmZpbHRlcnMudm9sdW1lLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdGF3YWl0IGRlc3RpbmF0aW9uTm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRndWlsZElkOiB0aGlzLmd1aWxkLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHR2b2ljZToge1xuXHRcdFx0XHRcdHRva2VuOiB0aGlzLnZvaWNlU3RhdGUuZXZlbnQudG9rZW4sXG5cdFx0XHRcdFx0ZW5kcG9pbnQ6IHRoaXMudm9pY2VTdGF0ZS5ldmVudC5lbmRwb2ludCxcblx0XHRcdFx0XHRzZXNzaW9uSWQ6IHRoaXMhLnZvaWNlU3RhdGU/LnNlc3Npb25JZCEsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5ub2RlID0gZGVzdGluYXRpb25Ob2RlO1xuXHRcdGRlc3Ryb3lPbGROb2RlKGN1cnJlbnROb2RlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBEaXNjb25uZWN0IGZyb20gdGhlIHZvaWNlIGNoYW5uZWwuICovXG5cdHB1YmxpYyBkaXNjb25uZWN0KCk6IHRoaXMge1xuXHRcdGlmICh0aGlzLnZvaWNlQ2hhbm5lbCA9PT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5zdGF0ZSA9IFwiRElTQ09OTkVDVElOR1wiO1xuXG5cdFx0dGhpcy5wYXVzZSh0cnVlKTtcblx0XHR0aGlzLm1hbmFnZXIub3B0aW9ucy5zZW5kKHRoaXMuZ3VpbGQsIHtcblx0XHRcdG9wOiA0LFxuXHRcdFx0ZDoge1xuXHRcdFx0XHRndWlsZF9pZDogdGhpcy5ndWlsZCxcblx0XHRcdFx0Y2hhbm5lbF9pZDogbnVsbCxcblx0XHRcdFx0c2VsZl9tdXRlOiBmYWxzZSxcblx0XHRcdFx0c2VsZl9kZWFmOiBmYWxzZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHR0aGlzLnZvaWNlQ2hhbm5lbCA9IG51bGw7XG5cdFx0dGhpcy5zdGF0ZSA9IFwiRElTQ09OTkVDVEVEXCI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKiogRGVzdHJveXMgdGhlIHBsYXllci4gKi9cblx0cHVibGljIGRlc3Ryb3koZGlzY29ubmVjdCA9IHRydWUpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlID0gXCJERVNUUk9ZSU5HXCI7XG5cblx0XHRpZiAoZGlzY29ubmVjdCkge1xuXHRcdFx0dGhpcy5kaXNjb25uZWN0KCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5ub2RlLnJlc3QuZGVzdHJveVBsYXllcih0aGlzLmd1aWxkKTtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIlBsYXllckRlc3Ryb3lcIiwgdGhpcyk7XG5cdFx0dGhpcy5tYW5hZ2VyLnBsYXllcnMuZGVsZXRlKHRoaXMuZ3VpbGQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHBsYXllciB2b2ljZSBjaGFubmVsLlxuXHQgKiBAcGFyYW0gY2hhbm5lbFxuXHQgKi9cblx0cHVibGljIHNldFZvaWNlQ2hhbm5lbChjaGFubmVsOiBzdHJpbmcpOiB0aGlzIHtcblx0XHRpZiAodHlwZW9mIGNoYW5uZWwgIT09IFwic3RyaW5nXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDaGFubmVsIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLlwiKTtcblxuXHRcdHRoaXMudm9pY2VDaGFubmVsID0gY2hhbm5lbDtcblx0XHR0aGlzLmNvbm5lY3QoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBwbGF5ZXIgdGV4dCBjaGFubmVsLlxuXHQgKiBAcGFyYW0gY2hhbm5lbFxuXHQgKi9cblx0cHVibGljIHNldFRleHRDaGFubmVsKGNoYW5uZWw6IHN0cmluZyk6IHRoaXMge1xuXHRcdGlmICh0eXBlb2YgY2hhbm5lbCAhPT0gXCJzdHJpbmdcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNoYW5uZWwgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuXCIpO1xuXG5cdFx0dGhpcy50ZXh0Q2hhbm5lbCA9IGNoYW5uZWw7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgbm93IHBsYXlpbmcgbWVzc2FnZS4gKi9cblx0cHVibGljIHNldE5vd1BsYXlpbmdNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2UpOiBNZXNzYWdlIHtcblx0XHRpZiAoIW1lc3NhZ2UpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBwcm92aWRlIHRoZSBtZXNzYWdlIG9mIHRoZSBub3cgcGxheWluZyBtZXNzYWdlLlwiKTtcblx0XHR9XG5cdFx0cmV0dXJuICh0aGlzLm5vd1BsYXlpbmdNZXNzYWdlID0gbWVzc2FnZSk7XG5cdH1cblxuXHQvKiogUGxheXMgdGhlIG5leHQgdHJhY2suICovXG5cdHB1YmxpYyBhc3luYyBwbGF5KCk6IFByb21pc2U8dm9pZD47XG5cblx0LyoqXG5cdCAqIFBsYXlzIHRoZSBzcGVjaWZpZWQgdHJhY2suXG5cdCAqIEBwYXJhbSB0cmFja1xuXHQgKi9cblx0cHVibGljIGFzeW5jIHBsYXkodHJhY2s6IFRyYWNrIHwgVW5yZXNvbHZlZFRyYWNrKTogUHJvbWlzZTx2b2lkPjtcblxuXHQvKipcblx0ICogUGxheXMgdGhlIG5leHQgdHJhY2sgd2l0aCBzb21lIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgcGxheShvcHRpb25zOiBQbGF5T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5cblx0LyoqXG5cdCAqIFBsYXlzIHRoZSBzcGVjaWZpZWQgdHJhY2sgd2l0aCBzb21lIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB0cmFja1xuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKi9cblx0cHVibGljIGFzeW5jIHBsYXkodHJhY2s6IFRyYWNrIHwgVW5yZXNvbHZlZFRyYWNrLCBvcHRpb25zOiBQbGF5T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5cdHB1YmxpYyBhc3luYyBwbGF5KG9wdGlvbnNPclRyYWNrPzogUGxheU9wdGlvbnMgfCBUcmFjayB8IFVucmVzb2x2ZWRUcmFjaywgcGxheU9wdGlvbnM/OiBQbGF5T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0eXBlb2Ygb3B0aW9uc09yVHJhY2sgIT09IFwidW5kZWZpbmVkXCIgJiYgVHJhY2tVdGlscy52YWxpZGF0ZShvcHRpb25zT3JUcmFjaykpIHtcblx0XHRcdGlmICh0aGlzLnF1ZXVlLmN1cnJlbnQpIHRoaXMucXVldWUucHJldmlvdXMgPSB0aGlzLnF1ZXVlLmN1cnJlbnQ7XG5cdFx0XHR0aGlzLnF1ZXVlLmN1cnJlbnQgPSBvcHRpb25zT3JUcmFjayBhcyBUcmFjaztcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMucXVldWUuY3VycmVudCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJObyBjdXJyZW50IHRyYWNrLlwiKTtcblxuXHRcdGNvbnN0IGZpbmFsT3B0aW9ucyA9IHBsYXlPcHRpb25zXG5cdFx0XHQ/IHBsYXlPcHRpb25zXG5cdFx0XHQ6IFtcInN0YXJ0VGltZVwiLCBcImVuZFRpbWVcIiwgXCJub1JlcGxhY2VcIl0uZXZlcnkoKHYpID0+IE9iamVjdC5rZXlzKG9wdGlvbnNPclRyYWNrIHx8IHt9KS5pbmNsdWRlcyh2KSlcblx0XHRcdD8gKG9wdGlvbnNPclRyYWNrIGFzIFBsYXlPcHRpb25zKVxuXHRcdFx0OiB7fTtcblxuXHRcdGlmIChUcmFja1V0aWxzLmlzVW5yZXNvbHZlZFRyYWNrKHRoaXMucXVldWUuY3VycmVudCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMucXVldWUuY3VycmVudCA9IGF3YWl0IFRyYWNrVXRpbHMuZ2V0Q2xvc2VzdFRyYWNrKHRoaXMucXVldWUuY3VycmVudCBhcyBVbnJlc29sdmVkVHJhY2spO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJUcmFja0Vycm9yXCIsIHRoaXMsIHRoaXMucXVldWUuY3VycmVudCwgZXJyb3IpO1xuXHRcdFx0XHRpZiAodGhpcy5xdWV1ZVswXSkgcmV0dXJuIHRoaXMucGxheSh0aGlzLnF1ZXVlWzBdKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGF3YWl0IHRoaXMubm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRndWlsZElkOiB0aGlzLmd1aWxkLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRlbmNvZGVkVHJhY2s6IHRoaXMucXVldWUuY3VycmVudD8udHJhY2ssXG5cdFx0XHRcdC4uLmZpbmFsT3B0aW9ucyxcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHRPYmplY3QuYXNzaWduKHRoaXMsIHsgcG9zaXRpb246IDAsIHBsYXlpbmc6IHRydWUgfSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgYXV0b3BsYXktc3RhdGUgb2YgdGhlIHBsYXllci5cblx0ICogQHBhcmFtIGF1dG9wbGF5U3RhdGVcblx0ICogQHBhcmFtIGJvdFVzZXJcblx0ICovXG5cdHB1YmxpYyBzZXRBdXRvcGxheShhdXRvcGxheVN0YXRlOiBib29sZWFuLCBib3RVc2VyOiBvYmplY3QpIHtcblx0XHRpZiAodHlwZW9mIGF1dG9wbGF5U3RhdGUgIT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXV0b3BsYXlTdGF0ZSBtdXN0IGJlIGEgYm9vbGVhbi5cIik7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBib3RVc2VyICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiYm90VXNlciBtdXN0IGJlIGEgdXNlci1vYmplY3QuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuaXNBdXRvcGxheSA9IGF1dG9wbGF5U3RhdGU7XG5cdFx0dGhpcy5zZXQoXCJJbnRlcm5hbF9Cb3RVc2VyXCIsIGJvdFVzZXIpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyByZWNvbW1lbmRlZCB0cmFja3MgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdHJhY2tzLlxuXHQgKiBAcGFyYW0gdHJhY2tcblx0ICogQHBhcmFtIHJlcXVlc3RlclxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldFJlY29tbWVuZGVkKHRyYWNrOiBUcmFjaywgcmVxdWVzdGVyPzogVXNlciB8IENsaWVudFVzZXIpIHtcblx0XHRjb25zdCBub2RlID0gdGhpcy5tYW5hZ2VyLnVzZWFibGVOb2RlcztcblxuXHRcdGlmICghbm9kZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIG5vZGVzLlwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBoYXNTcG90aWZ5VVJMID0gW1wic3BvdGlmeS5jb21cIiwgXCJvcGVuLnNwb3RpZnkuY29tXCJdLnNvbWUoKHVybCkgPT4gdHJhY2sudXJpLmluY2x1ZGVzKHVybCkpO1xuXHRcdGNvbnN0IGhhc1lvdVR1YmVVUkwgPSBbXCJ5b3V0dWJlLmNvbVwiLCBcInlvdXR1LmJlXCJdLnNvbWUoKHVybCkgPT4gdHJhY2sudXJpLmluY2x1ZGVzKHVybCkpO1xuXG5cdFx0aWYgKGhhc1Nwb3RpZnlVUkwpIHtcblx0XHRcdGNvbnN0IHJlcyA9IGF3YWl0IG5vZGUucmVzdC5nZXQoYC92NC9pbmZvYCk7XG5cdFx0XHRjb25zdCBpbmZvID0gcmVzIGFzIExhdmFsaW5rSW5mbztcblxuXHRcdFx0Y29uc3QgaXNTcG90aWZ5UGx1Z2luRW5hYmxlZCA9IGluZm8ucGx1Z2lucy5zb21lKChwbHVnaW46IHsgbmFtZTogc3RyaW5nIH0pID0+IHBsdWdpbi5uYW1lID09PSBcImxhdmFzcmMtcGx1Z2luXCIpO1xuXHRcdFx0Y29uc3QgaXNTcG90aWZ5U291cmNlTWFuYWdlckVuYWJsZWQgPSBpbmZvLnNvdXJjZU1hbmFnZXJzLmluY2x1ZGVzKFwic3BvdGlmeVwiKTtcblxuXHRcdFx0aWYgKGlzU3BvdGlmeVBsdWdpbkVuYWJsZWQgJiYgaXNTcG90aWZ5U291cmNlTWFuYWdlckVuYWJsZWQpIHtcblx0XHRcdFx0Y29uc3QgdHJhY2tJRCA9IG5vZGUuZXh0cmFjdFNwb3RpZnlUcmFja0lEKHRyYWNrLnVyaSk7XG5cdFx0XHRcdGNvbnN0IGFydGlzdElEID0gbm9kZS5leHRyYWN0U3BvdGlmeUFydGlzdElEKHRyYWNrLnBsdWdpbkluZm8uYXJ0aXN0VXJsKTtcblxuXHRcdFx0XHRsZXQgaWRlbnRpZmllciA9IFwiXCI7XG5cdFx0XHRcdGlmICh0cmFja0lEICYmIGFydGlzdElEKSB7XG5cdFx0XHRcdFx0aWRlbnRpZmllciA9IGBzcHJlYzpzZWVkX2FydGlzdHM9JHthcnRpc3RJRH0mc2VlZF90cmFja3M9JHt0cmFja0lEfWA7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHJhY2tJRCkge1xuXHRcdFx0XHRcdGlkZW50aWZpZXIgPSBgc3ByZWM6c2VlZF90cmFja3M9JHt0cmFja0lEfWA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYXJ0aXN0SUQpIHtcblx0XHRcdFx0XHRpZGVudGlmaWVyID0gYHNwcmVjOnNlZWRfYXJ0aXN0cz0ke2FydGlzdElEfWA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaWRlbnRpZmllcikge1xuXHRcdFx0XHRcdGNvbnN0IHJlY29tbWVuZGVkUmVzdWx0ID0gKGF3YWl0IG5vZGUucmVzdC5nZXQoYC92NC9sb2FkdHJhY2tzP2lkZW50aWZpZXI9JHtlbmNvZGVVUklDb21wb25lbnQoaWRlbnRpZmllcil9YCkpIGFzIExhdmFsaW5rUmVzcG9uc2U7XG5cblx0XHRcdFx0XHRpZiAocmVjb21tZW5kZWRSZXN1bHQubG9hZFR5cGUgPT09IFwicGxheWxpc3RcIikge1xuXHRcdFx0XHRcdFx0Y29uc3QgcGxheWxpc3REYXRhID0gcmVjb21tZW5kZWRSZXN1bHQuZGF0YSBhcyBQbGF5bGlzdFJhd0RhdGE7XG5cdFx0XHRcdFx0XHRjb25zdCByZWNvbW1lbmRlZFRyYWNrcyA9IHBsYXlsaXN0RGF0YS50cmFja3M7XG5cblx0XHRcdFx0XHRcdGlmIChyZWNvbW1lbmRlZFRyYWNrcykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0cmFja3MgPSByZWNvbW1lbmRlZFRyYWNrcy5tYXAoKHRyYWNrKSA9PiBUcmFja1V0aWxzLmJ1aWxkKHRyYWNrLCByZXF1ZXN0ZXIpKTtcblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJhY2tzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCB2aWRlb0lEID0gdHJhY2sudXJpLnN1YnN0cmluZyh0cmFjay51cmkuaW5kZXhPZihcIj1cIikgKyAxKTtcblxuXHRcdGlmICghaGFzWW91VHViZVVSTCkge1xuXHRcdFx0Y29uc3QgcmVzID0gYXdhaXQgdGhpcy5tYW5hZ2VyLnNlYXJjaChgJHt0cmFjay5hdXRob3J9IC0gJHt0cmFjay50aXRsZX1gKTtcblxuXHRcdFx0dmlkZW9JRCA9IHJlcy50cmFja3NbMF0udXJpLnN1YnN0cmluZyhyZXMudHJhY2tzWzBdLnVyaS5pbmRleE9mKFwiPVwiKSArIDEpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNlYXJjaFVSSSA9IGBodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PSR7dmlkZW9JRH0mbGlzdD1SRCR7dmlkZW9JRH1gO1xuXG5cdFx0Y29uc3QgcmVzID0gYXdhaXQgdGhpcy5tYW5hZ2VyLnNlYXJjaChzZWFyY2hVUkkpO1xuXG5cdFx0aWYgKHJlcy5sb2FkVHlwZSA9PT0gXCJlbXB0eVwiIHx8IHJlcy5sb2FkVHlwZSA9PT0gXCJlcnJvclwiKSByZXR1cm47XG5cblx0XHRsZXQgdHJhY2tzID0gcmVzLnRyYWNrcztcblxuXHRcdGlmIChyZXMubG9hZFR5cGUgPT09IFwicGxheWxpc3RcIikge1xuXHRcdFx0dHJhY2tzID0gcmVzLnBsYXlsaXN0LnRyYWNrcztcblx0XHR9XG5cblx0XHRjb25zdCBmaWx0ZXJlZFRyYWNrcyA9IHRyYWNrcy5maWx0ZXIoKHRyYWNrKSA9PiB0cmFjay51cmkgIT09IGBodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PSR7dmlkZW9JRH1gKTtcblxuXHRcdGlmICh0aGlzLm1hbmFnZXIub3B0aW9ucy5yZXBsYWNlWW91VHViZUNyZWRlbnRpYWxzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRyYWNrIG9mIGZpbHRlcmVkVHJhY2tzKSB7XG5cdFx0XHRcdHRyYWNrLmF1dGhvciA9IHRyYWNrLmF1dGhvci5yZXBsYWNlKFwiLSBUb3BpY1wiLCBcIlwiKTtcblx0XHRcdFx0dHJhY2sudGl0bGUgPSB0cmFjay50aXRsZS5yZXBsYWNlKFwiVG9waWMgLVwiLCBcIlwiKTtcblxuXHRcdFx0XHRpZiAodHJhY2sudGl0bGUuaW5jbHVkZXMoXCItXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgW2F1dGhvciwgdGl0bGVdID0gdHJhY2sudGl0bGUuc3BsaXQoXCItXCIpLm1hcCgoc3RyOiBzdHJpbmcpID0+IHN0ci50cmltKCkpO1xuXHRcdFx0XHRcdHRyYWNrLmF1dGhvciA9IGF1dGhvcjtcblx0XHRcdFx0XHR0cmFjay50aXRsZSA9IHRpdGxlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZpbHRlcmVkVHJhY2tzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHBsYXllciB2b2x1bWUuXG5cdCAqIEBwYXJhbSB2b2x1bWVcblx0ICovXG5cdHB1YmxpYyBzZXRWb2x1bWUodm9sdW1lOiBudW1iZXIpOiB0aGlzIHtcblx0XHRpZiAoaXNOYU4odm9sdW1lKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlZvbHVtZSBtdXN0IGJlIGEgbnVtYmVyLlwiKTtcblxuXHRcdHRoaXMubm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRndWlsZElkOiB0aGlzLm9wdGlvbnMuZ3VpbGQsXG5cdFx0XHRkYXRhOiB7XG5cdFx0XHRcdHZvbHVtZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHR0aGlzLnZvbHVtZSA9IHZvbHVtZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHRyYWNrIHJlcGVhdC5cblx0ICogQHBhcmFtIHJlcGVhdFxuXHQgKi9cblx0cHVibGljIHNldFRyYWNrUmVwZWF0KHJlcGVhdDogYm9vbGVhbik6IHRoaXMge1xuXHRcdGlmICh0eXBlb2YgcmVwZWF0ICE9PSBcImJvb2xlYW5cIikgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVwZWF0IGNhbiBvbmx5IGJlIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIi4nKTtcblxuXHRcdGNvbnN0IG9sZFBsYXllciA9IHsgLi4udGhpcyB9O1xuXG5cdFx0aWYgKHJlcGVhdCkge1xuXHRcdFx0dGhpcy50cmFja1JlcGVhdCA9IHRydWU7XG5cdFx0XHR0aGlzLnF1ZXVlUmVwZWF0ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmR5bmFtaWNSZXBlYXQgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50cmFja1JlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5xdWV1ZVJlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5keW5hbWljUmVwZWF0ID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJQbGF5ZXJTdGF0ZVVwZGF0ZVwiLCBvbGRQbGF5ZXIsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHF1ZXVlIHJlcGVhdC5cblx0ICogQHBhcmFtIHJlcGVhdFxuXHQgKi9cblx0cHVibGljIHNldFF1ZXVlUmVwZWF0KHJlcGVhdDogYm9vbGVhbik6IHRoaXMge1xuXHRcdGlmICh0eXBlb2YgcmVwZWF0ICE9PSBcImJvb2xlYW5cIikgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVwZWF0IGNhbiBvbmx5IGJlIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIi4nKTtcblxuXHRcdGNvbnN0IG9sZFBsYXllciA9IHsgLi4udGhpcyB9O1xuXG5cdFx0aWYgKHJlcGVhdCkge1xuXHRcdFx0dGhpcy50cmFja1JlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5xdWV1ZVJlcGVhdCA9IHRydWU7XG5cdFx0XHR0aGlzLmR5bmFtaWNSZXBlYXQgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50cmFja1JlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5xdWV1ZVJlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5keW5hbWljUmVwZWF0ID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJQbGF5ZXJTdGF0ZVVwZGF0ZVwiLCBvbGRQbGF5ZXIsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHF1ZXVlIHRvIHJlcGVhdCBhbmQgc2h1ZmZsZXMgdGhlIHF1ZXVlIGFmdGVyIGVhY2ggc29uZy5cblx0ICogQHBhcmFtIHJlcGVhdCBcInRydWVcIiBvciBcImZhbHNlXCIuXG5cdCAqIEBwYXJhbSBtcyBBZnRlciBob3cgbWFueSBtaWxsaXNlY29uZHMgdG8gdHJpZ2dlciBkeW5hbWljIHJlcGVhdC5cblx0ICovXG5cdHB1YmxpYyBzZXREeW5hbWljUmVwZWF0KHJlcGVhdDogYm9vbGVhbiwgbXM6IG51bWJlcik6IHRoaXMge1xuXHRcdGlmICh0eXBlb2YgcmVwZWF0ICE9PSBcImJvb2xlYW5cIikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUmVwZWF0IGNhbiBvbmx5IGJlIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIi4nKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5xdWV1ZS5zaXplIDw9IDEpIHtcblx0XHRcdHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIHF1ZXVlIHNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMS5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb2xkUGxheWVyID0geyAuLi50aGlzIH07XG5cblx0XHRpZiAocmVwZWF0KSB7XG5cdFx0XHR0aGlzLnRyYWNrUmVwZWF0ID0gZmFsc2U7XG5cdFx0XHR0aGlzLnF1ZXVlUmVwZWF0ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmR5bmFtaWNSZXBlYXQgPSB0cnVlO1xuXG5cdFx0XHR0aGlzLmR5bmFtaWNMb29wSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5keW5hbWljUmVwZWF0KSByZXR1cm47XG5cdFx0XHRcdGNvbnN0IHNodWZmbGVkID0gXy5zaHVmZmxlKHRoaXMucXVldWUpO1xuXHRcdFx0XHR0aGlzLnF1ZXVlLmNsZWFyKCk7XG5cdFx0XHRcdHNodWZmbGVkLmZvckVhY2goKHRyYWNrKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5xdWV1ZS5hZGQodHJhY2spO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sIG1zKSBhcyBOb2RlSlMuVGltZW91dDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmR5bmFtaWNMb29wSW50ZXJ2YWwpO1xuXHRcdFx0dGhpcy50cmFja1JlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5xdWV1ZVJlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5keW5hbWljUmVwZWF0ID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJQbGF5ZXJTdGF0ZVVwZGF0ZVwiLCBvbGRQbGF5ZXIsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIFJlc3RhcnRzIHRoZSBjdXJyZW50IHRyYWNrIHRvIHRoZSBzdGFydC4gKi9cblx0cHVibGljIHJlc3RhcnQoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLnF1ZXVlLmN1cnJlbnQ/LnRyYWNrKSB7XG5cdFx0XHRpZiAodGhpcy5xdWV1ZS5sZW5ndGgpIHRoaXMucGxheSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMubm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRndWlsZElkOiB0aGlzLmd1aWxkLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRwb3NpdGlvbjogMCxcblx0XHRcdFx0ZW5jb2RlZFRyYWNrOiB0aGlzLnF1ZXVlLmN1cnJlbnQ/LnRyYWNrLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKiBTdG9wcyB0aGUgY3VycmVudCB0cmFjaywgb3B0aW9uYWxseSBnaXZlIGFuIGFtb3VudCB0byBza2lwIHRvLCBlLmcgNSB3b3VsZCBwbGF5IHRoZSA1dGggc29uZy4gKi9cblx0cHVibGljIHN0b3AoYW1vdW50PzogbnVtYmVyKTogdGhpcyB7XG5cdFx0aWYgKHR5cGVvZiBhbW91bnQgPT09IFwibnVtYmVyXCIgJiYgYW1vdW50ID4gMSkge1xuXHRcdFx0aWYgKGFtb3VudCA+IHRoaXMucXVldWUubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbm5vdCBza2lwIG1vcmUgdGhhbiB0aGUgcXVldWUgbGVuZ3RoLlwiKTtcblx0XHRcdHRoaXMucXVldWUuc3BsaWNlKDAsIGFtb3VudCAtIDEpO1xuXHRcdH1cblxuXHRcdHRoaXMubm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRndWlsZElkOiB0aGlzLmd1aWxkLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRlbmNvZGVkVHJhY2s6IG51bGwsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUGF1c2VzIHRoZSBjdXJyZW50IHRyYWNrLlxuXHQgKiBAcGFyYW0gcGF1c2Vcblx0ICovXG5cdHB1YmxpYyBwYXVzZShwYXVzZTogYm9vbGVhbik6IHRoaXMge1xuXHRcdGlmICh0eXBlb2YgcGF1c2UgIT09IFwiYm9vbGVhblwiKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignUGF1c2UgY2FuIG9ubHkgYmUgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiLicpO1xuXG5cdFx0aWYgKHRoaXMucGF1c2VkID09PSBwYXVzZSB8fCAhdGhpcy5xdWV1ZS50b3RhbFNpemUpIHJldHVybiB0aGlzO1xuXG5cdFx0Y29uc3Qgb2xkUGxheWVyID0geyAuLi50aGlzIH07XG5cblx0XHR0aGlzLnBsYXlpbmcgPSAhcGF1c2U7XG5cdFx0dGhpcy5wYXVzZWQgPSBwYXVzZTtcblxuXHRcdHRoaXMubm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRndWlsZElkOiB0aGlzLmd1aWxkLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRwYXVzZWQ6IHBhdXNlLFxuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdHRoaXMubWFuYWdlci5lbWl0KFwiUGxheWVyU3RhdGVVcGRhdGVcIiwgb2xkUGxheWVyLCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBHbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBzb25nLiAqL1xuXHRwdWJsaWMgcHJldmlvdXMoKTogdGhpcyB7XG5cdFx0dGhpcy5xdWV1ZS51bnNoaWZ0KHRoaXMucXVldWUucHJldmlvdXMpO1xuXHRcdHRoaXMuc3RvcCgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2Vla3MgdG8gdGhlIHBvc2l0aW9uIGluIHRoZSBjdXJyZW50IHRyYWNrLlxuXHQgKiBAcGFyYW0gcG9zaXRpb25cblx0ICovXG5cdHB1YmxpYyBzZWVrKHBvc2l0aW9uOiBudW1iZXIpOiB0aGlzIHtcblx0XHRpZiAoIXRoaXMucXVldWUuY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRwb3NpdGlvbiA9IE51bWJlcihwb3NpdGlvbik7XG5cblx0XHRpZiAoaXNOYU4ocG9zaXRpb24pKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlBvc2l0aW9uIG11c3QgYmUgYSBudW1iZXIuXCIpO1xuXHRcdGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPiB0aGlzLnF1ZXVlLmN1cnJlbnQuZHVyYXRpb24pIHBvc2l0aW9uID0gTWF0aC5tYXgoTWF0aC5taW4ocG9zaXRpb24sIHRoaXMucXVldWUuY3VycmVudC5kdXJhdGlvbiksIDApO1xuXG5cdFx0dGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuXG5cdFx0dGhpcy5ub2RlLnJlc3QudXBkYXRlUGxheWVyKHtcblx0XHRcdGd1aWxkSWQ6IHRoaXMuZ3VpbGQsXG5cdFx0XHRkYXRhOiB7XG5cdFx0XHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYXllck9wdGlvbnMge1xuXHQvKiogVGhlIGd1aWxkIHRoZSBQbGF5ZXIgYmVsb25ncyB0by4gKi9cblx0Z3VpbGQ6IHN0cmluZztcblx0LyoqIFRoZSB0ZXh0IGNoYW5uZWwgdGhlIFBsYXllciBiZWxvbmdzIHRvLiAqL1xuXHR0ZXh0Q2hhbm5lbDogc3RyaW5nO1xuXHQvKiogVGhlIHZvaWNlIGNoYW5uZWwgdGhlIFBsYXllciBiZWxvbmdzIHRvLiAqL1xuXHR2b2ljZUNoYW5uZWw/OiBzdHJpbmc7XG5cdC8qKiBUaGUgbm9kZSB0aGUgUGxheWVyIHVzZXMuICovXG5cdG5vZGU/OiBzdHJpbmc7XG5cdC8qKiBUaGUgaW5pdGlhbCB2b2x1bWUgdGhlIFBsYXllciB3aWxsIHVzZS4gKi9cblx0dm9sdW1lPzogbnVtYmVyO1xuXHQvKiogSWYgdGhlIHBsYXllciBzaG91bGQgbXV0ZSBpdHNlbGYuICovXG5cdHNlbGZNdXRlPzogYm9vbGVhbjtcblx0LyoqIElmIHRoZSBwbGF5ZXIgc2hvdWxkIGRlYWYgaXRzZWxmLiAqL1xuXHRzZWxmRGVhZmVuPzogYm9vbGVhbjtcbn1cblxuLyoqIElmIHRyYWNrIHBhcnRpYWxzIGFyZSBzZXQgc29tZSBvZiB0aGVzZSB3aWxsIGJlIGB1bmRlZmluZWRgIGFzIHRoZXkgd2VyZSByZW1vdmVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFjayB7XG5cdC8qKiBUaGUgYmFzZTY0IGVuY29kZWQgdHJhY2suICovXG5cdHJlYWRvbmx5IHRyYWNrOiBzdHJpbmc7XG5cdC8qKiBUaGUgYXJ0d29yayB1cmwgb2YgdGhlIHRyYWNrLiAqL1xuXHRyZWFkb25seSBhcnR3b3JrVXJsOiBzdHJpbmc7XG5cdC8qKiBUaGUgdHJhY2sgc291cmNlIG5hbWUuICovXG5cdHJlYWRvbmx5IHNvdXJjZU5hbWU6IFRyYWNrU291cmNlTmFtZTtcblx0LyoqIFRoZSB0aXRsZSBvZiB0aGUgdHJhY2suICovXG5cdHRpdGxlOiBzdHJpbmc7XG5cdC8qKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgdHJhY2suICovXG5cdHJlYWRvbmx5IGlkZW50aWZpZXI6IHN0cmluZztcblx0LyoqIFRoZSBhdXRob3Igb2YgdGhlIHRyYWNrLiAqL1xuXHRhdXRob3I6IHN0cmluZztcblx0LyoqIFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhY2suICovXG5cdHJlYWRvbmx5IGR1cmF0aW9uOiBudW1iZXI7XG5cdC8qKiBUaGUgSVNSQyBvZiB0aGUgdHJhY2suICovXG5cdHJlYWRvbmx5IGlzcmM6IHN0cmluZztcblx0LyoqIElmIHRoZSB0cmFjayBpcyBzZWVrYWJsZS4gKi9cblx0cmVhZG9ubHkgaXNTZWVrYWJsZTogYm9vbGVhbjtcblx0LyoqIElmIHRoZSB0cmFjayBpcyBhIHN0cmVhbS4uICovXG5cdHJlYWRvbmx5IGlzU3RyZWFtOiBib29sZWFuO1xuXHQvKiogVGhlIHVyaSBvZiB0aGUgdHJhY2suICovXG5cdHJlYWRvbmx5IHVyaTogc3RyaW5nO1xuXHQvKiogVGhlIHRodW1ibmFpbCBvZiB0aGUgdHJhY2sgb3IgbnVsbCBpZiBpdCdzIGEgdW5zdXBwb3J0ZWQgc291cmNlLiAqL1xuXHRyZWFkb25seSB0aHVtYm5haWw6IHN0cmluZyB8IG51bGw7XG5cdC8qKiBUaGUgdXNlciB0aGF0IHJlcXVlc3RlZCB0aGUgdHJhY2suICovXG5cdHJlYWRvbmx5IHJlcXVlc3RlcjogVXNlciB8IENsaWVudFVzZXIgfCBudWxsO1xuXHQvKiogRGlzcGxheXMgdGhlIHRyYWNrIHRodW1ibmFpbCB3aXRoIG9wdGlvbmFsIHNpemUgb3IgbnVsbCBpZiBpdCdzIGEgdW5zdXBwb3J0ZWQgc291cmNlLiAqL1xuXHRkaXNwbGF5VGh1bWJuYWlsKHNpemU/OiBTaXplcyk6IHN0cmluZztcblx0LyoqIEFkZGl0aW9uYWwgdHJhY2sgaW5mbyBwcm92aWRlZCBieSBwbHVnaW5zLiAqL1xuXHRwbHVnaW5JbmZvOiBUcmFja1BsdWdpbkluZm87XG5cdC8qKiBBZGQgeW91ciBvd24gZGF0YSB0byB0aGUgdHJhY2suICovXG5cdGN1c3RvbURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrUGx1Z2luSW5mbyB7XG5cdGFsYnVtTmFtZT86IHN0cmluZztcblx0YWxidW1Vcmw/OiBzdHJpbmc7XG5cdGFydGlzdEFydHdvcmtVcmw/OiBzdHJpbmc7XG5cdGFydGlzdFVybD86IHN0cmluZztcblx0aXNQcmV2aWV3Pzogc3RyaW5nO1xuXHRwcmV2aWV3VXJsPzogc3RyaW5nO1xufVxuXG4vKiogVW5yZXNvbHZlZCB0cmFja3MgY2FuJ3QgYmUgcGxheWVkIG5vcm1hbGx5LCB0aGV5IHdpbGwgcmVzb2x2ZSBiZWZvcmUgcGxheWluZyBpbnRvIGEgVHJhY2suICovXG5leHBvcnQgaW50ZXJmYWNlIFVucmVzb2x2ZWRUcmFjayBleHRlbmRzIFBhcnRpYWw8VHJhY2s+IHtcblx0LyoqIFRoZSB0aXRsZSB0byBzZWFyY2ggYWdhaW5zdC4gKi9cblx0dGl0bGU6IHN0cmluZztcblx0LyoqIFRoZSBhdXRob3IgdG8gc2VhcmNoIGFnYWluc3QuICovXG5cdGF1dGhvcj86IHN0cmluZztcblx0LyoqIFRoZSBkdXJhdGlvbiB0byBzZWFyY2ggd2l0aGluIDE1MDAgbWlsbGlzZWNvbmRzIG9mIHRoZSByZXN1bHRzIGZyb20gWW91VHViZS4gKi9cblx0ZHVyYXRpb24/OiBudW1iZXI7XG5cdC8qKiBSZXNvbHZlcyBpbnRvIGEgVHJhY2suICovXG5cdHJlc29sdmUoKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGF5T3B0aW9ucyB7XG5cdC8qKiBUaGUgcG9zaXRpb24gdG8gc3RhcnQgdGhlIHRyYWNrLiAqL1xuXHRyZWFkb25seSBzdGFydFRpbWU/OiBudW1iZXI7XG5cdC8qKiBUaGUgcG9zaXRpb24gdG8gZW5kIHRoZSB0cmFjay4gKi9cblx0cmVhZG9ubHkgZW5kVGltZT86IG51bWJlcjtcblx0LyoqIFdoZXRoZXIgdG8gbm90IHJlcGxhY2UgdGhlIHRyYWNrIGlmIGEgcGxheSBwYXlsb2FkIGlzIHNlbnQuICovXG5cdHJlYWRvbmx5IG5vUmVwbGFjZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXF1YWxpemVyQmFuZCB7XG5cdC8qKiBUaGUgYmFuZCBudW1iZXIgYmVpbmcgMCB0byAxNC4gKi9cblx0YmFuZDogbnVtYmVyO1xuXHQvKiogVGhlIGdhaW4gYW1vdW50IGJlaW5nIC0wLjI1IHRvIDEuMDAsIDAuMjUgYmVpbmcgZG91YmxlLiAqL1xuXHRnYWluOiBudW1iZXI7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztB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