var Oidc = /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) /************************************************************************/ /******/ ({ /***/ "./index.js": /*!******************!*\ !*** ./index.js ***! \******************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _Log = __webpack_require__(/*! ./src/Log.js */ "./src/Log.js"); var _OidcClient = __webpack_require__(/*! ./src/OidcClient.js */ "./src/OidcClient.js"); var _OidcClientSettings = __webpack_require__(/*! ./src/OidcClientSettings.js */ "./src/OidcClientSettings.js"); var _WebStorageStateStore = __webpack_require__(/*! ./src/WebStorageStateStore.js */ "./src/WebStorageStateStore.js"); var _InMemoryWebStorage = __webpack_require__(/*! ./src/InMemoryWebStorage.js */ "./src/InMemoryWebStorage.js"); var _UserManager = __webpack_require__(/*! ./src/UserManager.js */ "./src/UserManager.js"); var _AccessTokenEvents = __webpack_require__(/*! ./src/AccessTokenEvents.js */ "./src/AccessTokenEvents.js"); var _MetadataService = __webpack_require__(/*! ./src/MetadataService.js */ "./src/MetadataService.js"); var _CordovaPopupNavigator = __webpack_require__(/*! ./src/CordovaPopupNavigator.js */ "./src/CordovaPopupNavigator.js"); var _CordovaIFrameNavigator = __webpack_require__(/*! ./src/CordovaIFrameNavigator.js */ "./src/CordovaIFrameNavigator.js"); var _CheckSessionIFrame = __webpack_require__(/*! ./src/CheckSessionIFrame.js */ "./src/CheckSessionIFrame.js"); var _TokenRevocationClient = __webpack_require__(/*! ./src/TokenRevocationClient.js */ "./src/TokenRevocationClient.js"); var _SessionMonitor = __webpack_require__(/*! ./src/SessionMonitor.js */ "./src/SessionMonitor.js"); var _Global = __webpack_require__(/*! ./src/Global.js */ "./src/Global.js"); var _User = __webpack_require__(/*! ./src/User.js */ "./src/User.js"); var _version = __webpack_require__(/*! ./version.js */ "./version.js"); // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. exports.default = { Version: _version.Version, Log: _Log.Log, OidcClient: _OidcClient.OidcClient, OidcClientSettings: _OidcClientSettings.OidcClientSettings, WebStorageStateStore: _WebStorageStateStore.WebStorageStateStore, InMemoryWebStorage: _InMemoryWebStorage.InMemoryWebStorage, UserManager: _UserManager.UserManager, AccessTokenEvents: _AccessTokenEvents.AccessTokenEvents, MetadataService: _MetadataService.MetadataService, CordovaPopupNavigator: _CordovaPopupNavigator.CordovaPopupNavigator, CordovaIFrameNavigator: _CordovaIFrameNavigator.CordovaIFrameNavigator, CheckSessionIFrame: _CheckSessionIFrame.CheckSessionIFrame, TokenRevocationClient: _TokenRevocationClient.TokenRevocationClient, SessionMonitor: _SessionMonitor.SessionMonitor, Global: _Global.Global, User: _User.User }; module.exports = exports['default']; /***/ }), /***/ "./jsrsasign/dist/jsrsasign.js": /*!*************************************!*\ !*** ./jsrsasign/dist/jsrsasign.js ***! \*************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(Buffer) { Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /* * jsrsasign(all) 8.0.12 (2018-04-22) (c) 2010-2018 Kenji Urushima | kjur.github.com/jsrsasign/license */ var navigator = {}; navigator.userAgent = false; var window = {}; /*! CryptoJS v3.1.2 core-fix.js * code.google.com/p/crypto-js * (c) 2009-2013 by Jeff Mott. All rights reserved. * code.google.com/p/crypto-js/wiki/License * THIS IS FIX of 'core.js' to fix Hmac issue. * https://code.google.com/p/crypto-js/issues/detail?id=84 * https://crypto-js.googlecode.com/svn-history/r667/branches/3.x/src/core.js */ var CryptoJS = CryptoJS || function (e, g) { var a = {};var b = a.lib = {};var j = b.Base = function () { function n() {}return { extend: function extend(p) { n.prototype = this;var o = new n();if (p) { o.mixIn(p); }if (!o.hasOwnProperty("init")) { o.init = function () { o.$super.init.apply(this, arguments); }; }o.init.prototype = o;o.$super = this;return o; }, create: function create() { var o = this.extend();o.init.apply(o, arguments);return o; }, init: function init() {}, mixIn: function mixIn(p) { for (var o in p) { if (p.hasOwnProperty(o)) { this[o] = p[o]; } }if (p.hasOwnProperty("toString")) { this.toString = p.toString; } }, clone: function clone() { return this.init.prototype.extend(this); } }; }();var l = b.WordArray = j.extend({ init: function init(o, n) { o = this.words = o || [];if (n != g) { this.sigBytes = n; } else { this.sigBytes = o.length * 4; } }, toString: function toString(n) { return (n || h).stringify(this); }, concat: function concat(t) { var q = this.words;var p = t.words;var n = this.sigBytes;var s = t.sigBytes;this.clamp();if (n % 4) { for (var r = 0; r < s; r++) { var o = p[r >>> 2] >>> 24 - r % 4 * 8 & 255;q[n + r >>> 2] |= o << 24 - (n + r) % 4 * 8; } } else { for (var r = 0; r < s; r += 4) { q[n + r >>> 2] = p[r >>> 2]; } }this.sigBytes += s;return this; }, clamp: function clamp() { var o = this.words;var n = this.sigBytes;o[n >>> 2] &= 4294967295 << 32 - n % 4 * 8;o.length = e.ceil(n / 4); }, clone: function clone() { var n = j.clone.call(this);n.words = this.words.slice(0);return n; }, random: function random(p) { var o = [];for (var n = 0; n < p; n += 4) { o.push(e.random() * 4294967296 | 0); }return new l.init(o, p); } });var m = a.enc = {};var h = m.Hex = { stringify: function stringify(p) { var r = p.words;var o = p.sigBytes;var q = [];for (var n = 0; n < o; n++) { var s = r[n >>> 2] >>> 24 - n % 4 * 8 & 255;q.push((s >>> 4).toString(16));q.push((s & 15).toString(16)); }return q.join(""); }, parse: function parse(p) { var n = p.length;var q = [];for (var o = 0; o < n; o += 2) { q[o >>> 3] |= parseInt(p.substr(o, 2), 16) << 24 - o % 8 * 4; }return new l.init(q, n / 2); } };var d = m.Latin1 = { stringify: function stringify(q) { var r = q.words;var p = q.sigBytes;var n = [];for (var o = 0; o < p; o++) { var s = r[o >>> 2] >>> 24 - o % 4 * 8 & 255;n.push(String.fromCharCode(s)); }return n.join(""); }, parse: function parse(p) { var n = p.length;var q = [];for (var o = 0; o < n; o++) { q[o >>> 2] |= (p.charCodeAt(o) & 255) << 24 - o % 4 * 8; }return new l.init(q, n); } };var c = m.Utf8 = { stringify: function stringify(n) { try { return decodeURIComponent(escape(d.stringify(n))); } catch (o) { throw new Error("Malformed UTF-8 data"); } }, parse: function parse(n) { return d.parse(unescape(encodeURIComponent(n))); } };var i = b.BufferedBlockAlgorithm = j.extend({ reset: function reset() { this._data = new l.init();this._nDataBytes = 0; }, _append: function _append(n) { if (typeof n == "string") { n = c.parse(n); }this._data.concat(n);this._nDataBytes += n.sigBytes; }, _process: function _process(w) { var q = this._data;var x = q.words;var n = q.sigBytes;var t = this.blockSize;var v = t * 4;var u = n / v;if (w) { u = e.ceil(u); } else { u = e.max((u | 0) - this._minBufferSize, 0); }var s = u * t;var r = e.min(s * 4, n);if (s) { for (var p = 0; p < s; p += t) { this._doProcessBlock(x, p); }var o = x.splice(0, s);q.sigBytes -= r; }return new l.init(o, r); }, clone: function clone() { var n = j.clone.call(this);n._data = this._data.clone();return n; }, _minBufferSize: 0 });var f = b.Hasher = i.extend({ cfg: j.extend(), init: function init(n) { this.cfg = this.cfg.extend(n);this.reset(); }, reset: function reset() { i.reset.call(this);this._doReset(); }, update: function update(n) { this._append(n);this._process();return this; }, finalize: function finalize(n) { if (n) { this._append(n); }var o = this._doFinalize();return o; }, blockSize: 512 / 32, _createHelper: function _createHelper(n) { return function (p, o) { return new n.init(o).finalize(p); }; }, _createHmacHelper: function _createHmacHelper(n) { return function (p, o) { return new k.HMAC.init(n, o).finalize(p); }; } });var k = a.algo = {};return a; }(Math); /* CryptoJS v3.1.2 x64-core-min.js code.google.com/p/crypto-js (c) 2009-2013 by Jeff Mott. All rights reserved. code.google.com/p/crypto-js/wiki/License */ (function (g) { var a = CryptoJS, f = a.lib, e = f.Base, h = f.WordArray, a = a.x64 = {};a.Word = e.extend({ init: function init(b, c) { this.high = b;this.low = c; } });a.WordArray = e.extend({ init: function init(b, c) { b = this.words = b || [];this.sigBytes = c != g ? c : 8 * b.length; }, toX32: function toX32() { for (var b = this.words, c = b.length, a = [], d = 0; d < c; d++) { var e = b[d];a.push(e.high);a.push(e.low); }return h.create(a, this.sigBytes); }, clone: function clone() { for (var b = e.clone.call(this), c = b.words = this.words.slice(0), a = c.length, d = 0; d < a; d++) { c[d] = c[d].clone(); }return b; } }); })(); /* CryptoJS v3.1.2 enc-base64.js code.google.com/p/crypto-js (c) 2009-2013 by Jeff Mott. All rights reserved. code.google.com/p/crypto-js/wiki/License */ (function () { var h = CryptoJS, j = h.lib.WordArray;h.enc.Base64 = { stringify: function stringify(b) { var e = b.words, f = b.sigBytes, c = this._map;b.clamp();b = [];for (var a = 0; a < f; a += 3) { for (var d = (e[a >>> 2] >>> 24 - 8 * (a % 4) & 255) << 16 | (e[a + 1 >>> 2] >>> 24 - 8 * ((a + 1) % 4) & 255) << 8 | e[a + 2 >>> 2] >>> 24 - 8 * ((a + 2) % 4) & 255, g = 0; 4 > g && a + 0.75 * g < f; g++) { b.push(c.charAt(d >>> 6 * (3 - g) & 63)); } }if (e = c.charAt(64)) for (; b.length % 4;) { b.push(e); }return b.join(""); }, parse: function parse(b) { var e = b.length, f = this._map, c = f.charAt(64);c && (c = b.indexOf(c), -1 != c && (e = c));for (var c = [], a = 0, d = 0; d < e; d++) { if (d % 4) { var g = f.indexOf(b.charAt(d - 1)) << 2 * (d % 4), h = f.indexOf(b.charAt(d)) >>> 6 - 2 * (d % 4);c[a >>> 2] |= (g | h) << 24 - 8 * (a % 4);a++; } }return j.create(c, a); }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" }; })(); /* CryptoJS v3.1.2 sha256-min.js code.google.com/p/crypto-js (c) 2009-2013 by Jeff Mott. All rights reserved. code.google.com/p/crypto-js/wiki/License */ (function (k) { for (var g = CryptoJS, h = g.lib, v = h.WordArray, j = h.Hasher, h = g.algo, s = [], t = [], u = function u(q) { return 4294967296 * (q - (q | 0)) | 0; }, l = 2, b = 0; 64 > b;) { var d;a: { d = l;for (var w = k.sqrt(d), r = 2; r <= w; r++) { if (!(d % r)) { d = !1;break a; } }d = !0; }d && (8 > b && (s[b] = u(k.pow(l, 0.5))), t[b] = u(k.pow(l, 1 / 3)), b++);l++; }var n = [], h = h.SHA256 = j.extend({ _doReset: function _doReset() { this._hash = new v.init(s.slice(0)); }, _doProcessBlock: function _doProcessBlock(q, h) { for (var a = this._hash.words, c = a[0], d = a[1], b = a[2], k = a[3], f = a[4], g = a[5], j = a[6], l = a[7], e = 0; 64 > e; e++) { if (16 > e) n[e] = q[h + e] | 0;else { var m = n[e - 15], p = n[e - 2];n[e] = ((m << 25 | m >>> 7) ^ (m << 14 | m >>> 18) ^ m >>> 3) + n[e - 7] + ((p << 15 | p >>> 17) ^ (p << 13 | p >>> 19) ^ p >>> 10) + n[e - 16]; }m = l + ((f << 26 | f >>> 6) ^ (f << 21 | f >>> 11) ^ (f << 7 | f >>> 25)) + (f & g ^ ~f & j) + t[e] + n[e];p = ((c << 30 | c >>> 2) ^ (c << 19 | c >>> 13) ^ (c << 10 | c >>> 22)) + (c & d ^ c & b ^ d & b);l = j;j = g;g = f;f = k + m | 0;k = b;b = d;d = c;c = m + p | 0; }a[0] = a[0] + c | 0;a[1] = a[1] + d | 0;a[2] = a[2] + b | 0;a[3] = a[3] + k | 0;a[4] = a[4] + f | 0;a[5] = a[5] + g | 0;a[6] = a[6] + j | 0;a[7] = a[7] + l | 0; }, _doFinalize: function _doFinalize() { var d = this._data, b = d.words, a = 8 * this._nDataBytes, c = 8 * d.sigBytes; b[c >>> 5] |= 128 << 24 - c % 32;b[(c + 64 >>> 9 << 4) + 14] = k.floor(a / 4294967296);b[(c + 64 >>> 9 << 4) + 15] = a;d.sigBytes = 4 * b.length;this._process();return this._hash; }, clone: function clone() { var b = j.clone.call(this);b._hash = this._hash.clone();return b; } });g.SHA256 = j._createHelper(h);g.HmacSHA256 = j._createHmacHelper(h); })(Math); /* CryptoJS v3.1.2 sha512-min.js code.google.com/p/crypto-js (c) 2009-2013 by Jeff Mott. All rights reserved. code.google.com/p/crypto-js/wiki/License */ (function () { function a() { return d.create.apply(d, arguments); }for (var n = CryptoJS, r = n.lib.Hasher, e = n.x64, d = e.Word, T = e.WordArray, e = n.algo, ea = [a(1116352408, 3609767458), a(1899447441, 602891725), a(3049323471, 3964484399), a(3921009573, 2173295548), a(961987163, 4081628472), a(1508970993, 3053834265), a(2453635748, 2937671579), a(2870763221, 3664609560), a(3624381080, 2734883394), a(310598401, 1164996542), a(607225278, 1323610764), a(1426881987, 3590304994), a(1925078388, 4068182383), a(2162078206, 991336113), a(2614888103, 633803317), a(3248222580, 3479774868), a(3835390401, 2666613458), a(4022224774, 944711139), a(264347078, 2341262773), a(604807628, 2007800933), a(770255983, 1495990901), a(1249150122, 1856431235), a(1555081692, 3175218132), a(1996064986, 2198950837), a(2554220882, 3999719339), a(2821834349, 766784016), a(2952996808, 2566594879), a(3210313671, 3203337956), a(3336571891, 1034457026), a(3584528711, 2466948901), a(113926993, 3758326383), a(338241895, 168717936), a(666307205, 1188179964), a(773529912, 1546045734), a(1294757372, 1522805485), a(1396182291, 2643833823), a(1695183700, 2343527390), a(1986661051, 1014477480), a(2177026350, 1206759142), a(2456956037, 344077627), a(2730485921, 1290863460), a(2820302411, 3158454273), a(3259730800, 3505952657), a(3345764771, 106217008), a(3516065817, 3606008344), a(3600352804, 1432725776), a(4094571909, 1467031594), a(275423344, 851169720), a(430227734, 3100823752), a(506948616, 1363258195), a(659060556, 3750685593), a(883997877, 3785050280), a(958139571, 3318307427), a(1322822218, 3812723403), a(1537002063, 2003034995), a(1747873779, 3602036899), a(1955562222, 1575990012), a(2024104815, 1125592928), a(2227730452, 2716904306), a(2361852424, 442776044), a(2428436474, 593698344), a(2756734187, 3733110249), a(3204031479, 2999351573), a(3329325298, 3815920427), a(3391569614, 3928383900), a(3515267271, 566280711), a(3940187606, 3454069534), a(4118630271, 4000239992), a(116418474, 1914138554), a(174292421, 2731055270), a(289380356, 3203993006), a(460393269, 320620315), a(685471733, 587496836), a(852142971, 1086792851), a(1017036298, 365543100), a(1126000580, 2618297676), a(1288033470, 3409855158), a(1501505948, 4234509866), a(1607167915, 987167468), a(1816402316, 1246189591)], v = [], w = 0; 80 > w; w++) { v[w] = a(); }e = e.SHA512 = r.extend({ _doReset: function _doReset() { this._hash = new T.init([new d.init(1779033703, 4089235720), new d.init(3144134277, 2227873595), new d.init(1013904242, 4271175723), new d.init(2773480762, 1595750129), new d.init(1359893119, 2917565137), new d.init(2600822924, 725511199), new d.init(528734635, 4215389547), new d.init(1541459225, 327033209)]); }, _doProcessBlock: function _doProcessBlock(a, d) { for (var f = this._hash.words, F = f[0], e = f[1], n = f[2], r = f[3], G = f[4], H = f[5], I = f[6], f = f[7], w = F.high, J = F.low, X = e.high, K = e.low, Y = n.high, L = n.low, Z = r.high, M = r.low, $ = G.high, N = G.low, aa = H.high, O = H.low, ba = I.high, P = I.low, ca = f.high, Q = f.low, k = w, g = J, z = X, x = K, A = Y, y = L, U = Z, B = M, l = $, h = N, R = aa, C = O, S = ba, D = P, V = ca, E = Q, m = 0; 80 > m; m++) { var s = v[m];if (16 > m) var j = s.high = a[d + 2 * m] | 0, b = s.low = a[d + 2 * m + 1] | 0;else { var j = v[m - 15], b = j.high, p = j.low, j = (b >>> 1 | p << 31) ^ (b >>> 8 | p << 24) ^ b >>> 7, p = (p >>> 1 | b << 31) ^ (p >>> 8 | b << 24) ^ (p >>> 7 | b << 25), u = v[m - 2], b = u.high, c = u.low, u = (b >>> 19 | c << 13) ^ (b << 3 | c >>> 29) ^ b >>> 6, c = (c >>> 19 | b << 13) ^ (c << 3 | b >>> 29) ^ (c >>> 6 | b << 26), b = v[m - 7], W = b.high, t = v[m - 16], q = t.high, t = t.low, b = p + b.low, j = j + W + (b >>> 0 < p >>> 0 ? 1 : 0), b = b + c, j = j + u + (b >>> 0 < c >>> 0 ? 1 : 0), b = b + t, j = j + q + (b >>> 0 < t >>> 0 ? 1 : 0);s.high = j;s.low = b; }var W = l & R ^ ~l & S, t = h & C ^ ~h & D, s = k & z ^ k & A ^ z & A, T = g & x ^ g & y ^ x & y, p = (k >>> 28 | g << 4) ^ (k << 30 | g >>> 2) ^ (k << 25 | g >>> 7), u = (g >>> 28 | k << 4) ^ (g << 30 | k >>> 2) ^ (g << 25 | k >>> 7), c = ea[m], fa = c.high, da = c.low, c = E + ((h >>> 14 | l << 18) ^ (h >>> 18 | l << 14) ^ (h << 23 | l >>> 9)), q = V + ((l >>> 14 | h << 18) ^ (l >>> 18 | h << 14) ^ (l << 23 | h >>> 9)) + (c >>> 0 < E >>> 0 ? 1 : 0), c = c + t, q = q + W + (c >>> 0 < t >>> 0 ? 1 : 0), c = c + da, q = q + fa + (c >>> 0 < da >>> 0 ? 1 : 0), c = c + b, q = q + j + (c >>> 0 < b >>> 0 ? 1 : 0), b = u + T, s = p + s + (b >>> 0 < u >>> 0 ? 1 : 0), V = S, E = D, S = R, D = C, R = l, C = h, h = B + c | 0, l = U + q + (h >>> 0 < B >>> 0 ? 1 : 0) | 0, U = A, B = y, A = z, y = x, z = k, x = g, g = c + b | 0, k = q + s + (g >>> 0 < c >>> 0 ? 1 : 0) | 0; }J = F.low = J + g;F.high = w + k + (J >>> 0 < g >>> 0 ? 1 : 0);K = e.low = K + x;e.high = X + z + (K >>> 0 < x >>> 0 ? 1 : 0);L = n.low = L + y;n.high = Y + A + (L >>> 0 < y >>> 0 ? 1 : 0);M = r.low = M + B;r.high = Z + U + (M >>> 0 < B >>> 0 ? 1 : 0);N = G.low = N + h;G.high = $ + l + (N >>> 0 < h >>> 0 ? 1 : 0);O = H.low = O + C;H.high = aa + R + (O >>> 0 < C >>> 0 ? 1 : 0);P = I.low = P + D; I.high = ba + S + (P >>> 0 < D >>> 0 ? 1 : 0);Q = f.low = Q + E;f.high = ca + V + (Q >>> 0 < E >>> 0 ? 1 : 0); }, _doFinalize: function _doFinalize() { var a = this._data, d = a.words, f = 8 * this._nDataBytes, e = 8 * a.sigBytes;d[e >>> 5] |= 128 << 24 - e % 32;d[(e + 128 >>> 10 << 5) + 30] = Math.floor(f / 4294967296);d[(e + 128 >>> 10 << 5) + 31] = f;a.sigBytes = 4 * d.length;this._process();return this._hash.toX32(); }, clone: function clone() { var a = r.clone.call(this);a._hash = this._hash.clone();return a; }, blockSize: 32 });n.SHA512 = r._createHelper(e);n.HmacSHA512 = r._createHmacHelper(e); })(); /* CryptoJS v3.1.2 sha384-min.js code.google.com/p/crypto-js (c) 2009-2013 by Jeff Mott. All rights reserved. code.google.com/p/crypto-js/wiki/License */ (function () { var c = CryptoJS, a = c.x64, b = a.Word, e = a.WordArray, a = c.algo, d = a.SHA512, a = a.SHA384 = d.extend({ _doReset: function _doReset() { this._hash = new e.init([new b.init(3418070365, 3238371032), new b.init(1654270250, 914150663), new b.init(2438529370, 812702999), new b.init(355462360, 4144912697), new b.init(1731405415, 4290775857), new b.init(2394180231, 1750603025), new b.init(3675008525, 1694076839), new b.init(1203062813, 3204075428)]); }, _doFinalize: function _doFinalize() { var a = d._doFinalize.call(this);a.sigBytes -= 16;return a; } });c.SHA384 = d._createHelper(a);c.HmacSHA384 = d._createHmacHelper(a); })(); /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ */ var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var b64pad = "=";function hex2b64(d) { var b;var e;var a = "";for (b = 0; b + 3 <= d.length; b += 3) { e = parseInt(d.substring(b, b + 3), 16);a += b64map.charAt(e >> 6) + b64map.charAt(e & 63); }if (b + 1 == d.length) { e = parseInt(d.substring(b, b + 1), 16);a += b64map.charAt(e << 2); } else { if (b + 2 == d.length) { e = parseInt(d.substring(b, b + 2), 16);a += b64map.charAt(e >> 2) + b64map.charAt((e & 3) << 4); } }if (b64pad) { while ((a.length & 3) > 0) { a += b64pad; } }return a; }function b64tohex(f) { var d = "";var e;var b = 0;var c;var a;for (e = 0; e < f.length; ++e) { if (f.charAt(e) == b64pad) { break; }a = b64map.indexOf(f.charAt(e));if (a < 0) { continue; }if (b == 0) { d += int2char(a >> 2);c = a & 3;b = 1; } else { if (b == 1) { d += int2char(c << 2 | a >> 4);c = a & 15;b = 2; } else { if (b == 2) { d += int2char(c);d += int2char(a >> 2);c = a & 3;b = 3; } else { d += int2char(c << 2 | a >> 4);d += int2char(a & 15);b = 0; } } } }if (b == 1) { d += int2char(c << 2); }return d; }function b64toBA(e) { var d = b64tohex(e);var c;var b = new Array();for (c = 0; 2 * c < d.length; ++c) { b[c] = parseInt(d.substring(2 * c, 2 * c + 2), 16); }return b; }; /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ */ var dbits;var canary = 244837814094590;var j_lm = (canary & 16777215) == 15715070;function BigInteger(e, d, f) { if (e != null) { if ("number" == typeof e) { this.fromNumber(e, d, f); } else { if (d == null && "string" != typeof e) { this.fromString(e, 256); } else { this.fromString(e, d); } } } }function nbi() { return new BigInteger(null); }function am1(f, a, b, e, h, g) { while (--g >= 0) { var d = a * this[f++] + b[e] + h;h = Math.floor(d / 67108864);b[e++] = d & 67108863; }return h; }function am2(f, q, r, e, o, a) { var k = q & 32767, p = q >> 15;while (--a >= 0) { var d = this[f] & 32767;var g = this[f++] >> 15;var b = p * d + g * k;d = k * d + ((b & 32767) << 15) + r[e] + (o & 1073741823);o = (d >>> 30) + (b >>> 15) + p * g + (o >>> 30);r[e++] = d & 1073741823; }return o; }function am3(f, q, r, e, o, a) { var k = q & 16383, p = q >> 14;while (--a >= 0) { var d = this[f] & 16383;var g = this[f++] >> 14;var b = p * d + g * k;d = k * d + ((b & 16383) << 14) + r[e] + o;o = (d >> 28) + (b >> 14) + p * g;r[e++] = d & 268435455; }return o; }if (j_lm && navigator.appName == "Microsoft Internet Explorer") { BigInteger.prototype.am = am2;dbits = 30; } else { if (j_lm && navigator.appName != "Netscape") { BigInteger.prototype.am = am1;dbits = 26; } else { BigInteger.prototype.am = am3;dbits = 28; } }BigInteger.prototype.DB = dbits;BigInteger.prototype.DM = (1 << dbits) - 1;BigInteger.prototype.DV = 1 << dbits;var BI_FP = 52;BigInteger.prototype.FV = Math.pow(2, BI_FP);BigInteger.prototype.F1 = BI_FP - dbits;BigInteger.prototype.F2 = 2 * dbits - BI_FP;var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";var BI_RC = new Array();var rr, vv;rr = "0".charCodeAt(0);for (vv = 0; vv <= 9; ++vv) { BI_RC[rr++] = vv; }rr = "a".charCodeAt(0);for (vv = 10; vv < 36; ++vv) { BI_RC[rr++] = vv; }rr = "A".charCodeAt(0);for (vv = 10; vv < 36; ++vv) { BI_RC[rr++] = vv; }function int2char(a) { return BI_RM.charAt(a); }function intAt(b, a) { var d = BI_RC[b.charCodeAt(a)];return d == null ? -1 : d; }function bnpCopyTo(b) { for (var a = this.t - 1; a >= 0; --a) { b[a] = this[a]; }b.t = this.t;b.s = this.s; }function bnpFromInt(a) { this.t = 1;this.s = a < 0 ? -1 : 0;if (a > 0) { this[0] = a; } else { if (a < -1) { this[0] = a + this.DV; } else { this.t = 0; } } }function nbv(a) { var b = nbi();b.fromInt(a);return b; }function bnpFromString(h, c) { var e;if (c == 16) { e = 4; } else { if (c == 8) { e = 3; } else { if (c == 256) { e = 8; } else { if (c == 2) { e = 1; } else { if (c == 32) { e = 5; } else { if (c == 4) { e = 2; } else { this.fromRadix(h, c);return; } } } } } }this.t = 0;this.s = 0;var g = h.length, d = false, f = 0;while (--g >= 0) { var a = e == 8 ? h[g] & 255 : intAt(h, g);if (a < 0) { if (h.charAt(g) == "-") { d = true; }continue; }d = false;if (f == 0) { this[this.t++] = a; } else { if (f + e > this.DB) { this[this.t - 1] |= (a & (1 << this.DB - f) - 1) << f;this[this.t++] = a >> this.DB - f; } else { this[this.t - 1] |= a << f; } }f += e;if (f >= this.DB) { f -= this.DB; } }if (e == 8 && (h[0] & 128) != 0) { this.s = -1;if (f > 0) { this[this.t - 1] |= (1 << this.DB - f) - 1 << f; } }this.clamp();if (d) { BigInteger.ZERO.subTo(this, this); } }function bnpClamp() { var a = this.s & this.DM;while (this.t > 0 && this[this.t - 1] == a) { --this.t; } }function bnToString(c) { if (this.s < 0) { return "-" + this.negate().toString(c); }var e;if (c == 16) { e = 4; } else { if (c == 8) { e = 3; } else { if (c == 2) { e = 1; } else { if (c == 32) { e = 5; } else { if (c == 4) { e = 2; } else { return this.toRadix(c); } } } } }var g = (1 << e) - 1, l, a = false, h = "", f = this.t;var j = this.DB - f * this.DB % e;if (f-- > 0) { if (j < this.DB && (l = this[f] >> j) > 0) { a = true;h = int2char(l); }while (f >= 0) { if (j < e) { l = (this[f] & (1 << j) - 1) << e - j;l |= this[--f] >> (j += this.DB - e); } else { l = this[f] >> (j -= e) & g;if (j <= 0) { j += this.DB;--f; } }if (l > 0) { a = true; }if (a) { h += int2char(l); } } }return a ? h : "0"; }function bnNegate() { var a = nbi();BigInteger.ZERO.subTo(this, a);return a; }function bnAbs() { return this.s < 0 ? this.negate() : this; }function bnCompareTo(b) { var d = this.s - b.s;if (d != 0) { return d; }var c = this.t;d = c - b.t;if (d != 0) { return this.s < 0 ? -d : d; }while (--c >= 0) { if ((d = this[c] - b[c]) != 0) { return d; } }return 0; }function nbits(a) { var c = 1, b;if ((b = a >>> 16) != 0) { a = b;c += 16; }if ((b = a >> 8) != 0) { a = b;c += 8; }if ((b = a >> 4) != 0) { a = b;c += 4; }if ((b = a >> 2) != 0) { a = b;c += 2; }if ((b = a >> 1) != 0) { a = b;c += 1; }return c; }function bnBitLength() { if (this.t <= 0) { return 0; }return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM); }function bnpDLShiftTo(c, b) { var a;for (a = this.t - 1; a >= 0; --a) { b[a + c] = this[a]; }for (a = c - 1; a >= 0; --a) { b[a] = 0; }b.t = this.t + c;b.s = this.s; }function bnpDRShiftTo(c, b) { for (var a = c; a < this.t; ++a) { b[a - c] = this[a]; }b.t = Math.max(this.t - c, 0);b.s = this.s; }function bnpLShiftTo(j, e) { var b = j % this.DB;var a = this.DB - b;var g = (1 << a) - 1;var f = Math.floor(j / this.DB), h = this.s << b & this.DM, d;for (d = this.t - 1; d >= 0; --d) { e[d + f + 1] = this[d] >> a | h;h = (this[d] & g) << b; }for (d = f - 1; d >= 0; --d) { e[d] = 0; }e[f] = h;e.t = this.t + f + 1;e.s = this.s;e.clamp(); }function bnpRShiftTo(g, d) { d.s = this.s;var e = Math.floor(g / this.DB);if (e >= this.t) { d.t = 0;return; }var b = g % this.DB;var a = this.DB - b;var f = (1 << b) - 1;d[0] = this[e] >> b;for (var c = e + 1; c < this.t; ++c) { d[c - e - 1] |= (this[c] & f) << a;d[c - e] = this[c] >> b; }if (b > 0) { d[this.t - e - 1] |= (this.s & f) << a; }d.t = this.t - e;d.clamp(); }function bnpSubTo(d, f) { var e = 0, g = 0, b = Math.min(d.t, this.t);while (e < b) { g += this[e] - d[e];f[e++] = g & this.DM;g >>= this.DB; }if (d.t < this.t) { g -= d.s;while (e < this.t) { g += this[e];f[e++] = g & this.DM;g >>= this.DB; }g += this.s; } else { g += this.s;while (e < d.t) { g -= d[e];f[e++] = g & this.DM;g >>= this.DB; }g -= d.s; }f.s = g < 0 ? -1 : 0;if (g < -1) { f[e++] = this.DV + g; } else { if (g > 0) { f[e++] = g; } }f.t = e;f.clamp(); }function bnpMultiplyTo(c, e) { var b = this.abs(), f = c.abs();var d = b.t;e.t = d + f.t;while (--d >= 0) { e[d] = 0; }for (d = 0; d < f.t; ++d) { e[d + b.t] = b.am(0, f[d], e, d, 0, b.t); }e.s = 0;e.clamp();if (this.s != c.s) { BigInteger.ZERO.subTo(e, e); } }function bnpSquareTo(d) { var a = this.abs();var b = d.t = 2 * a.t;while (--b >= 0) { d[b] = 0; }for (b = 0; b < a.t - 1; ++b) { var e = a.am(b, a[b], d, 2 * b, 0, 1);if ((d[b + a.t] += a.am(b + 1, 2 * a[b], d, 2 * b + 1, e, a.t - b - 1)) >= a.DV) { d[b + a.t] -= a.DV;d[b + a.t + 1] = 1; } }if (d.t > 0) { d[d.t - 1] += a.am(b, a[b], d, 2 * b, 0, 1); }d.s = 0;d.clamp(); }function bnpDivRemTo(n, h, g) { var w = n.abs();if (w.t <= 0) { return; }var k = this.abs();if (k.t < w.t) { if (h != null) { h.fromInt(0); }if (g != null) { this.copyTo(g); }return; }if (g == null) { g = nbi(); }var d = nbi(), a = this.s, l = n.s;var v = this.DB - nbits(w[w.t - 1]);if (v > 0) { w.lShiftTo(v, d);k.lShiftTo(v, g); } else { w.copyTo(d);k.copyTo(g); }var p = d.t;var b = d[p - 1];if (b == 0) { return; }var o = b * (1 << this.F1) + (p > 1 ? d[p - 2] >> this.F2 : 0);var A = this.FV / o, z = (1 << this.F1) / o, x = 1 << this.F2;var u = g.t, s = u - p, f = h == null ? nbi() : h;d.dlShiftTo(s, f);if (g.compareTo(f) >= 0) { g[g.t++] = 1;g.subTo(f, g); }BigInteger.ONE.dlShiftTo(p, f);f.subTo(d, d);while (d.t < p) { d[d.t++] = 0; }while (--s >= 0) { var c = g[--u] == b ? this.DM : Math.floor(g[u] * A + (g[u - 1] + x) * z);if ((g[u] += d.am(0, c, g, s, 0, p)) < c) { d.dlShiftTo(s, f);g.subTo(f, g);while (g[u] < --c) { g.subTo(f, g); } } }if (h != null) { g.drShiftTo(p, h);if (a != l) { BigInteger.ZERO.subTo(h, h); } }g.t = p;g.clamp();if (v > 0) { g.rShiftTo(v, g); }if (a < 0) { BigInteger.ZERO.subTo(g, g); } }function bnMod(b) { var c = nbi();this.abs().divRemTo(b, null, c);if (this.s < 0 && c.compareTo(BigInteger.ZERO) > 0) { b.subTo(c, c); }return c; }function Classic(a) { this.m = a; }function cConvert(a) { if (a.s < 0 || a.compareTo(this.m) >= 0) { return a.mod(this.m); } else { return a; } }function cRevert(a) { return a; }function cReduce(a) { a.divRemTo(this.m, null, a); }function cMulTo(a, c, b) { a.multiplyTo(c, b);this.reduce(b); }function cSqrTo(a, b) { a.squareTo(b);this.reduce(b); }Classic.prototype.convert = cConvert;Classic.prototype.revert = cRevert;Classic.prototype.reduce = cReduce;Classic.prototype.mulTo = cMulTo;Classic.prototype.sqrTo = cSqrTo;function bnpInvDigit() { if (this.t < 1) { return 0; }var a = this[0];if ((a & 1) == 0) { return 0; }var b = a & 3;b = b * (2 - (a & 15) * b) & 15;b = b * (2 - (a & 255) * b) & 255;b = b * (2 - ((a & 65535) * b & 65535)) & 65535;b = b * (2 - a * b % this.DV) % this.DV;return b > 0 ? this.DV - b : -b; }function Montgomery(a) { this.m = a;this.mp = a.invDigit();this.mpl = this.mp & 32767;this.mph = this.mp >> 15;this.um = (1 << a.DB - 15) - 1;this.mt2 = 2 * a.t; }function montConvert(a) { var b = nbi();a.abs().dlShiftTo(this.m.t, b);b.divRemTo(this.m, null, b);if (a.s < 0 && b.compareTo(BigInteger.ZERO) > 0) { this.m.subTo(b, b); }return b; }function montRevert(a) { var b = nbi();a.copyTo(b);this.reduce(b);return b; }function montReduce(a) { while (a.t <= this.mt2) { a[a.t++] = 0; }for (var c = 0; c < this.m.t; ++c) { var b = a[c] & 32767;var d = b * this.mpl + ((b * this.mph + (a[c] >> 15) * this.mpl & this.um) << 15) & a.DM;b = c + this.m.t;a[b] += this.m.am(0, d, a, c, 0, this.m.t);while (a[b] >= a.DV) { a[b] -= a.DV;a[++b]++; } }a.clamp();a.drShiftTo(this.m.t, a);if (a.compareTo(this.m) >= 0) { a.subTo(this.m, a); } }function montSqrTo(a, b) { a.squareTo(b);this.reduce(b); }function montMulTo(a, c, b) { a.multiplyTo(c, b);this.reduce(b); }Montgomery.prototype.convert = montConvert;Montgomery.prototype.revert = montRevert;Montgomery.prototype.reduce = montReduce;Montgomery.prototype.mulTo = montMulTo;Montgomery.prototype.sqrTo = montSqrTo;function bnpIsEven() { return (this.t > 0 ? this[0] & 1 : this.s) == 0; }function bnpExp(h, j) { if (h > 4294967295 || h < 1) { return BigInteger.ONE; }var f = nbi(), a = nbi(), d = j.convert(this), c = nbits(h) - 1;d.copyTo(f);while (--c >= 0) { j.sqrTo(f, a);if ((h & 1 << c) > 0) { j.mulTo(a, d, f); } else { var b = f;f = a;a = b; } }return j.revert(f); }function bnModPowInt(b, a) { var c;if (b < 256 || a.isEven()) { c = new Classic(a); } else { c = new Montgomery(a); }return this.exp(b, c); }BigInteger.prototype.copyTo = bnpCopyTo;BigInteger.prototype.fromInt = bnpFromInt;BigInteger.prototype.fromString = bnpFromString;BigInteger.prototype.clamp = bnpClamp;BigInteger.prototype.dlShiftTo = bnpDLShiftTo;BigInteger.prototype.drShiftTo = bnpDRShiftTo;BigInteger.prototype.lShiftTo = bnpLShiftTo;BigInteger.prototype.rShiftTo = bnpRShiftTo;BigInteger.prototype.subTo = bnpSubTo;BigInteger.prototype.multiplyTo = bnpMultiplyTo;BigInteger.prototype.squareTo = bnpSquareTo;BigInteger.prototype.divRemTo = bnpDivRemTo;BigInteger.prototype.invDigit = bnpInvDigit;BigInteger.prototype.isEven = bnpIsEven;BigInteger.prototype.exp = bnpExp;BigInteger.prototype.toString = bnToString;BigInteger.prototype.negate = bnNegate;BigInteger.prototype.abs = bnAbs;BigInteger.prototype.compareTo = bnCompareTo;BigInteger.prototype.bitLength = bnBitLength;BigInteger.prototype.mod = bnMod;BigInteger.prototype.modPowInt = bnModPowInt;BigInteger.ZERO = nbv(0);BigInteger.ONE = nbv(1); /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ */ function bnClone() { var a = nbi();this.copyTo(a);return a; }function bnIntValue() { if (this.s < 0) { if (this.t == 1) { return this[0] - this.DV; } else { if (this.t == 0) { return -1; } } } else { if (this.t == 1) { return this[0]; } else { if (this.t == 0) { return 0; } } }return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]; }function bnByteValue() { return this.t == 0 ? this.s : this[0] << 24 >> 24; }function bnShortValue() { return this.t == 0 ? this.s : this[0] << 16 >> 16; }function bnpChunkSize(a) { return Math.floor(Math.LN2 * this.DB / Math.log(a)); }function bnSigNum() { if (this.s < 0) { return -1; } else { if (this.t <= 0 || this.t == 1 && this[0] <= 0) { return 0; } else { return 1; } } }function bnpToRadix(c) { if (c == null) { c = 10; }if (this.signum() == 0 || c < 2 || c > 36) { return "0"; }var f = this.chunkSize(c);var e = Math.pow(c, f);var i = nbv(e), j = nbi(), h = nbi(), g = "";this.divRemTo(i, j, h);while (j.signum() > 0) { g = (e + h.intValue()).toString(c).substr(1) + g;j.divRemTo(i, j, h); }return h.intValue().toString(c) + g; }function bnpFromRadix(m, h) { this.fromInt(0);if (h == null) { h = 10; }var f = this.chunkSize(h);var g = Math.pow(h, f), e = false, a = 0, l = 0;for (var c = 0; c < m.length; ++c) { var k = intAt(m, c);if (k < 0) { if (m.charAt(c) == "-" && this.signum() == 0) { e = true; }continue; }l = h * l + k;if (++a >= f) { this.dMultiply(g);this.dAddOffset(l, 0);a = 0;l = 0; } }if (a > 0) { this.dMultiply(Math.pow(h, a));this.dAddOffset(l, 0); }if (e) { BigInteger.ZERO.subTo(this, this); } }function bnpFromNumber(f, e, h) { if ("number" == typeof e) { if (f < 2) { this.fromInt(1); } else { this.fromNumber(f, h);if (!this.testBit(f - 1)) { this.bitwiseTo(BigInteger.ONE.shiftLeft(f - 1), op_or, this); }if (this.isEven()) { this.dAddOffset(1, 0); }while (!this.isProbablePrime(e)) { this.dAddOffset(2, 0);if (this.bitLength() > f) { this.subTo(BigInteger.ONE.shiftLeft(f - 1), this); } } } } else { var d = new Array(), g = f & 7;d.length = (f >> 3) + 1;e.nextBytes(d);if (g > 0) { d[0] &= (1 << g) - 1; } else { d[0] = 0; }this.fromString(d, 256); } }function bnToByteArray() { var b = this.t, c = new Array();c[0] = this.s;var e = this.DB - b * this.DB % 8, f, a = 0;if (b-- > 0) { if (e < this.DB && (f = this[b] >> e) != (this.s & this.DM) >> e) { c[a++] = f | this.s << this.DB - e; }while (b >= 0) { if (e < 8) { f = (this[b] & (1 << e) - 1) << 8 - e;f |= this[--b] >> (e += this.DB - 8); } else { f = this[b] >> (e -= 8) & 255;if (e <= 0) { e += this.DB;--b; } }if ((f & 128) != 0) { f |= -256; }if (a == 0 && (this.s & 128) != (f & 128)) { ++a; }if (a > 0 || f != this.s) { c[a++] = f; } } }return c; }function bnEquals(b) { return this.compareTo(b) == 0; }function bnMin(b) { return this.compareTo(b) < 0 ? this : b; }function bnMax(b) { return this.compareTo(b) > 0 ? this : b; }function bnpBitwiseTo(c, h, e) { var d, g, b = Math.min(c.t, this.t);for (d = 0; d < b; ++d) { e[d] = h(this[d], c[d]); }if (c.t < this.t) { g = c.s & this.DM;for (d = b; d < this.t; ++d) { e[d] = h(this[d], g); }e.t = this.t; } else { g = this.s & this.DM;for (d = b; d < c.t; ++d) { e[d] = h(g, c[d]); }e.t = c.t; }e.s = h(this.s, c.s);e.clamp(); }function op_and(a, b) { return a & b; }function bnAnd(b) { var c = nbi();this.bitwiseTo(b, op_and, c);return c; }function op_or(a, b) { return a | b; }function bnOr(b) { var c = nbi();this.bitwiseTo(b, op_or, c);return c; }function op_xor(a, b) { return a ^ b; }function bnXor(b) { var c = nbi();this.bitwiseTo(b, op_xor, c);return c; }function op_andnot(a, b) { return a & ~b; }function bnAndNot(b) { var c = nbi();this.bitwiseTo(b, op_andnot, c);return c; }function bnNot() { var b = nbi();for (var a = 0; a < this.t; ++a) { b[a] = this.DM & ~this[a]; }b.t = this.t;b.s = ~this.s;return b; }function bnShiftLeft(b) { var a = nbi();if (b < 0) { this.rShiftTo(-b, a); } else { this.lShiftTo(b, a); }return a; }function bnShiftRight(b) { var a = nbi();if (b < 0) { this.lShiftTo(-b, a); } else { this.rShiftTo(b, a); }return a; }function lbit(a) { if (a == 0) { return -1; }var b = 0;if ((a & 65535) == 0) { a >>= 16;b += 16; }if ((a & 255) == 0) { a >>= 8;b += 8; }if ((a & 15) == 0) { a >>= 4;b += 4; }if ((a & 3) == 0) { a >>= 2;b += 2; }if ((a & 1) == 0) { ++b; }return b; }function bnGetLowestSetBit() { for (var a = 0; a < this.t; ++a) { if (this[a] != 0) { return a * this.DB + lbit(this[a]); } }if (this.s < 0) { return this.t * this.DB; }return -1; }function cbit(a) { var b = 0;while (a != 0) { a &= a - 1;++b; }return b; }function bnBitCount() { var c = 0, a = this.s & this.DM;for (var b = 0; b < this.t; ++b) { c += cbit(this[b] ^ a); }return c; }function bnTestBit(b) { var a = Math.floor(b / this.DB);if (a >= this.t) { return this.s != 0; }return (this[a] & 1 << b % this.DB) != 0; }function bnpChangeBit(c, b) { var a = BigInteger.ONE.shiftLeft(c);this.bitwiseTo(a, b, a);return a; }function bnSetBit(a) { return this.changeBit(a, op_or); }function bnClearBit(a) { return this.changeBit(a, op_andnot); }function bnFlipBit(a) { return this.changeBit(a, op_xor); }function bnpAddTo(d, f) { var e = 0, g = 0, b = Math.min(d.t, this.t);while (e < b) { g += this[e] + d[e];f[e++] = g & this.DM;g >>= this.DB; }if (d.t < this.t) { g += d.s;while (e < this.t) { g += this[e];f[e++] = g & this.DM;g >>= this.DB; }g += this.s; } else { g += this.s;while (e < d.t) { g += d[e];f[e++] = g & this.DM;g >>= this.DB; }g += d.s; }f.s = g < 0 ? -1 : 0;if (g > 0) { f[e++] = g; } else { if (g < -1) { f[e++] = this.DV + g; } }f.t = e;f.clamp(); }function bnAdd(b) { var c = nbi();this.addTo(b, c);return c; }function bnSubtract(b) { var c = nbi();this.subTo(b, c);return c; }function bnMultiply(b) { var c = nbi();this.multiplyTo(b, c);return c; }function bnSquare() { var a = nbi();this.squareTo(a);return a; }function bnDivide(b) { var c = nbi();this.divRemTo(b, c, null);return c; }function bnRemainder(b) { var c = nbi();this.divRemTo(b, null, c);return c; }function bnDivideAndRemainder(b) { var d = nbi(), c = nbi();this.divRemTo(b, d, c);return new Array(d, c); }function bnpDMultiply(a) { this[this.t] = this.am(0, a - 1, this, 0, 0, this.t);++this.t;this.clamp(); }function bnpDAddOffset(b, a) { if (b == 0) { return; }while (this.t <= a) { this[this.t++] = 0; }this[a] += b;while (this[a] >= this.DV) { this[a] -= this.DV;if (++a >= this.t) { this[this.t++] = 0; }++this[a]; } }function NullExp() {}function nNop(a) { return a; }function nMulTo(a, c, b) { a.multiplyTo(c, b); }function nSqrTo(a, b) { a.squareTo(b); }NullExp.prototype.convert = nNop;NullExp.prototype.revert = nNop;NullExp.prototype.mulTo = nMulTo;NullExp.prototype.sqrTo = nSqrTo;function bnPow(a) { return this.exp(a, new NullExp()); }function bnpMultiplyLowerTo(b, f, e) { var d = Math.min(this.t + b.t, f);e.s = 0;e.t = d;while (d > 0) { e[--d] = 0; }var c;for (c = e.t - this.t; d < c; ++d) { e[d + this.t] = this.am(0, b[d], e, d, 0, this.t); }for (c = Math.min(b.t, f); d < c; ++d) { this.am(0, b[d], e, d, 0, f - d); }e.clamp(); }function bnpMultiplyUpperTo(b, e, d) { --e;var c = d.t = this.t + b.t - e;d.s = 0;while (--c >= 0) { d[c] = 0; }for (c = Math.max(e - this.t, 0); c < b.t; ++c) { d[this.t + c - e] = this.am(e - c, b[c], d, 0, 0, this.t + c - e); }d.clamp();d.drShiftTo(1, d); }function Barrett(a) { this.r2 = nbi();this.q3 = nbi();BigInteger.ONE.dlShiftTo(2 * a.t, this.r2);this.mu = this.r2.divide(a);this.m = a; }function barrettConvert(a) { if (a.s < 0 || a.t > 2 * this.m.t) { return a.mod(this.m); } else { if (a.compareTo(this.m) < 0) { return a; } else { var b = nbi();a.copyTo(b);this.reduce(b);return b; } } }function barrettRevert(a) { return a; }function barrettReduce(a) { a.drShiftTo(this.m.t - 1, this.r2);if (a.t > this.m.t + 1) { a.t = this.m.t + 1;a.clamp(); }this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);while (a.compareTo(this.r2) < 0) { a.dAddOffset(1, this.m.t + 1); }a.subTo(this.r2, a);while (a.compareTo(this.m) >= 0) { a.subTo(this.m, a); } }function barrettSqrTo(a, b) { a.squareTo(b);this.reduce(b); }function barrettMulTo(a, c, b) { a.multiplyTo(c, b);this.reduce(b); }Barrett.prototype.convert = barrettConvert;Barrett.prototype.revert = barrettRevert;Barrett.prototype.reduce = barrettReduce;Barrett.prototype.mulTo = barrettMulTo;Barrett.prototype.sqrTo = barrettSqrTo;function bnModPow(q, f) { var o = q.bitLength(), h, b = nbv(1), v;if (o <= 0) { return b; } else { if (o < 18) { h = 1; } else { if (o < 48) { h = 3; } else { if (o < 144) { h = 4; } else { if (o < 768) { h = 5; } else { h = 6; } } } } }if (o < 8) { v = new Classic(f); } else { if (f.isEven()) { v = new Barrett(f); } else { v = new Montgomery(f); } }var p = new Array(), d = 3, s = h - 1, a = (1 << h) - 1;p[1] = v.convert(this);if (h > 1) { var A = nbi();v.sqrTo(p[1], A);while (d <= a) { p[d] = nbi();v.mulTo(A, p[d - 2], p[d]);d += 2; } }var l = q.t - 1, x, u = true, c = nbi(), y;o = nbits(q[l]) - 1;while (l >= 0) { if (o >= s) { x = q[l] >> o - s & a; } else { x = (q[l] & (1 << o + 1) - 1) << s - o;if (l > 0) { x |= q[l - 1] >> this.DB + o - s; } }d = h;while ((x & 1) == 0) { x >>= 1;--d; }if ((o -= d) < 0) { o += this.DB;--l; }if (u) { p[x].copyTo(b);u = false; } else { while (d > 1) { v.sqrTo(b, c);v.sqrTo(c, b);d -= 2; }if (d > 0) { v.sqrTo(b, c); } else { y = b;b = c;c = y; }v.mulTo(c, p[x], b); }while (l >= 0 && (q[l] & 1 << o) == 0) { v.sqrTo(b, c);y = b;b = c;c = y;if (--o < 0) { o = this.DB - 1;--l; } } }return v.revert(b); }function bnGCD(c) { var b = this.s < 0 ? this.negate() : this.clone();var h = c.s < 0 ? c.negate() : c.clone();if (b.compareTo(h) < 0) { var e = b;b = h;h = e; }var d = b.getLowestSetBit(), f = h.getLowestSetBit();if (f < 0) { return b; }if (d < f) { f = d; }if (f > 0) { b.rShiftTo(f, b);h.rShiftTo(f, h); }while (b.signum() > 0) { if ((d = b.getLowestSetBit()) > 0) { b.rShiftTo(d, b); }if ((d = h.getLowestSetBit()) > 0) { h.rShiftTo(d, h); }if (b.compareTo(h) >= 0) { b.subTo(h, b);b.rShiftTo(1, b); } else { h.subTo(b, h);h.rShiftTo(1, h); } }if (f > 0) { h.lShiftTo(f, h); }return h; }function bnpModInt(e) { if (e <= 0) { return 0; }var c = this.DV % e, b = this.s < 0 ? e - 1 : 0;if (this.t > 0) { if (c == 0) { b = this[0] % e; } else { for (var a = this.t - 1; a >= 0; --a) { b = (c * b + this[a]) % e; } } }return b; }function bnModInverse(f) { var j = f.isEven();if (this.isEven() && j || f.signum() == 0) { return BigInteger.ZERO; }var i = f.clone(), h = this.clone();var g = nbv(1), e = nbv(0), l = nbv(0), k = nbv(1);while (i.signum() != 0) { while (i.isEven()) { i.rShiftTo(1, i);if (j) { if (!g.isEven() || !e.isEven()) { g.addTo(this, g);e.subTo(f, e); }g.rShiftTo(1, g); } else { if (!e.isEven()) { e.subTo(f, e); } }e.rShiftTo(1, e); }while (h.isEven()) { h.rShiftTo(1, h);if (j) { if (!l.isEven() || !k.isEven()) { l.addTo(this, l);k.subTo(f, k); }l.rShiftTo(1, l); } else { if (!k.isEven()) { k.subTo(f, k); } }k.rShiftTo(1, k); }if (i.compareTo(h) >= 0) { i.subTo(h, i);if (j) { g.subTo(l, g); }e.subTo(k, e); } else { h.subTo(i, h);if (j) { l.subTo(g, l); }k.subTo(e, k); } }if (h.compareTo(BigInteger.ONE) != 0) { return BigInteger.ZERO; }if (k.compareTo(f) >= 0) { return k.subtract(f); }if (k.signum() < 0) { k.addTo(f, k); } else { return k; }if (k.signum() < 0) { return k.add(f); } else { return k; } }var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];var lplim = (1 << 26) / lowprimes[lowprimes.length - 1];function bnIsProbablePrime(e) { var d, b = this.abs();if (b.t == 1 && b[0] <= lowprimes[lowprimes.length - 1]) { for (d = 0; d < lowprimes.length; ++d) { if (b[0] == lowprimes[d]) { return true; } }return false; }if (b.isEven()) { return false; }d = 1;while (d < lowprimes.length) { var a = lowprimes[d], c = d + 1;while (c < lowprimes.length && a < lplim) { a *= lowprimes[c++]; }a = b.modInt(a);while (d < c) { if (a % lowprimes[d++] == 0) { return false; } } }return b.millerRabin(e); }function bnpMillerRabin(f) { var g = this.subtract(BigInteger.ONE);var c = g.getLowestSetBit();if (c <= 0) { return false; }var h = g.shiftRight(c);f = f + 1 >> 1;if (f > lowprimes.length) { f = lowprimes.length; }var b = nbi();for (var e = 0; e < f; ++e) { b.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);var l = b.modPow(h, this);if (l.compareTo(BigInteger.ONE) != 0 && l.compareTo(g) != 0) { var d = 1;while (d++ < c && l.compareTo(g) != 0) { l = l.modPowInt(2, this);if (l.compareTo(BigInteger.ONE) == 0) { return false; } }if (l.compareTo(g) != 0) { return false; } } }return true; }BigInteger.prototype.chunkSize = bnpChunkSize;BigInteger.prototype.toRadix = bnpToRadix;BigInteger.prototype.fromRadix = bnpFromRadix;BigInteger.prototype.fromNumber = bnpFromNumber;BigInteger.prototype.bitwiseTo = bnpBitwiseTo;BigInteger.prototype.changeBit = bnpChangeBit;BigInteger.prototype.addTo = bnpAddTo;BigInteger.prototype.dMultiply = bnpDMultiply;BigInteger.prototype.dAddOffset = bnpDAddOffset;BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;BigInteger.prototype.modInt = bnpModInt;BigInteger.prototype.millerRabin = bnpMillerRabin;BigInteger.prototype.clone = bnClone;BigInteger.prototype.intValue = bnIntValue;BigInteger.prototype.byteValue = bnByteValue;BigInteger.prototype.shortValue = bnShortValue;BigInteger.prototype.signum = bnSigNum;BigInteger.prototype.toByteArray = bnToByteArray;BigInteger.prototype.equals = bnEquals;BigInteger.prototype.min = bnMin;BigInteger.prototype.max = bnMax;BigInteger.prototype.and = bnAnd;BigInteger.prototype.or = bnOr;BigInteger.prototype.xor = bnXor;BigInteger.prototype.andNot = bnAndNot;BigInteger.prototype.not = bnNot;BigInteger.prototype.shiftLeft = bnShiftLeft;BigInteger.prototype.shiftRight = bnShiftRight;BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;BigInteger.prototype.bitCount = bnBitCount;BigInteger.prototype.testBit = bnTestBit;BigInteger.prototype.setBit = bnSetBit;BigInteger.prototype.clearBit = bnClearBit;BigInteger.prototype.flipBit = bnFlipBit;BigInteger.prototype.add = bnAdd;BigInteger.prototype.subtract = bnSubtract;BigInteger.prototype.multiply = bnMultiply;BigInteger.prototype.divide = bnDivide;BigInteger.prototype.remainder = bnRemainder;BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;BigInteger.prototype.modPow = bnModPow;BigInteger.prototype.modInverse = bnModInverse;BigInteger.prototype.pow = bnPow;BigInteger.prototype.gcd = bnGCD;BigInteger.prototype.isProbablePrime = bnIsProbablePrime;BigInteger.prototype.square = bnSquare; /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ */ function Arcfour() { this.i = 0;this.j = 0;this.S = new Array(); }function ARC4init(d) { var c, a, b;for (c = 0; c < 256; ++c) { this.S[c] = c; }a = 0;for (c = 0; c < 256; ++c) { a = a + this.S[c] + d[c % d.length] & 255;b = this.S[c];this.S[c] = this.S[a];this.S[a] = b; }this.i = 0;this.j = 0; }function ARC4next() { var a;this.i = this.i + 1 & 255;this.j = this.j + this.S[this.i] & 255;a = this.S[this.i];this.S[this.i] = this.S[this.j];this.S[this.j] = a;return this.S[a + this.S[this.i] & 255]; }Arcfour.prototype.init = ARC4init;Arcfour.prototype.next = ARC4next;function prng_newstate() { return new Arcfour(); }var rng_psize = 256; /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ */ var rng_state;var rng_pool;var rng_pptr;function rng_seed_int(a) { rng_pool[rng_pptr++] ^= a & 255;rng_pool[rng_pptr++] ^= a >> 8 & 255;rng_pool[rng_pptr++] ^= a >> 16 & 255;rng_pool[rng_pptr++] ^= a >> 24 & 255;if (rng_pptr >= rng_psize) { rng_pptr -= rng_psize; } }function rng_seed_time() { rng_seed_int(new Date().getTime()); }if (rng_pool == null) { rng_pool = new Array();rng_pptr = 0;var t;if (window !== undefined && (window.crypto !== undefined || window.msCrypto !== undefined)) { var crypto = window.crypto || window.msCrypto;if (crypto.getRandomValues) { var ua = new Uint8Array(32);crypto.getRandomValues(ua);for (t = 0; t < 32; ++t) { rng_pool[rng_pptr++] = ua[t]; } } else { if (navigator.appName == "Netscape" && navigator.appVersion < "5") { var z = window.crypto.random(32);for (t = 0; t < z.length; ++t) { rng_pool[rng_pptr++] = z.charCodeAt(t) & 255; } } } }while (rng_pptr < rng_psize) { t = Math.floor(65536 * Math.random());rng_pool[rng_pptr++] = t >>> 8;rng_pool[rng_pptr++] = t & 255; }rng_pptr = 0;rng_seed_time(); }function rng_get_byte() { if (rng_state == null) { rng_seed_time();rng_state = prng_newstate();rng_state.init(rng_pool);for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) { rng_pool[rng_pptr] = 0; }rng_pptr = 0; }return rng_state.next(); }function rng_get_bytes(b) { var a;for (a = 0; a < b.length; ++a) { b[a] = rng_get_byte(); } }function SecureRandom() {}SecureRandom.prototype.nextBytes = rng_get_bytes; /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ */ function parseBigInt(b, a) { return new BigInteger(b, a); }function linebrk(c, d) { var a = "";var b = 0;while (b + d < c.length) { a += c.substring(b, b + d) + "\n";b += d; }return a + c.substring(b, c.length); }function byte2Hex(a) { if (a < 16) { return "0" + a.toString(16); } else { return a.toString(16); } }function pkcs1pad2(e, h) { if (h < e.length + 11) { throw "Message too long for RSA";return null; }var g = new Array();var d = e.length - 1;while (d >= 0 && h > 0) { var f = e.charCodeAt(d--);if (f < 128) { g[--h] = f; } else { if (f > 127 && f < 2048) { g[--h] = f & 63 | 128;g[--h] = f >> 6 | 192; } else { g[--h] = f & 63 | 128;g[--h] = f >> 6 & 63 | 128;g[--h] = f >> 12 | 224; } } }g[--h] = 0;var b = new SecureRandom();var a = new Array();while (h > 2) { a[0] = 0;while (a[0] == 0) { b.nextBytes(a); }g[--h] = a[0]; }g[--h] = 2;g[--h] = 0;return new BigInteger(g); }function oaep_mgf1_arr(c, a, e) { var b = "", d = 0;while (b.length < a) { b += e(String.fromCharCode.apply(String, c.concat([(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255])));d += 1; }return b; }function oaep_pad(q, a, f, l) { var c = KJUR.crypto.MessageDigest;var o = KJUR.crypto.Util;var b = null;if (!f) { f = "sha1"; }if (typeof f === "string") { b = c.getCanonicalAlgName(f);l = c.getHashLength(b);f = function f(i) { return hextorstr(o.hashHex(rstrtohex(i), b)); }; }if (q.length + 2 * l + 2 > a) { throw "Message too long for RSA"; }var k = "", e;for (e = 0; e < a - q.length - 2 * l - 2; e += 1) { k += "\x00"; }var h = f("") + k + "\x01" + q;var g = new Array(l);new SecureRandom().nextBytes(g);var j = oaep_mgf1_arr(g, h.length, f);var p = [];for (e = 0; e < h.length; e += 1) { p[e] = h.charCodeAt(e) ^ j.charCodeAt(e); }var m = oaep_mgf1_arr(p, g.length, f);var d = [0];for (e = 0; e < g.length; e += 1) { d[e + 1] = g[e] ^ m.charCodeAt(e); }return new BigInteger(d.concat(p)); }function RSAKey() { this.n = null;this.e = 0;this.d = null;this.p = null;this.q = null;this.dmp1 = null;this.dmq1 = null;this.coeff = null; }function RSASetPublic(b, a) { this.isPublic = true;this.isPrivate = false;if (typeof b !== "string") { this.n = b;this.e = a; } else { if (b != null && a != null && b.length > 0 && a.length > 0) { this.n = parseBigInt(b, 16);this.e = parseInt(a, 16); } else { throw "Invalid RSA public key"; } } }function RSADoPublic(a) { return a.modPowInt(this.e, this.n); }function RSAEncrypt(d) { var a = pkcs1pad2(d, this.n.bitLength() + 7 >> 3);if (a == null) { return null; }var e = this.doPublic(a);if (e == null) { return null; }var b = e.toString(16);if ((b.length & 1) == 0) { return b; } else { return "0" + b; } }function RSAEncryptOAEP(f, e, b) { var a = oaep_pad(f, this.n.bitLength() + 7 >> 3, e, b);if (a == null) { return null; }var g = this.doPublic(a);if (g == null) { return null; }var d = g.toString(16);if ((d.length & 1) == 0) { return d; } else { return "0" + d; } }RSAKey.prototype.doPublic = RSADoPublic;RSAKey.prototype.setPublic = RSASetPublic;RSAKey.prototype.encrypt = RSAEncrypt;RSAKey.prototype.encryptOAEP = RSAEncryptOAEP;RSAKey.prototype.type = "RSA"; /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ */ function ECFieldElementFp(b, a) { this.x = a;this.q = b; }function feFpEquals(a) { if (a == this) { return true; }return this.q.equals(a.q) && this.x.equals(a.x); }function feFpToBigInteger() { return this.x; }function feFpNegate() { return new ECFieldElementFp(this.q, this.x.negate().mod(this.q)); }function feFpAdd(a) { return new ECFieldElementFp(this.q, this.x.add(a.toBigInteger()).mod(this.q)); }function feFpSubtract(a) { return new ECFieldElementFp(this.q, this.x.subtract(a.toBigInteger()).mod(this.q)); }function feFpMultiply(a) { return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger()).mod(this.q)); }function feFpSquare() { return new ECFieldElementFp(this.q, this.x.square().mod(this.q)); }function feFpDivide(a) { return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger().modInverse(this.q)).mod(this.q)); }ECFieldElementFp.prototype.equals = feFpEquals;ECFieldElementFp.prototype.toBigInteger = feFpToBigInteger;ECFieldElementFp.prototype.negate = feFpNegate;ECFieldElementFp.prototype.add = feFpAdd;ECFieldElementFp.prototype.subtract = feFpSubtract;ECFieldElementFp.prototype.multiply = feFpMultiply;ECFieldElementFp.prototype.square = feFpSquare;ECFieldElementFp.prototype.divide = feFpDivide;function ECPointFp(c, a, d, b) { this.curve = c;this.x = a;this.y = d;if (b == null) { this.z = BigInteger.ONE; } else { this.z = b; }this.zinv = null; }function pointFpGetX() { if (this.zinv == null) { this.zinv = this.z.modInverse(this.curve.q); }return this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q)); }function pointFpGetY() { if (this.zinv == null) { this.zinv = this.z.modInverse(this.curve.q); }return this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q)); }function pointFpEquals(a) { if (a == this) { return true; }if (this.isInfinity()) { return a.isInfinity(); }if (a.isInfinity()) { return this.isInfinity(); }var c, b;c = a.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(a.z)).mod(this.curve.q);if (!c.equals(BigInteger.ZERO)) { return false; }b = a.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(a.z)).mod(this.curve.q);return b.equals(BigInteger.ZERO); }function pointFpIsInfinity() { if (this.x == null && this.y == null) { return true; }return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO); }function pointFpNegate() { return new ECPointFp(this.curve, this.x, this.y.negate(), this.z); }function pointFpAdd(l) { if (this.isInfinity()) { return l; }if (l.isInfinity()) { return this; }var p = l.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(l.z)).mod(this.curve.q);var o = l.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(l.z)).mod(this.curve.q);if (BigInteger.ZERO.equals(o)) { if (BigInteger.ZERO.equals(p)) { return this.twice(); }return this.curve.getInfinity(); }var j = new BigInteger("3");var e = this.x.toBigInteger();var n = this.y.toBigInteger();var c = l.x.toBigInteger();var k = l.y.toBigInteger();var m = o.square();var i = m.multiply(o);var d = e.multiply(m);var g = p.square().multiply(this.z);var a = g.subtract(d.shiftLeft(1)).multiply(l.z).subtract(i).multiply(o).mod(this.curve.q);var h = d.multiply(j).multiply(p).subtract(n.multiply(i)).subtract(g.multiply(p)).multiply(l.z).add(p.multiply(i)).mod(this.curve.q);var f = i.multiply(this.z).multiply(l.z).mod(this.curve.q);return new ECPointFp(this.curve, this.curve.fromBigInteger(a), this.curve.fromBigInteger(h), f); }function pointFpTwice() { if (this.isInfinity()) { return this; }if (this.y.toBigInteger().signum() == 0) { return this.curve.getInfinity(); }var g = new BigInteger("3");var c = this.x.toBigInteger();var h = this.y.toBigInteger();var e = h.multiply(this.z);var j = e.multiply(h).mod(this.curve.q);var i = this.curve.a.toBigInteger();var k = c.square().multiply(g);if (!BigInteger.ZERO.equals(i)) { k = k.add(this.z.square().multiply(i)); }k = k.mod(this.curve.q);var b = k.square().subtract(c.shiftLeft(3).multiply(j)).shiftLeft(1).multiply(e).mod(this.curve.q);var f = k.multiply(g).multiply(c).subtract(j.shiftLeft(1)).shiftLeft(2).multiply(j).subtract(k.square().multiply(k)).mod(this.curve.q);var d = e.square().multiply(e).shiftLeft(3).mod(this.curve.q);return new ECPointFp(this.curve, this.curve.fromBigInteger(b), this.curve.fromBigInteger(f), d); }function pointFpMultiply(d) { if (this.isInfinity()) { return this; }if (d.signum() == 0) { return this.curve.getInfinity(); }var m = d;var l = m.multiply(new BigInteger("3"));var b = this.negate();var j = this;var q = this.curve.q.subtract(d);var o = q.multiply(new BigInteger("3"));var c = new ECPointFp(this.curve, this.x, this.y);var a = c.negate();var g;for (g = l.bitLength() - 2; g > 0; --g) { j = j.twice();var n = l.testBit(g);var f = m.testBit(g);if (n != f) { j = j.add(n ? this : b); } }for (g = o.bitLength() - 2; g > 0; --g) { c = c.twice();var p = o.testBit(g);var r = q.testBit(g);if (p != r) { c = c.add(p ? c : a); } }return j; }function pointFpMultiplyTwo(c, a, b) { var d;if (c.bitLength() > b.bitLength()) { d = c.bitLength() - 1; } else { d = b.bitLength() - 1; }var f = this.curve.getInfinity();var e = this.add(a);while (d >= 0) { f = f.twice();if (c.testBit(d)) { if (b.testBit(d)) { f = f.add(e); } else { f = f.add(this); } } else { if (b.testBit(d)) { f = f.add(a); } }--d; }return f; }ECPointFp.prototype.getX = pointFpGetX;ECPointFp.prototype.getY = pointFpGetY;ECPointFp.prototype.equals = pointFpEquals;ECPointFp.prototype.isInfinity = pointFpIsInfinity;ECPointFp.prototype.negate = pointFpNegate;ECPointFp.prototype.add = pointFpAdd;ECPointFp.prototype.twice = pointFpTwice;ECPointFp.prototype.multiply = pointFpMultiply;ECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo;function ECCurveFp(e, d, c) { this.q = e;this.a = this.fromBigInteger(d);this.b = this.fromBigInteger(c);this.infinity = new ECPointFp(this, null, null); }function curveFpGetQ() { return this.q; }function curveFpGetA() { return this.a; }function curveFpGetB() { return this.b; }function curveFpEquals(a) { if (a == this) { return true; }return this.q.equals(a.q) && this.a.equals(a.a) && this.b.equals(a.b); }function curveFpGetInfinity() { return this.infinity; }function curveFpFromBigInteger(a) { return new ECFieldElementFp(this.q, a); }function curveFpDecodePointHex(d) { switch (parseInt(d.substr(0, 2), 16)) {case 0: return this.infinity;case 2:case 3: return null;case 4:case 6:case 7: var a = (d.length - 2) / 2;var c = d.substr(2, a);var b = d.substr(a + 2, a);return new ECPointFp(this, this.fromBigInteger(new BigInteger(c, 16)), this.fromBigInteger(new BigInteger(b, 16)));default: return null;} }ECCurveFp.prototype.getQ = curveFpGetQ;ECCurveFp.prototype.getA = curveFpGetA;ECCurveFp.prototype.getB = curveFpGetB;ECCurveFp.prototype.equals = curveFpEquals;ECCurveFp.prototype.getInfinity = curveFpGetInfinity;ECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger;ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex; /*! (c) Stefan Thomas | https://github.com/bitcoinjs/bitcoinjs-lib */ ECFieldElementFp.prototype.getByteLength = function () { return Math.floor((this.toBigInteger().bitLength() + 7) / 8); };ECPointFp.prototype.getEncoded = function (c) { var d = function d(h, f) { var g = h.toByteArrayUnsigned();if (f < g.length) { g = g.slice(g.length - f); } else { while (f > g.length) { g.unshift(0); } }return g; };var a = this.getX().toBigInteger();var e = this.getY().toBigInteger();var b = d(a, 32);if (c) { if (e.isEven()) { b.unshift(2); } else { b.unshift(3); } } else { b.unshift(4);b = b.concat(d(e, 32)); }return b; };ECPointFp.decodeFrom = function (g, c) { var f = c[0];var e = c.length - 1;var d = c.slice(1, 1 + e / 2);var b = c.slice(1 + e / 2, 1 + e);d.unshift(0);b.unshift(0);var a = new BigInteger(d);var h = new BigInteger(b);return new ECPointFp(g, g.fromBigInteger(a), g.fromBigInteger(h)); };ECPointFp.decodeFromHex = function (g, c) { var f = c.substr(0, 2);var e = c.length - 2;var d = c.substr(2, e / 2);var b = c.substr(2 + e / 2, e / 2);var a = new BigInteger(d, 16);var h = new BigInteger(b, 16);return new ECPointFp(g, g.fromBigInteger(a), g.fromBigInteger(h)); };ECPointFp.prototype.add2D = function (c) { if (this.isInfinity()) { return c; }if (c.isInfinity()) { return this; }if (this.x.equals(c.x)) { if (this.y.equals(c.y)) { return this.twice(); }return this.curve.getInfinity(); }var g = c.x.subtract(this.x);var e = c.y.subtract(this.y);var a = e.divide(g);var d = a.square().subtract(this.x).subtract(c.x);var f = a.multiply(this.x.subtract(d)).subtract(this.y);return new ECPointFp(this.curve, d, f); };ECPointFp.prototype.twice2D = function () { if (this.isInfinity()) { return this; }if (this.y.toBigInteger().signum() == 0) { return this.curve.getInfinity(); }var b = this.curve.fromBigInteger(BigInteger.valueOf(2));var e = this.curve.fromBigInteger(BigInteger.valueOf(3));var a = this.x.square().multiply(e).add(this.curve.a).divide(this.y.multiply(b));var c = a.square().subtract(this.x.multiply(b));var d = a.multiply(this.x.subtract(c)).subtract(this.y);return new ECPointFp(this.curve, c, d); };ECPointFp.prototype.multiply2D = function (b) { if (this.isInfinity()) { return this; }if (b.signum() == 0) { return this.curve.getInfinity(); }var g = b;var f = g.multiply(new BigInteger("3"));var l = this.negate();var d = this;var c;for (c = f.bitLength() - 2; c > 0; --c) { d = d.twice();var a = f.testBit(c);var j = g.testBit(c);if (a != j) { d = d.add2D(a ? this : l); } }return d; };ECPointFp.prototype.isOnCurve = function () { var d = this.getX().toBigInteger();var i = this.getY().toBigInteger();var f = this.curve.getA().toBigInteger();var c = this.curve.getB().toBigInteger();var h = this.curve.getQ();var e = i.multiply(i).mod(h);var g = d.multiply(d).multiply(d).add(f.multiply(d)).add(c).mod(h);return e.equals(g); };ECPointFp.prototype.toString = function () { return "(" + this.getX().toBigInteger().toString() + "," + this.getY().toBigInteger().toString() + ")"; };ECPointFp.prototype.validate = function () { var c = this.curve.getQ();if (this.isInfinity()) { throw new Error("Point is at infinity."); }var a = this.getX().toBigInteger();var b = this.getY().toBigInteger();if (a.compareTo(BigInteger.ONE) < 0 || a.compareTo(c.subtract(BigInteger.ONE)) > 0) { throw new Error("x coordinate out of bounds"); }if (b.compareTo(BigInteger.ONE) < 0 || b.compareTo(c.subtract(BigInteger.ONE)) > 0) { throw new Error("y coordinate out of bounds"); }if (!this.isOnCurve()) { throw new Error("Point is not on the curve."); }if (this.multiply(c).isInfinity()) { throw new Error("Point is not a scalar multiple of G."); }return true; }; /*! Mike Samuel (c) 2009 | code.google.com/p/json-sans-eval */ var jsonParse = function () { var e = "(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)";var j = '(?:[^\\0-\\x08\\x0a-\\x1f"\\\\]|\\\\(?:["/\\\\bfnrt]|u[0-9A-Fa-f]{4}))';var i = '(?:"' + j + '*")';var d = new RegExp("(?:false|true|null|[\\{\\}\\[\\]]|" + e + "|" + i + ")", "g");var k = new RegExp("\\\\(?:([^u])|u(.{4}))", "g");var g = { '"': '"', "/": "/", "\\": "\\", b: "\b", f: "\f", n: "\n", r: "\r", t: "\t" };function h(l, m, n) { return m ? g[m] : String.fromCharCode(parseInt(n, 16)); }var c = new String("");var a = "\\";var f = { "{": Object, "[": Array };var b = Object.hasOwnProperty;return function (u, q) { var p = u.match(d);var x;var v = p[0];var l = false;if ("{" === v) { x = {}; } else { if ("[" === v) { x = []; } else { x = [];l = true; } }var t;var r = [x];for (var o = 1 - l, m = p.length; o < m; ++o) { v = p[o];var w;switch (v.charCodeAt(0)) {default: w = r[0];w[t || w.length] = +v;t = void 0;break;case 34: v = v.substring(1, v.length - 1);if (v.indexOf(a) !== -1) { v = v.replace(k, h); }w = r[0];if (!t) { if (w instanceof Array) { t = w.length; } else { t = v || c;break; } }w[t] = v;t = void 0;break;case 91: w = r[0];r.unshift(w[t || w.length] = []);t = void 0;break;case 93: r.shift();break;case 102: w = r[0];w[t || w.length] = false;t = void 0;break;case 110: w = r[0];w[t || w.length] = null;t = void 0;break;case 116: w = r[0];w[t || w.length] = true;t = void 0;break;case 123: w = r[0];r.unshift(w[t || w.length] = {});t = void 0;break;case 125: r.shift();break;} }if (l) { if (r.length !== 1) { throw new Error(); }x = x[0]; } else { if (r.length) { throw new Error(); } }if (q) { var s = function s(C, B) { var D = C[B];if (D && (typeof D === "undefined" ? "undefined" : _typeof(D)) === "object") { var n = null;for (var z in D) { if (b.call(D, z) && D !== C) { var y = s(D, z);if (y !== void 0) { D[z] = y; } else { if (!n) { n = []; }n.push(z); } } }if (n) { for (var A = n.length; --A >= 0;) { delete D[n[A]]; } } }return q.call(C, B, D); };x = s({ "": x }, ""); }return x; }; }(); if (typeof KJUR == "undefined" || !KJUR) { exports.KJUR = KJUR = {}; }if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) { KJUR.asn1 = {}; }KJUR.asn1.ASN1Util = new function () { this.integerToByteHex = function (a) { var b = a.toString(16);if (b.length % 2 == 1) { b = "0" + b; }return b; };this.bigIntToMinTwosComplementsHex = function (j) { var f = j.toString(16);if (f.substr(0, 1) != "-") { if (f.length % 2 == 1) { f = "0" + f; } else { if (!f.match(/^[0-7]/)) { f = "00" + f; } } } else { var a = f.substr(1);var e = a.length;if (e % 2 == 1) { e += 1; } else { if (!f.match(/^[0-7]/)) { e += 2; } }var g = "";for (var d = 0; d < e; d++) { g += "f"; }var c = new BigInteger(g, 16);var b = c.xor(j).add(BigInteger.ONE);f = b.toString(16).replace(/^-/, ""); }return f; };this.getPEMStringFromHex = function (a, b) { return hextopem(a, b); };this.newObject = function (k) { var F = KJUR, o = F.asn1, v = o.ASN1Object, B = o.DERBoolean, e = o.DERInteger, t = o.DERBitString, h = o.DEROctetString, x = o.DERNull, y = o.DERObjectIdentifier, m = o.DEREnumerated, g = o.DERUTF8String, f = o.DERNumericString, A = o.DERPrintableString, w = o.DERTeletexString, q = o.DERIA5String, E = o.DERUTCTime, j = o.DERGeneralizedTime, b = o.DERVisibleString, l = o.DERBMPString, n = o.DERSequence, c = o.DERSet, s = o.DERTaggedObject, p = o.ASN1Util.newObject;if (k instanceof o.ASN1Object) { return k; }var u = Object.keys(k);if (u.length != 1) { throw new Error("key of param shall be only one."); }var H = u[0];if (":asn1:bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:visstr:bmpstr:seq:set:tag:".indexOf(":" + H + ":") == -1) { throw new Error("undefined key: " + H); }if (H == "bool") { return new B(k[H]); }if (H == "int") { return new e(k[H]); }if (H == "bitstr") { return new t(k[H]); }if (H == "octstr") { return new h(k[H]); }if (H == "null") { return new x(k[H]); }if (H == "oid") { return new y(k[H]); }if (H == "enum") { return new m(k[H]); }if (H == "utf8str") { return new g(k[H]); }if (H == "numstr") { return new f(k[H]); }if (H == "prnstr") { return new A(k[H]); }if (H == "telstr") { return new w(k[H]); }if (H == "ia5str") { return new q(k[H]); }if (H == "utctime") { return new E(k[H]); }if (H == "gentime") { return new j(k[H]); }if (H == "visstr") { return new b(k[H]); }if (H == "bmpstr") { return new l(k[H]); }if (H == "asn1") { return new v(k[H]); }if (H == "seq") { var d = k[H];var G = [];for (var z = 0; z < d.length; z++) { var D = p(d[z]);G.push(D); }return new n({ array: G }); }if (H == "set") { var d = k[H];var G = [];for (var z = 0; z < d.length; z++) { var D = p(d[z]);G.push(D); }return new c({ array: G }); }if (H == "tag") { var C = k[H];if (Object.prototype.toString.call(C) === "[object Array]" && C.length == 3) { var r = p(C[2]);return new s({ tag: C[0], explicit: C[1], obj: r }); } else { return new s(C); } } };this.jsonToASN1HEX = function (b) { var a = this.newObject(b);return a.getEncodedHex(); }; }();KJUR.asn1.ASN1Util.oidHexToInt = function (a) { var j = "";var k = parseInt(a.substr(0, 2), 16);var d = Math.floor(k / 40);var c = k % 40;var j = d + "." + c;var e = "";for (var f = 2; f < a.length; f += 2) { var g = parseInt(a.substr(f, 2), 16);var h = ("00000000" + g.toString(2)).slice(-8);e = e + h.substr(1, 7);if (h.substr(0, 1) == "0") { var b = new BigInteger(e, 2);j = j + "." + b.toString(10);e = ""; } }return j; };KJUR.asn1.ASN1Util.oidIntToHex = function (f) { var e = function e(a) { var k = a.toString(16);if (k.length == 1) { k = "0" + k; }return k; };var d = function d(o) { var n = "";var k = new BigInteger(o, 10);var a = k.toString(2);var l = 7 - a.length % 7;if (l == 7) { l = 0; }var q = "";for (var m = 0; m < l; m++) { q += "0"; }a = q + a;for (var m = 0; m < a.length - 1; m += 7) { var p = a.substr(m, 7);if (m != a.length - 7) { p = "1" + p; }n += e(parseInt(p, 2)); }return n; };if (!f.match(/^[0-9.]+$/)) { throw "malformed oid string: " + f; }var g = "";var b = f.split(".");var j = parseInt(b[0]) * 40 + parseInt(b[1]);g += e(j);b.splice(0, 2);for (var c = 0; c < b.length; c++) { g += d(b[c]); }return g; };KJUR.asn1.ASN1Object = function (e) { var c = true;var b = null;var d = "00";var f = "00";var a = "";this.params = null;this.getLengthHexFromValue = function () { if (typeof this.hV == "undefined" || this.hV == null) { throw new Error("this.hV is null or undefined"); }if (this.hV.length % 2 == 1) { throw new Error("value hex must be even length: n=" + a.length + ",v=" + this.hV); }var j = this.hV.length / 2;var i = j.toString(16);if (i.length % 2 == 1) { i = "0" + i; }if (j < 128) { return i; } else { var h = i.length / 2;if (h > 15) { throw "ASN.1 length too long to represent by 8x: n = " + j.toString(16); }var g = 128 + h;return g.toString(16) + i; } };this.getEncodedHex = function () { if (this.hTLV == null || this.isModified) { this.hV = this.getFreshValueHex();this.hL = this.getLengthHexFromValue();this.hTLV = this.hT + this.hL + this.hV;this.isModified = false; }return this.hTLV; };this.getValueHex = function () { this.getEncodedHex();return this.hV; };this.getFreshValueHex = function () { return ""; };this.setByParam = function (g) { this.params = g; };if (e != undefined) { if (e.tlv != undefined) { this.hTLV = e.tlv;this.isModified = false; } } };KJUR.asn1.DERAbstractString = function (c) { KJUR.asn1.DERAbstractString.superclass.constructor.call(this);var b = null;var a = null;this.getString = function () { return this.s; };this.setString = function (d) { this.hTLV = null;this.isModified = true;this.s = d;this.hV = utf8tohex(this.s).toLowerCase(); };this.setStringHex = function (d) { this.hTLV = null;this.isModified = true;this.s = null;this.hV = d; };this.getFreshValueHex = function () { return this.hV; };if (typeof c != "undefined") { if (typeof c == "string") { this.setString(c); } else { if (typeof c.str != "undefined") { this.setString(c.str); } else { if (typeof c.hex != "undefined") { this.setStringHex(c.hex); } } } } };extendClass(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);KJUR.asn1.DERAbstractTime = function (c) { KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);var b = null;var a = null;this.localDateToUTC = function (g) { var e = g.getTime() + g.getTimezoneOffset() * 60000;var f = new Date(e);return f; };this.formatDate = function (m, o, e) { var g = this.zeroPadding;var n = this.localDateToUTC(m);var p = String(n.getFullYear());if (o == "utc") { p = p.substr(2, 2); }var l = g(String(n.getMonth() + 1), 2);var q = g(String(n.getDate()), 2);var h = g(String(n.getHours()), 2);var i = g(String(n.getMinutes()), 2);var j = g(String(n.getSeconds()), 2);var r = p + l + q + h + i + j;if (e === true) { var f = n.getMilliseconds();if (f != 0) { var k = g(String(f), 3);k = k.replace(/[0]+$/, "");r = r + "." + k; } }return r + "Z"; };this.zeroPadding = function (e, d) { if (e.length >= d) { return e; }return new Array(d - e.length + 1).join("0") + e; };this.getString = function () { return this.s; };this.setString = function (d) { this.hTLV = null;this.isModified = true;this.s = d;this.hV = stohex(d); };this.setByDateValue = function (h, j, e, d, f, g) { var i = new Date(Date.UTC(h, j - 1, e, d, f, g, 0));this.setByDate(i); };this.getFreshValueHex = function () { return this.hV; }; };extendClass(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);KJUR.asn1.DERAbstractStructured = function (b) { KJUR.asn1.DERAbstractString.superclass.constructor.call(this);var a = null;this.setByASN1ObjectArray = function (c) { this.hTLV = null;this.isModified = true;this.asn1Array = c; };this.appendASN1Object = function (c) { this.hTLV = null;this.isModified = true;this.asn1Array.push(c); };this.asn1Array = new Array();if (typeof b != "undefined") { if (typeof b.array != "undefined") { this.asn1Array = b.array; } } };extendClass(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);KJUR.asn1.DERBoolean = function (a) { KJUR.asn1.DERBoolean.superclass.constructor.call(this);this.hT = "01";if (a == false) { this.hTLV = "010100"; } else { this.hTLV = "0101ff"; } };extendClass(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);KJUR.asn1.DERInteger = function (a) { KJUR.asn1.DERInteger.superclass.constructor.call(this);this.hT = "02";this.setByBigInteger = function (b) { this.hTLV = null;this.isModified = true;this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(b); };this.setByInteger = function (c) { var b = new BigInteger(String(c), 10);this.setByBigInteger(b); };this.setValueHex = function (b) { this.hV = b; };this.getFreshValueHex = function () { return this.hV; };if (typeof a != "undefined") { if (typeof a.bigint != "undefined") { this.setByBigInteger(a.bigint); } else { if (typeof a["int"] != "undefined") { this.setByInteger(a["int"]); } else { if (typeof a == "number") { this.setByInteger(a); } else { if (typeof a.hex != "undefined") { this.setValueHex(a.hex); } } } } } };extendClass(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);KJUR.asn1.DERBitString = function (b) { if (b !== undefined && typeof b.obj !== "undefined") { var a = KJUR.asn1.ASN1Util.newObject(b.obj);b.hex = "00" + a.getEncodedHex(); }KJUR.asn1.DERBitString.superclass.constructor.call(this);this.hT = "03";this.setHexValueIncludingUnusedBits = function (c) { this.hTLV = null;this.isModified = true;this.hV = c; };this.setUnusedBitsAndHexValue = function (c, e) { if (c < 0 || 7 < c) { throw "unused bits shall be from 0 to 7: u = " + c; }var d = "0" + c;this.hTLV = null;this.isModified = true;this.hV = d + e; };this.setByBinaryString = function (e) { e = e.replace(/0+$/, "");var f = 8 - e.length % 8;if (f == 8) { f = 0; }for (var g = 0; g <= f; g++) { e += "0"; }var j = "";for (var g = 0; g < e.length - 1; g += 8) { var d = e.substr(g, 8);var c = parseInt(d, 2).toString(16);if (c.length == 1) { c = "0" + c; }j += c; }this.hTLV = null;this.isModified = true;this.hV = "0" + f + j; };this.setByBooleanArray = function (e) { var d = "";for (var c = 0; c < e.length; c++) { if (e[c] == true) { d += "1"; } else { d += "0"; } }this.setByBinaryString(d); };this.newFalseArray = function (e) { var c = new Array(e);for (var d = 0; d < e; d++) { c[d] = false; }return c; };this.getFreshValueHex = function () { return this.hV; };if (typeof b != "undefined") { if (typeof b == "string" && b.toLowerCase().match(/^[0-9a-f]+$/)) { this.setHexValueIncludingUnusedBits(b); } else { if (typeof b.hex != "undefined") { this.setHexValueIncludingUnusedBits(b.hex); } else { if (typeof b.bin != "undefined") { this.setByBinaryString(b.bin); } else { if (typeof b.array != "undefined") { this.setByBooleanArray(b.array); } } } } } };extendClass(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);KJUR.asn1.DEROctetString = function (b) { if (b !== undefined && typeof b.obj !== "undefined") { var a = KJUR.asn1.ASN1Util.newObject(b.obj);b.hex = a.getEncodedHex(); }KJUR.asn1.DEROctetString.superclass.constructor.call(this, b);this.hT = "04"; };extendClass(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);KJUR.asn1.DERNull = function () { KJUR.asn1.DERNull.superclass.constructor.call(this);this.hT = "05";this.hTLV = "0500"; };extendClass(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);KJUR.asn1.DERObjectIdentifier = function (a) { KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);this.hT = "06";this.setValueHex = function (b) { this.hTLV = null;this.isModified = true;this.s = null;this.hV = b; };this.setValueOidString = function (b) { var c = oidtohex(b);if (c == null) { throw new Error("malformed oid string: " + b); }this.hTLV = null;this.isModified = true;this.s = null;this.hV = c; };this.setValueName = function (c) { var b = KJUR.asn1.x509.OID.name2oid(c);if (b !== "") { this.setValueOidString(b); } else { throw new Error("DERObjectIdentifier oidName undefined: " + c); } };this.setValueNameOrOid = function (b) { if (b.match(/^[0-2].[0-9.]+$/)) { this.setValueOidString(b); } else { this.setValueName(b); } };this.getFreshValueHex = function () { return this.hV; };this.setByParam = function (b) { if (typeof b === "string") { this.setValueNameOrOid(b); } else { if (b.oid !== undefined) { this.setValueNameOrOid(b.oid); } else { if (b.name !== undefined) { this.setValueNameOrOid(b.name); } else { if (b.hex !== undefined) { this.setValueHex(b.hex); } } } } };if (a !== undefined) { this.setByParam(a); } };extendClass(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);KJUR.asn1.DEREnumerated = function (a) { KJUR.asn1.DEREnumerated.superclass.constructor.call(this);this.hT = "0a";this.setByBigInteger = function (b) { this.hTLV = null;this.isModified = true;this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(b); };this.setByInteger = function (c) { var b = new BigInteger(String(c), 10);this.setByBigInteger(b); };this.setValueHex = function (b) { this.hV = b; };this.getFreshValueHex = function () { return this.hV; };if (typeof a != "undefined") { if (typeof a["int"] != "undefined") { this.setByInteger(a["int"]); } else { if (typeof a == "number") { this.setByInteger(a); } else { if (typeof a.hex != "undefined") { this.setValueHex(a.hex); } } } } };extendClass(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);KJUR.asn1.DERUTF8String = function (a) { KJUR.asn1.DERUTF8String.superclass.constructor.call(this, a);this.hT = "0c"; };extendClass(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);KJUR.asn1.DERNumericString = function (a) { KJUR.asn1.DERNumericString.superclass.constructor.call(this, a);this.hT = "12"; };extendClass(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);KJUR.asn1.DERPrintableString = function (a) { KJUR.asn1.DERPrintableString.superclass.constructor.call(this, a);this.hT = "13"; };extendClass(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);KJUR.asn1.DERTeletexString = function (a) { KJUR.asn1.DERTeletexString.superclass.constructor.call(this, a);this.hT = "14"; };extendClass(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);KJUR.asn1.DERIA5String = function (a) { KJUR.asn1.DERIA5String.superclass.constructor.call(this, a);this.hT = "16"; };extendClass(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);KJUR.asn1.DERVisibleString = function (a) { KJUR.asn1.DERIA5String.superclass.constructor.call(this, a);this.hT = "1a"; };extendClass(KJUR.asn1.DERVisibleString, KJUR.asn1.DERAbstractString);KJUR.asn1.DERBMPString = function (a) { KJUR.asn1.DERBMPString.superclass.constructor.call(this, a);this.hT = "1e"; };extendClass(KJUR.asn1.DERBMPString, KJUR.asn1.DERAbstractString);KJUR.asn1.DERUTCTime = function (a) { KJUR.asn1.DERUTCTime.superclass.constructor.call(this, a);this.hT = "17";this.setByDate = function (b) { this.hTLV = null;this.isModified = true;this.date = b;this.s = this.formatDate(this.date, "utc");this.hV = stohex(this.s); };this.getFreshValueHex = function () { if (typeof this.date == "undefined" && typeof this.s == "undefined") { this.date = new Date();this.s = this.formatDate(this.date, "utc");this.hV = stohex(this.s); }return this.hV; };if (a !== undefined) { if (a.str !== undefined) { this.setString(a.str); } else { if (typeof a == "string" && a.match(/^[0-9]{12}Z$/)) { this.setString(a); } else { if (a.hex !== undefined) { this.setStringHex(a.hex); } else { if (a.date !== undefined) { this.setByDate(a.date); } } } } } };extendClass(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);KJUR.asn1.DERGeneralizedTime = function (a) { KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, a);this.hT = "18";this.withMillis = false;this.setByDate = function (b) { this.hTLV = null;this.isModified = true;this.date = b;this.s = this.formatDate(this.date, "gen", this.withMillis);this.hV = stohex(this.s); };this.getFreshValueHex = function () { if (this.date === undefined && this.s === undefined) { this.date = new Date();this.s = this.formatDate(this.date, "gen", this.withMillis);this.hV = stohex(this.s); }return this.hV; };if (a !== undefined) { if (a.str !== undefined) { this.setString(a.str); } else { if (typeof a == "string" && a.match(/^[0-9]{14}Z$/)) { this.setString(a); } else { if (a.hex !== undefined) { this.setStringHex(a.hex); } else { if (a.date !== undefined) { this.setByDate(a.date); } } } }if (a.millis === true) { this.withMillis = true; } } };extendClass(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);KJUR.asn1.DERSequence = function (a) { KJUR.asn1.DERSequence.superclass.constructor.call(this, a);this.hT = "30";this.getFreshValueHex = function () { var c = "";for (var b = 0; b < this.asn1Array.length; b++) { var d = this.asn1Array[b];c += d.getEncodedHex(); }this.hV = c;return this.hV; }; };extendClass(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);KJUR.asn1.DERSet = function (a) { KJUR.asn1.DERSet.superclass.constructor.call(this, a);this.hT = "31";this.sortFlag = true;this.getFreshValueHex = function () { var b = new Array();for (var c = 0; c < this.asn1Array.length; c++) { var d = this.asn1Array[c];b.push(d.getEncodedHex()); }if (this.sortFlag == true) { b.sort(); }this.hV = b.join("");return this.hV; };if (typeof a != "undefined") { if (typeof a.sortflag != "undefined" && a.sortflag == false) { this.sortFlag = false; } } };extendClass(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);KJUR.asn1.DERTaggedObject = function (b) { KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);var a = KJUR.asn1;this.hT = "a0";this.hV = "";this.isExplicit = true;this.asn1Object = null;this.setASN1Object = function (c, d, e) { this.hT = d;this.isExplicit = c;this.asn1Object = e;if (this.isExplicit) { this.hV = this.asn1Object.getEncodedHex();this.hTLV = null;this.isModified = true; } else { this.hV = null;this.hTLV = e.getEncodedHex();this.hTLV = this.hTLV.replace(/^../, d);this.isModified = false; } };this.getFreshValueHex = function () { return this.hV; };this.setByParam = function (c) { if (c.tag != undefined) { this.hT = c.tag; }if (c.explicit != undefined) { this.isExplicit = c.explicit; }if (c.tage != undefined) { this.hT = c.tage;this.isExplicit = true; }if (c.tagi != undefined) { this.hT = c.tagi;this.isExplicit = false; }if (c.obj != undefined) { if (c.obj instanceof a.ASN1Object) { this.asn1Object = c.obj;this.setASN1Object(this.isExplicit, this.hT, this.asn1Object); } else { if (_typeof(c.obj) == "object") { this.asn1Object = a.ASN1Util.newObject(c.obj);this.setASN1Object(this.isExplicit, this.hT, this.asn1Object); } } } };if (b != undefined) { this.setByParam(b); } };extendClass(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object); var ASN1HEX = new function () {}();ASN1HEX.getLblen = function (c, a) { if (c.substr(a + 2, 1) != "8") { return 1; }var b = parseInt(c.substr(a + 3, 1));if (b == 0) { return -1; }if (0 < b && b < 10) { return b + 1; }return -2; };ASN1HEX.getL = function (c, b) { var a = ASN1HEX.getLblen(c, b);if (a < 1) { return ""; }return c.substr(b + 2, a * 2); };ASN1HEX.getVblen = function (d, a) { var c, b;c = ASN1HEX.getL(d, a);if (c == "") { return -1; }if (c.substr(0, 1) === "8") { b = new BigInteger(c.substr(2), 16); } else { b = new BigInteger(c, 16); }return b.intValue(); };ASN1HEX.getVidx = function (c, b) { var a = ASN1HEX.getLblen(c, b);if (a < 0) { return a; }return b + (a + 1) * 2; };ASN1HEX.getV = function (d, a) { var c = ASN1HEX.getVidx(d, a);var b = ASN1HEX.getVblen(d, a);return d.substr(c, b * 2); };ASN1HEX.getTLV = function (b, a) { return b.substr(a, 2) + ASN1HEX.getL(b, a) + ASN1HEX.getV(b, a); };ASN1HEX.getTLVblen = function (b, a) { return 2 + ASN1HEX.getLblen(b, a) * 2 + ASN1HEX.getVblen(b, a) * 2; };ASN1HEX.getNextSiblingIdx = function (d, a) { var c = ASN1HEX.getVidx(d, a);var b = ASN1HEX.getVblen(d, a);return c + b * 2; };ASN1HEX.getChildIdx = function (e, k) { var l = ASN1HEX;var j = [];var c, f, g;c = l.getVidx(e, k);f = l.getVblen(e, k) * 2;if (e.substr(k, 2) == "03") { c += 2;f -= 2; }g = 0;var d = c;while (g <= f) { var b = l.getTLVblen(e, d);g += b;if (g <= f) { j.push(d); }d += b;if (g >= f) { break; } }return j; };ASN1HEX.getNthChildIdx = function (d, b, e) { var c = ASN1HEX.getChildIdx(d, b);return c[e]; };ASN1HEX.getIdxbyList = function (e, d, c, i) { var g = ASN1HEX;var f, b;if (c.length == 0) { if (i !== undefined) { if (e.substr(d, 2) !== i) { return -1; } }return d; }f = c.shift();b = g.getChildIdx(e, d);if (f >= b.length) { return -1; }return g.getIdxbyList(e, b[f], c, i); };ASN1HEX.getIdxbyListEx = function (f, k, b, g) { var m = ASN1HEX;var d, l;if (b.length == 0) { if (g !== undefined) { if (f.substr(k, 2) !== g) { return -1; } }return k; }d = b.shift();l = m.getChildIdx(f, k);var j = 0;for (var e = 0; e < l.length; e++) { var c = f.substr(l[e], 2);if (typeof d == "number" && !m.isContextTag(c) && j == d || typeof d == "string" && m.isContextTag(c, d)) { return m.getIdxbyListEx(f, l[e], b, g); }if (!m.isContextTag(c)) { j++; } }return -1; };ASN1HEX.getTLVbyList = function (d, c, b, f) { var e = ASN1HEX;var a = e.getIdxbyList(d, c, b, f);if (a == -1) { return null; }if (a >= d.length) { return null; }return e.getTLV(d, a); };ASN1HEX.getTLVbyListEx = function (d, c, b, f) { var e = ASN1HEX;var a = e.getIdxbyListEx(d, c, b, f);if (a == -1) { return null; }return e.getTLV(d, a); };ASN1HEX.getVbyList = function (e, c, b, g, i) { var f = ASN1HEX;var a, d;a = f.getIdxbyList(e, c, b, g);if (a == -1) { return null; }if (a >= e.length) { return null; }d = f.getV(e, a);if (i === true) { d = d.substr(2); }return d; };ASN1HEX.getVbyListEx = function (b, e, a, d, f) { var j = ASN1HEX;var g, c, i;g = j.getIdxbyListEx(b, e, a, d);if (g == -1) { return null; }i = j.getV(b, g);if (b.substr(g, 2) == "03" && f !== false) { i = i.substr(2); }return i; };ASN1HEX.getInt = function (e, b, f) { if (f == undefined) { f = -1; }try { var c = e.substr(b, 2);if (c != "02" && c != "03") { return f; }var a = ASN1HEX.getV(e, b);if (c == "02") { return parseInt(a, 16); } else { return bitstrtoint(a); } } catch (d) { return f; } };ASN1HEX.getOID = function (c, a, d) { if (d == undefined) { d = null; }try { if (c.substr(a, 2) != "06") { return d; }var e = ASN1HEX.getV(c, a);return hextooid(e); } catch (b) { return d; } };ASN1HEX.getOIDName = function (d, a, f) { if (f == undefined) { f = null; }try { var e = ASN1HEX.getOID(d, a, f);if (e == f) { return f; }var b = KJUR.asn1.x509.OID.oid2name(e);if (b == "") { return e; }return b; } catch (c) { return f; } };ASN1HEX.getString = function (d, b, e) { if (e == undefined) { e = null; }try { var a = ASN1HEX.getV(d, b);return hextorstr(a); } catch (c) { return e; } };ASN1HEX.hextooidstr = function (e) { var h = function h(b, a) { if (b.length >= a) { return b; }return new Array(a - b.length + 1).join("0") + b; };var l = [];var o = e.substr(0, 2);var f = parseInt(o, 16);l[0] = new String(Math.floor(f / 40));l[1] = new String(f % 40);var m = e.substr(2);var k = [];for (var g = 0; g < m.length / 2; g++) { k.push(parseInt(m.substr(g * 2, 2), 16)); }var j = [];var d = "";for (var g = 0; g < k.length; g++) { if (k[g] & 128) { d = d + h((k[g] & 127).toString(2), 7); } else { d = d + h((k[g] & 127).toString(2), 7);j.push(new String(parseInt(d, 2)));d = ""; } }var n = l.join(".");if (j.length > 0) { n = n + "." + j.join("."); }return n; };ASN1HEX.dump = function (t, c, l, g) { var p = ASN1HEX;var j = p.getV;var y = p.dump;var w = p.getChildIdx;var e = t;if (t instanceof KJUR.asn1.ASN1Object) { e = t.getEncodedHex(); }var q = function q(A, i) { if (A.length <= i * 2) { return A; } else { var v = A.substr(0, i) + "..(total " + A.length / 2 + "bytes).." + A.substr(A.length - i, i);return v; } };if (c === undefined) { c = { ommit_long_octet: 32 }; }if (l === undefined) { l = 0; }if (g === undefined) { g = ""; }var x = c.ommit_long_octet;var z = e.substr(l, 2);if (z == "01") { var h = j(e, l);if (h == "00") { return g + "BOOLEAN FALSE\n"; } else { return g + "BOOLEAN TRUE\n"; } }if (z == "02") { var h = j(e, l);return g + "INTEGER " + q(h, x) + "\n"; }if (z == "03") { var h = j(e, l);if (p.isASN1HEX(h.substr(2))) { var k = g + "BITSTRING, encapsulates\n";k = k + y(h.substr(2), c, 0, g + " ");return k; } else { return g + "BITSTRING " + q(h, x) + "\n"; } }if (z == "04") { var h = j(e, l);if (p.isASN1HEX(h)) { var k = g + "OCTETSTRING, encapsulates\n";k = k + y(h, c, 0, g + " ");return k; } else { return g + "OCTETSTRING " + q(h, x) + "\n"; } }if (z == "05") { return g + "NULL\n"; }if (z == "06") { var m = j(e, l);var b = KJUR.asn1.ASN1Util.oidHexToInt(m);var o = KJUR.asn1.x509.OID.oid2name(b);var a = b.replace(/\./g, " ");if (o != "") { return g + "ObjectIdentifier " + o + " (" + a + ")\n"; } else { return g + "ObjectIdentifier (" + a + ")\n"; } }if (z == "0a") { return g + "ENUMERATED " + parseInt(j(e, l)) + "\n"; }if (z == "0c") { return g + "UTF8String '" + hextoutf8(j(e, l)) + "'\n"; }if (z == "13") { return g + "PrintableString '" + hextoutf8(j(e, l)) + "'\n"; }if (z == "14") { return g + "TeletexString '" + hextoutf8(j(e, l)) + "'\n"; }if (z == "16") { return g + "IA5String '" + hextoutf8(j(e, l)) + "'\n"; }if (z == "17") { return g + "UTCTime " + hextoutf8(j(e, l)) + "\n"; }if (z == "18") { return g + "GeneralizedTime " + hextoutf8(j(e, l)) + "\n"; }if (z == "1a") { return g + "VisualString '" + hextoutf8(j(e, l)) + "'\n"; }if (z == "1e") { return g + "BMPString '" + ucs2hextoutf8(j(e, l)) + "'\n"; }if (z == "30") { if (e.substr(l, 4) == "3000") { return g + "SEQUENCE {}\n"; }var k = g + "SEQUENCE\n";var d = w(e, l);var f = c;if ((d.length == 2 || d.length == 3) && e.substr(d[0], 2) == "06" && e.substr(d[d.length - 1], 2) == "04") { var o = p.oidname(j(e, d[0]));var r = JSON.parse(JSON.stringify(c));r.x509ExtName = o;f = r; }for (var u = 0; u < d.length; u++) { k = k + y(e, f, d[u], g + " "); }return k; }if (z == "31") { var k = g + "SET\n";var d = w(e, l);for (var u = 0; u < d.length; u++) { k = k + y(e, c, d[u], g + " "); }return k; }var z = parseInt(z, 16);if ((z & 128) != 0) { var n = z & 31;if ((z & 32) != 0) { var k = g + "[" + n + "]\n";var d = w(e, l);for (var u = 0; u < d.length; u++) { k = k + y(e, c, d[u], g + " "); }return k; } else { var h = j(e, l);if (ASN1HEX.isASN1HEX(h)) { var k = g + "[" + n + "]\n";k = k + y(h, c, 0, g + " ");return k; } else { if (h.substr(0, 8) == "68747470") { h = hextoutf8(h); } else { if (c.x509ExtName === "subjectAltName" && n == 2) { h = hextoutf8(h); } } }var k = g + "[" + n + "] " + h + "\n";return k; } }return g + "UNKNOWN(" + z + ") " + j(e, l) + "\n"; };ASN1HEX.isContextTag = function (c, b) { c = c.toLowerCase();var f, e;try { f = parseInt(c, 16); } catch (d) { return -1; }if (b === undefined) { if ((f & 192) == 128) { return true; } else { return false; } }try { var a = b.match(/^\[[0-9]+\]$/);if (a == null) { return false; }e = parseInt(b.substr(1, b.length - 1), 10);if (e > 31) { return false; }if ((f & 192) == 128 && (f & 31) == e) { return true; }return false; } catch (d) { return false; } };ASN1HEX.isASN1HEX = function (e) { var d = ASN1HEX;if (e.length % 2 == 1) { return false; }var c = d.getVblen(e, 0);var b = e.substr(0, 2);var f = d.getL(e, 0);var a = e.length - b.length - f.length;if (a == c * 2) { return true; }return false; };ASN1HEX.checkStrictDER = function (g, o, d, c, r) { var s = ASN1HEX;if (d === undefined) { if (typeof g != "string") { throw new Error("not hex string"); }g = g.toLowerCase();if (!KJUR.lang.String.isHex(g)) { throw new Error("not hex string"); }d = g.length;c = g.length / 2;if (c < 128) { r = 1; } else { r = Math.ceil(c.toString(16)) + 1; } }var k = s.getL(g, o);if (k.length > r * 2) { throw new Error("L of TLV too long: idx=" + o); }var n = s.getVblen(g, o);if (n > c) { throw new Error("value of L too long than hex: idx=" + o); }var q = s.getTLV(g, o);var f = q.length - 2 - s.getL(g, o).length;if (f !== n * 2) { throw new Error("V string length and L's value not the same:" + f + "/" + n * 2); }if (o === 0) { if (g.length != q.length) { throw new Error("total length and TLV length unmatch:" + g.length + "!=" + q.length); } }var b = g.substr(o, 2);if (b === "02") { var a = s.getVidx(g, o);if (g.substr(a, 2) == "00" && g.charCodeAt(a + 2) < 56) { throw new Error("not least zeros for DER INTEGER"); } }if (parseInt(b, 16) & 32) { var p = s.getVblen(g, o);var m = 0;var l = s.getChildIdx(g, o);for (var e = 0; e < l.length; e++) { var j = s.getTLV(g, l[e]);m += j.length;s.checkStrictDER(g, l[e], d, c, r); }if (p * 2 != m) { throw new Error("sum of children's TLV length and L unmatch: " + p * 2 + "!=" + m); } } };ASN1HEX.oidname = function (a) { var c = KJUR.asn1;if (KJUR.lang.String.isHex(a)) { a = c.ASN1Util.oidHexToInt(a); }var b = c.x509.OID.oid2name(a);if (b === "") { b = a; }return b; }; var KJUR;if (typeof KJUR == "undefined" || !KJUR) { exports.KJUR = KJUR = {}; }if (typeof KJUR.lang == "undefined" || !KJUR.lang) { KJUR.lang = {}; }KJUR.lang.String = function () {};function Base64x() {}function stoBA(d) { var b = new Array();for (var c = 0; c < d.length; c++) { b[c] = d.charCodeAt(c); }return b; }function BAtos(b) { var d = "";for (var c = 0; c < b.length; c++) { d = d + String.fromCharCode(b[c]); }return d; }function BAtohex(b) { var e = "";for (var d = 0; d < b.length; d++) { var c = b[d].toString(16);if (c.length == 1) { c = "0" + c; }e = e + c; }return e; }function stohex(a) { return BAtohex(stoBA(a)); }function stob64(a) { return hex2b64(stohex(a)); }function stob64u(a) { return b64tob64u(hex2b64(stohex(a))); }function b64utos(a) { return BAtos(b64toBA(b64utob64(a))); }function b64tob64u(a) { a = a.replace(/\=/g, "");a = a.replace(/\+/g, "-");a = a.replace(/\//g, "_");return a; }function b64utob64(a) { if (a.length % 4 == 2) { a = a + "=="; } else { if (a.length % 4 == 3) { a = a + "="; } }a = a.replace(/-/g, "+");a = a.replace(/_/g, "/");return a; }function hextob64u(a) { if (a.length % 2 == 1) { a = "0" + a; }return b64tob64u(hex2b64(a)); }function b64utohex(a) { return b64tohex(b64utob64(a)); }var utf8tob64u, b64utoutf8;if (typeof Buffer === "function") { exports.utf8tob64u = utf8tob64u = function utf8tob64u(a) { return b64tob64u(Buffer.from(a, "utf8").toString("base64")); };exports.b64utoutf8 = b64utoutf8 = function b64utoutf8(a) { return Buffer.from(b64utob64(a), "base64").toString("utf8"); }; } else { exports.utf8tob64u = utf8tob64u = function utf8tob64u(a) { return hextob64u(uricmptohex(encodeURIComponentAll(a))); };exports.b64utoutf8 = b64utoutf8 = function b64utoutf8(a) { return decodeURIComponent(hextouricmp(b64utohex(a))); }; }function utf8tob64(a) { return hex2b64(uricmptohex(encodeURIComponentAll(a))); }function b64toutf8(a) { return decodeURIComponent(hextouricmp(b64tohex(a))); }function utf8tohex(a) { return uricmptohex(encodeURIComponentAll(a)); }function hextoutf8(a) { return decodeURIComponent(hextouricmp(a)); }function hextorstr(c) { var b = "";for (var a = 0; a < c.length - 1; a += 2) { b += String.fromCharCode(parseInt(c.substr(a, 2), 16)); }return b; }function rstrtohex(c) { var a = "";for (var b = 0; b < c.length; b++) { a += ("0" + c.charCodeAt(b).toString(16)).slice(-2); }return a; }function hextob64(a) { return hex2b64(a); }function hextob64nl(b) { var a = hextob64(b);var c = a.replace(/(.{64})/g, "$1\r\n");c = c.replace(/\r\n$/, "");return c; }function b64nltohex(b) { var a = b.replace(/[^0-9A-Za-z\/+=]*/g, "");var c = b64tohex(a);return c; }function hextopem(a, b) { var c = hextob64nl(a);return "-----BEGIN " + b + "-----\r\n" + c + "\r\n-----END " + b + "-----\r\n"; }function pemtohex(a, b) { if (a.indexOf("-----BEGIN ") == -1) { throw "can't find PEM header: " + b; }if (b !== undefined) { a = a.replace(new RegExp("^[^]*-----BEGIN " + b + "-----"), "");a = a.replace(new RegExp("-----END " + b + "-----[^]*$"), ""); } else { a = a.replace(/^[^]*-----BEGIN [^-]+-----/, "");a = a.replace(/-----END [^-]+-----[^]*$/, ""); }return b64nltohex(a); }function hextoArrayBuffer(d) { if (d.length % 2 != 0) { throw "input is not even length"; }if (d.match(/^[0-9A-Fa-f]+$/) == null) { throw "input is not hexadecimal"; }var b = new ArrayBuffer(d.length / 2);var a = new DataView(b);for (var c = 0; c < d.length / 2; c++) { a.setUint8(c, parseInt(d.substr(c * 2, 2), 16)); }return b; }function ArrayBuffertohex(b) { var d = "";var a = new DataView(b);for (var c = 0; c < b.byteLength; c++) { d += ("00" + a.getUint8(c).toString(16)).slice(-2); }return d; }function zulutomsec(n) { var l, j, m, e, f, i, b, k;var a, h, g, c;c = n.match(/^(\d{2}|\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(|\.\d+)Z$/);if (c) { a = c[1];l = parseInt(a);if (a.length === 2) { if (50 <= l && l < 100) { l = 1900 + l; } else { if (0 <= l && l < 50) { l = 2000 + l; } } }j = parseInt(c[2]) - 1;m = parseInt(c[3]);e = parseInt(c[4]);f = parseInt(c[5]);i = parseInt(c[6]);b = 0;h = c[7];if (h !== "") { g = (h.substr(1) + "00").substr(0, 3);b = parseInt(g); }return Date.UTC(l, j, m, e, f, i, b); }throw "unsupported zulu format: " + n; }function zulutosec(a) { var b = zulutomsec(a);return ~~(b / 1000); }function zulutodate(a) { return new Date(zulutomsec(a)); }function datetozulu(g, e, f) { var b;var a = g.getUTCFullYear();if (e) { if (a < 1950 || 2049 < a) { throw "not proper year for UTCTime: " + a; }b = ("" + a).slice(-2); } else { b = ("000" + a).slice(-4); }b += ("0" + (g.getUTCMonth() + 1)).slice(-2);b += ("0" + g.getUTCDate()).slice(-2);b += ("0" + g.getUTCHours()).slice(-2);b += ("0" + g.getUTCMinutes()).slice(-2);b += ("0" + g.getUTCSeconds()).slice(-2);if (f) { var c = g.getUTCMilliseconds();if (c !== 0) { c = ("00" + c).slice(-3);c = c.replace(/0+$/g, "");b += "." + c; } }b += "Z";return b; }function uricmptohex(a) { return a.replace(/%/g, ""); }function hextouricmp(a) { return a.replace(/(..)/g, "%$1"); }function ipv6tohex(g) { var b = "malformed IPv6 address";if (!g.match(/^[0-9A-Fa-f:]+$/)) { throw b; }g = g.toLowerCase();var d = g.split(":").length - 1;if (d < 2) { throw b; }var e = ":".repeat(7 - d + 2);g = g.replace("::", e);var c = g.split(":");if (c.length != 8) { throw b; }for (var f = 0; f < 8; f++) { c[f] = ("0000" + c[f]).slice(-4); }return c.join(""); }function hextoipv6(e) { if (!e.match(/^[0-9A-Fa-f]{32}$/)) { throw "malformed IPv6 address octet"; }e = e.toLowerCase();var b = e.match(/.{1,4}/g);for (var d = 0; d < 8; d++) { b[d] = b[d].replace(/^0+/, "");if (b[d] == "") { b[d] = "0"; } }e = ":" + b.join(":") + ":";var c = e.match(/:(0:){2,}/g);if (c === null) { return e.slice(1, -1); }var f = "";for (var d = 0; d < c.length; d++) { if (c[d].length > f.length) { f = c[d]; } }e = e.replace(f, "::");return e.slice(1, -1); }function hextoip(b) { var d = "malformed hex value";if (!b.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/)) { throw d; }if (b.length == 8) { var c;try { c = parseInt(b.substr(0, 2), 16) + "." + parseInt(b.substr(2, 2), 16) + "." + parseInt(b.substr(4, 2), 16) + "." + parseInt(b.substr(6, 2), 16);return c; } catch (a) { throw d; } } else { if (b.length == 32) { return hextoipv6(b); } else { return b; } } }function iptohex(f) { var j = "malformed IP address";f = f.toLowerCase(f);if (f.match(/^[0-9.]+$/)) { var b = f.split(".");if (b.length !== 4) { throw j; }var g = "";try { for (var e = 0; e < 4; e++) { var h = parseInt(b[e]);g += ("0" + h.toString(16)).slice(-2); }return g; } catch (c) { throw j; } } else { if (f.match(/^[0-9a-f:]+$/) && f.indexOf(":") !== -1) { return ipv6tohex(f); } else { throw j; } } }function ucs2hextoutf8(d) { function e(f) { var h = parseInt(f.substr(0, 2), 16);var a = parseInt(f.substr(2), 16);if (h == 0 & a < 128) { return String.fromCharCode(a); }if (h < 8) { var j = 192 | (h & 7) << 3 | (a & 192) >> 6;var i = 128 | a & 63;return hextoutf8(j.toString(16) + i.toString(16)); }var j = 224 | (h & 240) >> 4;var i = 128 | (h & 15) << 2 | (a & 192) >> 6;var g = 128 | a & 63;return hextoutf8(j.toString(16) + i.toString(16) + g.toString(16)); }var c = d.match(/.{4}/g);var b = c.map(e);return b.join(""); }function encodeURIComponentAll(a) { var d = encodeURIComponent(a);var b = "";for (var c = 0; c < d.length; c++) { if (d[c] == "%") { b = b + d.substr(c, 3);c = c + 2; } else { b = b + "%" + stohex(d[c]); } }return b; }function newline_toUnix(a) { a = a.replace(/\r\n/mg, "\n");return a; }function newline_toDos(a) { a = a.replace(/\r\n/mg, "\n");a = a.replace(/\n/mg, "\r\n");return a; }KJUR.lang.String.isInteger = function (a) { if (a.match(/^[0-9]+$/)) { return true; } else { if (a.match(/^-[0-9]+$/)) { return true; } else { return false; } } };KJUR.lang.String.isHex = function (a) { return ishex(a); };function ishex(a) { if (a.length % 2 == 0 && (a.match(/^[0-9a-f]+$/) || a.match(/^[0-9A-F]+$/))) { return true; } else { return false; } }KJUR.lang.String.isBase64 = function (a) { a = a.replace(/\s+/g, "");if (a.match(/^[0-9A-Za-z+\/]+={0,3}$/) && a.length % 4 == 0) { return true; } else { return false; } };KJUR.lang.String.isBase64URL = function (a) { if (a.match(/[+/=]/)) { return false; }a = b64utob64(a);return KJUR.lang.String.isBase64(a); };KJUR.lang.String.isIntegerArray = function (a) { a = a.replace(/\s+/g, "");if (a.match(/^\[[0-9,]+\]$/)) { return true; } else { return false; } };KJUR.lang.String.isPrintable = function (a) { if (a.match(/^[0-9A-Za-z '()+,-./:=?]*$/) !== null) { return true; }return false; };KJUR.lang.String.isIA5 = function (a) { if (a.match(/^[\x20-\x21\x23-\x7f]*$/) !== null) { return true; }return false; };KJUR.lang.String.isMail = function (a) { if (a.match(/^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@{1}[A-Za-z0-9_.-]{1,}\.[A-Za-z0-9]{1,}$/) !== null) { return true; }return false; };function hextoposhex(a) { if (a.length % 2 == 1) { return "0" + a; }if (a.substr(0, 1) > "7") { return "00" + a; }return a; }function intarystrtohex(b) { b = b.replace(/^\s*\[\s*/, "");b = b.replace(/\s*\]\s*$/, "");b = b.replace(/\s*/g, "");try { var c = b.split(/,/).map(function (g, e, h) { var f = parseInt(g);if (f < 0 || 255 < f) { throw "integer not in range 0-255"; }var d = ("00" + f.toString(16)).slice(-2);return d; }).join("");return c; } catch (a) { throw "malformed integer array string: " + a; } }var strdiffidx = function strdiffidx(c, a) { var d = c.length;if (c.length > a.length) { d = a.length; }for (var b = 0; b < d; b++) { if (c.charCodeAt(b) != a.charCodeAt(b)) { return b; } }if (c.length != a.length) { return d; }return -1; };function oidtohex(g) { var f = function f(a) { var l = a.toString(16);if (l.length == 1) { l = "0" + l; }return l; };var e = function e(p) { var o = "";var l = parseInt(p, 10);var a = l.toString(2);var m = 7 - a.length % 7;if (m == 7) { m = 0; }var r = "";for (var n = 0; n < m; n++) { r += "0"; }a = r + a;for (var n = 0; n < a.length - 1; n += 7) { var q = a.substr(n, 7);if (n != a.length - 7) { q = "1" + q; }o += f(parseInt(q, 2)); }return o; };try { if (!g.match(/^[0-9.]+$/)) { return null; }var j = "";var b = g.split(".");var k = parseInt(b[0], 10) * 40 + parseInt(b[1], 10);j += f(k);b.splice(0, 2);for (var d = 0; d < b.length; d++) { j += e(b[d]); }return j; } catch (c) { return null; } }function hextooid(g) { if (!ishex(g)) { return null; }try { var m = [];var p = g.substr(0, 2);var e = parseInt(p, 16);m[0] = new String(Math.floor(e / 40));m[1] = new String(e % 40);var n = g.substr(2);var l = [];for (var f = 0; f < n.length / 2; f++) { l.push(parseInt(n.substr(f * 2, 2), 16)); }var k = [];var d = "";for (var f = 0; f < l.length; f++) { if (l[f] & 128) { d = d + strpad((l[f] & 127).toString(2), 7); } else { d = d + strpad((l[f] & 127).toString(2), 7);k.push(new String(parseInt(d, 2)));d = ""; } }var o = m.join(".");if (k.length > 0) { o = o + "." + k.join("."); }return o; } catch (j) { return null; } }var strpad = function strpad(c, b, a) { if (a == undefined) { a = "0"; }if (c.length >= b) { return c; }return new Array(b - c.length + 1).join(a) + c; };function bitstrtoint(e) { try { var a = e.substr(0, 2);if (a == "00") { return parseInt(e.substr(2), 16); }var b = parseInt(a, 16);var f = e.substr(2);var d = parseInt(f, 16).toString(2);if (d == "0") { d = "00000000"; }d = d.slice(0, 0 - b);return parseInt(d, 2); } catch (c) { return -1; } }function inttobitstr(e) { var c = Number(e).toString(2);var b = 8 - c.length % 8;if (b == 8) { b = 0; }c = c + strpad("", b, "0");var d = parseInt(c, 2).toString(16);if (d.length % 2 == 1) { d = "0" + d; }var a = "0" + b;return a + d; }function extendClass(c, a) { var b = function b() {};b.prototype = a.prototype;c.prototype = new b();c.prototype.constructor = c;c.superclass = a.prototype;if (a.prototype.constructor == Object.prototype.constructor) { a.prototype.constructor = a; } }; if (typeof KJUR == "undefined" || !KJUR) { exports.KJUR = KJUR = {}; }if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) { KJUR.crypto = {}; }KJUR.crypto.Util = new function () { this.DIGESTINFOHEAD = { sha1: "3021300906052b0e03021a05000414", sha224: "302d300d06096086480165030402040500041c", sha256: "3031300d060960864801650304020105000420", sha384: "3041300d060960864801650304020205000430", sha512: "3051300d060960864801650304020305000440", md2: "3020300c06082a864886f70d020205000410", md5: "3020300c06082a864886f70d020505000410", ripemd160: "3021300906052b2403020105000414" };this.DEFAULTPROVIDER = { md5: "cryptojs", sha1: "cryptojs", sha224: "cryptojs", sha256: "cryptojs", sha384: "cryptojs", sha512: "cryptojs", ripemd160: "cryptojs", hmacmd5: "cryptojs", hmacsha1: "cryptojs", hmacsha224: "cryptojs", hmacsha256: "cryptojs", hmacsha384: "cryptojs", hmacsha512: "cryptojs", hmacripemd160: "cryptojs", MD5withRSA: "cryptojs/jsrsa", SHA1withRSA: "cryptojs/jsrsa", SHA224withRSA: "cryptojs/jsrsa", SHA256withRSA: "cryptojs/jsrsa", SHA384withRSA: "cryptojs/jsrsa", SHA512withRSA: "cryptojs/jsrsa", RIPEMD160withRSA: "cryptojs/jsrsa", MD5withECDSA: "cryptojs/jsrsa", SHA1withECDSA: "cryptojs/jsrsa", SHA224withECDSA: "cryptojs/jsrsa", SHA256withECDSA: "cryptojs/jsrsa", SHA384withECDSA: "cryptojs/jsrsa", SHA512withECDSA: "cryptojs/jsrsa", RIPEMD160withECDSA: "cryptojs/jsrsa", SHA1withDSA: "cryptojs/jsrsa", SHA224withDSA: "cryptojs/jsrsa", SHA256withDSA: "cryptojs/jsrsa", MD5withRSAandMGF1: "cryptojs/jsrsa", SHAwithRSAandMGF1: "cryptojs/jsrsa", SHA1withRSAandMGF1: "cryptojs/jsrsa", SHA224withRSAandMGF1: "cryptojs/jsrsa", SHA256withRSAandMGF1: "cryptojs/jsrsa", SHA384withRSAandMGF1: "cryptojs/jsrsa", SHA512withRSAandMGF1: "cryptojs/jsrsa", RIPEMD160withRSAandMGF1: "cryptojs/jsrsa" };this.CRYPTOJSMESSAGEDIGESTNAME = { md5: CryptoJS.algo.MD5, sha1: CryptoJS.algo.SHA1, sha224: CryptoJS.algo.SHA224, sha256: CryptoJS.algo.SHA256, sha384: CryptoJS.algo.SHA384, sha512: CryptoJS.algo.SHA512, ripemd160: CryptoJS.algo.RIPEMD160 };this.getDigestInfoHex = function (a, b) { if (typeof this.DIGESTINFOHEAD[b] == "undefined") { throw "alg not supported in Util.DIGESTINFOHEAD: " + b; }return this.DIGESTINFOHEAD[b] + a; };this.getPaddedDigestInfoHex = function (h, a, j) { var c = this.getDigestInfoHex(h, a);var d = j / 4;if (c.length + 22 > d) { throw "key is too short for SigAlg: keylen=" + j + "," + a; }var b = "0001";var k = "00" + c;var g = "";var l = d - b.length - k.length;for (var f = 0; f < l; f += 2) { g += "ff"; }var e = b + g + k;return e; };this.hashString = function (a, c) { var b = new KJUR.crypto.MessageDigest({ alg: c });return b.digestString(a); };this.hashHex = function (b, c) { var a = new KJUR.crypto.MessageDigest({ alg: c });return a.digestHex(b); };this.sha1 = function (a) { return this.hashString(a, "sha1"); };this.sha256 = function (a) { return this.hashString(a, "sha256"); };this.sha256Hex = function (a) { return this.hashHex(a, "sha256"); };this.sha512 = function (a) { return this.hashString(a, "sha512"); };this.sha512Hex = function (a) { return this.hashHex(a, "sha512"); };this.isKey = function (a) { if (a instanceof RSAKey || a instanceof KJUR.crypto.DSA || a instanceof KJUR.crypto.ECDSA) { return true; } else { return false; } }; }();KJUR.crypto.Util.md5 = function (a) { var b = new KJUR.crypto.MessageDigest({ alg: "md5", prov: "cryptojs" });return b.digestString(a); };KJUR.crypto.Util.ripemd160 = function (a) { var b = new KJUR.crypto.MessageDigest({ alg: "ripemd160", prov: "cryptojs" });return b.digestString(a); };KJUR.crypto.Util.SECURERANDOMGEN = new SecureRandom();KJUR.crypto.Util.getRandomHexOfNbytes = function (b) { var a = new Array(b);KJUR.crypto.Util.SECURERANDOMGEN.nextBytes(a);return BAtohex(a); };KJUR.crypto.Util.getRandomBigIntegerOfNbytes = function (a) { return new BigInteger(KJUR.crypto.Util.getRandomHexOfNbytes(a), 16); };KJUR.crypto.Util.getRandomHexOfNbits = function (d) { var c = d % 8;var a = (d - c) / 8;var b = new Array(a + 1);KJUR.crypto.Util.SECURERANDOMGEN.nextBytes(b);b[0] = (255 << c & 255 ^ 255) & b[0];return BAtohex(b); };KJUR.crypto.Util.getRandomBigIntegerOfNbits = function (a) { return new BigInteger(KJUR.crypto.Util.getRandomHexOfNbits(a), 16); };KJUR.crypto.Util.getRandomBigIntegerZeroToMax = function (b) { var a = b.bitLength();while (1) { var c = KJUR.crypto.Util.getRandomBigIntegerOfNbits(a);if (b.compareTo(c) != -1) { return c; } } };KJUR.crypto.Util.getRandomBigIntegerMinToMax = function (e, b) { var c = e.compareTo(b);if (c == 1) { throw "biMin is greater than biMax"; }if (c == 0) { return e; }var a = b.subtract(e);var d = KJUR.crypto.Util.getRandomBigIntegerZeroToMax(a);return d.add(e); };KJUR.crypto.MessageDigest = function (c) { var b = null;var a = null;var d = null;this.setAlgAndProvider = function (g, f) { g = KJUR.crypto.MessageDigest.getCanonicalAlgName(g);if (g !== null && f === undefined) { f = KJUR.crypto.Util.DEFAULTPROVIDER[g]; }if (":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(g) != -1 && f == "cryptojs") { try { this.md = KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[g].create(); } catch (e) { throw "setAlgAndProvider hash alg set fail alg=" + g + "/" + e; }this.updateString = function (h) { this.md.update(h); };this.updateHex = function (h) { var i = CryptoJS.enc.Hex.parse(h);this.md.update(i); };this.digest = function () { var h = this.md.finalize();return h.toString(CryptoJS.enc.Hex); };this.digestString = function (h) { this.updateString(h);return this.digest(); };this.digestHex = function (h) { this.updateHex(h);return this.digest(); }; }if (":sha256:".indexOf(g) != -1 && f == "sjcl") { try { this.md = new sjcl.hash.sha256(); } catch (e) { throw "setAlgAndProvider hash alg set fail alg=" + g + "/" + e; }this.updateString = function (h) { this.md.update(h); };this.updateHex = function (i) { var h = sjcl.codec.hex.toBits(i);this.md.update(h); };this.digest = function () { var h = this.md.finalize();return sjcl.codec.hex.fromBits(h); };this.digestString = function (h) { this.updateString(h);return this.digest(); };this.digestHex = function (h) { this.updateHex(h);return this.digest(); }; } };this.updateString = function (e) { throw "updateString(str) not supported for this alg/prov: " + this.algName + "/" + this.provName; };this.updateHex = function (e) { throw "updateHex(hex) not supported for this alg/prov: " + this.algName + "/" + this.provName; };this.digest = function () { throw "digest() not supported for this alg/prov: " + this.algName + "/" + this.provName; };this.digestString = function (e) { throw "digestString(str) not supported for this alg/prov: " + this.algName + "/" + this.provName; };this.digestHex = function (e) { throw "digestHex(hex) not supported for this alg/prov: " + this.algName + "/" + this.provName; };if (c !== undefined) { if (c.alg !== undefined) { this.algName = c.alg;if (c.prov === undefined) { this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]; }this.setAlgAndProvider(this.algName, this.provName); } } };KJUR.crypto.MessageDigest.getCanonicalAlgName = function (a) { if (typeof a === "string") { a = a.toLowerCase();a = a.replace(/-/, ""); }return a; };KJUR.crypto.MessageDigest.getHashLength = function (c) { var b = KJUR.crypto.MessageDigest;var a = b.getCanonicalAlgName(c);if (b.HASHLENGTH[a] === undefined) { throw "not supported algorithm: " + c; }return b.HASHLENGTH[a]; };KJUR.crypto.MessageDigest.HASHLENGTH = { md5: 16, sha1: 20, sha224: 28, sha256: 32, sha384: 48, sha512: 64, ripemd160: 20 };KJUR.crypto.Mac = function (d) { var f = null;var c = null;var a = null;var e = null;var b = null;this.setAlgAndProvider = function (k, i) { k = k.toLowerCase();if (k == null) { k = "hmacsha1"; }k = k.toLowerCase();if (k.substr(0, 4) != "hmac") { throw "setAlgAndProvider unsupported HMAC alg: " + k; }if (i === undefined) { i = KJUR.crypto.Util.DEFAULTPROVIDER[k]; }this.algProv = k + "/" + i;var g = k.substr(4);if (":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(g) != -1 && i == "cryptojs") { try { var j = KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[g];this.mac = CryptoJS.algo.HMAC.create(j, this.pass); } catch (h) { throw "setAlgAndProvider hash alg set fail hashAlg=" + g + "/" + h; }this.updateString = function (l) { this.mac.update(l); };this.updateHex = function (l) { var m = CryptoJS.enc.Hex.parse(l);this.mac.update(m); };this.doFinal = function () { var l = this.mac.finalize();return l.toString(CryptoJS.enc.Hex); };this.doFinalString = function (l) { this.updateString(l);return this.doFinal(); };this.doFinalHex = function (l) { this.updateHex(l);return this.doFinal(); }; } };this.updateString = function (g) { throw "updateString(str) not supported for this alg/prov: " + this.algProv; };this.updateHex = function (g) { throw "updateHex(hex) not supported for this alg/prov: " + this.algProv; };this.doFinal = function () { throw "digest() not supported for this alg/prov: " + this.algProv; };this.doFinalString = function (g) { throw "digestString(str) not supported for this alg/prov: " + this.algProv; };this.doFinalHex = function (g) { throw "digestHex(hex) not supported for this alg/prov: " + this.algProv; };this.setPassword = function (h) { if (typeof h == "string") { var g = h;if (h.length % 2 == 1 || !h.match(/^[0-9A-Fa-f]+$/)) { g = rstrtohex(h); }this.pass = CryptoJS.enc.Hex.parse(g);return; }if ((typeof h === "undefined" ? "undefined" : _typeof(h)) != "object") { throw "KJUR.crypto.Mac unsupported password type: " + h; }var g = null;if (h.hex !== undefined) { if (h.hex.length % 2 != 0 || !h.hex.match(/^[0-9A-Fa-f]+$/)) { throw "Mac: wrong hex password: " + h.hex; }g = h.hex; }if (h.utf8 !== undefined) { g = utf8tohex(h.utf8); }if (h.rstr !== undefined) { g = rstrtohex(h.rstr); }if (h.b64 !== undefined) { g = b64tohex(h.b64); }if (h.b64u !== undefined) { g = b64utohex(h.b64u); }if (g == null) { throw "KJUR.crypto.Mac unsupported password type: " + h; }this.pass = CryptoJS.enc.Hex.parse(g); };if (d !== undefined) { if (d.pass !== undefined) { this.setPassword(d.pass); }if (d.alg !== undefined) { this.algName = d.alg;if (d.prov === undefined) { this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]; }this.setAlgAndProvider(this.algName, this.provName); } } };KJUR.crypto.Signature = function (o) { var q = null;var n = null;var r = null;var c = null;var l = null;var d = null;var k = null;var h = null;var p = null;var e = null;var b = -1;var g = null;var j = null;var a = null;var i = null;var f = null;this._setAlgNames = function () { var s = this.algName.match(/^(.+)with(.+)$/);if (s) { this.mdAlgName = s[1].toLowerCase();this.pubkeyAlgName = s[2].toLowerCase();if (this.pubkeyAlgName == "rsaandmgf1" && this.mdAlgName == "sha") { this.mdAlgName = "sha1"; } } };this._zeroPaddingOfSignature = function (x, w) { var v = "";var t = w / 4 - x.length;for (var u = 0; u < t; u++) { v = v + "0"; }return v + x; };this.setAlgAndProvider = function (u, t) { this._setAlgNames();if (t != "cryptojs/jsrsa") { throw new Error("provider not supported: " + t); }if (":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(this.mdAlgName) != -1) { try { this.md = new KJUR.crypto.MessageDigest({ alg: this.mdAlgName }); } catch (s) { throw new Error("setAlgAndProvider hash alg set fail alg=" + this.mdAlgName + "/" + s); }this.init = function (w, x) { var y = null;try { if (x === undefined) { y = KEYUTIL.getKey(w); } else { y = KEYUTIL.getKey(w, x); } } catch (v) { throw "init failed:" + v; }if (y.isPrivate === true) { this.prvKey = y;this.state = "SIGN"; } else { if (y.isPublic === true) { this.pubKey = y;this.state = "VERIFY"; } else { throw "init failed.:" + y; } } };this.updateString = function (v) { this.md.updateString(v); };this.updateHex = function (v) { this.md.updateHex(v); };this.sign = function () { this.sHashHex = this.md.digest();if (this.prvKey === undefined && this.ecprvhex !== undefined && this.eccurvename !== undefined && KJUR.crypto.ECDSA !== undefined) { this.prvKey = new KJUR.crypto.ECDSA({ curve: this.eccurvename, prv: this.ecprvhex }); }if (this.prvKey instanceof RSAKey && this.pubkeyAlgName === "rsaandmgf1") { this.hSign = this.prvKey.signWithMessageHashPSS(this.sHashHex, this.mdAlgName, this.pssSaltLen); } else { if (this.prvKey instanceof RSAKey && this.pubkeyAlgName === "rsa") { this.hSign = this.prvKey.signWithMessageHash(this.sHashHex, this.mdAlgName); } else { if (this.prvKey instanceof KJUR.crypto.ECDSA) { this.hSign = this.prvKey.signWithMessageHash(this.sHashHex); } else { if (this.prvKey instanceof KJUR.crypto.DSA) { this.hSign = this.prvKey.signWithMessageHash(this.sHashHex); } else { throw "Signature: unsupported private key alg: " + this.pubkeyAlgName; } } } }return this.hSign; };this.signString = function (v) { this.updateString(v);return this.sign(); };this.signHex = function (v) { this.updateHex(v);return this.sign(); };this.verify = function (v) { this.sHashHex = this.md.digest();if (this.pubKey === undefined && this.ecpubhex !== undefined && this.eccurvename !== undefined && KJUR.crypto.ECDSA !== undefined) { this.pubKey = new KJUR.crypto.ECDSA({ curve: this.eccurvename, pub: this.ecpubhex }); }if (this.pubKey instanceof RSAKey && this.pubkeyAlgName === "rsaandmgf1") { return this.pubKey.verifyWithMessageHashPSS(this.sHashHex, v, this.mdAlgName, this.pssSaltLen); } else { if (this.pubKey instanceof RSAKey && this.pubkeyAlgName === "rsa") { return this.pubKey.verifyWithMessageHash(this.sHashHex, v); } else { if (KJUR.crypto.ECDSA !== undefined && this.pubKey instanceof KJUR.crypto.ECDSA) { return this.pubKey.verifyWithMessageHash(this.sHashHex, v); } else { if (KJUR.crypto.DSA !== undefined && this.pubKey instanceof KJUR.crypto.DSA) { return this.pubKey.verifyWithMessageHash(this.sHashHex, v); } else { throw "Signature: unsupported public key alg: " + this.pubkeyAlgName; } } } } }; } };this.init = function (s, t) { throw "init(key, pass) not supported for this alg:prov=" + this.algProvName; };this.updateString = function (s) { throw "updateString(str) not supported for this alg:prov=" + this.algProvName; };this.updateHex = function (s) { throw "updateHex(hex) not supported for this alg:prov=" + this.algProvName; };this.sign = function () { throw "sign() not supported for this alg:prov=" + this.algProvName; };this.signString = function (s) { throw "digestString(str) not supported for this alg:prov=" + this.algProvName; };this.signHex = function (s) { throw "digestHex(hex) not supported for this alg:prov=" + this.algProvName; };this.verify = function (s) { throw "verify(hSigVal) not supported for this alg:prov=" + this.algProvName; };this.initParams = o;if (o !== undefined) { if (o.alg !== undefined) { this.algName = o.alg;if (o.prov === undefined) { this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]; } else { this.provName = o.prov; }this.algProvName = this.algName + ":" + this.provName;this.setAlgAndProvider(this.algName, this.provName);this._setAlgNames(); }if (o.psssaltlen !== undefined) { this.pssSaltLen = o.psssaltlen; }if (o.prvkeypem !== undefined) { if (o.prvkeypas !== undefined) { throw "both prvkeypem and prvkeypas parameters not supported"; } else { try { var q = KEYUTIL.getKey(o.prvkeypem);this.init(q); } catch (m) { throw "fatal error to load pem private key: " + m; } } } } };KJUR.crypto.Cipher = function (a) {};KJUR.crypto.Cipher.encrypt = function (e, f, d) { if (f instanceof RSAKey && f.isPublic) { var c = KJUR.crypto.Cipher.getAlgByKeyAndName(f, d);if (c === "RSA") { return f.encrypt(e); }if (c === "RSAOAEP") { return f.encryptOAEP(e, "sha1"); }var b = c.match(/^RSAOAEP(\d+)$/);if (b !== null) { return f.encryptOAEP(e, "sha" + b[1]); }throw "Cipher.encrypt: unsupported algorithm for RSAKey: " + d; } else { throw "Cipher.encrypt: unsupported key or algorithm"; } };KJUR.crypto.Cipher.decrypt = function (e, f, d) { if (f instanceof RSAKey && f.isPrivate) { var c = KJUR.crypto.Cipher.getAlgByKeyAndName(f, d);if (c === "RSA") { return f.decrypt(e); }if (c === "RSAOAEP") { return f.decryptOAEP(e, "sha1"); }var b = c.match(/^RSAOAEP(\d+)$/);if (b !== null) { return f.decryptOAEP(e, "sha" + b[1]); }throw "Cipher.decrypt: unsupported algorithm for RSAKey: " + d; } else { throw "Cipher.decrypt: unsupported key or algorithm"; } };KJUR.crypto.Cipher.getAlgByKeyAndName = function (b, a) { if (b instanceof RSAKey) { if (":RSA:RSAOAEP:RSAOAEP224:RSAOAEP256:RSAOAEP384:RSAOAEP512:".indexOf(a) != -1) { return a; }if (a === null || a === undefined) { return "RSA"; }throw "getAlgByKeyAndName: not supported algorithm name for RSAKey: " + a; }throw "getAlgByKeyAndName: not supported algorithm name: " + a; };KJUR.crypto.OID = new function () { this.oidhex2name = { "2a864886f70d010101": "rsaEncryption", "2a8648ce3d0201": "ecPublicKey", "2a8648ce380401": "dsa", "2a8648ce3d030107": "secp256r1", "2b8104001f": "secp192k1", "2b81040021": "secp224r1", "2b8104000a": "secp256k1", "2b81040023": "secp521r1", "2b81040022": "secp384r1", "2a8648ce380403": "SHA1withDSA", "608648016503040301": "SHA224withDSA", "608648016503040302": "SHA256withDSA" }; }(); if (typeof KJUR == "undefined" || !KJUR) { exports.KJUR = KJUR = {}; }if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) { KJUR.crypto = {}; }KJUR.crypto.ECDSA = function (e) { var g = "secp256r1";var p = null;var b = null;var i = null;var j = Error, f = BigInteger, h = ECPointFp, m = KJUR.crypto.ECDSA, c = KJUR.crypto.ECParameterDB, d = m.getName, q = ASN1HEX, n = q.getVbyListEx, k = q.isASN1HEX;var a = new SecureRandom();var o = null;this.type = "EC";this.isPrivate = false;this.isPublic = false;function l(x, t, w, s) { var r = Math.max(t.bitLength(), s.bitLength());var y = x.add2D(w);var v = x.curve.getInfinity();for (var u = r - 1; u >= 0; --u) { v = v.twice2D();v.z = f.ONE;if (t.testBit(u)) { if (s.testBit(u)) { v = v.add2D(y); } else { v = v.add2D(x); } } else { if (s.testBit(u)) { v = v.add2D(w); } } }return v; }this.getBigRandom = function (r) { return new f(r.bitLength(), a).mod(r.subtract(f.ONE)).add(f.ONE); };this.setNamedCurve = function (r) { this.ecparams = c.getByName(r);this.prvKeyHex = null;this.pubKeyHex = null;this.curveName = r; };this.setPrivateKeyHex = function (r) { this.isPrivate = true;this.prvKeyHex = r; };this.setPublicKeyHex = function (r) { this.isPublic = true;this.pubKeyHex = r; };this.getPublicKeyXYHex = function () { var t = this.pubKeyHex;if (t.substr(0, 2) !== "04") { throw "this method supports uncompressed format(04) only"; }var s = this.ecparams.keylen / 4;if (t.length !== 2 + s * 2) { throw "malformed public key hex length"; }var r = {};r.x = t.substr(2, s);r.y = t.substr(2 + s);return r; };this.getShortNISTPCurveName = function () { var r = this.curveName;if (r === "secp256r1" || r === "NIST P-256" || r === "P-256" || r === "prime256v1") { return "P-256"; }if (r === "secp384r1" || r === "NIST P-384" || r === "P-384") { return "P-384"; }return null; };this.generateKeyPairHex = function () { var t = this.ecparams.n;var w = this.getBigRandom(t);var u = this.ecparams.G.multiply(w);var z = u.getX().toBigInteger();var x = u.getY().toBigInteger();var r = this.ecparams.keylen / 4;var v = ("0000000000" + w.toString(16)).slice(-r);var A = ("0000000000" + z.toString(16)).slice(-r);var y = ("0000000000" + x.toString(16)).slice(-r);var s = "04" + A + y;this.setPrivateKeyHex(v);this.setPublicKeyHex(s);return { ecprvhex: v, ecpubhex: s }; };this.signWithMessageHash = function (r) { return this.signHex(r, this.prvKeyHex); };this.signHex = function (x, u) { var A = new f(u, 16);var v = this.ecparams.n;var z = new f(x.substring(0, this.ecparams.keylen / 4), 16);do { var w = this.getBigRandom(v);var B = this.ecparams.G;var y = B.multiply(w);var t = y.getX().toBigInteger().mod(v); } while (t.compareTo(f.ZERO) <= 0);var C = w.modInverse(v).multiply(z.add(A.multiply(t))).mod(v);return m.biRSSigToASN1Sig(t, C); };this.sign = function (w, B) { var z = B;var u = this.ecparams.n;var y = f.fromByteArrayUnsigned(w);do { var v = this.getBigRandom(u);var A = this.ecparams.G;var x = A.multiply(v);var t = x.getX().toBigInteger().mod(u); } while (t.compareTo(BigInteger.ZERO) <= 0);var C = v.modInverse(u).multiply(y.add(z.multiply(t))).mod(u);return this.serializeSig(t, C); };this.verifyWithMessageHash = function (s, r) { return this.verifyHex(s, r, this.pubKeyHex); };this.verifyHex = function (v, y, u) { try { var t, B;var w = m.parseSigHex(y);t = w.r;B = w.s;var x = h.decodeFromHex(this.ecparams.curve, u);var z = new f(v.substring(0, this.ecparams.keylen / 4), 16);return this.verifyRaw(z, t, B, x); } catch (A) { return false; } };this.verify = function (z, A, u) { var w, t;if (Bitcoin.Util.isArray(A)) { var y = this.parseSig(A);w = y.r;t = y.s; } else { if ("object" === (typeof A === "undefined" ? "undefined" : _typeof(A)) && A.r && A.s) { w = A.r;t = A.s; } else { throw "Invalid value for signature"; } }var v;if (u instanceof ECPointFp) { v = u; } else { if (Bitcoin.Util.isArray(u)) { v = h.decodeFrom(this.ecparams.curve, u); } else { throw "Invalid format for pubkey value, must be byte array or ECPointFp"; } }var x = f.fromByteArrayUnsigned(z);return this.verifyRaw(x, w, t, v); };this.verifyRaw = function (z, t, E, y) { var x = this.ecparams.n;var D = this.ecparams.G;if (t.compareTo(f.ONE) < 0 || t.compareTo(x) >= 0) { return false; }if (E.compareTo(f.ONE) < 0 || E.compareTo(x) >= 0) { return false; }var A = E.modInverse(x);var w = z.multiply(A).mod(x);var u = t.multiply(A).mod(x);var B = D.multiply(w).add(y.multiply(u));var C = B.getX().toBigInteger().mod(x);return C.equals(t); };this.serializeSig = function (v, u) { var w = v.toByteArraySigned();var t = u.toByteArraySigned();var x = [];x.push(2);x.push(w.length);x = x.concat(w);x.push(2);x.push(t.length);x = x.concat(t);x.unshift(x.length);x.unshift(48);return x; };this.parseSig = function (y) { var x;if (y[0] != 48) { throw new Error("Signature not a valid DERSequence"); }x = 2;if (y[x] != 2) { throw new Error("First element in signature must be a DERInteger"); }var w = y.slice(x + 2, x + 2 + y[x + 1]);x += 2 + y[x + 1];if (y[x] != 2) { throw new Error("Second element in signature must be a DERInteger"); }var t = y.slice(x + 2, x + 2 + y[x + 1]);x += 2 + y[x + 1];var v = f.fromByteArrayUnsigned(w);var u = f.fromByteArrayUnsigned(t);return { r: v, s: u }; };this.parseSigCompact = function (w) { if (w.length !== 65) { throw "Signature has the wrong length"; }var t = w[0] - 27;if (t < 0 || t > 7) { throw "Invalid signature type"; }var x = this.ecparams.n;var v = f.fromByteArrayUnsigned(w.slice(1, 33)).mod(x);var u = f.fromByteArrayUnsigned(w.slice(33, 65)).mod(x);return { r: v, s: u, i: t }; };this.readPKCS5PrvKeyHex = function (u) { if (k(u) === false) { throw new Error("not ASN.1 hex string"); }var r, t, v;try { r = n(u, 0, ["[0]", 0], "06");t = n(u, 0, [1], "04");try { v = n(u, 0, ["[1]", 0], "03"); } catch (s) {} } catch (s) { throw new Error("malformed PKCS#1/5 plain ECC private key"); }this.curveName = d(r);if (this.curveName === undefined) { throw "unsupported curve name"; }this.setNamedCurve(this.curveName);this.setPublicKeyHex(v);this.setPrivateKeyHex(t);this.isPublic = false; };this.readPKCS8PrvKeyHex = function (v) { if (k(v) === false) { throw new j("not ASN.1 hex string"); }var t, r, u, w;try { t = n(v, 0, [1, 0], "06");r = n(v, 0, [1, 1], "06");u = n(v, 0, [2, 0, 1], "04");try { w = n(v, 0, [2, 0, "[1]", 0], "03"); } catch (s) {} } catch (s) { throw new j("malformed PKCS#8 plain ECC private key"); }this.curveName = d(r);if (this.curveName === undefined) { throw new j("unsupported curve name"); }this.setNamedCurve(this.curveName);this.setPublicKeyHex(w);this.setPrivateKeyHex(u);this.isPublic = false; };this.readPKCS8PubKeyHex = function (u) { if (k(u) === false) { throw new j("not ASN.1 hex string"); }var t, r, v;try { t = n(u, 0, [0, 0], "06");r = n(u, 0, [0, 1], "06");v = n(u, 0, [1], "03"); } catch (s) { throw new j("malformed PKCS#8 ECC public key"); }this.curveName = d(r);if (this.curveName === null) { throw new j("unsupported curve name"); }this.setNamedCurve(this.curveName);this.setPublicKeyHex(v); };this.readCertPubKeyHex = function (t, v) { if (k(t) === false) { throw new j("not ASN.1 hex string"); }var r, u;try { r = n(t, 0, [0, 5, 0, 1], "06");u = n(t, 0, [0, 5, 1], "03"); } catch (s) { throw new j("malformed X.509 certificate ECC public key"); }this.curveName = d(r);if (this.curveName === null) { throw new j("unsupported curve name"); }this.setNamedCurve(this.curveName);this.setPublicKeyHex(u); };if (e !== undefined) { if (e.curve !== undefined) { this.curveName = e.curve; } }if (this.curveName === undefined) { this.curveName = g; }this.setNamedCurve(this.curveName);if (e !== undefined) { if (e.prv !== undefined) { this.setPrivateKeyHex(e.prv); }if (e.pub !== undefined) { this.setPublicKeyHex(e.pub); } } };KJUR.crypto.ECDSA.parseSigHex = function (a) { var b = KJUR.crypto.ECDSA.parseSigHexInHexRS(a);var d = new BigInteger(b.r, 16);var c = new BigInteger(b.s, 16);return { r: d, s: c }; };KJUR.crypto.ECDSA.parseSigHexInHexRS = function (f) { var j = ASN1HEX, i = j.getChildIdx, g = j.getV;j.checkStrictDER(f, 0);if (f.substr(0, 2) != "30") { throw new Error("signature is not a ASN.1 sequence"); }var h = i(f, 0);if (h.length != 2) { throw new Error("signature shall have two elements"); }var e = h[0];var d = h[1];if (f.substr(e, 2) != "02") { throw new Error("1st item not ASN.1 integer"); }if (f.substr(d, 2) != "02") { throw new Error("2nd item not ASN.1 integer"); }var c = g(f, e);var b = g(f, d);return { r: c, s: b }; };KJUR.crypto.ECDSA.asn1SigToConcatSig = function (c) { var d = KJUR.crypto.ECDSA.parseSigHexInHexRS(c);var b = d.r;var a = d.s;if (b.substr(0, 2) == "00" && b.length % 32 == 2) { b = b.substr(2); }if (a.substr(0, 2) == "00" && a.length % 32 == 2) { a = a.substr(2); }if (b.length % 32 == 30) { b = "00" + b; }if (a.length % 32 == 30) { a = "00" + a; }if (b.length % 32 != 0) { throw "unknown ECDSA sig r length error"; }if (a.length % 32 != 0) { throw "unknown ECDSA sig s length error"; }return b + a; };KJUR.crypto.ECDSA.concatSigToASN1Sig = function (a) { if (a.length / 2 * 8 % (16 * 8) != 0) { throw "unknown ECDSA concatinated r-s sig length error"; }var c = a.substr(0, a.length / 2);var b = a.substr(a.length / 2);return KJUR.crypto.ECDSA.hexRSSigToASN1Sig(c, b); };KJUR.crypto.ECDSA.hexRSSigToASN1Sig = function (b, a) { var d = new BigInteger(b, 16);var c = new BigInteger(a, 16);return KJUR.crypto.ECDSA.biRSSigToASN1Sig(d, c); };KJUR.crypto.ECDSA.biRSSigToASN1Sig = function (f, d) { var c = KJUR.asn1;var b = new c.DERInteger({ bigint: f });var a = new c.DERInteger({ bigint: d });var e = new c.DERSequence({ array: [b, a] });return e.getEncodedHex(); };KJUR.crypto.ECDSA.getName = function (a) { if (a === "2b8104001f") { return "secp192k1"; }if (a === "2a8648ce3d030107") { return "secp256r1"; }if (a === "2b8104000a") { return "secp256k1"; }if (a === "2b81040021") { return "secp224r1"; }if (a === "2b81040022") { return "secp384r1"; }if ("|secp256r1|NIST P-256|P-256|prime256v1|".indexOf(a) !== -1) { return "secp256r1"; }if ("|secp256k1|".indexOf(a) !== -1) { return "secp256k1"; }if ("|secp224r1|NIST P-224|P-224|".indexOf(a) !== -1) { return "secp224r1"; }if ("|secp384r1|NIST P-384|P-384|".indexOf(a) !== -1) { return "secp384r1"; }return null; }; if (typeof KJUR == "undefined" || !KJUR) { exports.KJUR = KJUR = {}; }if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) { KJUR.crypto = {}; }KJUR.crypto.ECParameterDB = new function () { var b = {};var c = {};function a(d) { return new BigInteger(d, 16); }this.getByName = function (e) { var d = e;if (typeof c[d] != "undefined") { d = c[e]; }if (typeof b[d] != "undefined") { return b[d]; }throw "unregistered EC curve name: " + d; };this.regist = function (A, l, o, g, m, e, j, f, k, u, d, x) { b[A] = {};var s = a(o);var z = a(g);var y = a(m);var t = a(e);var w = a(j);var r = new ECCurveFp(s, z, y);var q = r.decodePointHex("04" + f + k);b[A]["name"] = A;b[A]["keylen"] = l;b[A]["curve"] = r;b[A]["G"] = q;b[A]["n"] = t;b[A]["h"] = w;b[A]["oid"] = d;b[A]["info"] = x;for (var v = 0; v < u.length; v++) { c[u[v]] = A; } }; }();KJUR.crypto.ECParameterDB.regist("secp128r1", 128, "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC", "E87579C11079F43DD824993C2CEE5ED3", "FFFFFFFE0000000075A30D1B9038A115", "1", "161FF7528B899B2D0C28607CA52C5B86", "CF5AC8395BAFEB13C02DA292DDED7A83", [], "", "secp128r1 : SECG curve over a 128 bit prime field");KJUR.crypto.ECParameterDB.regist("secp160k1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", "0", "7", "0100000000000000000001B8FA16DFAB9ACA16B6B3", "1", "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", "938CF935318FDCED6BC28286531733C3F03C4FEE", [], "", "secp160k1 : SECG curve over a 160 bit prime field");KJUR.crypto.ECParameterDB.regist("secp160r1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC", "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45", "0100000000000000000001F4C8F927AED3CA752257", "1", "4A96B5688EF573284664698968C38BB913CBFC82", "23A628553168947D59DCC912042351377AC5FB32", [], "", "secp160r1 : SECG curve over a 160 bit prime field");KJUR.crypto.ECParameterDB.regist("secp192k1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", "0", "3", "FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", "1", "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", []);KJUR.crypto.ECParameterDB.regist("secp192r1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC", "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1", "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831", "1", "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012", "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811", []);KJUR.crypto.ECParameterDB.regist("secp224r1", 224, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE", "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4", "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D", "1", "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21", "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34", []);KJUR.crypto.ECParameterDB.regist("secp256k1", 256, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", "0", "7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", "1", "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", []);KJUR.crypto.ECParameterDB.regist("secp256r1", 256, "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", "1", "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", ["NIST P-256", "P-256", "prime256v1"]);KJUR.crypto.ECParameterDB.regist("secp384r1", 384, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC", "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973", "1", "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7", "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", ["NIST P-384", "P-384"]);KJUR.crypto.ECParameterDB.regist("secp521r1", 521, "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC", "051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409", "1", "C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66", "011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", ["NIST P-521", "P-521"]); var KEYUTIL = function () { var d = function d(p, r, q) { return k(CryptoJS.AES, p, r, q); };var e = function e(p, r, q) { return k(CryptoJS.TripleDES, p, r, q); };var a = function a(p, r, q) { return k(CryptoJS.DES, p, r, q); };var k = function k(s, x, u, q) { var r = CryptoJS.enc.Hex.parse(x);var w = CryptoJS.enc.Hex.parse(u);var p = CryptoJS.enc.Hex.parse(q);var t = {};t.key = w;t.iv = p;t.ciphertext = r;var v = s.decrypt(t, w, { iv: p });return CryptoJS.enc.Hex.stringify(v); };var l = function l(p, r, q) { return g(CryptoJS.AES, p, r, q); };var o = function o(p, r, q) { return g(CryptoJS.TripleDES, p, r, q); };var f = function f(p, r, q) { return g(CryptoJS.DES, p, r, q); };var g = function g(t, y, v, q) { var s = CryptoJS.enc.Hex.parse(y);var x = CryptoJS.enc.Hex.parse(v);var p = CryptoJS.enc.Hex.parse(q);var w = t.encrypt(s, x, { iv: p });var r = CryptoJS.enc.Hex.parse(w.toString());var u = CryptoJS.enc.Base64.stringify(r);return u; };var i = { "AES-256-CBC": { proc: d, eproc: l, keylen: 32, ivlen: 16 }, "AES-192-CBC": { proc: d, eproc: l, keylen: 24, ivlen: 16 }, "AES-128-CBC": { proc: d, eproc: l, keylen: 16, ivlen: 16 }, "DES-EDE3-CBC": { proc: e, eproc: o, keylen: 24, ivlen: 8 }, "DES-CBC": { proc: a, eproc: f, keylen: 8, ivlen: 8 } };var c = function c(p) { return i[p]["proc"]; };var m = function m(p) { var r = CryptoJS.lib.WordArray.random(p);var q = CryptoJS.enc.Hex.stringify(r);return q; };var n = function n(v) { var w = {};var q = v.match(new RegExp("DEK-Info: ([^,]+),([0-9A-Fa-f]+)", "m"));if (q) { w.cipher = q[1];w.ivsalt = q[2]; }var p = v.match(new RegExp("-----BEGIN ([A-Z]+) PRIVATE KEY-----"));if (p) { w.type = p[1]; }var u = -1;var x = 0;if (v.indexOf("\r\n\r\n") != -1) { u = v.indexOf("\r\n\r\n");x = 2; }if (v.indexOf("\n\n") != -1) { u = v.indexOf("\n\n");x = 1; }var t = v.indexOf("-----END");if (u != -1 && t != -1) { var r = v.substring(u + x * 2, t - x);r = r.replace(/\s+/g, "");w.data = r; }return w; };var j = function j(q, y, p) { var v = p.substring(0, 16);var t = CryptoJS.enc.Hex.parse(v);var r = CryptoJS.enc.Utf8.parse(y);var u = i[q]["keylen"] + i[q]["ivlen"];var x = "";var w = null;for (;;) { var s = CryptoJS.algo.MD5.create();if (w != null) { s.update(w); }s.update(r);s.update(t);w = s.finalize();x = x + CryptoJS.enc.Hex.stringify(w);if (x.length >= u * 2) { break; } }var z = {};z.keyhex = x.substr(0, i[q]["keylen"] * 2);z.ivhex = x.substr(i[q]["keylen"] * 2, i[q]["ivlen"] * 2);return z; };var b = function b(p, v, r, w) { var s = CryptoJS.enc.Base64.parse(p);var q = CryptoJS.enc.Hex.stringify(s);var u = i[v]["proc"];var t = u(q, r, w);return t; };var h = function h(p, s, q, u) { var r = i[s]["eproc"];var t = r(p, q, u);return t; };return { version: "1.0.0", parsePKCS5PEM: function parsePKCS5PEM(p) { return n(p); }, getKeyAndUnusedIvByPasscodeAndIvsalt: function getKeyAndUnusedIvByPasscodeAndIvsalt(q, p, r) { return j(q, p, r); }, decryptKeyB64: function decryptKeyB64(p, r, q, s) { return b(p, r, q, s); }, getDecryptedKeyHex: function getDecryptedKeyHex(y, x) { var q = n(y);var t = q.type;var r = q.cipher;var p = q.ivsalt;var s = q.data;var w = j(r, x, p);var v = w.keyhex;var u = b(s, r, v, p);return u; }, getEncryptedPKCS5PEMFromPrvKeyHex: function getEncryptedPKCS5PEMFromPrvKeyHex(x, s, A, t, r) { var p = "";if (typeof t == "undefined" || t == null) { t = "AES-256-CBC"; }if (typeof i[t] == "undefined") { throw new Error("KEYUTIL unsupported algorithm: " + t); }if (typeof r == "undefined" || r == null) { var v = i[t]["ivlen"];var u = m(v);r = u.toUpperCase(); }var z = j(t, A, r);var y = z.keyhex;var w = h(s, t, y, r);var q = w.replace(/(.{64})/g, "$1\r\n");var p = "-----BEGIN " + x + " PRIVATE KEY-----\r\n";p += "Proc-Type: 4,ENCRYPTED\r\n";p += "DEK-Info: " + t + "," + r + "\r\n";p += "\r\n";p += q;p += "\r\n-----END " + x + " PRIVATE KEY-----\r\n";return p; }, parseHexOfEncryptedPKCS8: function parseHexOfEncryptedPKCS8(y) { var B = ASN1HEX;var z = B.getChildIdx;var w = B.getV;var t = {};var r = z(y, 0);if (r.length != 2) { throw new Error("malformed format: SEQUENCE(0).items != 2: " + r.length); }t.ciphertext = w(y, r[1]);var A = z(y, r[0]);if (A.length != 2) { throw new Error("malformed format: SEQUENCE(0.0).items != 2: " + A.length); }if (w(y, A[0]) != "2a864886f70d01050d") { throw new Error("this only supports pkcs5PBES2"); }var p = z(y, A[1]);if (A.length != 2) { throw new Error("malformed format: SEQUENCE(0.0.1).items != 2: " + p.length); }var q = z(y, p[1]);if (q.length != 2) { throw new Error("malformed format: SEQUENCE(0.0.1.1).items != 2: " + q.length); }if (w(y, q[0]) != "2a864886f70d0307") { throw "this only supports TripleDES"; }t.encryptionSchemeAlg = "TripleDES";t.encryptionSchemeIV = w(y, q[1]);var s = z(y, p[0]);if (s.length != 2) { throw new Error("malformed format: SEQUENCE(0.0.1.0).items != 2: " + s.length); }if (w(y, s[0]) != "2a864886f70d01050c") { throw new Error("this only supports pkcs5PBKDF2"); }var x = z(y, s[1]);if (x.length < 2) { throw new Error("malformed format: SEQUENCE(0.0.1.0.1).items < 2: " + x.length); }t.pbkdf2Salt = w(y, x[0]);var u = w(y, x[1]);try { t.pbkdf2Iter = parseInt(u, 16); } catch (v) { throw new Error("malformed format pbkdf2Iter: " + u); }return t; }, getPBKDF2KeyHexFromParam: function getPBKDF2KeyHexFromParam(u, p) { var t = CryptoJS.enc.Hex.parse(u.pbkdf2Salt);var q = u.pbkdf2Iter;var s = CryptoJS.PBKDF2(p, t, { keySize: 192 / 32, iterations: q });var r = CryptoJS.enc.Hex.stringify(s);return r; }, _getPlainPKCS8HexFromEncryptedPKCS8PEM: function _getPlainPKCS8HexFromEncryptedPKCS8PEM(x, y) { var r = pemtohex(x, "ENCRYPTED PRIVATE KEY");var p = this.parseHexOfEncryptedPKCS8(r);var u = KEYUTIL.getPBKDF2KeyHexFromParam(p, y);var v = {};v.ciphertext = CryptoJS.enc.Hex.parse(p.ciphertext);var t = CryptoJS.enc.Hex.parse(u);var s = CryptoJS.enc.Hex.parse(p.encryptionSchemeIV);var w = CryptoJS.TripleDES.decrypt(v, t, { iv: s });var q = CryptoJS.enc.Hex.stringify(w);return q; }, getKeyFromEncryptedPKCS8PEM: function getKeyFromEncryptedPKCS8PEM(s, q) { var p = this._getPlainPKCS8HexFromEncryptedPKCS8PEM(s, q);var r = this.getKeyFromPlainPrivatePKCS8Hex(p);return r; }, parsePlainPrivatePKCS8Hex: function parsePlainPrivatePKCS8Hex(s) { var v = ASN1HEX;var u = v.getChildIdx;var t = v.getV;var q = {};q.algparam = null;if (s.substr(0, 2) != "30") { throw new Error("malformed plain PKCS8 private key(code:001)"); }var r = u(s, 0);if (r.length < 3) { throw new Error("malformed plain PKCS8 private key(code:002)"); }if (s.substr(r[1], 2) != "30") { throw new Error("malformed PKCS8 private key(code:003)"); }var p = u(s, r[1]);if (p.length != 2) { throw new Error("malformed PKCS8 private key(code:004)"); }if (s.substr(p[0], 2) != "06") { throw new Error("malformed PKCS8 private key(code:005)"); }q.algoid = t(s, p[0]);if (s.substr(p[1], 2) == "06") { q.algparam = t(s, p[1]); }if (s.substr(r[2], 2) != "04") { throw new Error("malformed PKCS8 private key(code:006)"); }q.keyidx = v.getVidx(s, r[2]);return q; }, getKeyFromPlainPrivatePKCS8PEM: function getKeyFromPlainPrivatePKCS8PEM(q) { var p = pemtohex(q, "PRIVATE KEY");var r = this.getKeyFromPlainPrivatePKCS8Hex(p);return r; }, getKeyFromPlainPrivatePKCS8Hex: function getKeyFromPlainPrivatePKCS8Hex(p) { var q = this.parsePlainPrivatePKCS8Hex(p);var r;if (q.algoid == "2a864886f70d010101") { r = new RSAKey(); } else { if (q.algoid == "2a8648ce380401") { r = new KJUR.crypto.DSA(); } else { if (q.algoid == "2a8648ce3d0201") { r = new KJUR.crypto.ECDSA(); } else { throw new Error("unsupported private key algorithm"); } } }r.readPKCS8PrvKeyHex(p);return r; }, _getKeyFromPublicPKCS8Hex: function _getKeyFromPublicPKCS8Hex(q) { var p;var r = ASN1HEX.getVbyList(q, 0, [0, 0], "06");if (r === "2a864886f70d010101") { p = new RSAKey(); } else { if (r === "2a8648ce380401") { p = new KJUR.crypto.DSA(); } else { if (r === "2a8648ce3d0201") { p = new KJUR.crypto.ECDSA(); } else { throw new Error("unsupported PKCS#8 public key hex"); } } }p.readPKCS8PubKeyHex(q);return p; }, parsePublicRawRSAKeyHex: function parsePublicRawRSAKeyHex(r) { var u = ASN1HEX;var t = u.getChildIdx;var s = u.getV;var p = {};if (r.substr(0, 2) != "30") { throw new Error("malformed RSA key(code:001)"); }var q = t(r, 0);if (q.length != 2) { throw new Error("malformed RSA key(code:002)"); }if (r.substr(q[0], 2) != "02") { throw new Error("malformed RSA key(code:003)"); }p.n = s(r, q[0]);if (r.substr(q[1], 2) != "02") { throw new Error("malformed RSA key(code:004)"); }p.e = s(r, q[1]);return p; }, parsePublicPKCS8Hex: function parsePublicPKCS8Hex(t) { var v = ASN1HEX;var u = v.getChildIdx;var s = v.getV;var q = {};q.algparam = null;var r = u(t, 0);if (r.length != 2) { throw new Error("outer DERSequence shall have 2 elements: " + r.length); }var w = r[0];if (t.substr(w, 2) != "30") { throw new Error("malformed PKCS8 public key(code:001)"); }var p = u(t, w);if (p.length != 2) { throw new Error("malformed PKCS8 public key(code:002)"); }if (t.substr(p[0], 2) != "06") { throw new Error("malformed PKCS8 public key(code:003)"); }q.algoid = s(t, p[0]);if (t.substr(p[1], 2) == "06") { q.algparam = s(t, p[1]); } else { if (t.substr(p[1], 2) == "30") { q.algparam = {};q.algparam.p = v.getVbyList(t, p[1], [0], "02");q.algparam.q = v.getVbyList(t, p[1], [1], "02");q.algparam.g = v.getVbyList(t, p[1], [2], "02"); } }if (t.substr(r[1], 2) != "03") { throw new Error("malformed PKCS8 public key(code:004)"); }q.key = s(t, r[1]).substr(2);return q; } }; }();KEYUTIL.getKey = function (l, k, n) { var G = ASN1HEX, L = G.getChildIdx, v = G.getV, d = G.getVbyList, c = KJUR.crypto, i = c.ECDSA, C = c.DSA, w = RSAKey, M = pemtohex, F = KEYUTIL;if (typeof w != "undefined" && l instanceof w) { return l; }if (typeof i != "undefined" && l instanceof i) { return l; }if (typeof C != "undefined" && l instanceof C) { return l; }if (l.curve !== undefined && l.xy !== undefined && l.d === undefined) { return new i({ pub: l.xy, curve: l.curve }); }if (l.curve !== undefined && l.d !== undefined) { return new i({ prv: l.d, curve: l.curve }); }if (l.kty === undefined && l.n !== undefined && l.e !== undefined && l.d === undefined) { var P = new w();P.setPublic(l.n, l.e);return P; }if (l.kty === undefined && l.n !== undefined && l.e !== undefined && l.d !== undefined && l.p !== undefined && l.q !== undefined && l.dp !== undefined && l.dq !== undefined && l.co !== undefined && l.qi === undefined) { var P = new w();P.setPrivateEx(l.n, l.e, l.d, l.p, l.q, l.dp, l.dq, l.co);return P; }if (l.kty === undefined && l.n !== undefined && l.e !== undefined && l.d !== undefined && l.p === undefined) { var P = new w();P.setPrivate(l.n, l.e, l.d);return P; }if (l.p !== undefined && l.q !== undefined && l.g !== undefined && l.y !== undefined && l.x === undefined) { var P = new C();P.setPublic(l.p, l.q, l.g, l.y);return P; }if (l.p !== undefined && l.q !== undefined && l.g !== undefined && l.y !== undefined && l.x !== undefined) { var P = new C();P.setPrivate(l.p, l.q, l.g, l.y, l.x);return P; }if (l.kty === "RSA" && l.n !== undefined && l.e !== undefined && l.d === undefined) { var P = new w();P.setPublic(b64utohex(l.n), b64utohex(l.e));return P; }if (l.kty === "RSA" && l.n !== undefined && l.e !== undefined && l.d !== undefined && l.p !== undefined && l.q !== undefined && l.dp !== undefined && l.dq !== undefined && l.qi !== undefined) { var P = new w();P.setPrivateEx(b64utohex(l.n), b64utohex(l.e), b64utohex(l.d), b64utohex(l.p), b64utohex(l.q), b64utohex(l.dp), b64utohex(l.dq), b64utohex(l.qi));return P; }if (l.kty === "RSA" && l.n !== undefined && l.e !== undefined && l.d !== undefined) { var P = new w();P.setPrivate(b64utohex(l.n), b64utohex(l.e), b64utohex(l.d));return P; }if (l.kty === "EC" && l.crv !== undefined && l.x !== undefined && l.y !== undefined && l.d === undefined) { var j = new i({ curve: l.crv });var t = j.ecparams.keylen / 4;var B = ("0000000000" + b64utohex(l.x)).slice(-t);var z = ("0000000000" + b64utohex(l.y)).slice(-t);var u = "04" + B + z;j.setPublicKeyHex(u);return j; }if (l.kty === "EC" && l.crv !== undefined && l.x !== undefined && l.y !== undefined && l.d !== undefined) { var j = new i({ curve: l.crv });var t = j.ecparams.keylen / 4;var B = ("0000000000" + b64utohex(l.x)).slice(-t);var z = ("0000000000" + b64utohex(l.y)).slice(-t);var u = "04" + B + z;var b = ("0000000000" + b64utohex(l.d)).slice(-t);j.setPublicKeyHex(u);j.setPrivateKeyHex(b);return j; }if (n === "pkcs5prv") { var J = l, G = ASN1HEX, N, P;N = L(J, 0);if (N.length === 9) { P = new w();P.readPKCS5PrvKeyHex(J); } else { if (N.length === 6) { P = new C();P.readPKCS5PrvKeyHex(J); } else { if (N.length > 2 && J.substr(N[1], 2) === "04") { P = new i();P.readPKCS5PrvKeyHex(J); } else { throw new Error("unsupported PKCS#1/5 hexadecimal key"); } } }return P; }if (n === "pkcs8prv") { var P = F.getKeyFromPlainPrivatePKCS8Hex(l);return P; }if (n === "pkcs8pub") { return F._getKeyFromPublicPKCS8Hex(l); }if (n === "x509pub") { return X509.getPublicKeyFromCertHex(l); }if (l.indexOf("-END CERTIFICATE-", 0) != -1 || l.indexOf("-END X509 CERTIFICATE-", 0) != -1 || l.indexOf("-END TRUSTED CERTIFICATE-", 0) != -1) { return X509.getPublicKeyFromCertPEM(l); }if (l.indexOf("-END PUBLIC KEY-") != -1) { var O = pemtohex(l, "PUBLIC KEY");return F._getKeyFromPublicPKCS8Hex(O); }if (l.indexOf("-END RSA PRIVATE KEY-") != -1 && l.indexOf("4,ENCRYPTED") == -1) { var m = M(l, "RSA PRIVATE KEY");return F.getKey(m, null, "pkcs5prv"); }if (l.indexOf("-END DSA PRIVATE KEY-") != -1 && l.indexOf("4,ENCRYPTED") == -1) { var I = M(l, "DSA PRIVATE KEY");var E = d(I, 0, [1], "02");var D = d(I, 0, [2], "02");var K = d(I, 0, [3], "02");var r = d(I, 0, [4], "02");var s = d(I, 0, [5], "02");var P = new C();P.setPrivate(new BigInteger(E, 16), new BigInteger(D, 16), new BigInteger(K, 16), new BigInteger(r, 16), new BigInteger(s, 16));return P; }if (l.indexOf("-END EC PRIVATE KEY-") != -1 && l.indexOf("4,ENCRYPTED") == -1) { var m = M(l, "EC PRIVATE KEY");return F.getKey(m, null, "pkcs5prv"); }if (l.indexOf("-END PRIVATE KEY-") != -1) { return F.getKeyFromPlainPrivatePKCS8PEM(l); }if (l.indexOf("-END RSA PRIVATE KEY-") != -1 && l.indexOf("4,ENCRYPTED") != -1) { var o = F.getDecryptedKeyHex(l, k);var H = new RSAKey();H.readPKCS5PrvKeyHex(o);return H; }if (l.indexOf("-END EC PRIVATE KEY-") != -1 && l.indexOf("4,ENCRYPTED") != -1) { var I = F.getDecryptedKeyHex(l, k);var P = d(I, 0, [1], "04");var f = d(I, 0, [2, 0], "06");var A = d(I, 0, [3, 0], "03").substr(2);var e = "";if (KJUR.crypto.OID.oidhex2name[f] !== undefined) { e = KJUR.crypto.OID.oidhex2name[f]; } else { throw new Error("undefined OID(hex) in KJUR.crypto.OID: " + f); }var j = new i({ curve: e });j.setPublicKeyHex(A);j.setPrivateKeyHex(P);j.isPublic = false;return j; }if (l.indexOf("-END DSA PRIVATE KEY-") != -1 && l.indexOf("4,ENCRYPTED") != -1) { var I = F.getDecryptedKeyHex(l, k);var E = d(I, 0, [1], "02");var D = d(I, 0, [2], "02");var K = d(I, 0, [3], "02");var r = d(I, 0, [4], "02");var s = d(I, 0, [5], "02");var P = new C();P.setPrivate(new BigInteger(E, 16), new BigInteger(D, 16), new BigInteger(K, 16), new BigInteger(r, 16), new BigInteger(s, 16));return P; }if (l.indexOf("-END ENCRYPTED PRIVATE KEY-") != -1) { return F.getKeyFromEncryptedPKCS8PEM(l, k); }throw new Error("not supported argument"); };KEYUTIL.generateKeypair = function (a, c) { if (a == "RSA") { var b = c;var h = new RSAKey();h.generate(b, "10001");h.isPrivate = true;h.isPublic = true;var f = new RSAKey();var e = h.n.toString(16);var i = h.e.toString(16);f.setPublic(e, i);f.isPrivate = false;f.isPublic = true;var k = {};k.prvKeyObj = h;k.pubKeyObj = f;return k; } else { if (a == "EC") { var d = c;var g = new KJUR.crypto.ECDSA({ curve: d });var j = g.generateKeyPairHex();var h = new KJUR.crypto.ECDSA({ curve: d });h.setPublicKeyHex(j.ecpubhex);h.setPrivateKeyHex(j.ecprvhex);h.isPrivate = true;h.isPublic = false;var f = new KJUR.crypto.ECDSA({ curve: d });f.setPublicKeyHex(j.ecpubhex);f.isPrivate = false;f.isPublic = true;var k = {};k.prvKeyObj = h;k.pubKeyObj = f;return k; } else { throw new Error("unknown algorithm: " + a); } } };KEYUTIL.getPEM = function (b, D, y, m, q, j) { var F = KJUR, k = F.asn1, z = k.DERObjectIdentifier, f = k.DERInteger, l = k.ASN1Util.newObject, a = k.x509, C = a.SubjectPublicKeyInfo, e = F.crypto, u = e.DSA, r = e.ECDSA, n = RSAKey;function A(s) { var G = l({ seq: [{ "int": 0 }, { "int": { bigint: s.n } }, { "int": s.e }, { "int": { bigint: s.d } }, { "int": { bigint: s.p } }, { "int": { bigint: s.q } }, { "int": { bigint: s.dmp1 } }, { "int": { bigint: s.dmq1 } }, { "int": { bigint: s.coeff } }] });return G; }function B(G) { var s = l({ seq: [{ "int": 1 }, { octstr: { hex: G.prvKeyHex } }, { tag: ["a0", true, { oid: { name: G.curveName } }] }, { tag: ["a1", true, { bitstr: { hex: "00" + G.pubKeyHex } }] }] });return s; }function x(s) { var G = l({ seq: [{ "int": 0 }, { "int": { bigint: s.p } }, { "int": { bigint: s.q } }, { "int": { bigint: s.g } }, { "int": { bigint: s.y } }, { "int": { bigint: s.x } }] });return G; }if ((n !== undefined && b instanceof n || u !== undefined && b instanceof u || r !== undefined && b instanceof r) && b.isPublic == true && (D === undefined || D == "PKCS8PUB")) { var E = new C(b);var w = E.getEncodedHex();return hextopem(w, "PUBLIC KEY"); }if (D == "PKCS1PRV" && n !== undefined && b instanceof n && (y === undefined || y == null) && b.isPrivate == true) { var E = A(b);var w = E.getEncodedHex();return hextopem(w, "RSA PRIVATE KEY"); }if (D == "PKCS1PRV" && r !== undefined && b instanceof r && (y === undefined || y == null) && b.isPrivate == true) { var i = new z({ name: b.curveName });var v = i.getEncodedHex();var h = B(b);var t = h.getEncodedHex();var p = "";p += hextopem(v, "EC PARAMETERS");p += hextopem(t, "EC PRIVATE KEY");return p; }if (D == "PKCS1PRV" && u !== undefined && b instanceof u && (y === undefined || y == null) && b.isPrivate == true) { var E = x(b);var w = E.getEncodedHex();return hextopem(w, "DSA PRIVATE KEY"); }if (D == "PKCS5PRV" && n !== undefined && b instanceof n && y !== undefined && y != null && b.isPrivate == true) { var E = A(b);var w = E.getEncodedHex();if (m === undefined) { m = "DES-EDE3-CBC"; }return this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA", w, y, m, j); }if (D == "PKCS5PRV" && r !== undefined && b instanceof r && y !== undefined && y != null && b.isPrivate == true) { var E = B(b);var w = E.getEncodedHex();if (m === undefined) { m = "DES-EDE3-CBC"; }return this.getEncryptedPKCS5PEMFromPrvKeyHex("EC", w, y, m, j); }if (D == "PKCS5PRV" && u !== undefined && b instanceof u && y !== undefined && y != null && b.isPrivate == true) { var E = x(b);var w = E.getEncodedHex();if (m === undefined) { m = "DES-EDE3-CBC"; }return this.getEncryptedPKCS5PEMFromPrvKeyHex("DSA", w, y, m, j); }var o = function o(G, s) { var I = c(G, s);var H = new l({ seq: [{ seq: [{ oid: { name: "pkcs5PBES2" } }, { seq: [{ seq: [{ oid: { name: "pkcs5PBKDF2" } }, { seq: [{ octstr: { hex: I.pbkdf2Salt } }, { "int": I.pbkdf2Iter }] }] }, { seq: [{ oid: { name: "des-EDE3-CBC" } }, { octstr: { hex: I.encryptionSchemeIV } }] }] }] }, { octstr: { hex: I.ciphertext } }] });return H.getEncodedHex(); };var c = function c(N, O) { var H = 100;var M = CryptoJS.lib.WordArray.random(8);var L = "DES-EDE3-CBC";var s = CryptoJS.lib.WordArray.random(8);var I = CryptoJS.PBKDF2(O, M, { keySize: 192 / 32, iterations: H });var J = CryptoJS.enc.Hex.parse(N);var K = CryptoJS.TripleDES.encrypt(J, I, { iv: s }) + "";var G = {};G.ciphertext = K;G.pbkdf2Salt = CryptoJS.enc.Hex.stringify(M);G.pbkdf2Iter = H;G.encryptionSchemeAlg = L;G.encryptionSchemeIV = CryptoJS.enc.Hex.stringify(s);return G; };if (D == "PKCS8PRV" && n != undefined && b instanceof n && b.isPrivate == true) { var g = A(b);var d = g.getEncodedHex();var E = l({ seq: [{ "int": 0 }, { seq: [{ oid: { name: "rsaEncryption" } }, { "null": true }] }, { octstr: { hex: d } }] });var w = E.getEncodedHex();if (y === undefined || y == null) { return hextopem(w, "PRIVATE KEY"); } else { var t = o(w, y);return hextopem(t, "ENCRYPTED PRIVATE KEY"); } }if (D == "PKCS8PRV" && r !== undefined && b instanceof r && b.isPrivate == true) { var g = new l({ seq: [{ "int": 1 }, { octstr: { hex: b.prvKeyHex } }, { tag: ["a1", true, { bitstr: { hex: "00" + b.pubKeyHex } }] }] });var d = g.getEncodedHex();var E = l({ seq: [{ "int": 0 }, { seq: [{ oid: { name: "ecPublicKey" } }, { oid: { name: b.curveName } }] }, { octstr: { hex: d } }] });var w = E.getEncodedHex();if (y === undefined || y == null) { return hextopem(w, "PRIVATE KEY"); } else { var t = o(w, y);return hextopem(t, "ENCRYPTED PRIVATE KEY"); } }if (D == "PKCS8PRV" && u !== undefined && b instanceof u && b.isPrivate == true) { var g = new f({ bigint: b.x });var d = g.getEncodedHex();var E = l({ seq: [{ "int": 0 }, { seq: [{ oid: { name: "dsa" } }, { seq: [{ "int": { bigint: b.p } }, { "int": { bigint: b.q } }, { "int": { bigint: b.g } }] }] }, { octstr: { hex: d } }] });var w = E.getEncodedHex();if (y === undefined || y == null) { return hextopem(w, "PRIVATE KEY"); } else { var t = o(w, y);return hextopem(t, "ENCRYPTED PRIVATE KEY"); } }throw new Error("unsupported object nor format"); };KEYUTIL.getKeyFromCSRPEM = function (b) { var a = pemtohex(b, "CERTIFICATE REQUEST");var c = KEYUTIL.getKeyFromCSRHex(a);return c; };KEYUTIL.getKeyFromCSRHex = function (a) { var c = KEYUTIL.parseCSRHex(a);var b = KEYUTIL.getKey(c.p8pubkeyhex, null, "pkcs8pub");return b; };KEYUTIL.parseCSRHex = function (d) { var i = ASN1HEX;var f = i.getChildIdx;var c = i.getTLV;var b = {};var g = d;if (g.substr(0, 2) != "30") { throw new Error("malformed CSR(code:001)"); }var e = f(g, 0);if (e.length < 1) { throw new Error("malformed CSR(code:002)"); }if (g.substr(e[0], 2) != "30") { throw new Error("malformed CSR(code:003)"); }var a = f(g, e[0]);if (a.length < 3) { throw new Error("malformed CSR(code:004)"); }b.p8pubkeyhex = c(g, a[2]);return b; };KEYUTIL.getKeyID = function (f) { var c = KEYUTIL;var e = ASN1HEX;if (typeof f === "string" && f.indexOf("BEGIN ") != -1) { f = c.getKey(f); }var d = pemtohex(c.getPEM(f));var b = e.getIdxbyList(d, 0, [1]);var a = e.getV(d, b).substring(2);return KJUR.crypto.Util.hashHex(a, "sha1"); };KEYUTIL.getJWKFromKey = function (d) { var b = {};if (d instanceof RSAKey && d.isPrivate) { b.kty = "RSA";b.n = hextob64u(d.n.toString(16));b.e = hextob64u(d.e.toString(16));b.d = hextob64u(d.d.toString(16));b.p = hextob64u(d.p.toString(16));b.q = hextob64u(d.q.toString(16));b.dp = hextob64u(d.dmp1.toString(16));b.dq = hextob64u(d.dmq1.toString(16));b.qi = hextob64u(d.coeff.toString(16));return b; } else { if (d instanceof RSAKey && d.isPublic) { b.kty = "RSA";b.n = hextob64u(d.n.toString(16));b.e = hextob64u(d.e.toString(16));return b; } else { if (d instanceof KJUR.crypto.ECDSA && d.isPrivate) { var a = d.getShortNISTPCurveName();if (a !== "P-256" && a !== "P-384") { throw new Error("unsupported curve name for JWT: " + a); }var c = d.getPublicKeyXYHex();b.kty = "EC";b.crv = a;b.x = hextob64u(c.x);b.y = hextob64u(c.y);b.d = hextob64u(d.prvKeyHex);return b; } else { if (d instanceof KJUR.crypto.ECDSA && d.isPublic) { var a = d.getShortNISTPCurveName();if (a !== "P-256" && a !== "P-384") { throw new Error("unsupported curve name for JWT: " + a); }var c = d.getPublicKeyXYHex();b.kty = "EC";b.crv = a;b.x = hextob64u(c.x);b.y = hextob64u(c.y);return b; } } } }throw new Error("not supported key object"); }; RSAKey.getPosArrayOfChildrenFromHex = function (a) { return ASN1HEX.getChildIdx(a, 0); };RSAKey.getHexValueArrayOfChildrenFromHex = function (f) { var n = ASN1HEX;var i = n.getV;var k = RSAKey.getPosArrayOfChildrenFromHex(f);var e = i(f, k[0]);var j = i(f, k[1]);var b = i(f, k[2]);var c = i(f, k[3]);var h = i(f, k[4]);var g = i(f, k[5]);var m = i(f, k[6]);var l = i(f, k[7]);var d = i(f, k[8]);var k = new Array();k.push(e, j, b, c, h, g, m, l, d);return k; };RSAKey.prototype.readPrivateKeyFromPEMString = function (d) { var c = pemtohex(d);var b = RSAKey.getHexValueArrayOfChildrenFromHex(c);this.setPrivateEx(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8]); };RSAKey.prototype.readPKCS5PrvKeyHex = function (c) { var b = RSAKey.getHexValueArrayOfChildrenFromHex(c);this.setPrivateEx(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8]); };RSAKey.prototype.readPKCS8PrvKeyHex = function (e) { var c, i, k, b, a, f, d, j;var m = ASN1HEX;var l = m.getVbyListEx;if (m.isASN1HEX(e) === false) { throw new Error("not ASN.1 hex string"); }try { c = l(e, 0, [2, 0, 1], "02");i = l(e, 0, [2, 0, 2], "02");k = l(e, 0, [2, 0, 3], "02");b = l(e, 0, [2, 0, 4], "02");a = l(e, 0, [2, 0, 5], "02");f = l(e, 0, [2, 0, 6], "02");d = l(e, 0, [2, 0, 7], "02");j = l(e, 0, [2, 0, 8], "02"); } catch (g) { throw new Error("malformed PKCS#8 plain RSA private key"); }this.setPrivateEx(c, i, k, b, a, f, d, j); };RSAKey.prototype.readPKCS5PubKeyHex = function (c) { var e = ASN1HEX;var b = e.getV;if (e.isASN1HEX(c) === false) { throw new Error("keyHex is not ASN.1 hex string"); }var a = e.getChildIdx(c, 0);if (a.length !== 2 || c.substr(a[0], 2) !== "02" || c.substr(a[1], 2) !== "02") { throw new Error("wrong hex for PKCS#5 public key"); }var f = b(c, a[0]);var d = b(c, a[1]);this.setPublic(f, d); };RSAKey.prototype.readPKCS8PubKeyHex = function (b) { var c = ASN1HEX;if (c.isASN1HEX(b) === false) { throw new Error("not ASN.1 hex string"); }if (c.getTLVbyListEx(b, 0, [0, 0]) !== "06092a864886f70d010101") { throw new Error("not PKCS8 RSA public key"); }var a = c.getTLVbyListEx(b, 0, [1, 0]);this.readPKCS5PubKeyHex(a); };RSAKey.prototype.readCertPubKeyHex = function (b, d) { var a, c;a = new X509();a.readCertHex(b);c = a.getPublicKeyHex();this.readPKCS8PubKeyHex(c); }; var _RE_HEXDECONLY = new RegExp("[^0-9a-f]", "gi");function _rsasign_getHexPaddedDigestInfoForString(d, e, a) { var b = function b(f) { return KJUR.crypto.Util.hashString(f, a); };var c = b(d);return KJUR.crypto.Util.getPaddedDigestInfoHex(c, a, e); }function _zeroPaddingOfSignature(e, d) { var c = "";var a = d / 4 - e.length;for (var b = 0; b < a; b++) { c = c + "0"; }return c + e; }RSAKey.prototype.sign = function (d, a) { var b = function b(e) { return KJUR.crypto.Util.hashString(e, a); };var c = b(d);return this.signWithMessageHash(c, a); };RSAKey.prototype.signWithMessageHash = function (e, c) { var f = KJUR.crypto.Util.getPaddedDigestInfoHex(e, c, this.n.bitLength());var b = parseBigInt(f, 16);var d = this.doPrivate(b);var a = d.toString(16);return _zeroPaddingOfSignature(a, this.n.bitLength()); };function pss_mgf1_str(c, a, e) { var b = "", d = 0;while (b.length < a) { b += hextorstr(e(rstrtohex(c + String.fromCharCode.apply(String, [(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255]))));d += 1; }return b; }RSAKey.prototype.signPSS = function (e, a, d) { var c = function c(f) { return KJUR.crypto.Util.hashHex(f, a); };var b = c(rstrtohex(e));if (d === undefined) { d = -1; }return this.signWithMessageHashPSS(b, a, d); };RSAKey.prototype.signWithMessageHashPSS = function (l, a, k) { var b = hextorstr(l);var g = b.length;var m = this.n.bitLength() - 1;var c = Math.ceil(m / 8);var d;var o = function o(i) { return KJUR.crypto.Util.hashHex(i, a); };if (k === -1 || k === undefined) { k = g; } else { if (k === -2) { k = c - g - 2; } else { if (k < -2) { throw new Error("invalid salt length"); } } }if (c < g + k + 2) { throw new Error("data too long"); }var f = "";if (k > 0) { f = new Array(k);new SecureRandom().nextBytes(f);f = String.fromCharCode.apply(String, f); }var n = hextorstr(o(rstrtohex("\x00\x00\x00\x00\x00\x00\x00\x00" + b + f)));var j = [];for (d = 0; d < c - k - g - 2; d += 1) { j[d] = 0; }var e = String.fromCharCode.apply(String, j) + "\x01" + f;var h = pss_mgf1_str(n, e.length, o);var q = [];for (d = 0; d < e.length; d += 1) { q[d] = e.charCodeAt(d) ^ h.charCodeAt(d); }var p = 65280 >> 8 * c - m & 255;q[0] &= ~p;for (d = 0; d < g; d++) { q.push(n.charCodeAt(d)); }q.push(188);return _zeroPaddingOfSignature(this.doPrivate(new BigInteger(q)).toString(16), this.n.bitLength()); };function _rsasign_getDecryptSignatureBI(a, d, c) { var b = new RSAKey();b.setPublic(d, c);var e = b.doPublic(a);return e; }function _rsasign_getHexDigestInfoFromSig(a, c, b) { var e = _rsasign_getDecryptSignatureBI(a, c, b);var d = e.toString(16).replace(/^1f+00/, "");return d; }function _rsasign_getAlgNameAndHashFromHexDisgestInfo(f) { for (var e in KJUR.crypto.Util.DIGESTINFOHEAD) { var d = KJUR.crypto.Util.DIGESTINFOHEAD[e];var b = d.length;if (f.substring(0, b) == d) { var c = [e, f.substring(b)];return c; } }return []; }RSAKey.prototype.verify = function (f, l) { l = l.toLowerCase();if (l.match(/^[0-9a-f]+$/) == null) { return false; }var b = parseBigInt(l, 16);var k = this.n.bitLength();if (b.bitLength() > k) { return false; }var j = this.doPublic(b);var i = j.toString(16);if (i.length + 3 != k / 4) { return false; }var e = i.replace(/^1f+00/, "");var g = _rsasign_getAlgNameAndHashFromHexDisgestInfo(e);if (g.length == 0) { return false; }var d = g[0];var h = g[1];var a = function a(m) { return KJUR.crypto.Util.hashString(m, d); };var c = a(f);return h == c; };RSAKey.prototype.verifyWithMessageHash = function (e, a) { if (a.length != Math.ceil(this.n.bitLength() / 4)) { return false; }var b = parseBigInt(a, 16);if (b.bitLength() > this.n.bitLength()) { return 0; }var h = this.doPublic(b);var g = h.toString(16).replace(/^1f+00/, "");var c = _rsasign_getAlgNameAndHashFromHexDisgestInfo(g);if (c.length == 0) { return false; }var d = c[0];var f = c[1];return f == e; };RSAKey.prototype.verifyPSS = function (c, b, a, f) { var e = function e(g) { return KJUR.crypto.Util.hashHex(g, a); };var d = e(rstrtohex(c));if (f === undefined) { f = -1; }return this.verifyWithMessageHashPSS(d, b, a, f); };RSAKey.prototype.verifyWithMessageHashPSS = function (f, s, l, c) { if (s.length != Math.ceil(this.n.bitLength() / 4)) { return false; }var k = new BigInteger(s, 16);var r = function r(i) { return KJUR.crypto.Util.hashHex(i, l); };var j = hextorstr(f);var h = j.length;var g = this.n.bitLength() - 1;var m = Math.ceil(g / 8);var q;if (c === -1 || c === undefined) { c = h; } else { if (c === -2) { c = m - h - 2; } else { if (c < -2) { throw new Error("invalid salt length"); } } }if (m < h + c + 2) { throw new Error("data too long"); }var a = this.doPublic(k).toByteArray();for (q = 0; q < a.length; q += 1) { a[q] &= 255; }while (a.length < m) { a.unshift(0); }if (a[m - 1] !== 188) { throw new Error("encoded message does not end in 0xbc"); }a = String.fromCharCode.apply(String, a);var d = a.substr(0, m - h - 1);var e = a.substr(d.length, h);var p = 65280 >> 8 * m - g & 255;if ((d.charCodeAt(0) & p) !== 0) { throw new Error("bits beyond keysize not zero"); }var n = pss_mgf1_str(e, d.length, r);var o = [];for (q = 0; q < d.length; q += 1) { o[q] = d.charCodeAt(q) ^ n.charCodeAt(q); }o[0] &= ~p;var b = m - h - c - 2;for (q = 0; q < b; q += 1) { if (o[q] !== 0) { throw new Error("leftmost octets not zero"); } }if (o[b] !== 1) { throw new Error("0x01 marker not found"); }return e === hextorstr(r(rstrtohex("\x00\x00\x00\x00\x00\x00\x00\x00" + j + String.fromCharCode.apply(String, o.slice(-c))))); };RSAKey.SALT_LEN_HLEN = -1;RSAKey.SALT_LEN_MAX = -2;RSAKey.SALT_LEN_RECOVER = -2; function X509(q) { var j = ASN1HEX, n = j.getChildIdx, g = j.getV, b = j.getTLV, c = j.getVbyList, k = j.getVbyListEx, a = j.getTLVbyList, l = j.getTLVbyListEx, h = j.getIdxbyList, e = j.getIdxbyListEx, i = j.getVidx, s = j.getInt, p = j.oidname, m = j.hextooidstr, d = X509, r = pemtohex, f;try { f = KJUR.asn1.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV; } catch (o) {}this.HEX2STAG = { "0c": "utf8", "13": "prn", "16": "ia5", "1a": "vis", "1e": "bmp" };this.hex = null;this.version = 0;this.foffset = 0;this.aExtInfo = null;this.getVersion = function () { if (this.hex === null || this.version !== 0) { return this.version; }var u = a(this.hex, 0, [0, 0]);if (u.substr(0, 2) == "a0") { var v = a(u, 0, [0]);var t = s(v, 0);if (t < 0 || 2 < t) { throw new Error("malformed version field"); }this.version = t + 1;return this.version; } else { this.version = 1;this.foffset = -1;return 1; } };this.getSerialNumberHex = function () { return k(this.hex, 0, [0, 0], "02"); };this.getSignatureAlgorithmField = function () { var t = l(this.hex, 0, [0, 1]);return this.getAlgorithmIdentifierName(t); };this.getAlgorithmIdentifierName = function (t) { for (var u in f) { if (t === f[u]) { return u; } }return p(k(t, 0, [0], "06")); };this.getIssuer = function () { return this.getX500Name(this.getIssuerHex()); };this.getIssuerHex = function () { return a(this.hex, 0, [0, 3 + this.foffset], "30"); };this.getIssuerString = function () { var t = this.getIssuer();return t.str; };this.getSubject = function () { return this.getX500Name(this.getSubjectHex()); };this.getSubjectHex = function () { return a(this.hex, 0, [0, 5 + this.foffset], "30"); };this.getSubjectString = function () { var t = this.getSubject();return t.str; };this.getNotBefore = function () { var t = c(this.hex, 0, [0, 4 + this.foffset, 0]);t = t.replace(/(..)/g, "%$1");t = decodeURIComponent(t);return t; };this.getNotAfter = function () { var t = c(this.hex, 0, [0, 4 + this.foffset, 1]);t = t.replace(/(..)/g, "%$1");t = decodeURIComponent(t);return t; };this.getPublicKeyHex = function () { return j.getTLVbyList(this.hex, 0, [0, 6 + this.foffset], "30"); };this.getPublicKeyIdx = function () { return h(this.hex, 0, [0, 6 + this.foffset], "30"); };this.getPublicKeyContentIdx = function () { var t = this.getPublicKeyIdx();return h(this.hex, t, [1, 0], "30"); };this.getPublicKey = function () { return KEYUTIL.getKey(this.getPublicKeyHex(), null, "pkcs8pub"); };this.getSignatureAlgorithmName = function () { var t = a(this.hex, 0, [1], "30");return this.getAlgorithmIdentifierName(t); };this.getSignatureValueHex = function () { return c(this.hex, 0, [2], "03", true); };this.verifySignature = function (v) { var w = this.getSignatureAlgorithmField();var t = this.getSignatureValueHex();var u = a(this.hex, 0, [0], "30");var x = new KJUR.crypto.Signature({ alg: w });x.init(v);x.updateHex(u);return x.verify(t); };this.parseExt = function (C) { var v, t, x;if (C === undefined) { x = this.hex;if (this.version !== 3) { return -1; }v = h(x, 0, [0, 7, 0], "30");t = n(x, v); } else { x = pemtohex(C);var y = h(x, 0, [0, 3, 0, 0], "06");if (g(x, y) != "2a864886f70d01090e") { this.aExtInfo = new Array();return; }v = h(x, 0, [0, 3, 0, 1, 0], "30");t = n(x, v);this.hex = x; }this.aExtInfo = new Array();for (var w = 0; w < t.length; w++) { var A = {};A.critical = false;var z = n(x, t[w]);var u = 0;if (z.length === 3) { A.critical = true;u = 1; }A.oid = j.hextooidstr(c(x, t[w], [0], "06"));var B = h(x, t[w], [1 + u]);A.vidx = i(x, B);this.aExtInfo.push(A); } };this.getExtInfo = function (v) { var t = this.aExtInfo;var w = v;if (!v.match(/^[0-9.]+$/)) { w = KJUR.asn1.x509.OID.name2oid(v); }if (w === "") { return undefined; }for (var u = 0; u < t.length; u++) { if (t[u].oid === w) { return t[u]; } }return undefined; };this.getExtBasicConstraints = function (u, y) { if (u === undefined && y === undefined) { var w = this.getExtInfo("basicConstraints");if (w === undefined) { return undefined; }u = b(this.hex, w.vidx);y = w.critical; }var t = { extname: "basicConstraints" };if (y) { t.critical = true; }if (u === "3000") { return t; }if (u === "30030101ff") { t.cA = true;return t; }if (u.substr(0, 12) === "30060101ff02") { var x = g(u, 10);var v = parseInt(x, 16);t.cA = true;t.pathLen = v;return t; }throw new Error("hExtV parse error: " + u); };this.getExtKeyUsage = function (u, w) { if (u === undefined && w === undefined) { var v = this.getExtInfo("keyUsage");if (v === undefined) { return undefined; }u = b(this.hex, v.vidx);w = v.critical; }var t = { extname: "keyUsage" };if (w) { t.critical = true; }t.names = this.getExtKeyUsageString(u).split(",");return t; };this.getExtKeyUsageBin = function (u) { if (u === undefined) { var v = this.getExtInfo("keyUsage");if (v === undefined) { return ""; }u = b(this.hex, v.vidx); }if (u.length != 8 && u.length != 10) { throw new Error("malformed key usage value: " + u); }var t = "000000000000000" + parseInt(u.substr(6), 16).toString(2);if (u.length == 8) { t = t.slice(-8); }if (u.length == 10) { t = t.slice(-16); }t = t.replace(/0+$/, "");if (t == "") { t = "0"; }return t; };this.getExtKeyUsageString = function (v) { var w = this.getExtKeyUsageBin(v);var t = new Array();for (var u = 0; u < w.length; u++) { if (w.substr(u, 1) == "1") { t.push(X509.KEYUSAGE_NAME[u]); } }return t.join(","); };this.getExtSubjectKeyIdentifier = function (v, x) { if (v === undefined && x === undefined) { var w = this.getExtInfo("subjectKeyIdentifier");if (w === undefined) { return undefined; }v = b(this.hex, w.vidx);x = w.critical; }var t = { extname: "subjectKeyIdentifier" };if (x) { t.critical = true; }var u = g(v, 0);t.kid = { hex: u };return t; };this.getExtAuthorityKeyIdentifier = function (z, x) { if (z === undefined && x === undefined) { var t = this.getExtInfo("authorityKeyIdentifier");if (t === undefined) { return undefined; }z = b(this.hex, t.vidx);x = t.critical; }var A = { extname: "authorityKeyIdentifier" };if (x) { A.critical = true; }var y = n(z, 0);for (var u = 0; u < y.length; u++) { var B = z.substr(y[u], 2);if (B === "80") { A.kid = { hex: g(z, y[u]) }; }if (B === "a1") { var w = b(z, y[u]);var v = this.getGeneralNames(w);A.issuer = v[0]["dn"]; }if (B === "82") { A.sn = { hex: g(z, y[u]) }; } }return A; };this.getExtExtKeyUsage = function (w, y) { if (w === undefined && y === undefined) { var x = this.getExtInfo("extKeyUsage");if (x === undefined) { return undefined; }w = b(this.hex, x.vidx);y = x.critical; }var t = { extname: "extKeyUsage", array: [] };if (y) { t.critical = true; }var u = n(w, 0);for (var v = 0; v < u.length; v++) { t.array.push(p(g(w, u[v]))); }return t; };this.getExtExtKeyUsageName = function () { var x = this.getExtInfo("extKeyUsage");if (x === undefined) { return x; }var t = new Array();var w = b(this.hex, x.vidx);if (w === "") { return t; }var u = n(w, 0);for (var v = 0; v < u.length; v++) { t.push(p(g(w, u[v]))); }return t; };this.getExtSubjectAltName = function (u, w) { if (u === undefined && w === undefined) { var v = this.getExtInfo("subjectAltName");if (v === undefined) { return undefined; }u = b(this.hex, v.vidx);w = v.critical; }var t = { extname: "subjectAltName", array: [] };if (w) { t.critical = true; }t.array = this.getGeneralNames(u);return t; };this.getExtIssuerAltName = function (u, w) { if (u === undefined && w === undefined) { var v = this.getExtInfo("issuerAltName");if (v === undefined) { return undefined; }u = b(this.hex, v.vidx);w = v.critical; }var t = { extname: "issuerAltName", array: [] };if (w) { t.critical = true; }t.array = this.getGeneralNames(u);return t; };this.getGeneralNames = function (x) { var v = n(x, 0);var t = [];for (var w = 0; w < v.length; w++) { var u = this.getGeneralName(b(x, v[w]));if (u !== undefined) { t.push(u); } }return t; };this.getGeneralName = function (u) { var t = u.substr(0, 2);var w = g(u, 0);var v = hextorstr(w);if (t == "81") { return { rfc822: v }; }if (t == "82") { return { dns: v }; }if (t == "86") { return { uri: v }; }if (t == "87") { return { ip: hextoip(w) }; }if (t == "a4") { return { dn: this.getX500Name(w) }; }return undefined; };this.getExtSubjectAltName2 = function () { var x, A, z;var y = this.getExtInfo("subjectAltName");if (y === undefined) { return y; }var t = new Array();var w = b(this.hex, y.vidx);var u = n(w, 0);for (var v = 0; v < u.length; v++) { z = w.substr(u[v], 2);x = g(w, u[v]);if (z === "81") { A = hextoutf8(x);t.push(["MAIL", A]); }if (z === "82") { A = hextoutf8(x);t.push(["DNS", A]); }if (z === "84") { A = X509.hex2dn(x, 0);t.push(["DN", A]); }if (z === "86") { A = hextoutf8(x);t.push(["URI", A]); }if (z === "87") { A = hextoip(x);t.push(["IP", A]); } }return t; };this.getExtCRLDistributionPoints = function (x, z) { if (x === undefined && z === undefined) { var y = this.getExtInfo("cRLDistributionPoints");if (y === undefined) { return undefined; }x = b(this.hex, y.vidx);z = y.critical; }var u = { extname: "cRLDistributionPoints", array: [] };if (z) { u.critical = true; }var v = n(x, 0);for (var w = 0; w < v.length; w++) { var t = b(x, v[w]);u.array.push(this.getDistributionPoint(t)); }return u; };this.getDistributionPoint = function (y) { var v = {};var w = n(y, 0);for (var x = 0; x < w.length; x++) { var u = y.substr(w[x], 2);var t = b(y, w[x]);if (u == "a0") { v.dpname = this.getDistributionPointName(t); } }return v; };this.getDistributionPointName = function (y) { var v = {};var w = n(y, 0);for (var x = 0; x < w.length; x++) { var u = y.substr(w[x], 2);var t = b(y, w[x]);if (u == "a0") { v.full = this.getGeneralNames(t); } }return v; };this.getExtCRLDistributionPointsURI = function () { var y = this.getExtInfo("cRLDistributionPoints");if (y === undefined) { return y; }var t = new Array();var u = n(this.hex, y.vidx);for (var w = 0; w < u.length; w++) { try { var z = c(this.hex, u[w], [0, 0, 0], "86");var x = hextoutf8(z);t.push(x); } catch (v) {} }return t; };this.getExtAIAInfo = function () { var x = this.getExtInfo("authorityInfoAccess");if (x === undefined) { return x; }var t = { ocsp: [], caissuer: [] };var u = n(this.hex, x.vidx);for (var v = 0; v < u.length; v++) { var y = c(this.hex, u[v], [0], "06");var w = c(this.hex, u[v], [1], "86");if (y === "2b06010505073001") { t.ocsp.push(hextoutf8(w)); }if (y === "2b06010505073002") { t.caissuer.push(hextoutf8(w)); } }return t; };this.getExtAuthorityInfoAccess = function (A, y) { if (A === undefined && y === undefined) { var t = this.getExtInfo("authorityInfoAccess");if (t === undefined) { return undefined; }A = b(this.hex, t.vidx);y = t.critical; }var B = { extname: "authorityInfoAccess", array: [] };if (y) { B.critical = true; }var z = n(A, 0);for (var u = 0; u < z.length; u++) { var x = k(A, z[u], [0], "06");var v = c(A, z[u], [1], "86");var w = hextoutf8(v);if (x == "2b06010505073001") { B.array.push({ ocsp: w }); } else { if (x == "2b06010505073002") { B.array.push({ caissuer: w }); } else { throw new Error("unknown method: " + x); } } }return B; };this.getExtCertificatePolicies = function (x, A) { if (x === undefined && A === undefined) { var z = this.getExtInfo("certificatePolicies");if (z === undefined) { return undefined; }x = b(this.hex, z.vidx);A = z.critical; }var t = { extname: "certificatePolicies", array: [] };if (A) { t.critical = true; }var u = n(x, 0);for (var v = 0; v < u.length; v++) { var y = b(x, u[v]);var w = this.getPolicyInformation(y);t.array.push(w); }return t; };this.getPolicyInformation = function (x) { var t = {};var z = c(x, 0, [0], "06");t.policyoid = p(z);var A = e(x, 0, [1], "30");if (A != -1) { t.array = [];var u = n(x, A);for (var v = 0; v < u.length; v++) { var y = b(x, u[v]);var w = this.getPolicyQualifierInfo(y);t.array.push(w); } }return t; };this.getPolicyQualifierInfo = function (u) { var t = {};var v = c(u, 0, [0], "06");if (v === "2b06010505070201") { var x = k(u, 0, [1], "16");t.cps = hextorstr(x); } else { if (v === "2b06010505070202") { var w = a(u, 0, [1], "30");t.unotice = this.getUserNotice(w); } }return t; };this.getUserNotice = function (x) { var u = {};var v = n(x, 0);for (var w = 0; w < v.length; w++) { var t = b(x, v[w]);if (t.substr(0, 2) != "30") { u.exptext = this.getDisplayText(t); } }return u; };this.getDisplayText = function (u) { var v = { "0c": "utf8", "16": "ia5", "1a": "vis", "1e": "bmp" };var t = {};t.type = v[u.substr(0, 2)];t.str = hextorstr(g(u, 0));return t; };this.getExtCRLNumber = function (u, v) { var t = { extname: "cRLNumber" };if (v) { t.critical = true; }if (u.substr(0, 2) == "02") { t.num = { hex: g(u, 0) };return t; }throw new Error("hExtV parse error: " + u); };this.getExtCRLReason = function (u, v) { var t = { extname: "cRLReason" };if (v) { t.critical = true; }if (u.substr(0, 2) == "0a") { t.code = parseInt(g(u, 0), 16);return t; }throw new Error("hExtV parse error: " + u); };this.getExtOcspNonce = function (u, w) { var t = { extname: "ocspNonce" };if (w) { t.critical = true; }var v = g(u, 0);t.hex = v;return t; };this.getExtOcspNoCheck = function (u, v) { var t = { extname: "ocspNoCheck" };if (v) { t.critical = true; }return t; };this.getExtAdobeTimeStamp = function (w, z) { if (w === undefined && z === undefined) { var y = this.getExtInfo("adobeTimeStamp");if (y === undefined) { return undefined; }w = b(this.hex, y.vidx);z = y.critical; }var t = { extname: "adobeTimeStamp" };if (z) { t.critical = true; }var v = n(w, 0);if (v.length > 1) { var A = b(w, v[1]);var u = this.getGeneralName(A);if (u.uri != undefined) { t.uri = u.uri; } }if (v.length > 2) { var x = b(w, v[2]);if (x == "0101ff") { t.reqauth = true; }if (x == "010100") { t.reqauth = false; } }return t; };this.getX500NameRule = function (t) { var A = true;var E = true;var D = false;var u = "";var x = "";var G = null;var B = [];for (var w = 0; w < t.length; w++) { var y = t[w];for (var v = 0; v < y.length; v++) { B.push(y[v]); } }for (var w = 0; w < B.length; w++) { var F = B[w];var H = F.ds;var C = F.value;var z = F.type;u += ":" + H;if (H != "prn" && H != "utf8" && H != "ia5") { return "mixed"; }if (H == "ia5") { if (z != "CN") { return "mixed"; } else { if (!KJUR.lang.String.isMail(C)) { return "mixed"; } else { continue; } } }if (z == "C") { if (H == "prn") { continue; } else { return "mixed"; } }x += ":" + H;if (G == null) { G = H; } else { if (G !== H) { return "mixed"; } } }if (G == null) { return "prn"; } else { return G; } };this.getX500Name = function (v) { var t = this.getX500NameArray(v);var u = this.dnarraytostr(t);return { array: t, str: u }; };this.getX500NameArray = function (w) { var t = [];var u = n(w, 0);for (var v = 0; v < u.length; v++) { t.push(this.getRDN(b(w, u[v]))); }return t; };this.getRDN = function (w) { var t = [];var u = n(w, 0);for (var v = 0; v < u.length; v++) { t.push(this.getAttrTypeAndValue(b(w, u[v]))); }return t; };this.getAttrTypeAndValue = function (v) { var t = { type: null, value: null, ds: null };var u = n(v, 0);var y = c(v, u[0], [], "06");var x = c(v, u[1], []);var w = KJUR.asn1.ASN1Util.oidHexToInt(y);t.type = KJUR.asn1.x509.OID.oid2atype(w);t.ds = this.HEX2STAG[v.substr(u[1], 2)];if (t.ds != "bmp") { t.value = hextoutf8(x); } else { t.value = ucs2hextoutf8(x); }return t; };this.readCertPEM = function (t) { this.readCertHex(r(t)); };this.readCertHex = function (t) { this.hex = t;this.getVersion();try { h(this.hex, 0, [0, 7], "a3");this.parseExt(); } catch (u) {} };this.getParam = function () { var t = {};t.version = this.getVersion();t.serial = { hex: this.getSerialNumberHex() };t.sigalg = this.getSignatureAlgorithmField();t.issuer = this.getIssuer();t.notbefore = this.getNotBefore();t.notafter = this.getNotAfter();t.subject = this.getSubject();t.sbjpubkey = hextopem(this.getPublicKeyHex(), "PUBLIC KEY");if (this.aExtInfo.length > 0) { t.ext = this.getExtParamArray(); }t.sighex = this.getSignatureValueHex();return t; };this.getExtParamArray = function (u) { if (u == undefined) { var w = e(this.hex, 0, [0, "[3]"]);if (w != -1) { u = l(this.hex, 0, [0, "[3]", 0], "30"); } }var t = [];var v = n(u, 0);for (var x = 0; x < v.length; x++) { var z = b(u, v[x]);var y = this.getExtParam(z);if (y != null) { t.push(y); } }return t; };this.getExtParam = function (u) { var B = {};var w = n(u, 0);var x = w.length;if (x != 2 && x != 3) { throw new Error("wrong number elements in Extension: " + x + " " + u); }var v = m(c(u, 0, [0], "06"));var z = false;if (x == 3 && a(u, 0, [1]) == "0101ff") { z = true; }var A = a(u, 0, [x - 1, 0]);var y = undefined;if (v == "2.5.29.14") { y = this.getExtSubjectKeyIdentifier(A, z); } else { if (v == "2.5.29.15") { y = this.getExtKeyUsage(A, z); } else { if (v == "2.5.29.17") { y = this.getExtSubjectAltName(A, z); } else { if (v == "2.5.29.18") { y = this.getExtIssuerAltName(A, z); } else { if (v == "2.5.29.19") { y = this.getExtBasicConstraints(A, z); } else { if (v == "2.5.29.31") { y = this.getExtCRLDistributionPoints(A, z); } else { if (v == "2.5.29.32") { y = this.getExtCertificatePolicies(A, z); } else { if (v == "2.5.29.35") { y = this.getExtAuthorityKeyIdentifier(A, z); } else { if (v == "2.5.29.37") { y = this.getExtExtKeyUsage(A, z); } else { if (v == "1.3.6.1.5.5.7.1.1") { y = this.getExtAuthorityInfoAccess(A, z); } else { if (v == "2.5.29.20") { y = this.getExtCRLNumber(A, z); } else { if (v == "2.5.29.21") { y = this.getExtCRLReason(A, z); } else { if (v == "1.3.6.1.5.5.7.48.1.2") { y = this.getExtOcspNonce(A, z); } else { if (v == "1.3.6.1.5.5.7.48.1.5") { y = this.getExtOcspNoCheck(A, z); } else { if (v == "1.2.840.113583.1.1.9.1") { y = this.getExtAdobeTimeStamp(A, z); } } } } } } } } } } } } } } }if (y != undefined) { return y; }var t = { extname: v, extn: A };if (z) { t.critical = true; }return t; };this.findExt = function (u, v) { for (var t = 0; t < u.length; t++) { if (u[t].extname == v) { return u[t]; } }return null; };this.updateExtCDPFullURI = function (x, t) { var w = this.findExt(x, "cRLDistributionPoints");if (w == null) { return; }if (w.array == undefined) { return; }var z = w.array;for (var v = 0; v < z.length; v++) { if (z[v].dpname == undefined) { continue; }if (z[v].dpname.full == undefined) { continue; }var A = z[v].dpname.full;for (var u = 0; u < A.length; u++) { var y = A[v];if (y.uri == undefined) { continue; }y.uri = t; } } };this.updateExtAIAOCSP = function (x, u) { var w = this.findExt(x, "authorityInfoAccess");if (w == null) { return; }if (w.array == undefined) { return; }var t = w.array;for (var v = 0; v < t.length; v++) { if (t[v].ocsp != undefined) { t[v].ocsp = u; } } };this.updateExtAIACAIssuer = function (x, u) { var w = this.findExt(x, "authorityInfoAccess");if (w == null) { return; }if (w.array == undefined) { return; }var t = w.array;for (var v = 0; v < t.length; v++) { if (t[v].caissuer != undefined) { t[v].caissuer = u; } } };this.dnarraytostr = function (v) { function t(w) { return w.map(function (y) { return u(y).replace(/\+/, "\\+"); }).join("+"); }function u(w) { return w.type + "=" + w.value; }return "/" + v.map(function (w) { return t(w).replace(/\//, "\\/"); }).join("/"); };this.getInfo = function () { var u = function u(M) { var L = JSON.stringify(M.array).replace(/[\[\]\{\}\"]/g, "");return L; };var A = function A(R) { var P = "";var L = R.array;for (var O = 0; O < L.length; O++) { var Q = L[O];P += " policy oid: " + Q.policyoid + "\n";if (Q.array === undefined) { continue; }for (var N = 0; N < Q.array.length; N++) { var M = Q.array[N];if (M.cps !== undefined) { P += " cps: " + M.cps + "\n"; } } }return P; };var D = function D(P) { var O = "";var L = P.array;for (var N = 0; N < L.length; N++) { var Q = L[N];try { if (Q.dpname.full[0].uri !== undefined) { O += " " + Q.dpname.full[0].uri + "\n"; } } catch (M) {}try { if (Q.dname.full[0].dn.hex !== undefined) { O += " " + X509.hex2dn(Q.dpname.full[0].dn.hex) + "\n"; } } catch (M) {} }return O; };var B = function B(P) { var O = "";var L = P.array;for (var M = 0; M < L.length; M++) { var N = L[M];if (N.caissuer !== undefined) { O += " caissuer: " + N.caissuer + "\n"; }if (N.ocsp !== undefined) { O += " ocsp: " + N.ocsp + "\n"; } }return O; };var v = X509;var F, E, K;F = "Basic Fields\n";F += " serial number: " + this.getSerialNumberHex() + "\n";F += " signature algorithm: " + this.getSignatureAlgorithmField() + "\n";F += " issuer: " + this.getIssuerString() + "\n";F += " notBefore: " + this.getNotBefore() + "\n";F += " notAfter: " + this.getNotAfter() + "\n";F += " subject: " + this.getSubjectString() + "\n";F += " subject public key info: \n";E = this.getPublicKey();F += " key algorithm: " + E.type + "\n";if (E.type === "RSA") { F += " n=" + hextoposhex(E.n.toString(16)).substr(0, 16) + "...\n";F += " e=" + hextoposhex(E.e.toString(16)) + "\n"; }K = this.aExtInfo;if (K !== undefined && K !== null) { F += "X509v3 Extensions:\n";for (var H = 0; H < K.length; H++) { var J = K[H];var t = KJUR.asn1.x509.OID.oid2name(J.oid);if (t === "") { t = J.oid; }var G = "";if (J.critical === true) { G = "CRITICAL"; }F += " " + t + " " + G + ":\n";if (t === "basicConstraints") { var w = this.getExtBasicConstraints();if (w.cA === undefined) { F += " {}\n"; } else { F += " cA=true";if (w.pathLen !== undefined) { F += ", pathLen=" + w.pathLen; }F += "\n"; } } else { if (t === "keyUsage") { F += " " + this.getExtKeyUsageString() + "\n"; } else { if (t === "subjectKeyIdentifier") { F += " " + this.getExtSubjectKeyIdentifier().kid.hex + "\n"; } else { if (t === "authorityKeyIdentifier") { var x = this.getExtAuthorityKeyIdentifier();if (x.kid !== undefined) { F += " kid=" + x.kid.hex + "\n"; } } else { if (t === "extKeyUsage") { var I = this.getExtExtKeyUsage().array;F += " " + I.join(", ") + "\n"; } else { if (t === "subjectAltName") { var y = u(this.getExtSubjectAltName());F += " " + y + "\n"; } else { if (t === "cRLDistributionPoints") { var C = this.getExtCRLDistributionPoints();F += D(C); } else { if (t === "authorityInfoAccess") { var z = this.getExtAuthorityInfoAccess();F += B(z); } else { if (t === "certificatePolicies") { F += A(this.getExtCertificatePolicies()); } } } } } } } } } } }F += "signature algorithm: " + this.getSignatureAlgorithmName() + "\n";F += "signature: " + this.getSignatureValueHex().substr(0, 16) + "...\n";return F; };if (typeof q == "string") { if (q.indexOf("-----BEGIN") != -1) { this.readCertPEM(q); } else { if (KJUR.lang.String.isHex(q)) { this.readCertHex(q); } } } }X509.hex2dn = function (e, b) { if (b === undefined) { b = 0; }var a = new X509();var c = ASN1HEX.getTLV(e, b);var d = a.getX500Name(e);return d.str; };X509.hex2rdn = function (f, b) { if (b === undefined) { b = 0; }if (f.substr(b, 2) !== "31") { throw new Error("malformed RDN"); }var c = new Array();var d = ASN1HEX.getChildIdx(f, b);for (var e = 0; e < d.length; e++) { c.push(X509.hex2attrTypeValue(f, d[e])); }c = c.map(function (a) { return a.replace("+", "\\+"); });return c.join("+"); };X509.hex2attrTypeValue = function (d, i) { var j = ASN1HEX;var h = j.getV;if (i === undefined) { i = 0; }if (d.substr(i, 2) !== "30") { throw new Error("malformed attribute type and value"); }var g = j.getChildIdx(d, i);if (g.length !== 2 || d.substr(g[0], 2) !== "06") { "malformed attribute type and value"; }var b = h(d, g[0]);var f = KJUR.asn1.ASN1Util.oidHexToInt(b);var e = KJUR.asn1.x509.OID.oid2atype(f);var a = h(d, g[1]);var c = hextorstr(a);return e + "=" + c; };X509.getPublicKeyFromCertHex = function (b) { var a = new X509();a.readCertHex(b);return a.getPublicKey(); };X509.getPublicKeyFromCertPEM = function (b) { var a = new X509();a.readCertPEM(b);return a.getPublicKey(); };X509.getPublicKeyInfoPropOfCertPEM = function (c) { var e = ASN1HEX;var g = e.getVbyList;var b = {};var a, f, d;b.algparam = null;a = new X509();a.readCertPEM(c);f = a.getPublicKeyHex();b.keyhex = g(f, 0, [1], "03").substr(2);b.algoid = g(f, 0, [0, 0], "06");if (b.algoid === "2a8648ce3d0201") { b.algparam = g(f, 0, [0, 1], "06"); }return b; };X509.KEYUSAGE_NAME = ["digitalSignature", "nonRepudiation", "keyEncipherment", "dataEncipherment", "keyAgreement", "keyCertSign", "cRLSign", "encipherOnly", "decipherOnly"]; if (typeof KJUR == "undefined" || !KJUR) { exports.KJUR = KJUR = {}; }if (typeof KJUR.jws == "undefined" || !KJUR.jws) { KJUR.jws = {}; }KJUR.jws.JWS = function () { var b = KJUR, a = b.jws.JWS, c = a.isSafeJSONString;this.parseJWS = function (g, j) { if (this.parsedJWS !== undefined && (j || this.parsedJWS.sigvalH !== undefined)) { return; }var i = g.match(/^([^.]+)\.([^.]+)\.([^.]+)$/);if (i == null) { throw "JWS signature is not a form of 'Head.Payload.SigValue'."; }var k = i[1];var e = i[2];var l = i[3];var n = k + "." + e;this.parsedJWS = {};this.parsedJWS.headB64U = k;this.parsedJWS.payloadB64U = e;this.parsedJWS.sigvalB64U = l;this.parsedJWS.si = n;if (!j) { var h = b64utohex(l);var f = parseBigInt(h, 16);this.parsedJWS.sigvalH = h;this.parsedJWS.sigvalBI = f; }var d = b64utoutf8(k);var m = b64utoutf8(e);this.parsedJWS.headS = d;this.parsedJWS.payloadS = m;if (!c(d, this.parsedJWS, "headP")) { throw "malformed JSON string for JWS Head: " + d; } }; };KJUR.jws.JWS.sign = function (j, w, z, A, a) { var x = KJUR, n = x.jws, r = n.JWS, h = r.readSafeJSONString, q = r.isSafeJSONString, d = x.crypto, l = d.ECDSA, p = d.Mac, c = d.Signature, u = JSON;var t, k, o;if (typeof w != "string" && (typeof w === "undefined" ? "undefined" : _typeof(w)) != "object") { throw "spHeader must be JSON string or object: " + w; }if ((typeof w === "undefined" ? "undefined" : _typeof(w)) == "object") { k = w;t = u.stringify(k); }if (typeof w == "string") { t = w;if (!q(t)) { throw "JWS Head is not safe JSON string: " + t; }k = h(t); }o = z;if ((typeof z === "undefined" ? "undefined" : _typeof(z)) == "object") { o = u.stringify(z); }if ((j == "" || j == null) && k.alg !== undefined) { j = k.alg; }if (j != "" && j != null && k.alg === undefined) { k.alg = j;t = u.stringify(k); }if (j !== k.alg) { throw "alg and sHeader.alg doesn't match: " + j + "!=" + k.alg; }var s = null;if (r.jwsalg2sigalg[j] === undefined) { throw "unsupported alg name: " + j; } else { s = r.jwsalg2sigalg[j]; }var e = utf8tob64u(t);var m = utf8tob64u(o);var b = e + "." + m;var y = "";if (s.substr(0, 4) == "Hmac") { if (A === undefined) { throw "mac key shall be specified for HS* alg"; }var i = new p({ alg: s, prov: "cryptojs", pass: A });i.updateString(b);y = i.doFinal(); } else { if (s.indexOf("withECDSA") != -1) { var f = new c({ alg: s });f.init(A, a);f.updateString(b);var g = f.sign();y = KJUR.crypto.ECDSA.asn1SigToConcatSig(g); } else { if (s != "none") { var f = new c({ alg: s });f.init(A, a);f.updateString(b);y = f.sign(); } } }var v = hextob64u(y);return b + "." + v; };KJUR.jws.JWS.verify = function (w, B, n) { var x = KJUR, q = x.jws, t = q.JWS, i = t.readSafeJSONString, e = x.crypto, p = e.ECDSA, s = e.Mac, d = e.Signature, m;if ((typeof RSAKey === "undefined" ? "undefined" : _typeof(RSAKey)) !== undefined) { m = RSAKey; }var y = w.split(".");if (y.length !== 3) { return false; }var f = y[0];var r = y[1];var c = f + "." + r;var A = b64utohex(y[2]);var l = i(b64utoutf8(y[0]));var k = null;var z = null;if (l.alg === undefined) { throw "algorithm not specified in header"; } else { k = l.alg;z = k.substr(0, 2); }if (n != null && Object.prototype.toString.call(n) === "[object Array]" && n.length > 0) { var b = ":" + n.join(":") + ":";if (b.indexOf(":" + k + ":") == -1) { throw "algorithm '" + k + "' not accepted in the list"; } }if (k != "none" && B === null) { throw "key shall be specified to verify."; }if (typeof B == "string" && B.indexOf("-----BEGIN ") != -1) { B = KEYUTIL.getKey(B); }if (z == "RS" || z == "PS") { if (!(B instanceof m)) { throw "key shall be a RSAKey obj for RS* and PS* algs"; } }if (z == "ES") { if (!(B instanceof p)) { throw "key shall be a ECDSA obj for ES* algs"; } }if (k == "none") {}var u = null;if (t.jwsalg2sigalg[l.alg] === undefined) { throw "unsupported alg name: " + k; } else { u = t.jwsalg2sigalg[k]; }if (u == "none") { throw "not supported"; } else { if (u.substr(0, 4) == "Hmac") { var o = null;if (B === undefined) { throw "hexadecimal key shall be specified for HMAC"; }var j = new s({ alg: u, pass: B });j.updateString(c);o = j.doFinal();return A == o; } else { if (u.indexOf("withECDSA") != -1) { var h = null;try { h = p.concatSigToASN1Sig(A); } catch (v) { return false; }var g = new d({ alg: u });g.init(B);g.updateString(c);return g.verify(h); } else { var g = new d({ alg: u });g.init(B);g.updateString(c);return g.verify(A); } } } };KJUR.jws.JWS.parse = function (g) { var c = g.split(".");var b = {};var f, e, d;if (c.length != 2 && c.length != 3) { throw "malformed sJWS: wrong number of '.' splitted elements"; }f = c[0];e = c[1];if (c.length == 3) { d = c[2]; }b.headerObj = KJUR.jws.JWS.readSafeJSONString(b64utoutf8(f));b.payloadObj = KJUR.jws.JWS.readSafeJSONString(b64utoutf8(e));b.headerPP = JSON.stringify(b.headerObj, null, " ");if (b.payloadObj == null) { b.payloadPP = b64utoutf8(e); } else { b.payloadPP = JSON.stringify(b.payloadObj, null, " "); }if (d !== undefined) { b.sigHex = b64utohex(d); }return b; };KJUR.jws.JWS.verifyJWT = function (e, l, r) { var d = KJUR, j = d.jws, o = j.JWS, n = o.readSafeJSONString, p = o.inArray, f = o.includedArray;var k = e.split(".");var c = k[0];var i = k[1];var q = c + "." + i;var m = b64utohex(k[2]);var h = n(b64utoutf8(c));var g = n(b64utoutf8(i));if (h.alg === undefined) { return false; }if (r.alg === undefined) { throw "acceptField.alg shall be specified"; }if (!p(h.alg, r.alg)) { return false; }if (g.iss !== undefined && _typeof(r.iss) === "object") { if (!p(g.iss, r.iss)) { return false; } }if (g.sub !== undefined && _typeof(r.sub) === "object") { if (!p(g.sub, r.sub)) { return false; } }if (g.aud !== undefined && _typeof(r.aud) === "object") { if (typeof g.aud == "string") { if (!p(g.aud, r.aud)) { return false; } } else { if (_typeof(g.aud) == "object") { if (!f(g.aud, r.aud)) { return false; } } } }var b = j.IntDate.getNow();if (r.verifyAt !== undefined && typeof r.verifyAt === "number") { b = r.verifyAt; }if (r.gracePeriod === undefined || typeof r.gracePeriod !== "number") { r.gracePeriod = 0; }if (g.exp !== undefined && typeof g.exp == "number") { if (g.exp + r.gracePeriod < b) { return false; } }if (g.nbf !== undefined && typeof g.nbf == "number") { if (b < g.nbf - r.gracePeriod) { return false; } }if (g.iat !== undefined && typeof g.iat == "number") { if (b < g.iat - r.gracePeriod) { return false; } }if (g.jti !== undefined && r.jti !== undefined) { if (g.jti !== r.jti) { return false; } }if (!o.verify(e, l, r.alg)) { return false; }return true; };KJUR.jws.JWS.includedArray = function (b, a) { var c = KJUR.jws.JWS.inArray;if (b === null) { return false; }if ((typeof b === "undefined" ? "undefined" : _typeof(b)) !== "object") { return false; }if (typeof b.length !== "number") { return false; }for (var d = 0; d < b.length; d++) { if (!c(b[d], a)) { return false; } }return true; };KJUR.jws.JWS.inArray = function (d, b) { if (b === null) { return false; }if ((typeof b === "undefined" ? "undefined" : _typeof(b)) !== "object") { return false; }if (typeof b.length !== "number") { return false; }for (var c = 0; c < b.length; c++) { if (b[c] == d) { return true; } }return false; };KJUR.jws.JWS.jwsalg2sigalg = { HS256: "HmacSHA256", HS384: "HmacSHA384", HS512: "HmacSHA512", RS256: "SHA256withRSA", RS384: "SHA384withRSA", RS512: "SHA512withRSA", ES256: "SHA256withECDSA", ES384: "SHA384withECDSA", PS256: "SHA256withRSAandMGF1", PS384: "SHA384withRSAandMGF1", PS512: "SHA512withRSAandMGF1", none: "none" };KJUR.jws.JWS.isSafeJSONString = function (c, b, d) { var e = null;try { e = jsonParse(c);if ((typeof e === "undefined" ? "undefined" : _typeof(e)) != "object") { return 0; }if (e.constructor === Array) { return 0; }if (b) { b[d] = e; }return 1; } catch (a) { return 0; } };KJUR.jws.JWS.readSafeJSONString = function (b) { var c = null;try { c = jsonParse(b);if ((typeof c === "undefined" ? "undefined" : _typeof(c)) != "object") { return null; }if (c.constructor === Array) { return null; }return c; } catch (a) { return null; } };KJUR.jws.JWS.getEncodedSignatureValueFromJWS = function (b) { var a = b.match(/^[^.]+\.[^.]+\.([^.]+)$/);if (a == null) { throw "JWS signature is not a form of 'Head.Payload.SigValue'."; }return a[1]; };KJUR.jws.JWS.getJWKthumbprint = function (d) { if (d.kty !== "RSA" && d.kty !== "EC" && d.kty !== "oct") { throw "unsupported algorithm for JWK Thumprint"; }var a = "{";if (d.kty === "RSA") { if (typeof d.n != "string" || typeof d.e != "string") { throw "wrong n and e value for RSA key"; }a += '"e":"' + d.e + '",';a += '"kty":"' + d.kty + '",';a += '"n":"' + d.n + '"}'; } else { if (d.kty === "EC") { if (typeof d.crv != "string" || typeof d.x != "string" || typeof d.y != "string") { throw "wrong crv, x and y value for EC key"; }a += '"crv":"' + d.crv + '",';a += '"kty":"' + d.kty + '",';a += '"x":"' + d.x + '",';a += '"y":"' + d.y + '"}'; } else { if (d.kty === "oct") { if (typeof d.k != "string") { throw "wrong k value for oct(symmetric) key"; }a += '"kty":"' + d.kty + '",';a += '"k":"' + d.k + '"}'; } } }var b = rstrtohex(a);var c = KJUR.crypto.Util.hashHex(b, "sha256");var e = hextob64u(c);return e; };KJUR.jws.IntDate = {};KJUR.jws.IntDate.get = function (c) { var b = KJUR.jws.IntDate, d = b.getNow, a = b.getZulu;if (c == "now") { return d(); } else { if (c == "now + 1hour") { return d() + 60 * 60; } else { if (c == "now + 1day") { return d() + 60 * 60 * 24; } else { if (c == "now + 1month") { return d() + 60 * 60 * 24 * 30; } else { if (c == "now + 1year") { return d() + 60 * 60 * 24 * 365; } else { if (c.match(/Z$/)) { return a(c); } else { if (c.match(/^[0-9]+$/)) { return parseInt(c); } } } } } } }throw "unsupported format: " + c; };KJUR.jws.IntDate.getZulu = function (a) { return zulutosec(a); };KJUR.jws.IntDate.getNow = function () { var a = ~~(new Date() / 1000);return a; };KJUR.jws.IntDate.intDate2UTCString = function (a) { var b = new Date(a * 1000);return b.toUTCString(); };KJUR.jws.IntDate.intDate2Zulu = function (e) { var i = new Date(e * 1000), h = ("0000" + i.getUTCFullYear()).slice(-4), g = ("00" + (i.getUTCMonth() + 1)).slice(-2), b = ("00" + i.getUTCDate()).slice(-2), a = ("00" + i.getUTCHours()).slice(-2), c = ("00" + i.getUTCMinutes()).slice(-2), f = ("00" + i.getUTCSeconds()).slice(-2);return h + g + b + a + c + f + "Z"; }; exports.SecureRandom = SecureRandom; exports.rng_seed_time = rng_seed_time; exports.BigInteger = BigInteger; exports.RSAKey = RSAKey; var EDSA = KJUR.crypto.EDSA; exports.EDSA = EDSA; var DSA = KJUR.crypto.DSA; exports.DSA = DSA; var Signature = KJUR.crypto.Signature; exports.Signature = Signature; var MessageDigest = KJUR.crypto.MessageDigest; exports.MessageDigest = MessageDigest; var Mac = KJUR.crypto.Mac; exports.Mac = Mac; var Cipher = KJUR.crypto.Cipher; exports.Cipher = Cipher; exports.KEYUTIL = KEYUTIL; exports.ASN1HEX = ASN1HEX; exports.X509 = X509; exports.CryptoJS = CryptoJS; // ext/base64.js exports.b64tohex = b64tohex; exports.b64toBA = b64toBA; // base64x.js exports.stoBA = stoBA; exports.BAtos = BAtos; exports.BAtohex = BAtohex; exports.stohex = stohex; exports.stob64 = stob64; exports.stob64u = stob64u; exports.b64utos = b64utos; exports.b64tob64u = b64tob64u; exports.b64utob64 = b64utob64; exports.hex2b64 = hex2b64; exports.hextob64u = hextob64u; exports.b64utohex = b64utohex; exports.utf8tob64u = utf8tob64u; exports.b64utoutf8 = b64utoutf8; exports.utf8tob64 = utf8tob64; exports.b64toutf8 = b64toutf8; exports.utf8tohex = utf8tohex; exports.hextoutf8 = hextoutf8; exports.hextorstr = hextorstr; exports.rstrtohex = rstrtohex; exports.hextob64 = hextob64; exports.hextob64nl = hextob64nl; exports.b64nltohex = b64nltohex; exports.hextopem = hextopem; exports.pemtohex = pemtohex; exports.hextoArrayBuffer = hextoArrayBuffer; exports.ArrayBuffertohex = ArrayBuffertohex; exports.zulutomsec = zulutomsec; exports.zulutosec = zulutosec; exports.zulutodate = zulutodate; exports.datetozulu = datetozulu; exports.uricmptohex = uricmptohex; exports.hextouricmp = hextouricmp; exports.ipv6tohex = ipv6tohex; exports.hextoipv6 = hextoipv6; exports.hextoip = hextoip; exports.iptohex = iptohex; exports.encodeURIComponentAll = encodeURIComponentAll; exports.newline_toUnix = newline_toUnix; exports.newline_toDos = newline_toDos; exports.hextoposhex = hextoposhex; exports.intarystrtohex = intarystrtohex; exports.strdiffidx = strdiffidx; // name spaces exports.KJUR = KJUR; var _crypto = KJUR.crypto; exports.crypto = _crypto; var _KJUR = KJUR; var asn1 = _KJUR.asn1; exports.asn1 = asn1; var _KJUR2 = KJUR; var jws = _KJUR2.jws; exports.jws = jws; var _KJUR3 = KJUR; var lang = _KJUR3.lang; exports.lang = lang; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/buffer/index.js */ "./node_modules/buffer/index.js").Buffer)) /***/ }), /***/ "./node_modules/babel-polyfill/lib/index.js": /*!**************************************************!*\ !*** ./node_modules/babel-polyfill/lib/index.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(global) { __webpack_require__(/*! core-js/shim */ "./node_modules/babel-polyfill/node_modules/core-js/shim.js"); __webpack_require__(/*! regenerator-runtime/runtime */ "./node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js"); __webpack_require__(/*! core-js/fn/regexp/escape */ "./node_modules/babel-polyfill/node_modules/core-js/fn/regexp/escape.js"); if (global._babelPolyfill) { throw new Error("only one instance of babel-polyfill is allowed"); } global._babelPolyfill = true; var DEFINE_PROPERTY = "defineProperty"; function define(O, key, value) { O[key] || Object[DEFINE_PROPERTY](O, key, { writable: true, configurable: true, value: value }); } define(String.prototype, "padLeft", "".padStart); define(String.prototype, "padRight", "".padEnd); "pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) { [][key] && define(Array, key, Function.call.bind([][key])); }); /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/fn/regexp/escape.js": /*!******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/fn/regexp/escape.js ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ../../modules/core.regexp.escape */ "./node_modules/babel-polyfill/node_modules/core-js/modules/core.regexp.escape.js"); module.exports = __webpack_require__(/*! ../../modules/_core */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js").RegExp.escape; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (it) { if (typeof it != 'function') throw TypeError(it + ' is not a function!'); return it; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-number-value.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_a-number-value.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var cof = __webpack_require__(/*! ./_cof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js"); module.exports = function (it, msg) { if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg); return +it; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js": /*!*****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js ***! \*****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 22.1.3.31 Array.prototype[@@unscopables] var UNSCOPABLES = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('unscopables'); var ArrayProto = Array.prototype; if (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(/*! ./_hide */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js")(ArrayProto, UNSCOPABLES, {}); module.exports = function (key) { ArrayProto[UNSCOPABLES][key] = true; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_advance-string-index.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_advance-string-index.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var at = __webpack_require__(/*! ./_string-at */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-at.js")(true); // `AdvanceStringIndex` abstract operation // https://tc39.github.io/ecma262/#sec-advancestringindex module.exports = function (S, index, unicode) { return index + (unicode ? at(S, index).length : 1); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (it, Constructor, name, forbiddenField) { if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) { throw TypeError(name + ': incorrect invocation!'); } return it; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); module.exports = function (it) { if (!isObject(it)) throw TypeError(it + ' is not an object!'); return it; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-copy-within.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-copy-within.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-absolute-index.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); module.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) { var O = toObject(this); var len = toLength(O.length); var to = toAbsoluteIndex(target, len); var from = toAbsoluteIndex(start, len); var end = arguments.length > 2 ? arguments[2] : undefined; var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to); var inc = 1; if (from < to && to < from + count) { inc = -1; from += count - 1; to += count - 1; } while (count-- > 0) { if (from in O) O[to] = O[from]; else delete O[to]; to += inc; from += inc; } return O; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-fill.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-fill.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-absolute-index.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); module.exports = function fill(value /* , start = 0, end = @length */) { var O = toObject(this); var length = toLength(O.length); var aLen = arguments.length; var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length); var end = aLen > 2 ? arguments[2] : undefined; var endPos = end === undefined ? length : toAbsoluteIndex(end, length); while (endPos > index) O[index++] = value; return O; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-from-iterable.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-from-iterable.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js"); module.exports = function (iter, ITERATOR) { var result = []; forOf(iter, false, result.push, result, ITERATOR); return result; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-includes.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-includes.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // false -> Array#indexOf // true -> Array#includes var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-absolute-index.js"); module.exports = function (IS_INCLUDES) { return function ($this, el, fromIndex) { var O = toIObject($this); var length = toLength(O.length); var index = toAbsoluteIndex(fromIndex, length); var value; // Array#includes uses SameValueZero equality algorithm // eslint-disable-next-line no-self-compare if (IS_INCLUDES && el != el) while (length > index) { value = O[index++]; // eslint-disable-next-line no-self-compare if (value != value) return true; // Array#indexOf ignores holes, Array#includes - not } else for (;length > index; index++) if (IS_INCLUDES || index in O) { if (O[index] === el) return IS_INCLUDES || index || 0; } return !IS_INCLUDES && -1; }; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 0 -> Array#forEach // 1 -> Array#map // 2 -> Array#filter // 3 -> Array#some // 4 -> Array#every // 5 -> Array#find // 6 -> Array#findIndex var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js"); var IObject = __webpack_require__(/*! ./_iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var asc = __webpack_require__(/*! ./_array-species-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-create.js"); module.exports = function (TYPE, $create) { var IS_MAP = TYPE == 1; var IS_FILTER = TYPE == 2; var IS_SOME = TYPE == 3; var IS_EVERY = TYPE == 4; var IS_FIND_INDEX = TYPE == 6; var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; var create = $create || asc; return function ($this, callbackfn, that) { var O = toObject($this); var self = IObject(O); var f = ctx(callbackfn, that, 3); var length = toLength(self.length); var index = 0; var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; var val, res; for (;length > index; index++) if (NO_HOLES || index in self) { val = self[index]; res = f(val, index, O); if (TYPE) { if (IS_MAP) result[index] = res; // map else if (res) switch (TYPE) { case 3: return true; // some case 5: return val; // find case 6: return index; // findIndex case 2: result.push(val); // filter } else if (IS_EVERY) return false; // every } } return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; }; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-reduce.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-reduce.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var IObject = __webpack_require__(/*! ./_iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); module.exports = function (that, callbackfn, aLen, memo, isRight) { aFunction(callbackfn); var O = toObject(that); var self = IObject(O); var length = toLength(O.length); var index = isRight ? length - 1 : 0; var i = isRight ? -1 : 1; if (aLen < 2) for (;;) { if (index in self) { memo = self[index]; index += i; break; } index += i; if (isRight ? index < 0 : length <= index) { throw TypeError('Reduce of empty array with no initial value'); } } for (;isRight ? index >= 0 : length > index; index += i) if (index in self) { memo = callbackfn(memo, self[index], index, O); } return memo; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-constructor.js": /*!************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-constructor.js ***! \************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var isArray = __webpack_require__(/*! ./_is-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array.js"); var SPECIES = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('species'); module.exports = function (original) { var C; if (isArray(original)) { C = original.constructor; // cross-realm fallback if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; if (isObject(C)) { C = C[SPECIES]; if (C === null) C = undefined; } } return C === undefined ? Array : C; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-create.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-create.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 9.4.2.3 ArraySpeciesCreate(originalArray, length) var speciesConstructor = __webpack_require__(/*! ./_array-species-constructor */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-constructor.js"); module.exports = function (original, length) { return new (speciesConstructor(original))(length); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_bind.js": /*!***************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_bind.js ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var invoke = __webpack_require__(/*! ./_invoke */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_invoke.js"); var arraySlice = [].slice; var factories = {}; var construct = function (F, len, args) { if (!(len in factories)) { for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']'; // eslint-disable-next-line no-new-func factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')'); } return factories[len](F, args); }; module.exports = Function.bind || function bind(that /* , ...args */) { var fn = aFunction(this); var partArgs = arraySlice.call(arguments, 1); var bound = function (/* args... */) { var args = partArgs.concat(arraySlice.call(arguments)); return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that); }; if (isObject(fn.prototype)) bound.prototype = fn.prototype; return bound; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js": /*!******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // getting tag from 19.1.3.6 Object.prototype.toString() var cof = __webpack_require__(/*! ./_cof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js"); var TAG = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('toStringTag'); // ES3 wrong here var ARG = cof(function () { return arguments; }()) == 'Arguments'; // fallback for IE11 Script Access Denied error var tryGet = function (it, key) { try { return it[key]; } catch (e) { /* empty */ } }; module.exports = function (it) { var O, T, B; return it === undefined ? 'Undefined' : it === null ? 'Null' // @@toStringTag case : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T // builtinTag case : ARG ? cof(O) // ES3 arguments fallback : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js": /*!**************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { var toString = {}.toString; module.exports = function (it) { return toString.call(it).slice(8, -1); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-strong.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-strong.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js").f; var create = __webpack_require__(/*! ./_object-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js"); var redefineAll = __webpack_require__(/*! ./_redefine-all */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js"); var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js"); var anInstance = __webpack_require__(/*! ./_an-instance */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js"); var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js"); var $iterDefine = __webpack_require__(/*! ./_iter-define */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-define.js"); var step = __webpack_require__(/*! ./_iter-step */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-step.js"); var setSpecies = __webpack_require__(/*! ./_set-species */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js"); var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js"); var fastKey = __webpack_require__(/*! ./_meta */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js").fastKey; var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_validate-collection.js"); var SIZE = DESCRIPTORS ? '_s' : 'size'; var getEntry = function (that, key) { // fast case var index = fastKey(key); var entry; if (index !== 'F') return that._i[index]; // frozen object case for (entry = that._f; entry; entry = entry.n) { if (entry.k == key) return entry; } }; module.exports = { getConstructor: function (wrapper, NAME, IS_MAP, ADDER) { var C = wrapper(function (that, iterable) { anInstance(that, C, NAME, '_i'); that._t = NAME; // collection type that._i = create(null); // index that._f = undefined; // first entry that._l = undefined; // last entry that[SIZE] = 0; // size if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); }); redefineAll(C.prototype, { // 23.1.3.1 Map.prototype.clear() // 23.2.3.2 Set.prototype.clear() clear: function clear() { for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) { entry.r = true; if (entry.p) entry.p = entry.p.n = undefined; delete data[entry.i]; } that._f = that._l = undefined; that[SIZE] = 0; }, // 23.1.3.3 Map.prototype.delete(key) // 23.2.3.4 Set.prototype.delete(value) 'delete': function (key) { var that = validate(this, NAME); var entry = getEntry(that, key); if (entry) { var next = entry.n; var prev = entry.p; delete that._i[entry.i]; entry.r = true; if (prev) prev.n = next; if (next) next.p = prev; if (that._f == entry) that._f = next; if (that._l == entry) that._l = prev; that[SIZE]--; } return !!entry; }, // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) forEach: function forEach(callbackfn /* , that = undefined */) { validate(this, NAME); var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); var entry; while (entry = entry ? entry.n : this._f) { f(entry.v, entry.k, this); // revert to the last existing entry while (entry && entry.r) entry = entry.p; } }, // 23.1.3.7 Map.prototype.has(key) // 23.2.3.7 Set.prototype.has(value) has: function has(key) { return !!getEntry(validate(this, NAME), key); } }); if (DESCRIPTORS) dP(C.prototype, 'size', { get: function () { return validate(this, NAME)[SIZE]; } }); return C; }, def: function (that, key, value) { var entry = getEntry(that, key); var prev, index; // change existing entry if (entry) { entry.v = value; // create new entry } else { that._l = entry = { i: index = fastKey(key, true), // <- index k: key, // <- key v: value, // <- value p: prev = that._l, // <- previous entry n: undefined, // <- next entry r: false // <- removed }; if (!that._f) that._f = entry; if (prev) prev.n = entry; that[SIZE]++; // add to index if (index !== 'F') that._i[index] = entry; } return that; }, getEntry: getEntry, setStrong: function (C, NAME, IS_MAP) { // add .keys, .values, .entries, [@@iterator] // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 $iterDefine(C, NAME, function (iterated, kind) { this._t = validate(iterated, NAME); // target this._k = kind; // kind this._l = undefined; // previous }, function () { var that = this; var kind = that._k; var entry = that._l; // revert to the last existing entry while (entry && entry.r) entry = entry.p; // get next entry if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) { // or finish the iteration that._t = undefined; return step(1); } // return step by kind if (kind == 'keys') return step(0, entry.k); if (kind == 'values') return step(0, entry.v); return step(0, [entry.k, entry.v]); }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); // add [@@species], 23.1.2.2, 23.2.2.2 setSpecies(NAME); } }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-to-json.js": /*!*****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-to-json.js ***! \*****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/DavidBruant/Map-Set.prototype.toJSON var classof = __webpack_require__(/*! ./_classof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js"); var from = __webpack_require__(/*! ./_array-from-iterable */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-from-iterable.js"); module.exports = function (NAME) { return function toJSON() { if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn't generic"); return from(this); }; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-weak.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-weak.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var redefineAll = __webpack_require__(/*! ./_redefine-all */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js"); var getWeak = __webpack_require__(/*! ./_meta */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js").getWeak; var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var anInstance = __webpack_require__(/*! ./_an-instance */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js"); var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js"); var createArrayMethod = __webpack_require__(/*! ./_array-methods */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js"); var $has = __webpack_require__(/*! ./_has */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js"); var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_validate-collection.js"); var arrayFind = createArrayMethod(5); var arrayFindIndex = createArrayMethod(6); var id = 0; // fallback for uncaught frozen keys var uncaughtFrozenStore = function (that) { return that._l || (that._l = new UncaughtFrozenStore()); }; var UncaughtFrozenStore = function () { this.a = []; }; var findUncaughtFrozen = function (store, key) { return arrayFind(store.a, function (it) { return it[0] === key; }); }; UncaughtFrozenStore.prototype = { get: function (key) { var entry = findUncaughtFrozen(this, key); if (entry) return entry[1]; }, has: function (key) { return !!findUncaughtFrozen(this, key); }, set: function (key, value) { var entry = findUncaughtFrozen(this, key); if (entry) entry[1] = value; else this.a.push([key, value]); }, 'delete': function (key) { var index = arrayFindIndex(this.a, function (it) { return it[0] === key; }); if (~index) this.a.splice(index, 1); return !!~index; } }; module.exports = { getConstructor: function (wrapper, NAME, IS_MAP, ADDER) { var C = wrapper(function (that, iterable) { anInstance(that, C, NAME, '_i'); that._t = NAME; // collection type that._i = id++; // collection id that._l = undefined; // leak store for uncaught frozen objects if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); }); redefineAll(C.prototype, { // 23.3.3.2 WeakMap.prototype.delete(key) // 23.4.3.3 WeakSet.prototype.delete(value) 'delete': function (key) { if (!isObject(key)) return false; var data = getWeak(key); if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key); return data && $has(data, this._i) && delete data[this._i]; }, // 23.3.3.4 WeakMap.prototype.has(key) // 23.4.3.4 WeakSet.prototype.has(value) has: function has(key) { if (!isObject(key)) return false; var data = getWeak(key); if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key); return data && $has(data, this._i); } }); return C; }, def: function (that, key, value) { var data = getWeak(anObject(key), true); if (data === true) uncaughtFrozenStore(that).set(key, value); else data[that._i] = value; return that; }, ufstore: uncaughtFrozenStore }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_collection.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js"); var redefineAll = __webpack_require__(/*! ./_redefine-all */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js"); var meta = __webpack_require__(/*! ./_meta */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js"); var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js"); var anInstance = __webpack_require__(/*! ./_an-instance */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js"); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); var $iterDetect = __webpack_require__(/*! ./_iter-detect */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-detect.js"); var setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js"); var inheritIfRequired = __webpack_require__(/*! ./_inherit-if-required */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_inherit-if-required.js"); module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { var Base = global[NAME]; var C = Base; var ADDER = IS_MAP ? 'set' : 'add'; var proto = C && C.prototype; var O = {}; var fixMethod = function (KEY) { var fn = proto[KEY]; redefine(proto, KEY, KEY == 'delete' ? function (a) { return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); } : KEY == 'has' ? function has(a) { return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); } : KEY == 'get' ? function get(a) { return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a); } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; } : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; } ); }; if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () { new C().entries().next(); }))) { // create collection constructor C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); redefineAll(C.prototype, methods); meta.NEED = true; } else { var instance = new C(); // early implementations not supports chaining var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); // most early implementations doesn't supports iterables, most modern - not close it correctly var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new // for early implementations -0 and +0 not the same var BUGGY_ZERO = !IS_WEAK && fails(function () { // V8 ~ Chromium 42- fails only with 5+ elements var $instance = new C(); var index = 5; while (index--) $instance[ADDER](index, index); return !$instance.has(-0); }); if (!ACCEPT_ITERABLES) { C = wrapper(function (target, iterable) { anInstance(target, C, NAME); var that = inheritIfRequired(new Base(), target, C); if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); return that; }); C.prototype = proto; proto.constructor = C; } if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { fixMethod('delete'); fixMethod('has'); IS_MAP && fixMethod('get'); } if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); // weak collections should not contains .clear method if (IS_WEAK && proto.clear) delete proto.clear; } setToStringTag(C, NAME); O[NAME] = C; $export($export.G + $export.W + $export.F * (C != Base), O); if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP); return C; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js": /*!***************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { var core = module.exports = { version: '2.6.11' }; if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_create-property.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_create-property.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $defineProperty = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js"); var createDesc = __webpack_require__(/*! ./_property-desc */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js"); module.exports = function (object, index, value) { if (index in object) $defineProperty.f(object, index, createDesc(0, value)); else object[index] = value; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js": /*!**************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // optional / simple context binding var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); module.exports = function (fn, that, length) { aFunction(fn); if (that === undefined) return fn; switch (length) { case 1: return function (a) { return fn.call(that, a); }; case 2: return function (a, b) { return fn.call(that, a, b); }; case 3: return function (a, b, c) { return fn.call(that, a, b, c); }; } return function (/* ...args */) { return fn.apply(that, arguments); }; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-iso-string.js": /*!*****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-iso-string.js ***! \*****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString() var fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); var getTime = Date.prototype.getTime; var $toISOString = Date.prototype.toISOString; var lz = function (num) { return num > 9 ? num : '0' + num; }; // PhantomJS / old WebKit has a broken implementations module.exports = (fails(function () { return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z'; }) || !fails(function () { $toISOString.call(new Date(NaN)); })) ? function toISOString() { if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value'); var d = this; var y = d.getUTCFullYear(); var m = d.getUTCMilliseconds(); var s = y < 0 ? '-' : y > 9999 ? '+' : ''; return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) + '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) + 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) + ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z'; } : $toISOString; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-primitive.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-primitive.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js"); var NUMBER = 'number'; module.exports = function (hint) { if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint'); return toPrimitive(anObject(this), hint != NUMBER); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js": /*!******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { // 7.2.1 RequireObjectCoercible(argument) module.exports = function (it) { if (it == undefined) throw TypeError("Can't call method on " + it); return it; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // Thank's IE8 for his funny defineProperty module.exports = !__webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_dom-create.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_dom-create.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var document = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js").document; // typeof document.createElement is 'object' in old IE var is = isObject(document) && isObject(document.createElement); module.exports = function (it) { return is ? document.createElement(it) : {}; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_enum-bug-keys.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_enum-bug-keys.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { // IE 8- don't enum bug keys module.exports = ( 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' ).split(','); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_enum-keys.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_enum-keys.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // all enumerable object keys, includes symbols var getKeys = __webpack_require__(/*! ./_object-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js"); var gOPS = __webpack_require__(/*! ./_object-gops */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gops.js"); var pIE = __webpack_require__(/*! ./_object-pie */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js"); module.exports = function (it) { var result = getKeys(it); var getSymbols = gOPS.f; if (getSymbols) { var symbols = getSymbols(it); var isEnum = pIE.f; var i = 0; var key; while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key); } return result; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js": /*!*****************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var core = __webpack_require__(/*! ./_core */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js"); var hide = __webpack_require__(/*! ./_hide */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js"); var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js"); var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js"); var PROTOTYPE = 'prototype'; var $export = function (type, name, source) { var IS_FORCED = type & $export.F; var IS_GLOBAL = type & $export.G; var IS_STATIC = type & $export.S; var IS_PROTO = type & $export.P; var IS_BIND = type & $export.B; var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]; var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); var key, own, out, exp; if (IS_GLOBAL) source = name; for (key in source) { // contains in native own = !IS_FORCED && target && target[key] !== undefined; // export native or passed out = (own ? target : source)[key]; // bind timers to global for call from export context exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; // extend global if (target) redefine(target, key, out, type & $export.U); // export if (exports[key] != out) hide(exports, key, exp); if (IS_PROTO && expProto[key] != out) expProto[key] = out; } }; global.core = core; // type bitmap $export.F = 1; // forced $export.G = 2; // global $export.S = 4; // static $export.P = 8; // proto $export.B = 16; // bind $export.W = 32; // wrap $export.U = 64; // safe $export.R = 128; // real proto method for `library` module.exports = $export; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails-is-regexp.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_fails-is-regexp.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var MATCH = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('match'); module.exports = function (KEY) { var re = /./; try { '/./'[KEY](re); } catch (e) { try { re[MATCH] = false; return !'/./'[KEY](re); } catch (f) { /* empty */ } } return true; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js": /*!****************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js ***! \****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (exec) { try { return !!exec(); } catch (e) { return true; } }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fix-re-wks.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_fix-re-wks.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; __webpack_require__(/*! ./es6.regexp.exec */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.exec.js"); var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js"); var hide = __webpack_require__(/*! ./_hide */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js"); var fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); var defined = __webpack_require__(/*! ./_defined */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js"); var wks = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js"); var regexpExec = __webpack_require__(/*! ./_regexp-exec */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_regexp-exec.js"); var SPECIES = wks('species'); var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { // #replace needs built-in support for named groups. // #match works fine because it just return the exec results, even if it has // a "grops" property. var re = /./; re.exec = function () { var result = []; result.groups = { a: '7' }; return result; }; return ''.replace(re, '$') !== '7'; }); var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () { // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec var re = /(?:)/; var originalExec = re.exec; re.exec = function () { return originalExec.apply(this, arguments); }; var result = 'ab'.split(re); return result.length === 2 && result[0] === 'a' && result[1] === 'b'; })(); module.exports = function (KEY, length, exec) { var SYMBOL = wks(KEY); var DELEGATES_TO_SYMBOL = !fails(function () { // String methods call symbol-named RegEp methods var O = {}; O[SYMBOL] = function () { return 7; }; return ''[KEY](O) != 7; }); var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () { // Symbol-named RegExp methods call .exec var execCalled = false; var re = /a/; re.exec = function () { execCalled = true; return null; }; if (KEY === 'split') { // RegExp[@@split] doesn't call the regex's exec method, but first creates // a new one. We need to return the patched regex when creating the new one. re.constructor = {}; re.constructor[SPECIES] = function () { return re; }; } re[SYMBOL](''); return !execCalled; }) : undefined; if ( !DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) || (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) ) { var nativeRegExpMethod = /./[SYMBOL]; var fns = exec( defined, SYMBOL, ''[KEY], function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) { if (regexp.exec === regexpExec) { if (DELEGATES_TO_SYMBOL && !forceStringMethod) { // The native String method already delegates to @@method (this // polyfilled function), leasing to infinite recursion. // We avoid it by directly calling the native @@method method. return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; } return { done: true, value: nativeMethod.call(str, regexp, arg2) }; } return { done: false }; } ); var strfn = fns[0]; var rxfn = fns[1]; redefine(String.prototype, KEY, strfn); hide(RegExp.prototype, SYMBOL, length == 2 // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) // 21.2.5.11 RegExp.prototype[@@split](string, limit) ? function (string, arg) { return rxfn.call(string, this, arg); } // 21.2.5.6 RegExp.prototype[@@match](string) // 21.2.5.9 RegExp.prototype[@@search](string) : function (string) { return rxfn.call(string, this); } ); } }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js": /*!****************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js ***! \****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 21.2.5.3 get RegExp.prototype.flags var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); module.exports = function () { var that = anObject(this); var result = ''; if (that.global) result += 'g'; if (that.ignoreCase) result += 'i'; if (that.multiline) result += 'm'; if (that.unicode) result += 'u'; if (that.sticky) result += 'y'; return result; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_flatten-into-array.js": /*!*****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_flatten-into-array.js ***! \*****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray var isArray = __webpack_require__(/*! ./_is-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array.js"); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js"); var IS_CONCAT_SPREADABLE = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('isConcatSpreadable'); function flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) { var targetIndex = start; var sourceIndex = 0; var mapFn = mapper ? ctx(mapper, thisArg, 3) : false; var element, spreadable; while (sourceIndex < sourceLen) { if (sourceIndex in source) { element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex]; spreadable = false; if (isObject(element)) { spreadable = element[IS_CONCAT_SPREADABLE]; spreadable = spreadable !== undefined ? !!spreadable : isArray(element); } if (spreadable && depth > 0) { targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1; } else { if (targetIndex >= 0x1fffffffffffff) throw TypeError(); target[targetIndex] = element; } targetIndex++; } sourceIndex++; } return targetIndex; } module.exports = flattenIntoArray; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js": /*!*****************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js"); var call = __webpack_require__(/*! ./_iter-call */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-call.js"); var isArrayIter = __webpack_require__(/*! ./_is-array-iter */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array-iter.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/core.get-iterator-method.js"); var BREAK = {}; var RETURN = {}; var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) { var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable); var f = ctx(fn, that, entries ? 2 : 1); var index = 0; var length, step, iterator, result; if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); // fast case for arrays with default iterator if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) { result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); if (result === BREAK || result === RETURN) return result; } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) { result = call(iterator, f, step.value, entries); if (result === BREAK || result === RETURN) return result; } }; exports.BREAK = BREAK; exports.RETURN = RETURN; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_function-to-string.js": /*!*****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_function-to-string.js ***! \*****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(/*! ./_shared */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js")('native-function-to-string', Function.toString); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js": /*!*****************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self // eslint-disable-next-line no-new-func : Function('return this')(); if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js": /*!**************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { var hasOwnProperty = {}.hasOwnProperty; module.exports = function (it, key) { return hasOwnProperty.call(it, key); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js": /*!***************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js"); var createDesc = __webpack_require__(/*! ./_property-desc */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js"); module.exports = __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js") ? function (object, key, value) { return dP.f(object, key, createDesc(1, value)); } : function (object, key, value) { object[key] = value; return object; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_html.js": /*!***************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_html.js ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var document = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js").document; module.exports = document && document.documentElement; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ie8-dom-define.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_ie8-dom-define.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { module.exports = !__webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js") && !__webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_dom-create.js")('div'), 'a', { get: function () { return 7; } }).a != 7; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_inherit-if-required.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_inherit-if-required.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var setPrototypeOf = __webpack_require__(/*! ./_set-proto */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-proto.js").set; module.exports = function (that, target, C) { var S = target.constructor; var P; if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) { setPrototypeOf(that, P); } return that; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_invoke.js": /*!*****************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_invoke.js ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { // fast apply, http://jsperf.lnkit.com/fast-apply/5 module.exports = function (fn, args, that) { var un = that === undefined; switch (args.length) { case 0: return un ? fn() : fn.call(that); case 1: return un ? fn(args[0]) : fn.call(that, args[0]); case 2: return un ? fn(args[0], args[1]) : fn.call(that, args[0], args[1]); case 3: return un ? fn(args[0], args[1], args[2]) : fn.call(that, args[0], args[1], args[2]); case 4: return un ? fn(args[0], args[1], args[2], args[3]) : fn.call(that, args[0], args[1], args[2], args[3]); } return fn.apply(that, args); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js": /*!******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // fallback for non-array-like ES3 and non-enumerable old V8 strings var cof = __webpack_require__(/*! ./_cof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js"); // eslint-disable-next-line no-prototype-builtins module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { return cof(it) == 'String' ? it.split('') : Object(it); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array-iter.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array-iter.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // check on default Array iterator var Iterators = __webpack_require__(/*! ./_iterators */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js"); var ITERATOR = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('iterator'); var ArrayProto = Array.prototype; module.exports = function (it) { return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array.js": /*!*******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array.js ***! \*******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 7.2.2 IsArray(argument) var cof = __webpack_require__(/*! ./_cof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js"); module.exports = Array.isArray || function isArray(arg) { return cof(arg) == 'Array'; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-integer.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_is-integer.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.3 Number.isInteger(number) var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var floor = Math.floor; module.exports = function isInteger(it) { return !isObject(it) && isFinite(it) && floor(it) === it; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (it) { return typeof it === 'object' ? it !== null : typeof it === 'function'; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-regexp.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_is-regexp.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 7.2.8 IsRegExp(argument) var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var cof = __webpack_require__(/*! ./_cof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js"); var MATCH = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('match'); module.exports = function (it) { var isRegExp; return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-call.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-call.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // call something on iterator step with safe closing on error var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); module.exports = function (iterator, fn, value, entries) { try { return entries ? fn(anObject(value)[0], value[1]) : fn(value); // 7.4.6 IteratorClose(iterator, completion) } catch (e) { var ret = iterator['return']; if (ret !== undefined) anObject(ret.call(iterator)); throw e; } }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-create.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-create.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var create = __webpack_require__(/*! ./_object-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js"); var descriptor = __webpack_require__(/*! ./_property-desc */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js"); var setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js"); var IteratorPrototype = {}; // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() __webpack_require__(/*! ./_hide */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js")(IteratorPrototype, __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('iterator'), function () { return this; }); module.exports = function (Constructor, NAME, next) { Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); setToStringTag(Constructor, NAME + ' Iterator'); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-define.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-define.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var LIBRARY = __webpack_require__(/*! ./_library */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_library.js"); var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js"); var hide = __webpack_require__(/*! ./_hide */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js"); var Iterators = __webpack_require__(/*! ./_iterators */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js"); var $iterCreate = __webpack_require__(/*! ./_iter-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-create.js"); var setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js"); var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js"); var ITERATOR = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('iterator'); var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` var FF_ITERATOR = '@@iterator'; var KEYS = 'keys'; var VALUES = 'values'; var returnThis = function () { return this; }; module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { $iterCreate(Constructor, NAME, next); var getMethod = function (kind) { if (!BUGGY && kind in proto) return proto[kind]; switch (kind) { case KEYS: return function keys() { return new Constructor(this, kind); }; case VALUES: return function values() { return new Constructor(this, kind); }; } return function entries() { return new Constructor(this, kind); }; }; var TAG = NAME + ' Iterator'; var DEF_VALUES = DEFAULT == VALUES; var VALUES_BUG = false; var proto = Base.prototype; var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; var $default = $native || getMethod(DEFAULT); var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; var methods, key, IteratorPrototype; // Fix native if ($anyNative) { IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { // Set @@toStringTag to native iterators setToStringTag(IteratorPrototype, TAG, true); // fix for some old engines if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis); } } // fix Array#{values, @@iterator}.name in V8 / FF if (DEF_VALUES && $native && $native.name !== VALUES) { VALUES_BUG = true; $default = function values() { return $native.call(this); }; } // Define iterator if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { hide(proto, ITERATOR, $default); } // Plug for library Iterators[NAME] = $default; Iterators[TAG] = returnThis; if (DEFAULT) { methods = { values: DEF_VALUES ? $default : getMethod(VALUES), keys: IS_SET ? $default : getMethod(KEYS), entries: $entries }; if (FORCED) for (key in methods) { if (!(key in proto)) redefine(proto, key, methods[key]); } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); } return methods; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-detect.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-detect.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var ITERATOR = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('iterator'); var SAFE_CLOSING = false; try { var riter = [7][ITERATOR](); riter['return'] = function () { SAFE_CLOSING = true; }; // eslint-disable-next-line no-throw-literal Array.from(riter, function () { throw 2; }); } catch (e) { /* empty */ } module.exports = function (exec, skipClosing) { if (!skipClosing && !SAFE_CLOSING) return false; var safe = false; try { var arr = [7]; var iter = arr[ITERATOR](); iter.next = function () { return { done: safe = true }; }; arr[ITERATOR] = function () { return iter; }; exec(arr); } catch (e) { /* empty */ } return safe; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-step.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-step.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (done, value) { return { value: value, done: !!done }; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = {}; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_library.js": /*!******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_library.js ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = false; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-expm1.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_math-expm1.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { // 20.2.2.14 Math.expm1(x) var $expm1 = Math.expm1; module.exports = (!$expm1 // Old FF bug || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168 // Tor Browser bug || $expm1(-2e-17) != -2e-17 ) ? function expm1(x) { return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1; } : $expm1; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-fround.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_math-fround.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.16 Math.fround(x) var sign = __webpack_require__(/*! ./_math-sign */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-sign.js"); var pow = Math.pow; var EPSILON = pow(2, -52); var EPSILON32 = pow(2, -23); var MAX32 = pow(2, 127) * (2 - EPSILON32); var MIN32 = pow(2, -126); var roundTiesToEven = function (n) { return n + 1 / EPSILON - 1 / EPSILON; }; module.exports = Math.fround || function fround(x) { var $abs = Math.abs(x); var $sign = sign(x); var a, result; if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32; a = (1 + EPSILON32 / EPSILON) * $abs; result = a - (a - $abs); // eslint-disable-next-line no-self-compare if (result > MAX32 || result != result) return $sign * Infinity; return $sign * result; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-log1p.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_math-log1p.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { // 20.2.2.20 Math.log1p(x) module.exports = Math.log1p || function log1p(x) { return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-scale.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_math-scale.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { // https://rwaldron.github.io/proposal-math-extensions/ module.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) { if ( arguments.length === 0 // eslint-disable-next-line no-self-compare || x != x // eslint-disable-next-line no-self-compare || inLow != inLow // eslint-disable-next-line no-self-compare || inHigh != inHigh // eslint-disable-next-line no-self-compare || outLow != outLow // eslint-disable-next-line no-self-compare || outHigh != outHigh ) return NaN; if (x === Infinity || x === -Infinity) return x; return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-sign.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_math-sign.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { // 20.2.2.28 Math.sign(x) module.exports = Math.sign || function sign(x) { // eslint-disable-next-line no-self-compare return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js": /*!***************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var META = __webpack_require__(/*! ./_uid */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js")('meta'); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var has = __webpack_require__(/*! ./_has */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js"); var setDesc = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js").f; var id = 0; var isExtensible = Object.isExtensible || function () { return true; }; var FREEZE = !__webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { return isExtensible(Object.preventExtensions({})); }); var setMeta = function (it) { setDesc(it, META, { value: { i: 'O' + ++id, // object ID w: {} // weak collections IDs } }); }; var fastKey = function (it, create) { // return primitive with prefix if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; if (!has(it, META)) { // can't set metadata to uncaught frozen object if (!isExtensible(it)) return 'F'; // not necessary to add metadata if (!create) return 'E'; // add missing metadata setMeta(it); // return object ID } return it[META].i; }; var getWeak = function (it, create) { if (!has(it, META)) { // can't set metadata to uncaught frozen object if (!isExtensible(it)) return true; // not necessary to add metadata if (!create) return false; // add missing metadata setMeta(it); // return hash weak collections IDs } return it[META].w; }; // add metadata on freeze-family methods calling var onFreeze = function (it) { if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it); return it; }; var meta = module.exports = { KEY: META, NEED: false, fastKey: fastKey, getWeak: getWeak, onFreeze: onFreeze }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js": /*!*******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js ***! \*******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var Map = __webpack_require__(/*! ./es6.map */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.map.js"); var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var shared = __webpack_require__(/*! ./_shared */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js")('metadata'); var store = shared.store || (shared.store = new (__webpack_require__(/*! ./es6.weak-map */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-map.js"))()); var getOrCreateMetadataMap = function (target, targetKey, create) { var targetMetadata = store.get(target); if (!targetMetadata) { if (!create) return undefined; store.set(target, targetMetadata = new Map()); } var keyMetadata = targetMetadata.get(targetKey); if (!keyMetadata) { if (!create) return undefined; targetMetadata.set(targetKey, keyMetadata = new Map()); } return keyMetadata; }; var ordinaryHasOwnMetadata = function (MetadataKey, O, P) { var metadataMap = getOrCreateMetadataMap(O, P, false); return metadataMap === undefined ? false : metadataMap.has(MetadataKey); }; var ordinaryGetOwnMetadata = function (MetadataKey, O, P) { var metadataMap = getOrCreateMetadataMap(O, P, false); return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey); }; var ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) { getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue); }; var ordinaryOwnMetadataKeys = function (target, targetKey) { var metadataMap = getOrCreateMetadataMap(target, targetKey, false); var keys = []; if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); }); return keys; }; var toMetaKey = function (it) { return it === undefined || typeof it == 'symbol' ? it : String(it); }; var exp = function (O) { $export($export.S, 'Reflect', O); }; module.exports = { store: store, map: getOrCreateMetadataMap, has: ordinaryHasOwnMetadata, get: ordinaryGetOwnMetadata, set: ordinaryDefineOwnMetadata, keys: ordinaryOwnMetadataKeys, key: toMetaKey, exp: exp }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_microtask.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_microtask.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var macrotask = __webpack_require__(/*! ./_task */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_task.js").set; var Observer = global.MutationObserver || global.WebKitMutationObserver; var process = global.process; var Promise = global.Promise; var isNode = __webpack_require__(/*! ./_cof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js")(process) == 'process'; module.exports = function () { var head, last, notify; var flush = function () { var parent, fn; if (isNode && (parent = process.domain)) parent.exit(); while (head) { fn = head.fn; head = head.next; try { fn(); } catch (e) { if (head) notify(); else last = undefined; throw e; } } last = undefined; if (parent) parent.enter(); }; // Node.js if (isNode) { notify = function () { process.nextTick(flush); }; // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339 } else if (Observer && !(global.navigator && global.navigator.standalone)) { var toggle = true; var node = document.createTextNode(''); new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new notify = function () { node.data = toggle = !toggle; }; // environments with maybe non-completely correct, but existent Promise } else if (Promise && Promise.resolve) { // Promise.resolve without an argument throws an error in LG WebOS 2 var promise = Promise.resolve(undefined); notify = function () { promise.then(flush); }; // for other environments - macrotask based on: // - setImmediate // - MessageChannel // - window.postMessag // - onreadystatechange // - setTimeout } else { notify = function () { // strange IE + webpack dev server bug - use .call(global) macrotask.call(global, flush); }; } return function (fn) { var task = { fn: fn, next: undefined }; if (last) last.next = task; if (!head) { head = task; notify(); } last = task; }; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_new-promise-capability.js": /*!*********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_new-promise-capability.js ***! \*********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 25.4.1.5 NewPromiseCapability(C) var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); function PromiseCapability(C) { var resolve, reject; this.promise = new C(function ($$resolve, $$reject) { if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); resolve = $$resolve; reject = $$reject; }); this.resolve = aFunction(resolve); this.reject = aFunction(reject); } module.exports.f = function (C) { return new PromiseCapability(C); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-assign.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-assign.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 19.1.2.1 Object.assign(target, source, ...) var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js"); var getKeys = __webpack_require__(/*! ./_object-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js"); var gOPS = __webpack_require__(/*! ./_object-gops */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gops.js"); var pIE = __webpack_require__(/*! ./_object-pie */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var IObject = __webpack_require__(/*! ./_iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js"); var $assign = Object.assign; // should work with symbols and should have deterministic property order (V8 bug) module.exports = !$assign || __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { var A = {}; var B = {}; // eslint-disable-next-line no-undef var S = Symbol(); var K = 'abcdefghijklmnopqrst'; A[S] = 7; K.split('').forEach(function (k) { B[k] = k; }); return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; }) ? function assign(target, source) { // eslint-disable-line no-unused-vars var T = toObject(target); var aLen = arguments.length; var index = 1; var getSymbols = gOPS.f; var isEnum = pIE.f; while (aLen > index) { var S = IObject(arguments[index++]); var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S); var length = keys.length; var j = 0; var key; while (length > j) { key = keys[j++]; if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key]; } } return T; } : $assign; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var dPs = __webpack_require__(/*! ./_object-dps */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dps.js"); var enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_enum-bug-keys.js"); var IE_PROTO = __webpack_require__(/*! ./_shared-key */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_shared-key.js")('IE_PROTO'); var Empty = function () { /* empty */ }; var PROTOTYPE = 'prototype'; // Create object with fake `null` prototype: use iframe Object with cleared prototype var createDict = function () { // Thrash, waste and sodomy: IE GC bug var iframe = __webpack_require__(/*! ./_dom-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_dom-create.js")('iframe'); var i = enumBugKeys.length; var lt = '<'; var gt = '>'; var iframeDocument; iframe.style.display = 'none'; __webpack_require__(/*! ./_html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_html.js").appendChild(iframe); iframe.src = 'javascript:'; // eslint-disable-line no-script-url // createDict = iframe.contentWindow.Object; // html.removeChild(iframe); iframeDocument = iframe.contentWindow.document; iframeDocument.open(); iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); iframeDocument.close(); createDict = iframeDocument.F; while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]]; return createDict(); }; module.exports = Object.create || function create(O, Properties) { var result; if (O !== null) { Empty[PROTOTYPE] = anObject(O); result = new Empty(); Empty[PROTOTYPE] = null; // add "__proto__" for Object.getPrototypeOf polyfill result[IE_PROTO] = O; } else result = createDict(); return Properties === undefined ? result : dPs(result, Properties); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ie8-dom-define.js"); var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js"); var dP = Object.defineProperty; exports.f = __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js") ? Object.defineProperty : function defineProperty(O, P, Attributes) { anObject(O); P = toPrimitive(P, true); anObject(Attributes); if (IE8_DOM_DEFINE) try { return dP(O, P, Attributes); } catch (e) { /* empty */ } if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); if ('value' in Attributes) O[P] = Attributes.value; return O; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dps.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dps.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var getKeys = __webpack_require__(/*! ./_object-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js"); module.exports = __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js") ? Object.defineProperties : function defineProperties(O, Properties) { anObject(O); var keys = getKeys(Properties); var length = keys.length; var i = 0; var P; while (length > i) dP.f(O, P = keys[i++], Properties[P]); return O; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-forced-pam.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-forced-pam.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // Forced replacement prototype accessors methods module.exports = __webpack_require__(/*! ./_library */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_library.js") || !__webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { var K = Math.random(); // In FF throws only define methods // eslint-disable-next-line no-undef, no-useless-call __defineSetter__.call(null, K, function () { /* empty */ }); delete __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js")[K]; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var pIE = __webpack_require__(/*! ./_object-pie */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js"); var createDesc = __webpack_require__(/*! ./_property-desc */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js"); var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js"); var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js"); var has = __webpack_require__(/*! ./_has */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js"); var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ie8-dom-define.js"); var gOPD = Object.getOwnPropertyDescriptor; exports.f = __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js") ? gOPD : function getOwnPropertyDescriptor(O, P) { O = toIObject(O); P = toPrimitive(P, true); if (IE8_DOM_DEFINE) try { return gOPD(O, P); } catch (e) { /* empty */ } if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn-ext.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn-ext.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js"); var gOPN = __webpack_require__(/*! ./_object-gopn */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js").f; var toString = {}.toString; var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; var getWindowNames = function (it) { try { return gOPN(it); } catch (e) { return windowNames.slice(); } }; module.exports.f = function getOwnPropertyNames(it) { return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) var $keys = __webpack_require__(/*! ./_object-keys-internal */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys-internal.js"); var hiddenKeys = __webpack_require__(/*! ./_enum-bug-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_enum-bug-keys.js").concat('length', 'prototype'); exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { return $keys(O, hiddenKeys); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gops.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gops.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { exports.f = Object.getOwnPropertySymbols; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) var has = __webpack_require__(/*! ./_has */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var IE_PROTO = __webpack_require__(/*! ./_shared-key */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_shared-key.js")('IE_PROTO'); var ObjectProto = Object.prototype; module.exports = Object.getPrototypeOf || function (O) { O = toObject(O); if (has(O, IE_PROTO)) return O[IE_PROTO]; if (typeof O.constructor == 'function' && O instanceof O.constructor) { return O.constructor.prototype; } return O instanceof Object ? ObjectProto : null; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys-internal.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys-internal.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var has = __webpack_require__(/*! ./_has */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js"); var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js"); var arrayIndexOf = __webpack_require__(/*! ./_array-includes */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-includes.js")(false); var IE_PROTO = __webpack_require__(/*! ./_shared-key */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_shared-key.js")('IE_PROTO'); module.exports = function (object, names) { var O = toIObject(object); var i = 0; var result = []; var key; for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key); // Don't enum bug & hidden keys while (names.length > i) if (has(O, key = names[i++])) { ~arrayIndexOf(result, key) || result.push(key); } return result; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.14 / 15.2.3.14 Object.keys(O) var $keys = __webpack_require__(/*! ./_object-keys-internal */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys-internal.js"); var enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_enum-bug-keys.js"); module.exports = Object.keys || function keys(O) { return $keys(O, enumBugKeys); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { exports.f = {}.propertyIsEnumerable; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // most Object methods by ES6 should accept primitives var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var core = __webpack_require__(/*! ./_core */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js"); var fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); module.exports = function (KEY, exec) { var fn = (core.Object || {})[KEY] || Object[KEY]; var exp = {}; exp[KEY] = exec(fn); $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-to-array.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-to-array.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js"); var getKeys = __webpack_require__(/*! ./_object-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js"); var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js"); var isEnum = __webpack_require__(/*! ./_object-pie */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js").f; module.exports = function (isEntries) { return function (it) { var O = toIObject(it); var keys = getKeys(O); var length = keys.length; var i = 0; var result = []; var key; while (length > i) { key = keys[i++]; if (!DESCRIPTORS || isEnum.call(O, key)) { result.push(isEntries ? [key, O[key]] : O[key]); } } return result; }; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_own-keys.js": /*!*******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_own-keys.js ***! \*******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // all object keys, includes non-enumerable and symbols var gOPN = __webpack_require__(/*! ./_object-gopn */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js"); var gOPS = __webpack_require__(/*! ./_object-gops */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gops.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var Reflect = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js").Reflect; module.exports = Reflect && Reflect.ownKeys || function ownKeys(it) { var keys = gOPN.f(anObject(it)); var getSymbols = gOPS.f; return getSymbols ? keys.concat(getSymbols(it)) : keys; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_parse-float.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_parse-float.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $parseFloat = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js").parseFloat; var $trim = __webpack_require__(/*! ./_string-trim */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js").trim; module.exports = 1 / $parseFloat(__webpack_require__(/*! ./_string-ws */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-ws.js") + '-0') !== -Infinity ? function parseFloat(str) { var string = $trim(String(str), 3); var result = $parseFloat(string); return result === 0 && string.charAt(0) == '-' ? -0 : result; } : $parseFloat; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_parse-int.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_parse-int.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $parseInt = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js").parseInt; var $trim = __webpack_require__(/*! ./_string-trim */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js").trim; var ws = __webpack_require__(/*! ./_string-ws */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-ws.js"); var hex = /^[-+]?0[xX]/; module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) { var string = $trim(String(str), 3); return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10)); } : $parseInt; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_perform.js": /*!******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_perform.js ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (exec) { try { return { e: false, v: exec() }; } catch (e) { return { e: true, v: e }; } }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_promise-resolve.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_promise-resolve.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var newPromiseCapability = __webpack_require__(/*! ./_new-promise-capability */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_new-promise-capability.js"); module.exports = function (C, x) { anObject(C); if (isObject(x) && x.constructor === C) return x; var promiseCapability = newPromiseCapability.f(C); var resolve = promiseCapability.resolve; resolve(x); return promiseCapability.promise; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (bitmap, value) { return { enumerable: !(bitmap & 1), configurable: !(bitmap & 2), writable: !(bitmap & 4), value: value }; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js"); module.exports = function (target, src, safe) { for (var key in src) redefine(target, key, src[key], safe); return target; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js": /*!*******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js ***! \*******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var hide = __webpack_require__(/*! ./_hide */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js"); var has = __webpack_require__(/*! ./_has */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js"); var SRC = __webpack_require__(/*! ./_uid */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js")('src'); var $toString = __webpack_require__(/*! ./_function-to-string */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_function-to-string.js"); var TO_STRING = 'toString'; var TPL = ('' + $toString).split(TO_STRING); __webpack_require__(/*! ./_core */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js").inspectSource = function (it) { return $toString.call(it); }; (module.exports = function (O, key, val, safe) { var isFunction = typeof val == 'function'; if (isFunction) has(val, 'name') || hide(val, 'name', key); if (O[key] === val) return; if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); if (O === global) { O[key] = val; } else if (!safe) { delete O[key]; hide(O, key, val); } else if (O[key]) { O[key] = val; } else { hide(O, key, val); } // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative })(Function.prototype, TO_STRING, function toString() { return typeof this == 'function' && this[SRC] || $toString.call(this); }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_regexp-exec-abstract.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_regexp-exec-abstract.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var classof = __webpack_require__(/*! ./_classof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js"); var builtinExec = RegExp.prototype.exec; // `RegExpExec` abstract operation // https://tc39.github.io/ecma262/#sec-regexpexec module.exports = function (R, S) { var exec = R.exec; if (typeof exec === 'function') { var result = exec.call(R, S); if (typeof result !== 'object') { throw new TypeError('RegExp exec method returned something other than an Object or null'); } return result; } if (classof(R) !== 'RegExp') { throw new TypeError('RegExp#exec called on incompatible receiver'); } return builtinExec.call(R, S); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_regexp-exec.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_regexp-exec.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var regexpFlags = __webpack_require__(/*! ./_flags */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js"); var nativeExec = RegExp.prototype.exec; // This always refers to the native implementation, because the // String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, // which loads this file before patching the method. var nativeReplace = String.prototype.replace; var patchedExec = nativeExec; var LAST_INDEX = 'lastIndex'; var UPDATES_LAST_INDEX_WRONG = (function () { var re1 = /a/, re2 = /b*/g; nativeExec.call(re1, 'a'); nativeExec.call(re2, 'a'); return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0; })(); // nonparticipating capturing group, copied from es5-shim's String#split patch. var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED; if (PATCH) { patchedExec = function exec(str) { var re = this; var lastIndex, reCopy, match, i; if (NPCG_INCLUDED) { reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re)); } if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX]; match = nativeExec.call(re, str); if (UPDATES_LAST_INDEX_WRONG && match) { re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex; } if (NPCG_INCLUDED && match && match.length > 1) { // Fix browsers whose `exec` methods don't consistently return `undefined` // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ // eslint-disable-next-line no-loop-func nativeReplace.call(match[0], reCopy, function () { for (i = 1; i < arguments.length - 2; i++) { if (arguments[i] === undefined) match[i] = undefined; } }); } return match; }; } module.exports = patchedExec; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_replacer.js": /*!*******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_replacer.js ***! \*******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function (regExp, replace) { var replacer = replace === Object(replace) ? function (part) { return replace[part]; } : replace; return function (it) { return String(it).replace(regExp, replacer); }; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_same-value.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_same-value.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { // 7.2.9 SameValue(x, y) module.exports = Object.is || function is(x, y) { // eslint-disable-next-line no-self-compare return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-from.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-from.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://tc39.github.io/proposal-setmap-offrom/ var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js"); var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js"); module.exports = function (COLLECTION) { $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) { var mapFn = arguments[1]; var mapping, A, n, cb; aFunction(this); mapping = mapFn !== undefined; if (mapping) aFunction(mapFn); if (source == undefined) return new this(); A = []; if (mapping) { n = 0; cb = ctx(mapFn, arguments[2], 2); forOf(source, false, function (nextItem) { A.push(cb(nextItem, n++)); }); } else { forOf(source, false, A.push, A); } return new this(A); } }); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-of.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-of.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://tc39.github.io/proposal-setmap-offrom/ var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); module.exports = function (COLLECTION) { $export($export.S, COLLECTION, { of: function of() { var length = arguments.length; var A = new Array(length); while (length--) A[length] = arguments[length]; return new this(A); } }); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-proto.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_set-proto.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // Works with __proto__ only. Old v8 can't work with null proto objects. /* eslint-disable no-proto */ var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var check = function (O, proto) { anObject(O); if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!"); }; module.exports = { set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line function (test, buggy, set) { try { set = __webpack_require__(/*! ./_ctx */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js")(Function.call, __webpack_require__(/*! ./_object-gopd */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js").f(Object.prototype, '__proto__').set, 2); set(test, []); buggy = !(test instanceof Array); } catch (e) { buggy = true; } return function setPrototypeOf(O, proto) { check(O, proto); if (buggy) O.__proto__ = proto; else set(O, proto); return O; }; }({}, false) : undefined), check: check }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js"); var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js"); var SPECIES = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('species'); module.exports = function (KEY) { var C = global[KEY]; if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, { configurable: true, get: function () { return this; } }); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var def = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js").f; var has = __webpack_require__(/*! ./_has */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js"); var TAG = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('toStringTag'); module.exports = function (it, tag, stat) { if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_shared-key.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_shared-key.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var shared = __webpack_require__(/*! ./_shared */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js")('keys'); var uid = __webpack_require__(/*! ./_uid */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js"); module.exports = function (key) { return shared[key] || (shared[key] = uid(key)); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js": /*!*****************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var core = __webpack_require__(/*! ./_core */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js"); var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var SHARED = '__core-js_shared__'; var store = global[SHARED] || (global[SHARED] = {}); (module.exports = function (key, value) { return store[key] || (store[key] = value !== undefined ? value : {}); })('versions', []).push({ version: core.version, mode: __webpack_require__(/*! ./_library */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_library.js") ? 'pure' : 'global', copyright: '© 2019 Denis Pushkarev (zloirock.ru)' }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 7.3.20 SpeciesConstructor(O, defaultConstructor) var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); var SPECIES = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('species'); module.exports = function (O, D) { var C = anObject(O).constructor; var S; return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); module.exports = function (method, arg) { return !!method && fails(function () { // eslint-disable-next-line no-useless-call arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null); }); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-at.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-at.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js"); var defined = __webpack_require__(/*! ./_defined */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js"); // true -> String#at // false -> String#codePointAt module.exports = function (TO_STRING) { return function (that, pos) { var s = String(defined(that)); var i = toInteger(pos); var l = s.length; var a, b; if (i < 0 || i >= l) return TO_STRING ? '' : undefined; a = s.charCodeAt(i); return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff ? TO_STRING ? s.charAt(i) : a : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; }; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-context.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-context.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // helper for String#{startsWith, endsWith, includes} var isRegExp = __webpack_require__(/*! ./_is-regexp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-regexp.js"); var defined = __webpack_require__(/*! ./_defined */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js"); module.exports = function (that, searchString, NAME) { if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!"); return String(defined(that)); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); var defined = __webpack_require__(/*! ./_defined */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js"); var quot = /"/g; // B.2.3.2.1 CreateHTML(string, tag, attribute, value) var createHTML = function (string, tag, attribute, value) { var S = String(defined(string)); var p1 = '<' + tag; if (attribute !== '') p1 += ' ' + attribute + '="' + String(value).replace(quot, '"') + '"'; return p1 + '>' + S + ''; }; module.exports = function (NAME, exec) { var O = {}; O[NAME] = exec(createHTML); $export($export.P + $export.F * fails(function () { var test = ''[NAME]('"'); return test !== test.toLowerCase() || test.split('"').length > 3; }), 'String', O); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-pad.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-pad.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/tc39/proposal-string-pad-start-end var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var repeat = __webpack_require__(/*! ./_string-repeat */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-repeat.js"); var defined = __webpack_require__(/*! ./_defined */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js"); module.exports = function (that, maxLength, fillString, left) { var S = String(defined(that)); var stringLength = S.length; var fillStr = fillString === undefined ? ' ' : String(fillString); var intMaxLength = toLength(maxLength); if (intMaxLength <= stringLength || fillStr == '') return S; var fillLen = intMaxLength - stringLength; var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length)); if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen); return left ? stringFiller + S : S + stringFiller; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-repeat.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-repeat.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js"); var defined = __webpack_require__(/*! ./_defined */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js"); module.exports = function repeat(count) { var str = String(defined(this)); var res = ''; var n = toInteger(count); if (n < 0 || n == Infinity) throw RangeError("Count can't be negative"); for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str; return res; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var defined = __webpack_require__(/*! ./_defined */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js"); var fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); var spaces = __webpack_require__(/*! ./_string-ws */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-ws.js"); var space = '[' + spaces + ']'; var non = '\u200b\u0085'; var ltrim = RegExp('^' + space + space + '*'); var rtrim = RegExp(space + space + '*$'); var exporter = function (KEY, exec, ALIAS) { var exp = {}; var FORCE = fails(function () { return !!spaces[KEY]() || non[KEY]() != non; }); var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY]; if (ALIAS) exp[ALIAS] = fn; $export($export.P + $export.F * FORCE, 'String', exp); }; // 1 -> String#trimLeft // 2 -> String#trimRight // 3 -> String#trim var trim = exporter.trim = function (string, TYPE) { string = String(defined(string)); if (TYPE & 1) string = string.replace(ltrim, ''); if (TYPE & 2) string = string.replace(rtrim, ''); return string; }; module.exports = exporter; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-ws.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-ws.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' + '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_task.js": /*!***************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_task.js ***! \***************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js"); var invoke = __webpack_require__(/*! ./_invoke */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_invoke.js"); var html = __webpack_require__(/*! ./_html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_html.js"); var cel = __webpack_require__(/*! ./_dom-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_dom-create.js"); var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var process = global.process; var setTask = global.setImmediate; var clearTask = global.clearImmediate; var MessageChannel = global.MessageChannel; var Dispatch = global.Dispatch; var counter = 0; var queue = {}; var ONREADYSTATECHANGE = 'onreadystatechange'; var defer, channel, port; var run = function () { var id = +this; // eslint-disable-next-line no-prototype-builtins if (queue.hasOwnProperty(id)) { var fn = queue[id]; delete queue[id]; fn(); } }; var listener = function (event) { run.call(event.data); }; // Node.js 0.9+ & IE10+ has setImmediate, otherwise: if (!setTask || !clearTask) { setTask = function setImmediate(fn) { var args = []; var i = 1; while (arguments.length > i) args.push(arguments[i++]); queue[++counter] = function () { // eslint-disable-next-line no-new-func invoke(typeof fn == 'function' ? fn : Function(fn), args); }; defer(counter); return counter; }; clearTask = function clearImmediate(id) { delete queue[id]; }; // Node.js 0.8- if (__webpack_require__(/*! ./_cof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js")(process) == 'process') { defer = function (id) { process.nextTick(ctx(run, id, 1)); }; // Sphere (JS game engine) Dispatch API } else if (Dispatch && Dispatch.now) { defer = function (id) { Dispatch.now(ctx(run, id, 1)); }; // Browsers with MessageChannel, includes WebWorkers } else if (MessageChannel) { channel = new MessageChannel(); port = channel.port2; channel.port1.onmessage = listener; defer = ctx(port.postMessage, port, 1); // Browsers with postMessage, skip WebWorkers // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) { defer = function (id) { global.postMessage(id + '', '*'); }; global.addEventListener('message', listener, false); // IE8- } else if (ONREADYSTATECHANGE in cel('script')) { defer = function (id) { html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () { html.removeChild(this); run.call(id); }; }; // Rest old browsers } else { defer = function (id) { setTimeout(ctx(run, id, 1), 0); }; } } module.exports = { set: setTask, clear: clearTask }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-absolute-index.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-absolute-index.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js"); var max = Math.max; var min = Math.min; module.exports = function (index, length) { index = toInteger(index); return index < 0 ? max(index + length, 0) : min(index, length); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-index.js": /*!*******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-index.js ***! \*******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://tc39.github.io/ecma262/#sec-toindex var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); module.exports = function (it) { if (it === undefined) return 0; var number = toInteger(it); var length = toLength(number); if (number !== length) throw RangeError('Wrong length!'); return length; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { // 7.1.4 ToInteger var ceil = Math.ceil; var floor = Math.floor; module.exports = function (it) { return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // to indexed object, toObject with fallback for non-array-like ES3 strings var IObject = __webpack_require__(/*! ./_iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js"); var defined = __webpack_require__(/*! ./_defined */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js"); module.exports = function (it) { return IObject(defined(it)); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 7.1.15 ToLength var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js"); var min = Math.min; module.exports = function (it) { return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 7.1.13 ToObject(argument) var defined = __webpack_require__(/*! ./_defined */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js"); module.exports = function (it) { return Object(defined(it)); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 7.1.1 ToPrimitive(input [, PreferredType]) var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); // instead of the ES6 spec version, we didn't implement @@toPrimitive case // and the second argument - flag - preferred type is a string module.exports = function (it, S) { if (!isObject(it)) return it; var fn, val; if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; throw TypeError("Can't convert object to primitive value"); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; if (__webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js")) { var LIBRARY = __webpack_require__(/*! ./_library */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_library.js"); var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $typed = __webpack_require__(/*! ./_typed */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed.js"); var $buffer = __webpack_require__(/*! ./_typed-buffer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-buffer.js"); var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js"); var anInstance = __webpack_require__(/*! ./_an-instance */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js"); var propertyDesc = __webpack_require__(/*! ./_property-desc */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js"); var hide = __webpack_require__(/*! ./_hide */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js"); var redefineAll = __webpack_require__(/*! ./_redefine-all */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js"); var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var toIndex = __webpack_require__(/*! ./_to-index */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-index.js"); var toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-absolute-index.js"); var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js"); var has = __webpack_require__(/*! ./_has */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js"); var classof = __webpack_require__(/*! ./_classof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js"); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var isArrayIter = __webpack_require__(/*! ./_is-array-iter */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array-iter.js"); var create = __webpack_require__(/*! ./_object-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js"); var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js"); var gOPN = __webpack_require__(/*! ./_object-gopn */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js").f; var getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/core.get-iterator-method.js"); var uid = __webpack_require__(/*! ./_uid */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js"); var wks = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js"); var createArrayMethod = __webpack_require__(/*! ./_array-methods */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js"); var createArrayIncludes = __webpack_require__(/*! ./_array-includes */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-includes.js"); var speciesConstructor = __webpack_require__(/*! ./_species-constructor */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js"); var ArrayIterators = __webpack_require__(/*! ./es6.array.iterator */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.iterator.js"); var Iterators = __webpack_require__(/*! ./_iterators */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js"); var $iterDetect = __webpack_require__(/*! ./_iter-detect */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-detect.js"); var setSpecies = __webpack_require__(/*! ./_set-species */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js"); var arrayFill = __webpack_require__(/*! ./_array-fill */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-fill.js"); var arrayCopyWithin = __webpack_require__(/*! ./_array-copy-within */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-copy-within.js"); var $DP = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js"); var $GOPD = __webpack_require__(/*! ./_object-gopd */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js"); var dP = $DP.f; var gOPD = $GOPD.f; var RangeError = global.RangeError; var TypeError = global.TypeError; var Uint8Array = global.Uint8Array; var ARRAY_BUFFER = 'ArrayBuffer'; var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER; var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT'; var PROTOTYPE = 'prototype'; var ArrayProto = Array[PROTOTYPE]; var $ArrayBuffer = $buffer.ArrayBuffer; var $DataView = $buffer.DataView; var arrayForEach = createArrayMethod(0); var arrayFilter = createArrayMethod(2); var arraySome = createArrayMethod(3); var arrayEvery = createArrayMethod(4); var arrayFind = createArrayMethod(5); var arrayFindIndex = createArrayMethod(6); var arrayIncludes = createArrayIncludes(true); var arrayIndexOf = createArrayIncludes(false); var arrayValues = ArrayIterators.values; var arrayKeys = ArrayIterators.keys; var arrayEntries = ArrayIterators.entries; var arrayLastIndexOf = ArrayProto.lastIndexOf; var arrayReduce = ArrayProto.reduce; var arrayReduceRight = ArrayProto.reduceRight; var arrayJoin = ArrayProto.join; var arraySort = ArrayProto.sort; var arraySlice = ArrayProto.slice; var arrayToString = ArrayProto.toString; var arrayToLocaleString = ArrayProto.toLocaleString; var ITERATOR = wks('iterator'); var TAG = wks('toStringTag'); var TYPED_CONSTRUCTOR = uid('typed_constructor'); var DEF_CONSTRUCTOR = uid('def_constructor'); var ALL_CONSTRUCTORS = $typed.CONSTR; var TYPED_ARRAY = $typed.TYPED; var VIEW = $typed.VIEW; var WRONG_LENGTH = 'Wrong length!'; var $map = createArrayMethod(1, function (O, length) { return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length); }); var LITTLE_ENDIAN = fails(function () { // eslint-disable-next-line no-undef return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1; }); var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () { new Uint8Array(1).set({}); }); var toOffset = function (it, BYTES) { var offset = toInteger(it); if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!'); return offset; }; var validate = function (it) { if (isObject(it) && TYPED_ARRAY in it) return it; throw TypeError(it + ' is not a typed array!'); }; var allocate = function (C, length) { if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) { throw TypeError('It is not a typed array constructor!'); } return new C(length); }; var speciesFromList = function (O, list) { return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list); }; var fromList = function (C, list) { var index = 0; var length = list.length; var result = allocate(C, length); while (length > index) result[index] = list[index++]; return result; }; var addGetter = function (it, key, internal) { dP(it, key, { get: function () { return this._d[internal]; } }); }; var $from = function from(source /* , mapfn, thisArg */) { var O = toObject(source); var aLen = arguments.length; var mapfn = aLen > 1 ? arguments[1] : undefined; var mapping = mapfn !== undefined; var iterFn = getIterFn(O); var i, length, values, result, step, iterator; if (iterFn != undefined && !isArrayIter(iterFn)) { for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) { values.push(step.value); } O = values; } if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2); for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) { result[i] = mapping ? mapfn(O[i], i) : O[i]; } return result; }; var $of = function of(/* ...items */) { var index = 0; var length = arguments.length; var result = allocate(this, length); while (length > index) result[index] = arguments[index++]; return result; }; // iOS Safari 6.x fails here var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); }); var $toLocaleString = function toLocaleString() { return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments); }; var proto = { copyWithin: function copyWithin(target, start /* , end */) { return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined); }, every: function every(callbackfn /* , thisArg */) { return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); }, fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars return arrayFill.apply(validate(this), arguments); }, filter: function filter(callbackfn /* , thisArg */) { return speciesFromList(this, arrayFilter(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined)); }, find: function find(predicate /* , thisArg */) { return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined); }, findIndex: function findIndex(predicate /* , thisArg */) { return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined); }, forEach: function forEach(callbackfn /* , thisArg */) { arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); }, indexOf: function indexOf(searchElement /* , fromIndex */) { return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); }, includes: function includes(searchElement /* , fromIndex */) { return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); }, join: function join(separator) { // eslint-disable-line no-unused-vars return arrayJoin.apply(validate(this), arguments); }, lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars return arrayLastIndexOf.apply(validate(this), arguments); }, map: function map(mapfn /* , thisArg */) { return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined); }, reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars return arrayReduce.apply(validate(this), arguments); }, reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars return arrayReduceRight.apply(validate(this), arguments); }, reverse: function reverse() { var that = this; var length = validate(that).length; var middle = Math.floor(length / 2); var index = 0; var value; while (index < middle) { value = that[index]; that[index++] = that[--length]; that[length] = value; } return that; }, some: function some(callbackfn /* , thisArg */) { return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); }, sort: function sort(comparefn) { return arraySort.call(validate(this), comparefn); }, subarray: function subarray(begin, end) { var O = validate(this); var length = O.length; var $begin = toAbsoluteIndex(begin, length); return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))( O.buffer, O.byteOffset + $begin * O.BYTES_PER_ELEMENT, toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin) ); } }; var $slice = function slice(start, end) { return speciesFromList(this, arraySlice.call(validate(this), start, end)); }; var $set = function set(arrayLike /* , offset */) { validate(this); var offset = toOffset(arguments[1], 1); var length = this.length; var src = toObject(arrayLike); var len = toLength(src.length); var index = 0; if (len + offset > length) throw RangeError(WRONG_LENGTH); while (index < len) this[offset + index] = src[index++]; }; var $iterators = { entries: function entries() { return arrayEntries.call(validate(this)); }, keys: function keys() { return arrayKeys.call(validate(this)); }, values: function values() { return arrayValues.call(validate(this)); } }; var isTAIndex = function (target, key) { return isObject(target) && target[TYPED_ARRAY] && typeof key != 'symbol' && key in target && String(+key) == String(key); }; var $getDesc = function getOwnPropertyDescriptor(target, key) { return isTAIndex(target, key = toPrimitive(key, true)) ? propertyDesc(2, target[key]) : gOPD(target, key); }; var $setDesc = function defineProperty(target, key, desc) { if (isTAIndex(target, key = toPrimitive(key, true)) && isObject(desc) && has(desc, 'value') && !has(desc, 'get') && !has(desc, 'set') // TODO: add validation descriptor w/o calling accessors && !desc.configurable && (!has(desc, 'writable') || desc.writable) && (!has(desc, 'enumerable') || desc.enumerable) ) { target[key] = desc.value; return target; } return dP(target, key, desc); }; if (!ALL_CONSTRUCTORS) { $GOPD.f = $getDesc; $DP.f = $setDesc; } $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', { getOwnPropertyDescriptor: $getDesc, defineProperty: $setDesc }); if (fails(function () { arrayToString.call({}); })) { arrayToString = arrayToLocaleString = function toString() { return arrayJoin.call(this); }; } var $TypedArrayPrototype$ = redefineAll({}, proto); redefineAll($TypedArrayPrototype$, $iterators); hide($TypedArrayPrototype$, ITERATOR, $iterators.values); redefineAll($TypedArrayPrototype$, { slice: $slice, set: $set, constructor: function () { /* noop */ }, toString: arrayToString, toLocaleString: $toLocaleString }); addGetter($TypedArrayPrototype$, 'buffer', 'b'); addGetter($TypedArrayPrototype$, 'byteOffset', 'o'); addGetter($TypedArrayPrototype$, 'byteLength', 'l'); addGetter($TypedArrayPrototype$, 'length', 'e'); dP($TypedArrayPrototype$, TAG, { get: function () { return this[TYPED_ARRAY]; } }); // eslint-disable-next-line max-statements module.exports = function (KEY, BYTES, wrapper, CLAMPED) { CLAMPED = !!CLAMPED; var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array'; var GETTER = 'get' + KEY; var SETTER = 'set' + KEY; var TypedArray = global[NAME]; var Base = TypedArray || {}; var TAC = TypedArray && getPrototypeOf(TypedArray); var FORCED = !TypedArray || !$typed.ABV; var O = {}; var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE]; var getter = function (that, index) { var data = that._d; return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN); }; var setter = function (that, index, value) { var data = that._d; if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff; data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN); }; var addElement = function (that, index) { dP(that, index, { get: function () { return getter(this, index); }, set: function (value) { return setter(this, index, value); }, enumerable: true }); }; if (FORCED) { TypedArray = wrapper(function (that, data, $offset, $length) { anInstance(that, TypedArray, NAME, '_d'); var index = 0; var offset = 0; var buffer, byteLength, length, klass; if (!isObject(data)) { length = toIndex(data); byteLength = length * BYTES; buffer = new $ArrayBuffer(byteLength); } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) { buffer = data; offset = toOffset($offset, BYTES); var $len = data.byteLength; if ($length === undefined) { if ($len % BYTES) throw RangeError(WRONG_LENGTH); byteLength = $len - offset; if (byteLength < 0) throw RangeError(WRONG_LENGTH); } else { byteLength = toLength($length) * BYTES; if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH); } length = byteLength / BYTES; } else if (TYPED_ARRAY in data) { return fromList(TypedArray, data); } else { return $from.call(TypedArray, data); } hide(that, '_d', { b: buffer, o: offset, l: byteLength, e: length, v: new $DataView(buffer) }); while (index < length) addElement(that, index++); }); TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$); hide(TypedArrayPrototype, 'constructor', TypedArray); } else if (!fails(function () { TypedArray(1); }) || !fails(function () { new TypedArray(-1); // eslint-disable-line no-new }) || !$iterDetect(function (iter) { new TypedArray(); // eslint-disable-line no-new new TypedArray(null); // eslint-disable-line no-new new TypedArray(1.5); // eslint-disable-line no-new new TypedArray(iter); // eslint-disable-line no-new }, true)) { TypedArray = wrapper(function (that, data, $offset, $length) { anInstance(that, TypedArray, NAME); var klass; // `ws` module bug, temporarily remove validation length for Uint8Array // https://github.com/websockets/ws/pull/645 if (!isObject(data)) return new Base(toIndex(data)); if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) { return $length !== undefined ? new Base(data, toOffset($offset, BYTES), $length) : $offset !== undefined ? new Base(data, toOffset($offset, BYTES)) : new Base(data); } if (TYPED_ARRAY in data) return fromList(TypedArray, data); return $from.call(TypedArray, data); }); arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) { if (!(key in TypedArray)) hide(TypedArray, key, Base[key]); }); TypedArray[PROTOTYPE] = TypedArrayPrototype; if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray; } var $nativeIterator = TypedArrayPrototype[ITERATOR]; var CORRECT_ITER_NAME = !!$nativeIterator && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined); var $iterator = $iterators.values; hide(TypedArray, TYPED_CONSTRUCTOR, true); hide(TypedArrayPrototype, TYPED_ARRAY, NAME); hide(TypedArrayPrototype, VIEW, true); hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray); if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) { dP(TypedArrayPrototype, TAG, { get: function () { return NAME; } }); } O[NAME] = TypedArray; $export($export.G + $export.W + $export.F * (TypedArray != Base), O); $export($export.S, NAME, { BYTES_PER_ELEMENT: BYTES }); $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, { from: $from, of: $of }); if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES); $export($export.P, NAME, proto); setSpecies(NAME); $export($export.P + $export.F * FORCED_SET, NAME, { set: $set }); $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators); if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString; $export($export.P + $export.F * fails(function () { new TypedArray(1).slice(); }), NAME, { slice: $slice }); $export($export.P + $export.F * (fails(function () { return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString(); }) || !fails(function () { TypedArrayPrototype.toLocaleString.call([1, 2]); })), NAME, { toLocaleString: $toLocaleString }); Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator; if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator); }; } else module.exports = function () { /* empty */ }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-buffer.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-buffer.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js"); var LIBRARY = __webpack_require__(/*! ./_library */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_library.js"); var $typed = __webpack_require__(/*! ./_typed */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed.js"); var hide = __webpack_require__(/*! ./_hide */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js"); var redefineAll = __webpack_require__(/*! ./_redefine-all */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js"); var fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); var anInstance = __webpack_require__(/*! ./_an-instance */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js"); var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var toIndex = __webpack_require__(/*! ./_to-index */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-index.js"); var gOPN = __webpack_require__(/*! ./_object-gopn */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js").f; var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js").f; var arrayFill = __webpack_require__(/*! ./_array-fill */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-fill.js"); var setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js"); var ARRAY_BUFFER = 'ArrayBuffer'; var DATA_VIEW = 'DataView'; var PROTOTYPE = 'prototype'; var WRONG_LENGTH = 'Wrong length!'; var WRONG_INDEX = 'Wrong index!'; var $ArrayBuffer = global[ARRAY_BUFFER]; var $DataView = global[DATA_VIEW]; var Math = global.Math; var RangeError = global.RangeError; // eslint-disable-next-line no-shadow-restricted-names var Infinity = global.Infinity; var BaseBuffer = $ArrayBuffer; var abs = Math.abs; var pow = Math.pow; var floor = Math.floor; var log = Math.log; var LN2 = Math.LN2; var BUFFER = 'buffer'; var BYTE_LENGTH = 'byteLength'; var BYTE_OFFSET = 'byteOffset'; var $BUFFER = DESCRIPTORS ? '_b' : BUFFER; var $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH; var $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET; // IEEE754 conversions based on https://github.com/feross/ieee754 function packIEEE754(value, mLen, nBytes) { var buffer = new Array(nBytes); var eLen = nBytes * 8 - mLen - 1; var eMax = (1 << eLen) - 1; var eBias = eMax >> 1; var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0; var i = 0; var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; var e, m, c; value = abs(value); // eslint-disable-next-line no-self-compare if (value != value || value === Infinity) { // eslint-disable-next-line no-self-compare m = value != value ? 1 : 0; e = eMax; } else { e = floor(log(value) / LN2); if (value * (c = pow(2, -e)) < 1) { e--; c *= 2; } if (e + eBias >= 1) { value += rt / c; } else { value += rt * pow(2, 1 - eBias); } if (value * c >= 2) { e++; c /= 2; } if (e + eBias >= eMax) { m = 0; e = eMax; } else if (e + eBias >= 1) { m = (value * c - 1) * pow(2, mLen); e = e + eBias; } else { m = value * pow(2, eBias - 1) * pow(2, mLen); e = 0; } } for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8); e = e << mLen | m; eLen += mLen; for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8); buffer[--i] |= s * 128; return buffer; } function unpackIEEE754(buffer, mLen, nBytes) { var eLen = nBytes * 8 - mLen - 1; var eMax = (1 << eLen) - 1; var eBias = eMax >> 1; var nBits = eLen - 7; var i = nBytes - 1; var s = buffer[i--]; var e = s & 127; var m; s >>= 7; for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8); m = e & (1 << -nBits) - 1; e >>= -nBits; nBits += mLen; for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8); if (e === 0) { e = 1 - eBias; } else if (e === eMax) { return m ? NaN : s ? -Infinity : Infinity; } else { m = m + pow(2, mLen); e = e - eBias; } return (s ? -1 : 1) * m * pow(2, e - mLen); } function unpackI32(bytes) { return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0]; } function packI8(it) { return [it & 0xff]; } function packI16(it) { return [it & 0xff, it >> 8 & 0xff]; } function packI32(it) { return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff]; } function packF64(it) { return packIEEE754(it, 52, 8); } function packF32(it) { return packIEEE754(it, 23, 4); } function addGetter(C, key, internal) { dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } }); } function get(view, bytes, index, isLittleEndian) { var numIndex = +index; var intIndex = toIndex(numIndex); if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX); var store = view[$BUFFER]._b; var start = intIndex + view[$OFFSET]; var pack = store.slice(start, start + bytes); return isLittleEndian ? pack : pack.reverse(); } function set(view, bytes, index, conversion, value, isLittleEndian) { var numIndex = +index; var intIndex = toIndex(numIndex); if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX); var store = view[$BUFFER]._b; var start = intIndex + view[$OFFSET]; var pack = conversion(+value); for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1]; } if (!$typed.ABV) { $ArrayBuffer = function ArrayBuffer(length) { anInstance(this, $ArrayBuffer, ARRAY_BUFFER); var byteLength = toIndex(length); this._b = arrayFill.call(new Array(byteLength), 0); this[$LENGTH] = byteLength; }; $DataView = function DataView(buffer, byteOffset, byteLength) { anInstance(this, $DataView, DATA_VIEW); anInstance(buffer, $ArrayBuffer, DATA_VIEW); var bufferLength = buffer[$LENGTH]; var offset = toInteger(byteOffset); if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!'); byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength); if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH); this[$BUFFER] = buffer; this[$OFFSET] = offset; this[$LENGTH] = byteLength; }; if (DESCRIPTORS) { addGetter($ArrayBuffer, BYTE_LENGTH, '_l'); addGetter($DataView, BUFFER, '_b'); addGetter($DataView, BYTE_LENGTH, '_l'); addGetter($DataView, BYTE_OFFSET, '_o'); } redefineAll($DataView[PROTOTYPE], { getInt8: function getInt8(byteOffset) { return get(this, 1, byteOffset)[0] << 24 >> 24; }, getUint8: function getUint8(byteOffset) { return get(this, 1, byteOffset)[0]; }, getInt16: function getInt16(byteOffset /* , littleEndian */) { var bytes = get(this, 2, byteOffset, arguments[1]); return (bytes[1] << 8 | bytes[0]) << 16 >> 16; }, getUint16: function getUint16(byteOffset /* , littleEndian */) { var bytes = get(this, 2, byteOffset, arguments[1]); return bytes[1] << 8 | bytes[0]; }, getInt32: function getInt32(byteOffset /* , littleEndian */) { return unpackI32(get(this, 4, byteOffset, arguments[1])); }, getUint32: function getUint32(byteOffset /* , littleEndian */) { return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0; }, getFloat32: function getFloat32(byteOffset /* , littleEndian */) { return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4); }, getFloat64: function getFloat64(byteOffset /* , littleEndian */) { return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8); }, setInt8: function setInt8(byteOffset, value) { set(this, 1, byteOffset, packI8, value); }, setUint8: function setUint8(byteOffset, value) { set(this, 1, byteOffset, packI8, value); }, setInt16: function setInt16(byteOffset, value /* , littleEndian */) { set(this, 2, byteOffset, packI16, value, arguments[2]); }, setUint16: function setUint16(byteOffset, value /* , littleEndian */) { set(this, 2, byteOffset, packI16, value, arguments[2]); }, setInt32: function setInt32(byteOffset, value /* , littleEndian */) { set(this, 4, byteOffset, packI32, value, arguments[2]); }, setUint32: function setUint32(byteOffset, value /* , littleEndian */) { set(this, 4, byteOffset, packI32, value, arguments[2]); }, setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) { set(this, 4, byteOffset, packF32, value, arguments[2]); }, setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) { set(this, 8, byteOffset, packF64, value, arguments[2]); } }); } else { if (!fails(function () { $ArrayBuffer(1); }) || !fails(function () { new $ArrayBuffer(-1); // eslint-disable-line no-new }) || fails(function () { new $ArrayBuffer(); // eslint-disable-line no-new new $ArrayBuffer(1.5); // eslint-disable-line no-new new $ArrayBuffer(NaN); // eslint-disable-line no-new return $ArrayBuffer.name != ARRAY_BUFFER; })) { $ArrayBuffer = function ArrayBuffer(length) { anInstance(this, $ArrayBuffer); return new BaseBuffer(toIndex(length)); }; var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE]; for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) { if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]); } if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer; } // iOS Safari 7.x bug var view = new $DataView(new $ArrayBuffer(2)); var $setInt8 = $DataView[PROTOTYPE].setInt8; view.setInt8(0, 2147483648); view.setInt8(1, 2147483649); if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], { setInt8: function setInt8(byteOffset, value) { $setInt8.call(this, byteOffset, value << 24 >> 24); }, setUint8: function setUint8(byteOffset, value) { $setInt8.call(this, byteOffset, value << 24 >> 24); } }, true); } setToStringTag($ArrayBuffer, ARRAY_BUFFER); setToStringTag($DataView, DATA_VIEW); hide($DataView[PROTOTYPE], $typed.VIEW, true); exports[ARRAY_BUFFER] = $ArrayBuffer; exports[DATA_VIEW] = $DataView; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed.js": /*!****************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_typed.js ***! \****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var hide = __webpack_require__(/*! ./_hide */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js"); var uid = __webpack_require__(/*! ./_uid */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js"); var TYPED = uid('typed_array'); var VIEW = uid('view'); var ABV = !!(global.ArrayBuffer && global.DataView); var CONSTR = ABV; var i = 0; var l = 9; var Typed; var TypedArrayConstructors = ( 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array' ).split(','); while (i < l) { if (Typed = global[TypedArrayConstructors[i++]]) { hide(Typed.prototype, TYPED, true); hide(Typed.prototype, VIEW, true); } else CONSTR = false; } module.exports = { ABV: ABV, CONSTR: CONSTR, TYPED: TYPED, VIEW: VIEW }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js": /*!**************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { var id = 0; var px = Math.random(); module.exports = function (key) { return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_user-agent.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_user-agent.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var navigator = global.navigator; module.exports = navigator && navigator.userAgent || ''; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_validate-collection.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_validate-collection.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); module.exports = function (it, TYPE) { if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!'); return it; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks-define.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_wks-define.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var core = __webpack_require__(/*! ./_core */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js"); var LIBRARY = __webpack_require__(/*! ./_library */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_library.js"); var wksExt = __webpack_require__(/*! ./_wks-ext */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks-ext.js"); var defineProperty = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js").f; module.exports = function (name) { var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) }); }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks-ext.js": /*!******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_wks-ext.js ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { exports.f = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js"); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js": /*!**************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js ***! \**************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var store = __webpack_require__(/*! ./_shared */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js")('wks'); var uid = __webpack_require__(/*! ./_uid */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js"); var Symbol = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js").Symbol; var USE_SYMBOL = typeof Symbol == 'function'; var $exports = module.exports = function (name) { return store[name] || (store[name] = USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); }; $exports.store = store; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/core.get-iterator-method.js": /*!**********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/core.get-iterator-method.js ***! \**********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var classof = __webpack_require__(/*! ./_classof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js"); var ITERATOR = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('iterator'); var Iterators = __webpack_require__(/*! ./_iterators */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js"); module.exports = __webpack_require__(/*! ./_core */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js").getIteratorMethod = function (it) { if (it != undefined) return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)]; }; /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/core.regexp.escape.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/core.regexp.escape.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/benjamingr/RexExp.escape var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $re = __webpack_require__(/*! ./_replacer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_replacer.js")(/[\\^$*+?.()|[\]{}]/g, '\\$&'); $export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.copy-within.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.copy-within.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.P, 'Array', { copyWithin: __webpack_require__(/*! ./_array-copy-within */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-copy-within.js") }); __webpack_require__(/*! ./_add-to-unscopables */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js")('copyWithin'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.every.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.every.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $every = __webpack_require__(/*! ./_array-methods */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js")(4); $export($export.P + $export.F * !__webpack_require__(/*! ./_strict-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js")([].every, true), 'Array', { // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg]) every: function every(callbackfn /* , thisArg */) { return $every(this, callbackfn, arguments[1]); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.fill.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.fill.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.P, 'Array', { fill: __webpack_require__(/*! ./_array-fill */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-fill.js") }); __webpack_require__(/*! ./_add-to-unscopables */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js")('fill'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.filter.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.filter.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $filter = __webpack_require__(/*! ./_array-methods */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js")(2); $export($export.P + $export.F * !__webpack_require__(/*! ./_strict-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js")([].filter, true), 'Array', { // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg]) filter: function filter(callbackfn /* , thisArg */) { return $filter(this, callbackfn, arguments[1]); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find-index.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find-index.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $find = __webpack_require__(/*! ./_array-methods */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js")(6); var KEY = 'findIndex'; var forced = true; // Shouldn't skip holes if (KEY in []) Array(1)[KEY](function () { forced = false; }); $export($export.P + $export.F * forced, 'Array', { findIndex: function findIndex(callbackfn /* , that = undefined */) { return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); __webpack_require__(/*! ./_add-to-unscopables */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js")(KEY); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $find = __webpack_require__(/*! ./_array-methods */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js")(5); var KEY = 'find'; var forced = true; // Shouldn't skip holes if (KEY in []) Array(1)[KEY](function () { forced = false; }); $export($export.P + $export.F * forced, 'Array', { find: function find(callbackfn /* , that = undefined */) { return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); __webpack_require__(/*! ./_add-to-unscopables */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js")(KEY); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.for-each.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.for-each.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $forEach = __webpack_require__(/*! ./_array-methods */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js")(0); var STRICT = __webpack_require__(/*! ./_strict-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js")([].forEach, true); $export($export.P + $export.F * !STRICT, 'Array', { // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg]) forEach: function forEach(callbackfn /* , thisArg */) { return $forEach(this, callbackfn, arguments[1]); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.from.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.from.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js"); var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var call = __webpack_require__(/*! ./_iter-call */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-call.js"); var isArrayIter = __webpack_require__(/*! ./_is-array-iter */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array-iter.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var createProperty = __webpack_require__(/*! ./_create-property */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_create-property.js"); var getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/core.get-iterator-method.js"); $export($export.S + $export.F * !__webpack_require__(/*! ./_iter-detect */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-detect.js")(function (iter) { Array.from(iter); }), 'Array', { // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined) from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { var O = toObject(arrayLike); var C = typeof this == 'function' ? this : Array; var aLen = arguments.length; var mapfn = aLen > 1 ? arguments[1] : undefined; var mapping = mapfn !== undefined; var index = 0; var iterFn = getIterFn(O); var length, result, step, iterator; if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); // if object isn't iterable or it's array with default iterator - use simple case if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) { for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) { createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); } } else { length = toLength(O.length); for (result = new C(length); length > index; index++) { createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); } } result.length = index; return result; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.index-of.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.index-of.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $indexOf = __webpack_require__(/*! ./_array-includes */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-includes.js")(false); var $native = [].indexOf; var NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0; $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(/*! ./_strict-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js")($native)), 'Array', { // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex]) indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { return NEGATIVE_ZERO // convert -0 to +0 ? $native.apply(this, arguments) || 0 : $indexOf(this, searchElement, arguments[1]); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.is-array.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.is-array.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 22.1.2.2 / 15.4.3.2 Array.isArray(arg) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Array', { isArray: __webpack_require__(/*! ./_is-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.iterator.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.iterator.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var addToUnscopables = __webpack_require__(/*! ./_add-to-unscopables */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js"); var step = __webpack_require__(/*! ./_iter-step */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-step.js"); var Iterators = __webpack_require__(/*! ./_iterators */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js"); var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js"); // 22.1.3.4 Array.prototype.entries() // 22.1.3.13 Array.prototype.keys() // 22.1.3.29 Array.prototype.values() // 22.1.3.30 Array.prototype[@@iterator]() module.exports = __webpack_require__(/*! ./_iter-define */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-define.js")(Array, 'Array', function (iterated, kind) { this._t = toIObject(iterated); // target this._i = 0; // next index this._k = kind; // kind // 22.1.5.2.1 %ArrayIteratorPrototype%.next() }, function () { var O = this._t; var kind = this._k; var index = this._i++; if (!O || index >= O.length) { this._t = undefined; return step(1); } if (kind == 'keys') return step(0, index); if (kind == 'values') return step(0, O[index]); return step(0, [index, O[index]]); }, 'values'); // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) Iterators.Arguments = Iterators.Array; addToUnscopables('keys'); addToUnscopables('values'); addToUnscopables('entries'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.join.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.join.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.13 Array.prototype.join(separator) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js"); var arrayJoin = [].join; // fallback for not array-like strings $export($export.P + $export.F * (__webpack_require__(/*! ./_iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js") != Object || !__webpack_require__(/*! ./_strict-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js")(arrayJoin)), 'Array', { join: function join(separator) { return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.last-index-of.js": /*!*********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.last-index-of.js ***! \*********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js"); var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var $native = [].lastIndexOf; var NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0; $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(/*! ./_strict-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js")($native)), 'Array', { // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex]) lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { // convert -0 to +0 if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0; var O = toIObject(this); var length = toLength(O.length); var index = length - 1; if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1])); if (index < 0) index = length + index; for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0; return -1; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.map.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.map.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $map = __webpack_require__(/*! ./_array-methods */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js")(1); $export($export.P + $export.F * !__webpack_require__(/*! ./_strict-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js")([].map, true), 'Array', { // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg]) map: function map(callbackfn /* , thisArg */) { return $map(this, callbackfn, arguments[1]); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.of.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.of.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var createProperty = __webpack_require__(/*! ./_create-property */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_create-property.js"); // WebKit Array.of isn't generic $export($export.S + $export.F * __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { function F() { /* empty */ } return !(Array.of.call(F) instanceof F); }), 'Array', { // 22.1.2.3 Array.of( ...items) of: function of(/* ...args */) { var index = 0; var aLen = arguments.length; var result = new (typeof this == 'function' ? this : Array)(aLen); while (aLen > index) createProperty(result, index, arguments[index++]); result.length = aLen; return result; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce-right.js": /*!********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce-right.js ***! \********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $reduce = __webpack_require__(/*! ./_array-reduce */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-reduce.js"); $export($export.P + $export.F * !__webpack_require__(/*! ./_strict-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js")([].reduceRight, true), 'Array', { // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue]) reduceRight: function reduceRight(callbackfn /* , initialValue */) { return $reduce(this, callbackfn, arguments.length, arguments[1], true); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $reduce = __webpack_require__(/*! ./_array-reduce */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-reduce.js"); $export($export.P + $export.F * !__webpack_require__(/*! ./_strict-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js")([].reduce, true), 'Array', { // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue]) reduce: function reduce(callbackfn /* , initialValue */) { return $reduce(this, callbackfn, arguments.length, arguments[1], false); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.slice.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.slice.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var html = __webpack_require__(/*! ./_html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_html.js"); var cof = __webpack_require__(/*! ./_cof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js"); var toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-absolute-index.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var arraySlice = [].slice; // fallback for not array-like ES3 strings and DOM objects $export($export.P + $export.F * __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { if (html) arraySlice.call(html); }), 'Array', { slice: function slice(begin, end) { var len = toLength(this.length); var klass = cof(this); end = end === undefined ? len : end; if (klass == 'Array') return arraySlice.call(this, begin, end); var start = toAbsoluteIndex(begin, len); var upTo = toAbsoluteIndex(end, len); var size = toLength(upTo - start); var cloned = new Array(size); var i = 0; for (; i < size; i++) cloned[i] = klass == 'String' ? this.charAt(start + i) : this[start + i]; return cloned; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.some.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.some.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $some = __webpack_require__(/*! ./_array-methods */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js")(3); $export($export.P + $export.F * !__webpack_require__(/*! ./_strict-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js")([].some, true), 'Array', { // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg]) some: function some(callbackfn /* , thisArg */) { return $some(this, callbackfn, arguments[1]); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.sort.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.sort.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); var $sort = [].sort; var test = [1, 2, 3]; $export($export.P + $export.F * (fails(function () { // IE8- test.sort(undefined); }) || !fails(function () { // V8 bug test.sort(null); // Old WebKit }) || !__webpack_require__(/*! ./_strict-method */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js")($sort)), 'Array', { // 22.1.3.25 Array.prototype.sort(comparefn) sort: function sort(comparefn) { return comparefn === undefined ? $sort.call(toObject(this)) : $sort.call(toObject(this), aFunction(comparefn)); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.species.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.species.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ./_set-species */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js")('Array'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.now.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.now.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.3.3.1 / 15.9.4.4 Date.now() var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Date', { now: function () { return new Date().getTime(); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-iso-string.js": /*!********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-iso-string.js ***! \********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString() var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toISOString = __webpack_require__(/*! ./_date-to-iso-string */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-iso-string.js"); // PhantomJS / old WebKit has a broken implementations $export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', { toISOString: toISOString }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-json.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-json.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js"); $export($export.P + $export.F * __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1; }), 'Date', { // eslint-disable-next-line no-unused-vars toJSON: function toJSON(key) { var O = toObject(this); var pv = toPrimitive(O); return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString(); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-primitive.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-primitive.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var TO_PRIMITIVE = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('toPrimitive'); var proto = Date.prototype; if (!(TO_PRIMITIVE in proto)) __webpack_require__(/*! ./_hide */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js")(proto, TO_PRIMITIVE, __webpack_require__(/*! ./_date-to-primitive */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-primitive.js")); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-string.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-string.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var DateProto = Date.prototype; var INVALID_DATE = 'Invalid Date'; var TO_STRING = 'toString'; var $toString = DateProto[TO_STRING]; var getTime = DateProto.getTime; if (new Date(NaN) + '' != INVALID_DATE) { __webpack_require__(/*! ./_redefine */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js")(DateProto, TO_STRING, function toString() { var value = getTime.call(this); // eslint-disable-next-line no-self-compare return value === value ? $toString.call(this) : INVALID_DATE; }); } /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.bind.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.bind.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.P, 'Function', { bind: __webpack_require__(/*! ./_bind */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_bind.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.has-instance.js": /*!***********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.has-instance.js ***! \***********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js"); var HAS_INSTANCE = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('hasInstance'); var FunctionProto = Function.prototype; // 19.2.3.6 Function.prototype[@@hasInstance](V) if (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js").f(FunctionProto, HAS_INSTANCE, { value: function (O) { if (typeof this != 'function' || !isObject(O)) return false; if (!isObject(this.prototype)) return O instanceof this; // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this: while (O = getPrototypeOf(O)) if (this.prototype === O) return true; return false; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.name.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.name.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js").f; var FProto = Function.prototype; var nameRE = /^\s*function ([^ (]*)/; var NAME = 'name'; // 19.2.4.2 name NAME in FProto || __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js") && dP(FProto, NAME, { configurable: true, get: function () { try { return ('' + this).match(nameRE)[1]; } catch (e) { return ''; } } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.map.js": /*!*****************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.map.js ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var strong = __webpack_require__(/*! ./_collection-strong */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-strong.js"); var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_validate-collection.js"); var MAP = 'Map'; // 23.1 Map Objects module.exports = __webpack_require__(/*! ./_collection */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection.js")(MAP, function (get) { return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; }, { // 23.1.3.6 Map.prototype.get(key) get: function get(key) { var entry = strong.getEntry(validate(this, MAP), key); return entry && entry.v; }, // 23.1.3.9 Map.prototype.set(key, value) set: function set(key, value) { return strong.def(validate(this, MAP), key === 0 ? 0 : key, value); } }, strong, true); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.acosh.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.acosh.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.3 Math.acosh(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var log1p = __webpack_require__(/*! ./_math-log1p */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-log1p.js"); var sqrt = Math.sqrt; var $acosh = Math.acosh; $export($export.S + $export.F * !($acosh // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509 && Math.floor($acosh(Number.MAX_VALUE)) == 710 // Tor Browser bug: Math.acosh(Infinity) -> NaN && $acosh(Infinity) == Infinity ), 'Math', { acosh: function acosh(x) { return (x = +x) < 1 ? NaN : x > 94906265.62425156 ? Math.log(x) + Math.LN2 : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1)); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.asinh.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.asinh.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.5 Math.asinh(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $asinh = Math.asinh; function asinh(x) { return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1)); } // Tor Browser bug: Math.asinh(0) -> -0 $export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.atanh.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.atanh.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.7 Math.atanh(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $atanh = Math.atanh; // Tor Browser bug: Math.atanh(-0) -> 0 $export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', { atanh: function atanh(x) { return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cbrt.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cbrt.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.9 Math.cbrt(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var sign = __webpack_require__(/*! ./_math-sign */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-sign.js"); $export($export.S, 'Math', { cbrt: function cbrt(x) { return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.clz32.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.clz32.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.11 Math.clz32(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { clz32: function clz32(x) { return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cosh.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cosh.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.12 Math.cosh(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var exp = Math.exp; $export($export.S, 'Math', { cosh: function cosh(x) { return (exp(x = +x) + exp(-x)) / 2; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.expm1.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.expm1.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.14 Math.expm1(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $expm1 = __webpack_require__(/*! ./_math-expm1 */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-expm1.js"); $export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.fround.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.fround.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.16 Math.fround(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { fround: __webpack_require__(/*! ./_math-fround */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-fround.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.hypot.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.hypot.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.17 Math.hypot([value1[, value2[, … ]]]) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var abs = Math.abs; $export($export.S, 'Math', { hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars var sum = 0; var i = 0; var aLen = arguments.length; var larg = 0; var arg, div; while (i < aLen) { arg = abs(arguments[i++]); if (larg < arg) { div = larg / arg; sum = sum * div * div + 1; larg = arg; } else if (arg > 0) { div = arg / larg; sum += div * div; } else sum += arg; } return larg === Infinity ? Infinity : larg * Math.sqrt(sum); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.imul.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.imul.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.18 Math.imul(x, y) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $imul = Math.imul; // some WebKit versions fails with big numbers, some has wrong arity $export($export.S + $export.F * __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { return $imul(0xffffffff, 5) != -5 || $imul.length != 2; }), 'Math', { imul: function imul(x, y) { var UINT16 = 0xffff; var xn = +x; var yn = +y; var xl = UINT16 & xn; var yl = UINT16 & yn; return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log10.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log10.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.21 Math.log10(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { log10: function log10(x) { return Math.log(x) * Math.LOG10E; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log1p.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log1p.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.20 Math.log1p(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { log1p: __webpack_require__(/*! ./_math-log1p */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-log1p.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log2.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log2.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.22 Math.log2(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { log2: function log2(x) { return Math.log(x) / Math.LN2; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sign.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sign.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.28 Math.sign(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { sign: __webpack_require__(/*! ./_math-sign */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-sign.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sinh.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sinh.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.30 Math.sinh(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var expm1 = __webpack_require__(/*! ./_math-expm1 */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-expm1.js"); var exp = Math.exp; // V8 near Chromium 38 has a problem with very small numbers $export($export.S + $export.F * __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { return !Math.sinh(-2e-17) != -2e-17; }), 'Math', { sinh: function sinh(x) { return Math.abs(x = +x) < 1 ? (expm1(x) - expm1(-x)) / 2 : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.tanh.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.tanh.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.33 Math.tanh(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var expm1 = __webpack_require__(/*! ./_math-expm1 */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-expm1.js"); var exp = Math.exp; $export($export.S, 'Math', { tanh: function tanh(x) { var a = expm1(x = +x); var b = expm1(-x); return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x)); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.trunc.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.trunc.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.34 Math.trunc(x) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { trunc: function trunc(it) { return (it > 0 ? Math.floor : Math.ceil)(it); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.constructor.js": /*!********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.constructor.js ***! \********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var has = __webpack_require__(/*! ./_has */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js"); var cof = __webpack_require__(/*! ./_cof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js"); var inheritIfRequired = __webpack_require__(/*! ./_inherit-if-required */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_inherit-if-required.js"); var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js"); var fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); var gOPN = __webpack_require__(/*! ./_object-gopn */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js").f; var gOPD = __webpack_require__(/*! ./_object-gopd */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js").f; var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js").f; var $trim = __webpack_require__(/*! ./_string-trim */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js").trim; var NUMBER = 'Number'; var $Number = global[NUMBER]; var Base = $Number; var proto = $Number.prototype; // Opera ~12 has broken Object#toString var BROKEN_COF = cof(__webpack_require__(/*! ./_object-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js")(proto)) == NUMBER; var TRIM = 'trim' in String.prototype; // 7.1.3 ToNumber(argument) var toNumber = function (argument) { var it = toPrimitive(argument, false); if (typeof it == 'string' && it.length > 2) { it = TRIM ? it.trim() : $trim(it, 3); var first = it.charCodeAt(0); var third, radix, maxCode; if (first === 43 || first === 45) { third = it.charCodeAt(2); if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix } else if (first === 48) { switch (it.charCodeAt(1)) { case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i default: return +it; } for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) { code = digits.charCodeAt(i); // parseInt parses a string to a first unavailable symbol // but ToNumber should return NaN if a string contains unavailable symbols if (code < 48 || code > maxCode) return NaN; } return parseInt(digits, radix); } } return +it; }; if (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) { $Number = function Number(value) { var it = arguments.length < 1 ? 0 : value; var that = this; return that instanceof $Number // check on 1..constructor(foo) case && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER) ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it); }; for (var keys = __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js") ? gOPN(Base) : ( // ES3: 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + // ES6 (in case, if modules with ES6 Number statics required before): 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' + 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger' ).split(','), j = 0, key; keys.length > j; j++) { if (has(Base, key = keys[j]) && !has($Number, key)) { dP($Number, key, gOPD(Base, key)); } } $Number.prototype = proto; proto.constructor = $Number; __webpack_require__(/*! ./_redefine */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js")(global, NUMBER, $Number); } /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.epsilon.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.epsilon.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.1 Number.EPSILON var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Number', { EPSILON: Math.pow(2, -52) }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-finite.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-finite.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.2 Number.isFinite(number) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var _isFinite = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js").isFinite; $export($export.S, 'Number', { isFinite: function isFinite(it) { return typeof it == 'number' && _isFinite(it); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-integer.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-integer.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.3 Number.isInteger(number) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Number', { isInteger: __webpack_require__(/*! ./_is-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-integer.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-nan.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-nan.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.4 Number.isNaN(number) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Number', { isNaN: function isNaN(number) { // eslint-disable-next-line no-self-compare return number != number; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-safe-integer.js": /*!************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-safe-integer.js ***! \************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.5 Number.isSafeInteger(number) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var isInteger = __webpack_require__(/*! ./_is-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-integer.js"); var abs = Math.abs; $export($export.S, 'Number', { isSafeInteger: function isSafeInteger(number) { return isInteger(number) && abs(number) <= 0x1fffffffffffff; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.max-safe-integer.js": /*!*************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.max-safe-integer.js ***! \*************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.6 Number.MAX_SAFE_INTEGER var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.min-safe-integer.js": /*!*************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.min-safe-integer.js ***! \*************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.10 Number.MIN_SAFE_INTEGER var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-float.js": /*!********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-float.js ***! \********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $parseFloat = __webpack_require__(/*! ./_parse-float */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_parse-float.js"); // 20.1.2.12 Number.parseFloat(string) $export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-int.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-int.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $parseInt = __webpack_require__(/*! ./_parse-int */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_parse-int.js"); // 20.1.2.13 Number.parseInt(string, radix) $export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-fixed.js": /*!*****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-fixed.js ***! \*****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js"); var aNumberValue = __webpack_require__(/*! ./_a-number-value */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-number-value.js"); var repeat = __webpack_require__(/*! ./_string-repeat */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-repeat.js"); var $toFixed = 1.0.toFixed; var floor = Math.floor; var data = [0, 0, 0, 0, 0, 0]; var ERROR = 'Number.toFixed: incorrect invocation!'; var ZERO = '0'; var multiply = function (n, c) { var i = -1; var c2 = c; while (++i < 6) { c2 += n * data[i]; data[i] = c2 % 1e7; c2 = floor(c2 / 1e7); } }; var divide = function (n) { var i = 6; var c = 0; while (--i >= 0) { c += data[i]; data[i] = floor(c / n); c = (c % n) * 1e7; } }; var numToString = function () { var i = 6; var s = ''; while (--i >= 0) { if (s !== '' || i === 0 || data[i] !== 0) { var t = String(data[i]); s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t; } } return s; }; var pow = function (x, n, acc) { return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc); }; var log = function (x) { var n = 0; var x2 = x; while (x2 >= 4096) { n += 12; x2 /= 4096; } while (x2 >= 2) { n += 1; x2 /= 2; } return n; }; $export($export.P + $export.F * (!!$toFixed && ( 0.00008.toFixed(3) !== '0.000' || 0.9.toFixed(0) !== '1' || 1.255.toFixed(2) !== '1.25' || 1000000000000000128.0.toFixed(0) !== '1000000000000000128' ) || !__webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { // V8 ~ Android 4.3- $toFixed.call({}); })), 'Number', { toFixed: function toFixed(fractionDigits) { var x = aNumberValue(this, ERROR); var f = toInteger(fractionDigits); var s = ''; var m = ZERO; var e, z, j, k; if (f < 0 || f > 20) throw RangeError(ERROR); // eslint-disable-next-line no-self-compare if (x != x) return 'NaN'; if (x <= -1e21 || x >= 1e21) return String(x); if (x < 0) { s = '-'; x = -x; } if (x > 1e-21) { e = log(x * pow(2, 69, 1)) - 69; z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1); z *= 0x10000000000000; e = 52 - e; if (e > 0) { multiply(0, z); j = f; while (j >= 7) { multiply(1e7, 0); j -= 7; } multiply(pow(10, j, 1), 0); j = e - 1; while (j >= 23) { divide(1 << 23); j -= 23; } divide(1 << j); multiply(1, 1); divide(2); m = numToString(); } else { multiply(0, z); multiply(1 << -e, 0); m = numToString() + repeat.call(ZERO, f); } } if (f > 0) { k = m.length; m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f)); } else { m = s + m; } return m; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-precision.js": /*!*********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-precision.js ***! \*********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); var aNumberValue = __webpack_require__(/*! ./_a-number-value */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-number-value.js"); var $toPrecision = 1.0.toPrecision; $export($export.P + $export.F * ($fails(function () { // IE7- return $toPrecision.call(1, undefined) !== '1'; }) || !$fails(function () { // V8 ~ Android 4.3- $toPrecision.call({}); })), 'Number', { toPrecision: function toPrecision(precision) { var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!'); return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.assign.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.assign.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.3.1 Object.assign(target, source) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S + $export.F, 'Object', { assign: __webpack_require__(/*! ./_object-assign */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-assign.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.create.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.create.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) $export($export.S, 'Object', { create: __webpack_require__(/*! ./_object-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-properties.js": /*!**************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-properties.js ***! \**************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); // 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties) $export($export.S + $export.F * !__webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js"), 'Object', { defineProperties: __webpack_require__(/*! ./_object-dps */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dps.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-property.js": /*!************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-property.js ***! \************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) $export($export.S + $export.F * !__webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js"), 'Object', { defineProperty: __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js").f }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.freeze.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.freeze.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.5 Object.freeze(O) var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var meta = __webpack_require__(/*! ./_meta */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js").onFreeze; __webpack_require__(/*! ./_object-sap */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js")('freeze', function ($freeze) { return function freeze(it) { return $freeze && isObject(it) ? $freeze(meta(it)) : it; }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-descriptor.js": /*!************************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-descriptor.js ***! \************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js"); var $getOwnPropertyDescriptor = __webpack_require__(/*! ./_object-gopd */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js").f; __webpack_require__(/*! ./_object-sap */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js")('getOwnPropertyDescriptor', function () { return function getOwnPropertyDescriptor(it, key) { return $getOwnPropertyDescriptor(toIObject(it), key); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-names.js": /*!*******************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-names.js ***! \*******************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.7 Object.getOwnPropertyNames(O) __webpack_require__(/*! ./_object-sap */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js")('getOwnPropertyNames', function () { return __webpack_require__(/*! ./_object-gopn-ext */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn-ext.js").f; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-prototype-of.js": /*!*************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-prototype-of.js ***! \*************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.9 Object.getPrototypeOf(O) var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var $getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js"); __webpack_require__(/*! ./_object-sap */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js")('getPrototypeOf', function () { return function getPrototypeOf(it) { return $getPrototypeOf(toObject(it)); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-extensible.js": /*!**********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-extensible.js ***! \**********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.11 Object.isExtensible(O) var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); __webpack_require__(/*! ./_object-sap */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js")('isExtensible', function ($isExtensible) { return function isExtensible(it) { return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false; }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-frozen.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-frozen.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.12 Object.isFrozen(O) var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); __webpack_require__(/*! ./_object-sap */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js")('isFrozen', function ($isFrozen) { return function isFrozen(it) { return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true; }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-sealed.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-sealed.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.13 Object.isSealed(O) var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); __webpack_require__(/*! ./_object-sap */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js")('isSealed', function ($isSealed) { return function isSealed(it) { return isObject(it) ? $isSealed ? $isSealed(it) : false : true; }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.3.10 Object.is(value1, value2) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Object', { is: __webpack_require__(/*! ./_same-value */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_same-value.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.keys.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.keys.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.14 Object.keys(O) var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var $keys = __webpack_require__(/*! ./_object-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js"); __webpack_require__(/*! ./_object-sap */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js")('keys', function () { return function keys(it) { return $keys(toObject(it)); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.prevent-extensions.js": /*!***************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.prevent-extensions.js ***! \***************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.15 Object.preventExtensions(O) var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var meta = __webpack_require__(/*! ./_meta */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js").onFreeze; __webpack_require__(/*! ./_object-sap */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js")('preventExtensions', function ($preventExtensions) { return function preventExtensions(it) { return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it; }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.seal.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.seal.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.17 Object.seal(O) var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var meta = __webpack_require__(/*! ./_meta */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js").onFreeze; __webpack_require__(/*! ./_object-sap */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js")('seal', function ($seal) { return function seal(it) { return $seal && isObject(it) ? $seal(meta(it)) : it; }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.set-prototype-of.js": /*!*************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.set-prototype-of.js ***! \*************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 19.1.3.19 Object.setPrototypeOf(O, proto) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Object', { setPrototypeOf: __webpack_require__(/*! ./_set-proto */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-proto.js").set }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.to-string.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.to-string.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 19.1.3.6 Object.prototype.toString() var classof = __webpack_require__(/*! ./_classof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js"); var test = {}; test[__webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('toStringTag')] = 'z'; if (test + '' != '[object z]') { __webpack_require__(/*! ./_redefine */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js")(Object.prototype, 'toString', function toString() { return '[object ' + classof(this) + ']'; }, true); } /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-float.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-float.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $parseFloat = __webpack_require__(/*! ./_parse-float */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_parse-float.js"); // 18.2.4 parseFloat(string) $export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-int.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-int.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $parseInt = __webpack_require__(/*! ./_parse-int */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_parse-int.js"); // 18.2.5 parseInt(string, radix) $export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.promise.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.promise.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var LIBRARY = __webpack_require__(/*! ./_library */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_library.js"); var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js"); var classof = __webpack_require__(/*! ./_classof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js"); var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); var anInstance = __webpack_require__(/*! ./_an-instance */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js"); var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js"); var speciesConstructor = __webpack_require__(/*! ./_species-constructor */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js"); var task = __webpack_require__(/*! ./_task */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_task.js").set; var microtask = __webpack_require__(/*! ./_microtask */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_microtask.js")(); var newPromiseCapabilityModule = __webpack_require__(/*! ./_new-promise-capability */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_new-promise-capability.js"); var perform = __webpack_require__(/*! ./_perform */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_perform.js"); var userAgent = __webpack_require__(/*! ./_user-agent */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_user-agent.js"); var promiseResolve = __webpack_require__(/*! ./_promise-resolve */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_promise-resolve.js"); var PROMISE = 'Promise'; var TypeError = global.TypeError; var process = global.process; var versions = process && process.versions; var v8 = versions && versions.v8 || ''; var $Promise = global[PROMISE]; var isNode = classof(process) == 'process'; var empty = function () { /* empty */ }; var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper; var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f; var USE_NATIVE = !!function () { try { // correct subclassing with @@species support var promise = $Promise.resolve(1); var FakePromise = (promise.constructor = {})[__webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('species')] = function (exec) { exec(empty, empty); }; // unhandled rejections tracking support, NodeJS Promise without it fails @@species test return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 // we can't detect it synchronously, so just check versions && v8.indexOf('6.6') !== 0 && userAgent.indexOf('Chrome/66') === -1; } catch (e) { /* empty */ } }(); // helpers var isThenable = function (it) { var then; return isObject(it) && typeof (then = it.then) == 'function' ? then : false; }; var notify = function (promise, isReject) { if (promise._n) return; promise._n = true; var chain = promise._c; microtask(function () { var value = promise._v; var ok = promise._s == 1; var i = 0; var run = function (reaction) { var handler = ok ? reaction.ok : reaction.fail; var resolve = reaction.resolve; var reject = reaction.reject; var domain = reaction.domain; var result, then, exited; try { if (handler) { if (!ok) { if (promise._h == 2) onHandleUnhandled(promise); promise._h = 1; } if (handler === true) result = value; else { if (domain) domain.enter(); result = handler(value); // may throw if (domain) { domain.exit(); exited = true; } } if (result === reaction.promise) { reject(TypeError('Promise-chain cycle')); } else if (then = isThenable(result)) { then.call(result, resolve, reject); } else resolve(result); } else reject(value); } catch (e) { if (domain && !exited) domain.exit(); reject(e); } }; while (chain.length > i) run(chain[i++]); // variable length - can't use forEach promise._c = []; promise._n = false; if (isReject && !promise._h) onUnhandled(promise); }); }; var onUnhandled = function (promise) { task.call(global, function () { var value = promise._v; var unhandled = isUnhandled(promise); var result, handler, console; if (unhandled) { result = perform(function () { if (isNode) { process.emit('unhandledRejection', value, promise); } else if (handler = global.onunhandledrejection) { handler({ promise: promise, reason: value }); } else if ((console = global.console) && console.error) { console.error('Unhandled promise rejection', value); } }); // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should promise._h = isNode || isUnhandled(promise) ? 2 : 1; } promise._a = undefined; if (unhandled && result.e) throw result.v; }); }; var isUnhandled = function (promise) { return promise._h !== 1 && (promise._a || promise._c).length === 0; }; var onHandleUnhandled = function (promise) { task.call(global, function () { var handler; if (isNode) { process.emit('rejectionHandled', promise); } else if (handler = global.onrejectionhandled) { handler({ promise: promise, reason: promise._v }); } }); }; var $reject = function (value) { var promise = this; if (promise._d) return; promise._d = true; promise = promise._w || promise; // unwrap promise._v = value; promise._s = 2; if (!promise._a) promise._a = promise._c.slice(); notify(promise, true); }; var $resolve = function (value) { var promise = this; var then; if (promise._d) return; promise._d = true; promise = promise._w || promise; // unwrap try { if (promise === value) throw TypeError("Promise can't be resolved itself"); if (then = isThenable(value)) { microtask(function () { var wrapper = { _w: promise, _d: false }; // wrap try { then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1)); } catch (e) { $reject.call(wrapper, e); } }); } else { promise._v = value; promise._s = 1; notify(promise, false); } } catch (e) { $reject.call({ _w: promise, _d: false }, e); // wrap } }; // constructor polyfill if (!USE_NATIVE) { // 25.4.3.1 Promise(executor) $Promise = function Promise(executor) { anInstance(this, $Promise, PROMISE, '_h'); aFunction(executor); Internal.call(this); try { executor(ctx($resolve, this, 1), ctx($reject, this, 1)); } catch (err) { $reject.call(this, err); } }; // eslint-disable-next-line no-unused-vars Internal = function Promise(executor) { this._c = []; // <- awaiting reactions this._a = undefined; // <- checked in isUnhandled reactions this._s = 0; // <- state this._d = false; // <- done this._v = undefined; // <- value this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled this._n = false; // <- notify }; Internal.prototype = __webpack_require__(/*! ./_redefine-all */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js")($Promise.prototype, { // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected) then: function then(onFulfilled, onRejected) { var reaction = newPromiseCapability(speciesConstructor(this, $Promise)); reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; reaction.fail = typeof onRejected == 'function' && onRejected; reaction.domain = isNode ? process.domain : undefined; this._c.push(reaction); if (this._a) this._a.push(reaction); if (this._s) notify(this, false); return reaction.promise; }, // 25.4.5.1 Promise.prototype.catch(onRejected) 'catch': function (onRejected) { return this.then(undefined, onRejected); } }); OwnPromiseCapability = function () { var promise = new Internal(); this.promise = promise; this.resolve = ctx($resolve, promise, 1); this.reject = ctx($reject, promise, 1); }; newPromiseCapabilityModule.f = newPromiseCapability = function (C) { return C === $Promise || C === Wrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C); }; } $export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise }); __webpack_require__(/*! ./_set-to-string-tag */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js")($Promise, PROMISE); __webpack_require__(/*! ./_set-species */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js")(PROMISE); Wrapper = __webpack_require__(/*! ./_core */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js")[PROMISE]; // statics $export($export.S + $export.F * !USE_NATIVE, PROMISE, { // 25.4.4.5 Promise.reject(r) reject: function reject(r) { var capability = newPromiseCapability(this); var $$reject = capability.reject; $$reject(r); return capability.promise; } }); $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, { // 25.4.4.6 Promise.resolve(x) resolve: function resolve(x) { return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x); } }); $export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(/*! ./_iter-detect */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-detect.js")(function (iter) { $Promise.all(iter)['catch'](empty); })), PROMISE, { // 25.4.4.1 Promise.all(iterable) all: function all(iterable) { var C = this; var capability = newPromiseCapability(C); var resolve = capability.resolve; var reject = capability.reject; var result = perform(function () { var values = []; var index = 0; var remaining = 1; forOf(iterable, false, function (promise) { var $index = index++; var alreadyCalled = false; values.push(undefined); remaining++; C.resolve(promise).then(function (value) { if (alreadyCalled) return; alreadyCalled = true; values[$index] = value; --remaining || resolve(values); }, reject); }); --remaining || resolve(values); }); if (result.e) reject(result.v); return capability.promise; }, // 25.4.4.4 Promise.race(iterable) race: function race(iterable) { var C = this; var capability = newPromiseCapability(C); var reject = capability.reject; var result = perform(function () { forOf(iterable, false, function (promise) { C.resolve(promise).then(capability.resolve, reject); }); }); if (result.e) reject(result.v); return capability.promise; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.apply.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.apply.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 26.1.1 Reflect.apply(target, thisArgument, argumentsList) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var rApply = (__webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js").Reflect || {}).apply; var fApply = Function.apply; // MS Edge argumentsList argument is optional $export($export.S + $export.F * !__webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { rApply(function () { /* empty */ }); }), 'Reflect', { apply: function apply(target, thisArgument, argumentsList) { var T = aFunction(target); var L = anObject(argumentsList); return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.construct.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.construct.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 26.1.2 Reflect.construct(target, argumentsList [, newTarget]) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var create = __webpack_require__(/*! ./_object-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js"); var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); var bind = __webpack_require__(/*! ./_bind */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_bind.js"); var rConstruct = (__webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js").Reflect || {}).construct; // MS Edge supports only 2 arguments and argumentsList argument is optional // FF Nightly sets third argument as `new.target`, but does not create `this` from it var NEW_TARGET_BUG = fails(function () { function F() { /* empty */ } return !(rConstruct(function () { /* empty */ }, [], F) instanceof F); }); var ARGS_BUG = !fails(function () { rConstruct(function () { /* empty */ }); }); $export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', { construct: function construct(Target, args /* , newTarget */) { aFunction(Target); anObject(args); var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]); if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget); if (Target == newTarget) { // w/o altered newTarget, optimization for 0-4 arguments switch (args.length) { case 0: return new Target(); case 1: return new Target(args[0]); case 2: return new Target(args[0], args[1]); case 3: return new Target(args[0], args[1], args[2]); case 4: return new Target(args[0], args[1], args[2], args[3]); } // w/o altered newTarget, lot of arguments case var $args = [null]; $args.push.apply($args, args); return new (bind.apply(Target, $args))(); } // with altered newTarget, not support built-in constructors var proto = newTarget.prototype; var instance = create(isObject(proto) ? proto : Object.prototype); var result = Function.apply.call(Target, instance, args); return isObject(result) ? result : instance; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.define-property.js": /*!*************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.define-property.js ***! \*************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 26.1.3 Reflect.defineProperty(target, propertyKey, attributes) var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js"); var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js"); // MS Edge has broken Reflect.defineProperty - throwing instead of returning false $export($export.S + $export.F * __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { // eslint-disable-next-line no-undef Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 }); }), 'Reflect', { defineProperty: function defineProperty(target, propertyKey, attributes) { anObject(target); propertyKey = toPrimitive(propertyKey, true); anObject(attributes); try { dP.f(target, propertyKey, attributes); return true; } catch (e) { return false; } } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.delete-property.js": /*!*************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.delete-property.js ***! \*************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 26.1.4 Reflect.deleteProperty(target, propertyKey) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var gOPD = __webpack_require__(/*! ./_object-gopd */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js").f; var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); $export($export.S, 'Reflect', { deleteProperty: function deleteProperty(target, propertyKey) { var desc = gOPD(anObject(target), propertyKey); return desc && !desc.configurable ? false : delete target[propertyKey]; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.enumerate.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.enumerate.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 26.1.5 Reflect.enumerate(target) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var Enumerate = function (iterated) { this._t = anObject(iterated); // target this._i = 0; // next index var keys = this._k = []; // keys var key; for (key in iterated) keys.push(key); }; __webpack_require__(/*! ./_iter-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-create.js")(Enumerate, 'Object', function () { var that = this; var keys = that._k; var key; do { if (that._i >= keys.length) return { value: undefined, done: true }; } while (!((key = keys[that._i++]) in that._t)); return { value: key, done: false }; }); $export($export.S, 'Reflect', { enumerate: function enumerate(target) { return new Enumerate(target); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js": /*!*************************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js ***! \*************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey) var gOPD = __webpack_require__(/*! ./_object-gopd */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js"); var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); $export($export.S, 'Reflect', { getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) { return gOPD.f(anObject(target), propertyKey); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-prototype-of.js": /*!**************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-prototype-of.js ***! \**************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 26.1.8 Reflect.getPrototypeOf(target) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var getProto = __webpack_require__(/*! ./_object-gpo */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); $export($export.S, 'Reflect', { getPrototypeOf: function getPrototypeOf(target) { return getProto(anObject(target)); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 26.1.6 Reflect.get(target, propertyKey [, receiver]) var gOPD = __webpack_require__(/*! ./_object-gopd */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js"); var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js"); var has = __webpack_require__(/*! ./_has */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js"); var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); function get(target, propertyKey /* , receiver */) { var receiver = arguments.length < 3 ? target : arguments[2]; var desc, proto; if (anObject(target) === receiver) return target[propertyKey]; if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value') ? desc.value : desc.get !== undefined ? desc.get.call(receiver) : undefined; if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver); } $export($export.S, 'Reflect', { get: get }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.has.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.has.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 26.1.9 Reflect.has(target, propertyKey) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Reflect', { has: function has(target, propertyKey) { return propertyKey in target; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.is-extensible.js": /*!***********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.is-extensible.js ***! \***********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 26.1.10 Reflect.isExtensible(target) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var $isExtensible = Object.isExtensible; $export($export.S, 'Reflect', { isExtensible: function isExtensible(target) { anObject(target); return $isExtensible ? $isExtensible(target) : true; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.own-keys.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.own-keys.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 26.1.11 Reflect.ownKeys(target) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Reflect', { ownKeys: __webpack_require__(/*! ./_own-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_own-keys.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.prevent-extensions.js": /*!****************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.prevent-extensions.js ***! \****************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 26.1.12 Reflect.preventExtensions(target) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var $preventExtensions = Object.preventExtensions; $export($export.S, 'Reflect', { preventExtensions: function preventExtensions(target) { anObject(target); try { if ($preventExtensions) $preventExtensions(target); return true; } catch (e) { return false; } } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set-prototype-of.js": /*!**************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set-prototype-of.js ***! \**************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 26.1.14 Reflect.setPrototypeOf(target, proto) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var setProto = __webpack_require__(/*! ./_set-proto */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-proto.js"); if (setProto) $export($export.S, 'Reflect', { setPrototypeOf: function setPrototypeOf(target, proto) { setProto.check(target, proto); try { setProto.set(target, proto); return true; } catch (e) { return false; } } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 26.1.13 Reflect.set(target, propertyKey, V [, receiver]) var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js"); var gOPD = __webpack_require__(/*! ./_object-gopd */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js"); var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js"); var has = __webpack_require__(/*! ./_has */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js"); var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var createDesc = __webpack_require__(/*! ./_property-desc */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); function set(target, propertyKey, V /* , receiver */) { var receiver = arguments.length < 4 ? target : arguments[3]; var ownDesc = gOPD.f(anObject(target), propertyKey); var existingDescriptor, proto; if (!ownDesc) { if (isObject(proto = getPrototypeOf(target))) { return set(proto, propertyKey, V, receiver); } ownDesc = createDesc(0); } if (has(ownDesc, 'value')) { if (ownDesc.writable === false || !isObject(receiver)) return false; if (existingDescriptor = gOPD.f(receiver, propertyKey)) { if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false; existingDescriptor.value = V; dP.f(receiver, propertyKey, existingDescriptor); } else dP.f(receiver, propertyKey, createDesc(0, V)); return true; } return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true); } $export($export.S, 'Reflect', { set: set }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.constructor.js": /*!********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.constructor.js ***! \********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var inheritIfRequired = __webpack_require__(/*! ./_inherit-if-required */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_inherit-if-required.js"); var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js").f; var gOPN = __webpack_require__(/*! ./_object-gopn */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js").f; var isRegExp = __webpack_require__(/*! ./_is-regexp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-regexp.js"); var $flags = __webpack_require__(/*! ./_flags */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js"); var $RegExp = global.RegExp; var Base = $RegExp; var proto = $RegExp.prototype; var re1 = /a/g; var re2 = /a/g; // "new" creates a new object, old webkit buggy here var CORRECT_NEW = new $RegExp(re1) !== re1; if (__webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js") && (!CORRECT_NEW || __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { re2[__webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('match')] = false; // RegExp constructor can alter flags and IsRegExp works correct with @@match return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i'; }))) { $RegExp = function RegExp(p, f) { var tiRE = this instanceof $RegExp; var piRE = isRegExp(p); var fiU = f === undefined; return !tiRE && piRE && p.constructor === $RegExp && fiU ? p : inheritIfRequired(CORRECT_NEW ? new Base(piRE && !fiU ? p.source : p, f) : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f) , tiRE ? this : proto, $RegExp); }; var proxy = function (key) { key in $RegExp || dP($RegExp, key, { configurable: true, get: function () { return Base[key]; }, set: function (it) { Base[key] = it; } }); }; for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]); proto.constructor = $RegExp; $RegExp.prototype = proto; __webpack_require__(/*! ./_redefine */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js")(global, 'RegExp', $RegExp); } __webpack_require__(/*! ./_set-species */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js")('RegExp'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.exec.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.exec.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var regexpExec = __webpack_require__(/*! ./_regexp-exec */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_regexp-exec.js"); __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js")({ target: 'RegExp', proto: true, forced: regexpExec !== /./.exec }, { exec: regexpExec }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.flags.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.flags.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // 21.2.5.3 get RegExp.prototype.flags() if (__webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js") && /./g.flags != 'g') __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js").f(RegExp.prototype, 'flags', { configurable: true, get: __webpack_require__(/*! ./_flags */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.match.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.match.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_advance-string-index.js"); var regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_regexp-exec-abstract.js"); // @@match logic __webpack_require__(/*! ./_fix-re-wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fix-re-wks.js")('match', 1, function (defined, MATCH, $match, maybeCallNative) { return [ // `String.prototype.match` method // https://tc39.github.io/ecma262/#sec-string.prototype.match function match(regexp) { var O = defined(this); var fn = regexp == undefined ? undefined : regexp[MATCH]; return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O)); }, // `RegExp.prototype[@@match]` method // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match function (regexp) { var res = maybeCallNative($match, regexp, this); if (res.done) return res.value; var rx = anObject(regexp); var S = String(this); if (!rx.global) return regExpExec(rx, S); var fullUnicode = rx.unicode; rx.lastIndex = 0; var A = []; var n = 0; var result; while ((result = regExpExec(rx, S)) !== null) { var matchStr = String(result[0]); A[n] = matchStr; if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); n++; } return n === 0 ? null : A; } ]; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.replace.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.replace.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js"); var advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_advance-string-index.js"); var regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_regexp-exec-abstract.js"); var max = Math.max; var min = Math.min; var floor = Math.floor; var SUBSTITUTION_SYMBOLS = /\$([$&`']|\d\d?|<[^>]*>)/g; var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&`']|\d\d?)/g; var maybeToString = function (it) { return it === undefined ? it : String(it); }; // @@replace logic __webpack_require__(/*! ./_fix-re-wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fix-re-wks.js")('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) { return [ // `String.prototype.replace` method // https://tc39.github.io/ecma262/#sec-string.prototype.replace function replace(searchValue, replaceValue) { var O = defined(this); var fn = searchValue == undefined ? undefined : searchValue[REPLACE]; return fn !== undefined ? fn.call(searchValue, O, replaceValue) : $replace.call(String(O), searchValue, replaceValue); }, // `RegExp.prototype[@@replace]` method // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace function (regexp, replaceValue) { var res = maybeCallNative($replace, regexp, this, replaceValue); if (res.done) return res.value; var rx = anObject(regexp); var S = String(this); var functionalReplace = typeof replaceValue === 'function'; if (!functionalReplace) replaceValue = String(replaceValue); var global = rx.global; if (global) { var fullUnicode = rx.unicode; rx.lastIndex = 0; } var results = []; while (true) { var result = regExpExec(rx, S); if (result === null) break; results.push(result); if (!global) break; var matchStr = String(result[0]); if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); } var accumulatedResult = ''; var nextSourcePosition = 0; for (var i = 0; i < results.length; i++) { result = results[i]; var matched = String(result[0]); var position = max(min(toInteger(result.index), S.length), 0); var captures = []; // NOTE: This is equivalent to // captures = result.slice(1).map(maybeToString) // but for some reason `nativeSlice.call(result, 1, result.length)` (called in // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j])); var namedCaptures = result.groups; if (functionalReplace) { var replacerArgs = [matched].concat(captures, position, S); if (namedCaptures !== undefined) replacerArgs.push(namedCaptures); var replacement = String(replaceValue.apply(undefined, replacerArgs)); } else { replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); } if (position >= nextSourcePosition) { accumulatedResult += S.slice(nextSourcePosition, position) + replacement; nextSourcePosition = position + matched.length; } } return accumulatedResult + S.slice(nextSourcePosition); } ]; // https://tc39.github.io/ecma262/#sec-getsubstitution function getSubstitution(matched, str, position, captures, namedCaptures, replacement) { var tailPos = position + matched.length; var m = captures.length; var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; if (namedCaptures !== undefined) { namedCaptures = toObject(namedCaptures); symbols = SUBSTITUTION_SYMBOLS; } return $replace.call(replacement, symbols, function (match, ch) { var capture; switch (ch.charAt(0)) { case '$': return '$'; case '&': return matched; case '`': return str.slice(0, position); case "'": return str.slice(tailPos); case '<': capture = namedCaptures[ch.slice(1, -1)]; break; default: // \d\d? var n = +ch; if (n === 0) return match; if (n > m) { var f = floor(n / 10); if (f === 0) return match; if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); return match; } capture = captures[n - 1]; } return capture === undefined ? '' : capture; }); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.search.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.search.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var sameValue = __webpack_require__(/*! ./_same-value */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_same-value.js"); var regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_regexp-exec-abstract.js"); // @@search logic __webpack_require__(/*! ./_fix-re-wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fix-re-wks.js")('search', 1, function (defined, SEARCH, $search, maybeCallNative) { return [ // `String.prototype.search` method // https://tc39.github.io/ecma262/#sec-string.prototype.search function search(regexp) { var O = defined(this); var fn = regexp == undefined ? undefined : regexp[SEARCH]; return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O)); }, // `RegExp.prototype[@@search]` method // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search function (regexp) { var res = maybeCallNative($search, regexp, this); if (res.done) return res.value; var rx = anObject(regexp); var S = String(this); var previousLastIndex = rx.lastIndex; if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0; var result = regExpExec(rx, S); if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex; return result === null ? -1 : result.index; } ]; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.split.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.split.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var isRegExp = __webpack_require__(/*! ./_is-regexp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-regexp.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var speciesConstructor = __webpack_require__(/*! ./_species-constructor */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js"); var advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_advance-string-index.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var callRegExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_regexp-exec-abstract.js"); var regexpExec = __webpack_require__(/*! ./_regexp-exec */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_regexp-exec.js"); var fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); var $min = Math.min; var $push = [].push; var $SPLIT = 'split'; var LENGTH = 'length'; var LAST_INDEX = 'lastIndex'; var MAX_UINT32 = 0xffffffff; // babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError var SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); }); // @@split logic __webpack_require__(/*! ./_fix-re-wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fix-re-wks.js")('split', 2, function (defined, SPLIT, $split, maybeCallNative) { var internalSplit; if ( 'abbc'[$SPLIT](/(b)*/)[1] == 'c' || 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 || 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 || '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 || '.'[$SPLIT](/()()/)[LENGTH] > 1 || ''[$SPLIT](/.?/)[LENGTH] ) { // based on es5-shim implementation, need to rework it internalSplit = function (separator, limit) { var string = String(this); if (separator === undefined && limit === 0) return []; // If `separator` is not a regex, use native split if (!isRegExp(separator)) return $split.call(string, separator, limit); var output = []; var flags = (separator.ignoreCase ? 'i' : '') + (separator.multiline ? 'm' : '') + (separator.unicode ? 'u' : '') + (separator.sticky ? 'y' : ''); var lastLastIndex = 0; var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0; // Make `global` and avoid `lastIndex` issues by working with a copy var separatorCopy = new RegExp(separator.source, flags + 'g'); var match, lastIndex, lastLength; while (match = regexpExec.call(separatorCopy, string)) { lastIndex = separatorCopy[LAST_INDEX]; if (lastIndex > lastLastIndex) { output.push(string.slice(lastLastIndex, match.index)); if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1)); lastLength = match[0][LENGTH]; lastLastIndex = lastIndex; if (output[LENGTH] >= splitLimit) break; } if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop } if (lastLastIndex === string[LENGTH]) { if (lastLength || !separatorCopy.test('')) output.push(''); } else output.push(string.slice(lastLastIndex)); return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output; }; // Chakra, V8 } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) { internalSplit = function (separator, limit) { return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit); }; } else { internalSplit = $split; } return [ // `String.prototype.split` method // https://tc39.github.io/ecma262/#sec-string.prototype.split function split(separator, limit) { var O = defined(this); var splitter = separator == undefined ? undefined : separator[SPLIT]; return splitter !== undefined ? splitter.call(separator, O, limit) : internalSplit.call(String(O), separator, limit); }, // `RegExp.prototype[@@split]` method // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split // // NOTE: This cannot be properly polyfilled in engines that don't support // the 'y' flag. function (regexp, limit) { var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split); if (res.done) return res.value; var rx = anObject(regexp); var S = String(this); var C = speciesConstructor(rx, RegExp); var unicodeMatching = rx.unicode; var flags = (rx.ignoreCase ? 'i' : '') + (rx.multiline ? 'm' : '') + (rx.unicode ? 'u' : '') + (SUPPORTS_Y ? 'y' : 'g'); // ^(? + rx + ) is needed, in combination with some S slicing, to // simulate the 'y' flag. var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags); var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; if (lim === 0) return []; if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : []; var p = 0; var q = 0; var A = []; while (q < S.length) { splitter.lastIndex = SUPPORTS_Y ? q : 0; var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q)); var e; if ( z === null || (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p ) { q = advanceStringIndex(S, q, unicodeMatching); } else { A.push(S.slice(p, q)); if (A.length === lim) return A; for (var i = 1; i <= z.length - 1; i++) { A.push(z[i]); if (A.length === lim) return A; } q = p = e; } } A.push(S.slice(p)); return A; } ]; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.to-string.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.to-string.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; __webpack_require__(/*! ./es6.regexp.flags */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.flags.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var $flags = __webpack_require__(/*! ./_flags */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js"); var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js"); var TO_STRING = 'toString'; var $toString = /./[TO_STRING]; var define = function (fn) { __webpack_require__(/*! ./_redefine */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js")(RegExp.prototype, TO_STRING, fn, true); }; // 21.2.5.14 RegExp.prototype.toString() if (__webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) { define(function toString() { var R = anObject(this); return '/'.concat(R.source, '/', 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined); }); // FF44- RegExp#toString has a wrong name } else if ($toString.name != TO_STRING) { define(function toString() { return $toString.call(this); }); } /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.set.js": /*!*****************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.set.js ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var strong = __webpack_require__(/*! ./_collection-strong */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-strong.js"); var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_validate-collection.js"); var SET = 'Set'; // 23.2 Set Objects module.exports = __webpack_require__(/*! ./_collection */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection.js")(SET, function (get) { return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; }, { // 23.2.3.1 Set.prototype.add(value) add: function add(value) { return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value); } }, strong); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.anchor.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.anchor.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // B.2.3.2 String.prototype.anchor(name) __webpack_require__(/*! ./_string-html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js")('anchor', function (createHTML) { return function anchor(name) { return createHTML(this, 'a', 'name', name); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.big.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.big.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // B.2.3.3 String.prototype.big() __webpack_require__(/*! ./_string-html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js")('big', function (createHTML) { return function big() { return createHTML(this, 'big', '', ''); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.blink.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.blink.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // B.2.3.4 String.prototype.blink() __webpack_require__(/*! ./_string-html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js")('blink', function (createHTML) { return function blink() { return createHTML(this, 'blink', '', ''); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.bold.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.bold.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // B.2.3.5 String.prototype.bold() __webpack_require__(/*! ./_string-html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js")('bold', function (createHTML) { return function bold() { return createHTML(this, 'b', '', ''); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.code-point-at.js": /*!**********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.code-point-at.js ***! \**********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $at = __webpack_require__(/*! ./_string-at */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-at.js")(false); $export($export.P, 'String', { // 21.1.3.3 String.prototype.codePointAt(pos) codePointAt: function codePointAt(pos) { return $at(this, pos); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.ends-with.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.ends-with.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 21.1.3.6 String.prototype.endsWith(searchString [, endPosition]) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var context = __webpack_require__(/*! ./_string-context */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-context.js"); var ENDS_WITH = 'endsWith'; var $endsWith = ''[ENDS_WITH]; $export($export.P + $export.F * __webpack_require__(/*! ./_fails-is-regexp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails-is-regexp.js")(ENDS_WITH), 'String', { endsWith: function endsWith(searchString /* , endPosition = @length */) { var that = context(this, searchString, ENDS_WITH); var endPosition = arguments.length > 1 ? arguments[1] : undefined; var len = toLength(that.length); var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len); var search = String(searchString); return $endsWith ? $endsWith.call(that, search, end) : that.slice(end - search.length, end) === search; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fixed.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fixed.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // B.2.3.6 String.prototype.fixed() __webpack_require__(/*! ./_string-html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js")('fixed', function (createHTML) { return function fixed() { return createHTML(this, 'tt', '', ''); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontcolor.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontcolor.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // B.2.3.7 String.prototype.fontcolor(color) __webpack_require__(/*! ./_string-html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js")('fontcolor', function (createHTML) { return function fontcolor(color) { return createHTML(this, 'font', 'color', color); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontsize.js": /*!*****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontsize.js ***! \*****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // B.2.3.8 String.prototype.fontsize(size) __webpack_require__(/*! ./_string-html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js")('fontsize', function (createHTML) { return function fontsize(size) { return createHTML(this, 'font', 'size', size); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.from-code-point.js": /*!************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.from-code-point.js ***! \************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-absolute-index.js"); var fromCharCode = String.fromCharCode; var $fromCodePoint = String.fromCodePoint; // length should be 1, old FF problem $export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { // 21.1.2.2 String.fromCodePoint(...codePoints) fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars var res = []; var aLen = arguments.length; var i = 0; var code; while (aLen > i) { code = +arguments[i++]; if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point'); res.push(code < 0x10000 ? fromCharCode(code) : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00) ); } return res.join(''); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.includes.js": /*!*****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.includes.js ***! \*****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 21.1.3.7 String.prototype.includes(searchString, position = 0) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var context = __webpack_require__(/*! ./_string-context */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-context.js"); var INCLUDES = 'includes'; $export($export.P + $export.F * __webpack_require__(/*! ./_fails-is-regexp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails-is-regexp.js")(INCLUDES), 'String', { includes: function includes(searchString /* , position = 0 */) { return !!~context(this, searchString, INCLUDES) .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.italics.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.italics.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // B.2.3.9 String.prototype.italics() __webpack_require__(/*! ./_string-html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js")('italics', function (createHTML) { return function italics() { return createHTML(this, 'i', '', ''); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.iterator.js": /*!*****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.iterator.js ***! \*****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $at = __webpack_require__(/*! ./_string-at */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-at.js")(true); // 21.1.3.27 String.prototype[@@iterator]() __webpack_require__(/*! ./_iter-define */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-define.js")(String, 'String', function (iterated) { this._t = String(iterated); // target this._i = 0; // next index // 21.1.5.2.1 %StringIteratorPrototype%.next() }, function () { var O = this._t; var index = this._i; var point; if (index >= O.length) return { value: undefined, done: true }; point = $at(O, index); this._i += point.length; return { value: point, done: false }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.link.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.link.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // B.2.3.10 String.prototype.link(url) __webpack_require__(/*! ./_string-html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js")('link', function (createHTML) { return function link(url) { return createHTML(this, 'a', 'href', url); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.raw.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.raw.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); $export($export.S, 'String', { // 21.1.2.4 String.raw(callSite, ...substitutions) raw: function raw(callSite) { var tpl = toIObject(callSite.raw); var len = toLength(tpl.length); var aLen = arguments.length; var res = []; var i = 0; while (len > i) { res.push(String(tpl[i++])); if (i < aLen) res.push(String(arguments[i])); } return res.join(''); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.repeat.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.repeat.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.P, 'String', { // 21.1.3.13 String.prototype.repeat(count) repeat: __webpack_require__(/*! ./_string-repeat */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-repeat.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.small.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.small.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // B.2.3.11 String.prototype.small() __webpack_require__(/*! ./_string-html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js")('small', function (createHTML) { return function small() { return createHTML(this, 'small', '', ''); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.starts-with.js": /*!********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.starts-with.js ***! \********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 21.1.3.18 String.prototype.startsWith(searchString [, position ]) var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var context = __webpack_require__(/*! ./_string-context */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-context.js"); var STARTS_WITH = 'startsWith'; var $startsWith = ''[STARTS_WITH]; $export($export.P + $export.F * __webpack_require__(/*! ./_fails-is-regexp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails-is-regexp.js")(STARTS_WITH), 'String', { startsWith: function startsWith(searchString /* , position = 0 */) { var that = context(this, searchString, STARTS_WITH); var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length)); var search = String(searchString); return $startsWith ? $startsWith.call(that, search, index) : that.slice(index, index + search.length) === search; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.strike.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.strike.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // B.2.3.12 String.prototype.strike() __webpack_require__(/*! ./_string-html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js")('strike', function (createHTML) { return function strike() { return createHTML(this, 'strike', '', ''); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sub.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sub.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // B.2.3.13 String.prototype.sub() __webpack_require__(/*! ./_string-html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js")('sub', function (createHTML) { return function sub() { return createHTML(this, 'sub', '', ''); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sup.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sup.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // B.2.3.14 String.prototype.sup() __webpack_require__(/*! ./_string-html */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js")('sup', function (createHTML) { return function sup() { return createHTML(this, 'sup', '', ''); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.trim.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.trim.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 21.1.3.25 String.prototype.trim() __webpack_require__(/*! ./_string-trim */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js")('trim', function ($trim) { return function trim() { return $trim(this, 3); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.symbol.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.symbol.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // ECMAScript 6 symbols shim var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var has = __webpack_require__(/*! ./_has */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js"); var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js"); var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js"); var META = __webpack_require__(/*! ./_meta */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js").KEY; var $fails = __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js"); var shared = __webpack_require__(/*! ./_shared */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js"); var setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js"); var uid = __webpack_require__(/*! ./_uid */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js"); var wks = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js"); var wksExt = __webpack_require__(/*! ./_wks-ext */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks-ext.js"); var wksDefine = __webpack_require__(/*! ./_wks-define */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks-define.js"); var enumKeys = __webpack_require__(/*! ./_enum-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_enum-keys.js"); var isArray = __webpack_require__(/*! ./_is-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js"); var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js"); var createDesc = __webpack_require__(/*! ./_property-desc */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js"); var _create = __webpack_require__(/*! ./_object-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js"); var gOPNExt = __webpack_require__(/*! ./_object-gopn-ext */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn-ext.js"); var $GOPD = __webpack_require__(/*! ./_object-gopd */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js"); var $GOPS = __webpack_require__(/*! ./_object-gops */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gops.js"); var $DP = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js"); var $keys = __webpack_require__(/*! ./_object-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js"); var gOPD = $GOPD.f; var dP = $DP.f; var gOPN = gOPNExt.f; var $Symbol = global.Symbol; var $JSON = global.JSON; var _stringify = $JSON && $JSON.stringify; var PROTOTYPE = 'prototype'; var HIDDEN = wks('_hidden'); var TO_PRIMITIVE = wks('toPrimitive'); var isEnum = {}.propertyIsEnumerable; var SymbolRegistry = shared('symbol-registry'); var AllSymbols = shared('symbols'); var OPSymbols = shared('op-symbols'); var ObjectProto = Object[PROTOTYPE]; var USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f; var QObject = global.QObject; // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 var setSymbolDesc = DESCRIPTORS && $fails(function () { return _create(dP({}, 'a', { get: function () { return dP(this, 'a', { value: 7 }).a; } })).a != 7; }) ? function (it, key, D) { var protoDesc = gOPD(ObjectProto, key); if (protoDesc) delete ObjectProto[key]; dP(it, key, D); if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc); } : dP; var wrap = function (tag) { var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]); sym._k = tag; return sym; }; var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) { return typeof it == 'symbol'; } : function (it) { return it instanceof $Symbol; }; var $defineProperty = function defineProperty(it, key, D) { if (it === ObjectProto) $defineProperty(OPSymbols, key, D); anObject(it); key = toPrimitive(key, true); anObject(D); if (has(AllSymbols, key)) { if (!D.enumerable) { if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {})); it[HIDDEN][key] = true; } else { if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false; D = _create(D, { enumerable: createDesc(0, false) }); } return setSymbolDesc(it, key, D); } return dP(it, key, D); }; var $defineProperties = function defineProperties(it, P) { anObject(it); var keys = enumKeys(P = toIObject(P)); var i = 0; var l = keys.length; var key; while (l > i) $defineProperty(it, key = keys[i++], P[key]); return it; }; var $create = function create(it, P) { return P === undefined ? _create(it) : $defineProperties(_create(it), P); }; var $propertyIsEnumerable = function propertyIsEnumerable(key) { var E = isEnum.call(this, key = toPrimitive(key, true)); if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false; return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true; }; var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) { it = toIObject(it); key = toPrimitive(key, true); if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return; var D = gOPD(it, key); if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true; return D; }; var $getOwnPropertyNames = function getOwnPropertyNames(it) { var names = gOPN(toIObject(it)); var result = []; var i = 0; var key; while (names.length > i) { if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key); } return result; }; var $getOwnPropertySymbols = function getOwnPropertySymbols(it) { var IS_OP = it === ObjectProto; var names = gOPN(IS_OP ? OPSymbols : toIObject(it)); var result = []; var i = 0; var key; while (names.length > i) { if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]); } return result; }; // 19.4.1.1 Symbol([description]) if (!USE_NATIVE) { $Symbol = function Symbol() { if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!'); var tag = uid(arguments.length > 0 ? arguments[0] : undefined); var $set = function (value) { if (this === ObjectProto) $set.call(OPSymbols, value); if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; setSymbolDesc(this, tag, createDesc(1, value)); }; if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set }); return wrap(tag); }; redefine($Symbol[PROTOTYPE], 'toString', function toString() { return this._k; }); $GOPD.f = $getOwnPropertyDescriptor; $DP.f = $defineProperty; __webpack_require__(/*! ./_object-gopn */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js").f = gOPNExt.f = $getOwnPropertyNames; __webpack_require__(/*! ./_object-pie */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js").f = $propertyIsEnumerable; $GOPS.f = $getOwnPropertySymbols; if (DESCRIPTORS && !__webpack_require__(/*! ./_library */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_library.js")) { redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); } wksExt.f = function (name) { return wrap(wks(name)); }; } $export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol }); for (var es6Symbols = ( // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables' ).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]); for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]); $export($export.S + $export.F * !USE_NATIVE, 'Symbol', { // 19.4.2.1 Symbol.for(key) 'for': function (key) { return has(SymbolRegistry, key += '') ? SymbolRegistry[key] : SymbolRegistry[key] = $Symbol(key); }, // 19.4.2.5 Symbol.keyFor(sym) keyFor: function keyFor(sym) { if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!'); for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key; }, useSetter: function () { setter = true; }, useSimple: function () { setter = false; } }); $export($export.S + $export.F * !USE_NATIVE, 'Object', { // 19.1.2.2 Object.create(O [, Properties]) create: $create, // 19.1.2.4 Object.defineProperty(O, P, Attributes) defineProperty: $defineProperty, // 19.1.2.3 Object.defineProperties(O, Properties) defineProperties: $defineProperties, // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) getOwnPropertyDescriptor: $getOwnPropertyDescriptor, // 19.1.2.7 Object.getOwnPropertyNames(O) getOwnPropertyNames: $getOwnPropertyNames, // 19.1.2.8 Object.getOwnPropertySymbols(O) getOwnPropertySymbols: $getOwnPropertySymbols }); // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives // https://bugs.chromium.org/p/v8/issues/detail?id=3443 var FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); }); $export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', { getOwnPropertySymbols: function getOwnPropertySymbols(it) { return $GOPS.f(toObject(it)); } }); // 24.3.2 JSON.stringify(value [, replacer [, space]]) $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () { var S = $Symbol(); // MS Edge converts symbol values to JSON as {} // WebKit converts symbol values to JSON as null // V8 throws on boxed symbols return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}'; })), 'JSON', { stringify: function stringify(it) { var args = [it]; var i = 1; var replacer, $replacer; while (arguments.length > i) args.push(arguments[i++]); $replacer = replacer = args[1]; if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined if (!isArray(replacer)) replacer = function (key, value) { if (typeof $replacer == 'function') value = $replacer.call(this, key, value); if (!isSymbol(value)) return value; }; args[1] = replacer; return _stringify.apply($JSON, args); } }); // 19.4.3.4 Symbol.prototype[@@toPrimitive](hint) $Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(/*! ./_hide */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js")($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); // 19.4.3.5 Symbol.prototype[@@toStringTag] setToStringTag($Symbol, 'Symbol'); // 20.2.1.9 Math[@@toStringTag] setToStringTag(Math, 'Math', true); // 24.3.3 JSON[@@toStringTag] setToStringTag(global.JSON, 'JSON', true); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.array-buffer.js": /*!********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.array-buffer.js ***! \********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $typed = __webpack_require__(/*! ./_typed */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed.js"); var buffer = __webpack_require__(/*! ./_typed-buffer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-buffer.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-absolute-index.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var ArrayBuffer = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js").ArrayBuffer; var speciesConstructor = __webpack_require__(/*! ./_species-constructor */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js"); var $ArrayBuffer = buffer.ArrayBuffer; var $DataView = buffer.DataView; var $isView = $typed.ABV && ArrayBuffer.isView; var $slice = $ArrayBuffer.prototype.slice; var VIEW = $typed.VIEW; var ARRAY_BUFFER = 'ArrayBuffer'; $export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer }); $export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, { // 24.1.3.1 ArrayBuffer.isView(arg) isView: function isView(it) { return $isView && $isView(it) || isObject(it) && VIEW in it; } }); $export($export.P + $export.U + $export.F * __webpack_require__(/*! ./_fails */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js")(function () { return !new $ArrayBuffer(2).slice(1, undefined).byteLength; }), ARRAY_BUFFER, { // 24.1.4.3 ArrayBuffer.prototype.slice(start, end) slice: function slice(start, end) { if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix var len = anObject(this).byteLength; var first = toAbsoluteIndex(start, len); var fin = toAbsoluteIndex(end === undefined ? len : end, len); var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first)); var viewS = new $DataView(this); var viewT = new $DataView(result); var index = 0; while (first < fin) { viewT.setUint8(index++, viewS.getUint8(first++)); } return result; } }); __webpack_require__(/*! ./_set-species */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js")(ARRAY_BUFFER); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.data-view.js": /*!*****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.data-view.js ***! \*****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.G + $export.W + $export.F * !__webpack_require__(/*! ./_typed */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed.js").ABV, { DataView: __webpack_require__(/*! ./_typed-buffer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-buffer.js").DataView }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float32-array.js": /*!*********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float32-array.js ***! \*********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ./_typed-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js")('Float32', 4, function (init) { return function Float32Array(data, byteOffset, length) { return init(this, data, byteOffset, length); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float64-array.js": /*!*********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float64-array.js ***! \*********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ./_typed-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js")('Float64', 8, function (init) { return function Float64Array(data, byteOffset, length) { return init(this, data, byteOffset, length); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int16-array.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int16-array.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ./_typed-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js")('Int16', 2, function (init) { return function Int16Array(data, byteOffset, length) { return init(this, data, byteOffset, length); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int32-array.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int32-array.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ./_typed-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js")('Int32', 4, function (init) { return function Int32Array(data, byteOffset, length) { return init(this, data, byteOffset, length); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int8-array.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int8-array.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ./_typed-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js")('Int8', 1, function (init) { return function Int8Array(data, byteOffset, length) { return init(this, data, byteOffset, length); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint16-array.js": /*!********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint16-array.js ***! \********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ./_typed-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js")('Uint16', 2, function (init) { return function Uint16Array(data, byteOffset, length) { return init(this, data, byteOffset, length); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint32-array.js": /*!********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint32-array.js ***! \********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ./_typed-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js")('Uint32', 4, function (init) { return function Uint32Array(data, byteOffset, length) { return init(this, data, byteOffset, length); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-array.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-array.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ./_typed-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js")('Uint8', 1, function (init) { return function Uint8Array(data, byteOffset, length) { return init(this, data, byteOffset, length); }; }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-clamped-array.js": /*!***************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-clamped-array.js ***! \***************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ./_typed-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js")('Uint8', 1, function (init) { return function Uint8ClampedArray(data, byteOffset, length) { return init(this, data, byteOffset, length); }; }, true); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-map.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-map.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var each = __webpack_require__(/*! ./_array-methods */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js")(0); var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js"); var meta = __webpack_require__(/*! ./_meta */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js"); var assign = __webpack_require__(/*! ./_object-assign */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-assign.js"); var weak = __webpack_require__(/*! ./_collection-weak */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-weak.js"); var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js"); var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_validate-collection.js"); var NATIVE_WEAK_MAP = __webpack_require__(/*! ./_validate-collection */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_validate-collection.js"); var IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global; var WEAK_MAP = 'WeakMap'; var getWeak = meta.getWeak; var isExtensible = Object.isExtensible; var uncaughtFrozenStore = weak.ufstore; var InternalMap; var wrapper = function (get) { return function WeakMap() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; }; var methods = { // 23.3.3.3 WeakMap.prototype.get(key) get: function get(key) { if (isObject(key)) { var data = getWeak(key); if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key); return data ? data[this._i] : undefined; } }, // 23.3.3.5 WeakMap.prototype.set(key, value) set: function set(key, value) { return weak.def(validate(this, WEAK_MAP), key, value); } }; // 23.3 WeakMap Objects var $WeakMap = module.exports = __webpack_require__(/*! ./_collection */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection.js")(WEAK_MAP, wrapper, methods, weak, true, true); // IE11 WeakMap frozen keys fix if (NATIVE_WEAK_MAP && IS_IE11) { InternalMap = weak.getConstructor(wrapper, WEAK_MAP); assign(InternalMap.prototype, methods); meta.NEED = true; each(['delete', 'has', 'get', 'set'], function (key) { var proto = $WeakMap.prototype; var method = proto[key]; redefine(proto, key, function (a, b) { // store frozen objects on internal weakmap shim if (isObject(a) && !isExtensible(a)) { if (!this._f) this._f = new InternalMap(); var result = this._f[key](a, b); return key == 'set' ? this : result; // store all the rest on native weakmap } return method.call(this, a, b); }); }); } /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-set.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-set.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var weak = __webpack_require__(/*! ./_collection-weak */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-weak.js"); var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_validate-collection.js"); var WEAK_SET = 'WeakSet'; // 23.4 WeakSet Objects __webpack_require__(/*! ./_collection */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection.js")(WEAK_SET, function (get) { return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; }, { // 23.4.3.1 WeakSet.prototype.add(value) add: function add(value) { return weak.def(validate(this, WEAK_SET), value, true); } }, weak, false, true); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.flat-map.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.flat-map.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var flattenIntoArray = __webpack_require__(/*! ./_flatten-into-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_flatten-into-array.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); var arraySpeciesCreate = __webpack_require__(/*! ./_array-species-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-create.js"); $export($export.P, 'Array', { flatMap: function flatMap(callbackfn /* , thisArg */) { var O = toObject(this); var sourceLen, A; aFunction(callbackfn); sourceLen = toLength(O.length); A = arraySpeciesCreate(O, 0); flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]); return A; } }); __webpack_require__(/*! ./_add-to-unscopables */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js")('flatMap'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.flatten.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.flatten.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var flattenIntoArray = __webpack_require__(/*! ./_flatten-into-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_flatten-into-array.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js"); var arraySpeciesCreate = __webpack_require__(/*! ./_array-species-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-create.js"); $export($export.P, 'Array', { flatten: function flatten(/* depthArg = 1 */) { var depthArg = arguments[0]; var O = toObject(this); var sourceLen = toLength(O.length); var A = arraySpeciesCreate(O, 0); flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg)); return A; } }); __webpack_require__(/*! ./_add-to-unscopables */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js")('flatten'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.includes.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.includes.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://github.com/tc39/Array.prototype.includes var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $includes = __webpack_require__(/*! ./_array-includes */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-includes.js")(true); $export($export.P, 'Array', { includes: function includes(el /* , fromIndex = 0 */) { return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); } }); __webpack_require__(/*! ./_add-to-unscopables */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js")('includes'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.asap.js": /*!******************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.asap.js ***! \******************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var microtask = __webpack_require__(/*! ./_microtask */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_microtask.js")(); var process = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js").process; var isNode = __webpack_require__(/*! ./_cof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js")(process) == 'process'; $export($export.G, { asap: function asap(fn) { var domain = isNode && process.domain; microtask(domain ? domain.bind(fn) : fn); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.error.is-error.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.error.is-error.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/ljharb/proposal-is-error var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var cof = __webpack_require__(/*! ./_cof */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js"); $export($export.S, 'Error', { isError: function isError(it) { return cof(it) === 'Error'; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.global.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.global.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/tc39/proposal-global var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.G, { global: __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.from.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.from.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://tc39.github.io/proposal-setmap-offrom/#sec-map.from __webpack_require__(/*! ./_set-collection-from */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-from.js")('Map'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.of.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.of.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://tc39.github.io/proposal-setmap-offrom/#sec-map.of __webpack_require__(/*! ./_set-collection-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-of.js")('Map'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.to-json.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.to-json.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/DavidBruant/Map-Set.prototype.toJSON var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(/*! ./_collection-to-json */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-to-json.js")('Map') }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.clamp.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.clamp.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://rwaldron.github.io/proposal-math-extensions/ var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { clamp: function clamp(x, lower, upper) { return Math.min(upper, Math.max(lower, x)); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.deg-per-rad.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.deg-per-rad.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://rwaldron.github.io/proposal-math-extensions/ var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.degrees.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.degrees.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://rwaldron.github.io/proposal-math-extensions/ var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var RAD_PER_DEG = 180 / Math.PI; $export($export.S, 'Math', { degrees: function degrees(radians) { return radians * RAD_PER_DEG; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.fscale.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.fscale.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://rwaldron.github.io/proposal-math-extensions/ var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var scale = __webpack_require__(/*! ./_math-scale */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-scale.js"); var fround = __webpack_require__(/*! ./_math-fround */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-fround.js"); $export($export.S, 'Math', { fscale: function fscale(x, inLow, inHigh, outLow, outHigh) { return fround(scale(x, inLow, inHigh, outLow, outHigh)); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.iaddh.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.iaddh.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { iaddh: function iaddh(x0, x1, y0, y1) { var $x0 = x0 >>> 0; var $x1 = x1 >>> 0; var $y0 = y0 >>> 0; return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.imulh.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.imulh.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { imulh: function imulh(u, v) { var UINT16 = 0xffff; var $u = +u; var $v = +v; var u0 = $u & UINT16; var v0 = $v & UINT16; var u1 = $u >> 16; var v1 = $v >> 16; var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16); return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.isubh.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.isubh.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { isubh: function isubh(x0, x1, y0, y1) { var $x0 = x0 >>> 0; var $x1 = x1 >>> 0; var $y0 = y0 >>> 0; return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.rad-per-deg.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.rad-per-deg.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://rwaldron.github.io/proposal-math-extensions/ var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.radians.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.radians.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://rwaldron.github.io/proposal-math-extensions/ var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var DEG_PER_RAD = Math.PI / 180; $export($export.S, 'Math', { radians: function radians(degrees) { return degrees * DEG_PER_RAD; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.scale.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.scale.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://rwaldron.github.io/proposal-math-extensions/ var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { scale: __webpack_require__(/*! ./_math-scale */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_math-scale.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.signbit.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.signbit.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // http://jfbastien.github.io/papers/Math.signbit.html var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { signbit: function signbit(x) { // eslint-disable-next-line no-self-compare return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.umulh.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.umulh.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'Math', { umulh: function umulh(u, v) { var UINT16 = 0xffff; var $u = +u; var $v = +v; var u0 = $u & UINT16; var v0 = $v & UINT16; var u1 = $u >>> 16; var v1 = $v >>> 16; var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16); return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-getter.js": /*!**********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-getter.js ***! \**********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); var $defineProperty = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js"); // B.2.2.2 Object.prototype.__defineGetter__(P, getter) __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js") && $export($export.P + __webpack_require__(/*! ./_object-forced-pam */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-forced-pam.js"), 'Object', { __defineGetter__: function __defineGetter__(P, getter) { $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true }); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-setter.js": /*!**********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-setter.js ***! \**********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); var $defineProperty = __webpack_require__(/*! ./_object-dp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js"); // B.2.2.3 Object.prototype.__defineSetter__(P, setter) __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js") && $export($export.P + __webpack_require__(/*! ./_object-forced-pam */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-forced-pam.js"), 'Object', { __defineSetter__: function __defineSetter__(P, setter) { $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true }); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.entries.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.entries.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/tc39/proposal-object-values-entries var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $entries = __webpack_require__(/*! ./_object-to-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-to-array.js")(true); $export($export.S, 'Object', { entries: function entries(it) { return $entries(it); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.get-own-property-descriptors.js": /*!*************************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.get-own-property-descriptors.js ***! \*************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/tc39/proposal-object-getownpropertydescriptors var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var ownKeys = __webpack_require__(/*! ./_own-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_own-keys.js"); var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js"); var gOPD = __webpack_require__(/*! ./_object-gopd */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js"); var createProperty = __webpack_require__(/*! ./_create-property */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_create-property.js"); $export($export.S, 'Object', { getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) { var O = toIObject(object); var getDesc = gOPD.f; var keys = ownKeys(O); var result = {}; var i = 0; var key, desc; while (keys.length > i) { desc = getDesc(O, key = keys[i++]); if (desc !== undefined) createProperty(result, key, desc); } return result; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-getter.js": /*!**********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-getter.js ***! \**********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js"); var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js"); var getOwnPropertyDescriptor = __webpack_require__(/*! ./_object-gopd */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js").f; // B.2.2.4 Object.prototype.__lookupGetter__(P) __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js") && $export($export.P + __webpack_require__(/*! ./_object-forced-pam */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-forced-pam.js"), 'Object', { __lookupGetter__: function __lookupGetter__(P) { var O = toObject(this); var K = toPrimitive(P, true); var D; do { if (D = getOwnPropertyDescriptor(O, K)) return D.get; } while (O = getPrototypeOf(O)); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-setter.js": /*!**********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-setter.js ***! \**********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js"); var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js"); var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js"); var getOwnPropertyDescriptor = __webpack_require__(/*! ./_object-gopd */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js").f; // B.2.2.5 Object.prototype.__lookupSetter__(P) __webpack_require__(/*! ./_descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js") && $export($export.P + __webpack_require__(/*! ./_object-forced-pam */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-forced-pam.js"), 'Object', { __lookupSetter__: function __lookupSetter__(P) { var O = toObject(this); var K = toPrimitive(P, true); var D; do { if (D = getOwnPropertyDescriptor(O, K)) return D.set; } while (O = getPrototypeOf(O)); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.values.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.values.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/tc39/proposal-object-values-entries var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $values = __webpack_require__(/*! ./_object-to-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-to-array.js")(false); $export($export.S, 'Object', { values: function values(it) { return $values(it); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.observable.js": /*!************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.observable.js ***! \************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://github.com/zenparsing/es-observable var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var core = __webpack_require__(/*! ./_core */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js"); var microtask = __webpack_require__(/*! ./_microtask */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_microtask.js")(); var OBSERVABLE = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js")('observable'); var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var anInstance = __webpack_require__(/*! ./_an-instance */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js"); var redefineAll = __webpack_require__(/*! ./_redefine-all */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js"); var hide = __webpack_require__(/*! ./_hide */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js"); var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js"); var RETURN = forOf.RETURN; var getMethod = function (fn) { return fn == null ? undefined : aFunction(fn); }; var cleanupSubscription = function (subscription) { var cleanup = subscription._c; if (cleanup) { subscription._c = undefined; cleanup(); } }; var subscriptionClosed = function (subscription) { return subscription._o === undefined; }; var closeSubscription = function (subscription) { if (!subscriptionClosed(subscription)) { subscription._o = undefined; cleanupSubscription(subscription); } }; var Subscription = function (observer, subscriber) { anObject(observer); this._c = undefined; this._o = observer; observer = new SubscriptionObserver(this); try { var cleanup = subscriber(observer); var subscription = cleanup; if (cleanup != null) { if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); }; else aFunction(cleanup); this._c = cleanup; } } catch (e) { observer.error(e); return; } if (subscriptionClosed(this)) cleanupSubscription(this); }; Subscription.prototype = redefineAll({}, { unsubscribe: function unsubscribe() { closeSubscription(this); } }); var SubscriptionObserver = function (subscription) { this._s = subscription; }; SubscriptionObserver.prototype = redefineAll({}, { next: function next(value) { var subscription = this._s; if (!subscriptionClosed(subscription)) { var observer = subscription._o; try { var m = getMethod(observer.next); if (m) return m.call(observer, value); } catch (e) { try { closeSubscription(subscription); } finally { throw e; } } } }, error: function error(value) { var subscription = this._s; if (subscriptionClosed(subscription)) throw value; var observer = subscription._o; subscription._o = undefined; try { var m = getMethod(observer.error); if (!m) throw value; value = m.call(observer, value); } catch (e) { try { cleanupSubscription(subscription); } finally { throw e; } } cleanupSubscription(subscription); return value; }, complete: function complete(value) { var subscription = this._s; if (!subscriptionClosed(subscription)) { var observer = subscription._o; subscription._o = undefined; try { var m = getMethod(observer.complete); value = m ? m.call(observer, value) : undefined; } catch (e) { try { cleanupSubscription(subscription); } finally { throw e; } } cleanupSubscription(subscription); return value; } } }); var $Observable = function Observable(subscriber) { anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber); }; redefineAll($Observable.prototype, { subscribe: function subscribe(observer) { return new Subscription(observer, this._f); }, forEach: function forEach(fn) { var that = this; return new (core.Promise || global.Promise)(function (resolve, reject) { aFunction(fn); var subscription = that.subscribe({ next: function (value) { try { return fn(value); } catch (e) { reject(e); subscription.unsubscribe(); } }, error: reject, complete: resolve }); }); } }); redefineAll($Observable, { from: function from(x) { var C = typeof this === 'function' ? this : $Observable; var method = getMethod(anObject(x)[OBSERVABLE]); if (method) { var observable = anObject(method.call(x)); return observable.constructor === C ? observable : new C(function (observer) { return observable.subscribe(observer); }); } return new C(function (observer) { var done = false; microtask(function () { if (!done) { try { if (forOf(x, false, function (it) { observer.next(it); if (done) return RETURN; }) === RETURN) return; } catch (e) { if (done) throw e; observer.error(e); return; } observer.complete(); } }); return function () { done = true; }; }); }, of: function of() { for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++]; return new (typeof this === 'function' ? this : $Observable)(function (observer) { var done = false; microtask(function () { if (!done) { for (var j = 0; j < items.length; ++j) { observer.next(items[j]); if (done) return; } observer.complete(); } }); return function () { done = true; }; }); } }); hide($Observable.prototype, OBSERVABLE, function () { return this; }); $export($export.G, { Observable: $Observable }); __webpack_require__(/*! ./_set-species */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js")('Observable'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.promise.finally.js": /*!*****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.promise.finally.js ***! \*****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://github.com/tc39/proposal-promise-finally var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var core = __webpack_require__(/*! ./_core */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js"); var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var speciesConstructor = __webpack_require__(/*! ./_species-constructor */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js"); var promiseResolve = __webpack_require__(/*! ./_promise-resolve */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_promise-resolve.js"); $export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) { var C = speciesConstructor(this, core.Promise || global.Promise); var isFunction = typeof onFinally == 'function'; return this.then( isFunction ? function (x) { return promiseResolve(C, onFinally()).then(function () { return x; }); } : onFinally, isFunction ? function (e) { return promiseResolve(C, onFinally()).then(function () { throw e; }); } : onFinally ); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.promise.try.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.promise.try.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://github.com/tc39/proposal-promise-try var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var newPromiseCapability = __webpack_require__(/*! ./_new-promise-capability */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_new-promise-capability.js"); var perform = __webpack_require__(/*! ./_perform */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_perform.js"); $export($export.S, 'Promise', { 'try': function (callbackfn) { var promiseCapability = newPromiseCapability.f(this); var result = perform(callbackfn); (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v); return promiseCapability.promise; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.define-metadata.js": /*!*************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.define-metadata.js ***! \*************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var toMetaKey = metadata.key; var ordinaryDefineOwnMetadata = metadata.set; metadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) { ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey)); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.delete-metadata.js": /*!*************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.delete-metadata.js ***! \*************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var toMetaKey = metadata.key; var getOrCreateMetadataMap = metadata.map; var store = metadata.store; metadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) { var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]); var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false); if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false; if (metadataMap.size) return true; var targetMetadata = store.get(target); targetMetadata['delete'](targetKey); return !!targetMetadata.size || store['delete'](target); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata-keys.js": /*!***************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata-keys.js ***! \***************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var Set = __webpack_require__(/*! ./es6.set */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.set.js"); var from = __webpack_require__(/*! ./_array-from-iterable */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_array-from-iterable.js"); var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js"); var ordinaryOwnMetadataKeys = metadata.keys; var toMetaKey = metadata.key; var ordinaryMetadataKeys = function (O, P) { var oKeys = ordinaryOwnMetadataKeys(O, P); var parent = getPrototypeOf(O); if (parent === null) return oKeys; var pKeys = ordinaryMetadataKeys(parent, P); return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys; }; metadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) { return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1])); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata.js": /*!**********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata.js ***! \**********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js"); var ordinaryHasOwnMetadata = metadata.has; var ordinaryGetOwnMetadata = metadata.get; var toMetaKey = metadata.key; var ordinaryGetMetadata = function (MetadataKey, O, P) { var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P); var parent = getPrototypeOf(O); return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined; }; metadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) { return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2])); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js": /*!*******************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js ***! \*******************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var ordinaryOwnMetadataKeys = metadata.keys; var toMetaKey = metadata.key; metadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) { return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1])); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata.js": /*!**************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata.js ***! \**************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var ordinaryGetOwnMetadata = metadata.get; var toMetaKey = metadata.key; metadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) { return ordinaryGetOwnMetadata(metadataKey, anObject(target) , arguments.length < 3 ? undefined : toMetaKey(arguments[2])); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-metadata.js": /*!**********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-metadata.js ***! \**********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js"); var ordinaryHasOwnMetadata = metadata.has; var toMetaKey = metadata.key; var ordinaryHasMetadata = function (MetadataKey, O, P) { var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); if (hasOwn) return true; var parent = getPrototypeOf(O); return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false; }; metadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) { return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2])); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-own-metadata.js": /*!**************************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-own-metadata.js ***! \**************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var ordinaryHasOwnMetadata = metadata.has; var toMetaKey = metadata.key; metadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) { return ordinaryHasOwnMetadata(metadataKey, anObject(target) , arguments.length < 3 ? undefined : toMetaKey(arguments[2])); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.metadata.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.metadata.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js"); var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js"); var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js"); var toMetaKey = $metadata.key; var ordinaryDefineOwnMetadata = $metadata.set; $metadata.exp({ metadata: function metadata(metadataKey, metadataValue) { return function decorator(target, targetKey) { ordinaryDefineOwnMetadata( metadataKey, metadataValue, (targetKey !== undefined ? anObject : aFunction)(target), toMetaKey(targetKey) ); }; } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.from.js": /*!**********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.from.js ***! \**********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://tc39.github.io/proposal-setmap-offrom/#sec-set.from __webpack_require__(/*! ./_set-collection-from */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-from.js")('Set'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.of.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.of.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://tc39.github.io/proposal-setmap-offrom/#sec-set.of __webpack_require__(/*! ./_set-collection-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-of.js")('Set'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.to-json.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.to-json.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/DavidBruant/Map-Set.prototype.toJSON var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(/*! ./_collection-to-json */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-to-json.js")('Set') }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.at.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.at.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://github.com/mathiasbynens/String.prototype.at var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $at = __webpack_require__(/*! ./_string-at */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-at.js")(true); $export($export.P, 'String', { at: function at(pos) { return $at(this, pos); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.match-all.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.match-all.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://tc39.github.io/String.prototype.matchAll/ var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var defined = __webpack_require__(/*! ./_defined */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js"); var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js"); var isRegExp = __webpack_require__(/*! ./_is-regexp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_is-regexp.js"); var getFlags = __webpack_require__(/*! ./_flags */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js"); var RegExpProto = RegExp.prototype; var $RegExpStringIterator = function (regexp, string) { this._r = regexp; this._s = string; }; __webpack_require__(/*! ./_iter-create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-create.js")($RegExpStringIterator, 'RegExp String', function next() { var match = this._r.exec(this._s); return { value: match, done: match === null }; }); $export($export.P, 'String', { matchAll: function matchAll(regexp) { defined(this); if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!'); var S = String(this); var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp); var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags); rx.lastIndex = toLength(regexp.lastIndex); return new $RegExpStringIterator(rx, S); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-end.js": /*!****************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-end.js ***! \****************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://github.com/tc39/proposal-string-pad-start-end var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $pad = __webpack_require__(/*! ./_string-pad */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-pad.js"); var userAgent = __webpack_require__(/*! ./_user-agent */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_user-agent.js"); // https://github.com/zloirock/core-js/issues/280 var WEBKIT_BUG = /Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(userAgent); $export($export.P + $export.F * WEBKIT_BUG, 'String', { padEnd: function padEnd(maxLength /* , fillString = ' ' */) { return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-start.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-start.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://github.com/tc39/proposal-string-pad-start-end var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $pad = __webpack_require__(/*! ./_string-pad */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-pad.js"); var userAgent = __webpack_require__(/*! ./_user-agent */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_user-agent.js"); // https://github.com/zloirock/core-js/issues/280 var WEBKIT_BUG = /Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(userAgent); $export($export.P + $export.F * WEBKIT_BUG, 'String', { padStart: function padStart(maxLength /* , fillString = ' ' */) { return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true); } }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-left.js": /*!******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-left.js ***! \******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://github.com/sebmarkbage/ecmascript-string-left-right-trim __webpack_require__(/*! ./_string-trim */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js")('trimLeft', function ($trim) { return function trimLeft() { return $trim(this, 1); }; }, 'trimStart'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-right.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-right.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // https://github.com/sebmarkbage/ecmascript-string-left-right-trim __webpack_require__(/*! ./_string-trim */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js")('trimRight', function ($trim) { return function trimRight() { return $trim(this, 2); }; }, 'trimEnd'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.async-iterator.js": /*!***********************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.async-iterator.js ***! \***********************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ./_wks-define */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks-define.js")('asyncIterator'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.observable.js": /*!*******************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.observable.js ***! \*******************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ./_wks-define */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks-define.js")('observable'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.system.global.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.system.global.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/tc39/proposal-global var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); $export($export.S, 'System', { global: __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js") }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-map.from.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-map.from.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from __webpack_require__(/*! ./_set-collection-from */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-from.js")('WeakMap'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-map.of.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-map.of.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of __webpack_require__(/*! ./_set-collection-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-of.js")('WeakMap'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-set.from.js": /*!***************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-set.from.js ***! \***************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from __webpack_require__(/*! ./_set-collection-from */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-from.js")('WeakSet'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-set.of.js": /*!*************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-set.of.js ***! \*************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of __webpack_require__(/*! ./_set-collection-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-of.js")('WeakSet'); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/web.dom.iterable.js": /*!**************************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/web.dom.iterable.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $iterators = __webpack_require__(/*! ./es6.array.iterator */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.iterator.js"); var getKeys = __webpack_require__(/*! ./_object-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js"); var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js"); var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var hide = __webpack_require__(/*! ./_hide */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js"); var Iterators = __webpack_require__(/*! ./_iterators */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js"); var wks = __webpack_require__(/*! ./_wks */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js"); var ITERATOR = wks('iterator'); var TO_STRING_TAG = wks('toStringTag'); var ArrayValues = Iterators.Array; var DOMIterables = { CSSRuleList: true, // TODO: Not spec compliant, should be false. CSSStyleDeclaration: false, CSSValueList: false, ClientRectList: false, DOMRectList: false, DOMStringList: false, DOMTokenList: true, DataTransferItemList: false, FileList: false, HTMLAllCollection: false, HTMLCollection: false, HTMLFormElement: false, HTMLSelectElement: false, MediaList: true, // TODO: Not spec compliant, should be false. MimeTypeArray: false, NamedNodeMap: false, NodeList: true, PaintRequestList: false, Plugin: false, PluginArray: false, SVGLengthList: false, SVGNumberList: false, SVGPathSegList: false, SVGPointList: false, SVGStringList: false, SVGTransformList: false, SourceBufferList: false, StyleSheetList: true, // TODO: Not spec compliant, should be false. TextTrackCueList: false, TextTrackList: false, TouchList: false }; for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) { var NAME = collections[i]; var explicit = DOMIterables[NAME]; var Collection = global[NAME]; var proto = Collection && Collection.prototype; var key; if (proto) { if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues); if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); Iterators[NAME] = ArrayValues; if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true); } } /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/web.immediate.js": /*!***********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/web.immediate.js ***! \***********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var $task = __webpack_require__(/*! ./_task */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_task.js"); $export($export.G + $export.B, { setImmediate: $task.set, clearImmediate: $task.clear }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/modules/web.timers.js": /*!********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/modules/web.timers.js ***! \********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // ie9- setTimeout & setInterval additional parameters fix var global = __webpack_require__(/*! ./_global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js"); var $export = __webpack_require__(/*! ./_export */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js"); var userAgent = __webpack_require__(/*! ./_user-agent */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_user-agent.js"); var slice = [].slice; var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check var wrap = function (set) { return function (fn, time /* , ...args */) { var boundArgs = arguments.length > 2; var args = boundArgs ? slice.call(arguments, 2) : false; return set(boundArgs ? function () { // eslint-disable-next-line no-new-func (typeof fn == 'function' ? fn : Function(fn)).apply(this, args); } : fn, time); }; }; $export($export.G + $export.B + $export.F * MSIE, { setTimeout: wrap(global.setTimeout), setInterval: wrap(global.setInterval) }); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/core-js/shim.js": /*!******************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/core-js/shim.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! ./modules/es6.symbol */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.symbol.js"); __webpack_require__(/*! ./modules/es6.object.create */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.create.js"); __webpack_require__(/*! ./modules/es6.object.define-property */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-property.js"); __webpack_require__(/*! ./modules/es6.object.define-properties */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-properties.js"); __webpack_require__(/*! ./modules/es6.object.get-own-property-descriptor */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-descriptor.js"); __webpack_require__(/*! ./modules/es6.object.get-prototype-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-prototype-of.js"); __webpack_require__(/*! ./modules/es6.object.keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.keys.js"); __webpack_require__(/*! ./modules/es6.object.get-own-property-names */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-names.js"); __webpack_require__(/*! ./modules/es6.object.freeze */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.freeze.js"); __webpack_require__(/*! ./modules/es6.object.seal */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.seal.js"); __webpack_require__(/*! ./modules/es6.object.prevent-extensions */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.prevent-extensions.js"); __webpack_require__(/*! ./modules/es6.object.is-frozen */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-frozen.js"); __webpack_require__(/*! ./modules/es6.object.is-sealed */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-sealed.js"); __webpack_require__(/*! ./modules/es6.object.is-extensible */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-extensible.js"); __webpack_require__(/*! ./modules/es6.object.assign */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.assign.js"); __webpack_require__(/*! ./modules/es6.object.is */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is.js"); __webpack_require__(/*! ./modules/es6.object.set-prototype-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.set-prototype-of.js"); __webpack_require__(/*! ./modules/es6.object.to-string */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.to-string.js"); __webpack_require__(/*! ./modules/es6.function.bind */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.bind.js"); __webpack_require__(/*! ./modules/es6.function.name */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.name.js"); __webpack_require__(/*! ./modules/es6.function.has-instance */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.has-instance.js"); __webpack_require__(/*! ./modules/es6.parse-int */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-int.js"); __webpack_require__(/*! ./modules/es6.parse-float */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-float.js"); __webpack_require__(/*! ./modules/es6.number.constructor */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.constructor.js"); __webpack_require__(/*! ./modules/es6.number.to-fixed */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-fixed.js"); __webpack_require__(/*! ./modules/es6.number.to-precision */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-precision.js"); __webpack_require__(/*! ./modules/es6.number.epsilon */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.epsilon.js"); __webpack_require__(/*! ./modules/es6.number.is-finite */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-finite.js"); __webpack_require__(/*! ./modules/es6.number.is-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-integer.js"); __webpack_require__(/*! ./modules/es6.number.is-nan */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-nan.js"); __webpack_require__(/*! ./modules/es6.number.is-safe-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-safe-integer.js"); __webpack_require__(/*! ./modules/es6.number.max-safe-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.max-safe-integer.js"); __webpack_require__(/*! ./modules/es6.number.min-safe-integer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.min-safe-integer.js"); __webpack_require__(/*! ./modules/es6.number.parse-float */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-float.js"); __webpack_require__(/*! ./modules/es6.number.parse-int */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-int.js"); __webpack_require__(/*! ./modules/es6.math.acosh */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.acosh.js"); __webpack_require__(/*! ./modules/es6.math.asinh */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.asinh.js"); __webpack_require__(/*! ./modules/es6.math.atanh */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.atanh.js"); __webpack_require__(/*! ./modules/es6.math.cbrt */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cbrt.js"); __webpack_require__(/*! ./modules/es6.math.clz32 */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.clz32.js"); __webpack_require__(/*! ./modules/es6.math.cosh */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cosh.js"); __webpack_require__(/*! ./modules/es6.math.expm1 */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.expm1.js"); __webpack_require__(/*! ./modules/es6.math.fround */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.fround.js"); __webpack_require__(/*! ./modules/es6.math.hypot */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.hypot.js"); __webpack_require__(/*! ./modules/es6.math.imul */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.imul.js"); __webpack_require__(/*! ./modules/es6.math.log10 */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log10.js"); __webpack_require__(/*! ./modules/es6.math.log1p */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log1p.js"); __webpack_require__(/*! ./modules/es6.math.log2 */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log2.js"); __webpack_require__(/*! ./modules/es6.math.sign */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sign.js"); __webpack_require__(/*! ./modules/es6.math.sinh */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sinh.js"); __webpack_require__(/*! ./modules/es6.math.tanh */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.tanh.js"); __webpack_require__(/*! ./modules/es6.math.trunc */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.trunc.js"); __webpack_require__(/*! ./modules/es6.string.from-code-point */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.from-code-point.js"); __webpack_require__(/*! ./modules/es6.string.raw */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.raw.js"); __webpack_require__(/*! ./modules/es6.string.trim */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.trim.js"); __webpack_require__(/*! ./modules/es6.string.iterator */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.iterator.js"); __webpack_require__(/*! ./modules/es6.string.code-point-at */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.code-point-at.js"); __webpack_require__(/*! ./modules/es6.string.ends-with */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.ends-with.js"); __webpack_require__(/*! ./modules/es6.string.includes */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.includes.js"); __webpack_require__(/*! ./modules/es6.string.repeat */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.repeat.js"); __webpack_require__(/*! ./modules/es6.string.starts-with */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.starts-with.js"); __webpack_require__(/*! ./modules/es6.string.anchor */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.anchor.js"); __webpack_require__(/*! ./modules/es6.string.big */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.big.js"); __webpack_require__(/*! ./modules/es6.string.blink */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.blink.js"); __webpack_require__(/*! ./modules/es6.string.bold */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.bold.js"); __webpack_require__(/*! ./modules/es6.string.fixed */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fixed.js"); __webpack_require__(/*! ./modules/es6.string.fontcolor */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontcolor.js"); __webpack_require__(/*! ./modules/es6.string.fontsize */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontsize.js"); __webpack_require__(/*! ./modules/es6.string.italics */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.italics.js"); __webpack_require__(/*! ./modules/es6.string.link */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.link.js"); __webpack_require__(/*! ./modules/es6.string.small */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.small.js"); __webpack_require__(/*! ./modules/es6.string.strike */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.strike.js"); __webpack_require__(/*! ./modules/es6.string.sub */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sub.js"); __webpack_require__(/*! ./modules/es6.string.sup */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sup.js"); __webpack_require__(/*! ./modules/es6.date.now */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.now.js"); __webpack_require__(/*! ./modules/es6.date.to-json */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-json.js"); __webpack_require__(/*! ./modules/es6.date.to-iso-string */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-iso-string.js"); __webpack_require__(/*! ./modules/es6.date.to-string */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-string.js"); __webpack_require__(/*! ./modules/es6.date.to-primitive */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-primitive.js"); __webpack_require__(/*! ./modules/es6.array.is-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.is-array.js"); __webpack_require__(/*! ./modules/es6.array.from */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.from.js"); __webpack_require__(/*! ./modules/es6.array.of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.of.js"); __webpack_require__(/*! ./modules/es6.array.join */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.join.js"); __webpack_require__(/*! ./modules/es6.array.slice */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.slice.js"); __webpack_require__(/*! ./modules/es6.array.sort */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.sort.js"); __webpack_require__(/*! ./modules/es6.array.for-each */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.for-each.js"); __webpack_require__(/*! ./modules/es6.array.map */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.map.js"); __webpack_require__(/*! ./modules/es6.array.filter */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.filter.js"); __webpack_require__(/*! ./modules/es6.array.some */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.some.js"); __webpack_require__(/*! ./modules/es6.array.every */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.every.js"); __webpack_require__(/*! ./modules/es6.array.reduce */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce.js"); __webpack_require__(/*! ./modules/es6.array.reduce-right */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce-right.js"); __webpack_require__(/*! ./modules/es6.array.index-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.index-of.js"); __webpack_require__(/*! ./modules/es6.array.last-index-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.last-index-of.js"); __webpack_require__(/*! ./modules/es6.array.copy-within */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.copy-within.js"); __webpack_require__(/*! ./modules/es6.array.fill */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.fill.js"); __webpack_require__(/*! ./modules/es6.array.find */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find.js"); __webpack_require__(/*! ./modules/es6.array.find-index */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find-index.js"); __webpack_require__(/*! ./modules/es6.array.species */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.species.js"); __webpack_require__(/*! ./modules/es6.array.iterator */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.iterator.js"); __webpack_require__(/*! ./modules/es6.regexp.constructor */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.constructor.js"); __webpack_require__(/*! ./modules/es6.regexp.exec */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.exec.js"); __webpack_require__(/*! ./modules/es6.regexp.to-string */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.to-string.js"); __webpack_require__(/*! ./modules/es6.regexp.flags */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.flags.js"); __webpack_require__(/*! ./modules/es6.regexp.match */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.match.js"); __webpack_require__(/*! ./modules/es6.regexp.replace */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.replace.js"); __webpack_require__(/*! ./modules/es6.regexp.search */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.search.js"); __webpack_require__(/*! ./modules/es6.regexp.split */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.split.js"); __webpack_require__(/*! ./modules/es6.promise */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.promise.js"); __webpack_require__(/*! ./modules/es6.map */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.map.js"); __webpack_require__(/*! ./modules/es6.set */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.set.js"); __webpack_require__(/*! ./modules/es6.weak-map */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-map.js"); __webpack_require__(/*! ./modules/es6.weak-set */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-set.js"); __webpack_require__(/*! ./modules/es6.typed.array-buffer */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.array-buffer.js"); __webpack_require__(/*! ./modules/es6.typed.data-view */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.data-view.js"); __webpack_require__(/*! ./modules/es6.typed.int8-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int8-array.js"); __webpack_require__(/*! ./modules/es6.typed.uint8-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-array.js"); __webpack_require__(/*! ./modules/es6.typed.uint8-clamped-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-clamped-array.js"); __webpack_require__(/*! ./modules/es6.typed.int16-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int16-array.js"); __webpack_require__(/*! ./modules/es6.typed.uint16-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint16-array.js"); __webpack_require__(/*! ./modules/es6.typed.int32-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int32-array.js"); __webpack_require__(/*! ./modules/es6.typed.uint32-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint32-array.js"); __webpack_require__(/*! ./modules/es6.typed.float32-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float32-array.js"); __webpack_require__(/*! ./modules/es6.typed.float64-array */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float64-array.js"); __webpack_require__(/*! ./modules/es6.reflect.apply */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.apply.js"); __webpack_require__(/*! ./modules/es6.reflect.construct */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.construct.js"); __webpack_require__(/*! ./modules/es6.reflect.define-property */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.define-property.js"); __webpack_require__(/*! ./modules/es6.reflect.delete-property */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.delete-property.js"); __webpack_require__(/*! ./modules/es6.reflect.enumerate */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.enumerate.js"); __webpack_require__(/*! ./modules/es6.reflect.get */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get.js"); __webpack_require__(/*! ./modules/es6.reflect.get-own-property-descriptor */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js"); __webpack_require__(/*! ./modules/es6.reflect.get-prototype-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-prototype-of.js"); __webpack_require__(/*! ./modules/es6.reflect.has */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.has.js"); __webpack_require__(/*! ./modules/es6.reflect.is-extensible */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.is-extensible.js"); __webpack_require__(/*! ./modules/es6.reflect.own-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.own-keys.js"); __webpack_require__(/*! ./modules/es6.reflect.prevent-extensions */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.prevent-extensions.js"); __webpack_require__(/*! ./modules/es6.reflect.set */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set.js"); __webpack_require__(/*! ./modules/es6.reflect.set-prototype-of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set-prototype-of.js"); __webpack_require__(/*! ./modules/es7.array.includes */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.includes.js"); __webpack_require__(/*! ./modules/es7.array.flat-map */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.flat-map.js"); __webpack_require__(/*! ./modules/es7.array.flatten */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.flatten.js"); __webpack_require__(/*! ./modules/es7.string.at */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.at.js"); __webpack_require__(/*! ./modules/es7.string.pad-start */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-start.js"); __webpack_require__(/*! ./modules/es7.string.pad-end */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-end.js"); __webpack_require__(/*! ./modules/es7.string.trim-left */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-left.js"); __webpack_require__(/*! ./modules/es7.string.trim-right */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-right.js"); __webpack_require__(/*! ./modules/es7.string.match-all */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.match-all.js"); __webpack_require__(/*! ./modules/es7.symbol.async-iterator */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.async-iterator.js"); __webpack_require__(/*! ./modules/es7.symbol.observable */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.observable.js"); __webpack_require__(/*! ./modules/es7.object.get-own-property-descriptors */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.get-own-property-descriptors.js"); __webpack_require__(/*! ./modules/es7.object.values */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.values.js"); __webpack_require__(/*! ./modules/es7.object.entries */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.entries.js"); __webpack_require__(/*! ./modules/es7.object.define-getter */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-getter.js"); __webpack_require__(/*! ./modules/es7.object.define-setter */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-setter.js"); __webpack_require__(/*! ./modules/es7.object.lookup-getter */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-getter.js"); __webpack_require__(/*! ./modules/es7.object.lookup-setter */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-setter.js"); __webpack_require__(/*! ./modules/es7.map.to-json */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.to-json.js"); __webpack_require__(/*! ./modules/es7.set.to-json */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.to-json.js"); __webpack_require__(/*! ./modules/es7.map.of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.of.js"); __webpack_require__(/*! ./modules/es7.set.of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.of.js"); __webpack_require__(/*! ./modules/es7.weak-map.of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-map.of.js"); __webpack_require__(/*! ./modules/es7.weak-set.of */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-set.of.js"); __webpack_require__(/*! ./modules/es7.map.from */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.from.js"); __webpack_require__(/*! ./modules/es7.set.from */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.from.js"); __webpack_require__(/*! ./modules/es7.weak-map.from */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-map.from.js"); __webpack_require__(/*! ./modules/es7.weak-set.from */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-set.from.js"); __webpack_require__(/*! ./modules/es7.global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.global.js"); __webpack_require__(/*! ./modules/es7.system.global */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.system.global.js"); __webpack_require__(/*! ./modules/es7.error.is-error */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.error.is-error.js"); __webpack_require__(/*! ./modules/es7.math.clamp */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.clamp.js"); __webpack_require__(/*! ./modules/es7.math.deg-per-rad */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.deg-per-rad.js"); __webpack_require__(/*! ./modules/es7.math.degrees */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.degrees.js"); __webpack_require__(/*! ./modules/es7.math.fscale */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.fscale.js"); __webpack_require__(/*! ./modules/es7.math.iaddh */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.iaddh.js"); __webpack_require__(/*! ./modules/es7.math.isubh */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.isubh.js"); __webpack_require__(/*! ./modules/es7.math.imulh */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.imulh.js"); __webpack_require__(/*! ./modules/es7.math.rad-per-deg */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.rad-per-deg.js"); __webpack_require__(/*! ./modules/es7.math.radians */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.radians.js"); __webpack_require__(/*! ./modules/es7.math.scale */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.scale.js"); __webpack_require__(/*! ./modules/es7.math.umulh */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.umulh.js"); __webpack_require__(/*! ./modules/es7.math.signbit */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.signbit.js"); __webpack_require__(/*! ./modules/es7.promise.finally */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.promise.finally.js"); __webpack_require__(/*! ./modules/es7.promise.try */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.promise.try.js"); __webpack_require__(/*! ./modules/es7.reflect.define-metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.define-metadata.js"); __webpack_require__(/*! ./modules/es7.reflect.delete-metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.delete-metadata.js"); __webpack_require__(/*! ./modules/es7.reflect.get-metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata.js"); __webpack_require__(/*! ./modules/es7.reflect.get-metadata-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata-keys.js"); __webpack_require__(/*! ./modules/es7.reflect.get-own-metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata.js"); __webpack_require__(/*! ./modules/es7.reflect.get-own-metadata-keys */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js"); __webpack_require__(/*! ./modules/es7.reflect.has-metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-metadata.js"); __webpack_require__(/*! ./modules/es7.reflect.has-own-metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-own-metadata.js"); __webpack_require__(/*! ./modules/es7.reflect.metadata */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.metadata.js"); __webpack_require__(/*! ./modules/es7.asap */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.asap.js"); __webpack_require__(/*! ./modules/es7.observable */ "./node_modules/babel-polyfill/node_modules/core-js/modules/es7.observable.js"); __webpack_require__(/*! ./modules/web.timers */ "./node_modules/babel-polyfill/node_modules/core-js/modules/web.timers.js"); __webpack_require__(/*! ./modules/web.immediate */ "./node_modules/babel-polyfill/node_modules/core-js/modules/web.immediate.js"); __webpack_require__(/*! ./modules/web.dom.iterable */ "./node_modules/babel-polyfill/node_modules/core-js/modules/web.dom.iterable.js"); module.exports = __webpack_require__(/*! ./modules/_core */ "./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js"); /***/ }), /***/ "./node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js": /*!*********************************************************************************!*\ !*** ./node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js ***! \*********************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {/** * Copyright (c) 2014, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * https://raw.github.com/facebook/regenerator/master/LICENSE file. An * additional grant of patent rights can be found in the PATENTS file in * the same directory. */ !(function(global) { "use strict"; var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; var undefined; // More compressible than void 0. var $Symbol = typeof Symbol === "function" ? Symbol : {}; var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; var inModule = typeof module === "object"; var runtime = global.regeneratorRuntime; if (runtime) { if (inModule) { // If regeneratorRuntime is defined globally and we're in a module, // make the exports object identical to regeneratorRuntime. module.exports = runtime; } // Don't bother evaluating the rest of this file if the runtime was // already defined globally. return; } // Define the runtime globally (as expected by generated code) as either // module.exports (if we're in a module) or a new, empty object. runtime = global.regeneratorRuntime = inModule ? module.exports : {}; function wrap(innerFn, outerFn, self, tryLocsList) { // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; var generator = Object.create(protoGenerator.prototype); var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next, // .throw, and .return methods. generator._invoke = makeInvokeMethod(innerFn, self, context); return generator; } runtime.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion // record like context.tryEntries[i].completion. This interface could // have been (and was previously) designed to take a closure to be // invoked without arguments, but in all the cases we care about we // already have an existing method we want to call, so there's no need // to create a new function object. We can even get away with assuming // the method takes exactly one argument, since that happens to be true // in every case, so we don't have to touch the arguments object. The // only additional allocation required is the completion record, which // has a stable shape and so hopefully should be cheap to allocate. function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; // Returning this object from the innerFn has the same effect as // breaking out of the dispatch switch statement. var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and // .constructor.prototype properties for functions that return Generator // objects. For full spec compliance, you may wish to configure your // minifier not to mangle the names of these two functions. function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that // don't natively support it. var IteratorPrototype = {}; IteratorPrototype[iteratorSymbol] = function () { return this; }; var getProto = Object.getPrototypeOf; var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { // This environment has a native %IteratorPrototype%; use it instead // of the polyfill. IteratorPrototype = NativeIteratorPrototype; } var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; // Helper for defining the .next, .throw, and .return methods of the // Iterator interface in terms of a single ._invoke method. function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function(method) { prototype[method] = function(arg) { return this._invoke(method, arg); }; }); } runtime.isGeneratorFunction = function(genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can // do is to check its .name property. (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; runtime.mark = function(genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; if (!(toStringTagSymbol in genFun)) { genFun[toStringTagSymbol] = "GeneratorFunction"; } } genFun.prototype = Object.create(Gp); return genFun; }; // Within the body of any async function, `await x` is transformed to // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test // `hasOwn.call(value, "__await")` to determine if the yielded value is // meant to be awaited. runtime.awrap = function(arg) { return { __await: arg }; }; function AsyncIterator(generator) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (record.type === "throw") { reject(record.arg); } else { var result = record.arg; var value = result.value; if (value && typeof value === "object" && hasOwn.call(value, "__await")) { return Promise.resolve(value.__await).then(function(value) { invoke("next", value, resolve, reject); }, function(err) { invoke("throw", err, resolve, reject); }); } return Promise.resolve(value).then(function(unwrapped) { // When a yielded Promise is resolved, its final value becomes // the .value of the Promise<{value,done}> result for the // current iteration. If the Promise is rejected, however, the // result for this iteration will be rejected with the same // reason. Note that rejections of yielded Promises are not // thrown back into the generator function, as is the case // when an awaited Promise is rejected. This difference in // behavior between yield and await is important, because it // allows the consumer to decide what to do with the yielded // rejection (swallow it and continue, manually .throw it back // into the generator, abandon iteration, whatever). With // await, by contrast, there is no opportunity to examine the // rejection reason outside the generator function, so the // only option is to throw it from the await expression, and // let the generator function handle the exception. result.value = unwrapped; resolve(result); }, reject); } } if (typeof global.process === "object" && global.process.domain) { invoke = global.process.domain.bind(invoke); } var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return new Promise(function(resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = // If enqueue has been called before, then we want to wait until // all previous Promises have been resolved before calling invoke, // so that results are always delivered in the correct order. If // enqueue has not been called before, then it is important to // call invoke immediately, without waiting on a callback to fire, // so that the async generator function has the opportunity to do // any necessary setup in a predictable way. This predictability // is why the Promise constructor synchronously invokes its // executor callback, and why async functions synchronously // execute code before the first await. Since we implement simple // async functions in terms of async generators, it is especially // important to get this right, even though it requires care. previousPromise ? previousPromise.then( callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later // invocations of the iterator. callInvokeWithMethodAndArg ) : callInvokeWithMethodAndArg(); } // Define the unified helper method that is used to implement .next, // .throw, and .return (see defineIteratorMethods). this._invoke = enqueue; } defineIteratorMethods(AsyncIterator.prototype); AsyncIterator.prototype[asyncIteratorSymbol] = function () { return this; }; runtime.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of // AsyncIterator objects; they just return a Promise for the value of // the final result produced by the iterator. runtime.async = function(innerFn, outerFn, self, tryLocsList) { var iter = new AsyncIterator( wrap(innerFn, outerFn, self, tryLocsList) ); return runtime.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. : iter.next().then(function(result) { return result.done ? result.value : iter.next(); }); }; function makeInvokeMethod(innerFn, self, context) { var state = GenStateSuspendedStart; return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } if (state === GenStateCompleted) { if (method === "throw") { throw arg; } // Be forgiving, per 25.3.3.3.3 of the spec: // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume return doneResult(); } context.method = method; context.arg = arg; while (true) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (context.method === "next") { // Setting context._sent for legacy support of Babel's // function.sent implementation. context.sent = context._sent = context.arg; } else if (context.method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw context.arg; } context.dispatchException(context.arg); } else if (context.method === "return") { context.abrupt("return", context.arg); } state = GenStateExecuting; var record = tryCatch(innerFn, self, context); if (record.type === "normal") { // If an exception is thrown from innerFn, we leave state === // GenStateExecuting and loop back for another invocation. state = context.done ? GenStateCompleted : GenStateSuspendedYield; if (record.arg === ContinueSentinel) { continue; } return { value: record.arg, done: context.done }; } else if (record.type === "throw") { state = GenStateCompleted; // Dispatch the exception by looping back around to the // context.dispatchException(context.arg) call above. context.method = "throw"; context.arg = record.arg; } } }; } // Call delegate.iterator[context.method](context.arg) and handle the // result, either by returning a { value, done } result from the // delegate iterator, or by modifying context.method and context.arg, // setting context.delegate to null, and returning the ContinueSentinel. function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (method === undefined) { // A .throw or .return when the delegate iterator has no .throw // method always terminates the yield* loop. context.delegate = null; if (context.method === "throw") { if (delegate.iterator.return) { // If the delegate iterator has a return method, give it a // chance to clean up. context.method = "return"; context.arg = undefined; maybeInvokeDelegate(delegate, context); if (context.method === "throw") { // If maybeInvokeDelegate(context) changed context.method from // "return" to "throw", let that override the TypeError below. return ContinueSentinel; } } context.method = "throw"; context.arg = new TypeError( "The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (record.type === "throw") { context.method = "throw"; context.arg = record.arg; context.delegate = null; return ContinueSentinel; } var info = record.arg; if (! info) { context.method = "throw"; context.arg = new TypeError("iterator result is not an object"); context.delegate = null; return ContinueSentinel; } if (info.done) { // Assign the result of the finished delegate to the temporary // variable specified by delegate.resultName (see delegateYield). context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield). context.next = delegate.nextLoc; // If context.method was "throw" but the delegate handled the // exception, let the outer generator proceed normally. If // context.method was "next", forget context.arg since it has been // "consumed" by the delegate iterator. If context.method was // "return", allow the original .return call to continue in the // outer generator. if (context.method !== "return") { context.method = "next"; context.arg = undefined; } } else { // Re-yield the result returned by the delegate method. return info; } // The delegate iterator is finished, so forget it and continue with // the outer generator. context.delegate = null; return ContinueSentinel; } // Define Generator.prototype.{next,throw,return} in terms of the // unified ._invoke helper method. defineIteratorMethods(Gp); Gp[toStringTagSymbol] = "Generator"; // A Generator should always return itself as the iterator object when the // @@iterator function is called on it. Some browsers' implementations of the // iterator prototype chain incorrectly implement this, causing the Generator // object to not be returned from this call. This ensures that doesn't happen. // See https://github.com/facebook/regenerator/issues/274 for more details. Gp[iteratorSymbol] = function() { return this; }; Gp.toString = function() { return "[object Generator]"; }; function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; if (1 in locs) { entry.catchLoc = locs[1]; } if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } function Context(tryLocsList) { // The root entry object (effectively a try statement without a catch // or a finally block) gives us a place to store values thrown from // locations where there is no enclosing try statement. this.tryEntries = [{ tryLoc: "root" }]; tryLocsList.forEach(pushTryEntry, this); this.reset(true); } runtime.keys = function(object) { var keys = []; for (var key in object) { keys.push(key); } keys.reverse(); // Rather than returning an object with a next method, we keep // things simple and return the next function itself. return function next() { while (keys.length) { var key = keys.pop(); if (key in object) { next.value = key; next.done = false; return next; } } // To avoid creating an additional object, we just hang the .value // and .done properties off the next function object itself. This // also ensures that the minifier will not anonymize the function. next.done = true; return next; }; }; function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } if (typeof iterable.next === "function") { return iterable; } if (!isNaN(iterable.length)) { var i = -1, next = function next() { while (++i < iterable.length) { if (hasOwn.call(iterable, i)) { next.value = iterable[i]; next.done = false; return next; } } next.value = undefined; next.done = true; return next; }; return next.next = next; } } // Return an iterator with no values. return { next: doneResult }; } runtime.values = values; function doneResult() { return { value: undefined, done: true }; } Context.prototype = { constructor: Context, reset: function(skipTempReset) { this.prev = 0; this.next = 0; // Resetting context._sent for legacy support of Babel's // function.sent implementation. this.sent = this._sent = undefined; this.done = false; this.delegate = null; this.method = "next"; this.arg = undefined; this.tryEntries.forEach(resetTryEntry); if (!skipTempReset) { for (var name in this) { // Not sure about the optimal order of these conditions: if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { this[name] = undefined; } } } }, stop: function() { this.done = true; var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } return this.rval; }, dispatchException: function(exception) { if (this.done) { throw exception; } var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; if (caught) { // If the dispatched exception was caught by a catch block, // then let that catch block handle the exception normally. context.method = "next"; context.arg = undefined; } return !! caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { // Exception thrown outside of any try block that could handle // it, so set the completion value of the entire function to // throw the exception. return handle("end"); } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else { throw new Error("try statement without catch or finally"); } } } }, abrupt: function(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { // Ignore the finally entry if control is not jumping to a // location outside the try/catch block. finallyEntry = null; } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel; } return this.complete(record); }, complete: function(record, afterLoc) { if (record.type === "throw") { throw record.arg; } if (record.type === "break" || record.type === "continue") { this.next = record.arg; } else if (record.type === "return") { this.rval = this.arg = record.arg; this.method = "return"; this.next = "end"; } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } return ContinueSentinel; }, finish: function(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel; } } }, "catch": function(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } // The context.catch method must only be called with a location // argument that corresponds to a known catch block. throw new Error("illegal catch attempt"); }, delegateYield: function(iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; if (this.method === "next") { // Deliberately forget the last sent value so that we don't // accidentally pass it on to the delegate. this.arg = undefined; } return ContinueSentinel; } }; })( // Among the various tricks for obtaining a reference to the global // object, this seems to be the most reliable technique that does not // use indirect eval (which violates Content Security Policy). typeof global === "object" ? global : typeof window === "object" ? window : typeof self === "object" ? self : this ); /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) /***/ }), /***/ "./node_modules/base64-js/index.js": /*!*****************************************!*\ !*** ./node_modules/base64-js/index.js ***! \*****************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; exports.byteLength = byteLength exports.toByteArray = toByteArray exports.fromByteArray = fromByteArray var lookup = [] var revLookup = [] var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' for (var i = 0, len = code.length; i < len; ++i) { lookup[i] = code[i] revLookup[code.charCodeAt(i)] = i } // Support decoding URL-safe base64 strings, as Node.js does. // See: https://en.wikipedia.org/wiki/Base64#URL_applications revLookup['-'.charCodeAt(0)] = 62 revLookup['_'.charCodeAt(0)] = 63 function getLens (b64) { var len = b64.length if (len % 4 > 0) { throw new Error('Invalid string. Length must be a multiple of 4') } // Trim off extra bytes after placeholder bytes are found // See: https://github.com/beatgammit/base64-js/issues/42 var validLen = b64.indexOf('=') if (validLen === -1) validLen = len var placeHoldersLen = validLen === len ? 0 : 4 - (validLen % 4) return [validLen, placeHoldersLen] } // base64 is 4/3 + up to two characters of the original data function byteLength (b64) { var lens = getLens(b64) var validLen = lens[0] var placeHoldersLen = lens[1] return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen } function _byteLength (b64, validLen, placeHoldersLen) { return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen } function toByteArray (b64) { var tmp var lens = getLens(b64) var validLen = lens[0] var placeHoldersLen = lens[1] var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) var curByte = 0 // if there are placeholders, only get up to the last complete 4 chars var len = placeHoldersLen > 0 ? validLen - 4 : validLen var i for (i = 0; i < len; i += 4) { tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] arr[curByte++] = (tmp >> 16) & 0xFF arr[curByte++] = (tmp >> 8) & 0xFF arr[curByte++] = tmp & 0xFF } if (placeHoldersLen === 2) { tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) arr[curByte++] = tmp & 0xFF } if (placeHoldersLen === 1) { tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) arr[curByte++] = (tmp >> 8) & 0xFF arr[curByte++] = tmp & 0xFF } return arr } function tripletToBase64 (num) { return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] } function encodeChunk (uint8, start, end) { var tmp var output = [] for (var i = start; i < end; i += 3) { tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF) output.push(tripletToBase64(tmp)) } return output.join('') } function fromByteArray (uint8) { var tmp var len = uint8.length var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes var parts = [] var maxChunkLength = 16383 // must be multiple of 3 // go through the array every three bytes, we'll deal with trailing stuff later for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) } // pad the end with zeros, but make sure to not forget the extra bytes if (extraBytes === 1) { tmp = uint8[len - 1] parts.push( lookup[tmp >> 2] + lookup[(tmp << 4) & 0x3F] + '==' ) } else if (extraBytes === 2) { tmp = (uint8[len - 2] << 8) + uint8[len - 1] parts.push( lookup[tmp >> 10] + lookup[(tmp >> 4) & 0x3F] + lookup[(tmp << 2) & 0x3F] + '=' ) } return parts.join('') } /***/ }), /***/ "./node_modules/buffer/index.js": /*!**************************************!*\ !*** ./node_modules/buffer/index.js ***! \**************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(global) {/*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT */ /* eslint-disable no-proto */ var base64 = __webpack_require__(/*! base64-js */ "./node_modules/base64-js/index.js") var ieee754 = __webpack_require__(/*! ieee754 */ "./node_modules/ieee754/index.js") var isArray = __webpack_require__(/*! isarray */ "./node_modules/isarray/index.js") exports.Buffer = Buffer exports.SlowBuffer = SlowBuffer exports.INSPECT_MAX_BYTES = 50 /** * If `Buffer.TYPED_ARRAY_SUPPORT`: * === true Use Uint8Array implementation (fastest) * === false Use Object implementation (most compatible, even IE6) * * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, * Opera 11.6+, iOS 4.2+. * * Due to various browser bugs, sometimes the Object implementation will be used even * when the browser supports typed arrays. * * Note: * * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. * * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. * * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of * incorrect length in some situations. * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they * get the Object implementation, which is slower but behaves correctly. */ Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport() /* * Export kMaxLength after typed array support is determined. */ exports.kMaxLength = kMaxLength() function typedArraySupport () { try { var arr = new Uint8Array(1) arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} return arr.foo() === 42 && // typed array instances can be augmented typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` } catch (e) { return false } } function kMaxLength () { return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff } function createBuffer (that, length) { if (kMaxLength() < length) { throw new RangeError('Invalid typed array length') } if (Buffer.TYPED_ARRAY_SUPPORT) { // Return an augmented `Uint8Array` instance, for best performance that = new Uint8Array(length) that.__proto__ = Buffer.prototype } else { // Fallback: Return an object instance of the Buffer class if (that === null) { that = new Buffer(length) } that.length = length } return that } /** * The Buffer constructor returns instances of `Uint8Array` that have their * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of * `Uint8Array`, so the returned instances will have all the node `Buffer` methods * and the `Uint8Array` methods. Square bracket notation works as expected -- it * returns a single octet. * * The `Uint8Array` prototype remains unmodified. */ function Buffer (arg, encodingOrOffset, length) { if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { return new Buffer(arg, encodingOrOffset, length) } // Common case. if (typeof arg === 'number') { if (typeof encodingOrOffset === 'string') { throw new Error( 'If encoding is specified then the first argument must be a string' ) } return allocUnsafe(this, arg) } return from(this, arg, encodingOrOffset, length) } Buffer.poolSize = 8192 // not used by this implementation // TODO: Legacy, not needed anymore. Remove in next major version. Buffer._augment = function (arr) { arr.__proto__ = Buffer.prototype return arr } function from (that, value, encodingOrOffset, length) { if (typeof value === 'number') { throw new TypeError('"value" argument must not be a number') } if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { return fromArrayBuffer(that, value, encodingOrOffset, length) } if (typeof value === 'string') { return fromString(that, value, encodingOrOffset) } return fromObject(that, value) } /** * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError * if value is a number. * Buffer.from(str[, encoding]) * Buffer.from(array) * Buffer.from(buffer) * Buffer.from(arrayBuffer[, byteOffset[, length]]) **/ Buffer.from = function (value, encodingOrOffset, length) { return from(null, value, encodingOrOffset, length) } if (Buffer.TYPED_ARRAY_SUPPORT) { Buffer.prototype.__proto__ = Uint8Array.prototype Buffer.__proto__ = Uint8Array if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) { // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 Object.defineProperty(Buffer, Symbol.species, { value: null, configurable: true }) } } function assertSize (size) { if (typeof size !== 'number') { throw new TypeError('"size" argument must be a number') } else if (size < 0) { throw new RangeError('"size" argument must not be negative') } } function alloc (that, size, fill, encoding) { assertSize(size) if (size <= 0) { return createBuffer(that, size) } if (fill !== undefined) { // Only pay attention to encoding if it's a string. This // prevents accidentally sending in a number that would // be interpretted as a start offset. return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill) } return createBuffer(that, size) } /** * Creates a new filled Buffer instance. * alloc(size[, fill[, encoding]]) **/ Buffer.alloc = function (size, fill, encoding) { return alloc(null, size, fill, encoding) } function allocUnsafe (that, size) { assertSize(size) that = createBuffer(that, size < 0 ? 0 : checked(size) | 0) if (!Buffer.TYPED_ARRAY_SUPPORT) { for (var i = 0; i < size; ++i) { that[i] = 0 } } return that } /** * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. * */ Buffer.allocUnsafe = function (size) { return allocUnsafe(null, size) } /** * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. */ Buffer.allocUnsafeSlow = function (size) { return allocUnsafe(null, size) } function fromString (that, string, encoding) { if (typeof encoding !== 'string' || encoding === '') { encoding = 'utf8' } if (!Buffer.isEncoding(encoding)) { throw new TypeError('"encoding" must be a valid string encoding') } var length = byteLength(string, encoding) | 0 that = createBuffer(that, length) var actual = that.write(string, encoding) if (actual !== length) { // Writing a hex string, for example, that contains invalid characters will // cause everything after the first invalid character to be ignored. (e.g. // 'abxxcd' will be treated as 'ab') that = that.slice(0, actual) } return that } function fromArrayLike (that, array) { var length = array.length < 0 ? 0 : checked(array.length) | 0 that = createBuffer(that, length) for (var i = 0; i < length; i += 1) { that[i] = array[i] & 255 } return that } function fromArrayBuffer (that, array, byteOffset, length) { array.byteLength // this throws if `array` is not a valid ArrayBuffer if (byteOffset < 0 || array.byteLength < byteOffset) { throw new RangeError('\'offset\' is out of bounds') } if (array.byteLength < byteOffset + (length || 0)) { throw new RangeError('\'length\' is out of bounds') } if (byteOffset === undefined && length === undefined) { array = new Uint8Array(array) } else if (length === undefined) { array = new Uint8Array(array, byteOffset) } else { array = new Uint8Array(array, byteOffset, length) } if (Buffer.TYPED_ARRAY_SUPPORT) { // Return an augmented `Uint8Array` instance, for best performance that = array that.__proto__ = Buffer.prototype } else { // Fallback: Return an object instance of the Buffer class that = fromArrayLike(that, array) } return that } function fromObject (that, obj) { if (Buffer.isBuffer(obj)) { var len = checked(obj.length) | 0 that = createBuffer(that, len) if (that.length === 0) { return that } obj.copy(that, 0, 0, len) return that } if (obj) { if ((typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer) || 'length' in obj) { if (typeof obj.length !== 'number' || isnan(obj.length)) { return createBuffer(that, 0) } return fromArrayLike(that, obj) } if (obj.type === 'Buffer' && isArray(obj.data)) { return fromArrayLike(that, obj.data) } } throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') } function checked (length) { // Note: cannot use `length < kMaxLength()` here because that fails when // length is NaN (which is otherwise coerced to zero.) if (length >= kMaxLength()) { throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes') } return length | 0 } function SlowBuffer (length) { if (+length != length) { // eslint-disable-line eqeqeq length = 0 } return Buffer.alloc(+length) } Buffer.isBuffer = function isBuffer (b) { return !!(b != null && b._isBuffer) } Buffer.compare = function compare (a, b) { if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { throw new TypeError('Arguments must be Buffers') } if (a === b) return 0 var x = a.length var y = b.length for (var i = 0, len = Math.min(x, y); i < len; ++i) { if (a[i] !== b[i]) { x = a[i] y = b[i] break } } if (x < y) return -1 if (y < x) return 1 return 0 } Buffer.isEncoding = function isEncoding (encoding) { switch (String(encoding).toLowerCase()) { case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'latin1': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return true default: return false } } Buffer.concat = function concat (list, length) { if (!isArray(list)) { throw new TypeError('"list" argument must be an Array of Buffers') } if (list.length === 0) { return Buffer.alloc(0) } var i if (length === undefined) { length = 0 for (i = 0; i < list.length; ++i) { length += list[i].length } } var buffer = Buffer.allocUnsafe(length) var pos = 0 for (i = 0; i < list.length; ++i) { var buf = list[i] if (!Buffer.isBuffer(buf)) { throw new TypeError('"list" argument must be an Array of Buffers') } buf.copy(buffer, pos) pos += buf.length } return buffer } function byteLength (string, encoding) { if (Buffer.isBuffer(string)) { return string.length } if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { return string.byteLength } if (typeof string !== 'string') { string = '' + string } var len = string.length if (len === 0) return 0 // Use a for loop to avoid recursion var loweredCase = false for (;;) { switch (encoding) { case 'ascii': case 'latin1': case 'binary': return len case 'utf8': case 'utf-8': case undefined: return utf8ToBytes(string).length case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return len * 2 case 'hex': return len >>> 1 case 'base64': return base64ToBytes(string).length default: if (loweredCase) return utf8ToBytes(string).length // assume utf8 encoding = ('' + encoding).toLowerCase() loweredCase = true } } } Buffer.byteLength = byteLength function slowToString (encoding, start, end) { var loweredCase = false // No need to verify that "this.length <= MAX_UINT32" since it's a read-only // property of a typed array. // This behaves neither like String nor Uint8Array in that we set start/end // to their upper/lower bounds if the value passed is out of range. // undefined is handled specially as per ECMA-262 6th Edition, // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. if (start === undefined || start < 0) { start = 0 } // Return early if start > this.length. Done here to prevent potential uint32 // coercion fail below. if (start > this.length) { return '' } if (end === undefined || end > this.length) { end = this.length } if (end <= 0) { return '' } // Force coersion to uint32. This will also coerce falsey/NaN values to 0. end >>>= 0 start >>>= 0 if (end <= start) { return '' } if (!encoding) encoding = 'utf8' while (true) { switch (encoding) { case 'hex': return hexSlice(this, start, end) case 'utf8': case 'utf-8': return utf8Slice(this, start, end) case 'ascii': return asciiSlice(this, start, end) case 'latin1': case 'binary': return latin1Slice(this, start, end) case 'base64': return base64Slice(this, start, end) case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return utf16leSlice(this, start, end) default: if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) encoding = (encoding + '').toLowerCase() loweredCase = true } } } // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect // Buffer instances. Buffer.prototype._isBuffer = true function swap (b, n, m) { var i = b[n] b[n] = b[m] b[m] = i } Buffer.prototype.swap16 = function swap16 () { var len = this.length if (len % 2 !== 0) { throw new RangeError('Buffer size must be a multiple of 16-bits') } for (var i = 0; i < len; i += 2) { swap(this, i, i + 1) } return this } Buffer.prototype.swap32 = function swap32 () { var len = this.length if (len % 4 !== 0) { throw new RangeError('Buffer size must be a multiple of 32-bits') } for (var i = 0; i < len; i += 4) { swap(this, i, i + 3) swap(this, i + 1, i + 2) } return this } Buffer.prototype.swap64 = function swap64 () { var len = this.length if (len % 8 !== 0) { throw new RangeError('Buffer size must be a multiple of 64-bits') } for (var i = 0; i < len; i += 8) { swap(this, i, i + 7) swap(this, i + 1, i + 6) swap(this, i + 2, i + 5) swap(this, i + 3, i + 4) } return this } Buffer.prototype.toString = function toString () { var length = this.length | 0 if (length === 0) return '' if (arguments.length === 0) return utf8Slice(this, 0, length) return slowToString.apply(this, arguments) } Buffer.prototype.equals = function equals (b) { if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') if (this === b) return true return Buffer.compare(this, b) === 0 } Buffer.prototype.inspect = function inspect () { var str = '' var max = exports.INSPECT_MAX_BYTES if (this.length > 0) { str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') if (this.length > max) str += ' ... ' } return '' } Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { if (!Buffer.isBuffer(target)) { throw new TypeError('Argument must be a Buffer') } if (start === undefined) { start = 0 } if (end === undefined) { end = target ? target.length : 0 } if (thisStart === undefined) { thisStart = 0 } if (thisEnd === undefined) { thisEnd = this.length } if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { throw new RangeError('out of range index') } if (thisStart >= thisEnd && start >= end) { return 0 } if (thisStart >= thisEnd) { return -1 } if (start >= end) { return 1 } start >>>= 0 end >>>= 0 thisStart >>>= 0 thisEnd >>>= 0 if (this === target) return 0 var x = thisEnd - thisStart var y = end - start var len = Math.min(x, y) var thisCopy = this.slice(thisStart, thisEnd) var targetCopy = target.slice(start, end) for (var i = 0; i < len; ++i) { if (thisCopy[i] !== targetCopy[i]) { x = thisCopy[i] y = targetCopy[i] break } } if (x < y) return -1 if (y < x) return 1 return 0 } // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, // OR the last index of `val` in `buffer` at offset <= `byteOffset`. // // Arguments: // - buffer - a Buffer to search // - val - a string, Buffer, or number // - byteOffset - an index into `buffer`; will be clamped to an int32 // - encoding - an optional encoding, relevant is val is a string // - dir - true for indexOf, false for lastIndexOf function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { // Empty buffer means no match if (buffer.length === 0) return -1 // Normalize byteOffset if (typeof byteOffset === 'string') { encoding = byteOffset byteOffset = 0 } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff } else if (byteOffset < -0x80000000) { byteOffset = -0x80000000 } byteOffset = +byteOffset // Coerce to Number. if (isNaN(byteOffset)) { // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer byteOffset = dir ? 0 : (buffer.length - 1) } // Normalize byteOffset: negative offsets start from the end of the buffer if (byteOffset < 0) byteOffset = buffer.length + byteOffset if (byteOffset >= buffer.length) { if (dir) return -1 else byteOffset = buffer.length - 1 } else if (byteOffset < 0) { if (dir) byteOffset = 0 else return -1 } // Normalize val if (typeof val === 'string') { val = Buffer.from(val, encoding) } // Finally, search either indexOf (if dir is true) or lastIndexOf if (Buffer.isBuffer(val)) { // Special case: looking for empty string/buffer always fails if (val.length === 0) { return -1 } return arrayIndexOf(buffer, val, byteOffset, encoding, dir) } else if (typeof val === 'number') { val = val & 0xFF // Search for a byte value [0-255] if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') { if (dir) { return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) } else { return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) } } return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) } throw new TypeError('val must be string, number or Buffer') } function arrayIndexOf (arr, val, byteOffset, encoding, dir) { var indexSize = 1 var arrLength = arr.length var valLength = val.length if (encoding !== undefined) { encoding = String(encoding).toLowerCase() if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') { if (arr.length < 2 || val.length < 2) { return -1 } indexSize = 2 arrLength /= 2 valLength /= 2 byteOffset /= 2 } } function read (buf, i) { if (indexSize === 1) { return buf[i] } else { return buf.readUInt16BE(i * indexSize) } } var i if (dir) { var foundIndex = -1 for (i = byteOffset; i < arrLength; i++) { if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { if (foundIndex === -1) foundIndex = i if (i - foundIndex + 1 === valLength) return foundIndex * indexSize } else { if (foundIndex !== -1) i -= i - foundIndex foundIndex = -1 } } } else { if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength for (i = byteOffset; i >= 0; i--) { var found = true for (var j = 0; j < valLength; j++) { if (read(arr, i + j) !== read(val, j)) { found = false break } } if (found) return i } } return -1 } Buffer.prototype.includes = function includes (val, byteOffset, encoding) { return this.indexOf(val, byteOffset, encoding) !== -1 } Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, true) } Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, false) } function hexWrite (buf, string, offset, length) { offset = Number(offset) || 0 var remaining = buf.length - offset if (!length) { length = remaining } else { length = Number(length) if (length > remaining) { length = remaining } } // must be an even number of digits var strLen = string.length if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') if (length > strLen / 2) { length = strLen / 2 } for (var i = 0; i < length; ++i) { var parsed = parseInt(string.substr(i * 2, 2), 16) if (isNaN(parsed)) return i buf[offset + i] = parsed } return i } function utf8Write (buf, string, offset, length) { return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) } function asciiWrite (buf, string, offset, length) { return blitBuffer(asciiToBytes(string), buf, offset, length) } function latin1Write (buf, string, offset, length) { return asciiWrite(buf, string, offset, length) } function base64Write (buf, string, offset, length) { return blitBuffer(base64ToBytes(string), buf, offset, length) } function ucs2Write (buf, string, offset, length) { return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) } Buffer.prototype.write = function write (string, offset, length, encoding) { // Buffer#write(string) if (offset === undefined) { encoding = 'utf8' length = this.length offset = 0 // Buffer#write(string, encoding) } else if (length === undefined && typeof offset === 'string') { encoding = offset length = this.length offset = 0 // Buffer#write(string, offset[, length][, encoding]) } else if (isFinite(offset)) { offset = offset | 0 if (isFinite(length)) { length = length | 0 if (encoding === undefined) encoding = 'utf8' } else { encoding = length length = undefined } // legacy write(string, encoding, offset, length) - remove in v0.13 } else { throw new Error( 'Buffer.write(string, encoding, offset[, length]) is no longer supported' ) } var remaining = this.length - offset if (length === undefined || length > remaining) length = remaining if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { throw new RangeError('Attempt to write outside buffer bounds') } if (!encoding) encoding = 'utf8' var loweredCase = false for (;;) { switch (encoding) { case 'hex': return hexWrite(this, string, offset, length) case 'utf8': case 'utf-8': return utf8Write(this, string, offset, length) case 'ascii': return asciiWrite(this, string, offset, length) case 'latin1': case 'binary': return latin1Write(this, string, offset, length) case 'base64': // Warning: maxLength not taken into account in base64Write return base64Write(this, string, offset, length) case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return ucs2Write(this, string, offset, length) default: if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) encoding = ('' + encoding).toLowerCase() loweredCase = true } } } Buffer.prototype.toJSON = function toJSON () { return { type: 'Buffer', data: Array.prototype.slice.call(this._arr || this, 0) } } function base64Slice (buf, start, end) { if (start === 0 && end === buf.length) { return base64.fromByteArray(buf) } else { return base64.fromByteArray(buf.slice(start, end)) } } function utf8Slice (buf, start, end) { end = Math.min(buf.length, end) var res = [] var i = start while (i < end) { var firstByte = buf[i] var codePoint = null var bytesPerSequence = (firstByte > 0xEF) ? 4 : (firstByte > 0xDF) ? 3 : (firstByte > 0xBF) ? 2 : 1 if (i + bytesPerSequence <= end) { var secondByte, thirdByte, fourthByte, tempCodePoint switch (bytesPerSequence) { case 1: if (firstByte < 0x80) { codePoint = firstByte } break case 2: secondByte = buf[i + 1] if ((secondByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) if (tempCodePoint > 0x7F) { codePoint = tempCodePoint } } break case 3: secondByte = buf[i + 1] thirdByte = buf[i + 2] if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { codePoint = tempCodePoint } } break case 4: secondByte = buf[i + 1] thirdByte = buf[i + 2] fourthByte = buf[i + 3] if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { codePoint = tempCodePoint } } } } if (codePoint === null) { // we did not generate a valid codePoint so insert a // replacement char (U+FFFD) and advance only 1 byte codePoint = 0xFFFD bytesPerSequence = 1 } else if (codePoint > 0xFFFF) { // encode to utf16 (surrogate pair dance) codePoint -= 0x10000 res.push(codePoint >>> 10 & 0x3FF | 0xD800) codePoint = 0xDC00 | codePoint & 0x3FF } res.push(codePoint) i += bytesPerSequence } return decodeCodePointsArray(res) } // Based on http://stackoverflow.com/a/22747272/680742, the browser with // the lowest limit is Chrome, with 0x10000 args. // We go 1 magnitude less, for safety var MAX_ARGUMENTS_LENGTH = 0x1000 function decodeCodePointsArray (codePoints) { var len = codePoints.length if (len <= MAX_ARGUMENTS_LENGTH) { return String.fromCharCode.apply(String, codePoints) // avoid extra slice() } // Decode in chunks to avoid "call stack size exceeded". var res = '' var i = 0 while (i < len) { res += String.fromCharCode.apply( String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) ) } return res } function asciiSlice (buf, start, end) { var ret = '' end = Math.min(buf.length, end) for (var i = start; i < end; ++i) { ret += String.fromCharCode(buf[i] & 0x7F) } return ret } function latin1Slice (buf, start, end) { var ret = '' end = Math.min(buf.length, end) for (var i = start; i < end; ++i) { ret += String.fromCharCode(buf[i]) } return ret } function hexSlice (buf, start, end) { var len = buf.length if (!start || start < 0) start = 0 if (!end || end < 0 || end > len) end = len var out = '' for (var i = start; i < end; ++i) { out += toHex(buf[i]) } return out } function utf16leSlice (buf, start, end) { var bytes = buf.slice(start, end) var res = '' for (var i = 0; i < bytes.length; i += 2) { res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) } return res } Buffer.prototype.slice = function slice (start, end) { var len = this.length start = ~~start end = end === undefined ? len : ~~end if (start < 0) { start += len if (start < 0) start = 0 } else if (start > len) { start = len } if (end < 0) { end += len if (end < 0) end = 0 } else if (end > len) { end = len } if (end < start) end = start var newBuf if (Buffer.TYPED_ARRAY_SUPPORT) { newBuf = this.subarray(start, end) newBuf.__proto__ = Buffer.prototype } else { var sliceLen = end - start newBuf = new Buffer(sliceLen, undefined) for (var i = 0; i < sliceLen; ++i) { newBuf[i] = this[i + start] } } return newBuf } /* * Need to make sure that buffer isn't trying to write out of bounds. */ function checkOffset (offset, ext, length) { if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') } Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var val = this[offset] var mul = 1 var i = 0 while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul } return val } Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) { checkOffset(offset, byteLength, this.length) } var val = this[offset + --byteLength] var mul = 1 while (byteLength > 0 && (mul *= 0x100)) { val += this[offset + --byteLength] * mul } return val } Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { if (!noAssert) checkOffset(offset, 1, this.length) return this[offset] } Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length) return this[offset] | (this[offset + 1] << 8) } Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length) return (this[offset] << 8) | this[offset + 1] } Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return ((this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16)) + (this[offset + 3] * 0x1000000) } Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset] * 0x1000000) + ((this[offset + 1] << 16) | (this[offset + 2] << 8) | this[offset + 3]) } Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var val = this[offset] var mul = 1 var i = 0 while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul } mul *= 0x80 if (val >= mul) val -= Math.pow(2, 8 * byteLength) return val } Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var i = byteLength var mul = 1 var val = this[offset + --i] while (i > 0 && (mul *= 0x100)) { val += this[offset + --i] * mul } mul *= 0x80 if (val >= mul) val -= Math.pow(2, 8 * byteLength) return val } Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { if (!noAssert) checkOffset(offset, 1, this.length) if (!(this[offset] & 0x80)) return (this[offset]) return ((0xff - this[offset] + 1) * -1) } Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length) var val = this[offset] | (this[offset + 1] << 8) return (val & 0x8000) ? val | 0xFFFF0000 : val } Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length) var val = this[offset + 1] | (this[offset] << 8) return (val & 0x8000) ? val | 0xFFFF0000 : val } Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16) | (this[offset + 3] << 24) } Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset] << 24) | (this[offset + 1] << 16) | (this[offset + 2] << 8) | (this[offset + 3]) } Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return ieee754.read(this, offset, true, 23, 4) } Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return ieee754.read(this, offset, false, 23, 4) } Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { if (!noAssert) checkOffset(offset, 8, this.length) return ieee754.read(this, offset, true, 52, 8) } Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { if (!noAssert) checkOffset(offset, 8, this.length) return ieee754.read(this, offset, false, 52, 8) } function checkInt (buf, value, offset, ext, max, min) { if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') if (offset + ext > buf.length) throw new RangeError('Index out of range') } Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { value = +value offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) { var maxBytes = Math.pow(2, 8 * byteLength) - 1 checkInt(this, value, offset, byteLength, maxBytes, 0) } var mul = 1 var i = 0 this[offset] = value & 0xFF while (++i < byteLength && (mul *= 0x100)) { this[offset + i] = (value / mul) & 0xFF } return offset + byteLength } Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { value = +value offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) { var maxBytes = Math.pow(2, 8 * byteLength) - 1 checkInt(this, value, offset, byteLength, maxBytes, 0) } var i = byteLength - 1 var mul = 1 this[offset + i] = value & 0xFF while (--i >= 0 && (mul *= 0x100)) { this[offset + i] = (value / mul) & 0xFF } return offset + byteLength } Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) this[offset] = (value & 0xff) return offset + 1 } function objectWriteUInt16 (buf, value, offset, littleEndian) { if (value < 0) value = 0xffff + value + 1 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> (littleEndian ? i : 1 - i) * 8 } } Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) } else { objectWriteUInt16(this, value, offset, true) } return offset + 2 } Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8) this[offset + 1] = (value & 0xff) } else { objectWriteUInt16(this, value, offset, false) } return offset + 2 } function objectWriteUInt32 (buf, value, offset, littleEndian) { if (value < 0) value = 0xffffffff + value + 1 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff } } Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset + 3] = (value >>> 24) this[offset + 2] = (value >>> 16) this[offset + 1] = (value >>> 8) this[offset] = (value & 0xff) } else { objectWriteUInt32(this, value, offset, true) } return offset + 4 } Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24) this[offset + 1] = (value >>> 16) this[offset + 2] = (value >>> 8) this[offset + 3] = (value & 0xff) } else { objectWriteUInt32(this, value, offset, false) } return offset + 4 } Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { value = +value offset = offset | 0 if (!noAssert) { var limit = Math.pow(2, 8 * byteLength - 1) checkInt(this, value, offset, byteLength, limit - 1, -limit) } var i = 0 var mul = 1 var sub = 0 this[offset] = value & 0xFF while (++i < byteLength && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { sub = 1 } this[offset + i] = ((value / mul) >> 0) - sub & 0xFF } return offset + byteLength } Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { value = +value offset = offset | 0 if (!noAssert) { var limit = Math.pow(2, 8 * byteLength - 1) checkInt(this, value, offset, byteLength, limit - 1, -limit) } var i = byteLength - 1 var mul = 1 var sub = 0 this[offset + i] = value & 0xFF while (--i >= 0 && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { sub = 1 } this[offset + i] = ((value / mul) >> 0) - sub & 0xFF } return offset + byteLength } Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) if (value < 0) value = 0xff + value + 1 this[offset] = (value & 0xff) return offset + 1 } Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) } else { objectWriteUInt16(this, value, offset, true) } return offset + 2 } Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8) this[offset + 1] = (value & 0xff) } else { objectWriteUInt16(this, value, offset, false) } return offset + 2 } Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) this[offset + 2] = (value >>> 16) this[offset + 3] = (value >>> 24) } else { objectWriteUInt32(this, value, offset, true) } return offset + 4 } Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) if (value < 0) value = 0xffffffff + value + 1 if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24) this[offset + 1] = (value >>> 16) this[offset + 2] = (value >>> 8) this[offset + 3] = (value & 0xff) } else { objectWriteUInt32(this, value, offset, false) } return offset + 4 } function checkIEEE754 (buf, value, offset, ext, max, min) { if (offset + ext > buf.length) throw new RangeError('Index out of range') if (offset < 0) throw new RangeError('Index out of range') } function writeFloat (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) } ieee754.write(buf, value, offset, littleEndian, 23, 4) return offset + 4 } Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { return writeFloat(this, value, offset, true, noAssert) } Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { return writeFloat(this, value, offset, false, noAssert) } function writeDouble (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) } ieee754.write(buf, value, offset, littleEndian, 52, 8) return offset + 8 } Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { return writeDouble(this, value, offset, true, noAssert) } Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { return writeDouble(this, value, offset, false, noAssert) } // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) Buffer.prototype.copy = function copy (target, targetStart, start, end) { if (!start) start = 0 if (!end && end !== 0) end = this.length if (targetStart >= target.length) targetStart = target.length if (!targetStart) targetStart = 0 if (end > 0 && end < start) end = start // Copy 0 bytes; we're done if (end === start) return 0 if (target.length === 0 || this.length === 0) return 0 // Fatal error conditions if (targetStart < 0) { throw new RangeError('targetStart out of bounds') } if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') if (end < 0) throw new RangeError('sourceEnd out of bounds') // Are we oob? if (end > this.length) end = this.length if (target.length - targetStart < end - start) { end = target.length - targetStart + start } var len = end - start var i if (this === target && start < targetStart && targetStart < end) { // descending copy from end for (i = len - 1; i >= 0; --i) { target[i + targetStart] = this[i + start] } } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { // ascending copy from start for (i = 0; i < len; ++i) { target[i + targetStart] = this[i + start] } } else { Uint8Array.prototype.set.call( target, this.subarray(start, start + len), targetStart ) } return len } // Usage: // buffer.fill(number[, offset[, end]]) // buffer.fill(buffer[, offset[, end]]) // buffer.fill(string[, offset[, end]][, encoding]) Buffer.prototype.fill = function fill (val, start, end, encoding) { // Handle string cases: if (typeof val === 'string') { if (typeof start === 'string') { encoding = start start = 0 end = this.length } else if (typeof end === 'string') { encoding = end end = this.length } if (val.length === 1) { var code = val.charCodeAt(0) if (code < 256) { val = code } } if (encoding !== undefined && typeof encoding !== 'string') { throw new TypeError('encoding must be a string') } if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { throw new TypeError('Unknown encoding: ' + encoding) } } else if (typeof val === 'number') { val = val & 255 } // Invalid ranges are not set to a default, so can range check early. if (start < 0 || this.length < start || this.length < end) { throw new RangeError('Out of range index') } if (end <= start) { return this } start = start >>> 0 end = end === undefined ? this.length : end >>> 0 if (!val) val = 0 var i if (typeof val === 'number') { for (i = start; i < end; ++i) { this[i] = val } } else { var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString()) var len = bytes.length for (i = 0; i < end - start; ++i) { this[i + start] = bytes[i % len] } } return this } // HELPER FUNCTIONS // ================ var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g function base64clean (str) { // Node strips out invalid characters like \n and \t from the string, base64-js does not str = stringtrim(str).replace(INVALID_BASE64_RE, '') // Node converts strings with length < 2 to '' if (str.length < 2) return '' // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not while (str.length % 4 !== 0) { str = str + '=' } return str } function stringtrim (str) { if (str.trim) return str.trim() return str.replace(/^\s+|\s+$/g, '') } function toHex (n) { if (n < 16) return '0' + n.toString(16) return n.toString(16) } function utf8ToBytes (string, units) { units = units || Infinity var codePoint var length = string.length var leadSurrogate = null var bytes = [] for (var i = 0; i < length; ++i) { codePoint = string.charCodeAt(i) // is surrogate component if (codePoint > 0xD7FF && codePoint < 0xE000) { // last char was a lead if (!leadSurrogate) { // no lead yet if (codePoint > 0xDBFF) { // unexpected trail if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) continue } else if (i + 1 === length) { // unpaired lead if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) continue } // valid lead leadSurrogate = codePoint continue } // 2 leads in a row if (codePoint < 0xDC00) { if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) leadSurrogate = codePoint continue } // valid surrogate pair codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 } else if (leadSurrogate) { // valid bmp char, but last char was a lead if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) } leadSurrogate = null // encode utf8 if (codePoint < 0x80) { if ((units -= 1) < 0) break bytes.push(codePoint) } else if (codePoint < 0x800) { if ((units -= 2) < 0) break bytes.push( codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80 ) } else if (codePoint < 0x10000) { if ((units -= 3) < 0) break bytes.push( codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80 ) } else if (codePoint < 0x110000) { if ((units -= 4) < 0) break bytes.push( codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80 ) } else { throw new Error('Invalid code point') } } return bytes } function asciiToBytes (str) { var byteArray = [] for (var i = 0; i < str.length; ++i) { // Node's code seems to be doing this and not & 0x7F.. byteArray.push(str.charCodeAt(i) & 0xFF) } return byteArray } function utf16leToBytes (str, units) { var c, hi, lo var byteArray = [] for (var i = 0; i < str.length; ++i) { if ((units -= 2) < 0) break c = str.charCodeAt(i) hi = c >> 8 lo = c % 256 byteArray.push(lo) byteArray.push(hi) } return byteArray } function base64ToBytes (str) { return base64.toByteArray(base64clean(str)) } function blitBuffer (src, dst, offset, length) { for (var i = 0; i < length; ++i) { if ((i + offset >= dst.length) || (i >= src.length)) break dst[i + offset] = src[i] } return i } function isnan (val) { return val !== val // eslint-disable-line no-self-compare } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) /***/ }), /***/ "./node_modules/ieee754/index.js": /*!***************************************!*\ !*** ./node_modules/ieee754/index.js ***! \***************************************/ /*! no static exports found */ /***/ (function(module, exports) { /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ exports.read = function (buffer, offset, isLE, mLen, nBytes) { var e, m var eLen = (nBytes * 8) - mLen - 1 var eMax = (1 << eLen) - 1 var eBias = eMax >> 1 var nBits = -7 var i = isLE ? (nBytes - 1) : 0 var d = isLE ? -1 : 1 var s = buffer[offset + i] i += d e = s & ((1 << (-nBits)) - 1) s >>= (-nBits) nBits += eLen for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} m = e & ((1 << (-nBits)) - 1) e >>= (-nBits) nBits += mLen for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} if (e === 0) { e = 1 - eBias } else if (e === eMax) { return m ? NaN : ((s ? -1 : 1) * Infinity) } else { m = m + Math.pow(2, mLen) e = e - eBias } return (s ? -1 : 1) * m * Math.pow(2, e - mLen) } exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { var e, m, c var eLen = (nBytes * 8) - mLen - 1 var eMax = (1 << eLen) - 1 var eBias = eMax >> 1 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) var i = isLE ? 0 : (nBytes - 1) var d = isLE ? 1 : -1 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 value = Math.abs(value) if (isNaN(value) || value === Infinity) { m = isNaN(value) ? 1 : 0 e = eMax } else { e = Math.floor(Math.log(value) / Math.LN2) if (value * (c = Math.pow(2, -e)) < 1) { e-- c *= 2 } if (e + eBias >= 1) { value += rt / c } else { value += rt * Math.pow(2, 1 - eBias) } if (value * c >= 2) { e++ c /= 2 } if (e + eBias >= eMax) { m = 0 e = eMax } else if (e + eBias >= 1) { m = ((value * c) - 1) * Math.pow(2, mLen) e = e + eBias } else { m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) e = 0 } } for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} e = (e << mLen) | m eLen += mLen for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} buffer[offset + i - d] |= s * 128 } /***/ }), /***/ "./node_modules/isarray/index.js": /*!***************************************!*\ !*** ./node_modules/isarray/index.js ***! \***************************************/ /*! no static exports found */ /***/ (function(module, exports) { var toString = {}.toString; module.exports = Array.isArray || function (arr) { return toString.call(arr) == '[object Array]'; }; /***/ }), /***/ "./node_modules/webpack/buildin/global.js": /*!***********************************!*\ !*** (webpack)/buildin/global.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports) { var g; // This works in non-strict mode g = (function() { return this; })(); try { // This works if eval is allowed (see CSP) g = g || new Function("return this")(); } catch (e) { // This works if the window reference is available if (typeof window === "object") g = window; } // g can still be undefined, but nothing to do about it... // We return undefined, instead of nothing here, so it's // easier to handle this case. if(!global) { ...} module.exports = g; /***/ }), /***/ "./src/AccessTokenEvents.js": /*!**********************************!*\ !*** ./src/AccessTokenEvents.js ***! \**********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AccessTokenEvents = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _Timer = __webpack_require__(/*! ./Timer.js */ "./src/Timer.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var DefaultAccessTokenExpiringNotificationTime = 60; // seconds var AccessTokenEvents = exports.AccessTokenEvents = function () { function AccessTokenEvents() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$accessTokenExpir = _ref.accessTokenExpiringNotificationTime, accessTokenExpiringNotificationTime = _ref$accessTokenExpir === undefined ? DefaultAccessTokenExpiringNotificationTime : _ref$accessTokenExpir, _ref$accessTokenExpir2 = _ref.accessTokenExpiringTimer, accessTokenExpiringTimer = _ref$accessTokenExpir2 === undefined ? new _Timer.Timer("Access token expiring") : _ref$accessTokenExpir2, _ref$accessTokenExpir3 = _ref.accessTokenExpiredTimer, accessTokenExpiredTimer = _ref$accessTokenExpir3 === undefined ? new _Timer.Timer("Access token expired") : _ref$accessTokenExpir3; _classCallCheck(this, AccessTokenEvents); this._accessTokenExpiringNotificationTime = accessTokenExpiringNotificationTime; this._accessTokenExpiring = accessTokenExpiringTimer; this._accessTokenExpired = accessTokenExpiredTimer; } AccessTokenEvents.prototype.load = function load(container) { // only register events if there's an access token and it has an expiration if (container.access_token && container.expires_in !== undefined) { var duration = container.expires_in; _Log.Log.debug("AccessTokenEvents.load: access token present, remaining duration:", duration); if (duration > 0) { // only register expiring if we still have time var expiring = duration - this._accessTokenExpiringNotificationTime; if (expiring <= 0) { expiring = 1; } _Log.Log.debug("AccessTokenEvents.load: registering expiring timer in:", expiring); this._accessTokenExpiring.init(expiring); } else { _Log.Log.debug("AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration."); this._accessTokenExpiring.cancel(); } // if it's negative, it will still fire var expired = duration + 1; _Log.Log.debug("AccessTokenEvents.load: registering expired timer in:", expired); this._accessTokenExpired.init(expired); } else { this._accessTokenExpiring.cancel(); this._accessTokenExpired.cancel(); } }; AccessTokenEvents.prototype.unload = function unload() { _Log.Log.debug("AccessTokenEvents.unload: canceling existing access token timers"); this._accessTokenExpiring.cancel(); this._accessTokenExpired.cancel(); }; AccessTokenEvents.prototype.addAccessTokenExpiring = function addAccessTokenExpiring(cb) { this._accessTokenExpiring.addHandler(cb); }; AccessTokenEvents.prototype.removeAccessTokenExpiring = function removeAccessTokenExpiring(cb) { this._accessTokenExpiring.removeHandler(cb); }; AccessTokenEvents.prototype.addAccessTokenExpired = function addAccessTokenExpired(cb) { this._accessTokenExpired.addHandler(cb); }; AccessTokenEvents.prototype.removeAccessTokenExpired = function removeAccessTokenExpired(cb) { this._accessTokenExpired.removeHandler(cb); }; return AccessTokenEvents; }(); /***/ }), /***/ "./src/CheckSessionIFrame.js": /*!***********************************!*\ !*** ./src/CheckSessionIFrame.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CheckSessionIFrame = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var DefaultInterval = 2000; var CheckSessionIFrame = exports.CheckSessionIFrame = function () { function CheckSessionIFrame(callback, client_id, url, interval) { var stopOnError = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; _classCallCheck(this, CheckSessionIFrame); this._callback = callback; this._client_id = client_id; this._url = url; this._interval = interval || DefaultInterval; this._stopOnError = stopOnError; var idx = url.indexOf("/", url.indexOf("//") + 2); this._frame_origin = url.substr(0, idx); this._frame = window.document.createElement("iframe"); // shotgun approach this._frame.style.visibility = "hidden"; this._frame.style.position = "absolute"; this._frame.style.display = "none"; this._frame.width = 0; this._frame.height = 0; this._frame.src = url; } CheckSessionIFrame.prototype.load = function load() { var _this = this; return new Promise(function (resolve) { _this._frame.onload = function () { resolve(); }; window.document.body.appendChild(_this._frame); _this._boundMessageEvent = _this._message.bind(_this); window.addEventListener("message", _this._boundMessageEvent, false); }); }; CheckSessionIFrame.prototype._message = function _message(e) { if (e.origin === this._frame_origin && e.source === this._frame.contentWindow) { if (e.data === "error") { _Log.Log.error("CheckSessionIFrame: error message from check session op iframe"); if (this._stopOnError) { this.stop(); } } else if (e.data === "changed") { _Log.Log.debug("CheckSessionIFrame: changed message from check session op iframe"); this.stop(); this._callback(); } else { _Log.Log.debug("CheckSessionIFrame: " + e.data + " message from check session op iframe"); } } }; CheckSessionIFrame.prototype.start = function start(session_state) { var _this2 = this; if (this._session_state !== session_state) { _Log.Log.debug("CheckSessionIFrame.start"); this.stop(); this._session_state = session_state; var send = function send() { _this2._frame.contentWindow.postMessage(_this2._client_id + " " + _this2._session_state, _this2._frame_origin); }; // trigger now send(); // and setup timer this._timer = window.setInterval(send, this._interval); } }; CheckSessionIFrame.prototype.stop = function stop() { this._session_state = null; if (this._timer) { _Log.Log.debug("CheckSessionIFrame.stop"); window.clearInterval(this._timer); this._timer = null; } }; return CheckSessionIFrame; }(); /***/ }), /***/ "./src/ClockService.js": /*!*****************************!*\ !*** ./src/ClockService.js ***! \*****************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var ClockService = exports.ClockService = function () { function ClockService() { _classCallCheck(this, ClockService); } ClockService.prototype.getEpochTime = function getEpochTime() { return Promise.resolve(Date.now() / 1000 | 0); }; return ClockService; }(); /***/ }), /***/ "./src/CordovaIFrameNavigator.js": /*!***************************************!*\ !*** ./src/CordovaIFrameNavigator.js ***! \***************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CordovaIFrameNavigator = undefined; var _CordovaPopupWindow = __webpack_require__(/*! ./CordovaPopupWindow.js */ "./src/CordovaPopupWindow.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var CordovaIFrameNavigator = exports.CordovaIFrameNavigator = function () { function CordovaIFrameNavigator() { _classCallCheck(this, CordovaIFrameNavigator); } CordovaIFrameNavigator.prototype.prepare = function prepare(params) { params.popupWindowFeatures = 'hidden=yes'; var popup = new _CordovaPopupWindow.CordovaPopupWindow(params); return Promise.resolve(popup); }; return CordovaIFrameNavigator; }(); /***/ }), /***/ "./src/CordovaPopupNavigator.js": /*!**************************************!*\ !*** ./src/CordovaPopupNavigator.js ***! \**************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CordovaPopupNavigator = undefined; var _CordovaPopupWindow = __webpack_require__(/*! ./CordovaPopupWindow.js */ "./src/CordovaPopupWindow.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var CordovaPopupNavigator = exports.CordovaPopupNavigator = function () { function CordovaPopupNavigator() { _classCallCheck(this, CordovaPopupNavigator); } CordovaPopupNavigator.prototype.prepare = function prepare(params) { var popup = new _CordovaPopupWindow.CordovaPopupWindow(params); return Promise.resolve(popup); }; return CordovaPopupNavigator; }(); /***/ }), /***/ "./src/CordovaPopupWindow.js": /*!***********************************!*\ !*** ./src/CordovaPopupWindow.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CordovaPopupWindow = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var DefaultPopupFeatures = 'location=no,toolbar=no,zoom=no'; var DefaultPopupTarget = "_blank"; var CordovaPopupWindow = exports.CordovaPopupWindow = function () { function CordovaPopupWindow(params) { var _this = this; _classCallCheck(this, CordovaPopupWindow); this._promise = new Promise(function (resolve, reject) { _this._resolve = resolve; _this._reject = reject; }); this.features = params.popupWindowFeatures || DefaultPopupFeatures; this.target = params.popupWindowTarget || DefaultPopupTarget; this.redirect_uri = params.startUrl; _Log.Log.debug("CordovaPopupWindow.ctor: redirect_uri: " + this.redirect_uri); } CordovaPopupWindow.prototype._isInAppBrowserInstalled = function _isInAppBrowserInstalled(cordovaMetadata) { return ["cordova-plugin-inappbrowser", "cordova-plugin-inappbrowser.inappbrowser", "org.apache.cordova.inappbrowser"].some(function (name) { return cordovaMetadata.hasOwnProperty(name); }); }; CordovaPopupWindow.prototype.navigate = function navigate(params) { if (!params || !params.url) { this._error("No url provided"); } else { if (!window.cordova) { return this._error("cordova is undefined"); } var cordovaMetadata = window.cordova.require("cordova/plugin_list").metadata; if (this._isInAppBrowserInstalled(cordovaMetadata) === false) { return this._error("InAppBrowser plugin not found"); } this._popup = cordova.InAppBrowser.open(params.url, this.target, this.features); if (this._popup) { _Log.Log.debug("CordovaPopupWindow.navigate: popup successfully created"); this._exitCallbackEvent = this._exitCallback.bind(this); this._loadStartCallbackEvent = this._loadStartCallback.bind(this); this._popup.addEventListener("exit", this._exitCallbackEvent, false); this._popup.addEventListener("loadstart", this._loadStartCallbackEvent, false); } else { this._error("Error opening popup window"); } } return this.promise; }; CordovaPopupWindow.prototype._loadStartCallback = function _loadStartCallback(event) { if (event.url.indexOf(this.redirect_uri) === 0) { this._success({ url: event.url }); } }; CordovaPopupWindow.prototype._exitCallback = function _exitCallback(message) { this._error(message); }; CordovaPopupWindow.prototype._success = function _success(data) { this._cleanup(); _Log.Log.debug("CordovaPopupWindow: Successful response from cordova popup window"); this._resolve(data); }; CordovaPopupWindow.prototype._error = function _error(message) { this._cleanup(); _Log.Log.error(message); this._reject(new Error(message)); }; CordovaPopupWindow.prototype.close = function close() { this._cleanup(); }; CordovaPopupWindow.prototype._cleanup = function _cleanup() { if (this._popup) { _Log.Log.debug("CordovaPopupWindow: cleaning up popup"); this._popup.removeEventListener("exit", this._exitCallbackEvent, false); this._popup.removeEventListener("loadstart", this._loadStartCallbackEvent, false); this._popup.close(); } this._popup = null; }; _createClass(CordovaPopupWindow, [{ key: 'promise', get: function get() { return this._promise; } }]); return CordovaPopupWindow; }(); /***/ }), /***/ "./src/ErrorResponse.js": /*!******************************!*\ !*** ./src/ErrorResponse.js ***! \******************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ErrorResponse = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var ErrorResponse = exports.ErrorResponse = function (_Error) { _inherits(ErrorResponse, _Error); function ErrorResponse() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, error = _ref.error, error_description = _ref.error_description, error_uri = _ref.error_uri, state = _ref.state, session_state = _ref.session_state; _classCallCheck(this, ErrorResponse); if (!error) { _Log.Log.error("No error passed to ErrorResponse"); throw new Error("error"); } var _this = _possibleConstructorReturn(this, _Error.call(this, error_description || error)); _this.name = "ErrorResponse"; _this.error = error; _this.error_description = error_description; _this.error_uri = error_uri; _this.state = state; _this.session_state = session_state; return _this; } return ErrorResponse; }(Error); /***/ }), /***/ "./src/Event.js": /*!**********************!*\ !*** ./src/Event.js ***! \**********************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Event = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var Event = exports.Event = function () { function Event(name) { _classCallCheck(this, Event); this._name = name; this._callbacks = []; } Event.prototype.addHandler = function addHandler(cb) { this._callbacks.push(cb); }; Event.prototype.removeHandler = function removeHandler(cb) { var idx = this._callbacks.findIndex(function (item) { return item === cb; }); if (idx >= 0) { this._callbacks.splice(idx, 1); } }; Event.prototype.raise = function raise() { _Log.Log.debug("Event: Raising event: " + this._name); for (var i = 0; i < this._callbacks.length; i++) { var _callbacks; (_callbacks = this._callbacks)[i].apply(_callbacks, arguments); } }; return Event; }(); /***/ }), /***/ "./src/Global.js": /*!***********************!*\ !*** ./src/Global.js ***! \***********************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var timer = { setInterval: function (_setInterval) { function setInterval(_x, _x2) { return _setInterval.apply(this, arguments); } setInterval.toString = function () { return _setInterval.toString(); }; return setInterval; }(function (cb, duration) { return setInterval(cb, duration); }), clearInterval: function (_clearInterval) { function clearInterval(_x3) { return _clearInterval.apply(this, arguments); } clearInterval.toString = function () { return _clearInterval.toString(); }; return clearInterval; }(function (handle) { return clearInterval(handle); }) }; var testing = false; var request = null; var Global = exports.Global = function () { function Global() { _classCallCheck(this, Global); } Global._testing = function _testing() { testing = true; }; Global.setXMLHttpRequest = function setXMLHttpRequest(newRequest) { request = newRequest; }; _createClass(Global, null, [{ key: 'location', get: function get() { if (!testing) { return location; } } }, { key: 'localStorage', get: function get() { if (!testing && typeof window !== 'undefined') { return localStorage; } } }, { key: 'sessionStorage', get: function get() { if (!testing && typeof window !== 'undefined') { return sessionStorage; } } }, { key: 'XMLHttpRequest', get: function get() { if (!testing && typeof window !== 'undefined') { return request || XMLHttpRequest; } } }, { key: 'timer', get: function get() { if (!testing) { return timer; } } }]); return Global; }(); /***/ }), /***/ "./src/IFrameNavigator.js": /*!********************************!*\ !*** ./src/IFrameNavigator.js ***! \********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IFrameNavigator = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _IFrameWindow = __webpack_require__(/*! ./IFrameWindow.js */ "./src/IFrameWindow.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var IFrameNavigator = exports.IFrameNavigator = function () { function IFrameNavigator() { _classCallCheck(this, IFrameNavigator); } IFrameNavigator.prototype.prepare = function prepare(params) { var frame = new _IFrameWindow.IFrameWindow(params); return Promise.resolve(frame); }; IFrameNavigator.prototype.callback = function callback(url) { _Log.Log.debug("IFrameNavigator.callback"); try { _IFrameWindow.IFrameWindow.notifyParent(url); return Promise.resolve(); } catch (e) { return Promise.reject(e); } }; return IFrameNavigator; }(); /***/ }), /***/ "./src/IFrameWindow.js": /*!*****************************!*\ !*** ./src/IFrameWindow.js ***! \*****************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IFrameWindow = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var DefaultTimeout = 10000; var IFrameWindow = exports.IFrameWindow = function () { function IFrameWindow(params) { var _this = this; _classCallCheck(this, IFrameWindow); this._promise = new Promise(function (resolve, reject) { _this._resolve = resolve; _this._reject = reject; }); this._boundMessageEvent = this._message.bind(this); window.addEventListener("message", this._boundMessageEvent, false); this._frame = window.document.createElement("iframe"); // shotgun approach this._frame.style.visibility = "hidden"; this._frame.style.position = "absolute"; this._frame.width = 0; this._frame.height = 0; window.document.body.appendChild(this._frame); } IFrameWindow.prototype.navigate = function navigate(params) { if (!params || !params.url) { this._error("No url provided"); } else { var timeout = params.silentRequestTimeout || DefaultTimeout; _Log.Log.debug("IFrameWindow.navigate: Using timeout of:", timeout); this._timer = window.setTimeout(this._timeout.bind(this), timeout); this._frame.src = params.url; } return this.promise; }; IFrameWindow.prototype._success = function _success(data) { this._cleanup(); _Log.Log.debug("IFrameWindow: Successful response from frame window"); this._resolve(data); }; IFrameWindow.prototype._error = function _error(message) { this._cleanup(); _Log.Log.error(message); this._reject(new Error(message)); }; IFrameWindow.prototype.close = function close() { this._cleanup(); }; IFrameWindow.prototype._cleanup = function _cleanup() { if (this._frame) { _Log.Log.debug("IFrameWindow: cleanup"); window.removeEventListener("message", this._boundMessageEvent, false); window.clearTimeout(this._timer); window.document.body.removeChild(this._frame); this._timer = null; this._frame = null; this._boundMessageEvent = null; } }; IFrameWindow.prototype._timeout = function _timeout() { _Log.Log.debug("IFrameWindow.timeout"); this._error("Frame window timed out"); }; IFrameWindow.prototype._message = function _message(e) { _Log.Log.debug("IFrameWindow.message"); if (this._timer && e.origin === this._origin && e.source === this._frame.contentWindow && typeof e.data === 'string' && (e.data.startsWith('http://') || e.data.startsWith('https://'))) { var url = e.data; if (url) { this._success({ url: url }); } else { this._error("Invalid response from frame"); } } }; IFrameWindow.notifyParent = function notifyParent(url) { _Log.Log.debug("IFrameWindow.notifyParent"); url = url || window.location.href; if (url) { _Log.Log.debug("IFrameWindow.notifyParent: posting url message to parent"); window.parent.postMessage(url, location.protocol + "//" + location.host); } }; _createClass(IFrameWindow, [{ key: "promise", get: function get() { return this._promise; } }, { key: "_origin", get: function get() { return location.protocol + "//" + location.host; } }]); return IFrameWindow; }(); /***/ }), /***/ "./src/InMemoryWebStorage.js": /*!***********************************!*\ !*** ./src/InMemoryWebStorage.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.InMemoryWebStorage = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var InMemoryWebStorage = exports.InMemoryWebStorage = function () { function InMemoryWebStorage() { _classCallCheck(this, InMemoryWebStorage); this._data = {}; } InMemoryWebStorage.prototype.getItem = function getItem(key) { _Log.Log.debug("InMemoryWebStorage.getItem", key); return this._data[key]; }; InMemoryWebStorage.prototype.setItem = function setItem(key, value) { _Log.Log.debug("InMemoryWebStorage.setItem", key); this._data[key] = value; }; InMemoryWebStorage.prototype.removeItem = function removeItem(key) { _Log.Log.debug("InMemoryWebStorage.removeItem", key); delete this._data[key]; }; InMemoryWebStorage.prototype.key = function key(index) { return Object.getOwnPropertyNames(this._data)[index]; }; _createClass(InMemoryWebStorage, [{ key: "length", get: function get() { return Object.getOwnPropertyNames(this._data).length; } }]); return InMemoryWebStorage; }(); /***/ }), /***/ "./src/JoseUtil.js": /*!*************************!*\ !*** ./src/JoseUtil.js ***! \*************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JoseUtil = undefined; var _jsrsasign = __webpack_require__(/*! ./crypto/jsrsasign */ "./src/crypto/jsrsasign.js"); var _JoseUtilImpl = __webpack_require__(/*! ./JoseUtilImpl */ "./src/JoseUtilImpl.js"); var _JoseUtilImpl2 = _interopRequireDefault(_JoseUtilImpl); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var JoseUtil = exports.JoseUtil = (0, _JoseUtilImpl2.default)({ jws: _jsrsasign.jws, KeyUtil: _jsrsasign.KeyUtil, X509: _jsrsasign.X509, crypto: _jsrsasign.crypto, hextob64u: _jsrsasign.hextob64u, b64tohex: _jsrsasign.b64tohex, AllowedSigningAlgs: _jsrsasign.AllowedSigningAlgs }); /***/ }), /***/ "./src/JoseUtilImpl.js": /*!*****************************!*\ !*** ./src/JoseUtilImpl.js ***! \*****************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = getJoseUtil; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. function getJoseUtil(_ref) { var jws = _ref.jws, KeyUtil = _ref.KeyUtil, X509 = _ref.X509, crypto = _ref.crypto, hextob64u = _ref.hextob64u, b64tohex = _ref.b64tohex, AllowedSigningAlgs = _ref.AllowedSigningAlgs; return function () { function JoseUtil() { _classCallCheck(this, JoseUtil); } JoseUtil.parseJwt = function parseJwt(jwt) { _Log.Log.debug("JoseUtil.parseJwt"); try { var token = jws.JWS.parse(jwt); return { header: token.headerObj, payload: token.payloadObj }; } catch (e) { _Log.Log.error(e); } }; JoseUtil.validateJwt = function validateJwt(jwt, key, issuer, audience, clockSkew, now, timeInsensitive) { _Log.Log.debug("JoseUtil.validateJwt"); try { if (key.kty === "RSA") { if (key.e && key.n) { key = KeyUtil.getKey(key); } else if (key.x5c && key.x5c.length) { var hex = b64tohex(key.x5c[0]); key = X509.getPublicKeyFromCertHex(hex); } else { _Log.Log.error("JoseUtil.validateJwt: RSA key missing key material", key); return Promise.reject(new Error("RSA key missing key material")); } } else if (key.kty === "EC") { if (key.crv && key.x && key.y) { key = KeyUtil.getKey(key); } else { _Log.Log.error("JoseUtil.validateJwt: EC key missing key material", key); return Promise.reject(new Error("EC key missing key material")); } } else { _Log.Log.error("JoseUtil.validateJwt: Unsupported key type", key && key.kty); return Promise.reject(new Error( true && key.kty)); } return JoseUtil._validateJwt(jwt, key, issuer, audience, clockSkew, now, timeInsensitive); } catch (e) { _Log.Log.error(e && e.message || e); return Promise.reject("JWT validation failed"); } }; JoseUtil.validateJwtAttributes = function validateJwtAttributes(jwt, issuer, audience, clockSkew, now, timeInsensitive) { if (!clockSkew) { clockSkew = 0; } if (!now) { now = parseInt(Date.now() / 1000); } var payload = JoseUtil.parseJwt(jwt).payload; if (!payload.iss) { _Log.Log.error("JoseUtil._validateJwt: issuer was not provided"); return Promise.reject(new Error("issuer was not provided")); } if (payload.iss !== issuer) { _Log.Log.error("JoseUtil._validateJwt: Invalid issuer in token", payload.iss); return Promise.reject(new Error("Invalid issuer in token: " + payload.iss)); } if (!payload.aud) { _Log.Log.error("JoseUtil._validateJwt: aud was not provided"); return Promise.reject(new Error("aud was not provided")); } var validAudience = payload.aud === audience || Array.isArray(payload.aud) && payload.aud.indexOf(audience) >= 0; if (!validAudience) { _Log.Log.error("JoseUtil._validateJwt: Invalid audience in token", payload.aud); return Promise.reject(new Error("Invalid audience in token: " + payload.aud)); } if (payload.azp && payload.azp !== audience) { _Log.Log.error("JoseUtil._validateJwt: Invalid azp in token", payload.azp); return Promise.reject(new Error("Invalid azp in token: " + payload.azp)); } if (!timeInsensitive) { var lowerNow = now + clockSkew; var upperNow = now - clockSkew; if (!payload.iat) { _Log.Log.error("JoseUtil._validateJwt: iat was not provided"); return Promise.reject(new Error("iat was not provided")); } if (lowerNow < payload.iat) { _Log.Log.error("JoseUtil._validateJwt: iat is in the future", payload.iat); return Promise.reject(new Error("iat is in the future: " + payload.iat)); } if (payload.nbf && lowerNow < payload.nbf) { _Log.Log.error("JoseUtil._validateJwt: nbf is in the future", payload.nbf); return Promise.reject(new Error("nbf is in the future: " + payload.nbf)); } if (!payload.exp) { _Log.Log.error("JoseUtil._validateJwt: exp was not provided"); return Promise.reject(new Error("exp was not provided")); } if (payload.exp < upperNow) { _Log.Log.error("JoseUtil._validateJwt: exp is in the past", payload.exp); return Promise.reject(new Error("exp is in the past:" + payload.exp)); } } return Promise.resolve(payload); }; JoseUtil._validateJwt = function _validateJwt(jwt, key, issuer, audience, clockSkew, now, timeInsensitive) { return JoseUtil.validateJwtAttributes(jwt, issuer, audience, clockSkew, now, timeInsensitive).then(function (payload) { try { if (!jws.JWS.verify(jwt, key, AllowedSigningAlgs)) { _Log.Log.error("JoseUtil._validateJwt: signature validation failed"); return Promise.reject(new Error("signature validation failed")); } return payload; } catch (e) { _Log.Log.error(e && e.message || e); return Promise.reject(new Error("signature validation failed")); } }); }; JoseUtil.hashString = function hashString(value, alg) { try { return crypto.Util.hashString(value, alg); } catch (e) { _Log.Log.error(e); } }; JoseUtil.hexToBase64Url = function hexToBase64Url(value) { try { return hextob64u(value); } catch (e) { _Log.Log.error(e); } }; return JoseUtil; }(); } module.exports = exports["default"]; /***/ }), /***/ "./src/JsonService.js": /*!****************************!*\ !*** ./src/JsonService.js ***! \****************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JsonService = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _Global = __webpack_require__(/*! ./Global.js */ "./src/Global.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var JsonService = exports.JsonService = function () { function JsonService() { var additionalContentTypes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var XMLHttpRequestCtor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _Global.Global.XMLHttpRequest; var jwtHandler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; _classCallCheck(this, JsonService); if (additionalContentTypes && Array.isArray(additionalContentTypes)) { this._contentTypes = additionalContentTypes.slice(); } else { this._contentTypes = []; } this._contentTypes.push('application/json'); if (jwtHandler) { this._contentTypes.push('application/jwt'); } this._XMLHttpRequest = XMLHttpRequestCtor; this._jwtHandler = jwtHandler; } JsonService.prototype.getJson = function getJson(url, token) { var _this = this; if (!url) { _Log.Log.error("JsonService.getJson: No url passed"); throw new Error("url"); } _Log.Log.debug("JsonService.getJson, url: ", url); return new Promise(function (resolve, reject) { var req = new _this._XMLHttpRequest(); req.open('GET', url); var allowedContentTypes = _this._contentTypes; var jwtHandler = _this._jwtHandler; req.onload = function () { _Log.Log.debug("JsonService.getJson: HTTP response received, status", req.status); if (req.status === 200) { var contentType = req.getResponseHeader("Content-Type"); if (contentType) { var found = allowedContentTypes.find(function (item) { if (contentType.startsWith(item)) { return true; } }); if (found == "application/jwt") { jwtHandler(req).then(resolve, reject); return; } if (found) { try { resolve(JSON.parse(req.responseText)); return; } catch (e) { _Log.Log.error("JsonService.getJson: Error parsing JSON response", e.message); reject(e); return; } } } reject(Error("Invalid response Content-Type: " + contentType + ", from URL: " + url)); } else { reject(Error(req.statusText + " (" + req.status + ")")); } }; req.onerror = function () { _Log.Log.error("JsonService.getJson: network error"); reject(Error("Network Error")); }; if (token) { _Log.Log.debug("JsonService.getJson: token passed, setting Authorization header"); req.setRequestHeader("Authorization", "Bearer " + token); } req.send(); }); }; JsonService.prototype.postForm = function postForm(url, payload, basicAuth) { var _this2 = this; if (!url) { _Log.Log.error("JsonService.postForm: No url passed"); throw new Error("url"); } _Log.Log.debug("JsonService.postForm, url: ", url); return new Promise(function (resolve, reject) { var req = new _this2._XMLHttpRequest(); req.open('POST', url); var allowedContentTypes = _this2._contentTypes; req.onload = function () { _Log.Log.debug("JsonService.postForm: HTTP response received, status", req.status); if (req.status === 200) { var contentType = req.getResponseHeader("Content-Type"); if (contentType) { var found = allowedContentTypes.find(function (item) { if (contentType.startsWith(item)) { return true; } }); if (found) { try { resolve(JSON.parse(req.responseText)); return; } catch (e) { _Log.Log.error("JsonService.postForm: Error parsing JSON response", e.message); reject(e); return; } } } reject(Error("Invalid response Content-Type: " + contentType + ", from URL: " + url)); return; } if (req.status === 400) { var contentType = req.getResponseHeader("Content-Type"); if (contentType) { var found = allowedContentTypes.find(function (item) { if (contentType.startsWith(item)) { return true; } }); if (found) { try { var payload = JSON.parse(req.responseText); if (payload && payload.error) { _Log.Log.error("JsonService.postForm: Error from server: ", payload.error); reject(new Error(payload.error)); return; } } catch (e) { _Log.Log.error("JsonService.postForm: Error parsing JSON response", e.message); reject(e); return; } } } } reject(Error(req.statusText + " (" + req.status + ")")); }; req.onerror = function () { _Log.Log.error("JsonService.postForm: network error"); reject(Error("Network Error")); }; var body = ""; for (var key in payload) { var value = payload[key]; if (value) { if (body.length > 0) { body += "&"; } body += encodeURIComponent(key); body += "="; body += encodeURIComponent(value); } } req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); if (basicAuth !== undefined) { req.setRequestHeader("Authorization", "Basic " + btoa(basicAuth)); } req.send(body); }); }; return JsonService; }(); /***/ }), /***/ "./src/Log.js": /*!********************!*\ !*** ./src/Log.js ***! \********************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var nopLogger = { debug: function debug() {}, info: function info() {}, warn: function warn() {}, error: function error() {} }; var NONE = 0; var ERROR = 1; var WARN = 2; var INFO = 3; var DEBUG = 4; var logger = void 0; var level = void 0; var Log = exports.Log = function () { function Log() { _classCallCheck(this, Log); } Log.reset = function reset() { level = INFO; logger = nopLogger; }; Log.debug = function debug() { if (level >= DEBUG) { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } logger.debug.apply(logger, Array.from(args)); } }; Log.info = function info() { if (level >= INFO) { for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } logger.info.apply(logger, Array.from(args)); } }; Log.warn = function warn() { if (level >= WARN) { for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { args[_key3] = arguments[_key3]; } logger.warn.apply(logger, Array.from(args)); } }; Log.error = function error() { if (level >= ERROR) { for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { args[_key4] = arguments[_key4]; } logger.error.apply(logger, Array.from(args)); } }; _createClass(Log, null, [{ key: "NONE", get: function get() { return NONE; } }, { key: "ERROR", get: function get() { return ERROR; } }, { key: "WARN", get: function get() { return WARN; } }, { key: "INFO", get: function get() { return INFO; } }, { key: "DEBUG", get: function get() { return DEBUG; } }, { key: "level", get: function get() { return level; }, set: function set(value) { if (NONE <= value && value <= DEBUG) { level = value; } else { throw new Error("Invalid log level"); } } }, { key: "logger", get: function get() { return logger; }, set: function set(value) { if (!value.debug && value.info) { // just to stay backwards compat. can remove in 2.0 value.debug = value.info; } if (value.debug && value.info && value.warn && value.error) { logger = value; } else { throw new Error("Invalid logger"); } } }]); return Log; }(); Log.reset(); /***/ }), /***/ "./src/MetadataService.js": /*!********************************!*\ !*** ./src/MetadataService.js ***! \********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MetadataService = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _JsonService = __webpack_require__(/*! ./JsonService.js */ "./src/JsonService.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var OidcMetadataUrlPath = '.well-known/openid-configuration'; var MetadataService = exports.MetadataService = function () { function MetadataService(settings) { var JsonServiceCtor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _JsonService.JsonService; _classCallCheck(this, MetadataService); if (!settings) { _Log.Log.error("MetadataService: No settings passed to MetadataService"); throw new Error("settings"); } this._settings = settings; this._jsonService = new JsonServiceCtor(['application/jwk-set+json']); } MetadataService.prototype.resetSigningKeys = function resetSigningKeys() { this._settings = this._settings || {}; this._settings.signingKeys = undefined; }; MetadataService.prototype.getMetadata = function getMetadata() { var _this = this; if (this._settings.metadata) { _Log.Log.debug("MetadataService.getMetadata: Returning metadata from settings"); return Promise.resolve(this._settings.metadata); } if (!this.metadataUrl) { _Log.Log.error("MetadataService.getMetadata: No authority or metadataUrl configured on settings"); return Promise.reject(new Error("No authority or metadataUrl configured on settings")); } _Log.Log.debug("MetadataService.getMetadata: getting metadata from", this.metadataUrl); return this._jsonService.getJson(this.metadataUrl).then(function (metadata) { _Log.Log.debug("MetadataService.getMetadata: json received"); var seed = _this._settings.metadataSeed || {}; _this._settings.metadata = Object.assign({}, seed, metadata); return _this._settings.metadata; }); }; MetadataService.prototype.getIssuer = function getIssuer() { return this._getMetadataProperty("issuer"); }; MetadataService.prototype.getAuthorizationEndpoint = function getAuthorizationEndpoint() { return this._getMetadataProperty("authorization_endpoint"); }; MetadataService.prototype.getUserInfoEndpoint = function getUserInfoEndpoint() { return this._getMetadataProperty("userinfo_endpoint"); }; MetadataService.prototype.getTokenEndpoint = function getTokenEndpoint() { var optional = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; return this._getMetadataProperty("token_endpoint", optional); }; MetadataService.prototype.getCheckSessionIframe = function getCheckSessionIframe() { return this._getMetadataProperty("check_session_iframe", true); }; MetadataService.prototype.getEndSessionEndpoint = function getEndSessionEndpoint() { return this._getMetadataProperty("end_session_endpoint", true); }; MetadataService.prototype.getRevocationEndpoint = function getRevocationEndpoint() { return this._getMetadataProperty("revocation_endpoint", true); }; MetadataService.prototype.getKeysEndpoint = function getKeysEndpoint() { return this._getMetadataProperty("jwks_uri", true); }; MetadataService.prototype._getMetadataProperty = function _getMetadataProperty(name) { var optional = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; _Log.Log.debug("MetadataService.getMetadataProperty for: " + name); return this.getMetadata().then(function (metadata) { _Log.Log.debug("MetadataService.getMetadataProperty: metadata recieved"); if (metadata[name] === undefined) { if (optional === true) { _Log.Log.warn("MetadataService.getMetadataProperty: Metadata does not contain optional property " + name); return undefined; } else { _Log.Log.error("MetadataService.getMetadataProperty: Metadata does not contain property " + name); throw new Error("Metadata does not contain property " + name); } } return metadata[name]; }); }; MetadataService.prototype.getSigningKeys = function getSigningKeys() { var _this2 = this; if (this._settings.signingKeys) { _Log.Log.debug("MetadataService.getSigningKeys: Returning signingKeys from settings"); return Promise.resolve(this._settings.signingKeys); } return this._getMetadataProperty("jwks_uri").then(function (jwks_uri) { _Log.Log.debug("MetadataService.getSigningKeys: jwks_uri received", jwks_uri); return _this2._jsonService.getJson(jwks_uri).then(function (keySet) { _Log.Log.debug("MetadataService.getSigningKeys: key set received", keySet); if (!keySet.keys) { _Log.Log.error("MetadataService.getSigningKeys: Missing keys on keyset"); throw new Error("Missing keys on keyset"); } _this2._settings.signingKeys = keySet.keys; return _this2._settings.signingKeys; }); }); }; _createClass(MetadataService, [{ key: 'metadataUrl', get: function get() { if (!this._metadataUrl) { if (this._settings.metadataUrl) { this._metadataUrl = this._settings.metadataUrl; } else { this._metadataUrl = this._settings.authority; if (this._metadataUrl && this._metadataUrl.indexOf(OidcMetadataUrlPath) < 0) { if (this._metadataUrl[this._metadataUrl.length - 1] !== '/') { this._metadataUrl += '/'; } this._metadataUrl += OidcMetadataUrlPath; } } } return this._metadataUrl; } }]); return MetadataService; }(); /***/ }), /***/ "./src/OidcClient.js": /*!***************************!*\ !*** ./src/OidcClient.js ***! \***************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OidcClient = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _OidcClientSettings = __webpack_require__(/*! ./OidcClientSettings.js */ "./src/OidcClientSettings.js"); var _ErrorResponse = __webpack_require__(/*! ./ErrorResponse.js */ "./src/ErrorResponse.js"); var _SigninRequest = __webpack_require__(/*! ./SigninRequest.js */ "./src/SigninRequest.js"); var _SigninResponse = __webpack_require__(/*! ./SigninResponse.js */ "./src/SigninResponse.js"); var _SignoutRequest = __webpack_require__(/*! ./SignoutRequest.js */ "./src/SignoutRequest.js"); var _SignoutResponse = __webpack_require__(/*! ./SignoutResponse.js */ "./src/SignoutResponse.js"); var _SigninState = __webpack_require__(/*! ./SigninState.js */ "./src/SigninState.js"); var _State = __webpack_require__(/*! ./State.js */ "./src/State.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var OidcClient = exports.OidcClient = function () { function OidcClient() { var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, OidcClient); if (settings instanceof _OidcClientSettings.OidcClientSettings) { this._settings = settings; } else { this._settings = new _OidcClientSettings.OidcClientSettings(settings); } } OidcClient.prototype.createSigninRequest = function createSigninRequest() { var _this = this; var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, response_type = _ref.response_type, scope = _ref.scope, redirect_uri = _ref.redirect_uri, data = _ref.data, state = _ref.state, prompt = _ref.prompt, display = _ref.display, max_age = _ref.max_age, ui_locales = _ref.ui_locales, id_token_hint = _ref.id_token_hint, login_hint = _ref.login_hint, acr_values = _ref.acr_values, resource = _ref.resource, request = _ref.request, request_uri = _ref.request_uri, response_mode = _ref.response_mode, extraQueryParams = _ref.extraQueryParams, extraTokenParams = _ref.extraTokenParams, request_type = _ref.request_type, skipUserInfo = _ref.skipUserInfo; var stateStore = arguments[1]; _Log.Log.debug("OidcClient.createSigninRequest"); var client_id = this._settings.client_id; response_type = response_type || this._settings.response_type; scope = scope || this._settings.scope; redirect_uri = redirect_uri || this._settings.redirect_uri; // id_token_hint, login_hint aren't allowed on _settings prompt = prompt || this._settings.prompt; display = display || this._settings.display; max_age = max_age || this._settings.max_age; ui_locales = ui_locales || this._settings.ui_locales; acr_values = acr_values || this._settings.acr_values; resource = resource || this._settings.resource; response_mode = response_mode || this._settings.response_mode; extraQueryParams = extraQueryParams || this._settings.extraQueryParams; extraTokenParams = extraTokenParams || this._settings.extraTokenParams; var authority = this._settings.authority; if (_SigninRequest.SigninRequest.isCode(response_type) && response_type !== "code") { return Promise.reject(new Error("OpenID Connect hybrid flow is not supported")); } return this._metadataService.getAuthorizationEndpoint().then(function (url) { _Log.Log.debug("OidcClient.createSigninRequest: Received authorization endpoint", url); var signinRequest = new _SigninRequest.SigninRequest({ url: url, client_id: client_id, redirect_uri: redirect_uri, response_type: response_type, scope: scope, data: data || state, authority: authority, prompt: prompt, display: display, max_age: max_age, ui_locales: ui_locales, id_token_hint: id_token_hint, login_hint: login_hint, acr_values: acr_values, resource: resource, request: request, request_uri: request_uri, extraQueryParams: extraQueryParams, extraTokenParams: extraTokenParams, request_type: request_type, response_mode: response_mode, client_secret: _this._settings.client_secret, skipUserInfo: skipUserInfo }); var signinState = signinRequest.state; stateStore = stateStore || _this._stateStore; return stateStore.set(signinState.id, signinState.toStorageString()).then(function () { return signinRequest; }); }); }; OidcClient.prototype.readSigninResponseState = function readSigninResponseState(url, stateStore) { var removeState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; _Log.Log.debug("OidcClient.readSigninResponseState"); var useQuery = this._settings.response_mode === "query" || !this._settings.response_mode && _SigninRequest.SigninRequest.isCode(this._settings.response_type); var delimiter = useQuery ? "?" : "#"; var response = new _SigninResponse.SigninResponse(url, delimiter); if (!response.state) { _Log.Log.error("OidcClient.readSigninResponseState: No state in response"); return Promise.reject(new Error("No state in response")); } stateStore = stateStore || this._stateStore; var stateApi = removeState ? stateStore.remove.bind(stateStore) : stateStore.get.bind(stateStore); return stateApi(response.state).then(function (storedStateString) { if (!storedStateString) { _Log.Log.error("OidcClient.readSigninResponseState: No matching state found in storage"); throw new Error("No matching state found in storage"); } var state = _SigninState.SigninState.fromStorageString(storedStateString); return { state: state, response: response }; }); }; OidcClient.prototype.processSigninResponse = function processSigninResponse(url, stateStore) { var _this2 = this; _Log.Log.debug("OidcClient.processSigninResponse"); return this.readSigninResponseState(url, stateStore, true).then(function (_ref2) { var state = _ref2.state, response = _ref2.response; _Log.Log.debug("OidcClient.processSigninResponse: Received state from storage; validating response"); return _this2._validator.validateSigninResponse(state, response); }); }; OidcClient.prototype.createSignoutRequest = function createSignoutRequest() { var _this3 = this; var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, id_token_hint = _ref3.id_token_hint, data = _ref3.data, state = _ref3.state, post_logout_redirect_uri = _ref3.post_logout_redirect_uri, extraQueryParams = _ref3.extraQueryParams, request_type = _ref3.request_type; var stateStore = arguments[1]; _Log.Log.debug("OidcClient.createSignoutRequest"); post_logout_redirect_uri = post_logout_redirect_uri || this._settings.post_logout_redirect_uri; extraQueryParams = extraQueryParams || this._settings.extraQueryParams; return this._metadataService.getEndSessionEndpoint().then(function (url) { if (!url) { _Log.Log.error("OidcClient.createSignoutRequest: No end session endpoint url returned"); throw new Error("no end session endpoint"); } _Log.Log.debug("OidcClient.createSignoutRequest: Received end session endpoint", url); var request = new _SignoutRequest.SignoutRequest({ url: url, id_token_hint: id_token_hint, post_logout_redirect_uri: post_logout_redirect_uri, data: data || state, extraQueryParams: extraQueryParams, request_type: request_type }); var signoutState = request.state; if (signoutState) { _Log.Log.debug("OidcClient.createSignoutRequest: Signout request has state to persist"); stateStore = stateStore || _this3._stateStore; stateStore.set(signoutState.id, signoutState.toStorageString()); } return request; }); }; OidcClient.prototype.readSignoutResponseState = function readSignoutResponseState(url, stateStore) { var removeState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; _Log.Log.debug("OidcClient.readSignoutResponseState"); var response = new _SignoutResponse.SignoutResponse(url); if (!response.state) { _Log.Log.debug("OidcClient.readSignoutResponseState: No state in response"); if (response.error) { _Log.Log.warn("OidcClient.readSignoutResponseState: Response was error: ", response.error); return Promise.reject(new _ErrorResponse.ErrorResponse(response)); } return Promise.resolve({ state: undefined, response: response }); } var stateKey = response.state; stateStore = stateStore || this._stateStore; var stateApi = removeState ? stateStore.remove.bind(stateStore) : stateStore.get.bind(stateStore); return stateApi(stateKey).then(function (storedStateString) { if (!storedStateString) { _Log.Log.error("OidcClient.readSignoutResponseState: No matching state found in storage"); throw new Error("No matching state found in storage"); } var state = _State.State.fromStorageString(storedStateString); return { state: state, response: response }; }); }; OidcClient.prototype.processSignoutResponse = function processSignoutResponse(url, stateStore) { var _this4 = this; _Log.Log.debug("OidcClient.processSignoutResponse"); return this.readSignoutResponseState(url, stateStore, true).then(function (_ref4) { var state = _ref4.state, response = _ref4.response; if (state) { _Log.Log.debug("OidcClient.processSignoutResponse: Received state from storage; validating response"); return _this4._validator.validateSignoutResponse(state, response); } else { _Log.Log.debug("OidcClient.processSignoutResponse: No state from storage; skipping validating response"); return response; } }); }; OidcClient.prototype.clearStaleState = function clearStaleState(stateStore) { _Log.Log.debug("OidcClient.clearStaleState"); stateStore = stateStore || this._stateStore; return _State.State.clearStaleState(stateStore, this.settings.staleStateAge); }; _createClass(OidcClient, [{ key: '_stateStore', get: function get() { return this.settings.stateStore; } }, { key: '_validator', get: function get() { return this.settings.validator; } }, { key: '_metadataService', get: function get() { return this.settings.metadataService; } }, { key: 'settings', get: function get() { return this._settings; } }, { key: 'metadataService', get: function get() { return this._metadataService; } }]); return OidcClient; }(); /***/ }), /***/ "./src/OidcClientSettings.js": /*!***********************************!*\ !*** ./src/OidcClientSettings.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OidcClientSettings = undefined; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _ClockService = __webpack_require__(/*! ./ClockService.js */ "./src/ClockService.js"); var _WebStorageStateStore = __webpack_require__(/*! ./WebStorageStateStore.js */ "./src/WebStorageStateStore.js"); var _ResponseValidator = __webpack_require__(/*! ./ResponseValidator.js */ "./src/ResponseValidator.js"); var _MetadataService = __webpack_require__(/*! ./MetadataService.js */ "./src/MetadataService.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var OidcMetadataUrlPath = '.well-known/openid-configuration'; var DefaultResponseType = "id_token"; var DefaultScope = "openid"; var DefaultClientAuthentication = "client_secret_post"; // The default value must be client_secret_basic, as explained in https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication var DefaultStaleStateAge = 60 * 15; // seconds var DefaultClockSkewInSeconds = 60 * 5; var OidcClientSettings = exports.OidcClientSettings = function () { function OidcClientSettings() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, authority = _ref.authority, metadataUrl = _ref.metadataUrl, metadata = _ref.metadata, signingKeys = _ref.signingKeys, metadataSeed = _ref.metadataSeed, client_id = _ref.client_id, client_secret = _ref.client_secret, _ref$response_type = _ref.response_type, response_type = _ref$response_type === undefined ? DefaultResponseType : _ref$response_type, _ref$scope = _ref.scope, scope = _ref$scope === undefined ? DefaultScope : _ref$scope, redirect_uri = _ref.redirect_uri, post_logout_redirect_uri = _ref.post_logout_redirect_uri, _ref$client_authentic = _ref.client_authentication, client_authentication = _ref$client_authentic === undefined ? DefaultClientAuthentication : _ref$client_authentic, prompt = _ref.prompt, display = _ref.display, max_age = _ref.max_age, ui_locales = _ref.ui_locales, acr_values = _ref.acr_values, resource = _ref.resource, response_mode = _ref.response_mode, _ref$filterProtocolCl = _ref.filterProtocolClaims, filterProtocolClaims = _ref$filterProtocolCl === undefined ? true : _ref$filterProtocolCl, _ref$loadUserInfo = _ref.loadUserInfo, loadUserInfo = _ref$loadUserInfo === undefined ? true : _ref$loadUserInfo, _ref$staleStateAge = _ref.staleStateAge, staleStateAge = _ref$staleStateAge === undefined ? DefaultStaleStateAge : _ref$staleStateAge, _ref$clockSkew = _ref.clockSkew, clockSkew = _ref$clockSkew === undefined ? DefaultClockSkewInSeconds : _ref$clockSkew, _ref$clockService = _ref.clockService, clockService = _ref$clockService === undefined ? new _ClockService.ClockService() : _ref$clockService, _ref$userInfoJwtIssue = _ref.userInfoJwtIssuer, userInfoJwtIssuer = _ref$userInfoJwtIssue === undefined ? 'OP' : _ref$userInfoJwtIssue, _ref$mergeClaims = _ref.mergeClaims, mergeClaims = _ref$mergeClaims === undefined ? false : _ref$mergeClaims, _ref$stateStore = _ref.stateStore, stateStore = _ref$stateStore === undefined ? new _WebStorageStateStore.WebStorageStateStore() : _ref$stateStore, _ref$ResponseValidato = _ref.ResponseValidatorCtor, ResponseValidatorCtor = _ref$ResponseValidato === undefined ? _ResponseValidator.ResponseValidator : _ref$ResponseValidato, _ref$MetadataServiceC = _ref.MetadataServiceCtor, MetadataServiceCtor = _ref$MetadataServiceC === undefined ? _MetadataService.MetadataService : _ref$MetadataServiceC, _ref$extraQueryParams = _ref.extraQueryParams, extraQueryParams = _ref$extraQueryParams === undefined ? {} : _ref$extraQueryParams, _ref$extraTokenParams = _ref.extraTokenParams, extraTokenParams = _ref$extraTokenParams === undefined ? {} : _ref$extraTokenParams; _classCallCheck(this, OidcClientSettings); this._authority = authority; this._metadataUrl = metadataUrl; this._metadata = metadata; this._metadataSeed = metadataSeed; this._signingKeys = signingKeys; this._client_id = client_id; this._client_secret = client_secret; this._response_type = response_type; this._scope = scope; this._redirect_uri = redirect_uri; this._post_logout_redirect_uri = post_logout_redirect_uri; this._client_authentication = client_authentication; this._prompt = prompt; this._display = display; this._max_age = max_age; this._ui_locales = ui_locales; this._acr_values = acr_values; this._resource = resource; this._response_mode = response_mode; this._filterProtocolClaims = !!filterProtocolClaims; this._loadUserInfo = !!loadUserInfo; this._staleStateAge = staleStateAge; this._clockSkew = clockSkew; this._clockService = clockService; this._userInfoJwtIssuer = userInfoJwtIssuer; this._mergeClaims = !!mergeClaims; this._stateStore = stateStore; this._validator = new ResponseValidatorCtor(this); this._metadataService = new MetadataServiceCtor(this); this._extraQueryParams = (typeof extraQueryParams === 'undefined' ? 'undefined' : _typeof(extraQueryParams)) === 'object' ? extraQueryParams : {}; this._extraTokenParams = (typeof extraTokenParams === 'undefined' ? 'undefined' : _typeof(extraTokenParams)) === 'object' ? extraTokenParams : {}; } // client config // get the time OidcClientSettings.prototype.getEpochTime = function getEpochTime() { return this._clockService.getEpochTime(); }; _createClass(OidcClientSettings, [{ key: 'client_id', get: function get() { return this._client_id; }, set: function set(value) { if (!this._client_id) { // one-time set only this._client_id = value; } else { _Log.Log.error("OidcClientSettings.set_client_id: client_id has already been assigned."); throw new Error("client_id has already been assigned."); } } }, { key: 'client_secret', get: function get() { return this._client_secret; } }, { key: 'response_type', get: function get() { return this._response_type; } }, { key: 'scope', get: function get() { return this._scope; } }, { key: 'redirect_uri', get: function get() { return this._redirect_uri; } }, { key: 'post_logout_redirect_uri', get: function get() { return this._post_logout_redirect_uri; } }, { key: 'client_authentication', get: function get() { return this._client_authentication; } // optional protocol params }, { key: 'prompt', get: function get() { return this._prompt; } }, { key: 'display', get: function get() { return this._display; } }, { key: 'max_age', get: function get() { return this._max_age; } }, { key: 'ui_locales', get: function get() { return this._ui_locales; } }, { key: 'acr_values', get: function get() { return this._acr_values; } }, { key: 'resource', get: function get() { return this._resource; } }, { key: 'response_mode', get: function get() { return this._response_mode; } // metadata }, { key: 'authority', get: function get() { return this._authority; }, set: function set(value) { if (!this._authority) { // one-time set only this._authority = value; } else { _Log.Log.error("OidcClientSettings.set_authority: authority has already been assigned."); throw new Error("authority has already been assigned."); } } }, { key: 'metadataUrl', get: function get() { if (!this._metadataUrl) { this._metadataUrl = this.authority; if (this._metadataUrl && this._metadataUrl.indexOf(OidcMetadataUrlPath) < 0) { if (this._metadataUrl[this._metadataUrl.length - 1] !== '/') { this._metadataUrl += '/'; } this._metadataUrl += OidcMetadataUrlPath; } } return this._metadataUrl; } // settable/cachable metadata values }, { key: 'metadata', get: function get() { return this._metadata; }, set: function set(value) { this._metadata = value; } }, { key: 'metadataSeed', get: function get() { return this._metadataSeed; }, set: function set(value) { this._metadataSeed = value; } }, { key: 'signingKeys', get: function get() { return this._signingKeys; }, set: function set(value) { this._signingKeys = value; } // behavior flags }, { key: 'filterProtocolClaims', get: function get() { return this._filterProtocolClaims; } }, { key: 'loadUserInfo', get: function get() { return this._loadUserInfo; } }, { key: 'staleStateAge', get: function get() { return this._staleStateAge; } }, { key: 'clockSkew', get: function get() { return this._clockSkew; } }, { key: 'userInfoJwtIssuer', get: function get() { return this._userInfoJwtIssuer; } }, { key: 'mergeClaims', get: function get() { return this._mergeClaims; } }, { key: 'stateStore', get: function get() { return this._stateStore; } }, { key: 'validator', get: function get() { return this._validator; } }, { key: 'metadataService', get: function get() { return this._metadataService; } // extra query params }, { key: 'extraQueryParams', get: function get() { return this._extraQueryParams; }, set: function set(value) { if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') { this._extraQueryParams = value; } else { this._extraQueryParams = {}; } } // extra token params }, { key: 'extraTokenParams', get: function get() { return this._extraTokenParams; }, set: function set(value) { if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') { this._extraTokenParams = value; } else { this._extraTokenParams = {}; } } }]); return OidcClientSettings; }(); /***/ }), /***/ "./src/PopupNavigator.js": /*!*******************************!*\ !*** ./src/PopupNavigator.js ***! \*******************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PopupNavigator = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _PopupWindow = __webpack_require__(/*! ./PopupWindow.js */ "./src/PopupWindow.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var PopupNavigator = exports.PopupNavigator = function () { function PopupNavigator() { _classCallCheck(this, PopupNavigator); } PopupNavigator.prototype.prepare = function prepare(params) { var popup = new _PopupWindow.PopupWindow(params); return Promise.resolve(popup); }; PopupNavigator.prototype.callback = function callback(url, keepOpen, delimiter) { _Log.Log.debug("PopupNavigator.callback"); try { _PopupWindow.PopupWindow.notifyOpener(url, keepOpen, delimiter); return Promise.resolve(); } catch (e) { return Promise.reject(e); } }; return PopupNavigator; }(); /***/ }), /***/ "./src/PopupWindow.js": /*!****************************!*\ !*** ./src/PopupWindow.js ***! \****************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PopupWindow = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _UrlUtility = __webpack_require__(/*! ./UrlUtility.js */ "./src/UrlUtility.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var CheckForPopupClosedInterval = 500; var DefaultPopupFeatures = 'location=no,toolbar=no,width=500,height=500,left=100,top=100;'; //const DefaultPopupFeatures = 'location=no,toolbar=no,width=500,height=500,left=100,top=100;resizable=yes'; var DefaultPopupTarget = "_blank"; var PopupWindow = exports.PopupWindow = function () { function PopupWindow(params) { var _this = this; _classCallCheck(this, PopupWindow); this._promise = new Promise(function (resolve, reject) { _this._resolve = resolve; _this._reject = reject; }); var target = params.popupWindowTarget || DefaultPopupTarget; var features = params.popupWindowFeatures || DefaultPopupFeatures; this._popup = window.open('', target, features); if (this._popup) { _Log.Log.debug("PopupWindow.ctor: popup successfully created"); this._checkForPopupClosedTimer = window.setInterval(this._checkForPopupClosed.bind(this), CheckForPopupClosedInterval); } } PopupWindow.prototype.navigate = function navigate(params) { if (!this._popup) { this._error("PopupWindow.navigate: Error opening popup window"); } else if (!params || !params.url) { this._error("PopupWindow.navigate: no url provided"); this._error("No url provided"); } else { _Log.Log.debug("PopupWindow.navigate: Setting URL in popup"); this._id = params.id; if (this._id) { window["popupCallback_" + params.id] = this._callback.bind(this); } this._popup.focus(); this._popup.window.location = params.url; } return this.promise; }; PopupWindow.prototype._success = function _success(data) { _Log.Log.debug("PopupWindow.callback: Successful response from popup window"); this._cleanup(); this._resolve(data); }; PopupWindow.prototype._error = function _error(message) { _Log.Log.error("PopupWindow.error: ", message); this._cleanup(); this._reject(new Error(message)); }; PopupWindow.prototype.close = function close() { this._cleanup(false); }; PopupWindow.prototype._cleanup = function _cleanup(keepOpen) { _Log.Log.debug("PopupWindow.cleanup"); window.clearInterval(this._checkForPopupClosedTimer); this._checkForPopupClosedTimer = null; delete window["popupCallback_" + this._id]; if (this._popup && !keepOpen) { this._popup.close(); } this._popup = null; }; PopupWindow.prototype._checkForPopupClosed = function _checkForPopupClosed() { if (!this._popup || this._popup.closed) { this._error("Popup window closed"); } }; PopupWindow.prototype._callback = function _callback(url, keepOpen) { this._cleanup(keepOpen); if (url) { _Log.Log.debug("PopupWindow.callback success"); this._success({ url: url }); } else { _Log.Log.debug("PopupWindow.callback: Invalid response from popup"); this._error("Invalid response from popup"); } }; PopupWindow.notifyOpener = function notifyOpener(url, keepOpen, delimiter) { if (window.opener) { url = url || window.location.href; if (url) { var data = _UrlUtility.UrlUtility.parseUrlFragment(url, delimiter); if (data.state) { var name = "popupCallback_" + data.state; var callback = window.opener[name]; if (callback) { _Log.Log.debug("PopupWindow.notifyOpener: passing url message to opener"); callback(url, keepOpen); } else { _Log.Log.warn("PopupWindow.notifyOpener: no matching callback found on opener"); } } else { _Log.Log.warn("PopupWindow.notifyOpener: no state found in response url"); } } } else { _Log.Log.warn("PopupWindow.notifyOpener: no window.opener. Can't complete notification."); } }; _createClass(PopupWindow, [{ key: 'promise', get: function get() { return this._promise; } }]); return PopupWindow; }(); /***/ }), /***/ "./src/RedirectNavigator.js": /*!**********************************!*\ !*** ./src/RedirectNavigator.js ***! \**********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RedirectNavigator = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var RedirectNavigator = exports.RedirectNavigator = function () { function RedirectNavigator() { _classCallCheck(this, RedirectNavigator); } RedirectNavigator.prototype.prepare = function prepare() { return Promise.resolve(this); }; RedirectNavigator.prototype.navigate = function navigate(params) { if (!params || !params.url) { _Log.Log.error("RedirectNavigator.navigate: No url provided"); return Promise.reject(new Error("No url provided")); } if (params.useReplaceToNavigate) { window.location.replace(params.url); } else { window.location = params.url; } return Promise.resolve(); }; _createClass(RedirectNavigator, [{ key: "url", get: function get() { return window.location.href; } }]); return RedirectNavigator; }(); /***/ }), /***/ "./src/ResponseValidator.js": /*!**********************************!*\ !*** ./src/ResponseValidator.js ***! \**********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ResponseValidator = undefined; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _MetadataService = __webpack_require__(/*! ./MetadataService.js */ "./src/MetadataService.js"); var _UserInfoService = __webpack_require__(/*! ./UserInfoService.js */ "./src/UserInfoService.js"); var _TokenClient = __webpack_require__(/*! ./TokenClient.js */ "./src/TokenClient.js"); var _ErrorResponse = __webpack_require__(/*! ./ErrorResponse.js */ "./src/ErrorResponse.js"); var _JoseUtil = __webpack_require__(/*! ./JoseUtil.js */ "./src/JoseUtil.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var ProtocolClaims = ["nonce", "at_hash", "iat", "nbf", "exp", "aud", "iss", "c_hash"]; var ResponseValidator = exports.ResponseValidator = function () { function ResponseValidator(settings) { var MetadataServiceCtor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _MetadataService.MetadataService; var UserInfoServiceCtor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _UserInfoService.UserInfoService; var joseUtil = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _JoseUtil.JoseUtil; var TokenClientCtor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _TokenClient.TokenClient; _classCallCheck(this, ResponseValidator); if (!settings) { _Log.Log.error("ResponseValidator.ctor: No settings passed to ResponseValidator"); throw new Error("settings"); } this._settings = settings; this._metadataService = new MetadataServiceCtor(this._settings); this._userInfoService = new UserInfoServiceCtor(this._settings); this._joseUtil = joseUtil; this._tokenClient = new TokenClientCtor(this._settings); } ResponseValidator.prototype.validateSigninResponse = function validateSigninResponse(state, response) { var _this = this; _Log.Log.debug("ResponseValidator.validateSigninResponse"); return this._processSigninParams(state, response).then(function (response) { _Log.Log.debug("ResponseValidator.validateSigninResponse: state processed"); return _this._validateTokens(state, response).then(function (response) { _Log.Log.debug("ResponseValidator.validateSigninResponse: tokens validated"); return _this._processClaims(state, response).then(function (response) { _Log.Log.debug("ResponseValidator.validateSigninResponse: claims processed"); return response; }); }); }); }; ResponseValidator.prototype.validateSignoutResponse = function validateSignoutResponse(state, response) { if (state.id !== response.state) { _Log.Log.error("ResponseValidator.validateSignoutResponse: State does not match"); return Promise.reject(new Error("State does not match")); } // now that we know the state matches, take the stored data // and set it into the response so callers can get their state // this is important for both success & error outcomes _Log.Log.debug("ResponseValidator.validateSignoutResponse: state validated"); response.state = state.data; if (response.error) { _Log.Log.warn("ResponseValidator.validateSignoutResponse: Response was error", response.error); return Promise.reject(new _ErrorResponse.ErrorResponse(response)); } return Promise.resolve(response); }; ResponseValidator.prototype._processSigninParams = function _processSigninParams(state, response) { if (state.id !== response.state) { _Log.Log.error("ResponseValidator._processSigninParams: State does not match"); return Promise.reject(new Error("State does not match")); } if (!state.client_id) { _Log.Log.error("ResponseValidator._processSigninParams: No client_id on state"); return Promise.reject(new Error("No client_id on state")); } if (!state.authority) { _Log.Log.error("ResponseValidator._processSigninParams: No authority on state"); return Promise.reject(new Error("No authority on state")); } // this allows the authority to be loaded from the signin state if (!this._settings.authority) { this._settings.authority = state.authority; } // ensure we're using the correct authority if the authority is not loaded from signin state else if (this._settings.authority && this._settings.authority !== state.authority) { _Log.Log.error("ResponseValidator._processSigninParams: authority mismatch on settings vs. signin state"); return Promise.reject(new Error("authority mismatch on settings vs. signin state")); } // this allows the client_id to be loaded from the signin state if (!this._settings.client_id) { this._settings.client_id = state.client_id; } // ensure we're using the correct client_id if the client_id is not loaded from signin state else if (this._settings.client_id && this._settings.client_id !== state.client_id) { _Log.Log.error("ResponseValidator._processSigninParams: client_id mismatch on settings vs. signin state"); return Promise.reject(new Error("client_id mismatch on settings vs. signin state")); } // now that we know the state matches, take the stored data // and set it into the response so callers can get their state // this is important for both success & error outcomes _Log.Log.debug("ResponseValidator._processSigninParams: state validated"); response.state = state.data; if (response.error) { _Log.Log.warn("ResponseValidator._processSigninParams: Response was error", response.error); return Promise.reject(new _ErrorResponse.ErrorResponse(response)); } if (state.nonce && !response.id_token) { _Log.Log.error("ResponseValidator._processSigninParams: Expecting id_token in response"); return Promise.reject(new Error("No id_token in response")); } if (!state.nonce && response.id_token) { _Log.Log.error("ResponseValidator._processSigninParams: Not expecting id_token in response"); return Promise.reject(new Error("Unexpected id_token in response")); } if (state.code_verifier && !response.code) { _Log.Log.error("ResponseValidator._processSigninParams: Expecting code in response"); return Promise.reject(new Error("No code in response")); } if (!state.code_verifier && response.code) { _Log.Log.error("ResponseValidator._processSigninParams: Not expecting code in response"); return Promise.reject(new Error("Unexpected code in response")); } if (!response.scope) { // if there's no scope on the response, then assume all scopes granted (per-spec) and copy over scopes from original request response.scope = state.scope; } return Promise.resolve(response); }; ResponseValidator.prototype._processClaims = function _processClaims(state, response) { var _this2 = this; if (response.isOpenIdConnect) { _Log.Log.debug("ResponseValidator._processClaims: response is OIDC, processing claims"); response.profile = this._filterProtocolClaims(response.profile); if (state.skipUserInfo !== true && this._settings.loadUserInfo && response.access_token) { _Log.Log.debug("ResponseValidator._processClaims: loading user info"); return this._userInfoService.getClaims(response.access_token).then(function (claims) { _Log.Log.debug("ResponseValidator._processClaims: user info claims received from user info endpoint"); if (claims.sub !== response.profile.sub) { _Log.Log.error("ResponseValidator._processClaims: sub from user info endpoint does not match sub in id_token"); return Promise.reject(new Error("sub from user info endpoint does not match sub in id_token")); } response.profile = _this2._mergeClaims(response.profile, claims); _Log.Log.debug("ResponseValidator._processClaims: user info claims received, updated profile:", response.profile); return response; }); } else { _Log.Log.debug("ResponseValidator._processClaims: not loading user info"); } } else { _Log.Log.debug("ResponseValidator._processClaims: response is not OIDC, not processing claims"); } return Promise.resolve(response); }; ResponseValidator.prototype._mergeClaims = function _mergeClaims(claims1, claims2) { var result = Object.assign({}, claims1); for (var name in claims2) { var values = claims2[name]; if (!Array.isArray(values)) { values = [values]; } for (var i = 0; i < values.length; i++) { var value = values[i]; if (!result[name]) { result[name] = value; } else if (Array.isArray(result[name])) { if (result[name].indexOf(value) < 0) { result[name].push(value); } } else if (result[name] !== value) { if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && this._settings.mergeClaims) { result[name] = this._mergeClaims(result[name], value); } else { result[name] = [result[name], value]; } } } } return result; }; ResponseValidator.prototype._filterProtocolClaims = function _filterProtocolClaims(claims) { _Log.Log.debug("ResponseValidator._filterProtocolClaims, incoming claims:", claims); var result = Object.assign({}, claims); if (this._settings._filterProtocolClaims) { ProtocolClaims.forEach(function (type) { delete result[type]; }); _Log.Log.debug("ResponseValidator._filterProtocolClaims: protocol claims filtered", result); } else { _Log.Log.debug("ResponseValidator._filterProtocolClaims: protocol claims not filtered"); } return result; }; ResponseValidator.prototype._validateTokens = function _validateTokens(state, response) { if (response.code) { _Log.Log.debug("ResponseValidator._validateTokens: Validating code"); return this._processCode(state, response); } if (response.id_token) { if (response.access_token) { _Log.Log.debug("ResponseValidator._validateTokens: Validating id_token and access_token"); return this._validateIdTokenAndAccessToken(state, response); } _Log.Log.debug("ResponseValidator._validateTokens: Validating id_token"); return this._validateIdToken(state, response); } _Log.Log.debug("ResponseValidator._validateTokens: No code to process or id_token to validate"); return Promise.resolve(response); }; ResponseValidator.prototype._processCode = function _processCode(state, response) { var _this3 = this; var request = { client_id: state.client_id, client_secret: state.client_secret, code: response.code, redirect_uri: state.redirect_uri, code_verifier: state.code_verifier }; if (state.extraTokenParams && _typeof(state.extraTokenParams) === 'object') { Object.assign(request, state.extraTokenParams); } return this._tokenClient.exchangeCode(request).then(function (tokenResponse) { for (var key in tokenResponse) { response[key] = tokenResponse[key]; } if (response.id_token) { _Log.Log.debug("ResponseValidator._processCode: token response successful, processing id_token"); return _this3._validateIdTokenAttributes(state, response); } else { _Log.Log.debug("ResponseValidator._processCode: token response successful, returning response"); } return response; }); }; ResponseValidator.prototype._validateIdTokenAttributes = function _validateIdTokenAttributes(state, response) { var _this4 = this; return this._metadataService.getIssuer().then(function (issuer) { var audience = state.client_id; var clockSkewInSeconds = _this4._settings.clockSkew; _Log.Log.debug("ResponseValidator._validateIdTokenAttributes: Validaing JWT attributes; using clock skew (in seconds) of: ", clockSkewInSeconds); return _this4._settings.getEpochTime().then(function (now) { return _this4._joseUtil.validateJwtAttributes(response.id_token, issuer, audience, clockSkewInSeconds, now).then(function (payload) { if (state.nonce && state.nonce !== payload.nonce) { _Log.Log.error("ResponseValidator._validateIdTokenAttributes: Invalid nonce in id_token"); return Promise.reject(new Error("Invalid nonce in id_token")); } if (!payload.sub) { _Log.Log.error("ResponseValidator._validateIdTokenAttributes: No sub present in id_token"); return Promise.reject(new Error("No sub present in id_token")); } response.profile = payload; return response; }); }); }); }; ResponseValidator.prototype._validateIdTokenAndAccessToken = function _validateIdTokenAndAccessToken(state, response) { var _this5 = this; return this._validateIdToken(state, response).then(function (response) { return _this5._validateAccessToken(response); }); }; ResponseValidator.prototype._getSigningKeyForJwt = function _getSigningKeyForJwt(jwt) { var _this6 = this; return this._metadataService.getSigningKeys().then(function (keys) { var kid = jwt.header.kid; if (!keys) { _Log.Log.error("ResponseValidator._validateIdToken: No signing keys from metadata"); return Promise.reject(new Error("No signing keys from metadata")); } _Log.Log.debug("ResponseValidator._validateIdToken: Received signing keys"); var key = void 0; if (!kid) { keys = _this6._filterByAlg(keys, jwt.header.alg); if (keys.length > 1) { _Log.Log.error("ResponseValidator._validateIdToken: No kid found in id_token and more than one key found in metadata"); return Promise.reject(new Error("No kid found in id_token and more than one key found in metadata")); } else { // kid is mandatory only when there are multiple keys in the referenced JWK Set document // see http://openid.net/specs/openid-connect-core-1_0.html#Signing key = keys[0]; } } else { key = keys.filter(function (key) { return key.kid === kid; })[0]; } return Promise.resolve(key); }); }; ResponseValidator.prototype._getSigningKeyForJwtWithSingleRetry = function _getSigningKeyForJwtWithSingleRetry(jwt) { var _this7 = this; return this._getSigningKeyForJwt(jwt).then(function (key) { // Refreshing signingKeys if no suitable verification key is present for given jwt header. if (!key) { // set to undefined, to trigger network call to jwks_uri. _this7._metadataService.resetSigningKeys(); return _this7._getSigningKeyForJwt(jwt); } else { return Promise.resolve(key); } }); }; ResponseValidator.prototype._validateIdToken = function _validateIdToken(state, response) { var _this8 = this; if (!state.nonce) { _Log.Log.error("ResponseValidator._validateIdToken: No nonce on state"); return Promise.reject(new Error("No nonce on state")); } var jwt = this._joseUtil.parseJwt(response.id_token); if (!jwt || !jwt.header || !jwt.payload) { _Log.Log.error("ResponseValidator._validateIdToken: Failed to parse id_token", jwt); return Promise.reject(new Error("Failed to parse id_token")); } if (state.nonce !== jwt.payload.nonce) { _Log.Log.error("ResponseValidator._validateIdToken: Invalid nonce in id_token"); return Promise.reject(new Error("Invalid nonce in id_token")); } return this._metadataService.getIssuer().then(function (issuer) { _Log.Log.debug("ResponseValidator._validateIdToken: Received issuer"); return _this8._getSigningKeyForJwtWithSingleRetry(jwt).then(function (key) { if (!key) { _Log.Log.error("ResponseValidator._validateIdToken: No key matching kid or alg found in signing keys"); return Promise.reject(new Error("No key matching kid or alg found in signing keys")); } var audience = state.client_id; var clockSkewInSeconds = _this8._settings.clockSkew; _Log.Log.debug("ResponseValidator._validateIdToken: Validaing JWT; using clock skew (in seconds) of: ", clockSkewInSeconds); return _this8._joseUtil.validateJwt(response.id_token, key, issuer, audience, clockSkewInSeconds).then(function () { _Log.Log.debug("ResponseValidator._validateIdToken: JWT validation successful"); if (!jwt.payload.sub) { _Log.Log.error("ResponseValidator._validateIdToken: No sub present in id_token"); return Promise.reject(new Error("No sub present in id_token")); } response.profile = jwt.payload; return response; }); }); }); }; ResponseValidator.prototype._filterByAlg = function _filterByAlg(keys, alg) { var kty = null; if (alg.startsWith("RS")) { kty = "RSA"; } else if (alg.startsWith("PS")) { kty = "PS"; } else if (alg.startsWith("ES")) { kty = "EC"; } else { _Log.Log.debug("ResponseValidator._filterByAlg: alg not supported: ", alg); return []; } _Log.Log.debug("ResponseValidator._filterByAlg: Looking for keys that match kty: ", kty); keys = keys.filter(function (key) { return key.kty === kty; }); _Log.Log.debug("ResponseValidator._filterByAlg: Number of keys that match kty: ", kty, keys.length); return keys; }; ResponseValidator.prototype._validateAccessToken = function _validateAccessToken(response) { if (!response.profile) { _Log.Log.error("ResponseValidator._validateAccessToken: No profile loaded from id_token"); return Promise.reject(new Error("No profile loaded from id_token")); } if (!response.profile.at_hash) { _Log.Log.error("ResponseValidator._validateAccessToken: No at_hash in id_token"); return Promise.reject(new Error("No at_hash in id_token")); } if (!response.id_token) { _Log.Log.error("ResponseValidator._validateAccessToken: No id_token"); return Promise.reject(new Error("No id_token")); } var jwt = this._joseUtil.parseJwt(response.id_token); if (!jwt || !jwt.header) { _Log.Log.error("ResponseValidator._validateAccessToken: Failed to parse id_token", jwt); return Promise.reject(new Error("Failed to parse id_token")); } var hashAlg = jwt.header.alg; if (!hashAlg || hashAlg.length !== 5) { _Log.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:", hashAlg); return Promise.reject(new Error("Unsupported alg: " + hashAlg)); } var hashBits = hashAlg.substr(2, 3); if (!hashBits) { _Log.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:", hashAlg, hashBits); return Promise.reject(new Error("Unsupported alg: " + hashAlg)); } hashBits = parseInt(hashBits); if (hashBits !== 256 && hashBits !== 384 && hashBits !== 512) { _Log.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:", hashAlg, hashBits); return Promise.reject(new Error("Unsupported alg: " + hashAlg)); } var sha = "sha" + hashBits; var hash = this._joseUtil.hashString(response.access_token, sha); if (!hash) { _Log.Log.error("ResponseValidator._validateAccessToken: access_token hash failed:", sha); return Promise.reject(new Error("Failed to validate at_hash")); } var left = hash.substr(0, hash.length / 2); var left_b64u = this._joseUtil.hexToBase64Url(left); if (left_b64u !== response.profile.at_hash) { _Log.Log.error("ResponseValidator._validateAccessToken: Failed to validate at_hash", left_b64u, response.profile.at_hash); return Promise.reject(new Error("Failed to validate at_hash")); } _Log.Log.debug("ResponseValidator._validateAccessToken: success"); return Promise.resolve(response); }; return ResponseValidator; }(); /***/ }), /***/ "./src/SessionMonitor.js": /*!*******************************!*\ !*** ./src/SessionMonitor.js ***! \*******************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SessionMonitor = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _CheckSessionIFrame = __webpack_require__(/*! ./CheckSessionIFrame.js */ "./src/CheckSessionIFrame.js"); var _Global = __webpack_require__(/*! ./Global.js */ "./src/Global.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var SessionMonitor = exports.SessionMonitor = function () { function SessionMonitor(userManager) { var _this = this; var CheckSessionIFrameCtor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _CheckSessionIFrame.CheckSessionIFrame; var timer = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _Global.Global.timer; _classCallCheck(this, SessionMonitor); if (!userManager) { _Log.Log.error("SessionMonitor.ctor: No user manager passed to SessionMonitor"); throw new Error("userManager"); } this._userManager = userManager; this._CheckSessionIFrameCtor = CheckSessionIFrameCtor; this._timer = timer; this._userManager.events.addUserLoaded(this._start.bind(this)); this._userManager.events.addUserUnloaded(this._stop.bind(this)); Promise.resolve(this._userManager.getUser().then(function (user) { // doing this manually here since calling getUser // doesn't trigger load event. if (user) { _this._start(user); } else if (_this._settings.monitorAnonymousSession) { _this._userManager.querySessionStatus().then(function (session) { var tmpUser = { session_state: session.session_state }; if (session.sub && session.sid) { tmpUser.profile = { sub: session.sub, sid: session.sid }; } _this._start(tmpUser); }).catch(function (err) { // catch to suppress errors since we're in a ctor _Log.Log.error("SessionMonitor ctor: error from querySessionStatus:", err.message); }); } }).catch(function (err) { // catch to suppress errors since we're in a ctor _Log.Log.error("SessionMonitor ctor: error from getUser:", err.message); })); } SessionMonitor.prototype._start = function _start(user) { var _this2 = this; var session_state = user.session_state; if (session_state) { if (user.profile) { this._sub = user.profile.sub; this._sid = user.profile.sid; _Log.Log.debug("SessionMonitor._start: session_state:", session_state, ", sub:", this._sub); } else { this._sub = undefined; this._sid = undefined; _Log.Log.debug("SessionMonitor._start: session_state:", session_state, ", anonymous user"); } if (!this._checkSessionIFrame) { this._metadataService.getCheckSessionIframe().then(function (url) { if (url) { _Log.Log.debug("SessionMonitor._start: Initializing check session iframe"); var client_id = _this2._client_id; var interval = _this2._checkSessionInterval; var stopOnError = _this2._stopCheckSessionOnError; _this2._checkSessionIFrame = new _this2._CheckSessionIFrameCtor(_this2._callback.bind(_this2), client_id, url, interval, stopOnError); _this2._checkSessionIFrame.load().then(function () { _this2._checkSessionIFrame.start(session_state); }); } else { _Log.Log.warn("SessionMonitor._start: No check session iframe found in the metadata"); } }).catch(function (err) { // catch to suppress errors since we're in non-promise callback _Log.Log.error("SessionMonitor._start: Error from getCheckSessionIframe:", err.message); }); } else { this._checkSessionIFrame.start(session_state); } } }; SessionMonitor.prototype._stop = function _stop() { var _this3 = this; this._sub = undefined; this._sid = undefined; if (this._checkSessionIFrame) { _Log.Log.debug("SessionMonitor._stop"); this._checkSessionIFrame.stop(); } if (this._settings.monitorAnonymousSession) { // using a timer to delay re-initialization to avoid race conditions during signout var timerHandle = this._timer.setInterval(function () { _this3._timer.clearInterval(timerHandle); _this3._userManager.querySessionStatus().then(function (session) { var tmpUser = { session_state: session.session_state }; if (session.sub && session.sid) { tmpUser.profile = { sub: session.sub, sid: session.sid }; } _this3._start(tmpUser); }).catch(function (err) { // catch to suppress errors since we're in a callback _Log.Log.error("SessionMonitor: error from querySessionStatus:", err.message); }); }, 1000); } }; SessionMonitor.prototype._callback = function _callback() { var _this4 = this; this._userManager.querySessionStatus().then(function (session) { var raiseEvent = true; if (session) { if (session.sub === _this4._sub) { raiseEvent = false; _this4._checkSessionIFrame.start(session.session_state); if (session.sid === _this4._sid) { _Log.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, restarting check session iframe; session_state:", session.session_state); } else { _Log.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, session state has changed, restarting check session iframe; session_state:", session.session_state); _this4._userManager.events._raiseUserSessionChanged(); } } else { _Log.Log.debug("SessionMonitor._callback: Different subject signed into OP:", session.sub); } } else { _Log.Log.debug("SessionMonitor._callback: Subject no longer signed into OP"); } if (raiseEvent) { if (_this4._sub) { _Log.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed out event"); _this4._userManager.events._raiseUserSignedOut(); } else { _Log.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed in event"); _this4._userManager.events._raiseUserSignedIn(); } } }).catch(function (err) { if (_this4._sub) { _Log.Log.debug("SessionMonitor._callback: Error calling queryCurrentSigninSession; raising signed out event", err.message); _this4._userManager.events._raiseUserSignedOut(); } }); }; _createClass(SessionMonitor, [{ key: '_settings', get: function get() { return this._userManager.settings; } }, { key: '_metadataService', get: function get() { return this._userManager.metadataService; } }, { key: '_client_id', get: function get() { return this._settings.client_id; } }, { key: '_checkSessionInterval', get: function get() { return this._settings.checkSessionInterval; } }, { key: '_stopCheckSessionOnError', get: function get() { return this._settings.stopCheckSessionOnError; } }]); return SessionMonitor; }(); /***/ }), /***/ "./src/SigninRequest.js": /*!******************************!*\ !*** ./src/SigninRequest.js ***! \******************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SigninRequest = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _UrlUtility = __webpack_require__(/*! ./UrlUtility.js */ "./src/UrlUtility.js"); var _SigninState = __webpack_require__(/*! ./SigninState.js */ "./src/SigninState.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var SigninRequest = exports.SigninRequest = function () { function SigninRequest(_ref) { var url = _ref.url, client_id = _ref.client_id, redirect_uri = _ref.redirect_uri, response_type = _ref.response_type, scope = _ref.scope, authority = _ref.authority, data = _ref.data, prompt = _ref.prompt, display = _ref.display, max_age = _ref.max_age, ui_locales = _ref.ui_locales, id_token_hint = _ref.id_token_hint, login_hint = _ref.login_hint, acr_values = _ref.acr_values, resource = _ref.resource, response_mode = _ref.response_mode, request = _ref.request, request_uri = _ref.request_uri, extraQueryParams = _ref.extraQueryParams, request_type = _ref.request_type, client_secret = _ref.client_secret, extraTokenParams = _ref.extraTokenParams, skipUserInfo = _ref.skipUserInfo; _classCallCheck(this, SigninRequest); if (!url) { _Log.Log.error("SigninRequest.ctor: No url passed"); throw new Error("url"); } if (!client_id) { _Log.Log.error("SigninRequest.ctor: No client_id passed"); throw new Error("client_id"); } if (!redirect_uri) { _Log.Log.error("SigninRequest.ctor: No redirect_uri passed"); throw new Error("redirect_uri"); } if (!response_type) { _Log.Log.error("SigninRequest.ctor: No response_type passed"); throw new Error("response_type"); } if (!scope) { _Log.Log.error("SigninRequest.ctor: No scope passed"); throw new Error("scope"); } if (!authority) { _Log.Log.error("SigninRequest.ctor: No authority passed"); throw new Error("authority"); } var oidc = SigninRequest.isOidc(response_type); var code = SigninRequest.isCode(response_type); if (!response_mode) { response_mode = SigninRequest.isCode(response_type) ? "query" : null; } this.state = new _SigninState.SigninState({ nonce: oidc, data: data, client_id: client_id, authority: authority, redirect_uri: redirect_uri, code_verifier: code, request_type: request_type, response_mode: response_mode, client_secret: client_secret, scope: scope, extraTokenParams: extraTokenParams, skipUserInfo: skipUserInfo }); url = _UrlUtility.UrlUtility.addQueryParam(url, "client_id", client_id); url = _UrlUtility.UrlUtility.addQueryParam(url, "redirect_uri", redirect_uri); url = _UrlUtility.UrlUtility.addQueryParam(url, "response_type", response_type); url = _UrlUtility.UrlUtility.addQueryParam(url, "scope", scope); url = _UrlUtility.UrlUtility.addQueryParam(url, "state", this.state.id); if (oidc) { url = _UrlUtility.UrlUtility.addQueryParam(url, "nonce", this.state.nonce); } if (code) { url = _UrlUtility.UrlUtility.addQueryParam(url, "code_challenge", this.state.code_challenge); url = _UrlUtility.UrlUtility.addQueryParam(url, "code_challenge_method", "S256"); } var optional = { prompt: prompt, display: display, max_age: max_age, ui_locales: ui_locales, id_token_hint: id_token_hint, login_hint: login_hint, acr_values: acr_values, resource: resource, request: request, request_uri: request_uri, response_mode: response_mode }; for (var key in optional) { if (optional[key]) { url = _UrlUtility.UrlUtility.addQueryParam(url, key, optional[key]); } } for (var _key in extraQueryParams) { url = _UrlUtility.UrlUtility.addQueryParam(url, _key, extraQueryParams[_key]); } this.url = url; } SigninRequest.isOidc = function isOidc(response_type) { var result = response_type.split(/\s+/g).filter(function (item) { return item === "id_token"; }); return !!result[0]; }; SigninRequest.isOAuth = function isOAuth(response_type) { var result = response_type.split(/\s+/g).filter(function (item) { return item === "token"; }); return !!result[0]; }; SigninRequest.isCode = function isCode(response_type) { var result = response_type.split(/\s+/g).filter(function (item) { return item === "code"; }); return !!result[0]; }; return SigninRequest; }(); /***/ }), /***/ "./src/SigninResponse.js": /*!*******************************!*\ !*** ./src/SigninResponse.js ***! \*******************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SigninResponse = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var _UrlUtility = __webpack_require__(/*! ./UrlUtility.js */ "./src/UrlUtility.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var OidcScope = "openid"; var SigninResponse = exports.SigninResponse = function () { function SigninResponse(url) { var delimiter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "#"; _classCallCheck(this, SigninResponse); var values = _UrlUtility.UrlUtility.parseUrlFragment(url, delimiter); this.error = values.error; this.error_description = values.error_description; this.error_uri = values.error_uri; this.code = values.code; this.state = values.state; this.id_token = values.id_token; this.session_state = values.session_state; this.access_token = values.access_token; this.token_type = values.token_type; this.scope = values.scope; this.profile = undefined; // will be set from ResponseValidator this.expires_in = values.expires_in; } _createClass(SigninResponse, [{ key: "expires_in", get: function get() { if (this.expires_at) { var now = parseInt(Date.now() / 1000); return this.expires_at - now; } return undefined; }, set: function set(value) { var expires_in = parseInt(value); if (typeof expires_in === 'number' && expires_in > 0) { var now = parseInt(Date.now() / 1000); this.expires_at = now + expires_in; } } }, { key: "expired", get: function get() { var expires_in = this.expires_in; if (expires_in !== undefined) { return expires_in <= 0; } return undefined; } }, { key: "scopes", get: function get() { return (this.scope || "").split(" "); } }, { key: "isOpenIdConnect", get: function get() { return this.scopes.indexOf(OidcScope) >= 0 || !!this.id_token; } }]); return SigninResponse; }(); /***/ }), /***/ "./src/SigninState.js": /*!****************************!*\ !*** ./src/SigninState.js ***! \****************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SigninState = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _State2 = __webpack_require__(/*! ./State.js */ "./src/State.js"); var _JoseUtil = __webpack_require__(/*! ./JoseUtil.js */ "./src/JoseUtil.js"); var _random = __webpack_require__(/*! ./random.js */ "./src/random.js"); var _random2 = _interopRequireDefault(_random); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var SigninState = exports.SigninState = function (_State) { _inherits(SigninState, _State); function SigninState() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, nonce = _ref.nonce, authority = _ref.authority, client_id = _ref.client_id, redirect_uri = _ref.redirect_uri, code_verifier = _ref.code_verifier, response_mode = _ref.response_mode, client_secret = _ref.client_secret, scope = _ref.scope, extraTokenParams = _ref.extraTokenParams, skipUserInfo = _ref.skipUserInfo; _classCallCheck(this, SigninState); var _this = _possibleConstructorReturn(this, _State.call(this, arguments[0])); if (nonce === true) { _this._nonce = (0, _random2.default)(); } else if (nonce) { _this._nonce = nonce; } if (code_verifier === true) { // random() produces 32 length _this._code_verifier = (0, _random2.default)() + (0, _random2.default)() + (0, _random2.default)(); } else if (code_verifier) { _this._code_verifier = code_verifier; } if (_this.code_verifier) { var hash = _JoseUtil.JoseUtil.hashString(_this.code_verifier, "SHA256"); _this._code_challenge = _JoseUtil.JoseUtil.hexToBase64Url(hash); } _this._redirect_uri = redirect_uri; _this._authority = authority; _this._client_id = client_id; _this._response_mode = response_mode; _this._client_secret = client_secret; _this._scope = scope; _this._extraTokenParams = extraTokenParams; _this._skipUserInfo = skipUserInfo; return _this; } SigninState.prototype.toStorageString = function toStorageString() { _Log.Log.debug("SigninState.toStorageString"); return JSON.stringify({ id: this.id, data: this.data, created: this.created, request_type: this.request_type, nonce: this.nonce, code_verifier: this.code_verifier, redirect_uri: this.redirect_uri, authority: this.authority, client_id: this.client_id, response_mode: this.response_mode, client_secret: this.client_secret, scope: this.scope, extraTokenParams: this.extraTokenParams, skipUserInfo: this.skipUserInfo }); }; SigninState.fromStorageString = function fromStorageString(storageString) { _Log.Log.debug("SigninState.fromStorageString"); var data = JSON.parse(storageString); return new SigninState(data); }; _createClass(SigninState, [{ key: 'nonce', get: function get() { return this._nonce; } }, { key: 'authority', get: function get() { return this._authority; } }, { key: 'client_id', get: function get() { return this._client_id; } }, { key: 'redirect_uri', get: function get() { return this._redirect_uri; } }, { key: 'code_verifier', get: function get() { return this._code_verifier; } }, { key: 'code_challenge', get: function get() { return this._code_challenge; } }, { key: 'response_mode', get: function get() { return this._response_mode; } }, { key: 'client_secret', get: function get() { return this._client_secret; } }, { key: 'scope', get: function get() { return this._scope; } }, { key: 'extraTokenParams', get: function get() { return this._extraTokenParams; } }, { key: 'skipUserInfo', get: function get() { return this._skipUserInfo; } }]); return SigninState; }(_State2.State); /***/ }), /***/ "./src/SignoutRequest.js": /*!*******************************!*\ !*** ./src/SignoutRequest.js ***! \*******************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SignoutRequest = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _UrlUtility = __webpack_require__(/*! ./UrlUtility.js */ "./src/UrlUtility.js"); var _State = __webpack_require__(/*! ./State.js */ "./src/State.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var SignoutRequest = exports.SignoutRequest = function SignoutRequest(_ref) { var url = _ref.url, id_token_hint = _ref.id_token_hint, post_logout_redirect_uri = _ref.post_logout_redirect_uri, data = _ref.data, extraQueryParams = _ref.extraQueryParams, request_type = _ref.request_type; _classCallCheck(this, SignoutRequest); if (!url) { _Log.Log.error("SignoutRequest.ctor: No url passed"); throw new Error("url"); } if (id_token_hint) { url = _UrlUtility.UrlUtility.addQueryParam(url, "id_token_hint", id_token_hint); } if (post_logout_redirect_uri) { url = _UrlUtility.UrlUtility.addQueryParam(url, "post_logout_redirect_uri", post_logout_redirect_uri); if (data) { this.state = new _State.State({ data: data, request_type: request_type }); url = _UrlUtility.UrlUtility.addQueryParam(url, "state", this.state.id); } } for (var key in extraQueryParams) { url = _UrlUtility.UrlUtility.addQueryParam(url, key, extraQueryParams[key]); } this.url = url; }; /***/ }), /***/ "./src/SignoutResponse.js": /*!********************************!*\ !*** ./src/SignoutResponse.js ***! \********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SignoutResponse = undefined; var _UrlUtility = __webpack_require__(/*! ./UrlUtility.js */ "./src/UrlUtility.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var SignoutResponse = exports.SignoutResponse = function SignoutResponse(url) { _classCallCheck(this, SignoutResponse); var values = _UrlUtility.UrlUtility.parseUrlFragment(url, "?"); this.error = values.error; this.error_description = values.error_description; this.error_uri = values.error_uri; this.state = values.state; }; /***/ }), /***/ "./src/SilentRenewService.js": /*!***********************************!*\ !*** ./src/SilentRenewService.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SilentRenewService = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var SilentRenewService = exports.SilentRenewService = function () { function SilentRenewService(userManager) { _classCallCheck(this, SilentRenewService); this._userManager = userManager; } SilentRenewService.prototype.start = function start() { if (!this._callback) { this._callback = this._tokenExpiring.bind(this); this._userManager.events.addAccessTokenExpiring(this._callback); // this will trigger loading of the user so the expiring events can be initialized this._userManager.getUser().then(function (user) { // deliberate nop }).catch(function (err) { // catch to suppress errors since we're in a ctor _Log.Log.error("SilentRenewService.start: Error from getUser:", err.message); }); } }; SilentRenewService.prototype.stop = function stop() { if (this._callback) { this._userManager.events.removeAccessTokenExpiring(this._callback); delete this._callback; } }; SilentRenewService.prototype._tokenExpiring = function _tokenExpiring() { var _this = this; this._userManager.signinSilent().then(function (user) { _Log.Log.debug("SilentRenewService._tokenExpiring: Silent token renewal successful"); }, function (err) { _Log.Log.error("SilentRenewService._tokenExpiring: Error from signinSilent:", err.message); _this._userManager.events._raiseSilentRenewError(err); }); }; return SilentRenewService; }(); /***/ }), /***/ "./src/State.js": /*!**********************!*\ !*** ./src/State.js ***! \**********************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.State = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _random = __webpack_require__(/*! ./random.js */ "./src/random.js"); var _random2 = _interopRequireDefault(_random); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var State = exports.State = function () { function State() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, id = _ref.id, data = _ref.data, created = _ref.created, request_type = _ref.request_type; _classCallCheck(this, State); this._id = id || (0, _random2.default)(); this._data = data; if (typeof created === 'number' && created > 0) { this._created = created; } else { this._created = parseInt(Date.now() / 1000); } this._request_type = request_type; } State.prototype.toStorageString = function toStorageString() { _Log.Log.debug("State.toStorageString"); return JSON.stringify({ id: this.id, data: this.data, created: this.created, request_type: this.request_type }); }; State.fromStorageString = function fromStorageString(storageString) { _Log.Log.debug("State.fromStorageString"); return new State(JSON.parse(storageString)); }; State.clearStaleState = function clearStaleState(storage, age) { var cutoff = Date.now() / 1000 - age; return storage.getAllKeys().then(function (keys) { _Log.Log.debug("State.clearStaleState: got keys", keys); var promises = []; var _loop = function _loop(i) { var key = keys[i]; p = storage.get(key).then(function (item) { var remove = false; if (item) { try { var state = State.fromStorageString(item); _Log.Log.debug("State.clearStaleState: got item from key: ", key, state.created); if (state.created <= cutoff) { remove = true; } } catch (e) { _Log.Log.error("State.clearStaleState: Error parsing state for key", key, e.message); remove = true; } } else { _Log.Log.debug("State.clearStaleState: no item in storage for key: ", key); remove = true; } if (remove) { _Log.Log.debug("State.clearStaleState: removed item for key: ", key); return storage.remove(key); } }); promises.push(p); }; for (var i = 0; i < keys.length; i++) { var p; _loop(i); } _Log.Log.debug("State.clearStaleState: waiting on promise count:", promises.length); return Promise.all(promises); }); }; _createClass(State, [{ key: 'id', get: function get() { return this._id; } }, { key: 'data', get: function get() { return this._data; } }, { key: 'created', get: function get() { return this._created; } }, { key: 'request_type', get: function get() { return this._request_type; } }]); return State; }(); /***/ }), /***/ "./src/Timer.js": /*!**********************!*\ !*** ./src/Timer.js ***! \**********************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Timer = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _Global = __webpack_require__(/*! ./Global.js */ "./src/Global.js"); var _Event2 = __webpack_require__(/*! ./Event.js */ "./src/Event.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var TimerDuration = 5; // seconds var Timer = exports.Timer = function (_Event) { _inherits(Timer, _Event); function Timer(name) { var timer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _Global.Global.timer; var nowFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; _classCallCheck(this, Timer); var _this = _possibleConstructorReturn(this, _Event.call(this, name)); _this._timer = timer; if (nowFunc) { _this._nowFunc = nowFunc; } else { _this._nowFunc = function () { return Date.now() / 1000; }; } return _this; } Timer.prototype.init = function init(duration) { if (duration <= 0) { duration = 1; } duration = parseInt(duration); var expiration = this.now + duration; if (this.expiration === expiration && this._timerHandle) { // no need to reinitialize to same expiration, so bail out _Log.Log.debug("Timer.init timer " + this._name + " skipping initialization since already initialized for expiration:", this.expiration); return; } this.cancel(); _Log.Log.debug("Timer.init timer " + this._name + " for duration:", duration); this._expiration = expiration; // we're using a fairly short timer and then checking the expiration in the // callback to handle scenarios where the browser device sleeps, and then // the timers end up getting delayed. var timerDuration = TimerDuration; if (duration < timerDuration) { timerDuration = duration; } this._timerHandle = this._timer.setInterval(this._callback.bind(this), timerDuration * 1000); }; Timer.prototype.cancel = function cancel() { if (this._timerHandle) { _Log.Log.debug("Timer.cancel: ", this._name); this._timer.clearInterval(this._timerHandle); this._timerHandle = null; } }; Timer.prototype._callback = function _callback() { var diff = this._expiration - this.now; _Log.Log.debug("Timer.callback; " + this._name + " timer expires in:", diff); if (this._expiration <= this.now) { this.cancel(); _Event.prototype.raise.call(this); } }; _createClass(Timer, [{ key: 'now', get: function get() { return parseInt(this._nowFunc()); } }, { key: 'expiration', get: function get() { return this._expiration; } }]); return Timer; }(_Event2.Event); /***/ }), /***/ "./src/TokenClient.js": /*!****************************!*\ !*** ./src/TokenClient.js ***! \****************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TokenClient = undefined; var _JsonService = __webpack_require__(/*! ./JsonService.js */ "./src/JsonService.js"); var _MetadataService = __webpack_require__(/*! ./MetadataService.js */ "./src/MetadataService.js"); var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var TokenClient = exports.TokenClient = function () { function TokenClient(settings) { var JsonServiceCtor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _JsonService.JsonService; var MetadataServiceCtor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _MetadataService.MetadataService; _classCallCheck(this, TokenClient); if (!settings) { _Log.Log.error("TokenClient.ctor: No settings passed"); throw new Error("settings"); } this._settings = settings; this._jsonService = new JsonServiceCtor(); this._metadataService = new MetadataServiceCtor(this._settings); } TokenClient.prototype.exchangeCode = function exchangeCode() { var _this = this; var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; args = Object.assign({}, args); args.grant_type = args.grant_type || "authorization_code"; args.client_id = args.client_id || this._settings.client_id; args.client_secret = args.client_secret || this._settings.client_secret; args.redirect_uri = args.redirect_uri || this._settings.redirect_uri; var basicAuth = undefined; var client_authentication = args._client_authentication || this._settings._client_authentication; delete args._client_authentication; if (!args.code) { _Log.Log.error("TokenClient.exchangeCode: No code passed"); return Promise.reject(new Error("A code is required")); } if (!args.redirect_uri) { _Log.Log.error("TokenClient.exchangeCode: No redirect_uri passed"); return Promise.reject(new Error("A redirect_uri is required")); } if (!args.code_verifier) { _Log.Log.error("TokenClient.exchangeCode: No code_verifier passed"); return Promise.reject(new Error("A code_verifier is required")); } if (!args.client_id) { _Log.Log.error("TokenClient.exchangeCode: No client_id passed"); return Promise.reject(new Error("A client_id is required")); } if (!args.client_secret && client_authentication == "client_secret_basic") { _Log.Log.error("TokenClient.exchangeCode: No client_secret passed"); return Promise.reject(new Error("A client_secret is required")); } // Sending the client credentials using the Basic Auth method if (client_authentication == "client_secret_basic") { basicAuth = args.client_id + ':' + args.client_secret; delete args.client_id; delete args.client_secret; } return this._metadataService.getTokenEndpoint(false).then(function (url) { _Log.Log.debug("TokenClient.exchangeCode: Received token endpoint"); return _this._jsonService.postForm(url, args, basicAuth).then(function (response) { _Log.Log.debug("TokenClient.exchangeCode: response received"); return response; }); }); }; TokenClient.prototype.exchangeRefreshToken = function exchangeRefreshToken() { var _this2 = this; var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; args = Object.assign({}, args); args.grant_type = args.grant_type || "refresh_token"; args.client_id = args.client_id || this._settings.client_id; args.client_secret = args.client_secret || this._settings.client_secret; var basicAuth = undefined; var client_authentication = args._client_authentication || this._settings._client_authentication; delete args._client_authentication; if (!args.refresh_token) { _Log.Log.error("TokenClient.exchangeRefreshToken: No refresh_token passed"); return Promise.reject(new Error("A refresh_token is required")); } if (!args.client_id) { _Log.Log.error("TokenClient.exchangeRefreshToken: No client_id passed"); return Promise.reject(new Error("A client_id is required")); } // Sending the client credentials using the Basic Auth method if (client_authentication == "client_secret_basic") { basicAuth = args.client_id + ':' + args.client_secret; delete args.client_id; delete args.client_secret; } return this._metadataService.getTokenEndpoint(false).then(function (url) { _Log.Log.debug("TokenClient.exchangeRefreshToken: Received token endpoint"); return _this2._jsonService.postForm(url, args, basicAuth).then(function (response) { _Log.Log.debug("TokenClient.exchangeRefreshToken: response received"); return response; }); }); }; return TokenClient; }(); /***/ }), /***/ "./src/TokenRevocationClient.js": /*!**************************************!*\ !*** ./src/TokenRevocationClient.js ***! \**************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TokenRevocationClient = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _MetadataService = __webpack_require__(/*! ./MetadataService.js */ "./src/MetadataService.js"); var _Global = __webpack_require__(/*! ./Global.js */ "./src/Global.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var AccessTokenTypeHint = "access_token"; var RefreshTokenTypeHint = "refresh_token"; var TokenRevocationClient = exports.TokenRevocationClient = function () { function TokenRevocationClient(settings) { var XMLHttpRequestCtor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _Global.Global.XMLHttpRequest; var MetadataServiceCtor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _MetadataService.MetadataService; _classCallCheck(this, TokenRevocationClient); if (!settings) { _Log.Log.error("TokenRevocationClient.ctor: No settings provided"); throw new Error("No settings provided."); } this._settings = settings; this._XMLHttpRequestCtor = XMLHttpRequestCtor; this._metadataService = new MetadataServiceCtor(this._settings); } TokenRevocationClient.prototype.revoke = function revoke(token, required) { var _this = this; var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "access_token"; if (!token) { _Log.Log.error("TokenRevocationClient.revoke: No token provided"); throw new Error("No token provided."); } if (type !== AccessTokenTypeHint && type != RefreshTokenTypeHint) { _Log.Log.error("TokenRevocationClient.revoke: Invalid token type"); throw new Error("Invalid token type."); } return this._metadataService.getRevocationEndpoint().then(function (url) { if (!url) { if (required) { _Log.Log.error("TokenRevocationClient.revoke: Revocation not supported"); throw new Error("Revocation not supported"); } // not required, so don't error and just return return; } _Log.Log.debug("TokenRevocationClient.revoke: Revoking " + type); var client_id = _this._settings.client_id; var client_secret = _this._settings.client_secret; return _this._revoke(url, client_id, client_secret, token, type); }); }; TokenRevocationClient.prototype._revoke = function _revoke(url, client_id, client_secret, token, type) { var _this2 = this; return new Promise(function (resolve, reject) { var xhr = new _this2._XMLHttpRequestCtor(); xhr.open("POST", url); xhr.onload = function () { _Log.Log.debug("TokenRevocationClient.revoke: HTTP response received, status", xhr.status); if (xhr.status === 200) { resolve(); } else { reject(Error(xhr.statusText + " (" + xhr.status + ")")); } }; xhr.onerror = function () { _Log.Log.debug("TokenRevocationClient.revoke: Network Error."); reject("Network Error"); }; var body = "client_id=" + encodeURIComponent(client_id); if (client_secret) { body += "&client_secret=" + encodeURIComponent(client_secret); } body += "&token_type_hint=" + encodeURIComponent(type); body += "&token=" + encodeURIComponent(token); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send(body); }); }; return TokenRevocationClient; }(); /***/ }), /***/ "./src/UrlUtility.js": /*!***************************!*\ !*** ./src/UrlUtility.js ***! \***************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UrlUtility = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _Global = __webpack_require__(/*! ./Global.js */ "./src/Global.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var UrlUtility = exports.UrlUtility = function () { function UrlUtility() { _classCallCheck(this, UrlUtility); } UrlUtility.addQueryParam = function addQueryParam(url, name, value) { if (url.indexOf('?') < 0) { url += "?"; } if (url[url.length - 1] !== "?") { url += "&"; } url += encodeURIComponent(name); url += "="; url += encodeURIComponent(value); return url; }; UrlUtility.parseUrlFragment = function parseUrlFragment(value) { var delimiter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "#"; var global = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _Global.Global; if (typeof value !== 'string') { value = global.location.href; } var idx = value.lastIndexOf(delimiter); if (idx >= 0) { value = value.substr(idx + 1); } if (delimiter === "?") { // if we're doing query, then strip off hash fragment before we parse idx = value.indexOf('#'); if (idx >= 0) { value = value.substr(0, idx); } } var params = {}, regex = /([^&=]+)=([^&]*)/g, m; var counter = 0; while (m = regex.exec(value)) { params[decodeURIComponent(m[1])] = decodeURIComponent(m[2].replace(/\+/g, ' ')); if (counter++ > 50) { _Log.Log.error("UrlUtility.parseUrlFragment: response exceeded expected number of parameters", value); return { error: "Response exceeded expected number of parameters" }; } } for (var prop in params) { return params; } return {}; }; return UrlUtility; }(); /***/ }), /***/ "./src/User.js": /*!*********************!*\ !*** ./src/User.js ***! \*********************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.User = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var User = exports.User = function () { function User(_ref) { var id_token = _ref.id_token, session_state = _ref.session_state, access_token = _ref.access_token, refresh_token = _ref.refresh_token, token_type = _ref.token_type, scope = _ref.scope, profile = _ref.profile, expires_at = _ref.expires_at, state = _ref.state; _classCallCheck(this, User); this.id_token = id_token; this.session_state = session_state; this.access_token = access_token; this.refresh_token = refresh_token; this.token_type = token_type; this.scope = scope; this.profile = profile; this.expires_at = expires_at; this.state = state; } User.prototype.toStorageString = function toStorageString() { _Log.Log.debug("User.toStorageString"); return JSON.stringify({ id_token: this.id_token, session_state: this.session_state, access_token: this.access_token, refresh_token: this.refresh_token, token_type: this.token_type, scope: this.scope, profile: this.profile, expires_at: this.expires_at }); }; User.fromStorageString = function fromStorageString(storageString) { _Log.Log.debug("User.fromStorageString"); return new User(JSON.parse(storageString)); }; _createClass(User, [{ key: 'expires_in', get: function get() { if (this.expires_at) { var now = parseInt(Date.now() / 1000); return this.expires_at - now; } return undefined; }, set: function set(value) { var expires_in = parseInt(value); if (typeof expires_in === 'number' && expires_in > 0) { var now = parseInt(Date.now() / 1000); this.expires_at = now + expires_in; } } }, { key: 'expired', get: function get() { var expires_in = this.expires_in; if (expires_in !== undefined) { return expires_in <= 0; } return undefined; } }, { key: 'scopes', get: function get() { return (this.scope || "").split(" "); } }]); return User; }(); /***/ }), /***/ "./src/UserInfoService.js": /*!********************************!*\ !*** ./src/UserInfoService.js ***! \********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UserInfoService = undefined; var _JsonService = __webpack_require__(/*! ./JsonService.js */ "./src/JsonService.js"); var _MetadataService = __webpack_require__(/*! ./MetadataService.js */ "./src/MetadataService.js"); var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _JoseUtil = __webpack_require__(/*! ./JoseUtil.js */ "./src/JoseUtil.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var UserInfoService = exports.UserInfoService = function () { function UserInfoService(settings) { var JsonServiceCtor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _JsonService.JsonService; var MetadataServiceCtor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _MetadataService.MetadataService; var joseUtil = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _JoseUtil.JoseUtil; _classCallCheck(this, UserInfoService); if (!settings) { _Log.Log.error("UserInfoService.ctor: No settings passed"); throw new Error("settings"); } this._settings = settings; this._jsonService = new JsonServiceCtor(undefined, undefined, this._getClaimsFromJwt.bind(this)); this._metadataService = new MetadataServiceCtor(this._settings); this._joseUtil = joseUtil; } UserInfoService.prototype.getClaims = function getClaims(token) { var _this = this; if (!token) { _Log.Log.error("UserInfoService.getClaims: No token passed"); return Promise.reject(new Error("A token is required")); } return this._metadataService.getUserInfoEndpoint().then(function (url) { _Log.Log.debug("UserInfoService.getClaims: received userinfo url", url); return _this._jsonService.getJson(url, token).then(function (claims) { _Log.Log.debug("UserInfoService.getClaims: claims received", claims); return claims; }); }); }; UserInfoService.prototype._getClaimsFromJwt = function _getClaimsFromJwt(req) { var _this2 = this; try { var jwt = this._joseUtil.parseJwt(req.responseText); if (!jwt || !jwt.header || !jwt.payload) { _Log.Log.error("UserInfoService._getClaimsFromJwt: Failed to parse JWT", jwt); return Promise.reject(new Error("Failed to parse id_token")); } var kid = jwt.header.kid; var issuerPromise = void 0; switch (this._settings.userInfoJwtIssuer) { case 'OP': issuerPromise = this._metadataService.getIssuer(); break; case 'ANY': issuerPromise = Promise.resolve(jwt.payload.iss); break; default: issuerPromise = Promise.resolve(this._settings.userInfoJwtIssuer); break; } return issuerPromise.then(function (issuer) { _Log.Log.debug("UserInfoService._getClaimsFromJwt: Received issuer:" + issuer); return _this2._metadataService.getSigningKeys().then(function (keys) { if (!keys) { _Log.Log.error("UserInfoService._getClaimsFromJwt: No signing keys from metadata"); return Promise.reject(new Error("No signing keys from metadata")); } _Log.Log.debug("UserInfoService._getClaimsFromJwt: Received signing keys"); var key = void 0; if (!kid) { keys = _this2._filterByAlg(keys, jwt.header.alg); if (keys.length > 1) { _Log.Log.error("UserInfoService._getClaimsFromJwt: No kid found in id_token and more than one key found in metadata"); return Promise.reject(new Error("No kid found in id_token and more than one key found in metadata")); } else { // kid is mandatory only when there are multiple keys in the referenced JWK Set document // see http://openid.net/specs/openid-connect-core-1_0.html#Signing key = keys[0]; } } else { key = keys.filter(function (key) { return key.kid === kid; })[0]; } if (!key) { _Log.Log.error("UserInfoService._getClaimsFromJwt: No key matching kid or alg found in signing keys"); return Promise.reject(new Error("No key matching kid or alg found in signing keys")); } var audience = _this2._settings.client_id; var clockSkewInSeconds = _this2._settings.clockSkew; _Log.Log.debug("UserInfoService._getClaimsFromJwt: Validaing JWT; using clock skew (in seconds) of: ", clockSkewInSeconds); return _this2._joseUtil.validateJwt(req.responseText, key, issuer, audience, clockSkewInSeconds, undefined, true).then(function () { _Log.Log.debug("UserInfoService._getClaimsFromJwt: JWT validation successful"); return jwt.payload; }); }); }); return; } catch (e) { _Log.Log.error("UserInfoService._getClaimsFromJwt: Error parsing JWT response", e.message); reject(e); return; } }; UserInfoService.prototype._filterByAlg = function _filterByAlg(keys, alg) { var kty = null; if (alg.startsWith("RS")) { kty = "RSA"; } else if (alg.startsWith("PS")) { kty = "PS"; } else if (alg.startsWith("ES")) { kty = "EC"; } else { _Log.Log.debug("UserInfoService._filterByAlg: alg not supported: ", alg); return []; } _Log.Log.debug("UserInfoService._filterByAlg: Looking for keys that match kty: ", kty); keys = keys.filter(function (key) { return key.kty === kty; }); _Log.Log.debug("UserInfoService._filterByAlg: Number of keys that match kty: ", kty, keys.length); return keys; }; return UserInfoService; }(); /***/ }), /***/ "./src/UserManager.js": /*!****************************!*\ !*** ./src/UserManager.js ***! \****************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UserManager = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _OidcClient2 = __webpack_require__(/*! ./OidcClient.js */ "./src/OidcClient.js"); var _UserManagerSettings = __webpack_require__(/*! ./UserManagerSettings.js */ "./src/UserManagerSettings.js"); var _User = __webpack_require__(/*! ./User.js */ "./src/User.js"); var _UserManagerEvents = __webpack_require__(/*! ./UserManagerEvents.js */ "./src/UserManagerEvents.js"); var _SilentRenewService = __webpack_require__(/*! ./SilentRenewService.js */ "./src/SilentRenewService.js"); var _SessionMonitor = __webpack_require__(/*! ./SessionMonitor.js */ "./src/SessionMonitor.js"); var _SigninRequest = __webpack_require__(/*! ./SigninRequest */ "./src/SigninRequest.js"); var _TokenRevocationClient = __webpack_require__(/*! ./TokenRevocationClient.js */ "./src/TokenRevocationClient.js"); var _TokenClient = __webpack_require__(/*! ./TokenClient.js */ "./src/TokenClient.js"); var _JoseUtil = __webpack_require__(/*! ./JoseUtil.js */ "./src/JoseUtil.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var UserManager = exports.UserManager = function (_OidcClient) { _inherits(UserManager, _OidcClient); function UserManager() { var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var SilentRenewServiceCtor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _SilentRenewService.SilentRenewService; var SessionMonitorCtor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _SessionMonitor.SessionMonitor; var TokenRevocationClientCtor = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _TokenRevocationClient.TokenRevocationClient; var TokenClientCtor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _TokenClient.TokenClient; var joseUtil = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : _JoseUtil.JoseUtil; _classCallCheck(this, UserManager); if (!(settings instanceof _UserManagerSettings.UserManagerSettings)) { settings = new _UserManagerSettings.UserManagerSettings(settings); } var _this = _possibleConstructorReturn(this, _OidcClient.call(this, settings)); _this._events = new _UserManagerEvents.UserManagerEvents(settings); _this._silentRenewService = new SilentRenewServiceCtor(_this); // order is important for the following properties; these services depend upon the events. if (_this.settings.automaticSilentRenew) { _Log.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"); _this.startSilentRenew(); } if (_this.settings.monitorSession) { _Log.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"); _this._sessionMonitor = new SessionMonitorCtor(_this); } _this._tokenRevocationClient = new TokenRevocationClientCtor(_this._settings); _this._tokenClient = new TokenClientCtor(_this._settings); _this._joseUtil = joseUtil; return _this; } UserManager.prototype.getUser = function getUser() { var _this2 = this; return this._loadUser().then(function (user) { if (user) { _Log.Log.info("UserManager.getUser: user loaded"); _this2._events.load(user, false); return user; } else { _Log.Log.info("UserManager.getUser: user not found in storage"); return null; } }); }; UserManager.prototype.removeUser = function removeUser() { var _this3 = this; return this.storeUser(null).then(function () { _Log.Log.info("UserManager.removeUser: user removed from storage"); _this3._events.unload(); }); }; UserManager.prototype.signinRedirect = function signinRedirect() { var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; args = Object.assign({}, args); args.request_type = "si:r"; var navParams = { useReplaceToNavigate: args.useReplaceToNavigate }; return this._signinStart(args, this._redirectNavigator, navParams).then(function () { _Log.Log.info("UserManager.signinRedirect: successful"); }); }; UserManager.prototype.signinRedirectCallback = function signinRedirectCallback(url) { return this._signinEnd(url || this._redirectNavigator.url).then(function (user) { if (user.profile && user.profile.sub) { _Log.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ", user.profile.sub); } else { _Log.Log.info("UserManager.signinRedirectCallback: no sub"); } return user; }); }; UserManager.prototype.signinPopup = function signinPopup() { var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; args = Object.assign({}, args); args.request_type = "si:p"; var url = args.redirect_uri || this.settings.popup_redirect_uri || this.settings.redirect_uri; if (!url) { _Log.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"); return Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")); } args.redirect_uri = url; args.display = "popup"; return this._signin(args, this._popupNavigator, { startUrl: url, popupWindowFeatures: args.popupWindowFeatures || this.settings.popupWindowFeatures, popupWindowTarget: args.popupWindowTarget || this.settings.popupWindowTarget }).then(function (user) { if (user) { if (user.profile && user.profile.sub) { _Log.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ", user.profile.sub); } else { _Log.Log.info("UserManager.signinPopup: no sub"); } } return user; }); }; UserManager.prototype.signinPopupCallback = function signinPopupCallback(url) { return this._signinCallback(url, this._popupNavigator).then(function (user) { if (user) { if (user.profile && user.profile.sub) { _Log.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ", user.profile.sub); } else { _Log.Log.info("UserManager.signinPopupCallback: no sub"); } } return user; }).catch(function (err) { _Log.Log.error( true && err.message); }); }; UserManager.prototype.signinSilent = function signinSilent() { var _this4 = this; var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; args = Object.assign({}, args); // first determine if we have a refresh token, or need to use iframe return this._loadUser().then(function (user) { if (user && user.refresh_token) { args.refresh_token = user.refresh_token; return _this4._useRefreshToken(args); } else { args.request_type = "si:s"; args.id_token_hint = args.id_token_hint || _this4.settings.includeIdTokenInSilentRenew && user && user.id_token; if (user && _this4._settings.validateSubOnSilentRenew) { _Log.Log.debug("UserManager.signinSilent, subject prior to silent renew: ", user.profile.sub); args.current_sub = user.profile.sub; } return _this4._signinSilentIframe(args); } }); }; UserManager.prototype._useRefreshToken = function _useRefreshToken() { var _this5 = this; var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return this._tokenClient.exchangeRefreshToken(args).then(function (result) { if (!result) { _Log.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"); return Promise.reject("No response returned from token endpoint"); } if (!result.access_token) { _Log.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"); return Promise.reject("No access token returned from token endpoint"); } return _this5._loadUser().then(function (user) { if (user) { var idTokenValidation = Promise.resolve(); if (result.id_token) { idTokenValidation = _this5._validateIdTokenFromTokenRefreshToken(user.profile, result.id_token); } return idTokenValidation.then(function () { _Log.Log.debug("UserManager._useRefreshToken: refresh token response success"); user.id_token = result.id_token || user.id_token; user.access_token = result.access_token; user.refresh_token = result.refresh_token || user.refresh_token; user.expires_in = result.expires_in; return _this5.storeUser(user).then(function () { _this5._events.load(user); return user; }); }); } else { return null; } }); }); }; UserManager.prototype._validateIdTokenFromTokenRefreshToken = function _validateIdTokenFromTokenRefreshToken(profile, id_token) { var _this6 = this; return this._metadataService.getIssuer().then(function (issuer) { return _this6.settings.getEpochTime().then(function (now) { return _this6._joseUtil.validateJwtAttributes(id_token, issuer, _this6._settings.client_id, _this6._settings.clockSkew, now).then(function (payload) { if (!payload) { _Log.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"); return Promise.reject(new Error("Failed to validate id_token")); } if (payload.sub !== profile.sub) { _Log.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"); return Promise.reject(new Error("sub in id_token does not match current sub")); } if (payload.auth_time && payload.auth_time !== profile.auth_time) { _Log.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"); return Promise.reject(new Error("auth_time in id_token does not match original auth_time")); } if (payload.azp && payload.azp !== profile.azp) { _Log.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"); return Promise.reject(new Error("azp in id_token does not match original azp")); } if (!payload.azp && profile.azp) { _Log.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"); return Promise.reject(new Error("azp not in id_token, but present in original id_token")); } }); }); }); }; UserManager.prototype._signinSilentIframe = function _signinSilentIframe() { var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var url = args.redirect_uri || this.settings.silent_redirect_uri || this.settings.redirect_uri; if (!url) { _Log.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"); return Promise.reject(new Error("No silent_redirect_uri configured")); } args.redirect_uri = url; args.prompt = args.prompt || "none"; return this._signin(args, this._iframeNavigator, { startUrl: url, silentRequestTimeout: args.silentRequestTimeout || this.settings.silentRequestTimeout }).then(function (user) { if (user) { if (user.profile && user.profile.sub) { _Log.Log.info("UserManager.signinSilent: successful, signed in sub: ", user.profile.sub); } else { _Log.Log.info("UserManager.signinSilent: no sub"); } } return user; }); }; UserManager.prototype.signinSilentCallback = function signinSilentCallback(url) { return this._signinCallback(url, this._iframeNavigator).then(function (user) { if (user) { if (user.profile && user.profile.sub) { _Log.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ", user.profile.sub); } else { _Log.Log.info("UserManager.signinSilentCallback: no sub"); } } return user; }); }; UserManager.prototype.signinCallback = function signinCallback(url) { var _this7 = this; return this.readSigninResponseState(url).then(function (_ref) { var state = _ref.state, response = _ref.response; if (state.request_type === "si:r") { return _this7.signinRedirectCallback(url); } if (state.request_type === "si:p") { return _this7.signinPopupCallback(url); } if (state.request_type === "si:s") { return _this7.signinSilentCallback(url); } return Promise.reject(new Error("invalid response_type in state")); }); }; UserManager.prototype.signoutCallback = function signoutCallback(url, keepOpen) { var _this8 = this; return this.readSignoutResponseState(url).then(function (_ref2) { var state = _ref2.state, response = _ref2.response; if (state) { if (state.request_type === "so:r") { return _this8.signoutRedirectCallback(url); } if (state.request_type === "so:p") { return _this8.signoutPopupCallback(url, keepOpen); } return Promise.reject(new Error("invalid response_type in state")); } return response; }); }; UserManager.prototype.querySessionStatus = function querySessionStatus() { var _this9 = this; var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; args = Object.assign({}, args); args.request_type = "si:s"; // this acts like a signin silent var url = args.redirect_uri || this.settings.silent_redirect_uri || this.settings.redirect_uri; if (!url) { _Log.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"); return Promise.reject(new Error("No silent_redirect_uri configured")); } args.redirect_uri = url; args.prompt = "none"; args.response_type = args.response_type || this.settings.query_status_response_type; args.scope = args.scope || "openid"; args.skipUserInfo = true; return this._signinStart(args, this._iframeNavigator, { startUrl: url, silentRequestTimeout: args.silentRequestTimeout || this.settings.silentRequestTimeout }).then(function (navResponse) { return _this9.processSigninResponse(navResponse.url).then(function (signinResponse) { _Log.Log.debug("UserManager.querySessionStatus: got signin response"); if (signinResponse.session_state && signinResponse.profile.sub) { _Log.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ", signinResponse.profile.sub); return { session_state: signinResponse.session_state, sub: signinResponse.profile.sub, sid: signinResponse.profile.sid }; } else { _Log.Log.info("querySessionStatus successful, user not authenticated"); } }).catch(function (err) { if (err.session_state && _this9.settings.monitorAnonymousSession) { if (err.message == "login_required" || err.message == "consent_required" || err.message == "interaction_required" || err.message == "account_selection_required") { _Log.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"); return { session_state: err.session_state }; } } throw err; }); }); }; UserManager.prototype._signin = function _signin(args, navigator) { var _this10 = this; var navigatorParams = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return this._signinStart(args, navigator, navigatorParams).then(function (navResponse) { return _this10._signinEnd(navResponse.url, args); }); }; UserManager.prototype._signinStart = function _signinStart(args, navigator) { var _this11 = this; var navigatorParams = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return navigator.prepare(navigatorParams).then(function (handle) { _Log.Log.debug("UserManager._signinStart: got navigator window handle"); return _this11.createSigninRequest(args).then(function (signinRequest) { _Log.Log.debug("UserManager._signinStart: got signin request"); navigatorParams.url = signinRequest.url; navigatorParams.id = signinRequest.state.id; return handle.navigate(navigatorParams); }).catch(function (err) { if (handle.close) { _Log.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"); handle.close(); } throw err; }); }); }; UserManager.prototype._signinEnd = function _signinEnd(url) { var _this12 = this; var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return this.processSigninResponse(url).then(function (signinResponse) { _Log.Log.debug("UserManager._signinEnd: got signin response"); var user = new _User.User(signinResponse); if (args.current_sub) { if (args.current_sub !== user.profile.sub) { _Log.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ", user.profile.sub); return Promise.reject(new Error("login_required")); } else { _Log.Log.debug("UserManager._signinEnd: current user matches user returned from signin"); } } return _this12.storeUser(user).then(function () { _Log.Log.debug("UserManager._signinEnd: user stored"); _this12._events.load(user); return user; }); }); }; UserManager.prototype._signinCallback = function _signinCallback(url, navigator) { _Log.Log.debug("UserManager._signinCallback"); var useQuery = this._settings.response_mode === "query" || !this._settings.response_mode && _SigninRequest.SigninRequest.isCode(this._settings.response_type); var delimiter = useQuery ? "?" : "#"; return navigator.callback(url, undefined, delimiter); }; UserManager.prototype.signoutRedirect = function signoutRedirect() { var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; args = Object.assign({}, args); args.request_type = "so:r"; var postLogoutRedirectUri = args.post_logout_redirect_uri || this.settings.post_logout_redirect_uri; if (postLogoutRedirectUri) { args.post_logout_redirect_uri = postLogoutRedirectUri; } var navParams = { useReplaceToNavigate: args.useReplaceToNavigate }; return this._signoutStart(args, this._redirectNavigator, navParams).then(function () { _Log.Log.info("UserManager.signoutRedirect: successful"); }); }; UserManager.prototype.signoutRedirectCallback = function signoutRedirectCallback(url) { return this._signoutEnd(url || this._redirectNavigator.url).then(function (response) { _Log.Log.info("UserManager.signoutRedirectCallback: successful"); return response; }); }; UserManager.prototype.signoutPopup = function signoutPopup() { var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; args = Object.assign({}, args); args.request_type = "so:p"; var url = args.post_logout_redirect_uri || this.settings.popup_post_logout_redirect_uri || this.settings.post_logout_redirect_uri; args.post_logout_redirect_uri = url; args.display = "popup"; if (args.post_logout_redirect_uri) { // we're putting a dummy entry in here because we // need a unique id from the state for notification // to the parent window, which is necessary if we // plan to return back to the client after signout // and so we can close the popup after signout args.state = args.state || {}; } return this._signout(args, this._popupNavigator, { startUrl: url, popupWindowFeatures: args.popupWindowFeatures || this.settings.popupWindowFeatures, popupWindowTarget: args.popupWindowTarget || this.settings.popupWindowTarget }).then(function () { _Log.Log.info("UserManager.signoutPopup: successful"); }); }; UserManager.prototype.signoutPopupCallback = function signoutPopupCallback(url, keepOpen) { if (typeof keepOpen === 'undefined' && typeof url === 'boolean') { keepOpen = url; url = null; } var delimiter = '?'; return this._popupNavigator.callback(url, keepOpen, delimiter).then(function () { _Log.Log.info("UserManager.signoutPopupCallback: successful"); }); }; UserManager.prototype._signout = function _signout(args, navigator) { var _this13 = this; var navigatorParams = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return this._signoutStart(args, navigator, navigatorParams).then(function (navResponse) { return _this13._signoutEnd(navResponse.url); }); }; UserManager.prototype._signoutStart = function _signoutStart() { var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _this14 = this; var navigator = arguments[1]; var navigatorParams = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return navigator.prepare(navigatorParams).then(function (handle) { _Log.Log.debug("UserManager._signoutStart: got navigator window handle"); return _this14._loadUser().then(function (user) { _Log.Log.debug("UserManager._signoutStart: loaded current user from storage"); var revokePromise = _this14._settings.revokeAccessTokenOnSignout ? _this14._revokeInternal(user) : Promise.resolve(); return revokePromise.then(function () { var id_token = args.id_token_hint || user && user.id_token; if (id_token) { _Log.Log.debug("UserManager._signoutStart: Setting id_token into signout request"); args.id_token_hint = id_token; } return _this14.removeUser().then(function () { _Log.Log.debug("UserManager._signoutStart: user removed, creating signout request"); return _this14.createSignoutRequest(args).then(function (signoutRequest) { _Log.Log.debug("UserManager._signoutStart: got signout request"); navigatorParams.url = signoutRequest.url; if (signoutRequest.state) { navigatorParams.id = signoutRequest.state.id; } return handle.navigate(navigatorParams); }); }); }); }).catch(function (err) { if (handle.close) { _Log.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"); handle.close(); } throw err; }); }); }; UserManager.prototype._signoutEnd = function _signoutEnd(url) { return this.processSignoutResponse(url).then(function (signoutResponse) { _Log.Log.debug("UserManager._signoutEnd: got signout response"); return signoutResponse; }); }; UserManager.prototype.revokeAccessToken = function revokeAccessToken() { var _this15 = this; return this._loadUser().then(function (user) { return _this15._revokeInternal(user, true).then(function (success) { if (success) { _Log.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"); user.access_token = null; user.refresh_token = null; user.expires_at = null; user.token_type = null; return _this15.storeUser(user).then(function () { _Log.Log.debug("UserManager.revokeAccessToken: user stored"); _this15._events.load(user); }); } }); }).then(function () { _Log.Log.info("UserManager.revokeAccessToken: access token revoked successfully"); }); }; UserManager.prototype._revokeInternal = function _revokeInternal(user, required) { var _this16 = this; if (user) { var access_token = user.access_token; var refresh_token = user.refresh_token; return this._revokeAccessTokenInternal(access_token, required).then(function (atSuccess) { return _this16._revokeRefreshTokenInternal(refresh_token, required).then(function (rtSuccess) { if (!atSuccess && !rtSuccess) { _Log.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"); } return atSuccess || rtSuccess; }); }); } return Promise.resolve(false); }; UserManager.prototype._revokeAccessTokenInternal = function _revokeAccessTokenInternal(access_token, required) { // check for JWT vs. reference token if (!access_token || access_token.indexOf('.') >= 0) { return Promise.resolve(false); } return this._tokenRevocationClient.revoke(access_token, required).then(function () { return true; }); }; UserManager.prototype._revokeRefreshTokenInternal = function _revokeRefreshTokenInternal(refresh_token, required) { if (!refresh_token) { return Promise.resolve(false); } return this._tokenRevocationClient.revoke(refresh_token, required, "refresh_token").then(function () { return true; }); }; UserManager.prototype.startSilentRenew = function startSilentRenew() { this._silentRenewService.start(); }; UserManager.prototype.stopSilentRenew = function stopSilentRenew() { this._silentRenewService.stop(); }; UserManager.prototype._loadUser = function _loadUser() { return this._userStore.get(this._userStoreKey).then(function (storageString) { if (storageString) { _Log.Log.debug("UserManager._loadUser: user storageString loaded"); return _User.User.fromStorageString(storageString); } _Log.Log.debug("UserManager._loadUser: no user storageString"); return null; }); }; UserManager.prototype.storeUser = function storeUser(user) { if (user) { _Log.Log.debug("UserManager.storeUser: storing user"); var storageString = user.toStorageString(); return this._userStore.set(this._userStoreKey, storageString); } else { _Log.Log.debug("storeUser.storeUser: removing user"); return this._userStore.remove(this._userStoreKey); } }; _createClass(UserManager, [{ key: '_redirectNavigator', get: function get() { return this.settings.redirectNavigator; } }, { key: '_popupNavigator', get: function get() { return this.settings.popupNavigator; } }, { key: '_iframeNavigator', get: function get() { return this.settings.iframeNavigator; } }, { key: '_userStore', get: function get() { return this.settings.userStore; } }, { key: 'events', get: function get() { return this._events; } }, { key: '_userStoreKey', get: function get() { return 'user:' + this.settings.authority + ':' + this.settings.client_id; } }]); return UserManager; }(_OidcClient2.OidcClient); /***/ }), /***/ "./src/UserManagerEvents.js": /*!**********************************!*\ !*** ./src/UserManagerEvents.js ***! \**********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UserManagerEvents = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _AccessTokenEvents2 = __webpack_require__(/*! ./AccessTokenEvents.js */ "./src/AccessTokenEvents.js"); var _Event = __webpack_require__(/*! ./Event.js */ "./src/Event.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var UserManagerEvents = exports.UserManagerEvents = function (_AccessTokenEvents) { _inherits(UserManagerEvents, _AccessTokenEvents); function UserManagerEvents(settings) { _classCallCheck(this, UserManagerEvents); var _this = _possibleConstructorReturn(this, _AccessTokenEvents.call(this, settings)); _this._userLoaded = new _Event.Event("User loaded"); _this._userUnloaded = new _Event.Event("User unloaded"); _this._silentRenewError = new _Event.Event("Silent renew error"); _this._userSignedIn = new _Event.Event("User signed in"); _this._userSignedOut = new _Event.Event("User signed out"); _this._userSessionChanged = new _Event.Event("User session changed"); return _this; } UserManagerEvents.prototype.load = function load(user) { var raiseEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; _Log.Log.debug("UserManagerEvents.load"); _AccessTokenEvents.prototype.load.call(this, user); if (raiseEvent) { this._userLoaded.raise(user); } }; UserManagerEvents.prototype.unload = function unload() { _Log.Log.debug("UserManagerEvents.unload"); _AccessTokenEvents.prototype.unload.call(this); this._userUnloaded.raise(); }; UserManagerEvents.prototype.addUserLoaded = function addUserLoaded(cb) { this._userLoaded.addHandler(cb); }; UserManagerEvents.prototype.removeUserLoaded = function removeUserLoaded(cb) { this._userLoaded.removeHandler(cb); }; UserManagerEvents.prototype.addUserUnloaded = function addUserUnloaded(cb) { this._userUnloaded.addHandler(cb); }; UserManagerEvents.prototype.removeUserUnloaded = function removeUserUnloaded(cb) { this._userUnloaded.removeHandler(cb); }; UserManagerEvents.prototype.addSilentRenewError = function addSilentRenewError(cb) { this._silentRenewError.addHandler(cb); }; UserManagerEvents.prototype.removeSilentRenewError = function removeSilentRenewError(cb) { this._silentRenewError.removeHandler(cb); }; UserManagerEvents.prototype._raiseSilentRenewError = function _raiseSilentRenewError(e) { _Log.Log.debug("UserManagerEvents._raiseSilentRenewError", e.message); this._silentRenewError.raise(e); }; UserManagerEvents.prototype.addUserSignedIn = function addUserSignedIn(cb) { this._userSignedIn.addHandler(cb); }; UserManagerEvents.prototype.removeUserSignedIn = function removeUserSignedIn(cb) { this._userSignedIn.removeHandler(cb); }; UserManagerEvents.prototype._raiseUserSignedIn = function _raiseUserSignedIn() { _Log.Log.debug("UserManagerEvents._raiseUserSignedIn"); this._userSignedIn.raise(); }; UserManagerEvents.prototype.addUserSignedOut = function addUserSignedOut(cb) { this._userSignedOut.addHandler(cb); }; UserManagerEvents.prototype.removeUserSignedOut = function removeUserSignedOut(cb) { this._userSignedOut.removeHandler(cb); }; UserManagerEvents.prototype._raiseUserSignedOut = function _raiseUserSignedOut() { _Log.Log.debug("UserManagerEvents._raiseUserSignedOut"); this._userSignedOut.raise(); }; UserManagerEvents.prototype.addUserSessionChanged = function addUserSessionChanged(cb) { this._userSessionChanged.addHandler(cb); }; UserManagerEvents.prototype.removeUserSessionChanged = function removeUserSessionChanged(cb) { this._userSessionChanged.removeHandler(cb); }; UserManagerEvents.prototype._raiseUserSessionChanged = function _raiseUserSessionChanged() { _Log.Log.debug("UserManagerEvents._raiseUserSessionChanged"); this._userSessionChanged.raise(); }; return UserManagerEvents; }(_AccessTokenEvents2.AccessTokenEvents); /***/ }), /***/ "./src/UserManagerSettings.js": /*!************************************!*\ !*** ./src/UserManagerSettings.js ***! \************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UserManagerSettings = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _OidcClientSettings2 = __webpack_require__(/*! ./OidcClientSettings.js */ "./src/OidcClientSettings.js"); var _RedirectNavigator = __webpack_require__(/*! ./RedirectNavigator.js */ "./src/RedirectNavigator.js"); var _PopupNavigator = __webpack_require__(/*! ./PopupNavigator.js */ "./src/PopupNavigator.js"); var _IFrameNavigator = __webpack_require__(/*! ./IFrameNavigator.js */ "./src/IFrameNavigator.js"); var _WebStorageStateStore = __webpack_require__(/*! ./WebStorageStateStore.js */ "./src/WebStorageStateStore.js"); var _Global = __webpack_require__(/*! ./Global.js */ "./src/Global.js"); var _SigninRequest = __webpack_require__(/*! ./SigninRequest.js */ "./src/SigninRequest.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var DefaultAccessTokenExpiringNotificationTime = 60; var DefaultCheckSessionInterval = 2000; var UserManagerSettings = exports.UserManagerSettings = function (_OidcClientSettings) { _inherits(UserManagerSettings, _OidcClientSettings); function UserManagerSettings() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, popup_redirect_uri = _ref.popup_redirect_uri, popup_post_logout_redirect_uri = _ref.popup_post_logout_redirect_uri, popupWindowFeatures = _ref.popupWindowFeatures, popupWindowTarget = _ref.popupWindowTarget, silent_redirect_uri = _ref.silent_redirect_uri, silentRequestTimeout = _ref.silentRequestTimeout, _ref$automaticSilentR = _ref.automaticSilentRenew, automaticSilentRenew = _ref$automaticSilentR === undefined ? false : _ref$automaticSilentR, _ref$validateSubOnSil = _ref.validateSubOnSilentRenew, validateSubOnSilentRenew = _ref$validateSubOnSil === undefined ? false : _ref$validateSubOnSil, _ref$includeIdTokenIn = _ref.includeIdTokenInSilentRenew, includeIdTokenInSilentRenew = _ref$includeIdTokenIn === undefined ? true : _ref$includeIdTokenIn, _ref$monitorSession = _ref.monitorSession, monitorSession = _ref$monitorSession === undefined ? true : _ref$monitorSession, _ref$monitorAnonymous = _ref.monitorAnonymousSession, monitorAnonymousSession = _ref$monitorAnonymous === undefined ? false : _ref$monitorAnonymous, _ref$checkSessionInte = _ref.checkSessionInterval, checkSessionInterval = _ref$checkSessionInte === undefined ? DefaultCheckSessionInterval : _ref$checkSessionInte, _ref$stopCheckSession = _ref.stopCheckSessionOnError, stopCheckSessionOnError = _ref$stopCheckSession === undefined ? true : _ref$stopCheckSession, query_status_response_type = _ref.query_status_response_type, _ref$revokeAccessToke = _ref.revokeAccessTokenOnSignout, revokeAccessTokenOnSignout = _ref$revokeAccessToke === undefined ? false : _ref$revokeAccessToke, _ref$accessTokenExpir = _ref.accessTokenExpiringNotificationTime, accessTokenExpiringNotificationTime = _ref$accessTokenExpir === undefined ? DefaultAccessTokenExpiringNotificationTime : _ref$accessTokenExpir, _ref$redirectNavigato = _ref.redirectNavigator, redirectNavigator = _ref$redirectNavigato === undefined ? new _RedirectNavigator.RedirectNavigator() : _ref$redirectNavigato, _ref$popupNavigator = _ref.popupNavigator, popupNavigator = _ref$popupNavigator === undefined ? new _PopupNavigator.PopupNavigator() : _ref$popupNavigator, _ref$iframeNavigator = _ref.iframeNavigator, iframeNavigator = _ref$iframeNavigator === undefined ? new _IFrameNavigator.IFrameNavigator() : _ref$iframeNavigator, _ref$userStore = _ref.userStore, userStore = _ref$userStore === undefined ? new _WebStorageStateStore.WebStorageStateStore({ store: _Global.Global.sessionStorage }) : _ref$userStore; _classCallCheck(this, UserManagerSettings); var _this = _possibleConstructorReturn(this, _OidcClientSettings.call(this, arguments[0])); _this._popup_redirect_uri = popup_redirect_uri; _this._popup_post_logout_redirect_uri = popup_post_logout_redirect_uri; _this._popupWindowFeatures = popupWindowFeatures; _this._popupWindowTarget = popupWindowTarget; _this._silent_redirect_uri = silent_redirect_uri; _this._silentRequestTimeout = silentRequestTimeout; _this._automaticSilentRenew = automaticSilentRenew; _this._validateSubOnSilentRenew = validateSubOnSilentRenew; _this._includeIdTokenInSilentRenew = includeIdTokenInSilentRenew; _this._accessTokenExpiringNotificationTime = accessTokenExpiringNotificationTime; _this._monitorSession = monitorSession; _this._monitorAnonymousSession = monitorAnonymousSession; _this._checkSessionInterval = checkSessionInterval; _this._stopCheckSessionOnError = stopCheckSessionOnError; if (query_status_response_type) { _this._query_status_response_type = query_status_response_type; } else if (arguments[0] && arguments[0].response_type) { _this._query_status_response_type = _SigninRequest.SigninRequest.isOidc(arguments[0].response_type) ? "id_token" : "code"; } else { _this._query_status_response_type = "id_token"; } _this._revokeAccessTokenOnSignout = revokeAccessTokenOnSignout; _this._redirectNavigator = redirectNavigator; _this._popupNavigator = popupNavigator; _this._iframeNavigator = iframeNavigator; _this._userStore = userStore; return _this; } _createClass(UserManagerSettings, [{ key: 'popup_redirect_uri', get: function get() { return this._popup_redirect_uri; } }, { key: 'popup_post_logout_redirect_uri', get: function get() { return this._popup_post_logout_redirect_uri; } }, { key: 'popupWindowFeatures', get: function get() { return this._popupWindowFeatures; } }, { key: 'popupWindowTarget', get: function get() { return this._popupWindowTarget; } }, { key: 'silent_redirect_uri', get: function get() { return this._silent_redirect_uri; } }, { key: 'silentRequestTimeout', get: function get() { return this._silentRequestTimeout; } }, { key: 'automaticSilentRenew', get: function get() { return this._automaticSilentRenew; } }, { key: 'validateSubOnSilentRenew', get: function get() { return this._validateSubOnSilentRenew; } }, { key: 'includeIdTokenInSilentRenew', get: function get() { return this._includeIdTokenInSilentRenew; } }, { key: 'accessTokenExpiringNotificationTime', get: function get() { return this._accessTokenExpiringNotificationTime; } }, { key: 'monitorSession', get: function get() { return this._monitorSession; } }, { key: 'monitorAnonymousSession', get: function get() { return this._monitorAnonymousSession; } }, { key: 'checkSessionInterval', get: function get() { return this._checkSessionInterval; } }, { key: 'stopCheckSessionOnError', get: function get() { return this._stopCheckSessionOnError; } }, { key: 'query_status_response_type', get: function get() { return this._query_status_response_type; } }, { key: 'revokeAccessTokenOnSignout', get: function get() { return this._revokeAccessTokenOnSignout; } }, { key: 'redirectNavigator', get: function get() { return this._redirectNavigator; } }, { key: 'popupNavigator', get: function get() { return this._popupNavigator; } }, { key: 'iframeNavigator', get: function get() { return this._iframeNavigator; } }, { key: 'userStore', get: function get() { return this._userStore; } }]); return UserManagerSettings; }(_OidcClientSettings2.OidcClientSettings); /***/ }), /***/ "./src/WebStorageStateStore.js": /*!*************************************!*\ !*** ./src/WebStorageStateStore.js ***! \*************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebStorageStateStore = undefined; var _Log = __webpack_require__(/*! ./Log.js */ "./src/Log.js"); var _Global = __webpack_require__(/*! ./Global.js */ "./src/Global.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Copyright (c) Brock Allen & Dominick Baier. All rights reserved. // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var WebStorageStateStore = exports.WebStorageStateStore = function () { function WebStorageStateStore() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$prefix = _ref.prefix, prefix = _ref$prefix === undefined ? "oidc." : _ref$prefix, _ref$store = _ref.store, store = _ref$store === undefined ? _Global.Global.localStorage : _ref$store; _classCallCheck(this, WebStorageStateStore); this._store = store; this._prefix = prefix; } WebStorageStateStore.prototype.set = function set(key, value) { _Log.Log.debug("WebStorageStateStore.set", key); key = this._prefix + key; this._store.setItem(key, value); return Promise.resolve(); }; WebStorageStateStore.prototype.get = function get(key) { _Log.Log.debug("WebStorageStateStore.get", key); key = this._prefix + key; var item = this._store.getItem(key); return Promise.resolve(item); }; WebStorageStateStore.prototype.remove = function remove(key) { _Log.Log.debug("WebStorageStateStore.remove", key); key = this._prefix + key; var item = this._store.getItem(key); this._store.removeItem(key); return Promise.resolve(item); }; WebStorageStateStore.prototype.getAllKeys = function getAllKeys() { _Log.Log.debug("WebStorageStateStore.getAllKeys"); var keys = []; for (var index = 0; index < this._store.length; index++) { var key = this._store.key(index); if (key.indexOf(this._prefix) === 0) { keys.push(key.substr(this._prefix.length)); } } return Promise.resolve(keys); }; return WebStorageStateStore; }(); /***/ }), /***/ "./src/crypto/jsrsasign.js": /*!*********************************!*\ !*** ./src/crypto/jsrsasign.js ***! \*********************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AllowedSigningAlgs = exports.b64tohex = exports.hextob64u = exports.crypto = exports.X509 = exports.KeyUtil = exports.jws = undefined; var _jsrsasign = __webpack_require__(/*! ../../jsrsasign/dist/jsrsasign.js */ "./jsrsasign/dist/jsrsasign.js"); var AllowedSigningAlgs = ['RS256', 'RS384', 'RS512', 'PS256', 'PS384', 'PS512', 'ES256', 'ES384', 'ES512']; exports.jws = _jsrsasign.jws; exports.KeyUtil = _jsrsasign.KEYUTIL; exports.X509 = _jsrsasign.X509; exports.crypto = _jsrsasign.crypto; exports.hextob64u = _jsrsasign.hextob64u; exports.b64tohex = _jsrsasign.b64tohex; exports.AllowedSigningAlgs = AllowedSigningAlgs; /***/ }), /***/ "./src/random.js": /*!***********************!*\ !*** ./src/random.js ***! \***********************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = random; /** * Generates RFC4122 version 4 guid () */ var crypto = typeof window !== 'undefined' ? window.crypto || window.msCrypto : null; function _cryptoUuidv4() { return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) { return (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16); }); } function _uuidv4() { return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) { return (c ^ Math.random() * 16 >> c / 4).toString(16); }); } function random() { var hasCrypto = crypto != 'undefined' && crypto !== null; var hasRandomValues = hasCrypto && typeof crypto.getRandomValues != 'undefined'; var uuid = hasRandomValues ? _cryptoUuidv4 : _uuidv4; return uuid().replace(/-/g, ''); } module.exports = exports['default']; /***/ }), /***/ "./version.js": /*!********************!*\ !*** ./version.js ***! \********************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Version = "1.11.6-beta.1";exports.Version = Version; /***/ }), /***/ 0: /*!***************************************!*\ !*** multi babel-polyfill ./index.js ***! \***************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! babel-polyfill */"./node_modules/babel-polyfill/lib/index.js"); module.exports = __webpack_require__(/*! ./index.js */"./index.js"); /***/ }) /******/ }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9PaWRjL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL09pZGMvLi9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vanNyc2FzaWduL2Rpc3QvanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1jb3B5LXdpdGhpbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZpbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tdG8tanNvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2h0bWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbnZva2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZm9yY2VkLXBhbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZXBsYWNlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcmVwZWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190YXNrLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VzZXItYWdlbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1leHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmpvaW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUubm93LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY29zaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmltdWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2luaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudGFuaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zZXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ibGluay5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmFycmF5LWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstc2V0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hc2FwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC50by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaWFkZGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmltdWxoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLXNldHRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC50by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy50cmltLWxlZnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL3NoaW0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9BY2Nlc3NUb2tlbkV2ZW50cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NoZWNrU2Vzc2lvbklGcmFtZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0Nsb2NrU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFJRnJhbWVOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Db3Jkb3ZhUG9wdXBOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Db3Jkb3ZhUG9wdXBXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9FcnJvclJlc3BvbnNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvRXZlbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9HbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9JRnJhbWVOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9JRnJhbWVXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Jbk1lbW9yeVdlYlN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Kb3NlVXRpbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0pvc2VVdGlsSW1wbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0pzb25TZXJ2aWNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvTG9nLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvTWV0YWRhdGFTZXJ2aWNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvT2lkY0NsaWVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL09pZGNDbGllbnRTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1BvcHVwTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUG9wdXBXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9SZWRpcmVjdE5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Jlc3BvbnNlVmFsaWRhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2Vzc2lvbk1vbml0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWduaW5SZXF1ZXN0LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbmluUmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWduaW5TdGF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25vdXRSZXF1ZXN0LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbm91dFJlc3BvbnNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lsZW50UmVuZXdTZXJ2aWNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU3RhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9UaW1lci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Rva2VuQ2xpZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXJsVXRpbGl0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VySW5mb1NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJNYW5hZ2VyRXZlbnRzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlck1hbmFnZXJTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1dlYlN0b3JhZ2VTdGF0ZVN0b3JlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvY3J5cHRvL2pzcnNhc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL3JhbmRvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vdmVyc2lvbi5qcyJdLCJuYW1lcyI6WyJWZXJzaW9uIiwiTG9nIiwiT2lkY0NsaWVudCIsIk9pZGNDbGllbnRTZXR0aW5ncyIsIldlYlN0b3JhZ2VTdGF0ZVN0b3JlIiwiSW5NZW1vcnlXZWJTdG9yYWdlIiwiVXNlck1hbmFnZXIiLCJBY2Nlc3NUb2tlbkV2ZW50cyIsIk1ldGFkYXRhU2VydmljZSIsIkNvcmRvdmFQb3B1cE5hdmlnYXRvciIsIkNvcmRvdmFJRnJhbWVOYXZpZ2F0b3IiLCJDaGVja1Nlc3Npb25JRnJhbWUiLCJUb2tlblJldm9jYXRpb25DbGllbnQiLCJTZXNzaW9uTW9uaXRvciIsIkdsb2JhbCIsIlVzZXIiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ3aW5kb3ciLCJDcnlwdG9KUyIsImUiLCJnIiwiYSIsImIiLCJsaWIiLCJqIiwiQmFzZSIsIm4iLCJleHRlbmQiLCJwIiwicHJvdG90eXBlIiwibyIsIm1peEluIiwiaGFzT3duUHJvcGVydHkiLCJpbml0IiwiJHN1cGVyIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJjcmVhdGUiLCJ0b1N0cmluZyIsImNsb25lIiwibCIsIldvcmRBcnJheSIsIndvcmRzIiwic2lnQnl0ZXMiLCJsZW5ndGgiLCJoIiwic3RyaW5naWZ5IiwiY29uY2F0IiwidCIsInEiLCJzIiwiY2xhbXAiLCJyIiwiY2VpbCIsImNhbGwiLCJzbGljZSIsInJhbmRvbSIsInB1c2giLCJtIiwiZW5jIiwiSGV4Iiwiam9pbiIsInBhcnNlIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJkIiwiTGF0aW4xIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiY2hhckNvZGVBdCIsImMiLCJVdGY4IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiRXJyb3IiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImkiLCJCdWZmZXJlZEJsb2NrQWxnb3JpdGhtIiwicmVzZXQiLCJfZGF0YSIsIl9uRGF0YUJ5dGVzIiwiX2FwcGVuZCIsIl9wcm9jZXNzIiwidyIsIngiLCJibG9ja1NpemUiLCJ2IiwidSIsIm1heCIsIl9taW5CdWZmZXJTaXplIiwibWluIiwiX2RvUHJvY2Vzc0Jsb2NrIiwic3BsaWNlIiwiZiIsIkhhc2hlciIsImNmZyIsIl9kb1Jlc2V0IiwidXBkYXRlIiwiZmluYWxpemUiLCJfZG9GaW5hbGl6ZSIsIl9jcmVhdGVIZWxwZXIiLCJfY3JlYXRlSG1hY0hlbHBlciIsImsiLCJITUFDIiwiYWxnbyIsIk1hdGgiLCJ4NjQiLCJXb3JkIiwiaGlnaCIsImxvdyIsInRvWDMyIiwiQmFzZTY0IiwiX21hcCIsImNoYXJBdCIsImluZGV4T2YiLCJzcXJ0IiwicG93IiwiU0hBMjU2IiwiX2hhc2giLCJmbG9vciIsIkhtYWNTSEEyNTYiLCJUIiwiZWEiLCJTSEE1MTIiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIlgiLCJLIiwiWSIsIkwiLCJaIiwiTSIsIiQiLCJOIiwiYWEiLCJPIiwiYmEiLCJQIiwiY2EiLCJRIiwieiIsIkEiLCJ5IiwiVSIsIkIiLCJSIiwiQyIsIlMiLCJEIiwiViIsIkUiLCJXIiwiZmEiLCJkYSIsIkhtYWNTSEE1MTIiLCJTSEEzODQiLCJIbWFjU0hBMzg0IiwiYjY0bWFwIiwiYjY0cGFkIiwiaGV4MmI2NCIsInN1YnN0cmluZyIsImI2NHRvaGV4IiwiaW50MmNoYXIiLCJiNjR0b0JBIiwiQXJyYXkiLCJkYml0cyIsImNhbmFyeSIsImpfbG0iLCJCaWdJbnRlZ2VyIiwiZnJvbU51bWJlciIsImZyb21TdHJpbmciLCJuYmkiLCJhbTEiLCJhbTIiLCJhbTMiLCJhcHBOYW1lIiwiYW0iLCJEQiIsIkRNIiwiRFYiLCJCSV9GUCIsIkZWIiwiRjEiLCJGMiIsIkJJX1JNIiwiQklfUkMiLCJyciIsInZ2IiwiaW50QXQiLCJibnBDb3B5VG8iLCJibnBGcm9tSW50IiwibmJ2IiwiZnJvbUludCIsImJucEZyb21TdHJpbmciLCJmcm9tUmFkaXgiLCJaRVJPIiwic3ViVG8iLCJibnBDbGFtcCIsImJuVG9TdHJpbmciLCJuZWdhdGUiLCJ0b1JhZGl4IiwiYm5OZWdhdGUiLCJibkFicyIsImJuQ29tcGFyZVRvIiwibmJpdHMiLCJibkJpdExlbmd0aCIsImJucERMU2hpZnRUbyIsImJucERSU2hpZnRUbyIsImJucExTaGlmdFRvIiwiYm5wUlNoaWZ0VG8iLCJibnBTdWJUbyIsImJucE11bHRpcGx5VG8iLCJhYnMiLCJibnBTcXVhcmVUbyIsImJucERpdlJlbVRvIiwiY29weVRvIiwibFNoaWZ0VG8iLCJkbFNoaWZ0VG8iLCJjb21wYXJlVG8iLCJPTkUiLCJkclNoaWZ0VG8iLCJyU2hpZnRUbyIsImJuTW9kIiwiZGl2UmVtVG8iLCJDbGFzc2ljIiwiY0NvbnZlcnQiLCJtb2QiLCJjUmV2ZXJ0IiwiY1JlZHVjZSIsImNNdWxUbyIsIm11bHRpcGx5VG8iLCJyZWR1Y2UiLCJjU3FyVG8iLCJzcXVhcmVUbyIsImNvbnZlcnQiLCJyZXZlcnQiLCJtdWxUbyIsInNxclRvIiwiYm5wSW52RGlnaXQiLCJNb250Z29tZXJ5IiwibXAiLCJpbnZEaWdpdCIsIm1wbCIsIm1waCIsInVtIiwibXQyIiwibW9udENvbnZlcnQiLCJtb250UmV2ZXJ0IiwibW9udFJlZHVjZSIsIm1vbnRTcXJUbyIsIm1vbnRNdWxUbyIsImJucElzRXZlbiIsImJucEV4cCIsImJuTW9kUG93SW50IiwiaXNFdmVuIiwiZXhwIiwiYml0TGVuZ3RoIiwibW9kUG93SW50IiwiYm5DbG9uZSIsImJuSW50VmFsdWUiLCJibkJ5dGVWYWx1ZSIsImJuU2hvcnRWYWx1ZSIsImJucENodW5rU2l6ZSIsIkxOMiIsImxvZyIsImJuU2lnTnVtIiwiYm5wVG9SYWRpeCIsInNpZ251bSIsImNodW5rU2l6ZSIsImludFZhbHVlIiwiYm5wRnJvbVJhZGl4IiwiZE11bHRpcGx5IiwiZEFkZE9mZnNldCIsImJucEZyb21OdW1iZXIiLCJ0ZXN0Qml0IiwiYml0d2lzZVRvIiwic2hpZnRMZWZ0Iiwib3Bfb3IiLCJpc1Byb2JhYmxlUHJpbWUiLCJuZXh0Qnl0ZXMiLCJiblRvQnl0ZUFycmF5IiwiYm5FcXVhbHMiLCJibk1pbiIsImJuTWF4IiwiYm5wQml0d2lzZVRvIiwib3BfYW5kIiwiYm5BbmQiLCJibk9yIiwib3BfeG9yIiwiYm5Yb3IiLCJvcF9hbmRub3QiLCJibkFuZE5vdCIsImJuTm90IiwiYm5TaGlmdExlZnQiLCJiblNoaWZ0UmlnaHQiLCJsYml0IiwiYm5HZXRMb3dlc3RTZXRCaXQiLCJjYml0IiwiYm5CaXRDb3VudCIsImJuVGVzdEJpdCIsImJucENoYW5nZUJpdCIsImJuU2V0Qml0IiwiY2hhbmdlQml0IiwiYm5DbGVhckJpdCIsImJuRmxpcEJpdCIsImJucEFkZFRvIiwiYm5BZGQiLCJhZGRUbyIsImJuU3VidHJhY3QiLCJibk11bHRpcGx5IiwiYm5TcXVhcmUiLCJibkRpdmlkZSIsImJuUmVtYWluZGVyIiwiYm5EaXZpZGVBbmRSZW1haW5kZXIiLCJibnBETXVsdGlwbHkiLCJibnBEQWRkT2Zmc2V0IiwiTnVsbEV4cCIsIm5Ob3AiLCJuTXVsVG8iLCJuU3FyVG8iLCJiblBvdyIsImJucE11bHRpcGx5TG93ZXJUbyIsImJucE11bHRpcGx5VXBwZXJUbyIsIkJhcnJldHQiLCJyMiIsInEzIiwibXUiLCJkaXZpZGUiLCJiYXJyZXR0Q29udmVydCIsImJhcnJldHRSZXZlcnQiLCJiYXJyZXR0UmVkdWNlIiwibXVsdGlwbHlVcHBlclRvIiwibXVsdGlwbHlMb3dlclRvIiwiYmFycmV0dFNxclRvIiwiYmFycmV0dE11bFRvIiwiYm5Nb2RQb3ciLCJibkdDRCIsImdldExvd2VzdFNldEJpdCIsImJucE1vZEludCIsImJuTW9kSW52ZXJzZSIsInN1YnRyYWN0IiwiYWRkIiwibG93cHJpbWVzIiwibHBsaW0iLCJibklzUHJvYmFibGVQcmltZSIsIm1vZEludCIsIm1pbGxlclJhYmluIiwiYm5wTWlsbGVyUmFiaW4iLCJzaGlmdFJpZ2h0IiwibW9kUG93IiwiYnl0ZVZhbHVlIiwic2hvcnRWYWx1ZSIsInRvQnl0ZUFycmF5IiwiZXF1YWxzIiwiYW5kIiwib3IiLCJ4b3IiLCJhbmROb3QiLCJub3QiLCJiaXRDb3VudCIsInNldEJpdCIsImNsZWFyQml0IiwiZmxpcEJpdCIsIm11bHRpcGx5IiwicmVtYWluZGVyIiwiZGl2aWRlQW5kUmVtYWluZGVyIiwibW9kSW52ZXJzZSIsImdjZCIsInNxdWFyZSIsIkFyY2ZvdXIiLCJBUkM0aW5pdCIsIkFSQzRuZXh0IiwibmV4dCIsInBybmdfbmV3c3RhdGUiLCJybmdfcHNpemUiLCJybmdfc3RhdGUiLCJybmdfcG9vbCIsInJuZ19wcHRyIiwicm5nX3NlZWRfaW50Iiwicm5nX3NlZWRfdGltZSIsIkRhdGUiLCJnZXRUaW1lIiwidW5kZWZpbmVkIiwiY3J5cHRvIiwibXNDcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJ1YSIsIlVpbnQ4QXJyYXkiLCJhcHBWZXJzaW9uIiwicm5nX2dldF9ieXRlIiwicm5nX2dldF9ieXRlcyIsIlNlY3VyZVJhbmRvbSIsInBhcnNlQmlnSW50IiwibGluZWJyayIsImJ5dGUySGV4IiwicGtjczFwYWQyIiwib2FlcF9tZ2YxX2FyciIsIm9hZXBfcGFkIiwiS0pVUiIsIk1lc3NhZ2VEaWdlc3QiLCJVdGlsIiwiZ2V0Q2Fub25pY2FsQWxnTmFtZSIsImdldEhhc2hMZW5ndGgiLCJoZXh0b3JzdHIiLCJoYXNoSGV4IiwicnN0cnRvaGV4IiwiUlNBS2V5IiwiZG1wMSIsImRtcTEiLCJjb2VmZiIsIlJTQVNldFB1YmxpYyIsImlzUHVibGljIiwiaXNQcml2YXRlIiwiUlNBRG9QdWJsaWMiLCJSU0FFbmNyeXB0IiwiZG9QdWJsaWMiLCJSU0FFbmNyeXB0T0FFUCIsInNldFB1YmxpYyIsImVuY3J5cHQiLCJlbmNyeXB0T0FFUCIsInR5cGUiLCJFQ0ZpZWxkRWxlbWVudEZwIiwiZmVGcEVxdWFscyIsImZlRnBUb0JpZ0ludGVnZXIiLCJmZUZwTmVnYXRlIiwiZmVGcEFkZCIsInRvQmlnSW50ZWdlciIsImZlRnBTdWJ0cmFjdCIsImZlRnBNdWx0aXBseSIsImZlRnBTcXVhcmUiLCJmZUZwRGl2aWRlIiwiRUNQb2ludEZwIiwiY3VydmUiLCJ6aW52IiwicG9pbnRGcEdldFgiLCJmcm9tQmlnSW50ZWdlciIsInBvaW50RnBHZXRZIiwicG9pbnRGcEVxdWFscyIsImlzSW5maW5pdHkiLCJwb2ludEZwSXNJbmZpbml0eSIsInBvaW50RnBOZWdhdGUiLCJwb2ludEZwQWRkIiwidHdpY2UiLCJnZXRJbmZpbml0eSIsInBvaW50RnBUd2ljZSIsInBvaW50RnBNdWx0aXBseSIsInBvaW50RnBNdWx0aXBseVR3byIsImdldFgiLCJnZXRZIiwibXVsdGlwbHlUd28iLCJFQ0N1cnZlRnAiLCJpbmZpbml0eSIsImN1cnZlRnBHZXRRIiwiY3VydmVGcEdldEEiLCJjdXJ2ZUZwR2V0QiIsImN1cnZlRnBFcXVhbHMiLCJjdXJ2ZUZwR2V0SW5maW5pdHkiLCJjdXJ2ZUZwRnJvbUJpZ0ludGVnZXIiLCJjdXJ2ZUZwRGVjb2RlUG9pbnRIZXgiLCJnZXRRIiwiZ2V0QSIsImdldEIiLCJkZWNvZGVQb2ludEhleCIsImdldEJ5dGVMZW5ndGgiLCJnZXRFbmNvZGVkIiwidG9CeXRlQXJyYXlVbnNpZ25lZCIsInVuc2hpZnQiLCJkZWNvZGVGcm9tIiwiZGVjb2RlRnJvbUhleCIsImFkZDJEIiwidHdpY2UyRCIsInZhbHVlT2YiLCJtdWx0aXBseTJEIiwiaXNPbkN1cnZlIiwidmFsaWRhdGUiLCJqc29uUGFyc2UiLCJSZWdFeHAiLCJPYmplY3QiLCJtYXRjaCIsInJlcGxhY2UiLCJzaGlmdCIsImFzbjEiLCJBU04xVXRpbCIsImludGVnZXJUb0J5dGVIZXgiLCJiaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleCIsImdldFBFTVN0cmluZ0Zyb21IZXgiLCJoZXh0b3BlbSIsIm5ld09iamVjdCIsIkFTTjFPYmplY3QiLCJERVJCb29sZWFuIiwiREVSSW50ZWdlciIsIkRFUkJpdFN0cmluZyIsIkRFUk9jdGV0U3RyaW5nIiwiREVSTnVsbCIsIkRFUk9iamVjdElkZW50aWZpZXIiLCJERVJFbnVtZXJhdGVkIiwiREVSVVRGOFN0cmluZyIsIkRFUk51bWVyaWNTdHJpbmciLCJERVJQcmludGFibGVTdHJpbmciLCJERVJUZWxldGV4U3RyaW5nIiwiREVSSUE1U3RyaW5nIiwiREVSVVRDVGltZSIsIkRFUkdlbmVyYWxpemVkVGltZSIsIkRFUlZpc2libGVTdHJpbmciLCJERVJCTVBTdHJpbmciLCJERVJTZXF1ZW5jZSIsIkRFUlNldCIsIkRFUlRhZ2dlZE9iamVjdCIsImtleXMiLCJhcnJheSIsInRhZyIsImV4cGxpY2l0Iiwib2JqIiwianNvblRvQVNOMUhFWCIsImdldEVuY29kZWRIZXgiLCJvaWRIZXhUb0ludCIsIm9pZEludFRvSGV4Iiwic3BsaXQiLCJwYXJhbXMiLCJnZXRMZW5ndGhIZXhGcm9tVmFsdWUiLCJoViIsImhUTFYiLCJpc01vZGlmaWVkIiwiZ2V0RnJlc2hWYWx1ZUhleCIsImhMIiwiaFQiLCJnZXRWYWx1ZUhleCIsInNldEJ5UGFyYW0iLCJ0bHYiLCJERVJBYnN0cmFjdFN0cmluZyIsInN1cGVyY2xhc3MiLCJjb25zdHJ1Y3RvciIsImdldFN0cmluZyIsInNldFN0cmluZyIsInV0Zjh0b2hleCIsInRvTG93ZXJDYXNlIiwic2V0U3RyaW5nSGV4Iiwic3RyIiwiaGV4IiwiZXh0ZW5kQ2xhc3MiLCJERVJBYnN0cmFjdFRpbWUiLCJsb2NhbERhdGVUb1VUQyIsImdldFRpbWV6b25lT2Zmc2V0IiwiZm9ybWF0RGF0ZSIsInplcm9QYWRkaW5nIiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwic3RvaGV4Iiwic2V0QnlEYXRlVmFsdWUiLCJVVEMiLCJzZXRCeURhdGUiLCJERVJBYnN0cmFjdFN0cnVjdHVyZWQiLCJzZXRCeUFTTjFPYmplY3RBcnJheSIsImFzbjFBcnJheSIsImFwcGVuZEFTTjFPYmplY3QiLCJzZXRCeUJpZ0ludGVnZXIiLCJzZXRCeUludGVnZXIiLCJzZXRWYWx1ZUhleCIsImJpZ2ludCIsInNldEhleFZhbHVlSW5jbHVkaW5nVW51c2VkQml0cyIsInNldFVudXNlZEJpdHNBbmRIZXhWYWx1ZSIsInNldEJ5QmluYXJ5U3RyaW5nIiwic2V0QnlCb29sZWFuQXJyYXkiLCJuZXdGYWxzZUFycmF5IiwiYmluIiwic2V0VmFsdWVPaWRTdHJpbmciLCJvaWR0b2hleCIsInNldFZhbHVlTmFtZSIsIng1MDkiLCJPSUQiLCJuYW1lMm9pZCIsInNldFZhbHVlTmFtZU9yT2lkIiwib2lkIiwibmFtZSIsImRhdGUiLCJ3aXRoTWlsbGlzIiwibWlsbGlzIiwic29ydEZsYWciLCJzb3J0Iiwic29ydGZsYWciLCJpc0V4cGxpY2l0IiwiYXNuMU9iamVjdCIsInNldEFTTjFPYmplY3QiLCJ0YWdlIiwidGFnaSIsIkFTTjFIRVgiLCJnZXRMYmxlbiIsImdldEwiLCJnZXRWYmxlbiIsImdldFZpZHgiLCJnZXRWIiwiZ2V0VExWIiwiZ2V0VExWYmxlbiIsImdldE5leHRTaWJsaW5nSWR4IiwiZ2V0Q2hpbGRJZHgiLCJnZXROdGhDaGlsZElkeCIsImdldElkeGJ5TGlzdCIsImdldElkeGJ5TGlzdEV4IiwiaXNDb250ZXh0VGFnIiwiZ2V0VExWYnlMaXN0IiwiZ2V0VExWYnlMaXN0RXgiLCJnZXRWYnlMaXN0IiwiZ2V0VmJ5TGlzdEV4IiwiZ2V0SW50IiwiYml0c3RydG9pbnQiLCJnZXRPSUQiLCJoZXh0b29pZCIsImdldE9JRE5hbWUiLCJvaWQybmFtZSIsImhleHRvb2lkc3RyIiwiZHVtcCIsIm9tbWl0X2xvbmdfb2N0ZXQiLCJpc0FTTjFIRVgiLCJoZXh0b3V0ZjgiLCJ1Y3MyaGV4dG91dGY4Iiwib2lkbmFtZSIsIkpTT04iLCJ4NTA5RXh0TmFtZSIsImNoZWNrU3RyaWN0REVSIiwibGFuZyIsImlzSGV4IiwiQmFzZTY0eCIsInN0b0JBIiwiQkF0b3MiLCJCQXRvaGV4Iiwic3RvYjY0Iiwic3RvYjY0dSIsImI2NHRvYjY0dSIsImI2NHV0b3MiLCJiNjR1dG9iNjQiLCJoZXh0b2I2NHUiLCJiNjR1dG9oZXgiLCJ1dGY4dG9iNjR1IiwiYjY0dXRvdXRmOCIsIkJ1ZmZlciIsImZyb20iLCJ1cmljbXB0b2hleCIsImVuY29kZVVSSUNvbXBvbmVudEFsbCIsImhleHRvdXJpY21wIiwidXRmOHRvYjY0IiwiYjY0dG91dGY4IiwiaGV4dG9iNjQiLCJoZXh0b2I2NG5sIiwiYjY0bmx0b2hleCIsInBlbXRvaGV4IiwiaGV4dG9BcnJheUJ1ZmZlciIsIkFycmF5QnVmZmVyIiwiRGF0YVZpZXciLCJzZXRVaW50OCIsIkFycmF5QnVmZmVydG9oZXgiLCJieXRlTGVuZ3RoIiwiZ2V0VWludDgiLCJ6dWx1dG9tc2VjIiwienVsdXRvc2VjIiwienVsdXRvZGF0ZSIsImRhdGV0b3p1bHUiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJpcHY2dG9oZXgiLCJyZXBlYXQiLCJoZXh0b2lwdjYiLCJoZXh0b2lwIiwiaXB0b2hleCIsIm1hcCIsIm5ld2xpbmVfdG9Vbml4IiwibmV3bGluZV90b0RvcyIsImlzSW50ZWdlciIsImlzaGV4IiwiaXNCYXNlNjQiLCJpc0Jhc2U2NFVSTCIsImlzSW50ZWdlckFycmF5IiwiaXNQcmludGFibGUiLCJpc0lBNSIsImlzTWFpbCIsImhleHRvcG9zaGV4IiwiaW50YXJ5c3RydG9oZXgiLCJzdHJkaWZmaWR4Iiwic3RycGFkIiwiaW50dG9iaXRzdHIiLCJOdW1iZXIiLCJESUdFU1RJTkZPSEVBRCIsInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDIiLCJtZDUiLCJyaXBlbWQxNjAiLCJERUZBVUxUUFJPVklERVIiLCJobWFjbWQ1IiwiaG1hY3NoYTEiLCJobWFjc2hhMjI0IiwiaG1hY3NoYTI1NiIsImhtYWNzaGEzODQiLCJobWFjc2hhNTEyIiwiaG1hY3JpcGVtZDE2MCIsIk1ENXdpdGhSU0EiLCJTSEExd2l0aFJTQSIsIlNIQTIyNHdpdGhSU0EiLCJTSEEyNTZ3aXRoUlNBIiwiU0hBMzg0d2l0aFJTQSIsIlNIQTUxMndpdGhSU0EiLCJSSVBFTUQxNjB3aXRoUlNBIiwiTUQ1d2l0aEVDRFNBIiwiU0hBMXdpdGhFQ0RTQSIsIlNIQTIyNHdpdGhFQ0RTQSIsIlNIQTI1NndpdGhFQ0RTQSIsIlNIQTM4NHdpdGhFQ0RTQSIsIlNIQTUxMndpdGhFQ0RTQSIsIlJJUEVNRDE2MHdpdGhFQ0RTQSIsIlNIQTF3aXRoRFNBIiwiU0hBMjI0d2l0aERTQSIsIlNIQTI1NndpdGhEU0EiLCJNRDV3aXRoUlNBYW5kTUdGMSIsIlNIQXdpdGhSU0FhbmRNR0YxIiwiU0hBMXdpdGhSU0FhbmRNR0YxIiwiU0hBMjI0d2l0aFJTQWFuZE1HRjEiLCJTSEEyNTZ3aXRoUlNBYW5kTUdGMSIsIlNIQTM4NHdpdGhSU0FhbmRNR0YxIiwiU0hBNTEyd2l0aFJTQWFuZE1HRjEiLCJSSVBFTUQxNjB3aXRoUlNBYW5kTUdGMSIsIkNSWVBUT0pTTUVTU0FHRURJR0VTVE5BTUUiLCJNRDUiLCJTSEExIiwiU0hBMjI0IiwiUklQRU1EMTYwIiwiZ2V0RGlnZXN0SW5mb0hleCIsImdldFBhZGRlZERpZ2VzdEluZm9IZXgiLCJoYXNoU3RyaW5nIiwiYWxnIiwiZGlnZXN0U3RyaW5nIiwiZGlnZXN0SGV4Iiwic2hhMjU2SGV4Iiwic2hhNTEySGV4IiwiaXNLZXkiLCJEU0EiLCJFQ0RTQSIsInByb3YiLCJTRUNVUkVSQU5ET01HRU4iLCJnZXRSYW5kb21IZXhPZk5ieXRlcyIsImdldFJhbmRvbUJpZ0ludGVnZXJPZk5ieXRlcyIsImdldFJhbmRvbUhleE9mTmJpdHMiLCJnZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cyIsImdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXgiLCJnZXRSYW5kb21CaWdJbnRlZ2VyTWluVG9NYXgiLCJzZXRBbGdBbmRQcm92aWRlciIsIm1kIiwidXBkYXRlU3RyaW5nIiwidXBkYXRlSGV4IiwiZGlnZXN0Iiwic2pjbCIsImhhc2giLCJjb2RlYyIsInRvQml0cyIsImZyb21CaXRzIiwiYWxnTmFtZSIsInByb3ZOYW1lIiwiSEFTSExFTkdUSCIsIk1hYyIsImFsZ1Byb3YiLCJtYWMiLCJwYXNzIiwiZG9GaW5hbCIsImRvRmluYWxTdHJpbmciLCJkb0ZpbmFsSGV4Iiwic2V0UGFzc3dvcmQiLCJ1dGY4IiwicnN0ciIsImI2NCIsImI2NHUiLCJTaWduYXR1cmUiLCJfc2V0QWxnTmFtZXMiLCJtZEFsZ05hbWUiLCJwdWJrZXlBbGdOYW1lIiwiX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUiLCJLRVlVVElMIiwiZ2V0S2V5IiwicHJ2S2V5Iiwic3RhdGUiLCJwdWJLZXkiLCJzaWduIiwic0hhc2hIZXgiLCJlY3BydmhleCIsImVjY3VydmVuYW1lIiwicHJ2IiwiaFNpZ24iLCJzaWduV2l0aE1lc3NhZ2VIYXNoUFNTIiwicHNzU2FsdExlbiIsInNpZ25XaXRoTWVzc2FnZUhhc2giLCJzaWduU3RyaW5nIiwic2lnbkhleCIsInZlcmlmeSIsImVjcHViaGV4IiwicHViIiwidmVyaWZ5V2l0aE1lc3NhZ2VIYXNoUFNTIiwidmVyaWZ5V2l0aE1lc3NhZ2VIYXNoIiwiYWxnUHJvdk5hbWUiLCJpbml0UGFyYW1zIiwicHNzc2FsdGxlbiIsInBydmtleXBlbSIsInBydmtleXBhcyIsIkNpcGhlciIsImdldEFsZ0J5S2V5QW5kTmFtZSIsImRlY3J5cHQiLCJkZWNyeXB0T0FFUCIsIm9pZGhleDJuYW1lIiwiRUNQYXJhbWV0ZXJEQiIsImdldE5hbWUiLCJnZXRCaWdSYW5kb20iLCJzZXROYW1lZEN1cnZlIiwiZWNwYXJhbXMiLCJnZXRCeU5hbWUiLCJwcnZLZXlIZXgiLCJwdWJLZXlIZXgiLCJjdXJ2ZU5hbWUiLCJzZXRQcml2YXRlS2V5SGV4Iiwic2V0UHVibGljS2V5SGV4IiwiZ2V0UHVibGljS2V5WFlIZXgiLCJrZXlsZW4iLCJnZXRTaG9ydE5JU1RQQ3VydmVOYW1lIiwiZ2VuZXJhdGVLZXlQYWlySGV4IiwiYmlSU1NpZ1RvQVNOMVNpZyIsImZyb21CeXRlQXJyYXlVbnNpZ25lZCIsInNlcmlhbGl6ZVNpZyIsInZlcmlmeUhleCIsInBhcnNlU2lnSGV4IiwidmVyaWZ5UmF3IiwiQml0Y29pbiIsImlzQXJyYXkiLCJwYXJzZVNpZyIsInRvQnl0ZUFycmF5U2lnbmVkIiwicGFyc2VTaWdDb21wYWN0IiwicmVhZFBLQ1M1UHJ2S2V5SGV4IiwicmVhZFBLQ1M4UHJ2S2V5SGV4IiwicmVhZFBLQ1M4UHViS2V5SGV4IiwicmVhZENlcnRQdWJLZXlIZXgiLCJwYXJzZVNpZ0hleEluSGV4UlMiLCJhc24xU2lnVG9Db25jYXRTaWciLCJjb25jYXRTaWdUb0FTTjFTaWciLCJoZXhSU1NpZ1RvQVNOMVNpZyIsInJlZ2lzdCIsIkFFUyIsIlRyaXBsZURFUyIsIkRFUyIsImtleSIsIml2IiwiY2lwaGVydGV4dCIsInByb2MiLCJlcHJvYyIsIml2bGVuIiwiY2lwaGVyIiwiaXZzYWx0IiwiZGF0YSIsImtleWhleCIsIml2aGV4IiwidmVyc2lvbiIsInBhcnNlUEtDUzVQRU0iLCJnZXRLZXlBbmRVbnVzZWRJdkJ5UGFzc2NvZGVBbmRJdnNhbHQiLCJkZWNyeXB0S2V5QjY0IiwiZ2V0RGVjcnlwdGVkS2V5SGV4IiwiZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4IiwidG9VcHBlckNhc2UiLCJwYXJzZUhleE9mRW5jcnlwdGVkUEtDUzgiLCJlbmNyeXB0aW9uU2NoZW1lQWxnIiwiZW5jcnlwdGlvblNjaGVtZUlWIiwicGJrZGYyU2FsdCIsInBia2RmMkl0ZXIiLCJnZXRQQktERjJLZXlIZXhGcm9tUGFyYW0iLCJQQktERjIiLCJrZXlTaXplIiwiaXRlcmF0aW9ucyIsIl9nZXRQbGFpblBLQ1M4SGV4RnJvbUVuY3J5cHRlZFBLQ1M4UEVNIiwiZ2V0S2V5RnJvbUVuY3J5cHRlZFBLQ1M4UEVNIiwiZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4SGV4IiwicGFyc2VQbGFpblByaXZhdGVQS0NTOEhleCIsImFsZ3BhcmFtIiwiYWxnb2lkIiwia2V5aWR4IiwiZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4UEVNIiwiX2dldEtleUZyb21QdWJsaWNQS0NTOEhleCIsInBhcnNlUHVibGljUmF3UlNBS2V5SGV4IiwicGFyc2VQdWJsaWNQS0NTOEhleCIsInh5Iiwia3R5IiwiZHAiLCJkcSIsImNvIiwicWkiLCJzZXRQcml2YXRlRXgiLCJzZXRQcml2YXRlIiwiY3J2IiwiWDUwOSIsImdldFB1YmxpY0tleUZyb21DZXJ0SGV4IiwiZ2V0UHVibGljS2V5RnJvbUNlcnRQRU0iLCJnZW5lcmF0ZUtleXBhaXIiLCJnZW5lcmF0ZSIsInBydktleU9iaiIsInB1YktleU9iaiIsImdldFBFTSIsIlN1YmplY3RQdWJsaWNLZXlJbmZvIiwic2VxIiwib2N0c3RyIiwiYml0c3RyIiwiZ2V0S2V5RnJvbUNTUlBFTSIsImdldEtleUZyb21DU1JIZXgiLCJwYXJzZUNTUkhleCIsInA4cHVia2V5aGV4IiwiZ2V0S2V5SUQiLCJnZXRKV0tGcm9tS2V5IiwiZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsImdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsInJlYWRQcml2YXRlS2V5RnJvbVBFTVN0cmluZyIsInJlYWRQS0NTNVB1YktleUhleCIsInJlYWRDZXJ0SGV4IiwiZ2V0UHVibGljS2V5SGV4IiwiX1JFX0hFWERFQ09OTFkiLCJfcnNhc2lnbl9nZXRIZXhQYWRkZWREaWdlc3RJbmZvRm9yU3RyaW5nIiwiZG9Qcml2YXRlIiwicHNzX21nZjFfc3RyIiwic2lnblBTUyIsIl9yc2FzaWduX2dldERlY3J5cHRTaWduYXR1cmVCSSIsIl9yc2FzaWduX2dldEhleERpZ2VzdEluZm9Gcm9tU2lnIiwiX3JzYXNpZ25fZ2V0QWxnTmFtZUFuZEhhc2hGcm9tSGV4RGlzZ2VzdEluZm8iLCJ2ZXJpZnlQU1MiLCJTQUxUX0xFTl9ITEVOIiwiU0FMVF9MRU5fTUFYIiwiU0FMVF9MRU5fUkVDT1ZFUiIsIkFsZ29yaXRobUlkZW50aWZpZXIiLCJQU1NOQU1FMkFTTjFUTFYiLCJIRVgyU1RBRyIsImZvZmZzZXQiLCJhRXh0SW5mbyIsImdldFZlcnNpb24iLCJnZXRTZXJpYWxOdW1iZXJIZXgiLCJnZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZCIsImdldEFsZ29yaXRobUlkZW50aWZpZXJOYW1lIiwiZ2V0SXNzdWVyIiwiZ2V0WDUwME5hbWUiLCJnZXRJc3N1ZXJIZXgiLCJnZXRJc3N1ZXJTdHJpbmciLCJnZXRTdWJqZWN0IiwiZ2V0U3ViamVjdEhleCIsImdldFN1YmplY3RTdHJpbmciLCJnZXROb3RCZWZvcmUiLCJnZXROb3RBZnRlciIsImdldFB1YmxpY0tleUlkeCIsImdldFB1YmxpY0tleUNvbnRlbnRJZHgiLCJnZXRQdWJsaWNLZXkiLCJnZXRTaWduYXR1cmVBbGdvcml0aG1OYW1lIiwiZ2V0U2lnbmF0dXJlVmFsdWVIZXgiLCJ2ZXJpZnlTaWduYXR1cmUiLCJwYXJzZUV4dCIsImNyaXRpY2FsIiwidmlkeCIsImdldEV4dEluZm8iLCJnZXRFeHRCYXNpY0NvbnN0cmFpbnRzIiwiZXh0bmFtZSIsImNBIiwicGF0aExlbiIsImdldEV4dEtleVVzYWdlIiwibmFtZXMiLCJnZXRFeHRLZXlVc2FnZVN0cmluZyIsImdldEV4dEtleVVzYWdlQmluIiwiS0VZVVNBR0VfTkFNRSIsImdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyIiwia2lkIiwiZ2V0RXh0QXV0aG9yaXR5S2V5SWRlbnRpZmllciIsImdldEdlbmVyYWxOYW1lcyIsImlzc3VlciIsInNuIiwiZ2V0RXh0RXh0S2V5VXNhZ2UiLCJnZXRFeHRFeHRLZXlVc2FnZU5hbWUiLCJnZXRFeHRTdWJqZWN0QWx0TmFtZSIsImdldEV4dElzc3VlckFsdE5hbWUiLCJnZXRHZW5lcmFsTmFtZSIsInJmYzgyMiIsImRucyIsInVyaSIsImlwIiwiZG4iLCJnZXRFeHRTdWJqZWN0QWx0TmFtZTIiLCJoZXgyZG4iLCJnZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHMiLCJnZXREaXN0cmlidXRpb25Qb2ludCIsImRwbmFtZSIsImdldERpc3RyaWJ1dGlvblBvaW50TmFtZSIsImZ1bGwiLCJnZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHNVUkkiLCJnZXRFeHRBSUFJbmZvIiwib2NzcCIsImNhaXNzdWVyIiwiZ2V0RXh0QXV0aG9yaXR5SW5mb0FjY2VzcyIsImdldEV4dENlcnRpZmljYXRlUG9saWNpZXMiLCJnZXRQb2xpY3lJbmZvcm1hdGlvbiIsInBvbGljeW9pZCIsImdldFBvbGljeVF1YWxpZmllckluZm8iLCJjcHMiLCJ1bm90aWNlIiwiZ2V0VXNlck5vdGljZSIsImV4cHRleHQiLCJnZXREaXNwbGF5VGV4dCIsImdldEV4dENSTE51bWJlciIsIm51bSIsImdldEV4dENSTFJlYXNvbiIsImNvZGUiLCJnZXRFeHRPY3NwTm9uY2UiLCJnZXRFeHRPY3NwTm9DaGVjayIsImdldEV4dEFkb2JlVGltZVN0YW1wIiwicmVxYXV0aCIsImdldFg1MDBOYW1lUnVsZSIsImRzIiwidmFsdWUiLCJnZXRYNTAwTmFtZUFycmF5IiwiZG5hcnJheXRvc3RyIiwiZ2V0UkROIiwiZ2V0QXR0clR5cGVBbmRWYWx1ZSIsIm9pZDJhdHlwZSIsInJlYWRDZXJ0UEVNIiwiZ2V0UGFyYW0iLCJzZXJpYWwiLCJzaWdhbGciLCJub3RiZWZvcmUiLCJub3RhZnRlciIsInN1YmplY3QiLCJzYmpwdWJrZXkiLCJleHQiLCJnZXRFeHRQYXJhbUFycmF5Iiwic2lnaGV4IiwiZ2V0RXh0UGFyYW0iLCJleHRuIiwiZmluZEV4dCIsInVwZGF0ZUV4dENEUEZ1bGxVUkkiLCJ1cGRhdGVFeHRBSUFPQ1NQIiwidXBkYXRlRXh0QUlBQ0FJc3N1ZXIiLCJnZXRJbmZvIiwiZG5hbWUiLCJoZXgycmRuIiwiaGV4MmF0dHJUeXBlVmFsdWUiLCJnZXRQdWJsaWNLZXlJbmZvUHJvcE9mQ2VydFBFTSIsImp3cyIsIkpXUyIsImlzU2FmZUpTT05TdHJpbmciLCJwYXJzZUpXUyIsInBhcnNlZEpXUyIsInNpZ3ZhbEgiLCJoZWFkQjY0VSIsInBheWxvYWRCNjRVIiwic2lndmFsQjY0VSIsInNpIiwic2lndmFsQkkiLCJoZWFkUyIsInBheWxvYWRTIiwicmVhZFNhZmVKU09OU3RyaW5nIiwiandzYWxnMnNpZ2FsZyIsImhlYWRlck9iaiIsInBheWxvYWRPYmoiLCJoZWFkZXJQUCIsInBheWxvYWRQUCIsInNpZ0hleCIsInZlcmlmeUpXVCIsImluQXJyYXkiLCJpbmNsdWRlZEFycmF5IiwiaXNzIiwic3ViIiwiYXVkIiwiSW50RGF0ZSIsImdldE5vdyIsInZlcmlmeUF0IiwiZ3JhY2VQZXJpb2QiLCJuYmYiLCJpYXQiLCJqdGkiLCJIUzI1NiIsIkhTMzg0IiwiSFM1MTIiLCJSUzI1NiIsIlJTMzg0IiwiUlM1MTIiLCJFUzI1NiIsIkVTMzg0IiwiUFMyNTYiLCJQUzM4NCIsIlBTNTEyIiwibm9uZSIsImdldEVuY29kZWRTaWduYXR1cmVWYWx1ZUZyb21KV1MiLCJnZXRKV0t0aHVtYnByaW50IiwiZ2V0IiwiZ2V0WnVsdSIsImludERhdGUyVVRDU3RyaW5nIiwidG9VVENTdHJpbmciLCJpbnREYXRlMlp1bHUiLCJFRFNBIiwiX2NyeXB0byIsIkRlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSIsImFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyIiwiVGltZXIiLCJhY2Nlc3NUb2tlbkV4cGlyZWRUaW1lciIsIl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSIsIl9hY2Nlc3NUb2tlbkV4cGlyaW5nIiwiX2FjY2Vzc1Rva2VuRXhwaXJlZCIsImxvYWQiLCJjb250YWluZXIiLCJhY2Nlc3NfdG9rZW4iLCJleHBpcmVzX2luIiwiZHVyYXRpb24iLCJkZWJ1ZyIsImV4cGlyaW5nIiwiY2FuY2VsIiwiZXhwaXJlZCIsInVubG9hZCIsImFkZEFjY2Vzc1Rva2VuRXhwaXJpbmciLCJjYiIsImFkZEhhbmRsZXIiLCJyZW1vdmVBY2Nlc3NUb2tlbkV4cGlyaW5nIiwicmVtb3ZlSGFuZGxlciIsImFkZEFjY2Vzc1Rva2VuRXhwaXJlZCIsInJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJlZCIsIkRlZmF1bHRJbnRlcnZhbCIsImNhbGxiYWNrIiwiY2xpZW50X2lkIiwidXJsIiwiaW50ZXJ2YWwiLCJzdG9wT25FcnJvciIsIl9jYWxsYmFjayIsIl9jbGllbnRfaWQiLCJfdXJsIiwiX2ludGVydmFsIiwiX3N0b3BPbkVycm9yIiwiaWR4IiwiX2ZyYW1lX29yaWdpbiIsIl9mcmFtZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwidmlzaWJpbGl0eSIsInBvc2l0aW9uIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0Iiwic3JjIiwiUHJvbWlzZSIsInJlc29sdmUiLCJvbmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJfYm91bmRNZXNzYWdlRXZlbnQiLCJfbWVzc2FnZSIsImJpbmQiLCJhZGRFdmVudExpc3RlbmVyIiwib3JpZ2luIiwic291cmNlIiwiY29udGVudFdpbmRvdyIsImVycm9yIiwic3RvcCIsInN0YXJ0Iiwic2Vzc2lvbl9zdGF0ZSIsIl9zZXNzaW9uX3N0YXRlIiwic2VuZCIsInBvc3RNZXNzYWdlIiwiX3RpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiQ2xvY2tTZXJ2aWNlIiwiZ2V0RXBvY2hUaW1lIiwibm93IiwicHJlcGFyZSIsInBvcHVwV2luZG93RmVhdHVyZXMiLCJwb3B1cCIsIkNvcmRvdmFQb3B1cFdpbmRvdyIsIkRlZmF1bHRQb3B1cEZlYXR1cmVzIiwiRGVmYXVsdFBvcHVwVGFyZ2V0IiwiX3Byb21pc2UiLCJyZWplY3QiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJmZWF0dXJlcyIsInRhcmdldCIsInBvcHVwV2luZG93VGFyZ2V0IiwicmVkaXJlY3RfdXJpIiwic3RhcnRVcmwiLCJfaXNJbkFwcEJyb3dzZXJJbnN0YWxsZWQiLCJjb3Jkb3ZhTWV0YWRhdGEiLCJzb21lIiwibmF2aWdhdGUiLCJfZXJyb3IiLCJjb3Jkb3ZhIiwicmVxdWlyZSIsIm1ldGFkYXRhIiwiX3BvcHVwIiwiSW5BcHBCcm93c2VyIiwib3BlbiIsIl9leGl0Q2FsbGJhY2tFdmVudCIsIl9leGl0Q2FsbGJhY2siLCJfbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCIsIl9sb2FkU3RhcnRDYWxsYmFjayIsInByb21pc2UiLCJldmVudCIsIl9zdWNjZXNzIiwibWVzc2FnZSIsIl9jbGVhbnVwIiwiY2xvc2UiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiRXJyb3JSZXNwb25zZSIsImVycm9yX2Rlc2NyaXB0aW9uIiwiZXJyb3JfdXJpIiwiRXZlbnQiLCJfbmFtZSIsIl9jYWxsYmFja3MiLCJmaW5kSW5kZXgiLCJpdGVtIiwicmFpc2UiLCJ0aW1lciIsImhhbmRsZSIsInRlc3RpbmciLCJyZXF1ZXN0IiwiX3Rlc3RpbmciLCJzZXRYTUxIdHRwUmVxdWVzdCIsIm5ld1JlcXVlc3QiLCJsb2NhdGlvbiIsImxvY2FsU3RvcmFnZSIsInNlc3Npb25TdG9yYWdlIiwiWE1MSHR0cFJlcXVlc3QiLCJJRnJhbWVOYXZpZ2F0b3IiLCJmcmFtZSIsIklGcmFtZVdpbmRvdyIsIm5vdGlmeVBhcmVudCIsIkRlZmF1bHRUaW1lb3V0IiwidGltZW91dCIsInNpbGVudFJlcXVlc3RUaW1lb3V0Iiwic2V0VGltZW91dCIsIl90aW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJfb3JpZ2luIiwic3RhcnRzV2l0aCIsImhyZWYiLCJwYXJlbnQiLCJwcm90b2NvbCIsImhvc3QiLCJnZXRJdGVtIiwic2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJpbmRleCIsImdldE93blByb3BlcnR5TmFtZXMiLCJKb3NlVXRpbCIsIktleVV0aWwiLCJBbGxvd2VkU2lnbmluZ0FsZ3MiLCJnZXRKb3NlVXRpbCIsInBhcnNlSnd0Iiwiand0IiwidG9rZW4iLCJoZWFkZXIiLCJwYXlsb2FkIiwidmFsaWRhdGVKd3QiLCJhdWRpZW5jZSIsImNsb2NrU2tldyIsInRpbWVJbnNlbnNpdGl2ZSIsIng1YyIsIl92YWxpZGF0ZUp3dCIsInZhbGlkYXRlSnd0QXR0cmlidXRlcyIsInZhbGlkQXVkaWVuY2UiLCJhenAiLCJsb3dlck5vdyIsInVwcGVyTm93IiwidGhlbiIsImhleFRvQmFzZTY0VXJsIiwiSnNvblNlcnZpY2UiLCJhZGRpdGlvbmFsQ29udGVudFR5cGVzIiwiWE1MSHR0cFJlcXVlc3RDdG9yIiwiand0SGFuZGxlciIsIl9jb250ZW50VHlwZXMiLCJfWE1MSHR0cFJlcXVlc3QiLCJfand0SGFuZGxlciIsImdldEpzb24iLCJyZXEiLCJhbGxvd2VkQ29udGVudFR5cGVzIiwic3RhdHVzIiwiY29udGVudFR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImZvdW5kIiwiZmluZCIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJvbmVycm9yIiwic2V0UmVxdWVzdEhlYWRlciIsInBvc3RGb3JtIiwiYmFzaWNBdXRoIiwiYnRvYSIsIm5vcExvZ2dlciIsImluZm8iLCJ3YXJuIiwiTk9ORSIsIkVSUk9SIiwiV0FSTiIsIklORk8iLCJERUJVRyIsImxvZ2dlciIsImxldmVsIiwiYXJncyIsIk9pZGNNZXRhZGF0YVVybFBhdGgiLCJzZXR0aW5ncyIsIkpzb25TZXJ2aWNlQ3RvciIsIl9zZXR0aW5ncyIsIl9qc29uU2VydmljZSIsInJlc2V0U2lnbmluZ0tleXMiLCJzaWduaW5nS2V5cyIsImdldE1ldGFkYXRhIiwibWV0YWRhdGFVcmwiLCJzZWVkIiwibWV0YWRhdGFTZWVkIiwiYXNzaWduIiwiX2dldE1ldGFkYXRhUHJvcGVydHkiLCJnZXRBdXRob3JpemF0aW9uRW5kcG9pbnQiLCJnZXRVc2VySW5mb0VuZHBvaW50IiwiZ2V0VG9rZW5FbmRwb2ludCIsIm9wdGlvbmFsIiwiZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lIiwiZ2V0RW5kU2Vzc2lvbkVuZHBvaW50IiwiZ2V0UmV2b2NhdGlvbkVuZHBvaW50IiwiZ2V0S2V5c0VuZHBvaW50IiwiZ2V0U2lnbmluZ0tleXMiLCJqd2tzX3VyaSIsImtleVNldCIsIl9tZXRhZGF0YVVybCIsImF1dGhvcml0eSIsImNyZWF0ZVNpZ25pblJlcXVlc3QiLCJyZXNwb25zZV90eXBlIiwic2NvcGUiLCJwcm9tcHQiLCJtYXhfYWdlIiwidWlfbG9jYWxlcyIsImlkX3Rva2VuX2hpbnQiLCJsb2dpbl9oaW50IiwiYWNyX3ZhbHVlcyIsInJlc291cmNlIiwicmVxdWVzdF91cmkiLCJyZXNwb25zZV9tb2RlIiwiZXh0cmFRdWVyeVBhcmFtcyIsImV4dHJhVG9rZW5QYXJhbXMiLCJyZXF1ZXN0X3R5cGUiLCJza2lwVXNlckluZm8iLCJzdGF0ZVN0b3JlIiwiU2lnbmluUmVxdWVzdCIsImlzQ29kZSIsIl9tZXRhZGF0YVNlcnZpY2UiLCJzaWduaW5SZXF1ZXN0IiwiY2xpZW50X3NlY3JldCIsInNpZ25pblN0YXRlIiwiX3N0YXRlU3RvcmUiLCJzZXQiLCJpZCIsInRvU3RvcmFnZVN0cmluZyIsInJlYWRTaWduaW5SZXNwb25zZVN0YXRlIiwicmVtb3ZlU3RhdGUiLCJ1c2VRdWVyeSIsImRlbGltaXRlciIsInJlc3BvbnNlIiwiU2lnbmluUmVzcG9uc2UiLCJzdGF0ZUFwaSIsInJlbW92ZSIsInN0b3JlZFN0YXRlU3RyaW5nIiwiU2lnbmluU3RhdGUiLCJmcm9tU3RvcmFnZVN0cmluZyIsInByb2Nlc3NTaWduaW5SZXNwb25zZSIsIl92YWxpZGF0b3IiLCJ2YWxpZGF0ZVNpZ25pblJlc3BvbnNlIiwiY3JlYXRlU2lnbm91dFJlcXVlc3QiLCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJTaWdub3V0UmVxdWVzdCIsInNpZ25vdXRTdGF0ZSIsInJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSIsIlNpZ25vdXRSZXNwb25zZSIsInN0YXRlS2V5IiwiU3RhdGUiLCJwcm9jZXNzU2lnbm91dFJlc3BvbnNlIiwidmFsaWRhdGVTaWdub3V0UmVzcG9uc2UiLCJjbGVhclN0YWxlU3RhdGUiLCJzdGFsZVN0YXRlQWdlIiwidmFsaWRhdG9yIiwibWV0YWRhdGFTZXJ2aWNlIiwiRGVmYXVsdFJlc3BvbnNlVHlwZSIsIkRlZmF1bHRTY29wZSIsIkRlZmF1bHRDbGllbnRBdXRoZW50aWNhdGlvbiIsIkRlZmF1bHRTdGFsZVN0YXRlQWdlIiwiRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyIsImNsaWVudF9hdXRoZW50aWNhdGlvbiIsImZpbHRlclByb3RvY29sQ2xhaW1zIiwibG9hZFVzZXJJbmZvIiwiY2xvY2tTZXJ2aWNlIiwidXNlckluZm9Kd3RJc3N1ZXIiLCJtZXJnZUNsYWltcyIsIlJlc3BvbnNlVmFsaWRhdG9yQ3RvciIsIlJlc3BvbnNlVmFsaWRhdG9yIiwiTWV0YWRhdGFTZXJ2aWNlQ3RvciIsIl9hdXRob3JpdHkiLCJfbWV0YWRhdGEiLCJfbWV0YWRhdGFTZWVkIiwiX3NpZ25pbmdLZXlzIiwiX2NsaWVudF9zZWNyZXQiLCJfcmVzcG9uc2VfdHlwZSIsIl9zY29wZSIsIl9yZWRpcmVjdF91cmkiLCJfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX2NsaWVudF9hdXRoZW50aWNhdGlvbiIsIl9wcm9tcHQiLCJfZGlzcGxheSIsIl9tYXhfYWdlIiwiX3VpX2xvY2FsZXMiLCJfYWNyX3ZhbHVlcyIsIl9yZXNvdXJjZSIsIl9yZXNwb25zZV9tb2RlIiwiX2ZpbHRlclByb3RvY29sQ2xhaW1zIiwiX2xvYWRVc2VySW5mbyIsIl9zdGFsZVN0YXRlQWdlIiwiX2Nsb2NrU2tldyIsIl9jbG9ja1NlcnZpY2UiLCJfdXNlckluZm9Kd3RJc3N1ZXIiLCJfbWVyZ2VDbGFpbXMiLCJfZXh0cmFRdWVyeVBhcmFtcyIsIl9leHRyYVRva2VuUGFyYW1zIiwiUG9wdXBOYXZpZ2F0b3IiLCJQb3B1cFdpbmRvdyIsImtlZXBPcGVuIiwibm90aWZ5T3BlbmVyIiwiQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsIiwiX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciIsIl9jaGVja0ZvclBvcHVwQ2xvc2VkIiwiX2lkIiwiZm9jdXMiLCJjbG9zZWQiLCJvcGVuZXIiLCJVcmxVdGlsaXR5IiwicGFyc2VVcmxGcmFnbWVudCIsIlJlZGlyZWN0TmF2aWdhdG9yIiwidXNlUmVwbGFjZVRvTmF2aWdhdGUiLCJQcm90b2NvbENsYWltcyIsIlVzZXJJbmZvU2VydmljZUN0b3IiLCJVc2VySW5mb1NlcnZpY2UiLCJqb3NlVXRpbCIsIlRva2VuQ2xpZW50Q3RvciIsIlRva2VuQ2xpZW50IiwiX3VzZXJJbmZvU2VydmljZSIsIl9qb3NlVXRpbCIsIl90b2tlbkNsaWVudCIsIl9wcm9jZXNzU2lnbmluUGFyYW1zIiwiX3ZhbGlkYXRlVG9rZW5zIiwiX3Byb2Nlc3NDbGFpbXMiLCJub25jZSIsImlkX3Rva2VuIiwiY29kZV92ZXJpZmllciIsImlzT3BlbklkQ29ubmVjdCIsInByb2ZpbGUiLCJnZXRDbGFpbXMiLCJjbGFpbXMiLCJjbGFpbXMxIiwiY2xhaW1zMiIsInJlc3VsdCIsInZhbHVlcyIsImZvckVhY2giLCJfcHJvY2Vzc0NvZGUiLCJfdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4iLCJfdmFsaWRhdGVJZFRva2VuIiwiZXhjaGFuZ2VDb2RlIiwidG9rZW5SZXNwb25zZSIsIl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzIiwiY2xvY2tTa2V3SW5TZWNvbmRzIiwiX3ZhbGlkYXRlQWNjZXNzVG9rZW4iLCJfZ2V0U2lnbmluZ0tleUZvckp3dCIsIl9maWx0ZXJCeUFsZyIsImZpbHRlciIsIl9nZXRTaWduaW5nS2V5Rm9ySnd0V2l0aFNpbmdsZVJldHJ5IiwiYXRfaGFzaCIsImhhc2hBbGciLCJoYXNoQml0cyIsInNoYSIsImxlZnQiLCJsZWZ0X2I2NHUiLCJ1c2VyTWFuYWdlciIsIkNoZWNrU2Vzc2lvbklGcmFtZUN0b3IiLCJfdXNlck1hbmFnZXIiLCJfQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciIsImV2ZW50cyIsImFkZFVzZXJMb2FkZWQiLCJfc3RhcnQiLCJhZGRVc2VyVW5sb2FkZWQiLCJfc3RvcCIsImdldFVzZXIiLCJ1c2VyIiwibW9uaXRvckFub255bW91c1Nlc3Npb24iLCJxdWVyeVNlc3Npb25TdGF0dXMiLCJ0bXBVc2VyIiwic2Vzc2lvbiIsInNpZCIsImNhdGNoIiwiZXJyIiwiX3N1YiIsIl9zaWQiLCJfY2hlY2tTZXNzaW9uSUZyYW1lIiwiX2NoZWNrU2Vzc2lvbkludGVydmFsIiwiX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yIiwidGltZXJIYW5kbGUiLCJyYWlzZUV2ZW50IiwiX3JhaXNlVXNlclNlc3Npb25DaGFuZ2VkIiwiX3JhaXNlVXNlclNpZ25lZE91dCIsIl9yYWlzZVVzZXJTaWduZWRJbiIsImNoZWNrU2Vzc2lvbkludGVydmFsIiwic3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IiLCJvaWRjIiwiaXNPaWRjIiwiYWRkUXVlcnlQYXJhbSIsImNvZGVfY2hhbGxlbmdlIiwiaXNPQXV0aCIsIk9pZGNTY29wZSIsInRva2VuX3R5cGUiLCJleHBpcmVzX2F0Iiwic2NvcGVzIiwiX25vbmNlIiwiX2NvZGVfdmVyaWZpZXIiLCJfY29kZV9jaGFsbGVuZ2UiLCJfc2tpcFVzZXJJbmZvIiwiY3JlYXRlZCIsInN0b3JhZ2VTdHJpbmciLCJTaWxlbnRSZW5ld1NlcnZpY2UiLCJfdG9rZW5FeHBpcmluZyIsInNpZ25pblNpbGVudCIsIl9yYWlzZVNpbGVudFJlbmV3RXJyb3IiLCJfY3JlYXRlZCIsIl9yZXF1ZXN0X3R5cGUiLCJzdG9yYWdlIiwiYWdlIiwiY3V0b2ZmIiwiZ2V0QWxsS2V5cyIsInByb21pc2VzIiwiYWxsIiwiVGltZXJEdXJhdGlvbiIsIm5vd0Z1bmMiLCJfbm93RnVuYyIsImV4cGlyYXRpb24iLCJfdGltZXJIYW5kbGUiLCJfZXhwaXJhdGlvbiIsInRpbWVyRHVyYXRpb24iLCJkaWZmIiwiZ3JhbnRfdHlwZSIsImV4Y2hhbmdlUmVmcmVzaFRva2VuIiwicmVmcmVzaF90b2tlbiIsIkFjY2Vzc1Rva2VuVHlwZUhpbnQiLCJSZWZyZXNoVG9rZW5UeXBlSGludCIsIl9YTUxIdHRwUmVxdWVzdEN0b3IiLCJyZXZva2UiLCJyZXF1aXJlZCIsIl9yZXZva2UiLCJ4aHIiLCJnbG9iYWwiLCJsYXN0SW5kZXhPZiIsInJlZ2V4IiwiY291bnRlciIsImV4ZWMiLCJwcm9wIiwiX2dldENsYWltc0Zyb21Kd3QiLCJpc3N1ZXJQcm9taXNlIiwiU2lsZW50UmVuZXdTZXJ2aWNlQ3RvciIsIlNlc3Npb25Nb25pdG9yQ3RvciIsIlRva2VuUmV2b2NhdGlvbkNsaWVudEN0b3IiLCJVc2VyTWFuYWdlclNldHRpbmdzIiwiX2V2ZW50cyIsIlVzZXJNYW5hZ2VyRXZlbnRzIiwiX3NpbGVudFJlbmV3U2VydmljZSIsImF1dG9tYXRpY1NpbGVudFJlbmV3Iiwic3RhcnRTaWxlbnRSZW5ldyIsIm1vbml0b3JTZXNzaW9uIiwiX3Nlc3Npb25Nb25pdG9yIiwiX3Rva2VuUmV2b2NhdGlvbkNsaWVudCIsIl9sb2FkVXNlciIsInJlbW92ZVVzZXIiLCJzdG9yZVVzZXIiLCJzaWduaW5SZWRpcmVjdCIsIm5hdlBhcmFtcyIsIl9zaWduaW5TdGFydCIsIl9yZWRpcmVjdE5hdmlnYXRvciIsInNpZ25pblJlZGlyZWN0Q2FsbGJhY2siLCJfc2lnbmluRW5kIiwic2lnbmluUG9wdXAiLCJwb3B1cF9yZWRpcmVjdF91cmkiLCJfc2lnbmluIiwiX3BvcHVwTmF2aWdhdG9yIiwic2lnbmluUG9wdXBDYWxsYmFjayIsIl9zaWduaW5DYWxsYmFjayIsIl91c2VSZWZyZXNoVG9rZW4iLCJpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXciLCJ2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXciLCJjdXJyZW50X3N1YiIsIl9zaWduaW5TaWxlbnRJZnJhbWUiLCJpZFRva2VuVmFsaWRhdGlvbiIsIl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW4iLCJhdXRoX3RpbWUiLCJzaWxlbnRfcmVkaXJlY3RfdXJpIiwiX2lmcmFtZU5hdmlnYXRvciIsInNpZ25pblNpbGVudENhbGxiYWNrIiwic2lnbmluQ2FsbGJhY2siLCJzaWdub3V0Q2FsbGJhY2siLCJzaWdub3V0UmVkaXJlY3RDYWxsYmFjayIsInNpZ25vdXRQb3B1cENhbGxiYWNrIiwicXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUiLCJuYXZSZXNwb25zZSIsInNpZ25pblJlc3BvbnNlIiwibmF2aWdhdG9yUGFyYW1zIiwic2lnbm91dFJlZGlyZWN0IiwicG9zdExvZ291dFJlZGlyZWN0VXJpIiwiX3NpZ25vdXRTdGFydCIsIl9zaWdub3V0RW5kIiwic2lnbm91dFBvcHVwIiwicG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX3NpZ25vdXQiLCJyZXZva2VQcm9taXNlIiwicmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQiLCJfcmV2b2tlSW50ZXJuYWwiLCJzaWdub3V0UmVxdWVzdCIsInNpZ25vdXRSZXNwb25zZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwic3VjY2VzcyIsIl9yZXZva2VBY2Nlc3NUb2tlbkludGVybmFsIiwiX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsIiwiYXRTdWNjZXNzIiwicnRTdWNjZXNzIiwic3RvcFNpbGVudFJlbmV3IiwiX3VzZXJTdG9yZSIsIl91c2VyU3RvcmVLZXkiLCJyZWRpcmVjdE5hdmlnYXRvciIsInBvcHVwTmF2aWdhdG9yIiwiaWZyYW1lTmF2aWdhdG9yIiwidXNlclN0b3JlIiwiX3VzZXJMb2FkZWQiLCJfdXNlclVubG9hZGVkIiwiX3NpbGVudFJlbmV3RXJyb3IiLCJfdXNlclNpZ25lZEluIiwiX3VzZXJTaWduZWRPdXQiLCJfdXNlclNlc3Npb25DaGFuZ2VkIiwicmVtb3ZlVXNlckxvYWRlZCIsInJlbW92ZVVzZXJVbmxvYWRlZCIsImFkZFNpbGVudFJlbmV3RXJyb3IiLCJyZW1vdmVTaWxlbnRSZW5ld0Vycm9yIiwiYWRkVXNlclNpZ25lZEluIiwicmVtb3ZlVXNlclNpZ25lZEluIiwiYWRkVXNlclNpZ25lZE91dCIsInJlbW92ZVVzZXJTaWduZWRPdXQiLCJhZGRVc2VyU2Vzc2lvbkNoYW5nZWQiLCJyZW1vdmVVc2VyU2Vzc2lvbkNoYW5nZWQiLCJEZWZhdWx0Q2hlY2tTZXNzaW9uSW50ZXJ2YWwiLCJzdG9yZSIsIl9wb3B1cF9yZWRpcmVjdF91cmkiLCJfcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX3BvcHVwV2luZG93RmVhdHVyZXMiLCJfcG9wdXBXaW5kb3dUYXJnZXQiLCJfc2lsZW50X3JlZGlyZWN0X3VyaSIsIl9zaWxlbnRSZXF1ZXN0VGltZW91dCIsIl9hdXRvbWF0aWNTaWxlbnRSZW5ldyIsIl92YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXciLCJfaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3IiwiX21vbml0b3JTZXNzaW9uIiwiX21vbml0b3JBbm9ueW1vdXNTZXNzaW9uIiwiX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlIiwiX3Jldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0IiwicHJlZml4IiwiX3N0b3JlIiwiX3ByZWZpeCIsIl9jcnlwdG9VdWlkdjQiLCJfdXVpZHY0IiwiaGFzQ3J5cHRvIiwiaGFzUmFuZG9tVmFsdWVzIiwidXVpZCJdLCJtYXBwaW5ncyI6Ijs7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QTROLEdBQTVOLEVBQWdPLEdBQWhPLEVBQW9PLEdBQXBPLEVBQXdPLEdBQXhPLEVBQTRPLEdBQTVPLEVBQWdQLEdBQWhQLEVBQW9QLEdBQXBQLEVBQXdQLEdBQXhQLEVBQTRQLEdBQTVQLEVBQWdRLEdBQWhRLEVBQW9RLEdBQXBRLEVBQXdRLEdBQXhRLEVBQTRRLEdBQTVRLEVBQWdSLEdBQWhSLEVBQW9SLEdBQXBSLEVBQXdSLEdBQXhSLEVBQTRSLEdBQTVSLEVBQWdTLEdBQWhTLEVBQW9TLEdBQXBTLEVBQXdTLEdBQXhTLEVBQTRTLEdBQTVTLEVBQWdULEdBQWhULEVBQW9ULEdBQXBULEVBQXdULEdBQXhULEVBQTRULEdBQTVULEVBQWdVLEdBQWhVLEVBQW9VLEdBQXBVLEVBQXdVLEdBQXhVLEVBQTRVLEdBQTVVLEVBQWdWLEdBQWhWLEVBQW9WLEdBQXBWLEVBQXdWLEdBQXhWLEVBQTRWLEdBQTVWLEVBQWdXLEdBQWhXLEVBQW9XLEdBQXBXLEVBQXdXLEdBQXhXLEVBQTRXLEdBQTVXLEVBQWdYLEdBQWhYLEVBQW9YLEdBQXBYLEVBQXdYLEdBQXhYLEVBQTRYLEdBQTVYLEVBQWdZLEdBQWhZLEVBQW9ZLEdBQXBZLEVBQXdZLEdBQXhZLEVBQTRZLEdBQTVZLEVBQWdaLEdBQWhaLEVBQW9aLEdBQXBaLEVBQXdaLEdBQXhaLEVBQTRaLEdBQTVaLEVBQWdhLEdBQWhhLEVBQW9hLEdBQXBhLEVBQXdhLEdBQXhhLEVBQTRhLEdBQTVhLEVBQWdiLEdBQWhiLEVBQW9iLEdBQXBiLEVBQXdiLEdBQXhiLEVBQTRiLEdBQTViLEVBQWdjLEdBQWhjLEVBQW9jLEdBQXBjLEVBQXdjLEdBQXhjLEVBQTRjLEdBQTVjLEVBQWdkLEdBQWhkLEVBQW9kLEdBQXBkLEVBQXdkLEdBQXhkLEVBQTRkLEdBQTVkLEVBQWdlLEdBQWhlLEVBQW9lLEdBQXBlLEVBQXdlLEdBQXhlLEVBQTRlLEdBQTVlLEVBQWdmLEdBQWhmLEVBQW9mLEdBQXBmLEVBQXdmLEdBQXhmLEVBQTRmLEdBQTVmLEVBQWdnQixHQUFoZ0IsRUFBb2dCLEdBQXBn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Q0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztB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Q0FBQyxzSUFBc0M7QUFDOUMsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQyw4SkFBa0Q7QUFDMUQsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvSkFBNkM7QUFDckQsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw0SUFBeUM7QUFDakQsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxvSUFBcUM7QUFDN0MsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxnSUFBbUM7QUFDM0MsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzSUFBc0M7QUFDOUMsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzSUFBc0M7QUFDOUMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxnSUFBbUM7QUFDM0MsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyx3R0FBdUI7QUFDL0IsbUJBQU8sQ0FBQyxnR0FBbUI7QUFDM0IsbUJBQU8sQ0FBQyxnR0FBbUI7QUFDM0IsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyw0SUFBeUM7QUFDakQsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxnSUFBbUM7QUFDM0MsbUJBQU8sQ0FBQyxnSUFBbUM7QUFDM0MsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxnS0FBbUQ7QUFDM0QsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvSUFBcUM7QUFDN0MsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw4SUFBMEM7QUFDbEQsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxvSUFBcUM7QUFDN0MsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyxnS0FBbUQ7QUFDM0QsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxzR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxzR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyw0SUFBeUM7QUFDakQsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQyxvSkFBNkM7QUFDckQsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrR0FBb0I7QUFDNUIsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsaUJBQWlCLG1CQUFPLENBQUMsNEZBQWlCOzs7Ozs7Ozs7Ozs7QUNyTTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLEtBQUs7QUFDTCxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQy90Qlk7O0FBRVo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQyxTQUFTO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsVUFBVTtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDckpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVZOztBQUVaLGFBQWEsbUJBQU8sQ0FBQyxvREFBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsZ0RBQVM7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLGdEQUFTOztBQUUvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1EQUFtRDtBQUN4RTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFVBQVU7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSx1Q0FBdUMsU0FBUztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxFQUFFO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHdCQUF3QixRQUFRO0FBQ2hDO0FBQ0EscUJBQXFCLGVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxtQkFBbUIsY0FBYztBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RCxPQUFPO0FBQzlEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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LFNBQU8sQ0FBQyxDQUFDLEdBQUQsSUFBTSxDQUFDLEdBQVAsR0FBVyxDQUFDLEdBQVosR0FBZ0IsQ0FBQyxHQUFqQixHQUFxQixDQUFDLElBQXZCLEVBQTZCL3FDLE9BQTdCLENBQXFDLFFBQXJDLEVBQStDO0FBQUEsV0FDdEQsQ0FBQzdaLElBQUlvQyxLQUFLbEQsTUFBTCxLQUFnQixFQUFoQixJQUFzQmMsSUFBSSxDQUEvQixFQUFrQ2hDLFFBQWxDLENBQTJDLEVBQTNDLENBRHNEO0FBQUEsR0FBL0MsQ0FBUDtBQUdIOztBQUVjLFNBQVNrQixNQUFULEdBQWtCO0FBQy9CLE1BQUkybEQsWUFBWWh4QyxVQUFVLFdBQVYsSUFBeUJBLFdBQVcsSUFBcEQ7QUFDQSxNQUFJaXhDLGtCQUFrQkQsYUFBYyxPQUFPaHhDLE9BQU9FLGVBQWQsSUFBa0MsV0FBdEU7QUFDQSxNQUFJZ3hDLE9BQU9ELGtCQUFrQkgsYUFBbEIsR0FBa0NDLE9BQTdDO0FBQ0EsU0FBT0csT0FBT2xyQyxPQUFQLENBQWUsSUFBZixFQUFxQixFQUFyQixDQUFQO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZCRCxJQUFNcGUsVUFBVSxlQUFoQixDLFFBQXlDQSxPLEdBQUFBLE8iLCJmaWxlIjoib2lkYy1jbGllbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL3NyYy9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50IH0gZnJvbSAnLi9zcmMvT2lkY0NsaWVudC5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vc3JjL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9zcmMvV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBJbk1lbW9yeVdlYlN0b3JhZ2UgfSBmcm9tICcuL3NyYy9Jbk1lbW9yeVdlYlN0b3JhZ2UuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlciB9IGZyb20gJy4vc3JjL1VzZXJNYW5hZ2VyLmpzJztcclxuaW1wb3J0IHsgQWNjZXNzVG9rZW5FdmVudHMgfSBmcm9tICcuL3NyYy9BY2Nlc3NUb2tlbkV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vc3JjL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IENvcmRvdmFQb3B1cE5hdmlnYXRvciB9IGZyb20gJy4vc3JjL0NvcmRvdmFQb3B1cE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IENvcmRvdmFJRnJhbWVOYXZpZ2F0b3IgfSBmcm9tICcuL3NyYy9Db3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzJztcclxuaW1wb3J0IHsgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IH0gZnJvbSAnLi9zcmMvVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgU2Vzc2lvbk1vbml0b3IgfSBmcm9tICcuL3NyYy9TZXNzaW9uTW9uaXRvci5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vc3JjL0dsb2JhbC5qcyc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuL3NyYy9Vc2VyLmpzJztcclxuXHJcbmltcG9ydCB7IFZlcnNpb24gfSBmcm9tICcuL3ZlcnNpb24uanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgVmVyc2lvbixcclxuICAgIExvZyxcclxuICAgIE9pZGNDbGllbnQsXHJcbiAgICBPaWRjQ2xpZW50U2V0dGluZ3MsXHJcbiAgICBXZWJTdG9yYWdlU3RhdGVTdG9yZSxcclxuICAgIEluTWVtb3J5V2ViU3RvcmFnZSxcclxuICAgIFVzZXJNYW5hZ2VyLFxyXG4gICAgQWNjZXNzVG9rZW5FdmVudHMsXHJcbiAgICBNZXRhZGF0YVNlcnZpY2UsXHJcbiAgICBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IsXHJcbiAgICBDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLFxyXG4gICAgQ2hlY2tTZXNzaW9uSUZyYW1lLFxyXG4gICAgVG9rZW5SZXZvY2F0aW9uQ2xpZW50LFxyXG4gICAgU2Vzc2lvbk1vbml0b3IsXHJcbiAgICBHbG9iYWwsXHJcbiAgICBVc2VyXHJcbn07XHJcbiIsIi8qXHJcbiAqIGpzcnNhc2lnbihhbGwpIDguMC4xMiAoMjAxOC0wNC0yMikgKGMpIDIwMTAtMjAxOCBLZW5qaSBVcnVzaGltYSB8IGtqdXIuZ2l0aHViLmNvbS9qc3JzYXNpZ24vbGljZW5zZVxyXG4gKi9cclxuXHJcbnZhciBuYXZpZ2F0b3IgPSB7fTtcclxubmF2aWdhdG9yLnVzZXJBZ2VudCA9IGZhbHNlO1xyXG5cclxudmFyIHdpbmRvdyA9IHt9O1xyXG5cbi8qISBDcnlwdG9KUyB2My4xLjIgY29yZS1maXguanNcclxuICogY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbiAqIChjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBjb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiAqIFRISVMgSVMgRklYIG9mICdjb3JlLmpzJyB0byBmaXggSG1hYyBpc3N1ZS5cclxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvaXNzdWVzL2RldGFpbD9pZD04NFxyXG4gKiBodHRwczovL2NyeXB0by1qcy5nb29nbGVjb2RlLmNvbS9zdm4taGlzdG9yeS9yNjY3L2JyYW5jaGVzLzMueC9zcmMvY29yZS5qc1xyXG4gKi9cclxudmFyIENyeXB0b0pTPUNyeXB0b0pTfHwoZnVuY3Rpb24oZSxnKXt2YXIgYT17fTt2YXIgYj1hLmxpYj17fTt2YXIgaj1iLkJhc2U9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe31yZXR1cm57ZXh0ZW5kOmZ1bmN0aW9uKHApe24ucHJvdG90eXBlPXRoaXM7dmFyIG89bmV3IG4oKTtpZihwKXtvLm1peEluKHApfWlmKCFvLmhhc093blByb3BlcnR5KFwiaW5pdFwiKSl7by5pbml0PWZ1bmN0aW9uKCl7by4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fW8uaW5pdC5wcm90b3R5cGU9bztvLiRzdXBlcj10aGlzO3JldHVybiBvfSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgbz10aGlzLmV4dGVuZCgpO28uaW5pdC5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIG99LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKHApe2Zvcih2YXIgbyBpbiBwKXtpZihwLmhhc093blByb3BlcnR5KG8pKXt0aGlzW29dPXBbb119fWlmKHAuaGFzT3duUHJvcGVydHkoXCJ0b1N0cmluZ1wiKSl7dGhpcy50b1N0cmluZz1wLnRvU3RyaW5nfX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyl9fX0oKSk7dmFyIGw9Yi5Xb3JkQXJyYXk9ai5leHRlbmQoe2luaXQ6ZnVuY3Rpb24obyxuKXtvPXRoaXMud29yZHM9b3x8W107aWYobiE9Zyl7dGhpcy5zaWdCeXRlcz1ufWVsc2V7dGhpcy5zaWdCeXRlcz1vLmxlbmd0aCo0fX0sdG9TdHJpbmc6ZnVuY3Rpb24obil7cmV0dXJuKG58fGgpLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBxPXRoaXMud29yZHM7dmFyIHA9dC53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO3ZhciBzPXQuc2lnQnl0ZXM7dGhpcy5jbGFtcCgpO2lmKG4lNCl7Zm9yKHZhciByPTA7cjxzO3IrKyl7dmFyIG89KHBbcj4+PjJdPj4+KDI0LShyJTQpKjgpKSYyNTU7cVsobityKT4+PjJdfD1vPDwoMjQtKChuK3IpJTQpKjgpfX1lbHNle2Zvcih2YXIgcj0wO3I8cztyKz00KXtxWyhuK3IpPj4+Ml09cFtyPj4+Ml19fXRoaXMuc2lnQnl0ZXMrPXM7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKCl7dmFyIG89dGhpcy53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO29bbj4+PjJdJj00Mjk0OTY3Mjk1PDwoMzItKG4lNCkqOCk7by5sZW5ndGg9ZS5jZWlsKG4vNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24ud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKTtyZXR1cm4gbn0scmFuZG9tOmZ1bmN0aW9uKHApe3ZhciBvPVtdO2Zvcih2YXIgbj0wO248cDtuKz00KXtvLnB1c2goKGUucmFuZG9tKCkqNDI5NDk2NzI5Nil8MCl9cmV0dXJuIG5ldyBsLmluaXQobyxwKX19KTt2YXIgbT1hLmVuYz17fTt2YXIgaD1tLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKHApe3ZhciByPXAud29yZHM7dmFyIG89cC5zaWdCeXRlczt2YXIgcT1bXTtmb3IodmFyIG49MDtuPG87bisrKXt2YXIgcz0ocltuPj4+Ml0+Pj4oMjQtKG4lNCkqOCkpJjI1NTtxLnB1c2goKHM+Pj40KS50b1N0cmluZygxNikpO3EucHVzaCgocyYxNSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gcS5qb2luKFwiXCIpfSxwYXJzZTpmdW5jdGlvbihwKXt2YXIgbj1wLmxlbmd0aDt2YXIgcT1bXTtmb3IodmFyIG89MDtvPG47bys9Mil7cVtvPj4+M118PXBhcnNlSW50KHAuc3Vic3RyKG8sMiksMTYpPDwoMjQtKG8lOCkqNCl9cmV0dXJuIG5ldyBsLmluaXQocSxuLzIpfX07dmFyIGQ9bS5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbihxKXt2YXIgcj1xLndvcmRzO3ZhciBwPXEuc2lnQnl0ZXM7dmFyIG49W107Zm9yKHZhciBvPTA7bzxwO28rKyl7dmFyIHM9KHJbbz4+PjJdPj4+KDI0LShvJTQpKjgpKSYyNTU7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocykpfXJldHVybiBuLmpvaW4oXCJcIil9LHBhcnNlOmZ1bmN0aW9uKHApe3ZhciBuPXAubGVuZ3RoO3ZhciBxPVtdO2Zvcih2YXIgbz0wO288bjtvKyspe3Fbbz4+PjJdfD0ocC5jaGFyQ29kZUF0KG8pJjI1NSk8PCgyNC0obyU0KSo4KX1yZXR1cm4gbmV3IGwuaW5pdChxLG4pfX07dmFyIGM9bS5VdGY4PXtzdHJpbmdpZnk6ZnVuY3Rpb24obil7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGQuc3RyaW5naWZ5KG4pKSl9Y2F0Y2gobyl7dGhyb3cgbmV3IEVycm9yKFwiTWFsZm9ybWVkIFVURi04IGRhdGFcIil9fSxwYXJzZTpmdW5jdGlvbihuKXtyZXR1cm4gZC5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQobikpKX19O3ZhciBpPWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobT1qLmV4dGVuZCh7cmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhPW5ldyBsLmluaXQoKTt0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24obil7aWYodHlwZW9mIG49PVwic3RyaW5nXCIpe249Yy5wYXJzZShuKX10aGlzLl9kYXRhLmNvbmNhdChuKTt0aGlzLl9uRGF0YUJ5dGVzKz1uLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbih3KXt2YXIgcT10aGlzLl9kYXRhO3ZhciB4PXEud29yZHM7dmFyIG49cS5zaWdCeXRlczt2YXIgdD10aGlzLmJsb2NrU2l6ZTt2YXIgdj10KjQ7dmFyIHU9bi92O2lmKHcpe3U9ZS5jZWlsKHUpfWVsc2V7dT1lLm1heCgodXwwKS10aGlzLl9taW5CdWZmZXJTaXplLDApfXZhciBzPXUqdDt2YXIgcj1lLm1pbihzKjQsbik7aWYocyl7Zm9yKHZhciBwPTA7cDxzO3ArPXQpe3RoaXMuX2RvUHJvY2Vzc0Jsb2NrKHgscCl9dmFyIG89eC5zcGxpY2UoMCxzKTtxLnNpZ0J5dGVzLT1yfXJldHVybiBuZXcgbC5pbml0KG8scil9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24uX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpO3JldHVybiBufSxfbWluQnVmZmVyU2l6ZTowfSk7dmFyIGY9Yi5IYXNoZXI9aS5leHRlbmQoe2NmZzpqLmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24obil7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKG4pO3RoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtpLnJlc2V0LmNhbGwodGhpcyk7dGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24obil7dGhpcy5fYXBwZW5kKG4pO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24obil7aWYobil7dGhpcy5fYXBwZW5kKG4pfXZhciBvPXRoaXMuX2RvRmluYWxpemUoKTtyZXR1cm4gb30sYmxvY2tTaXplOjUxMi8zMixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihwLG8pe3JldHVybiBuZXcgbi5pbml0KG8pLmZpbmFsaXplKHApfX0sX2NyZWF0ZUhtYWNIZWxwZXI6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHAsbyl7cmV0dXJuIG5ldyBrLkhNQUMuaW5pdChuLG8pLmZpbmFsaXplKHApfX19KTt2YXIgaz1hLmFsZ289e307cmV0dXJuIGF9KE1hdGgpKTtcbi8qXHJcbkNyeXB0b0pTIHYzLjEuMiB4NjQtY29yZS1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbihnKXt2YXIgYT1DcnlwdG9KUyxmPWEubGliLGU9Zi5CYXNlLGg9Zi5Xb3JkQXJyYXksYT1hLng2ND17fTthLldvcmQ9ZS5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oYixjKXt0aGlzLmhpZ2g9Yjt0aGlzLmxvdz1jfX0pO2EuV29yZEFycmF5PWUuZXh0ZW5kKHtpbml0OmZ1bmN0aW9uKGIsYyl7Yj10aGlzLndvcmRzPWJ8fFtdO3RoaXMuc2lnQnl0ZXM9YyE9Zz9jOjgqYi5sZW5ndGh9LHRvWDMyOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMud29yZHMsYz1iLmxlbmd0aCxhPVtdLGQ9MDtkPGM7ZCsrKXt2YXIgZT1iW2RdO2EucHVzaChlLmhpZ2gpO2EucHVzaChlLmxvdyl9cmV0dXJuIGguY3JlYXRlKGEsdGhpcy5zaWdCeXRlcyl9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWUuY2xvbmUuY2FsbCh0aGlzKSxjPWIud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxhPWMubGVuZ3RoLGQ9MDtkPGE7ZCsrKWNbZF09Y1tkXS5jbG9uZSgpO3JldHVybiBifX0pfSkoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgZW5jLWJhc2U2NC5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7dmFyIGg9Q3J5cHRvSlMsaj1oLmxpYi5Xb3JkQXJyYXk7aC5lbmMuQmFzZTY0PXtzdHJpbmdpZnk6ZnVuY3Rpb24oYil7dmFyIGU9Yi53b3JkcyxmPWIuc2lnQnl0ZXMsYz10aGlzLl9tYXA7Yi5jbGFtcCgpO2I9W107Zm9yKHZhciBhPTA7YTxmO2ErPTMpZm9yKHZhciBkPShlW2E+Pj4yXT4+PjI0LTgqKGElNCkmMjU1KTw8MTZ8KGVbYSsxPj4+Ml0+Pj4yNC04KigoYSsxKSU0KSYyNTUpPDw4fGVbYSsyPj4+Ml0+Pj4yNC04KigoYSsyKSU0KSYyNTUsZz0wOzQ+ZyYmYSswLjc1Kmc8ZjtnKyspYi5wdXNoKGMuY2hhckF0KGQ+Pj42KigzLWcpJjYzKSk7aWYoZT1jLmNoYXJBdCg2NCkpZm9yKDtiLmxlbmd0aCU0OyliLnB1c2goZSk7cmV0dXJuIGIuam9pbihcIlwiKX0scGFyc2U6ZnVuY3Rpb24oYil7dmFyIGU9Yi5sZW5ndGgsZj10aGlzLl9tYXAsYz1mLmNoYXJBdCg2NCk7YyYmKGM9Yi5pbmRleE9mKGMpLC0xIT1jJiYoZT1jKSk7Zm9yKHZhciBjPVtdLGE9MCxkPTA7ZDxcclxuZTtkKyspaWYoZCU0KXt2YXIgZz1mLmluZGV4T2YoYi5jaGFyQXQoZC0xKSk8PDIqKGQlNCksaD1mLmluZGV4T2YoYi5jaGFyQXQoZCkpPj4+Ni0yKihkJTQpO2NbYT4+PjJdfD0oZ3xoKTw8MjQtOCooYSU0KTthKyt9cmV0dXJuIGouY3JlYXRlKGMsYSl9LF9tYXA6XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwifX0pKCk7XHJcblxuLypcclxuQ3J5cHRvSlMgdjMuMS4yIHNoYTI1Ni1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbihrKXtmb3IodmFyIGc9Q3J5cHRvSlMsaD1nLmxpYix2PWguV29yZEFycmF5LGo9aC5IYXNoZXIsaD1nLmFsZ28scz1bXSx0PVtdLHU9ZnVuY3Rpb24ocSl7cmV0dXJuIDQyOTQ5NjcyOTYqKHEtKHF8MCkpfDB9LGw9MixiPTA7NjQ+Yjspe3ZhciBkO2E6e2Q9bDtmb3IodmFyIHc9ay5zcXJ0KGQpLHI9MjtyPD13O3IrKylpZighKGQlcikpe2Q9ITE7YnJlYWsgYX1kPSEwfWQmJig4PmImJihzW2JdPXUoay5wb3cobCwwLjUpKSksdFtiXT11KGsucG93KGwsMS8zKSksYisrKTtsKyt9dmFyIG49W10saD1oLlNIQTI1Nj1qLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB2LmluaXQocy5zbGljZSgwKSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihxLGgpe2Zvcih2YXIgYT10aGlzLl9oYXNoLndvcmRzLGM9YVswXSxkPWFbMV0sYj1hWzJdLGs9YVszXSxmPWFbNF0sZz1hWzVdLGo9YVs2XSxsPWFbN10sZT0wOzY0PmU7ZSsrKXtpZigxNj5lKW5bZV09XHJcbnFbaCtlXXwwO2Vsc2V7dmFyIG09bltlLTE1XSxwPW5bZS0yXTtuW2VdPSgobTw8MjV8bT4+PjcpXihtPDwxNHxtPj4+MTgpXm0+Pj4zKStuW2UtN10rKChwPDwxNXxwPj4+MTcpXihwPDwxM3xwPj4+MTkpXnA+Pj4xMCkrbltlLTE2XX1tPWwrKChmPDwyNnxmPj4+NileKGY8PDIxfGY+Pj4xMSleKGY8PDd8Zj4+PjI1KSkrKGYmZ15+ZiZqKSt0W2VdK25bZV07cD0oKGM8PDMwfGM+Pj4yKV4oYzw8MTl8Yz4+PjEzKV4oYzw8MTB8Yz4+PjIyKSkrKGMmZF5jJmJeZCZiKTtsPWo7aj1nO2c9ZjtmPWsrbXwwO2s9YjtiPWQ7ZD1jO2M9bStwfDB9YVswXT1hWzBdK2N8MDthWzFdPWFbMV0rZHwwO2FbMl09YVsyXStifDA7YVszXT1hWzNdK2t8MDthWzRdPWFbNF0rZnwwO2FbNV09YVs1XStnfDA7YVs2XT1hWzZdK2p8MDthWzddPWFbN10rbHwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuX2RhdGEsYj1kLndvcmRzLGE9OCp0aGlzLl9uRGF0YUJ5dGVzLGM9OCpkLnNpZ0J5dGVzO1xyXG5iW2M+Pj41XXw9MTI4PDwyNC1jJTMyO2JbKGMrNjQ+Pj45PDw0KSsxNF09ay5mbG9vcihhLzQyOTQ5NjcyOTYpO2JbKGMrNjQ+Pj45PDw0KSsxNV09YTtkLnNpZ0J5dGVzPTQqYi5sZW5ndGg7dGhpcy5fcHJvY2VzcygpO3JldHVybiB0aGlzLl9oYXNofSxjbG9uZTpmdW5jdGlvbigpe3ZhciBiPWouY2xvbmUuY2FsbCh0aGlzKTtiLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKTtyZXR1cm4gYn19KTtnLlNIQTI1Nj1qLl9jcmVhdGVIZWxwZXIoaCk7Zy5IbWFjU0hBMjU2PWouX2NyZWF0ZUhtYWNIZWxwZXIoaCl9KShNYXRoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgc2hhNTEyLW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe3JldHVybiBkLmNyZWF0ZS5hcHBseShkLGFyZ3VtZW50cyl9Zm9yKHZhciBuPUNyeXB0b0pTLHI9bi5saWIuSGFzaGVyLGU9bi54NjQsZD1lLldvcmQsVD1lLldvcmRBcnJheSxlPW4uYWxnbyxlYT1bYSgxMTE2MzUyNDA4LDM2MDk3Njc0NTgpLGEoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLGEoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxhKDM5MjEwMDk1NzMsMjE3MzI5NTU0OCksYSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksYSgxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLGEoMjQ1MzYzNTc0OCwyOTM3NjcxNTc5KSxhKDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksYSgzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLGEoMzEwNTk4NDAxLDExNjQ5OTY1NDIpLGEoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLGEoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxhKDE5MjUwNzgzODgsNDA2ODE4MjM4MyksYSgyMTYyMDc4MjA2LDk5MTMzNjExMyksYSgyNjE0ODg4MTAzLDYzMzgwMzMxNyksXHJcbmEoMzI0ODIyMjU4MCwzNDc5Nzc0ODY4KSxhKDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCksYSg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksYSgyNjQzNDcwNzgsMjM0MTI2Mjc3MyksYSg2MDQ4MDc2MjgsMjAwNzgwMDkzMyksYSg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksYSgxMjQ5MTUwMTIyLDE4NTY0MzEyMzUpLGEoMTU1NTA4MTY5MiwzMTc1MjE4MTMyKSxhKDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksYSgyNTU0MjIwODgyLDM5OTk3MTkzMzkpLGEoMjgyMTgzNDM0OSw3NjY3ODQwMTYpLGEoMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxhKDMyMTAzMTM2NzEsMzIwMzMzNzk1NiksYSgzMzM2NTcxODkxLDEwMzQ0NTcwMjYpLGEoMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxhKDExMzkyNjk5MywzNzU4MzI2MzgzKSxhKDMzODI0MTg5NSwxNjg3MTc5MzYpLGEoNjY2MzA3MjA1LDExODgxNzk5NjQpLGEoNzczNTI5OTEyLDE1NDYwNDU3MzQpLGEoMTI5NDc1NzM3MiwxNTIyODA1NDg1KSxhKDEzOTYxODIyOTEsXHJcbjI2NDM4MzM4MjMpLGEoMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxhKDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCksYSgyMTc3MDI2MzUwLDEyMDY3NTkxNDIpLGEoMjQ1Njk1NjAzNywzNDQwNzc2MjcpLGEoMjczMDQ4NTkyMSwxMjkwODYzNDYwKSxhKDI4MjAzMDI0MTEsMzE1ODQ1NDI3MyksYSgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLGEoMzM0NTc2NDc3MSwxMDYyMTcwMDgpLGEoMzUxNjA2NTgxNywzNjA2MDA4MzQ0KSxhKDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksYSg0MDk0NTcxOTA5LDE0NjcwMzE1OTQpLGEoMjc1NDIzMzQ0LDg1MTE2OTcyMCksYSg0MzAyMjc3MzQsMzEwMDgyMzc1MiksYSg1MDY5NDg2MTYsMTM2MzI1ODE5NSksYSg2NTkwNjA1NTYsMzc1MDY4NTU5MyksYSg4ODM5OTc4NzcsMzc4NTA1MDI4MCksYSg5NTgxMzk1NzEsMzMxODMwNzQyNyksYSgxMzIyODIyMjE4LDM4MTI3MjM0MDMpLGEoMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxhKDE3NDc4NzM3NzksMzYwMjAzNjg5OSksXHJcbmEoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxhKDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCksYSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLGEoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLGEoMjQyODQzNjQ3NCw1OTM2OTgzNDQpLGEoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxhKDMyMDQwMzE0NzksMjk5OTM1MTU3MyksYSgzMzI5MzI1Mjk4LDM4MTU5MjA0MjcpLGEoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxhKDM1MTUyNjcyNzEsNTY2MjgwNzExKSxhKDM5NDAxODc2MDYsMzQ1NDA2OTUzNCksYSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLGEoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLGEoMTc0MjkyNDIxLDI3MzEwNTUyNzApLGEoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLGEoNDYwMzkzMjY5LDMyMDYyMDMxNSksYSg2ODU0NzE3MzMsNTg3NDk2ODM2KSxhKDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxhKDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxhKDExMjYwMDA1ODAsMjYxODI5NzY3NiksYSgxMjg4MDMzNDcwLFxyXG4zNDA5ODU1MTU4KSxhKDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksYSgxNjA3MTY3OTE1LDk4NzE2NzQ2OCksYSgxODE2NDAyMzE2LDEyNDYxODk1OTEpXSx2PVtdLHc9MDs4MD53O3crKyl2W3ddPWEoKTtlPWUuU0hBNTEyPXIuZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IFQuaW5pdChbbmV3IGQuaW5pdCgxNzc5MDMzNzAzLDQwODkyMzU3MjApLG5ldyBkLmluaXQoMzE0NDEzNDI3NywyMjI3ODczNTk1KSxuZXcgZC5pbml0KDEwMTM5MDQyNDIsNDI3MTE3NTcyMyksbmV3IGQuaW5pdCgyNzczNDgwNzYyLDE1OTU3NTAxMjkpLG5ldyBkLmluaXQoMTM1OTg5MzExOSwyOTE3NTY1MTM3KSxuZXcgZC5pbml0KDI2MDA4MjI5MjQsNzI1NTExMTk5KSxuZXcgZC5pbml0KDUyODczNDYzNSw0MjE1Mzg5NTQ3KSxuZXcgZC5pbml0KDE1NDE0NTkyMjUsMzI3MDMzMjA5KV0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oYSxkKXtmb3IodmFyIGY9dGhpcy5faGFzaC53b3JkcyxcclxuRj1mWzBdLGU9ZlsxXSxuPWZbMl0scj1mWzNdLEc9Zls0XSxIPWZbNV0sST1mWzZdLGY9Zls3XSx3PUYuaGlnaCxKPUYubG93LFg9ZS5oaWdoLEs9ZS5sb3csWT1uLmhpZ2gsTD1uLmxvdyxaPXIuaGlnaCxNPXIubG93LCQ9Ry5oaWdoLE49Ry5sb3csYWE9SC5oaWdoLE89SC5sb3csYmE9SS5oaWdoLFA9SS5sb3csY2E9Zi5oaWdoLFE9Zi5sb3csaz13LGc9Six6PVgseD1LLEE9WSx5PUwsVT1aLEI9TSxsPSQsaD1OLFI9YWEsQz1PLFM9YmEsRD1QLFY9Y2EsRT1RLG09MDs4MD5tO20rKyl7dmFyIHM9dlttXTtpZigxNj5tKXZhciBqPXMuaGlnaD1hW2QrMiptXXwwLGI9cy5sb3c9YVtkKzIqbSsxXXwwO2Vsc2V7dmFyIGo9dlttLTE1XSxiPWouaGlnaCxwPWoubG93LGo9KGI+Pj4xfHA8PDMxKV4oYj4+Pjh8cDw8MjQpXmI+Pj43LHA9KHA+Pj4xfGI8PDMxKV4ocD4+Pjh8Yjw8MjQpXihwPj4+N3xiPDwyNSksdT12W20tMl0sYj11LmhpZ2gsYz11Lmxvdyx1PShiPj4+MTl8Yzw8MTMpXihiPDxcclxuM3xjPj4+MjkpXmI+Pj42LGM9KGM+Pj4xOXxiPDwxMyleKGM8PDN8Yj4+PjI5KV4oYz4+PjZ8Yjw8MjYpLGI9dlttLTddLFc9Yi5oaWdoLHQ9dlttLTE2XSxxPXQuaGlnaCx0PXQubG93LGI9cCtiLmxvdyxqPWorVysoYj4+PjA8cD4+PjA/MTowKSxiPWIrYyxqPWordSsoYj4+PjA8Yz4+PjA/MTowKSxiPWIrdCxqPWorcSsoYj4+PjA8dD4+PjA/MTowKTtzLmhpZ2g9ajtzLmxvdz1ifXZhciBXPWwmUl5+bCZTLHQ9aCZDXn5oJkQscz1rJnpeayZBXnomQSxUPWcmeF5nJnleeCZ5LHA9KGs+Pj4yOHxnPDw0KV4oazw8MzB8Zz4+PjIpXihrPDwyNXxnPj4+NyksdT0oZz4+PjI4fGs8PDQpXihnPDwzMHxrPj4+MileKGc8PDI1fGs+Pj43KSxjPWVhW21dLGZhPWMuaGlnaCxkYT1jLmxvdyxjPUUrKChoPj4+MTR8bDw8MTgpXihoPj4+MTh8bDw8MTQpXihoPDwyM3xsPj4+OSkpLHE9VisoKGw+Pj4xNHxoPDwxOCleKGw+Pj4xOHxoPDwxNCleKGw8PDIzfGg+Pj45KSkrKGM+Pj4wPEU+Pj4wPzE6XHJcbjApLGM9Yyt0LHE9cStXKyhjPj4+MDx0Pj4+MD8xOjApLGM9YytkYSxxPXErZmErKGM+Pj4wPGRhPj4+MD8xOjApLGM9YytiLHE9cStqKyhjPj4+MDxiPj4+MD8xOjApLGI9dStULHM9cCtzKyhiPj4+MDx1Pj4+MD8xOjApLFY9UyxFPUQsUz1SLEQ9QyxSPWwsQz1oLGg9QitjfDAsbD1VK3ErKGg+Pj4wPEI+Pj4wPzE6MCl8MCxVPUEsQj15LEE9eix5PXgsej1rLHg9ZyxnPWMrYnwwLGs9cStzKyhnPj4+MDxjPj4+MD8xOjApfDB9Sj1GLmxvdz1KK2c7Ri5oaWdoPXcraysoSj4+PjA8Zz4+PjA/MTowKTtLPWUubG93PUsreDtlLmhpZ2g9WCt6KyhLPj4+MDx4Pj4+MD8xOjApO0w9bi5sb3c9TCt5O24uaGlnaD1ZK0ErKEw+Pj4wPHk+Pj4wPzE6MCk7TT1yLmxvdz1NK0I7ci5oaWdoPVorVSsoTT4+PjA8Qj4+PjA/MTowKTtOPUcubG93PU4raDtHLmhpZ2g9JCtsKyhOPj4+MDxoPj4+MD8xOjApO089SC5sb3c9TytDO0guaGlnaD1hYStSKyhPPj4+MDxDPj4+MD8xOjApO1A9SS5sb3c9UCtEO1xyXG5JLmhpZ2g9YmErUysoUD4+PjA8RD4+PjA/MTowKTtRPWYubG93PVErRTtmLmhpZ2g9Y2ErVisoUT4+PjA8RT4+PjA/MTowKX0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9kYXRhLGQ9YS53b3JkcyxmPTgqdGhpcy5fbkRhdGFCeXRlcyxlPTgqYS5zaWdCeXRlcztkW2U+Pj41XXw9MTI4PDwyNC1lJTMyO2RbKGUrMTI4Pj4+MTA8PDUpKzMwXT1NYXRoLmZsb29yKGYvNDI5NDk2NzI5Nik7ZFsoZSsxMjg+Pj4xMDw8NSkrMzFdPWY7YS5zaWdCeXRlcz00KmQubGVuZ3RoO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpcy5faGFzaC50b1gzMigpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBhPXIuY2xvbmUuY2FsbCh0aGlzKTthLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKTtyZXR1cm4gYX0sYmxvY2tTaXplOjMyfSk7bi5TSEE1MTI9ci5fY3JlYXRlSGVscGVyKGUpO24uSG1hY1NIQTUxMj1yLl9jcmVhdGVIbWFjSGVscGVyKGUpfSkoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgc2hhMzg0LW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7dmFyIGM9Q3J5cHRvSlMsYT1jLng2NCxiPWEuV29yZCxlPWEuV29yZEFycmF5LGE9Yy5hbGdvLGQ9YS5TSEE1MTIsYT1hLlNIQTM4ND1kLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBlLmluaXQoW25ldyBiLmluaXQoMzQxODA3MDM2NSwzMjM4MzcxMDMyKSxuZXcgYi5pbml0KDE2NTQyNzAyNTAsOTE0MTUwNjYzKSxuZXcgYi5pbml0KDI0Mzg1MjkzNzAsODEyNzAyOTk5KSxuZXcgYi5pbml0KDM1NTQ2MjM2MCw0MTQ0OTEyNjk3KSxuZXcgYi5pbml0KDE3MzE0MDU0MTUsNDI5MDc3NTg1NyksbmV3IGIuaW5pdCgyMzk0MTgwMjMxLDE3NTA2MDMwMjUpLG5ldyBiLmluaXQoMzY3NTAwODUyNSwxNjk0MDc2ODM5KSxuZXcgYi5pbml0KDEyMDMwNjI4MTMsMzIwNDA3NTQyOCldKX0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT1kLl9kb0ZpbmFsaXplLmNhbGwodGhpcyk7YS5zaWdCeXRlcy09MTY7cmV0dXJuIGF9fSk7Yy5TSEEzODQ9XHJcbmQuX2NyZWF0ZUhlbHBlcihhKTtjLkhtYWNTSEEzODQ9ZC5fY3JlYXRlSG1hY0hlbHBlcihhKX0pKCk7XHJcblxuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG52YXIgYjY0bWFwPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiO3ZhciBiNjRwYWQ9XCI9XCI7ZnVuY3Rpb24gaGV4MmI2NChkKXt2YXIgYjt2YXIgZTt2YXIgYT1cIlwiO2ZvcihiPTA7YiszPD1kLmxlbmd0aDtiKz0zKXtlPXBhcnNlSW50KGQuc3Vic3RyaW5nKGIsYiszKSwxNik7YSs9YjY0bWFwLmNoYXJBdChlPj42KStiNjRtYXAuY2hhckF0KGUmNjMpfWlmKGIrMT09ZC5sZW5ndGgpe2U9cGFyc2VJbnQoZC5zdWJzdHJpbmcoYixiKzEpLDE2KTthKz1iNjRtYXAuY2hhckF0KGU8PDIpfWVsc2V7aWYoYisyPT1kLmxlbmd0aCl7ZT1wYXJzZUludChkLnN1YnN0cmluZyhiLGIrMiksMTYpO2ErPWI2NG1hcC5jaGFyQXQoZT4+MikrYjY0bWFwLmNoYXJBdCgoZSYzKTw8NCl9fWlmKGI2NHBhZCl7d2hpbGUoKGEubGVuZ3RoJjMpPjApe2ErPWI2NHBhZH19cmV0dXJuIGF9ZnVuY3Rpb24gYjY0dG9oZXgoZil7dmFyIGQ9XCJcIjt2YXIgZTt2YXIgYj0wO3ZhciBjO3ZhciBhO2ZvcihlPTA7ZTxmLmxlbmd0aDsrK2Upe2lmKGYuY2hhckF0KGUpPT1iNjRwYWQpe2JyZWFrfWE9YjY0bWFwLmluZGV4T2YoZi5jaGFyQXQoZSkpO2lmKGE8MCl7Y29udGludWV9aWYoYj09MCl7ZCs9aW50MmNoYXIoYT4+Mik7Yz1hJjM7Yj0xfWVsc2V7aWYoYj09MSl7ZCs9aW50MmNoYXIoKGM8PDIpfChhPj40KSk7Yz1hJjE1O2I9Mn1lbHNle2lmKGI9PTIpe2QrPWludDJjaGFyKGMpO2QrPWludDJjaGFyKGE+PjIpO2M9YSYzO2I9M31lbHNle2QrPWludDJjaGFyKChjPDwyKXwoYT4+NCkpO2QrPWludDJjaGFyKGEmMTUpO2I9MH19fX1pZihiPT0xKXtkKz1pbnQyY2hhcihjPDwyKX1yZXR1cm4gZH1mdW5jdGlvbiBiNjR0b0JBKGUpe3ZhciBkPWI2NHRvaGV4KGUpO3ZhciBjO3ZhciBiPW5ldyBBcnJheSgpO2ZvcihjPTA7MipjPGQubGVuZ3RoOysrYyl7YltjXT1wYXJzZUludChkLnN1YnN0cmluZygyKmMsMipjKzIpLDE2KX1yZXR1cm4gYn07XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbnZhciBkYml0czt2YXIgY2FuYXJ5PTI0NDgzNzgxNDA5NDU5MDt2YXIgal9sbT0oKGNhbmFyeSYxNjc3NzIxNSk9PTE1NzE1MDcwKTtmdW5jdGlvbiBCaWdJbnRlZ2VyKGUsZCxmKXtpZihlIT1udWxsKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7dGhpcy5mcm9tTnVtYmVyKGUsZCxmKX1lbHNle2lmKGQ9PW51bGwmJlwic3RyaW5nXCIhPXR5cGVvZiBlKXt0aGlzLmZyb21TdHJpbmcoZSwyNTYpfWVsc2V7dGhpcy5mcm9tU3RyaW5nKGUsZCl9fX19ZnVuY3Rpb24gbmJpKCl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKG51bGwpfWZ1bmN0aW9uIGFtMShmLGEsYixlLGgsZyl7d2hpbGUoLS1nPj0wKXt2YXIgZD1hKnRoaXNbZisrXStiW2VdK2g7aD1NYXRoLmZsb29yKGQvNjcxMDg4NjQpO2JbZSsrXT1kJjY3MTA4ODYzfXJldHVybiBofWZ1bmN0aW9uIGFtMihmLHEscixlLG8sYSl7dmFyIGs9cSYzMjc2NyxwPXE+PjE1O3doaWxlKC0tYT49MCl7dmFyIGQ9dGhpc1tmXSYzMjc2Nzt2YXIgZz10aGlzW2YrK10+PjE1O3ZhciBiPXAqZCtnKms7ZD1rKmQrKChiJjMyNzY3KTw8MTUpK3JbZV0rKG8mMTA3Mzc0MTgyMyk7bz0oZD4+PjMwKSsoYj4+PjE1KStwKmcrKG8+Pj4zMCk7cltlKytdPWQmMTA3Mzc0MTgyM31yZXR1cm4gb31mdW5jdGlvbiBhbTMoZixxLHIsZSxvLGEpe3ZhciBrPXEmMTYzODMscD1xPj4xNDt3aGlsZSgtLWE+PTApe3ZhciBkPXRoaXNbZl0mMTYzODM7dmFyIGc9dGhpc1tmKytdPj4xNDt2YXIgYj1wKmQrZyprO2Q9aypkKygoYiYxNjM4Myk8PDE0KStyW2VdK287bz0oZD4+MjgpKyhiPj4xNCkrcCpnO3JbZSsrXT1kJjI2ODQzNTQ1NX1yZXR1cm4gb31pZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWU9PVwiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyXCIpKXtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbT1hbTI7ZGJpdHM9MzB9ZWxzZXtpZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWUhPVwiTmV0c2NhcGVcIikpe0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMTtkYml0cz0yNn1lbHNle0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMztkYml0cz0yOH19QmlnSW50ZWdlci5wcm90b3R5cGUuREI9ZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRE09KCgxPDxkYml0cyktMSk7QmlnSW50ZWdlci5wcm90b3R5cGUuRFY9KDE8PGRiaXRzKTt2YXIgQklfRlA9NTI7QmlnSW50ZWdlci5wcm90b3R5cGUuRlY9TWF0aC5wb3coMixCSV9GUCk7QmlnSW50ZWdlci5wcm90b3R5cGUuRjE9QklfRlAtZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRjI9MipkYml0cy1CSV9GUDt2YXIgQklfUk09XCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjt2YXIgQklfUkM9bmV3IEFycmF5KCk7dmFyIHJyLHZ2O3JyPVwiMFwiLmNoYXJDb2RlQXQoMCk7Zm9yKHZ2PTA7dnY8PTk7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJhXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJBXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9ZnVuY3Rpb24gaW50MmNoYXIoYSl7cmV0dXJuIEJJX1JNLmNoYXJBdChhKX1mdW5jdGlvbiBpbnRBdChiLGEpe3ZhciBkPUJJX1JDW2IuY2hhckNvZGVBdChhKV07cmV0dXJuKGQ9PW51bGwpPy0xOmR9ZnVuY3Rpb24gYm5wQ29weVRvKGIpe2Zvcih2YXIgYT10aGlzLnQtMTthPj0wOy0tYSl7YlthXT10aGlzW2FdfWIudD10aGlzLnQ7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBGcm9tSW50KGEpe3RoaXMudD0xO3RoaXMucz0oYTwwKT8tMTowO2lmKGE+MCl7dGhpc1swXT1hfWVsc2V7aWYoYTwtMSl7dGhpc1swXT1hK3RoaXMuRFZ9ZWxzZXt0aGlzLnQ9MH19fWZ1bmN0aW9uIG5idihhKXt2YXIgYj1uYmkoKTtiLmZyb21JbnQoYSk7cmV0dXJuIGJ9ZnVuY3Rpb24gYm5wRnJvbVN0cmluZyhoLGMpe3ZhciBlO2lmKGM9PTE2KXtlPTR9ZWxzZXtpZihjPT04KXtlPTN9ZWxzZXtpZihjPT0yNTYpe2U9OH1lbHNle2lmKGM9PTIpe2U9MX1lbHNle2lmKGM9PTMyKXtlPTV9ZWxzZXtpZihjPT00KXtlPTJ9ZWxzZXt0aGlzLmZyb21SYWRpeChoLGMpO3JldHVybn19fX19fXRoaXMudD0wO3RoaXMucz0wO3ZhciBnPWgubGVuZ3RoLGQ9ZmFsc2UsZj0wO3doaWxlKC0tZz49MCl7dmFyIGE9KGU9PTgpP2hbZ10mMjU1OmludEF0KGgsZyk7aWYoYTwwKXtpZihoLmNoYXJBdChnKT09XCItXCIpe2Q9dHJ1ZX1jb250aW51ZX1kPWZhbHNlO2lmKGY9PTApe3RoaXNbdGhpcy50KytdPWF9ZWxzZXtpZihmK2U+dGhpcy5EQil7dGhpc1t0aGlzLnQtMV18PShhJigoMTw8KHRoaXMuREItZikpLTEpKTw8Zjt0aGlzW3RoaXMudCsrXT0oYT4+KHRoaXMuREItZikpfWVsc2V7dGhpc1t0aGlzLnQtMV18PWE8PGZ9fWYrPWU7aWYoZj49dGhpcy5EQil7Zi09dGhpcy5EQn19aWYoZT09OCYmKGhbMF0mMTI4KSE9MCl7dGhpcy5zPS0xO2lmKGY+MCl7dGhpc1t0aGlzLnQtMV18PSgoMTw8KHRoaXMuREItZikpLTEpPDxmfX10aGlzLmNsYW1wKCk7aWYoZCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyl9fWZ1bmN0aW9uIGJucENsYW1wKCl7dmFyIGE9dGhpcy5zJnRoaXMuRE07d2hpbGUodGhpcy50PjAmJnRoaXNbdGhpcy50LTFdPT1hKXstLXRoaXMudH19ZnVuY3Rpb24gYm5Ub1N0cmluZyhjKXtpZih0aGlzLnM8MCl7cmV0dXJuXCItXCIrdGhpcy5uZWdhdGUoKS50b1N0cmluZyhjKX12YXIgZTtpZihjPT0xNil7ZT00fWVsc2V7aWYoYz09OCl7ZT0zfWVsc2V7aWYoYz09Mil7ZT0xfWVsc2V7aWYoYz09MzIpe2U9NX1lbHNle2lmKGM9PTQpe2U9Mn1lbHNle3JldHVybiB0aGlzLnRvUmFkaXgoYyl9fX19fXZhciBnPSgxPDxlKS0xLGwsYT1mYWxzZSxoPVwiXCIsZj10aGlzLnQ7dmFyIGo9dGhpcy5EQi0oZip0aGlzLkRCKSVlO2lmKGYtLT4wKXtpZihqPHRoaXMuREImJihsPXRoaXNbZl0+PmopPjApe2E9dHJ1ZTtoPWludDJjaGFyKGwpfXdoaWxlKGY+PTApe2lmKGo8ZSl7bD0odGhpc1tmXSYoKDE8PGopLTEpKTw8KGUtaik7bHw9dGhpc1stLWZdPj4oais9dGhpcy5EQi1lKX1lbHNle2w9KHRoaXNbZl0+PihqLT1lKSkmZztpZihqPD0wKXtqKz10aGlzLkRCOy0tZn19aWYobD4wKXthPXRydWV9aWYoYSl7aCs9aW50MmNoYXIobCl9fX1yZXR1cm4gYT9oOlwiMFwifWZ1bmN0aW9uIGJuTmVnYXRlKCl7dmFyIGE9bmJpKCk7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5BYnMoKXtyZXR1cm4odGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpc31mdW5jdGlvbiBibkNvbXBhcmVUbyhiKXt2YXIgZD10aGlzLnMtYi5zO2lmKGQhPTApe3JldHVybiBkfXZhciBjPXRoaXMudDtkPWMtYi50O2lmKGQhPTApe3JldHVybih0aGlzLnM8MCk/LWQ6ZH13aGlsZSgtLWM+PTApe2lmKChkPXRoaXNbY10tYltjXSkhPTApe3JldHVybiBkfX1yZXR1cm4gMH1mdW5jdGlvbiBuYml0cyhhKXt2YXIgYz0xLGI7aWYoKGI9YT4+PjE2KSE9MCl7YT1iO2MrPTE2fWlmKChiPWE+PjgpIT0wKXthPWI7Yys9OH1pZigoYj1hPj40KSE9MCl7YT1iO2MrPTR9aWYoKGI9YT4+MikhPTApe2E9YjtjKz0yfWlmKChiPWE+PjEpIT0wKXthPWI7Yys9MX1yZXR1cm4gY31mdW5jdGlvbiBibkJpdExlbmd0aCgpe2lmKHRoaXMudDw9MCl7cmV0dXJuIDB9cmV0dXJuIHRoaXMuREIqKHRoaXMudC0xKStuYml0cyh0aGlzW3RoaXMudC0xXV4odGhpcy5zJnRoaXMuRE0pKX1mdW5jdGlvbiBibnBETFNoaWZ0VG8oYyxiKXt2YXIgYTtmb3IoYT10aGlzLnQtMTthPj0wOy0tYSl7YlthK2NdPXRoaXNbYV19Zm9yKGE9Yy0xO2E+PTA7LS1hKXtiW2FdPTB9Yi50PXRoaXMudCtjO2Iucz10aGlzLnN9ZnVuY3Rpb24gYm5wRFJTaGlmdFRvKGMsYil7Zm9yKHZhciBhPWM7YTx0aGlzLnQ7KythKXtiW2EtY109dGhpc1thXX1iLnQ9TWF0aC5tYXgodGhpcy50LWMsMCk7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBMU2hpZnRUbyhqLGUpe3ZhciBiPWoldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGc9KDE8PGEpLTE7dmFyIGY9TWF0aC5mbG9vcihqL3RoaXMuREIpLGg9KHRoaXMuczw8YikmdGhpcy5ETSxkO2ZvcihkPXRoaXMudC0xO2Q+PTA7LS1kKXtlW2QrZisxXT0odGhpc1tkXT4+YSl8aDtoPSh0aGlzW2RdJmcpPDxifWZvcihkPWYtMTtkPj0wOy0tZCl7ZVtkXT0wfWVbZl09aDtlLnQ9dGhpcy50K2YrMTtlLnM9dGhpcy5zO2UuY2xhbXAoKX1mdW5jdGlvbiBibnBSU2hpZnRUbyhnLGQpe2Qucz10aGlzLnM7dmFyIGU9TWF0aC5mbG9vcihnL3RoaXMuREIpO2lmKGU+PXRoaXMudCl7ZC50PTA7cmV0dXJufXZhciBiPWcldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGY9KDE8PGIpLTE7ZFswXT10aGlzW2VdPj5iO2Zvcih2YXIgYz1lKzE7Yzx0aGlzLnQ7KytjKXtkW2MtZS0xXXw9KHRoaXNbY10mZik8PGE7ZFtjLWVdPXRoaXNbY10+PmJ9aWYoYj4wKXtkW3RoaXMudC1lLTFdfD0odGhpcy5zJmYpPDxhfWQudD10aGlzLnQtZTtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wU3ViVG8oZCxmKXt2YXIgZT0wLGc9MCxiPU1hdGgubWluKGQudCx0aGlzLnQpO3doaWxlKGU8Yil7Zys9dGhpc1tlXS1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9aWYoZC50PHRoaXMudCl7Zy09ZC5zO3doaWxlKGU8dGhpcy50KXtnKz10aGlzW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zys9dGhpcy5zfWVsc2V7Zys9dGhpcy5zO3doaWxlKGU8ZC50KXtnLT1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zy09ZC5zfWYucz0oZzwwKT8tMTowO2lmKGc8LTEpe2ZbZSsrXT10aGlzLkRWK2d9ZWxzZXtpZihnPjApe2ZbZSsrXT1nfX1mLnQ9ZTtmLmNsYW1wKCl9ZnVuY3Rpb24gYm5wTXVsdGlwbHlUbyhjLGUpe3ZhciBiPXRoaXMuYWJzKCksZj1jLmFicygpO3ZhciBkPWIudDtlLnQ9ZCtmLnQ7d2hpbGUoLS1kPj0wKXtlW2RdPTB9Zm9yKGQ9MDtkPGYudDsrK2Qpe2VbZCtiLnRdPWIuYW0oMCxmW2RdLGUsZCwwLGIudCl9ZS5zPTA7ZS5jbGFtcCgpO2lmKHRoaXMucyE9Yy5zKXtCaWdJbnRlZ2VyLlpFUk8uc3ViVG8oZSxlKX19ZnVuY3Rpb24gYm5wU3F1YXJlVG8oZCl7dmFyIGE9dGhpcy5hYnMoKTt2YXIgYj1kLnQ9MiphLnQ7d2hpbGUoLS1iPj0wKXtkW2JdPTB9Zm9yKGI9MDtiPGEudC0xOysrYil7dmFyIGU9YS5hbShiLGFbYl0sZCwyKmIsMCwxKTtpZigoZFtiK2EudF0rPWEuYW0oYisxLDIqYVtiXSxkLDIqYisxLGUsYS50LWItMSkpPj1hLkRWKXtkW2IrYS50XS09YS5EVjtkW2IrYS50KzFdPTF9fWlmKGQudD4wKXtkW2QudC0xXSs9YS5hbShiLGFbYl0sZCwyKmIsMCwxKX1kLnM9MDtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wRGl2UmVtVG8obixoLGcpe3ZhciB3PW4uYWJzKCk7aWYody50PD0wKXtyZXR1cm59dmFyIGs9dGhpcy5hYnMoKTtpZihrLnQ8dy50KXtpZihoIT1udWxsKXtoLmZyb21JbnQoMCl9aWYoZyE9bnVsbCl7dGhpcy5jb3B5VG8oZyl9cmV0dXJufWlmKGc9PW51bGwpe2c9bmJpKCl9dmFyIGQ9bmJpKCksYT10aGlzLnMsbD1uLnM7dmFyIHY9dGhpcy5EQi1uYml0cyh3W3cudC0xXSk7aWYodj4wKXt3LmxTaGlmdFRvKHYsZCk7ay5sU2hpZnRUbyh2LGcpfWVsc2V7dy5jb3B5VG8oZCk7ay5jb3B5VG8oZyl9dmFyIHA9ZC50O3ZhciBiPWRbcC0xXTtpZihiPT0wKXtyZXR1cm59dmFyIG89YiooMTw8dGhpcy5GMSkrKChwPjEpP2RbcC0yXT4+dGhpcy5GMjowKTt2YXIgQT10aGlzLkZWL28sej0oMTw8dGhpcy5GMSkvbyx4PTE8PHRoaXMuRjI7dmFyIHU9Zy50LHM9dS1wLGY9KGg9PW51bGwpP25iaSgpOmg7ZC5kbFNoaWZ0VG8ocyxmKTtpZihnLmNvbXBhcmVUbyhmKT49MCl7Z1tnLnQrK109MTtnLnN1YlRvKGYsZyl9QmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKHAsZik7Zi5zdWJUbyhkLGQpO3doaWxlKGQudDxwKXtkW2QudCsrXT0wfXdoaWxlKC0tcz49MCl7dmFyIGM9KGdbLS11XT09Yik/dGhpcy5ETTpNYXRoLmZsb29yKGdbdV0qQSsoZ1t1LTFdK3gpKnopO2lmKChnW3VdKz1kLmFtKDAsYyxnLHMsMCxwKSk8Yyl7ZC5kbFNoaWZ0VG8ocyxmKTtnLnN1YlRvKGYsZyk7d2hpbGUoZ1t1XTwtLWMpe2cuc3ViVG8oZixnKX19fWlmKGghPW51bGwpe2cuZHJTaGlmdFRvKHAsaCk7aWYoYSE9bCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKGgsaCl9fWcudD1wO2cuY2xhbXAoKTtpZih2PjApe2cuclNoaWZ0VG8odixnKX1pZihhPDApe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyhnLGcpfX1mdW5jdGlvbiBibk1vZChiKXt2YXIgYz1uYmkoKTt0aGlzLmFicygpLmRpdlJlbVRvKGIsbnVsbCxjKTtpZih0aGlzLnM8MCYmYy5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXtiLnN1YlRvKGMsYyl9cmV0dXJuIGN9ZnVuY3Rpb24gQ2xhc3NpYyhhKXt0aGlzLm09YX1mdW5jdGlvbiBjQ29udmVydChhKXtpZihhLnM8MHx8YS5jb21wYXJlVG8odGhpcy5tKT49MCl7cmV0dXJuIGEubW9kKHRoaXMubSl9ZWxzZXtyZXR1cm4gYX19ZnVuY3Rpb24gY1JldmVydChhKXtyZXR1cm4gYX1mdW5jdGlvbiBjUmVkdWNlKGEpe2EuZGl2UmVtVG8odGhpcy5tLG51bGwsYSl9ZnVuY3Rpb24gY011bFRvKGEsYyxiKXthLm11bHRpcGx5VG8oYyxiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBjU3FyVG8oYSxiKXthLnNxdWFyZVRvKGIpO3RoaXMucmVkdWNlKGIpfUNsYXNzaWMucHJvdG90eXBlLmNvbnZlcnQ9Y0NvbnZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmV2ZXJ0PWNSZXZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmVkdWNlPWNSZWR1Y2U7Q2xhc3NpYy5wcm90b3R5cGUubXVsVG89Y011bFRvO0NsYXNzaWMucHJvdG90eXBlLnNxclRvPWNTcXJUbztmdW5jdGlvbiBibnBJbnZEaWdpdCgpe2lmKHRoaXMudDwxKXtyZXR1cm4gMH12YXIgYT10aGlzWzBdO2lmKChhJjEpPT0wKXtyZXR1cm4gMH12YXIgYj1hJjM7Yj0oYiooMi0oYSYxNSkqYikpJjE1O2I9KGIqKDItKGEmMjU1KSpiKSkmMjU1O2I9KGIqKDItKCgoYSY2NTUzNSkqYikmNjU1MzUpKSkmNjU1MzU7Yj0oYiooMi1hKmIldGhpcy5EVikpJXRoaXMuRFY7cmV0dXJuKGI+MCk/dGhpcy5EVi1iOi1ifWZ1bmN0aW9uIE1vbnRnb21lcnkoYSl7dGhpcy5tPWE7dGhpcy5tcD1hLmludkRpZ2l0KCk7dGhpcy5tcGw9dGhpcy5tcCYzMjc2Nzt0aGlzLm1waD10aGlzLm1wPj4xNTt0aGlzLnVtPSgxPDwoYS5EQi0xNSkpLTE7dGhpcy5tdDI9MiphLnR9ZnVuY3Rpb24gbW9udENvbnZlcnQoYSl7dmFyIGI9bmJpKCk7YS5hYnMoKS5kbFNoaWZ0VG8odGhpcy5tLnQsYik7Yi5kaXZSZW1Ubyh0aGlzLm0sbnVsbCxiKTtpZihhLnM8MCYmYi5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXt0aGlzLm0uc3ViVG8oYixiKX1yZXR1cm4gYn1mdW5jdGlvbiBtb250UmV2ZXJ0KGEpe3ZhciBiPW5iaSgpO2EuY29weVRvKGIpO3RoaXMucmVkdWNlKGIpO3JldHVybiBifWZ1bmN0aW9uIG1vbnRSZWR1Y2UoYSl7d2hpbGUoYS50PD10aGlzLm10Mil7YVthLnQrK109MH1mb3IodmFyIGM9MDtjPHRoaXMubS50OysrYyl7dmFyIGI9YVtjXSYzMjc2Nzt2YXIgZD0oYip0aGlzLm1wbCsoKChiKnRoaXMubXBoKyhhW2NdPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0pPDwxNSkpJmEuRE07Yj1jK3RoaXMubS50O2FbYl0rPXRoaXMubS5hbSgwLGQsYSxjLDAsdGhpcy5tLnQpO3doaWxlKGFbYl0+PWEuRFYpe2FbYl0tPWEuRFY7YVsrK2JdKyt9fWEuY2xhbXAoKTthLmRyU2hpZnRUbyh0aGlzLm0udCxhKTtpZihhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXthLnN1YlRvKHRoaXMubSxhKX19ZnVuY3Rpb24gbW9udFNxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBtb250TXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfU1vbnRnb21lcnkucHJvdG90eXBlLmNvbnZlcnQ9bW9udENvbnZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmV2ZXJ0PW1vbnRSZXZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmVkdWNlPW1vbnRSZWR1Y2U7TW9udGdvbWVyeS5wcm90b3R5cGUubXVsVG89bW9udE11bFRvO01vbnRnb21lcnkucHJvdG90eXBlLnNxclRvPW1vbnRTcXJUbztmdW5jdGlvbiBibnBJc0V2ZW4oKXtyZXR1cm4oKHRoaXMudD4wKT8odGhpc1swXSYxKTp0aGlzLnMpPT0wfWZ1bmN0aW9uIGJucEV4cChoLGope2lmKGg+NDI5NDk2NzI5NXx8aDwxKXtyZXR1cm4gQmlnSW50ZWdlci5PTkV9dmFyIGY9bmJpKCksYT1uYmkoKSxkPWouY29udmVydCh0aGlzKSxjPW5iaXRzKGgpLTE7ZC5jb3B5VG8oZik7d2hpbGUoLS1jPj0wKXtqLnNxclRvKGYsYSk7aWYoKGgmKDE8PGMpKT4wKXtqLm11bFRvKGEsZCxmKX1lbHNle3ZhciBiPWY7Zj1hO2E9Yn19cmV0dXJuIGoucmV2ZXJ0KGYpfWZ1bmN0aW9uIGJuTW9kUG93SW50KGIsYSl7dmFyIGM7aWYoYjwyNTZ8fGEuaXNFdmVuKCkpe2M9bmV3IENsYXNzaWMoYSl9ZWxzZXtjPW5ldyBNb250Z29tZXJ5KGEpfXJldHVybiB0aGlzLmV4cChiLGMpfUJpZ0ludGVnZXIucHJvdG90eXBlLmNvcHlUbz1ibnBDb3B5VG87QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbUludD1ibnBGcm9tSW50O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21TdHJpbmc9Ym5wRnJvbVN0cmluZztCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbGFtcD1ibnBDbGFtcDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5kbFNoaWZ0VG89Ym5wRExTaGlmdFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRyU2hpZnRUbz1ibnBEUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUubFNoaWZ0VG89Ym5wTFNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuclNoaWZ0VG89Ym5wUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuc3ViVG89Ym5wU3ViVG87QmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlUbz1ibnBNdWx0aXBseVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLnNxdWFyZVRvPWJucFNxdWFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdlJlbVRvPWJucERpdlJlbVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmludkRpZ2l0PWJucEludkRpZ2l0O0JpZ0ludGVnZXIucHJvdG90eXBlLmlzRXZlbj1ibnBJc0V2ZW47QmlnSW50ZWdlci5wcm90b3R5cGUuZXhwPWJucEV4cDtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b1N0cmluZz1iblRvU3RyaW5nO0JpZ0ludGVnZXIucHJvdG90eXBlLm5lZ2F0ZT1ibk5lZ2F0ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hYnM9Ym5BYnM7QmlnSW50ZWdlci5wcm90b3R5cGUuY29tcGFyZVRvPWJuQ29tcGFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdExlbmd0aD1ibkJpdExlbmd0aDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2Q9Ym5Nb2Q7QmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93SW50PWJuTW9kUG93SW50O0JpZ0ludGVnZXIuWkVSTz1uYnYoMCk7QmlnSW50ZWdlci5PTkU9bmJ2KDEpO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBibkNsb25lKCl7dmFyIGE9bmJpKCk7dGhpcy5jb3B5VG8oYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5JbnRWYWx1ZSgpe2lmKHRoaXMuczwwKXtpZih0aGlzLnQ9PTEpe3JldHVybiB0aGlzWzBdLXRoaXMuRFZ9ZWxzZXtpZih0aGlzLnQ9PTApe3JldHVybiAtMX19fWVsc2V7aWYodGhpcy50PT0xKXtyZXR1cm4gdGhpc1swXX1lbHNle2lmKHRoaXMudD09MCl7cmV0dXJuIDB9fX1yZXR1cm4oKHRoaXNbMV0mKCgxPDwoMzItdGhpcy5EQikpLTEpKTw8dGhpcy5EQil8dGhpc1swXX1mdW5jdGlvbiBibkJ5dGVWYWx1ZSgpe3JldHVybih0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MjQpPj4yNH1mdW5jdGlvbiBiblNob3J0VmFsdWUoKXtyZXR1cm4odGhpcy50PT0wKT90aGlzLnM6KHRoaXNbMF08PDE2KT4+MTZ9ZnVuY3Rpb24gYm5wQ2h1bmtTaXplKGEpe3JldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKnRoaXMuREIvTWF0aC5sb2coYSkpfWZ1bmN0aW9uIGJuU2lnTnVtKCl7aWYodGhpcy5zPDApe3JldHVybiAtMX1lbHNle2lmKHRoaXMudDw9MHx8KHRoaXMudD09MSYmdGhpc1swXTw9MCkpe3JldHVybiAwfWVsc2V7cmV0dXJuIDF9fX1mdW5jdGlvbiBibnBUb1JhZGl4KGMpe2lmKGM9PW51bGwpe2M9MTB9aWYodGhpcy5zaWdudW0oKT09MHx8YzwyfHxjPjM2KXtyZXR1cm5cIjBcIn12YXIgZj10aGlzLmNodW5rU2l6ZShjKTt2YXIgZT1NYXRoLnBvdyhjLGYpO3ZhciBpPW5idihlKSxqPW5iaSgpLGg9bmJpKCksZz1cIlwiO3RoaXMuZGl2UmVtVG8oaSxqLGgpO3doaWxlKGouc2lnbnVtKCk+MCl7Zz0oZStoLmludFZhbHVlKCkpLnRvU3RyaW5nKGMpLnN1YnN0cigxKStnO2ouZGl2UmVtVG8oaSxqLGgpfXJldHVybiBoLmludFZhbHVlKCkudG9TdHJpbmcoYykrZ31mdW5jdGlvbiBibnBGcm9tUmFkaXgobSxoKXt0aGlzLmZyb21JbnQoMCk7aWYoaD09bnVsbCl7aD0xMH12YXIgZj10aGlzLmNodW5rU2l6ZShoKTt2YXIgZz1NYXRoLnBvdyhoLGYpLGU9ZmFsc2UsYT0wLGw9MDtmb3IodmFyIGM9MDtjPG0ubGVuZ3RoOysrYyl7dmFyIGs9aW50QXQobSxjKTtpZihrPDApe2lmKG0uY2hhckF0KGMpPT1cIi1cIiYmdGhpcy5zaWdudW0oKT09MCl7ZT10cnVlfWNvbnRpbnVlfWw9aCpsK2s7aWYoKythPj1mKXt0aGlzLmRNdWx0aXBseShnKTt0aGlzLmRBZGRPZmZzZXQobCwwKTthPTA7bD0wfX1pZihhPjApe3RoaXMuZE11bHRpcGx5KE1hdGgucG93KGgsYSkpO3RoaXMuZEFkZE9mZnNldChsLDApfWlmKGUpe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpfX1mdW5jdGlvbiBibnBGcm9tTnVtYmVyKGYsZSxoKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoZjwyKXt0aGlzLmZyb21JbnQoMSl9ZWxzZXt0aGlzLmZyb21OdW1iZXIoZixoKTtpZighdGhpcy50ZXN0Qml0KGYtMSkpe3RoaXMuYml0d2lzZVRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChmLTEpLG9wX29yLHRoaXMpfWlmKHRoaXMuaXNFdmVuKCkpe3RoaXMuZEFkZE9mZnNldCgxLDApfXdoaWxlKCF0aGlzLmlzUHJvYmFibGVQcmltZShlKSl7dGhpcy5kQWRkT2Zmc2V0KDIsMCk7aWYodGhpcy5iaXRMZW5ndGgoKT5mKXt0aGlzLnN1YlRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChmLTEpLHRoaXMpfX19fWVsc2V7dmFyIGQ9bmV3IEFycmF5KCksZz1mJjc7ZC5sZW5ndGg9KGY+PjMpKzE7ZS5uZXh0Qnl0ZXMoZCk7aWYoZz4wKXtkWzBdJj0oKDE8PGcpLTEpfWVsc2V7ZFswXT0wfXRoaXMuZnJvbVN0cmluZyhkLDI1Nil9fWZ1bmN0aW9uIGJuVG9CeXRlQXJyYXkoKXt2YXIgYj10aGlzLnQsYz1uZXcgQXJyYXkoKTtjWzBdPXRoaXMuczt2YXIgZT10aGlzLkRCLShiKnRoaXMuREIpJTgsZixhPTA7aWYoYi0tPjApe2lmKGU8dGhpcy5EQiYmKGY9dGhpc1tiXT4+ZSkhPSh0aGlzLnMmdGhpcy5ETSk+PmUpe2NbYSsrXT1mfCh0aGlzLnM8PCh0aGlzLkRCLWUpKX13aGlsZShiPj0wKXtpZihlPDgpe2Y9KHRoaXNbYl0mKCgxPDxlKS0xKSk8PCg4LWUpO2Z8PXRoaXNbLS1iXT4+KGUrPXRoaXMuREItOCl9ZWxzZXtmPSh0aGlzW2JdPj4oZS09OCkpJjI1NTtpZihlPD0wKXtlKz10aGlzLkRCOy0tYn19aWYoKGYmMTI4KSE9MCl7Znw9LTI1Nn1pZihhPT0wJiYodGhpcy5zJjEyOCkhPShmJjEyOCkpeysrYX1pZihhPjB8fGYhPXRoaXMucyl7Y1thKytdPWZ9fX1yZXR1cm4gY31mdW5jdGlvbiBibkVxdWFscyhiKXtyZXR1cm4odGhpcy5jb21wYXJlVG8oYik9PTApfWZ1bmN0aW9uIGJuTWluKGIpe3JldHVybih0aGlzLmNvbXBhcmVUbyhiKTwwKT90aGlzOmJ9ZnVuY3Rpb24gYm5NYXgoYil7cmV0dXJuKHRoaXMuY29tcGFyZVRvKGIpPjApP3RoaXM6Yn1mdW5jdGlvbiBibnBCaXR3aXNlVG8oYyxoLGUpe3ZhciBkLGcsYj1NYXRoLm1pbihjLnQsdGhpcy50KTtmb3IoZD0wO2Q8YjsrK2Qpe2VbZF09aCh0aGlzW2RdLGNbZF0pfWlmKGMudDx0aGlzLnQpe2c9Yy5zJnRoaXMuRE07Zm9yKGQ9YjtkPHRoaXMudDsrK2Qpe2VbZF09aCh0aGlzW2RdLGcpfWUudD10aGlzLnR9ZWxzZXtnPXRoaXMucyZ0aGlzLkRNO2ZvcihkPWI7ZDxjLnQ7KytkKXtlW2RdPWgoZyxjW2RdKX1lLnQ9Yy50fWUucz1oKHRoaXMucyxjLnMpO2UuY2xhbXAoKX1mdW5jdGlvbiBvcF9hbmQoYSxiKXtyZXR1cm4gYSZifWZ1bmN0aW9uIGJuQW5kKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3BfYW5kLGMpO3JldHVybiBjfWZ1bmN0aW9uIG9wX29yKGEsYil7cmV0dXJuIGF8Yn1mdW5jdGlvbiBibk9yKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3Bfb3IsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gb3BfeG9yKGEsYil7cmV0dXJuIGFeYn1mdW5jdGlvbiBiblhvcihiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX3hvcixjKTtyZXR1cm4gY31mdW5jdGlvbiBvcF9hbmRub3QoYSxiKXtyZXR1cm4gYSZ+Yn1mdW5jdGlvbiBibkFuZE5vdChiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX2FuZG5vdCxjKTtyZXR1cm4gY31mdW5jdGlvbiBibk5vdCgpe3ZhciBiPW5iaSgpO2Zvcih2YXIgYT0wO2E8dGhpcy50OysrYSl7YlthXT10aGlzLkRNJn50aGlzW2FdfWIudD10aGlzLnQ7Yi5zPX50aGlzLnM7cmV0dXJuIGJ9ZnVuY3Rpb24gYm5TaGlmdExlZnQoYil7dmFyIGE9bmJpKCk7aWYoYjwwKXt0aGlzLnJTaGlmdFRvKC1iLGEpfWVsc2V7dGhpcy5sU2hpZnRUbyhiLGEpfXJldHVybiBhfWZ1bmN0aW9uIGJuU2hpZnRSaWdodChiKXt2YXIgYT1uYmkoKTtpZihiPDApe3RoaXMubFNoaWZ0VG8oLWIsYSl9ZWxzZXt0aGlzLnJTaGlmdFRvKGIsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gbGJpdChhKXtpZihhPT0wKXtyZXR1cm4gLTF9dmFyIGI9MDtpZigoYSY2NTUzNSk9PTApe2E+Pj0xNjtiKz0xNn1pZigoYSYyNTUpPT0wKXthPj49ODtiKz04fWlmKChhJjE1KT09MCl7YT4+PTQ7Yis9NH1pZigoYSYzKT09MCl7YT4+PTI7Yis9Mn1pZigoYSYxKT09MCl7KytifXJldHVybiBifWZ1bmN0aW9uIGJuR2V0TG93ZXN0U2V0Qml0KCl7Zm9yKHZhciBhPTA7YTx0aGlzLnQ7KythKXtpZih0aGlzW2FdIT0wKXtyZXR1cm4gYSp0aGlzLkRCK2xiaXQodGhpc1thXSl9fWlmKHRoaXMuczwwKXtyZXR1cm4gdGhpcy50KnRoaXMuREJ9cmV0dXJuIC0xfWZ1bmN0aW9uIGNiaXQoYSl7dmFyIGI9MDt3aGlsZShhIT0wKXthJj1hLTE7KytifXJldHVybiBifWZ1bmN0aW9uIGJuQml0Q291bnQoKXt2YXIgYz0wLGE9dGhpcy5zJnRoaXMuRE07Zm9yKHZhciBiPTA7Yjx0aGlzLnQ7KytiKXtjKz1jYml0KHRoaXNbYl1eYSl9cmV0dXJuIGN9ZnVuY3Rpb24gYm5UZXN0Qml0KGIpe3ZhciBhPU1hdGguZmxvb3IoYi90aGlzLkRCKTtpZihhPj10aGlzLnQpe3JldHVybih0aGlzLnMhPTApfXJldHVybigodGhpc1thXSYoMTw8KGIldGhpcy5EQikpKSE9MCl9ZnVuY3Rpb24gYm5wQ2hhbmdlQml0KGMsYil7dmFyIGE9QmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGMpO3RoaXMuYml0d2lzZVRvKGEsYixhKTtyZXR1cm4gYX1mdW5jdGlvbiBiblNldEJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF9vcil9ZnVuY3Rpb24gYm5DbGVhckJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF9hbmRub3QpfWZ1bmN0aW9uIGJuRmxpcEJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF94b3IpfWZ1bmN0aW9uIGJucEFkZFRvKGQsZil7dmFyIGU9MCxnPTAsYj1NYXRoLm1pbihkLnQsdGhpcy50KTt3aGlsZShlPGIpe2crPXRoaXNbZV0rZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWlmKGQudDx0aGlzLnQpe2crPWQuczt3aGlsZShlPHRoaXMudCl7Zys9dGhpc1tlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWcrPXRoaXMuc31lbHNle2crPXRoaXMuczt3aGlsZShlPGQudCl7Zys9ZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWcrPWQuc31mLnM9KGc8MCk/LTE6MDtpZihnPjApe2ZbZSsrXT1nfWVsc2V7aWYoZzwtMSl7ZltlKytdPXRoaXMuRFYrZ319Zi50PWU7Zi5jbGFtcCgpfWZ1bmN0aW9uIGJuQWRkKGIpe3ZhciBjPW5iaSgpO3RoaXMuYWRkVG8oYixjKTtyZXR1cm4gY31mdW5jdGlvbiBiblN1YnRyYWN0KGIpe3ZhciBjPW5iaSgpO3RoaXMuc3ViVG8oYixjKTtyZXR1cm4gY31mdW5jdGlvbiBibk11bHRpcGx5KGIpe3ZhciBjPW5iaSgpO3RoaXMubXVsdGlwbHlUbyhiLGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuU3F1YXJlKCl7dmFyIGE9bmJpKCk7dGhpcy5zcXVhcmVUbyhhKTtyZXR1cm4gYX1mdW5jdGlvbiBibkRpdmlkZShiKXt2YXIgYz1uYmkoKTt0aGlzLmRpdlJlbVRvKGIsYyxudWxsKTtyZXR1cm4gY31mdW5jdGlvbiBiblJlbWFpbmRlcihiKXt2YXIgYz1uYmkoKTt0aGlzLmRpdlJlbVRvKGIsbnVsbCxjKTtyZXR1cm4gY31mdW5jdGlvbiBibkRpdmlkZUFuZFJlbWFpbmRlcihiKXt2YXIgZD1uYmkoKSxjPW5iaSgpO3RoaXMuZGl2UmVtVG8oYixkLGMpO3JldHVybiBuZXcgQXJyYXkoZCxjKX1mdW5jdGlvbiBibnBETXVsdGlwbHkoYSl7dGhpc1t0aGlzLnRdPXRoaXMuYW0oMCxhLTEsdGhpcywwLDAsdGhpcy50KTsrK3RoaXMudDt0aGlzLmNsYW1wKCl9ZnVuY3Rpb24gYm5wREFkZE9mZnNldChiLGEpe2lmKGI9PTApe3JldHVybn13aGlsZSh0aGlzLnQ8PWEpe3RoaXNbdGhpcy50KytdPTB9dGhpc1thXSs9Yjt3aGlsZSh0aGlzW2FdPj10aGlzLkRWKXt0aGlzW2FdLT10aGlzLkRWO2lmKCsrYT49dGhpcy50KXt0aGlzW3RoaXMudCsrXT0wfSsrdGhpc1thXX19ZnVuY3Rpb24gTnVsbEV4cCgpe31mdW5jdGlvbiBuTm9wKGEpe3JldHVybiBhfWZ1bmN0aW9uIG5NdWxUbyhhLGMsYil7YS5tdWx0aXBseVRvKGMsYil9ZnVuY3Rpb24gblNxclRvKGEsYil7YS5zcXVhcmVUbyhiKX1OdWxsRXhwLnByb3RvdHlwZS5jb252ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUucmV2ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUubXVsVG89bk11bFRvO051bGxFeHAucHJvdG90eXBlLnNxclRvPW5TcXJUbztmdW5jdGlvbiBiblBvdyhhKXtyZXR1cm4gdGhpcy5leHAoYSxuZXcgTnVsbEV4cCgpKX1mdW5jdGlvbiBibnBNdWx0aXBseUxvd2VyVG8oYixmLGUpe3ZhciBkPU1hdGgubWluKHRoaXMudCtiLnQsZik7ZS5zPTA7ZS50PWQ7d2hpbGUoZD4wKXtlWy0tZF09MH12YXIgYztmb3IoYz1lLnQtdGhpcy50O2Q8YzsrK2Qpe2VbZCt0aGlzLnRdPXRoaXMuYW0oMCxiW2RdLGUsZCwwLHRoaXMudCl9Zm9yKGM9TWF0aC5taW4oYi50LGYpO2Q8YzsrK2Qpe3RoaXMuYW0oMCxiW2RdLGUsZCwwLGYtZCl9ZS5jbGFtcCgpfWZ1bmN0aW9uIGJucE11bHRpcGx5VXBwZXJUbyhiLGUsZCl7LS1lO3ZhciBjPWQudD10aGlzLnQrYi50LWU7ZC5zPTA7d2hpbGUoLS1jPj0wKXtkW2NdPTB9Zm9yKGM9TWF0aC5tYXgoZS10aGlzLnQsMCk7YzxiLnQ7KytjKXtkW3RoaXMudCtjLWVdPXRoaXMuYW0oZS1jLGJbY10sZCwwLDAsdGhpcy50K2MtZSl9ZC5jbGFtcCgpO2QuZHJTaGlmdFRvKDEsZCl9ZnVuY3Rpb24gQmFycmV0dChhKXt0aGlzLnIyPW5iaSgpO3RoaXMucTM9bmJpKCk7QmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKDIqYS50LHRoaXMucjIpO3RoaXMubXU9dGhpcy5yMi5kaXZpZGUoYSk7dGhpcy5tPWF9ZnVuY3Rpb24gYmFycmV0dENvbnZlcnQoYSl7aWYoYS5zPDB8fGEudD4yKnRoaXMubS50KXtyZXR1cm4gYS5tb2QodGhpcy5tKX1lbHNle2lmKGEuY29tcGFyZVRvKHRoaXMubSk8MCl7cmV0dXJuIGF9ZWxzZXt2YXIgYj1uYmkoKTthLmNvcHlUbyhiKTt0aGlzLnJlZHVjZShiKTtyZXR1cm4gYn19fWZ1bmN0aW9uIGJhcnJldHRSZXZlcnQoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gYmFycmV0dFJlZHVjZShhKXthLmRyU2hpZnRUbyh0aGlzLm0udC0xLHRoaXMucjIpO2lmKGEudD50aGlzLm0udCsxKXthLnQ9dGhpcy5tLnQrMTthLmNsYW1wKCl9dGhpcy5tdS5tdWx0aXBseVVwcGVyVG8odGhpcy5yMix0aGlzLm0udCsxLHRoaXMucTMpO3RoaXMubS5tdWx0aXBseUxvd2VyVG8odGhpcy5xMyx0aGlzLm0udCsxLHRoaXMucjIpO3doaWxlKGEuY29tcGFyZVRvKHRoaXMucjIpPDApe2EuZEFkZE9mZnNldCgxLHRoaXMubS50KzEpfWEuc3ViVG8odGhpcy5yMixhKTt3aGlsZShhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXthLnN1YlRvKHRoaXMubSxhKX19ZnVuY3Rpb24gYmFycmV0dFNxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBiYXJyZXR0TXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfUJhcnJldHQucHJvdG90eXBlLmNvbnZlcnQ9YmFycmV0dENvbnZlcnQ7QmFycmV0dC5wcm90b3R5cGUucmV2ZXJ0PWJhcnJldHRSZXZlcnQ7QmFycmV0dC5wcm90b3R5cGUucmVkdWNlPWJhcnJldHRSZWR1Y2U7QmFycmV0dC5wcm90b3R5cGUubXVsVG89YmFycmV0dE11bFRvO0JhcnJldHQucHJvdG90eXBlLnNxclRvPWJhcnJldHRTcXJUbztmdW5jdGlvbiBibk1vZFBvdyhxLGYpe3ZhciBvPXEuYml0TGVuZ3RoKCksaCxiPW5idigxKSx2O2lmKG88PTApe3JldHVybiBifWVsc2V7aWYobzwxOCl7aD0xfWVsc2V7aWYobzw0OCl7aD0zfWVsc2V7aWYobzwxNDQpe2g9NH1lbHNle2lmKG88NzY4KXtoPTV9ZWxzZXtoPTZ9fX19fWlmKG88OCl7dj1uZXcgQ2xhc3NpYyhmKX1lbHNle2lmKGYuaXNFdmVuKCkpe3Y9bmV3IEJhcnJldHQoZil9ZWxzZXt2PW5ldyBNb250Z29tZXJ5KGYpfX12YXIgcD1uZXcgQXJyYXkoKSxkPTMscz1oLTEsYT0oMTw8aCktMTtwWzFdPXYuY29udmVydCh0aGlzKTtpZihoPjEpe3ZhciBBPW5iaSgpO3Yuc3FyVG8ocFsxXSxBKTt3aGlsZShkPD1hKXtwW2RdPW5iaSgpO3YubXVsVG8oQSxwW2QtMl0scFtkXSk7ZCs9Mn19dmFyIGw9cS50LTEseCx1PXRydWUsYz1uYmkoKSx5O289bmJpdHMocVtsXSktMTt3aGlsZShsPj0wKXtpZihvPj1zKXt4PShxW2xdPj4oby1zKSkmYX1lbHNle3g9KHFbbF0mKCgxPDwobysxKSktMSkpPDwocy1vKTtpZihsPjApe3h8PXFbbC0xXT4+KHRoaXMuREIrby1zKX19ZD1oO3doaWxlKCh4JjEpPT0wKXt4Pj49MTstLWR9aWYoKG8tPWQpPDApe28rPXRoaXMuREI7LS1sfWlmKHUpe3BbeF0uY29weVRvKGIpO3U9ZmFsc2V9ZWxzZXt3aGlsZShkPjEpe3Yuc3FyVG8oYixjKTt2LnNxclRvKGMsYik7ZC09Mn1pZihkPjApe3Yuc3FyVG8oYixjKX1lbHNle3k9YjtiPWM7Yz15fXYubXVsVG8oYyxwW3hdLGIpfXdoaWxlKGw+PTAmJihxW2xdJigxPDxvKSk9PTApe3Yuc3FyVG8oYixjKTt5PWI7Yj1jO2M9eTtpZigtLW88MCl7bz10aGlzLkRCLTE7LS1sfX19cmV0dXJuIHYucmV2ZXJ0KGIpfWZ1bmN0aW9uIGJuR0NEKGMpe3ZhciBiPSh0aGlzLnM8MCk/dGhpcy5uZWdhdGUoKTp0aGlzLmNsb25lKCk7dmFyIGg9KGMuczwwKT9jLm5lZ2F0ZSgpOmMuY2xvbmUoKTtpZihiLmNvbXBhcmVUbyhoKTwwKXt2YXIgZT1iO2I9aDtoPWV9dmFyIGQ9Yi5nZXRMb3dlc3RTZXRCaXQoKSxmPWguZ2V0TG93ZXN0U2V0Qml0KCk7aWYoZjwwKXtyZXR1cm4gYn1pZihkPGYpe2Y9ZH1pZihmPjApe2IuclNoaWZ0VG8oZixiKTtoLnJTaGlmdFRvKGYsaCl9d2hpbGUoYi5zaWdudW0oKT4wKXtpZigoZD1iLmdldExvd2VzdFNldEJpdCgpKT4wKXtiLnJTaGlmdFRvKGQsYil9aWYoKGQ9aC5nZXRMb3dlc3RTZXRCaXQoKSk+MCl7aC5yU2hpZnRUbyhkLGgpfWlmKGIuY29tcGFyZVRvKGgpPj0wKXtiLnN1YlRvKGgsYik7Yi5yU2hpZnRUbygxLGIpfWVsc2V7aC5zdWJUbyhiLGgpO2guclNoaWZ0VG8oMSxoKX19aWYoZj4wKXtoLmxTaGlmdFRvKGYsaCl9cmV0dXJuIGh9ZnVuY3Rpb24gYm5wTW9kSW50KGUpe2lmKGU8PTApe3JldHVybiAwfXZhciBjPXRoaXMuRFYlZSxiPSh0aGlzLnM8MCk/ZS0xOjA7aWYodGhpcy50PjApe2lmKGM9PTApe2I9dGhpc1swXSVlfWVsc2V7Zm9yKHZhciBhPXRoaXMudC0xO2E+PTA7LS1hKXtiPShjKmIrdGhpc1thXSklZX19fXJldHVybiBifWZ1bmN0aW9uIGJuTW9kSW52ZXJzZShmKXt2YXIgaj1mLmlzRXZlbigpO2lmKCh0aGlzLmlzRXZlbigpJiZqKXx8Zi5zaWdudW0oKT09MCl7cmV0dXJuIEJpZ0ludGVnZXIuWkVST312YXIgaT1mLmNsb25lKCksaD10aGlzLmNsb25lKCk7dmFyIGc9bmJ2KDEpLGU9bmJ2KDApLGw9bmJ2KDApLGs9bmJ2KDEpO3doaWxlKGkuc2lnbnVtKCkhPTApe3doaWxlKGkuaXNFdmVuKCkpe2kuclNoaWZ0VG8oMSxpKTtpZihqKXtpZighZy5pc0V2ZW4oKXx8IWUuaXNFdmVuKCkpe2cuYWRkVG8odGhpcyxnKTtlLnN1YlRvKGYsZSl9Zy5yU2hpZnRUbygxLGcpfWVsc2V7aWYoIWUuaXNFdmVuKCkpe2Uuc3ViVG8oZixlKX19ZS5yU2hpZnRUbygxLGUpfXdoaWxlKGguaXNFdmVuKCkpe2guclNoaWZ0VG8oMSxoKTtpZihqKXtpZighbC5pc0V2ZW4oKXx8IWsuaXNFdmVuKCkpe2wuYWRkVG8odGhpcyxsKTtrLnN1YlRvKGYsayl9bC5yU2hpZnRUbygxLGwpfWVsc2V7aWYoIWsuaXNFdmVuKCkpe2suc3ViVG8oZixrKX19ay5yU2hpZnRUbygxLGspfWlmKGkuY29tcGFyZVRvKGgpPj0wKXtpLnN1YlRvKGgsaSk7aWYoail7Zy5zdWJUbyhsLGcpfWUuc3ViVG8oayxlKX1lbHNle2guc3ViVG8oaSxoKTtpZihqKXtsLnN1YlRvKGcsbCl9ay5zdWJUbyhlLGspfX1pZihoLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkhPTApe3JldHVybiBCaWdJbnRlZ2VyLlpFUk99aWYoay5jb21wYXJlVG8oZik+PTApe3JldHVybiBrLnN1YnRyYWN0KGYpfWlmKGsuc2lnbnVtKCk8MCl7ay5hZGRUbyhmLGspfWVsc2V7cmV0dXJuIGt9aWYoay5zaWdudW0oKTwwKXtyZXR1cm4gay5hZGQoZil9ZWxzZXtyZXR1cm4ga319dmFyIGxvd3ByaW1lcz1bMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3XTt2YXIgbHBsaW09KDE8PDI2KS9sb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXTtmdW5jdGlvbiBibklzUHJvYmFibGVQcmltZShlKXt2YXIgZCxiPXRoaXMuYWJzKCk7aWYoYi50PT0xJiZiWzBdPD1sb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXSl7Zm9yKGQ9MDtkPGxvd3ByaW1lcy5sZW5ndGg7KytkKXtpZihiWzBdPT1sb3dwcmltZXNbZF0pe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9aWYoYi5pc0V2ZW4oKSl7cmV0dXJuIGZhbHNlfWQ9MTt3aGlsZShkPGxvd3ByaW1lcy5sZW5ndGgpe3ZhciBhPWxvd3ByaW1lc1tkXSxjPWQrMTt3aGlsZShjPGxvd3ByaW1lcy5sZW5ndGgmJmE8bHBsaW0pe2EqPWxvd3ByaW1lc1tjKytdfWE9Yi5tb2RJbnQoYSk7d2hpbGUoZDxjKXtpZihhJWxvd3ByaW1lc1tkKytdPT0wKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gYi5taWxsZXJSYWJpbihlKX1mdW5jdGlvbiBibnBNaWxsZXJSYWJpbihmKXt2YXIgZz10aGlzLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKTt2YXIgYz1nLmdldExvd2VzdFNldEJpdCgpO2lmKGM8PTApe3JldHVybiBmYWxzZX12YXIgaD1nLnNoaWZ0UmlnaHQoYyk7Zj0oZisxKT4+MTtpZihmPmxvd3ByaW1lcy5sZW5ndGgpe2Y9bG93cHJpbWVzLmxlbmd0aH12YXIgYj1uYmkoKTtmb3IodmFyIGU9MDtlPGY7KytlKXtiLmZyb21JbnQobG93cHJpbWVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsb3dwcmltZXMubGVuZ3RoKV0pO3ZhciBsPWIubW9kUG93KGgsdGhpcyk7aWYobC5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpIT0wJiZsLmNvbXBhcmVUbyhnKSE9MCl7dmFyIGQ9MTt3aGlsZShkKys8YyYmbC5jb21wYXJlVG8oZykhPTApe2w9bC5tb2RQb3dJbnQoMix0aGlzKTtpZihsLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSk9PTApe3JldHVybiBmYWxzZX19aWYobC5jb21wYXJlVG8oZykhPTApe3JldHVybiBmYWxzZX19fXJldHVybiB0cnVlfUJpZ0ludGVnZXIucHJvdG90eXBlLmNodW5rU2l6ZT1ibnBDaHVua1NpemU7QmlnSW50ZWdlci5wcm90b3R5cGUudG9SYWRpeD1ibnBUb1JhZGl4O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21SYWRpeD1ibnBGcm9tUmFkaXg7QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbU51bWJlcj1ibnBGcm9tTnVtYmVyO0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdHdpc2VUbz1ibnBCaXR3aXNlVG87QmlnSW50ZWdlci5wcm90b3R5cGUuY2hhbmdlQml0PWJucENoYW5nZUJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hZGRUbz1ibnBBZGRUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5kTXVsdGlwbHk9Ym5wRE11bHRpcGx5O0JpZ0ludGVnZXIucHJvdG90eXBlLmRBZGRPZmZzZXQ9Ym5wREFkZE9mZnNldDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseUxvd2VyVG89Ym5wTXVsdGlwbHlMb3dlclRvO0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VXBwZXJUbz1ibnBNdWx0aXBseVVwcGVyVG87QmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW50PWJucE1vZEludDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5taWxsZXJSYWJpbj1ibnBNaWxsZXJSYWJpbjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbG9uZT1ibkNsb25lO0JpZ0ludGVnZXIucHJvdG90eXBlLmludFZhbHVlPWJuSW50VmFsdWU7QmlnSW50ZWdlci5wcm90b3R5cGUuYnl0ZVZhbHVlPWJuQnl0ZVZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLnNob3J0VmFsdWU9Ym5TaG9ydFZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLnNpZ251bT1iblNpZ051bTtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b0J5dGVBcnJheT1iblRvQnl0ZUFycmF5O0JpZ0ludGVnZXIucHJvdG90eXBlLmVxdWFscz1ibkVxdWFscztCaWdJbnRlZ2VyLnByb3RvdHlwZS5taW49Ym5NaW47QmlnSW50ZWdlci5wcm90b3R5cGUubWF4PWJuTWF4O0JpZ0ludGVnZXIucHJvdG90eXBlLmFuZD1ibkFuZDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5vcj1ibk9yO0JpZ0ludGVnZXIucHJvdG90eXBlLnhvcj1iblhvcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmROb3Q9Ym5BbmROb3Q7QmlnSW50ZWdlci5wcm90b3R5cGUubm90PWJuTm90O0JpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0TGVmdD1iblNoaWZ0TGVmdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdFJpZ2h0PWJuU2hpZnRSaWdodDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5nZXRMb3dlc3RTZXRCaXQ9Ym5HZXRMb3dlc3RTZXRCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuYml0Q291bnQ9Ym5CaXRDb3VudDtCaWdJbnRlZ2VyLnByb3RvdHlwZS50ZXN0Qml0PWJuVGVzdEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zZXRCaXQ9Ym5TZXRCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuY2xlYXJCaXQ9Ym5DbGVhckJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5mbGlwQml0PWJuRmxpcEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hZGQ9Ym5BZGQ7QmlnSW50ZWdlci5wcm90b3R5cGUuc3VidHJhY3Q9Ym5TdWJ0cmFjdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseT1ibk11bHRpcGx5O0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdmlkZT1ibkRpdmlkZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5yZW1haW5kZXI9Ym5SZW1haW5kZXI7QmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlQW5kUmVtYWluZGVyPWJuRGl2aWRlQW5kUmVtYWluZGVyO0JpZ0ludGVnZXIucHJvdG90eXBlLm1vZFBvdz1ibk1vZFBvdztCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnZlcnNlPWJuTW9kSW52ZXJzZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5wb3c9Ym5Qb3c7QmlnSW50ZWdlci5wcm90b3R5cGUuZ2NkPWJuR0NEO0JpZ0ludGVnZXIucHJvdG90eXBlLmlzUHJvYmFibGVQcmltZT1ibklzUHJvYmFibGVQcmltZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmU9Ym5TcXVhcmU7XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbmZ1bmN0aW9uIEFyY2ZvdXIoKXt0aGlzLmk9MDt0aGlzLmo9MDt0aGlzLlM9bmV3IEFycmF5KCl9ZnVuY3Rpb24gQVJDNGluaXQoZCl7dmFyIGMsYSxiO2ZvcihjPTA7YzwyNTY7KytjKXt0aGlzLlNbY109Y31hPTA7Zm9yKGM9MDtjPDI1NjsrK2Mpe2E9KGErdGhpcy5TW2NdK2RbYyVkLmxlbmd0aF0pJjI1NTtiPXRoaXMuU1tjXTt0aGlzLlNbY109dGhpcy5TW2FdO3RoaXMuU1thXT1ifXRoaXMuaT0wO3RoaXMuaj0wfWZ1bmN0aW9uIEFSQzRuZXh0KCl7dmFyIGE7dGhpcy5pPSh0aGlzLmkrMSkmMjU1O3RoaXMuaj0odGhpcy5qK3RoaXMuU1t0aGlzLmldKSYyNTU7YT10aGlzLlNbdGhpcy5pXTt0aGlzLlNbdGhpcy5pXT10aGlzLlNbdGhpcy5qXTt0aGlzLlNbdGhpcy5qXT1hO3JldHVybiB0aGlzLlNbKGErdGhpcy5TW3RoaXMuaV0pJjI1NV19QXJjZm91ci5wcm90b3R5cGUuaW5pdD1BUkM0aW5pdDtBcmNmb3VyLnByb3RvdHlwZS5uZXh0PUFSQzRuZXh0O2Z1bmN0aW9uIHBybmdfbmV3c3RhdGUoKXtyZXR1cm4gbmV3IEFyY2ZvdXIoKX12YXIgcm5nX3BzaXplPTI1Njtcbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xyXG4gKi9cclxudmFyIHJuZ19zdGF0ZTt2YXIgcm5nX3Bvb2w7dmFyIHJuZ19wcHRyO2Z1bmN0aW9uIHJuZ19zZWVkX2ludChhKXtybmdfcG9vbFtybmdfcHB0cisrXV49YSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj44KSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj4xNikmMjU1O3JuZ19wb29sW3JuZ19wcHRyKytdXj0oYT4+MjQpJjI1NTtpZihybmdfcHB0cj49cm5nX3BzaXplKXtybmdfcHB0ci09cm5nX3BzaXplfX1mdW5jdGlvbiBybmdfc2VlZF90aW1lKCl7cm5nX3NlZWRfaW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpKX1pZihybmdfcG9vbD09bnVsbCl7cm5nX3Bvb2w9bmV3IEFycmF5KCk7cm5nX3BwdHI9MDt2YXIgdDtpZih3aW5kb3chPT11bmRlZmluZWQmJih3aW5kb3cuY3J5cHRvIT09dW5kZWZpbmVkfHx3aW5kb3cubXNDcnlwdG8hPT11bmRlZmluZWQpKXt2YXIgY3J5cHRvPXdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0bztpZihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXt2YXIgdWE9bmV3IFVpbnQ4QXJyYXkoMzIpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXModWEpO2Zvcih0PTA7dDwzMjsrK3Qpe3JuZ19wb29sW3JuZ19wcHRyKytdPXVhW3RdfX1lbHNle2lmKG5hdmlnYXRvci5hcHBOYW1lPT1cIk5ldHNjYXBlXCImJm5hdmlnYXRvci5hcHBWZXJzaW9uPFwiNVwiKXt2YXIgej13aW5kb3cuY3J5cHRvLnJhbmRvbSgzMik7Zm9yKHQ9MDt0PHoubGVuZ3RoOysrdCl7cm5nX3Bvb2xbcm5nX3BwdHIrK109ei5jaGFyQ29kZUF0KHQpJjI1NX19fX13aGlsZShybmdfcHB0cjxybmdfcHNpemUpe3Q9TWF0aC5mbG9vcig2NTUzNipNYXRoLnJhbmRvbSgpKTtybmdfcG9vbFtybmdfcHB0cisrXT10Pj4+ODtybmdfcG9vbFtybmdfcHB0cisrXT10JjI1NX1ybmdfcHB0cj0wO3JuZ19zZWVkX3RpbWUoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGUoKXtpZihybmdfc3RhdGU9PW51bGwpe3JuZ19zZWVkX3RpbWUoKTtybmdfc3RhdGU9cHJuZ19uZXdzdGF0ZSgpO3JuZ19zdGF0ZS5pbml0KHJuZ19wb29sKTtmb3Iocm5nX3BwdHI9MDtybmdfcHB0cjxybmdfcG9vbC5sZW5ndGg7KytybmdfcHB0cil7cm5nX3Bvb2xbcm5nX3BwdHJdPTB9cm5nX3BwdHI9MH1yZXR1cm4gcm5nX3N0YXRlLm5leHQoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGVzKGIpe3ZhciBhO2ZvcihhPTA7YTxiLmxlbmd0aDsrK2Epe2JbYV09cm5nX2dldF9ieXRlKCl9fWZ1bmN0aW9uIFNlY3VyZVJhbmRvbSgpe31TZWN1cmVSYW5kb20ucHJvdG90eXBlLm5leHRCeXRlcz1ybmdfZ2V0X2J5dGVzO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUJpZ0ludChiLGEpe3JldHVybiBuZXcgQmlnSW50ZWdlcihiLGEpfWZ1bmN0aW9uIGxpbmVicmsoYyxkKXt2YXIgYT1cIlwiO3ZhciBiPTA7d2hpbGUoYitkPGMubGVuZ3RoKXthKz1jLnN1YnN0cmluZyhiLGIrZCkrXCJcXG5cIjtiKz1kfXJldHVybiBhK2Muc3Vic3RyaW5nKGIsYy5sZW5ndGgpfWZ1bmN0aW9uIGJ5dGUySGV4KGEpe2lmKGE8MTYpe3JldHVyblwiMFwiK2EudG9TdHJpbmcoMTYpfWVsc2V7cmV0dXJuIGEudG9TdHJpbmcoMTYpfX1mdW5jdGlvbiBwa2NzMXBhZDIoZSxoKXtpZihoPGUubGVuZ3RoKzExKXt0aHJvd1wiTWVzc2FnZSB0b28gbG9uZyBmb3IgUlNBXCI7cmV0dXJuIG51bGx9dmFyIGc9bmV3IEFycmF5KCk7dmFyIGQ9ZS5sZW5ndGgtMTt3aGlsZShkPj0wJiZoPjApe3ZhciBmPWUuY2hhckNvZGVBdChkLS0pO2lmKGY8MTI4KXtnWy0taF09Zn1lbHNle2lmKChmPjEyNykmJihmPDIwNDgpKXtnWy0taF09KGYmNjMpfDEyODtnWy0taF09KGY+PjYpfDE5Mn1lbHNle2dbLS1oXT0oZiY2Myl8MTI4O2dbLS1oXT0oKGY+PjYpJjYzKXwxMjg7Z1stLWhdPShmPj4xMil8MjI0fX19Z1stLWhdPTA7dmFyIGI9bmV3IFNlY3VyZVJhbmRvbSgpO3ZhciBhPW5ldyBBcnJheSgpO3doaWxlKGg+Mil7YVswXT0wO3doaWxlKGFbMF09PTApe2IubmV4dEJ5dGVzKGEpfWdbLS1oXT1hWzBdfWdbLS1oXT0yO2dbLS1oXT0wO3JldHVybiBuZXcgQmlnSW50ZWdlcihnKX1mdW5jdGlvbiBvYWVwX21nZjFfYXJyKGMsYSxlKXt2YXIgYj1cIlwiLGQ9MDt3aGlsZShiLmxlbmd0aDxhKXtiKz1lKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGMuY29uY2F0KFsoZCY0Mjc4MTkwMDgwKT4+MjQsKGQmMTY3MTE2ODApPj4xNiwoZCY2NTI4MCk+PjgsZCYyNTVdKSkpO2QrPTF9cmV0dXJuIGJ9ZnVuY3Rpb24gb2FlcF9wYWQocSxhLGYsbCl7dmFyIGM9S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdDt2YXIgbz1LSlVSLmNyeXB0by5VdGlsO3ZhciBiPW51bGw7aWYoIWYpe2Y9XCJzaGExXCJ9aWYodHlwZW9mIGY9PT1cInN0cmluZ1wiKXtiPWMuZ2V0Q2Fub25pY2FsQWxnTmFtZShmKTtsPWMuZ2V0SGFzaExlbmd0aChiKTtmPWZ1bmN0aW9uKGkpe3JldHVybiBoZXh0b3JzdHIoby5oYXNoSGV4KHJzdHJ0b2hleChpKSxiKSl9fWlmKHEubGVuZ3RoKzIqbCsyPmEpe3Rocm93XCJNZXNzYWdlIHRvbyBsb25nIGZvciBSU0FcIn12YXIgaz1cIlwiLGU7Zm9yKGU9MDtlPGEtcS5sZW5ndGgtMipsLTI7ZSs9MSl7ays9XCJcXHgwMFwifXZhciBoPWYoXCJcIikraytcIlxceDAxXCIrcTt2YXIgZz1uZXcgQXJyYXkobCk7bmV3IFNlY3VyZVJhbmRvbSgpLm5leHRCeXRlcyhnKTt2YXIgaj1vYWVwX21nZjFfYXJyKGcsaC5sZW5ndGgsZik7dmFyIHA9W107Zm9yKGU9MDtlPGgubGVuZ3RoO2UrPTEpe3BbZV09aC5jaGFyQ29kZUF0KGUpXmouY2hhckNvZGVBdChlKX12YXIgbT1vYWVwX21nZjFfYXJyKHAsZy5sZW5ndGgsZik7dmFyIGQ9WzBdO2ZvcihlPTA7ZTxnLmxlbmd0aDtlKz0xKXtkW2UrMV09Z1tlXV5tLmNoYXJDb2RlQXQoZSl9cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGQuY29uY2F0KHApKX1mdW5jdGlvbiBSU0FLZXkoKXt0aGlzLm49bnVsbDt0aGlzLmU9MDt0aGlzLmQ9bnVsbDt0aGlzLnA9bnVsbDt0aGlzLnE9bnVsbDt0aGlzLmRtcDE9bnVsbDt0aGlzLmRtcTE9bnVsbDt0aGlzLmNvZWZmPW51bGx9ZnVuY3Rpb24gUlNBU2V0UHVibGljKGIsYSl7dGhpcy5pc1B1YmxpYz10cnVlO3RoaXMuaXNQcml2YXRlPWZhbHNlO2lmKHR5cGVvZiBiIT09XCJzdHJpbmdcIil7dGhpcy5uPWI7dGhpcy5lPWF9ZWxzZXtpZihiIT1udWxsJiZhIT1udWxsJiZiLmxlbmd0aD4wJiZhLmxlbmd0aD4wKXt0aGlzLm49cGFyc2VCaWdJbnQoYiwxNik7dGhpcy5lPXBhcnNlSW50KGEsMTYpfWVsc2V7dGhyb3dcIkludmFsaWQgUlNBIHB1YmxpYyBrZXlcIn19fWZ1bmN0aW9uIFJTQURvUHVibGljKGEpe3JldHVybiBhLm1vZFBvd0ludCh0aGlzLmUsdGhpcy5uKX1mdW5jdGlvbiBSU0FFbmNyeXB0KGQpe3ZhciBhPXBrY3MxcGFkMihkLCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMpO2lmKGE9PW51bGwpe3JldHVybiBudWxsfXZhciBlPXRoaXMuZG9QdWJsaWMoYSk7aWYoZT09bnVsbCl7cmV0dXJuIG51bGx9dmFyIGI9ZS50b1N0cmluZygxNik7aWYoKGIubGVuZ3RoJjEpPT0wKXtyZXR1cm4gYn1lbHNle3JldHVyblwiMFwiK2J9fWZ1bmN0aW9uIFJTQUVuY3J5cHRPQUVQKGYsZSxiKXt2YXIgYT1vYWVwX3BhZChmLCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMsZSxiKTtpZihhPT1udWxsKXtyZXR1cm4gbnVsbH12YXIgZz10aGlzLmRvUHVibGljKGEpO2lmKGc9PW51bGwpe3JldHVybiBudWxsfXZhciBkPWcudG9TdHJpbmcoMTYpO2lmKChkLmxlbmd0aCYxKT09MCl7cmV0dXJuIGR9ZWxzZXtyZXR1cm5cIjBcIitkfX1SU0FLZXkucHJvdG90eXBlLmRvUHVibGljPVJTQURvUHVibGljO1JTQUtleS5wcm90b3R5cGUuc2V0UHVibGljPVJTQVNldFB1YmxpYztSU0FLZXkucHJvdG90eXBlLmVuY3J5cHQ9UlNBRW5jcnlwdDtSU0FLZXkucHJvdG90eXBlLmVuY3J5cHRPQUVQPVJTQUVuY3J5cHRPQUVQO1JTQUtleS5wcm90b3R5cGUudHlwZT1cIlJTQVwiO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBFQ0ZpZWxkRWxlbWVudEZwKGIsYSl7dGhpcy54PWE7dGhpcy5xPWJ9ZnVuY3Rpb24gZmVGcEVxdWFscyhhKXtpZihhPT10aGlzKXtyZXR1cm4gdHJ1ZX1yZXR1cm4odGhpcy5xLmVxdWFscyhhLnEpJiZ0aGlzLnguZXF1YWxzKGEueCkpfWZ1bmN0aW9uIGZlRnBUb0JpZ0ludGVnZXIoKXtyZXR1cm4gdGhpcy54fWZ1bmN0aW9uIGZlRnBOZWdhdGUoKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5uZWdhdGUoKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcEFkZChhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5hZGQoYS50b0JpZ0ludGVnZXIoKSkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBTdWJ0cmFjdChhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5zdWJ0cmFjdChhLnRvQmlnSW50ZWdlcigpKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcE11bHRpcGx5KGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsdGhpcy54Lm11bHRpcGx5KGEudG9CaWdJbnRlZ2VyKCkpLm1vZCh0aGlzLnEpKX1mdW5jdGlvbiBmZUZwU3F1YXJlKCl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLnguc3F1YXJlKCkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBEaXZpZGUoYSl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLngubXVsdGlwbHkoYS50b0JpZ0ludGVnZXIoKS5tb2RJbnZlcnNlKHRoaXMucSkpLm1vZCh0aGlzLnEpKX1FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5lcXVhbHM9ZmVGcEVxdWFscztFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS50b0JpZ0ludGVnZXI9ZmVGcFRvQmlnSW50ZWdlcjtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5uZWdhdGU9ZmVGcE5lZ2F0ZTtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5hZGQ9ZmVGcEFkZDtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5zdWJ0cmFjdD1mZUZwU3VidHJhY3Q7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUubXVsdGlwbHk9ZmVGcE11bHRpcGx5O0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLnNxdWFyZT1mZUZwU3F1YXJlO0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLmRpdmlkZT1mZUZwRGl2aWRlO2Z1bmN0aW9uIEVDUG9pbnRGcChjLGEsZCxiKXt0aGlzLmN1cnZlPWM7dGhpcy54PWE7dGhpcy55PWQ7aWYoYj09bnVsbCl7dGhpcy56PUJpZ0ludGVnZXIuT05FfWVsc2V7dGhpcy56PWJ9dGhpcy56aW52PW51bGx9ZnVuY3Rpb24gcG9pbnRGcEdldFgoKXtpZih0aGlzLnppbnY9PW51bGwpe3RoaXMuemludj10aGlzLnoubW9kSW52ZXJzZSh0aGlzLmN1cnZlLnEpfXJldHVybiB0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnppbnYpLm1vZCh0aGlzLmN1cnZlLnEpKX1mdW5jdGlvbiBwb2ludEZwR2V0WSgpe2lmKHRoaXMuemludj09bnVsbCl7dGhpcy56aW52PXRoaXMuei5tb2RJbnZlcnNlKHRoaXMuY3VydmUucSl9cmV0dXJuIHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIodGhpcy55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMuemludikubW9kKHRoaXMuY3VydmUucSkpfWZ1bmN0aW9uIHBvaW50RnBFcXVhbHMoYSl7aWYoYT09dGhpcyl7cmV0dXJuIHRydWV9aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiBhLmlzSW5maW5pdHkoKX1pZihhLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpfXZhciBjLGI7Yz1hLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkoYS56KSkubW9kKHRoaXMuY3VydmUucSk7aWYoIWMuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpe3JldHVybiBmYWxzZX1iPWEueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShhLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTtyZXR1cm4gYi5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKX1mdW5jdGlvbiBwb2ludEZwSXNJbmZpbml0eSgpe2lmKCh0aGlzLng9PW51bGwpJiYodGhpcy55PT1udWxsKSl7cmV0dXJuIHRydWV9cmV0dXJuIHRoaXMuei5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSYmIXRoaXMueS50b0JpZ0ludGVnZXIoKS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKX1mdW5jdGlvbiBwb2ludEZwTmVnYXRlKCl7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLngsdGhpcy55Lm5lZ2F0ZSgpLHRoaXMueil9ZnVuY3Rpb24gcG9pbnRGcEFkZChsKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGx9aWYobC5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfXZhciBwPWwueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShsLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgbz1sLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkobC56KSkubW9kKHRoaXMuY3VydmUucSk7aWYoQmlnSW50ZWdlci5aRVJPLmVxdWFscyhvKSl7aWYoQmlnSW50ZWdlci5aRVJPLmVxdWFscyhwKSl7cmV0dXJuIHRoaXMudHdpY2UoKX1yZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBqPW5ldyBCaWdJbnRlZ2VyKFwiM1wiKTt2YXIgZT10aGlzLngudG9CaWdJbnRlZ2VyKCk7dmFyIG49dGhpcy55LnRvQmlnSW50ZWdlcigpO3ZhciBjPWwueC50b0JpZ0ludGVnZXIoKTt2YXIgaz1sLnkudG9CaWdJbnRlZ2VyKCk7dmFyIG09by5zcXVhcmUoKTt2YXIgaT1tLm11bHRpcGx5KG8pO3ZhciBkPWUubXVsdGlwbHkobSk7dmFyIGc9cC5zcXVhcmUoKS5tdWx0aXBseSh0aGlzLnopO3ZhciBhPWcuc3VidHJhY3QoZC5zaGlmdExlZnQoMSkpLm11bHRpcGx5KGwueikuc3VidHJhY3QoaSkubXVsdGlwbHkobykubW9kKHRoaXMuY3VydmUucSk7dmFyIGg9ZC5tdWx0aXBseShqKS5tdWx0aXBseShwKS5zdWJ0cmFjdChuLm11bHRpcGx5KGkpKS5zdWJ0cmFjdChnLm11bHRpcGx5KHApKS5tdWx0aXBseShsLnopLmFkZChwLm11bHRpcGx5KGkpKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgZj1pLm11bHRpcGx5KHRoaXMueikubXVsdGlwbHkobC56KS5tb2QodGhpcy5jdXJ2ZS5xKTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoYSksdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihoKSxmKX1mdW5jdGlvbiBwb2ludEZwVHdpY2UoKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy55LnRvQmlnSW50ZWdlcigpLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBnPW5ldyBCaWdJbnRlZ2VyKFwiM1wiKTt2YXIgYz10aGlzLngudG9CaWdJbnRlZ2VyKCk7dmFyIGg9dGhpcy55LnRvQmlnSW50ZWdlcigpO3ZhciBlPWgubXVsdGlwbHkodGhpcy56KTt2YXIgaj1lLm11bHRpcGx5KGgpLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBpPXRoaXMuY3VydmUuYS50b0JpZ0ludGVnZXIoKTt2YXIgaz1jLnNxdWFyZSgpLm11bHRpcGx5KGcpO2lmKCFCaWdJbnRlZ2VyLlpFUk8uZXF1YWxzKGkpKXtrPWsuYWRkKHRoaXMuei5zcXVhcmUoKS5tdWx0aXBseShpKSl9az1rLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBiPWsuc3F1YXJlKCkuc3VidHJhY3QoYy5zaGlmdExlZnQoMykubXVsdGlwbHkoaikpLnNoaWZ0TGVmdCgxKS5tdWx0aXBseShlKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgZj1rLm11bHRpcGx5KGcpLm11bHRpcGx5KGMpLnN1YnRyYWN0KGouc2hpZnRMZWZ0KDEpKS5zaGlmdExlZnQoMikubXVsdGlwbHkoaikuc3VidHJhY3Qoay5zcXVhcmUoKS5tdWx0aXBseShrKSkubW9kKHRoaXMuY3VydmUucSk7dmFyIGQ9ZS5zcXVhcmUoKS5tdWx0aXBseShlKS5zaGlmdExlZnQoMykubW9kKHRoaXMuY3VydmUucSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKGIpLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoZiksZCl9ZnVuY3Rpb24gcG9pbnRGcE11bHRpcGx5KGQpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXtyZXR1cm4gdGhpc31pZihkLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBtPWQ7dmFyIGw9bS5tdWx0aXBseShuZXcgQmlnSW50ZWdlcihcIjNcIikpO3ZhciBiPXRoaXMubmVnYXRlKCk7dmFyIGo9dGhpczt2YXIgcT10aGlzLmN1cnZlLnEuc3VidHJhY3QoZCk7dmFyIG89cS5tdWx0aXBseShuZXcgQmlnSW50ZWdlcihcIjNcIikpO3ZhciBjPW5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLngsdGhpcy55KTt2YXIgYT1jLm5lZ2F0ZSgpO3ZhciBnO2ZvcihnPWwuYml0TGVuZ3RoKCktMjtnPjA7LS1nKXtqPWoudHdpY2UoKTt2YXIgbj1sLnRlc3RCaXQoZyk7dmFyIGY9bS50ZXN0Qml0KGcpO2lmKG4hPWYpe2o9ai5hZGQobj90aGlzOmIpfX1mb3IoZz1vLmJpdExlbmd0aCgpLTI7Zz4wOy0tZyl7Yz1jLnR3aWNlKCk7dmFyIHA9by50ZXN0Qml0KGcpO3ZhciByPXEudGVzdEJpdChnKTtpZihwIT1yKXtjPWMuYWRkKHA/YzphKX19cmV0dXJuIGp9ZnVuY3Rpb24gcG9pbnRGcE11bHRpcGx5VHdvKGMsYSxiKXt2YXIgZDtpZihjLmJpdExlbmd0aCgpPmIuYml0TGVuZ3RoKCkpe2Q9Yy5iaXRMZW5ndGgoKS0xfWVsc2V7ZD1iLmJpdExlbmd0aCgpLTF9dmFyIGY9dGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpO3ZhciBlPXRoaXMuYWRkKGEpO3doaWxlKGQ+PTApe2Y9Zi50d2ljZSgpO2lmKGMudGVzdEJpdChkKSl7aWYoYi50ZXN0Qml0KGQpKXtmPWYuYWRkKGUpfWVsc2V7Zj1mLmFkZCh0aGlzKX19ZWxzZXtpZihiLnRlc3RCaXQoZCkpe2Y9Zi5hZGQoYSl9fS0tZH1yZXR1cm4gZn1FQ1BvaW50RnAucHJvdG90eXBlLmdldFg9cG9pbnRGcEdldFg7RUNQb2ludEZwLnByb3RvdHlwZS5nZXRZPXBvaW50RnBHZXRZO0VDUG9pbnRGcC5wcm90b3R5cGUuZXF1YWxzPXBvaW50RnBFcXVhbHM7RUNQb2ludEZwLnByb3RvdHlwZS5pc0luZmluaXR5PXBvaW50RnBJc0luZmluaXR5O0VDUG9pbnRGcC5wcm90b3R5cGUubmVnYXRlPXBvaW50RnBOZWdhdGU7RUNQb2ludEZwLnByb3RvdHlwZS5hZGQ9cG9pbnRGcEFkZDtFQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlPXBvaW50RnBUd2ljZTtFQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5PXBvaW50RnBNdWx0aXBseTtFQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5VHdvPXBvaW50RnBNdWx0aXBseVR3bztmdW5jdGlvbiBFQ0N1cnZlRnAoZSxkLGMpe3RoaXMucT1lO3RoaXMuYT10aGlzLmZyb21CaWdJbnRlZ2VyKGQpO3RoaXMuYj10aGlzLmZyb21CaWdJbnRlZ2VyKGMpO3RoaXMuaW5maW5pdHk9bmV3IEVDUG9pbnRGcCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gY3VydmVGcEdldFEoKXtyZXR1cm4gdGhpcy5xfWZ1bmN0aW9uIGN1cnZlRnBHZXRBKCl7cmV0dXJuIHRoaXMuYX1mdW5jdGlvbiBjdXJ2ZUZwR2V0Qigpe3JldHVybiB0aGlzLmJ9ZnVuY3Rpb24gY3VydmVGcEVxdWFscyhhKXtpZihhPT10aGlzKXtyZXR1cm4gdHJ1ZX1yZXR1cm4odGhpcy5xLmVxdWFscyhhLnEpJiZ0aGlzLmEuZXF1YWxzKGEuYSkmJnRoaXMuYi5lcXVhbHMoYS5iKSl9ZnVuY3Rpb24gY3VydmVGcEdldEluZmluaXR5KCl7cmV0dXJuIHRoaXMuaW5maW5pdHl9ZnVuY3Rpb24gY3VydmVGcEZyb21CaWdJbnRlZ2VyKGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsYSl9ZnVuY3Rpb24gY3VydmVGcERlY29kZVBvaW50SGV4KGQpe3N3aXRjaChwYXJzZUludChkLnN1YnN0cigwLDIpLDE2KSl7Y2FzZSAwOnJldHVybiB0aGlzLmluZmluaXR5O2Nhc2UgMjpjYXNlIDM6cmV0dXJuIG51bGw7Y2FzZSA0OmNhc2UgNjpjYXNlIDc6dmFyIGE9KGQubGVuZ3RoLTIpLzI7dmFyIGM9ZC5zdWJzdHIoMixhKTt2YXIgYj1kLnN1YnN0cihhKzIsYSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcyx0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKGMsMTYpKSx0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKGIsMTYpKSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19RUNDdXJ2ZUZwLnByb3RvdHlwZS5nZXRRPWN1cnZlRnBHZXRRO0VDQ3VydmVGcC5wcm90b3R5cGUuZ2V0QT1jdXJ2ZUZwR2V0QTtFQ0N1cnZlRnAucHJvdG90eXBlLmdldEI9Y3VydmVGcEdldEI7RUNDdXJ2ZUZwLnByb3RvdHlwZS5lcXVhbHM9Y3VydmVGcEVxdWFscztFQ0N1cnZlRnAucHJvdG90eXBlLmdldEluZmluaXR5PWN1cnZlRnBHZXRJbmZpbml0eTtFQ0N1cnZlRnAucHJvdG90eXBlLmZyb21CaWdJbnRlZ2VyPWN1cnZlRnBGcm9tQmlnSW50ZWdlcjtFQ0N1cnZlRnAucHJvdG90eXBlLmRlY29kZVBvaW50SGV4PWN1cnZlRnBEZWNvZGVQb2ludEhleDtcbi8qISAoYykgU3RlZmFuIFRob21hcyB8IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luanMvYml0Y29pbmpzLWxpYlxyXG4gKi9cclxuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuZ2V0Qnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKCh0aGlzLnRvQmlnSW50ZWdlcigpLmJpdExlbmd0aCgpKzcpLzgpfTtFQ1BvaW50RnAucHJvdG90eXBlLmdldEVuY29kZWQ9ZnVuY3Rpb24oYyl7dmFyIGQ9ZnVuY3Rpb24oaCxmKXt2YXIgZz1oLnRvQnl0ZUFycmF5VW5zaWduZWQoKTtpZihmPGcubGVuZ3RoKXtnPWcuc2xpY2UoZy5sZW5ndGgtZil9ZWxzZXt3aGlsZShmPmcubGVuZ3RoKXtnLnVuc2hpZnQoMCl9fXJldHVybiBnfTt2YXIgYT10aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKTt2YXIgZT10aGlzLmdldFkoKS50b0JpZ0ludGVnZXIoKTt2YXIgYj1kKGEsMzIpO2lmKGMpe2lmKGUuaXNFdmVuKCkpe2IudW5zaGlmdCgyKX1lbHNle2IudW5zaGlmdCgzKX19ZWxzZXtiLnVuc2hpZnQoNCk7Yj1iLmNvbmNhdChkKGUsMzIpKX1yZXR1cm4gYn07RUNQb2ludEZwLmRlY29kZUZyb209ZnVuY3Rpb24oZyxjKXt2YXIgZj1jWzBdO3ZhciBlPWMubGVuZ3RoLTE7dmFyIGQ9Yy5zbGljZSgxLDErZS8yKTt2YXIgYj1jLnNsaWNlKDErZS8yLDErZSk7ZC51bnNoaWZ0KDApO2IudW5zaGlmdCgwKTt2YXIgYT1uZXcgQmlnSW50ZWdlcihkKTt2YXIgaD1uZXcgQmlnSW50ZWdlcihiKTtyZXR1cm4gbmV3IEVDUG9pbnRGcChnLGcuZnJvbUJpZ0ludGVnZXIoYSksZy5mcm9tQmlnSW50ZWdlcihoKSl9O0VDUG9pbnRGcC5kZWNvZGVGcm9tSGV4PWZ1bmN0aW9uKGcsYyl7dmFyIGY9Yy5zdWJzdHIoMCwyKTt2YXIgZT1jLmxlbmd0aC0yO3ZhciBkPWMuc3Vic3RyKDIsZS8yKTt2YXIgYj1jLnN1YnN0cigyK2UvMixlLzIpO3ZhciBhPW5ldyBCaWdJbnRlZ2VyKGQsMTYpO3ZhciBoPW5ldyBCaWdJbnRlZ2VyKGIsMTYpO3JldHVybiBuZXcgRUNQb2ludEZwKGcsZy5mcm9tQmlnSW50ZWdlcihhKSxnLmZyb21CaWdJbnRlZ2VyKGgpKX07RUNQb2ludEZwLnByb3RvdHlwZS5hZGQyRD1mdW5jdGlvbihjKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGN9aWYoYy5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfWlmKHRoaXMueC5lcXVhbHMoYy54KSl7aWYodGhpcy55LmVxdWFscyhjLnkpKXtyZXR1cm4gdGhpcy50d2ljZSgpfXJldHVybiB0aGlzLmN1cnZlLmdldEluZmluaXR5KCl9dmFyIGc9Yy54LnN1YnRyYWN0KHRoaXMueCk7dmFyIGU9Yy55LnN1YnRyYWN0KHRoaXMueSk7dmFyIGE9ZS5kaXZpZGUoZyk7dmFyIGQ9YS5zcXVhcmUoKS5zdWJ0cmFjdCh0aGlzLngpLnN1YnRyYWN0KGMueCk7dmFyIGY9YS5tdWx0aXBseSh0aGlzLnguc3VidHJhY3QoZCkpLnN1YnRyYWN0KHRoaXMueSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSxkLGYpfTtFQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlMkQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy55LnRvQmlnSW50ZWdlcigpLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBiPXRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKDIpKTt2YXIgZT10aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZigzKSk7dmFyIGE9dGhpcy54LnNxdWFyZSgpLm11bHRpcGx5KGUpLmFkZCh0aGlzLmN1cnZlLmEpLmRpdmlkZSh0aGlzLnkubXVsdGlwbHkoYikpO3ZhciBjPWEuc3F1YXJlKCkuc3VidHJhY3QodGhpcy54Lm11bHRpcGx5KGIpKTt2YXIgZD1hLm11bHRpcGx5KHRoaXMueC5zdWJ0cmFjdChjKSkuc3VidHJhY3QodGhpcy55KTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLGMsZCl9O0VDUG9pbnRGcC5wcm90b3R5cGUubXVsdGlwbHkyRD1mdW5jdGlvbihiKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYoYi5zaWdudW0oKT09MCl7cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgZz1iO3ZhciBmPWcubXVsdGlwbHkobmV3IEJpZ0ludGVnZXIoXCIzXCIpKTt2YXIgbD10aGlzLm5lZ2F0ZSgpO3ZhciBkPXRoaXM7dmFyIGM7Zm9yKGM9Zi5iaXRMZW5ndGgoKS0yO2M+MDstLWMpe2Q9ZC50d2ljZSgpO3ZhciBhPWYudGVzdEJpdChjKTt2YXIgaj1nLnRlc3RCaXQoYyk7aWYoYSE9ail7ZD1kLmFkZDJEKGE/dGhpczpsKX19cmV0dXJuIGR9O0VDUG9pbnRGcC5wcm90b3R5cGUuaXNPbkN1cnZlPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGk9dGhpcy5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGY9dGhpcy5jdXJ2ZS5nZXRBKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGM9dGhpcy5jdXJ2ZS5nZXRCKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGg9dGhpcy5jdXJ2ZS5nZXRRKCk7dmFyIGU9aS5tdWx0aXBseShpKS5tb2QoaCk7dmFyIGc9ZC5tdWx0aXBseShkKS5tdWx0aXBseShkKS5hZGQoZi5tdWx0aXBseShkKSkuYWRkKGMpLm1vZChoKTtyZXR1cm4gZS5lcXVhbHMoZyl9O0VDUG9pbnRGcC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIihcIit0aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpK1wiLFwiK3RoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkrXCIpXCJ9O0VDUG9pbnRGcC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmN1cnZlLmdldFEoKTtpZih0aGlzLmlzSW5maW5pdHkoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgYXQgaW5maW5pdHkuXCIpfXZhciBhPXRoaXMuZ2V0WCgpLnRvQmlnSW50ZWdlcigpO3ZhciBiPXRoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpO2lmKGEuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHxhLmNvbXBhcmVUbyhjLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKSk+MCl7dGhyb3cgbmV3IEVycm9yKFwieCBjb29yZGluYXRlIG91dCBvZiBib3VuZHNcIil9aWYoYi5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPDB8fGIuY29tcGFyZVRvKGMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKT4wKXt0aHJvdyBuZXcgRXJyb3IoXCJ5IGNvb3JkaW5hdGUgb3V0IG9mIGJvdW5kc1wiKX1pZighdGhpcy5pc09uQ3VydmUoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgbm90IG9uIHRoZSBjdXJ2ZS5cIil9aWYodGhpcy5tdWx0aXBseShjKS5pc0luZmluaXR5KCkpe3Rocm93IG5ldyBFcnJvcihcIlBvaW50IGlzIG5vdCBhIHNjYWxhciBtdWx0aXBsZSBvZiBHLlwiKX1yZXR1cm4gdHJ1ZX07XG4vKiEgTWlrZSBTYW11ZWwgKGMpIDIwMDkgfCBjb2RlLmdvb2dsZS5jb20vcC9qc29uLXNhbnMtZXZhbFxyXG4gKi9cclxudmFyIGpzb25QYXJzZT0oZnVuY3Rpb24oKXt2YXIgZT1cIig/Oi0/XFxcXGIoPzowfFsxLTldWzAtOV0qKSg/OlxcXFwuWzAtOV0rKT8oPzpbZUVdWystXT9bMC05XSspP1xcXFxiKVwiO3ZhciBqPScoPzpbXlxcXFwwLVxcXFx4MDhcXFxceDBhLVxcXFx4MWZcIlxcXFxcXFxcXXxcXFxcXFxcXCg/OltcIi9cXFxcXFxcXGJmbnJ0XXx1WzAtOUEtRmEtZl17NH0pKSc7dmFyIGk9Jyg/OlwiJytqKycqXCIpJzt2YXIgZD1uZXcgUmVnRXhwKFwiKD86ZmFsc2V8dHJ1ZXxudWxsfFtcXFxce1xcXFx9XFxcXFtcXFxcXV18XCIrZStcInxcIitpK1wiKVwiLFwiZ1wiKTt2YXIgaz1uZXcgUmVnRXhwKFwiXFxcXFxcXFwoPzooW151XSl8dSguezR9KSlcIixcImdcIik7dmFyIGc9eydcIic6J1wiJyxcIi9cIjpcIi9cIixcIlxcXFxcIjpcIlxcXFxcIixiOlwiXFxiXCIsZjpcIlxcZlwiLG46XCJcXG5cIixyOlwiXFxyXCIsdDpcIlxcdFwifTtmdW5jdGlvbiBoKGwsbSxuKXtyZXR1cm4gbT9nW21dOlN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobiwxNikpfXZhciBjPW5ldyBTdHJpbmcoXCJcIik7dmFyIGE9XCJcXFxcXCI7dmFyIGY9e1wie1wiOk9iamVjdCxcIltcIjpBcnJheX07dmFyIGI9T2JqZWN0Lmhhc093blByb3BlcnR5O3JldHVybiBmdW5jdGlvbih1LHEpe3ZhciBwPXUubWF0Y2goZCk7dmFyIHg7dmFyIHY9cFswXTt2YXIgbD1mYWxzZTtpZihcIntcIj09PXYpe3g9e319ZWxzZXtpZihcIltcIj09PXYpe3g9W119ZWxzZXt4PVtdO2w9dHJ1ZX19dmFyIHQ7dmFyIHI9W3hdO2Zvcih2YXIgbz0xLWwsbT1wLmxlbmd0aDtvPG07KytvKXt2PXBbb107dmFyIHc7c3dpdGNoKHYuY2hhckNvZGVBdCgwKSl7ZGVmYXVsdDp3PXJbMF07d1t0fHx3Lmxlbmd0aF09Kyh2KTt0PXZvaWQgMDticmVhaztjYXNlIDM0OnY9di5zdWJzdHJpbmcoMSx2Lmxlbmd0aC0xKTtpZih2LmluZGV4T2YoYSkhPT0tMSl7dj12LnJlcGxhY2UoayxoKX13PXJbMF07aWYoIXQpe2lmKHcgaW5zdGFuY2VvZiBBcnJheSl7dD13Lmxlbmd0aH1lbHNle3Q9dnx8YzticmVha319d1t0XT12O3Q9dm9pZCAwO2JyZWFrO2Nhc2UgOTE6dz1yWzBdO3IudW5zaGlmdCh3W3R8fHcubGVuZ3RoXT1bXSk7dD12b2lkIDA7YnJlYWs7Y2FzZSA5MzpyLnNoaWZ0KCk7YnJlYWs7Y2FzZSAxMDI6dz1yWzBdO3dbdHx8dy5sZW5ndGhdPWZhbHNlO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTEwOnc9clswXTt3W3R8fHcubGVuZ3RoXT1udWxsO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTE2Onc9clswXTt3W3R8fHcubGVuZ3RoXT10cnVlO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTIzOnc9clswXTtyLnVuc2hpZnQod1t0fHx3Lmxlbmd0aF09e30pO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTI1OnIuc2hpZnQoKTticmVha319aWYobCl7aWYoci5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoKX14PXhbMF19ZWxzZXtpZihyLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCl9fWlmKHEpe3ZhciBzPWZ1bmN0aW9uKEMsQil7dmFyIEQ9Q1tCXTtpZihEJiZ0eXBlb2YgRD09PVwib2JqZWN0XCIpe3ZhciBuPW51bGw7Zm9yKHZhciB6IGluIEQpe2lmKGIuY2FsbChELHopJiZEIT09Qyl7dmFyIHk9cyhELHopO2lmKHkhPT12b2lkIDApe0Rbel09eX1lbHNle2lmKCFuKXtuPVtdfW4ucHVzaCh6KX19fWlmKG4pe2Zvcih2YXIgQT1uLmxlbmd0aDstLUE+PTA7KXtkZWxldGUgRFtuW0FdXX19fXJldHVybiBxLmNhbGwoQyxCLEQpfTt4PXMoe1wiXCI6eH0sXCJcIil9cmV0dXJuIHh9fSkoKTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5hc24xPT1cInVuZGVmaW5lZFwifHwhS0pVUi5hc24xKXtLSlVSLmFzbjE9e319S0pVUi5hc24xLkFTTjFVdGlsPW5ldyBmdW5jdGlvbigpe3RoaXMuaW50ZWdlclRvQnl0ZUhleD1mdW5jdGlvbihhKXt2YXIgYj1hLnRvU3RyaW5nKDE2KTtpZigoYi5sZW5ndGglMik9PTEpe2I9XCIwXCIrYn1yZXR1cm4gYn07dGhpcy5iaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleD1mdW5jdGlvbihqKXt2YXIgZj1qLnRvU3RyaW5nKDE2KTtpZihmLnN1YnN0cigwLDEpIT1cIi1cIil7aWYoZi5sZW5ndGglMj09MSl7Zj1cIjBcIitmfWVsc2V7aWYoIWYubWF0Y2goL15bMC03XS8pKXtmPVwiMDBcIitmfX19ZWxzZXt2YXIgYT1mLnN1YnN0cigxKTt2YXIgZT1hLmxlbmd0aDtpZihlJTI9PTEpe2UrPTF9ZWxzZXtpZighZi5tYXRjaCgvXlswLTddLykpe2UrPTJ9fXZhciBnPVwiXCI7Zm9yKHZhciBkPTA7ZDxlO2QrKyl7Zys9XCJmXCJ9dmFyIGM9bmV3IEJpZ0ludGVnZXIoZywxNik7dmFyIGI9Yy54b3IoaikuYWRkKEJpZ0ludGVnZXIuT05FKTtmPWIudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14tLyxcIlwiKX1yZXR1cm4gZn07dGhpcy5nZXRQRU1TdHJpbmdGcm9tSGV4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGhleHRvcGVtKGEsYil9O3RoaXMubmV3T2JqZWN0PWZ1bmN0aW9uKGspe3ZhciBGPUtKVVIsbz1GLmFzbjEsdj1vLkFTTjFPYmplY3QsQj1vLkRFUkJvb2xlYW4sZT1vLkRFUkludGVnZXIsdD1vLkRFUkJpdFN0cmluZyxoPW8uREVST2N0ZXRTdHJpbmcseD1vLkRFUk51bGwseT1vLkRFUk9iamVjdElkZW50aWZpZXIsbT1vLkRFUkVudW1lcmF0ZWQsZz1vLkRFUlVURjhTdHJpbmcsZj1vLkRFUk51bWVyaWNTdHJpbmcsQT1vLkRFUlByaW50YWJsZVN0cmluZyx3PW8uREVSVGVsZXRleFN0cmluZyxxPW8uREVSSUE1U3RyaW5nLEU9by5ERVJVVENUaW1lLGo9by5ERVJHZW5lcmFsaXplZFRpbWUsYj1vLkRFUlZpc2libGVTdHJpbmcsbD1vLkRFUkJNUFN0cmluZyxuPW8uREVSU2VxdWVuY2UsYz1vLkRFUlNldCxzPW8uREVSVGFnZ2VkT2JqZWN0LHA9by5BU04xVXRpbC5uZXdPYmplY3Q7aWYoayBpbnN0YW5jZW9mIG8uQVNOMU9iamVjdCl7cmV0dXJuIGt9dmFyIHU9T2JqZWN0LmtleXMoayk7aWYodS5sZW5ndGghPTEpe3Rocm93IG5ldyBFcnJvcihcImtleSBvZiBwYXJhbSBzaGFsbCBiZSBvbmx5IG9uZS5cIil9dmFyIEg9dVswXTtpZihcIjphc24xOmJvb2w6aW50OmJpdHN0cjpvY3RzdHI6bnVsbDpvaWQ6ZW51bTp1dGY4c3RyOm51bXN0cjpwcm5zdHI6dGVsc3RyOmlhNXN0cjp1dGN0aW1lOmdlbnRpbWU6dmlzc3RyOmJtcHN0cjpzZXE6c2V0OnRhZzpcIi5pbmRleE9mKFwiOlwiK0grXCI6XCIpPT0tMSl7dGhyb3cgbmV3IEVycm9yKFwidW5kZWZpbmVkIGtleTogXCIrSCl9aWYoSD09XCJib29sXCIpe3JldHVybiBuZXcgQihrW0hdKX1pZihIPT1cImludFwiKXtyZXR1cm4gbmV3IGUoa1tIXSl9aWYoSD09XCJiaXRzdHJcIil7cmV0dXJuIG5ldyB0KGtbSF0pfWlmKEg9PVwib2N0c3RyXCIpe3JldHVybiBuZXcgaChrW0hdKX1pZihIPT1cIm51bGxcIil7cmV0dXJuIG5ldyB4KGtbSF0pfWlmKEg9PVwib2lkXCIpe3JldHVybiBuZXcgeShrW0hdKX1pZihIPT1cImVudW1cIil7cmV0dXJuIG5ldyBtKGtbSF0pfWlmKEg9PVwidXRmOHN0clwiKXtyZXR1cm4gbmV3IGcoa1tIXSl9aWYoSD09XCJudW1zdHJcIil7cmV0dXJuIG5ldyBmKGtbSF0pfWlmKEg9PVwicHJuc3RyXCIpe3JldHVybiBuZXcgQShrW0hdKX1pZihIPT1cInRlbHN0clwiKXtyZXR1cm4gbmV3IHcoa1tIXSl9aWYoSD09XCJpYTVzdHJcIil7cmV0dXJuIG5ldyBxKGtbSF0pfWlmKEg9PVwidXRjdGltZVwiKXtyZXR1cm4gbmV3IEUoa1tIXSl9aWYoSD09XCJnZW50aW1lXCIpe3JldHVybiBuZXcgaihrW0hdKX1pZihIPT1cInZpc3N0clwiKXtyZXR1cm4gbmV3IGIoa1tIXSl9aWYoSD09XCJibXBzdHJcIil7cmV0dXJuIG5ldyBsKGtbSF0pfWlmKEg9PVwiYXNuMVwiKXtyZXR1cm4gbmV3IHYoa1tIXSl9aWYoSD09XCJzZXFcIil7dmFyIGQ9a1tIXTt2YXIgRz1bXTtmb3IodmFyIHo9MDt6PGQubGVuZ3RoO3orKyl7dmFyIEQ9cChkW3pdKTtHLnB1c2goRCl9cmV0dXJuIG5ldyBuKHthcnJheTpHfSl9aWYoSD09XCJzZXRcIil7dmFyIGQ9a1tIXTt2YXIgRz1bXTtmb3IodmFyIHo9MDt6PGQubGVuZ3RoO3orKyl7dmFyIEQ9cChkW3pdKTtHLnB1c2goRCl9cmV0dXJuIG5ldyBjKHthcnJheTpHfSl9aWYoSD09XCJ0YWdcIil7dmFyIEM9a1tIXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQyk9PT1cIltvYmplY3QgQXJyYXldXCImJkMubGVuZ3RoPT0zKXt2YXIgcj1wKENbMl0pO3JldHVybiBuZXcgcyh7dGFnOkNbMF0sZXhwbGljaXQ6Q1sxXSxvYmo6cn0pfWVsc2V7cmV0dXJuIG5ldyBzKEMpfX19O3RoaXMuanNvblRvQVNOMUhFWD1mdW5jdGlvbihiKXt2YXIgYT10aGlzLm5ld09iamVjdChiKTtyZXR1cm4gYS5nZXRFbmNvZGVkSGV4KCl9fTtLSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQ9ZnVuY3Rpb24oYSl7dmFyIGo9XCJcIjt2YXIgaz1wYXJzZUludChhLnN1YnN0cigwLDIpLDE2KTt2YXIgZD1NYXRoLmZsb29yKGsvNDApO3ZhciBjPWslNDA7dmFyIGo9ZCtcIi5cIitjO3ZhciBlPVwiXCI7Zm9yKHZhciBmPTI7ZjxhLmxlbmd0aDtmKz0yKXt2YXIgZz1wYXJzZUludChhLnN1YnN0cihmLDIpLDE2KTt2YXIgaD0oXCIwMDAwMDAwMFwiK2cudG9TdHJpbmcoMikpLnNsaWNlKC04KTtlPWUraC5zdWJzdHIoMSw3KTtpZihoLnN1YnN0cigwLDEpPT1cIjBcIil7dmFyIGI9bmV3IEJpZ0ludGVnZXIoZSwyKTtqPWorXCIuXCIrYi50b1N0cmluZygxMCk7ZT1cIlwifX1yZXR1cm4gan07S0pVUi5hc24xLkFTTjFVdGlsLm9pZEludFRvSGV4PWZ1bmN0aW9uKGYpe3ZhciBlPWZ1bmN0aW9uKGEpe3ZhciBrPWEudG9TdHJpbmcoMTYpO2lmKGsubGVuZ3RoPT0xKXtrPVwiMFwiK2t9cmV0dXJuIGt9O3ZhciBkPWZ1bmN0aW9uKG8pe3ZhciBuPVwiXCI7dmFyIGs9bmV3IEJpZ0ludGVnZXIobywxMCk7dmFyIGE9ay50b1N0cmluZygyKTt2YXIgbD03LWEubGVuZ3RoJTc7aWYobD09Nyl7bD0wfXZhciBxPVwiXCI7Zm9yKHZhciBtPTA7bTxsO20rKyl7cSs9XCIwXCJ9YT1xK2E7Zm9yKHZhciBtPTA7bTxhLmxlbmd0aC0xO20rPTcpe3ZhciBwPWEuc3Vic3RyKG0sNyk7aWYobSE9YS5sZW5ndGgtNyl7cD1cIjFcIitwfW4rPWUocGFyc2VJbnQocCwyKSl9cmV0dXJuIG59O2lmKCFmLm1hdGNoKC9eWzAtOS5dKyQvKSl7dGhyb3dcIm1hbGZvcm1lZCBvaWQgc3RyaW5nOiBcIitmfXZhciBnPVwiXCI7dmFyIGI9Zi5zcGxpdChcIi5cIik7dmFyIGo9cGFyc2VJbnQoYlswXSkqNDArcGFyc2VJbnQoYlsxXSk7Zys9ZShqKTtiLnNwbGljZSgwLDIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXtnKz1kKGJbY10pfXJldHVybiBnfTtLSlVSLmFzbjEuQVNOMU9iamVjdD1mdW5jdGlvbihlKXt2YXIgYz10cnVlO3ZhciBiPW51bGw7dmFyIGQ9XCIwMFwiO3ZhciBmPVwiMDBcIjt2YXIgYT1cIlwiO3RoaXMucGFyYW1zPW51bGw7dGhpcy5nZXRMZW5ndGhIZXhGcm9tVmFsdWU9ZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5oVj09XCJ1bmRlZmluZWRcInx8dGhpcy5oVj09bnVsbCl7dGhyb3cgbmV3IEVycm9yKFwidGhpcy5oViBpcyBudWxsIG9yIHVuZGVmaW5lZFwiKX1pZih0aGlzLmhWLmxlbmd0aCUyPT0xKXt0aHJvdyBuZXcgRXJyb3IoXCJ2YWx1ZSBoZXggbXVzdCBiZSBldmVuIGxlbmd0aDogbj1cIithLmxlbmd0aCtcIix2PVwiK3RoaXMuaFYpfXZhciBqPXRoaXMuaFYubGVuZ3RoLzI7dmFyIGk9ai50b1N0cmluZygxNik7aWYoaS5sZW5ndGglMj09MSl7aT1cIjBcIitpfWlmKGo8MTI4KXtyZXR1cm4gaX1lbHNle3ZhciBoPWkubGVuZ3RoLzI7aWYoaD4xNSl7dGhyb3dcIkFTTi4xIGxlbmd0aCB0b28gbG9uZyB0byByZXByZXNlbnQgYnkgOHg6IG4gPSBcIitqLnRvU3RyaW5nKDE2KX12YXIgZz0xMjgraDtyZXR1cm4gZy50b1N0cmluZygxNikraX19O3RoaXMuZ2V0RW5jb2RlZEhleD1mdW5jdGlvbigpe2lmKHRoaXMuaFRMVj09bnVsbHx8dGhpcy5pc01vZGlmaWVkKXt0aGlzLmhWPXRoaXMuZ2V0RnJlc2hWYWx1ZUhleCgpO3RoaXMuaEw9dGhpcy5nZXRMZW5ndGhIZXhGcm9tVmFsdWUoKTt0aGlzLmhUTFY9dGhpcy5oVCt0aGlzLmhMK3RoaXMuaFY7dGhpcy5pc01vZGlmaWVkPWZhbHNlfXJldHVybiB0aGlzLmhUTFZ9O3RoaXMuZ2V0VmFsdWVIZXg9ZnVuY3Rpb24oKXt0aGlzLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gdGhpcy5oVn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuXCJcIn07dGhpcy5zZXRCeVBhcmFtPWZ1bmN0aW9uKGcpe3RoaXMucGFyYW1zPWd9O2lmKGUhPXVuZGVmaW5lZCl7aWYoZS50bHYhPXVuZGVmaW5lZCl7dGhpcy5oVExWPWUudGx2O3RoaXMuaXNNb2RpZmllZD1mYWxzZX19fTtLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmc9ZnVuY3Rpb24oYyl7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt2YXIgYj1udWxsO3ZhciBhPW51bGw7dGhpcy5nZXRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfTt0aGlzLnNldFN0cmluZz1mdW5jdGlvbihkKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9ZDt0aGlzLmhWPXV0Zjh0b2hleCh0aGlzLnMpLnRvTG93ZXJDYXNlKCl9O3RoaXMuc2V0U3RyaW5nSGV4PWZ1bmN0aW9uKGQpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1udWxsO3RoaXMuaFY9ZH07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBjIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYz09XCJzdHJpbmdcIil7dGhpcy5zZXRTdHJpbmcoYyl9ZWxzZXtpZih0eXBlb2YgYy5zdHIhPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0U3RyaW5nKGMuc3RyKX1lbHNle2lmKHR5cGVvZiBjLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRTdHJpbmdIZXgoYy5oZXgpfX19fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lPWZ1bmN0aW9uKGMpe0tKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBiPW51bGw7dmFyIGE9bnVsbDt0aGlzLmxvY2FsRGF0ZVRvVVRDPWZ1bmN0aW9uKGcpe3ZhciBlPWcuZ2V0VGltZSgpKyhnLmdldFRpbWV6b25lT2Zmc2V0KCkqNjAwMDApO3ZhciBmPW5ldyBEYXRlKGUpO3JldHVybiBmfTt0aGlzLmZvcm1hdERhdGU9ZnVuY3Rpb24obSxvLGUpe3ZhciBnPXRoaXMuemVyb1BhZGRpbmc7dmFyIG49dGhpcy5sb2NhbERhdGVUb1VUQyhtKTt2YXIgcD1TdHJpbmcobi5nZXRGdWxsWWVhcigpKTtpZihvPT1cInV0Y1wiKXtwPXAuc3Vic3RyKDIsMil9dmFyIGw9ZyhTdHJpbmcobi5nZXRNb250aCgpKzEpLDIpO3ZhciBxPWcoU3RyaW5nKG4uZ2V0RGF0ZSgpKSwyKTt2YXIgaD1nKFN0cmluZyhuLmdldEhvdXJzKCkpLDIpO3ZhciBpPWcoU3RyaW5nKG4uZ2V0TWludXRlcygpKSwyKTt2YXIgaj1nKFN0cmluZyhuLmdldFNlY29uZHMoKSksMik7dmFyIHI9cCtsK3EraCtpK2o7aWYoZT09PXRydWUpe3ZhciBmPW4uZ2V0TWlsbGlzZWNvbmRzKCk7aWYoZiE9MCl7dmFyIGs9ZyhTdHJpbmcoZiksMyk7az1rLnJlcGxhY2UoL1swXSskLyxcIlwiKTtyPXIrXCIuXCIra319cmV0dXJuIHIrXCJaXCJ9O3RoaXMuemVyb1BhZGRpbmc9ZnVuY3Rpb24oZSxkKXtpZihlLmxlbmd0aD49ZCl7cmV0dXJuIGV9cmV0dXJuIG5ldyBBcnJheShkLWUubGVuZ3RoKzEpLmpvaW4oXCIwXCIpK2V9O3RoaXMuZ2V0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc307dGhpcy5zZXRTdHJpbmc9ZnVuY3Rpb24oZCl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPWQ7dGhpcy5oVj1zdG9oZXgoZCl9O3RoaXMuc2V0QnlEYXRlVmFsdWU9ZnVuY3Rpb24oaCxqLGUsZCxmLGcpe3ZhciBpPW5ldyBEYXRlKERhdGUuVVRDKGgsai0xLGUsZCxmLGcsMCkpO3RoaXMuc2V0QnlEYXRlKGkpfTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn19O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWQ9ZnVuY3Rpb24oYil7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt2YXIgYT1udWxsO3RoaXMuc2V0QnlBU04xT2JqZWN0QXJyYXk9ZnVuY3Rpb24oYyl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5hc24xQXJyYXk9Y307dGhpcy5hcHBlbmRBU04xT2JqZWN0PWZ1bmN0aW9uKGMpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuYXNuMUFycmF5LnB1c2goYyl9O3RoaXMuYXNuMUFycmF5PW5ldyBBcnJheSgpO2lmKHR5cGVvZiBiIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYi5hcnJheSE9XCJ1bmRlZmluZWRcIil7dGhpcy5hc24xQXJyYXk9Yi5hcnJheX19fTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQm9vbGVhbj1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSQm9vbGVhbi5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cIjAxXCI7aWYoYT09ZmFsc2Upe3RoaXMuaFRMVj1cIjAxMDEwMFwifWVsc2V7dGhpcy5oVExWPVwiMDEwMWZmXCJ9fTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSQm9vbGVhbixLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkludGVnZXI9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkludGVnZXIuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwMlwiO3RoaXMuc2V0QnlCaWdJbnRlZ2VyPWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9S0pVUi5hc24xLkFTTjFVdGlsLmJpZ0ludFRvTWluVHdvc0NvbXBsZW1lbnRzSGV4KGIpfTt0aGlzLnNldEJ5SW50ZWdlcj1mdW5jdGlvbihjKXt2YXIgYj1uZXcgQmlnSW50ZWdlcihTdHJpbmcoYyksMTApO3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGIpfTt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGIpe3RoaXMuaFY9Yn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYS5iaWdpbnQhPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGEuYmlnaW50KX1lbHNle2lmKHR5cGVvZiBhW1wiaW50XCJdIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5SW50ZWdlcihhW1wiaW50XCJdKX1lbHNle2lmKHR5cGVvZiBhPT1cIm51bWJlclwiKXt0aGlzLnNldEJ5SW50ZWdlcihhKX1lbHNle2lmKHR5cGVvZiBhLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRWYWx1ZUhleChhLmhleCl9fX19fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUkludGVnZXIsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJCaXRTdHJpbmc9ZnVuY3Rpb24oYil7aWYoYiE9PXVuZGVmaW5lZCYmdHlwZW9mIGIub2JqIT09XCJ1bmRlZmluZWRcIil7dmFyIGE9S0pVUi5hc24xLkFTTjFVdGlsLm5ld09iamVjdChiLm9iaik7Yi5oZXg9XCIwMFwiK2EuZ2V0RW5jb2RlZEhleCgpfUtKVVIuYXNuMS5ERVJCaXRTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwM1wiO3RoaXMuc2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzPWZ1bmN0aW9uKGMpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9Y307dGhpcy5zZXRVbnVzZWRCaXRzQW5kSGV4VmFsdWU9ZnVuY3Rpb24oYyxlKXtpZihjPDB8fDc8Yyl7dGhyb3dcInVudXNlZCBiaXRzIHNoYWxsIGJlIGZyb20gMCB0byA3OiB1ID0gXCIrY312YXIgZD1cIjBcIitjO3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9ZCtlfTt0aGlzLnNldEJ5QmluYXJ5U3RyaW5nPWZ1bmN0aW9uKGUpe2U9ZS5yZXBsYWNlKC8wKyQvLFwiXCIpO3ZhciBmPTgtZS5sZW5ndGglODtpZihmPT04KXtmPTB9Zm9yKHZhciBnPTA7Zzw9ZjtnKyspe2UrPVwiMFwifXZhciBqPVwiXCI7Zm9yKHZhciBnPTA7ZzxlLmxlbmd0aC0xO2crPTgpe3ZhciBkPWUuc3Vic3RyKGcsOCk7dmFyIGM9cGFyc2VJbnQoZCwyKS50b1N0cmluZygxNik7aWYoYy5sZW5ndGg9PTEpe2M9XCIwXCIrY31qKz1jfXRoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9XCIwXCIrZitqfTt0aGlzLnNldEJ5Qm9vbGVhbkFycmF5PWZ1bmN0aW9uKGUpe3ZhciBkPVwiXCI7Zm9yKHZhciBjPTA7YzxlLmxlbmd0aDtjKyspe2lmKGVbY109PXRydWUpe2QrPVwiMVwifWVsc2V7ZCs9XCIwXCJ9fXRoaXMuc2V0QnlCaW5hcnlTdHJpbmcoZCl9O3RoaXMubmV3RmFsc2VBcnJheT1mdW5jdGlvbihlKXt2YXIgYz1uZXcgQXJyYXkoZSk7Zm9yKHZhciBkPTA7ZDxlO2QrKyl7Y1tkXT1mYWxzZX1yZXR1cm4gY307dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBiIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYj09XCJzdHJpbmdcIiYmYi50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eWzAtOWEtZl0rJC8pKXt0aGlzLnNldEhleFZhbHVlSW5jbHVkaW5nVW51c2VkQml0cyhiKX1lbHNle2lmKHR5cGVvZiBiLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRIZXhWYWx1ZUluY2x1ZGluZ1VudXNlZEJpdHMoYi5oZXgpfWVsc2V7aWYodHlwZW9mIGIuYmluIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5QmluYXJ5U3RyaW5nKGIuYmluKX1lbHNle2lmKHR5cGVvZiBiLmFycmF5IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5Qm9vbGVhbkFycmF5KGIuYXJyYXkpfX19fX19O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJCaXRTdHJpbmcsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJPY3RldFN0cmluZz1mdW5jdGlvbihiKXtpZihiIT09dW5kZWZpbmVkJiZ0eXBlb2YgYi5vYmohPT1cInVuZGVmaW5lZFwiKXt2YXIgYT1LSlVSLmFzbjEuQVNOMVV0aWwubmV3T2JqZWN0KGIub2JqKTtiLmhleD1hLmdldEVuY29kZWRIZXgoKX1LSlVSLmFzbjEuREVST2N0ZXRTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYik7dGhpcy5oVD1cIjA0XCJ9O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJPY3RldFN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJOdWxsPWZ1bmN0aW9uKCl7S0pVUi5hc24xLkRFUk51bGwuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwNVwiO3RoaXMuaFRMVj1cIjA1MDBcIn07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUk51bGwsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDZcIjt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1udWxsO3RoaXMuaFY9Yn07dGhpcy5zZXRWYWx1ZU9pZFN0cmluZz1mdW5jdGlvbihiKXt2YXIgYz1vaWR0b2hleChiKTtpZihjPT1udWxsKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgb2lkIHN0cmluZzogXCIrYil9dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPW51bGw7dGhpcy5oVj1jfTt0aGlzLnNldFZhbHVlTmFtZT1mdW5jdGlvbihjKXt2YXIgYj1LSlVSLmFzbjEueDUwOS5PSUQubmFtZTJvaWQoYyk7aWYoYiE9PVwiXCIpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoYil9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoXCJERVJPYmplY3RJZGVudGlmaWVyIG9pZE5hbWUgdW5kZWZpbmVkOiBcIitjKX19O3RoaXMuc2V0VmFsdWVOYW1lT3JPaWQ9ZnVuY3Rpb24oYil7aWYoYi5tYXRjaCgvXlswLTJdLlswLTkuXSskLykpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoYil9ZWxzZXt0aGlzLnNldFZhbHVlTmFtZShiKX19O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTt0aGlzLnNldEJ5UGFyYW09ZnVuY3Rpb24oYil7aWYodHlwZW9mIGI9PT1cInN0cmluZ1wiKXt0aGlzLnNldFZhbHVlTmFtZU9yT2lkKGIpfWVsc2V7aWYoYi5vaWQhPT11bmRlZmluZWQpe3RoaXMuc2V0VmFsdWVOYW1lT3JPaWQoYi5vaWQpfWVsc2V7aWYoYi5uYW1lIT09dW5kZWZpbmVkKXt0aGlzLnNldFZhbHVlTmFtZU9yT2lkKGIubmFtZSl9ZWxzZXtpZihiLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRWYWx1ZUhleChiLmhleCl9fX19fTtpZihhIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5UGFyYW0oYSl9fTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllcixLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkVudW1lcmF0ZWQ9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkVudW1lcmF0ZWQuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwYVwiO3RoaXMuc2V0QnlCaWdJbnRlZ2VyPWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9S0pVUi5hc24xLkFTTjFVdGlsLmJpZ0ludFRvTWluVHdvc0NvbXBsZW1lbnRzSGV4KGIpfTt0aGlzLnNldEJ5SW50ZWdlcj1mdW5jdGlvbihjKXt2YXIgYj1uZXcgQmlnSW50ZWdlcihTdHJpbmcoYyksMTApO3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGIpfTt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGIpe3RoaXMuaFY9Yn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYVtcImludFwiXSE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUludGVnZXIoYVtcImludFwiXSl9ZWxzZXtpZih0eXBlb2YgYT09XCJudW1iZXJcIil7dGhpcy5zZXRCeUludGVnZXIoYSl9ZWxzZXtpZih0eXBlb2YgYS5oZXghPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0VmFsdWVIZXgoYS5oZXgpfX19fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUkVudW1lcmF0ZWQsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJVVEY4U3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJVVEY4U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIwY1wifTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSVVRGOFN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJOdW1lcmljU3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJOdW1lcmljU3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxMlwifTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSTnVtZXJpY1N0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJQcmludGFibGVTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlByaW50YWJsZVN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTNcIn07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUlByaW50YWJsZVN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJUZWxldGV4U3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJUZWxldGV4U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxNFwifTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSVGVsZXRleFN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJJQTVTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUklBNVN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTZcIn07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUklBNVN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJWaXNpYmxlU3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJJQTVTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjFhXCJ9O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJWaXNpYmxlU3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUkJNUFN0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSQk1QU3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxZVwifTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSQk1QU3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUlVUQ1RpbWU9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlVUQ1RpbWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjE3XCI7dGhpcy5zZXRCeURhdGU9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5kYXRlPWI7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJ1dGNcIik7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMuZGF0ZT09XCJ1bmRlZmluZWRcIiYmdHlwZW9mIHRoaXMucz09XCJ1bmRlZmluZWRcIil7dGhpcy5kYXRlPW5ldyBEYXRlKCk7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJ1dGNcIik7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX1yZXR1cm4gdGhpcy5oVn07aWYoYSE9PXVuZGVmaW5lZCl7aWYoYS5zdHIhPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nKGEuc3RyKX1lbHNle2lmKHR5cGVvZiBhPT1cInN0cmluZ1wiJiZhLm1hdGNoKC9eWzAtOV17MTJ9WiQvKSl7dGhpcy5zZXRTdHJpbmcoYSl9ZWxzZXtpZihhLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmdIZXgoYS5oZXgpfWVsc2V7aWYoYS5kYXRlIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5RGF0ZShhLmRhdGUpfX19fX19O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJVVENUaW1lLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUpO0tKVVIuYXNuMS5ERVJHZW5lcmFsaXplZFRpbWU9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMThcIjt0aGlzLndpdGhNaWxsaXM9ZmFsc2U7dGhpcy5zZXRCeURhdGU9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5kYXRlPWI7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJnZW5cIix0aGlzLndpdGhNaWxsaXMpO3RoaXMuaFY9c3RvaGV4KHRoaXMucyl9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe2lmKHRoaXMuZGF0ZT09PXVuZGVmaW5lZCYmdGhpcy5zPT09dW5kZWZpbmVkKXt0aGlzLmRhdGU9bmV3IERhdGUoKTt0aGlzLnM9dGhpcy5mb3JtYXREYXRlKHRoaXMuZGF0ZSxcImdlblwiLHRoaXMud2l0aE1pbGxpcyk7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX1yZXR1cm4gdGhpcy5oVn07aWYoYSE9PXVuZGVmaW5lZCl7aWYoYS5zdHIhPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nKGEuc3RyKX1lbHNle2lmKHR5cGVvZiBhPT1cInN0cmluZ1wiJiZhLm1hdGNoKC9eWzAtOV17MTR9WiQvKSl7dGhpcy5zZXRTdHJpbmcoYSl9ZWxzZXtpZihhLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmdIZXgoYS5oZXgpfWVsc2V7aWYoYS5kYXRlIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5RGF0ZShhLmRhdGUpfX19fWlmKGEubWlsbGlzPT09dHJ1ZSl7dGhpcy53aXRoTWlsbGlzPXRydWV9fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZSxLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lKTtLSlVSLmFzbjEuREVSU2VxdWVuY2U9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlNlcXVlbmNlLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIzMFwiO3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3ZhciBjPVwiXCI7Zm9yKHZhciBiPTA7Yjx0aGlzLmFzbjFBcnJheS5sZW5ndGg7YisrKXt2YXIgZD10aGlzLmFzbjFBcnJheVtiXTtjKz1kLmdldEVuY29kZWRIZXgoKX10aGlzLmhWPWM7cmV0dXJuIHRoaXMuaFZ9fTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSU2VxdWVuY2UsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RydWN0dXJlZCk7S0pVUi5hc24xLkRFUlNldD1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSU2V0LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIzMVwiO3RoaXMuc29ydEZsYWc9dHJ1ZTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgQXJyYXkoKTtmb3IodmFyIGM9MDtjPHRoaXMuYXNuMUFycmF5Lmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuYXNuMUFycmF5W2NdO2IucHVzaChkLmdldEVuY29kZWRIZXgoKSl9aWYodGhpcy5zb3J0RmxhZz09dHJ1ZSl7Yi5zb3J0KCl9dGhpcy5oVj1iLmpvaW4oXCJcIik7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYS5zb3J0ZmxhZyE9XCJ1bmRlZmluZWRcIiYmYS5zb3J0ZmxhZz09ZmFsc2Upe3RoaXMuc29ydEZsYWc9ZmFsc2V9fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUlNldCxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkKTtLSlVSLmFzbjEuREVSVGFnZ2VkT2JqZWN0PWZ1bmN0aW9uKGIpe0tKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3Quc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBhPUtKVVIuYXNuMTt0aGlzLmhUPVwiYTBcIjt0aGlzLmhWPVwiXCI7dGhpcy5pc0V4cGxpY2l0PXRydWU7dGhpcy5hc24xT2JqZWN0PW51bGw7dGhpcy5zZXRBU04xT2JqZWN0PWZ1bmN0aW9uKGMsZCxlKXt0aGlzLmhUPWQ7dGhpcy5pc0V4cGxpY2l0PWM7dGhpcy5hc24xT2JqZWN0PWU7aWYodGhpcy5pc0V4cGxpY2l0KXt0aGlzLmhWPXRoaXMuYXNuMU9iamVjdC5nZXRFbmNvZGVkSGV4KCk7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWV9ZWxzZXt0aGlzLmhWPW51bGw7dGhpcy5oVExWPWUuZ2V0RW5jb2RlZEhleCgpO3RoaXMuaFRMVj10aGlzLmhUTFYucmVwbGFjZSgvXi4uLyxkKTt0aGlzLmlzTW9kaWZpZWQ9ZmFsc2V9fTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn07dGhpcy5zZXRCeVBhcmFtPWZ1bmN0aW9uKGMpe2lmKGMudGFnIT11bmRlZmluZWQpe3RoaXMuaFQ9Yy50YWd9aWYoYy5leHBsaWNpdCE9dW5kZWZpbmVkKXt0aGlzLmlzRXhwbGljaXQ9Yy5leHBsaWNpdH1pZihjLnRhZ2UhPXVuZGVmaW5lZCl7dGhpcy5oVD1jLnRhZ2U7dGhpcy5pc0V4cGxpY2l0PXRydWV9aWYoYy50YWdpIT11bmRlZmluZWQpe3RoaXMuaFQ9Yy50YWdpO3RoaXMuaXNFeHBsaWNpdD1mYWxzZX1pZihjLm9iaiE9dW5kZWZpbmVkKXtpZihjLm9iaiBpbnN0YW5jZW9mIGEuQVNOMU9iamVjdCl7dGhpcy5hc24xT2JqZWN0PWMub2JqO3RoaXMuc2V0QVNOMU9iamVjdCh0aGlzLmlzRXhwbGljaXQsdGhpcy5oVCx0aGlzLmFzbjFPYmplY3QpfWVsc2V7aWYodHlwZW9mIGMub2JqPT1cIm9iamVjdFwiKXt0aGlzLmFzbjFPYmplY3Q9YS5BU04xVXRpbC5uZXdPYmplY3QoYy5vYmopO3RoaXMuc2V0QVNOMU9iamVjdCh0aGlzLmlzRXhwbGljaXQsdGhpcy5oVCx0aGlzLmFzbjFPYmplY3QpfX19fTtpZihiIT11bmRlZmluZWQpe3RoaXMuc2V0QnlQYXJhbShiKX19O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3QsS0pVUi5hc24xLkFTTjFPYmplY3QpO1xudmFyIEFTTjFIRVg9bmV3IGZ1bmN0aW9uKCl7fTtBU04xSEVYLmdldExibGVuPWZ1bmN0aW9uKGMsYSl7aWYoYy5zdWJzdHIoYSsyLDEpIT1cIjhcIil7cmV0dXJuIDF9dmFyIGI9cGFyc2VJbnQoYy5zdWJzdHIoYSszLDEpKTtpZihiPT0wKXtyZXR1cm4gLTF9aWYoMDxiJiZiPDEwKXtyZXR1cm4gYisxfXJldHVybiAtMn07QVNOMUhFWC5nZXRMPWZ1bmN0aW9uKGMsYil7dmFyIGE9QVNOMUhFWC5nZXRMYmxlbihjLGIpO2lmKGE8MSl7cmV0dXJuXCJcIn1yZXR1cm4gYy5zdWJzdHIoYisyLGEqMil9O0FTTjFIRVguZ2V0VmJsZW49ZnVuY3Rpb24oZCxhKXt2YXIgYyxiO2M9QVNOMUhFWC5nZXRMKGQsYSk7aWYoYz09XCJcIil7cmV0dXJuIC0xfWlmKGMuc3Vic3RyKDAsMSk9PT1cIjhcIil7Yj1uZXcgQmlnSW50ZWdlcihjLnN1YnN0cigyKSwxNil9ZWxzZXtiPW5ldyBCaWdJbnRlZ2VyKGMsMTYpfXJldHVybiBiLmludFZhbHVlKCl9O0FTTjFIRVguZ2V0VmlkeD1mdW5jdGlvbihjLGIpe3ZhciBhPUFTTjFIRVguZ2V0TGJsZW4oYyxiKTtpZihhPDApe3JldHVybiBhfXJldHVybiBiKyhhKzEpKjJ9O0FTTjFIRVguZ2V0Vj1mdW5jdGlvbihkLGEpe3ZhciBjPUFTTjFIRVguZ2V0VmlkeChkLGEpO3ZhciBiPUFTTjFIRVguZ2V0VmJsZW4oZCxhKTtyZXR1cm4gZC5zdWJzdHIoYyxiKjIpfTtBU04xSEVYLmdldFRMVj1mdW5jdGlvbihiLGEpe3JldHVybiBiLnN1YnN0cihhLDIpK0FTTjFIRVguZ2V0TChiLGEpK0FTTjFIRVguZ2V0VihiLGEpfTtBU04xSEVYLmdldFRMVmJsZW49ZnVuY3Rpb24oYixhKXtyZXR1cm4gMitBU04xSEVYLmdldExibGVuKGIsYSkqMitBU04xSEVYLmdldFZibGVuKGIsYSkqMn07QVNOMUhFWC5nZXROZXh0U2libGluZ0lkeD1mdW5jdGlvbihkLGEpe3ZhciBjPUFTTjFIRVguZ2V0VmlkeChkLGEpO3ZhciBiPUFTTjFIRVguZ2V0VmJsZW4oZCxhKTtyZXR1cm4gYytiKjJ9O0FTTjFIRVguZ2V0Q2hpbGRJZHg9ZnVuY3Rpb24oZSxrKXt2YXIgbD1BU04xSEVYO3ZhciBqPVtdO3ZhciBjLGYsZztjPWwuZ2V0VmlkeChlLGspO2Y9bC5nZXRWYmxlbihlLGspKjI7aWYoZS5zdWJzdHIoaywyKT09XCIwM1wiKXtjKz0yO2YtPTJ9Zz0wO3ZhciBkPWM7d2hpbGUoZzw9Zil7dmFyIGI9bC5nZXRUTFZibGVuKGUsZCk7Zys9YjtpZihnPD1mKXtqLnB1c2goZCl9ZCs9YjtpZihnPj1mKXticmVha319cmV0dXJuIGp9O0FTTjFIRVguZ2V0TnRoQ2hpbGRJZHg9ZnVuY3Rpb24oZCxiLGUpe3ZhciBjPUFTTjFIRVguZ2V0Q2hpbGRJZHgoZCxiKTtyZXR1cm4gY1tlXX07QVNOMUhFWC5nZXRJZHhieUxpc3Q9ZnVuY3Rpb24oZSxkLGMsaSl7dmFyIGc9QVNOMUhFWDt2YXIgZixiO2lmKGMubGVuZ3RoPT0wKXtpZihpIT09dW5kZWZpbmVkKXtpZihlLnN1YnN0cihkLDIpIT09aSl7cmV0dXJuIC0xfX1yZXR1cm4gZH1mPWMuc2hpZnQoKTtiPWcuZ2V0Q2hpbGRJZHgoZSxkKTtpZihmPj1iLmxlbmd0aCl7cmV0dXJuIC0xfXJldHVybiBnLmdldElkeGJ5TGlzdChlLGJbZl0sYyxpKX07QVNOMUhFWC5nZXRJZHhieUxpc3RFeD1mdW5jdGlvbihmLGssYixnKXt2YXIgbT1BU04xSEVYO3ZhciBkLGw7aWYoYi5sZW5ndGg9PTApe2lmKGchPT11bmRlZmluZWQpe2lmKGYuc3Vic3RyKGssMikhPT1nKXtyZXR1cm4gLTF9fXJldHVybiBrfWQ9Yi5zaGlmdCgpO2w9bS5nZXRDaGlsZElkeChmLGspO3ZhciBqPTA7Zm9yKHZhciBlPTA7ZTxsLmxlbmd0aDtlKyspe3ZhciBjPWYuc3Vic3RyKGxbZV0sMik7aWYoKHR5cGVvZiBkPT1cIm51bWJlclwiJiYoIW0uaXNDb250ZXh0VGFnKGMpKSYmaj09ZCl8fCh0eXBlb2YgZD09XCJzdHJpbmdcIiYmbS5pc0NvbnRleHRUYWcoYyxkKSkpe3JldHVybiBtLmdldElkeGJ5TGlzdEV4KGYsbFtlXSxiLGcpfWlmKCFtLmlzQ29udGV4dFRhZyhjKSl7aisrfX1yZXR1cm4gLTF9O0FTTjFIRVguZ2V0VExWYnlMaXN0PWZ1bmN0aW9uKGQsYyxiLGYpe3ZhciBlPUFTTjFIRVg7dmFyIGE9ZS5nZXRJZHhieUxpc3QoZCxjLGIsZik7aWYoYT09LTEpe3JldHVybiBudWxsfWlmKGE+PWQubGVuZ3RoKXtyZXR1cm4gbnVsbH1yZXR1cm4gZS5nZXRUTFYoZCxhKX07QVNOMUhFWC5nZXRUTFZieUxpc3RFeD1mdW5jdGlvbihkLGMsYixmKXt2YXIgZT1BU04xSEVYO3ZhciBhPWUuZ2V0SWR4YnlMaXN0RXgoZCxjLGIsZik7aWYoYT09LTEpe3JldHVybiBudWxsfXJldHVybiBlLmdldFRMVihkLGEpfTtBU04xSEVYLmdldFZieUxpc3Q9ZnVuY3Rpb24oZSxjLGIsZyxpKXt2YXIgZj1BU04xSEVYO3ZhciBhLGQ7YT1mLmdldElkeGJ5TGlzdChlLGMsYixnKTtpZihhPT0tMSl7cmV0dXJuIG51bGx9aWYoYT49ZS5sZW5ndGgpe3JldHVybiBudWxsfWQ9Zi5nZXRWKGUsYSk7aWYoaT09PXRydWUpe2Q9ZC5zdWJzdHIoMil9cmV0dXJuIGR9O0FTTjFIRVguZ2V0VmJ5TGlzdEV4PWZ1bmN0aW9uKGIsZSxhLGQsZil7dmFyIGo9QVNOMUhFWDt2YXIgZyxjLGk7Zz1qLmdldElkeGJ5TGlzdEV4KGIsZSxhLGQpO2lmKGc9PS0xKXtyZXR1cm4gbnVsbH1pPWouZ2V0VihiLGcpO2lmKGIuc3Vic3RyKGcsMik9PVwiMDNcIiYmZiE9PWZhbHNlKXtpPWkuc3Vic3RyKDIpfXJldHVybiBpfTtBU04xSEVYLmdldEludD1mdW5jdGlvbihlLGIsZil7aWYoZj09dW5kZWZpbmVkKXtmPS0xfXRyeXt2YXIgYz1lLnN1YnN0cihiLDIpO2lmKGMhPVwiMDJcIiYmYyE9XCIwM1wiKXtyZXR1cm4gZn12YXIgYT1BU04xSEVYLmdldFYoZSxiKTtpZihjPT1cIjAyXCIpe3JldHVybiBwYXJzZUludChhLDE2KX1lbHNle3JldHVybiBiaXRzdHJ0b2ludChhKX19Y2F0Y2goZCl7cmV0dXJuIGZ9fTtBU04xSEVYLmdldE9JRD1mdW5jdGlvbihjLGEsZCl7aWYoZD09dW5kZWZpbmVkKXtkPW51bGx9dHJ5e2lmKGMuc3Vic3RyKGEsMikhPVwiMDZcIil7cmV0dXJuIGR9dmFyIGU9QVNOMUhFWC5nZXRWKGMsYSk7cmV0dXJuIGhleHRvb2lkKGUpfWNhdGNoKGIpe3JldHVybiBkfX07QVNOMUhFWC5nZXRPSUROYW1lPWZ1bmN0aW9uKGQsYSxmKXtpZihmPT11bmRlZmluZWQpe2Y9bnVsbH10cnl7dmFyIGU9QVNOMUhFWC5nZXRPSUQoZCxhLGYpO2lmKGU9PWYpe3JldHVybiBmfXZhciBiPUtKVVIuYXNuMS54NTA5Lk9JRC5vaWQybmFtZShlKTtpZihiPT1cIlwiKXtyZXR1cm4gZX1yZXR1cm4gYn1jYXRjaChjKXtyZXR1cm4gZn19O0FTTjFIRVguZ2V0U3RyaW5nPWZ1bmN0aW9uKGQsYixlKXtpZihlPT11bmRlZmluZWQpe2U9bnVsbH10cnl7dmFyIGE9QVNOMUhFWC5nZXRWKGQsYik7cmV0dXJuIGhleHRvcnN0cihhKX1jYXRjaChjKXtyZXR1cm4gZX19O0FTTjFIRVguaGV4dG9vaWRzdHI9ZnVuY3Rpb24oZSl7dmFyIGg9ZnVuY3Rpb24oYixhKXtpZihiLmxlbmd0aD49YSl7cmV0dXJuIGJ9cmV0dXJuIG5ldyBBcnJheShhLWIubGVuZ3RoKzEpLmpvaW4oXCIwXCIpK2J9O3ZhciBsPVtdO3ZhciBvPWUuc3Vic3RyKDAsMik7dmFyIGY9cGFyc2VJbnQobywxNik7bFswXT1uZXcgU3RyaW5nKE1hdGguZmxvb3IoZi80MCkpO2xbMV09bmV3IFN0cmluZyhmJTQwKTt2YXIgbT1lLnN1YnN0cigyKTt2YXIgaz1bXTtmb3IodmFyIGc9MDtnPG0ubGVuZ3RoLzI7ZysrKXtrLnB1c2gocGFyc2VJbnQobS5zdWJzdHIoZyoyLDIpLDE2KSl9dmFyIGo9W107dmFyIGQ9XCJcIjtmb3IodmFyIGc9MDtnPGsubGVuZ3RoO2crKyl7aWYoa1tnXSYxMjgpe2Q9ZCtoKChrW2ddJjEyNykudG9TdHJpbmcoMiksNyl9ZWxzZXtkPWQraCgoa1tnXSYxMjcpLnRvU3RyaW5nKDIpLDcpO2oucHVzaChuZXcgU3RyaW5nKHBhcnNlSW50KGQsMikpKTtkPVwiXCJ9fXZhciBuPWwuam9pbihcIi5cIik7aWYoai5sZW5ndGg+MCl7bj1uK1wiLlwiK2ouam9pbihcIi5cIil9cmV0dXJuIG59O0FTTjFIRVguZHVtcD1mdW5jdGlvbih0LGMsbCxnKXt2YXIgcD1BU04xSEVYO3ZhciBqPXAuZ2V0Vjt2YXIgeT1wLmR1bXA7dmFyIHc9cC5nZXRDaGlsZElkeDt2YXIgZT10O2lmKHQgaW5zdGFuY2VvZiBLSlVSLmFzbjEuQVNOMU9iamVjdCl7ZT10LmdldEVuY29kZWRIZXgoKX12YXIgcT1mdW5jdGlvbihBLGkpe2lmKEEubGVuZ3RoPD1pKjIpe3JldHVybiBBfWVsc2V7dmFyIHY9QS5zdWJzdHIoMCxpKStcIi4uKHRvdGFsIFwiK0EubGVuZ3RoLzIrXCJieXRlcykuLlwiK0Euc3Vic3RyKEEubGVuZ3RoLWksaSk7cmV0dXJuIHZ9fTtpZihjPT09dW5kZWZpbmVkKXtjPXtvbW1pdF9sb25nX29jdGV0OjMyfX1pZihsPT09dW5kZWZpbmVkKXtsPTB9aWYoZz09PXVuZGVmaW5lZCl7Zz1cIlwifXZhciB4PWMub21taXRfbG9uZ19vY3RldDt2YXIgej1lLnN1YnN0cihsLDIpO2lmKHo9PVwiMDFcIil7dmFyIGg9aihlLGwpO2lmKGg9PVwiMDBcIil7cmV0dXJuIGcrXCJCT09MRUFOIEZBTFNFXFxuXCJ9ZWxzZXtyZXR1cm4gZytcIkJPT0xFQU4gVFJVRVxcblwifX1pZih6PT1cIjAyXCIpe3ZhciBoPWooZSxsKTtyZXR1cm4gZytcIklOVEVHRVIgXCIrcShoLHgpK1wiXFxuXCJ9aWYoej09XCIwM1wiKXt2YXIgaD1qKGUsbCk7aWYocC5pc0FTTjFIRVgoaC5zdWJzdHIoMikpKXt2YXIgaz1nK1wiQklUU1RSSU5HLCBlbmNhcHN1bGF0ZXNcXG5cIjtrPWsreShoLnN1YnN0cigyKSxjLDAsZytcIiAgXCIpO3JldHVybiBrfWVsc2V7cmV0dXJuIGcrXCJCSVRTVFJJTkcgXCIrcShoLHgpK1wiXFxuXCJ9fWlmKHo9PVwiMDRcIil7dmFyIGg9aihlLGwpO2lmKHAuaXNBU04xSEVYKGgpKXt2YXIgaz1nK1wiT0NURVRTVFJJTkcsIGVuY2Fwc3VsYXRlc1xcblwiO2s9ayt5KGgsYywwLGcrXCIgIFwiKTtyZXR1cm4ga31lbHNle3JldHVybiBnK1wiT0NURVRTVFJJTkcgXCIrcShoLHgpK1wiXFxuXCJ9fWlmKHo9PVwiMDVcIil7cmV0dXJuIGcrXCJOVUxMXFxuXCJ9aWYoej09XCIwNlwiKXt2YXIgbT1qKGUsbCk7dmFyIGI9S0pVUi5hc24xLkFTTjFVdGlsLm9pZEhleFRvSW50KG0pO3ZhciBvPUtKVVIuYXNuMS54NTA5Lk9JRC5vaWQybmFtZShiKTt2YXIgYT1iLnJlcGxhY2UoL1xcLi9nLFwiIFwiKTtpZihvIT1cIlwiKXtyZXR1cm4gZytcIk9iamVjdElkZW50aWZpZXIgXCIrbytcIiAoXCIrYStcIilcXG5cIn1lbHNle3JldHVybiBnK1wiT2JqZWN0SWRlbnRpZmllciAoXCIrYStcIilcXG5cIn19aWYoej09XCIwYVwiKXtyZXR1cm4gZytcIkVOVU1FUkFURUQgXCIrcGFyc2VJbnQoaihlLGwpKStcIlxcblwifWlmKHo9PVwiMGNcIil7cmV0dXJuIGcrXCJVVEY4U3RyaW5nICdcIitoZXh0b3V0ZjgoaihlLGwpKStcIidcXG5cIn1pZih6PT1cIjEzXCIpe3JldHVybiBnK1wiUHJpbnRhYmxlU3RyaW5nICdcIitoZXh0b3V0ZjgoaihlLGwpKStcIidcXG5cIn1pZih6PT1cIjE0XCIpe3JldHVybiBnK1wiVGVsZXRleFN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoej09XCIxNlwiKXtyZXR1cm4gZytcIklBNVN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoej09XCIxN1wiKXtyZXR1cm4gZytcIlVUQ1RpbWUgXCIraGV4dG91dGY4KGooZSxsKSkrXCJcXG5cIn1pZih6PT1cIjE4XCIpe3JldHVybiBnK1wiR2VuZXJhbGl6ZWRUaW1lIFwiK2hleHRvdXRmOChqKGUsbCkpK1wiXFxuXCJ9aWYoej09XCIxYVwiKXtyZXR1cm4gZytcIlZpc3VhbFN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoej09XCIxZVwiKXtyZXR1cm4gZytcIkJNUFN0cmluZyAnXCIrdWNzMmhleHRvdXRmOChqKGUsbCkpK1wiJ1xcblwifWlmKHo9PVwiMzBcIil7aWYoZS5zdWJzdHIobCw0KT09XCIzMDAwXCIpe3JldHVybiBnK1wiU0VRVUVOQ0Uge31cXG5cIn12YXIgaz1nK1wiU0VRVUVOQ0VcXG5cIjt2YXIgZD13KGUsbCk7dmFyIGY9YztpZigoZC5sZW5ndGg9PTJ8fGQubGVuZ3RoPT0zKSYmZS5zdWJzdHIoZFswXSwyKT09XCIwNlwiJiZlLnN1YnN0cihkW2QubGVuZ3RoLTFdLDIpPT1cIjA0XCIpe3ZhciBvPXAub2lkbmFtZShqKGUsZFswXSkpO3ZhciByPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpO3IueDUwOUV4dE5hbWU9bztmPXJ9Zm9yKHZhciB1PTA7dTxkLmxlbmd0aDt1Kyspe2s9ayt5KGUsZixkW3VdLGcrXCIgIFwiKX1yZXR1cm4ga31pZih6PT1cIjMxXCIpe3ZhciBrPWcrXCJTRVRcXG5cIjt2YXIgZD13KGUsbCk7Zm9yKHZhciB1PTA7dTxkLmxlbmd0aDt1Kyspe2s9ayt5KGUsYyxkW3VdLGcrXCIgIFwiKX1yZXR1cm4ga312YXIgej1wYXJzZUludCh6LDE2KTtpZigoeiYxMjgpIT0wKXt2YXIgbj16JjMxO2lmKCh6JjMyKSE9MCl7dmFyIGs9ZytcIltcIituK1wiXVxcblwiO3ZhciBkPXcoZSxsKTtmb3IodmFyIHU9MDt1PGQubGVuZ3RoO3UrKyl7az1rK3koZSxjLGRbdV0sZytcIiAgXCIpfXJldHVybiBrfWVsc2V7dmFyIGg9aihlLGwpO2lmKEFTTjFIRVguaXNBU04xSEVYKGgpKXt2YXIgaz1nK1wiW1wiK24rXCJdXFxuXCI7az1rK3koaCxjLDAsZytcIiAgXCIpO3JldHVybiBrfWVsc2V7aWYoaC5zdWJzdHIoMCw4KT09XCI2ODc0NzQ3MFwiKXtoPWhleHRvdXRmOChoKX1lbHNle2lmKGMueDUwOUV4dE5hbWU9PT1cInN1YmplY3RBbHROYW1lXCImJm49PTIpe2g9aGV4dG91dGY4KGgpfX19dmFyIGs9ZytcIltcIituK1wiXSBcIitoK1wiXFxuXCI7cmV0dXJuIGt9fXJldHVybiBnK1wiVU5LTk9XTihcIit6K1wiKSBcIitqKGUsbCkrXCJcXG5cIn07QVNOMUhFWC5pc0NvbnRleHRUYWc9ZnVuY3Rpb24oYyxiKXtjPWMudG9Mb3dlckNhc2UoKTt2YXIgZixlO3RyeXtmPXBhcnNlSW50KGMsMTYpfWNhdGNoKGQpe3JldHVybiAtMX1pZihiPT09dW5kZWZpbmVkKXtpZigoZiYxOTIpPT0xMjgpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX10cnl7dmFyIGE9Yi5tYXRjaCgvXlxcW1swLTldK1xcXSQvKTtpZihhPT1udWxsKXtyZXR1cm4gZmFsc2V9ZT1wYXJzZUludChiLnN1YnN0cigxLGIubGVuZ3RoLTEpLDEwKTtpZihlPjMxKXtyZXR1cm4gZmFsc2V9aWYoKChmJjE5Mik9PTEyOCkmJigoZiYzMSk9PWUpKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9Y2F0Y2goZCl7cmV0dXJuIGZhbHNlfX07QVNOMUhFWC5pc0FTTjFIRVg9ZnVuY3Rpb24oZSl7dmFyIGQ9QVNOMUhFWDtpZihlLmxlbmd0aCUyPT0xKXtyZXR1cm4gZmFsc2V9dmFyIGM9ZC5nZXRWYmxlbihlLDApO3ZhciBiPWUuc3Vic3RyKDAsMik7dmFyIGY9ZC5nZXRMKGUsMCk7dmFyIGE9ZS5sZW5ndGgtYi5sZW5ndGgtZi5sZW5ndGg7aWYoYT09YyoyKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O0FTTjFIRVguY2hlY2tTdHJpY3RERVI9ZnVuY3Rpb24oZyxvLGQsYyxyKXt2YXIgcz1BU04xSEVYO2lmKGQ9PT11bmRlZmluZWQpe2lmKHR5cGVvZiBnIT1cInN0cmluZ1wiKXt0aHJvdyBuZXcgRXJyb3IoXCJub3QgaGV4IHN0cmluZ1wiKX1nPWcudG9Mb3dlckNhc2UoKTtpZighS0pVUi5sYW5nLlN0cmluZy5pc0hleChnKSl7dGhyb3cgbmV3IEVycm9yKFwibm90IGhleCBzdHJpbmdcIil9ZD1nLmxlbmd0aDtjPWcubGVuZ3RoLzI7aWYoYzwxMjgpe3I9MX1lbHNle3I9TWF0aC5jZWlsKGMudG9TdHJpbmcoMTYpKSsxfX12YXIgaz1zLmdldEwoZyxvKTtpZihrLmxlbmd0aD5yKjIpe3Rocm93IG5ldyBFcnJvcihcIkwgb2YgVExWIHRvbyBsb25nOiBpZHg9XCIrbyl9dmFyIG49cy5nZXRWYmxlbihnLG8pO2lmKG4+Yyl7dGhyb3cgbmV3IEVycm9yKFwidmFsdWUgb2YgTCB0b28gbG9uZyB0aGFuIGhleDogaWR4PVwiK28pfXZhciBxPXMuZ2V0VExWKGcsbyk7dmFyIGY9cS5sZW5ndGgtMi1zLmdldEwoZyxvKS5sZW5ndGg7aWYoZiE9PShuKjIpKXt0aHJvdyBuZXcgRXJyb3IoXCJWIHN0cmluZyBsZW5ndGggYW5kIEwncyB2YWx1ZSBub3QgdGhlIHNhbWU6XCIrZitcIi9cIisobioyKSl9aWYobz09PTApe2lmKGcubGVuZ3RoIT1xLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKFwidG90YWwgbGVuZ3RoIGFuZCBUTFYgbGVuZ3RoIHVubWF0Y2g6XCIrZy5sZW5ndGgrXCIhPVwiK3EubGVuZ3RoKX19dmFyIGI9Zy5zdWJzdHIobywyKTtpZihiPT09XCIwMlwiKXt2YXIgYT1zLmdldFZpZHgoZyxvKTtpZihnLnN1YnN0cihhLDIpPT1cIjAwXCImJmcuY2hhckNvZGVBdChhKzIpPDU2KXt0aHJvdyBuZXcgRXJyb3IoXCJub3QgbGVhc3QgemVyb3MgZm9yIERFUiBJTlRFR0VSXCIpfX1pZihwYXJzZUludChiLDE2KSYzMil7dmFyIHA9cy5nZXRWYmxlbihnLG8pO3ZhciBtPTA7dmFyIGw9cy5nZXRDaGlsZElkeChnLG8pO2Zvcih2YXIgZT0wO2U8bC5sZW5ndGg7ZSsrKXt2YXIgaj1zLmdldFRMVihnLGxbZV0pO20rPWoubGVuZ3RoO3MuY2hlY2tTdHJpY3RERVIoZyxsW2VdLGQsYyxyKX1pZigocCoyKSE9bSl7dGhyb3cgbmV3IEVycm9yKFwic3VtIG9mIGNoaWxkcmVuJ3MgVExWIGxlbmd0aCBhbmQgTCB1bm1hdGNoOiBcIisocCoyKStcIiE9XCIrbSl9fX07QVNOMUhFWC5vaWRuYW1lPWZ1bmN0aW9uKGEpe3ZhciBjPUtKVVIuYXNuMTtpZihLSlVSLmxhbmcuU3RyaW5nLmlzSGV4KGEpKXthPWMuQVNOMVV0aWwub2lkSGV4VG9JbnQoYSl9dmFyIGI9Yy54NTA5Lk9JRC5vaWQybmFtZShhKTtpZihiPT09XCJcIil7Yj1hfXJldHVybiBifTtcbnZhciBLSlVSO2lmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5sYW5nPT1cInVuZGVmaW5lZFwifHwhS0pVUi5sYW5nKXtLSlVSLmxhbmc9e319S0pVUi5sYW5nLlN0cmluZz1mdW5jdGlvbigpe307ZnVuY3Rpb24gQmFzZTY0eCgpe31mdW5jdGlvbiBzdG9CQShkKXt2YXIgYj1uZXcgQXJyYXkoKTtmb3IodmFyIGM9MDtjPGQubGVuZ3RoO2MrKyl7YltjXT1kLmNoYXJDb2RlQXQoYyl9cmV0dXJuIGJ9ZnVuY3Rpb24gQkF0b3MoYil7dmFyIGQ9XCJcIjtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7ZD1kK1N0cmluZy5mcm9tQ2hhckNvZGUoYltjXSl9cmV0dXJuIGR9ZnVuY3Rpb24gQkF0b2hleChiKXt2YXIgZT1cIlwiO2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgYz1iW2RdLnRvU3RyaW5nKDE2KTtpZihjLmxlbmd0aD09MSl7Yz1cIjBcIitjfWU9ZStjfXJldHVybiBlfWZ1bmN0aW9uIHN0b2hleChhKXtyZXR1cm4gQkF0b2hleChzdG9CQShhKSl9ZnVuY3Rpb24gc3RvYjY0KGEpe3JldHVybiBoZXgyYjY0KHN0b2hleChhKSl9ZnVuY3Rpb24gc3RvYjY0dShhKXtyZXR1cm4gYjY0dG9iNjR1KGhleDJiNjQoc3RvaGV4KGEpKSl9ZnVuY3Rpb24gYjY0dXRvcyhhKXtyZXR1cm4gQkF0b3MoYjY0dG9CQShiNjR1dG9iNjQoYSkpKX1mdW5jdGlvbiBiNjR0b2I2NHUoYSl7YT1hLnJlcGxhY2UoL1xcPS9nLFwiXCIpO2E9YS5yZXBsYWNlKC9cXCsvZyxcIi1cIik7YT1hLnJlcGxhY2UoL1xcLy9nLFwiX1wiKTtyZXR1cm4gYX1mdW5jdGlvbiBiNjR1dG9iNjQoYSl7aWYoYS5sZW5ndGglND09Mil7YT1hK1wiPT1cIn1lbHNle2lmKGEubGVuZ3RoJTQ9PTMpe2E9YStcIj1cIn19YT1hLnJlcGxhY2UoLy0vZyxcIitcIik7YT1hLnJlcGxhY2UoL18vZyxcIi9cIik7cmV0dXJuIGF9ZnVuY3Rpb24gaGV4dG9iNjR1KGEpe2lmKGEubGVuZ3RoJTI9PTEpe2E9XCIwXCIrYX1yZXR1cm4gYjY0dG9iNjR1KGhleDJiNjQoYSkpfWZ1bmN0aW9uIGI2NHV0b2hleChhKXtyZXR1cm4gYjY0dG9oZXgoYjY0dXRvYjY0KGEpKX12YXIgdXRmOHRvYjY0dSxiNjR1dG91dGY4O2lmKHR5cGVvZiBCdWZmZXI9PT1cImZ1bmN0aW9uXCIpe3V0Zjh0b2I2NHU9ZnVuY3Rpb24oYSl7cmV0dXJuIGI2NHRvYjY0dShCdWZmZXIuZnJvbShhLFwidXRmOFwiKS50b1N0cmluZyhcImJhc2U2NFwiKSl9O2I2NHV0b3V0Zjg9ZnVuY3Rpb24oYSl7cmV0dXJuIEJ1ZmZlci5mcm9tKGI2NHV0b2I2NChhKSxcImJhc2U2NFwiKS50b1N0cmluZyhcInV0ZjhcIil9fWVsc2V7dXRmOHRvYjY0dT1mdW5jdGlvbihhKXtyZXR1cm4gaGV4dG9iNjR1KHVyaWNtcHRvaGV4KGVuY29kZVVSSUNvbXBvbmVudEFsbChhKSkpfTtiNjR1dG91dGY4PWZ1bmN0aW9uKGEpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoaGV4dG91cmljbXAoYjY0dXRvaGV4KGEpKSl9fWZ1bmN0aW9uIHV0Zjh0b2I2NChhKXtyZXR1cm4gaGV4MmI2NCh1cmljbXB0b2hleChlbmNvZGVVUklDb21wb25lbnRBbGwoYSkpKX1mdW5jdGlvbiBiNjR0b3V0ZjgoYSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChoZXh0b3VyaWNtcChiNjR0b2hleChhKSkpfWZ1bmN0aW9uIHV0Zjh0b2hleChhKXtyZXR1cm4gdXJpY21wdG9oZXgoZW5jb2RlVVJJQ29tcG9uZW50QWxsKGEpKX1mdW5jdGlvbiBoZXh0b3V0ZjgoYSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChoZXh0b3VyaWNtcChhKSl9ZnVuY3Rpb24gaGV4dG9yc3RyKGMpe3ZhciBiPVwiXCI7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aC0xO2ErPTIpe2IrPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYy5zdWJzdHIoYSwyKSwxNikpfXJldHVybiBifWZ1bmN0aW9uIHJzdHJ0b2hleChjKXt2YXIgYT1cIlwiO2Zvcih2YXIgYj0wO2I8Yy5sZW5ndGg7YisrKXthKz0oXCIwXCIrYy5jaGFyQ29kZUF0KGIpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfXJldHVybiBhfWZ1bmN0aW9uIGhleHRvYjY0KGEpe3JldHVybiBoZXgyYjY0KGEpfWZ1bmN0aW9uIGhleHRvYjY0bmwoYil7dmFyIGE9aGV4dG9iNjQoYik7dmFyIGM9YS5yZXBsYWNlKC8oLns2NH0pL2csXCIkMVxcclxcblwiKTtjPWMucmVwbGFjZSgvXFxyXFxuJC8sXCJcIik7cmV0dXJuIGN9ZnVuY3Rpb24gYjY0bmx0b2hleChiKXt2YXIgYT1iLnJlcGxhY2UoL1teMC05QS1aYS16XFwvKz1dKi9nLFwiXCIpO3ZhciBjPWI2NHRvaGV4KGEpO3JldHVybiBjfWZ1bmN0aW9uIGhleHRvcGVtKGEsYil7dmFyIGM9aGV4dG9iNjRubChhKTtyZXR1cm5cIi0tLS0tQkVHSU4gXCIrYitcIi0tLS0tXFxyXFxuXCIrYytcIlxcclxcbi0tLS0tRU5EIFwiK2IrXCItLS0tLVxcclxcblwifWZ1bmN0aW9uIHBlbXRvaGV4KGEsYil7aWYoYS5pbmRleE9mKFwiLS0tLS1CRUdJTiBcIik9PS0xKXt0aHJvd1wiY2FuJ3QgZmluZCBQRU0gaGVhZGVyOiBcIitifWlmKGIhPT11bmRlZmluZWQpe2E9YS5yZXBsYWNlKG5ldyBSZWdFeHAoXCJeW15dKi0tLS0tQkVHSU4gXCIrYitcIi0tLS0tXCIpLFwiXCIpO2E9YS5yZXBsYWNlKG5ldyBSZWdFeHAoXCItLS0tLUVORCBcIitiK1wiLS0tLS1bXl0qJFwiKSxcIlwiKX1lbHNle2E9YS5yZXBsYWNlKC9eW15dKi0tLS0tQkVHSU4gW14tXSstLS0tLS8sXCJcIik7YT1hLnJlcGxhY2UoLy0tLS0tRU5EIFteLV0rLS0tLS1bXl0qJC8sXCJcIil9cmV0dXJuIGI2NG5sdG9oZXgoYSl9ZnVuY3Rpb24gaGV4dG9BcnJheUJ1ZmZlcihkKXtpZihkLmxlbmd0aCUyIT0wKXt0aHJvd1wiaW5wdXQgaXMgbm90IGV2ZW4gbGVuZ3RoXCJ9aWYoZC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKT09bnVsbCl7dGhyb3dcImlucHV0IGlzIG5vdCBoZXhhZGVjaW1hbFwifXZhciBiPW5ldyBBcnJheUJ1ZmZlcihkLmxlbmd0aC8yKTt2YXIgYT1uZXcgRGF0YVZpZXcoYik7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aC8yO2MrKyl7YS5zZXRVaW50OChjLHBhcnNlSW50KGQuc3Vic3RyKGMqMiwyKSwxNikpfXJldHVybiBifWZ1bmN0aW9uIEFycmF5QnVmZmVydG9oZXgoYil7dmFyIGQ9XCJcIjt2YXIgYT1uZXcgRGF0YVZpZXcoYik7Zm9yKHZhciBjPTA7YzxiLmJ5dGVMZW5ndGg7YysrKXtkKz0oXCIwMFwiK2EuZ2V0VWludDgoYykudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9cmV0dXJuIGR9ZnVuY3Rpb24genVsdXRvbXNlYyhuKXt2YXIgbCxqLG0sZSxmLGksYixrO3ZhciBhLGgsZyxjO2M9bi5tYXRjaCgvXihcXGR7Mn18XFxkezR9KShcXGRcXGQpKFxcZFxcZCkoXFxkXFxkKShcXGRcXGQpKFxcZFxcZCkofFxcLlxcZCspWiQvKTtpZihjKXthPWNbMV07bD1wYXJzZUludChhKTtpZihhLmxlbmd0aD09PTIpe2lmKDUwPD1sJiZsPDEwMCl7bD0xOTAwK2x9ZWxzZXtpZigwPD1sJiZsPDUwKXtsPTIwMDArbH19fWo9cGFyc2VJbnQoY1syXSktMTttPXBhcnNlSW50KGNbM10pO2U9cGFyc2VJbnQoY1s0XSk7Zj1wYXJzZUludChjWzVdKTtpPXBhcnNlSW50KGNbNl0pO2I9MDtoPWNbN107aWYoaCE9PVwiXCIpe2c9KGguc3Vic3RyKDEpK1wiMDBcIikuc3Vic3RyKDAsMyk7Yj1wYXJzZUludChnKX1yZXR1cm4gRGF0ZS5VVEMobCxqLG0sZSxmLGksYil9dGhyb3dcInVuc3VwcG9ydGVkIHp1bHUgZm9ybWF0OiBcIitufWZ1bmN0aW9uIHp1bHV0b3NlYyhhKXt2YXIgYj16dWx1dG9tc2VjKGEpO3JldHVybiB+fihiLzEwMDApfWZ1bmN0aW9uIHp1bHV0b2RhdGUoYSl7cmV0dXJuIG5ldyBEYXRlKHp1bHV0b21zZWMoYSkpfWZ1bmN0aW9uIGRhdGV0b3p1bHUoZyxlLGYpe3ZhciBiO3ZhciBhPWcuZ2V0VVRDRnVsbFllYXIoKTtpZihlKXtpZihhPDE5NTB8fDIwNDk8YSl7dGhyb3dcIm5vdCBwcm9wZXIgeWVhciBmb3IgVVRDVGltZTogXCIrYX1iPShcIlwiK2EpLnNsaWNlKC0yKX1lbHNle2I9KFwiMDAwXCIrYSkuc2xpY2UoLTQpfWIrPShcIjBcIisoZy5nZXRVVENNb250aCgpKzEpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDRGF0ZSgpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ01pbnV0ZXMoKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpO2lmKGYpe3ZhciBjPWcuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7aWYoYyE9PTApe2M9KFwiMDBcIitjKS5zbGljZSgtMyk7Yz1jLnJlcGxhY2UoLzArJC9nLFwiXCIpO2IrPVwiLlwiK2N9fWIrPVwiWlwiO3JldHVybiBifWZ1bmN0aW9uIHVyaWNtcHRvaGV4KGEpe3JldHVybiBhLnJlcGxhY2UoLyUvZyxcIlwiKX1mdW5jdGlvbiBoZXh0b3VyaWNtcChhKXtyZXR1cm4gYS5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIil9ZnVuY3Rpb24gaXB2NnRvaGV4KGcpe3ZhciBiPVwibWFsZm9ybWVkIElQdjYgYWRkcmVzc1wiO2lmKCFnLm1hdGNoKC9eWzAtOUEtRmEtZjpdKyQvKSl7dGhyb3cgYn1nPWcudG9Mb3dlckNhc2UoKTt2YXIgZD1nLnNwbGl0KFwiOlwiKS5sZW5ndGgtMTtpZihkPDIpe3Rocm93IGJ9dmFyIGU9XCI6XCIucmVwZWF0KDctZCsyKTtnPWcucmVwbGFjZShcIjo6XCIsZSk7dmFyIGM9Zy5zcGxpdChcIjpcIik7aWYoYy5sZW5ndGghPTgpe3Rocm93IGJ9Zm9yKHZhciBmPTA7Zjw4O2YrKyl7Y1tmXT0oXCIwMDAwXCIrY1tmXSkuc2xpY2UoLTQpfXJldHVybiBjLmpvaW4oXCJcIil9ZnVuY3Rpb24gaGV4dG9pcHY2KGUpe2lmKCFlLm1hdGNoKC9eWzAtOUEtRmEtZl17MzJ9JC8pKXt0aHJvd1wibWFsZm9ybWVkIElQdjYgYWRkcmVzcyBvY3RldFwifWU9ZS50b0xvd2VyQ2FzZSgpO3ZhciBiPWUubWF0Y2goLy57MSw0fS9nKTtmb3IodmFyIGQ9MDtkPDg7ZCsrKXtiW2RdPWJbZF0ucmVwbGFjZSgvXjArLyxcIlwiKTtpZihiW2RdPT1cIlwiKXtiW2RdPVwiMFwifX1lPVwiOlwiK2Iuam9pbihcIjpcIikrXCI6XCI7dmFyIGM9ZS5tYXRjaCgvOigwOil7Mix9L2cpO2lmKGM9PT1udWxsKXtyZXR1cm4gZS5zbGljZSgxLC0xKX12YXIgZj1cIlwiO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtpZihjW2RdLmxlbmd0aD5mLmxlbmd0aCl7Zj1jW2RdfX1lPWUucmVwbGFjZShmLFwiOjpcIik7cmV0dXJuIGUuc2xpY2UoMSwtMSl9ZnVuY3Rpb24gaGV4dG9pcChiKXt2YXIgZD1cIm1hbGZvcm1lZCBoZXggdmFsdWVcIjtpZighYi5tYXRjaCgvXihbMC05QS1GYS1mXVswLTlBLUZhLWZdKXsxLH0kLykpe3Rocm93IGR9aWYoYi5sZW5ndGg9PTgpe3ZhciBjO3RyeXtjPXBhcnNlSW50KGIuc3Vic3RyKDAsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDIsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDQsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDYsMiksMTYpO3JldHVybiBjfWNhdGNoKGEpe3Rocm93IGR9fWVsc2V7aWYoYi5sZW5ndGg9PTMyKXtyZXR1cm4gaGV4dG9pcHY2KGIpfWVsc2V7cmV0dXJuIGJ9fX1mdW5jdGlvbiBpcHRvaGV4KGYpe3ZhciBqPVwibWFsZm9ybWVkIElQIGFkZHJlc3NcIjtmPWYudG9Mb3dlckNhc2UoZik7aWYoZi5tYXRjaCgvXlswLTkuXSskLykpe3ZhciBiPWYuc3BsaXQoXCIuXCIpO2lmKGIubGVuZ3RoIT09NCl7dGhyb3cgan12YXIgZz1cIlwiO3RyeXtmb3IodmFyIGU9MDtlPDQ7ZSsrKXt2YXIgaD1wYXJzZUludChiW2VdKTtnKz0oXCIwXCIraC50b1N0cmluZygxNikpLnNsaWNlKC0yKX1yZXR1cm4gZ31jYXRjaChjKXt0aHJvdyBqfX1lbHNle2lmKGYubWF0Y2goL15bMC05YS1mOl0rJC8pJiZmLmluZGV4T2YoXCI6XCIpIT09LTEpe3JldHVybiBpcHY2dG9oZXgoZil9ZWxzZXt0aHJvdyBqfX19ZnVuY3Rpb24gdWNzMmhleHRvdXRmOChkKXtmdW5jdGlvbiBlKGYpe3ZhciBoPXBhcnNlSW50KGYuc3Vic3RyKDAsMiksMTYpO3ZhciBhPXBhcnNlSW50KGYuc3Vic3RyKDIpLDE2KTtpZihoPT0wJmE8MTI4KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhKX1pZihoPDgpe3ZhciBqPTE5MnwoKGgmNyk8PDMpfCgoYSYxOTIpPj42KTt2YXIgaT0xMjh8KGEmNjMpO3JldHVybiBoZXh0b3V0Zjgoai50b1N0cmluZygxNikraS50b1N0cmluZygxNikpfXZhciBqPTIyNHwoKGgmMjQwKT4+NCk7dmFyIGk9MTI4fCgoaCYxNSk8PDIpfCgoYSYxOTIpPj42KTt2YXIgZz0xMjh8KGEmNjMpO3JldHVybiBoZXh0b3V0Zjgoai50b1N0cmluZygxNikraS50b1N0cmluZygxNikrZy50b1N0cmluZygxNikpfXZhciBjPWQubWF0Y2goLy57NH0vZyk7dmFyIGI9Yy5tYXAoZSk7cmV0dXJuIGIuam9pbihcIlwiKX1mdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnRBbGwoYSl7dmFyIGQ9ZW5jb2RlVVJJQ29tcG9uZW50KGEpO3ZhciBiPVwiXCI7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2lmKGRbY109PVwiJVwiKXtiPWIrZC5zdWJzdHIoYywzKTtjPWMrMn1lbHNle2I9YitcIiVcIitzdG9oZXgoZFtjXSl9fXJldHVybiBifWZ1bmN0aW9uIG5ld2xpbmVfdG9Vbml4KGEpe2E9YS5yZXBsYWNlKC9cXHJcXG4vbWcsXCJcXG5cIik7cmV0dXJuIGF9ZnVuY3Rpb24gbmV3bGluZV90b0RvcyhhKXthPWEucmVwbGFjZSgvXFxyXFxuL21nLFwiXFxuXCIpO2E9YS5yZXBsYWNlKC9cXG4vbWcsXCJcXHJcXG5cIik7cmV0dXJuIGF9S0pVUi5sYW5nLlN0cmluZy5pc0ludGVnZXI9ZnVuY3Rpb24oYSl7aWYoYS5tYXRjaCgvXlswLTldKyQvKSl7cmV0dXJuIHRydWV9ZWxzZXtpZihhLm1hdGNoKC9eLVswLTldKyQvKSl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fX07S0pVUi5sYW5nLlN0cmluZy5pc0hleD1mdW5jdGlvbihhKXtyZXR1cm4gaXNoZXgoYSl9O2Z1bmN0aW9uIGlzaGV4KGEpe2lmKGEubGVuZ3RoJTI9PTAmJihhLm1hdGNoKC9eWzAtOWEtZl0rJC8pfHxhLm1hdGNoKC9eWzAtOUEtRl0rJC8pKSl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fUtKVVIubGFuZy5TdHJpbmcuaXNCYXNlNjQ9ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoL1xccysvZyxcIlwiKTtpZihhLm1hdGNoKC9eWzAtOUEtWmEteitcXC9dKz17MCwzfSQvKSYmYS5sZW5ndGglND09MCl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fTtLSlVSLmxhbmcuU3RyaW5nLmlzQmFzZTY0VVJMPWZ1bmN0aW9uKGEpe2lmKGEubWF0Y2goL1srLz1dLykpe3JldHVybiBmYWxzZX1hPWI2NHV0b2I2NChhKTtyZXR1cm4gS0pVUi5sYW5nLlN0cmluZy5pc0Jhc2U2NChhKX07S0pVUi5sYW5nLlN0cmluZy5pc0ludGVnZXJBcnJheT1mdW5jdGlvbihhKXthPWEucmVwbGFjZSgvXFxzKy9nLFwiXCIpO2lmKGEubWF0Y2goL15cXFtbMC05LF0rXFxdJC8pKXtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O0tKVVIubGFuZy5TdHJpbmcuaXNQcmludGFibGU9ZnVuY3Rpb24oYSl7aWYoYS5tYXRjaCgvXlswLTlBLVphLXogJygpKywtLi86PT9dKiQvKSE9PW51bGwpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07S0pVUi5sYW5nLlN0cmluZy5pc0lBNT1mdW5jdGlvbihhKXtpZihhLm1hdGNoKC9eW1xceDIwLVxceDIxXFx4MjMtXFx4N2ZdKiQvKSE9PW51bGwpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07S0pVUi5sYW5nLlN0cmluZy5pc01haWw9ZnVuY3Rpb24oYSl7aWYoYS5tYXRjaCgvXltBLVphLXowLTldezF9W0EtWmEtejAtOV8uLV0qQHsxfVtBLVphLXowLTlfLi1dezEsfVxcLltBLVphLXowLTldezEsfSQvKSE9PW51bGwpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07ZnVuY3Rpb24gaGV4dG9wb3NoZXgoYSl7aWYoYS5sZW5ndGglMj09MSl7cmV0dXJuXCIwXCIrYX1pZihhLnN1YnN0cigwLDEpPlwiN1wiKXtyZXR1cm5cIjAwXCIrYX1yZXR1cm4gYX1mdW5jdGlvbiBpbnRhcnlzdHJ0b2hleChiKXtiPWIucmVwbGFjZSgvXlxccypcXFtcXHMqLyxcIlwiKTtiPWIucmVwbGFjZSgvXFxzKlxcXVxccyokLyxcIlwiKTtiPWIucmVwbGFjZSgvXFxzKi9nLFwiXCIpO3RyeXt2YXIgYz1iLnNwbGl0KC8sLykubWFwKGZ1bmN0aW9uKGcsZSxoKXt2YXIgZj1wYXJzZUludChnKTtpZihmPDB8fDI1NTxmKXt0aHJvd1wiaW50ZWdlciBub3QgaW4gcmFuZ2UgMC0yNTVcIn12YXIgZD0oXCIwMFwiK2YudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7cmV0dXJuIGR9KS5qb2luKFwiXCIpO3JldHVybiBjfWNhdGNoKGEpe3Rocm93XCJtYWxmb3JtZWQgaW50ZWdlciBhcnJheSBzdHJpbmc6IFwiK2F9fXZhciBzdHJkaWZmaWR4PWZ1bmN0aW9uKGMsYSl7dmFyIGQ9Yy5sZW5ndGg7aWYoYy5sZW5ndGg+YS5sZW5ndGgpe2Q9YS5sZW5ndGh9Zm9yKHZhciBiPTA7YjxkO2IrKyl7aWYoYy5jaGFyQ29kZUF0KGIpIT1hLmNoYXJDb2RlQXQoYikpe3JldHVybiBifX1pZihjLmxlbmd0aCE9YS5sZW5ndGgpe3JldHVybiBkfXJldHVybiAtMX07ZnVuY3Rpb24gb2lkdG9oZXgoZyl7dmFyIGY9ZnVuY3Rpb24oYSl7dmFyIGw9YS50b1N0cmluZygxNik7aWYobC5sZW5ndGg9PTEpe2w9XCIwXCIrbH1yZXR1cm4gbH07dmFyIGU9ZnVuY3Rpb24ocCl7dmFyIG89XCJcIjt2YXIgbD1wYXJzZUludChwLDEwKTt2YXIgYT1sLnRvU3RyaW5nKDIpO3ZhciBtPTctYS5sZW5ndGglNztpZihtPT03KXttPTB9dmFyIHI9XCJcIjtmb3IodmFyIG49MDtuPG07bisrKXtyKz1cIjBcIn1hPXIrYTtmb3IodmFyIG49MDtuPGEubGVuZ3RoLTE7bis9Nyl7dmFyIHE9YS5zdWJzdHIobiw3KTtpZihuIT1hLmxlbmd0aC03KXtxPVwiMVwiK3F9bys9ZihwYXJzZUludChxLDIpKX1yZXR1cm4gb307dHJ5e2lmKCFnLm1hdGNoKC9eWzAtOS5dKyQvKSl7cmV0dXJuIG51bGx9dmFyIGo9XCJcIjt2YXIgYj1nLnNwbGl0KFwiLlwiKTt2YXIgaz1wYXJzZUludChiWzBdLDEwKSo0MCtwYXJzZUludChiWzFdLDEwKTtqKz1mKGspO2Iuc3BsaWNlKDAsMik7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspe2orPWUoYltkXSl9cmV0dXJuIGp9Y2F0Y2goYyl7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGhleHRvb2lkKGcpe2lmKCFpc2hleChnKSl7cmV0dXJuIG51bGx9dHJ5e3ZhciBtPVtdO3ZhciBwPWcuc3Vic3RyKDAsMik7dmFyIGU9cGFyc2VJbnQocCwxNik7bVswXT1uZXcgU3RyaW5nKE1hdGguZmxvb3IoZS80MCkpO21bMV09bmV3IFN0cmluZyhlJTQwKTt2YXIgbj1nLnN1YnN0cigyKTt2YXIgbD1bXTtmb3IodmFyIGY9MDtmPG4ubGVuZ3RoLzI7ZisrKXtsLnB1c2gocGFyc2VJbnQobi5zdWJzdHIoZioyLDIpLDE2KSl9dmFyIGs9W107dmFyIGQ9XCJcIjtmb3IodmFyIGY9MDtmPGwubGVuZ3RoO2YrKyl7aWYobFtmXSYxMjgpe2Q9ZCtzdHJwYWQoKGxbZl0mMTI3KS50b1N0cmluZygyKSw3KX1lbHNle2Q9ZCtzdHJwYWQoKGxbZl0mMTI3KS50b1N0cmluZygyKSw3KTtrLnB1c2gobmV3IFN0cmluZyhwYXJzZUludChkLDIpKSk7ZD1cIlwifX12YXIgbz1tLmpvaW4oXCIuXCIpO2lmKGsubGVuZ3RoPjApe289bytcIi5cIitrLmpvaW4oXCIuXCIpfXJldHVybiBvfWNhdGNoKGope3JldHVybiBudWxsfX12YXIgc3RycGFkPWZ1bmN0aW9uKGMsYixhKXtpZihhPT11bmRlZmluZWQpe2E9XCIwXCJ9aWYoYy5sZW5ndGg+PWIpe3JldHVybiBjfXJldHVybiBuZXcgQXJyYXkoYi1jLmxlbmd0aCsxKS5qb2luKGEpK2N9O2Z1bmN0aW9uIGJpdHN0cnRvaW50KGUpe3RyeXt2YXIgYT1lLnN1YnN0cigwLDIpO2lmKGE9PVwiMDBcIil7cmV0dXJuIHBhcnNlSW50KGUuc3Vic3RyKDIpLDE2KX12YXIgYj1wYXJzZUludChhLDE2KTt2YXIgZj1lLnN1YnN0cigyKTt2YXIgZD1wYXJzZUludChmLDE2KS50b1N0cmluZygyKTtpZihkPT1cIjBcIil7ZD1cIjAwMDAwMDAwXCJ9ZD1kLnNsaWNlKDAsMC1iKTtyZXR1cm4gcGFyc2VJbnQoZCwyKX1jYXRjaChjKXtyZXR1cm4gLTF9fWZ1bmN0aW9uIGludHRvYml0c3RyKGUpe3ZhciBjPU51bWJlcihlKS50b1N0cmluZygyKTt2YXIgYj04LWMubGVuZ3RoJTg7aWYoYj09OCl7Yj0wfWM9YytzdHJwYWQoXCJcIixiLFwiMFwiKTt2YXIgZD1wYXJzZUludChjLDIpLnRvU3RyaW5nKDE2KTtpZihkLmxlbmd0aCUyPT0xKXtkPVwiMFwiK2R9dmFyIGE9XCIwXCIrYjtyZXR1cm4gYStkfWZ1bmN0aW9uIGV4dGVuZENsYXNzKGMsYSl7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPWEucHJvdG90eXBlO2MucHJvdG90eXBlPW5ldyBiKCk7Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9YztjLnN1cGVyY2xhc3M9YS5wcm90b3R5cGU7aWYoYS5wcm90b3R5cGUuY29uc3RydWN0b3I9PU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3Ipe2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPWF9fTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5jcnlwdG89PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmNyeXB0byl7S0pVUi5jcnlwdG89e319S0pVUi5jcnlwdG8uVXRpbD1uZXcgZnVuY3Rpb24oKXt0aGlzLkRJR0VTVElORk9IRUFEPXtzaGExOlwiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0XCIsc2hhMjI0OlwiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWNcIixzaGEyNTY6XCIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMFwiLHNoYTM4NDpcIjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwXCIsc2hhNTEyOlwiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDBcIixtZDI6XCIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjAyMDUwMDA0MTBcIixtZDU6XCIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTBcIixyaXBlbWQxNjA6XCIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTRcIix9O3RoaXMuREVGQVVMVFBST1ZJREVSPXttZDU6XCJjcnlwdG9qc1wiLHNoYTE6XCJjcnlwdG9qc1wiLHNoYTIyNDpcImNyeXB0b2pzXCIsc2hhMjU2OlwiY3J5cHRvanNcIixzaGEzODQ6XCJjcnlwdG9qc1wiLHNoYTUxMjpcImNyeXB0b2pzXCIscmlwZW1kMTYwOlwiY3J5cHRvanNcIixobWFjbWQ1OlwiY3J5cHRvanNcIixobWFjc2hhMTpcImNyeXB0b2pzXCIsaG1hY3NoYTIyNDpcImNyeXB0b2pzXCIsaG1hY3NoYTI1NjpcImNyeXB0b2pzXCIsaG1hY3NoYTM4NDpcImNyeXB0b2pzXCIsaG1hY3NoYTUxMjpcImNyeXB0b2pzXCIsaG1hY3JpcGVtZDE2MDpcImNyeXB0b2pzXCIsTUQ1d2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMXdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTIyNHdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTM4NHdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTUxMndpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFJJUEVNRDE2MHdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLE1ENXdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMXdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyNTZ3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTM4NHdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBNTEyd2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixSSVBFTUQxNjB3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTF3aXRoRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyMjR3aXRoRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyNTZ3aXRoRFNBOlwiY3J5cHRvanMvanNyc2FcIixNRDV3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBd2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTF3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixTSEEzODR3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBNTEyd2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFJJUEVNRDE2MHdpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIix9O3RoaXMuQ1JZUFRPSlNNRVNTQUdFRElHRVNUTkFNRT17bWQ1OkNyeXB0b0pTLmFsZ28uTUQ1LHNoYTE6Q3J5cHRvSlMuYWxnby5TSEExLHNoYTIyNDpDcnlwdG9KUy5hbGdvLlNIQTIyNCxzaGEyNTY6Q3J5cHRvSlMuYWxnby5TSEEyNTYsc2hhMzg0OkNyeXB0b0pTLmFsZ28uU0hBMzg0LHNoYTUxMjpDcnlwdG9KUy5hbGdvLlNIQTUxMixyaXBlbWQxNjA6Q3J5cHRvSlMuYWxnby5SSVBFTUQxNjB9O3RoaXMuZ2V0RGlnZXN0SW5mb0hleD1mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiB0aGlzLkRJR0VTVElORk9IRUFEW2JdPT1cInVuZGVmaW5lZFwiKXt0aHJvd1wiYWxnIG5vdCBzdXBwb3J0ZWQgaW4gVXRpbC5ESUdFU1RJTkZPSEVBRDogXCIrYn1yZXR1cm4gdGhpcy5ESUdFU1RJTkZPSEVBRFtiXSthfTt0aGlzLmdldFBhZGRlZERpZ2VzdEluZm9IZXg9ZnVuY3Rpb24oaCxhLGope3ZhciBjPXRoaXMuZ2V0RGlnZXN0SW5mb0hleChoLGEpO3ZhciBkPWovNDtpZihjLmxlbmd0aCsyMj5kKXt0aHJvd1wia2V5IGlzIHRvbyBzaG9ydCBmb3IgU2lnQWxnOiBrZXlsZW49XCIraitcIixcIithfXZhciBiPVwiMDAwMVwiO3ZhciBrPVwiMDBcIitjO3ZhciBnPVwiXCI7dmFyIGw9ZC1iLmxlbmd0aC1rLmxlbmd0aDtmb3IodmFyIGY9MDtmPGw7Zis9Mil7Zys9XCJmZlwifXZhciBlPWIrZytrO3JldHVybiBlfTt0aGlzLmhhc2hTdHJpbmc9ZnVuY3Rpb24oYSxjKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOmN9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O3RoaXMuaGFzaEhleD1mdW5jdGlvbihiLGMpe3ZhciBhPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6Y30pO3JldHVybiBhLmRpZ2VzdEhleChiKX07dGhpcy5zaGExPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhhc2hTdHJpbmcoYSxcInNoYTFcIil9O3RoaXMuc2hhMjU2PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhhc2hTdHJpbmcoYSxcInNoYTI1NlwiKX07dGhpcy5zaGEyNTZIZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaGFzaEhleChhLFwic2hhMjU2XCIpfTt0aGlzLnNoYTUxMj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5oYXNoU3RyaW5nKGEsXCJzaGE1MTJcIil9O3RoaXMuc2hhNTEySGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhhc2hIZXgoYSxcInNoYTUxMlwiKX07dGhpcy5pc0tleT1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgUlNBS2V5fHxhIGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRFNBfHxhIGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRUNEU0Epe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX19O0tKVVIuY3J5cHRvLlV0aWwubWQ1PWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJtZDVcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdFN0cmluZyhhKX07S0pVUi5jcnlwdG8uVXRpbC5yaXBlbWQxNjA9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcInJpcGVtZDE2MFwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTtLSlVSLmNyeXB0by5VdGlsLlNFQ1VSRVJBTkRPTUdFTj1uZXcgU2VjdXJlUmFuZG9tKCk7S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5ieXRlcz1mdW5jdGlvbihiKXt2YXIgYT1uZXcgQXJyYXkoYik7S0pVUi5jcnlwdG8uVXRpbC5TRUNVUkVSQU5ET01HRU4ubmV4dEJ5dGVzKGEpO3JldHVybiBCQXRvaGV4KGEpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5ieXRlcz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEJpZ0ludGVnZXIoS0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5ieXRlcyhhKSwxNil9O0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tSGV4T2ZOYml0cz1mdW5jdGlvbihkKXt2YXIgYz1kJTg7dmFyIGE9KGQtYykvODt2YXIgYj1uZXcgQXJyYXkoYSsxKTtLSlVSLmNyeXB0by5VdGlsLlNFQ1VSRVJBTkRPTUdFTi5uZXh0Qnl0ZXMoYik7YlswXT0oKCgyNTU8PGMpJjI1NSleMjU1KSZiWzBdO3JldHVybiBCQXRvaGV4KGIpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5iaXRzPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQmlnSW50ZWdlcihLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUhleE9mTmJpdHMoYSksMTYpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXg9ZnVuY3Rpb24oYil7dmFyIGE9Yi5iaXRMZW5ndGgoKTt3aGlsZSgxKXt2YXIgYz1LSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5iaXRzKGEpO2lmKGIuY29tcGFyZVRvKGMpIT0tMSl7cmV0dXJuIGN9fX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyTWluVG9NYXg9ZnVuY3Rpb24oZSxiKXt2YXIgYz1lLmNvbXBhcmVUbyhiKTtpZihjPT0xKXt0aHJvd1wiYmlNaW4gaXMgZ3JlYXRlciB0aGFuIGJpTWF4XCJ9aWYoYz09MCl7cmV0dXJuIGV9dmFyIGE9Yi5zdWJ0cmFjdChlKTt2YXIgZD1LSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXgoYSk7cmV0dXJuIGQuYWRkKGUpfTtLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0PWZ1bmN0aW9uKGMpe3ZhciBiPW51bGw7dmFyIGE9bnVsbDt2YXIgZD1udWxsO3RoaXMuc2V0QWxnQW5kUHJvdmlkZXI9ZnVuY3Rpb24oZyxmKXtnPUtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuZ2V0Q2Fub25pY2FsQWxnTmFtZShnKTtpZihnIT09bnVsbCYmZj09PXVuZGVmaW5lZCl7Zj1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUltnXX1pZihcIjptZDU6c2hhMTpzaGEyMjQ6c2hhMjU2OnNoYTM4NDpzaGE1MTI6cmlwZW1kMTYwOlwiLmluZGV4T2YoZykhPS0xJiZmPT1cImNyeXB0b2pzXCIpe3RyeXt0aGlzLm1kPUtKVVIuY3J5cHRvLlV0aWwuQ1JZUFRPSlNNRVNTQUdFRElHRVNUTkFNRVtnXS5jcmVhdGUoKX1jYXRjaChlKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgYWxnPVwiK2crXCIvXCIrZX10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihoKXt0aGlzLm1kLnVwZGF0ZShoKX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24oaCl7dmFyIGk9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShoKTt0aGlzLm1kLnVwZGF0ZShpKX07dGhpcy5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgaD10aGlzLm1kLmZpbmFsaXplKCk7cmV0dXJuIGgudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCl9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGgpe3RoaXMudXBkYXRlU3RyaW5nKGgpO3JldHVybiB0aGlzLmRpZ2VzdCgpfTt0aGlzLmRpZ2VzdEhleD1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZUhleChoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX19aWYoXCI6c2hhMjU2OlwiLmluZGV4T2YoZykhPS0xJiZmPT1cInNqY2xcIil7dHJ5e3RoaXMubWQ9bmV3IHNqY2wuaGFzaC5zaGEyNTYoKX1jYXRjaChlKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgYWxnPVwiK2crXCIvXCIrZX10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihoKXt0aGlzLm1kLnVwZGF0ZShoKX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24oaSl7dmFyIGg9c2pjbC5jb2RlYy5oZXgudG9CaXRzKGkpO3RoaXMubWQudXBkYXRlKGgpfTt0aGlzLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBoPXRoaXMubWQuZmluYWxpemUoKTtyZXR1cm4gc2pjbC5jb2RlYy5oZXguZnJvbUJpdHMoaCl9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGgpe3RoaXMudXBkYXRlU3RyaW5nKGgpO3JldHVybiB0aGlzLmRpZ2VzdCgpfTt0aGlzLmRpZ2VzdEhleD1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZUhleChoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX19fTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihlKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGUpe3Rocm93XCJ1cGRhdGVIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07dGhpcy5kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvd1wiZGlnZXN0KCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGUpe3Rocm93XCJkaWdlc3RTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07dGhpcy5kaWdlc3RIZXg9ZnVuY3Rpb24oZSl7dGhyb3dcImRpZ2VzdEhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnTmFtZStcIi9cIit0aGlzLnByb3ZOYW1lfTtpZihjIT09dW5kZWZpbmVkKXtpZihjLmFsZyE9PXVuZGVmaW5lZCl7dGhpcy5hbGdOYW1lPWMuYWxnO2lmKGMucHJvdj09PXVuZGVmaW5lZCl7dGhpcy5wcm92TmFtZT1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUlt0aGlzLmFsZ05hbWVdfXRoaXMuc2V0QWxnQW5kUHJvdmlkZXIodGhpcy5hbGdOYW1lLHRoaXMucHJvdk5hbWUpfX19O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuZ2V0Q2Fub25pY2FsQWxnTmFtZT1mdW5jdGlvbihhKXtpZih0eXBlb2YgYT09PVwic3RyaW5nXCIpe2E9YS50b0xvd2VyQ2FzZSgpO2E9YS5yZXBsYWNlKC8tLyxcIlwiKX1yZXR1cm4gYX07S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdC5nZXRIYXNoTGVuZ3RoPWZ1bmN0aW9uKGMpe3ZhciBiPUtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Q7dmFyIGE9Yi5nZXRDYW5vbmljYWxBbGdOYW1lKGMpO2lmKGIuSEFTSExFTkdUSFthXT09PXVuZGVmaW5lZCl7dGhyb3dcIm5vdCBzdXBwb3J0ZWQgYWxnb3JpdGhtOiBcIitjfXJldHVybiBiLkhBU0hMRU5HVEhbYV19O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuSEFTSExFTkdUSD17bWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LHJpcGVtZDE2MDoyMH07S0pVUi5jcnlwdG8uTWFjPWZ1bmN0aW9uKGQpe3ZhciBmPW51bGw7dmFyIGM9bnVsbDt2YXIgYT1udWxsO3ZhciBlPW51bGw7dmFyIGI9bnVsbDt0aGlzLnNldEFsZ0FuZFByb3ZpZGVyPWZ1bmN0aW9uKGssaSl7az1rLnRvTG93ZXJDYXNlKCk7aWYoaz09bnVsbCl7az1cImhtYWNzaGExXCJ9az1rLnRvTG93ZXJDYXNlKCk7aWYoay5zdWJzdHIoMCw0KSE9XCJobWFjXCIpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciB1bnN1cHBvcnRlZCBITUFDIGFsZzogXCIra31pZihpPT09dW5kZWZpbmVkKXtpPUtKVVIuY3J5cHRvLlV0aWwuREVGQVVMVFBST1ZJREVSW2tdfXRoaXMuYWxnUHJvdj1rK1wiL1wiK2k7dmFyIGc9ay5zdWJzdHIoNCk7aWYoXCI6bWQ1OnNoYTE6c2hhMjI0OnNoYTI1NjpzaGEzODQ6c2hhNTEyOnJpcGVtZDE2MDpcIi5pbmRleE9mKGcpIT0tMSYmaT09XCJjcnlwdG9qc1wiKXt0cnl7dmFyIGo9S0pVUi5jcnlwdG8uVXRpbC5DUllQVE9KU01FU1NBR0VESUdFU1ROQU1FW2ddO3RoaXMubWFjPUNyeXB0b0pTLmFsZ28uSE1BQy5jcmVhdGUoaix0aGlzLnBhc3MpfWNhdGNoKGgpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciBoYXNoIGFsZyBzZXQgZmFpbCBoYXNoQWxnPVwiK2crXCIvXCIraH10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihsKXt0aGlzLm1hYy51cGRhdGUobCl9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGwpe3ZhciBtPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UobCk7dGhpcy5tYWMudXBkYXRlKG0pfTt0aGlzLmRvRmluYWw9ZnVuY3Rpb24oKXt2YXIgbD10aGlzLm1hYy5maW5hbGl6ZSgpO3JldHVybiBsLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpfTt0aGlzLmRvRmluYWxTdHJpbmc9ZnVuY3Rpb24obCl7dGhpcy51cGRhdGVTdHJpbmcobCk7cmV0dXJuIHRoaXMuZG9GaW5hbCgpfTt0aGlzLmRvRmluYWxIZXg9ZnVuY3Rpb24obCl7dGhpcy51cGRhdGVIZXgobCk7cmV0dXJuIHRoaXMuZG9GaW5hbCgpfX19O3RoaXMudXBkYXRlU3RyaW5nPWZ1bmN0aW9uKGcpe3Rocm93XCJ1cGRhdGVTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGcpe3Rocm93XCJ1cGRhdGVIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuZG9GaW5hbD1mdW5jdGlvbigpe3Rocm93XCJkaWdlc3QoKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuZG9GaW5hbFN0cmluZz1mdW5jdGlvbihnKXt0aHJvd1wiZGlnZXN0U3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLmRvRmluYWxIZXg9ZnVuY3Rpb24oZyl7dGhyb3dcImRpZ2VzdEhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnUHJvdn07dGhpcy5zZXRQYXNzd29yZD1mdW5jdGlvbihoKXtpZih0eXBlb2YgaD09XCJzdHJpbmdcIil7dmFyIGc9aDtpZihoLmxlbmd0aCUyPT0xfHwhaC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKSl7Zz1yc3RydG9oZXgoaCl9dGhpcy5wYXNzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoZyk7cmV0dXJufWlmKHR5cGVvZiBoIT1cIm9iamVjdFwiKXt0aHJvd1wiS0pVUi5jcnlwdG8uTWFjIHVuc3VwcG9ydGVkIHBhc3N3b3JkIHR5cGU6IFwiK2h9dmFyIGc9bnVsbDtpZihoLmhleCE9PXVuZGVmaW5lZCl7aWYoaC5oZXgubGVuZ3RoJTIhPTB8fCFoLmhleC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKSl7dGhyb3dcIk1hYzogd3JvbmcgaGV4IHBhc3N3b3JkOiBcIitoLmhleH1nPWguaGV4fWlmKGgudXRmOCE9PXVuZGVmaW5lZCl7Zz11dGY4dG9oZXgoaC51dGY4KX1pZihoLnJzdHIhPT11bmRlZmluZWQpe2c9cnN0cnRvaGV4KGgucnN0cil9aWYoaC5iNjQhPT11bmRlZmluZWQpe2c9YjY0dG9oZXgoaC5iNjQpfWlmKGguYjY0dSE9PXVuZGVmaW5lZCl7Zz1iNjR1dG9oZXgoaC5iNjR1KX1pZihnPT1udWxsKXt0aHJvd1wiS0pVUi5jcnlwdG8uTWFjIHVuc3VwcG9ydGVkIHBhc3N3b3JkIHR5cGU6IFwiK2h9dGhpcy5wYXNzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoZyl9O2lmKGQhPT11bmRlZmluZWQpe2lmKGQucGFzcyE9PXVuZGVmaW5lZCl7dGhpcy5zZXRQYXNzd29yZChkLnBhc3MpfWlmKGQuYWxnIT09dW5kZWZpbmVkKXt0aGlzLmFsZ05hbWU9ZC5hbGc7aWYoZC5wcm92PT09dW5kZWZpbmVkKXt0aGlzLnByb3ZOYW1lPUtKVVIuY3J5cHRvLlV0aWwuREVGQVVMVFBST1ZJREVSW3RoaXMuYWxnTmFtZV19dGhpcy5zZXRBbGdBbmRQcm92aWRlcih0aGlzLmFsZ05hbWUsdGhpcy5wcm92TmFtZSl9fX07S0pVUi5jcnlwdG8uU2lnbmF0dXJlPWZ1bmN0aW9uKG8pe3ZhciBxPW51bGw7dmFyIG49bnVsbDt2YXIgcj1udWxsO3ZhciBjPW51bGw7dmFyIGw9bnVsbDt2YXIgZD1udWxsO3ZhciBrPW51bGw7dmFyIGg9bnVsbDt2YXIgcD1udWxsO3ZhciBlPW51bGw7dmFyIGI9LTE7dmFyIGc9bnVsbDt2YXIgaj1udWxsO3ZhciBhPW51bGw7dmFyIGk9bnVsbDt2YXIgZj1udWxsO3RoaXMuX3NldEFsZ05hbWVzPWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5hbGdOYW1lLm1hdGNoKC9eKC4rKXdpdGgoLispJC8pO2lmKHMpe3RoaXMubWRBbGdOYW1lPXNbMV0udG9Mb3dlckNhc2UoKTt0aGlzLnB1YmtleUFsZ05hbWU9c1syXS50b0xvd2VyQ2FzZSgpO2lmKHRoaXMucHVia2V5QWxnTmFtZT09XCJyc2FhbmRtZ2YxXCImJnRoaXMubWRBbGdOYW1lPT1cInNoYVwiKXt0aGlzLm1kQWxnTmFtZT1cInNoYTFcIn19fTt0aGlzLl96ZXJvUGFkZGluZ09mU2lnbmF0dXJlPWZ1bmN0aW9uKHgsdyl7dmFyIHY9XCJcIjt2YXIgdD13LzQteC5sZW5ndGg7Zm9yKHZhciB1PTA7dTx0O3UrKyl7dj12K1wiMFwifXJldHVybiB2K3h9O3RoaXMuc2V0QWxnQW5kUHJvdmlkZXI9ZnVuY3Rpb24odSx0KXt0aGlzLl9zZXRBbGdOYW1lcygpO2lmKHQhPVwiY3J5cHRvanMvanNyc2FcIil7dGhyb3cgbmV3IEVycm9yKFwicHJvdmlkZXIgbm90IHN1cHBvcnRlZDogXCIrdCl9aWYoXCI6bWQ1OnNoYTE6c2hhMjI0OnNoYTI1NjpzaGEzODQ6c2hhNTEyOnJpcGVtZDE2MDpcIi5pbmRleE9mKHRoaXMubWRBbGdOYW1lKSE9LTEpe3RyeXt0aGlzLm1kPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6dGhpcy5tZEFsZ05hbWV9KX1jYXRjaChzKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRBbGdBbmRQcm92aWRlciBoYXNoIGFsZyBzZXQgZmFpbCBhbGc9XCIrdGhpcy5tZEFsZ05hbWUrXCIvXCIrcyl9dGhpcy5pbml0PWZ1bmN0aW9uKHcseCl7dmFyIHk9bnVsbDt0cnl7aWYoeD09PXVuZGVmaW5lZCl7eT1LRVlVVElMLmdldEtleSh3KX1lbHNle3k9S0VZVVRJTC5nZXRLZXkodyx4KX19Y2F0Y2godil7dGhyb3dcImluaXQgZmFpbGVkOlwiK3Z9aWYoeS5pc1ByaXZhdGU9PT10cnVlKXt0aGlzLnBydktleT15O3RoaXMuc3RhdGU9XCJTSUdOXCJ9ZWxzZXtpZih5LmlzUHVibGljPT09dHJ1ZSl7dGhpcy5wdWJLZXk9eTt0aGlzLnN0YXRlPVwiVkVSSUZZXCJ9ZWxzZXt0aHJvd1wiaW5pdCBmYWlsZWQuOlwiK3l9fX07dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24odil7dGhpcy5tZC51cGRhdGVTdHJpbmcodil9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKHYpe3RoaXMubWQudXBkYXRlSGV4KHYpfTt0aGlzLnNpZ249ZnVuY3Rpb24oKXt0aGlzLnNIYXNoSGV4PXRoaXMubWQuZGlnZXN0KCk7aWYodGhpcy5wcnZLZXk9PT11bmRlZmluZWQmJnRoaXMuZWNwcnZoZXghPT11bmRlZmluZWQmJnRoaXMuZWNjdXJ2ZW5hbWUhPT11bmRlZmluZWQmJktKVVIuY3J5cHRvLkVDRFNBIT09dW5kZWZpbmVkKXt0aGlzLnBydktleT1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOnRoaXMuZWNjdXJ2ZW5hbWUscHJ2OnRoaXMuZWNwcnZoZXh9KX1pZih0aGlzLnBydktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FhbmRtZ2YxXCIpe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaFBTUyh0aGlzLnNIYXNoSGV4LHRoaXMubWRBbGdOYW1lLHRoaXMucHNzU2FsdExlbil9ZWxzZXtpZih0aGlzLnBydktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FcIil7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgsdGhpcy5tZEFsZ05hbWUpfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSl7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgpfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5EU0Epe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4KX1lbHNle3Rocm93XCJTaWduYXR1cmU6IHVuc3VwcG9ydGVkIHByaXZhdGUga2V5IGFsZzogXCIrdGhpcy5wdWJrZXlBbGdOYW1lfX19fXJldHVybiB0aGlzLmhTaWdufTt0aGlzLnNpZ25TdHJpbmc9ZnVuY3Rpb24odil7dGhpcy51cGRhdGVTdHJpbmcodik7cmV0dXJuIHRoaXMuc2lnbigpfTt0aGlzLnNpZ25IZXg9ZnVuY3Rpb24odil7dGhpcy51cGRhdGVIZXgodik7cmV0dXJuIHRoaXMuc2lnbigpfTt0aGlzLnZlcmlmeT1mdW5jdGlvbih2KXt0aGlzLnNIYXNoSGV4PXRoaXMubWQuZGlnZXN0KCk7aWYodGhpcy5wdWJLZXk9PT11bmRlZmluZWQmJnRoaXMuZWNwdWJoZXghPT11bmRlZmluZWQmJnRoaXMuZWNjdXJ2ZW5hbWUhPT11bmRlZmluZWQmJktKVVIuY3J5cHRvLkVDRFNBIT09dW5kZWZpbmVkKXt0aGlzLnB1YktleT1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOnRoaXMuZWNjdXJ2ZW5hbWUscHViOnRoaXMuZWNwdWJoZXh9KX1pZih0aGlzLnB1YktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FhbmRtZ2YxXCIpe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2hQU1ModGhpcy5zSGFzaEhleCx2LHRoaXMubWRBbGdOYW1lLHRoaXMucHNzU2FsdExlbil9ZWxzZXtpZih0aGlzLnB1YktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FcIil7cmV0dXJuIHRoaXMucHViS2V5LnZlcmlmeVdpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4LHYpfWVsc2V7aWYoS0pVUi5jcnlwdG8uRUNEU0EhPT11bmRlZmluZWQmJnRoaXMucHViS2V5IGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRUNEU0Epe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCx2KX1lbHNle2lmKEtKVVIuY3J5cHRvLkRTQSE9PXVuZGVmaW5lZCYmdGhpcy5wdWJLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5EU0Epe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCx2KX1lbHNle3Rocm93XCJTaWduYXR1cmU6IHVuc3VwcG9ydGVkIHB1YmxpYyBrZXkgYWxnOiBcIit0aGlzLnB1YmtleUFsZ05hbWV9fX19fX19O3RoaXMuaW5pdD1mdW5jdGlvbihzLHQpe3Rocm93XCJpbml0KGtleSwgcGFzcykgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihzKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihzKXt0aHJvd1widXBkYXRlSGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnNpZ249ZnVuY3Rpb24oKXt0aHJvd1wic2lnbigpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5zaWduU3RyaW5nPWZ1bmN0aW9uKHMpe3Rocm93XCJkaWdlc3RTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMuc2lnbkhleD1mdW5jdGlvbihzKXt0aHJvd1wiZGlnZXN0SGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnZlcmlmeT1mdW5jdGlvbihzKXt0aHJvd1widmVyaWZ5KGhTaWdWYWwpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5pbml0UGFyYW1zPW87aWYobyE9PXVuZGVmaW5lZCl7aWYoby5hbGchPT11bmRlZmluZWQpe3RoaXMuYWxnTmFtZT1vLmFsZztpZihvLnByb3Y9PT11bmRlZmluZWQpe3RoaXMucHJvdk5hbWU9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJbdGhpcy5hbGdOYW1lXX1lbHNle3RoaXMucHJvdk5hbWU9by5wcm92fXRoaXMuYWxnUHJvdk5hbWU9dGhpcy5hbGdOYW1lK1wiOlwiK3RoaXMucHJvdk5hbWU7dGhpcy5zZXRBbGdBbmRQcm92aWRlcih0aGlzLmFsZ05hbWUsdGhpcy5wcm92TmFtZSk7dGhpcy5fc2V0QWxnTmFtZXMoKX1pZihvLnBzc3NhbHRsZW4hPT11bmRlZmluZWQpe3RoaXMucHNzU2FsdExlbj1vLnBzc3NhbHRsZW59aWYoby5wcnZrZXlwZW0hPT11bmRlZmluZWQpe2lmKG8ucHJ2a2V5cGFzIT09dW5kZWZpbmVkKXt0aHJvd1wiYm90aCBwcnZrZXlwZW0gYW5kIHBydmtleXBhcyBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWRcIn1lbHNle3RyeXt2YXIgcT1LRVlVVElMLmdldEtleShvLnBydmtleXBlbSk7dGhpcy5pbml0KHEpfWNhdGNoKG0pe3Rocm93XCJmYXRhbCBlcnJvciB0byBsb2FkIHBlbSBwcml2YXRlIGtleTogXCIrbX19fX19O0tKVVIuY3J5cHRvLkNpcGhlcj1mdW5jdGlvbihhKXt9O0tKVVIuY3J5cHRvLkNpcGhlci5lbmNyeXB0PWZ1bmN0aW9uKGUsZixkKXtpZihmIGluc3RhbmNlb2YgUlNBS2V5JiZmLmlzUHVibGljKXt2YXIgYz1LSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lKGYsZCk7aWYoYz09PVwiUlNBXCIpe3JldHVybiBmLmVuY3J5cHQoZSl9aWYoYz09PVwiUlNBT0FFUFwiKXtyZXR1cm4gZi5lbmNyeXB0T0FFUChlLFwic2hhMVwiKX12YXIgYj1jLm1hdGNoKC9eUlNBT0FFUChcXGQrKSQvKTtpZihiIT09bnVsbCl7cmV0dXJuIGYuZW5jcnlwdE9BRVAoZSxcInNoYVwiK2JbMV0pfXRocm93XCJDaXBoZXIuZW5jcnlwdDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIGZvciBSU0FLZXk6IFwiK2R9ZWxzZXt0aHJvd1wiQ2lwaGVyLmVuY3J5cHQ6IHVuc3VwcG9ydGVkIGtleSBvciBhbGdvcml0aG1cIn19O0tKVVIuY3J5cHRvLkNpcGhlci5kZWNyeXB0PWZ1bmN0aW9uKGUsZixkKXtpZihmIGluc3RhbmNlb2YgUlNBS2V5JiZmLmlzUHJpdmF0ZSl7dmFyIGM9S0pVUi5jcnlwdG8uQ2lwaGVyLmdldEFsZ0J5S2V5QW5kTmFtZShmLGQpO2lmKGM9PT1cIlJTQVwiKXtyZXR1cm4gZi5kZWNyeXB0KGUpfWlmKGM9PT1cIlJTQU9BRVBcIil7cmV0dXJuIGYuZGVjcnlwdE9BRVAoZSxcInNoYTFcIil9dmFyIGI9Yy5tYXRjaCgvXlJTQU9BRVAoXFxkKykkLyk7aWYoYiE9PW51bGwpe3JldHVybiBmLmRlY3J5cHRPQUVQKGUsXCJzaGFcIitiWzFdKX10aHJvd1wiQ2lwaGVyLmRlY3J5cHQ6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgUlNBS2V5OiBcIitkfWVsc2V7dGhyb3dcIkNpcGhlci5kZWNyeXB0OiB1bnN1cHBvcnRlZCBrZXkgb3IgYWxnb3JpdGhtXCJ9fTtLSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lPWZ1bmN0aW9uKGIsYSl7aWYoYiBpbnN0YW5jZW9mIFJTQUtleSl7aWYoXCI6UlNBOlJTQU9BRVA6UlNBT0FFUDIyNDpSU0FPQUVQMjU2OlJTQU9BRVAzODQ6UlNBT0FFUDUxMjpcIi5pbmRleE9mKGEpIT0tMSl7cmV0dXJuIGF9aWYoYT09PW51bGx8fGE9PT11bmRlZmluZWQpe3JldHVyblwiUlNBXCJ9dGhyb3dcImdldEFsZ0J5S2V5QW5kTmFtZTogbm90IHN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZSBmb3IgUlNBS2V5OiBcIithfXRocm93XCJnZXRBbGdCeUtleUFuZE5hbWU6IG5vdCBzdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWU6IFwiK2F9O0tKVVIuY3J5cHRvLk9JRD1uZXcgZnVuY3Rpb24oKXt0aGlzLm9pZGhleDJuYW1lPXtcIjJhODY0ODg2ZjcwZDAxMDEwMVwiOlwicnNhRW5jcnlwdGlvblwiLFwiMmE4NjQ4Y2UzZDAyMDFcIjpcImVjUHVibGljS2V5XCIsXCIyYTg2NDhjZTM4MDQwMVwiOlwiZHNhXCIsXCIyYTg2NDhjZTNkMDMwMTA3XCI6XCJzZWNwMjU2cjFcIixcIjJiODEwNDAwMWZcIjpcInNlY3AxOTJrMVwiLFwiMmI4MTA0MDAyMVwiOlwic2VjcDIyNHIxXCIsXCIyYjgxMDQwMDBhXCI6XCJzZWNwMjU2azFcIixcIjJiODEwNDAwMjNcIjpcInNlY3A1MjFyMVwiLFwiMmI4MTA0MDAyMlwiOlwic2VjcDM4NHIxXCIsXCIyYTg2NDhjZTM4MDQwM1wiOlwiU0hBMXdpdGhEU0FcIixcIjYwODY0ODAxNjUwMzA0MDMwMVwiOlwiU0hBMjI0d2l0aERTQVwiLFwiNjA4NjQ4MDE2NTAzMDQwMzAyXCI6XCJTSEEyNTZ3aXRoRFNBXCIsfX07XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuY3J5cHRvPT1cInVuZGVmaW5lZFwifHwhS0pVUi5jcnlwdG8pe0tKVVIuY3J5cHRvPXt9fUtKVVIuY3J5cHRvLkVDRFNBPWZ1bmN0aW9uKGUpe3ZhciBnPVwic2VjcDI1NnIxXCI7dmFyIHA9bnVsbDt2YXIgYj1udWxsO3ZhciBpPW51bGw7dmFyIGo9RXJyb3IsZj1CaWdJbnRlZ2VyLGg9RUNQb2ludEZwLG09S0pVUi5jcnlwdG8uRUNEU0EsYz1LSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLGQ9bS5nZXROYW1lLHE9QVNOMUhFWCxuPXEuZ2V0VmJ5TGlzdEV4LGs9cS5pc0FTTjFIRVg7dmFyIGE9bmV3IFNlY3VyZVJhbmRvbSgpO3ZhciBvPW51bGw7dGhpcy50eXBlPVwiRUNcIjt0aGlzLmlzUHJpdmF0ZT1mYWxzZTt0aGlzLmlzUHVibGljPWZhbHNlO2Z1bmN0aW9uIGwoeCx0LHcscyl7dmFyIHI9TWF0aC5tYXgodC5iaXRMZW5ndGgoKSxzLmJpdExlbmd0aCgpKTt2YXIgeT14LmFkZDJEKHcpO3ZhciB2PXguY3VydmUuZ2V0SW5maW5pdHkoKTtmb3IodmFyIHU9ci0xO3U+PTA7LS11KXt2PXYudHdpY2UyRCgpO3Yuej1mLk9ORTtpZih0LnRlc3RCaXQodSkpe2lmKHMudGVzdEJpdCh1KSl7dj12LmFkZDJEKHkpfWVsc2V7dj12LmFkZDJEKHgpfX1lbHNle2lmKHMudGVzdEJpdCh1KSl7dj12LmFkZDJEKHcpfX19cmV0dXJuIHZ9dGhpcy5nZXRCaWdSYW5kb209ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBmKHIuYml0TGVuZ3RoKCksYSkubW9kKHIuc3VidHJhY3QoZi5PTkUpKS5hZGQoZi5PTkUpfTt0aGlzLnNldE5hbWVkQ3VydmU9ZnVuY3Rpb24ocil7dGhpcy5lY3BhcmFtcz1jLmdldEJ5TmFtZShyKTt0aGlzLnBydktleUhleD1udWxsO3RoaXMucHViS2V5SGV4PW51bGw7dGhpcy5jdXJ2ZU5hbWU9cn07dGhpcy5zZXRQcml2YXRlS2V5SGV4PWZ1bmN0aW9uKHIpe3RoaXMuaXNQcml2YXRlPXRydWU7dGhpcy5wcnZLZXlIZXg9cn07dGhpcy5zZXRQdWJsaWNLZXlIZXg9ZnVuY3Rpb24ocil7dGhpcy5pc1B1YmxpYz10cnVlO3RoaXMucHViS2V5SGV4PXJ9O3RoaXMuZ2V0UHVibGljS2V5WFlIZXg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnB1YktleUhleDtpZih0LnN1YnN0cigwLDIpIT09XCIwNFwiKXt0aHJvd1widGhpcyBtZXRob2Qgc3VwcG9ydHMgdW5jb21wcmVzc2VkIGZvcm1hdCgwNCkgb25seVwifXZhciBzPXRoaXMuZWNwYXJhbXMua2V5bGVuLzQ7aWYodC5sZW5ndGghPT0yK3MqMil7dGhyb3dcIm1hbGZvcm1lZCBwdWJsaWMga2V5IGhleCBsZW5ndGhcIn12YXIgcj17fTtyLng9dC5zdWJzdHIoMixzKTtyLnk9dC5zdWJzdHIoMitzKTtyZXR1cm4gcn07dGhpcy5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5jdXJ2ZU5hbWU7aWYocj09PVwic2VjcDI1NnIxXCJ8fHI9PT1cIk5JU1QgUC0yNTZcInx8cj09PVwiUC0yNTZcInx8cj09PVwicHJpbWUyNTZ2MVwiKXtyZXR1cm5cIlAtMjU2XCJ9aWYocj09PVwic2VjcDM4NHIxXCJ8fHI9PT1cIk5JU1QgUC0zODRcInx8cj09PVwiUC0zODRcIil7cmV0dXJuXCJQLTM4NFwifXJldHVybiBudWxsfTt0aGlzLmdlbmVyYXRlS2V5UGFpckhleD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZWNwYXJhbXMubjt2YXIgdz10aGlzLmdldEJpZ1JhbmRvbSh0KTt2YXIgdT10aGlzLmVjcGFyYW1zLkcubXVsdGlwbHkodyk7dmFyIHo9dS5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIHg9dS5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIHI9dGhpcy5lY3BhcmFtcy5rZXlsZW4vNDt2YXIgdj0oXCIwMDAwMDAwMDAwXCIrdy50b1N0cmluZygxNikpLnNsaWNlKC1yKTt2YXIgQT0oXCIwMDAwMDAwMDAwXCIrei50b1N0cmluZygxNikpLnNsaWNlKC1yKTt2YXIgeT0oXCIwMDAwMDAwMDAwXCIreC50b1N0cmluZygxNikpLnNsaWNlKC1yKTt2YXIgcz1cIjA0XCIrQSt5O3RoaXMuc2V0UHJpdmF0ZUtleUhleCh2KTt0aGlzLnNldFB1YmxpY0tleUhleChzKTtyZXR1cm57ZWNwcnZoZXg6dixlY3B1YmhleDpzfX07dGhpcy5zaWduV2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnNpZ25IZXgocix0aGlzLnBydktleUhleCl9O3RoaXMuc2lnbkhleD1mdW5jdGlvbih4LHUpe3ZhciBBPW5ldyBmKHUsMTYpO3ZhciB2PXRoaXMuZWNwYXJhbXMubjt2YXIgej1uZXcgZih4LnN1YnN0cmluZygwLHRoaXMuZWNwYXJhbXMua2V5bGVuLzQpLDE2KTtkb3t2YXIgdz10aGlzLmdldEJpZ1JhbmRvbSh2KTt2YXIgQj10aGlzLmVjcGFyYW1zLkc7dmFyIHk9Qi5tdWx0aXBseSh3KTt2YXIgdD15LmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2Qodil9d2hpbGUodC5jb21wYXJlVG8oZi5aRVJPKTw9MCk7dmFyIEM9dy5tb2RJbnZlcnNlKHYpLm11bHRpcGx5KHouYWRkKEEubXVsdGlwbHkodCkpKS5tb2Qodik7cmV0dXJuIG0uYmlSU1NpZ1RvQVNOMVNpZyh0LEMpfTt0aGlzLnNpZ249ZnVuY3Rpb24odyxCKXt2YXIgej1CO3ZhciB1PXRoaXMuZWNwYXJhbXMubjt2YXIgeT1mLmZyb21CeXRlQXJyYXlVbnNpZ25lZCh3KTtkb3t2YXIgdj10aGlzLmdldEJpZ1JhbmRvbSh1KTt2YXIgQT10aGlzLmVjcGFyYW1zLkc7dmFyIHg9QS5tdWx0aXBseSh2KTt2YXIgdD14LmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2QodSl9d2hpbGUodC5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKTw9MCk7dmFyIEM9di5tb2RJbnZlcnNlKHUpLm11bHRpcGx5KHkuYWRkKHoubXVsdGlwbHkodCkpKS5tb2QodSk7cmV0dXJuIHRoaXMuc2VyaWFsaXplU2lnKHQsQyl9O3RoaXMudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKHMscil7cmV0dXJuIHRoaXMudmVyaWZ5SGV4KHMscix0aGlzLnB1YktleUhleCl9O3RoaXMudmVyaWZ5SGV4PWZ1bmN0aW9uKHYseSx1KXt0cnl7dmFyIHQsQjt2YXIgdz1tLnBhcnNlU2lnSGV4KHkpO3Q9dy5yO0I9dy5zO3ZhciB4PWguZGVjb2RlRnJvbUhleCh0aGlzLmVjcGFyYW1zLmN1cnZlLHUpO3ZhciB6PW5ldyBmKHYuc3Vic3RyaW5nKDAsdGhpcy5lY3BhcmFtcy5rZXlsZW4vNCksMTYpO3JldHVybiB0aGlzLnZlcmlmeVJhdyh6LHQsQix4KX1jYXRjaChBKXtyZXR1cm4gZmFsc2V9fTt0aGlzLnZlcmlmeT1mdW5jdGlvbih6LEEsdSl7dmFyIHcsdDtpZihCaXRjb2luLlV0aWwuaXNBcnJheShBKSl7dmFyIHk9dGhpcy5wYXJzZVNpZyhBKTt3PXkucjt0PXkuc31lbHNle2lmKFwib2JqZWN0XCI9PT10eXBlb2YgQSYmQS5yJiZBLnMpe3c9QS5yO3Q9QS5zfWVsc2V7dGhyb3dcIkludmFsaWQgdmFsdWUgZm9yIHNpZ25hdHVyZVwifX12YXIgdjtpZih1IGluc3RhbmNlb2YgRUNQb2ludEZwKXt2PXV9ZWxzZXtpZihCaXRjb2luLlV0aWwuaXNBcnJheSh1KSl7dj1oLmRlY29kZUZyb20odGhpcy5lY3BhcmFtcy5jdXJ2ZSx1KX1lbHNle3Rocm93XCJJbnZhbGlkIGZvcm1hdCBmb3IgcHVia2V5IHZhbHVlLCBtdXN0IGJlIGJ5dGUgYXJyYXkgb3IgRUNQb2ludEZwXCJ9fXZhciB4PWYuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKHopO3JldHVybiB0aGlzLnZlcmlmeVJhdyh4LHcsdCx2KX07dGhpcy52ZXJpZnlSYXc9ZnVuY3Rpb24oeix0LEUseSl7dmFyIHg9dGhpcy5lY3BhcmFtcy5uO3ZhciBEPXRoaXMuZWNwYXJhbXMuRztpZih0LmNvbXBhcmVUbyhmLk9ORSk8MHx8dC5jb21wYXJlVG8oeCk+PTApe3JldHVybiBmYWxzZX1pZihFLmNvbXBhcmVUbyhmLk9ORSk8MHx8RS5jb21wYXJlVG8oeCk+PTApe3JldHVybiBmYWxzZX12YXIgQT1FLm1vZEludmVyc2UoeCk7dmFyIHc9ei5tdWx0aXBseShBKS5tb2QoeCk7dmFyIHU9dC5tdWx0aXBseShBKS5tb2QoeCk7dmFyIEI9RC5tdWx0aXBseSh3KS5hZGQoeS5tdWx0aXBseSh1KSk7dmFyIEM9Qi5nZXRYKCkudG9CaWdJbnRlZ2VyKCkubW9kKHgpO3JldHVybiBDLmVxdWFscyh0KX07dGhpcy5zZXJpYWxpemVTaWc9ZnVuY3Rpb24odix1KXt2YXIgdz12LnRvQnl0ZUFycmF5U2lnbmVkKCk7dmFyIHQ9dS50b0J5dGVBcnJheVNpZ25lZCgpO3ZhciB4PVtdO3gucHVzaCgyKTt4LnB1c2gody5sZW5ndGgpO3g9eC5jb25jYXQodyk7eC5wdXNoKDIpO3gucHVzaCh0Lmxlbmd0aCk7eD14LmNvbmNhdCh0KTt4LnVuc2hpZnQoeC5sZW5ndGgpO3gudW5zaGlmdCg0OCk7cmV0dXJuIHh9O3RoaXMucGFyc2VTaWc9ZnVuY3Rpb24oeSl7dmFyIHg7aWYoeVswXSE9NDgpe3Rocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBub3QgYSB2YWxpZCBERVJTZXF1ZW5jZVwiKX14PTI7aWYoeVt4XSE9Mil7dGhyb3cgbmV3IEVycm9yKFwiRmlyc3QgZWxlbWVudCBpbiBzaWduYXR1cmUgbXVzdCBiZSBhIERFUkludGVnZXJcIil9dmFyIHc9eS5zbGljZSh4KzIseCsyK3lbeCsxXSk7eCs9Mit5W3grMV07aWYoeVt4XSE9Mil7dGhyb3cgbmV3IEVycm9yKFwiU2Vjb25kIGVsZW1lbnQgaW4gc2lnbmF0dXJlIG11c3QgYmUgYSBERVJJbnRlZ2VyXCIpfXZhciB0PXkuc2xpY2UoeCsyLHgrMit5W3grMV0pO3grPTIreVt4KzFdO3ZhciB2PWYuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKHcpO3ZhciB1PWYuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKHQpO3JldHVybntyOnYsczp1fX07dGhpcy5wYXJzZVNpZ0NvbXBhY3Q9ZnVuY3Rpb24odyl7aWYody5sZW5ndGghPT02NSl7dGhyb3dcIlNpZ25hdHVyZSBoYXMgdGhlIHdyb25nIGxlbmd0aFwifXZhciB0PXdbMF0tMjc7aWYodDwwfHx0Pjcpe3Rocm93XCJJbnZhbGlkIHNpZ25hdHVyZSB0eXBlXCJ9dmFyIHg9dGhpcy5lY3BhcmFtcy5uO3ZhciB2PWYuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKHcuc2xpY2UoMSwzMykpLm1vZCh4KTt2YXIgdT1mLmZyb21CeXRlQXJyYXlVbnNpZ25lZCh3LnNsaWNlKDMzLDY1KSkubW9kKHgpO3JldHVybntyOnYsczp1LGk6dH19O3RoaXMucmVhZFBLQ1M1UHJ2S2V5SGV4PWZ1bmN0aW9uKHUpe2lmKGsodSk9PT1mYWxzZSl7dGhyb3cgbmV3IEVycm9yKFwibm90IEFTTi4xIGhleCBzdHJpbmdcIil9dmFyIHIsdCx2O3RyeXtyPW4odSwwLFtcIlswXVwiLDBdLFwiMDZcIik7dD1uKHUsMCxbMV0sXCIwNFwiKTt0cnl7dj1uKHUsMCxbXCJbMV1cIiwwXSxcIjAzXCIpfWNhdGNoKHMpe319Y2F0Y2gocyl7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIFBLQ1MjMS81IHBsYWluIEVDQyBwcml2YXRlIGtleVwiKX10aGlzLmN1cnZlTmFtZT1kKHIpO2lmKHRoaXMuY3VydmVOYW1lPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgodik7dGhpcy5zZXRQcml2YXRlS2V5SGV4KHQpO3RoaXMuaXNQdWJsaWM9ZmFsc2V9O3RoaXMucmVhZFBLQ1M4UHJ2S2V5SGV4PWZ1bmN0aW9uKHYpe2lmKGsodik9PT1mYWxzZSl7dGhyb3cgbmV3IGooXCJub3QgQVNOLjEgaGV4IHN0cmluZ1wiKX12YXIgdCxyLHUsdzt0cnl7dD1uKHYsMCxbMSwwXSxcIjA2XCIpO3I9bih2LDAsWzEsMV0sXCIwNlwiKTt1PW4odiwwLFsyLDAsMV0sXCIwNFwiKTt0cnl7dz1uKHYsMCxbMiwwLFwiWzFdXCIsMF0sXCIwM1wiKX1jYXRjaChzKXt9fWNhdGNoKHMpe3Rocm93IG5ldyBqKFwibWFsZm9ybWVkIFBLQ1MjOCBwbGFpbiBFQ0MgcHJpdmF0ZSBrZXlcIil9dGhpcy5jdXJ2ZU5hbWU9ZChyKTtpZih0aGlzLmN1cnZlTmFtZT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IGooXCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lXCIpfXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgodyk7dGhpcy5zZXRQcml2YXRlS2V5SGV4KHUpO3RoaXMuaXNQdWJsaWM9ZmFsc2V9O3RoaXMucmVhZFBLQ1M4UHViS2V5SGV4PWZ1bmN0aW9uKHUpe2lmKGsodSk9PT1mYWxzZSl7dGhyb3cgbmV3IGooXCJub3QgQVNOLjEgaGV4IHN0cmluZ1wiKX12YXIgdCxyLHY7dHJ5e3Q9bih1LDAsWzAsMF0sXCIwNlwiKTtyPW4odSwwLFswLDFdLFwiMDZcIik7dj1uKHUsMCxbMV0sXCIwM1wiKX1jYXRjaChzKXt0aHJvdyBuZXcgaihcIm1hbGZvcm1lZCBQS0NTIzggRUNDIHB1YmxpYyBrZXlcIil9dGhpcy5jdXJ2ZU5hbWU9ZChyKTtpZih0aGlzLmN1cnZlTmFtZT09PW51bGwpe3Rocm93IG5ldyBqKFwidW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwiKX10aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO3RoaXMuc2V0UHVibGljS2V5SGV4KHYpfTt0aGlzLnJlYWRDZXJ0UHViS2V5SGV4PWZ1bmN0aW9uKHQsdil7aWYoayh0KT09PWZhbHNlKXt0aHJvdyBuZXcgaihcIm5vdCBBU04uMSBoZXggc3RyaW5nXCIpfXZhciByLHU7dHJ5e3I9bih0LDAsWzAsNSwwLDFdLFwiMDZcIik7dT1uKHQsMCxbMCw1LDFdLFwiMDNcIil9Y2F0Y2gocyl7dGhyb3cgbmV3IGooXCJtYWxmb3JtZWQgWC41MDkgY2VydGlmaWNhdGUgRUNDIHB1YmxpYyBrZXlcIil9dGhpcy5jdXJ2ZU5hbWU9ZChyKTtpZih0aGlzLmN1cnZlTmFtZT09PW51bGwpe3Rocm93IG5ldyBqKFwidW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwiKX10aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO3RoaXMuc2V0UHVibGljS2V5SGV4KHUpfTtpZihlIT09dW5kZWZpbmVkKXtpZihlLmN1cnZlIT09dW5kZWZpbmVkKXt0aGlzLmN1cnZlTmFtZT1lLmN1cnZlfX1pZih0aGlzLmN1cnZlTmFtZT09PXVuZGVmaW5lZCl7dGhpcy5jdXJ2ZU5hbWU9Z310aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO2lmKGUhPT11bmRlZmluZWQpe2lmKGUucHJ2IT09dW5kZWZpbmVkKXt0aGlzLnNldFByaXZhdGVLZXlIZXgoZS5wcnYpfWlmKGUucHViIT09dW5kZWZpbmVkKXt0aGlzLnNldFB1YmxpY0tleUhleChlLnB1Yil9fX07S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXg9ZnVuY3Rpb24oYSl7dmFyIGI9S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXhJbkhleFJTKGEpO3ZhciBkPW5ldyBCaWdJbnRlZ2VyKGIuciwxNik7dmFyIGM9bmV3IEJpZ0ludGVnZXIoYi5zLDE2KTtyZXR1cm57cjpkLHM6Y319O0tKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4SW5IZXhSUz1mdW5jdGlvbihmKXt2YXIgaj1BU04xSEVYLGk9ai5nZXRDaGlsZElkeCxnPWouZ2V0VjtqLmNoZWNrU3RyaWN0REVSKGYsMCk7aWYoZi5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvdyBuZXcgRXJyb3IoXCJzaWduYXR1cmUgaXMgbm90IGEgQVNOLjEgc2VxdWVuY2VcIil9dmFyIGg9aShmLDApO2lmKGgubGVuZ3RoIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJzaWduYXR1cmUgc2hhbGwgaGF2ZSB0d28gZWxlbWVudHNcIil9dmFyIGU9aFswXTt2YXIgZD1oWzFdO2lmKGYuc3Vic3RyKGUsMikhPVwiMDJcIil7dGhyb3cgbmV3IEVycm9yKFwiMXN0IGl0ZW0gbm90IEFTTi4xIGludGVnZXJcIil9aWYoZi5zdWJzdHIoZCwyKSE9XCIwMlwiKXt0aHJvdyBuZXcgRXJyb3IoXCIybmQgaXRlbSBub3QgQVNOLjEgaW50ZWdlclwiKX12YXIgYz1nKGYsZSk7dmFyIGI9ZyhmLGQpO3JldHVybntyOmMsczpifX07S0pVUi5jcnlwdG8uRUNEU0EuYXNuMVNpZ1RvQ29uY2F0U2lnPWZ1bmN0aW9uKGMpe3ZhciBkPUtKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4SW5IZXhSUyhjKTt2YXIgYj1kLnI7dmFyIGE9ZC5zO2lmKGIuc3Vic3RyKDAsMik9PVwiMDBcIiYmKGIubGVuZ3RoJTMyKT09Mil7Yj1iLnN1YnN0cigyKX1pZihhLnN1YnN0cigwLDIpPT1cIjAwXCImJihhLmxlbmd0aCUzMik9PTIpe2E9YS5zdWJzdHIoMil9aWYoKGIubGVuZ3RoJTMyKT09MzApe2I9XCIwMFwiK2J9aWYoKGEubGVuZ3RoJTMyKT09MzApe2E9XCIwMFwiK2F9aWYoYi5sZW5ndGglMzIhPTApe3Rocm93XCJ1bmtub3duIEVDRFNBIHNpZyByIGxlbmd0aCBlcnJvclwifWlmKGEubGVuZ3RoJTMyIT0wKXt0aHJvd1widW5rbm93biBFQ0RTQSBzaWcgcyBsZW5ndGggZXJyb3JcIn1yZXR1cm4gYithfTtLSlVSLmNyeXB0by5FQ0RTQS5jb25jYXRTaWdUb0FTTjFTaWc9ZnVuY3Rpb24oYSl7aWYoKCgoYS5sZW5ndGgvMikqOCklKDE2KjgpKSE9MCl7dGhyb3dcInVua25vd24gRUNEU0EgY29uY2F0aW5hdGVkIHItcyBzaWcgIGxlbmd0aCBlcnJvclwifXZhciBjPWEuc3Vic3RyKDAsYS5sZW5ndGgvMik7dmFyIGI9YS5zdWJzdHIoYS5sZW5ndGgvMik7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmhleFJTU2lnVG9BU04xU2lnKGMsYil9O0tKVVIuY3J5cHRvLkVDRFNBLmhleFJTU2lnVG9BU04xU2lnPWZ1bmN0aW9uKGIsYSl7dmFyIGQ9bmV3IEJpZ0ludGVnZXIoYiwxNik7dmFyIGM9bmV3IEJpZ0ludGVnZXIoYSwxNik7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmJpUlNTaWdUb0FTTjFTaWcoZCxjKX07S0pVUi5jcnlwdG8uRUNEU0EuYmlSU1NpZ1RvQVNOMVNpZz1mdW5jdGlvbihmLGQpe3ZhciBjPUtKVVIuYXNuMTt2YXIgYj1uZXcgYy5ERVJJbnRlZ2VyKHtiaWdpbnQ6Zn0pO3ZhciBhPW5ldyBjLkRFUkludGVnZXIoe2JpZ2ludDpkfSk7dmFyIGU9bmV3IGMuREVSU2VxdWVuY2Uoe2FycmF5OltiLGFdfSk7cmV0dXJuIGUuZ2V0RW5jb2RlZEhleCgpfTtLSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lPWZ1bmN0aW9uKGEpe2lmKGE9PT1cIjJiODEwNDAwMWZcIil7cmV0dXJuXCJzZWNwMTkyazFcIn1pZihhPT09XCIyYTg2NDhjZTNkMDMwMTA3XCIpe3JldHVyblwic2VjcDI1NnIxXCJ9aWYoYT09PVwiMmI4MTA0MDAwYVwiKXtyZXR1cm5cInNlY3AyNTZrMVwifWlmKGE9PT1cIjJiODEwNDAwMjFcIil7cmV0dXJuXCJzZWNwMjI0cjFcIn1pZihhPT09XCIyYjgxMDQwMDIyXCIpe3JldHVyblwic2VjcDM4NHIxXCJ9aWYoXCJ8c2VjcDI1NnIxfE5JU1QgUC0yNTZ8UC0yNTZ8cHJpbWUyNTZ2MXxcIi5pbmRleE9mKGEpIT09LTEpe3JldHVyblwic2VjcDI1NnIxXCJ9aWYoXCJ8c2VjcDI1NmsxfFwiLmluZGV4T2YoYSkhPT0tMSl7cmV0dXJuXCJzZWNwMjU2azFcIn1pZihcInxzZWNwMjI0cjF8TklTVCBQLTIyNHxQLTIyNHxcIi5pbmRleE9mKGEpIT09LTEpe3JldHVyblwic2VjcDIyNHIxXCJ9aWYoXCJ8c2VjcDM4NHIxfE5JU1QgUC0zODR8UC0zODR8XCIuaW5kZXhPZihhKSE9PS0xKXtyZXR1cm5cInNlY3AzODRyMVwifXJldHVybiBudWxsfTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5jcnlwdG89PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmNyeXB0byl7S0pVUi5jcnlwdG89e319S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQj1uZXcgZnVuY3Rpb24oKXt2YXIgYj17fTt2YXIgYz17fTtmdW5jdGlvbiBhKGQpe3JldHVybiBuZXcgQmlnSW50ZWdlcihkLDE2KX10aGlzLmdldEJ5TmFtZT1mdW5jdGlvbihlKXt2YXIgZD1lO2lmKHR5cGVvZiBjW2RdIT1cInVuZGVmaW5lZFwiKXtkPWNbZV19aWYodHlwZW9mIGJbZF0hPVwidW5kZWZpbmVkXCIpe3JldHVybiBiW2RdfXRocm93XCJ1bnJlZ2lzdGVyZWQgRUMgY3VydmUgbmFtZTogXCIrZH07dGhpcy5yZWdpc3Q9ZnVuY3Rpb24oQSxsLG8sZyxtLGUsaixmLGssdSxkLHgpe2JbQV09e307dmFyIHM9YShvKTt2YXIgej1hKGcpO3ZhciB5PWEobSk7dmFyIHQ9YShlKTt2YXIgdz1hKGopO3ZhciByPW5ldyBFQ0N1cnZlRnAocyx6LHkpO3ZhciBxPXIuZGVjb2RlUG9pbnRIZXgoXCIwNFwiK2Yrayk7YltBXVtcIm5hbWVcIl09QTtiW0FdW1wia2V5bGVuXCJdPWw7YltBXVtcImN1cnZlXCJdPXI7YltBXVtcIkdcIl09cTtiW0FdW1wiblwiXT10O2JbQV1bXCJoXCJdPXc7YltBXVtcIm9pZFwiXT1kO2JbQV1bXCJpbmZvXCJdPXg7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe2NbdVt2XV09QX19fTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxMjhyMVwiLDEyOCxcIkZGRkZGRkZERkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCJGRkZGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiLFwiRTg3NTc5QzExMDc5RjQzREQ4MjQ5OTNDMkNFRTVFRDNcIixcIkZGRkZGRkZFMDAwMDAwMDA3NUEzMEQxQjkwMzhBMTE1XCIsXCIxXCIsXCIxNjFGRjc1MjhCODk5QjJEMEMyODYwN0NBNTJDNUI4NlwiLFwiQ0Y1QUM4Mzk1QkFGRUIxM0MwMkRBMjkyRERFRDdBODNcIixbXSxcIlwiLFwic2VjcDEyOHIxIDogU0VDRyBjdXJ2ZSBvdmVyIGEgMTI4IGJpdCBwcmltZSBmaWVsZFwiKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxNjBrMVwiLDE2MCxcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkFDNzNcIixcIjBcIixcIjdcIixcIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDFCOEZBMTZERkFCOUFDQTE2QjZCM1wiLFwiMVwiLFwiM0I0QzM4MkNFMzdBQTE5MkE0MDE5RTc2MzAzNkY0RjVERDREN0VCQlwiLFwiOTM4Q0Y5MzUzMThGRENFRDZCQzI4Mjg2NTMxNzMzQzNGMDNDNEZFRVwiLFtdLFwiXCIsXCJzZWNwMTYwazEgOiBTRUNHIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkXCIpO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDE2MHIxXCIsMTYwLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGQ1wiLFwiMUM5N0JFRkM1NEJEN0E4QjY1QUNGODlGODFENEQ0QURDNTY1RkE0NVwiLFwiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMUY0QzhGOTI3QUVEM0NBNzUyMjU3XCIsXCIxXCIsXCI0QTk2QjU2ODhFRjU3MzI4NDY2NDY5ODk2OEMzOEJCOTEzQ0JGQzgyXCIsXCIyM0E2Mjg1NTMxNjg5NDdENTlEQ0M5MTIwNDIzNTEzNzdBQzVGQjMyXCIsW10sXCJcIixcInNlY3AxNjByMSA6IFNFQ0cgY3VydmUgb3ZlciBhIDE2MCBiaXQgcHJpbWUgZmllbGRcIik7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTkyazFcIiwxOTIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkVFMzdcIixcIjBcIixcIjNcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTI2RjJGQzE3MEY2OTQ2NkE3NERFRkQ4RFwiLFwiMVwiLFwiREI0RkYxMEVDMDU3RTlBRTI2QjA3RDAyODBCN0Y0MzQxREE1RDFCMUVBRTA2QzdEXCIsXCI5QjJGMkY2RDlDNTYyOEE3ODQ0MTYzRDAxNUJFODYzNDQwODJBQTg4RDk1RTJGOURcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTkycjFcIiwxOTIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGQ1wiLFwiNjQyMTA1MTlFNTlDODBFNzBGQTdFOUFCNzIyNDMwNDlGRUI4REVFQ0MxNDZCOUIxXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5OURFRjgzNjE0NkJDOUIxQjREMjI4MzFcIixcIjFcIixcIjE4OERBODBFQjAzMDkwRjY3Q0JGMjBFQjQzQTE4ODAwRjRGRjBBRkQ4MkZGMTAxMlwiLFwiMDcxOTJCOTVGRkM4REE3ODYzMTAxMUVENkIyNENERDU3M0Y5NzdBMTFFNzk0ODExXCIsW10pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDIyNHIxXCIsMjI0LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFXCIsXCJCNDA1MEE4NTBDMDRCM0FCRjU0MTMyNTY1MDQ0QjBCN0Q3QkZEOEJBMjcwQjM5NDMyMzU1RkZCNFwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjE2QTJFMEI4RjAzRTEzREQyOTQ1NUM1QzJBM0RcIixcIjFcIixcIkI3MEUwQ0JENkJCNEJGN0YzMjEzOTBCOTRBMDNDMUQzNTZDMjExMjIzNDMyODBENjExNUMxRDIxXCIsXCJCRDM3NjM4OEI1RjcyM0ZCNEMyMkRGRTZDRDQzNzVBMDVBMDc0NzY0NDRENTgxOTk4NTAwN0UzNFwiLFtdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AyNTZrMVwiLDI1NixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZDMkZcIixcIjBcIixcIjdcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQkFBRURDRTZBRjQ4QTAzQkJGRDI1RThDRDAzNjQxNDFcIixcIjFcIixcIjc5QkU2NjdFRjlEQ0JCQUM1NUEwNjI5NUNFODcwQjA3MDI5QkZDREIyRENFMjhEOTU5RjI4MTVCMTZGODE3OThcIixcIjQ4M0FEQTc3MjZBM0M0NjU1REE0RkJGQzBFMTEwOEE4RkQxN0I0NDhBNjg1NTQxOTlDNDdEMDhGRkIxMEQ0QjhcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMjU2cjFcIiwyNTYsXCJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDXCIsXCI1QUM2MzVEOEFBM0E5M0U3QjNFQkJENTU3Njk4ODZCQzY1MUQwNkIwQ0M1M0IwRjYzQkNFM0MzRTI3RDI2MDRCXCIsXCJGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkJDRTZGQUFEQTcxNzlFODRGM0I5Q0FDMkZDNjMyNTUxXCIsXCIxXCIsXCI2QjE3RDFGMkUxMkM0MjQ3RjhCQ0U2RTU2M0E0NDBGMjc3MDM3RDgxMkRFQjMzQTBGNEExMzk0NUQ4OThDMjk2XCIsXCI0RkUzNDJFMkZFMUE3RjlCOEVFN0VCNEE3QzBGOUUxNjJCQ0UzMzU3NkIzMTVFQ0VDQkI2NDA2ODM3QkY1MUY1XCIsW1wiTklTVCBQLTI1NlwiLFwiUC0yNTZcIixcInByaW1lMjU2djFcIl0pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDM4NHIxXCIsMzg0LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkNcIixcIkIzMzEyRkE3RTIzRUU3RTQ5ODhFMDU2QkUzRjgyRDE5MTgxRDlDNkVGRTgxNDExMjAzMTQwODhGNTAxMzg3NUFDNjU2Mzk4RDhBMkVEMTlEMkE4NUM4RUREM0VDMkFFRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzc2MzREODFGNDM3MkRERjU4MUEwREIyNDhCMEE3N0FFQ0VDMTk2QUNDQzUyOTczXCIsXCIxXCIsXCJBQTg3Q0EyMkJFOEIwNTM3OEVCMUM3MUVGMzIwQUQ3NDZFMUQzQjYyOEJBNzlCOTg1OUY3NDFFMDgyNTQyQTM4NTUwMkYyNURCRjU1Mjk2QzNBNTQ1RTM4NzI3NjBBQjdcIixcIjM2MTdkZTRhOTYyNjJjNmY1ZDllOThiZjkyOTJkYzI5ZjhmNDFkYmQyODlhMTQ3Y2U5ZGEzMTEzYjVmMGI4YzAwYTYwYjFjZTFkN2U4MTlkN2E0MzFkN2M5MGVhMGU1ZlwiLFtcIk5JU1QgUC0zODRcIixcIlAtMzg0XCJdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3A1MjFyMVwiLDUyMSxcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiLFwiMDUxOTUzRUI5NjE4RTFDOUExRjkyOUEyMUEwQjY4NTQwRUVBMkRBNzI1Qjk5QjMxNUYzQjhCNDg5OTE4RUYxMDlFMTU2MTkzOTUxRUM3RTkzN0IxNjUyQzBCRDNCQjFCRjA3MzU3M0RGODgzRDJDMzRGMUVGNDUxRkQ0NkI1MDNGMDBcIixcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE1MTg2ODc4M0JGMkY5NjZCN0ZDQzAxNDhGNzA5QTVEMDNCQjVDOUI4ODk5QzQ3QUVCQjZGQjcxRTkxMzg2NDA5XCIsXCIxXCIsXCJDNjg1OEUwNkI3MDQwNEU5Q0Q5RTNFQ0I2NjIzOTVCNDQyOUM2NDgxMzkwNTNGQjUyMUY4MjhBRjYwNkI0RDNEQkFBMTRCNUU3N0VGRTc1OTI4RkUxREMxMjdBMkZGQThERTMzNDhCM0MxODU2QTQyOUJGOTdFN0UzMUMyRTVCRDY2XCIsXCIwMTE4MzkyOTZhNzg5YTNiYzAwNDVjOGE1ZmI0MmM3ZDFiZDk5OGY1NDQ0OTU3OWI0NDY4MTdhZmJkMTcyNzNlNjYyYzk3ZWU3Mjk5NWVmNDI2NDBjNTUwYjkwMTNmYWQwNzYxMzUzYzcwODZhMjcyYzI0MDg4YmU5NDc2OWZkMTY2NTBcIixbXCJOSVNUIFAtNTIxXCIsXCJQLTUyMVwiXSk7XG52YXIgS0VZVVRJTD1mdW5jdGlvbigpe3ZhciBkPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gayhDcnlwdG9KUy5BRVMscCxyLHEpfTt2YXIgZT1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGsoQ3J5cHRvSlMuVHJpcGxlREVTLHAscixxKX07dmFyIGE9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBrKENyeXB0b0pTLkRFUyxwLHIscSl9O3ZhciBrPWZ1bmN0aW9uKHMseCx1LHEpe3ZhciByPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoeCk7dmFyIHc9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh1KTt2YXIgcD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHEpO3ZhciB0PXt9O3Qua2V5PXc7dC5pdj1wO3QuY2lwaGVydGV4dD1yO3ZhciB2PXMuZGVjcnlwdCh0LHcse2l2OnB9KTtyZXR1cm4gQ3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodil9O3ZhciBsPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gZyhDcnlwdG9KUy5BRVMscCxyLHEpfTt2YXIgbz1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGcoQ3J5cHRvSlMuVHJpcGxlREVTLHAscixxKX07dmFyIGY9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBnKENyeXB0b0pTLkRFUyxwLHIscSl9O3ZhciBnPWZ1bmN0aW9uKHQseSx2LHEpe3ZhciBzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoeSk7dmFyIHg9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh2KTt2YXIgcD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHEpO3ZhciB3PXQuZW5jcnlwdChzLHgse2l2OnB9KTt2YXIgcj1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHcudG9TdHJpbmcoKSk7dmFyIHU9Q3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkocik7cmV0dXJuIHV9O3ZhciBpPXtcIkFFUy0yNTYtQ0JDXCI6e3Byb2M6ZCxlcHJvYzpsLGtleWxlbjozMixpdmxlbjoxNn0sXCJBRVMtMTkyLUNCQ1wiOntwcm9jOmQsZXByb2M6bCxrZXlsZW46MjQsaXZsZW46MTZ9LFwiQUVTLTEyOC1DQkNcIjp7cHJvYzpkLGVwcm9jOmwsa2V5bGVuOjE2LGl2bGVuOjE2fSxcIkRFUy1FREUzLUNCQ1wiOntwcm9jOmUsZXByb2M6byxrZXlsZW46MjQsaXZsZW46OH0sXCJERVMtQ0JDXCI6e3Byb2M6YSxlcHJvYzpmLGtleWxlbjo4LGl2bGVuOjh9fTt2YXIgYz1mdW5jdGlvbihwKXtyZXR1cm4gaVtwXVtcInByb2NcIl19O3ZhciBtPWZ1bmN0aW9uKHApe3ZhciByPUNyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKHApO3ZhciBxPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHIpO3JldHVybiBxfTt2YXIgbj1mdW5jdGlvbih2KXt2YXIgdz17fTt2YXIgcT12Lm1hdGNoKG5ldyBSZWdFeHAoXCJERUstSW5mbzogKFteLF0rKSwoWzAtOUEtRmEtZl0rKVwiLFwibVwiKSk7aWYocSl7dy5jaXBoZXI9cVsxXTt3Lml2c2FsdD1xWzJdfXZhciBwPXYubWF0Y2gobmV3IFJlZ0V4cChcIi0tLS0tQkVHSU4gKFtBLVpdKykgUFJJVkFURSBLRVktLS0tLVwiKSk7aWYocCl7dy50eXBlPXBbMV19dmFyIHU9LTE7dmFyIHg9MDtpZih2LmluZGV4T2YoXCJcXHJcXG5cXHJcXG5cIikhPS0xKXt1PXYuaW5kZXhPZihcIlxcclxcblxcclxcblwiKTt4PTJ9aWYodi5pbmRleE9mKFwiXFxuXFxuXCIpIT0tMSl7dT12LmluZGV4T2YoXCJcXG5cXG5cIik7eD0xfXZhciB0PXYuaW5kZXhPZihcIi0tLS0tRU5EXCIpO2lmKHUhPS0xJiZ0IT0tMSl7dmFyIHI9di5zdWJzdHJpbmcodSt4KjIsdC14KTtyPXIucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3cuZGF0YT1yfXJldHVybiB3fTt2YXIgaj1mdW5jdGlvbihxLHkscCl7dmFyIHY9cC5zdWJzdHJpbmcoMCwxNik7dmFyIHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh2KTt2YXIgcj1DcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh5KTt2YXIgdT1pW3FdW1wia2V5bGVuXCJdK2lbcV1bXCJpdmxlblwiXTt2YXIgeD1cIlwiO3ZhciB3PW51bGw7Zm9yKDs7KXt2YXIgcz1DcnlwdG9KUy5hbGdvLk1ENS5jcmVhdGUoKTtpZih3IT1udWxsKXtzLnVwZGF0ZSh3KX1zLnVwZGF0ZShyKTtzLnVwZGF0ZSh0KTt3PXMuZmluYWxpemUoKTt4PXgrQ3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodyk7aWYoeC5sZW5ndGg+PXUqMil7YnJlYWt9fXZhciB6PXt9O3oua2V5aGV4PXguc3Vic3RyKDAsaVtxXVtcImtleWxlblwiXSoyKTt6Lml2aGV4PXguc3Vic3RyKGlbcV1bXCJrZXlsZW5cIl0qMixpW3FdW1wiaXZsZW5cIl0qMik7cmV0dXJuIHp9O3ZhciBiPWZ1bmN0aW9uKHAsdixyLHcpe3ZhciBzPUNyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UocCk7dmFyIHE9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkocyk7dmFyIHU9aVt2XVtcInByb2NcIl07dmFyIHQ9dShxLHIsdyk7cmV0dXJuIHR9O3ZhciBoPWZ1bmN0aW9uKHAscyxxLHUpe3ZhciByPWlbc11bXCJlcHJvY1wiXTt2YXIgdD1yKHAscSx1KTtyZXR1cm4gdH07cmV0dXJue3ZlcnNpb246XCIxLjAuMFwiLHBhcnNlUEtDUzVQRU06ZnVuY3Rpb24ocCl7cmV0dXJuIG4ocCl9LGdldEtleUFuZFVudXNlZEl2QnlQYXNzY29kZUFuZEl2c2FsdDpmdW5jdGlvbihxLHAscil7cmV0dXJuIGoocSxwLHIpfSxkZWNyeXB0S2V5QjY0OmZ1bmN0aW9uKHAscixxLHMpe3JldHVybiBiKHAscixxLHMpfSxnZXREZWNyeXB0ZWRLZXlIZXg6ZnVuY3Rpb24oeSx4KXt2YXIgcT1uKHkpO3ZhciB0PXEudHlwZTt2YXIgcj1xLmNpcGhlcjt2YXIgcD1xLml2c2FsdDt2YXIgcz1xLmRhdGE7dmFyIHc9aihyLHgscCk7dmFyIHY9dy5rZXloZXg7dmFyIHU9YihzLHIsdixwKTtyZXR1cm4gdX0sZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4OmZ1bmN0aW9uKHgscyxBLHQscil7dmFyIHA9XCJcIjtpZih0eXBlb2YgdD09XCJ1bmRlZmluZWRcInx8dD09bnVsbCl7dD1cIkFFUy0yNTYtQ0JDXCJ9aWYodHlwZW9mIGlbdF09PVwidW5kZWZpbmVkXCIpe3Rocm93IG5ldyBFcnJvcihcIktFWVVUSUwgdW5zdXBwb3J0ZWQgYWxnb3JpdGhtOiBcIit0KX1pZih0eXBlb2Ygcj09XCJ1bmRlZmluZWRcInx8cj09bnVsbCl7dmFyIHY9aVt0XVtcIml2bGVuXCJdO3ZhciB1PW0odik7cj11LnRvVXBwZXJDYXNlKCl9dmFyIHo9aih0LEEscik7dmFyIHk9ei5rZXloZXg7dmFyIHc9aChzLHQseSxyKTt2YXIgcT13LnJlcGxhY2UoLyguezY0fSkvZyxcIiQxXFxyXFxuXCIpO3ZhciBwPVwiLS0tLS1CRUdJTiBcIit4K1wiIFBSSVZBVEUgS0VZLS0tLS1cXHJcXG5cIjtwKz1cIlByb2MtVHlwZTogNCxFTkNSWVBURURcXHJcXG5cIjtwKz1cIkRFSy1JbmZvOiBcIit0K1wiLFwiK3IrXCJcXHJcXG5cIjtwKz1cIlxcclxcblwiO3ArPXE7cCs9XCJcXHJcXG4tLS0tLUVORCBcIit4K1wiIFBSSVZBVEUgS0VZLS0tLS1cXHJcXG5cIjtyZXR1cm4gcH0scGFyc2VIZXhPZkVuY3J5cHRlZFBLQ1M4OmZ1bmN0aW9uKHkpe3ZhciBCPUFTTjFIRVg7dmFyIHo9Qi5nZXRDaGlsZElkeDt2YXIgdz1CLmdldFY7dmFyIHQ9e307dmFyIHI9eih5LDApO2lmKHIubGVuZ3RoIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwKS5pdGVtcyAhPSAyOiBcIityLmxlbmd0aCl9dC5jaXBoZXJ0ZXh0PXcoeSxyWzFdKTt2YXIgQT16KHksclswXSk7aWYoQS5sZW5ndGghPTIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDAuMCkuaXRlbXMgIT0gMjogXCIrQS5sZW5ndGgpfWlmKHcoeSxBWzBdKSE9XCIyYTg2NDg4NmY3MGQwMTA1MGRcIil7dGhyb3cgbmV3IEVycm9yKFwidGhpcyBvbmx5IHN1cHBvcnRzIHBrY3M1UEJFUzJcIil9dmFyIHA9eih5LEFbMV0pO2lmKEEubGVuZ3RoIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjAuMSkuaXRlbXMgIT0gMjogXCIrcC5sZW5ndGgpfXZhciBxPXooeSxwWzFdKTtpZihxLmxlbmd0aCE9Mil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEuMSkuaXRlbXMgIT0gMjogXCIrcS5sZW5ndGgpfWlmKHcoeSxxWzBdKSE9XCIyYTg2NDg4NmY3MGQwMzA3XCIpe3Rocm93XCJ0aGlzIG9ubHkgc3VwcG9ydHMgVHJpcGxlREVTXCJ9dC5lbmNyeXB0aW9uU2NoZW1lQWxnPVwiVHJpcGxlREVTXCI7dC5lbmNyeXB0aW9uU2NoZW1lSVY9dyh5LHFbMV0pO3ZhciBzPXooeSxwWzBdKTtpZihzLmxlbmd0aCE9Mil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEuMCkuaXRlbXMgIT0gMjogXCIrcy5sZW5ndGgpfWlmKHcoeSxzWzBdKSE9XCIyYTg2NDg4NmY3MGQwMTA1MGNcIil7dGhyb3cgbmV3IEVycm9yKFwidGhpcyBvbmx5IHN1cHBvcnRzIHBrY3M1UEJLREYyXCIpfXZhciB4PXooeSxzWzFdKTtpZih4Lmxlbmd0aDwyKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjAuMS4wLjEpLml0ZW1zIDwgMjogXCIreC5sZW5ndGgpfXQucGJrZGYyU2FsdD13KHkseFswXSk7dmFyIHU9dyh5LHhbMV0pO3RyeXt0LnBia2RmMkl0ZXI9cGFyc2VJbnQodSwxNil9Y2F0Y2godil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIGZvcm1hdCBwYmtkZjJJdGVyOiBcIit1KX1yZXR1cm4gdH0sZ2V0UEJLREYyS2V5SGV4RnJvbVBhcmFtOmZ1bmN0aW9uKHUscCl7dmFyIHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh1LnBia2RmMlNhbHQpO3ZhciBxPXUucGJrZGYySXRlcjt2YXIgcz1DcnlwdG9KUy5QQktERjIocCx0LHtrZXlTaXplOjE5Mi8zMixpdGVyYXRpb25zOnF9KTt2YXIgcj1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShzKTtyZXR1cm4gcn0sX2dldFBsYWluUEtDUzhIZXhGcm9tRW5jcnlwdGVkUEtDUzhQRU06ZnVuY3Rpb24oeCx5KXt2YXIgcj1wZW10b2hleCh4LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpO3ZhciBwPXRoaXMucGFyc2VIZXhPZkVuY3J5cHRlZFBLQ1M4KHIpO3ZhciB1PUtFWVVUSUwuZ2V0UEJLREYyS2V5SGV4RnJvbVBhcmFtKHAseSk7dmFyIHY9e307di5jaXBoZXJ0ZXh0PUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocC5jaXBoZXJ0ZXh0KTt2YXIgdD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHUpO3ZhciBzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocC5lbmNyeXB0aW9uU2NoZW1lSVYpO3ZhciB3PUNyeXB0b0pTLlRyaXBsZURFUy5kZWNyeXB0KHYsdCx7aXY6c30pO3ZhciBxPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHcpO3JldHVybiBxfSxnZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU06ZnVuY3Rpb24ocyxxKXt2YXIgcD10aGlzLl9nZXRQbGFpblBLQ1M4SGV4RnJvbUVuY3J5cHRlZFBLQ1M4UEVNKHMscSk7dmFyIHI9dGhpcy5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgocCk7cmV0dXJuIHJ9LHBhcnNlUGxhaW5Qcml2YXRlUEtDUzhIZXg6ZnVuY3Rpb24ocyl7dmFyIHY9QVNOMUhFWDt2YXIgdT12LmdldENoaWxkSWR4O3ZhciB0PXYuZ2V0Vjt2YXIgcT17fTtxLmFsZ3BhcmFtPW51bGw7aWYocy5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgcGxhaW4gUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDEpXCIpfXZhciByPXUocywwKTtpZihyLmxlbmd0aDwzKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgcGxhaW4gUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDIpXCIpfWlmKHMuc3Vic3RyKHJbMV0sMikhPVwiMzBcIil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDAzKVwiKX12YXIgcD11KHMsclsxXSk7aWYocC5sZW5ndGghPTIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwNClcIil9aWYocy5zdWJzdHIocFswXSwyKSE9XCIwNlwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDUpXCIpfXEuYWxnb2lkPXQocyxwWzBdKTtpZihzLnN1YnN0cihwWzFdLDIpPT1cIjA2XCIpe3EuYWxncGFyYW09dChzLHBbMV0pfWlmKHMuc3Vic3RyKHJbMl0sMikhPVwiMDRcIil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDA2KVwiKX1xLmtleWlkeD12LmdldFZpZHgocyxyWzJdKTtyZXR1cm4gcX0sZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4UEVNOmZ1bmN0aW9uKHEpe3ZhciBwPXBlbXRvaGV4KHEsXCJQUklWQVRFIEtFWVwiKTt2YXIgcj10aGlzLmdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOEhleChwKTtyZXR1cm4gcn0sZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4SGV4OmZ1bmN0aW9uKHApe3ZhciBxPXRoaXMucGFyc2VQbGFpblByaXZhdGVQS0NTOEhleChwKTt2YXIgcjtpZihxLmFsZ29pZD09XCIyYTg2NDg4NmY3MGQwMTAxMDFcIil7cj1uZXcgUlNBS2V5KCl9ZWxzZXtpZihxLmFsZ29pZD09XCIyYTg2NDhjZTM4MDQwMVwiKXtyPW5ldyBLSlVSLmNyeXB0by5EU0EoKX1lbHNle2lmKHEuYWxnb2lkPT1cIjJhODY0OGNlM2QwMjAxXCIpe3I9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKCl9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBwcml2YXRlIGtleSBhbGdvcml0aG1cIil9fX1yLnJlYWRQS0NTOFBydktleUhleChwKTtyZXR1cm4gcn0sX2dldEtleUZyb21QdWJsaWNQS0NTOEhleDpmdW5jdGlvbihxKXt2YXIgcDt2YXIgcj1BU04xSEVYLmdldFZieUxpc3QocSwwLFswLDBdLFwiMDZcIik7aWYocj09PVwiMmE4NjQ4ODZmNzBkMDEwMTAxXCIpe3A9bmV3IFJTQUtleSgpfWVsc2V7aWYocj09PVwiMmE4NjQ4Y2UzODA0MDFcIil7cD1uZXcgS0pVUi5jcnlwdG8uRFNBKCl9ZWxzZXtpZihyPT09XCIyYTg2NDhjZTNkMDIwMVwiKXtwPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSgpfWVsc2V7dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgUEtDUyM4IHB1YmxpYyBrZXkgaGV4XCIpfX19cC5yZWFkUEtDUzhQdWJLZXlIZXgocSk7cmV0dXJuIHB9LHBhcnNlUHVibGljUmF3UlNBS2V5SGV4OmZ1bmN0aW9uKHIpe3ZhciB1PUFTTjFIRVg7dmFyIHQ9dS5nZXRDaGlsZElkeDt2YXIgcz11LmdldFY7dmFyIHA9e307aWYoci5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwMSlcIil9dmFyIHE9dChyLDApO2lmKHEubGVuZ3RoIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwMilcIil9aWYoci5zdWJzdHIocVswXSwyKSE9XCIwMlwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwMylcIil9cC5uPXMocixxWzBdKTtpZihyLnN1YnN0cihxWzFdLDIpIT1cIjAyXCIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBSU0Ega2V5KGNvZGU6MDA0KVwiKX1wLmU9cyhyLHFbMV0pO3JldHVybiBwfSxwYXJzZVB1YmxpY1BLQ1M4SGV4OmZ1bmN0aW9uKHQpe3ZhciB2PUFTTjFIRVg7dmFyIHU9di5nZXRDaGlsZElkeDt2YXIgcz12LmdldFY7dmFyIHE9e307cS5hbGdwYXJhbT1udWxsO3ZhciByPXUodCwwKTtpZihyLmxlbmd0aCE9Mil7dGhyb3cgbmV3IEVycm9yKFwib3V0ZXIgREVSU2VxdWVuY2Ugc2hhbGwgaGF2ZSAyIGVsZW1lbnRzOiBcIityLmxlbmd0aCl9dmFyIHc9clswXTtpZih0LnN1YnN0cih3LDIpIT1cIjMwXCIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDAxKVwiKX12YXIgcD11KHQsdyk7aWYocC5sZW5ndGghPTIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDAyKVwiKX1pZih0LnN1YnN0cihwWzBdLDIpIT1cIjA2XCIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDAzKVwiKX1xLmFsZ29pZD1zKHQscFswXSk7aWYodC5zdWJzdHIocFsxXSwyKT09XCIwNlwiKXtxLmFsZ3BhcmFtPXModCxwWzFdKX1lbHNle2lmKHQuc3Vic3RyKHBbMV0sMik9PVwiMzBcIil7cS5hbGdwYXJhbT17fTtxLmFsZ3BhcmFtLnA9di5nZXRWYnlMaXN0KHQscFsxXSxbMF0sXCIwMlwiKTtxLmFsZ3BhcmFtLnE9di5nZXRWYnlMaXN0KHQscFsxXSxbMV0sXCIwMlwiKTtxLmFsZ3BhcmFtLmc9di5nZXRWYnlMaXN0KHQscFsxXSxbMl0sXCIwMlwiKX19aWYodC5zdWJzdHIoclsxXSwyKSE9XCIwM1wiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUEtDUzggcHVibGljIGtleShjb2RlOjAwNClcIil9cS5rZXk9cyh0LHJbMV0pLnN1YnN0cigyKTtyZXR1cm4gcX0sfX0oKTtLRVlVVElMLmdldEtleT1mdW5jdGlvbihsLGssbil7dmFyIEc9QVNOMUhFWCxMPUcuZ2V0Q2hpbGRJZHgsdj1HLmdldFYsZD1HLmdldFZieUxpc3QsYz1LSlVSLmNyeXB0byxpPWMuRUNEU0EsQz1jLkRTQSx3PVJTQUtleSxNPXBlbXRvaGV4LEY9S0VZVVRJTDtpZih0eXBlb2YgdyE9XCJ1bmRlZmluZWRcIiYmbCBpbnN0YW5jZW9mIHcpe3JldHVybiBsfWlmKHR5cGVvZiBpIT1cInVuZGVmaW5lZFwiJiZsIGluc3RhbmNlb2YgaSl7cmV0dXJuIGx9aWYodHlwZW9mIEMhPVwidW5kZWZpbmVkXCImJmwgaW5zdGFuY2VvZiBDKXtyZXR1cm4gbH1pZihsLmN1cnZlIT09dW5kZWZpbmVkJiZsLnh5IT09dW5kZWZpbmVkJiZsLmQ9PT11bmRlZmluZWQpe3JldHVybiBuZXcgaSh7cHViOmwueHksY3VydmU6bC5jdXJ2ZX0pfWlmKGwuY3VydmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCl7cmV0dXJuIG5ldyBpKHtwcnY6bC5kLGN1cnZlOmwuY3VydmV9KX1pZihsLmt0eT09PXVuZGVmaW5lZCYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFB1YmxpYyhsLm4sbC5lKTtyZXR1cm4gUH1pZihsLmt0eT09PXVuZGVmaW5lZCYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCYmbC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZHAhPT11bmRlZmluZWQmJmwuZHEhPT11bmRlZmluZWQmJmwuY28hPT11bmRlZmluZWQmJmwucWk9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQcml2YXRlRXgobC5uLGwuZSxsLmQsbC5wLGwucSxsLmRwLGwuZHEsbC5jbyk7cmV0dXJuIFB9aWYobC5rdHk9PT11bmRlZmluZWQmJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQmJmwucD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGUobC5uLGwuZSxsLmQpO3JldHVybiBQfWlmKGwucCE9PXVuZGVmaW5lZCYmbC5xIT09dW5kZWZpbmVkJiZsLmchPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC54PT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgQygpO1Auc2V0UHVibGljKGwucCxsLnEsbC5nLGwueSk7cmV0dXJuIFB9aWYobC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZyE9PXVuZGVmaW5lZCYmbC55IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQpe3ZhciBQPW5ldyBDKCk7UC5zZXRQcml2YXRlKGwucCxsLnEsbC5nLGwueSxsLngpO3JldHVybiBQfWlmKGwua3R5PT09XCJSU0FcIiYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFB1YmxpYyhiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIlJTQVwiJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkJiZsLnAhPT11bmRlZmluZWQmJmwucSE9PXVuZGVmaW5lZCYmbC5kcCE9PXVuZGVmaW5lZCYmbC5kcSE9PXVuZGVmaW5lZCYmbC5xaSE9PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGVFeChiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSxiNjR1dG9oZXgobC5kKSxiNjR1dG9oZXgobC5wKSxiNjR1dG9oZXgobC5xKSxiNjR1dG9oZXgobC5kcCksYjY0dXRvaGV4KGwuZHEpLGI2NHV0b2hleChsLnFpKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIlJTQVwiJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgdygpO1Auc2V0UHJpdmF0ZShiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSxiNjR1dG9oZXgobC5kKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIkVDXCImJmwuY3J2IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC5kPT09dW5kZWZpbmVkKXt2YXIgaj1uZXcgaSh7Y3VydmU6bC5jcnZ9KTt2YXIgdD1qLmVjcGFyYW1zLmtleWxlbi80O3ZhciBCPShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC54KSkuc2xpY2UoLXQpO3ZhciB6PShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC55KSkuc2xpY2UoLXQpO3ZhciB1PVwiMDRcIitCK3o7ai5zZXRQdWJsaWNLZXlIZXgodSk7cmV0dXJuIGp9aWYobC5rdHk9PT1cIkVDXCImJmwuY3J2IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkKXt2YXIgaj1uZXcgaSh7Y3VydmU6bC5jcnZ9KTt2YXIgdD1qLmVjcGFyYW1zLmtleWxlbi80O3ZhciBCPShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC54KSkuc2xpY2UoLXQpO3ZhciB6PShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC55KSkuc2xpY2UoLXQpO3ZhciB1PVwiMDRcIitCK3o7dmFyIGI9KFwiMDAwMDAwMDAwMFwiK2I2NHV0b2hleChsLmQpKS5zbGljZSgtdCk7ai5zZXRQdWJsaWNLZXlIZXgodSk7ai5zZXRQcml2YXRlS2V5SGV4KGIpO3JldHVybiBqfWlmKG49PT1cInBrY3M1cHJ2XCIpe3ZhciBKPWwsRz1BU04xSEVYLE4sUDtOPUwoSiwwKTtpZihOLmxlbmd0aD09PTkpe1A9bmV3IHcoKTtQLnJlYWRQS0NTNVBydktleUhleChKKX1lbHNle2lmKE4ubGVuZ3RoPT09Nil7UD1uZXcgQygpO1AucmVhZFBLQ1M1UHJ2S2V5SGV4KEopfWVsc2V7aWYoTi5sZW5ndGg+MiYmSi5zdWJzdHIoTlsxXSwyKT09PVwiMDRcIil7UD1uZXcgaSgpO1AucmVhZFBLQ1M1UHJ2S2V5SGV4KEopfWVsc2V7dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgUEtDUyMxLzUgaGV4YWRlY2ltYWwga2V5XCIpfX19cmV0dXJuIFB9aWYobj09PVwicGtjczhwcnZcIil7dmFyIFA9Ri5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgobCk7cmV0dXJuIFB9aWYobj09PVwicGtjczhwdWJcIil7cmV0dXJuIEYuX2dldEtleUZyb21QdWJsaWNQS0NTOEhleChsKX1pZihuPT09XCJ4NTA5cHViXCIpe3JldHVybiBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4KGwpfWlmKGwuaW5kZXhPZihcIi1FTkQgQ0VSVElGSUNBVEUtXCIsMCkhPS0xfHxsLmluZGV4T2YoXCItRU5EIFg1MDkgQ0VSVElGSUNBVEUtXCIsMCkhPS0xfHxsLmluZGV4T2YoXCItRU5EIFRSVVNURUQgQ0VSVElGSUNBVEUtXCIsMCkhPS0xKXtyZXR1cm4gWDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydFBFTShsKX1pZihsLmluZGV4T2YoXCItRU5EIFBVQkxJQyBLRVktXCIpIT0tMSl7dmFyIE89cGVtdG9oZXgobCxcIlBVQkxJQyBLRVlcIik7cmV0dXJuIEYuX2dldEtleUZyb21QdWJsaWNQS0NTOEhleChPKX1pZihsLmluZGV4T2YoXCItRU5EIFJTQSBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKT09LTEpe3ZhciBtPU0obCxcIlJTQSBQUklWQVRFIEtFWVwiKTtyZXR1cm4gRi5nZXRLZXkobSxudWxsLFwicGtjczVwcnZcIil9aWYobC5pbmRleE9mKFwiLUVORCBEU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIik9PS0xKXt2YXIgST1NKGwsXCJEU0EgUFJJVkFURSBLRVlcIik7dmFyIEU9ZChJLDAsWzFdLFwiMDJcIik7dmFyIEQ9ZChJLDAsWzJdLFwiMDJcIik7dmFyIEs9ZChJLDAsWzNdLFwiMDJcIik7dmFyIHI9ZChJLDAsWzRdLFwiMDJcIik7dmFyIHM9ZChJLDAsWzVdLFwiMDJcIik7dmFyIFA9bmV3IEMoKTtQLnNldFByaXZhdGUobmV3IEJpZ0ludGVnZXIoRSwxNiksbmV3IEJpZ0ludGVnZXIoRCwxNiksbmV3IEJpZ0ludGVnZXIoSywxNiksbmV3IEJpZ0ludGVnZXIociwxNiksbmV3IEJpZ0ludGVnZXIocywxNikpO3JldHVybiBQfWlmKGwuaW5kZXhPZihcIi1FTkQgRUMgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIik9PS0xKXt2YXIgbT1NKGwsXCJFQyBQUklWQVRFIEtFWVwiKTtyZXR1cm4gRi5nZXRLZXkobSxudWxsLFwicGtjczVwcnZcIil9aWYobC5pbmRleE9mKFwiLUVORCBQUklWQVRFIEtFWS1cIikhPS0xKXtyZXR1cm4gRi5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhQRU0obCl9aWYobC5pbmRleE9mKFwiLUVORCBSU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIikhPS0xKXt2YXIgbz1GLmdldERlY3J5cHRlZEtleUhleChsLGspO3ZhciBIPW5ldyBSU0FLZXkoKTtILnJlYWRQS0NTNVBydktleUhleChvKTtyZXR1cm4gSH1pZihsLmluZGV4T2YoXCItRU5EIEVDIFBSSVZBVEUgS0VZLVwiKSE9LTEmJmwuaW5kZXhPZihcIjQsRU5DUllQVEVEXCIpIT0tMSl7dmFyIEk9Ri5nZXREZWNyeXB0ZWRLZXlIZXgobCxrKTt2YXIgUD1kKEksMCxbMV0sXCIwNFwiKTt2YXIgZj1kKEksMCxbMiwwXSxcIjA2XCIpO3ZhciBBPWQoSSwwLFszLDBdLFwiMDNcIikuc3Vic3RyKDIpO3ZhciBlPVwiXCI7aWYoS0pVUi5jcnlwdG8uT0lELm9pZGhleDJuYW1lW2ZdIT09dW5kZWZpbmVkKXtlPUtKVVIuY3J5cHRvLk9JRC5vaWRoZXgybmFtZVtmXX1lbHNle3Rocm93IG5ldyBFcnJvcihcInVuZGVmaW5lZCBPSUQoaGV4KSBpbiBLSlVSLmNyeXB0by5PSUQ6IFwiK2YpfXZhciBqPW5ldyBpKHtjdXJ2ZTplfSk7ai5zZXRQdWJsaWNLZXlIZXgoQSk7ai5zZXRQcml2YXRlS2V5SGV4KFApO2ouaXNQdWJsaWM9ZmFsc2U7cmV0dXJuIGp9aWYobC5pbmRleE9mKFwiLUVORCBEU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIikhPS0xKXt2YXIgST1GLmdldERlY3J5cHRlZEtleUhleChsLGspO3ZhciBFPWQoSSwwLFsxXSxcIjAyXCIpO3ZhciBEPWQoSSwwLFsyXSxcIjAyXCIpO3ZhciBLPWQoSSwwLFszXSxcIjAyXCIpO3ZhciByPWQoSSwwLFs0XSxcIjAyXCIpO3ZhciBzPWQoSSwwLFs1XSxcIjAyXCIpO3ZhciBQPW5ldyBDKCk7UC5zZXRQcml2YXRlKG5ldyBCaWdJbnRlZ2VyKEUsMTYpLG5ldyBCaWdJbnRlZ2VyKEQsMTYpLG5ldyBCaWdJbnRlZ2VyKEssMTYpLG5ldyBCaWdJbnRlZ2VyKHIsMTYpLG5ldyBCaWdJbnRlZ2VyKHMsMTYpKTtyZXR1cm4gUH1pZihsLmluZGV4T2YoXCItRU5EIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS1cIikhPS0xKXtyZXR1cm4gRi5nZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU0obCxrKX10aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3VwcG9ydGVkIGFyZ3VtZW50XCIpfTtLRVlVVElMLmdlbmVyYXRlS2V5cGFpcj1mdW5jdGlvbihhLGMpe2lmKGE9PVwiUlNBXCIpe3ZhciBiPWM7dmFyIGg9bmV3IFJTQUtleSgpO2guZ2VuZXJhdGUoYixcIjEwMDAxXCIpO2guaXNQcml2YXRlPXRydWU7aC5pc1B1YmxpYz10cnVlO3ZhciBmPW5ldyBSU0FLZXkoKTt2YXIgZT1oLm4udG9TdHJpbmcoMTYpO3ZhciBpPWguZS50b1N0cmluZygxNik7Zi5zZXRQdWJsaWMoZSxpKTtmLmlzUHJpdmF0ZT1mYWxzZTtmLmlzUHVibGljPXRydWU7dmFyIGs9e307ay5wcnZLZXlPYmo9aDtrLnB1YktleU9iaj1mO3JldHVybiBrfWVsc2V7aWYoYT09XCJFQ1wiKXt2YXIgZD1jO3ZhciBnPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSh7Y3VydmU6ZH0pO3ZhciBqPWcuZ2VuZXJhdGVLZXlQYWlySGV4KCk7dmFyIGg9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTpkfSk7aC5zZXRQdWJsaWNLZXlIZXgoai5lY3B1YmhleCk7aC5zZXRQcml2YXRlS2V5SGV4KGouZWNwcnZoZXgpO2guaXNQcml2YXRlPXRydWU7aC5pc1B1YmxpYz1mYWxzZTt2YXIgZj1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOmR9KTtmLnNldFB1YmxpY0tleUhleChqLmVjcHViaGV4KTtmLmlzUHJpdmF0ZT1mYWxzZTtmLmlzUHVibGljPXRydWU7dmFyIGs9e307ay5wcnZLZXlPYmo9aDtrLnB1YktleU9iaj1mO3JldHVybiBrfWVsc2V7dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBhbGdvcml0aG06IFwiK2EpfX19O0tFWVVUSUwuZ2V0UEVNPWZ1bmN0aW9uKGIsRCx5LG0scSxqKXt2YXIgRj1LSlVSLGs9Ri5hc24xLHo9ay5ERVJPYmplY3RJZGVudGlmaWVyLGY9ay5ERVJJbnRlZ2VyLGw9ay5BU04xVXRpbC5uZXdPYmplY3QsYT1rLng1MDksQz1hLlN1YmplY3RQdWJsaWNLZXlJbmZvLGU9Ri5jcnlwdG8sdT1lLkRTQSxyPWUuRUNEU0Esbj1SU0FLZXk7ZnVuY3Rpb24gQShzKXt2YXIgRz1sKHtzZXE6W3tcImludFwiOjB9LHtcImludFwiOntiaWdpbnQ6cy5ufX0se1wiaW50XCI6cy5lfSx7XCJpbnRcIjp7YmlnaW50OnMuZH19LHtcImludFwiOntiaWdpbnQ6cy5wfX0se1wiaW50XCI6e2JpZ2ludDpzLnF9fSx7XCJpbnRcIjp7YmlnaW50OnMuZG1wMX19LHtcImludFwiOntiaWdpbnQ6cy5kbXExfX0se1wiaW50XCI6e2JpZ2ludDpzLmNvZWZmfX1dfSk7cmV0dXJuIEd9ZnVuY3Rpb24gQihHKXt2YXIgcz1sKHtzZXE6W3tcImludFwiOjF9LHtvY3RzdHI6e2hleDpHLnBydktleUhleH19LHt0YWc6W1wiYTBcIix0cnVlLHtvaWQ6e25hbWU6Ry5jdXJ2ZU5hbWV9fV19LHt0YWc6W1wiYTFcIix0cnVlLHtiaXRzdHI6e2hleDpcIjAwXCIrRy5wdWJLZXlIZXh9fV19XX0pO3JldHVybiBzfWZ1bmN0aW9uIHgocyl7dmFyIEc9bCh7c2VxOlt7XCJpbnRcIjowfSx7XCJpbnRcIjp7YmlnaW50OnMucH19LHtcImludFwiOntiaWdpbnQ6cy5xfX0se1wiaW50XCI6e2JpZ2ludDpzLmd9fSx7XCJpbnRcIjp7YmlnaW50OnMueX19LHtcImludFwiOntiaWdpbnQ6cy54fX1dfSk7cmV0dXJuIEd9aWYoKChuIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2Ygbil8fCh1IT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgdSl8fChyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgcikpJiZiLmlzUHVibGljPT10cnVlJiYoRD09PXVuZGVmaW5lZHx8RD09XCJQS0NTOFBVQlwiKSl7dmFyIEU9bmV3IEMoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIGhleHRvcGVtKHcsXCJQVUJMSUMgS0VZXCIpfWlmKEQ9PVwiUEtDUzFQUlZcIiYmbiE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIG4mJih5PT09dW5kZWZpbmVkfHx5PT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPUEoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIGhleHRvcGVtKHcsXCJSU0EgUFJJVkFURSBLRVlcIil9aWYoRD09XCJQS0NTMVBSVlwiJiZyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgciYmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIGk9bmV3IHooe25hbWU6Yi5jdXJ2ZU5hbWV9KTt2YXIgdj1pLmdldEVuY29kZWRIZXgoKTt2YXIgaD1CKGIpO3ZhciB0PWguZ2V0RW5jb2RlZEhleCgpO3ZhciBwPVwiXCI7cCs9aGV4dG9wZW0odixcIkVDIFBBUkFNRVRFUlNcIik7cCs9aGV4dG9wZW0odCxcIkVDIFBSSVZBVEUgS0VZXCIpO3JldHVybiBwfWlmKEQ9PVwiUEtDUzFQUlZcIiYmdSE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHUmJih5PT09dW5kZWZpbmVkfHx5PT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPXgoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIGhleHRvcGVtKHcsXCJEU0EgUFJJVkFURSBLRVlcIil9aWYoRD09XCJQS0NTNVBSVlwiJiZuIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgbiYmKHkhPT11bmRlZmluZWQmJnkhPW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9QShiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZihtPT09dW5kZWZpbmVkKXttPVwiREVTLUVERTMtQ0JDXCJ9cmV0dXJuIHRoaXMuZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4KFwiUlNBXCIsdyx5LG0sail9aWYoRD09XCJQS0NTNVBSVlwiJiZyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgciYmKHkhPT11bmRlZmluZWQmJnkhPW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9QihiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZihtPT09dW5kZWZpbmVkKXttPVwiREVTLUVERTMtQ0JDXCJ9cmV0dXJuIHRoaXMuZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4KFwiRUNcIix3LHksbSxqKX1pZihEPT1cIlBLQ1M1UFJWXCImJnUhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiB1JiYoeSE9PXVuZGVmaW5lZCYmeSE9bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT14KGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKG09PT11bmRlZmluZWQpe209XCJERVMtRURFMy1DQkNcIn1yZXR1cm4gdGhpcy5nZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgoXCJEU0FcIix3LHksbSxqKX12YXIgbz1mdW5jdGlvbihHLHMpe3ZhciBJPWMoRyxzKTt2YXIgSD1uZXcgbCh7c2VxOlt7c2VxOlt7b2lkOntuYW1lOlwicGtjczVQQkVTMlwifX0se3NlcTpbe3NlcTpbe29pZDp7bmFtZTpcInBrY3M1UEJLREYyXCJ9fSx7c2VxOlt7b2N0c3RyOntoZXg6SS5wYmtkZjJTYWx0fX0se1wiaW50XCI6SS5wYmtkZjJJdGVyfV19XX0se3NlcTpbe29pZDp7bmFtZTpcImRlcy1FREUzLUNCQ1wifX0se29jdHN0cjp7aGV4OkkuZW5jcnlwdGlvblNjaGVtZUlWfX1dfV19XX0se29jdHN0cjp7aGV4OkkuY2lwaGVydGV4dH19XX0pO3JldHVybiBILmdldEVuY29kZWRIZXgoKX07dmFyIGM9ZnVuY3Rpb24oTixPKXt2YXIgSD0xMDA7dmFyIE09Q3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oOCk7dmFyIEw9XCJERVMtRURFMy1DQkNcIjt2YXIgcz1DcnlwdG9KUy5saWIuV29yZEFycmF5LnJhbmRvbSg4KTt2YXIgST1DcnlwdG9KUy5QQktERjIoTyxNLHtrZXlTaXplOjE5Mi8zMixpdGVyYXRpb25zOkh9KTt2YXIgSj1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKE4pO3ZhciBLPUNyeXB0b0pTLlRyaXBsZURFUy5lbmNyeXB0KEosSSx7aXY6c30pK1wiXCI7dmFyIEc9e307Ry5jaXBoZXJ0ZXh0PUs7Ry5wYmtkZjJTYWx0PUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KE0pO0cucGJrZGYySXRlcj1IO0cuZW5jcnlwdGlvblNjaGVtZUFsZz1MO0cuZW5jcnlwdGlvblNjaGVtZUlWPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHMpO3JldHVybiBHfTtpZihEPT1cIlBLQ1M4UFJWXCImJm4hPXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIG4mJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgZz1BKGIpO3ZhciBkPWcuZ2V0RW5jb2RlZEhleCgpO3ZhciBFPWwoe3NlcTpbe1wiaW50XCI6MH0se3NlcTpbe29pZDp7bmFtZTpcInJzYUVuY3J5cHRpb25cIn19LHtcIm51bGxcIjp0cnVlfV19LHtvY3RzdHI6e2hleDpkfX1dfSk7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCl7cmV0dXJuIGhleHRvcGVtKHcsXCJQUklWQVRFIEtFWVwiKX1lbHNle3ZhciB0PW8odyx5KTtyZXR1cm4gaGV4dG9wZW0odCxcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiKX19aWYoRD09XCJQS0NTOFBSVlwiJiZyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgciYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBnPW5ldyBsKHtzZXE6W3tcImludFwiOjF9LHtvY3RzdHI6e2hleDpiLnBydktleUhleH19LHt0YWc6W1wiYTFcIix0cnVlLHtiaXRzdHI6e2hleDpcIjAwXCIrYi5wdWJLZXlIZXh9fV19XX0pO3ZhciBkPWcuZ2V0RW5jb2RlZEhleCgpO3ZhciBFPWwoe3NlcTpbe1wiaW50XCI6MH0se3NlcTpbe29pZDp7bmFtZTpcImVjUHVibGljS2V5XCJ9fSx7b2lkOntuYW1lOmIuY3VydmVOYW1lfX1dfSx7b2N0c3RyOntoZXg6ZH19XX0pO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpe3JldHVybiBoZXh0b3BlbSh3LFwiUFJJVkFURSBLRVlcIil9ZWxzZXt2YXIgdD1vKHcseSk7cmV0dXJuIGhleHRvcGVtKHQsXCJFTkNSWVBURUQgUFJJVkFURSBLRVlcIil9fWlmKEQ9PVwiUEtDUzhQUlZcIiYmdSE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHUmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgZz1uZXcgZih7YmlnaW50OmIueH0pO3ZhciBkPWcuZ2V0RW5jb2RlZEhleCgpO3ZhciBFPWwoe3NlcTpbe1wiaW50XCI6MH0se3NlcTpbe29pZDp7bmFtZTpcImRzYVwifX0se3NlcTpbe1wiaW50XCI6e2JpZ2ludDpiLnB9fSx7XCJpbnRcIjp7YmlnaW50OmIucX19LHtcImludFwiOntiaWdpbnQ6Yi5nfX1dfV19LHtvY3RzdHI6e2hleDpkfX1dfSk7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCl7cmV0dXJuIGhleHRvcGVtKHcsXCJQUklWQVRFIEtFWVwiKX1lbHNle3ZhciB0PW8odyx5KTtyZXR1cm4gaGV4dG9wZW0odCxcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiKX19dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgb2JqZWN0IG5vciBmb3JtYXRcIil9O0tFWVVUSUwuZ2V0S2V5RnJvbUNTUlBFTT1mdW5jdGlvbihiKXt2YXIgYT1wZW10b2hleChiLFwiQ0VSVElGSUNBVEUgUkVRVUVTVFwiKTt2YXIgYz1LRVlVVElMLmdldEtleUZyb21DU1JIZXgoYSk7cmV0dXJuIGN9O0tFWVVUSUwuZ2V0S2V5RnJvbUNTUkhleD1mdW5jdGlvbihhKXt2YXIgYz1LRVlVVElMLnBhcnNlQ1NSSGV4KGEpO3ZhciBiPUtFWVVUSUwuZ2V0S2V5KGMucDhwdWJrZXloZXgsbnVsbCxcInBrY3M4cHViXCIpO3JldHVybiBifTtLRVlVVElMLnBhcnNlQ1NSSGV4PWZ1bmN0aW9uKGQpe3ZhciBpPUFTTjFIRVg7dmFyIGY9aS5nZXRDaGlsZElkeDt2YXIgYz1pLmdldFRMVjt2YXIgYj17fTt2YXIgZz1kO2lmKGcuc3Vic3RyKDAsMikhPVwiMzBcIil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIENTUihjb2RlOjAwMSlcIil9dmFyIGU9ZihnLDApO2lmKGUubGVuZ3RoPDEpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBDU1IoY29kZTowMDIpXCIpfWlmKGcuc3Vic3RyKGVbMF0sMikhPVwiMzBcIil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIENTUihjb2RlOjAwMylcIil9dmFyIGE9ZihnLGVbMF0pO2lmKGEubGVuZ3RoPDMpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBDU1IoY29kZTowMDQpXCIpfWIucDhwdWJrZXloZXg9YyhnLGFbMl0pO3JldHVybiBifTtLRVlVVElMLmdldEtleUlEPWZ1bmN0aW9uKGYpe3ZhciBjPUtFWVVUSUw7dmFyIGU9QVNOMUhFWDtpZih0eXBlb2YgZj09PVwic3RyaW5nXCImJmYuaW5kZXhPZihcIkJFR0lOIFwiKSE9LTEpe2Y9Yy5nZXRLZXkoZil9dmFyIGQ9cGVtdG9oZXgoYy5nZXRQRU0oZikpO3ZhciBiPWUuZ2V0SWR4YnlMaXN0KGQsMCxbMV0pO3ZhciBhPWUuZ2V0VihkLGIpLnN1YnN0cmluZygyKTtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGEsXCJzaGExXCIpfTtLRVlVVElMLmdldEpXS0Zyb21LZXk9ZnVuY3Rpb24oZCl7dmFyIGI9e307aWYoZCBpbnN0YW5jZW9mIFJTQUtleSYmZC5pc1ByaXZhdGUpe2Iua3R5PVwiUlNBXCI7Yi5uPWhleHRvYjY0dShkLm4udG9TdHJpbmcoMTYpKTtiLmU9aGV4dG9iNjR1KGQuZS50b1N0cmluZygxNikpO2IuZD1oZXh0b2I2NHUoZC5kLnRvU3RyaW5nKDE2KSk7Yi5wPWhleHRvYjY0dShkLnAudG9TdHJpbmcoMTYpKTtiLnE9aGV4dG9iNjR1KGQucS50b1N0cmluZygxNikpO2IuZHA9aGV4dG9iNjR1KGQuZG1wMS50b1N0cmluZygxNikpO2IuZHE9aGV4dG9iNjR1KGQuZG1xMS50b1N0cmluZygxNikpO2IucWk9aGV4dG9iNjR1KGQuY29lZmYudG9TdHJpbmcoMTYpKTtyZXR1cm4gYn1lbHNle2lmKGQgaW5zdGFuY2VvZiBSU0FLZXkmJmQuaXNQdWJsaWMpe2Iua3R5PVwiUlNBXCI7Yi5uPWhleHRvYjY0dShkLm4udG9TdHJpbmcoMTYpKTtiLmU9aGV4dG9iNjR1KGQuZS50b1N0cmluZygxNikpO3JldHVybiBifWVsc2V7aWYoZCBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkVDRFNBJiZkLmlzUHJpdmF0ZSl7dmFyIGE9ZC5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lKCk7aWYoYSE9PVwiUC0yNTZcIiYmYSE9PVwiUC0zODRcIil7dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgY3VydmUgbmFtZSBmb3IgSldUOiBcIithKX12YXIgYz1kLmdldFB1YmxpY0tleVhZSGV4KCk7Yi5rdHk9XCJFQ1wiO2IuY3J2PWE7Yi54PWhleHRvYjY0dShjLngpO2IueT1oZXh0b2I2NHUoYy55KTtiLmQ9aGV4dG9iNjR1KGQucHJ2S2V5SGV4KTtyZXR1cm4gYn1lbHNle2lmKGQgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSYmZC5pc1B1YmxpYyl7dmFyIGE9ZC5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lKCk7aWYoYSE9PVwiUC0yNTZcIiYmYSE9PVwiUC0zODRcIil7dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgY3VydmUgbmFtZSBmb3IgSldUOiBcIithKX12YXIgYz1kLmdldFB1YmxpY0tleVhZSGV4KCk7Yi5rdHk9XCJFQ1wiO2IuY3J2PWE7Yi54PWhleHRvYjY0dShjLngpO2IueT1oZXh0b2I2NHUoYy55KTtyZXR1cm4gYn19fX10aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3VwcG9ydGVkIGtleSBvYmplY3RcIil9O1xuUlNBS2V5LmdldFBvc0FycmF5T2ZDaGlsZHJlbkZyb21IZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIEFTTjFIRVguZ2V0Q2hpbGRJZHgoYSwwKX07UlNBS2V5LmdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleD1mdW5jdGlvbihmKXt2YXIgbj1BU04xSEVYO3ZhciBpPW4uZ2V0Vjt2YXIgaz1SU0FLZXkuZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleChmKTt2YXIgZT1pKGYsa1swXSk7dmFyIGo9aShmLGtbMV0pO3ZhciBiPWkoZixrWzJdKTt2YXIgYz1pKGYsa1szXSk7dmFyIGg9aShmLGtbNF0pO3ZhciBnPWkoZixrWzVdKTt2YXIgbT1pKGYsa1s2XSk7dmFyIGw9aShmLGtbN10pO3ZhciBkPWkoZixrWzhdKTt2YXIgaz1uZXcgQXJyYXkoKTtrLnB1c2goZSxqLGIsYyxoLGcsbSxsLGQpO3JldHVybiBrfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQcml2YXRlS2V5RnJvbVBFTVN0cmluZz1mdW5jdGlvbihkKXt2YXIgYz1wZW10b2hleChkKTt2YXIgYj1SU0FLZXkuZ2V0SGV4VmFsdWVBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4KGMpO3RoaXMuc2V0UHJpdmF0ZUV4KGJbMV0sYlsyXSxiWzNdLGJbNF0sYls1XSxiWzZdLGJbN10sYls4XSl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M1UHJ2S2V5SGV4PWZ1bmN0aW9uKGMpe3ZhciBiPVJTQUtleS5nZXRIZXhWYWx1ZUFycmF5T2ZDaGlsZHJlbkZyb21IZXgoYyk7dGhpcy5zZXRQcml2YXRlRXgoYlsxXSxiWzJdLGJbM10sYls0XSxiWzVdLGJbNl0sYls3XSxiWzhdKX07UlNBS2V5LnByb3RvdHlwZS5yZWFkUEtDUzhQcnZLZXlIZXg9ZnVuY3Rpb24oZSl7dmFyIGMsaSxrLGIsYSxmLGQsajt2YXIgbT1BU04xSEVYO3ZhciBsPW0uZ2V0VmJ5TGlzdEV4O2lmKG0uaXNBU04xSEVYKGUpPT09ZmFsc2Upe3Rocm93IG5ldyBFcnJvcihcIm5vdCBBU04uMSBoZXggc3RyaW5nXCIpfXRyeXtjPWwoZSwwLFsyLDAsMV0sXCIwMlwiKTtpPWwoZSwwLFsyLDAsMl0sXCIwMlwiKTtrPWwoZSwwLFsyLDAsM10sXCIwMlwiKTtiPWwoZSwwLFsyLDAsNF0sXCIwMlwiKTthPWwoZSwwLFsyLDAsNV0sXCIwMlwiKTtmPWwoZSwwLFsyLDAsNl0sXCIwMlwiKTtkPWwoZSwwLFsyLDAsN10sXCIwMlwiKTtqPWwoZSwwLFsyLDAsOF0sXCIwMlwiKX1jYXRjaChnKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUEtDUyM4IHBsYWluIFJTQSBwcml2YXRlIGtleVwiKX10aGlzLnNldFByaXZhdGVFeChjLGksayxiLGEsZixkLGopfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQS0NTNVB1YktleUhleD1mdW5jdGlvbihjKXt2YXIgZT1BU04xSEVYO3ZhciBiPWUuZ2V0VjtpZihlLmlzQVNOMUhFWChjKT09PWZhbHNlKXt0aHJvdyBuZXcgRXJyb3IoXCJrZXlIZXggaXMgbm90IEFTTi4xIGhleCBzdHJpbmdcIil9dmFyIGE9ZS5nZXRDaGlsZElkeChjLDApO2lmKGEubGVuZ3RoIT09Mnx8Yy5zdWJzdHIoYVswXSwyKSE9PVwiMDJcInx8Yy5zdWJzdHIoYVsxXSwyKSE9PVwiMDJcIil7dGhyb3cgbmV3IEVycm9yKFwid3JvbmcgaGV4IGZvciBQS0NTIzUgcHVibGljIGtleVwiKX12YXIgZj1iKGMsYVswXSk7dmFyIGQ9YihjLGFbMV0pO3RoaXMuc2V0UHVibGljKGYsZCl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M4UHViS2V5SGV4PWZ1bmN0aW9uKGIpe3ZhciBjPUFTTjFIRVg7aWYoYy5pc0FTTjFIRVgoYik9PT1mYWxzZSl7dGhyb3cgbmV3IEVycm9yKFwibm90IEFTTi4xIGhleCBzdHJpbmdcIil9aWYoYy5nZXRUTFZieUxpc3RFeChiLDAsWzAsMF0pIT09XCIwNjA5MmE4NjQ4ODZmNzBkMDEwMTAxXCIpe3Rocm93IG5ldyBFcnJvcihcIm5vdCBQS0NTOCBSU0EgcHVibGljIGtleVwiKX12YXIgYT1jLmdldFRMVmJ5TGlzdEV4KGIsMCxbMSwwXSk7dGhpcy5yZWFkUEtDUzVQdWJLZXlIZXgoYSl9O1JTQUtleS5wcm90b3R5cGUucmVhZENlcnRQdWJLZXlIZXg9ZnVuY3Rpb24oYixkKXt2YXIgYSxjO2E9bmV3IFg1MDkoKTthLnJlYWRDZXJ0SGV4KGIpO2M9YS5nZXRQdWJsaWNLZXlIZXgoKTt0aGlzLnJlYWRQS0NTOFB1YktleUhleChjKX07XG52YXIgX1JFX0hFWERFQ09OTFk9bmV3IFJlZ0V4cChcIlteMC05YS1mXVwiLFwiZ2lcIik7ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0SGV4UGFkZGVkRGlnZXN0SW5mb0ZvclN0cmluZyhkLGUsYSl7dmFyIGI9ZnVuY3Rpb24oZil7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaFN0cmluZyhmLGEpfTt2YXIgYz1iKGQpO3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmdldFBhZGRlZERpZ2VzdEluZm9IZXgoYyxhLGUpfWZ1bmN0aW9uIF96ZXJvUGFkZGluZ09mU2lnbmF0dXJlKGUsZCl7dmFyIGM9XCJcIjt2YXIgYT1kLzQtZS5sZW5ndGg7Zm9yKHZhciBiPTA7YjxhO2IrKyl7Yz1jK1wiMFwifXJldHVybiBjK2V9UlNBS2V5LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGQsYSl7dmFyIGI9ZnVuY3Rpb24oZSl7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaFN0cmluZyhlLGEpfTt2YXIgYz1iKGQpO3JldHVybiB0aGlzLnNpZ25XaXRoTWVzc2FnZUhhc2goYyxhKX07UlNBS2V5LnByb3RvdHlwZS5zaWduV2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKGUsYyl7dmFyIGY9S0pVUi5jcnlwdG8uVXRpbC5nZXRQYWRkZWREaWdlc3RJbmZvSGV4KGUsYyx0aGlzLm4uYml0TGVuZ3RoKCkpO3ZhciBiPXBhcnNlQmlnSW50KGYsMTYpO3ZhciBkPXRoaXMuZG9Qcml2YXRlKGIpO3ZhciBhPWQudG9TdHJpbmcoMTYpO3JldHVybiBfemVyb1BhZGRpbmdPZlNpZ25hdHVyZShhLHRoaXMubi5iaXRMZW5ndGgoKSl9O2Z1bmN0aW9uIHBzc19tZ2YxX3N0cihjLGEsZSl7dmFyIGI9XCJcIixkPTA7d2hpbGUoYi5sZW5ndGg8YSl7Yis9aGV4dG9yc3RyKGUocnN0cnRvaGV4KGMrU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsWyhkJjQyNzgxOTAwODApPj4yNCwoZCYxNjcxMTY4MCk+PjE2LChkJjY1MjgwKT4+OCxkJjI1NV0pKSkpO2QrPTF9cmV0dXJuIGJ9UlNBS2V5LnByb3RvdHlwZS5zaWduUFNTPWZ1bmN0aW9uKGUsYSxkKXt2YXIgYz1mdW5jdGlvbihmKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGYsYSl9O3ZhciBiPWMocnN0cnRvaGV4KGUpKTtpZihkPT09dW5kZWZpbmVkKXtkPS0xfXJldHVybiB0aGlzLnNpZ25XaXRoTWVzc2FnZUhhc2hQU1MoYixhLGQpfTtSU0FLZXkucHJvdG90eXBlLnNpZ25XaXRoTWVzc2FnZUhhc2hQU1M9ZnVuY3Rpb24obCxhLGspe3ZhciBiPWhleHRvcnN0cihsKTt2YXIgZz1iLmxlbmd0aDt2YXIgbT10aGlzLm4uYml0TGVuZ3RoKCktMTt2YXIgYz1NYXRoLmNlaWwobS84KTt2YXIgZDt2YXIgbz1mdW5jdGlvbihpKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGksYSl9O2lmKGs9PT0tMXx8az09PXVuZGVmaW5lZCl7az1nfWVsc2V7aWYoaz09PS0yKXtrPWMtZy0yfWVsc2V7aWYoazwtMil7dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzYWx0IGxlbmd0aFwiKX19fWlmKGM8KGcraysyKSl7dGhyb3cgbmV3IEVycm9yKFwiZGF0YSB0b28gbG9uZ1wiKX12YXIgZj1cIlwiO2lmKGs+MCl7Zj1uZXcgQXJyYXkoayk7bmV3IFNlY3VyZVJhbmRvbSgpLm5leHRCeXRlcyhmKTtmPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGYpfXZhciBuPWhleHRvcnN0cihvKHJzdHJ0b2hleChcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIitiK2YpKSk7dmFyIGo9W107Zm9yKGQ9MDtkPGMtay1nLTI7ZCs9MSl7altkXT0wfXZhciBlPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGopK1wiXFx4MDFcIitmO3ZhciBoPXBzc19tZ2YxX3N0cihuLGUubGVuZ3RoLG8pO3ZhciBxPVtdO2ZvcihkPTA7ZDxlLmxlbmd0aDtkKz0xKXtxW2RdPWUuY2hhckNvZGVBdChkKV5oLmNoYXJDb2RlQXQoZCl9dmFyIHA9KDY1MjgwPj4oOCpjLW0pKSYyNTU7cVswXSY9fnA7Zm9yKGQ9MDtkPGc7ZCsrKXtxLnB1c2gobi5jaGFyQ29kZUF0KGQpKX1xLnB1c2goMTg4KTtyZXR1cm4gX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUodGhpcy5kb1ByaXZhdGUobmV3IEJpZ0ludGVnZXIocSkpLnRvU3RyaW5nKDE2KSx0aGlzLm4uYml0TGVuZ3RoKCkpfTtmdW5jdGlvbiBfcnNhc2lnbl9nZXREZWNyeXB0U2lnbmF0dXJlQkkoYSxkLGMpe3ZhciBiPW5ldyBSU0FLZXkoKTtiLnNldFB1YmxpYyhkLGMpO3ZhciBlPWIuZG9QdWJsaWMoYSk7cmV0dXJuIGV9ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0SGV4RGlnZXN0SW5mb0Zyb21TaWcoYSxjLGIpe3ZhciBlPV9yc2FzaWduX2dldERlY3J5cHRTaWduYXR1cmVCSShhLGMsYik7dmFyIGQ9ZS50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTtyZXR1cm4gZH1mdW5jdGlvbiBfcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhmKXtmb3IodmFyIGUgaW4gS0pVUi5jcnlwdG8uVXRpbC5ESUdFU1RJTkZPSEVBRCl7dmFyIGQ9S0pVUi5jcnlwdG8uVXRpbC5ESUdFU1RJTkZPSEVBRFtlXTt2YXIgYj1kLmxlbmd0aDtpZihmLnN1YnN0cmluZygwLGIpPT1kKXt2YXIgYz1bZSxmLnN1YnN0cmluZyhiKV07cmV0dXJuIGN9fXJldHVybltdfVJTQUtleS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGYsbCl7bD1sLnRvTG93ZXJDYXNlKCk7aWYobC5tYXRjaCgvXlswLTlhLWZdKyQvKT09bnVsbCl7cmV0dXJuIGZhbHNlfXZhciBiPXBhcnNlQmlnSW50KGwsMTYpO3ZhciBrPXRoaXMubi5iaXRMZW5ndGgoKTtpZihiLmJpdExlbmd0aCgpPmspe3JldHVybiBmYWxzZX12YXIgaj10aGlzLmRvUHVibGljKGIpO3ZhciBpPWoudG9TdHJpbmcoMTYpO2lmKGkubGVuZ3RoKzMhPWsvNCl7cmV0dXJuIGZhbHNlfXZhciBlPWkucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTt2YXIgZz1fcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhlKTtpZihnLmxlbmd0aD09MCl7cmV0dXJuIGZhbHNlfXZhciBkPWdbMF07dmFyIGg9Z1sxXTt2YXIgYT1mdW5jdGlvbihtKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoU3RyaW5nKG0sZCl9O3ZhciBjPWEoZik7cmV0dXJuKGg9PWMpfTtSU0FLZXkucHJvdG90eXBlLnZlcmlmeVdpdGhNZXNzYWdlSGFzaD1mdW5jdGlvbihlLGEpe2lmKGEubGVuZ3RoIT1NYXRoLmNlaWwodGhpcy5uLmJpdExlbmd0aCgpLzQpKXtyZXR1cm4gZmFsc2V9dmFyIGI9cGFyc2VCaWdJbnQoYSwxNik7aWYoYi5iaXRMZW5ndGgoKT50aGlzLm4uYml0TGVuZ3RoKCkpe3JldHVybiAwfXZhciBoPXRoaXMuZG9QdWJsaWMoYik7dmFyIGc9aC50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTt2YXIgYz1fcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhnKTtpZihjLmxlbmd0aD09MCl7cmV0dXJuIGZhbHNlfXZhciBkPWNbMF07dmFyIGY9Y1sxXTtyZXR1cm4oZj09ZSl9O1JTQUtleS5wcm90b3R5cGUudmVyaWZ5UFNTPWZ1bmN0aW9uKGMsYixhLGYpe3ZhciBlPWZ1bmN0aW9uKGcpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoZyxhKX07dmFyIGQ9ZShyc3RydG9oZXgoYykpO2lmKGY9PT11bmRlZmluZWQpe2Y9LTF9cmV0dXJuIHRoaXMudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoUFNTKGQsYixhLGYpfTtSU0FLZXkucHJvdG90eXBlLnZlcmlmeVdpdGhNZXNzYWdlSGFzaFBTUz1mdW5jdGlvbihmLHMsbCxjKXtpZihzLmxlbmd0aCE9TWF0aC5jZWlsKHRoaXMubi5iaXRMZW5ndGgoKS80KSl7cmV0dXJuIGZhbHNlfXZhciBrPW5ldyBCaWdJbnRlZ2VyKHMsMTYpO3ZhciByPWZ1bmN0aW9uKGkpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoaSxsKX07dmFyIGo9aGV4dG9yc3RyKGYpO3ZhciBoPWoubGVuZ3RoO3ZhciBnPXRoaXMubi5iaXRMZW5ndGgoKS0xO3ZhciBtPU1hdGguY2VpbChnLzgpO3ZhciBxO2lmKGM9PT0tMXx8Yz09PXVuZGVmaW5lZCl7Yz1ofWVsc2V7aWYoYz09PS0yKXtjPW0taC0yfWVsc2V7aWYoYzwtMil7dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzYWx0IGxlbmd0aFwiKX19fWlmKG08KGgrYysyKSl7dGhyb3cgbmV3IEVycm9yKFwiZGF0YSB0b28gbG9uZ1wiKX12YXIgYT10aGlzLmRvUHVibGljKGspLnRvQnl0ZUFycmF5KCk7Zm9yKHE9MDtxPGEubGVuZ3RoO3ErPTEpe2FbcV0mPTI1NX13aGlsZShhLmxlbmd0aDxtKXthLnVuc2hpZnQoMCl9aWYoYVttLTFdIT09MTg4KXt0aHJvdyBuZXcgRXJyb3IoXCJlbmNvZGVkIG1lc3NhZ2UgZG9lcyBub3QgZW5kIGluIDB4YmNcIil9YT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhKTt2YXIgZD1hLnN1YnN0cigwLG0taC0xKTt2YXIgZT1hLnN1YnN0cihkLmxlbmd0aCxoKTt2YXIgcD0oNjUyODA+Pig4Km0tZykpJjI1NTtpZigoZC5jaGFyQ29kZUF0KDApJnApIT09MCl7dGhyb3cgbmV3IEVycm9yKFwiYml0cyBiZXlvbmQga2V5c2l6ZSBub3QgemVyb1wiKX12YXIgbj1wc3NfbWdmMV9zdHIoZSxkLmxlbmd0aCxyKTt2YXIgbz1bXTtmb3IocT0wO3E8ZC5sZW5ndGg7cSs9MSl7b1txXT1kLmNoYXJDb2RlQXQocSlebi5jaGFyQ29kZUF0KHEpfW9bMF0mPX5wO3ZhciBiPW0taC1jLTI7Zm9yKHE9MDtxPGI7cSs9MSl7aWYob1txXSE9PTApe3Rocm93IG5ldyBFcnJvcihcImxlZnRtb3N0IG9jdGV0cyBub3QgemVyb1wiKX19aWYob1tiXSE9PTEpe3Rocm93IG5ldyBFcnJvcihcIjB4MDEgbWFya2VyIG5vdCBmb3VuZFwiKX1yZXR1cm4gZT09PWhleHRvcnN0cihyKHJzdHJ0b2hleChcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIitqK1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLG8uc2xpY2UoLWMpKSkpKX07UlNBS2V5LlNBTFRfTEVOX0hMRU49LTE7UlNBS2V5LlNBTFRfTEVOX01BWD0tMjtSU0FLZXkuU0FMVF9MRU5fUkVDT1ZFUj0tMjtcbmZ1bmN0aW9uIFg1MDkocSl7dmFyIGo9QVNOMUhFWCxuPWouZ2V0Q2hpbGRJZHgsZz1qLmdldFYsYj1qLmdldFRMVixjPWouZ2V0VmJ5TGlzdCxrPWouZ2V0VmJ5TGlzdEV4LGE9ai5nZXRUTFZieUxpc3QsbD1qLmdldFRMVmJ5TGlzdEV4LGg9ai5nZXRJZHhieUxpc3QsZT1qLmdldElkeGJ5TGlzdEV4LGk9ai5nZXRWaWR4LHM9ai5nZXRJbnQscD1qLm9pZG5hbWUsbT1qLmhleHRvb2lkc3RyLGQ9WDUwOSxyPXBlbXRvaGV4LGY7dHJ5e2Y9S0pVUi5hc24xLng1MDkuQWxnb3JpdGhtSWRlbnRpZmllci5QU1NOQU1FMkFTTjFUTFZ9Y2F0Y2gobyl7fXRoaXMuSEVYMlNUQUc9e1wiMGNcIjpcInV0ZjhcIixcIjEzXCI6XCJwcm5cIixcIjE2XCI6XCJpYTVcIixcIjFhXCI6XCJ2aXNcIixcIjFlXCI6XCJibXBcIn07dGhpcy5oZXg9bnVsbDt0aGlzLnZlcnNpb249MDt0aGlzLmZvZmZzZXQ9MDt0aGlzLmFFeHRJbmZvPW51bGw7dGhpcy5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7aWYodGhpcy5oZXg9PT1udWxsfHx0aGlzLnZlcnNpb24hPT0wKXtyZXR1cm4gdGhpcy52ZXJzaW9ufXZhciB1PWEodGhpcy5oZXgsMCxbMCwwXSk7aWYodS5zdWJzdHIoMCwyKT09XCJhMFwiKXt2YXIgdj1hKHUsMCxbMF0pO3ZhciB0PXModiwwKTtpZih0PDB8fDI8dCl7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIHZlcnNpb24gZmllbGRcIil9dGhpcy52ZXJzaW9uPXQrMTtyZXR1cm4gdGhpcy52ZXJzaW9ufWVsc2V7dGhpcy52ZXJzaW9uPTE7dGhpcy5mb2Zmc2V0PS0xO3JldHVybiAxfX07dGhpcy5nZXRTZXJpYWxOdW1iZXJIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLmhleCwwLFswLDBdLFwiMDJcIil9O3RoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQ9ZnVuY3Rpb24oKXt2YXIgdD1sKHRoaXMuaGV4LDAsWzAsMV0pO3JldHVybiB0aGlzLmdldEFsZ29yaXRobUlkZW50aWZpZXJOYW1lKHQpfTt0aGlzLmdldEFsZ29yaXRobUlkZW50aWZpZXJOYW1lPWZ1bmN0aW9uKHQpe2Zvcih2YXIgdSBpbiBmKXtpZih0PT09Zlt1XSl7cmV0dXJuIHV9fXJldHVybiBwKGsodCwwLFswXSxcIjA2XCIpKX07dGhpcy5nZXRJc3N1ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYNTAwTmFtZSh0aGlzLmdldElzc3VlckhleCgpKX07dGhpcy5nZXRJc3N1ZXJIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLmhleCwwLFswLDMrdGhpcy5mb2Zmc2V0XSxcIjMwXCIpfTt0aGlzLmdldElzc3VlclN0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0SXNzdWVyKCk7cmV0dXJuIHQuc3RyfTt0aGlzLmdldFN1YmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYNTAwTmFtZSh0aGlzLmdldFN1YmplY3RIZXgoKSl9O3RoaXMuZ2V0U3ViamVjdEhleD1mdW5jdGlvbigpe3JldHVybiBhKHRoaXMuaGV4LDAsWzAsNSt0aGlzLmZvZmZzZXRdLFwiMzBcIil9O3RoaXMuZ2V0U3ViamVjdFN0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0U3ViamVjdCgpO3JldHVybiB0LnN0cn07dGhpcy5nZXROb3RCZWZvcmU9ZnVuY3Rpb24oKXt2YXIgdD1jKHRoaXMuaGV4LDAsWzAsNCt0aGlzLmZvZmZzZXQsMF0pO3Q9dC5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIik7dD1kZWNvZGVVUklDb21wb25lbnQodCk7cmV0dXJuIHR9O3RoaXMuZ2V0Tm90QWZ0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1jKHRoaXMuaGV4LDAsWzAsNCt0aGlzLmZvZmZzZXQsMV0pO3Q9dC5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIik7dD1kZWNvZGVVUklDb21wb25lbnQodCk7cmV0dXJuIHR9O3RoaXMuZ2V0UHVibGljS2V5SGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGouZ2V0VExWYnlMaXN0KHRoaXMuaGV4LDAsWzAsNit0aGlzLmZvZmZzZXRdLFwiMzBcIil9O3RoaXMuZ2V0UHVibGljS2V5SWR4PWZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5oZXgsMCxbMCw2K3RoaXMuZm9mZnNldF0sXCIzMFwiKX07dGhpcy5nZXRQdWJsaWNLZXlDb250ZW50SWR4PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQdWJsaWNLZXlJZHgoKTtyZXR1cm4gaCh0aGlzLmhleCx0LFsxLDBdLFwiMzBcIil9O3RoaXMuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIEtFWVVUSUwuZ2V0S2V5KHRoaXMuZ2V0UHVibGljS2V5SGV4KCksbnVsbCxcInBrY3M4cHViXCIpfTt0aGlzLmdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWU9ZnVuY3Rpb24oKXt2YXIgdD1hKHRoaXMuaGV4LDAsWzFdLFwiMzBcIik7cmV0dXJuIHRoaXMuZ2V0QWxnb3JpdGhtSWRlbnRpZmllck5hbWUodCl9O3RoaXMuZ2V0U2lnbmF0dXJlVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLmhleCwwLFsyXSxcIjAzXCIsdHJ1ZSl9O3RoaXMudmVyaWZ5U2lnbmF0dXJlPWZ1bmN0aW9uKHYpe3ZhciB3PXRoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQoKTt2YXIgdD10aGlzLmdldFNpZ25hdHVyZVZhbHVlSGV4KCk7dmFyIHU9YSh0aGlzLmhleCwwLFswXSxcIjMwXCIpO3ZhciB4PW5ldyBLSlVSLmNyeXB0by5TaWduYXR1cmUoe2FsZzp3fSk7eC5pbml0KHYpO3gudXBkYXRlSGV4KHUpO3JldHVybiB4LnZlcmlmeSh0KX07dGhpcy5wYXJzZUV4dD1mdW5jdGlvbihDKXt2YXIgdix0LHg7aWYoQz09PXVuZGVmaW5lZCl7eD10aGlzLmhleDtpZih0aGlzLnZlcnNpb24hPT0zKXtyZXR1cm4gLTF9dj1oKHgsMCxbMCw3LDBdLFwiMzBcIik7dD1uKHgsdil9ZWxzZXt4PXBlbXRvaGV4KEMpO3ZhciB5PWgoeCwwLFswLDMsMCwwXSxcIjA2XCIpO2lmKGcoeCx5KSE9XCIyYTg2NDg4NmY3MGQwMTA5MGVcIil7dGhpcy5hRXh0SW5mbz1uZXcgQXJyYXkoKTtyZXR1cm59dj1oKHgsMCxbMCwzLDAsMSwwXSxcIjMwXCIpO3Q9bih4LHYpO3RoaXMuaGV4PXh9dGhpcy5hRXh0SW5mbz1uZXcgQXJyYXkoKTtmb3IodmFyIHc9MDt3PHQubGVuZ3RoO3crKyl7dmFyIEE9e307QS5jcml0aWNhbD1mYWxzZTt2YXIgej1uKHgsdFt3XSk7dmFyIHU9MDtpZih6Lmxlbmd0aD09PTMpe0EuY3JpdGljYWw9dHJ1ZTt1PTF9QS5vaWQ9ai5oZXh0b29pZHN0cihjKHgsdFt3XSxbMF0sXCIwNlwiKSk7dmFyIEI9aCh4LHRbd10sWzErdV0pO0EudmlkeD1pKHgsQik7dGhpcy5hRXh0SW5mby5wdXNoKEEpfX07dGhpcy5nZXRFeHRJbmZvPWZ1bmN0aW9uKHYpe3ZhciB0PXRoaXMuYUV4dEluZm87dmFyIHc9djtpZighdi5tYXRjaCgvXlswLTkuXSskLykpe3c9S0pVUi5hc24xLng1MDkuT0lELm5hbWUyb2lkKHYpfWlmKHc9PT1cIlwiKXtyZXR1cm4gdW5kZWZpbmVkfWZvcih2YXIgdT0wO3U8dC5sZW5ndGg7dSsrKXtpZih0W3VdLm9pZD09PXcpe3JldHVybiB0W3VdfX1yZXR1cm4gdW5kZWZpbmVkfTt0aGlzLmdldEV4dEJhc2ljQ29uc3RyYWludHM9ZnVuY3Rpb24odSx5KXtpZih1PT09dW5kZWZpbmVkJiZ5PT09dW5kZWZpbmVkKXt2YXIgdz10aGlzLmdldEV4dEluZm8oXCJiYXNpY0NvbnN0cmFpbnRzXCIpO2lmKHc9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9dT1iKHRoaXMuaGV4LHcudmlkeCk7eT13LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwiYmFzaWNDb25zdHJhaW50c1wifTtpZih5KXt0LmNyaXRpY2FsPXRydWV9aWYodT09PVwiMzAwMFwiKXtyZXR1cm4gdH1pZih1PT09XCIzMDAzMDEwMWZmXCIpe3QuY0E9dHJ1ZTtyZXR1cm4gdH1pZih1LnN1YnN0cigwLDEyKT09PVwiMzAwNjAxMDFmZjAyXCIpe3ZhciB4PWcodSwxMCk7dmFyIHY9cGFyc2VJbnQoeCwxNik7dC5jQT10cnVlO3QucGF0aExlbj12O3JldHVybiB0fXRocm93IG5ldyBFcnJvcihcImhFeHRWIHBhcnNlIGVycm9yOiBcIit1KX07dGhpcy5nZXRFeHRLZXlVc2FnZT1mdW5jdGlvbih1LHcpe2lmKHU9PT11bmRlZmluZWQmJnc9PT11bmRlZmluZWQpe3ZhciB2PXRoaXMuZ2V0RXh0SW5mbyhcImtleVVzYWdlXCIpO2lmKHY9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9dT1iKHRoaXMuaGV4LHYudmlkeCk7dz12LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwia2V5VXNhZ2VcIn07aWYodyl7dC5jcml0aWNhbD10cnVlfXQubmFtZXM9dGhpcy5nZXRFeHRLZXlVc2FnZVN0cmluZyh1KS5zcGxpdChcIixcIik7cmV0dXJuIHR9O3RoaXMuZ2V0RXh0S2V5VXNhZ2VCaW49ZnVuY3Rpb24odSl7aWYodT09PXVuZGVmaW5lZCl7dmFyIHY9dGhpcy5nZXRFeHRJbmZvKFwia2V5VXNhZ2VcIik7aWYodj09PXVuZGVmaW5lZCl7cmV0dXJuXCJcIn11PWIodGhpcy5oZXgsdi52aWR4KX1pZih1Lmxlbmd0aCE9OCYmdS5sZW5ndGghPTEwKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQga2V5IHVzYWdlIHZhbHVlOiBcIit1KX12YXIgdD1cIjAwMDAwMDAwMDAwMDAwMFwiK3BhcnNlSW50KHUuc3Vic3RyKDYpLDE2KS50b1N0cmluZygyKTtpZih1Lmxlbmd0aD09OCl7dD10LnNsaWNlKC04KX1pZih1Lmxlbmd0aD09MTApe3Q9dC5zbGljZSgtMTYpfXQ9dC5yZXBsYWNlKC8wKyQvLFwiXCIpO2lmKHQ9PVwiXCIpe3Q9XCIwXCJ9cmV0dXJuIHR9O3RoaXMuZ2V0RXh0S2V5VXNhZ2VTdHJpbmc9ZnVuY3Rpb24odil7dmFyIHc9dGhpcy5nZXRFeHRLZXlVc2FnZUJpbih2KTt2YXIgdD1uZXcgQXJyYXkoKTtmb3IodmFyIHU9MDt1PHcubGVuZ3RoO3UrKyl7aWYody5zdWJzdHIodSwxKT09XCIxXCIpe3QucHVzaChYNTA5LktFWVVTQUdFX05BTUVbdV0pfX1yZXR1cm4gdC5qb2luKFwiLFwiKX07dGhpcy5nZXRFeHRTdWJqZWN0S2V5SWRlbnRpZmllcj1mdW5jdGlvbih2LHgpe2lmKHY9PT11bmRlZmluZWQmJng9PT11bmRlZmluZWQpe3ZhciB3PXRoaXMuZ2V0RXh0SW5mbyhcInN1YmplY3RLZXlJZGVudGlmaWVyXCIpO2lmKHc9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9dj1iKHRoaXMuaGV4LHcudmlkeCk7eD13LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwic3ViamVjdEtleUlkZW50aWZpZXJcIn07aWYoeCl7dC5jcml0aWNhbD10cnVlfXZhciB1PWcodiwwKTt0LmtpZD17aGV4OnV9O3JldHVybiB0fTt0aGlzLmdldEV4dEF1dGhvcml0eUtleUlkZW50aWZpZXI9ZnVuY3Rpb24oeix4KXtpZih6PT09dW5kZWZpbmVkJiZ4PT09dW5kZWZpbmVkKXt2YXIgdD10aGlzLmdldEV4dEluZm8oXCJhdXRob3JpdHlLZXlJZGVudGlmaWVyXCIpO2lmKHQ9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9ej1iKHRoaXMuaGV4LHQudmlkeCk7eD10LmNyaXRpY2FsfXZhciBBPXtleHRuYW1lOlwiYXV0aG9yaXR5S2V5SWRlbnRpZmllclwifTtpZih4KXtBLmNyaXRpY2FsPXRydWV9dmFyIHk9bih6LDApO2Zvcih2YXIgdT0wO3U8eS5sZW5ndGg7dSsrKXt2YXIgQj16LnN1YnN0cih5W3VdLDIpO2lmKEI9PT1cIjgwXCIpe0Eua2lkPXtoZXg6Zyh6LHlbdV0pfX1pZihCPT09XCJhMVwiKXt2YXIgdz1iKHoseVt1XSk7dmFyIHY9dGhpcy5nZXRHZW5lcmFsTmFtZXModyk7QS5pc3N1ZXI9dlswXVtcImRuXCJdfWlmKEI9PT1cIjgyXCIpe0Euc249e2hleDpnKHoseVt1XSl9fX1yZXR1cm4gQX07dGhpcy5nZXRFeHRFeHRLZXlVc2FnZT1mdW5jdGlvbih3LHkpe2lmKHc9PT11bmRlZmluZWQmJnk9PT11bmRlZmluZWQpe3ZhciB4PXRoaXMuZ2V0RXh0SW5mbyhcImV4dEtleVVzYWdlXCIpO2lmKHg9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9dz1iKHRoaXMuaGV4LHgudmlkeCk7eT14LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwiZXh0S2V5VXNhZ2VcIixhcnJheTpbXX07aWYoeSl7dC5jcml0aWNhbD10cnVlfXZhciB1PW4odywwKTtmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl7dC5hcnJheS5wdXNoKHAoZyh3LHVbdl0pKSl9cmV0dXJuIHR9O3RoaXMuZ2V0RXh0RXh0S2V5VXNhZ2VOYW1lPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5nZXRFeHRJbmZvKFwiZXh0S2V5VXNhZ2VcIik7aWYoeD09PXVuZGVmaW5lZCl7cmV0dXJuIHh9dmFyIHQ9bmV3IEFycmF5KCk7dmFyIHc9Yih0aGlzLmhleCx4LnZpZHgpO2lmKHc9PT1cIlwiKXtyZXR1cm4gdH12YXIgdT1uKHcsMCk7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe3QucHVzaChwKGcodyx1W3ZdKSkpfXJldHVybiB0fTt0aGlzLmdldEV4dFN1YmplY3RBbHROYW1lPWZ1bmN0aW9uKHUsdyl7aWYodT09PXVuZGVmaW5lZCYmdz09PXVuZGVmaW5lZCl7dmFyIHY9dGhpcy5nZXRFeHRJbmZvKFwic3ViamVjdEFsdE5hbWVcIik7aWYodj09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZH11PWIodGhpcy5oZXgsdi52aWR4KTt3PXYuY3JpdGljYWx9dmFyIHQ9e2V4dG5hbWU6XCJzdWJqZWN0QWx0TmFtZVwiLGFycmF5OltdfTtpZih3KXt0LmNyaXRpY2FsPXRydWV9dC5hcnJheT10aGlzLmdldEdlbmVyYWxOYW1lcyh1KTtyZXR1cm4gdH07dGhpcy5nZXRFeHRJc3N1ZXJBbHROYW1lPWZ1bmN0aW9uKHUsdyl7aWYodT09PXVuZGVmaW5lZCYmdz09PXVuZGVmaW5lZCl7dmFyIHY9dGhpcy5nZXRFeHRJbmZvKFwiaXNzdWVyQWx0TmFtZVwiKTtpZih2PT09dW5kZWZpbmVkKXtyZXR1cm4gdW5kZWZpbmVkfXU9Yih0aGlzLmhleCx2LnZpZHgpO3c9di5jcml0aWNhbH12YXIgdD17ZXh0bmFtZTpcImlzc3VlckFsdE5hbWVcIixhcnJheTpbXX07aWYodyl7dC5jcml0aWNhbD10cnVlfXQuYXJyYXk9dGhpcy5nZXRHZW5lcmFsTmFtZXModSk7cmV0dXJuIHR9O3RoaXMuZ2V0R2VuZXJhbE5hbWVzPWZ1bmN0aW9uKHgpe3ZhciB2PW4oeCwwKTt2YXIgdD1bXTtmb3IodmFyIHc9MDt3PHYubGVuZ3RoO3crKyl7dmFyIHU9dGhpcy5nZXRHZW5lcmFsTmFtZShiKHgsdlt3XSkpO2lmKHUhPT11bmRlZmluZWQpe3QucHVzaCh1KX19cmV0dXJuIHR9O3RoaXMuZ2V0R2VuZXJhbE5hbWU9ZnVuY3Rpb24odSl7dmFyIHQ9dS5zdWJzdHIoMCwyKTt2YXIgdz1nKHUsMCk7dmFyIHY9aGV4dG9yc3RyKHcpO2lmKHQ9PVwiODFcIil7cmV0dXJue3JmYzgyMjp2fX1pZih0PT1cIjgyXCIpe3JldHVybntkbnM6dn19aWYodD09XCI4NlwiKXtyZXR1cm57dXJpOnZ9fWlmKHQ9PVwiODdcIil7cmV0dXJue2lwOmhleHRvaXAodyl9fWlmKHQ9PVwiYTRcIil7cmV0dXJue2RuOnRoaXMuZ2V0WDUwME5hbWUodyl9fXJldHVybiB1bmRlZmluZWR9O3RoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWUyPWZ1bmN0aW9uKCl7dmFyIHgsQSx6O3ZhciB5PXRoaXMuZ2V0RXh0SW5mbyhcInN1YmplY3RBbHROYW1lXCIpO2lmKHk9PT11bmRlZmluZWQpe3JldHVybiB5fXZhciB0PW5ldyBBcnJheSgpO3ZhciB3PWIodGhpcy5oZXgseS52aWR4KTt2YXIgdT1uKHcsMCk7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe3o9dy5zdWJzdHIodVt2XSwyKTt4PWcodyx1W3ZdKTtpZih6PT09XCI4MVwiKXtBPWhleHRvdXRmOCh4KTt0LnB1c2goW1wiTUFJTFwiLEFdKX1pZih6PT09XCI4MlwiKXtBPWhleHRvdXRmOCh4KTt0LnB1c2goW1wiRE5TXCIsQV0pfWlmKHo9PT1cIjg0XCIpe0E9WDUwOS5oZXgyZG4oeCwwKTt0LnB1c2goW1wiRE5cIixBXSl9aWYoej09PVwiODZcIil7QT1oZXh0b3V0ZjgoeCk7dC5wdXNoKFtcIlVSSVwiLEFdKX1pZih6PT09XCI4N1wiKXtBPWhleHRvaXAoeCk7dC5wdXNoKFtcIklQXCIsQV0pfX1yZXR1cm4gdH07dGhpcy5nZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHM9ZnVuY3Rpb24oeCx6KXtpZih4PT09dW5kZWZpbmVkJiZ6PT09dW5kZWZpbmVkKXt2YXIgeT10aGlzLmdldEV4dEluZm8oXCJjUkxEaXN0cmlidXRpb25Qb2ludHNcIik7aWYoeT09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZH14PWIodGhpcy5oZXgseS52aWR4KTt6PXkuY3JpdGljYWx9dmFyIHU9e2V4dG5hbWU6XCJjUkxEaXN0cmlidXRpb25Qb2ludHNcIixhcnJheTpbXX07aWYoeil7dS5jcml0aWNhbD10cnVlfXZhciB2PW4oeCwwKTtmb3IodmFyIHc9MDt3PHYubGVuZ3RoO3crKyl7dmFyIHQ9Yih4LHZbd10pO3UuYXJyYXkucHVzaCh0aGlzLmdldERpc3RyaWJ1dGlvblBvaW50KHQpKX1yZXR1cm4gdX07dGhpcy5nZXREaXN0cmlidXRpb25Qb2ludD1mdW5jdGlvbih5KXt2YXIgdj17fTt2YXIgdz1uKHksMCk7Zm9yKHZhciB4PTA7eDx3Lmxlbmd0aDt4Kyspe3ZhciB1PXkuc3Vic3RyKHdbeF0sMik7dmFyIHQ9Yih5LHdbeF0pO2lmKHU9PVwiYTBcIil7di5kcG5hbWU9dGhpcy5nZXREaXN0cmlidXRpb25Qb2ludE5hbWUodCl9fXJldHVybiB2fTt0aGlzLmdldERpc3RyaWJ1dGlvblBvaW50TmFtZT1mdW5jdGlvbih5KXt2YXIgdj17fTt2YXIgdz1uKHksMCk7Zm9yKHZhciB4PTA7eDx3Lmxlbmd0aDt4Kyspe3ZhciB1PXkuc3Vic3RyKHdbeF0sMik7dmFyIHQ9Yih5LHdbeF0pO2lmKHU9PVwiYTBcIil7di5mdWxsPXRoaXMuZ2V0R2VuZXJhbE5hbWVzKHQpfX1yZXR1cm4gdn07dGhpcy5nZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHNVUkk9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmdldEV4dEluZm8oXCJjUkxEaXN0cmlidXRpb25Qb2ludHNcIik7aWYoeT09PXVuZGVmaW5lZCl7cmV0dXJuIHl9dmFyIHQ9bmV3IEFycmF5KCk7dmFyIHU9bih0aGlzLmhleCx5LnZpZHgpO2Zvcih2YXIgdz0wO3c8dS5sZW5ndGg7dysrKXt0cnl7dmFyIHo9Yyh0aGlzLmhleCx1W3ddLFswLDAsMF0sXCI4NlwiKTt2YXIgeD1oZXh0b3V0Zjgoeik7dC5wdXNoKHgpfWNhdGNoKHYpe319cmV0dXJuIHR9O3RoaXMuZ2V0RXh0QUlBSW5mbz1mdW5jdGlvbigpe3ZhciB4PXRoaXMuZ2V0RXh0SW5mbyhcImF1dGhvcml0eUluZm9BY2Nlc3NcIik7aWYoeD09PXVuZGVmaW5lZCl7cmV0dXJuIHh9dmFyIHQ9e29jc3A6W10sY2Fpc3N1ZXI6W119O3ZhciB1PW4odGhpcy5oZXgseC52aWR4KTtmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl7dmFyIHk9Yyh0aGlzLmhleCx1W3ZdLFswXSxcIjA2XCIpO3ZhciB3PWModGhpcy5oZXgsdVt2XSxbMV0sXCI4NlwiKTtpZih5PT09XCIyYjA2MDEwNTA1MDczMDAxXCIpe3Qub2NzcC5wdXNoKGhleHRvdXRmOCh3KSl9aWYoeT09PVwiMmIwNjAxMDUwNTA3MzAwMlwiKXt0LmNhaXNzdWVyLnB1c2goaGV4dG91dGY4KHcpKX19cmV0dXJuIHR9O3RoaXMuZ2V0RXh0QXV0aG9yaXR5SW5mb0FjY2Vzcz1mdW5jdGlvbihBLHkpe2lmKEE9PT11bmRlZmluZWQmJnk9PT11bmRlZmluZWQpe3ZhciB0PXRoaXMuZ2V0RXh0SW5mbyhcImF1dGhvcml0eUluZm9BY2Nlc3NcIik7aWYodD09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZH1BPWIodGhpcy5oZXgsdC52aWR4KTt5PXQuY3JpdGljYWx9dmFyIEI9e2V4dG5hbWU6XCJhdXRob3JpdHlJbmZvQWNjZXNzXCIsYXJyYXk6W119O2lmKHkpe0IuY3JpdGljYWw9dHJ1ZX12YXIgej1uKEEsMCk7Zm9yKHZhciB1PTA7dTx6Lmxlbmd0aDt1Kyspe3ZhciB4PWsoQSx6W3VdLFswXSxcIjA2XCIpO3ZhciB2PWMoQSx6W3VdLFsxXSxcIjg2XCIpO3ZhciB3PWhleHRvdXRmOCh2KTtpZih4PT1cIjJiMDYwMTA1MDUwNzMwMDFcIil7Qi5hcnJheS5wdXNoKHtvY3NwOnd9KX1lbHNle2lmKHg9PVwiMmIwNjAxMDUwNTA3MzAwMlwiKXtCLmFycmF5LnB1c2goe2NhaXNzdWVyOnd9KX1lbHNle3Rocm93IG5ldyBFcnJvcihcInVua25vd24gbWV0aG9kOiBcIit4KX19fXJldHVybiBCfTt0aGlzLmdldEV4dENlcnRpZmljYXRlUG9saWNpZXM9ZnVuY3Rpb24oeCxBKXtpZih4PT09dW5kZWZpbmVkJiZBPT09dW5kZWZpbmVkKXt2YXIgej10aGlzLmdldEV4dEluZm8oXCJjZXJ0aWZpY2F0ZVBvbGljaWVzXCIpO2lmKHo9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9eD1iKHRoaXMuaGV4LHoudmlkeCk7QT16LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwiY2VydGlmaWNhdGVQb2xpY2llc1wiLGFycmF5OltdfTtpZihBKXt0LmNyaXRpY2FsPXRydWV9dmFyIHU9bih4LDApO2Zvcih2YXIgdj0wO3Y8dS5sZW5ndGg7disrKXt2YXIgeT1iKHgsdVt2XSk7dmFyIHc9dGhpcy5nZXRQb2xpY3lJbmZvcm1hdGlvbih5KTt0LmFycmF5LnB1c2godyl9cmV0dXJuIHR9O3RoaXMuZ2V0UG9saWN5SW5mb3JtYXRpb249ZnVuY3Rpb24oeCl7dmFyIHQ9e307dmFyIHo9Yyh4LDAsWzBdLFwiMDZcIik7dC5wb2xpY3lvaWQ9cCh6KTt2YXIgQT1lKHgsMCxbMV0sXCIzMFwiKTtpZihBIT0tMSl7dC5hcnJheT1bXTt2YXIgdT1uKHgsQSk7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe3ZhciB5PWIoeCx1W3ZdKTt2YXIgdz10aGlzLmdldFBvbGljeVF1YWxpZmllckluZm8oeSk7dC5hcnJheS5wdXNoKHcpfX1yZXR1cm4gdH07dGhpcy5nZXRQb2xpY3lRdWFsaWZpZXJJbmZvPWZ1bmN0aW9uKHUpe3ZhciB0PXt9O3ZhciB2PWModSwwLFswXSxcIjA2XCIpO2lmKHY9PT1cIjJiMDYwMTA1MDUwNzAyMDFcIil7dmFyIHg9ayh1LDAsWzFdLFwiMTZcIik7dC5jcHM9aGV4dG9yc3RyKHgpfWVsc2V7aWYodj09PVwiMmIwNjAxMDUwNTA3MDIwMlwiKXt2YXIgdz1hKHUsMCxbMV0sXCIzMFwiKTt0LnVub3RpY2U9dGhpcy5nZXRVc2VyTm90aWNlKHcpfX1yZXR1cm4gdH07dGhpcy5nZXRVc2VyTm90aWNlPWZ1bmN0aW9uKHgpe3ZhciB1PXt9O3ZhciB2PW4oeCwwKTtmb3IodmFyIHc9MDt3PHYubGVuZ3RoO3crKyl7dmFyIHQ9Yih4LHZbd10pO2lmKHQuc3Vic3RyKDAsMikhPVwiMzBcIil7dS5leHB0ZXh0PXRoaXMuZ2V0RGlzcGxheVRleHQodCl9fXJldHVybiB1fTt0aGlzLmdldERpc3BsYXlUZXh0PWZ1bmN0aW9uKHUpe3ZhciB2PXtcIjBjXCI6XCJ1dGY4XCIsXCIxNlwiOlwiaWE1XCIsXCIxYVwiOlwidmlzXCIsXCIxZVwiOlwiYm1wXCJ9O3ZhciB0PXt9O3QudHlwZT12W3Uuc3Vic3RyKDAsMildO3Quc3RyPWhleHRvcnN0cihnKHUsMCkpO3JldHVybiB0fTt0aGlzLmdldEV4dENSTE51bWJlcj1mdW5jdGlvbih1LHYpe3ZhciB0PXtleHRuYW1lOlwiY1JMTnVtYmVyXCJ9O2lmKHYpe3QuY3JpdGljYWw9dHJ1ZX1pZih1LnN1YnN0cigwLDIpPT1cIjAyXCIpe3QubnVtPXtoZXg6Zyh1LDApfTtyZXR1cm4gdH10aHJvdyBuZXcgRXJyb3IoXCJoRXh0ViBwYXJzZSBlcnJvcjogXCIrdSl9O3RoaXMuZ2V0RXh0Q1JMUmVhc29uPWZ1bmN0aW9uKHUsdil7dmFyIHQ9e2V4dG5hbWU6XCJjUkxSZWFzb25cIn07aWYodil7dC5jcml0aWNhbD10cnVlfWlmKHUuc3Vic3RyKDAsMik9PVwiMGFcIil7dC5jb2RlPXBhcnNlSW50KGcodSwwKSwxNik7cmV0dXJuIHR9dGhyb3cgbmV3IEVycm9yKFwiaEV4dFYgcGFyc2UgZXJyb3I6IFwiK3UpfTt0aGlzLmdldEV4dE9jc3BOb25jZT1mdW5jdGlvbih1LHcpe3ZhciB0PXtleHRuYW1lOlwib2NzcE5vbmNlXCJ9O2lmKHcpe3QuY3JpdGljYWw9dHJ1ZX12YXIgdj1nKHUsMCk7dC5oZXg9djtyZXR1cm4gdH07dGhpcy5nZXRFeHRPY3NwTm9DaGVjaz1mdW5jdGlvbih1LHYpe3ZhciB0PXtleHRuYW1lOlwib2NzcE5vQ2hlY2tcIn07aWYodil7dC5jcml0aWNhbD10cnVlfXJldHVybiB0fTt0aGlzLmdldEV4dEFkb2JlVGltZVN0YW1wPWZ1bmN0aW9uKHcseil7aWYodz09PXVuZGVmaW5lZCYmej09PXVuZGVmaW5lZCl7dmFyIHk9dGhpcy5nZXRFeHRJbmZvKFwiYWRvYmVUaW1lU3RhbXBcIik7aWYoeT09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZH13PWIodGhpcy5oZXgseS52aWR4KTt6PXkuY3JpdGljYWx9dmFyIHQ9e2V4dG5hbWU6XCJhZG9iZVRpbWVTdGFtcFwifTtpZih6KXt0LmNyaXRpY2FsPXRydWV9dmFyIHY9bih3LDApO2lmKHYubGVuZ3RoPjEpe3ZhciBBPWIodyx2WzFdKTt2YXIgdT10aGlzLmdldEdlbmVyYWxOYW1lKEEpO2lmKHUudXJpIT11bmRlZmluZWQpe3QudXJpPXUudXJpfX1pZih2Lmxlbmd0aD4yKXt2YXIgeD1iKHcsdlsyXSk7aWYoeD09XCIwMTAxZmZcIil7dC5yZXFhdXRoPXRydWV9aWYoeD09XCIwMTAxMDBcIil7dC5yZXFhdXRoPWZhbHNlfX1yZXR1cm4gdH07dGhpcy5nZXRYNTAwTmFtZVJ1bGU9ZnVuY3Rpb24odCl7dmFyIEE9dHJ1ZTt2YXIgRT10cnVlO3ZhciBEPWZhbHNlO3ZhciB1PVwiXCI7dmFyIHg9XCJcIjt2YXIgRz1udWxsO3ZhciBCPVtdO2Zvcih2YXIgdz0wO3c8dC5sZW5ndGg7dysrKXt2YXIgeT10W3ddO2Zvcih2YXIgdj0wO3Y8eS5sZW5ndGg7disrKXtCLnB1c2goeVt2XSl9fWZvcih2YXIgdz0wO3c8Qi5sZW5ndGg7dysrKXt2YXIgRj1CW3ddO3ZhciBIPUYuZHM7dmFyIEM9Ri52YWx1ZTt2YXIgej1GLnR5cGU7dSs9XCI6XCIrSDtpZihIIT1cInByblwiJiZIIT1cInV0ZjhcIiYmSCE9XCJpYTVcIil7cmV0dXJuXCJtaXhlZFwifWlmKEg9PVwiaWE1XCIpe2lmKHohPVwiQ05cIil7cmV0dXJuXCJtaXhlZFwifWVsc2V7aWYoIUtKVVIubGFuZy5TdHJpbmcuaXNNYWlsKEMpKXtyZXR1cm5cIm1peGVkXCJ9ZWxzZXtjb250aW51ZX19fWlmKHo9PVwiQ1wiKXtpZihIPT1cInByblwiKXtjb250aW51ZX1lbHNle3JldHVyblwibWl4ZWRcIn19eCs9XCI6XCIrSDtpZihHPT1udWxsKXtHPUh9ZWxzZXtpZihHIT09SCl7cmV0dXJuXCJtaXhlZFwifX19aWYoRz09bnVsbCl7cmV0dXJuXCJwcm5cIn1lbHNle3JldHVybiBHfX07dGhpcy5nZXRYNTAwTmFtZT1mdW5jdGlvbih2KXt2YXIgdD10aGlzLmdldFg1MDBOYW1lQXJyYXkodik7dmFyIHU9dGhpcy5kbmFycmF5dG9zdHIodCk7cmV0dXJue2FycmF5OnQsc3RyOnV9fTt0aGlzLmdldFg1MDBOYW1lQXJyYXk9ZnVuY3Rpb24odyl7dmFyIHQ9W107dmFyIHU9bih3LDApO2Zvcih2YXIgdj0wO3Y8dS5sZW5ndGg7disrKXt0LnB1c2godGhpcy5nZXRSRE4oYih3LHVbdl0pKSl9cmV0dXJuIHR9O3RoaXMuZ2V0UkROPWZ1bmN0aW9uKHcpe3ZhciB0PVtdO3ZhciB1PW4odywwKTtmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl7dC5wdXNoKHRoaXMuZ2V0QXR0clR5cGVBbmRWYWx1ZShiKHcsdVt2XSkpKX1yZXR1cm4gdH07dGhpcy5nZXRBdHRyVHlwZUFuZFZhbHVlPWZ1bmN0aW9uKHYpe3ZhciB0PXt0eXBlOm51bGwsdmFsdWU6bnVsbCxkczpudWxsfTt2YXIgdT1uKHYsMCk7dmFyIHk9Yyh2LHVbMF0sW10sXCIwNlwiKTt2YXIgeD1jKHYsdVsxXSxbXSk7dmFyIHc9S0pVUi5hc24xLkFTTjFVdGlsLm9pZEhleFRvSW50KHkpO3QudHlwZT1LSlVSLmFzbjEueDUwOS5PSUQub2lkMmF0eXBlKHcpO3QuZHM9dGhpcy5IRVgyU1RBR1t2LnN1YnN0cih1WzFdLDIpXTtpZih0LmRzIT1cImJtcFwiKXt0LnZhbHVlPWhleHRvdXRmOCh4KX1lbHNle3QudmFsdWU9dWNzMmhleHRvdXRmOCh4KX1yZXR1cm4gdH07dGhpcy5yZWFkQ2VydFBFTT1mdW5jdGlvbih0KXt0aGlzLnJlYWRDZXJ0SGV4KHIodCkpfTt0aGlzLnJlYWRDZXJ0SGV4PWZ1bmN0aW9uKHQpe3RoaXMuaGV4PXQ7dGhpcy5nZXRWZXJzaW9uKCk7dHJ5e2godGhpcy5oZXgsMCxbMCw3XSxcImEzXCIpO3RoaXMucGFyc2VFeHQoKX1jYXRjaCh1KXt9fTt0aGlzLmdldFBhcmFtPWZ1bmN0aW9uKCl7dmFyIHQ9e307dC52ZXJzaW9uPXRoaXMuZ2V0VmVyc2lvbigpO3Quc2VyaWFsPXtoZXg6dGhpcy5nZXRTZXJpYWxOdW1iZXJIZXgoKX07dC5zaWdhbGc9dGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZCgpO3QuaXNzdWVyPXRoaXMuZ2V0SXNzdWVyKCk7dC5ub3RiZWZvcmU9dGhpcy5nZXROb3RCZWZvcmUoKTt0Lm5vdGFmdGVyPXRoaXMuZ2V0Tm90QWZ0ZXIoKTt0LnN1YmplY3Q9dGhpcy5nZXRTdWJqZWN0KCk7dC5zYmpwdWJrZXk9aGV4dG9wZW0odGhpcy5nZXRQdWJsaWNLZXlIZXgoKSxcIlBVQkxJQyBLRVlcIik7aWYodGhpcy5hRXh0SW5mby5sZW5ndGg+MCl7dC5leHQ9dGhpcy5nZXRFeHRQYXJhbUFycmF5KCl9dC5zaWdoZXg9dGhpcy5nZXRTaWduYXR1cmVWYWx1ZUhleCgpO3JldHVybiB0fTt0aGlzLmdldEV4dFBhcmFtQXJyYXk9ZnVuY3Rpb24odSl7aWYodT09dW5kZWZpbmVkKXt2YXIgdz1lKHRoaXMuaGV4LDAsWzAsXCJbM11cIl0pO2lmKHchPS0xKXt1PWwodGhpcy5oZXgsMCxbMCxcIlszXVwiLDBdLFwiMzBcIil9fXZhciB0PVtdO3ZhciB2PW4odSwwKTtmb3IodmFyIHg9MDt4PHYubGVuZ3RoO3grKyl7dmFyIHo9Yih1LHZbeF0pO3ZhciB5PXRoaXMuZ2V0RXh0UGFyYW0oeik7aWYoeSE9bnVsbCl7dC5wdXNoKHkpfX1yZXR1cm4gdH07dGhpcy5nZXRFeHRQYXJhbT1mdW5jdGlvbih1KXt2YXIgQj17fTt2YXIgdz1uKHUsMCk7dmFyIHg9dy5sZW5ndGg7aWYoeCE9MiYmeCE9Myl7dGhyb3cgbmV3IEVycm9yKFwid3JvbmcgbnVtYmVyIGVsZW1lbnRzIGluIEV4dGVuc2lvbjogXCIreCtcIiBcIit1KX12YXIgdj1tKGModSwwLFswXSxcIjA2XCIpKTt2YXIgej1mYWxzZTtpZih4PT0zJiZhKHUsMCxbMV0pPT1cIjAxMDFmZlwiKXt6PXRydWV9dmFyIEE9YSh1LDAsW3gtMSwwXSk7dmFyIHk9dW5kZWZpbmVkO2lmKHY9PVwiMi41LjI5LjE0XCIpe3k9dGhpcy5nZXRFeHRTdWJqZWN0S2V5SWRlbnRpZmllcihBLHopfWVsc2V7aWYodj09XCIyLjUuMjkuMTVcIil7eT10aGlzLmdldEV4dEtleVVzYWdlKEEseil9ZWxzZXtpZih2PT1cIjIuNS4yOS4xN1wiKXt5PXRoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWUoQSx6KX1lbHNle2lmKHY9PVwiMi41LjI5LjE4XCIpe3k9dGhpcy5nZXRFeHRJc3N1ZXJBbHROYW1lKEEseil9ZWxzZXtpZih2PT1cIjIuNS4yOS4xOVwiKXt5PXRoaXMuZ2V0RXh0QmFzaWNDb25zdHJhaW50cyhBLHopfWVsc2V7aWYodj09XCIyLjUuMjkuMzFcIil7eT10aGlzLmdldEV4dENSTERpc3RyaWJ1dGlvblBvaW50cyhBLHopfWVsc2V7aWYodj09XCIyLjUuMjkuMzJcIil7eT10aGlzLmdldEV4dENlcnRpZmljYXRlUG9saWNpZXMoQSx6KX1lbHNle2lmKHY9PVwiMi41LjI5LjM1XCIpe3k9dGhpcy5nZXRFeHRBdXRob3JpdHlLZXlJZGVudGlmaWVyKEEseil9ZWxzZXtpZih2PT1cIjIuNS4yOS4zN1wiKXt5PXRoaXMuZ2V0RXh0RXh0S2V5VXNhZ2UoQSx6KX1lbHNle2lmKHY9PVwiMS4zLjYuMS41LjUuNy4xLjFcIil7eT10aGlzLmdldEV4dEF1dGhvcml0eUluZm9BY2Nlc3MoQSx6KX1lbHNle2lmKHY9PVwiMi41LjI5LjIwXCIpe3k9dGhpcy5nZXRFeHRDUkxOdW1iZXIoQSx6KX1lbHNle2lmKHY9PVwiMi41LjI5LjIxXCIpe3k9dGhpcy5nZXRFeHRDUkxSZWFzb24oQSx6KX1lbHNle2lmKHY9PVwiMS4zLjYuMS41LjUuNy40OC4xLjJcIil7eT10aGlzLmdldEV4dE9jc3BOb25jZShBLHopfWVsc2V7aWYodj09XCIxLjMuNi4xLjUuNS43LjQ4LjEuNVwiKXt5PXRoaXMuZ2V0RXh0T2NzcE5vQ2hlY2soQSx6KX1lbHNle2lmKHY9PVwiMS4yLjg0MC4xMTM1ODMuMS4xLjkuMVwiKXt5PXRoaXMuZ2V0RXh0QWRvYmVUaW1lU3RhbXAoQSx6KX19fX19fX19fX19fX19fWlmKHkhPXVuZGVmaW5lZCl7cmV0dXJuIHl9dmFyIHQ9e2V4dG5hbWU6dixleHRuOkF9O2lmKHope3QuY3JpdGljYWw9dHJ1ZX1yZXR1cm4gdH07dGhpcy5maW5kRXh0PWZ1bmN0aW9uKHUsdil7Zm9yKHZhciB0PTA7dDx1Lmxlbmd0aDt0Kyspe2lmKHVbdF0uZXh0bmFtZT09dil7cmV0dXJuIHVbdF19fXJldHVybiBudWxsfTt0aGlzLnVwZGF0ZUV4dENEUEZ1bGxVUkk9ZnVuY3Rpb24oeCx0KXt2YXIgdz10aGlzLmZpbmRFeHQoeCxcImNSTERpc3RyaWJ1dGlvblBvaW50c1wiKTtpZih3PT1udWxsKXtyZXR1cm59aWYody5hcnJheT09dW5kZWZpbmVkKXtyZXR1cm59dmFyIHo9dy5hcnJheTtmb3IodmFyIHY9MDt2PHoubGVuZ3RoO3YrKyl7aWYoelt2XS5kcG5hbWU9PXVuZGVmaW5lZCl7Y29udGludWV9aWYoelt2XS5kcG5hbWUuZnVsbD09dW5kZWZpbmVkKXtjb250aW51ZX12YXIgQT16W3ZdLmRwbmFtZS5mdWxsO2Zvcih2YXIgdT0wO3U8QS5sZW5ndGg7dSsrKXt2YXIgeT1BW3ZdO2lmKHkudXJpPT11bmRlZmluZWQpe2NvbnRpbnVlfXkudXJpPXR9fX07dGhpcy51cGRhdGVFeHRBSUFPQ1NQPWZ1bmN0aW9uKHgsdSl7dmFyIHc9dGhpcy5maW5kRXh0KHgsXCJhdXRob3JpdHlJbmZvQWNjZXNzXCIpO2lmKHc9PW51bGwpe3JldHVybn1pZih3LmFycmF5PT11bmRlZmluZWQpe3JldHVybn12YXIgdD13LmFycmF5O2Zvcih2YXIgdj0wO3Y8dC5sZW5ndGg7disrKXtpZih0W3ZdLm9jc3AhPXVuZGVmaW5lZCl7dFt2XS5vY3NwPXV9fX07dGhpcy51cGRhdGVFeHRBSUFDQUlzc3Vlcj1mdW5jdGlvbih4LHUpe3ZhciB3PXRoaXMuZmluZEV4dCh4LFwiYXV0aG9yaXR5SW5mb0FjY2Vzc1wiKTtpZih3PT1udWxsKXtyZXR1cm59aWYody5hcnJheT09dW5kZWZpbmVkKXtyZXR1cm59dmFyIHQ9dy5hcnJheTtmb3IodmFyIHY9MDt2PHQubGVuZ3RoO3YrKyl7aWYodFt2XS5jYWlzc3VlciE9dW5kZWZpbmVkKXt0W3ZdLmNhaXNzdWVyPXV9fX07dGhpcy5kbmFycmF5dG9zdHI9ZnVuY3Rpb24odil7ZnVuY3Rpb24gdCh3KXtyZXR1cm4gdy5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIHUoeSkucmVwbGFjZSgvXFwrLyxcIlxcXFwrXCIpfSkuam9pbihcIitcIil9ZnVuY3Rpb24gdSh3KXtyZXR1cm4gdy50eXBlK1wiPVwiK3cudmFsdWV9cmV0dXJuXCIvXCIrdi5tYXAoZnVuY3Rpb24odyl7cmV0dXJuIHQodykucmVwbGFjZSgvXFwvLyxcIlxcXFwvXCIpfSkuam9pbihcIi9cIil9O3RoaXMuZ2V0SW5mbz1mdW5jdGlvbigpe3ZhciB1PWZ1bmN0aW9uKE0pe3ZhciBMPUpTT04uc3RyaW5naWZ5KE0uYXJyYXkpLnJlcGxhY2UoL1tcXFtcXF1cXHtcXH1cXFwiXS9nLFwiXCIpO3JldHVybiBMfTt2YXIgQT1mdW5jdGlvbihSKXt2YXIgUD1cIlwiO3ZhciBMPVIuYXJyYXk7Zm9yKHZhciBPPTA7TzxMLmxlbmd0aDtPKyspe3ZhciBRPUxbT107UCs9XCIgICAgcG9saWN5IG9pZDogXCIrUS5wb2xpY3lvaWQrXCJcXG5cIjtpZihRLmFycmF5PT09dW5kZWZpbmVkKXtjb250aW51ZX1mb3IodmFyIE49MDtOPFEuYXJyYXkubGVuZ3RoO04rKyl7dmFyIE09US5hcnJheVtOXTtpZihNLmNwcyE9PXVuZGVmaW5lZCl7UCs9XCIgICAgY3BzOiBcIitNLmNwcytcIlxcblwifX19cmV0dXJuIFB9O3ZhciBEPWZ1bmN0aW9uKFApe3ZhciBPPVwiXCI7dmFyIEw9UC5hcnJheTtmb3IodmFyIE49MDtOPEwubGVuZ3RoO04rKyl7dmFyIFE9TFtOXTt0cnl7aWYoUS5kcG5hbWUuZnVsbFswXS51cmkhPT11bmRlZmluZWQpe08rPVwiICAgIFwiK1EuZHBuYW1lLmZ1bGxbMF0udXJpK1wiXFxuXCJ9fWNhdGNoKE0pe310cnl7aWYoUS5kbmFtZS5mdWxsWzBdLmRuLmhleCE9PXVuZGVmaW5lZCl7Tys9XCIgICAgXCIrWDUwOS5oZXgyZG4oUS5kcG5hbWUuZnVsbFswXS5kbi5oZXgpK1wiXFxuXCJ9fWNhdGNoKE0pe319cmV0dXJuIE99O3ZhciBCPWZ1bmN0aW9uKFApe3ZhciBPPVwiXCI7dmFyIEw9UC5hcnJheTtmb3IodmFyIE09MDtNPEwubGVuZ3RoO00rKyl7dmFyIE49TFtNXTtpZihOLmNhaXNzdWVyIT09dW5kZWZpbmVkKXtPKz1cIiAgICBjYWlzc3VlcjogXCIrTi5jYWlzc3VlcitcIlxcblwifWlmKE4ub2NzcCE9PXVuZGVmaW5lZCl7Tys9XCIgICAgb2NzcDogXCIrTi5vY3NwK1wiXFxuXCJ9fXJldHVybiBPfTt2YXIgdj1YNTA5O3ZhciBGLEUsSztGPVwiQmFzaWMgRmllbGRzXFxuXCI7Ris9XCIgIHNlcmlhbCBudW1iZXI6IFwiK3RoaXMuZ2V0U2VyaWFsTnVtYmVySGV4KCkrXCJcXG5cIjtGKz1cIiAgc2lnbmF0dXJlIGFsZ29yaXRobTogXCIrdGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZCgpK1wiXFxuXCI7Ris9XCIgIGlzc3VlcjogXCIrdGhpcy5nZXRJc3N1ZXJTdHJpbmcoKStcIlxcblwiO0YrPVwiICBub3RCZWZvcmU6IFwiK3RoaXMuZ2V0Tm90QmVmb3JlKCkrXCJcXG5cIjtGKz1cIiAgbm90QWZ0ZXI6IFwiK3RoaXMuZ2V0Tm90QWZ0ZXIoKStcIlxcblwiO0YrPVwiICBzdWJqZWN0OiBcIit0aGlzLmdldFN1YmplY3RTdHJpbmcoKStcIlxcblwiO0YrPVwiICBzdWJqZWN0IHB1YmxpYyBrZXkgaW5mbzogXFxuXCI7RT10aGlzLmdldFB1YmxpY0tleSgpO0YrPVwiICAgIGtleSBhbGdvcml0aG06IFwiK0UudHlwZStcIlxcblwiO2lmKEUudHlwZT09PVwiUlNBXCIpe0YrPVwiICAgIG49XCIraGV4dG9wb3NoZXgoRS5uLnRvU3RyaW5nKDE2KSkuc3Vic3RyKDAsMTYpK1wiLi4uXFxuXCI7Ris9XCIgICAgZT1cIitoZXh0b3Bvc2hleChFLmUudG9TdHJpbmcoMTYpKStcIlxcblwifUs9dGhpcy5hRXh0SW5mbztpZihLIT09dW5kZWZpbmVkJiZLIT09bnVsbCl7Ris9XCJYNTA5djMgRXh0ZW5zaW9uczpcXG5cIjtmb3IodmFyIEg9MDtIPEsubGVuZ3RoO0grKyl7dmFyIEo9S1tIXTt2YXIgdD1LSlVSLmFzbjEueDUwOS5PSUQub2lkMm5hbWUoSi5vaWQpO2lmKHQ9PT1cIlwiKXt0PUoub2lkfXZhciBHPVwiXCI7aWYoSi5jcml0aWNhbD09PXRydWUpe0c9XCJDUklUSUNBTFwifUYrPVwiICBcIit0K1wiIFwiK0crXCI6XFxuXCI7aWYodD09PVwiYmFzaWNDb25zdHJhaW50c1wiKXt2YXIgdz10aGlzLmdldEV4dEJhc2ljQ29uc3RyYWludHMoKTtpZih3LmNBPT09dW5kZWZpbmVkKXtGKz1cIiAgICB7fVxcblwifWVsc2V7Ris9XCIgICAgY0E9dHJ1ZVwiO2lmKHcucGF0aExlbiE9PXVuZGVmaW5lZCl7Ris9XCIsIHBhdGhMZW49XCIrdy5wYXRoTGVufUYrPVwiXFxuXCJ9fWVsc2V7aWYodD09PVwia2V5VXNhZ2VcIil7Ris9XCIgICAgXCIrdGhpcy5nZXRFeHRLZXlVc2FnZVN0cmluZygpK1wiXFxuXCJ9ZWxzZXtpZih0PT09XCJzdWJqZWN0S2V5SWRlbnRpZmllclwiKXtGKz1cIiAgICBcIit0aGlzLmdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyKCkua2lkLmhleCtcIlxcblwifWVsc2V7aWYodD09PVwiYXV0aG9yaXR5S2V5SWRlbnRpZmllclwiKXt2YXIgeD10aGlzLmdldEV4dEF1dGhvcml0eUtleUlkZW50aWZpZXIoKTtpZih4LmtpZCE9PXVuZGVmaW5lZCl7Ris9XCIgICAga2lkPVwiK3gua2lkLmhleCtcIlxcblwifX1lbHNle2lmKHQ9PT1cImV4dEtleVVzYWdlXCIpe3ZhciBJPXRoaXMuZ2V0RXh0RXh0S2V5VXNhZ2UoKS5hcnJheTtGKz1cIiAgICBcIitJLmpvaW4oXCIsIFwiKStcIlxcblwifWVsc2V7aWYodD09PVwic3ViamVjdEFsdE5hbWVcIil7dmFyIHk9dSh0aGlzLmdldEV4dFN1YmplY3RBbHROYW1lKCkpO0YrPVwiICAgIFwiK3krXCJcXG5cIn1lbHNle2lmKHQ9PT1cImNSTERpc3RyaWJ1dGlvblBvaW50c1wiKXt2YXIgQz10aGlzLmdldEV4dENSTERpc3RyaWJ1dGlvblBvaW50cygpO0YrPUQoQyl9ZWxzZXtpZih0PT09XCJhdXRob3JpdHlJbmZvQWNjZXNzXCIpe3ZhciB6PXRoaXMuZ2V0RXh0QXV0aG9yaXR5SW5mb0FjY2VzcygpO0YrPUIoeil9ZWxzZXtpZih0PT09XCJjZXJ0aWZpY2F0ZVBvbGljaWVzXCIpe0YrPUEodGhpcy5nZXRFeHRDZXJ0aWZpY2F0ZVBvbGljaWVzKCkpfX19fX19fX19fX1GKz1cInNpZ25hdHVyZSBhbGdvcml0aG06IFwiK3RoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtTmFtZSgpK1wiXFxuXCI7Ris9XCJzaWduYXR1cmU6IFwiK3RoaXMuZ2V0U2lnbmF0dXJlVmFsdWVIZXgoKS5zdWJzdHIoMCwxNikrXCIuLi5cXG5cIjtyZXR1cm4gRn07aWYodHlwZW9mIHE9PVwic3RyaW5nXCIpe2lmKHEuaW5kZXhPZihcIi0tLS0tQkVHSU5cIikhPS0xKXt0aGlzLnJlYWRDZXJ0UEVNKHEpfWVsc2V7aWYoS0pVUi5sYW5nLlN0cmluZy5pc0hleChxKSl7dGhpcy5yZWFkQ2VydEhleChxKX19fX1YNTA5LmhleDJkbj1mdW5jdGlvbihlLGIpe2lmKGI9PT11bmRlZmluZWQpe2I9MH12YXIgYT1uZXcgWDUwOSgpO3ZhciBjPUFTTjFIRVguZ2V0VExWKGUsYik7dmFyIGQ9YS5nZXRYNTAwTmFtZShlKTtyZXR1cm4gZC5zdHJ9O1g1MDkuaGV4MnJkbj1mdW5jdGlvbihmLGIpe2lmKGI9PT11bmRlZmluZWQpe2I9MH1pZihmLnN1YnN0cihiLDIpIT09XCIzMVwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUkROXCIpfXZhciBjPW5ldyBBcnJheSgpO3ZhciBkPUFTTjFIRVguZ2V0Q2hpbGRJZHgoZixiKTtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKyl7Yy5wdXNoKFg1MDkuaGV4MmF0dHJUeXBlVmFsdWUoZixkW2VdKSl9Yz1jLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKFwiK1wiLFwiXFxcXCtcIil9KTtyZXR1cm4gYy5qb2luKFwiK1wiKX07WDUwOS5oZXgyYXR0clR5cGVWYWx1ZT1mdW5jdGlvbihkLGkpe3ZhciBqPUFTTjFIRVg7dmFyIGg9ai5nZXRWO2lmKGk9PT11bmRlZmluZWQpe2k9MH1pZihkLnN1YnN0cihpLDIpIT09XCIzMFwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgYXR0cmlidXRlIHR5cGUgYW5kIHZhbHVlXCIpfXZhciBnPWouZ2V0Q2hpbGRJZHgoZCxpKTtpZihnLmxlbmd0aCE9PTJ8fGQuc3Vic3RyKGdbMF0sMikhPT1cIjA2XCIpe1wibWFsZm9ybWVkIGF0dHJpYnV0ZSB0eXBlIGFuZCB2YWx1ZVwifXZhciBiPWgoZCxnWzBdKTt2YXIgZj1LSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQoYik7dmFyIGU9S0pVUi5hc24xLng1MDkuT0lELm9pZDJhdHlwZShmKTt2YXIgYT1oKGQsZ1sxXSk7dmFyIGM9aGV4dG9yc3RyKGEpO3JldHVybiBlK1wiPVwiK2N9O1g1MDkuZ2V0UHVibGljS2V5RnJvbUNlcnRIZXg9ZnVuY3Rpb24oYil7dmFyIGE9bmV3IFg1MDkoKTthLnJlYWRDZXJ0SGV4KGIpO3JldHVybiBhLmdldFB1YmxpY0tleSgpfTtYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0UEVNPWZ1bmN0aW9uKGIpe3ZhciBhPW5ldyBYNTA5KCk7YS5yZWFkQ2VydFBFTShiKTtyZXR1cm4gYS5nZXRQdWJsaWNLZXkoKX07WDUwOS5nZXRQdWJsaWNLZXlJbmZvUHJvcE9mQ2VydFBFTT1mdW5jdGlvbihjKXt2YXIgZT1BU04xSEVYO3ZhciBnPWUuZ2V0VmJ5TGlzdDt2YXIgYj17fTt2YXIgYSxmLGQ7Yi5hbGdwYXJhbT1udWxsO2E9bmV3IFg1MDkoKTthLnJlYWRDZXJ0UEVNKGMpO2Y9YS5nZXRQdWJsaWNLZXlIZXgoKTtiLmtleWhleD1nKGYsMCxbMV0sXCIwM1wiKS5zdWJzdHIoMik7Yi5hbGdvaWQ9ZyhmLDAsWzAsMF0sXCIwNlwiKTtpZihiLmFsZ29pZD09PVwiMmE4NjQ4Y2UzZDAyMDFcIil7Yi5hbGdwYXJhbT1nKGYsMCxbMCwxXSxcIjA2XCIpfXJldHVybiBifTtYNTA5LktFWVVTQUdFX05BTUU9W1wiZGlnaXRhbFNpZ25hdHVyZVwiLFwibm9uUmVwdWRpYXRpb25cIixcImtleUVuY2lwaGVybWVudFwiLFwiZGF0YUVuY2lwaGVybWVudFwiLFwia2V5QWdyZWVtZW50XCIsXCJrZXlDZXJ0U2lnblwiLFwiY1JMU2lnblwiLFwiZW5jaXBoZXJPbmx5XCIsXCJkZWNpcGhlck9ubHlcIl07XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuandzPT1cInVuZGVmaW5lZFwifHwhS0pVUi5qd3Mpe0tKVVIuandzPXt9fUtKVVIuandzLkpXUz1mdW5jdGlvbigpe3ZhciBiPUtKVVIsYT1iLmp3cy5KV1MsYz1hLmlzU2FmZUpTT05TdHJpbmc7dGhpcy5wYXJzZUpXUz1mdW5jdGlvbihnLGope2lmKCh0aGlzLnBhcnNlZEpXUyE9PXVuZGVmaW5lZCkmJihqfHwodGhpcy5wYXJzZWRKV1Muc2lndmFsSCE9PXVuZGVmaW5lZCkpKXtyZXR1cm59dmFyIGk9Zy5tYXRjaCgvXihbXi5dKylcXC4oW14uXSspXFwuKFteLl0rKSQvKTtpZihpPT1udWxsKXt0aHJvd1wiSldTIHNpZ25hdHVyZSBpcyBub3QgYSBmb3JtIG9mICdIZWFkLlBheWxvYWQuU2lnVmFsdWUnLlwifXZhciBrPWlbMV07dmFyIGU9aVsyXTt2YXIgbD1pWzNdO3ZhciBuPWsrXCIuXCIrZTt0aGlzLnBhcnNlZEpXUz17fTt0aGlzLnBhcnNlZEpXUy5oZWFkQjY0VT1rO3RoaXMucGFyc2VkSldTLnBheWxvYWRCNjRVPWU7dGhpcy5wYXJzZWRKV1Muc2lndmFsQjY0VT1sO3RoaXMucGFyc2VkSldTLnNpPW47aWYoIWope3ZhciBoPWI2NHV0b2hleChsKTt2YXIgZj1wYXJzZUJpZ0ludChoLDE2KTt0aGlzLnBhcnNlZEpXUy5zaWd2YWxIPWg7dGhpcy5wYXJzZWRKV1Muc2lndmFsQkk9Zn12YXIgZD1iNjR1dG91dGY4KGspO3ZhciBtPWI2NHV0b3V0ZjgoZSk7dGhpcy5wYXJzZWRKV1MuaGVhZFM9ZDt0aGlzLnBhcnNlZEpXUy5wYXlsb2FkUz1tO2lmKCFjKGQsdGhpcy5wYXJzZWRKV1MsXCJoZWFkUFwiKSl7dGhyb3dcIm1hbGZvcm1lZCBKU09OIHN0cmluZyBmb3IgSldTIEhlYWQ6IFwiK2R9fX07S0pVUi5qd3MuSldTLnNpZ249ZnVuY3Rpb24oaix3LHosQSxhKXt2YXIgeD1LSlVSLG49eC5qd3Mscj1uLkpXUyxoPXIucmVhZFNhZmVKU09OU3RyaW5nLHE9ci5pc1NhZmVKU09OU3RyaW5nLGQ9eC5jcnlwdG8sbD1kLkVDRFNBLHA9ZC5NYWMsYz1kLlNpZ25hdHVyZSx1PUpTT047dmFyIHQsayxvO2lmKHR5cGVvZiB3IT1cInN0cmluZ1wiJiZ0eXBlb2YgdyE9XCJvYmplY3RcIil7dGhyb3dcInNwSGVhZGVyIG11c3QgYmUgSlNPTiBzdHJpbmcgb3Igb2JqZWN0OiBcIit3fWlmKHR5cGVvZiB3PT1cIm9iamVjdFwiKXtrPXc7dD11LnN0cmluZ2lmeShrKX1pZih0eXBlb2Ygdz09XCJzdHJpbmdcIil7dD13O2lmKCFxKHQpKXt0aHJvd1wiSldTIEhlYWQgaXMgbm90IHNhZmUgSlNPTiBzdHJpbmc6IFwiK3R9az1oKHQpfW89ejtpZih0eXBlb2Ygej09XCJvYmplY3RcIil7bz11LnN0cmluZ2lmeSh6KX1pZigoaj09XCJcInx8aj09bnVsbCkmJmsuYWxnIT09dW5kZWZpbmVkKXtqPWsuYWxnfWlmKChqIT1cIlwiJiZqIT1udWxsKSYmay5hbGc9PT11bmRlZmluZWQpe2suYWxnPWo7dD11LnN0cmluZ2lmeShrKX1pZihqIT09ay5hbGcpe3Rocm93XCJhbGcgYW5kIHNIZWFkZXIuYWxnIGRvZXNuJ3QgbWF0Y2g6IFwiK2orXCIhPVwiK2suYWxnfXZhciBzPW51bGw7aWYoci5qd3NhbGcyc2lnYWxnW2pdPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgYWxnIG5hbWU6IFwiK2p9ZWxzZXtzPXIuandzYWxnMnNpZ2FsZ1tqXX12YXIgZT11dGY4dG9iNjR1KHQpO3ZhciBtPXV0Zjh0b2I2NHUobyk7dmFyIGI9ZStcIi5cIittO3ZhciB5PVwiXCI7aWYocy5zdWJzdHIoMCw0KT09XCJIbWFjXCIpe2lmKEE9PT11bmRlZmluZWQpe3Rocm93XCJtYWMga2V5IHNoYWxsIGJlIHNwZWNpZmllZCBmb3IgSFMqIGFsZ1wifXZhciBpPW5ldyBwKHthbGc6cyxwcm92OlwiY3J5cHRvanNcIixwYXNzOkF9KTtpLnVwZGF0ZVN0cmluZyhiKTt5PWkuZG9GaW5hbCgpfWVsc2V7aWYocy5pbmRleE9mKFwid2l0aEVDRFNBXCIpIT0tMSl7dmFyIGY9bmV3IGMoe2FsZzpzfSk7Zi5pbml0KEEsYSk7Zi51cGRhdGVTdHJpbmcoYik7dmFyIGc9Zi5zaWduKCk7eT1LSlVSLmNyeXB0by5FQ0RTQS5hc24xU2lnVG9Db25jYXRTaWcoZyl9ZWxzZXtpZihzIT1cIm5vbmVcIil7dmFyIGY9bmV3IGMoe2FsZzpzfSk7Zi5pbml0KEEsYSk7Zi51cGRhdGVTdHJpbmcoYik7eT1mLnNpZ24oKX19fXZhciB2PWhleHRvYjY0dSh5KTtyZXR1cm4gYitcIi5cIit2fTtLSlVSLmp3cy5KV1MudmVyaWZ5PWZ1bmN0aW9uKHcsQixuKXt2YXIgeD1LSlVSLHE9eC5qd3MsdD1xLkpXUyxpPXQucmVhZFNhZmVKU09OU3RyaW5nLGU9eC5jcnlwdG8scD1lLkVDRFNBLHM9ZS5NYWMsZD1lLlNpZ25hdHVyZSxtO2lmKHR5cGVvZiBSU0FLZXkhPT11bmRlZmluZWQpe209UlNBS2V5fXZhciB5PXcuc3BsaXQoXCIuXCIpO2lmKHkubGVuZ3RoIT09Myl7cmV0dXJuIGZhbHNlfXZhciBmPXlbMF07dmFyIHI9eVsxXTt2YXIgYz1mK1wiLlwiK3I7dmFyIEE9YjY0dXRvaGV4KHlbMl0pO3ZhciBsPWkoYjY0dXRvdXRmOCh5WzBdKSk7dmFyIGs9bnVsbDt2YXIgej1udWxsO2lmKGwuYWxnPT09dW5kZWZpbmVkKXt0aHJvd1wiYWxnb3JpdGhtIG5vdCBzcGVjaWZpZWQgaW4gaGVhZGVyXCJ9ZWxzZXtrPWwuYWxnO3o9ay5zdWJzdHIoMCwyKX1pZihuIT1udWxsJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobik9PT1cIltvYmplY3QgQXJyYXldXCImJm4ubGVuZ3RoPjApe3ZhciBiPVwiOlwiK24uam9pbihcIjpcIikrXCI6XCI7aWYoYi5pbmRleE9mKFwiOlwiK2srXCI6XCIpPT0tMSl7dGhyb3dcImFsZ29yaXRobSAnXCIraytcIicgbm90IGFjY2VwdGVkIGluIHRoZSBsaXN0XCJ9fWlmKGshPVwibm9uZVwiJiZCPT09bnVsbCl7dGhyb3dcImtleSBzaGFsbCBiZSBzcGVjaWZpZWQgdG8gdmVyaWZ5LlwifWlmKHR5cGVvZiBCPT1cInN0cmluZ1wiJiZCLmluZGV4T2YoXCItLS0tLUJFR0lOIFwiKSE9LTEpe0I9S0VZVVRJTC5nZXRLZXkoQil9aWYoej09XCJSU1wifHx6PT1cIlBTXCIpe2lmKCEoQiBpbnN0YW5jZW9mIG0pKXt0aHJvd1wia2V5IHNoYWxsIGJlIGEgUlNBS2V5IG9iaiBmb3IgUlMqIGFuZCBQUyogYWxnc1wifX1pZih6PT1cIkVTXCIpe2lmKCEoQiBpbnN0YW5jZW9mIHApKXt0aHJvd1wia2V5IHNoYWxsIGJlIGEgRUNEU0Egb2JqIGZvciBFUyogYWxnc1wifX1pZihrPT1cIm5vbmVcIil7fXZhciB1PW51bGw7aWYodC5qd3NhbGcyc2lnYWxnW2wuYWxnXT09PXVuZGVmaW5lZCl7dGhyb3dcInVuc3VwcG9ydGVkIGFsZyBuYW1lOiBcIitrfWVsc2V7dT10Lmp3c2FsZzJzaWdhbGdba119aWYodT09XCJub25lXCIpe3Rocm93XCJub3Qgc3VwcG9ydGVkXCJ9ZWxzZXtpZih1LnN1YnN0cigwLDQpPT1cIkhtYWNcIil7dmFyIG89bnVsbDtpZihCPT09dW5kZWZpbmVkKXt0aHJvd1wiaGV4YWRlY2ltYWwga2V5IHNoYWxsIGJlIHNwZWNpZmllZCBmb3IgSE1BQ1wifXZhciBqPW5ldyBzKHthbGc6dSxwYXNzOkJ9KTtqLnVwZGF0ZVN0cmluZyhjKTtvPWouZG9GaW5hbCgpO3JldHVybiBBPT1vfWVsc2V7aWYodS5pbmRleE9mKFwid2l0aEVDRFNBXCIpIT0tMSl7dmFyIGg9bnVsbDt0cnl7aD1wLmNvbmNhdFNpZ1RvQVNOMVNpZyhBKX1jYXRjaCh2KXtyZXR1cm4gZmFsc2V9dmFyIGc9bmV3IGQoe2FsZzp1fSk7Zy5pbml0KEIpO2cudXBkYXRlU3RyaW5nKGMpO3JldHVybiBnLnZlcmlmeShoKX1lbHNle3ZhciBnPW5ldyBkKHthbGc6dX0pO2cuaW5pdChCKTtnLnVwZGF0ZVN0cmluZyhjKTtyZXR1cm4gZy52ZXJpZnkoQSl9fX19O0tKVVIuandzLkpXUy5wYXJzZT1mdW5jdGlvbihnKXt2YXIgYz1nLnNwbGl0KFwiLlwiKTt2YXIgYj17fTt2YXIgZixlLGQ7aWYoYy5sZW5ndGghPTImJmMubGVuZ3RoIT0zKXt0aHJvd1wibWFsZm9ybWVkIHNKV1M6IHdyb25nIG51bWJlciBvZiAnLicgc3BsaXR0ZWQgZWxlbWVudHNcIn1mPWNbMF07ZT1jWzFdO2lmKGMubGVuZ3RoPT0zKXtkPWNbMl19Yi5oZWFkZXJPYmo9S0pVUi5qd3MuSldTLnJlYWRTYWZlSlNPTlN0cmluZyhiNjR1dG91dGY4KGYpKTtiLnBheWxvYWRPYmo9S0pVUi5qd3MuSldTLnJlYWRTYWZlSlNPTlN0cmluZyhiNjR1dG91dGY4KGUpKTtiLmhlYWRlclBQPUpTT04uc3RyaW5naWZ5KGIuaGVhZGVyT2JqLG51bGwsXCIgIFwiKTtpZihiLnBheWxvYWRPYmo9PW51bGwpe2IucGF5bG9hZFBQPWI2NHV0b3V0ZjgoZSl9ZWxzZXtiLnBheWxvYWRQUD1KU09OLnN0cmluZ2lmeShiLnBheWxvYWRPYmosbnVsbCxcIiAgXCIpfWlmKGQhPT11bmRlZmluZWQpe2Iuc2lnSGV4PWI2NHV0b2hleChkKX1yZXR1cm4gYn07S0pVUi5qd3MuSldTLnZlcmlmeUpXVD1mdW5jdGlvbihlLGwscil7dmFyIGQ9S0pVUixqPWQuandzLG89ai5KV1Msbj1vLnJlYWRTYWZlSlNPTlN0cmluZyxwPW8uaW5BcnJheSxmPW8uaW5jbHVkZWRBcnJheTt2YXIgaz1lLnNwbGl0KFwiLlwiKTt2YXIgYz1rWzBdO3ZhciBpPWtbMV07dmFyIHE9YytcIi5cIitpO3ZhciBtPWI2NHV0b2hleChrWzJdKTt2YXIgaD1uKGI2NHV0b3V0ZjgoYykpO3ZhciBnPW4oYjY0dXRvdXRmOChpKSk7aWYoaC5hbGc9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZX1pZihyLmFsZz09PXVuZGVmaW5lZCl7dGhyb3dcImFjY2VwdEZpZWxkLmFsZyBzaGFsbCBiZSBzcGVjaWZpZWRcIn1pZighcChoLmFsZyxyLmFsZykpe3JldHVybiBmYWxzZX1pZihnLmlzcyE9PXVuZGVmaW5lZCYmdHlwZW9mIHIuaXNzPT09XCJvYmplY3RcIil7aWYoIXAoZy5pc3Msci5pc3MpKXtyZXR1cm4gZmFsc2V9fWlmKGcuc3ViIT09dW5kZWZpbmVkJiZ0eXBlb2Ygci5zdWI9PT1cIm9iamVjdFwiKXtpZighcChnLnN1YixyLnN1Yikpe3JldHVybiBmYWxzZX19aWYoZy5hdWQhPT11bmRlZmluZWQmJnR5cGVvZiByLmF1ZD09PVwib2JqZWN0XCIpe2lmKHR5cGVvZiBnLmF1ZD09XCJzdHJpbmdcIil7aWYoIXAoZy5hdWQsci5hdWQpKXtyZXR1cm4gZmFsc2V9fWVsc2V7aWYodHlwZW9mIGcuYXVkPT1cIm9iamVjdFwiKXtpZighZihnLmF1ZCxyLmF1ZCkpe3JldHVybiBmYWxzZX19fX12YXIgYj1qLkludERhdGUuZ2V0Tm93KCk7aWYoci52ZXJpZnlBdCE9PXVuZGVmaW5lZCYmdHlwZW9mIHIudmVyaWZ5QXQ9PT1cIm51bWJlclwiKXtiPXIudmVyaWZ5QXR9aWYoci5ncmFjZVBlcmlvZD09PXVuZGVmaW5lZHx8dHlwZW9mIHIuZ3JhY2VQZXJpb2QhPT1cIm51bWJlclwiKXtyLmdyYWNlUGVyaW9kPTB9aWYoZy5leHAhPT11bmRlZmluZWQmJnR5cGVvZiBnLmV4cD09XCJudW1iZXJcIil7aWYoZy5leHArci5ncmFjZVBlcmlvZDxiKXtyZXR1cm4gZmFsc2V9fWlmKGcubmJmIT09dW5kZWZpbmVkJiZ0eXBlb2YgZy5uYmY9PVwibnVtYmVyXCIpe2lmKGI8Zy5uYmYtci5ncmFjZVBlcmlvZCl7cmV0dXJuIGZhbHNlfX1pZihnLmlhdCE9PXVuZGVmaW5lZCYmdHlwZW9mIGcuaWF0PT1cIm51bWJlclwiKXtpZihiPGcuaWF0LXIuZ3JhY2VQZXJpb2Qpe3JldHVybiBmYWxzZX19aWYoZy5qdGkhPT11bmRlZmluZWQmJnIuanRpIT09dW5kZWZpbmVkKXtpZihnLmp0aSE9PXIuanRpKXtyZXR1cm4gZmFsc2V9fWlmKCFvLnZlcmlmeShlLGwsci5hbGcpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9O0tKVVIuandzLkpXUy5pbmNsdWRlZEFycmF5PWZ1bmN0aW9uKGIsYSl7dmFyIGM9S0pVUi5qd3MuSldTLmluQXJyYXk7aWYoYj09PW51bGwpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYiE9PVwib2JqZWN0XCIpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYi5sZW5ndGghPT1cIm51bWJlclwiKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspe2lmKCFjKGJbZF0sYSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9O0tKVVIuandzLkpXUy5pbkFycmF5PWZ1bmN0aW9uKGQsYil7aWYoYj09PW51bGwpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYiE9PVwib2JqZWN0XCIpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYi5sZW5ndGghPT1cIm51bWJlclwiKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe2lmKGJbY109PWQpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9O0tKVVIuandzLkpXUy5qd3NhbGcyc2lnYWxnPXtIUzI1NjpcIkhtYWNTSEEyNTZcIixIUzM4NDpcIkhtYWNTSEEzODRcIixIUzUxMjpcIkhtYWNTSEE1MTJcIixSUzI1NjpcIlNIQTI1NndpdGhSU0FcIixSUzM4NDpcIlNIQTM4NHdpdGhSU0FcIixSUzUxMjpcIlNIQTUxMndpdGhSU0FcIixFUzI1NjpcIlNIQTI1NndpdGhFQ0RTQVwiLEVTMzg0OlwiU0hBMzg0d2l0aEVDRFNBXCIsUFMyNTY6XCJTSEEyNTZ3aXRoUlNBYW5kTUdGMVwiLFBTMzg0OlwiU0hBMzg0d2l0aFJTQWFuZE1HRjFcIixQUzUxMjpcIlNIQTUxMndpdGhSU0FhbmRNR0YxXCIsbm9uZTpcIm5vbmVcIix9O0tKVVIuandzLkpXUy5pc1NhZmVKU09OU3RyaW5nPWZ1bmN0aW9uKGMsYixkKXt2YXIgZT1udWxsO3RyeXtlPWpzb25QYXJzZShjKTtpZih0eXBlb2YgZSE9XCJvYmplY3RcIil7cmV0dXJuIDB9aWYoZS5jb25zdHJ1Y3Rvcj09PUFycmF5KXtyZXR1cm4gMH1pZihiKXtiW2RdPWV9cmV0dXJuIDF9Y2F0Y2goYSl7cmV0dXJuIDB9fTtLSlVSLmp3cy5KV1MucmVhZFNhZmVKU09OU3RyaW5nPWZ1bmN0aW9uKGIpe3ZhciBjPW51bGw7dHJ5e2M9anNvblBhcnNlKGIpO2lmKHR5cGVvZiBjIT1cIm9iamVjdFwiKXtyZXR1cm4gbnVsbH1pZihjLmNvbnN0cnVjdG9yPT09QXJyYXkpe3JldHVybiBudWxsfXJldHVybiBjfWNhdGNoKGEpe3JldHVybiBudWxsfX07S0pVUi5qd3MuSldTLmdldEVuY29kZWRTaWduYXR1cmVWYWx1ZUZyb21KV1M9ZnVuY3Rpb24oYil7dmFyIGE9Yi5tYXRjaCgvXlteLl0rXFwuW14uXStcXC4oW14uXSspJC8pO2lmKGE9PW51bGwpe3Rocm93XCJKV1Mgc2lnbmF0dXJlIGlzIG5vdCBhIGZvcm0gb2YgJ0hlYWQuUGF5bG9hZC5TaWdWYWx1ZScuXCJ9cmV0dXJuIGFbMV19O0tKVVIuandzLkpXUy5nZXRKV0t0aHVtYnByaW50PWZ1bmN0aW9uKGQpe2lmKGQua3R5IT09XCJSU0FcIiYmZC5rdHkhPT1cIkVDXCImJmQua3R5IT09XCJvY3RcIil7dGhyb3dcInVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgSldLIFRodW1wcmludFwifXZhciBhPVwie1wiO2lmKGQua3R5PT09XCJSU0FcIil7aWYodHlwZW9mIGQubiE9XCJzdHJpbmdcInx8dHlwZW9mIGQuZSE9XCJzdHJpbmdcIil7dGhyb3dcIndyb25nIG4gYW5kIGUgdmFsdWUgZm9yIFJTQSBrZXlcIn1hKz0nXCJlXCI6XCInK2QuZSsnXCIsJzthKz0nXCJrdHlcIjpcIicrZC5rdHkrJ1wiLCc7YSs9J1wiblwiOlwiJytkLm4rJ1wifSd9ZWxzZXtpZihkLmt0eT09PVwiRUNcIil7aWYodHlwZW9mIGQuY3J2IT1cInN0cmluZ1wifHx0eXBlb2YgZC54IT1cInN0cmluZ1wifHx0eXBlb2YgZC55IT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgY3J2LCB4IGFuZCB5IHZhbHVlIGZvciBFQyBrZXlcIn1hKz0nXCJjcnZcIjpcIicrZC5jcnYrJ1wiLCc7YSs9J1wia3R5XCI6XCInK2Qua3R5KydcIiwnO2ErPSdcInhcIjpcIicrZC54KydcIiwnO2ErPSdcInlcIjpcIicrZC55KydcIn0nfWVsc2V7aWYoZC5rdHk9PT1cIm9jdFwiKXtpZih0eXBlb2YgZC5rIT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgayB2YWx1ZSBmb3Igb2N0KHN5bW1ldHJpYykga2V5XCJ9YSs9J1wia3R5XCI6XCInK2Qua3R5KydcIiwnO2ErPSdcImtcIjpcIicrZC5rKydcIn0nfX19dmFyIGI9cnN0cnRvaGV4KGEpO3ZhciBjPUtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChiLFwic2hhMjU2XCIpO3ZhciBlPWhleHRvYjY0dShjKTtyZXR1cm4gZX07S0pVUi5qd3MuSW50RGF0ZT17fTtLSlVSLmp3cy5JbnREYXRlLmdldD1mdW5jdGlvbihjKXt2YXIgYj1LSlVSLmp3cy5JbnREYXRlLGQ9Yi5nZXROb3csYT1iLmdldFp1bHU7aWYoYz09XCJub3dcIil7cmV0dXJuIGQoKX1lbHNle2lmKGM9PVwibm93ICsgMWhvdXJcIil7cmV0dXJuIGQoKSs2MCo2MH1lbHNle2lmKGM9PVwibm93ICsgMWRheVwiKXtyZXR1cm4gZCgpKzYwKjYwKjI0fWVsc2V7aWYoYz09XCJub3cgKyAxbW9udGhcIil7cmV0dXJuIGQoKSs2MCo2MCoyNCozMH1lbHNle2lmKGM9PVwibm93ICsgMXllYXJcIil7cmV0dXJuIGQoKSs2MCo2MCoyNCozNjV9ZWxzZXtpZihjLm1hdGNoKC9aJC8pKXtyZXR1cm4gYShjKX1lbHNle2lmKGMubWF0Y2goL15bMC05XSskLykpe3JldHVybiBwYXJzZUludChjKX19fX19fX10aHJvd1widW5zdXBwb3J0ZWQgZm9ybWF0OiBcIitjfTtLSlVSLmp3cy5JbnREYXRlLmdldFp1bHU9ZnVuY3Rpb24oYSl7cmV0dXJuIHp1bHV0b3NlYyhhKX07S0pVUi5qd3MuSW50RGF0ZS5nZXROb3c9ZnVuY3Rpb24oKXt2YXIgYT1+fihuZXcgRGF0ZSgpLzEwMDApO3JldHVybiBhfTtLSlVSLmp3cy5JbnREYXRlLmludERhdGUyVVRDU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBEYXRlKGEqMTAwMCk7cmV0dXJuIGIudG9VVENTdHJpbmcoKX07S0pVUi5qd3MuSW50RGF0ZS5pbnREYXRlMlp1bHU9ZnVuY3Rpb24oZSl7dmFyIGk9bmV3IERhdGUoZSoxMDAwKSxoPShcIjAwMDBcIitpLmdldFVUQ0Z1bGxZZWFyKCkpLnNsaWNlKC00KSxnPShcIjAwXCIrKGkuZ2V0VVRDTW9udGgoKSsxKSkuc2xpY2UoLTIpLGI9KFwiMDBcIitpLmdldFVUQ0RhdGUoKSkuc2xpY2UoLTIpLGE9KFwiMDBcIitpLmdldFVUQ0hvdXJzKCkpLnNsaWNlKC0yKSxjPShcIjAwXCIraS5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKSxmPShcIjAwXCIraS5nZXRVVENTZWNvbmRzKCkpLnNsaWNlKC0yKTtyZXR1cm4gaCtnK2IrYStjK2YrXCJaXCJ9O1xuZXhwb3J0IHsgU2VjdXJlUmFuZG9tIH07XHJcbmV4cG9ydCB7IHJuZ19zZWVkX3RpbWUgfTtcclxuXHJcbmV4cG9ydCB7IEJpZ0ludGVnZXIgfTtcclxuZXhwb3J0IHsgUlNBS2V5IH07XHJcbmV4cG9ydCBjb25zdCB7IEVEU0EgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBEU0EgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBTaWduYXR1cmUgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBNZXNzYWdlRGlnZXN0IH0gPSAgS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IE1hYyB9ID0gS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IENpcGhlciB9ID0gIEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgeyBLRVlVVElMIH07XHJcbmV4cG9ydCB7IEFTTjFIRVggfTtcclxuZXhwb3J0IHsgWDUwOSB9O1xyXG5leHBvcnQgeyBDcnlwdG9KUyB9O1xyXG5cclxuLy8gZXh0L2Jhc2U2NC5qc1xyXG5leHBvcnQgeyBiNjR0b2hleCB9O1xyXG5leHBvcnQgeyBiNjR0b0JBIH07XHJcblxyXG4vLyBiYXNlNjR4LmpzXHJcbmV4cG9ydCB7IHN0b0JBIH07XHJcbmV4cG9ydCB7IEJBdG9zIH07XHJcbmV4cG9ydCB7IEJBdG9oZXggfTtcclxuZXhwb3J0IHsgc3RvaGV4IH07XHJcbmV4cG9ydCB7IHN0b2I2NCB9O1xyXG5leHBvcnQgeyBzdG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b3MgfTtcclxuZXhwb3J0IHsgYjY0dG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b2I2NCB9O1xyXG5leHBvcnQgeyBoZXgyYjY0IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG9oZXggfTtcclxuZXhwb3J0IHsgdXRmOHRvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG91dGY4IH07XHJcbmV4cG9ydCB7IHV0Zjh0b2I2NCB9O1xyXG5leHBvcnQgeyBiNjR0b3V0ZjggfTtcclxuZXhwb3J0IHsgdXRmOHRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvdXRmOCB9O1xyXG5leHBvcnQgeyBoZXh0b3JzdHIgfTtcclxuZXhwb3J0IHsgcnN0cnRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0bmwgfTtcclxuZXhwb3J0IHsgYjY0bmx0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b3BlbSB9O1xyXG5leHBvcnQgeyBwZW10b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b0FycmF5QnVmZmVyIH07XHJcbmV4cG9ydCB7IEFycmF5QnVmZmVydG9oZXggfTtcclxuZXhwb3J0IHsgenVsdXRvbXNlYyB9O1xyXG5leHBvcnQgeyB6dWx1dG9zZWMgfTtcclxuZXhwb3J0IHsgenVsdXRvZGF0ZSB9O1xyXG5leHBvcnQgeyBkYXRldG96dWx1IH07XHJcbmV4cG9ydCB7IHVyaWNtcHRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvdXJpY21wIH07XHJcbmV4cG9ydCB7IGlwdjZ0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b2lwdjYgfTtcclxuZXhwb3J0IHsgaGV4dG9pcCB9O1xyXG5leHBvcnQgeyBpcHRvaGV4IH07XHJcbmV4cG9ydCB7IGVuY29kZVVSSUNvbXBvbmVudEFsbCB9O1xyXG5leHBvcnQgeyBuZXdsaW5lX3RvVW5peCB9O1xyXG5leHBvcnQgeyBuZXdsaW5lX3RvRG9zIH07XHJcbmV4cG9ydCB7IGhleHRvcG9zaGV4IH07XHJcbmV4cG9ydCB7IGludGFyeXN0cnRvaGV4IH07XHJcbmV4cG9ydCB7IHN0cmRpZmZpZHggfTtcclxuXHJcbi8vIG5hbWUgc3BhY2VzXHJcbmV4cG9ydCB7IEtKVVIgfTtcclxuY29uc3QgX2NyeXB0byA9ICBLSlVSLmNyeXB0bztcclxuZXhwb3J0IHsgX2NyeXB0byBhcyBjcnlwdG8gfTtcclxuZXhwb3J0IGNvbnN0IHsgYXNuMSB9ID0gS0pVUjtcclxuZXhwb3J0IGNvbnN0IHsgandzIH0gPSBLSlVSO1xyXG5leHBvcnQgY29uc3QgeyBsYW5nIH0gPSBLSlVSO1xyXG5cclxuXHJcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9zaGltXCIpO1xuXG5yZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lXCIpO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlXCIpO1xuXG5pZiAoZ2xvYmFsLl9iYWJlbFBvbHlmaWxsKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7XG59XG5nbG9iYWwuX2JhYmVsUG9seWZpbGwgPSB0cnVlO1xuXG52YXIgREVGSU5FX1BST1BFUlRZID0gXCJkZWZpbmVQcm9wZXJ0eVwiO1xuZnVuY3Rpb24gZGVmaW5lKE8sIGtleSwgdmFsdWUpIHtcbiAgT1trZXldIHx8IE9iamVjdFtERUZJTkVfUFJPUEVSVFldKE8sIGtleSwge1xuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSk7XG59XG5cbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZExlZnRcIiwgXCJcIi5wYWRTdGFydCk7XG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRSaWdodFwiLCBcIlwiLnBhZEVuZCk7XG5cblwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBbXVtrZXldICYmIGRlZmluZShBcnJheSwga2V5LCBGdW5jdGlvbi5jYWxsLmJpbmQoW11ba2V5XSkpO1xufSk7IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gW10uY29weVdpdGhpbiB8fCBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCAvKiA9IDAgKi8sIHN0YXJ0IC8qID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgdG8gPSB0b0Fic29sdXRlSW5kZXgodGFyZ2V0LCBsZW4pO1xuICB2YXIgZnJvbSA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgY291bnQgPSBNYXRoLm1pbigoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pKSAtIGZyb20sIGxlbiAtIHRvKTtcbiAgdmFyIGluYyA9IDE7XG4gIGlmIChmcm9tIDwgdG8gJiYgdG8gPCBmcm9tICsgY291bnQpIHtcbiAgICBpbmMgPSAtMTtcbiAgICBmcm9tICs9IGNvdW50IC0gMTtcbiAgICB0byArPSBjb3VudCAtIDE7XG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgIGVsc2UgZGVsZXRlIE9bdG9dO1xuICAgIHRvICs9IGluYztcbiAgICBmcm9tICs9IGluYztcbiAgfSByZXR1cm4gTztcbn07XG4iLCIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsIi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhc2MgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYUxlbiwgbWVtbywgaXNSaWdodCkge1xuICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gaXNSaWdodCA/IGxlbmd0aCAtIDEgOiAwO1xuICB2YXIgaSA9IGlzUmlnaHQgPyAtMSA6IDE7XG4gIGlmIChhTGVuIDwgMikgZm9yICg7Oykge1xuICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4ICs9IGk7XG4gICAgaWYgKGlzUmlnaHQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgIH1cbiAgfVxuICBmb3IgKDtpc1JpZ2h0ID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gIH1cbiAgcmV0dXJuIG1lbW87XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbCkpIHtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG4iLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChGLCBsZW4sIGFyZ3MpIHtcbiAgaWYgKCEobGVuIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGkgPSAwOyBpIDwgbGVuOyBpKyspIG5baV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZCA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogaW52b2tlKGZuLCBhcmdzLCB0aGF0KTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciAkdG9JU09TdHJpbmcgPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGx6ID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gbnVtID4gOSA/IG51bSA6ICcwJyArIG51bTtcbn07XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPSAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoLTVlMTMgLSAxKSkgIT0gJzAzODUtMDctMjVUMDc6MDY6MzkuOTk5Wic7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZShOYU4pKTtcbn0pKSA/IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkge1xuICBpZiAoIWlzRmluaXRlKGdldFRpbWUuY2FsbCh0aGlzKSkpIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB2YXIgZCA9IHRoaXM7XG4gIHZhciB5ID0gZC5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgbSA9IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gIHZhciBzID0geSA8IDAgPyAnLScgOiB5ID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gcyArICgnMDAwMDAnICsgTWF0aC5hYnMoeSkpLnNsaWNlKHMgPyAtNiA6IC00KSArXG4gICAgJy0nICsgbHooZC5nZXRVVENNb250aCgpICsgMSkgKyAnLScgKyBseihkLmdldFVUQ0RhdGUoKSkgK1xuICAgICdUJyArIGx6KGQuZ2V0VVRDSG91cnMoKSkgKyAnOicgKyBseihkLmdldFVUQ01pbnV0ZXMoKSkgK1xuICAgICc6JyArIGx6KGQuZ2V0VVRDU2Vjb25kcygpKSArICcuJyArIChtID4gOTkgPyBtIDogJzAnICsgbHoobSkpICsgJ1onO1xufSA6ICR0b0lTT1N0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJ2YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgcmUgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbS0VZXShyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHRhcmdldCwgQykge1xuICB2YXIgUyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgdmFyIFA7XG4gIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgc2V0UHJvdG90eXBlT2YodGhhdCwgUCk7XG4gIH0gcmV0dXJuIHRoYXQ7XG59O1xuIiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgYXJncywgdGhhdCkge1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNJbnRlZ2VyKGl0KSB7XG4gIHJldHVybiAhaXNPYmplY3QoaXQpICYmIGlzRmluaXRlKGl0KSAmJiBmbG9vcihpdCkgPT09IGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG0xID0gTWF0aC5leHBtMTtcbm1vZHVsZS5leHBvcnRzID0gKCEkZXhwbTFcbiAgLy8gT2xkIEZGIGJ1Z1xuICB8fCAkZXhwbTEoMTApID4gMjIwMjUuNDY1Nzk0ODA2NzE5IHx8ICRleHBtMSgxMCkgPCAyMjAyNS40NjU3OTQ4MDY3MTY1MTY4XG4gIC8vIFRvciBCcm93c2VyIGJ1Z1xuICB8fCAkZXhwbTEoLTJlLTE3KSAhPSAtMmUtMTdcbikgPyBmdW5jdGlvbiBleHBtMSh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IHggPiAtMWUtNiAmJiB4IDwgMWUtNiA/IHggKyB4ICogeCAvIDIgOiBNYXRoLmV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuIiwiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNjYWxlIHx8IGZ1bmN0aW9uIHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICBpZiAoXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgeCAhPSB4XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkxvdyAhPSBpbkxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgaW5IaWdoICE9IGluSGlnaFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0TG93ICE9IG91dExvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0SGlnaCAhPSBvdXRIaWdoXG4gICkgcmV0dXJuIE5hTjtcbiAgaWYgKHggPT09IEluZmluaXR5IHx8IHggPT09IC1JbmZpbml0eSkgcmV0dXJuIHg7XG4gIHJldHVybiAoeCAtIGluTG93KSAqIChvdXRIaWdoIC0gb3V0TG93KSAvIChpbkhpZ2ggLSBpbkxvdykgKyBvdXRMb3c7XG59O1xuIiwiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24gc2lnbih4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgfHwgeCAhPSB4ID8geCA6IHggPCAwID8gLTEgOiAxO1xufTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsInZhciBNYXAgPSByZXF1aXJlKCcuL2VzNi5tYXAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ21ldGFkYXRhJyk7XG52YXIgc3RvcmUgPSBzaGFyZWQuc3RvcmUgfHwgKHNoYXJlZC5zdG9yZSA9IG5ldyAocmVxdWlyZSgnLi9lczYud2Vhay1tYXAnKSkoKSk7XG5cbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5LCBjcmVhdGUpIHtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIGlmICghdGFyZ2V0TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzdG9yZS5zZXQodGFyZ2V0LCB0YXJnZXRNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH1cbiAgdmFyIGtleU1ldGFkYXRhID0gdGFyZ2V0TWV0YWRhdGEuZ2V0KHRhcmdldEtleSk7XG4gIGlmICgha2V5TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0YXJnZXRNZXRhZGF0YS5zZXQodGFyZ2V0S2V5LCBrZXlNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH0gcmV0dXJuIGtleU1ldGFkYXRhO1xufTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogbWV0YWRhdGFNYXAuaGFzKE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBtZXRhZGF0YU1hcC5nZXQoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKSB7XG4gIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgdHJ1ZSkuc2V0KE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlKTtcbn07XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCh0YXJnZXQsIHRhcmdldEtleSwgZmFsc2UpO1xuICB2YXIga2V5cyA9IFtdO1xuICBpZiAobWV0YWRhdGFNYXApIG1ldGFkYXRhTWFwLmZvckVhY2goZnVuY3Rpb24gKF8sIGtleSkgeyBrZXlzLnB1c2goa2V5KTsgfSk7XG4gIHJldHVybiBrZXlzO1xufTtcbnZhciB0b01ldGFLZXkgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcbnZhciBleHAgPSBmdW5jdGlvbiAoTykge1xuICAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCBPKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdG9yZTogc3RvcmUsXG4gIG1hcDogZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCxcbiAgaGFzOiBvcmRpbmFyeUhhc093bk1ldGFkYXRhLFxuICBnZXQ6IG9yZGluYXJ5R2V0T3duTWV0YWRhdGEsXG4gIHNldDogb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSxcbiAga2V5czogb3JkaW5hcnlPd25NZXRhZGF0YUtleXMsXG4gIGtleTogdG9NZXRhS2V5LFxuICBleHA6IGV4cFxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuOSBTYW1lVmFsdWUoeCwgeSlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV07XG4gICAgdmFyIG1hcHBpbmcsIEEsIG4sIGNiO1xuICAgIGFGdW5jdGlvbih0aGlzKTtcbiAgICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAobWFwcGluZykgYUZ1bmN0aW9uKG1hcEZuKTtcbiAgICBpZiAoc291cmNlID09IHVuZGVmaW5lZCkgcmV0dXJuIG5ldyB0aGlzKCk7XG4gICAgQSA9IFtdO1xuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBuID0gMDtcbiAgICAgIGNiID0gY3R4KG1hcEZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgIEEucHVzaChjYihuZXh0SXRlbSwgbisrKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSBBW2xlbmd0aF0gPSBhcmd1bWVudHNbbGVuZ3RoXTtcbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIEMgPSBnbG9iYWxbS0VZXTtcbiAgaWYgKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pIGRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBxdW90ID0gL1wiL2c7XG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbnZhciBjcmVhdGVIVE1MID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIGV4ZWMpIHtcbiAgdmFyIE8gPSB7fTtcbiAgT1tOQU1FXSA9IGV4ZWMoY3JlYXRlSFRNTCk7XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTkFNRV0oJ1wiJyk7XG4gICAgcmV0dXJuIHRlc3QgIT09IHRlc3QudG9Mb3dlckNhc2UoKSB8fCB0ZXN0LnNwbGl0KCdcIicpLmxlbmd0aCA+IDM7XG4gIH0pLCAnU3RyaW5nJywgTyk7XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcsIGxlZnQpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcoZmlsbFN0cmluZyk7XG4gIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgdmFyIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gIHZhciBzdHJpbmdGaWxsZXIgPSByZXBlYXQuY2FsbChmaWxsU3RyLCBNYXRoLmNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nRmlsbGVyLnNsaWNlKDAsIGZpbGxMZW4pO1xuICByZXR1cm4gbGVmdCA/IHN0cmluZ0ZpbGxlciArIFMgOiBTICsgc3RyaW5nRmlsbGVyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyhkZWZpbmVkKHRoaXMpKTtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgbiA9IHRvSW50ZWdlcihjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09IEluZmluaXR5KSB0aHJvdyBSYW5nZUVycm9yKFwiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmVcIik7XG4gIGZvciAoO24gPiAwOyAobiA+Pj49IDEpICYmIChzdHIgKz0gc3RyKSkgaWYgKG4gJiAxKSByZXMgKz0gc3RyO1xuICByZXR1cm4gcmVzO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc3BhY2VzID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJyk7XG52YXIgc3BhY2UgPSAnWycgKyBzcGFjZXMgKyAnXSc7XG52YXIgbm9uID0gJ1xcdTIwMGJcXHUwMDg1JztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyBzcGFjZSArIHNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cChzcGFjZSArIHNwYWNlICsgJyokJyk7XG5cbnZhciBleHBvcnRlciA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEFMSUFTKSB7XG4gIHZhciBleHAgPSB7fTtcbiAgdmFyIEZPUkNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXNwYWNlc1tLRVldKCkgfHwgbm9uW0tFWV0oKSAhPSBub247XG4gIH0pO1xuICB2YXIgZm4gPSBleHBbS0VZXSA9IEZPUkNFID8gZXhlYyh0cmltKSA6IHNwYWNlc1tLRVldO1xuICBpZiAoQUxJQVMpIGV4cFtBTElBU10gPSBmbjtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRSwgJ1N0cmluZycsIGV4cCk7XG59O1xuXG4vLyAxIC0+IFN0cmluZyN0cmltTGVmdFxuLy8gMiAtPiBTdHJpbmcjdHJpbVJpZ2h0XG4vLyAzIC0+IFN0cmluZyN0cmltXG52YXIgdHJpbSA9IGV4cG9ydGVyLnRyaW0gPSBmdW5jdGlvbiAoc3RyaW5nLCBUWVBFKSB7XG4gIHN0cmluZyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0ZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycgK1xuICAnXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW5kZXhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgdmFyIG51bWJlciA9IHRvSW50ZWdlcihpdCk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChudW1iZXIpO1xuICBpZiAobnVtYmVyICE9PSBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCEnKTtcbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykpIHtcbiAgdmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG4gIHZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbiAgdmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbiAgdmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiAgdmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG4gIHZhciAkYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG4gIHZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbiAgdmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xuICB2YXIgcHJvcGVydHlEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuICB2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbiAgdmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG4gIHZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG4gIHZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuICB2YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG4gIHZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xuICB2YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xuICB2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbiAgdmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4gIHZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xuICB2YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG4gIHZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG4gIHZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbiAgdmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG4gIHZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuICB2YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG4gIHZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbiAgdmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xuICB2YXIgY3JlYXRlQXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJyk7XG4gIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG4gIHZhciBBcnJheUl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG4gIHZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbiAgdmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbiAgdmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xuICB2YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xuICB2YXIgYXJyYXlDb3B5V2l0aGluID0gcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKTtcbiAgdmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuICB2YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xuICB2YXIgZFAgPSAkRFAuZjtcbiAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICB2YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgdmFyIFVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheTtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG4gIHZhciBTSEFSRURfQlVGRkVSID0gJ1NoYXJlZCcgKyBBUlJBWV9CVUZGRVI7XG4gIHZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG4gIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheVtQUk9UT1RZUEVdO1xuICB2YXIgJEFycmF5QnVmZmVyID0gJGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbiAgdmFyICREYXRhVmlldyA9ICRidWZmZXIuRGF0YVZpZXc7XG4gIHZhciBhcnJheUZvckVhY2ggPSBjcmVhdGVBcnJheU1ldGhvZCgwKTtcbiAgdmFyIGFycmF5RmlsdGVyID0gY3JlYXRlQXJyYXlNZXRob2QoMik7XG4gIHZhciBhcnJheVNvbWUgPSBjcmVhdGVBcnJheU1ldGhvZCgzKTtcbiAgdmFyIGFycmF5RXZlcnkgPSBjcmVhdGVBcnJheU1ldGhvZCg0KTtcbiAgdmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xuICB2YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbiAgdmFyIGFycmF5SW5jbHVkZXMgPSBjcmVhdGVBcnJheUluY2x1ZGVzKHRydWUpO1xuICB2YXIgYXJyYXlJbmRleE9mID0gY3JlYXRlQXJyYXlJbmNsdWRlcyhmYWxzZSk7XG4gIHZhciBhcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JzLnZhbHVlcztcbiAgdmFyIGFycmF5S2V5cyA9IEFycmF5SXRlcmF0b3JzLmtleXM7XG4gIHZhciBhcnJheUVudHJpZXMgPSBBcnJheUl0ZXJhdG9ycy5lbnRyaWVzO1xuICB2YXIgYXJyYXlMYXN0SW5kZXhPZiA9IEFycmF5UHJvdG8ubGFzdEluZGV4T2Y7XG4gIHZhciBhcnJheVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlO1xuICB2YXIgYXJyYXlSZWR1Y2VSaWdodCA9IEFycmF5UHJvdG8ucmVkdWNlUmlnaHQ7XG4gIHZhciBhcnJheUpvaW4gPSBBcnJheVByb3RvLmpvaW47XG4gIHZhciBhcnJheVNvcnQgPSBBcnJheVByb3RvLnNvcnQ7XG4gIHZhciBhcnJheVNsaWNlID0gQXJyYXlQcm90by5zbGljZTtcbiAgdmFyIGFycmF5VG9TdHJpbmcgPSBBcnJheVByb3RvLnRvU3RyaW5nO1xuICB2YXIgYXJyYXlUb0xvY2FsZVN0cmluZyA9IEFycmF5UHJvdG8udG9Mb2NhbGVTdHJpbmc7XG4gIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgdmFyIFRBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgdmFyIFRZUEVEX0NPTlNUUlVDVE9SID0gdWlkKCd0eXBlZF9jb25zdHJ1Y3RvcicpO1xuICB2YXIgREVGX0NPTlNUUlVDVE9SID0gdWlkKCdkZWZfY29uc3RydWN0b3InKTtcbiAgdmFyIEFMTF9DT05TVFJVQ1RPUlMgPSAkdHlwZWQuQ09OU1RSO1xuICB2YXIgVFlQRURfQVJSQVkgPSAkdHlwZWQuVFlQRUQ7XG4gIHZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG4gIHZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG5cbiAgdmFyICRtYXAgPSBjcmVhdGVBcnJheU1ldGhvZCgxLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsbG9jYXRlKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsZW5ndGgpO1xuICB9KTtcblxuICB2YXIgTElUVExFX0VORElBTiA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXSA9PT0gMTtcbiAgfSk7XG5cbiAgdmFyIEZPUkNFRF9TRVQgPSAhIVVpbnQ4QXJyYXkgJiYgISFVaW50OEFycmF5W1BST1RPVFlQRV0uc2V0ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgVWludDhBcnJheSgxKS5zZXQoe30pO1xuICB9KTtcblxuICB2YXIgdG9PZmZzZXQgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihpdCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9O1xuXG4gIHZhciB2YWxpZGF0ZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIGlmIChpc09iamVjdChpdCkgJiYgVFlQRURfQVJSQVkgaW4gaXQpIHJldHVybiBpdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IScpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uIChDLCBsZW5ndGgpIHtcbiAgICBpZiAoIShpc09iamVjdChDKSAmJiBUWVBFRF9DT05TVFJVQ1RPUiBpbiBDKSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciEnKTtcbiAgICB9IHJldHVybiBuZXcgQyhsZW5ndGgpO1xuICB9O1xuXG4gIHZhciBzcGVjaWVzRnJvbUxpc3QgPSBmdW5jdGlvbiAoTywgbGlzdCkge1xuICAgIHJldHVybiBmcm9tTGlzdChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGlzdCk7XG4gIH07XG5cbiAgdmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUoQywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChpdCwga2V5LCBpbnRlcm5hbCkge1xuICAgIGRQKGl0LCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kW2ludGVybmFsXTsgfSB9KTtcbiAgfTtcblxuICB2YXIgJGZyb20gPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChzb3VyY2UpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgaSwgbGVuZ3RoLCB2YWx1ZXMsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIWlzQXJyYXlJdGVyKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgdmFsdWVzID0gW10sIGkgPSAwOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGkrKykge1xuICAgICAgICB2YWx1ZXMucHVzaChzdGVwLnZhbHVlKTtcbiAgICAgIH0gTyA9IHZhbHVlcztcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcgJiYgYUxlbiA+IDIpIG1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKSwgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTsgbGVuZ3RoID4gaTsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciAkb2YgPSBmdW5jdGlvbiBvZigvKiAuLi5pdGVtcyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gaU9TIFNhZmFyaSA2LnggZmFpbHMgaGVyZVxuICB2YXIgVE9fTE9DQUxFX0JVRyA9ICEhVWludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9Mb2NhbGVTdHJpbmcuY2FsbChuZXcgVWludDhBcnJheSgxKSk7IH0pO1xuXG4gIHZhciAkdG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgICByZXR1cm4gYXJyYXlUb0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfQlVHID8gYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpKSA6IHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHZhciBwcm90byA9IHtcbiAgICBjb3B5V2l0aGluOiBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUNvcHlXaXRoaW4uY2FsbCh2YWxpZGF0ZSh0aGlzKSwgdGFyZ2V0LCBzdGFydCwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlFdmVyeSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmlsbDogZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5RmlsbC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5RmlsdGVyKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLFxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kKHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmRJbmRleCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICBhcnJheUZvckVhY2godmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZih2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluY2x1ZGVzKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlKb2luLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5TGFzdEluZGV4T2YuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiAkbWFwKHZhbGlkYXRlKHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2VSaWdodC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGUodGhhdCkubGVuZ3RoO1xuICAgICAgdmFyIG1pZGRsZSA9IE1hdGguZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgICAgIHZhbHVlID0gdGhhdFtpbmRleF07XG4gICAgICAgIHRoYXRbaW5kZXgrK10gPSB0aGF0Wy0tbGVuZ3RoXTtcbiAgICAgICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH0sXG4gICAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5U29tZSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICAgIHJldHVybiBhcnJheVNvcnQuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgY29tcGFyZWZuKTtcbiAgICB9LFxuICAgIHN1YmFycmF5OiBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKSB7XG4gICAgICB2YXIgTyA9IHZhbGlkYXRlKHRoaXMpO1xuICAgICAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICAgICAgdmFyICRiZWdpbiA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pKShcbiAgICAgICAgTy5idWZmZXIsXG4gICAgICAgIE8uYnl0ZU9mZnNldCArICRiZWdpbiAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCkpIC0gJGJlZ2luKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyICRzbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgc3RhcnQsIGVuZCkpO1xuICB9O1xuXG4gIHZhciAkc2V0ID0gZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiAsIG9mZnNldCAqLykge1xuICAgIHZhbGlkYXRlKHRoaXMpO1xuICAgIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHNbMV0sIDEpO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICB2YXIgc3JjID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgoc3JjLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuKSB0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbiAgfTtcblxuICB2YXIgJGl0ZXJhdG9ycyA9IHtcbiAgICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5RW50cmllcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlLZXlzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlWYWx1ZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc1RBSW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGFyZ2V0KVxuICAgICAgJiYgdGFyZ2V0W1RZUEVEX0FSUkFZXVxuICAgICAgJiYgdHlwZW9mIGtleSAhPSAnc3ltYm9sJ1xuICAgICAgJiYga2V5IGluIHRhcmdldFxuICAgICAgJiYgU3RyaW5nKCtrZXkpID09IFN0cmluZyhrZXkpO1xuICB9O1xuICB2YXIgJGdldERlc2MgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgID8gcHJvcGVydHlEZXNjKDIsIHRhcmdldFtrZXldKVxuICAgICAgOiBnT1BEKHRhcmdldCwga2V5KTtcbiAgfTtcbiAgdmFyICRzZXREZXNjID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICBpZiAoaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgICYmIGlzT2JqZWN0KGRlc2MpXG4gICAgICAmJiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICAgICYmICFoYXMoZGVzYywgJ2dldCcpXG4gICAgICAmJiAhaGFzKGRlc2MsICdzZXQnKVxuICAgICAgLy8gVE9ETzogYWRkIHZhbGlkYXRpb24gZGVzY3JpcHRvciB3L28gY2FsbGluZyBhY2Nlc3NvcnNcbiAgICAgICYmICFkZXNjLmNvbmZpZ3VyYWJsZVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ3dyaXRhYmxlJykgfHwgZGVzYy53cml0YWJsZSlcbiAgICAgICYmICghaGFzKGRlc2MsICdlbnVtZXJhYmxlJykgfHwgZGVzYy5lbnVtZXJhYmxlKVxuICAgICkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBkZXNjLnZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IHJldHVybiBkUCh0YXJnZXQsIGtleSwgZGVzYyk7XG4gIH07XG5cbiAgaWYgKCFBTExfQ09OU1RSVUNUT1JTKSB7XG4gICAgJEdPUEQuZiA9ICRnZXREZXNjO1xuICAgICREUC5mID0gJHNldERlc2M7XG4gIH1cblxuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFBTExfQ09OU1RSVUNUT1JTLCAnT2JqZWN0Jywge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldERlc2MsXG4gICAgZGVmaW5lUHJvcGVydHk6ICRzZXREZXNjXG4gIH0pO1xuXG4gIGlmIChmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKSB7XG4gICAgYXJyYXlUb1N0cmluZyA9IGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0aGlzKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyICRUeXBlZEFycmF5UHJvdG90eXBlJCA9IHJlZGVmaW5lQWxsKHt9LCBwcm90byk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJGl0ZXJhdG9ycyk7XG4gIGhpZGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBJVEVSQVRPUiwgJGl0ZXJhdG9ycy52YWx1ZXMpO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIHtcbiAgICBzbGljZTogJHNsaWNlLFxuICAgIHNldDogJHNldCxcbiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKCkgeyAvKiBub29wICovIH0sXG4gICAgdG9TdHJpbmc6IGFycmF5VG9TdHJpbmcsXG4gICAgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ1xuICB9KTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J1ZmZlcicsICdiJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlT2Zmc2V0JywgJ28nKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVMZW5ndGgnLCAnbCcpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnbGVuZ3RoJywgJ2UnKTtcbiAgZFAoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBUQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbVFlQRURfQVJSQVldOyB9XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIEJZVEVTLCB3cmFwcGVyLCBDTEFNUEVEKSB7XG4gICAgQ0xBTVBFRCA9ICEhQ0xBTVBFRDtcbiAgICB2YXIgTkFNRSA9IEtFWSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBLRVk7XG4gICAgdmFyIFNFVFRFUiA9ICdzZXQnICsgS0VZO1xuICAgIHZhciBUeXBlZEFycmF5ID0gZ2xvYmFsW05BTUVdO1xuICAgIHZhciBCYXNlID0gVHlwZWRBcnJheSB8fCB7fTtcbiAgICB2YXIgVEFDID0gVHlwZWRBcnJheSAmJiBnZXRQcm90b3R5cGVPZihUeXBlZEFycmF5KTtcbiAgICB2YXIgRk9SQ0VEID0gIVR5cGVkQXJyYXkgfHwgISR0eXBlZC5BQlY7XG4gICAgdmFyIE8gPSB7fTtcbiAgICB2YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkgJiYgVHlwZWRBcnJheVtQUk9UT1RZUEVdO1xuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIHJldHVybiBkYXRhLnZbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICBpZiAoQ0xBTVBFRCkgdmFsdWUgPSAodmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhmZiA/IDB4ZmYgOiB2YWx1ZSAmIDB4ZmY7XG4gICAgICBkYXRhLnZbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCB2YWx1ZSwgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgYWRkRWxlbWVudCA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgZFAodGhhdCwgaW5kZXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRlcih0aGlzLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSwgJ19kJyk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgYnVmZmVyLCBieXRlTGVuZ3RoLCBsZW5ndGgsIGtsYXNzO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3ICRBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBvZmZzZXQgPSB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKCRsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCRsZW4gJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9ICRsZW4gLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIG9mZnNldCA+ICRsZW4pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aCAvIEJZVEVTO1xuICAgICAgICB9IGVsc2UgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSh0aGF0LCAnX2QnLCB7XG4gICAgICAgICAgYjogYnVmZmVyLFxuICAgICAgICAgIG86IG9mZnNldCxcbiAgICAgICAgICBsOiBieXRlTGVuZ3RoLFxuICAgICAgICAgIGU6IGxlbmd0aCxcbiAgICAgICAgICB2OiBuZXcgJERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IGNyZWF0ZSgkVHlwZWRBcnJheVByb3RvdHlwZSQpO1xuICAgICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5KTtcbiAgICB9IGVsc2UgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5KDEpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSkgfHwgISRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkobnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheSgxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoaXRlcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSwgdHJ1ZSkpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSk7XG4gICAgICAgIHZhciBrbGFzcztcbiAgICAgICAgLy8gYHdzYCBtb2R1bGUgYnVnLCB0ZW1wb3JhcmlseSByZW1vdmUgdmFsaWRhdGlvbiBsZW5ndGggZm9yIFVpbnQ4QXJyYXlcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC82NDVcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkgcmV0dXJuIG5ldyBCYXNlKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIHJldHVybiAkbGVuZ3RoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiAkb2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IEJhc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFycmF5Rm9yRWFjaChUQUMgIT09IEZ1bmN0aW9uLnByb3RvdHlwZSA/IGdPUE4oQmFzZSkuY29uY2F0KGdPUE4oVEFDKSkgOiBnT1BOKEJhc2UpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5KSkgaGlkZShUeXBlZEFycmF5LCBrZXksIEJhc2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IFR5cGVkQXJyYXlQcm90b3R5cGU7XG4gICAgICBpZiAoIUxJQlJBUlkpIFR5cGVkQXJyYXlQcm90b3R5cGUuY29uc3RydWN0b3IgPSBUeXBlZEFycmF5O1xuICAgIH1cbiAgICB2YXIgJG5hdGl2ZUl0ZXJhdG9yID0gVHlwZWRBcnJheVByb3RvdHlwZVtJVEVSQVRPUl07XG4gICAgdmFyIENPUlJFQ1RfSVRFUl9OQU1FID0gISEkbmF0aXZlSXRlcmF0b3JcbiAgICAgICYmICgkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSAndmFsdWVzJyB8fCAkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSB1bmRlZmluZWQpO1xuICAgIHZhciAkaXRlcmF0b3IgPSAkaXRlcmF0b3JzLnZhbHVlcztcbiAgICBoaWRlKFR5cGVkQXJyYXksIFRZUEVEX0NPTlNUUlVDVE9SLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRZUEVEX0FSUkFZLCBOQU1FKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgREVGX0NPTlNUUlVDVE9SLCBUeXBlZEFycmF5KTtcblxuICAgIGlmIChDTEFNUEVEID8gbmV3IFR5cGVkQXJyYXkoMSlbVEFHXSAhPSBOQU1FIDogIShUQUcgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIHtcbiAgICAgIGRQKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRBRywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5BTUU7IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9bTkFNRV0gPSBUeXBlZEFycmF5O1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoVHlwZWRBcnJheSAhPSBCYXNlKSwgTyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUywgTkFNRSwge1xuICAgICAgQllURVNfUEVSX0VMRU1FTlQ6IEJZVEVTXG4gICAgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgQmFzZS5vZi5jYWxsKFR5cGVkQXJyYXksIDEpOyB9KSwgTkFNRSwge1xuICAgICAgZnJvbTogJGZyb20sXG4gICAgICBvZjogJG9mXG4gICAgfSk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAsIE5BTUUsIHByb3RvKTtcblxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRF9TRVQsIE5BTUUsIHsgc2V0OiAkc2V0IH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhQ09SUkVDVF9JVEVSX05BTUUsIE5BTUUsICRpdGVyYXRvcnMpO1xuXG4gICAgaWYgKCFMSUJSQVJZICYmIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZykgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEpLnNsaWNlKCk7XG4gICAgfSksIE5BTUUsIHsgc2xpY2U6ICRzbGljZSB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgVHlwZWRBcnJheShbMSwgMl0pLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xuICAgIH0pKSwgTkFNRSwgeyB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nIH0pO1xuXG4gICAgSXRlcmF0b3JzW05BTUVdID0gQ09SUkVDVF9JVEVSX05BTUUgPyAkbmF0aXZlSXRlcmF0b3IgOiAkaXRlcmF0b3I7XG4gICAgaWYgKCFMSUJSQVJZICYmICFDT1JSRUNUX0lURVJfTkFNRSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBJVEVSQVRPUiwgJGl0ZXJhdG9yKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4ISc7XG52YXIgJEFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgTWF0aCA9IGdsb2JhbC5NYXRoO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xudmFyIEluZmluaXR5ID0gZ2xvYmFsLkluZmluaXR5O1xudmFyIEJhc2VCdWZmZXIgPSAkQXJyYXlCdWZmZXI7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xudmFyIEJVRkZFUiA9ICdidWZmZXInO1xudmFyIEJZVEVfTEVOR1RIID0gJ2J5dGVMZW5ndGgnO1xudmFyIEJZVEVfT0ZGU0VUID0gJ2J5dGVPZmZzZXQnO1xudmFyICRCVUZGRVIgPSBERVNDUklQVE9SUyA/ICdfYicgOiBCVUZGRVI7XG52YXIgJExFTkdUSCA9IERFU0NSSVBUT1JTID8gJ19sJyA6IEJZVEVfTEVOR1RIO1xudmFyICRPRkZTRVQgPSBERVNDUklQVE9SUyA/ICdfbycgOiBCWVRFX09GRlNFVDtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbmZ1bmN0aW9uIHBhY2tJRUVFNzU0KHZhbHVlLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShuQnl0ZXMpO1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7XG4gIHZhciBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHZhbHVlICE9IHZhbHVlIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYgKHZhbHVlICogKGMgPSBwb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwO1xuICAgICAgZSA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltpKytdID0gbSAmIDI1NSwgbSAvPSAyNTYsIG1MZW4gLT0gOCk7XG4gIGUgPSBlIDw8IG1MZW4gfCBtO1xuICBlTGVuICs9IG1MZW47XG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIHVucGFja0lFRUU3NTQoYnVmZmVyLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGVMZW4gLSA3O1xuICB2YXIgaSA9IG5CeXRlcyAtIDE7XG4gIHZhciBzID0gYnVmZmVyW2ktLV07XG4gIHZhciBlID0gcyAmIDEyNztcbiAgdmFyIG07XG4gIHMgPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogcyA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgcG93KDIsIG1MZW4pO1xuICAgIGUgPSBlIC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBwb3coMiwgZSAtIG1MZW4pO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpIHtcbiAgcmV0dXJuIGJ5dGVzWzNdIDw8IDI0IHwgYnl0ZXNbMl0gPDwgMTYgfCBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG59XG5mdW5jdGlvbiBwYWNrSTgoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kxNihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kzMihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmYsIGl0ID4+IDE2ICYgMHhmZiwgaXQgPj4gMjQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tGNjQoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCA1MiwgOCk7XG59XG5mdW5jdGlvbiBwYWNrRjMyKGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgMjMsIDQpO1xufVxuXG5mdW5jdGlvbiBhZGRHZXR0ZXIoQywga2V5LCBpbnRlcm5hbCkge1xuICBkUChDW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbaW50ZXJuYWxdOyB9IH0pO1xufVxuXG5mdW5jdGlvbiBnZXQodmlldywgYnl0ZXMsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gc3RvcmUuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBzZXQodmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKSBzdG9yZVtzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBieXRlcyAtIGkgLSAxXTtcbn1cblxuaWYgKCEkdHlwZWQuQUJWKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHRoaXMuX2IgPSBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApO1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHRoaXNbJEJVRkZFUl0gPSBidWZmZXI7XG4gICAgdGhpc1skT0ZGU0VUXSA9IG9mZnNldDtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQlVGRkVSLCAnX2InKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9PRkZTRVQsICdfbycpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgMjMsIDQpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Y2NCwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICRBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcihOYU4pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiAkQXJyYXlCdWZmZXIubmFtZSAhPSBBUlJBWV9CVUZGRVI7XG4gIH0pKSB7XG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IEJhc2VCdWZmZXIodG9JbmRleChsZW5ndGgpKTtcbiAgICB9O1xuICAgIHZhciBBcnJheUJ1ZmZlclByb3RvID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBCYXNlQnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIGhpZGUoJEFycmF5QnVmZmVyLCBrZXksIEJhc2VCdWZmZXJba2V5XSk7XG4gICAgfVxuICAgIGlmICghTElCUkFSWSkgQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSAkRGF0YVZpZXdbUFJPVE9UWVBFXS5zZXRJbnQ4O1xuICB2aWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHZpZXcuZ2V0SW50OCgwKSB8fCAhdmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuaGlkZSgkRGF0YVZpZXdbUFJPVE9UWVBFXSwgJHR5cGVkLlZJRVcsIHRydWUpO1xuZXhwb3J0c1tBUlJBWV9CVUZGRVJdID0gJEFycmF5QnVmZmVyO1xuZXhwb3J0c1tEQVRBX1ZJRVddID0gJERhdGFWaWV3O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRZUEUpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgfHwgaXQuX3QgIT09IFRZUEUpIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iLCJleHBvcnRzLmYgPSByZXF1aXJlKCcuL193a3MnKTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluZ3IvUmV4RXhwLmVzY2FwZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmUgPSByZXF1aXJlKCcuL19yZXBsYWNlcicpKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZ0V4cCcsIHsgZXNjYXBlOiBmdW5jdGlvbiBlc2NhcGUoaXQpIHsgcmV0dXJuICRyZShpdCk7IH0gfSk7XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGNvcHlXaXRoaW46IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdjb3B5V2l0aGluJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmV2ZXJ5LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNSAvIDE1LjQuNC4xNiBBcnJheS5wcm90b3R5cGUuZXZlcnkoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDIpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZmlsdGVyLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNyAvIDE1LjQuNC4yMCBBcnJheS5wcm90b3R5cGUuZmlsdGVyKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOSBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNik7XG52YXIgS0VZID0gJ2ZpbmRJbmRleCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciBTVFJJQ1QgPSByZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZm9yRWFjaCwgdHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIVNUUklDVCwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTAgLyAxNS40LjQuMTggQXJyYXkucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmpvaW4oc2VwYXJhdG9yKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlKb2luID0gW10uam9pbjtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIHN0cmluZ3NcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKHJlcXVpcmUoJy4vX2lvYmplY3QnKSAhPSBPYmplY3QgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0b0lPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciAkbmF0aXZlID0gW10ubGFzdEluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmxhc3RJbmRleE9mKDEsIC0wKSA8IDA7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKE5FR0FUSVZFX1pFUk8gfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE0IC8gMTUuNC40LjE1IEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gQFsqLTFdICovKSB7XG4gICAgLy8gY29udmVydCAtMCB0byArMFxuICAgIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDA7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICAgIGlmIChpbmRleCA8IDApIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gICAgZm9yICg7aW5kZXggPj0gMDsgaW5kZXgtLSkgaWYgKGluZGV4IGluIE8pIGlmIChPW2luZGV4XSA9PT0gc2VhcmNoRWxlbWVudCkgcmV0dXJuIGluZGV4IHx8IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgxKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLm1hcCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE1IC8gMTUuNC40LjE5IEFycmF5LnByb3RvdHlwZS5tYXAoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gV2ViS2l0IEFycmF5Lm9mIGlzbid0IGdlbmVyaWNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEoQXJyYXkub2YuY2FsbChGKSBpbnN0YW5jZW9mIEYpO1xufSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjMgQXJyYXkub2YoIC4uLml0ZW1zKVxuICBvZjogZnVuY3Rpb24gb2YoLyogLi4uYXJncyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXkpKGFMZW4pO1xuICAgIHdoaWxlIChhTGVuID4gaW5kZXgpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGFMZW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiIsIi8vIDIwLjMuMy4xIC8gMTUuOS40LjQgRGF0ZS5ub3coKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdEYXRlJywgeyBub3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9IH0pO1xuIiwiLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JU09TdHJpbmcgPSByZXF1aXJlKCcuL19kYXRlLXRvLWlzby1zdHJpbmcnKTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyAhPT0gdG9JU09TdHJpbmcpLCAnRGF0ZScsIHtcbiAgdG9JU09TdHJpbmc6IHRvSVNPU3RyaW5nXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IERhdGUoTmFOKS50b0pTT04oKSAhPT0gbnVsbFxuICAgIHx8IERhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHsgdG9JU09TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0gfSkgIT09IDE7XG59KSwgJ0RhdGUnLCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwdiA9IHRvUHJpbWl0aXZlKE8pO1xuICAgIHJldHVybiB0eXBlb2YgcHYgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHB2KSA/IG51bGwgOiBPLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn0pO1xuIiwidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiIsInZhciBEYXRlUHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IERhdGVQcm90b1tUT19TVFJJTkddO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG8uZ2V0VGltZTtcbmlmIChuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoRGF0ZVByb3RvLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cbiIsIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIEhBU19JTlNUQU5DRSA9IHJlcXVpcmUoJy4vX3drcycpKCdoYXNJbnN0YW5jZScpO1xudmFyIEZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyAxOS4yLjMuNiBGdW5jdGlvbi5wcm90b3R5cGVbQEBoYXNJbnN0YW5jZV0oVilcbmlmICghKEhBU19JTlNUQU5DRSBpbiBGdW5jdGlvblByb3RvKSkgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihGdW5jdGlvblByb3RvLCBIQVNfSU5TVEFOQ0UsIHsgdmFsdWU6IGZ1bmN0aW9uIChPKSB7XG4gIGlmICh0eXBlb2YgdGhpcyAhPSAnZnVuY3Rpb24nIHx8ICFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWlzT2JqZWN0KHRoaXMucHJvdG90eXBlKSkgcmV0dXJuIE8gaW5zdGFuY2VvZiB0aGlzO1xuICAvLyBmb3IgZW52aXJvbm1lbnQgdy9vIG5hdGl2ZSBgQEBoYXNJbnN0YW5jZWAgbG9naWMgZW5vdWdoIGBpbnN0YW5jZW9mYCwgYnV0IGFkZCB0aGlzOlxuICB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKSBpZiAodGhpcy5wcm90b3R5cGUgPT09IE8pIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59IH0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiIsIi8vIDIwLjIuMi4zIE1hdGguYWNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbG9nMXAgPSByZXF1aXJlKCcuL19tYXRoLWxvZzFwJyk7XG52YXIgc3FydCA9IE1hdGguc3FydDtcbnZhciAkYWNvc2ggPSBNYXRoLmFjb3NoO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFjb3NoXG4gIC8vIFY4IGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM1MDlcbiAgJiYgTWF0aC5mbG9vcigkYWNvc2goTnVtYmVyLk1BWF9WQUxVRSkpID09IDcxMFxuICAvLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYWNvc2goSW5maW5pdHkpIC0+IE5hTlxuICAmJiAkYWNvc2goSW5maW5pdHkpID09IEluZmluaXR5XG4pLCAnTWF0aCcsIHtcbiAgYWNvc2g6IGZ1bmN0aW9uIGFjb3NoKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPCAxID8gTmFOIDogeCA+IDk0OTA2MjY1LjYyNDI1MTU2XG4gICAgICA/IE1hdGgubG9nKHgpICsgTWF0aC5MTjJcbiAgICAgIDogbG9nMXAoeCAtIDEgKyBzcXJ0KHggLSAxKSAqIHNxcnQoeCArIDEpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuNSBNYXRoLmFzaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhc2luaCA9IE1hdGguYXNpbmg7XG5cbmZ1bmN0aW9uIGFzaW5oKHgpIHtcbiAgcmV0dXJuICFpc0Zpbml0ZSh4ID0gK3gpIHx8IHggPT0gMCA/IHggOiB4IDwgMCA/IC1hc2luaCgteCkgOiBNYXRoLmxvZyh4ICsgTWF0aC5zcXJ0KHggKiB4ICsgMSkpO1xufVxuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXNpbmgoMCkgLT4gLTBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXNpbmggJiYgMSAvICRhc2luaCgwKSA+IDApLCAnTWF0aCcsIHsgYXNpbmg6IGFzaW5oIH0pO1xuIiwiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuOSBNYXRoLmNicnQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNicnQ6IGZ1bmN0aW9uIGNicnQoeCkge1xuICAgIHJldHVybiBzaWduKHggPSAreCkgKiBNYXRoLnBvdyhNYXRoLmFicyh4KSwgMSAvIDMpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMSBNYXRoLmNsejMyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsejMyOiBmdW5jdGlvbiBjbHozMih4KSB7XG4gICAgcmV0dXJuICh4ID4+Pj0gMCkgPyAzMSAtIE1hdGguZmxvb3IoTWF0aC5sb2coeCArIDAuNSkgKiBNYXRoLkxPRzJFKSA6IDMyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMiBNYXRoLmNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY29zaDogZnVuY3Rpb24gY29zaCh4KSB7XG4gICAgcmV0dXJuIChleHAoeCA9ICt4KSArIGV4cCgteCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCRleHBtMSAhPSBNYXRoLmV4cG0xKSwgJ01hdGgnLCB7IGV4cG0xOiAkZXhwbTEgfSk7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgZnJvdW5kOiByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpIH0pO1xuIiwiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTggTWF0aC5pbXVsKHgsIHkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbXVsID0gTWF0aC5pbXVsO1xuXG4vLyBzb21lIFdlYktpdCB2ZXJzaW9ucyBmYWlscyB3aXRoIGJpZyBudW1iZXJzLCBzb21lIGhhcyB3cm9uZyBhcml0eVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRpbXVsKDB4ZmZmZmZmZmYsIDUpICE9IC01IHx8ICRpbXVsLmxlbmd0aCAhPSAyO1xufSksICdNYXRoJywge1xuICBpbXVsOiBmdW5jdGlvbiBpbXVsKHgsIHkpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciB4biA9ICt4O1xuICAgIHZhciB5biA9ICt5O1xuICAgIHZhciB4bCA9IFVJTlQxNiAmIHhuO1xuICAgIHZhciB5bCA9IFVJTlQxNiAmIHluO1xuICAgIHJldHVybiAwIHwgeGwgKiB5bCArICgoVUlOVDE2ICYgeG4gPj4+IDE2KSAqIHlsICsgeGwgKiAoVUlOVDE2ICYgeW4gPj4+IDE2KSA8PCAxNiA+Pj4gMCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjIxIE1hdGgubG9nMTAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMTA6IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgKiBNYXRoLkxPRzEwRTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBsb2cxcDogcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpIH0pO1xuIiwiLy8gMjAuMi4yLjIyIE1hdGgubG9nMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cyOiBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ246IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpIH0pO1xuIiwiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjM0IE1hdGgudHJ1bmMoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdHJ1bmM6IGZ1bmN0aW9uIHRydW5jKGl0KSB7XG4gICAgcmV0dXJuIChpdCA+IDAgPyBNYXRoLmZsb29yIDogTWF0aC5jZWlsKShpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiLy8gMjAuMS4yLjEgTnVtYmVyLkVQU0lMT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBFUFNJTE9OOiBNYXRoLnBvdygyLCAtNTIpIH0pO1xuIiwiLy8gMjAuMS4yLjIgTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgX2lzRmluaXRlID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuaXNGaW5pdGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc0Zpbml0ZTogZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGl0ID09ICdudW1iZXInICYmIF9pc0Zpbml0ZShpdCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgaXNJbnRlZ2VyOiByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJykgfSk7XG4iLCIvLyAyMC4xLjIuNCBOdW1iZXIuaXNOYU4obnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiIsIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAyMC4xLjIuMTIgTnVtYmVyLnBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCAnTnVtYmVyJywgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyICR0b0ZpeGVkID0gMS4wLnRvRml4ZWQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGRhdGEgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG52YXIgRVJST1IgPSAnTnVtYmVyLnRvRml4ZWQ6IGluY29ycmVjdCBpbnZvY2F0aW9uISc7XG52YXIgWkVSTyA9ICcwJztcblxudmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKG4sIGMpIHtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGMyID0gYztcbiAgd2hpbGUgKCsraSA8IDYpIHtcbiAgICBjMiArPSBuICogZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gYzIgJSAxZTc7XG4gICAgYzIgPSBmbG9vcihjMiAvIDFlNyk7XG4gIH1cbn07XG52YXIgZGl2aWRlID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgYyA9IDA7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGMgKz0gZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gZmxvb3IoYyAvIG4pO1xuICAgIGMgPSAoYyAlIG4pICogMWU3O1xuICB9XG59O1xudmFyIG51bVRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaSA9IDY7XG4gIHZhciBzID0gJyc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGlmIChzICE9PSAnJyB8fCBpID09PSAwIHx8IGRhdGFbaV0gIT09IDApIHtcbiAgICAgIHZhciB0ID0gU3RyaW5nKGRhdGFbaV0pO1xuICAgICAgcyA9IHMgPT09ICcnID8gdCA6IHMgKyByZXBlYXQuY2FsbChaRVJPLCA3IC0gdC5sZW5ndGgpICsgdDtcbiAgICB9XG4gIH0gcmV0dXJuIHM7XG59O1xudmFyIHBvdyA9IGZ1bmN0aW9uICh4LCBuLCBhY2MpIHtcbiAgcmV0dXJuIG4gPT09IDAgPyBhY2MgOiBuICUgMiA9PT0gMSA/IHBvdyh4LCBuIC0gMSwgYWNjICogeCkgOiBwb3coeCAqIHgsIG4gLyAyLCBhY2MpO1xufTtcbnZhciBsb2cgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbiA9IDA7XG4gIHZhciB4MiA9IHg7XG4gIHdoaWxlICh4MiA+PSA0MDk2KSB7XG4gICAgbiArPSAxMjtcbiAgICB4MiAvPSA0MDk2O1xuICB9XG4gIHdoaWxlICh4MiA+PSAyKSB7XG4gICAgbiArPSAxO1xuICAgIHgyIC89IDI7XG4gIH0gcmV0dXJuIG47XG59O1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICghISR0b0ZpeGVkICYmIChcbiAgMC4wMDAwOC50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8XG4gIDAuOS50b0ZpeGVkKDApICE9PSAnMScgfHxcbiAgMS4yNTUudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8XG4gIDEwMDAwMDAwMDAwMDAwMDAxMjguMC50b0ZpeGVkKDApICE9PSAnMTAwMDAwMDAwMDAwMDAwMDEyOCdcbikgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9GaXhlZC5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykge1xuICAgIHZhciB4ID0gYU51bWJlclZhbHVlKHRoaXMsIEVSUk9SKTtcbiAgICB2YXIgZiA9IHRvSW50ZWdlcihmcmFjdGlvbkRpZ2l0cyk7XG4gICAgdmFyIHMgPSAnJztcbiAgICB2YXIgbSA9IFpFUk87XG4gICAgdmFyIGUsIHosIGosIGs7XG4gICAgaWYgKGYgPCAwIHx8IGYgPiAyMCkgdGhyb3cgUmFuZ2VFcnJvcihFUlJPUik7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmICh4ICE9IHgpIHJldHVybiAnTmFOJztcbiAgICBpZiAoeCA8PSAtMWUyMSB8fCB4ID49IDFlMjEpIHJldHVybiBTdHJpbmcoeCk7XG4gICAgaWYgKHggPCAwKSB7XG4gICAgICBzID0gJy0nO1xuICAgICAgeCA9IC14O1xuICAgIH1cbiAgICBpZiAoeCA+IDFlLTIxKSB7XG4gICAgICBlID0gbG9nKHggKiBwb3coMiwgNjksIDEpKSAtIDY5O1xuICAgICAgeiA9IGUgPCAwID8geCAqIHBvdygyLCAtZSwgMSkgOiB4IC8gcG93KDIsIGUsIDEpO1xuICAgICAgeiAqPSAweDEwMDAwMDAwMDAwMDAwO1xuICAgICAgZSA9IDUyIC0gZTtcbiAgICAgIGlmIChlID4gMCkge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgaiA9IGY7XG4gICAgICAgIHdoaWxlIChqID49IDcpIHtcbiAgICAgICAgICBtdWx0aXBseSgxZTcsIDApO1xuICAgICAgICAgIGogLT0gNztcbiAgICAgICAgfVxuICAgICAgICBtdWx0aXBseShwb3coMTAsIGosIDEpLCAwKTtcbiAgICAgICAgaiA9IGUgLSAxO1xuICAgICAgICB3aGlsZSAoaiA+PSAyMykge1xuICAgICAgICAgIGRpdmlkZSgxIDw8IDIzKTtcbiAgICAgICAgICBqIC09IDIzO1xuICAgICAgICB9XG4gICAgICAgIGRpdmlkZSgxIDw8IGopO1xuICAgICAgICBtdWx0aXBseSgxLCAxKTtcbiAgICAgICAgZGl2aWRlKDIpO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBtdWx0aXBseSgxIDw8IC1lLCAwKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCkgKyByZXBlYXQuY2FsbChaRVJPLCBmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGYgPiAwKSB7XG4gICAgICBrID0gbS5sZW5ndGg7XG4gICAgICBtID0gcyArIChrIDw9IGYgPyAnMC4nICsgcmVwZWF0LmNhbGwoWkVSTywgZiAtIGspICsgbSA6IG0uc2xpY2UoMCwgayAtIGYpICsgJy4nICsgbS5zbGljZShrIC0gZikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gcyArIG07XG4gICAgfSByZXR1cm4gbTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciAkdG9QcmVjaXNpb24gPSAxLjAudG9QcmVjaXNpb247XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFNy1cbiAgcmV0dXJuICR0b1ByZWNpc2lvbi5jYWxsKDEsIHVuZGVmaW5lZCkgIT09ICcxJztcbn0pIHx8ICEkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9QcmVjaXNpb24uY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihwcmVjaXNpb24pIHtcbiAgICB2YXIgdGhhdCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCAnTnVtYmVyI3RvUHJlY2lzaW9uOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgICByZXR1cm4gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAkdG9QcmVjaXNpb24uY2FsbCh0aGF0KSA6ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQsIHByZWNpc2lvbik7XG4gIH1cbn0pO1xuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMyAvIDE1LjIuMy43IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19vYmplY3QtZHBzJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbiAoJGZyZWV6ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlOYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpLmY7XG59KTtcbiIsIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMSBPYmplY3QuaXNFeHRlbnNpYmxlKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0V4dGVuc2libGUnLCBmdW5jdGlvbiAoJGlzRXh0ZW5zaWJsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWUgOiBmYWxzZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjEyIE9iamVjdC5pc0Zyb3plbihPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNGcm96ZW4nLCBmdW5jdGlvbiAoJGlzRnJvemVuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0Zyb3plbihpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNGcm96ZW4gPyAkaXNGcm96ZW4oaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTMgT2JqZWN0LmlzU2VhbGVkKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc1NlYWxlZCcsIGZ1bmN0aW9uICgkaXNTZWFsZWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzU2VhbGVkKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc1NlYWxlZCA/ICRpc1NlYWxlZChpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xMCBPYmplY3QuaXModmFsdWUxLCB2YWx1ZTIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGlzOiByZXF1aXJlKCcuL19zYW1lLXZhbHVlJykgfSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTUgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3ByZXZlbnRFeHRlbnNpb25zJywgZnVuY3Rpb24gKCRwcmV2ZW50RXh0ZW5zaW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMoaXQpIHtcbiAgICByZXR1cm4gJHByZXZlbnRFeHRlbnNpb25zICYmIGlzT2JqZWN0KGl0KSA/ICRwcmV2ZW50RXh0ZW5zaW9ucyhtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE3IE9iamVjdC5zZWFsKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3NlYWwnLCBmdW5jdGlvbiAoJHNlYWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIHRlc3QgPSB7fTtcbnRlc3RbcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gIH0sIHRydWUpO1xufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAxOC4yLjUgcGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlSW50ICE9ICRwYXJzZUludCksIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xIFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHJBcHBseSA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5hcHBseTtcbnZhciBmQXBwbHkgPSBGdW5jdGlvbi5hcHBseTtcbi8vIE1TIEVkZ2UgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJBcHBseShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICB2YXIgVCA9IGFGdW5jdGlvbih0YXJnZXQpO1xuICAgIHZhciBMID0gYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIHJBcHBseSA/IHJBcHBseShULCB0aGlzQXJndW1lbnQsIEwpIDogZkFwcGx5LmNhbGwoVCwgdGhpc0FyZ3VtZW50LCBMKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjIgUmVmbGVjdC5jb25zdHJ1Y3QodGFyZ2V0LCBhcmd1bWVudHNMaXN0IFssIG5ld1RhcmdldF0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9fYmluZCcpO1xudmFyIHJDb25zdHJ1Y3QgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuY29uc3RydWN0O1xuXG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShyQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRyksICdSZWZsZWN0Jywge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhRnVuY3Rpb24oVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhRnVuY3Rpb24oYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gckNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICAkYXJncy5wdXNoLmFwcGx5KCRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGJpbmQuYXBwbHkoVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IEZ1bmN0aW9uLmFwcGx5LmNhbGwoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjQgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICB2YXIgZGVzYyA9IGdPUEQoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICAgIHJldHVybiBkZXNjICYmICFkZXNjLmNvbmZpZ3VyYWJsZSA/IGZhbHNlIDogZGVsZXRlIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdldFByb3RvID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjYgUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSBbLCByZWNlaXZlcl0pXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuZnVuY3Rpb24gZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IGFyZ3VtZW50c1syXTtcbiAgdmFyIGRlc2MsIHByb3RvO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBpZiAoZGVzYyA9IGdPUEQuZih0YXJnZXQsIHByb3BlcnR5S2V5KSkgcmV0dXJuIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgID8gZGVzYy52YWx1ZVxuICAgIDogZGVzYy5nZXQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSByZXR1cm4gZ2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IGdldDogZ2V0IH0pO1xuIiwiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTAgUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGlzRXh0ZW5zaWJsZTogZnVuY3Rpb24gaXNFeHRlbnNpYmxlKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKHRhcmdldCkgOiB0cnVlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiIsIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuMTMgUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViBbLCByZWNlaXZlcl0pXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIHNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDQgPyB0YXJnZXQgOiBhcmd1bWVudHNbM107XG4gIHZhciBvd25EZXNjID0gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgdmFyIGV4aXN0aW5nRGVzY3JpcHRvciwgcHJvdG87XG4gIGlmICghb3duRGVzYykge1xuICAgIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSB7XG4gICAgICByZXR1cm4gc2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgViwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgICBvd25EZXNjID0gY3JlYXRlRGVzYygwKTtcbiAgfVxuICBpZiAoaGFzKG93bkRlc2MsICd2YWx1ZScpKSB7XG4gICAgaWYgKG93bkRlc2Mud3JpdGFibGUgPT09IGZhbHNlIHx8ICFpc09iamVjdChyZWNlaXZlcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yID0gZ09QRC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSkpIHtcbiAgICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IuZ2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci5zZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLndyaXRhYmxlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgZXhpc3RpbmdEZXNjcmlwdG9yLnZhbHVlID0gVjtcbiAgICAgIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBleGlzdGluZ0Rlc2NyaXB0b3IpO1xuICAgIH0gZWxzZSBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgY3JlYXRlRGVzYygwLCBWKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG93bkRlc2Muc2V0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IChvd25EZXNjLnNldC5jYWxsKHJlY2VpdmVyLCBWKSwgdHJ1ZSk7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgc2V0OiBzZXQgfSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xudmFyIEJhc2UgPSAkUmVnRXhwO1xudmFyIHByb3RvID0gJFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgcmUxID0gL2EvZztcbnZhciByZTIgPSAvYS9nO1xuLy8gXCJuZXdcIiBjcmVhdGVzIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdneSBoZXJlXG52YXIgQ09SUkVDVF9ORVcgPSBuZXcgJFJlZ0V4cChyZTEpICE9PSByZTE7XG5cbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICghQ09SUkVDVF9ORVcgfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJlMltyZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKV0gPSBmYWxzZTtcbiAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgcmV0dXJuICRSZWdFeHAocmUxKSAhPSByZTEgfHwgJFJlZ0V4cChyZTIpID09IHJlMiB8fCAkUmVnRXhwKHJlMSwgJ2knKSAhPSAnL2EvaSc7XG59KSkpIHtcbiAgJFJlZ0V4cCA9IGZ1bmN0aW9uIFJlZ0V4cChwLCBmKSB7XG4gICAgdmFyIHRpUkUgPSB0aGlzIGluc3RhbmNlb2YgJFJlZ0V4cDtcbiAgICB2YXIgcGlSRSA9IGlzUmVnRXhwKHApO1xuICAgIHZhciBmaVUgPSBmID09PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICF0aVJFICYmIHBpUkUgJiYgcC5jb25zdHJ1Y3RvciA9PT0gJFJlZ0V4cCAmJiBmaVUgPyBwXG4gICAgICA6IGluaGVyaXRJZlJlcXVpcmVkKENPUlJFQ1RfTkVXXG4gICAgICAgID8gbmV3IEJhc2UocGlSRSAmJiAhZmlVID8gcC5zb3VyY2UgOiBwLCBmKVxuICAgICAgICA6IEJhc2UoKHBpUkUgPSBwIGluc3RhbmNlb2YgJFJlZ0V4cCkgPyBwLnNvdXJjZSA6IHAsIHBpUkUgJiYgZmlVID8gJGZsYWdzLmNhbGwocCkgOiBmKVxuICAgICAgLCB0aVJFID8gdGhpcyA6IHByb3RvLCAkUmVnRXhwKTtcbiAgfTtcbiAgdmFyIHByb3h5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSBpbiAkUmVnRXhwIHx8IGRQKCRSZWdFeHAsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCYXNlW2tleV07IH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBCYXNlW2tleV0gPSBpdDsgfVxuICAgIH0pO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlKSwgaSA9IDA7IGtleXMubGVuZ3RoID4gaTspIHByb3h5KGtleXNbaSsrXSk7XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJFJlZ0V4cDtcbiAgJFJlZ0V4cC5wcm90b3R5cGUgPSBwcm90bztcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsICdSZWdFeHAnLCAkUmVnRXhwKTtcbn1cblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnUmVnRXhwJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIiwiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmYCddfFxcZFxcZD98PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmYCddfFxcZFxcZD8pL2c7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3JlcGxhY2UnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgUkVQTEFDRSwgJHJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGZuLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiAkcmVwbGFjZS5jYWxsKFN0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChyZWdleHAsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkcmVwbGFjZSwgcmVnZXhwLCB0aGlzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnZnVuY3Rpb24nO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxuICBmdW5jdGlvbiBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICAgIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICAgIH1cbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuL19zYW1lLXZhbHVlJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NlYXJjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBTRUFSQ0gsICRzZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzZWFyY2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRzZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgcHJldmlvdXNMYXN0SW5kZXggPSByeC5sYXN0SW5kZXg7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShwcmV2aW91c0xhc3RJbmRleCwgMCkpIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShyeC5sYXN0SW5kZXgsIHByZXZpb3VzTGFzdEluZGV4KSkgcngubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gLTEgOiByZXN1bHQuaW5kZXg7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRtaW4gPSBNYXRoLm1pbjtcbnZhciAkcHVzaCA9IFtdLnB1c2g7XG52YXIgJFNQTElUID0gJ3NwbGl0JztcbnZhciBMRU5HVEggPSAnbGVuZ3RoJztcbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG52YXIgTUFYX1VJTlQzMiA9IDB4ZmZmZmZmZmY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IFJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBTUExJVCwgJHNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYydbJFNQTElUXSgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0J1skU1BMSVRdKC8oPzopLywgLTEpW0xFTkdUSF0gIT0gNCB8fFxuICAgICdhYidbJFNQTElUXSgvKD86YWIpKi8pW0xFTkdUSF0gIT0gMiB8fFxuICAgICcuJ1skU1BMSVRdKC8oLj8pKC4/KS8pW0xFTkdUSF0gIT0gNCB8fFxuICAgICcuJ1skU1BMSVRdKC8oKSgpLylbTEVOR1RIXSA+IDEgfHxcbiAgICAnJ1skU1BMSVRdKC8uPy8pW0xFTkdUSF1cbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gJHNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkgJHB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0W0xFTkdUSF0gPj0gc3BsaXRMaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0gPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdKys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCdbJFNQTElUXSh1bmRlZmluZWQsIDApW0xFTkdUSF0pIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogJHNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gJHNwbGl0O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09ICRzcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9ICRtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gLy4vW1RPX1NUUklOR107XG5cbnZhciBkZWZpbmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmIChyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KSkge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gJy8nLmNvbmNhdChSLnNvdXJjZSwgJy8nLFxuICAgICAgJ2ZsYWdzJyBpbiBSID8gUi5mbGFncyA6ICFERVNDUklQVE9SUyAmJiBSIGluc3RhbmNlb2YgUmVnRXhwID8gJGZsYWdzLmNhbGwoUikgOiB1bmRlZmluZWQpO1xuICB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG59IGVsc2UgaWYgKCR0b1N0cmluZy5uYW1lICE9IFRPX1NUUklORykge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNFVCA9ICdTZXQnO1xuXG4vLyAyMy4yIFNldCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShTRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIFNFVCksIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjIgU3RyaW5nLnByb3RvdHlwZS5hbmNob3IobmFtZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2FuY2hvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBhbmNob3IobmFtZSkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ25hbWUnLCBuYW1lKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNSBTdHJpbmcucHJvdG90eXBlLmJvbGQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYm9sZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBib2xkKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKShmYWxzZSk7XG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjMgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdChwb3MpXG4gIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOCBTdHJpbmcucHJvdG90eXBlLmZvbnRzaXplKHNpemUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmb250c2l6ZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250c2l6ZShzaXplKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnc2l6ZScsIHNpemUpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAoYUxlbiA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICByZXMucHVzaChjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG4gICAgICApO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBJTkNMVURFUyA9ICdpbmNsdWRlcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUylcbiAgICAgIC5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTAgU3RyaW5nLnByb3RvdHlwZS5saW5rKHVybClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2xpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gbGluayh1cmwpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICdocmVmJywgdXJsKTtcbiAgfTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi40IFN0cmluZy5yYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpXG4gIHJhdzogZnVuY3Rpb24gcmF3KGNhbGxTaXRlKSB7XG4gICAgdmFyIHRwbCA9IHRvSU9iamVjdChjYWxsU2l0ZS5yYXcpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0cGwubGVuZ3RoKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAobGVuID4gaSkge1xuICAgICAgcmVzLnB1c2goU3RyaW5nKHRwbFtpKytdKSk7XG4gICAgICBpZiAoaSA8IGFMZW4pIHJlcy5wdXNoKFN0cmluZyhhcmd1bWVudHNbaV0pKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTEgU3RyaW5nLnByb3RvdHlwZS5zbWFsbCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzbWFsbCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzbWFsbCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc21hbGwnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMiBTdHJpbmcucHJvdG90eXBlLnN0cmlrZSgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdHJpa2UnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3RyaWtlKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdHJpa2UnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMyBTdHJpbmcucHJvdG90eXBlLnN1YigpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdWInLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3ViKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdWInLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xNCBTdHJpbmcucHJvdG90eXBlLnN1cCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdXAnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3VwKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdXAnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4xLjMuMjUgU3RyaW5nLnByb3RvdHlwZS50cmltKClcbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIEFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuQXJyYXlCdWZmZXI7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyICRBcnJheUJ1ZmZlciA9IGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbnZhciAkRGF0YVZpZXcgPSBidWZmZXIuRGF0YVZpZXc7XG52YXIgJGlzVmlldyA9ICR0eXBlZC5BQlYgJiYgQXJyYXlCdWZmZXIuaXNWaWV3O1xudmFyICRzbGljZSA9ICRBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG52YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEFycmF5QnVmZmVyICE9PSAkQXJyYXlCdWZmZXIpLCB7IEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISR0eXBlZC5DT05TVFIsIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjMuMSBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJnKVxuICBpc1ZpZXc6IGZ1bmN0aW9uIGlzVmlldyhpdCkge1xuICAgIHJldHVybiAkaXNWaWV3ICYmICRpc1ZpZXcoaXQpIHx8IGlzT2JqZWN0KGl0KSAmJiBWSUVXIGluIGl0O1xuICB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlUgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFuZXcgJEFycmF5QnVmZmVyKDIpLnNsaWNlKDEsIHVuZGVmaW5lZCkuYnl0ZUxlbmd0aDtcbn0pLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS40LjMgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgaWYgKCRzbGljZSAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJHNsaWNlLmNhbGwoYW5PYmplY3QodGhpcyksIHN0YXJ0KTsgLy8gRkYgZml4XG4gICAgdmFyIGxlbiA9IGFuT2JqZWN0KHRoaXMpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIGZpcnN0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQsIGxlbik7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRBcnJheUJ1ZmZlcikpKHRvTGVuZ3RoKGZpbiAtIGZpcnN0KSk7XG4gICAgdmFyIHZpZXdTID0gbmV3ICREYXRhVmlldyh0aGlzKTtcbiAgICB2YXIgdmlld1QgPSBuZXcgJERhdGFWaWV3KHJlc3VsdCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoZmlyc3QgPCBmaW4pIHtcbiAgICAgIHZpZXdULnNldFVpbnQ4KGluZGV4KyssIHZpZXdTLmdldFVpbnQ4KGZpcnN0KyspKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKEFSUkFZX0JVRkZFUik7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0NjQnLCA4LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQ2NEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhDbGFtcGVkQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0sIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBJU19JRTExID0gIWdsb2JhbC5BY3RpdmVYT2JqZWN0ICYmICdBY3RpdmVYT2JqZWN0JyBpbiBnbG9iYWw7XG52YXIgV0VBS19NQVAgPSAnV2Vha01hcCc7XG52YXIgZ2V0V2VhayA9IG1ldGEuZ2V0V2VhaztcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSB3ZWFrLnVmc3RvcmU7XG52YXIgSW50ZXJuYWxNYXA7XG5cbnZhciB3cmFwcGVyID0gZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbnZhciBtZXRob2RzID0ge1xuICAvLyAyMy4zLjMuMyBXZWFrTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgV0VBS19NQVApKS5nZXQoa2V5KTtcbiAgICAgIHJldHVybiBkYXRhID8gZGF0YVt0aGlzLl9pXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sXG4gIC8vIDIzLjMuMy41IFdlYWtNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSwga2V5LCB2YWx1ZSk7XG4gIH1cbn07XG5cbi8vIDIzLjMgV2Vha01hcCBPYmplY3RzXG52YXIgJFdlYWtNYXAgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX01BUCwgd3JhcHBlciwgbWV0aG9kcywgd2VhaywgdHJ1ZSwgdHJ1ZSk7XG5cbi8vIElFMTEgV2Vha01hcCBmcm96ZW4ga2V5cyBmaXhcbmlmIChOQVRJVkVfV0VBS19NQVAgJiYgSVNfSUUxMSkge1xuICBJbnRlcm5hbE1hcCA9IHdlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgV0VBS19NQVApO1xuICBhc3NpZ24oSW50ZXJuYWxNYXAucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgZWFjaChbJ2RlbGV0ZScsICdoYXMnLCAnZ2V0JywgJ3NldCddLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHByb3RvID0gJFdlYWtNYXAucHJvdG90eXBlO1xuICAgIHZhciBtZXRob2QgPSBwcm90b1trZXldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBrZXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAvLyBzdG9yZSBmcm96ZW4gb2JqZWN0cyBvbiBpbnRlcm5hbCB3ZWFrbWFwIHNoaW1cbiAgICAgIGlmIChpc09iamVjdChhKSAmJiAhaXNFeHRlbnNpYmxlKGEpKSB7XG4gICAgICAgIGlmICghdGhpcy5fZikgdGhpcy5fZiA9IG5ldyBJbnRlcm5hbE1hcCgpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZltrZXldKGEsIGIpO1xuICAgICAgICByZXR1cm4ga2V5ID09ICdzZXQnID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIC8vIHN0b3JlIGFsbCB0aGUgcmVzdCBvbiBuYXRpdmUgd2Vha21hcFxuICAgICAgfSByZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgYSwgYik7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBXRUFLX1NFVCA9ICdXZWFrU2V0JztcblxuLy8gMjMuNCBXZWFrU2V0IE9iamVjdHNcbnJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX1NFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha1NldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjQuMy4xIFdlYWtTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19TRVQpLCB2YWx1ZSwgdHJ1ZSk7XG4gIH1cbn0sIHdlYWssIGZhbHNlLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0TWFwXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXRNYXA6IGZ1bmN0aW9uIGZsYXRNYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4sIEE7XG4gICAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICAgIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCAxLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXRNYXAnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0dGVuXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXR0ZW46IGZ1bmN0aW9uIGZsYXR0ZW4oLyogZGVwdGhBcmcgPSAxICovKSB7XG4gICAgdmFyIGRlcHRoQXJnID0gYXJndW1lbnRzWzBdO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgZGVwdGhBcmcgPT09IHVuZGVmaW5lZCA/IDEgOiB0b0ludGVnZXIoZGVwdGhBcmcpKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0dGVuJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdpbmNsdWRlcycpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvcHJvcG9zYWwtaXMtZXJyb3JcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRXJyb3InLCB7XG4gIGlzRXJyb3I6IGZ1bmN0aW9uIGlzRXJyb3IoaXQpIHtcbiAgICByZXR1cm4gY29mKGl0KSA9PT0gJ0Vycm9yJztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ01hcCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnTWFwJykgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzY2FsZSA9IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKTtcbnZhciBmcm91bmQgPSByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGZzY2FsZTogZnVuY3Rpb24gZnNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICAgIHJldHVybiBmcm91bmQoc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaWFkZGg6IGZ1bmN0aW9uIGlhZGRoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSArICh5MSA+Pj4gMCkgKyAoKCR4MCAmICR5MCB8ICgkeDAgfCAkeTApICYgfigkeDAgKyAkeTAgPj4+IDApKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpbXVsaDogZnVuY3Rpb24gaW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+PiAxNik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaXN1Ymg6IGZ1bmN0aW9uIGlzdWJoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSAtICh5MSA+Pj4gMCkgLSAoKH4keDAgJiAkeTAgfCB+KCR4MCBeICR5MCkgJiAkeDAgLSAkeTAgPj4+IDApID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgUkFEX1BFUl9ERUc6IDE4MCAvIE1hdGguUEkgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIERFR19QRVJfUkFEID0gTWF0aC5QSSAvIDE4MDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICByYWRpYW5zOiBmdW5jdGlvbiByYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIERFR19QRVJfUkFEO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiIsIi8vIGh0dHA6Ly9qZmJhc3RpZW4uZ2l0aHViLmlvL3BhcGVycy9NYXRoLnNpZ25iaXQuaHRtbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduYml0OiBmdW5jdGlvbiBzaWduYml0KHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgIT0geCA/IHggOiB4ID09IDAgPyAxIC8geCA9PSBJbmZpbml0eSA6IHggPiAwO1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHVtdWxoOiBmdW5jdGlvbiB1bXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+Pj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+PiAxNik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG5cbi8vIEIuMi4yLjMgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcilcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2RlZmluZVNldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcikge1xuICAgICRkZWZpbmVQcm9wZXJ0eS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IHNldDogYUZ1bmN0aW9uKHNldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGVudHJpZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoaXQpIHtcbiAgICByZXR1cm4gJGVudHJpZXMoaXQpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuL19vd24ta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXREZXNjID0gZ09QRC5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXksIGRlc2M7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaSkge1xuICAgICAgZGVzYyA9IGdldERlc2MoTywga2V5ID0ga2V5c1tpKytdKTtcbiAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjQgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cEdldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBHZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBHZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5nZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjUgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cFNldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBTZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBTZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5zZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHZhbHVlcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKGZhbHNlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKGl0KSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIE9CU0VSVkFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnb2JzZXJ2YWJsZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIFJFVFVSTiA9IGZvck9mLlJFVFVSTjtcblxudmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZm4gPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFGdW5jdGlvbihmbik7XG59O1xuXG52YXIgY2xlYW51cFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdmFyIGNsZWFudXAgPSBzdWJzY3JpcHRpb24uX2M7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9jID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXAoKTtcbiAgfVxufTtcblxudmFyIHN1YnNjcmlwdGlvbkNsb3NlZCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbi5fbyA9PT0gdW5kZWZpbmVkO1xufTtcblxudmFyIGNsb3NlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgfVxufTtcblxudmFyIFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICBhbk9iamVjdChvYnNlcnZlcik7XG4gIHRoaXMuX2MgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX28gPSBvYnNlcnZlcjtcbiAgb2JzZXJ2ZXIgPSBuZXcgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIodGhpcyk7XG4gIHRyeSB7XG4gICAgdmFyIGNsZWFudXAgPSBzdWJzY3JpYmVyKG9ic2VydmVyKTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gY2xlYW51cDtcbiAgICBpZiAoY2xlYW51cCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgZWxzZSBhRnVuY3Rpb24oY2xlYW51cCk7XG4gICAgICB0aGlzLl9jID0gY2xlYW51cDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICByZXR1cm47XG4gIH0gaWYgKHN1YnNjcmlwdGlvbkNsb3NlZCh0aGlzKSkgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbn07XG5cblN1YnNjcmlwdGlvbi5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICB1bnN1YnNjcmliZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7IGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpOyB9XG59KTtcblxudmFyIFN1YnNjcmlwdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB0aGlzLl9zID0gc3Vic2NyaXB0aW9uO1xufTtcblxuU3Vic2NyaXB0aW9uT2JzZXJ2ZXIucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLm5leHQpO1xuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB0aHJvdyB2YWx1ZTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5lcnJvcik7XG4gICAgICBpZiAoIW0pIHRocm93IHZhbHVlO1xuICAgICAgdmFsdWUgPSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuY29tcGxldGUpO1xuICAgICAgICB2YWx1ZSA9IG0gPyBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudmFyICRPYnNlcnZhYmxlID0gZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmVyKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgJE9ic2VydmFibGUsICdPYnNlcnZhYmxlJywgJ19mJykuX2YgPSBhRnVuY3Rpb24oc3Vic2NyaWJlcik7XG59O1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIHtcbiAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fZik7XG4gIH0sXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyAoY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhRnVuY3Rpb24oZm4pO1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoYXQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbih2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlO1xuICAgIHZhciBtZXRob2QgPSBnZXRNZXRob2QoYW5PYmplY3QoeClbT0JTRVJWQUJMRV0pO1xuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIHZhciBvYnNlcnZhYmxlID0gYW5PYmplY3QobWV0aG9kLmNhbGwoeCkpO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMgPyBvYnNlcnZhYmxlIDogbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZm9yT2YoeCwgZmFsc2UsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0KTtcbiAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybiBSRVRVUk47XG4gICAgICAgICAgICB9KSA9PT0gUkVUVVJOKSByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHRocm93IGU7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH0sXG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZW1zID0gbmV3IEFycmF5KGwpOyBpIDwgbDspIGl0ZW1zW2ldID0gYXJndW1lbnRzW2krK107XG4gICAgcmV0dXJuIG5ldyAodHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGUpKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbal0pO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5oaWRlKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwgT0JTRVJWQUJMRSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IE9ic2VydmFibGU6ICRPYnNlcnZhYmxlIH0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdPYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWZpbmFsbHlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdQcm9taXNlJywgeyAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKTtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgfSA6IG9uRmluYWxseSxcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHlcbiAgKTtcbn0gfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIiwidmFyIFNldCA9IHJlcXVpcmUoJy4vZXM2LnNldCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG52YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5TWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgdmFyIG9LZXlzID0gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbCkgcmV0dXJuIG9LZXlzO1xuICB2YXIgcEtleXMgPSBvcmRpbmFyeU1ldGFkYXRhS2V5cyhwYXJlbnQsIFApO1xuICByZXR1cm4gcEtleXMubGVuZ3RoID8gb0tleXMubGVuZ3RoID8gZnJvbShuZXcgU2V0KG9LZXlzLmNvbmNhdChwS2V5cykpKSA6IHBLZXlzIDogb0tleXM7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5TWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1NldCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnU2V0JykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL1N0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGdldEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBSZWdFeHBQcm90byA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBmdW5jdGlvbiAocmVnZXhwLCBzdHJpbmcpIHtcbiAgdGhpcy5fciA9IHJlZ2V4cDtcbiAgdGhpcy5fcyA9IHN0cmluZztcbn07XG5cbnJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJykoJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLCAnUmVnRXhwIFN0cmluZycsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBtYXRjaCA9IHRoaXMuX3IuZXhlYyh0aGlzLl9zKTtcbiAgcmV0dXJuIHsgdmFsdWU6IG1hdGNoLCBkb25lOiBtYXRjaCA9PT0gbnVsbCB9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBtYXRjaEFsbDogZnVuY3Rpb24gbWF0Y2hBbGwocmVnZXhwKSB7XG4gICAgZGVmaW5lZCh0aGlzKTtcbiAgICBpZiAoIWlzUmVnRXhwKHJlZ2V4cCkpIHRocm93IFR5cGVFcnJvcihyZWdleHAgKyAnIGlzIG5vdCBhIHJlZ2V4cCEnKTtcbiAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICB2YXIgZmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cFByb3RvID8gU3RyaW5nKHJlZ2V4cC5mbGFncykgOiBnZXRGbGFncy5jYWxsKHJlZ2V4cCk7XG4gICAgdmFyIHJ4ID0gbmV3IFJlZ0V4cChyZWdleHAuc291cmNlLCB+ZmxhZ3MuaW5kZXhPZignZycpID8gZmxhZ3MgOiAnZycgKyBmbGFncyk7XG4gICAgcngubGFzdEluZGV4ID0gdG9MZW5ndGgocmVnZXhwLmxhc3RJbmRleCk7XG4gICAgcmV0dXJuIG5ldyAkUmVnRXhwU3RyaW5nSXRlcmF0b3IocngsIFMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltTGVmdCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbUxlZnQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDEpO1xuICB9O1xufSwgJ3RyaW1TdGFydCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbVJpZ2h0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltUmlnaHQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDIpO1xuICB9O1xufSwgJ3RyaW1FbmQnKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3lzdGVtJywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrU2V0Jyk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHRhc2sgPSByZXF1aXJlKCcuL190YXNrJyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiwge1xuICBzZXRJbW1lZGlhdGU6ICR0YXNrLnNldCxcbiAgY2xlYXJJbW1lZGlhdGU6ICR0YXNrLmNsZWFyXG59KTtcbiIsIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBnbG9iYWwucHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IGdsb2JhbC5wcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG4gIC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuICAvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXNcbik7XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICB2YXIgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCIvKiEgaWVlZTc1NC4gQlNELTMtQ2xhdXNlIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFRpbWVyIH0gZnJvbSAnLi9UaW1lci5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSA2MDsgLy8gc2Vjb25kc1xyXG5cclxuZXhwb3J0IGNsYXNzIEFjY2Vzc1Rva2VuRXZlbnRzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUsXHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyID0gbmV3IFRpbWVyKFwiQWNjZXNzIHRva2VuIGV4cGlyaW5nXCIpLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyID0gbmV3IFRpbWVyKFwiQWNjZXNzIHRva2VuIGV4cGlyZWRcIilcclxuICAgIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcgPSBhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXI7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkID0gYWNjZXNzVG9rZW5FeHBpcmVkVGltZXI7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZChjb250YWluZXIpIHtcclxuICAgICAgICAvLyBvbmx5IHJlZ2lzdGVyIGV2ZW50cyBpZiB0aGVyZSdzIGFuIGFjY2VzcyB0b2tlbiBhbmQgaXQgaGFzIGFuIGV4cGlyYXRpb25cclxuICAgICAgICBpZiAoY29udGFpbmVyLmFjY2Vzc190b2tlbiAmJiBjb250YWluZXIuZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IGNvbnRhaW5lci5leHBpcmVzX2luO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiBhY2Nlc3MgdG9rZW4gcHJlc2VudCwgcmVtYWluaW5nIGR1cmF0aW9uOlwiLCBkdXJhdGlvbik7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHVyYXRpb24gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBvbmx5IHJlZ2lzdGVyIGV4cGlyaW5nIGlmIHdlIHN0aWxsIGhhdmUgdGltZVxyXG4gICAgICAgICAgICAgICAgbGV0IGV4cGlyaW5nID0gZHVyYXRpb24gLSB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcclxuICAgICAgICAgICAgICAgIGlmIChleHBpcmluZyA8PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBleHBpcmluZyA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IHJlZ2lzdGVyaW5nIGV4cGlyaW5nIHRpbWVyIGluOlwiLCBleHBpcmluZyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmluaXQoZXhwaXJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogY2FuY2VsaW5nIGV4aXN0aW5nIGV4cGlyaW5nIHRpbWVyIGJlY2FzZSB3ZSdyZSBwYXN0IGV4cGlyYXRpb24uXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaWYgaXQncyBuZWdhdGl2ZSwgaXQgd2lsbCBzdGlsbCBmaXJlXHJcbiAgICAgICAgICAgIGxldCBleHBpcmVkID0gZHVyYXRpb24gKyAxO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiByZWdpc3RlcmluZyBleHBpcmVkIHRpbWVyIGluOlwiLCBleHBpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmluaXQoZXhwaXJlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQuY2FuY2VsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVubG9hZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy51bmxvYWQ6IGNhbmNlbGluZyBleGlzdGluZyBhY2Nlc3MgdG9rZW4gdGltZXJzXCIpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuY2FuY2VsKCk7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcoY2IpIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyhjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmNvbnN0IERlZmF1bHRJbnRlcnZhbCA9IDIwMDA7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hlY2tTZXNzaW9uSUZyYW1lIHtcclxuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCBjbGllbnRfaWQsIHVybCwgaW50ZXJ2YWwsIHN0b3BPbkVycm9yID0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX3VybCA9IHVybDtcclxuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IGludGVydmFsIHx8IERlZmF1bHRJbnRlcnZhbDtcclxuICAgICAgICB0aGlzLl9zdG9wT25FcnJvciA9IHN0b3BPbkVycm9yO1xyXG5cclxuICAgICAgICB2YXIgaWR4ID0gdXJsLmluZGV4T2YoXCIvXCIsIHVybC5pbmRleE9mKFwiLy9cIikgKyAyKTtcclxuICAgICAgICB0aGlzLl9mcmFtZV9vcmlnaW4gPSB1cmwuc3Vic3RyKDAsIGlkeCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcblxyXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUud2lkdGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnNyYyA9IHVybDtcclxuICAgIH1cclxuICAgIGxvYWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCA9IHRoaXMuX21lc3NhZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfbWVzc2FnZShlKSB7XHJcbiAgICAgICAgaWYgKGUub3JpZ2luID09PSB0aGlzLl9mcmFtZV9vcmlnaW4gJiZcclxuICAgICAgICAgICAgZS5zb3VyY2UgPT09IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3dcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKGUuZGF0YSA9PT0gXCJlcnJvclwiKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJDaGVja1Nlc3Npb25JRnJhbWU6IGVycm9yIG1lc3NhZ2UgZnJvbSBjaGVjayBzZXNzaW9uIG9wIGlmcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zdG9wT25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGUuZGF0YSA9PT0gXCJjaGFuZ2VkXCIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZTogY2hhbmdlZCBtZXNzYWdlIGZyb20gY2hlY2sgc2Vzc2lvbiBvcCBpZnJhbWVcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWU6IFwiICsgZS5kYXRhICsgXCIgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhcnQoc2Vzc2lvbl9zdGF0ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uX3N0YXRlICE9PSBzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZS5zdGFydFwiKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbl9zdGF0ZSA9IHNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgICAgICBsZXQgc2VuZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UodGhpcy5fY2xpZW50X2lkICsgXCIgXCIgKyB0aGlzLl9zZXNzaW9uX3N0YXRlLCB0aGlzLl9mcmFtZV9vcmlnaW4pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gdHJpZ2dlciBub3dcclxuICAgICAgICAgICAgc2VuZCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gYW5kIHNldHVwIHRpbWVyXHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gd2luZG93LnNldEludGVydmFsKHNlbmQsIHRoaXMuX2ludGVydmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zZXNzaW9uX3N0YXRlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZS5zdG9wXCIpO1xyXG5cclxuICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXIpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBDbG9ja1NlcnZpY2Uge1xyXG4gICAgZ2V0RXBvY2hUaW1lKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGF0ZS5ub3coKSAvIDEwMDAgfCAwKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBXaW5kb3cgfSBmcm9tICcuL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZG92YUlGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyA9ICdoaWRkZW49eWVzJztcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgQ29yZG92YVBvcHVwV2luZG93IH0gZnJvbSAnLi9Db3Jkb3ZhUG9wdXBXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvcmRvdmFQb3B1cE5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdFBvcHVwRmVhdHVyZXMgPSAnbG9jYXRpb249bm8sdG9vbGJhcj1ubyx6b29tPW5vJztcclxuY29uc3QgRGVmYXVsdFBvcHVwVGFyZ2V0ID0gXCJfYmxhbmtcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Jkb3ZhUG9wdXBXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcclxuICAgICAgICB0aGlzLnRhcmdldCA9IHBhcmFtcy5wb3B1cFdpbmRvd1RhcmdldCB8fCBEZWZhdWx0UG9wdXBUYXJnZXQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdF91cmkgPSBwYXJhbXMuc3RhcnRVcmw7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93LmN0b3I6IHJlZGlyZWN0X3VyaTogXCIgKyB0aGlzLnJlZGlyZWN0X3VyaSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2lzSW5BcHBCcm93c2VySW5zdGFsbGVkKGNvcmRvdmFNZXRhZGF0YSkge1xyXG4gICAgICAgIHJldHVybiBbXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXJcIiwgXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXIuaW5hcHBicm93c2VyXCIsIFwib3JnLmFwYWNoZS5jb3Jkb3ZhLmluYXBwYnJvd3NlclwiXS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3Jkb3ZhTWV0YWRhdGEuaGFzT3duUHJvcGVydHkobmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5jb3Jkb3ZhKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3IoXCJjb3Jkb3ZhIGlzIHVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgY29yZG92YU1ldGFkYXRhID0gd2luZG93LmNvcmRvdmEucmVxdWlyZShcImNvcmRvdmEvcGx1Z2luX2xpc3RcIikubWV0YWRhdGE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luQXBwQnJvd3Nlckluc3RhbGxlZChjb3Jkb3ZhTWV0YWRhdGEpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yKFwiSW5BcHBCcm93c2VyIHBsdWdpbiBub3QgZm91bmRcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IGNvcmRvdmEuSW5BcHBCcm93c2VyLm9wZW4ocGFyYW1zLnVybCwgdGhpcy50YXJnZXQsIHRoaXMuZmVhdHVyZXMpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogcG9wdXAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50ID0gdGhpcy5fZXhpdENhbGxiYWNrLmJpbmQodGhpcyk7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCA9IHRoaXMuX2xvYWRTdGFydENhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVwLmFkZEV2ZW50TGlzdGVuZXIoXCJleGl0XCIsIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1cC5hZGRFdmVudExpc3RlbmVyKFwibG9hZHN0YXJ0XCIsIHRoaXMuX2xvYWRTdGFydENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFN0YXJ0Q2FsbGJhY2soZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQudXJsLmluZGV4T2YodGhpcy5yZWRpcmVjdF91cmkpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IGV2ZW50LnVybCB9KTtcclxuICAgICAgICB9ICAgIFxyXG4gICAgfVxyXG4gICAgX2V4aXRDYWxsYmFjayhtZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fZXJyb3IobWVzc2FnZSk7ICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfc3VjY2VzcyhkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3c6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBjb3Jkb3ZhIHBvcHVwIHdpbmRvd1wiKTtcclxuICAgICAgICB0aGlzLl9yZXNvbHZlKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKXtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93OiBjbGVhbmluZyB1cCBwb3B1cFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImV4aXRcIiwgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRzdGFydFwiLCB0aGlzLl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXJyb3JSZXNwb25zZSBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHtlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24sIGVycm9yX3VyaSwgc3RhdGUsIHNlc3Npb25fc3RhdGV9PXt9XHJcbiAgICApIHtcclxuICAgICAgICAgaWYgKCFlcnJvcil7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk5vIGVycm9yIHBhc3NlZCB0byBFcnJvclJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlcnJvclwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyKGVycm9yX2Rlc2NyaXB0aW9uIHx8IGVycm9yKTtcclxuXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFcnJvclJlc3BvbnNlXCI7XHJcblxyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gZXJyb3JfZGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSBlcnJvcl91cmk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFdmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IobmFtZSkge1xyXG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEhhbmRsZXIoY2IpIHtcclxuICAgICAgICB0aGlzLl9jYWxsYmFja3MucHVzaChjYik7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSGFuZGxlcihjYikge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jYWxsYmFja3MuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gY2IpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3Muc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJhaXNlKC4uLnBhcmFtcykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkV2ZW50OiBSYWlzaW5nIGV2ZW50OiBcIiArIHRoaXMuX25hbWUpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1tpXSguLi5wYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5jb25zdCB0aW1lciA9IHtcclxuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoY2IsIGR1cmF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsKGNiLCBkdXJhdGlvbik7XHJcbiAgICB9LFxyXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xyXG4gICAgICAgIHJldHVybiBjbGVhckludGVydmFsKGhhbmRsZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5sZXQgdGVzdGluZyA9IGZhbHNlO1xyXG5sZXQgcmVxdWVzdCA9IG51bGw7XHJcblxyXG5leHBvcnQgY2xhc3MgR2xvYmFsIHtcclxuXHJcbiAgICBzdGF0aWMgX3Rlc3RpbmcoKSB7XHJcbiAgICAgICAgdGVzdGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsb2NhdGlvbigpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGxvY2FsU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBzZXNzaW9uU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2V0WE1MSHR0cFJlcXVlc3QobmV3UmVxdWVzdCkge1xyXG4gICAgICAgIHJlcXVlc3QgPSBuZXdSZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgWE1MSHR0cFJlcXVlc3QoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0IHx8IFhNTEh0dHBSZXF1ZXN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IHRpbWVyKCkge1xyXG4gICAgICAgIGlmICghdGVzdGluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGltZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSUZyYW1lV2luZG93IH0gZnJvbSAnLi9JRnJhbWVXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgZnJhbWUgPSBuZXcgSUZyYW1lV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmcmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lTmF2aWdhdG9yLmNhbGxiYWNrXCIpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50KHVybCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0VGltZW91dCA9IDEwMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZVdpbmRvdyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcblxyXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xyXG4gICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRpbWVvdXQgPSBwYXJhbXMuc2lsZW50UmVxdWVzdFRpbWVvdXQgfHwgRGVmYXVsdFRpbWVvdXQ7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5uYXZpZ2F0ZTogVXNpbmcgdGltZW91dCBvZjpcIiwgdGltZW91dCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gd2luZG93LnNldFRpbWVvdXQodGhpcy5fdGltZW91dC5iaW5kKHRoaXMpLCB0aW1lb3V0KTtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWUuc3JjID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByb21pc2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX3N1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93OiBTdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gZnJhbWUgd2luZG93XCIpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBfZXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuXHJcbiAgICAgICAgTG9nLmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBfY2xlYW51cCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZnJhbWUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93OiBjbGVhbnVwXCIpO1xyXG5cclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xyXG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLl9mcmFtZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfdGltZW91dCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cudGltZW91dFwiKTtcclxuICAgICAgICB0aGlzLl9lcnJvcihcIkZyYW1lIHdpbmRvdyB0aW1lZCBvdXRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgX21lc3NhZ2UoZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5tZXNzYWdlXCIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fdGltZXIgJiZcclxuICAgICAgICAgICAgZS5vcmlnaW4gPT09IHRoaXMuX29yaWdpbiAmJlxyXG4gICAgICAgICAgICBlLnNvdXJjZSA9PT0gdGhpcy5fZnJhbWUuY29udGVudFdpbmRvdyAmJlxyXG4gICAgICAgICAgICAodHlwZW9mIGUuZGF0YSA9PT0gJ3N0cmluZycgJiYgKGUuZGF0YS5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgZS5kYXRhLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgdXJsID0gZS5kYXRhO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWNjZXNzKHsgdXJsOiB1cmwgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcihcIkludmFsaWQgcmVzcG9uc2UgZnJvbSBmcmFtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgX29yaWdpbigpIHtcclxuICAgICAgICByZXR1cm4gbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyBsb2NhdGlvbi5ob3N0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBub3RpZnlQYXJlbnQodXJsKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm5vdGlmeVBhcmVudFwiKTtcclxuICAgICAgICB1cmwgPSB1cmwgfHwgd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50OiBwb3N0aW5nIHVybCBtZXNzYWdlIHRvIHBhcmVudFwiKTtcclxuICAgICAgICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh1cmwsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJbk1lbW9yeVdlYlN0b3JhZ2V7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtKGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5nZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJdGVtKGtleSwgdmFsdWUpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5zZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgdGhpcy5fZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSXRlbShrZXkpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5yZW1vdmVJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9kYXRhKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAga2V5KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX2RhdGEpW2luZGV4XTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0gZnJvbSAnLi9jcnlwdG8vanNyc2FzaWduJztcclxuaW1wb3J0IGdldEpvc2VVdGlsIGZyb20gJy4vSm9zZVV0aWxJbXBsJztcclxuXHJcbmV4cG9ydCBjb25zdCBKb3NlVXRpbCA9IGdldEpvc2VVdGlsKHsgandzLCBLZXlVdGlsLCBYNTA5LCBjcnlwdG8sIGhleHRvYjY0dSwgYjY0dG9oZXgsIEFsbG93ZWRTaWduaW5nQWxncyB9KTtcclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Sm9zZVV0aWwoeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0pIHtcclxuICAgIHJldHVybiBjbGFzcyBKb3NlVXRpbCB7XHJcblxyXG4gICAgICAgIHN0YXRpYyBwYXJzZUp3dChqd3QpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwucGFyc2VKd3RcIik7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBqd3MuSldTLnBhcnNlKGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogdG9rZW4uaGVhZGVyT2JqLFxyXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRva2VuLnBheWxvYWRPYmpcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3Qoand0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwudmFsaWRhdGVKd3RcIik7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleS5rdHkgPT09IFwiUlNBXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmUgJiYga2V5Lm4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS54NWMgJiYga2V5Lng1Yy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IGI2NHRvaGV4KGtleS54NWNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4KGhleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lmt0eSA9PT0gXCJFQ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5jcnYgJiYga2V5LnggJiYga2V5LnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogRUMga2V5IG1pc3Npbmcga2V5IG1hdGVyaWFsXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJFQyBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFVuc3VwcG9ydGVkIGtleSB0eXBlXCIsIGtleSAmJiBrZXkua3R5KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2V5IHR5cGU6IFwiICsga2V5ICYmIGtleS5rdHkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwuX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUgJiYgZS5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiSldUIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWNsb2NrU2tldykge1xyXG4gICAgICAgICAgICAgICAgY2xvY2tTa2V3ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFub3cpIHtcclxuICAgICAgICAgICAgICAgIG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBKb3NlVXRpbC5wYXJzZUp3dChqd3QpLnBheWxvYWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQuaXNzKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGF5bG9hZC5pc3MgIT09IGlzc3Vlcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBJbnZhbGlkIGlzc3VlciBpbiB0b2tlblwiLCBwYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBpc3N1ZXIgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5pc3MpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF1ZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBhdWQgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhdWQgd2FzIG5vdCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHZhbGlkQXVkaWVuY2UgPSBwYXlsb2FkLmF1ZCA9PT0gYXVkaWVuY2UgfHwgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdWQpICYmIHBheWxvYWQuYXVkLmluZGV4T2YoYXVkaWVuY2UpID49IDApO1xyXG4gICAgICAgICAgICBpZiAoIXZhbGlkQXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlblwiLCBwYXlsb2FkLmF1ZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlbjogXCIgKyBwYXlsb2FkLmF1ZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gYXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhenAgaW4gdG9rZW5cIiwgcGF5bG9hZC5henApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgYXpwIGluIHRva2VuOiBcIiArIHBheWxvYWQuYXpwKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGltZUluc2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG93ZXJOb3cgPSBub3cgKyBjbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICB2YXIgdXBwZXJOb3cgPSBub3cgLSBjbG9ja1NrZXc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmlhdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogaWF0IHdhcyBub3QgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsb3dlck5vdyA8IHBheWxvYWQuaWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBpYXQgaXMgaW4gdGhlIGZ1dHVyZVwiLCBwYXlsb2FkLmlhdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCBpcyBpbiB0aGUgZnV0dXJlOiBcIiArIHBheWxvYWQuaWF0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubmJmICYmIGxvd2VyTm93IDwgcGF5bG9hZC5uYmYpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IG5iZiBpcyBpbiB0aGUgZnV0dXJlXCIsIHBheWxvYWQubmJmKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibmJmIGlzIGluIHRoZSBmdXR1cmU6IFwiICsgcGF5bG9hZC5uYmYpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuZXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBleHAgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZXhwIHdhcyBub3QgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZXhwIDwgdXBwZXJOb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGV4cCBpcyBpbiB0aGUgcGFzdFwiLCBwYXlsb2FkLmV4cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImV4cCBpcyBpbiB0aGUgcGFzdDpcIiArIHBheWxvYWQuZXhwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd3MuSldTLnZlcmlmeShqd3QsIGtleSwgQWxsb3dlZFNpZ25pbmdBbGdzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IHNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhhc2hTdHJpbmcodmFsdWUsIGFsZykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5VdGlsLmhhc2hTdHJpbmcodmFsdWUsIGFsZyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhleFRvQmFzZTY0VXJsKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaGV4dG9iNjR1KHZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGFkZGl0aW9uYWxDb250ZW50VHlwZXMgPSBudWxsLCBcclxuICAgICAgICBYTUxIdHRwUmVxdWVzdEN0b3IgPSBHbG9iYWwuWE1MSHR0cFJlcXVlc3QsIFxyXG4gICAgICAgIGp3dEhhbmRsZXIgPSBudWxsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbENvbnRlbnRUeXBlcyAmJiBBcnJheS5pc0FycmF5KGFkZGl0aW9uYWxDb250ZW50VHlwZXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzID0gYWRkaXRpb25hbENvbnRlbnRUeXBlcy5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGVudFR5cGVzLnB1c2goJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgICAgICBpZiAoand0SGFuZGxlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMucHVzaCgnYXBwbGljYXRpb24vand0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9YTUxIdHRwUmVxdWVzdCA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcclxuICAgICAgICB0aGlzLl9qd3RIYW5kbGVyID0gand0SGFuZGxlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRKc29uKHVybCwgdG9rZW4pIHtcclxuICAgICAgICBpZiAoIXVybCl7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb24sIHVybDogXCIsIHVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFsbG93ZWRDb250ZW50VHlwZXMgPSB0aGlzLl9jb250ZW50VHlwZXM7XHJcbiAgICAgICAgICAgIHZhciBqd3RIYW5kbGVyID0gdGhpcy5fand0SGFuZGxlcjtcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb246IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCByZXEuc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSBcImFwcGxpY2F0aW9uL2p3dFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqd3RIYW5kbGVyKHJlcSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgQ29udGVudC1UeXBlOiBcIiArIGNvbnRlbnRUeXBlICsgXCIsIGZyb20gVVJMOiBcIiArIHVybCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0ICsgXCIgKFwiICsgcmVxLnN0YXR1cyArIFwiKVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogbmV0d29yayBlcnJvclwiKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIk5ldHdvcmsgRXJyb3JcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uOiB0b2tlbiBwYXNzZWQsIHNldHRpbmcgQXV0aG9yaXphdGlvbiBoZWFkZXJcIik7XHJcbiAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIgKyB0b2tlbik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdEZvcm0odXJsLCBwYXlsb2FkLCBiYXNpY0F1dGgpIHtcclxuICAgICAgICBpZiAoIXVybCl7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBObyB1cmwgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmxcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5wb3N0Rm9ybSwgdXJsOiBcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIHZhciByZXEgPSBuZXcgdGhpcy5fWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICAgICAgcmVxLm9wZW4oJ1BPU1QnLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFsbG93ZWRDb250ZW50VHlwZXMgPSB0aGlzLl9jb250ZW50VHlwZXM7XHJcblxyXG4gICAgICAgICAgICByZXEub25sb2FkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogSFRUUCByZXNwb25zZSByZWNlaXZlZCwgc3RhdHVzXCIsIHJlcS5zdGF0dXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID09PSAyMDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gcmVxLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gYWxsb3dlZENvbnRlbnRUeXBlcy5maW5kKGl0ZW09PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgcGFyc2luZyBKU09OIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKFwiSW52YWxpZCByZXNwb25zZSBDb250ZW50LVR5cGU6IFwiICsgY29udGVudFR5cGUgKyBcIiwgZnJvbSBVUkw6IFwiICsgdXJsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID09PSA0MDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gcmVxLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gYWxsb3dlZENvbnRlbnRUeXBlcy5maW5kKGl0ZW09PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXlsb2FkID0gSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBFcnJvciBmcm9tIHNlcnZlcjogXCIsIHBheWxvYWQuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKHBheWxvYWQuZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0ICsgXCIgKFwiICsgcmVxLnN0YXR1cyArIFwiKVwiKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IG5ldHdvcmsgZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJOZXR3b3JrIEVycm9yXCIpKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxldCBib2R5ID0gXCJcIjtcclxuICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gcGF5bG9hZCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHBheWxvYWRba2V5XTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ICs9IFwiJlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSArPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IFwiPVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAoYmFzaWNBdXRoICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJhc2ljIFwiICsgYnRvYShiYXNpY0F1dGgpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVxLnNlbmQoYm9keSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxubGV0IG5vcExvZ2dlciA9IHtcclxuICAgIGRlYnVnKCl7fSxcclxuICAgIGluZm8oKXt9LFxyXG4gICAgd2Fybigpe30sXHJcbiAgICBlcnJvcigpe31cclxufTtcclxuXHJcbmNvbnN0IE5PTkUgPSAwO1xyXG5jb25zdCBFUlJPUiA9IDE7XHJcbmNvbnN0IFdBUk4gPSAyO1xyXG5jb25zdCBJTkZPID0gMztcclxuY29uc3QgREVCVUcgPSA0O1xyXG5cclxubGV0IGxvZ2dlcjtcclxubGV0IGxldmVsO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvZyB7XHJcbiAgICBzdGF0aWMgZ2V0IE5PTkUoKSB7cmV0dXJuIE5PTkV9O1xyXG4gICAgc3RhdGljIGdldCBFUlJPUigpIHtyZXR1cm4gRVJST1J9O1xyXG4gICAgc3RhdGljIGdldCBXQVJOKCkge3JldHVybiBXQVJOfTtcclxuICAgIHN0YXRpYyBnZXQgSU5GTygpIHtyZXR1cm4gSU5GT307XHJcbiAgICBzdGF0aWMgZ2V0IERFQlVHKCkge3JldHVybiBERUJVR307XHJcbiAgICBcclxuICAgIHN0YXRpYyByZXNldCgpe1xyXG4gICAgICAgIGxldmVsID0gSU5GTztcclxuICAgICAgICBsb2dnZXIgPSBub3BMb2dnZXI7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBnZXQgbGV2ZWwoKXtcclxuICAgICAgICByZXR1cm4gbGV2ZWw7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc2V0IGxldmVsKHZhbHVlKXtcclxuICAgICAgICBpZiAoTk9ORSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBERUJVRyl7XHJcbiAgICAgICAgICAgIGxldmVsID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxvZyBsZXZlbFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBnZXQgbG9nZ2VyKCl7XHJcbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzZXQgbG9nZ2VyKHZhbHVlKXtcclxuICAgICAgICBpZiAoIXZhbHVlLmRlYnVnICYmIHZhbHVlLmluZm8pIHtcclxuICAgICAgICAgICAgLy8ganVzdCB0byBzdGF5IGJhY2t3YXJkcyBjb21wYXQuIGNhbiByZW1vdmUgaW4gMi4wXHJcbiAgICAgICAgICAgIHZhbHVlLmRlYnVnID0gdmFsdWUuaW5mbztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5kZWJ1ZyAmJiB2YWx1ZS5pbmZvICYmIHZhbHVlLndhcm4gJiYgdmFsdWUuZXJyb3Ipe1xyXG4gICAgICAgICAgICBsb2dnZXIgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9nZ2VyXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGRlYnVnKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBERUJVRyl7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zy5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyBpbmZvKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBJTkZPKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8uYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgd2FybiguLi5hcmdzKXtcclxuICAgICAgICBpZiAobGV2ZWwgPj0gV0FSTil7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGVycm9yKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBFUlJPUil7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvci5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuTG9nLnJlc2V0KCk7XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuL0pzb25TZXJ2aWNlLmpzJztcclxuXHJcbmNvbnN0IE9pZGNNZXRhZGF0YVVybFBhdGggPSAnLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1ldGFkYXRhU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZTogTm8gc2V0dGluZ3MgcGFzc2VkIHRvIE1ldGFkYXRhU2VydmljZVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcihbJ2FwcGxpY2F0aW9uL2p3ay1zZXQranNvbiddKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWV0YWRhdGFVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5fc2V0dGluZ3MubWV0YWRhdGFVcmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmwgJiYgdGhpcy5fbWV0YWRhdGFVcmwuaW5kZXhPZihPaWRjTWV0YWRhdGFVcmxQYXRoKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmxbdGhpcy5fbWV0YWRhdGFVcmwubGVuZ3RoIC0gMV0gIT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSAnLyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9IE9pZGNNZXRhZGF0YVVybFBhdGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVVybDtcclxuICAgIH1cclxuXHJcbiAgICByZXNldFNpZ25pbmdLZXlzKCkge1xyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gdGhpcy5fc2V0dGluZ3MgfHwge31cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cyA9IHVuZGVmaW5lZFxyXG4gICAgfVxyXG5cclxuICAgIGdldE1ldGFkYXRhKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IFJldHVybmluZyBtZXRhZGF0YSBmcm9tIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IE5vIGF1dGhvcml0eSBvciBtZXRhZGF0YVVybCBjb25maWd1cmVkIG9uIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXV0aG9yaXR5IG9yIG1ldGFkYXRhVXJsIGNvbmZpZ3VyZWQgb24gc2V0dGluZ3NcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBnZXR0aW5nIG1ldGFkYXRhIGZyb21cIiwgdGhpcy5tZXRhZGF0YVVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKHRoaXMubWV0YWRhdGFVcmwpXHJcbiAgICAgICAgICAgIC50aGVuKG1ldGFkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YToganNvbiByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmFyIHNlZWQgPSB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YVNlZWQgfHwge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIHNlZWQsIG1ldGFkYXRhKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXNzdWVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiaXNzdWVyXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF1dGhvcml6YXRpb25FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImF1dGhvcml6YXRpb25fZW5kcG9pbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlckluZm9FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInVzZXJpbmZvX2VuZHBvaW50XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRva2VuRW5kcG9pbnQob3B0aW9uYWw9dHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwidG9rZW5fZW5kcG9pbnRcIiwgb3B0aW9uYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoZWNrU2Vzc2lvbklmcmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImNoZWNrX3Nlc3Npb25faWZyYW1lXCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVuZFNlc3Npb25FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImVuZF9zZXNzaW9uX2VuZHBvaW50XCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJldm9jYXRpb25FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInJldm9jYXRpb25fZW5kcG9pbnRcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0S2V5c0VuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiandrc191cmlcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldE1ldGFkYXRhUHJvcGVydHkobmFtZSwgb3B0aW9uYWw9ZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eSBmb3I6IFwiICsgbmFtZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5OiBtZXRhZGF0YSByZWNpZXZlZFwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLndhcm4oXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eTogTWV0YWRhdGEgZG9lcyBub3QgY29udGFpbiBvcHRpb25hbCBwcm9wZXJ0eSBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eTogTWV0YWRhdGEgZG9lcyBub3QgY29udGFpbiBwcm9wZXJ0eSBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gcHJvcGVydHkgXCIgKyBuYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhW25hbWVdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNpZ25pbmdLZXlzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cykge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IFJldHVybmluZyBzaWduaW5nS2V5cyBmcm9tIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiandrc191cmlcIikudGhlbihqd2tzX3VyaSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czogandrc191cmkgcmVjZWl2ZWRcIiwgandrc191cmkpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLmdldEpzb24oandrc191cmkpLnRoZW4oa2V5U2V0ID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czoga2V5IHNldCByZWNlaXZlZFwiLCBrZXlTZXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgha2V5U2V0LmtleXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IE1pc3Npbmcga2V5cyBvbiBrZXlzZXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBrZXlzIG9uIGtleXNldFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cyA9IGtleVNldC5rZXlzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vT2lkY0NsaWVudFNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSB9IGZyb20gJy4vRXJyb3JSZXNwb25zZS5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblJlcXVlc3QgfSBmcm9tICcuL1NpZ25pblJlcXVlc3QuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5SZXNwb25zZSB9IGZyb20gJy4vU2lnbmluUmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBTaWdub3V0UmVxdWVzdCB9IGZyb20gJy4vU2lnbm91dFJlcXVlc3QuanMnO1xyXG5pbXBvcnQgeyBTaWdub3V0UmVzcG9uc2UgfSBmcm9tICcuL1NpZ25vdXRSZXNwb25zZS5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblN0YXRlIH0gZnJvbSAnLi9TaWduaW5TdGF0ZS5qcyc7XHJcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgT2lkY0NsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncyA9IHt9KSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzIGluc3RhbmNlb2YgT2lkY0NsaWVudFNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IG5ldyBPaWRjQ2xpZW50U2V0dGluZ3Moc2V0dGluZ3MpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgX3N0YXRlU3RvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3Muc3RhdGVTdG9yZTtcclxuICAgIH1cclxuICAgIGdldCBfdmFsaWRhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnZhbGlkYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLm1ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1ldGFkYXRhU2VydmljZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNpZ25pblJlcXVlc3Qoe1xyXG4gICAgICAgIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCByZWRpcmVjdF91cmksXHJcbiAgICAgICAgLy8gZGF0YSB3YXMgbWVhbnQgdG8gYmUgdGhlIHBsYWNlIGEgY2FsbGVyIGNvdWxkIGluZGljYXRlIHRoZSBkYXRhIHRvXHJcbiAgICAgICAgLy8gaGF2ZSByb3VuZCB0cmlwcGVkLCBidXQgcGVvcGxlIHdlcmUgZ2V0dGluZyBjb25mdXNlZCwgc28gaSBhZGRlZCBzdGF0ZSAoc2luY2UgdGhhdCBtYXRjaGVzIHRoZSBzcGVjKVxyXG4gICAgICAgIC8vIGFuZCBzbyBub3cgaWYgZGF0YSBpcyBub3QgcGFzc2VkLCBidXQgc3RhdGUgaXMgdGhlbiBzdGF0ZSB3aWxsIGJlIHVzZWRcclxuICAgICAgICBkYXRhLCBzdGF0ZSwgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50LCBhY3JfdmFsdWVzLFxyXG4gICAgICAgIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgcmVzcG9uc2VfbW9kZSwgZXh0cmFRdWVyeVBhcmFtcywgZXh0cmFUb2tlblBhcmFtcywgcmVxdWVzdF90eXBlLCBza2lwVXNlckluZm8gfSA9IHt9LFxyXG4gICAgICAgIHN0YXRlU3RvcmVcclxuICAgICkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbmluUmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgbGV0IGNsaWVudF9pZCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICByZXNwb25zZV90eXBlID0gcmVzcG9uc2VfdHlwZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIHNjb3BlID0gc2NvcGUgfHwgdGhpcy5fc2V0dGluZ3Muc2NvcGU7XHJcbiAgICAgICAgcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgLy8gaWRfdG9rZW5faGludCwgbG9naW5faGludCBhcmVuJ3QgYWxsb3dlZCBvbiBfc2V0dGluZ3NcclxuICAgICAgICBwcm9tcHQgPSBwcm9tcHQgfHwgdGhpcy5fc2V0dGluZ3MucHJvbXB0O1xyXG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5IHx8IHRoaXMuX3NldHRpbmdzLmRpc3BsYXk7XHJcbiAgICAgICAgbWF4X2FnZSA9IG1heF9hZ2UgfHwgdGhpcy5fc2V0dGluZ3MubWF4X2FnZTtcclxuICAgICAgICB1aV9sb2NhbGVzID0gdWlfbG9jYWxlcyB8fCB0aGlzLl9zZXR0aW5ncy51aV9sb2NhbGVzO1xyXG4gICAgICAgIGFjcl92YWx1ZXMgPSBhY3JfdmFsdWVzIHx8IHRoaXMuX3NldHRpbmdzLmFjcl92YWx1ZXM7XHJcbiAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNvdXJjZTtcclxuICAgICAgICByZXNwb25zZV9tb2RlID0gcmVzcG9uc2VfbW9kZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlO1xyXG4gICAgICAgIGV4dHJhUXVlcnlQYXJhbXMgPSBleHRyYVF1ZXJ5UGFyYW1zIHx8IHRoaXMuX3NldHRpbmdzLmV4dHJhUXVlcnlQYXJhbXM7XHJcbiAgICAgICAgZXh0cmFUb2tlblBhcmFtcyA9IGV4dHJhVG9rZW5QYXJhbXMgfHwgdGhpcy5fc2V0dGluZ3MuZXh0cmFUb2tlblBhcmFtcztcclxuXHJcbiAgICAgICAgbGV0IGF1dGhvcml0eSA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgaWYgKFNpZ25pblJlcXVlc3QuaXNDb2RlKHJlc3BvbnNlX3R5cGUpICYmIHJlc3BvbnNlX3R5cGUgIT09IFwiY29kZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJPcGVuSUQgQ29ubmVjdCBoeWJyaWQgZmxvdyBpcyBub3Qgc3VwcG9ydGVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25pblJlcXVlc3Q6IFJlY2VpdmVkIGF1dGhvcml6YXRpb24gZW5kcG9pbnRcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBzaWduaW5SZXF1ZXN0ID0gbmV3IFNpZ25pblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgY2xpZW50X2lkLFxyXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZSxcclxuICAgICAgICAgICAgICAgIHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSB8fCBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGF1dGhvcml0eSxcclxuICAgICAgICAgICAgICAgIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcyxcclxuICAgICAgICAgICAgICAgIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgZXh0cmFUb2tlblBhcmFtcywgcmVxdWVzdF90eXBlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgICAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldCxcclxuICAgICAgICAgICAgICAgIHNraXBVc2VySW5mb1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzaWduaW5TdGF0ZSA9IHNpZ25pblJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVTdG9yZS5zZXQoc2lnbmluU3RhdGUuaWQsIHNpZ25pblN0YXRlLnRvU3RvcmFnZVN0cmluZygpKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzaWduaW5SZXF1ZXN0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHJlbW92ZVN0YXRlID0gZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlXCIpO1xyXG5cclxuICAgICAgICBsZXQgdXNlUXVlcnkgPSB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlID09PSBcInF1ZXJ5XCIgfHwgXHJcbiAgICAgICAgICAgICghdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfbW9kZSAmJiBTaWduaW5SZXF1ZXN0LmlzQ29kZSh0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlKSk7XHJcbiAgICAgICAgbGV0IGRlbGltaXRlciA9IHVzZVF1ZXJ5ID8gXCI/XCIgOiBcIiNcIjtcclxuXHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNpZ25pblJlc3BvbnNlKHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN0YXRlIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUFwaSA9IHJlbW92ZVN0YXRlID8gc3RhdGVTdG9yZS5yZW1vdmUuYmluZChzdGF0ZVN0b3JlKSA6IHN0YXRlU3RvcmUuZ2V0LmJpbmQoc3RhdGVTdG9yZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzdGF0ZUFwaShyZXNwb25zZS5zdGF0ZSkudGhlbihzdG9yZWRTdGF0ZVN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkU3RhdGVTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGU6IE5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhzdG9yZWRTdGF0ZVN0cmluZyk7XHJcbiAgICAgICAgICAgIHJldHVybiB7c3RhdGUsIHJlc3BvbnNlfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzU2lnbmluUmVzcG9uc2UodXJsLCBzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgdHJ1ZSkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2U6IFJlY2VpdmVkIHN0YXRlIGZyb20gc3RvcmFnZTsgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlU2lnbm91dFJlcXVlc3Qoe2lkX3Rva2VuX2hpbnQsIGRhdGEsIHN0YXRlLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSB9ID0ge30sXHJcbiAgICAgICAgc3RhdGVTdG9yZVxyXG4gICAgKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0gZXh0cmFRdWVyeVBhcmFtcyB8fCB0aGlzLl9zZXR0aW5ncy5leHRyYVF1ZXJ5UGFyYW1zO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldEVuZFNlc3Npb25FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IE5vIGVuZCBzZXNzaW9uIGVuZHBvaW50IHVybCByZXR1cm5lZFwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGVuZCBzZXNzaW9uIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0OiBSZWNlaXZlZCBlbmQgc2Vzc2lvbiBlbmRwb2ludFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSBuZXcgU2lnbm91dFJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgaWRfdG9rZW5faGludCxcclxuICAgICAgICAgICAgICAgIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEgfHwgc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdF90eXBlXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZ25vdXRTdGF0ZSA9IHJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIGlmIChzaWdub3V0U3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IFNpZ25vdXQgcmVxdWVzdCBoYXMgc3RhdGUgdG8gcGVyc2lzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xyXG4gICAgICAgICAgICAgICAgc3RhdGVTdG9yZS5zZXQoc2lnbm91dFN0YXRlLmlkLCBzaWdub3V0U3RhdGUudG9TdG9yYWdlU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCByZW1vdmVTdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIHZhciByZXNwb25zZSA9IG5ldyBTaWdub3V0UmVzcG9uc2UodXJsKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLndhcm4oXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZTogUmVzcG9uc2Ugd2FzIGVycm9yOiBcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3N0YXRlOiB1bmRlZmluZWQsIHJlc3BvbnNlfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3RhdGVLZXkgPSByZXNwb25zZS5zdGF0ZTtcclxuXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgdmFyIHN0YXRlQXBpID0gcmVtb3ZlU3RhdGUgPyBzdGF0ZVN0b3JlLnJlbW92ZS5iaW5kKHN0YXRlU3RvcmUpIDogc3RhdGVTdG9yZS5nZXQuYmluZChzdGF0ZVN0b3JlKTtcclxuICAgICAgICByZXR1cm4gc3RhdGVBcGkoc3RhdGVLZXkpLnRoZW4oc3RvcmVkU3RhdGVTdHJpbmcgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXN0b3JlZFN0YXRlU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZTogTm8gbWF0Y2hpbmcgc3RhdGUgZm91bmQgaW4gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IFN0YXRlLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JlZFN0YXRlU3RyaW5nKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7c3RhdGUsIHJlc3BvbnNlfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzU2lnbm91dFJlc3BvbnNlKHVybCwgc3RhdGVTdG9yZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25vdXRSZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgdHJ1ZSkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWdub3V0UmVzcG9uc2U6IFJlY2VpdmVkIHN0YXRlIGZyb20gc3RvcmFnZTsgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25vdXRSZXNwb25zZTogTm8gc3RhdGUgZnJvbSBzdG9yYWdlOyBza2lwcGluZyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJTdGFsZVN0YXRlKHN0YXRlU3RvcmUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNsZWFyU3RhbGVTdGF0ZVwiKTtcclxuXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFN0YXRlLmNsZWFyU3RhbGVTdGF0ZShzdGF0ZVN0b3JlLCB0aGlzLnNldHRpbmdzLnN0YWxlU3RhdGVBZ2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgQ2xvY2tTZXJ2aWNlIH0gZnJvbSAnLi9DbG9ja1NlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBSZXNwb25zZVZhbGlkYXRvciB9IGZyb20gJy4vUmVzcG9uc2VWYWxpZGF0b3IuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcblxyXG5jb25zdCBPaWRjTWV0YWRhdGFVcmxQYXRoID0gJy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJztcclxuXHJcbmNvbnN0IERlZmF1bHRSZXNwb25zZVR5cGUgPSBcImlkX3Rva2VuXCI7XHJcbmNvbnN0IERlZmF1bHRTY29wZSA9IFwib3BlbmlkXCI7XHJcbmNvbnN0IERlZmF1bHRDbGllbnRBdXRoZW50aWNhdGlvbiA9IFwiY2xpZW50X3NlY3JldF9wb3N0XCIgLy8gVGhlIGRlZmF1bHQgdmFsdWUgbXVzdCBiZSBjbGllbnRfc2VjcmV0X2Jhc2ljLCBhcyBleHBsYWluZWQgaW4gaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xpZW50QXV0aGVudGljYXRpb25cclxuY29uc3QgRGVmYXVsdFN0YWxlU3RhdGVBZ2UgPSA2MCAqIDE1OyAvLyBzZWNvbmRzXHJcbmNvbnN0IERlZmF1bHRDbG9ja1NrZXdJblNlY29uZHMgPSA2MCAqIDU7XHJcblxyXG5leHBvcnQgY2xhc3MgT2lkY0NsaWVudFNldHRpbmdzIHtcclxuICAgIGNvbnN0cnVjdG9yKHtcclxuICAgICAgICAvLyBtZXRhZGF0YSByZWxhdGVkXHJcbiAgICAgICAgYXV0aG9yaXR5LCBtZXRhZGF0YVVybCwgbWV0YWRhdGEsIHNpZ25pbmdLZXlzLCBtZXRhZGF0YVNlZWQsXHJcbiAgICAgICAgLy8gY2xpZW50IHJlbGF0ZWRcclxuICAgICAgICBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHJlc3BvbnNlX3R5cGUgPSBEZWZhdWx0UmVzcG9uc2VUeXBlLCBzY29wZSA9IERlZmF1bHRTY29wZSxcclxuICAgICAgICByZWRpcmVjdF91cmksIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBjbGllbnRfYXV0aGVudGljYXRpb24gPSBEZWZhdWx0Q2xpZW50QXV0aGVudGljYXRpb24sXHJcbiAgICAgICAgLy8gb3B0aW9uYWwgcHJvdG9jb2xcclxuICAgICAgICBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIC8vIGJlaGF2aW9yIGZsYWdzXHJcbiAgICAgICAgZmlsdGVyUHJvdG9jb2xDbGFpbXMgPSB0cnVlLCBsb2FkVXNlckluZm8gPSB0cnVlLFxyXG4gICAgICAgIHN0YWxlU3RhdGVBZ2UgPSBEZWZhdWx0U3RhbGVTdGF0ZUFnZSwgXHJcbiAgICAgICAgY2xvY2tTa2V3ID0gRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyxcclxuICAgICAgICBjbG9ja1NlcnZpY2UgPSBuZXcgQ2xvY2tTZXJ2aWNlKCksXHJcbiAgICAgICAgdXNlckluZm9Kd3RJc3N1ZXIgPSAnT1AnLFxyXG4gICAgICAgIG1lcmdlQ2xhaW1zID0gZmFsc2UsXHJcbiAgICAgICAgLy8gb3RoZXIgYmVoYXZpb3JcclxuICAgICAgICBzdGF0ZVN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKCksXHJcbiAgICAgICAgUmVzcG9uc2VWYWxpZGF0b3JDdG9yID0gUmVzcG9uc2VWYWxpZGF0b3IsXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICAvLyBleHRyYSBxdWVyeSBwYXJhbXNcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0ge30sXHJcbiAgICAgICAgZXh0cmFUb2tlblBhcmFtcyA9IHt9XHJcbiAgICB9ID0ge30pIHtcclxuXHJcbiAgICAgICAgdGhpcy5fYXV0aG9yaXR5ID0gYXV0aG9yaXR5O1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gbWV0YWRhdGFVcmw7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSBtZXRhZGF0YTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlZWQgPSBtZXRhZGF0YVNlZWQ7XHJcbiAgICAgICAgdGhpcy5fc2lnbmluZ0tleXMgPSBzaWduaW5nS2V5cztcclxuXHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX3R5cGUgPSByZXNwb25zZV90eXBlO1xyXG4gICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5fcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9jbGllbnRfYXV0aGVudGljYXRpb24gPSBjbGllbnRfYXV0aGVudGljYXRpb247XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb21wdCA9IHByb21wdDtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5ID0gZGlzcGxheTtcclxuICAgICAgICB0aGlzLl9tYXhfYWdlID0gbWF4X2FnZTtcclxuICAgICAgICB0aGlzLl91aV9sb2NhbGVzID0gdWlfbG9jYWxlcztcclxuICAgICAgICB0aGlzLl9hY3JfdmFsdWVzID0gYWNyX3ZhbHVlcztcclxuICAgICAgICB0aGlzLl9yZXNvdXJjZSA9IHJlc291cmNlO1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcyA9ICEhZmlsdGVyUHJvdG9jb2xDbGFpbXM7XHJcbiAgICAgICAgdGhpcy5fbG9hZFVzZXJJbmZvID0gISFsb2FkVXNlckluZm87XHJcbiAgICAgICAgdGhpcy5fc3RhbGVTdGF0ZUFnZSA9IHN0YWxlU3RhdGVBZ2U7XHJcbiAgICAgICAgdGhpcy5fY2xvY2tTa2V3ID0gY2xvY2tTa2V3O1xyXG4gICAgICAgIHRoaXMuX2Nsb2NrU2VydmljZSA9IGNsb2NrU2VydmljZTtcclxuICAgICAgICB0aGlzLl91c2VySW5mb0p3dElzc3VlciA9IHVzZXJJbmZvSnd0SXNzdWVyO1xyXG4gICAgICAgIHRoaXMuX21lcmdlQ2xhaW1zID0gISFtZXJnZUNsYWltcztcclxuXHJcbiAgICAgICAgdGhpcy5fc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmU7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdG9yID0gbmV3IFJlc3BvbnNlVmFsaWRhdG9yQ3Rvcih0aGlzKTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHR5cGVvZiBleHRyYVF1ZXJ5UGFyYW1zID09PSAnb2JqZWN0JyA/IGV4dHJhUXVlcnlQYXJhbXMgOiB7fTtcclxuICAgICAgICB0aGlzLl9leHRyYVRva2VuUGFyYW1zID0gdHlwZW9mIGV4dHJhVG9rZW5QYXJhbXMgPT09ICdvYmplY3QnID8gZXh0cmFUb2tlblBhcmFtcyA6IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsaWVudCBjb25maWdcclxuICAgIGdldCBjbGllbnRfaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9pZDtcclxuICAgIH1cclxuICAgIHNldCBjbGllbnRfaWQodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudF9pZCkge1xyXG4gICAgICAgICAgICAvLyBvbmUtdGltZSBzZXQgb25seVxyXG4gICAgICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnRTZXR0aW5ncy5zZXRfY2xpZW50X2lkOiBjbGllbnRfaWQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpZW50X2lkIGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGNsaWVudF9zZWNyZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9zZWNyZXQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfdHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfdHlwZTtcclxuICAgIH1cclxuICAgIGdldCBzY29wZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2NvcGU7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xpZW50X2F1dGhlbnRpY2F0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfYXV0aGVudGljYXRpb247XHJcbiAgICB9XHJcbiAgICBcclxuXHJcbiAgICAvLyBvcHRpb25hbCBwcm90b2NvbCBwYXJhbXNcclxuICAgIGdldCBwcm9tcHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21wdDtcclxuICAgIH1cclxuICAgIGdldCBkaXNwbGF5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5O1xyXG4gICAgfVxyXG4gICAgZ2V0IG1heF9hZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heF9hZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgdWlfbG9jYWxlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdWlfbG9jYWxlcztcclxuICAgIH1cclxuICAgIGdldCBhY3JfdmFsdWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3JfdmFsdWVzO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlc291cmNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZTtcclxuICAgIH1cclxuICAgIGdldCByZXNwb25zZV9tb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV9tb2RlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBtZXRhZGF0YVxyXG4gICAgZ2V0IGF1dGhvcml0eSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0aG9yaXR5O1xyXG4gICAgfVxyXG4gICAgc2V0IGF1dGhvcml0eSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIC8vIG9uZS10aW1lIHNldCBvbmx5XHJcbiAgICAgICAgICAgIHRoaXMuX2F1dGhvcml0eSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudFNldHRpbmdzLnNldF9hdXRob3JpdHk6IGF1dGhvcml0eSBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdXRob3JpdHkgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgbWV0YWRhdGFVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuYXV0aG9yaXR5O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhVXJsICYmIHRoaXMuX21ldGFkYXRhVXJsLmluZGV4T2YoT2lkY01ldGFkYXRhVXJsUGF0aCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmxbdGhpcy5fbWV0YWRhdGFVcmwubGVuZ3RoIC0gMV0gIT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9ICcvJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9IE9pZGNNZXRhZGF0YVVybFBhdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVVybDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXR0YWJsZS9jYWNoYWJsZSBtZXRhZGF0YSB2YWx1ZXNcclxuICAgIGdldCBtZXRhZGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGE7XHJcbiAgICB9XHJcbiAgICBzZXQgbWV0YWRhdGEodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1ldGFkYXRhU2VlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZWVkO1xyXG4gICAgfVxyXG4gICAgc2V0IG1ldGFkYXRhU2VlZCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VlZCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaWduaW5nS2V5cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluZ0tleXM7XHJcbiAgICB9XHJcbiAgICBzZXQgc2lnbmluZ0tleXModmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9zaWduaW5nS2V5cyA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGJlaGF2aW9yIGZsYWdzXHJcbiAgICBnZXQgZmlsdGVyUHJvdG9jb2xDbGFpbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zO1xyXG4gICAgfVxyXG4gICAgZ2V0IGxvYWRVc2VySW5mbygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXJJbmZvO1xyXG4gICAgfVxyXG4gICAgZ2V0IHN0YWxlU3RhdGVBZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWxlU3RhdGVBZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xvY2tTa2V3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9ja1NrZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgdXNlckluZm9Kd3RJc3N1ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJJbmZvSnd0SXNzdWVyO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1lcmdlQ2xhaW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXJnZUNsYWltcztcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0IHN0YXRlU3RvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlU3RvcmU7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsaWRhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXh0cmEgcXVlcnkgcGFyYW1zXHJcbiAgICBnZXQgZXh0cmFRdWVyeVBhcmFtcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXh0cmFRdWVyeVBhcmFtcztcclxuICAgIH1cclxuICAgIHNldCBleHRyYVF1ZXJ5UGFyYW1zKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpe1xyXG4gICAgICAgICAgICB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zID0gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBleHRyYSB0b2tlbiBwYXJhbXNcclxuICAgIGdldCBleHRyYVRva2VuUGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVRva2VuUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgc2V0IGV4dHJhVG9rZW5QYXJhbXModmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyl7XHJcbiAgICAgICAgICAgIHRoaXMuX2V4dHJhVG9rZW5QYXJhbXMgPSB2YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9leHRyYVRva2VuUGFyYW1zID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGdldCB0aGUgdGltZVxyXG4gICAgZ2V0RXBvY2hUaW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9ja1NlcnZpY2UuZ2V0RXBvY2hUaW1lKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBQb3B1cFdpbmRvdyB9IGZyb20gJy4vUG9wdXBXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvcHVwTmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKHBhcmFtcykge1xyXG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBQb3B1cFdpbmRvdyhwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9wdXApO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxiYWNrKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwTmF2aWdhdG9yLmNhbGxiYWNrXCIpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXIodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcblxyXG5jb25zdCBDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwgPSA1MDA7XHJcbmNvbnN0IERlZmF1bHRQb3B1cEZlYXR1cmVzID0gJ2xvY2F0aW9uPW5vLHRvb2xiYXI9bm8sd2lkdGg9NTAwLGhlaWdodD01MDAsbGVmdD0xMDAsdG9wPTEwMDsnO1xyXG4vL2NvbnN0IERlZmF1bHRQb3B1cEZlYXR1cmVzID0gJ2xvY2F0aW9uPW5vLHRvb2xiYXI9bm8sd2lkdGg9NTAwLGhlaWdodD01MDAsbGVmdD0xMDAsdG9wPTEwMDtyZXNpemFibGU9eWVzJztcclxuXHJcbmNvbnN0IERlZmF1bHRQb3B1cFRhcmdldCA9IFwiX2JsYW5rXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9wdXBXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXQgPSBwYXJhbXMucG9wdXBXaW5kb3dUYXJnZXQgfHwgRGVmYXVsdFBvcHVwVGFyZ2V0O1xyXG4gICAgICAgIGxldCBmZWF0dXJlcyA9IHBhcmFtcy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IERlZmF1bHRQb3B1cEZlYXR1cmVzO1xyXG5cclxuICAgICAgICB0aGlzLl9wb3B1cCA9IHdpbmRvdy5vcGVuKCcnLCB0YXJnZXQsIGZlYXR1cmVzKTtcclxuICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY3RvcjogcG9wdXAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkLmJpbmQodGhpcyksIENoZWNrRm9yUG9wdXBDbG9zZWRJbnRlcnZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9taXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogbm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93Lm5hdmlnYXRlOiBTZXR0aW5nIFVSTCBpbiBwb3B1cFwiKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2lkID0gcGFyYW1zLmlkO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faWQpIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvd1tcInBvcHVwQ2FsbGJhY2tfXCIgKyBwYXJhbXMuaWRdID0gdGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAuZm9jdXMoKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAud2luZG93LmxvY2F0aW9uID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX3N1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrOiBTdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gcG9wdXAgd2luZG93XCIpO1xyXG5cclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZShkYXRhKTtcclxuICAgIH1cclxuICAgIF9lcnJvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgTG9nLmVycm9yKFwiUG9wdXBXaW5kb3cuZXJyb3I6IFwiLCBtZXNzYWdlKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICAgICAgdGhpcy5fcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoa2VlcE9wZW4pIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jbGVhbnVwXCIpO1xyXG5cclxuICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIpO1xyXG4gICAgICAgIHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciA9IG51bGw7XHJcblxyXG4gICAgICAgIGRlbGV0ZSB3aW5kb3dbXCJwb3B1cENhbGxiYWNrX1wiICsgdGhpcy5faWRdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcG9wdXAgJiYgIWtlZXBPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBfY2hlY2tGb3JQb3B1cENsb3NlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcHVwIHx8IHRoaXMuX3BvcHVwLmNsb3NlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIlBvcHVwIHdpbmRvdyBjbG9zZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjayh1cmwsIGtlZXBPcGVuKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cChrZWVwT3Blbik7XHJcblxyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2sgc3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogdXJsIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2s6IEludmFsaWQgcmVzcG9uc2UgZnJvbSBwb3B1cFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIGZyb20gcG9wdXBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBub3RpZnlPcGVuZXIodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5vcGVuZXIpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIGRlbGltaXRlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IFwicG9wdXBDYWxsYmFja19cIiArIGRhdGEuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gd2luZG93Lm9wZW5lcltuYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBwYXNzaW5nIHVybCBtZXNzYWdlIHRvIG9wZW5lclwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodXJsLCBrZWVwT3Blbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gbWF0Y2hpbmcgY2FsbGJhY2sgZm91bmQgb24gb3BlbmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBubyBzdGF0ZSBmb3VuZCBpbiByZXNwb25zZSB1cmxcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy53YXJuKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBubyB3aW5kb3cub3BlbmVyLiBDYW4ndCBjb21wbGV0ZSBub3RpZmljYXRpb24uXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVkaXJlY3ROYXZpZ2F0b3Ige1xyXG5cclxuICAgIHByZXBhcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZWRpcmVjdE5hdmlnYXRvci5uYXZpZ2F0ZTogTm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwYXJhbXMudXNlUmVwbGFjZVRvTmF2aWdhdGUpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UocGFyYW1zLnVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBwYXJhbXMudXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1cmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBVc2VySW5mb1NlcnZpY2UgfSBmcm9tICcuL1VzZXJJbmZvU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IFRva2VuQ2xpZW50IH0gZnJvbSAnLi9Ub2tlbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuL0Vycm9yUmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5cclxuY29uc3QgUHJvdG9jb2xDbGFpbXMgPSBbXCJub25jZVwiLCBcImF0X2hhc2hcIiwgXCJpYXRcIiwgXCJuYmZcIiwgXCJleHBcIiwgXCJhdWRcIiwgXCJpc3NcIiwgXCJjX2hhc2hcIl07XHJcblxyXG5leHBvcnQgY2xhc3MgUmVzcG9uc2VWYWxpZGF0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBcclxuICAgICAgICBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlLFxyXG4gICAgICAgIFVzZXJJbmZvU2VydmljZUN0b3IgPSBVc2VySW5mb1NlcnZpY2UsIFxyXG4gICAgICAgIGpvc2VVdGlsID0gSm9zZVV0aWwsXHJcbiAgICAgICAgVG9rZW5DbGllbnRDdG9yID0gVG9rZW5DbGllbnQpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZCB0byBSZXNwb25zZVZhbGlkYXRvclwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl91c2VySW5mb1NlcnZpY2UgPSBuZXcgVXNlckluZm9TZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fam9zZVV0aWwgPSBqb3NlVXRpbDtcclxuICAgICAgICB0aGlzLl90b2tlbkNsaWVudCA9IG5ldyBUb2tlbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlU2lnbmluUmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NTaWduaW5QYXJhbXMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZTogc3RhdGUgcHJvY2Vzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVUb2tlbnMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IHRva2VucyB2YWxpZGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0NsYWltcyhzdGF0ZSwgcmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IGNsYWltcyBwcm9jZXNzZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlU2lnbm91dFJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChzdGF0ZS5pZCAhPT0gcmVzcG9uc2Uuc3RhdGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2U6IFN0YXRlIGRvZXMgbm90IG1hdGNoXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiU3RhdGUgZG9lcyBub3QgbWF0Y2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbm93IHRoYXQgd2Uga25vdyB0aGUgc3RhdGUgbWF0Y2hlcywgdGFrZSB0aGUgc3RvcmVkIGRhdGFcclxuICAgICAgICAvLyBhbmQgc2V0IGl0IGludG8gdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIGdldCB0aGVpciBzdGF0ZVxyXG4gICAgICAgIC8vIHRoaXMgaXMgaW1wb3J0YW50IGZvciBib3RoIHN1Y2Nlc3MgJiBlcnJvciBvdXRjb21lc1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlOiBzdGF0ZSB2YWxpZGF0ZWRcIik7XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSBzdGF0ZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcclxuICAgICAgICAgICAgTG9nLndhcm4oXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZTogUmVzcG9uc2Ugd2FzIGVycm9yXCIsIHJlc3BvbnNlLmVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc1NpZ25pblBhcmFtcyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoc3RhdGUuaWQgIT09IHJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlN0YXRlIGRvZXMgbm90IG1hdGNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBObyBjbGllbnRfaWQgb24gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBjbGllbnRfaWQgb24gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5hdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vIGF1dGhvcml0eSBvbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGF1dGhvcml0eSBvbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGlzIGFsbG93cyB0aGUgYXV0aG9yaXR5IHRvIGJlIGxvYWRlZCBmcm9tIHRoZSBzaWduaW4gc3RhdGVcclxuICAgICAgICBpZiAoIXRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkgPSBzdGF0ZS5hdXRob3JpdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVuc3VyZSB3ZSdyZSB1c2luZyB0aGUgY29ycmVjdCBhdXRob3JpdHkgaWYgdGhlIGF1dGhvcml0eSBpcyBub3QgbG9hZGVkIGZyb20gc2lnbmluIHN0YXRlXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5ICYmIHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSAhPT0gc3RhdGUuYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBhdXRob3JpdHkgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1dGhvcml0eSBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcyBhbGxvd3MgdGhlIGNsaWVudF9pZCB0byBiZSBsb2FkZWQgZnJvbSB0aGUgc2lnbmluIHN0YXRlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkID0gc3RhdGUuY2xpZW50X2lkO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbnN1cmUgd2UncmUgdXNpbmcgdGhlIGNvcnJlY3QgY2xpZW50X2lkIGlmIHRoZSBjbGllbnRfaWQgaXMgbm90IGxvYWRlZCBmcm9tIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCAmJiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQgIT09IHN0YXRlLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogY2xpZW50X2lkIG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJjbGllbnRfaWQgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IHRoZSBzdGF0ZSBtYXRjaGVzLCB0YWtlIHRoZSBzdG9yZWQgZGF0YVxyXG4gICAgICAgIC8vIGFuZCBzZXQgaXQgaW50byB0aGUgcmVzcG9uc2Ugc28gY2FsbGVycyBjYW4gZ2V0IHRoZWlyIHN0YXRlXHJcbiAgICAgICAgLy8gdGhpcyBpcyBpbXBvcnRhbnQgZm9yIGJvdGggc3VjY2VzcyAmIGVycm9yIG91dGNvbWVzXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IHN0YXRlIHZhbGlkYXRlZFwiKTtcclxuICAgICAgICByZXNwb25zZS5zdGF0ZSA9IHN0YXRlLmRhdGE7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICBMb2cud2FybihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBSZXNwb25zZSB3YXMgZXJyb3JcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yUmVzcG9uc2UocmVzcG9uc2UpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5ub25jZSAmJiAhcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IEV4cGVjdGluZyBpZF90b2tlbiBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUubm9uY2UgJiYgcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vdCBleHBlY3RpbmcgaWRfdG9rZW4gaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5jb2RlX3ZlcmlmaWVyICYmICFyZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBFeHBlY3RpbmcgY29kZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGNvZGUgaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5jb2RlX3ZlcmlmaWVyICYmIHJlc3BvbnNlLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vdCBleHBlY3RpbmcgY29kZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgY29kZSBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnNjb3BlKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gc2NvcGUgb24gdGhlIHJlc3BvbnNlLCB0aGVuIGFzc3VtZSBhbGwgc2NvcGVzIGdyYW50ZWQgKHBlci1zcGVjKSBhbmQgY29weSBvdmVyIHNjb3BlcyBmcm9tIG9yaWdpbmFsIHJlcXVlc3RcclxuICAgICAgICAgICAgcmVzcG9uc2Uuc2NvcGUgPSBzdGF0ZS5zY29wZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzQ2xhaW1zKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5pc09wZW5JZENvbm5lY3QpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIE9JREMsIHByb2Nlc3NpbmcgY2xhaW1zXCIpO1xyXG5cclxuICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0YXRlLnNraXBVc2VySW5mbyAhPT0gdHJ1ZSAmJiB0aGlzLl9zZXR0aW5ncy5sb2FkVXNlckluZm8gJiYgcmVzcG9uc2UuYWNjZXNzX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogbG9hZGluZyB1c2VyIGluZm9cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJJbmZvU2VydmljZS5nZXRDbGFpbXMocmVzcG9uc2UuYWNjZXNzX3Rva2VuKS50aGVuKGNsYWltcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHVzZXIgaW5mbyBjbGFpbXMgcmVjZWl2ZWQgZnJvbSB1c2VyIGluZm8gZW5kcG9pbnRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGFpbXMuc3ViICE9PSByZXNwb25zZS5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogc3ViIGZyb20gdXNlciBpbmZvIGVuZHBvaW50IGRvZXMgbm90IG1hdGNoIHN1YiBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInN1YiBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludCBkb2VzIG5vdCBtYXRjaCBzdWIgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX21lcmdlQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHVzZXIgaW5mbyBjbGFpbXMgcmVjZWl2ZWQsIHVwZGF0ZWQgcHJvZmlsZTpcIiwgcmVzcG9uc2UucHJvZmlsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IG5vdCBsb2FkaW5nIHVzZXIgaW5mb1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIG5vdCBPSURDLCBub3QgcHJvY2Vzc2luZyBjbGFpbXNcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfbWVyZ2VDbGFpbXMoY2xhaW1zMSwgY2xhaW1zMikge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBjbGFpbXMxKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgbmFtZSBpbiBjbGFpbXMyKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBjbGFpbXMyW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gW3ZhbHVlc107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFtuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRbbmFtZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtuYW1lXS5pbmRleE9mKHZhbHVlKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdFtuYW1lXSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0aGlzLl9zZXR0aW5ncy5tZXJnZUNsYWltcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSB0aGlzLl9tZXJnZUNsYWltcyhyZXN1bHRbbmFtZV0sIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IFtyZXN1bHRbbmFtZV0sIHZhbHVlXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgX2ZpbHRlclByb3RvY29sQ2xhaW1zKGNsYWltcykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJQcm90b2NvbENsYWltcywgaW5jb21pbmcgY2xhaW1zOlwiLCBjbGFpbXMpO1xyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgY2xhaW1zKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLl9maWx0ZXJQcm90b2NvbENsYWltcykge1xyXG4gICAgICAgICAgICBQcm90b2NvbENsYWltcy5mb3JFYWNoKHR5cGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFt0eXBlXTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyUHJvdG9jb2xDbGFpbXM6IHByb3RvY29sIGNsYWltcyBmaWx0ZXJlZFwiLCByZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlclByb3RvY29sQ2xhaW1zOiBwcm90b2NvbCBjbGFpbXMgbm90IGZpbHRlcmVkXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZVRva2VucyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAocmVzcG9uc2UuY29kZSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IFZhbGlkYXRpbmcgY29kZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NDb2RlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBWYWxpZGF0aW5nIGlkX3Rva2VuIGFuZCBhY2Nlc3NfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4oc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBWYWxpZGF0aW5nIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJZFRva2VuKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IE5vIGNvZGUgdG8gcHJvY2VzcyBvciBpZF90b2tlbiB0byB2YWxpZGF0ZVwiKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc0NvZGUoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgdmFyIHJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgIGNsaWVudF9pZDogc3RhdGUuY2xpZW50X2lkLFxyXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiBzdGF0ZS5jbGllbnRfc2VjcmV0LFxyXG4gICAgICAgICAgICBjb2RlIDogcmVzcG9uc2UuY29kZSxcclxuICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiBzdGF0ZS5yZWRpcmVjdF91cmksXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IHN0YXRlLmNvZGVfdmVyaWZpZXJcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoc3RhdGUuZXh0cmFUb2tlblBhcmFtcyAmJiB0eXBlb2Yoc3RhdGUuZXh0cmFUb2tlblBhcmFtcykgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdCwgc3RhdGUuZXh0cmFUb2tlblBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbkNsaWVudC5leGNoYW5nZUNvZGUocmVxdWVzdCkudGhlbih0b2tlblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZvcih2YXIga2V5IGluIHRva2VuUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlW2tleV0gPSB0b2tlblJlc3BvbnNlW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDb2RlOiB0b2tlbiByZXNwb25zZSBzdWNjZXNzZnVsLCBwcm9jZXNzaW5nIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ29kZTogdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc2Z1bCwgcmV0dXJuaW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XHJcblxyXG4gICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSBzdGF0ZS5jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzOiBWYWxpZGFpbmcgSldUIGF0dHJpYnV0ZXM7IHVzaW5nIGNsb2NrIHNrZXcgKGluIHNlY29uZHMpIG9mOiBcIiwgY2xvY2tTa2V3SW5TZWNvbmRzKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5nZXRFcG9jaFRpbWUoKS50aGVuKG5vdyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKHJlc3BvbnNlLmlkX3Rva2VuLCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXdJblNlY29uZHMsIG5vdykudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ub25jZSAmJiBzdGF0ZS5ub25jZSAhPT0gcGF5bG9hZC5ub25jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXM6IE5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSBwYXlsb2FkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4oc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVBY2Nlc3NUb2tlbihyZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldFNpZ25pbmdLZXlGb3JKd3Qoand0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5cygpLnRoZW4oa2V5cyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtpZCA9IGp3dC5oZWFkZXIua2lkO1xyXG4gICAgICAgICAgICBpZiAoIWtleXMpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogUmVjZWl2ZWQgc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICBpZiAoIWtpZCkge1xyXG4gICAgICAgICAgICAgICAga2V5cyA9IHRoaXMuX2ZpbHRlckJ5QWxnKGtleXMsIGp3dC5oZWFkZXIuYWxnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGtpZCBpcyBtYW5kYXRvcnkgb25seSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBrZXlzIGluIHRoZSByZWZlcmVuY2VkIEpXSyBTZXQgZG9jdW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNTaWduaW5nXHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5c1swXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGtleSA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5raWQgPT09IGtpZDtcclxuICAgICAgICAgICAgICAgIH0pWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0U2lnbmluZ0tleUZvckp3dFdpdGhTaW5nbGVSZXRyeShqd3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U2lnbmluZ0tleUZvckp3dChqd3QpLnRoZW4oa2V5ID0+IHtcclxuICAgICAgICAgICAgLy8gUmVmcmVzaGluZyBzaWduaW5nS2V5cyBpZiBubyBzdWl0YWJsZSB2ZXJpZmljYXRpb24ga2V5IGlzIHByZXNlbnQgZm9yIGdpdmVuIGp3dCBoZWFkZXIuXHJcbiAgICAgICAgICAgIGlmICgha2V5KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXQgdG8gdW5kZWZpbmVkLCB0byB0cmlnZ2VyIG5ldHdvcmsgY2FsbCB0byBqd2tzX3VyaS5cclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZS5yZXNldFNpZ25pbmdLZXlzKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U2lnbmluZ0tleUZvckp3dChqd3QpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoIXN0YXRlLm5vbmNlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIG5vbmNlIG9uIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gbm9uY2Ugb24gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlc3BvbnNlLmlkX3Rva2VuKTtcclxuICAgICAgICBpZiAoIWp3dCB8fCAhand0LmhlYWRlciB8fCAhand0LnBheWxvYWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIsIGp3dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLm5vbmNlICE9PSBqd3QucGF5bG9hZC5ub25jZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogUmVjZWl2ZWQgaXNzdWVyXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U2lnbmluZ0tleUZvckp3dFdpdGhTaW5nbGVSZXRyeShqd3QpLnRoZW4oa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICgha2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHN0YXRlLmNsaWVudF9pZDtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY2xvY2tTa2V3SW5TZWNvbmRzID0gdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3O1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogVmFsaWRhaW5nIEpXVDsgdXNpbmcgY2xvY2sgc2tldyAoaW4gc2Vjb25kcykgb2Y6IFwiLCBjbG9ja1NrZXdJblNlY29uZHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dChyZXNwb25zZS5pZF90b2tlbiwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXdJblNlY29uZHMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBKV1QgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWp3dC5wYXlsb2FkLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSBqd3QucGF5bG9hZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9maWx0ZXJCeUFsZyhrZXlzLCBhbGcpe1xyXG4gICAgICAgIHZhciBrdHkgPSBudWxsO1xyXG4gICAgICAgIGlmIChhbGcuc3RhcnRzV2l0aChcIlJTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUlNBXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiUFNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJQU1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIkVTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiRUNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJCeUFsZzogYWxnIG5vdCBzdXBwb3J0ZWQ6IFwiLCBhbGcpO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyQnlBbGc6IExvb2tpbmcgZm9yIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHkpO1xyXG5cclxuICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGtleS5rdHkgPT09IGt0eTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBOdW1iZXIgb2Yga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSwga2V5cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICByZXR1cm4ga2V5cztcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVBY2Nlc3NUb2tlbihyZXNwb25zZSkge1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UucHJvZmlsZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogTm8gcHJvZmlsZSBsb2FkZWQgZnJvbSBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHByb2ZpbGUgbG9hZGVkIGZyb20gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIGF0X2hhc2ggaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBhdF9oYXNoIGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlc3BvbnNlLmlkX3Rva2VuKTtcclxuICAgICAgICBpZiAoIWp3dCB8fCAhand0LmhlYWRlcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIsIGp3dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhhc2hBbGcgPSBqd3QuaGVhZGVyLmFsZztcclxuICAgICAgICBpZiAoIWhhc2hBbGcgfHwgaGFzaEFsZy5sZW5ndGggIT09IDUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IFVuc3VwcG9ydGVkIGFsZzpcIiwgaGFzaEFsZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhhc2hCaXRzID0gaGFzaEFsZy5zdWJzdHIoMiwgMyk7XHJcbiAgICAgICAgaWYgKCFoYXNoQml0cykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogVW5zdXBwb3J0ZWQgYWxnOlwiLCBoYXNoQWxnLCBoYXNoQml0cyk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaGFzaEJpdHMgPSBwYXJzZUludChoYXNoQml0cyk7XHJcbiAgICAgICAgaWYgKGhhc2hCaXRzICE9PSAyNTYgJiYgaGFzaEJpdHMgIT09IDM4NCAmJiBoYXNoQml0cyAhPT0gNTEyKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBVbnN1cHBvcnRlZCBhbGc6XCIsIGhhc2hBbGcsIGhhc2hCaXRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGFsZzogXCIgKyBoYXNoQWxnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2hhID0gXCJzaGFcIiArIGhhc2hCaXRzO1xyXG4gICAgICAgIHZhciBoYXNoID0gdGhpcy5fam9zZVV0aWwuaGFzaFN0cmluZyhyZXNwb25zZS5hY2Nlc3NfdG9rZW4sIHNoYSk7XHJcbiAgICAgICAgaWYgKCFoYXNoKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBhY2Nlc3NfdG9rZW4gaGFzaCBmYWlsZWQ6XCIsIHNoYSk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdmFsaWRhdGUgYXRfaGFzaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGVmdCA9IGhhc2guc3Vic3RyKDAsIGhhc2gubGVuZ3RoIC8gMik7XHJcbiAgICAgICAgdmFyIGxlZnRfYjY0dSA9IHRoaXMuX2pvc2VVdGlsLmhleFRvQmFzZTY0VXJsKGxlZnQpO1xyXG4gICAgICAgIGlmIChsZWZ0X2I2NHUgIT09IHJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIiwgbGVmdF9iNjR1LCByZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IHN1Y2Nlc3NcIik7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9DaGVja1Nlc3Npb25JRnJhbWUuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk1vbml0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHVzZXJNYW5hZ2VyLCBDaGVja1Nlc3Npb25JRnJhbWVDdG9yID0gQ2hlY2tTZXNzaW9uSUZyYW1lLCB0aW1lciA9IEdsb2JhbC50aW1lcikge1xyXG4gICAgICAgIGlmICghdXNlck1hbmFnZXIpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IuY3RvcjogTm8gdXNlciBtYW5hZ2VyIHBhc3NlZCB0byBTZXNzaW9uTW9uaXRvclwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXNlck1hbmFnZXJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlciA9IHVzZXJNYW5hZ2VyO1xyXG4gICAgICAgIHRoaXMuX0NoZWNrU2Vzc2lvbklGcmFtZUN0b3IgPSBDaGVja1Nlc3Npb25JRnJhbWVDdG9yO1xyXG4gICAgICAgIHRoaXMuX3RpbWVyID0gdGltZXI7XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5hZGRVc2VyTG9hZGVkKHRoaXMuX3N0YXJ0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5hZGRVc2VyVW5sb2FkZWQodGhpcy5fc3RvcC5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3VzZXJNYW5hZ2VyLmdldFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAvLyBkb2luZyB0aGlzIG1hbnVhbGx5IGhlcmUgc2luY2UgY2FsbGluZyBnZXRVc2VyIFxyXG4gICAgICAgICAgICAvLyBkb2Vzbid0IHRyaWdnZXIgbG9hZCBldmVudC5cclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHVzZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBVc2VyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlIDogc2Vzc2lvbi5zZXNzaW9uX3N0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdWIgJiYgc2Vzc2lvbi5zaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wVXNlci5wcm9maWxlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiBzZXNzaW9uLnN1YixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZDogc2Vzc2lvbi5zaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodG1wVXNlcik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY3RvclxyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yIGN0b3I6IGVycm9yIGZyb20gcXVlcnlTZXNzaW9uU3RhdHVzOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IgY3RvcjogZXJyb3IgZnJvbSBnZXRVc2VyOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfc2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLnNldHRpbmdzO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9tZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLm1ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuICAgIGdldCBfY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgX2NoZWNrU2Vzc2lvbkludGVydmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgIH1cclxuICAgIGdldCBfc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnN0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdGFydCh1c2VyKSB7XHJcbiAgICAgICAgbGV0IHNlc3Npb25fc3RhdGUgPSB1c2VyLnNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgIGlmIChzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N1YiA9IHVzZXIucHJvZmlsZS5zdWI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWQgPSB1c2VyLnByb2ZpbGUuc2lkO1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uX3N0YXRlLCBcIiwgc3ViOlwiLCB0aGlzLl9zdWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uX3N0YXRlLCBcIiwgYW5vbnltb3VzIHVzZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lKCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBJbml0aWFsaXppbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWVcIilcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGllbnRfaWQgPSB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnRlcnZhbCA9IHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RvcE9uRXJyb3IgPSB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZSA9IG5ldyB0aGlzLl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yKHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyksIGNsaWVudF9pZCwgdXJsLCBpbnRlcnZhbCwgc3RvcE9uRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBObyBjaGVjayBzZXNzaW9uIGlmcmFtZSBmb3VuZCBpbiB0aGUgbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gbm9uLXByb21pc2UgY2FsbGJhY2tcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IEVycm9yIGZyb20gZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdGFydChzZXNzaW9uX3N0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zdWIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdG9wXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIC8vIHVzaW5nIGEgdGltZXIgdG8gZGVsYXkgcmUtaW5pdGlhbGl6YXRpb24gdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBzaWdub3V0XHJcbiAgICAgICAgICAgIGxldCB0aW1lckhhbmRsZSA9IHRoaXMuX3RpbWVyLnNldEludGVydmFsKCgpPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90aW1lci5jbGVhckludGVydmFsKHRpbWVySGFuZGxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBVc2VyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlIDogc2Vzc2lvbi5zZXNzaW9uX3N0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdWIgJiYgc2Vzc2lvbi5zaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wVXNlci5wcm9maWxlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiBzZXNzaW9uLnN1YixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZDogc2Vzc2lvbi5zaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodG1wVXNlcik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY2FsbGJhY2tcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvcjogZXJyb3IgZnJvbSBxdWVyeVNlc3Npb25TdGF0dXM6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICB2YXIgcmFpc2VFdmVudCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc3ViID09PSB0aGlzLl9zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICByYWlzZUV2ZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnNpZCA9PT0gdGhpcy5fc2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2FtZSBzdWIgc3RpbGwgbG9nZ2VkIGluIGF0IE9QLCByZXN0YXJ0aW5nIGNoZWNrIHNlc3Npb24gaWZyYW1lOyBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uLnNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTYW1lIHN1YiBzdGlsbCBsb2dnZWQgaW4gYXQgT1AsIHNlc3Npb24gc3RhdGUgaGFzIGNoYW5nZWQsIHJlc3RhcnRpbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWU7IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IERpZmZlcmVudCBzdWJqZWN0IHNpZ25lZCBpbnRvIE9QOlwiLCBzZXNzaW9uLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFN1YmplY3Qgbm8gbG9uZ2VyIHNpZ25lZCBpbnRvIE9QXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmFpc2VFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBvdXQgZXZlbnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBpbiBldmVudFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlVXNlclNpZ25lZEluKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3ViKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IEVycm9yIGNhbGxpbmcgcXVlcnlDdXJyZW50U2lnbmluU2Vzc2lvbjsgcmFpc2luZyBzaWduZWQgb3V0IGV2ZW50XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5TdGF0ZSB9IGZyb20gJy4vU2lnbmluU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblJlcXVlc3Qge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIC8vIG1hbmRhdG9yeVxyXG4gICAgICAgIHVybCwgY2xpZW50X2lkLCByZWRpcmVjdF91cmksIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCBhdXRob3JpdHksXHJcbiAgICAgICAgLy8gb3B0aW9uYWxcclxuICAgICAgICBkYXRhLCBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGUsIGNsaWVudF9zZWNyZXQsIGV4dHJhVG9rZW5QYXJhbXMsIHNraXBVc2VySW5mb1xyXG4gICAgfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNsaWVudF9pZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWRpcmVjdF91cmlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHJlc3BvbnNlX3R5cGUgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZXNwb25zZV90eXBlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNjb3BlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gc2NvcGUgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY29wZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyBhdXRob3JpdHkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdXRob3JpdHlcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb2lkYyA9IFNpZ25pblJlcXVlc3QuaXNPaWRjKHJlc3BvbnNlX3R5cGUpO1xyXG4gICAgICAgIGxldCBjb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSk7XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2VfbW9kZSkge1xyXG4gICAgICAgICAgICByZXNwb25zZV9tb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSkgPyBcInF1ZXJ5XCIgOiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IG5ldyBTaWduaW5TdGF0ZSh7IG5vbmNlOiBvaWRjLCBcclxuICAgICAgICAgICAgZGF0YSwgY2xpZW50X2lkLCBhdXRob3JpdHksIHJlZGlyZWN0X3VyaSwgXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IGNvZGUsIFxyXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGUsIHJlc3BvbnNlX21vZGUsXHJcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQsIHNjb3BlLCBleHRyYVRva2VuUGFyYW1zLCBza2lwVXNlckluZm8gfSk7XHJcblxyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiY2xpZW50X2lkXCIsIGNsaWVudF9pZCk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJyZWRpcmVjdF91cmlcIiwgcmVkaXJlY3RfdXJpKTtcclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInJlc3BvbnNlX3R5cGVcIiwgcmVzcG9uc2VfdHlwZSk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzY29wZVwiLCBzY29wZSk7XHJcblxyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgaWYgKG9pZGMpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJub25jZVwiLCB0aGlzLnN0YXRlLm5vbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvZGUpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjb2RlX2NoYWxsZW5nZVwiLCB0aGlzLnN0YXRlLmNvZGVfY2hhbGxlbmdlKTtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjb2RlX2NoYWxsZW5nZV9tZXRob2RcIiwgXCJTMjU2XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG9wdGlvbmFsID0geyBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgcmVzcG9uc2VfbW9kZSB9O1xyXG4gICAgICAgIGZvcihsZXQga2V5IGluIG9wdGlvbmFsKXtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbmFsW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgb3B0aW9uYWxba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc09pZGMocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImlkX3Rva2VuXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzT0F1dGgocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcInRva2VuXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBpc0NvZGUocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImNvZGVcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gISEocmVzdWx0WzBdKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBVcmxVdGlsaXR5IH0gZnJvbSAnLi9VcmxVdGlsaXR5LmpzJztcclxuXHJcbmNvbnN0IE9pZGNTY29wZSA9IFwib3BlbmlkXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbmluUmVzcG9uc2Uge1xyXG4gICAgY29uc3RydWN0b3IodXJsLCBkZWxpbWl0ZXIgPSBcIiNcIikge1xyXG5cclxuICAgICAgICB2YXIgdmFsdWVzID0gVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50KHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5jb2RlID0gdmFsdWVzLmNvZGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLmlkX3Rva2VuID0gdmFsdWVzLmlkX3Rva2VuO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbl9zdGF0ZSA9IHZhbHVlcy5zZXNzaW9uX3N0YXRlO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzX3Rva2VuID0gdmFsdWVzLmFjY2Vzc190b2tlbjtcclxuICAgICAgICB0aGlzLnRva2VuX3R5cGUgPSB2YWx1ZXMudG9rZW5fdHlwZTtcclxuICAgICAgICB0aGlzLnNjb3BlID0gdmFsdWVzLnNjb3BlO1xyXG4gICAgICAgIHRoaXMucHJvZmlsZSA9IHVuZGVmaW5lZDsgLy8gd2lsbCBiZSBzZXQgZnJvbSBSZXNwb25zZVZhbGlkYXRvclxyXG5cclxuICAgICAgICB0aGlzLmV4cGlyZXNfaW4gPSB2YWx1ZXMuZXhwaXJlc19pbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlc19pbigpIHtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNfYXQgLSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSl7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBleHBpcmVzX2luID09PSAnbnVtYmVyJyAmJiBleHBpcmVzX2luID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBub3cgKyBleHBpcmVzX2luO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlZCgpIHtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHRoaXMuZXhwaXJlc19pbjtcclxuICAgICAgICBpZiAoZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBpcmVzX2luIDw9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjb3BlcygpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2NvcGUgfHwgXCJcIikuc3BsaXQoXCIgXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc09wZW5JZENvbm5lY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGVzLmluZGV4T2YoT2lkY1Njb3BlKSA+PSAwIHx8ICEhdGhpcy5pZF90b2tlbjtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblN0YXRlIGV4dGVuZHMgU3RhdGUge1xyXG4gICAgY29uc3RydWN0b3Ioe25vbmNlLCBhdXRob3JpdHksIGNsaWVudF9pZCwgcmVkaXJlY3RfdXJpLCBjb2RlX3ZlcmlmaWVyLCByZXNwb25zZV9tb2RlLCBjbGllbnRfc2VjcmV0LCBzY29wZSwgZXh0cmFUb2tlblBhcmFtcywgc2tpcFVzZXJJbmZvfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoYXJndW1lbnRzWzBdKTtcclxuXHJcbiAgICAgICAgaWYgKG5vbmNlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbmNlID0gcmFuZG9tKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5vbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbmNlID0gbm9uY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29kZV92ZXJpZmllciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAvLyByYW5kb20oKSBwcm9kdWNlcyAzMiBsZW5ndGhcclxuICAgICAgICAgICAgdGhpcy5fY29kZV92ZXJpZmllciA9IHJhbmRvbSgpICsgcmFuZG9tKCkgKyByYW5kb20oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlX3ZlcmlmaWVyID0gY29kZV92ZXJpZmllcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBsZXQgaGFzaCA9IEpvc2VVdGlsLmhhc2hTdHJpbmcodGhpcy5jb2RlX3ZlcmlmaWVyLCBcIlNIQTI1NlwiKTtcclxuICAgICAgICAgICAgdGhpcy5fY29kZV9jaGFsbGVuZ2UgPSBKb3NlVXRpbC5oZXhUb0Jhc2U2NFVybChoYXNoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSBhdXRob3JpdHk7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5fZXh0cmFUb2tlblBhcmFtcyA9IGV4dHJhVG9rZW5QYXJhbXM7XHJcbiAgICAgICAgdGhpcy5fc2tpcFVzZXJJbmZvID0gc2tpcFVzZXJJbmZvO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBub25jZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm9uY2U7XHJcbiAgICB9XHJcbiAgICBnZXQgYXV0aG9yaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRob3JpdHk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgY29kZV92ZXJpZmllcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29kZV92ZXJpZmllcjtcclxuICAgIH1cclxuICAgIGdldCBjb2RlX2NoYWxsZW5nZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29kZV9jaGFsbGVuZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfbW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfbW9kZTtcclxuICAgIH1cclxuICAgIGdldCBjbGllbnRfc2VjcmV0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfc2VjcmV0O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjb3BlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcclxuICAgIH1cclxuICAgIGdldCBleHRyYVRva2VuUGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVRva2VuUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNraXBVc2VySW5mbygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2tpcFVzZXJJbmZvO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiB0aGlzLnJlcXVlc3RfdHlwZSxcclxuICAgICAgICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IHRoaXMuY29kZV92ZXJpZmllcixcclxuICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiB0aGlzLnJlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgYXV0aG9yaXR5OiB0aGlzLmF1dGhvcml0eSxcclxuICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudF9pZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VfbW9kZTogdGhpcy5yZXNwb25zZV9tb2RlLFxyXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudF9zZWNyZXQsXHJcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxyXG4gICAgICAgICAgICBleHRyYVRva2VuUGFyYW1zIDogdGhpcy5leHRyYVRva2VuUGFyYW1zLFxyXG4gICAgICAgICAgICBza2lwVXNlckluZm86IHRoaXMuc2tpcFVzZXJJbmZvXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaWduaW5TdGF0ZShkYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXF1ZXN0IHtcclxuICAgIGNvbnN0cnVjdG9yKHt1cmwsIGlkX3Rva2VuX2hpbnQsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSwgZGF0YSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25vdXRSZXF1ZXN0LmN0b3I6IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZF90b2tlbl9oaW50KSB7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiaWRfdG9rZW5faGludFwiLCBpZF90b2tlbl9oaW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIiwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFN0YXRlKHsgZGF0YSwgcmVxdWVzdF90eXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXNwb25zZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih1cmwpIHtcclxuXHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIFwiP1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lsZW50UmVuZXdTZXJ2aWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1c2VyTWFuYWdlcikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyID0gdXNlck1hbmFnZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFjayA9IHRoaXMuX3Rva2VuRXhwaXJpbmcuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcodGhpcy5fY2FsbGJhY2spO1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRyaWdnZXIgbG9hZGluZyBvZiB0aGUgdXNlciBzbyB0aGUgZXhwaXJpbmcgZXZlbnRzIGNhbiBiZSBpbml0aWFsaXplZFxyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5nZXRVc2VyKCkudGhlbih1c2VyPT57XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxpYmVyYXRlIG5vcFxyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnI9PntcclxuICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5zdGFydDogRXJyb3IgZnJvbSBnZXRVc2VyOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMucmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyh0aGlzLl9jYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFjaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3Rva2VuRXhwaXJpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuc2lnbmluU2lsZW50KCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2lsZW50UmVuZXdTZXJ2aWNlLl90b2tlbkV4cGlyaW5nOiBTaWxlbnQgdG9rZW4gcmVuZXdhbCBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0sIGVyciA9PiB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5fdG9rZW5FeHBpcmluZzogRXJyb3IgZnJvbSBzaWduaW5TaWxlbnQ6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtpZCwgZGF0YSwgY3JlYXRlZCwgcmVxdWVzdF90eXBlfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5faWQgPSBpZCB8fCByYW5kb20oKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjcmVhdGVkID09PSAnbnVtYmVyJyAmJiBjcmVhdGVkID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVkID0gY3JlYXRlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWQgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3JlcXVlc3RfdHlwZSA9ICByZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcclxuICAgIH1cclxuICAgIGdldCBkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNyZWF0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVxdWVzdF90eXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdG9yYWdlU3RyaW5nKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLnRvU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxyXG4gICAgICAgICAgICBjcmVhdGVkOiB0aGlzLmNyZWF0ZWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RfdHlwZTogdGhpcy5yZXF1ZXN0X3R5cGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBuZXcgU3RhdGUoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNsZWFyU3RhbGVTdGF0ZShzdG9yYWdlLCBhZ2UpIHtcclxuXHJcbiAgICAgICAgdmFyIGN1dG9mZiA9IERhdGUubm93KCkgLyAxMDAwIC0gYWdlO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RvcmFnZS5nZXRBbGxLZXlzKCkudGhlbihrZXlzID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiBnb3Qga2V5c1wiLCBrZXlzKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBzdG9yYWdlLmdldChrZXkpLnRoZW4oaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoaXRlbSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IGdvdCBpdGVtIGZyb20ga2V5OiBcIiwga2V5LCBzdGF0ZS5jcmVhdGVkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuY3JlYXRlZCA8PSBjdXRvZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IEVycm9yIHBhcnNpbmcgc3RhdGUgZm9yIGtleVwiLCBrZXksIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IG5vIGl0ZW0gaW4gc3RvcmFnZSBmb3Iga2V5OiBcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiByZW1vdmVkIGl0ZW0gZm9yIGtleTogXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yYWdlLnJlbW92ZShrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogd2FpdGluZyBvbiBwcm9taXNlIGNvdW50OlwiLCBwcm9taXNlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xyXG5cclxuY29uc3QgVGltZXJEdXJhdGlvbiA9IDU7IC8vIHNlY29uZHNcclxuXHJcbmV4cG9ydCBjbGFzcyBUaW1lciBleHRlbmRzIEV2ZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0aW1lciA9IEdsb2JhbC50aW1lciwgbm93RnVuYyA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuX3RpbWVyID0gdGltZXI7XHJcblxyXG4gICAgICAgIGlmIChub3dGdW5jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vd0Z1bmMgPSBub3dGdW5jO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbm93RnVuYyA9ICgpID0+IERhdGUubm93KCkgLyAxMDAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm93KCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLl9ub3dGdW5jKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoZHVyYXRpb24pIHtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPD0gMCkge1xyXG4gICAgICAgICAgICBkdXJhdGlvbiA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uID0gcGFyc2VJbnQoZHVyYXRpb24pO1xyXG5cclxuICAgICAgICB2YXIgZXhwaXJhdGlvbiA9IHRoaXMubm93ICsgZHVyYXRpb247XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvbiA9PT0gZXhwaXJhdGlvbiAmJiB0aGlzLl90aW1lckhhbmRsZSkge1xyXG4gICAgICAgICAgICAvLyBubyBuZWVkIHRvIHJlaW5pdGlhbGl6ZSB0byBzYW1lIGV4cGlyYXRpb24sIHNvIGJhaWwgb3V0XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmluaXQgdGltZXIgXCIgKyB0aGlzLl9uYW1lICsgXCIgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24gc2luY2UgYWxyZWFkeSBpbml0aWFsaXplZCBmb3IgZXhwaXJhdGlvbjpcIiwgdGhpcy5leHBpcmF0aW9uKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuaW5pdCB0aW1lciBcIiArIHRoaXMuX25hbWUgKyBcIiBmb3IgZHVyYXRpb246XCIsIGR1cmF0aW9uKTtcclxuICAgICAgICB0aGlzLl9leHBpcmF0aW9uID0gZXhwaXJhdGlvbjtcclxuXHJcbiAgICAgICAgLy8gd2UncmUgdXNpbmcgYSBmYWlybHkgc2hvcnQgdGltZXIgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIGV4cGlyYXRpb24gaW4gdGhlXHJcbiAgICAgICAgLy8gY2FsbGJhY2sgdG8gaGFuZGxlIHNjZW5hcmlvcyB3aGVyZSB0aGUgYnJvd3NlciBkZXZpY2Ugc2xlZXBzLCBhbmQgdGhlblxyXG4gICAgICAgIC8vIHRoZSB0aW1lcnMgZW5kIHVwIGdldHRpbmcgZGVsYXllZC5cclxuICAgICAgICB2YXIgdGltZXJEdXJhdGlvbiA9IFRpbWVyRHVyYXRpb247XHJcbiAgICAgICAgaWYgKGR1cmF0aW9uIDwgdGltZXJEdXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aW1lckR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RpbWVySGFuZGxlID0gdGhpcy5fdGltZXIuc2V0SW50ZXJ2YWwodGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKSwgdGltZXJEdXJhdGlvbiAqIDEwMDApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgZXhwaXJhdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwaXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVySGFuZGxlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmNhbmNlbDogXCIsIHRoaXMuX25hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lci5jbGVhckludGVydmFsKHRoaXMuX3RpbWVySGFuZGxlKTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXJIYW5kbGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2soKSB7XHJcbiAgICAgICAgdmFyIGRpZmYgPSB0aGlzLl9leHBpcmF0aW9uIC0gdGhpcy5ub3c7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuY2FsbGJhY2s7IFwiICsgdGhpcy5fbmFtZSArIFwiIHRpbWVyIGV4cGlyZXMgaW46XCIsIGRpZmYpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwaXJhdGlvbiA8PSB0aGlzLm5vdykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICBzdXBlci5yYWlzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlbkNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UsIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcigpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBleGNoYW5nZUNvZGUoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLmdyYW50X3R5cGUgPSBhcmdzLmdyYW50X3R5cGUgfHwgXCJhdXRob3JpemF0aW9uX2NvZGVcIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLmNsaWVudF9zZWNyZXQgPSBhcmdzLmNsaWVudF9zZWNyZXQgfHwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldDtcclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgdmFyIGJhc2ljQXV0aCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB2YXIgY2xpZW50X2F1dGhlbnRpY2F0aW9uID0gYXJncy5fY2xpZW50X2F1dGhlbnRpY2F0aW9uIHx8IHRoaXMuX3NldHRpbmdzLl9jbGllbnRfYXV0aGVudGljYXRpb247XHJcbiAgICAgICAgZGVsZXRlIGFyZ3MuX2NsaWVudF9hdXRoZW50aWNhdGlvbjtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjb2RlIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY29kZSBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWRpcmVjdF91cmkgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3MuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNvZGVfdmVyaWZpZXIgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjb2RlX3ZlcmlmaWVyIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNsaWVudF9pZCBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5jbGllbnRfc2VjcmV0ICYmIGNsaWVudF9hdXRoZW50aWNhdGlvbiA9PSBcImNsaWVudF9zZWNyZXRfYmFzaWNcIikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNsaWVudF9zZWNyZXQgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjbGllbnRfc2VjcmV0IGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNlbmRpbmcgdGhlIGNsaWVudCBjcmVkZW50aWFscyB1c2luZyB0aGUgQmFzaWMgQXV0aCBtZXRob2RcclxuICAgICAgICBpZihjbGllbnRfYXV0aGVudGljYXRpb24gPT0gXCJjbGllbnRfc2VjcmV0X2Jhc2ljXCIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBiYXNpY0F1dGggPSBhcmdzLmNsaWVudF9pZCArICc6JyArIGFyZ3MuY2xpZW50X3NlY3JldDtcclxuICAgICAgICAgICAgZGVsZXRlIGFyZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICBkZWxldGUgYXJncy5jbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRUb2tlbkVuZHBvaW50KGZhbHNlKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogUmVjZWl2ZWQgdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MsIGJhc2ljQXV0aCkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IHJlc3BvbnNlIHJlY2VpdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBleGNoYW5nZVJlZnJlc2hUb2tlbihhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XHJcblxyXG4gICAgICAgIGFyZ3MuZ3JhbnRfdHlwZSA9IGFyZ3MuZ3JhbnRfdHlwZSB8fCBcInJlZnJlc2hfdG9rZW5cIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLmNsaWVudF9zZWNyZXQgPSBhcmdzLmNsaWVudF9zZWNyZXQgfHwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldDtcclxuXHJcbiAgICAgICAgdmFyIGJhc2ljQXV0aCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB2YXIgY2xpZW50X2F1dGhlbnRpY2F0aW9uID0gYXJncy5fY2xpZW50X2F1dGhlbnRpY2F0aW9uIHx8IHRoaXMuX3NldHRpbmdzLl9jbGllbnRfYXV0aGVudGljYXRpb247XHJcbiAgICAgICAgZGVsZXRlIGFyZ3MuX2NsaWVudF9hdXRoZW50aWNhdGlvbjtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLnJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IE5vIHJlZnJlc2hfdG9rZW4gcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWZyZXNoX3Rva2VuIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogTm8gY2xpZW50X2lkIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY2xpZW50X2lkIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNlbmRpbmcgdGhlIGNsaWVudCBjcmVkZW50aWFscyB1c2luZyB0aGUgQmFzaWMgQXV0aCBtZXRob2RcclxuICAgICAgICBpZihjbGllbnRfYXV0aGVudGljYXRpb24gPT0gXCJjbGllbnRfc2VjcmV0X2Jhc2ljXCIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBiYXNpY0F1dGggPSBhcmdzLmNsaWVudF9pZCArICc6JyArIGFyZ3MuY2xpZW50X3NlY3JldDtcclxuICAgICAgICAgICAgZGVsZXRlIGFyZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICBkZWxldGUgYXJncy5jbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRUb2tlbkVuZHBvaW50KGZhbHNlKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiBSZWNlaXZlZCB0b2tlbiBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MsIGJhc2ljQXV0aCkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogcmVzcG9uc2UgcmVjZWl2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5jb25zdCBBY2Nlc3NUb2tlblR5cGVIaW50ID0gXCJhY2Nlc3NfdG9rZW5cIjtcclxuY29uc3QgUmVmcmVzaFRva2VuVHlwZUhpbnQgPSBcInJlZnJlc2hfdG9rZW5cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlblJldm9jYXRpb25DbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MsIFhNTEh0dHBSZXF1ZXN0Q3RvciA9IEdsb2JhbC5YTUxIdHRwUmVxdWVzdCwgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXR0aW5ncyBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX1hNTEh0dHBSZXF1ZXN0Q3RvciA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2b2tlKHRva2VuLCByZXF1aXJlZCwgdHlwZSA9IFwiYWNjZXNzX3Rva2VuXCIpIHtcclxuICAgICAgICBpZiAoIXRva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IE5vIHRva2VuIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0b2tlbiBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZSAhPT0gQWNjZXNzVG9rZW5UeXBlSGludCAmJiB0eXBlICE9IFJlZnJlc2hUb2tlblR5cGVIaW50KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IEludmFsaWQgdG9rZW4gdHlwZVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0b2tlbiB0eXBlLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0UmV2b2NhdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogUmV2b2NhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJldm9jYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBub3QgcmVxdWlyZWQsIHNvIGRvbid0IGVycm9yIGFuZCBqdXN0IHJldHVyblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBSZXZva2luZyBcIiArIHR5cGUpO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50X2lkID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50X3NlY3JldCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9zZWNyZXQ7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2UodXJsLCBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHRva2VuLCB0eXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlKHVybCwgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCB0b2tlbiwgdHlwZSkge1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIHhociA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdEN0b3IoKTtcclxuICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogSFRUUCByZXNwb25zZSByZWNlaXZlZCwgc3RhdHVzXCIsIHhoci5zdGF0dXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoeGhyLnN0YXR1c1RleHQgKyBcIiAoXCIgKyB4aHIuc3RhdHVzICsgXCIpXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogTmV0d29yayBFcnJvci5cIilcclxuICAgICAgICAgICAgICAgIHJlamVjdChcIk5ldHdvcmsgRXJyb3JcIik7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB2YXIgYm9keSA9IFwiY2xpZW50X2lkPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGNsaWVudF9pZCk7XHJcbiAgICAgICAgICAgIGlmIChjbGllbnRfc2VjcmV0KSB7XHJcbiAgICAgICAgICAgICAgICBib2R5ICs9IFwiJmNsaWVudF9zZWNyZXQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50X3NlY3JldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYm9keSArPSBcIiZ0b2tlbl90eXBlX2hpbnQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodHlwZSk7XHJcbiAgICAgICAgICAgIGJvZHkgKz0gXCImdG9rZW49XCIgKyBlbmNvZGVVUklDb21wb25lbnQodG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XHJcbiAgICAgICAgICAgIHhoci5zZW5kKGJvZHkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVybFV0aWxpdHkge1xyXG4gICAgc3RhdGljIGFkZFF1ZXJ5UGFyYW0odXJsLCBuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xyXG4gICAgICAgICAgICB1cmwgKz0gXCI/XCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodXJsW3VybC5sZW5ndGggLSAxXSAhPT0gXCI/XCIpIHtcclxuICAgICAgICAgICAgdXJsICs9IFwiJlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXJsICs9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcclxuICAgICAgICB1cmwgKz0gXCI9XCI7XHJcbiAgICAgICAgdXJsICs9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHBhcnNlVXJsRnJhZ21lbnQodmFsdWUsIGRlbGltaXRlciA9IFwiI1wiLCBnbG9iYWwgPSBHbG9iYWwpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyl7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZ2xvYmFsLmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaWR4ID0gdmFsdWUubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHIoaWR4ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVsaW1pdGVyID09PSBcIj9cIikge1xyXG4gICAgICAgICAgICAvLyBpZiB3ZSdyZSBkb2luZyBxdWVyeSwgdGhlbiBzdHJpcCBvZmYgaGFzaCBmcmFnbWVudCBiZWZvcmUgd2UgcGFyc2VcclxuICAgICAgICAgICAgaWR4ID0gdmFsdWUuaW5kZXhPZignIycpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyKDAsIGlkeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYXJhbXMgPSB7fSxcclxuICAgICAgICAgICAgcmVnZXggPSAvKFteJj1dKyk9KFteJl0qKS9nLFxyXG4gICAgICAgICAgICBtO1xyXG5cclxuICAgICAgICB2YXIgY291bnRlciA9IDA7XHJcbiAgICAgICAgd2hpbGUgKG0gPSByZWdleC5leGVjKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBwYXJhbXNbZGVjb2RlVVJJQ29tcG9uZW50KG1bMV0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChtWzJdLnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcclxuICAgICAgICAgICAgaWYgKGNvdW50ZXIrKyA+IDUwKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQ6IHJlc3BvbnNlIGV4Y2VlZGVkIGV4cGVjdGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzXCIsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiUmVzcG9uc2UgZXhjZWVkZWQgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnNcIlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7aWRfdG9rZW4sIHNlc3Npb25fc3RhdGUsIGFjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgdG9rZW5fdHlwZSwgc2NvcGUsIHByb2ZpbGUsIGV4cGlyZXNfYXQsIHN0YXRlfSkge1xyXG4gICAgICAgIHRoaXMuaWRfdG9rZW4gPSBpZF90b2tlbjtcclxuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzX3Rva2VuID0gYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaF90b2tlbiA9IHJlZnJlc2hfdG9rZW47XHJcbiAgICAgICAgdGhpcy50b2tlbl90eXBlID0gdG9rZW5fdHlwZTtcclxuICAgICAgICB0aGlzLnNjb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZTtcclxuICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBleHBpcmVzX2F0O1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlc19pbigpIHtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNfYXQgLSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSkge1xyXG4gICAgICAgIGxldCBleHBpcmVzX2luID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXhwaXJlc19pbiA9PT0gJ251bWJlcicgJiYgZXhwaXJlc19pbiA+IDApIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5leHBpcmVzX2F0ID0gbm93ICsgZXhwaXJlc19pbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cGlyZWQoKSB7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSB0aGlzLmV4cGlyZXNfaW47XHJcbiAgICAgICAgaWYgKGV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhwaXJlc19pbiA8PSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY29wZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNjb3BlIHx8IFwiXCIpLnNwbGl0KFwiIFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlci50b1N0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgaWRfdG9rZW46IHRoaXMuaWRfdG9rZW4sXHJcbiAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IHRoaXMuc2Vzc2lvbl9zdGF0ZSxcclxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiB0aGlzLmFjY2Vzc190b2tlbixcclxuICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogdGhpcy5yZWZyZXNoX3Rva2VuLFxyXG4gICAgICAgICAgICB0b2tlbl90eXBlOiB0aGlzLnRva2VuX3R5cGUsXHJcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxyXG4gICAgICAgICAgICBwcm9maWxlOiB0aGlzLnByb2ZpbGUsXHJcbiAgICAgICAgICAgIGV4cGlyZXNfYXQ6IHRoaXMuZXhwaXJlc19hdFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlci5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gbmV3IFVzZXIoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuL0pzb25TZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlckluZm9TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHNldHRpbmdzLCBcclxuICAgICAgICBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSwgXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSwgXHJcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuY3RvcjogTm8gc2V0dGluZ3MgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLl9nZXRDbGFpbXNGcm9tSnd0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9qb3NlVXRpbCA9IGpvc2VVdGlsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENsYWltcyh0b2tlbikge1xyXG4gICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogTm8gdG9rZW4gcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSB0b2tlbiBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFVzZXJJbmZvRW5kcG9pbnQoKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5nZXRDbGFpbXM6IHJlY2VpdmVkIHVzZXJpbmZvIHVybFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLmdldEpzb24odXJsLCB0b2tlbikudGhlbihjbGFpbXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogY2xhaW1zIHJlY2VpdmVkXCIsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0Q2xhaW1zRnJvbUp3dChyZXEpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgand0ID0gdGhpcy5fam9zZVV0aWwucGFyc2VKd3QocmVxLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyIHx8ICFqd3QucGF5bG9hZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBGYWlsZWQgdG8gcGFyc2UgSldUXCIsIGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGtpZCA9IGp3dC5oZWFkZXIua2lkO1xyXG5cclxuICAgICAgICAgICAgbGV0IGlzc3VlclByb21pc2U7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc2V0dGluZ3MudXNlckluZm9Kd3RJc3N1ZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ09QJzpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQU5ZJzpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGp3dC5wYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlclByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcy5fc2V0dGluZ3MudXNlckluZm9Kd3RJc3N1ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaXNzdWVyUHJvbWlzZS50aGVuKGlzc3VlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFJlY2VpdmVkIGlzc3VlcjpcIiArIGlzc3Vlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5cygpLnRoZW4oa2V5cyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFJlY2VpdmVkIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgha2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgPSB0aGlzLl9maWx0ZXJCeUFsZyhrZXlzLCBqd3QuaGVhZGVyLmFsZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraWQgaXMgbWFuZGF0b3J5IG9ubHkgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUga2V5cyBpbiB0aGUgcmVmZXJlbmNlZCBKV0sgU2V0IGRvY3VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNTaWduaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5raWQgPT09IGtpZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBWYWxpZGFpbmcgSldUOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dChyZXEucmVzcG9uc2VUZXh0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcywgdW5kZWZpbmVkLCB0cnVlKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBKV1QgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gand0LnBheWxvYWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBFcnJvciBwYXJzaW5nIEpXVCByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2ZpbHRlckJ5QWxnKGtleXMsIGFsZykge1xyXG4gICAgICAgIHZhciBrdHkgPSBudWxsO1xyXG4gICAgICAgIGlmIChhbGcuc3RhcnRzV2l0aChcIlJTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUlNBXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiUFNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJQU1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIkVTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiRUNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZmlsdGVyQnlBbGc6IGFsZyBub3Qgc3VwcG9ydGVkOiBcIiwgYWxnKTtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogTG9va2luZyBmb3Iga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSk7XHJcblxyXG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5Lmt0eSA9PT0ga3R5O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2ZpbHRlckJ5QWxnOiBOdW1iZXIgb2Yga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSwga2V5cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICByZXR1cm4ga2V5cztcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnQgfSBmcm9tICcuL09pZGNDbGllbnQuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlclNldHRpbmdzIH0gZnJvbSAnLi9Vc2VyTWFuYWdlclNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4vVXNlci5qcyc7XHJcbmltcG9ydCB7IFVzZXJNYW5hZ2VyRXZlbnRzIH0gZnJvbSAnLi9Vc2VyTWFuYWdlckV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IFNpbGVudFJlbmV3U2VydmljZSB9IGZyb20gJy4vU2lsZW50UmVuZXdTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgU2Vzc2lvbk1vbml0b3IgfSBmcm9tICcuL1Nlc3Npb25Nb25pdG9yLmpzJztcclxuaW1wb3J0IHsgU2lnbmluUmVxdWVzdCB9IGZyb20gXCIuL1NpZ25pblJlcXVlc3RcIjtcclxuaW1wb3J0IHsgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IH0gZnJvbSAnLi9Ub2tlblJldm9jYXRpb25DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vVG9rZW5DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlciBleHRlbmRzIE9pZGNDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MgPSB7fSxcclxuICAgICAgICBTaWxlbnRSZW5ld1NlcnZpY2VDdG9yID0gU2lsZW50UmVuZXdTZXJ2aWNlLFxyXG4gICAgICAgIFNlc3Npb25Nb25pdG9yQ3RvciA9IFNlc3Npb25Nb25pdG9yLFxyXG4gICAgICAgIFRva2VuUmV2b2NhdGlvbkNsaWVudEN0b3IgPSBUb2tlblJldm9jYXRpb25DbGllbnQsXHJcbiAgICAgICAgVG9rZW5DbGllbnRDdG9yID0gVG9rZW5DbGllbnQsXHJcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxyXG4gICAgKSB7XHJcblxyXG4gICAgICAgIGlmICghKHNldHRpbmdzIGluc3RhbmNlb2YgVXNlck1hbmFnZXJTZXR0aW5ncykpIHtcclxuICAgICAgICAgICAgc2V0dGluZ3MgPSBuZXcgVXNlck1hbmFnZXJTZXR0aW5ncyhzZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyKHNldHRpbmdzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFVzZXJNYW5hZ2VyRXZlbnRzKHNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2UgPSBuZXcgU2lsZW50UmVuZXdTZXJ2aWNlQ3Rvcih0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gb3JkZXIgaXMgaW1wb3J0YW50IGZvciB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM7IHRoZXNlIHNlcnZpY2VzIGRlcGVuZCB1cG9uIHRoZSBldmVudHMuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYXV0b21hdGljU2lsZW50UmVuZXcpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogYXV0b21hdGljU2lsZW50UmVuZXcgaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzaWxlbnQgcmVuZXdcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTaWxlbnRSZW5ldygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubW9uaXRvclNlc3Npb24pIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogbW9uaXRvclNlc3Npb24gaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzZXNzaW9uIG1vbml0b3JcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25Nb25pdG9yID0gbmV3IFNlc3Npb25Nb25pdG9yQ3Rvcih0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudCA9IG5ldyBUb2tlblJldm9jYXRpb25DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl90b2tlbkNsaWVudCA9IG5ldyBUb2tlbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9yZWRpcmVjdE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5yZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfcG9wdXBOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucG9wdXBOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX2lmcmFtZU5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pZnJhbWVOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX3VzZXJTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy51c2VyU3RvcmU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV2ZW50cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuZ2V0VXNlcjogdXNlciBsb2FkZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlciwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5nZXRVc2VyOiB1c2VyIG5vdCBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVVc2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcihudWxsKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5yZW1vdmVVc2VyOiB1c2VyIHJlbW92ZWQgZnJvbSBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMudW5sb2FkKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluUmVkaXJlY3QoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6clwiO1xyXG4gICAgICAgIGxldCBuYXZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLCBuYXZQYXJhbXMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25pblJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZCh1cmwgfHwgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IudXJsKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUmVkaXJlY3RDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblBvcHVwKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnBcIjtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IE5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW4oYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxyXG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBzaWduaW5Qb3B1cCBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbmluUG9wdXBDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluQ2FsbGJhY2sodXJsLCB0aGlzLl9wb3B1cE5hdmlnYXRvcikudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXBDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pLmNhdGNoKGVycj0+e1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrIGVycm9yOiBcIiArIGVyciAmJiBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluU2lsZW50KGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgLy8gZmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYSByZWZyZXNoIHRva2VuLCBvciBuZWVkIHRvIHVzZSBpZnJhbWVcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLnJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIGFyZ3MucmVmcmVzaF90b2tlbiA9IHVzZXIucmVmcmVzaF90b2tlbjtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VSZWZyZXNoVG9rZW4oYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6c1wiO1xyXG4gICAgICAgICAgICAgICAgYXJncy5pZF90b2tlbl9oaW50ID0gYXJncy5pZF90b2tlbl9oaW50IHx8ICh0aGlzLnNldHRpbmdzLmluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyAmJiB1c2VyICYmIHVzZXIuaWRfdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIgJiYgdGhpcy5fc2V0dGluZ3MudmFsaWRhdGVTdWJPblNpbGVudFJlbmV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50LCBzdWJqZWN0IHByaW9yIHRvIHNpbGVudCByZW5ldzogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyZ3MuY3VycmVudF9zdWIgPSB1c2VyLnByb2ZpbGUuc3ViO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblNpbGVudElmcmFtZShhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF91c2VSZWZyZXNoVG9rZW4oYXJncyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuKGFyZ3MpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IE5vIHJlc3BvbnNlIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJObyByZXNwb25zZSByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0LmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3VzZVJlZnJlc2hUb2tlbjogTm8gYWNjZXNzIHRva2VuIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJObyBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkVG9rZW5WYWxpZGF0aW9uID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZFRva2VuVmFsaWRhdGlvbiA9IHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbih1c2VyLnByb2ZpbGUsIHJlc3VsdC5pZF90b2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWRUb2tlblZhbGlkYXRpb24udGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IHJlZnJlc2ggdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5pZF90b2tlbiA9IHJlc3VsdC5pZF90b2tlbiB8fCB1c2VyLmlkX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmFjY2Vzc190b2tlbiA9IHJlc3VsdC5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIucmVmcmVzaF90b2tlbiA9IHJlc3VsdC5yZWZyZXNoX3Rva2VuIHx8IHVzZXIucmVmcmVzaF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5leHBpcmVzX2luID0gcmVzdWx0LmV4cGlyZXNfaW47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbihwcm9maWxlLCBpZF90b2tlbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCkudGhlbihpc3N1ZXIgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5nZXRFcG9jaFRpbWUoKS50aGVuKG5vdyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGlkX3Rva2VuLCBpc3N1ZXIsIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCwgdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3LCBub3cpLnRoZW4ocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IEZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnN1YiAhPT0gcHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogc3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXV0aF90aW1lICYmIHBheWxvYWQuYXV0aF90aW1lICE9PSBwcm9maWxlLmF1dGhfdGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBhdXRoX3RpbWUgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggb3JpZ2luYWwgYXV0aF90aW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXV0aF90aW1lIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF1dGhfdGltZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gcHJvZmlsZS5henApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogYXpwIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF6cFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF6cCBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhenBcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuYXpwICYmIHByb2ZpbGUuYXpwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF6cCBub3QgaW4gaWRfdG9rZW4sIGJ1dCBwcmVzZW50IGluIG9yaWdpbmFsIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXpwIG5vdCBpbiBpZF90b2tlbiwgYnV0IHByZXNlbnQgaW4gb3JpZ2luYWwgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgX3NpZ25pblNpbGVudElmcmFtZShhcmdzID0ge30pIHtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gdXJsO1xyXG4gICAgICAgIGFyZ3MucHJvbXB0ID0gYXJncy5wcm9tcHQgfHwgXCJub25lXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW4oYXJncywgdGhpcy5faWZyYW1lTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0OiBhcmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXRcclxuICAgICAgICB9KS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQ6IHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50OiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblNpbGVudENhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5DYWxsYmFjayh1cmwsIHRoaXMuX2lmcmFtZU5hdmlnYXRvcikudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50Q2FsbGJhY2s6IHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50Q2FsbGJhY2s6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluQ2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25pblJlc3BvbnNlU3RhdGUodXJsKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNpOnJcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbmluUmVkaXJlY3RDYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic2k6cFwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaW5Qb3B1cENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzaTpzXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25pblNpbGVudENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImludmFsaWQgcmVzcG9uc2VfdHlwZSBpbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbm91dENhbGxiYWNrKHVybCwga2VlcE9wZW4pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic286clwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic286cFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbm91dFBvcHVwQ2FsbGJhY2sodXJsLCBrZWVwT3Blbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZV90eXBlIGluIHN0YXRlXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVlcnlTZXNzaW9uU3RhdHVzKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnNcIjsgLy8gdGhpcyBhY3RzIGxpa2UgYSBzaWduaW4gc2lsZW50XHJcbiAgICAgICAgbGV0IHVybCA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IE5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLnByb21wdCA9IFwibm9uZVwiO1xyXG4gICAgICAgIGFyZ3MucmVzcG9uc2VfdHlwZSA9IGFyZ3MucmVzcG9uc2VfdHlwZSB8fCB0aGlzLnNldHRpbmdzLnF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIGFyZ3Muc2NvcGUgPSBhcmdzLnNjb3BlIHx8IFwib3BlbmlkXCI7XHJcbiAgICAgICAgYXJncy5za2lwVXNlckluZm8gPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU3RhcnQoYXJncywgdGhpcy5faWZyYW1lTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0OiBhcmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXRcclxuICAgICAgICB9KS50aGVuKG5hdlJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25pblJlc3BvbnNlKG5hdlJlc3BvbnNlLnVybCkudGhlbihzaWduaW5SZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IGdvdCBzaWduaW4gcmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNpZ25pblJlc3BvbnNlLnNlc3Npb25fc3RhdGUgJiYgc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogcXVlcnlTZXNzaW9uU3RhdHVzIHN1Y2Nlc3MgZm9yIHN1YjogXCIsICBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogc2lnbmluUmVzcG9uc2Uuc2Vzc2lvbl9zdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1YixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkOiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnNpZFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcInF1ZXJ5U2Vzc2lvblN0YXR1cyBzdWNjZXNzZnVsLCB1c2VyIG5vdCBhdXRoZW50aWNhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuc2Vzc2lvbl9zdGF0ZSAmJiB0aGlzLnNldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlID09IFwibG9naW5fcmVxdWlyZWRcIiB8fCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT0gXCJjb25zZW50X3JlcXVpcmVkXCIgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID09IFwiaW50ZXJhY3Rpb25fcmVxdWlyZWRcIiB8fCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT0gXCJhY2NvdW50X3NlbGVjdGlvbl9yZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBxdWVyeVNlc3Npb25TdGF0dXMgc3VjY2VzcyBmb3IgYW5vbnltb3VzIHVzZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBlcnIuc2Vzc2lvbl9zdGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9zaWduaW4oYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TdGFydChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcykudGhlbihuYXZSZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5FbmQobmF2UmVzcG9uc2UudXJsLCBhcmdzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWduaW5TdGFydChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IucHJlcGFyZShuYXZpZ2F0b3JQYXJhbXMpLnRoZW4oaGFuZGxlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pblN0YXJ0OiBnb3QgbmF2aWdhdG9yIHdpbmRvdyBoYW5kbGVcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTaWduaW5SZXF1ZXN0KGFyZ3MpLnRoZW4oc2lnbmluUmVxdWVzdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IGdvdCBzaWduaW4gcmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMudXJsID0gc2lnbmluUmVxdWVzdC51cmw7XHJcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMuaWQgPSBzaWduaW5SZXF1ZXN0LnN0YXRlLmlkO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUubmF2aWdhdGUobmF2aWdhdG9yUGFyYW1zKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUuY2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IEVycm9yIGFmdGVyIHByZXBhcmluZyBuYXZpZ2F0b3IsIGNsb3NpbmcgbmF2aWdhdG9yIHdpbmRvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbmluRW5kKHVybCwgYXJncyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25pblJlc3BvbnNlKHVybCkudGhlbihzaWduaW5SZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5FbmQ6IGdvdCBzaWduaW4gcmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgICAgICBsZXQgdXNlciA9IG5ldyBVc2VyKHNpZ25pblJlc3BvbnNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcmdzLmN1cnJlbnRfc3ViKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5jdXJyZW50X3N1YiAhPT0gdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5FbmQ6IGN1cnJlbnQgdXNlciBkb2VzIG5vdCBtYXRjaCB1c2VyIHJldHVybmVkIGZyb20gc2lnbmluLiBzdWIgZnJvbSBzaWduaW46IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibG9naW5fcmVxdWlyZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogY3VycmVudCB1c2VyIG1hdGNoZXMgdXNlciByZXR1cm5lZCBmcm9tIHNpZ25pblwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKHVzZXIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogdXNlciBzdG9yZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25pbkNhbGxiYWNrKHVybCwgbmF2aWdhdG9yKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkNhbGxiYWNrXCIpO1xyXG4gICAgICAgIGxldCB1c2VRdWVyeSA9IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGUgPT09IFwicXVlcnlcIiB8fCAoIXRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGUgJiYgU2lnbmluUmVxdWVzdC5pc0NvZGUodGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfdHlwZSkpO1xyXG4gICAgICAgIGxldCBkZWxpbWl0ZXIgPSB1c2VRdWVyeSA/IFwiP1wiIDogXCIjXCI7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5jYWxsYmFjayh1cmwsIHVuZGVmaW5lZCwgZGVsaW1pdGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzaWdub3V0UmVkaXJlY3QoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic286clwiO1xyXG4gICAgICAgIGxldCBwb3N0TG9nb3V0UmVkaXJlY3RVcmkgPSBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBpZiAocG9zdExvZ291dFJlZGlyZWN0VXJpKXtcclxuICAgICAgICAgICAgYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0TG9nb3V0UmVkaXJlY3RVcmk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBuYXZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRTdGFydChhcmdzLCB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvciwgbmF2UGFyYW1zKS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFJlZGlyZWN0OiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRFbmQodXJsIHx8IHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLnVybCkudGhlbihyZXNwb25zZT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRSZWRpcmVjdENhbGxiYWNrOiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbm91dFBvcHVwKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNvOnBcIjtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSB1cmw7XHJcbiAgICAgICAgYXJncy5kaXNwbGF5ID0gXCJwb3B1cFwiO1xyXG4gICAgICAgIGlmIChhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSl7XHJcbiAgICAgICAgICAgIC8vIHdlJ3JlIHB1dHRpbmcgYSBkdW1teSBlbnRyeSBpbiBoZXJlIGJlY2F1c2Ugd2VcclxuICAgICAgICAgICAgLy8gbmVlZCBhIHVuaXF1ZSBpZCBmcm9tIHRoZSBzdGF0ZSBmb3Igbm90aWZpY2F0aW9uXHJcbiAgICAgICAgICAgIC8vIHRvIHRoZSBwYXJlbnQgd2luZG93LCB3aGljaCBpcyBuZWNlc3NhcnkgaWYgd2VcclxuICAgICAgICAgICAgLy8gcGxhbiB0byByZXR1cm4gYmFjayB0byB0aGUgY2xpZW50IGFmdGVyIHNpZ25vdXRcclxuICAgICAgICAgICAgLy8gYW5kIHNvIHdlIGNhbiBjbG9zZSB0aGUgcG9wdXAgYWZ0ZXIgc2lnbm91dFxyXG4gICAgICAgICAgICBhcmdzLnN0YXRlID0gYXJncy5zdGF0ZSB8fCB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0KGFyZ3MsIHRoaXMuX3BvcHVwTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHBvcHVwV2luZG93RmVhdHVyZXM6IGFyZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCB0aGlzLnNldHRpbmdzLnBvcHVwV2luZG93RmVhdHVyZXMsXHJcbiAgICAgICAgICAgIHBvcHVwV2luZG93VGFyZ2V0OiBhcmdzLnBvcHVwV2luZG93VGFyZ2V0IHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dUYXJnZXRcclxuICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UG9wdXA6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzaWdub3V0UG9wdXBDYWxsYmFjayh1cmwsIGtlZXBPcGVuKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihrZWVwT3BlbikgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZih1cmwpID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAga2VlcE9wZW4gPSB1cmw7XHJcbiAgICAgICAgICAgIHVybCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGVsaW1pdGVyID0gJz8nO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cE5hdmlnYXRvci5jYWxsYmFjayh1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRQb3B1cENhbGxiYWNrOiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9zaWdub3V0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dFN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zKS50aGVuKG5hdlJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRFbmQobmF2UmVzcG9uc2UudXJsKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWdub3V0U3RhcnQoYXJncyA9IHt9LCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5wcmVwYXJlKG5hdmlnYXRvclBhcmFtcykudGhlbihoYW5kbGUgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBnb3QgbmF2aWdhdG9yIHdpbmRvdyBoYW5kbGVcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogbG9hZGVkIGN1cnJlbnQgdXNlciBmcm9tIHN0b3JhZ2VcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHJldm9rZVByb21pc2UgPSB0aGlzLl9zZXR0aW5ncy5yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCA/IHRoaXMuX3Jldm9rZUludGVybmFsKHVzZXIpIDogUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2b2tlUHJvbWlzZS50aGVuKCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkX3Rva2VuID0gYXJncy5pZF90b2tlbl9oaW50IHx8IHVzZXIgJiYgdXNlci5pZF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogU2V0dGluZyBpZF90b2tlbiBpbnRvIHNpZ25vdXQgcmVxdWVzdFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5pZF90b2tlbl9oaW50ID0gaWRfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVVc2VyKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IHVzZXIgcmVtb3ZlZCwgY3JlYXRpbmcgc2lnbm91dCByZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2lnbm91dFJlcXVlc3QoYXJncykudGhlbihzaWdub3V0UmVxdWVzdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBnb3Qgc2lnbm91dCByZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy51cmwgPSBzaWdub3V0UmVxdWVzdC51cmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbm91dFJlcXVlc3Quc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMuaWQgPSBzaWdub3V0UmVxdWVzdC5zdGF0ZS5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUubmF2aWdhdGUobmF2aWdhdG9yUGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUuY2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBFcnJvciBhZnRlciBwcmVwYXJpbmcgbmF2aWdhdG9yLCBjbG9zaW5nIG5hdmlnYXRvciB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25vdXRFbmQodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25vdXRSZXNwb25zZSh1cmwpLnRoZW4oc2lnbm91dFJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRFbmQ6IGdvdCBzaWdub3V0IHJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNpZ25vdXRSZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXZva2VBY2Nlc3NUb2tlbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlSW50ZXJuYWwodXNlciwgdHJ1ZSkudGhlbihzdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IHJlbW92aW5nIHRva2VuIHByb3BlcnRpZXMgZnJvbSB1c2VyIGFuZCByZS1zdG9yaW5nXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB1c2VyLmFjY2Vzc190b2tlbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci5yZWZyZXNoX3Rva2VuID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLmV4cGlyZXNfYXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIudG9rZW5fdHlwZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcih1c2VyKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IHVzZXIgc3RvcmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSkudGhlbigoKT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiBhY2Nlc3MgdG9rZW4gcmV2b2tlZCBzdWNjZXNzZnVsbHlcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZUludGVybmFsKHVzZXIsIHJlcXVpcmVkKSB7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgdmFyIGFjY2Vzc190b2tlbiA9IHVzZXIuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICB2YXIgcmVmcmVzaF90b2tlbiA9IHVzZXIucmVmcmVzaF90b2tlbjtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VBY2Nlc3NUb2tlbkludGVybmFsKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbihhdFN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbChyZWZyZXNoX3Rva2VuLCByZXF1aXJlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocnRTdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXRTdWNjZXNzICYmICFydFN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogbm8gbmVlZCB0byByZXZva2UgZHVlIHRvIG5vIHRva2VuKHMpLCBvciBKV1QgZm9ybWF0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXRTdWNjZXNzIHx8IHJ0U3VjY2VzcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXZva2VBY2Nlc3NUb2tlbkludGVybmFsKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpIHtcclxuICAgICAgICAvLyBjaGVjayBmb3IgSldUIHZzLiByZWZlcmVuY2UgdG9rZW5cclxuICAgICAgICBpZiAoIWFjY2Vzc190b2tlbiB8fCBhY2Nlc3NfdG9rZW4uaW5kZXhPZignLicpID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZShhY2Nlc3NfdG9rZW4sIHJlcXVpcmVkKS50aGVuKCgpID0+IHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbChyZWZyZXNoX3Rva2VuLCByZXF1aXJlZCkge1xyXG4gICAgICAgIGlmICghcmVmcmVzaF90b2tlbikge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkLCBcInJlZnJlc2hfdG9rZW5cIikudGhlbigoKSA9PiB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydFNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZS5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BTaWxlbnRSZW5ldygpIHtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2Uuc3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfdXNlclN0b3JlS2V5KCkge1xyXG4gICAgICAgIHJldHVybiBgdXNlcjoke3RoaXMuc2V0dGluZ3MuYXV0aG9yaXR5fToke3RoaXMuc2V0dGluZ3MuY2xpZW50X2lkfWA7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRVc2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmUuZ2V0KHRoaXMuX3VzZXJTdG9yZUtleSkudGhlbihzdG9yYWdlU3RyaW5nID0+IHtcclxuICAgICAgICAgICAgaWYgKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9sb2FkVXNlcjogdXNlciBzdG9yYWdlU3RyaW5nIGxvYWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBVc2VyLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fbG9hZFVzZXI6IG5vIHVzZXIgc3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcmVVc2VyKHVzZXIpIHtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5zdG9yZVVzZXI6IHN0b3JpbmcgdXNlclwiKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzdG9yYWdlU3RyaW5nID0gdXNlci50b1N0b3JhZ2VTdHJpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5zZXQodGhpcy5fdXNlclN0b3JlS2V5LCBzdG9yYWdlU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcInN0b3JlVXNlci5zdG9yZVVzZXI6IHJlbW92aW5nIHVzZXJcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmUucmVtb3ZlKHRoaXMuX3VzZXJTdG9yZUtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgQWNjZXNzVG9rZW5FdmVudHMgfSBmcm9tICcuL0FjY2Vzc1Rva2VuRXZlbnRzLmpzJztcclxuaW1wb3J0IHsgRXZlbnQgfSBmcm9tICcuL0V2ZW50LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlckV2ZW50cyBleHRlbmRzIEFjY2Vzc1Rva2VuRXZlbnRzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncykge1xyXG4gICAgICAgIHN1cGVyKHNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl91c2VyTG9hZGVkID0gbmV3IEV2ZW50KFwiVXNlciBsb2FkZWRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkID0gbmV3IEV2ZW50KFwiVXNlciB1bmxvYWRlZFwiKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yID0gbmV3IEV2ZW50KFwiU2lsZW50IHJlbmV3IGVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRJbiA9IG5ldyBFdmVudChcIlVzZXIgc2lnbmVkIGluXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQgPSBuZXcgRXZlbnQoXCJVc2VyIHNpZ25lZCBvdXRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkID0gbmV3IEV2ZW50KFwiVXNlciBzZXNzaW9uIGNoYW5nZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZCh1c2VyLCByYWlzZUV2ZW50PXRydWUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5sb2FkXCIpO1xyXG4gICAgICAgIHN1cGVyLmxvYWQodXNlcik7XHJcbiAgICAgICAgaWYgKHJhaXNlRXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXNlckxvYWRlZC5yYWlzZSh1c2VyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB1bmxvYWQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMudW5sb2FkXCIpO1xyXG4gICAgICAgIHN1cGVyLnVubG9hZCgpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJVbmxvYWRlZC5yYWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJMb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyTG9hZGVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlckxvYWRlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclVubG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclVubG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFNpbGVudFJlbmV3RXJyb3IoY2IpIHtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlU2lsZW50UmVuZXdFcnJvcihjYikge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VTaWxlbnRSZW5ld0Vycm9yKGUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VTaWxlbnRSZW5ld0Vycm9yXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5yYWlzZShlKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyU2lnbmVkSW4oY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkSW4uYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyU2lnbmVkSW4oY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkSW4ucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VVc2VyU2lnbmVkSW4oKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlVXNlclNpZ25lZEluXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRJbi5yYWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJTaWduZWRPdXQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0LmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclNpZ25lZE91dChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VVc2VyU2lnbmVkT3V0KCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dC5yYWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJTZXNzaW9uQ2hhbmdlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXNzaW9uQ2hhbmdlZC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVVzZXJTZXNzaW9uQ2hhbmdlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXNzaW9uQ2hhbmdlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLnJhaXNlKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IFJlZGlyZWN0TmF2aWdhdG9yIH0gZnJvbSAnLi9SZWRpcmVjdE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IFBvcHVwTmF2aWdhdG9yIH0gZnJvbSAnLi9Qb3B1cE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IElGcmFtZU5hdmlnYXRvciB9IGZyb20gJy4vSUZyYW1lTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgV2ViU3RvcmFnZVN0YXRlU3RvcmUgfSBmcm9tICcuL1dlYlN0b3JhZ2VTdGF0ZVN0b3JlLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5SZXF1ZXN0IH0gZnJvbSAnLi9TaWduaW5SZXF1ZXN0LmpzJztcclxuXHJcbmNvbnN0IERlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IDYwO1xyXG5jb25zdCBEZWZhdWx0Q2hlY2tTZXNzaW9uSW50ZXJ2YWwgPSAyMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyU2V0dGluZ3MgZXh0ZW5kcyBPaWRjQ2xpZW50U2V0dGluZ3Mge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIHBvcHVwX3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICBwb3B1cFdpbmRvd1RhcmdldCxcclxuICAgICAgICBzaWxlbnRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0LFxyXG4gICAgICAgIGF1dG9tYXRpY1NpbGVudFJlbmV3ID0gZmFsc2UsXHJcbiAgICAgICAgdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3ID0gZmFsc2UsXHJcbiAgICAgICAgaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3ID0gdHJ1ZSxcclxuICAgICAgICBtb25pdG9yU2Vzc2lvbiA9IHRydWUsXHJcbiAgICAgICAgbW9uaXRvckFub255bW91c1Nlc3Npb24gPSBmYWxzZSxcclxuICAgICAgICBjaGVja1Nlc3Npb25JbnRlcnZhbCA9IERlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCxcclxuICAgICAgICBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvciA9IHRydWUsXHJcbiAgICAgICAgcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUsXHJcbiAgICAgICAgcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQgPSBmYWxzZSxcclxuICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IERlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSxcclxuICAgICAgICByZWRpcmVjdE5hdmlnYXRvciA9IG5ldyBSZWRpcmVjdE5hdmlnYXRvcigpLFxyXG4gICAgICAgIHBvcHVwTmF2aWdhdG9yID0gbmV3IFBvcHVwTmF2aWdhdG9yKCksXHJcbiAgICAgICAgaWZyYW1lTmF2aWdhdG9yID0gbmV3IElGcmFtZU5hdmlnYXRvcigpLFxyXG4gICAgICAgIHVzZXJTdG9yZSA9IG5ldyBXZWJTdG9yYWdlU3RhdGVTdG9yZSh7IHN0b3JlOiBHbG9iYWwuc2Vzc2lvblN0b3JhZ2UgfSlcclxuICAgIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKGFyZ3VtZW50c1swXSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3BvcHVwX3JlZGlyZWN0X3VyaSA9IHBvcHVwX3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBXaW5kb3dGZWF0dXJlcyA9IHBvcHVwV2luZG93RmVhdHVyZXM7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBXaW5kb3dUYXJnZXQgPSBwb3B1cFdpbmRvd1RhcmdldDtcclxuXHJcbiAgICAgICAgdGhpcy5fc2lsZW50X3JlZGlyZWN0X3VyaSA9IHNpbGVudF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVxdWVzdFRpbWVvdXQgPSBzaWxlbnRSZXF1ZXN0VGltZW91dDtcclxuICAgICAgICB0aGlzLl9hdXRvbWF0aWNTaWxlbnRSZW5ldyA9IGF1dG9tYXRpY1NpbGVudFJlbmV3O1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyA9IHZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldztcclxuICAgICAgICB0aGlzLl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcgPSBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXc7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5fbW9uaXRvclNlc3Npb24gPSBtb25pdG9yU2Vzc2lvbjtcclxuICAgICAgICB0aGlzLl9tb25pdG9yQW5vbnltb3VzU2Vzc2lvbiA9IG1vbml0b3JBbm9ueW1vdXNTZXNzaW9uO1xyXG4gICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsID0gY2hlY2tTZXNzaW9uSW50ZXJ2YWw7XHJcbiAgICAgICAgdGhpcy5fc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IgPSBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuICAgICAgICBpZiAocXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50c1swXSAmJiBhcmd1bWVudHNbMF0ucmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IFNpZ25pblJlcXVlc3QuaXNPaWRjKGFyZ3VtZW50c1swXS5yZXNwb25zZV90eXBlKSA/IFwiaWRfdG9rZW5cIiA6IFwiY29kZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBcImlkX3Rva2VuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0ID0gcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQ7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yID0gcmVkaXJlY3ROYXZpZ2F0b3I7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBOYXZpZ2F0b3IgPSBwb3B1cE5hdmlnYXRvcjtcclxuICAgICAgICB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IgPSBpZnJhbWVOYXZpZ2F0b3I7XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJTdG9yZSA9IHVzZXJTdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcG9wdXBfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBXaW5kb3dGZWF0dXJlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBXaW5kb3dGZWF0dXJlcztcclxuICAgIH1cclxuICAgIGdldCBwb3B1cFdpbmRvd1RhcmdldCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBXaW5kb3dUYXJnZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNpbGVudF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpbGVudF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICAgZ2V0IHNpbGVudFJlcXVlc3RUaW1lb3V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWxlbnRSZXF1ZXN0VGltZW91dDtcclxuICAgIH1cclxuICAgIGdldCBhdXRvbWF0aWNTaWxlbnRSZW5ldygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b21hdGljU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb25pdG9yU2Vzc2lvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbW9uaXRvclNlc3Npb247XHJcbiAgICB9XHJcbiAgICBnZXQgbW9uaXRvckFub255bW91c1Nlc3Npb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vbml0b3JBbm9ueW1vdXNTZXNzaW9uO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNoZWNrU2Vzc2lvbkludGVydmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgIH1cclxuICAgIGdldCBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvcigpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuICAgIH1cclxuICAgIGdldCBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcclxuICAgIH1cclxuICAgIGdldCByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlZGlyZWN0TmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBwb3B1cE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgaWZyYW1lTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pZnJhbWVOYXZpZ2F0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHVzZXJTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtwcmVmaXggPSBcIm9pZGMuXCIsIHN0b3JlID0gR2xvYmFsLmxvY2FsU3RvcmFnZX0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuX3N0b3JlID0gc3RvcmU7XHJcbiAgICAgICAgdGhpcy5fcHJlZml4ID0gcHJlZml4O1xyXG4gICAgfVxyXG5cclxuICAgIHNldChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUuc2V0XCIsIGtleSk7XHJcblxyXG4gICAgICAgIGtleSA9IHRoaXMuX3ByZWZpeCArIGtleTtcclxuXHJcbiAgICAgICAgdGhpcy5fc3RvcmUuc2V0SXRlbShrZXksIHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChrZXkpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5nZXRcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX3N0b3JlLmdldEl0ZW0oa2V5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUoa2V5KSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUucmVtb3ZlXCIsIGtleSk7XHJcblxyXG4gICAgICAgIGtleSA9IHRoaXMuX3ByZWZpeCArIGtleTtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLl9zdG9yZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgdGhpcy5fc3RvcmUucmVtb3ZlSXRlbShrZXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbEtleXMoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUuZ2V0QWxsS2V5c1wiKTtcclxuXHJcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX3N0b3JlLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBsZXQga2V5ID0gdGhpcy5fc3RvcmUua2V5KGluZGV4KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZih0aGlzLl9wcmVmaXgpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5LnN1YnN0cih0aGlzLl9wcmVmaXgubGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5cyk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgandzLCBLRVlVVElMIGFzIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCB9IGZyb20gJy4uLy4uL2pzcnNhc2lnbi9kaXN0L2pzcnNhc2lnbi5qcyc7XHJcblxyXG5jb25zdCBBbGxvd2VkU2lnbmluZ0FsZ3MgPSBbJ1JTMjU2JywgJ1JTMzg0JywgJ1JTNTEyJywgJ1BTMjU2JywgJ1BTMzg0JywgJ1BTNTEyJywgJ0VTMjU2JywgJ0VTMzg0JywgJ0VTNTEyJ107XHJcblxyXG5leHBvcnQge1xyXG4gICAgandzLFxyXG4gICAgS2V5VXRpbCxcclxuICAgIFg1MDksXHJcbiAgICBjcnlwdG8sXHJcbiAgICBoZXh0b2I2NHUsXHJcbiAgICBiNjR0b2hleCxcclxuICAgIEFsbG93ZWRTaWduaW5nQWxnc1xyXG59O1xyXG4iLCIvKipcclxuICogR2VuZXJhdGVzIFJGQzQxMjIgdmVyc2lvbiA0IGd1aWQgKClcclxuICovXHJcblxyXG52YXIgY3J5cHRvID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSA/ICh3aW5kb3cuY3J5cHRvIHx8IHdpbmRvdy5tc0NyeXB0bykgOiBudWxsO1xyXG5cclxuZnVuY3Rpb24gX2NyeXB0b1V1aWR2NCgpIHtcclxuICByZXR1cm4gKFsxZTddKy0xZTMrLTRlMystOGUzKy0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBjID0+XHJcbiAgICAoYyBeIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMSkpWzBdICYgMTUgPj4gYyAvIDQpLnRvU3RyaW5nKDE2KVxyXG4gIClcclxufVxyXG5cclxuZnVuY3Rpb24gX3V1aWR2NCgpIHtcclxuICAgIHJldHVybiAoWzFlN10rLTFlMystNGUzKy04ZTMrLTFlMTEpLnJlcGxhY2UoL1swMThdL2csIGMgPT5cclxuICAgIChjIF4gTWF0aC5yYW5kb20oKSAqIDE2ID4+IGMgLyA0KS50b1N0cmluZygxNilcclxuICApXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmRvbSgpIHtcclxuICB2YXIgaGFzQ3J5cHRvID0gY3J5cHRvICE9ICd1bmRlZmluZWQnICYmIGNyeXB0byAhPT0gbnVsbDtcclxuICB2YXIgaGFzUmFuZG9tVmFsdWVzID0gaGFzQ3J5cHRvICYmICh0eXBlb2YoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykgIT0gJ3VuZGVmaW5lZCcpOyAgXHJcbiAgdmFyIHV1aWQgPSBoYXNSYW5kb21WYWx1ZXMgPyBfY3J5cHRvVXVpZHY0IDogX3V1aWR2NDtcclxuICByZXR1cm4gdXVpZCgpLnJlcGxhY2UoLy0vZywgJycpO1xyXG59XHJcbiIsImNvbnN0IFZlcnNpb24gPSBcIjEuMTEuNi1iZXRhLjFcIjsgZXhwb3J0IHtWZXJzaW9ufTsiXSwic291cmNlUm9vdCI6IiJ9