kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
185 lines (152 loc) • 27.6 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.calculateLayerData = calculateLayerData;
exports.calculateLayerDataAfterAPICall = calculateLayerDataAfterAPICall;
exports.findDefaultLayer = findDefaultLayer;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
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" == (0, _typeof2["default"])(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 new 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((0, _typeof2["default"])(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 new 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 new 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; }
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; }
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) { (0, _defineProperty2["default"])(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; }
// Copyright (c) 2023 Uber Technologies, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
/**
* Find default layers from fields
*
* @param {Object} dataset
* @param {Object} layerClasses
* @returns {Array} found layers
*/
function findDefaultLayer(dataset) {
var layerClasses = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (!dataset || dataset.isLargeCategory) {
return [];
}
var layerProps = Object.keys(layerClasses).reduce(function (previous, lc) {
var result = typeof layerClasses[lc].findDefaultLayerProps === 'function' ? layerClasses[lc].findDefaultLayerProps(dataset, previous) : {
props: []
};
var props = Array.isArray(result) ? result : result.props || [];
var foundLayers = result.foundLayers || previous;
return foundLayers.concat(props.map(function (p) {
return _objectSpread(_objectSpread({}, p), {}, {
type: lc,
dataId: dataset.id
});
}));
}, []); // go through all layerProps to create layer
return layerProps.map(function (props) {
var layer = new layerClasses[props.type](props);
return typeof layer.setInitialLayerConfig === 'function' ? layer.setInitialLayerConfig(dataset.allData) : layer;
});
}
/**
* calculate layer data based on layer type, col Config,
* return updated layer if colorDomain, dataMap has changed
* @param {object} layer
* @param {object} state
* @param {object} oldLayerData
* @param {object} opt
* @returns {object} {layerData: {}, layer: {} || undefined}
*/
function calculateLayerData(layer, state, oldLayerData) {
var opt = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
var type = layer.type;
var datasets = state.datasets;
var _ref = datasets[layer.config.dataId] || {},
data = _ref.data,
filteredIndex = _ref.filteredIndex,
allData = _ref.allData; // if (!type || !layer.hasAllColumns()) {
// return {layer, layerData: {}};
// }
if (type === 'boundary' || type === 'pincode' || type === 'dynamic' || type === 'geojson' || type === 'geoHash' || type === 'point') {
// const url =
// 'https://firebasestorage.googleapis.com/v0/b/geoiqdashboard.appspot.com/o/externalDatasets%2FZLsAUPQNsUXhFvrlD0z7%2FBangalore%20Locality%20Boundaries.geojson?alt=media&token=9d5d4b94-875a-4acc-a72e-3ee40f62e7c9';
// // axios.get(url).then(function(response) {
// // console.log(response.data);
var response = undefined;
var _layerData = layer.formatLayerData(data, allData, filteredIndex, oldLayerData, response, opt);
return {
layerData: _layerData,
layer: layer
}; // });
}
var layerData = layer.formatLayerData(data, allData, filteredIndex, oldLayerData, opt);
return {
layerData: layerData,
layer: layer
};
}
function calculateLayerDataAfterAPICall(layer, state, oldLayerData, response) {
var opt = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
var type = layer.type;
var datasets = state.datasets;
var _ref2 = datasets[layer.config.dataId] || {},
data = _ref2.data,
filteredIndex = _ref2.filteredIndex,
allData = _ref2.allData; // if (!type) {
// return {layer};
// }
var layerData = layer.formatLayerData(data, allData, filteredIndex, oldLayerData, response, opt);
return {
layerData: layerData,
layer: layer
};
}
function getData() {
return _getData.apply(this, arguments);
}
function _getData() {
_getData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
var res;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return axios({
url: 'https://firebasestorage.googleapis.com/v0/b/geoiqdashboard.appspot.com/o/externalDatasets%2FZLsAUPQNsUXhFvrlD0z7%2FBangalore%20Locality%20Boundaries.geojson?alt=media&token=9d5d4b94-875a-4acc-a72e-3ee40f62e7c9',
method: 'get',
headers: {
'Content-Type': 'application/json'
}
});
case 3:
res = _context.sent;
if (res.status == 200) {} // test for status you want, etc
// console.log(res.status);
// Don't forget to return something
return _context.abrupt("return", res.data);
case 8:
_context.prev = 8;
_context.t0 = _context["catch"](0);
case 10:
case "end":
return _context.stop();
}
}, _callee, null, [[0, 8]]);
}));
return _getData.apply(this, arguments);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9sYXllci11dGlscy9sYXllci11dGlscy5qcyJdLCJuYW1lcyI6WyJmaW5kRGVmYXVsdExheWVyIiwiZGF0YXNldCIsImxheWVyQ2xhc3NlcyIsImlzTGFyZ2VDYXRlZ29yeSIsImxheWVyUHJvcHMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicHJldmlvdXMiLCJsYyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsInByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwiZm91bmRMYXllcnMiLCJjb25jYXQiLCJtYXAiLCJwIiwidHlwZSIsImRhdGFJZCIsImlkIiwibGF5ZXIiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJhbGxEYXRhIiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwic3RhdGUiLCJvbGRMYXllckRhdGEiLCJvcHQiLCJkYXRhc2V0cyIsImNvbmZpZyIsImRhdGEiLCJmaWx0ZXJlZEluZGV4IiwicmVzcG9uc2UiLCJ1bmRlZmluZWQiLCJsYXllckRhdGEiLCJmb3JtYXRMYXllckRhdGEiLCJjYWxjdWxhdGVMYXllckRhdGFBZnRlckFQSUNhbGwiLCJnZXREYXRhIiwiYXhpb3MiLCJ1cmwiLCJtZXRob2QiLCJoZWFkZXJzIiwicmVzIiwic3RhdHVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OzsrQ0FDQSxvSjs7Ozs7O0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7QUFPTyxTQUFTQSxnQkFBVCxDQUEwQkMsT0FBMUIsRUFBc0Q7QUFBQSxNQUFuQkMsWUFBbUIsdUVBQUosRUFBSTs7QUFDM0QsTUFBSSxDQUFDRCxPQUFELElBQVlBLE9BQU8sQ0FBQ0UsZUFBeEIsRUFBeUM7QUFDdkMsV0FBTyxFQUFQO0FBQ0Q7O0FBQ0QsTUFBTUMsVUFBVSxHQUFH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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuLyoqXG4gKiBGaW5kIGRlZmF1bHQgbGF5ZXJzIGZyb20gZmllbGRzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBsYXllckNsYXNzZXNcbiAqIEByZXR1cm5zIHtBcnJheX0gZm91bmQgbGF5ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIGxheWVyQ2xhc3NlcyA9IHt9KSB7XG4gIGlmICghZGF0YXNldCB8fCBkYXRhc2V0LmlzTGFyZ2VDYXRlZ29yeSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBsYXllclByb3BzID0gT2JqZWN0LmtleXMobGF5ZXJDbGFzc2VzKS5yZWR1Y2UoKHByZXZpb3VzLCBsYykgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW2xjXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBsYXllckNsYXNzZXNbbGNdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBwcmV2aW91cylcbiAgICAgICAgOiB7cHJvcHM6IFtdfTtcblxuICAgIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuICAgIGNvbnN0IGZvdW5kTGF5ZXJzID0gcmVzdWx0LmZvdW5kTGF5ZXJzIHx8IHByZXZpb3VzO1xuXG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzLmNvbmNhdChcbiAgICAgIHByb3BzLm1hcChwID0+ICh7XG4gICAgICAgIC4uLnAsXG4gICAgICAgIHR5cGU6IGxjLFxuICAgICAgICBkYXRhSWQ6IGRhdGFzZXQuaWRcbiAgICAgIH0pKVxuICAgICk7XG4gIH0sIFtdKTtcblxuICAvLyBnbyB0aHJvdWdoIGFsbCBsYXllclByb3BzIHRvIGNyZWF0ZSBsYXllclxuICByZXR1cm4gbGF5ZXJQcm9wcy5tYXAocHJvcHMgPT4ge1xuICAgIGNvbnN0IGxheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1twcm9wcy50eXBlXShwcm9wcyk7XG4gICAgcmV0dXJuIHR5cGVvZiBsYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQuYWxsRGF0YSlcbiAgICAgIDogbGF5ZXI7XG4gIH0pO1xufVxuXG4vKipcbiAqIGNhbGN1bGF0ZSBsYXllciBkYXRhIGJhc2VkIG9uIGxheWVyIHR5cGUsIGNvbCBDb25maWcsXG4gKiByZXR1cm4gdXBkYXRlZCBsYXllciBpZiBjb2xvckRvbWFpbiwgZGF0YU1hcCBoYXMgY2hhbmdlZFxuICogQHBhcmFtIHtvYmplY3R9IGxheWVyXG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvbGRMYXllckRhdGFcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRcbiAqIEByZXR1cm5zIHtvYmplY3R9IHtsYXllckRhdGE6IHt9LCBsYXllcjoge30gfHwgdW5kZWZpbmVkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhLCBvcHQgPSB7fSkge1xuICBjb25zdCB7dHlwZX0gPSBsYXllcjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIGNvbnN0IHtkYXRhLCBmaWx0ZXJlZEluZGV4LCBhbGxEYXRhfSA9IGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdIHx8IHt9O1xuXG4gIC8vIGlmICghdHlwZSB8fCAhbGF5ZXIuaGFzQWxsQ29sdW1ucygpKSB7XG4gIC8vICAgcmV0dXJuIHtsYXllciwgbGF5ZXJEYXRhOiB7fX07XG4gIC8vIH1cblxuICBpZiAoXG4gICAgdHlwZSA9PT0gJ2JvdW5kYXJ5JyB8fFxuICAgIHR5cGUgPT09ICdwaW5jb2RlJyB8fFxuICAgIHR5cGUgPT09ICdkeW5hbWljJyB8fFxuICAgIHR5cGUgPT09ICdnZW9qc29uJyB8fFxuICAgIHR5cGUgPT09ICdnZW9IYXNoJyB8fFxuICAgIHR5cGUgPT09ICdwb2ludCdcbiAgKSB7XG4gICAgLy8gICBjb25zdCB1cmwgPVxuICAgIC8vICAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9nZW9pcWRhc2hib2FyZC5hcHBzcG90LmNvbS9vL2V4dGVybmFsRGF0YXNldHMlMkZaTHNBVVBRTnNVWGhGdnJsRDB6NyUyRkJhbmdhbG9yZSUyMExvY2FsaXR5JTIwQm91bmRhcmllcy5nZW9qc29uP2FsdD1tZWRpYSZ0b2tlbj05ZDVkNGI5NC04NzVhLTRhY2MtYTcyZS0zZWU0MGY2MmU3YzknO1xuXG4gICAgLy8gICAvLyBheGlvcy5nZXQodXJsKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgLy8gICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZS5kYXRhKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGxheWVyRGF0YSA9IGxheWVyLmZvcm1hdExheWVyRGF0YShcbiAgICAgIGRhdGEsXG4gICAgICBhbGxEYXRhLFxuICAgICAgZmlsdGVyZWRJbmRleCxcbiAgICAgIG9sZExheWVyRGF0YSxcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgb3B0XG4gICAgKTtcbiAgICByZXR1cm4ge2xheWVyRGF0YSwgbGF5ZXJ9O1xuICAgIC8vIH0pO1xuICB9XG4gIGNvbnN0IGxheWVyRGF0YSA9IGxheWVyLmZvcm1hdExheWVyRGF0YShcbiAgICBkYXRhLFxuICAgIGFsbERhdGEsXG4gICAgZmlsdGVyZWRJbmRleCxcbiAgICBvbGRMYXllckRhdGEsXG4gICAgb3B0XG4gICk7XG4gIHJldHVybiB7bGF5ZXJEYXRhLCBsYXllcn07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVMYXllckRhdGFBZnRlckFQSUNhbGwoXG4gIGxheWVyLFxuICBzdGF0ZSxcbiAgb2xkTGF5ZXJEYXRhLFxuICByZXNwb25zZSxcbiAgb3B0ID0ge31cbikge1xuICBjb25zdCB7dHlwZX0gPSBsYXllcjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIGNvbnN0IHtkYXRhLCBmaWx0ZXJlZEluZGV4LCBhbGxEYXRhfSA9IGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdIHx8IHt9O1xuXG4gIC8vIGlmICghdHlwZSkge1xuICAvLyAgIHJldHVybiB7bGF5ZXJ9O1xuICAvLyB9XG5cbiAgY29uc3QgbGF5ZXJEYXRhID0gbGF5ZXIuZm9ybWF0TGF5ZXJEYXRhKFxuICAgIGRhdGEsXG4gICAgYWxsRGF0YSxcbiAgICBmaWx0ZXJlZEluZGV4LFxuICAgIG9sZExheWVyRGF0YSxcbiAgICByZXNwb25zZSxcbiAgICBvcHRcbiAgKTtcblxuICByZXR1cm4ge2xheWVyRGF0YSwgbGF5ZXJ9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXREYXRhKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF4aW9zKHtcbiAgICAgIHVybDpcbiAgICAgICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvZ2VvaXFkYXNoYm9hcmQuYXBwc3BvdC5jb20vby9leHRlcm5hbERhdGFzZXRzJTJGWkxzQVVQUU5zVVhoRnZybEQwejclMkZCYW5nYWxvcmUlMjBMb2NhbGl0eSUyMEJvdW5kYXJpZXMuZ2VvanNvbj9hbHQ9bWVkaWEmdG9rZW49OWQ1ZDRiOTQtODc1YS00YWNjLWE3MmUtM2VlNDBmNjJlN2M5JyxcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAocmVzLnN0YXR1cyA9PSAyMDApIHtcbiAgICAgIC8vIHRlc3QgZm9yIHN0YXR1cyB5b3Ugd2FudCwgZXRjXG4gICAgICAvLyBjb25zb2xlLmxvZyhyZXMuc3RhdHVzKTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgZm9yZ2V0IHRvIHJldHVybiBzb21ldGhpbmdcbiAgICByZXR1cm4gcmVzLmRhdGE7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfVxufVxuIl19