vendor: 3,641 bytes, lines 1-88
1/******/ (function(modules) { // webpackBootstrap 2/******/ // The module cache 3/******/ var installedModules = {}; 4/******/ 5/******/ // The require function 6/******/ function __webpack_require__(moduleId) { 7/******/ 8/******/ // Check if module is in cache 9/******/ if(installedModules[moduleId]) { 10/******/ return installedModules[moduleId].exports; 11/******/ } 12/******/ // Create a new module (and put it into the cache) 13/******/ var module = installedModules[moduleId] = { 14/******/ i: moduleId, 15/******/ l: false, 16/******/ exports: {} 17/******/ }; 18/******/ 19/******/ // Execute the module function 20/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 21/******/ 22/******/ // Flag the module as loaded 23/******/ module.l = true; 24/******/ 25/******/ // Return the exports of the module 26/******/ return module.exports; 27/******/ } 28/******/ 29/******/ 30/******/ // expose the modules object (__webpack_modules__) 31/******/ __webpack_require__.m = modules; 32/******/ 33/******/ // expose the module cache 34/******/ __webpack_require__.c = installedModules; 35/******/ 36/******/ // define getter function for harmony exports 37/******/ __webpack_require__.d = function(exports, name, getter) { 38/******/ if(!__webpack_require__.o(exports, name)) { 39/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 40/******/ } 41/******/ }; 42/******/ 43/******/ // define __esModule on exports 44/******/ __webpack_require__.r = function(exports) { 45/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 46/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 47/******/ } 48/******/ Object.defineProperty(exports, '__esModule', { value: true }); 49/******/ }; 50/******/ 51/******/ // create a fake namespace object 52/******/ // mode & 1: value is a module id, require it 53/******/ // mode & 2: merge all properties of value into the ns 54/******/ // mode & 4: return value when already ns object 55/******/ // mode & 8|1: behave like require 56/******/ __webpack_require__.t = function(value, mode) { 57/******/ if(mode & 1) value = __webpack_require__(value); 58/******/ if(mode & 8) return value; 59/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 60/******/ var ns = Object.create(null); 61/******/ __webpack_require__.r(ns); 62/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 63/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 64/******/ return ns; 65/******/ }; 66/******/ 67/******/ // getDefaultExport function for compatibility with non-harmony modules 68/******/ __webpack_require__.n = function(module) { 69/******/ var getter = module && module.__esModule ? 70/******/ function getDefault() { return module['default']; } : 71/******/ function getModuleExports() { return module; }; 72/******/ __webpack_require__.d(getter, 'a', getter); 73/******/ return getter; 74/******/ }; 75/******/ 76/******/ // Object.prototype.hasOwnProperty.call 77/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 78/******/ 79/******/ // __webpack_public_path__ 80/******/ __webpack_require__.p = "/libraries/vue/"; 81/******/ 82/******/ 83/******/ // Load entry module and return exports 84/******/ return __webpack_require__(__webpack_require__.s = "./app/opening-hours-week-app.js"); 85/******/ }) 86/************************************************************************/ 87/******/ ({ 88
89/***/ "./app/components/OpeningHours/OpeningHour.vue": 90/*!*****************************************************!*\ 91 !*** ./app/components/OpeningHours/OpeningHour.vue ***! 92 \*****************************************************/ 93/*! no static exports found */ 94/***/ (function(module, __webpack_exports__, __webpack_require__) { 95 96"use strict"; 97__webpack_require__.r(__webpack_exports__); 98/* harmony import */ var _OpeningHour_vue_vue_type_template_id_cb64a19e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./OpeningHour.vue?vue&type=template&id=cb64a19e& */ "./app/components/OpeningHours/OpeningHour.vue?vue&type=template&id=cb64a19e&"); 99/* harmony import */ var _OpeningHour_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OpeningHour.vue?vue&type=script&lang=js& */ "./app/components/OpeningHours/OpeningHour.vue?vue&type=script&lang=js&"); 100/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _OpeningHour_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _OpeningHour_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__)); 101/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); 102 103 104 105 106 107/* normalize component */ 108 109var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( 110 _OpeningHour_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], 111 _OpeningHour_vue_vue_type_template_id_cb64a19e___WEBPACK_IMPORTED_MODULE_0__["render"], 112 _OpeningHour_vue_vue_type_template_id_cb64a19e___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"], 113 false, 114 null, 115 null, 116 null 117 118) 119 120/* hot reload */ 121if (false) { var api; } 122component.options.__file = "app/components/OpeningHours/OpeningHour.vue" 123/* harmony default export */ __webpack_exports__["default"] = (component.exports); 124 125/***/ }), 126 127/***/ "./app/components/OpeningHours/OpeningHour.vue?vue&type=script&lang=js&": 128/*!******************************************************************************!*\ 129 !*** ./app/components/OpeningHours/OpeningHour.vue?vue&type=script&lang=js& ***! 130 \******************************************************************************/ 131/*! no static exports found */ 132/***/ (function(module, __webpack_exports__, __webpack_require__) { 133 134"use strict"; 135__webpack_require__.r(__webpack_exports__); 136/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHour_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib!../../../node_modules/vue-loader/lib??vue-loader-options!./OpeningHour.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./app/components/OpeningHours/OpeningHour.vue?vue&type=script&lang=js&"); 137/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHour_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHour_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__); 138/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHour_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHour_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); 139 /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHour_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default.a); 140 141/***/ }), 142 143/***/ "./app/components/OpeningHours/OpeningHour.vue?vue&type=template&id=cb64a19e&": 144/*!************************************************************************************!*\ 145 !*** ./app/components/OpeningHours/OpeningHour.vue?vue&type=template&id=cb64a19e& ***! 146 \************************************************************************************/ 147/*! exports provided: render, staticRenderFns */ 148/***/ (function(module, __webpack_exports__, __webpack_require__) { 149 150"use strict"; 151__webpack_require__.r(__webpack_exports__); 152/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHour_vue_vue_type_template_id_cb64a19e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./OpeningHour.vue?vue&type=template&id=cb64a19e& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/components/OpeningHours/OpeningHour.vue?vue&type=template&id=cb64a19e&"); 153/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHour_vue_vue_type_template_id_cb64a19e___WEBPACK_IMPORTED_MODULE_0__["render"]; }); 154 155/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHour_vue_vue_type_template_id_cb64a19e___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); 156 157 158 159/***/ }), 160
161/***/ "./app/components/OpeningHours/OpeningHoursWeek.vue": 162/*!**********************************************************!*\ 163 !*** ./app/components/OpeningHours/OpeningHoursWeek.vue ***! 164 \**********************************************************/ 165/*! no static exports found */ 166/***/ (function(module, __webpack_exports__, __webpack_require__) { 167 168"use strict"; 169__webpack_require__.r(__webpack_exports__); 170/* harmony import */ var _OpeningHoursWeek_vue_vue_type_template_id_496d15b4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./OpeningHoursWeek.vue?vue&type=template&id=496d15b4& */ "./app/components/OpeningHours/OpeningHoursWeek.vue?vue&type=template&id=496d15b4&"); 171/* harmony import */ var _OpeningHoursWeek_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OpeningHoursWeek.vue?vue&type=script&lang=js& */ "./app/components/OpeningHours/OpeningHoursWeek.vue?vue&type=script&lang=js&"); 172/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _OpeningHoursWeek_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _OpeningHoursWeek_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__)); 173/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); 174 175 176 177 178 179/* normalize component */ 180 181var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( 182 _OpeningHoursWeek_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], 183 _OpeningHoursWeek_vue_vue_type_template_id_496d15b4___WEBPACK_IMPORTED_MODULE_0__["render"], 184 _OpeningHoursWeek_vue_vue_type_template_id_496d15b4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"], 185 false, 186 null, 187 null, 188 null 189 190) 191 192/* hot reload */ 193if (false) { var api; } 194component.options.__file = "app/components/OpeningHours/OpeningHoursWeek.vue" 195/* harmony default export */ __webpack_exports__["default"] = (component.exports); 196 197/***/ }), 198 199/***/ "./app/components/OpeningHours/OpeningHoursWeek.vue?vue&type=script&lang=js&": 200/*!***********************************************************************************!*\ 201 !*** ./app/components/OpeningHours/OpeningHoursWeek.vue?vue&type=script&lang=js& ***! 202 \***********************************************************************************/ 203/*! no static exports found */ 204/***/ (function(module, __webpack_exports__, __webpack_require__) { 205 206"use strict"; 207__webpack_require__.r(__webpack_exports__); 208/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursWeek_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib!../../../node_modules/vue-loader/lib??vue-loader-options!./OpeningHoursWeek.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./app/components/OpeningHours/OpeningHoursWeek.vue?vue&type=script&lang=js&"); 209/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursWeek_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursWeek_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__); 210/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursWeek_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursWeek_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); 211 /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursWeek_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default.a); 212 213/***/ }), 214 215/***/ "./app/components/OpeningHours/OpeningHoursWeek.vue?vue&type=template&id=496d15b4&": 216/*!*****************************************************************************************!*\ 217 !*** ./app/components/OpeningHours/OpeningHoursWeek.vue?vue&type=template&id=496d15b4& ***! 218 \*****************************************************************************************/ 219/*! exports provided: render, staticRenderFns */ 220/***/ (function(module, __webpack_exports__, __webpack_require__) { 221 222"use strict"; 223__webpack_require__.r(__webpack_exports__); 224/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursWeek_vue_vue_type_template_id_496d15b4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./OpeningHoursWeek.vue?vue&type=template&id=496d15b4& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/components/OpeningHours/OpeningHoursWeek.vue?vue&type=template&id=496d15b4&"); 225/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursWeek_vue_vue_type_template_id_496d15b4___WEBPACK_IMPORTED_MODULE_0__["render"]; }); 226 227/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursWeek_vue_vue_type_template_id_496d15b4___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); 228 229 230 231/***/ }), 232
233/***/ "./app/opening-hours-week-app.js": 234/*!***************************************!*\ 235 !*** ./app/opening-hours-week-app.js ***! 236 \***************************************/ 237/*! no static exports found */ 238/***/ (function(module, exports, __webpack_require__) { 239 240"use strict"; 241 242 243var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 244 245var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js")); 246 247var _OpeningHoursWeek = _interopRequireDefault(__webpack_require__(/*! ./components/OpeningHours/OpeningHoursWeek */ "./app/components/OpeningHours/OpeningHoursWeek.vue")); 248 249// Support multiple vue contact cards on one page. 250var vueElements = document.getElementsByClassName("vue-opening-hours-week"); 251var count = vueElements.length; 252 253for (var i = 0; i < count; i++) { 254 // Create a vue instance per opening hours component. 255 new _vue.default({ 256 el: vueElements[i], 257 components: { 258 OpeningHoursWeek: _OpeningHoursWeek.default 259 } 260 }); 261} 262 263/***/ }), 264
265/***/ "./app/utils/api.js": 266/*!**************************!*\ 267 !*** ./app/utils/api.js ***! 268 \**************************/ 269/*! no static exports found */ 270/***/ (function(module, exports, __webpack_require__) { 271 272"use strict"; 273 274 275var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 276 277Object.defineProperty(exports, "__esModule", { 278 value: true 279}); 280exports.default = void 0; 281 282var _axios = _interopRequireDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); 283 284var _drupalSettings = drupalSettings, 285 openingHours = _drupalSettings.openingHours, 286 path = _drupalSettings.path; 287var _openingHours$apiBase = openingHours.apiBaseUrl, 288 apiBaseUrl = _openingHours$apiBase === void 0 ? null : _openingHours$apiBase; 289var _path$pathPrefix = path.pathPrefix, 290 pathPrefix = _path$pathPrefix === void 0 ? "" : _path$pathPrefix; 291 292var _default = function _default() { 293 return _axios.default.create({ 294 baseURL: "".concat(apiBaseUrl || window.location.origin, "/").concat(pathPrefix, "jsonapi"), 295 headers: { 296 'Accept': 'application/json', 297 'Content-Type': 'application/json' 298 } 299 }); 300}; 301 302exports.default = _default; 303 304/***/ }), 305
vendor: 1,168 bytes, lines 306-352
306/***/ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js": 307/*!*****************************************************************!*\ 308 !*** ./node_modules/@babel/runtime/helpers/asyncToGenerator.js ***! 309 \*****************************************************************/ 310/*! no static exports found */ 311/***/ (function(module, exports) { 312 313function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { 314 try { 315 var info = gen[key](arg); 316 var value = info.value; 317 } catch (error) { 318 reject(error); 319 return; 320 } 321 322 if (info.done) { 323 resolve(value); 324 } else { 325 Promise.resolve(value).then(_next, _throw); 326 } 327} 328 329function _asyncToGenerator(fn) { 330 return function () { 331 var self = this, 332 args = arguments; 333 return new Promise(function (resolve, reject) { 334 var gen = fn.apply(self, args); 335 336 function _next(value) { 337 asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); 338 } 339 340 function _throw(err) { 341 asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); 342 } 343 344 _next(undefined); 345 }); 346 }; 347} 348 349module.exports = _asyncToGenerator; 350 351/***/ }), 352
vendor: 526 bytes, lines 353-369
353/***/ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js": 354/*!**********************************************************************!*\ 355 !*** ./node_modules/@babel/runtime/helpers/interopRequireDefault.js ***! 356 \**********************************************************************/ 357/*! no static exports found */ 358/***/ (function(module, exports) { 359 360function _interopRequireDefault(obj) { 361 return obj && obj.__esModule ? obj : { 362 "default": obj 363 }; 364} 365 366module.exports = _interopRequireDefault; 367 368/***/ }), 369
vendor: 465 bytes, lines 370-380
370/***/ "./node_modules/@babel/runtime/regenerator/index.js": 371/*!**********************************************************!*\ 372 !*** ./node_modules/@babel/runtime/regenerator/index.js ***! 373 \**********************************************************/ 374/*! no static exports found */ 375/***/ (function(module, exports, __webpack_require__) { 376 377module.exports = __webpack_require__(/*! regenerator-runtime */ "./node_modules/regenerator-runtime/runtime.js"); 378 379/***/ }), 380
vendor: 361 bytes, lines 381-391
381/***/ "./node_modules/axios/index.js": 382/*!*************************************!*\ 383 !*** ./node_modules/axios/index.js ***! 384 \*************************************/ 385/*! no static exports found */ 386/***/ (function(module, exports, __webpack_require__) { 387 388module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js"); 389 390/***/ }), 391
vendor: 6,552 bytes, lines 392-579
392/***/ "./node_modules/axios/lib/adapters/xhr.js": 393/*!************************************************!*\ 394 !*** ./node_modules/axios/lib/adapters/xhr.js ***! 395 \************************************************/ 396/*! no static exports found */ 397/***/ (function(module, exports, __webpack_require__) { 398 399"use strict"; 400 401 402var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 403 404var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js"); 405 406var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js"); 407 408var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./node_modules/axios/lib/core/buildFullPath.js"); 409 410var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js"); 411 412var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js"); 413 414var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js"); 415 416module.exports = function xhrAdapter(config) { 417 return new Promise(function dispatchXhrRequest(resolve, reject) { 418 var requestData = config.data; 419 var requestHeaders = config.headers; 420 421 if (utils.isFormData(requestData)) { 422 delete requestHeaders['Content-Type']; // Let the browser set it 423 } 424 425 var request = new XMLHttpRequest(); // HTTP basic authentication 426 427 if (config.auth) { 428 var username = config.auth.username || ''; 429 var password = config.auth.password || ''; 430 requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); 431 } 432 433 var fullPath = buildFullPath(config.baseURL, config.url); 434 request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); // Set the request timeout in MS 435 436 request.timeout = config.timeout; // Listen for ready state 437 438 request.onreadystatechange = function handleLoad() { 439 if (!request || request.readyState !== 4) { 440 return; 441 } // The request errored out and we didn't get a response, this will be 442 // handled by onerror instead 443 // With one exception: request that using file: protocol, most browsers 444 // will return status as 0 even though it's a successful request 445 446 447 if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { 448 return; 449 } // Prepare the response 450 451 452 var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; 453 var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; 454 var response = { 455 data: responseData, 456 status: request.status, 457 statusText: request.statusText, 458 headers: responseHeaders, 459 config: config, 460 request: request 461 }; 462 settle(resolve, reject, response); // Clean up request 463 464 request = null; 465 }; // Handle browser request cancellation (as opposed to a manual cancellation) 466 467 468 request.onabort = function handleAbort() { 469 if (!request) { 470 return; 471 } 472 473 reject(createError('Request aborted', config, 'ECONNABORTED', request)); // Clean up request 474 475 request = null; 476 }; // Handle low level network errors 477 478 479 request.onerror = function handleError() { 480 // Real errors are hidden from us by the browser 481 // onerror should only fire if it's a network error 482 reject(createError('Network Error', config, null, request)); // Clean up request 483 484 request = null; 485 }; // Handle timeout 486 487 488 request.ontimeout = function handleTimeout() { 489 var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded'; 490 491 if (config.timeoutErrorMessage) { 492 timeoutErrorMessage = config.timeoutErrorMessage; 493 } 494 495 reject(createError(timeoutErrorMessage, config, 'ECONNABORTED', request)); // Clean up request 496 497 request = null; 498 }; // Add xsrf header 499 // This is only done if running in a standard browser environment. 500 // Specifically not if we're in a web worker, or react-native. 501 502 503 if (utils.isStandardBrowserEnv()) { 504 var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js"); // Add xsrf header 505 506 507 var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined; 508 509 if (xsrfValue) { 510 requestHeaders[config.xsrfHeaderName] = xsrfValue; 511 } 512 } // Add headers to the request 513 514 515 if ('setRequestHeader' in request) { 516 utils.forEach(requestHeaders, function setRequestHeader(val, key) { 517 if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { 518 // Remove Content-Type if data is undefined 519 delete requestHeaders[key]; 520 } else { 521 // Otherwise add header to the request 522 request.setRequestHeader(key, val); 523 } 524 }); 525 } // Add withCredentials to request if needed 526 527 528 if (!utils.isUndefined(config.withCredentials)) { 529 request.withCredentials = !!config.withCredentials; 530 } // Add responseType to request if needed 531 532 533 if (config.responseType) { 534 try { 535 request.responseType = config.responseType; 536 } catch (e) { 537 // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2. 538 // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function. 539 if (config.responseType !== 'json') { 540 throw e; 541 } 542 } 543 } // Handle progress if needed 544 545 546 if (typeof config.onDownloadProgress === 'function') { 547 request.addEventListener('progress', config.onDownloadProgress); 548 } // Not all browsers support upload events 549 550 551 if (typeof config.onUploadProgress === 'function' && request.upload) { 552 request.upload.addEventListener('progress', config.onUploadProgress); 553 } 554 555 if (config.cancelToken) { 556 // Handle cancellation 557 config.cancelToken.promise.then(function onCanceled(cancel) { 558 if (!request) { 559 return; 560 } 561 562 request.abort(); 563 reject(cancel); // Clean up request 564 565 request = null; 566 }); 567 } 568 569 if (requestData === undefined) { 570 requestData = null; 571 } // Send the request 572 573 574 request.send(requestData); 575 }); 576}; 577 578/***/ }), 579
vendor: 2,252 bytes, lines 580-641
580/***/ "./node_modules/axios/lib/axios.js": 581/*!*****************************************!*\ 582 !*** ./node_modules/axios/lib/axios.js ***! 583 \*****************************************/ 584/*! no static exports found */ 585/***/ (function(module, exports, __webpack_require__) { 586 587"use strict"; 588 589 590var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); 591 592var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); 593 594var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js"); 595 596var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js"); 597 598var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js"); 599/** 600 * Create an instance of Axios 601 * 602 * @param {Object} defaultConfig The default config for the instance 603 * @return {Axios} A new instance of Axios 604 */ 605 606 607function createInstance(defaultConfig) { 608 var context = new Axios(defaultConfig); 609 var instance = bind(Axios.prototype.request, context); // Copy axios.prototype to instance 610 611 utils.extend(instance, Axios.prototype, context); // Copy context to instance 612 613 utils.extend(instance, context); 614 return instance; 615} // Create the default instance to be exported 616 617 618var axios = createInstance(defaults); // Expose Axios class to allow class inheritance 619 620axios.Axios = Axios; // Factory for creating new instances 621 622axios.create = function create(instanceConfig) { 623 return createInstance(mergeConfig(axios.defaults, instanceConfig)); 624}; // Expose Cancel & CancelToken 625 626 627axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 628axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js"); 629axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); // Expose all/spread 630 631axios.all = function all(promises) { 632 return Promise.all(promises); 633}; 634 635axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js"); 636module.exports = axios; // Allow use of default import syntax in TypeScript 637 638module.exports.default = axios; 639 640/***/ }), 641
vendor: 700 bytes, lines 642-670
642/***/ "./node_modules/axios/lib/cancel/Cancel.js": 643/*!*************************************************!*\ 644 !*** ./node_modules/axios/lib/cancel/Cancel.js ***! 645 \*************************************************/ 646/*! no static exports found */ 647/***/ (function(module, exports, __webpack_require__) { 648 649"use strict"; 650 651/** 652 * A `Cancel` is an object that is thrown when an operation is canceled. 653 * 654 * @class 655 * @param {string=} message The message. 656 */ 657 658function Cancel(message) { 659 this.message = message; 660} 661 662Cancel.prototype.toString = function toString() { 663 return 'Cancel' + (this.message ? ': ' + this.message : ''); 664}; 665 666Cancel.prototype.__CANCEL__ = true; 667module.exports = Cancel; 668 669/***/ }), 670
vendor: 1,639 bytes, lines 671-740
671/***/ "./node_modules/axios/lib/cancel/CancelToken.js": 672/*!******************************************************!*\ 673 !*** ./node_modules/axios/lib/cancel/CancelToken.js ***! 674 \******************************************************/ 675/*! no static exports found */ 676/***/ (function(module, exports, __webpack_require__) { 677 678"use strict"; 679 680 681var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 682/** 683 * A `CancelToken` is an object that can be used to request cancellation of an operation. 684 * 685 * @class 686 * @param {Function} executor The executor function. 687 */ 688 689 690function CancelToken(executor) { 691 if (typeof executor !== 'function') { 692 throw new TypeError('executor must be a function.'); 693 } 694 695 var resolvePromise; 696 this.promise = new Promise(function promiseExecutor(resolve) { 697 resolvePromise = resolve; 698 }); 699 var token = this; 700 executor(function cancel(message) { 701 if (token.reason) { 702 // Cancellation has already been requested 703 return; 704 } 705 706 token.reason = new Cancel(message); 707 resolvePromise(token.reason); 708 }); 709} 710/** 711 * Throws a `Cancel` if cancellation has been requested. 712 */ 713 714 715CancelToken.prototype.throwIfRequested = function throwIfRequested() { 716 if (this.reason) { 717 throw this.reason; 718 } 719}; 720/** 721 * Returns an object that contains a new `CancelToken` and a function that, when called, 722 * cancels the `CancelToken`. 723 */ 724 725 726CancelToken.source = function source() { 727 var cancel; 728 var token = new CancelToken(function executor(c) { 729 cancel = c; 730 }); 731 return { 732 token: token, 733 cancel: cancel 734 }; 735}; 736 737module.exports = CancelToken; 738 739/***/ }), 740
vendor: 426 bytes, lines 741-756
741/***/ "./node_modules/axios/lib/cancel/isCancel.js": 742/*!***************************************************!*\ 743 !*** ./node_modules/axios/lib/cancel/isCancel.js ***! 744 \***************************************************/ 745/*! no static exports found */ 746/***/ (function(module, exports, __webpack_require__) { 747 748"use strict"; 749 750 751module.exports = function isCancel(value) { 752 return !!(value && value.__CANCEL__); 753}; 754 755/***/ }), 756
vendor: 3,241 bytes, lines 757-862
757/***/ "./node_modules/axios/lib/core/Axios.js": 758/*!**********************************************!*\ 759 !*** ./node_modules/axios/lib/core/Axios.js ***! 760 \**********************************************/ 761/*! no static exports found */ 762/***/ (function(module, exports, __webpack_require__) { 763 764"use strict"; 765 766 767var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 768 769var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js"); 770 771var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js"); 772 773var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js"); 774 775var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js"); 776/** 777 * Create a new instance of Axios 778 * 779 * @param {Object} instanceConfig The default config for the instance 780 */ 781 782 783function Axios(instanceConfig) { 784 this.defaults = instanceConfig; 785 this.interceptors = { 786 request: new InterceptorManager(), 787 response: new InterceptorManager() 788 }; 789} 790/** 791 * Dispatch a request 792 * 793 * @param {Object} config The config specific for this request (merged with this.defaults) 794 */ 795 796 797Axios.prototype.request = function request(config) { 798 /*eslint no-param-reassign:0*/ 799 // Allow for axios('example/url'[, config]) a la fetch API 800 if (typeof config === 'string') { 801 config = arguments[1] || {}; 802 config.url = arguments[0]; 803 } else { 804 config = config || {}; 805 } 806 807 config = mergeConfig(this.defaults, config); // Set config.method 808 809 if (config.method) { 810 config.method = config.method.toLowerCase(); 811 } else if (this.defaults.method) { 812 config.method = this.defaults.method.toLowerCase(); 813 } else { 814 config.method = 'get'; 815 } // Hook up interceptors middleware 816 817 818 var chain = [dispatchRequest, undefined]; 819 var promise = Promise.resolve(config); 820 this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { 821 chain.unshift(interceptor.fulfilled, interceptor.rejected); 822 }); 823 this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { 824 chain.push(interceptor.fulfilled, interceptor.rejected); 825 }); 826 827 while (chain.length) { 828 promise = promise.then(chain.shift(), chain.shift()); 829 } 830 831 return promise; 832}; 833 834Axios.prototype.getUri = function getUri(config) { 835 config = mergeConfig(this.defaults, config); 836 return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, ''); 837}; // Provide aliases for supported request methods 838 839 840utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { 841 /*eslint func-names:0*/ 842 Axios.prototype[method] = function (url, config) { 843 return this.request(utils.merge(config || {}, { 844 method: method, 845 url: url 846 })); 847 }; 848}); 849utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { 850 /*eslint func-names:0*/ 851 Axios.prototype[method] = function (url, data, config) { 852 return this.request(utils.merge(config || {}, { 853 method: method, 854 url: url, 855 data: data 856 })); 857 }; 858}); 859module.exports = Axios; 860 861/***/ }), 862
vendor: 1,663 bytes, lines 863-928
863/***/ "./node_modules/axios/lib/core/InterceptorManager.js": 864/*!***********************************************************!*\ 865 !*** ./node_modules/axios/lib/core/InterceptorManager.js ***! 866 \***********************************************************/ 867/*! no static exports found */ 868/***/ (function(module, exports, __webpack_require__) { 869 870"use strict"; 871 872 873var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 874 875function InterceptorManager() { 876 this.handlers = []; 877} 878/** 879 * Add a new interceptor to the stack 880 * 881 * @param {Function} fulfilled The function to handle `then` for a `Promise` 882 * @param {Function} rejected The function to handle `reject` for a `Promise` 883 * 884 * @return {Number} An ID used to remove interceptor later 885 */ 886 887 888InterceptorManager.prototype.use = function use(fulfilled, rejected) { 889 this.handlers.push({ 890 fulfilled: fulfilled, 891 rejected: rejected 892 }); 893 return this.handlers.length - 1; 894}; 895/** 896 * Remove an interceptor from the stack 897 * 898 * @param {Number} id The ID that was returned by `use` 899 */ 900 901 902InterceptorManager.prototype.eject = function eject(id) { 903 if (this.handlers[id]) { 904 this.handlers[id] = null; 905 } 906}; 907/** 908 * Iterate over all the registered interceptors 909 * 910 * This method is particularly useful for skipping over any 911 * interceptors that may have become `null` calling `eject`. 912 * 913 * @param {Function} fn The function to call for each interceptor 914 */ 915 916 917InterceptorManager.prototype.forEach = function forEach(fn) { 918 utils.forEach(this.handlers, function forEachHandler(h) { 919 if (h !== null) { 920 fn(h); 921 } 922 }); 923}; 924 925module.exports = InterceptorManager; 926 927/***/ }), 928
vendor: 1,170 bytes, lines 929-962
929/***/ "./node_modules/axios/lib/core/buildFullPath.js": 930/*!******************************************************!*\ 931 !*** ./node_modules/axios/lib/core/buildFullPath.js ***! 932 \******************************************************/ 933/*! no static exports found */ 934/***/ (function(module, exports, __webpack_require__) { 935 936"use strict"; 937 938 939var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js"); 940 941var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js"); 942/** 943 * Creates a new URL by combining the baseURL with the requestedURL, 944 * only when the requestedURL is not already an absolute URL. 945 * If the requestURL is absolute, this function returns the requestedURL untouched. 946 * 947 * @param {string} baseURL The base URL 948 * @param {string} requestedURL Absolute or relative URL to combine 949 * @returns {string} The combined full path 950 */ 951 952 953module.exports = function buildFullPath(baseURL, requestedURL) { 954 if (baseURL && !isAbsoluteURL(requestedURL)) { 955 return combineURLs(baseURL, requestedURL); 956 } 957 958 return requestedURL; 959}; 960 961/***/ }), 962
vendor: 1,019 bytes, lines 963-992
963/***/ "./node_modules/axios/lib/core/createError.js": 964/*!****************************************************!*\ 965 !*** ./node_modules/axios/lib/core/createError.js ***! 966 \****************************************************/ 967/*! no static exports found */ 968/***/ (function(module, exports, __webpack_require__) { 969 970"use strict"; 971 972 973var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js"); 974/** 975 * Create an Error with the specified message, config, error code, request and response. 976 * 977 * @param {string} message The error message. 978 * @param {Object} config The config. 979 * @param {string} [code] The error code (for example, 'ECONNABORTED'). 980 * @param {Object} [request] The request. 981 * @param {Object} [response] The response. 982 * @returns {Error} The created error. 983 */ 984 985 986module.exports = function createError(message, config, code, request, response) { 987 var error = new Error(message); 988 return enhanceError(error, config, code, request, response); 989}; 990 991/***/ }), 992
vendor: 2,389 bytes, lines 993-1059
993/***/ "./node_modules/axios/lib/core/dispatchRequest.js": 994/*!********************************************************!*\ 995 !*** ./node_modules/axios/lib/core/dispatchRequest.js ***! 996 \********************************************************/ 997/*! no static exports found */ 998/***/ (function(module, exports, __webpack_require__) { 999 1000"use strict"; 1001 1002 1003var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1004 1005var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js"); 1006 1007var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); 1008 1009var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js"); 1010/** 1011 * Throws a `Cancel` if cancellation has been requested. 1012 */ 1013 1014 1015function throwIfCancellationRequested(config) { 1016 if (config.cancelToken) { 1017 config.cancelToken.throwIfRequested(); 1018 } 1019} 1020/** 1021 * Dispatch a request to the server using the configured adapter. 1022 * 1023 * @param {object} config The config that is to be used for the request 1024 * @returns {Promise} The Promise to be fulfilled 1025 */ 1026 1027 1028module.exports = function dispatchRequest(config) { 1029 throwIfCancellationRequested(config); // Ensure headers exist 1030 1031 config.headers = config.headers || {}; // Transform request data 1032 1033 config.data = transformData(config.data, config.headers, config.transformRequest); // Flatten headers 1034 1035 config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers); 1036 utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], function cleanHeaderConfig(method) { 1037 delete config.headers[method]; 1038 }); 1039 var adapter = config.adapter || defaults.adapter; 1040 return adapter(config).then(function onAdapterResolution(response) { 1041 throwIfCancellationRequested(config); // Transform response data 1042 1043 response.data = transformData(response.data, response.headers, config.transformResponse); 1044 return response; 1045 }, function onAdapterRejection(reason) { 1046 if (!isCancel(reason)) { 1047 throwIfCancellationRequested(config); // Transform response data 1048 1049 if (reason && reason.response) { 1050 reason.response.data = transformData(reason.response.data, reason.response.headers, config.transformResponse); 1051 } 1052 } 1053 1054 return Promise.reject(reason); 1055 }); 1056}; 1057 1058/***/ }), 1059
vendor: 1,377 bytes, lines 1060-1114
1060/***/ "./node_modules/axios/lib/core/enhanceError.js": 1061/*!*****************************************************!*\ 1062 !*** ./node_modules/axios/lib/core/enhanceError.js ***! 1063 \*****************************************************/ 1064/*! no static exports found */ 1065/***/ (function(module, exports, __webpack_require__) { 1066 1067"use strict"; 1068 1069/** 1070 * Update an Error with the specified config, error code, and response. 1071 * 1072 * @param {Error} error The error to update. 1073 * @param {Object} config The config. 1074 * @param {string} [code] The error code (for example, 'ECONNABORTED'). 1075 * @param {Object} [request] The request. 1076 * @param {Object} [response] The response. 1077 * @returns {Error} The error. 1078 */ 1079 1080module.exports = function enhanceError(error, config, code, request, response) { 1081 error.config = config; 1082 1083 if (code) { 1084 error.code = code; 1085 } 1086 1087 error.request = request; 1088 error.response = response; 1089 error.isAxiosError = true; 1090 1091 error.toJSON = function () { 1092 return { 1093 // Standard 1094 message: this.message, 1095 name: this.name, 1096 // Microsoft 1097 description: this.description, 1098 number: this.number, 1099 // Mozilla 1100 fileName: this.fileName, 1101 lineNumber: this.lineNumber, 1102 columnNumber: this.columnNumber, 1103 stack: this.stack, 1104 // Axios 1105 config: this.config, 1106 code: this.code 1107 }; 1108 }; 1109 1110 return error; 1111}; 1112 1113/***/ }), 1114
vendor: 2,736 bytes, lines 1115-1181
1115/***/ "./node_modules/axios/lib/core/mergeConfig.js": 1116/*!****************************************************!*\ 1117 !*** ./node_modules/axios/lib/core/mergeConfig.js ***! 1118 \****************************************************/ 1119/*! no static exports found */ 1120/***/ (function(module, exports, __webpack_require__) { 1121 1122"use strict"; 1123 1124 1125var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js"); 1126/** 1127 * Config-specific merge-function which creates a new config-object 1128 * by merging two configuration objects together. 1129 * 1130 * @param {Object} config1 1131 * @param {Object} config2 1132 * @returns {Object} New object resulting from merging config2 to config1 1133 */ 1134 1135 1136module.exports = function mergeConfig(config1, config2) { 1137 // eslint-disable-next-line no-param-reassign 1138 config2 = config2 || {}; 1139 var config = {}; 1140 var valueFromConfig2Keys = ['url', 'method', 'params', 'data']; 1141 var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy']; 1142 var defaultToConfig2Keys = ['baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer', 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken', 'socketPath']; 1143 utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) { 1144 if (typeof config2[prop] !== 'undefined') { 1145 config[prop] = config2[prop]; 1146 } 1147 }); 1148 utils.forEach(mergeDeepPropertiesKeys, function mergeDeepProperties(prop) { 1149 if (utils.isObject(config2[prop])) { 1150 config[prop] = utils.deepMerge(config1[prop], config2[prop]); 1151 } else if (typeof config2[prop] !== 'undefined') { 1152 config[prop] = config2[prop]; 1153 } else if (utils.isObject(config1[prop])) { 1154 config[prop] = utils.deepMerge(config1[prop]); 1155 } else if (typeof config1[prop] !== 'undefined') { 1156 config[prop] = config1[prop]; 1157 } 1158 }); 1159 utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) { 1160 if (typeof config2[prop] !== 'undefined') { 1161 config[prop] = config2[prop]; 1162 } else if (typeof config1[prop] !== 'undefined') { 1163 config[prop] = config1[prop]; 1164 } 1165 }); 1166 var axiosKeys = valueFromConfig2Keys.concat(mergeDeepPropertiesKeys).concat(defaultToConfig2Keys); 1167 var otherKeys = Object.keys(config2).filter(function filterAxiosKeys(key) { 1168 return axiosKeys.indexOf(key) === -1; 1169 }); 1170 utils.forEach(otherKeys, function otherKeysDefaultToConfig2(prop) { 1171 if (typeof config2[prop] !== 'undefined') { 1172 config[prop] = config2[prop]; 1173 } else if (typeof config1[prop] !== 'undefined') { 1174 config[prop] = config1[prop]; 1175 } 1176 }); 1177 return config; 1178}; 1179 1180/***/ }), 1181
vendor: 1,024 bytes, lines 1182-1213
1182/***/ "./node_modules/axios/lib/core/settle.js": 1183/*!***********************************************!*\ 1184 !*** ./node_modules/axios/lib/core/settle.js ***! 1185 \***********************************************/ 1186/*! no static exports found */ 1187/***/ (function(module, exports, __webpack_require__) { 1188 1189"use strict"; 1190 1191 1192var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js"); 1193/** 1194 * Resolve or reject a Promise based on response status. 1195 * 1196 * @param {Function} resolve A function that resolves the promise. 1197 * @param {Function} reject A function that rejects the promise. 1198 * @param {object} response The response. 1199 */ 1200 1201 1202module.exports = function settle(resolve, reject, response) { 1203 var validateStatus = response.config.validateStatus; 1204 1205 if (!validateStatus || validateStatus(response.status)) { 1206 resolve(response); 1207 } else { 1208 reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response)); 1209 } 1210}; 1211 1212/***/ }), 1213
vendor: 939 bytes, lines 1214-1244
1214/***/ "./node_modules/axios/lib/core/transformData.js": 1215/*!******************************************************!*\ 1216 !*** ./node_modules/axios/lib/core/transformData.js ***! 1217 \******************************************************/ 1218/*! no static exports found */ 1219/***/ (function(module, exports, __webpack_require__) { 1220 1221"use strict"; 1222 1223 1224var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1225/** 1226 * Transform the data for a request or a response 1227 * 1228 * @param {Object|String} data The data to be transformed 1229 * @param {Array} headers The headers for the request or response 1230 * @param {Array|Function} fns A single function or Array of functions 1231 * @returns {*} The resulting transformed data 1232 */ 1233 1234 1235module.exports = function transformData(data, headers, fns) { 1236 /*eslint no-param-reassign:0*/ 1237 utils.forEach(fns, function transform(fn) { 1238 data = fn(data, headers); 1239 }); 1240 return data; 1241}; 1242 1243/***/ }), 1244
vendor: 3,245 bytes, lines 1245-1349
1245/***/ "./node_modules/axios/lib/defaults.js": 1246/*!********************************************!*\ 1247 !*** ./node_modules/axios/lib/defaults.js ***! 1248 \********************************************/ 1249/*! no static exports found */ 1250/***/ (function(module, exports, __webpack_require__) { 1251 1252"use strict"; 1253/* WEBPACK VAR INJECTION */(function(process) { 1254 1255var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); 1256 1257var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js"); 1258 1259var DEFAULT_CONTENT_TYPE = { 1260 'Content-Type': 'application/x-www-form-urlencoded' 1261}; 1262 1263function setContentTypeIfUnset(headers, value) { 1264 if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { 1265 headers['Content-Type'] = value; 1266 } 1267} 1268 1269function getDefaultAdapter() { 1270 var adapter; 1271 1272 if (typeof XMLHttpRequest !== 'undefined') { 1273 // For browsers use XHR adapter 1274 adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js"); 1275 } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { 1276 // For node use HTTP adapter 1277 adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js"); 1278 } 1279 1280 return adapter; 1281} 1282 1283var defaults = { 1284 adapter: getDefaultAdapter(), 1285 transformRequest: [function transformRequest(data, headers) { 1286 normalizeHeaderName(headers, 'Accept'); 1287 normalizeHeaderName(headers, 'Content-Type'); 1288 1289 if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) { 1290 return data; 1291 } 1292 1293 if (utils.isArrayBufferView(data)) { 1294 return data.buffer; 1295 } 1296 1297 if (utils.isURLSearchParams(data)) { 1298 setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); 1299 return data.toString(); 1300 } 1301 1302 if (utils.isObject(data)) { 1303 setContentTypeIfUnset(headers, 'application/json;charset=utf-8'); 1304 return JSON.stringify(data); 1305 } 1306 1307 return data; 1308 }], 1309 transformResponse: [function transformResponse(data) { 1310 /*eslint no-param-reassign:0*/ 1311 if (typeof data === 'string') { 1312 try { 1313 data = JSON.parse(data); 1314 } catch (e) { 1315 /* Ignore */ 1316 } 1317 } 1318 1319 return data; 1320 }], 1321 1322 /** 1323 * A timeout in milliseconds to abort a request. If set to 0 (default) a 1324 * timeout is not created. 1325 */ 1326 timeout: 0, 1327 xsrfCookieName: 'XSRF-TOKEN', 1328 xsrfHeaderName: 'X-XSRF-TOKEN', 1329 maxContentLength: -1, 1330 validateStatus: function validateStatus(status) { 1331 return status >= 200 && status < 300; 1332 } 1333}; 1334defaults.headers = { 1335 common: { 1336 'Accept': 'application/json, text/plain, */*' 1337 } 1338}; 1339utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { 1340 defaults.headers[method] = {}; 1341}); 1342utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { 1343 defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); 1344}); 1345module.exports = defaults; 1346/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"))) 1347 1348/***/ }), 1349
vendor: 570 bytes, lines 1350-1373
1350/***/ "./node_modules/axios/lib/helpers/bind.js": 1351/*!************************************************!*\ 1352 !*** ./node_modules/axios/lib/helpers/bind.js ***! 1353 \************************************************/ 1354/*! no static exports found */ 1355/***/ (function(module, exports, __webpack_require__) { 1356 1357"use strict"; 1358 1359 1360module.exports = function bind(fn, thisArg) { 1361 return function wrap() { 1362 var args = new Array(arguments.length); 1363 1364 for (var i = 0; i < args.length; i++) { 1365 args[i] = arguments[i]; 1366 } 1367 1368 return fn.apply(thisArg, args); 1369 }; 1370}; 1371 1372/***/ }), 1373
vendor: 2,019 bytes, lines 1374-1450
1374/***/ "./node_modules/axios/lib/helpers/buildURL.js": 1375/*!****************************************************!*\ 1376 !*** ./node_modules/axios/lib/helpers/buildURL.js ***! 1377 \****************************************************/ 1378/*! no static exports found */ 1379/***/ (function(module, exports, __webpack_require__) { 1380 1381"use strict"; 1382 1383 1384var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1385 1386function encode(val) { 1387 return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); 1388} 1389/** 1390 * Build a URL by appending params to the end 1391 * 1392 * @param {string} url The base of the url (e.g., http://www.google.com) 1393 * @param {object} [params] The params to be appended 1394 * @returns {string} The formatted url 1395 */ 1396 1397 1398module.exports = function buildURL(url, params, paramsSerializer) { 1399 /*eslint no-param-reassign:0*/ 1400 if (!params) { 1401 return url; 1402 } 1403 1404 var serializedParams; 1405 1406 if (paramsSerializer) { 1407 serializedParams = paramsSerializer(params); 1408 } else if (utils.isURLSearchParams(params)) { 1409 serializedParams = params.toString(); 1410 } else { 1411 var parts = []; 1412 utils.forEach(params, function serialize(val, key) { 1413 if (val === null || typeof val === 'undefined') { 1414 return; 1415 } 1416 1417 if (utils.isArray(val)) { 1418 key = key + '[]'; 1419 } else { 1420 val = [val]; 1421 } 1422 1423 utils.forEach(val, function parseValue(v) { 1424 if (utils.isDate(v)) { 1425 v = v.toISOString(); 1426 } else if (utils.isObject(v)) { 1427 v = JSON.stringify(v); 1428 } 1429 1430 parts.push(encode(key) + '=' + encode(v)); 1431 }); 1432 }); 1433 serializedParams = parts.join('&'); 1434 } 1435 1436 if (serializedParams) { 1437 var hashmarkIndex = url.indexOf('#'); 1438 1439 if (hashmarkIndex !== -1) { 1440 url = url.slice(0, hashmarkIndex); 1441 } 1442 1443 url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; 1444 } 1445 1446 return url; 1447}; 1448 1449/***/ }), 1450
vendor: 712 bytes, lines 1451-1473
1451/***/ "./node_modules/axios/lib/helpers/combineURLs.js": 1452/*!*******************************************************!*\ 1453 !*** ./node_modules/axios/lib/helpers/combineURLs.js ***! 1454 \*******************************************************/ 1455/*! no static exports found */ 1456/***/ (function(module, exports, __webpack_require__) { 1457 1458"use strict"; 1459 1460/** 1461 * Creates a new URL by combining the specified URLs 1462 * 1463 * @param {string} baseURL The base URL 1464 * @param {string} relativeURL The relative URL 1465 * @returns {string} The combined URL 1466 */ 1467 1468module.exports = function combineURLs(baseURL, relativeURL) { 1469 return relativeURL ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') : baseURL; 1470}; 1471 1472/***/ }), 1473
vendor: 1,662 bytes, lines 1474-1531
1474/***/ "./node_modules/axios/lib/helpers/cookies.js": 1475/*!***************************************************!*\ 1476 !*** ./node_modules/axios/lib/helpers/cookies.js ***! 1477 \***************************************************/ 1478/*! no static exports found */ 1479/***/ (function(module, exports, __webpack_require__) { 1480 1481"use strict"; 1482 1483 1484var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1485 1486module.exports = utils.isStandardBrowserEnv() ? // Standard browser envs support document.cookie 1487function standardBrowserEnv() { 1488 return { 1489 write: function write(name, value, expires, path, domain, secure) { 1490 var cookie = []; 1491 cookie.push(name + '=' + encodeURIComponent(value)); 1492 1493 if (utils.isNumber(expires)) { 1494 cookie.push('expires=' + new Date(expires).toGMTString()); 1495 } 1496 1497 if (utils.isString(path)) { 1498 cookie.push('path=' + path); 1499 } 1500 1501 if (utils.isString(domain)) { 1502 cookie.push('domain=' + domain); 1503 } 1504 1505 if (secure === true) { 1506 cookie.push('secure'); 1507 } 1508 1509 document.cookie = cookie.join('; '); 1510 }, 1511 read: function read(name) { 1512 var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); 1513 return match ? decodeURIComponent(match[3]) : null; 1514 }, 1515 remove: function remove(name) { 1516 this.write(name, '', Date.now() - 86400000); 1517 } 1518 }; 1519}() : // Non standard browser env (web workers, react-native) lack needed support. 1520function nonStandardBrowserEnv() { 1521 return { 1522 write: function write() {}, 1523 read: function read() { 1524 return null; 1525 }, 1526 remove: function remove() {} 1527 }; 1528}(); 1529 1530/***/ }), 1531
vendor: 911 bytes, lines 1532-1556
1532/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js": 1533/*!*********************************************************!*\ 1534 !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***! 1535 \*********************************************************/ 1536/*! no static exports found */ 1537/***/ (function(module, exports, __webpack_require__) { 1538 1539"use strict"; 1540 1541/** 1542 * Determines whether the specified URL is absolute 1543 * 1544 * @param {string} url The URL to test 1545 * @returns {boolean} True if the specified URL is absolute, otherwise false 1546 */ 1547 1548module.exports = function isAbsoluteURL(url) { 1549 // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL). 1550 // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed 1551 // by any combination of letters, digits, plus, period, or hyphen. 1552 return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); 1553}; 1554 1555/***/ }), 1556
vendor: 2,484 bytes, lines 1557-1625
1557/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js": 1558/*!***********************************************************!*\ 1559 !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***! 1560 \***********************************************************/ 1561/*! no static exports found */ 1562/***/ (function(module, exports, __webpack_require__) { 1563 1564"use strict"; 1565 1566 1567var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1568 1569module.exports = utils.isStandardBrowserEnv() ? // Standard browser envs have full support of the APIs needed to test 1570// whether the request URL is of the same origin as current location. 1571function standardBrowserEnv() { 1572 var msie = /(msie|trident)/i.test(navigator.userAgent); 1573 var urlParsingNode = document.createElement('a'); 1574 var originURL; 1575 /** 1576 * Parse a URL to discover it's components 1577 * 1578 * @param {String} url The URL to be parsed 1579 * @returns {Object} 1580 */ 1581 1582 function resolveURL(url) { 1583 var href = url; 1584 1585 if (msie) { 1586 // IE needs attribute set twice to normalize properties 1587 urlParsingNode.setAttribute('href', href); 1588 href = urlParsingNode.href; 1589 } 1590 1591 urlParsingNode.setAttribute('href', href); // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils 1592 1593 return { 1594 href: urlParsingNode.href, 1595 protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', 1596 host: urlParsingNode.host, 1597 search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', 1598 hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', 1599 hostname: urlParsingNode.hostname, 1600 port: urlParsingNode.port, 1601 pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname 1602 }; 1603 } 1604 1605 originURL = resolveURL(window.location.href); 1606 /** 1607 * Determine if a URL shares the same origin as the current location 1608 * 1609 * @param {String} requestURL The URL to test 1610 * @returns {boolean} True if URL shares the same origin, otherwise false 1611 */ 1612 1613 return function isURLSameOrigin(requestURL) { 1614 var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL; 1615 return parsed.protocol === originURL.protocol && parsed.host === originURL.host; 1616 }; 1617}() : // Non standard browser envs (web workers, react-native) lack needed support. 1618function nonStandardBrowserEnv() { 1619 return function isURLSameOrigin() { 1620 return true; 1621 }; 1622}(); 1623 1624/***/ }), 1625
vendor: 782 bytes, lines 1626-1648
1626/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js": 1627/*!***************************************************************!*\ 1628 !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***! 1629 \***************************************************************/ 1630/*! no static exports found */ 1631/***/ (function(module, exports, __webpack_require__) { 1632 1633"use strict"; 1634 1635 1636var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js"); 1637 1638module.exports = function normalizeHeaderName(headers, normalizedName) { 1639 utils.forEach(headers, function processHeader(value, name) { 1640 if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { 1641 headers[normalizedName] = value; 1642 delete headers[name]; 1643 } 1644 }); 1645}; 1646 1647/***/ }), 1648
vendor: 1,787 bytes, lines 1649-1709
1649/***/ "./node_modules/axios/lib/helpers/parseHeaders.js": 1650/*!********************************************************!*\ 1651 !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***! 1652 \********************************************************/ 1653/*! no static exports found */ 1654/***/ (function(module, exports, __webpack_require__) { 1655 1656"use strict"; 1657 1658 1659var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); // Headers whose duplicates are ignored by node 1660// c.f. https://nodejs.org/api/http.html#http_message_headers 1661 1662 1663var ignoreDuplicateOf = ['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']; 1664/** 1665 * Parse headers into an object 1666 * 1667 * ``` 1668 * Date: Wed, 27 Aug 2014 08:58:49 GMT 1669 * Content-Type: application/json 1670 * Connection: keep-alive 1671 * Transfer-Encoding: chunked 1672 * ``` 1673 * 1674 * @param {String} headers Headers needing to be parsed 1675 * @returns {Object} Headers parsed into an object 1676 */ 1677 1678module.exports = function parseHeaders(headers) { 1679 var parsed = {}; 1680 var key; 1681 var val; 1682 var i; 1683 1684 if (!headers) { 1685 return parsed; 1686 } 1687 1688 utils.forEach(headers.split('\n'), function parser(line) { 1689 i = line.indexOf(':'); 1690 key = utils.trim(line.substr(0, i)).toLowerCase(); 1691 val = utils.trim(line.substr(i + 1)); 1692 1693 if (key) { 1694 if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { 1695 return; 1696 } 1697 1698 if (key === 'set-cookie') { 1699 parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); 1700 } else { 1701 parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; 1702 } 1703 } 1704 }); 1705 return parsed; 1706}; 1707 1708/***/ }), 1709
vendor: 884 bytes, lines 1710-1747
1710/***/ "./node_modules/axios/lib/helpers/spread.js": 1711/*!**************************************************!*\ 1712 !*** ./node_modules/axios/lib/helpers/spread.js ***! 1713 \**************************************************/ 1714/*! no static exports found */ 1715/***/ (function(module, exports, __webpack_require__) { 1716 1717"use strict"; 1718 1719/** 1720 * Syntactic sugar for invoking a function and expanding an array for arguments. 1721 * 1722 * Common use case would be to use `Function.prototype.apply`. 1723 * 1724 * ```js 1725 * function f(x, y, z) {} 1726 * var args = [1, 2, 3]; 1727 * f.apply(null, args); 1728 * ``` 1729 * 1730 * With `spread` this example can be re-written. 1731 * 1732 * ```js 1733 * spread(function(x, y, z) {})([1, 2, 3]); 1734 * ``` 1735 * 1736 * @param {Function} callback 1737 * @returns {Function} 1738 */ 1739 1740module.exports = function spread(callback) { 1741 return function wrap(arr) { 1742 return callback.apply(null, arr); 1743 }; 1744}; 1745 1746/***/ }), 1747
vendor: 28,635 bytes, lines 1748-2607
1748/***/ "./node_modules/axios/lib/utils.js": 1749/*!*****************************************!*\ 1750 !*** ./node_modules/axios/lib/utils.js ***! 1751 \*****************************************/ 1752/*! no static exports found */ 1753/***/ (function(module, exports, __webpack_require__) { 1754 1755"use strict"; 1756 1757 1758var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); 1759/*global toString:true*/ 1760// utils is a library of generic helper functions non-specific to axios 1761 1762 1763var toString = Object.prototype.toString; 1764/** 1765 * Determine if a value is an Array 1766 * 1767 * @param {Object} val The value to test 1768 * @returns {boolean} True if value is an Array, otherwise false 1769 */ 1770 1771function isArray(val) { 1772 return toString.call(val) === '[object Array]'; 1773} 1774/** 1775 * Determine if a value is undefined 1776 * 1777 * @param {Object} val The value to test 1778 * @returns {boolean} True if the value is undefined, otherwise false 1779 */ 1780 1781 1782function isUndefined(val) { 1783 return typeof val === 'undefined'; 1784} 1785/** 1786 * Determine if a value is a Buffer 1787 * 1788 * @param {Object} val The value to test 1789 * @returns {boolean} True if value is a Buffer, otherwise false 1790 */ 1791 1792 1793function isBuffer(val) { 1794 return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); 1795} 1796/** 1797 * Determine if a value is an ArrayBuffer 1798 * 1799 * @param {Object} val The value to test 1800 * @returns {boolean} True if value is an ArrayBuffer, otherwise false 1801 */ 1802 1803 1804function isArrayBuffer(val) { 1805 return toString.call(val) === '[object ArrayBuffer]'; 1806} 1807/** 1808 * Determine if a value is a FormData 1809 * 1810 * @param {Object} val The value to test 1811 * @returns {boolean} True if value is an FormData, otherwise false 1812 */ 1813 1814 1815function isFormData(val) { 1816 return typeof FormData !== 'undefined' && val instanceof FormData; 1817} 1818/** 1819 * Determine if a value is a view on an ArrayBuffer 1820 * 1821 * @param {Object} val The value to test 1822 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false 1823 */ 1824 1825 1826function isArrayBufferView(val) { 1827 var result; 1828 1829 if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) { 1830 result = ArrayBuffer.isView(val); 1831 } else { 1832 result = val && val.buffer && val.buffer instanceof ArrayBuffer; 1833 } 1834 1835 return result; 1836} 1837/** 1838 * Determine if a value is a String 1839 * 1840 * @param {Object} val The value to test 1841 * @returns {boolean} True if value is a String, otherwise false 1842 */ 1843 1844 1845function isString(val) { 1846 return typeof val === 'string'; 1847} 1848/** 1849 * Determine if a value is a Number 1850 * 1851 * @param {Object} val The value to test 1852 * @returns {boolean} True if value is a Number, otherwise false 1853 */ 1854 1855 1856function isNumber(val) { 1857 return typeof val === 'number'; 1858} 1859/** 1860 * Determine if a value is an Object 1861 * 1862 * @param {Object} val The value to test 1863 * @returns {boolean} True if value is an Object, otherwise false 1864 */ 1865 1866 1867function isObject(val) { 1868 return val !== null && typeof val === 'object'; 1869} 1870/** 1871 * Determine if a value is a Date 1872 * 1873 * @param {Object} val The value to test 1874 * @returns {boolean} True if value is a Date, otherwise false 1875 */ 1876 1877 1878function isDate(val) { 1879 return toString.call(val) === '[object Date]'; 1880} 1881/** 1882 * Determine if a value is a File 1883 * 1884 * @param {Object} val The value to test 1885 * @returns {boolean} True if value is a File, otherwise false 1886 */ 1887 1888 1889function isFile(val) { 1890 return toString.call(val) === '[object File]'; 1891} 1892/** 1893 * Determine if a value is a Blob 1894 * 1895 * @param {Object} val The value to test 1896 * @returns {boolean} True if value is a Blob, otherwise false 1897 */ 1898 1899 1900function isBlob(val) { 1901 return toString.call(val) === '[object Blob]'; 1902} 1903/** 1904 * Determine if a value is a Function 1905 * 1906 * @param {Object} val The value to test 1907 * @returns {boolean} True if value is a Function, otherwise false 1908 */ 1909 1910 1911function isFunction(val) { 1912 return toString.call(val) === '[object Function]'; 1913} 1914/** 1915 * Determine if a value is a Stream 1916 * 1917 * @param {Object} val The value to test 1918 * @returns {boolean} True if value is a Stream, otherwise false 1919 */ 1920 1921 1922function isStream(val) { 1923 return isObject(val) && isFunction(val.pipe); 1924} 1925/** 1926 * Determine if a value is a URLSearchParams object 1927 * 1928 * @param {Object} val The value to test 1929 * @returns {boolean} True if value is a URLSearchParams object, otherwise false 1930 */ 1931 1932 1933function isURLSearchParams(val) { 1934 return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams; 1935} 1936/** 1937 * Trim excess whitespace off the beginning and end of a string 1938 * 1939 * @param {String} str The String to trim 1940 * @returns {String} The String freed of excess whitespace 1941 */ 1942 1943 1944function trim(str) { 1945 return str.replace(/^\s*/, '').replace(/\s*$/, ''); 1946} 1947/** 1948 * Determine if we're running in a standard browser environment 1949 * 1950 * This allows axios to run in a web worker, and react-native. 1951 * Both environments support XMLHttpRequest, but not fully standard globals. 1952 * 1953 * web workers: 1954 * typeof window -> undefined 1955 * typeof document -> undefined 1956 * 1957 * react-native: 1958 * navigator.product -> 'ReactNative' 1959 * nativescript 1960 * navigator.product -> 'NativeScript' or 'NS' 1961 */ 1962 1963 1964function isStandardBrowserEnv() { 1965 if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || navigator.product === 'NativeScript' || navigator.product === 'NS')) { 1966 return false; 1967 } 1968 1969 return typeof window !== 'undefined' && typeof document !== 'undefined'; 1970} 1971/** 1972 * Iterate over an Array or an Object invoking a function for each item. 1973 * 1974 * If `obj` is an Array callback will be called passing 1975 * the value, index, and complete array for each item. 1976 * 1977 * If 'obj' is an Object callback will be called passing 1978 * the value, key, and complete object for each property. 1979 * 1980 * @param {Object|Array} obj The object to iterate 1981 * @param {Function} fn The callback to invoke for each item 1982 */ 1983 1984 1985function forEach(obj, fn) { 1986 // Don't bother if no value provided 1987 if (obj === null || typeof obj === 'undefined') { 1988 return; 1989 } // Force an array if not already something iterable 1990 1991 1992 if (typeof obj !== 'object') { 1993 /*eslint no-param-reassign:0*/ 1994 obj = [obj]; 1995 } 1996 1997 if (isArray(obj)) { 1998 // Iterate over array values 1999 for (var i = 0, l = obj.length; i < l; i++) { 2000 fn.call(null, obj[i], i, obj); 2001 } 2002 } else { 2003 // Iterate over object keys 2004 for (var key in obj) { 2005 if (Object.prototype.hasOwnProperty.call(obj, key)) { 2006 fn.call(null, obj[key], key, obj); 2007 } 2008 } 2009 } 2010} 2011/** 2012 * Accepts varargs expecting each argument to be an object, then 2013 * immutably merges the properties of each object and returns result. 2014 * 2015 * When multiple objects contain the same key the later object in 2016 * the arguments list will take precedence. 2017 * 2018 * Example: 2019 * 2020 * ```js 2021 * var result = merge({foo: 123}, {foo: 456}); 2022 * console.log(result.foo); // outputs 456 2023 * ``` 2024 * 2025 * @param {Object} obj1 Object to merge 2026 * @returns {Object} Result of all merge properties 2027 */ 2028 2029 2030function merge() 2031/* obj1, obj2, obj3, ... */ 2032{ 2033 var result = {}; 2034 2035 function assignValue(val, key) { 2036 if (typeof result[key] === 'object' && typeof val === 'object') { 2037 result[key] = merge(result[key], val); 2038 } else { 2039 result[key] = val; 2040 } 2041 } 2042 2043 for (var i = 0, l = arguments.length; i < l; i++) { 2044 forEach(arguments[i], assignValue); 2045 } 2046 2047 return result; 2048} 2049/** 2050 * Function equal to merge with the difference being that no reference 2051 * to original objects is kept. 2052 * 2053 * @see merge 2054 * @param {Object} obj1 Object to merge 2055 * @returns {Object} Result of all merge properties 2056 */ 2057 2058 2059function deepMerge() 2060/* obj1, obj2, obj3, ... */ 2061{ 2062 var result = {}; 2063 2064 function assignValue(val, key) { 2065 if (typeof result[key] === 'object' && typeof val === 'object') { 2066 result[key] = deepMerge(result[key], val); 2067 } else if (typeof val === 'object') { 2068 result[key] = deepMerge({}, val); 2069 } else { 2070 result[key] = val; 2071 } 2072 } 2073 2074 for (var i = 0, l = arguments.length; i < l; i++) { 2075 forEach(arguments[i], assignValue); 2076 } 2077 2078 return result; 2079} 2080/** 2081 * Extends object a by mutably adding to it the properties of object b. 2082 * 2083 * @param {Object} a The object to be extended 2084 * @param {Object} b The object to copy properties from 2085 * @param {Object} thisArg The object to bind function to 2086 * @return {Object} The resulting value of object a 2087 */ 2088 2089 2090function extend(a, b, thisArg) { 2091 forEach(b, function assignValue(val, key) { 2092 if (thisArg && typeof val === 'function') { 2093 a[key] = bind(val, thisArg); 2094 } else { 2095 a[key] = val; 2096 } 2097 }); 2098 return a; 2099} 2100 2101module.exports = { 2102 isArray: isArray, 2103 isArrayBuffer: isArrayBuffer, 2104 isBuffer: isBuffer, 2105 isFormData: isFormData, 2106 isArrayBufferView: isArrayBufferView, 2107 isString: isString, 2108 isNumber: isNumber, 2109 isObject: isObject, 2110 isUndefined: isUndefined, 2111 isDate: isDate, 2112 isFile: isFile, 2113 isBlob: isBlob, 2114 isFunction: isFunction, 2115 isStream: isStream, 2116 isURLSearchParams: isURLSearchParams, 2117 isStandardBrowserEnv: isStandardBrowserEnv, 2118 forEach: forEach, 2119 merge: merge, 2120 deepMerge: deepMerge, 2121 extend: extend, 2122 trim: trim 2123}; 2124 2125/***/ }), 2126 2127/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./app/components/OpeningHours/OpeningHour.vue?vue&type=script&lang=js&": 2128/*!****************************************************************************************************************************************************************!*\ 2129 !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./app/components/OpeningHours/OpeningHour.vue?vue&type=script&lang=js& ***! 2130 \****************************************************************************************************************************************************************/ 2131/*! no static exports found */ 2132/***/ (function(module, exports, __webpack_require__) { 2133 2134"use strict"; 2135 2136 2137Object.defineProperty(exports, "__esModule", { 2138 value: true 2139}); 2140exports.default = void 0; 2141// 2142// 2143// 2144// 2145// 2146// 2147// 2148// 2149// 2150// 2151var _default = { 2152 name: "OpeningHour", 2153 props: { 2154 openingHour: null 2155 }, 2156 data: function data() { 2157 return { 2158 Drupal: Drupal 2159 }; 2160 } 2161}; 2162exports.default = _default; 2163 2164/***/ }), 2165 2166/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./app/components/OpeningHours/OpeningHoursWeek.vue?vue&type=script&lang=js&": 2167/*!*********************************************************************************************************************************************************************!*\ 2168 !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./app/components/OpeningHours/OpeningHoursWeek.vue?vue&type=script&lang=js& ***! 2169 \*********************************************************************************************************************************************************************/ 2170/*! no static exports found */ 2171/***/ (function(module, exports, __webpack_require__) { 2172 2173"use strict"; 2174 2175 2176var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 2177 2178Object.defineProperty(exports, "__esModule", { 2179 value: true 2180}); 2181exports.default = void 0; 2182 2183var _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js")); 2184 2185var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js")); 2186 2187var _api = _interopRequireDefault(__webpack_require__(/*! ../../utils/api */ "./app/utils/api.js")); 2188 2189var _moment = _interopRequireDefault(__webpack_require__(/*! moment */ "./node_modules/moment/moment.js")); 2190 2191__webpack_require__(/*! moment/locale/nl-be */ "./node_modules/moment/locale/nl-be.js"); 2192 2193var _OpeningHour = _interopRequireDefault(__webpack_require__(/*! ./OpeningHour */ "./app/components/OpeningHours/OpeningHour.vue")); 2194 2195// 2196// 2197// 2198// 2199// 2200// 2201// 2202// 2203// 2204// 2205// 2206// 2207// 2208// 2209// 2210// 2211// 2212// 2213// 2214// 2215// 2216// 2217// 2218// 2219// 2220// 2221// 2222// 2223// 2224// 2225// 2226var _default = { 2227 name: "OpeningHoursWeek", 2228 components: { 2229 OpeningHour: _OpeningHour.default 2230 }, 2231 props: { 2232 nid: { 2233 type: String 2234 }, 2235 fieldName: { 2236 type: String 2237 } 2238 }, 2239 data: function data() { 2240 return { 2241 Drupal: Drupal, 2242 openingHours: null, 2243 momentCurrent: null, 2244 momentToday: null 2245 }; 2246 }, 2247 methods: { 2248 getOpeningHours: function getOpeningHours() { 2249 var _this = this; 2250 2251 return (0, _asyncToGenerator2.default)( 2252 /*#__PURE__*/ 2253 _regenerator.default.mark(function _callee() { 2254 return _regenerator.default.wrap(function _callee$(_context) { 2255 while (1) { 2256 switch (_context.prev = _context.next) { 2257 case 0: 2258 _context.next = 2; 2259 return (0, _api.default)().get("opening-hours/".concat(_this.nid, "/").concat(_this.fieldName, "/").concat(_this.momentCurrent.weekYear(), "/").concat(_this.momentCurrent.week())).then(function (_ref) { 2260 var data = _ref.data.data; 2261 return data; 2262 }); 2263 2264 case 2: 2265 _this.openingHours = _context.sent; 2266 2267 case 3: 2268 case "end": 2269 return _context.stop(); 2270 } 2271 } 2272 }, _callee); 2273 }))(); 2274 }, 2275 previous: function previous() { 2276 // Copy the object so Vue computed will recognize the change of the immutable momentCurrent object. 2277 this.momentCurrent = this.momentCurrent.clone().subtract(1, "week"); 2278 this.getOpeningHours(); 2279 }, 2280 next: function next() { 2281 // Copy the object so Vue computed will recognize the change of the immutable momentCurrent object. 2282 this.momentCurrent = this.momentCurrent.clone().add(1, "week"); 2283 this.getOpeningHours(); 2284 } 2285 }, 2286 computed: { 2287 from: function from() { 2288 return this.momentCurrent.startOf("week").format("D MMMM YYYY"); 2289 }, 2290 to: function to() { 2291 return this.momentCurrent.endOf("week").format("D MMMM YYYY"); 2292 }, 2293 showPrevious: function showPrevious() { 2294 return this.momentToday.isBefore(this.momentCurrent.startOf("week")); 2295 } 2296 }, 2297 created: function created() { 2298 _moment.default.locale("en-gb"); 2299 2300 this.momentCurrent = (0, _moment.default)(); 2301 this.momentToday = this.momentCurrent.clone(); 2302 this.getOpeningHours(); 2303 }, 2304 filters: { 2305 longDate: function longDate(value) { 2306 var lang = drupalSettings.path.currentLanguage.replace("nl", "nl-be"); 2307 return (0, _moment.default)(value).locale(lang).format("dddd D MMMM"); 2308 }, 2309 formatDateMonthYear: function formatDateMonthYear(value) { 2310 var lang = drupalSettings.path.currentLanguage.replace("nl", "nl-be"); 2311 2312 return _moment.default(value, ["YYYY-MM-DD", "D MMMM YYYY"]) 2313 .locale(lang) 2314 .format("D MMMM YYYY"); 2315 } 2316 } 2317}; 2318exports.default = _default; 2319 2320/***/ }), 2321 2322/***/ "./node_modules/moment/locale sync recursive ^\\.\\/.*$": 2323/*!**************************************************!*\ 2324 !*** ./node_modules/moment/locale sync ^\.\/.*$ ***! 2325 \**************************************************/ 2326/*! no static exports found */ 2327/***/ (function(module, exports, __webpack_require__) { 2328 2329var map = { 2330 "./af": "./node_modules/moment/locale/af.js", 2331 "./af.js": "./node_modules/moment/locale/af.js", 2332 "./ar": "./node_modules/moment/locale/ar.js", 2333 "./ar-dz": "./node_modules/moment/locale/ar-dz.js", 2334 "./ar-dz.js": "./node_modules/moment/locale/ar-dz.js", 2335 "./ar-kw": "./node_modules/moment/locale/ar-kw.js", 2336 "./ar-kw.js": "./node_modules/moment/locale/ar-kw.js", 2337 "./ar-ly": "./node_modules/moment/locale/ar-ly.js", 2338 "./ar-ly.js": "./node_modules/moment/locale/ar-ly.js", 2339 "./ar-ma": "./node_modules/moment/locale/ar-ma.js", 2340 "./ar-ma.js": "./node_modules/moment/locale/ar-ma.js", 2341 "./ar-sa": "./node_modules/moment/locale/ar-sa.js", 2342 "./ar-sa.js": "./node_modules/moment/locale/ar-sa.js", 2343 "./ar-tn": "./node_modules/moment/locale/ar-tn.js", 2344 "./ar-tn.js": "./node_modules/moment/locale/ar-tn.js", 2345 "./ar.js": "./node_modules/moment/locale/ar.js", 2346 "./az": "./node_modules/moment/locale/az.js", 2347 "./az.js": "./node_modules/moment/locale/az.js", 2348 "./be": "./node_modules/moment/locale/be.js", 2349 "./be.js": "./node_modules/moment/locale/be.js", 2350 "./bg": "./node_modules/moment/locale/bg.js", 2351 "./bg.js": "./node_modules/moment/locale/bg.js", 2352 "./bm": "./node_modules/moment/locale/bm.js", 2353 "./bm.js": "./node_modules/moment/locale/bm.js", 2354 "./bn": "./node_modules/moment/locale/bn.js", 2355 "./bn.js": "./node_modules/moment/locale/bn.js", 2356 "./bo": "./node_modules/moment/locale/bo.js", 2357 "./bo.js": "./node_modules/moment/locale/bo.js", 2358 "./br": "./node_modules/moment/locale/br.js", 2359 "./br.js": "./node_modules/moment/locale/br.js", 2360 "./bs": "./node_modules/moment/locale/bs.js", 2361 "./bs.js": "./node_modules/moment/locale/bs.js", 2362 "./ca": "./node_modules/moment/locale/ca.js", 2363 "./ca.js": "./node_modules/moment/locale/ca.js", 2364 "./cs": "./node_modules/moment/locale/cs.js", 2365 "./cs.js": "./node_modules/moment/locale/cs.js", 2366 "./cv": "./node_modules/moment/locale/cv.js", 2367 "./cv.js": "./node_modules/moment/locale/cv.js", 2368 "./cy": "./node_modules/moment/locale/cy.js", 2369 "./cy.js": "./node_modules/moment/locale/cy.js", 2370 "./da": "./node_modules/moment/locale/da.js", 2371 "./da.js": "./node_modules/moment/locale/da.js", 2372 "./de": "./node_modules/moment/locale/de.js", 2373 "./de-at": "./node_modules/moment/locale/de-at.js", 2374 "./de-at.js": "./node_modules/moment/locale/de-at.js", 2375 "./de-ch": "./node_modules/moment/locale/de-ch.js", 2376 "./de-ch.js": "./node_modules/moment/locale/de-ch.js", 2377 "./de.js": "./node_modules/moment/locale/de.js", 2378 "./dv": "./node_modules/moment/locale/dv.js", 2379 "./dv.js": "./node_modules/moment/locale/dv.js", 2380 "./el": "./node_modules/moment/locale/el.js", 2381 "./el.js": "./node_modules/moment/locale/el.js", 2382 "./en-SG": "./node_modules/moment/locale/en-SG.js", 2383 "./en-SG.js": "./node_modules/moment/locale/en-SG.js", 2384 "./en-au": "./node_modules/moment/locale/en-au.js", 2385 "./en-au.js": "./node_modules/moment/locale/en-au.js", 2386 "./en-ca": "./node_modules/moment/locale/en-ca.js", 2387 "./en-ca.js": "./node_modules/moment/locale/en-ca.js", 2388 "./en-gb": "./node_modules/moment/locale/en-gb.js", 2389 "./en-gb.js": "./node_modules/moment/locale/en-gb.js", 2390 "./en-ie": "./node_modules/moment/locale/en-ie.js", 2391 "./en-ie.js": "./node_modules/moment/locale/en-ie.js", 2392 "./en-il": "./node_modules/moment/locale/en-il.js", 2393 "./en-il.js": "./node_modules/moment/locale/en-il.js", 2394 "./en-nz": "./node_modules/moment/locale/en-nz.js", 2395 "./en-nz.js": "./node_modules/moment/locale/en-nz.js", 2396 "./eo": "./node_modules/moment/locale/eo.js", 2397 "./eo.js": "./node_modules/moment/locale/eo.js", 2398 "./es": "./node_modules/moment/locale/es.js", 2399 "./es-do": "./node_modules/moment/locale/es-do.js", 2400 "./es-do.js": "./node_modules/moment/locale/es-do.js", 2401 "./es-us": "./node_modules/moment/locale/es-us.js", 2402 "./es-us.js": "./node_modules/moment/locale/es-us.js", 2403 "./es.js": "./node_modules/moment/locale/es.js", 2404 "./et": "./node_modules/moment/locale/et.js", 2405 "./et.js": "./node_modules/moment/locale/et.js", 2406 "./eu": "./node_modules/moment/locale/eu.js", 2407 "./eu.js": "./node_modules/moment/locale/eu.js", 2408 "./fa": "./node_modules/moment/locale/fa.js", 2409 "./fa.js": "./node_modules/moment/locale/fa.js", 2410 "./fi": "./node_modules/moment/locale/fi.js", 2411 "./fi.js": "./node_modules/moment/locale/fi.js", 2412 "./fo": "./node_modules/moment/locale/fo.js", 2413 "./fo.js": "./node_modules/moment/locale/fo.js", 2414 "./fr": "./node_modules/moment/locale/fr.js", 2415 "./fr-ca": "./node_modules/moment/locale/fr-ca.js", 2416 "./fr-ca.js": "./node_modules/moment/locale/fr-ca.js", 2417 "./fr-ch": "./node_modules/moment/locale/fr-ch.js", 2418 "./fr-ch.js": "./node_modules/moment/locale/fr-ch.js", 2419 "./fr.js": "./node_modules/moment/locale/fr.js", 2420 "./fy": "./node_modules/moment/locale/fy.js", 2421 "./fy.js": "./node_modules/moment/locale/fy.js", 2422 "./ga": "./node_modules/moment/locale/ga.js", 2423 "./ga.js": "./node_modules/moment/locale/ga.js", 2424 "./gd": "./node_modules/moment/locale/gd.js", 2425 "./gd.js": "./node_modules/moment/locale/gd.js", 2426 "./gl": "./node_modules/moment/locale/gl.js", 2427 "./gl.js": "./node_modules/moment/locale/gl.js", 2428 "./gom-latn": "./node_modules/moment/locale/gom-latn.js", 2429 "./gom-latn.js": "./node_modules/moment/locale/gom-latn.js", 2430 "./gu": "./node_modules/moment/locale/gu.js", 2431 "./gu.js": "./node_modules/moment/locale/gu.js", 2432 "./he": "./node_modules/moment/locale/he.js", 2433 "./he.js": "./node_modules/moment/locale/he.js", 2434 "./hi": "./node_modules/moment/locale/hi.js", 2435 "./hi.js": "./node_modules/moment/locale/hi.js", 2436 "./hr": "./node_modules/moment/locale/hr.js", 2437 "./hr.js": "./node_modules/moment/locale/hr.js", 2438 "./hu": "./node_modules/moment/locale/hu.js", 2439 "./hu.js": "./node_modules/moment/locale/hu.js", 2440 "./hy-am": "./node_modules/moment/locale/hy-am.js", 2441 "./hy-am.js": "./node_modules/moment/locale/hy-am.js", 2442 "./id": "./node_modules/moment/locale/id.js", 2443 "./id.js": "./node_modules/moment/locale/id.js", 2444 "./is": "./node_modules/moment/locale/is.js", 2445 "./is.js": "./node_modules/moment/locale/is.js", 2446 "./it": "./node_modules/moment/locale/it.js", 2447 "./it-ch": "./node_modules/moment/locale/it-ch.js", 2448 "./it-ch.js": "./node_modules/moment/locale/it-ch.js", 2449 "./it.js": "./node_modules/moment/locale/it.js", 2450 "./ja": "./node_modules/moment/locale/ja.js", 2451 "./ja.js": "./node_modules/moment/locale/ja.js", 2452 "./jv": "./node_modules/moment/locale/jv.js", 2453 "./jv.js": "./node_modules/moment/locale/jv.js", 2454 "./ka": "./node_modules/moment/locale/ka.js", 2455 "./ka.js": "./node_modules/moment/locale/ka.js", 2456 "./kk": "./node_modules/moment/locale/kk.js", 2457 "./kk.js": "./node_modules/moment/locale/kk.js", 2458 "./km": "./node_modules/moment/locale/km.js", 2459 "./km.js": "./node_modules/moment/locale/km.js", 2460 "./kn": "./node_modules/moment/locale/kn.js", 2461 "./kn.js": "./node_modules/moment/locale/kn.js", 2462 "./ko": "./node_modules/moment/locale/ko.js", 2463 "./ko.js": "./node_modules/moment/locale/ko.js", 2464 "./ku": "./node_modules/moment/locale/ku.js", 2465 "./ku.js": "./node_modules/moment/locale/ku.js", 2466 "./ky": "./node_modules/moment/locale/ky.js", 2467 "./ky.js": "./node_modules/moment/locale/ky.js", 2468 "./lb": "./node_modules/moment/locale/lb.js", 2469 "./lb.js": "./node_modules/moment/locale/lb.js", 2470 "./lo": "./node_modules/moment/locale/lo.js", 2471 "./lo.js": "./node_modules/moment/locale/lo.js", 2472 "./lt": "./node_modules/moment/locale/lt.js", 2473 "./lt.js": "./node_modules/moment/locale/lt.js", 2474 "./lv": "./node_modules/moment/locale/lv.js", 2475 "./lv.js": "./node_modules/moment/locale/lv.js", 2476 "./me": "./node_modules/moment/locale/me.js", 2477 "./me.js": "./node_modules/moment/locale/me.js", 2478 "./mi": "./node_modules/moment/locale/mi.js", 2479 "./mi.js": "./node_modules/moment/locale/mi.js", 2480 "./mk": "./node_modules/moment/locale/mk.js", 2481 "./mk.js": "./node_modules/moment/locale/mk.js", 2482 "./ml": "./node_modules/moment/locale/ml.js", 2483 "./ml.js": "./node_modules/moment/locale/ml.js", 2484 "./mn": "./node_modules/moment/locale/mn.js", 2485 "./mn.js": "./node_modules/moment/locale/mn.js", 2486 "./mr": "./node_modules/moment/locale/mr.js", 2487 "./mr.js": "./node_modules/moment/locale/mr.js", 2488 "./ms": "./node_modules/moment/locale/ms.js", 2489 "./ms-my": "./node_modules/moment/locale/ms-my.js", 2490 "./ms-my.js": "./node_modules/moment/locale/ms-my.js", 2491 "./ms.js": "./node_modules/moment/locale/ms.js", 2492 "./mt": "./node_modules/moment/locale/mt.js", 2493 "./mt.js": "./node_modules/moment/locale/mt.js", 2494 "./my": "./node_modules/moment/locale/my.js", 2495 "./my.js": "./node_modules/moment/locale/my.js", 2496 "./nb": "./node_modules/moment/locale/nb.js", 2497 "./nb.js": "./node_modules/moment/locale/nb.js", 2498 "./ne": "./node_modules/moment/locale/ne.js", 2499 "./ne.js": "./node_modules/moment/locale/ne.js", 2500 "./nl": "./node_modules/moment/locale/nl.js", 2501 "./nl-be": "./node_modules/moment/locale/nl-be.js", 2502 "./nl-be.js": "./node_modules/moment/locale/nl-be.js", 2503 "./nl.js": "./node_modules/moment/locale/nl.js", 2504 "./nn": "./node_modules/moment/locale/nn.js", 2505 "./nn.js": "./node_modules/moment/locale/nn.js", 2506 "./pa-in": "./node_modules/moment/locale/pa-in.js", 2507 "./pa-in.js": "./node_modules/moment/locale/pa-in.js", 2508 "./pl": "./node_modules/moment/locale/pl.js", 2509 "./pl.js": "./node_modules/moment/locale/pl.js", 2510 "./pt": "./node_modules/moment/locale/pt.js", 2511 "./pt-br": "./node_modules/moment/locale/pt-br.js", 2512 "./pt-br.js": "./node_modules/moment/locale/pt-br.js", 2513 "./pt.js": "./node_modules/moment/locale/pt.js", 2514 "./ro": "./node_modules/moment/locale/ro.js", 2515 "./ro.js": "./node_modules/moment/locale/ro.js", 2516 "./ru": "./node_modules/moment/locale/ru.js", 2517 "./ru.js": "./node_modules/moment/locale/ru.js", 2518 "./sd": "./node_modules/moment/locale/sd.js", 2519 "./sd.js": "./node_modules/moment/locale/sd.js", 2520 "./se": "./node_modules/moment/locale/se.js", 2521 "./se.js": "./node_modules/moment/locale/se.js", 2522 "./si": "./node_modules/moment/locale/si.js", 2523 "./si.js": "./node_modules/moment/locale/si.js", 2524 "./sk": "./node_modules/moment/locale/sk.js", 2525 "./sk.js": "./node_modules/moment/locale/sk.js", 2526 "./sl": "./node_modules/moment/locale/sl.js", 2527 "./sl.js": "./node_modules/moment/locale/sl.js", 2528 "./sq": "./node_modules/moment/locale/sq.js", 2529 "./sq.js": "./node_modules/moment/locale/sq.js", 2530 "./sr": "./node_modules/moment/locale/sr.js", 2531 "./sr-cyrl": "./node_modules/moment/locale/sr-cyrl.js", 2532 "./sr-cyrl.js": "./node_modules/moment/locale/sr-cyrl.js", 2533 "./sr.js": "./node_modules/moment/locale/sr.js", 2534 "./ss": "./node_modules/moment/locale/ss.js", 2535 "./ss.js": "./node_modules/moment/locale/ss.js", 2536 "./sv": "./node_modules/moment/locale/sv.js", 2537 "./sv.js": "./node_modules/moment/locale/sv.js", 2538 "./sw": "./node_modules/moment/locale/sw.js", 2539 "./sw.js": "./node_modules/moment/locale/sw.js", 2540 "./ta": "./node_modules/moment/locale/ta.js", 2541 "./ta.js": "./node_modules/moment/locale/ta.js", 2542 "./te": "./node_modules/moment/locale/te.js", 2543 "./te.js": "./node_modules/moment/locale/te.js", 2544 "./tet": "./node_modules/moment/locale/tet.js", 2545 "./tet.js": "./node_modules/moment/locale/tet.js", 2546 "./tg": "./node_modules/moment/locale/tg.js", 2547 "./tg.js": "./node_modules/moment/locale/tg.js", 2548 "./th": "./node_modules/moment/locale/th.js", 2549 "./th.js": "./node_modules/moment/locale/th.js", 2550 "./tl-ph": "./node_modules/moment/locale/tl-ph.js", 2551 "./tl-ph.js": "./node_modules/moment/locale/tl-ph.js", 2552 "./tlh": "./node_modules/moment/locale/tlh.js", 2553 "./tlh.js": "./node_modules/moment/locale/tlh.js", 2554 "./tr": "./node_modules/moment/locale/tr.js", 2555 "./tr.js": "./node_modules/moment/locale/tr.js", 2556 "./tzl": "./node_modules/moment/locale/tzl.js", 2557 "./tzl.js": "./node_modules/moment/locale/tzl.js", 2558 "./tzm": "./node_modules/moment/locale/tzm.js", 2559 "./tzm-latn": "./node_modules/moment/locale/tzm-latn.js", 2560 "./tzm-latn.js": "./node_modules/moment/locale/tzm-latn.js", 2561 "./tzm.js": "./node_modules/moment/locale/tzm.js", 2562 "./ug-cn": "./node_modules/moment/locale/ug-cn.js", 2563 "./ug-cn.js": "./node_modules/moment/locale/ug-cn.js", 2564 "./uk": "./node_modules/moment/locale/uk.js", 2565 "./uk.js": "./node_modules/moment/locale/uk.js", 2566 "./ur": "./node_modules/moment/locale/ur.js", 2567 "./ur.js": "./node_modules/moment/locale/ur.js", 2568 "./uz": "./node_modules/moment/locale/uz.js", 2569 "./uz-latn": "./node_modules/moment/locale/uz-latn.js", 2570 "./uz-latn.js": "./node_modules/moment/locale/uz-latn.js", 2571 "./uz.js": "./node_modules/moment/locale/uz.js", 2572 "./vi": "./node_modules/moment/locale/vi.js", 2573 "./vi.js": "./node_modules/moment/locale/vi.js", 2574 "./x-pseudo": "./node_modules/moment/locale/x-pseudo.js", 2575 "./x-pseudo.js": "./node_modules/moment/locale/x-pseudo.js", 2576 "./yo": "./node_modules/moment/locale/yo.js", 2577 "./yo.js": "./node_modules/moment/locale/yo.js", 2578 "./zh-cn": "./node_modules/moment/locale/zh-cn.js", 2579 "./zh-cn.js": "./node_modules/moment/locale/zh-cn.js", 2580 "./zh-hk": "./node_modules/moment/locale/zh-hk.js", 2581 "./zh-hk.js": "./node_modules/moment/locale/zh-hk.js", 2582 "./zh-tw": "./node_modules/moment/locale/zh-tw.js", 2583 "./zh-tw.js": "./node_modules/moment/locale/zh-tw.js" 2584}; 2585 2586 2587function webpackContext(req) { 2588 var id = webpackContextResolve(req); 2589 return __webpack_require__(id); 2590} 2591function webpackContextResolve(req) { 2592 if(!__webpack_require__.o(map, req)) { 2593 var e = new Error("Cannot find module '" + req + "'"); 2594 e.code = 'MODULE_NOT_FOUND'; 2595 throw e; 2596 } 2597 return map[req]; 2598} 2599webpackContext.keys = function webpackContextKeys() { 2600 return Object.keys(map); 2601}; 2602webpackContext.resolve = webpackContextResolve; 2603module.exports = webpackContext; 2604webpackContext.id = "./node_modules/moment/locale sync recursive ^\\.\\/.*$"; 2605 2606/***/ }), 2607
vendor: 2,383 bytes, lines 2608-2687
2608/***/ "./node_modules/moment/locale/af.js": 2609/*!******************************************!*\ 2610 !*** ./node_modules/moment/locale/af.js ***! 2611 \******************************************/ 2612/*! no static exports found */ 2613/***/ (function(module, exports, __webpack_require__) { 2614 2615//! moment.js locale configuration 2616; 2617 2618(function (global, factory) { 2619 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 2620})(this, function (moment) { 2621 'use strict'; 2622 2623 var af = moment.defineLocale('af', { 2624 months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'), 2625 monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), 2626 weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'), 2627 weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), 2628 weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), 2629 meridiemParse: /vm|nm/i, 2630 isPM: function (input) { 2631 return /^nm$/i.test(input); 2632 }, 2633 meridiem: function (hours, minutes, isLower) { 2634 if (hours < 12) { 2635 return isLower ? 'vm' : 'VM'; 2636 } else { 2637 return isLower ? 'nm' : 'NM'; 2638 } 2639 }, 2640 longDateFormat: { 2641 LT: 'HH:mm', 2642 LTS: 'HH:mm:ss', 2643 L: 'DD/MM/YYYY', 2644 LL: 'D MMMM YYYY', 2645 LLL: 'D MMMM YYYY HH:mm', 2646 LLLL: 'dddd, D MMMM YYYY HH:mm' 2647 }, 2648 calendar: { 2649 sameDay: '[Vandag om] LT', 2650 nextDay: '[Môre om] LT', 2651 nextWeek: 'dddd [om] LT', 2652 lastDay: '[Gister om] LT', 2653 lastWeek: '[Laas] dddd [om] LT', 2654 sameElse: 'L' 2655 }, 2656 relativeTime: { 2657 future: 'oor %s', 2658 past: '%s gelede', 2659 s: '\'n paar sekondes', 2660 ss: '%d sekondes', 2661 m: '\'n minuut', 2662 mm: '%d minute', 2663 h: '\'n uur', 2664 hh: '%d ure', 2665 d: '\'n dag', 2666 dd: '%d dae', 2667 M: '\'n maand', 2668 MM: '%d maande', 2669 y: '\'n jaar', 2670 yy: '%d jaar' 2671 }, 2672 dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, 2673 ordinal: function (number) { 2674 return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter 2675 }, 2676 week: { 2677 dow: 1, 2678 // Maandag is die eerste dag van die week. 2679 doy: 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar. 2680 2681 } 2682 }); 2683 return af; 2684}); 2685 2686/***/ }), 2687
vendor: 2,224 bytes, lines 2688-2753
2688/***/ "./node_modules/moment/locale/ar-dz.js": 2689/*!*********************************************!*\ 2690 !*** ./node_modules/moment/locale/ar-dz.js ***! 2691 \*********************************************/ 2692/*! no static exports found */ 2693/***/ (function(module, exports, __webpack_require__) { 2694 2695//! moment.js locale configuration 2696; 2697 2698(function (global, factory) { 2699 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 2700})(this, function (moment) { 2701 'use strict'; 2702 2703 var arDz = moment.defineLocale('ar-dz', { 2704 months: 'جاÙÙÙ_ÙÙÙØ±Ù_٠ارس_Ø£ÙØ±ÙÙ_٠اÙ_Ø¬ÙØ§Ù_جÙÙÙÙØ©_Ø£ÙØª_سبت٠بر_Ø£ÙØªÙبر_ÙÙÙ٠بر_Ø¯ÙØ³Ù بر'.split('_'), 2705 monthsShort: 'جاÙÙÙ_ÙÙÙØ±Ù_٠ارس_Ø£ÙØ±ÙÙ_٠اÙ_Ø¬ÙØ§Ù_جÙÙÙÙØ©_Ø£ÙØª_سبت٠بر_Ø£ÙØªÙبر_ÙÙÙ٠بر_Ø¯ÙØ³Ù بر'.split('_'), 2706 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥Ø«ÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 2707 weekdaysShort: 'Ø§ØØ¯_اثÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_اربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 2708 weekdaysMin: 'Ø£Ø_إث_Ø«ÙØ§_أر_خ٠_ج٠_سب'.split('_'), 2709 weekdaysParseExact: true, 2710 longDateFormat: { 2711 LT: 'HH:mm', 2712 LTS: 'HH:mm:ss', 2713 L: 'DD/MM/YYYY', 2714 LL: 'D MMMM YYYY', 2715 LLL: 'D MMMM YYYY HH:mm', 2716 LLLL: 'dddd D MMMM YYYY HH:mm' 2717 }, 2718 calendar: { 2719 sameDay: '[اÙÙÙ٠عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2720 nextDay: '[غدا عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2721 nextWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2722 lastDay: '[أ٠س عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2723 lastWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2724 sameElse: 'L' 2725 }, 2726 relativeTime: { 2727 future: 'ÙÙ %s', 2728 past: 'Ù ÙØ° %s', 2729 s: 'Ø«ÙØ§Ù', 2730 ss: '%d ثاÙÙØ©', 2731 m: 'دÙÙÙØ©', 2732 mm: '%d Ø¯ÙØ§Ø¦Ù', 2733 h: 'ساعة', 2734 hh: '%d ساعات', 2735 d: 'ÙÙÙ ', 2736 dd: '%d Ø£ÙØ§Ù ', 2737 M: 'Ø´ÙØ±', 2738 MM: '%d Ø£Ø´ÙØ±', 2739 y: 'Ø³ÙØ©', 2740 yy: '%d سÙÙØ§Øª' 2741 }, 2742 week: { 2743 dow: 0, 2744 // Sunday is the first day of the week. 2745 doy: 4 // The week that contains Jan 4th is the first week of the year. 2746 2747 } 2748 }); 2749 return arDz; 2750}); 2751 2752/***/ }), 2753
vendor: 2,206 bytes, lines 2754-2819
2754/***/ "./node_modules/moment/locale/ar-kw.js": 2755/*!*********************************************!*\ 2756 !*** ./node_modules/moment/locale/ar-kw.js ***! 2757 \*********************************************/ 2758/*! no static exports found */ 2759/***/ (function(module, exports, __webpack_require__) { 2760 2761//! moment.js locale configuration 2762; 2763 2764(function (global, factory) { 2765 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 2766})(this, function (moment) { 2767 'use strict'; 2768 2769 var arKw = moment.defineLocale('ar-kw', { 2770 months: 'ÙÙØ§Ùر_ÙØ¨Ø±Ø§Ùر_٠ارس_أبرÙÙ_٠اÙ_ÙÙÙÙÙ_ÙÙÙÙÙØ²_غشت_Ø´ØªÙØ¨Ø±_Ø£ÙØªÙبر_ÙÙÙØ¨Ø±_Ø¯Ø¬ÙØ¨Ø±'.split('_'), 2771 monthsShort: 'ÙÙØ§Ùر_ÙØ¨Ø±Ø§Ùر_٠ارس_أبرÙÙ_٠اÙ_ÙÙÙÙÙ_ÙÙÙÙÙØ²_غشت_Ø´ØªÙØ¨Ø±_Ø£ÙØªÙبر_ÙÙÙØ¨Ø±_Ø¯Ø¬ÙØ¨Ø±'.split('_'), 2772 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥ØªÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 2773 weekdaysShort: 'Ø§ØØ¯_اتÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_اربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 2774 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 2775 weekdaysParseExact: true, 2776 longDateFormat: { 2777 LT: 'HH:mm', 2778 LTS: 'HH:mm:ss', 2779 L: 'DD/MM/YYYY', 2780 LL: 'D MMMM YYYY', 2781 LLL: 'D MMMM YYYY HH:mm', 2782 LLLL: 'dddd D MMMM YYYY HH:mm' 2783 }, 2784 calendar: { 2785 sameDay: '[اÙÙÙ٠عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2786 nextDay: '[غدا عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2787 nextWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2788 lastDay: '[أ٠س عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2789 lastWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2790 sameElse: 'L' 2791 }, 2792 relativeTime: { 2793 future: 'ÙÙ %s', 2794 past: 'Ù ÙØ° %s', 2795 s: 'Ø«ÙØ§Ù', 2796 ss: '%d ثاÙÙØ©', 2797 m: 'دÙÙÙØ©', 2798 mm: '%d Ø¯ÙØ§Ø¦Ù', 2799 h: 'ساعة', 2800 hh: '%d ساعات', 2801 d: 'ÙÙÙ ', 2802 dd: '%d Ø£ÙØ§Ù ', 2803 M: 'Ø´ÙØ±', 2804 MM: '%d Ø£Ø´ÙØ±', 2805 y: 'Ø³ÙØ©', 2806 yy: '%d سÙÙØ§Øª' 2807 }, 2808 week: { 2809 dow: 0, 2810 // Sunday is the first day of the week. 2811 doy: 12 // The week that contains Jan 12th is the first week of the year. 2812 2813 } 2814 }); 2815 return arKw; 2816}); 2817 2818/***/ }), 2819
vendor: 4,101 bytes, lines 2820-2941
2820/***/ "./node_modules/moment/locale/ar-ly.js": 2821/*!*********************************************!*\ 2822 !*** ./node_modules/moment/locale/ar-ly.js ***! 2823 \*********************************************/ 2824/*! no static exports found */ 2825/***/ (function(module, exports, __webpack_require__) { 2826 2827//! moment.js locale configuration 2828; 2829 2830(function (global, factory) { 2831 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 2832})(this, function (moment) { 2833 'use strict'; 2834 2835 var symbolMap = { 2836 '1': '1', 2837 '2': '2', 2838 '3': '3', 2839 '4': '4', 2840 '5': '5', 2841 '6': '6', 2842 '7': '7', 2843 '8': '8', 2844 '9': '9', 2845 '0': '0' 2846 }, 2847 pluralForm = function (n) { 2848 return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; 2849 }, 2850 plurals = { 2851 s: ['Ø£Ù٠٠٠ثاÙÙØ©', 'ثاÙÙØ© ÙØ§ØØ¯Ø©', ['ثاÙÙØªØ§Ù', 'ثاÙÙØªÙÙ'], '%d Ø«ÙØ§Ù', '%d ثاÙÙØ©', '%d ثاÙÙØ©'], 2852 m: ['Ø£Ù٠٠٠دÙÙÙØ©', 'دÙÙÙØ© ÙØ§ØØ¯Ø©', ['دÙÙÙØªØ§Ù', 'دÙÙÙØªÙÙ'], '%d Ø¯ÙØ§Ø¦Ù', '%d دÙÙÙØ©', '%d دÙÙÙØ©'], 2853 h: ['Ø£Ù٠٠٠ساعة', 'ساعة ÙØ§ØØ¯Ø©', ['ساعتاÙ', 'ساعتÙÙ'], '%d ساعات', '%d ساعة', '%d ساعة'], 2854 d: ['Ø£ÙÙ Ù Ù ÙÙÙ ', 'ÙÙÙ ÙØ§ØØ¯', ['ÙÙ٠اÙ', 'ÙÙÙ ÙÙ'], '%d Ø£ÙØ§Ù ', '%d ÙÙÙ ÙØ§', '%d ÙÙÙ '], 2855 M: ['Ø£ÙÙ Ù Ù Ø´ÙØ±', 'Ø´ÙØ± ÙØ§ØØ¯', ['Ø´ÙØ±Ø§Ù', 'Ø´ÙØ±ÙÙ'], '%d Ø£Ø´ÙØ±', '%d Ø´ÙØ±Ø§', '%d Ø´ÙØ±'], 2856 y: ['Ø£Ù٠٠٠عا٠', 'Ø¹Ø§Ù ÙØ§ØØ¯', ['عا٠اÙ', 'عا٠ÙÙ'], '%d Ø£Ø¹ÙØ§Ù ', '%d Ø¹Ø§Ù ÙØ§', '%d عا٠'] 2857 }, 2858 pluralize = function (u) { 2859 return function (number, withoutSuffix, string, isFuture) { 2860 var f = pluralForm(number), 2861 str = plurals[u][pluralForm(number)]; 2862 2863 if (f === 2) { 2864 str = str[withoutSuffix ? 0 : 1]; 2865 } 2866 2867 return str.replace(/%d/i, number); 2868 }; 2869 }, 2870 months = ['ÙÙØ§Ùر', 'ÙØ¨Ø±Ø§Ùر', '٠ارس', 'أبرÙÙ', '٠اÙÙ', 'ÙÙÙÙÙ', 'ÙÙÙÙÙ', 'أغسطس', 'سبت٠بر', 'Ø£ÙØªÙبر', 'ÙÙÙ٠بر', 'Ø¯ÙØ³Ù بر']; 2871 2872 var arLy = moment.defineLocale('ar-ly', { 2873 months: months, 2874 monthsShort: months, 2875 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥Ø«ÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 2876 weekdaysShort: 'Ø£ØØ¯_إثÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_أربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 2877 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 2878 weekdaysParseExact: true, 2879 longDateFormat: { 2880 LT: 'HH:mm', 2881 LTS: 'HH:mm:ss', 2882 L: 'D/\u200FM/\u200FYYYY', 2883 LL: 'D MMMM YYYY', 2884 LLL: 'D MMMM YYYY HH:mm', 2885 LLLL: 'dddd D MMMM YYYY HH:mm' 2886 }, 2887 meridiemParse: /ص|Ù /, 2888 isPM: function (input) { 2889 return 'Ù ' === input; 2890 }, 2891 meridiem: function (hour, minute, isLower) { 2892 if (hour < 12) { 2893 return 'ص'; 2894 } else { 2895 return 'Ù '; 2896 } 2897 }, 2898 calendar: { 2899 sameDay: '[اÙÙÙÙ Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2900 nextDay: '[ØºØ¯ÙØ§ Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2901 nextWeek: 'dddd [Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2902 lastDay: '[أ٠س Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2903 lastWeek: 'dddd [Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2904 sameElse: 'L' 2905 }, 2906 relativeTime: { 2907 future: 'بعد %s', 2908 past: 'Ù ÙØ° %s', 2909 s: pluralize('s'), 2910 ss: pluralize('s'), 2911 m: pluralize('m'), 2912 mm: pluralize('m'), 2913 h: pluralize('h'), 2914 hh: pluralize('h'), 2915 d: pluralize('d'), 2916 dd: pluralize('d'), 2917 M: pluralize('M'), 2918 MM: pluralize('M'), 2919 y: pluralize('y'), 2920 yy: pluralize('y') 2921 }, 2922 preparse: function (string) { 2923 return string.replace(/Ø/g, ','); 2924 }, 2925 postformat: function (string) { 2926 return string.replace(/\d/g, function (match) { 2927 return symbolMap[match]; 2928 }).replace(/,/g, 'Ø'); 2929 }, 2930 week: { 2931 dow: 6, 2932 // Saturday is the first day of the week. 2933 doy: 12 // The week that contains Jan 12th is the first week of the year. 2934 2935 } 2936 }); 2937 return arLy; 2938}); 2939 2940/***/ }), 2941
vendor: 2,208 bytes, lines 2942-3007
2942/***/ "./node_modules/moment/locale/ar-ma.js": 2943/*!*********************************************!*\ 2944 !*** ./node_modules/moment/locale/ar-ma.js ***! 2945 \*********************************************/ 2946/*! no static exports found */ 2947/***/ (function(module, exports, __webpack_require__) { 2948 2949//! moment.js locale configuration 2950; 2951 2952(function (global, factory) { 2953 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 2954})(this, function (moment) { 2955 'use strict'; 2956 2957 var arMa = moment.defineLocale('ar-ma', { 2958 months: 'ÙÙØ§Ùر_ÙØ¨Ø±Ø§Ùر_٠ارس_أبرÙÙ_٠اÙ_ÙÙÙÙÙ_ÙÙÙÙÙØ²_غشت_Ø´ØªÙØ¨Ø±_Ø£ÙØªÙبر_ÙÙÙØ¨Ø±_Ø¯Ø¬ÙØ¨Ø±'.split('_'), 2959 monthsShort: 'ÙÙØ§Ùر_ÙØ¨Ø±Ø§Ùر_٠ارس_أبرÙÙ_٠اÙ_ÙÙÙÙÙ_ÙÙÙÙÙØ²_غشت_Ø´ØªÙØ¨Ø±_Ø£ÙØªÙبر_ÙÙÙØ¨Ø±_Ø¯Ø¬ÙØ¨Ø±'.split('_'), 2960 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥ØªÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 2961 weekdaysShort: 'Ø§ØØ¯_اتÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_اربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 2962 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 2963 weekdaysParseExact: true, 2964 longDateFormat: { 2965 LT: 'HH:mm', 2966 LTS: 'HH:mm:ss', 2967 L: 'DD/MM/YYYY', 2968 LL: 'D MMMM YYYY', 2969 LLL: 'D MMMM YYYY HH:mm', 2970 LLLL: 'dddd D MMMM YYYY HH:mm' 2971 }, 2972 calendar: { 2973 sameDay: '[اÙÙÙ٠عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2974 nextDay: '[غدا عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2975 nextWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2976 lastDay: '[أ٠س عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2977 lastWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 2978 sameElse: 'L' 2979 }, 2980 relativeTime: { 2981 future: 'ÙÙ %s', 2982 past: 'Ù ÙØ° %s', 2983 s: 'Ø«ÙØ§Ù', 2984 ss: '%d ثاÙÙØ©', 2985 m: 'دÙÙÙØ©', 2986 mm: '%d Ø¯ÙØ§Ø¦Ù', 2987 h: 'ساعة', 2988 hh: '%d ساعات', 2989 d: 'ÙÙÙ ', 2990 dd: '%d Ø£ÙØ§Ù ', 2991 M: 'Ø´ÙØ±', 2992 MM: '%d Ø£Ø´ÙØ±', 2993 y: 'Ø³ÙØ©', 2994 yy: '%d سÙÙØ§Øª' 2995 }, 2996 week: { 2997 dow: 6, 2998 // Saturday is the first day of the week. 2999 doy: 12 // The week that contains Jan 12th is the first week of the year. 3000 3001 } 3002 }); 3003 return arMa; 3004}); 3005 3006/***/ }), 3007
vendor: 3,147 bytes, lines 3008-3118
3008/***/ "./node_modules/moment/locale/ar-sa.js": 3009/*!*********************************************!*\ 3010 !*** ./node_modules/moment/locale/ar-sa.js ***! 3011 \*********************************************/ 3012/*! no static exports found */ 3013/***/ (function(module, exports, __webpack_require__) { 3014 3015//! moment.js locale configuration 3016; 3017 3018(function (global, factory) { 3019 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 3020})(this, function (moment) { 3021 'use strict'; 3022 3023 var symbolMap = { 3024 '1': 'Ù¡', 3025 '2': 'Ù¢', 3026 '3': 'Ù£', 3027 '4': 'Ù¤', 3028 '5': 'Ù¥', 3029 '6': 'Ù¦', 3030 '7': 'Ù§', 3031 '8': 'Ù¨', 3032 '9': 'Ù©', 3033 '0': 'Ù ' 3034 }, 3035 numberMap = { 3036 'Ù¡': '1', 3037 'Ù¢': '2', 3038 'Ù£': '3', 3039 'Ù¤': '4', 3040 'Ù¥': '5', 3041 'Ù¦': '6', 3042 'Ù§': '7', 3043 'Ù¨': '8', 3044 'Ù©': '9', 3045 'Ù ': '0' 3046 }; 3047 var arSa = moment.defineLocale('ar-sa', { 3048 months: 'ÙÙØ§Ùر_ÙØ¨Ø±Ø§Ùر_٠ارس_أبرÙÙ_٠اÙÙ_ÙÙÙÙÙ_ÙÙÙÙÙ_أغسطس_سبت٠بر_Ø£ÙØªÙبر_ÙÙÙ٠بر_Ø¯ÙØ³Ù بر'.split('_'), 3049 monthsShort: 'ÙÙØ§Ùر_ÙØ¨Ø±Ø§Ùر_٠ارس_أبرÙÙ_٠اÙÙ_ÙÙÙÙÙ_ÙÙÙÙÙ_أغسطس_سبت٠بر_Ø£ÙØªÙبر_ÙÙÙ٠بر_Ø¯ÙØ³Ù بر'.split('_'), 3050 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥Ø«ÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 3051 weekdaysShort: 'Ø£ØØ¯_إثÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_أربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 3052 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 3053 weekdaysParseExact: true, 3054 longDateFormat: { 3055 LT: 'HH:mm', 3056 LTS: 'HH:mm:ss', 3057 L: 'DD/MM/YYYY', 3058 LL: 'D MMMM YYYY', 3059 LLL: 'D MMMM YYYY HH:mm', 3060 LLLL: 'dddd D MMMM YYYY HH:mm' 3061 }, 3062 meridiemParse: /ص|Ù /, 3063 isPM: function (input) { 3064 return 'Ù ' === input; 3065 }, 3066 meridiem: function (hour, minute, isLower) { 3067 if (hour < 12) { 3068 return 'ص'; 3069 } else { 3070 return 'Ù '; 3071 } 3072 }, 3073 calendar: { 3074 sameDay: '[اÙÙÙ٠عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3075 nextDay: '[غدا عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3076 nextWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3077 lastDay: '[أ٠س عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3078 lastWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3079 sameElse: 'L' 3080 }, 3081 relativeTime: { 3082 future: 'ÙÙ %s', 3083 past: 'Ù ÙØ° %s', 3084 s: 'Ø«ÙØ§Ù', 3085 ss: '%d ثاÙÙØ©', 3086 m: 'دÙÙÙØ©', 3087 mm: '%d Ø¯ÙØ§Ø¦Ù', 3088 h: 'ساعة', 3089 hh: '%d ساعات', 3090 d: 'ÙÙÙ ', 3091 dd: '%d Ø£ÙØ§Ù ', 3092 M: 'Ø´ÙØ±', 3093 MM: '%d Ø£Ø´ÙØ±', 3094 y: 'Ø³ÙØ©', 3095 yy: '%d سÙÙØ§Øª' 3096 }, 3097 preparse: function (string) { 3098 return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { 3099 return numberMap[match]; 3100 }).replace(/Ø/g, ','); 3101 }, 3102 postformat: function (string) { 3103 return string.replace(/\d/g, function (match) { 3104 return symbolMap[match]; 3105 }).replace(/,/g, 'Ø'); 3106 }, 3107 week: { 3108 dow: 0, 3109 // Sunday is the first day of the week. 3110 doy: 6 // The week that contains Jan 6th is the first week of the year. 3111 3112 } 3113 }); 3114 return arSa; 3115}); 3116 3117/***/ }), 3118
vendor: 2,208 bytes, lines 3119-3184
3119/***/ "./node_modules/moment/locale/ar-tn.js": 3120/*!*********************************************!*\ 3121 !*** ./node_modules/moment/locale/ar-tn.js ***! 3122 \*********************************************/ 3123/*! no static exports found */ 3124/***/ (function(module, exports, __webpack_require__) { 3125 3126//! moment.js locale configuration 3127; 3128 3129(function (global, factory) { 3130 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 3131})(this, function (moment) { 3132 'use strict'; 3133 3134 var arTn = moment.defineLocale('ar-tn', { 3135 months: 'جاÙÙÙ_ÙÙÙØ±Ù_٠ارس_Ø£ÙØ±ÙÙ_٠اÙ_Ø¬ÙØ§Ù_جÙÙÙÙØ©_Ø£ÙØª_سبت٠بر_Ø£ÙØªÙبر_ÙÙÙ٠بر_Ø¯ÙØ³Ù بر'.split('_'), 3136 monthsShort: 'جاÙÙÙ_ÙÙÙØ±Ù_٠ارس_Ø£ÙØ±ÙÙ_٠اÙ_Ø¬ÙØ§Ù_جÙÙÙÙØ©_Ø£ÙØª_سبت٠بر_Ø£ÙØªÙبر_ÙÙÙ٠بر_Ø¯ÙØ³Ù بر'.split('_'), 3137 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥Ø«ÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 3138 weekdaysShort: 'Ø£ØØ¯_إثÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_أربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 3139 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 3140 weekdaysParseExact: true, 3141 longDateFormat: { 3142 LT: 'HH:mm', 3143 LTS: 'HH:mm:ss', 3144 L: 'DD/MM/YYYY', 3145 LL: 'D MMMM YYYY', 3146 LLL: 'D MMMM YYYY HH:mm', 3147 LLLL: 'dddd D MMMM YYYY HH:mm' 3148 }, 3149 calendar: { 3150 sameDay: '[اÙÙÙ٠عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3151 nextDay: '[غدا عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3152 nextWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3153 lastDay: '[أ٠س عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3154 lastWeek: 'dddd [عÙÙ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3155 sameElse: 'L' 3156 }, 3157 relativeTime: { 3158 future: 'ÙÙ %s', 3159 past: 'Ù ÙØ° %s', 3160 s: 'Ø«ÙØ§Ù', 3161 ss: '%d ثاÙÙØ©', 3162 m: 'دÙÙÙØ©', 3163 mm: '%d Ø¯ÙØ§Ø¦Ù', 3164 h: 'ساعة', 3165 hh: '%d ساعات', 3166 d: 'ÙÙÙ ', 3167 dd: '%d Ø£ÙØ§Ù ', 3168 M: 'Ø´ÙØ±', 3169 MM: '%d Ø£Ø´ÙØ±', 3170 y: 'Ø³ÙØ©', 3171 yy: '%d سÙÙØ§Øª' 3172 }, 3173 week: { 3174 dow: 1, 3175 // Monday is the first day of the week. 3176 doy: 4 // The week that contains Jan 4th is the first week of the year. 3177 3178 } 3179 }); 3180 return arTn; 3181}); 3182 3183/***/ }), 3184
vendor: 4,362 bytes, lines 3185-3320
3185/***/ "./node_modules/moment/locale/ar.js": 3186/*!******************************************!*\ 3187 !*** ./node_modules/moment/locale/ar.js ***! 3188 \******************************************/ 3189/*! no static exports found */ 3190/***/ (function(module, exports, __webpack_require__) { 3191 3192//! moment.js locale configuration 3193; 3194 3195(function (global, factory) { 3196 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 3197})(this, function (moment) { 3198 'use strict'; 3199 3200 var symbolMap = { 3201 '1': 'Ù¡', 3202 '2': 'Ù¢', 3203 '3': 'Ù£', 3204 '4': 'Ù¤', 3205 '5': 'Ù¥', 3206 '6': 'Ù¦', 3207 '7': 'Ù§', 3208 '8': 'Ù¨', 3209 '9': 'Ù©', 3210 '0': 'Ù ' 3211 }, 3212 numberMap = { 3213 'Ù¡': '1', 3214 'Ù¢': '2', 3215 'Ù£': '3', 3216 'Ù¤': '4', 3217 'Ù¥': '5', 3218 'Ù¦': '6', 3219 'Ù§': '7', 3220 'Ù¨': '8', 3221 'Ù©': '9', 3222 'Ù ': '0' 3223 }, 3224 pluralForm = function (n) { 3225 return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; 3226 }, 3227 plurals = { 3228 s: ['Ø£Ù٠٠٠ثاÙÙØ©', 'ثاÙÙØ© ÙØ§ØØ¯Ø©', ['ثاÙÙØªØ§Ù', 'ثاÙÙØªÙÙ'], '%d Ø«ÙØ§Ù', '%d ثاÙÙØ©', '%d ثاÙÙØ©'], 3229 m: ['Ø£Ù٠٠٠دÙÙÙØ©', 'دÙÙÙØ© ÙØ§ØØ¯Ø©', ['دÙÙÙØªØ§Ù', 'دÙÙÙØªÙÙ'], '%d Ø¯ÙØ§Ø¦Ù', '%d دÙÙÙØ©', '%d دÙÙÙØ©'], 3230 h: ['Ø£Ù٠٠٠ساعة', 'ساعة ÙØ§ØØ¯Ø©', ['ساعتاÙ', 'ساعتÙÙ'], '%d ساعات', '%d ساعة', '%d ساعة'], 3231 d: ['Ø£ÙÙ Ù Ù ÙÙÙ ', 'ÙÙÙ ÙØ§ØØ¯', ['ÙÙ٠اÙ', 'ÙÙÙ ÙÙ'], '%d Ø£ÙØ§Ù ', '%d ÙÙÙ ÙØ§', '%d ÙÙÙ '], 3232 M: ['Ø£ÙÙ Ù Ù Ø´ÙØ±', 'Ø´ÙØ± ÙØ§ØØ¯', ['Ø´ÙØ±Ø§Ù', 'Ø´ÙØ±ÙÙ'], '%d Ø£Ø´ÙØ±', '%d Ø´ÙØ±Ø§', '%d Ø´ÙØ±'], 3233 y: ['Ø£Ù٠٠٠عا٠', 'Ø¹Ø§Ù ÙØ§ØØ¯', ['عا٠اÙ', 'عا٠ÙÙ'], '%d Ø£Ø¹ÙØ§Ù ', '%d Ø¹Ø§Ù ÙØ§', '%d عا٠'] 3234 }, 3235 pluralize = function (u) { 3236 return function (number, withoutSuffix, string, isFuture) { 3237 var f = pluralForm(number), 3238 str = plurals[u][pluralForm(number)]; 3239 3240 if (f === 2) { 3241 str = str[withoutSuffix ? 0 : 1]; 3242 } 3243 3244 return str.replace(/%d/i, number); 3245 }; 3246 }, 3247 months = ['ÙÙØ§Ùر', 'ÙØ¨Ø±Ø§Ùر', '٠ارس', 'أبرÙÙ', '٠اÙÙ', 'ÙÙÙÙÙ', 'ÙÙÙÙÙ', 'أغسطس', 'سبت٠بر', 'Ø£ÙØªÙبر', 'ÙÙÙ٠بر', 'Ø¯ÙØ³Ù بر']; 3248 3249 var ar = moment.defineLocale('ar', { 3250 months: months, 3251 monthsShort: months, 3252 weekdays: 'Ø§ÙØ£ØØ¯_Ø§ÙØ¥Ø«ÙÙÙ_Ø§ÙØ«Ùاثاء_Ø§ÙØ£Ø±Ø¨Ø¹Ø§Ø¡_Ø§ÙØ®Ù ÙØ³_Ø§ÙØ¬Ù عة_Ø§ÙØ³Ø¨Øª'.split('_'), 3253 weekdaysShort: 'Ø£ØØ¯_إثÙÙÙ_Ø«ÙØ§Ø«Ø§Ø¡_أربعاء_Ø®Ù ÙØ³_ج٠عة_سبت'.split('_'), 3254 weekdaysMin: 'Ø_Ù_Ø«_ر_Ø®_ج_س'.split('_'), 3255 weekdaysParseExact: true, 3256 longDateFormat: { 3257 LT: 'HH:mm', 3258 LTS: 'HH:mm:ss', 3259 L: 'D/\u200FM/\u200FYYYY', 3260 LL: 'D MMMM YYYY', 3261 LLL: 'D MMMM YYYY HH:mm', 3262 LLLL: 'dddd D MMMM YYYY HH:mm' 3263 }, 3264 meridiemParse: /ص|Ù /, 3265 isPM: function (input) { 3266 return 'Ù ' === input; 3267 }, 3268 meridiem: function (hour, minute, isLower) { 3269 if (hour < 12) { 3270 return 'ص'; 3271 } else { 3272 return 'Ù '; 3273 } 3274 }, 3275 calendar: { 3276 sameDay: '[اÙÙÙÙ Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3277 nextDay: '[ØºØ¯ÙØ§ Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3278 nextWeek: 'dddd [Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3279 lastDay: '[أ٠س Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3280 lastWeek: 'dddd [Ø¹ÙØ¯ Ø§ÙØ³Ø§Ø¹Ø©] LT', 3281 sameElse: 'L' 3282 }, 3283 relativeTime: { 3284 future: 'بعد %s', 3285 past: 'Ù ÙØ° %s', 3286 s: pluralize('s'), 3287 ss: pluralize('s'), 3288 m: pluralize('m'), 3289 mm: pluralize('m'), 3290 h: pluralize('h'), 3291 hh: pluralize('h'), 3292 d: pluralize('d'), 3293 dd: pluralize('d'), 3294 M: pluralize('M'), 3295 MM: pluralize('M'), 3296 y: pluralize('y'), 3297 yy: pluralize('y') 3298 }, 3299 preparse: function (string) { 3300 return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { 3301 return numberMap[match]; 3302 }).replace(/Ø/g, ','); 3303 }, 3304 postformat: function (string) { 3305 return string.replace(/\d/g, function (match) { 3306 return symbolMap[match]; 3307 }).replace(/,/g, 'Ø'); 3308 }, 3309 week: { 3310 dow: 6, 3311 // Saturday is the first day of the week. 3312 doy: 12 // The week that contains Jan 12th is the first week of the year. 3313 3314 } 3315 }); 3316 return ar; 3317}); 3318 3319/***/ }), 3320
vendor: 3,067 bytes, lines 3321-3433
3321/***/ "./node_modules/moment/locale/az.js": 3322/*!******************************************!*\ 3323 !*** ./node_modules/moment/locale/az.js ***! 3324 \******************************************/ 3325/*! no static exports found */ 3326/***/ (function(module, exports, __webpack_require__) { 3327 3328//! moment.js locale configuration 3329; 3330 3331(function (global, factory) { 3332 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 3333})(this, function (moment) { 3334 'use strict'; 3335 3336 var suffixes = { 3337 1: '-inci', 3338 5: '-inci', 3339 8: '-inci', 3340 70: '-inci', 3341 80: '-inci', 3342 2: '-nci', 3343 7: '-nci', 3344 20: '-nci', 3345 50: '-nci', 3346 3: '-üncü', 3347 4: '-üncü', 3348 100: '-üncü', 3349 6: '-ncı', 3350 9: '-uncu', 3351 10: '-uncu', 3352 30: '-uncu', 3353 60: '-ıncı', 3354 90: '-ıncı' 3355 }; 3356 var az = moment.defineLocale('az', { 3357 months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'), 3358 monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), 3359 weekdays: 'Bazar_Bazar ertÉsi_ÃÉrÅÉnbÉ axÅamı_ÃÉrÅÉnbÉ_CümÉ axÅamı_CümÉ_ÅÉnbÉ'.split('_'), 3360 weekdaysShort: 'Baz_BzE_ÃAx_ÃÉr_CAx_Cüm_ÅÉn'.split('_'), 3361 weekdaysMin: 'Bz_BE_ÃA_ÃÉ_CA_Cü_ÅÉ'.split('_'), 3362 weekdaysParseExact: true, 3363 longDateFormat: { 3364 LT: 'HH:mm', 3365 LTS: 'HH:mm:ss', 3366 L: 'DD.MM.YYYY', 3367 LL: 'D MMMM YYYY', 3368 LLL: 'D MMMM YYYY HH:mm', 3369 LLLL: 'dddd, D MMMM YYYY HH:mm' 3370 }, 3371 calendar: { 3372 sameDay: '[bugün saat] LT', 3373 nextDay: '[sabah saat] LT', 3374 nextWeek: '[gÉlÉn hÉftÉ] dddd [saat] LT', 3375 lastDay: '[dünÉn] LT', 3376 lastWeek: '[keçÉn hÉftÉ] dddd [saat] LT', 3377 sameElse: 'L' 3378 }, 3379 relativeTime: { 3380 future: '%s sonra', 3381 past: '%s ÉvvÉl', 3382 s: 'birneÃ§É saniyÉ', 3383 ss: '%d saniyÉ', 3384 m: 'bir dÉqiqÉ', 3385 mm: '%d dÉqiqÉ', 3386 h: 'bir saat', 3387 hh: '%d saat', 3388 d: 'bir gün', 3389 dd: '%d gün', 3390 M: 'bir ay', 3391 MM: '%d ay', 3392 y: 'bir il', 3393 yy: '%d il' 3394 }, 3395 meridiemParse: /gecÉ|sÉhÉr|gündüz|axÅam/, 3396 isPM: function (input) { 3397 return /^(gündüz|axÅam)$/.test(input); 3398 }, 3399 meridiem: function (hour, minute, isLower) { 3400 if (hour < 4) { 3401 return 'gecÉ'; 3402 } else if (hour < 12) { 3403 return 'sÉhÉr'; 3404 } else if (hour < 17) { 3405 return 'gündüz'; 3406 } else { 3407 return 'axÅam'; 3408 } 3409 }, 3410 dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, 3411 ordinal: function (number) { 3412 if (number === 0) { 3413 // special case for zero 3414 return number + '-ıncı'; 3415 } 3416 3417 var a = number % 10, 3418 b = number % 100 - a, 3419 c = number >= 100 ? 100 : null; 3420 return number + (suffixes[a] || suffixes[b] || suffixes[c]); 3421 }, 3422 week: { 3423 dow: 1, 3424 // Monday is the first day of the week. 3425 doy: 7 // The week that contains Jan 7th is the first week of the year. 3426 3427 } 3428 }); 3429 return az; 3430}); 3431 3432/***/ }), 3433
vendor: 4,958 bytes, lines 3434-3575
3434/***/ "./node_modules/moment/locale/be.js": 3435/*!******************************************!*\ 3436 !*** ./node_modules/moment/locale/be.js ***! 3437 \******************************************/ 3438/*! no static exports found */ 3439/***/ (function(module, exports, __webpack_require__) { 3440 3441//! moment.js locale configuration 3442; 3443 3444(function (global, factory) { 3445 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 3446})(this, function (moment) { 3447 'use strict'; 3448 3449 function plural(word, num) { 3450 var forms = word.split('_'); 3451 return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]; 3452 } 3453 3454 function relativeTimeWithPlural(number, withoutSuffix, key) { 3455 var format = { 3456 'ss': withoutSuffix ? 'ÑекÑнда_ÑекÑндÑ_ÑекÑнд' : 'ÑекÑндÑ_ÑекÑндÑ_ÑекÑнд', 3457 'mm': withoutSuffix ? 'Ñ Ð²ÑлÑна_Ñ Ð²ÑлÑнÑ_Ñ Ð²ÑлÑн' : 'Ñ Ð²ÑлÑнÑ_Ñ Ð²ÑлÑнÑ_Ñ Ð²ÑлÑн', 3458 'hh': withoutSuffix ? 'гадзÑна_гадзÑнÑ_гадзÑн' : 'гадзÑнÑ_гадзÑнÑ_гадзÑн', 3459 'dd': 'дзенÑ_днÑ_дзÑн', 3460 'MM': 'меÑÑÑ_меÑÑÑÑ_меÑÑÑаÑ', 3461 'yy': 'год_гадÑ_гадоÑ' 3462 }; 3463 3464 if (key === 'm') { 3465 return withoutSuffix ? 'Ñ Ð²ÑлÑна' : 'Ñ Ð²ÑлÑнÑ'; 3466 } else if (key === 'h') { 3467 return withoutSuffix ? 'гадзÑна' : 'гадзÑнÑ'; 3468 } else { 3469 return number + ' ' + plural(format[key], +number); 3470 } 3471 } 3472 3473 var be = moment.defineLocale('be', { 3474 months: { 3475 format: 'ÑÑÑдзенÑ_лÑÑага_ÑакавÑка_кÑаÑавÑка_ÑÑаÑнÑ_ÑÑÑвенÑ_лÑпенÑ_жнÑÑнÑ_веÑаÑнÑ_каÑÑÑÑÑнÑка_лÑÑÑапада_ÑнежнÑ'.split('_'), 3476 standalone: 'ÑÑÑдзенÑ_лÑÑÑ_ÑакавÑк_кÑаÑавÑк_ÑÑавенÑ_ÑÑÑвенÑ_лÑпенÑ_жнÑвенÑ_веÑаÑенÑ_каÑÑÑÑÑнÑк_лÑÑÑапад_ÑнежанÑ'.split('_') 3477 }, 3478 monthsShort: 'ÑÑÑд_лÑÑ_Ñак_кÑаÑ_ÑÑав_ÑÑÑв_лÑп_жнÑв_веÑ_каÑÑ_лÑÑÑ_Ñнеж'.split('_'), 3479 weekdays: { 3480 format: 'нÑдзелÑ_панÑдзелак_аÑÑоÑак_ÑеÑадÑ_ÑаÑвеÑ_пÑÑнÑÑÑ_ÑÑбоÑÑ'.split('_'), 3481 standalone: 'нÑдзелÑ_панÑдзелак_аÑÑоÑак_ÑеÑада_ÑаÑвеÑ_пÑÑнÑÑа_ÑÑбоÑа'.split('_'), 3482 isFormat: /\[ ?[УÑÑ] ?(?:мÑнÑлÑÑ|наÑÑÑпнÑÑ)? ?\] ?dddd/ 3483 }, 3484 weekdaysShort: 'нд_пн_аÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 3485 weekdaysMin: 'нд_пн_аÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 3486 longDateFormat: { 3487 LT: 'HH:mm', 3488 LTS: 'HH:mm:ss', 3489 L: 'DD.MM.YYYY', 3490 LL: 'D MMMM YYYY г.', 3491 LLL: 'D MMMM YYYY г., HH:mm', 3492 LLLL: 'dddd, D MMMM YYYY г., HH:mm' 3493 }, 3494 calendar: { 3495 sameDay: '[СÑÐ½Ð½Ñ Ñ] LT', 3496 nextDay: '[ÐаÑÑÑа Ñ] LT', 3497 lastDay: '[УÑоÑа Ñ] LT', 3498 nextWeek: function () { 3499 return '[У] dddd [Ñ] LT'; 3500 }, 3501 lastWeek: function () { 3502 switch (this.day()) { 3503 case 0: 3504 case 3: 3505 case 5: 3506 case 6: 3507 return '[У мÑнÑлÑÑ] dddd [Ñ] LT'; 3508 3509 case 1: 3510 case 2: 3511 case 4: 3512 return '[У мÑнÑлÑ] dddd [Ñ] LT'; 3513 } 3514 }, 3515 sameElse: 'L' 3516 }, 3517 relativeTime: { 3518 future: 'пÑаз %s', 3519 past: '%s ÑамÑ', 3520 s: 'некалÑÐºÑ ÑекÑнд', 3521 m: relativeTimeWithPlural, 3522 mm: relativeTimeWithPlural, 3523 h: relativeTimeWithPlural, 3524 hh: relativeTimeWithPlural, 3525 d: 'дзенÑ', 3526 dd: relativeTimeWithPlural, 3527 M: 'меÑÑÑ', 3528 MM: relativeTimeWithPlural, 3529 y: 'год', 3530 yy: relativeTimeWithPlural 3531 }, 3532 meridiemParse: /ноÑÑ|ÑанÑÑÑ|днÑ|веÑаÑа/, 3533 isPM: function (input) { 3534 return /^(днÑ|веÑаÑа)$/.test(input); 3535 }, 3536 meridiem: function (hour, minute, isLower) { 3537 if (hour < 4) { 3538 return 'ноÑÑ'; 3539 } else if (hour < 12) { 3540 return 'ÑанÑÑÑ'; 3541 } else if (hour < 17) { 3542 return 'днÑ'; 3543 } else { 3544 return 'веÑаÑа'; 3545 } 3546 }, 3547 dayOfMonthOrdinalParse: /\d{1,2}-(Ñ|Ñ|га)/, 3548 ordinal: function (number, period) { 3549 switch (period) { 3550 case 'M': 3551 case 'd': 3552 case 'DDD': 3553 case 'w': 3554 case 'W': 3555 return (number % 10 === 2 || number % 10 === 3) && number % 100 !== 12 && number % 100 !== 13 ? number + '-Ñ' : number + '-Ñ'; 3556 3557 case 'D': 3558 return number + '-га'; 3559 3560 default: 3561 return number; 3562 } 3563 }, 3564 week: { 3565 dow: 1, 3566 // Monday is the first day of the week. 3567 doy: 7 // The week that contains Jan 7th is the first week of the year. 3568 3569 } 3570 }); 3571 return be; 3572}); 3573 3574/***/ }), 3575
vendor: 3,078 bytes, lines 3576-3674
3576/***/ "./node_modules/moment/locale/bg.js": 3577/*!******************************************!*\ 3578 !*** ./node_modules/moment/locale/bg.js ***! 3579 \******************************************/ 3580/*! no static exports found */ 3581/***/ (function(module, exports, __webpack_require__) { 3582 3583//! moment.js locale configuration 3584; 3585 3586(function (global, factory) { 3587 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 3588})(this, function (moment) { 3589 'use strict'; 3590 3591 var bg = moment.defineLocale('bg', { 3592 months: 'ÑнÑаÑи_ÑевÑÑаÑи_маÑÑ_апÑил_май_Ñни_Ñли_авгÑÑÑ_ÑепÑемвÑи_окÑомвÑи_ноемвÑи_декемвÑи'.split('_'), 3593 monthsShort: 'ÑнÑ_Ñев_маÑ_апÑ_май_Ñни_Ñли_авг_Ñеп_окÑ_ное_дек'.split('_'), 3594 weekdays: 'неделÑ_понеделник_вÑоÑник_ÑÑÑда_ÑеÑвÑÑÑÑк_пеÑÑк_ÑÑбоÑа'.split('_'), 3595 weekdaysShort: 'нед_пон_вÑо_ÑÑÑ_ÑеÑ_пеÑ_ÑÑб'.split('_'), 3596 weekdaysMin: 'нд_пн_вÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 3597 longDateFormat: { 3598 LT: 'H:mm', 3599 LTS: 'H:mm:ss', 3600 L: 'D.MM.YYYY', 3601 LL: 'D MMMM YYYY', 3602 LLL: 'D MMMM YYYY H:mm', 3603 LLLL: 'dddd, D MMMM YYYY H:mm' 3604 }, 3605 calendar: { 3606 sameDay: '[ÐÐ½ÐµÑ Ð²] LT', 3607 nextDay: '[УÑÑе в] LT', 3608 nextWeek: 'dddd [в] LT', 3609 lastDay: '[ÐÑеÑа в] LT', 3610 lastWeek: function () { 3611 switch (this.day()) { 3612 case 0: 3613 case 3: 3614 case 6: 3615 return '[РизминалаÑа] dddd [в] LT'; 3616 3617 case 1: 3618 case 2: 3619 case 4: 3620 case 5: 3621 return '[РизминалиÑ] dddd [в] LT'; 3622 } 3623 }, 3624 sameElse: 'L' 3625 }, 3626 relativeTime: { 3627 future: 'Ñлед %s', 3628 past: 'пÑеди %s', 3629 s: 'нÑколко ÑекÑнди', 3630 ss: '%d ÑекÑнди', 3631 m: 'минÑÑа', 3632 mm: '%d минÑÑи', 3633 h: 'ÑаÑ', 3634 hh: '%d ÑаÑа', 3635 d: 'ден', 3636 dd: '%d дни', 3637 M: 'меÑеÑ', 3638 MM: '%d меÑеÑа', 3639 y: 'година', 3640 yy: '%d години' 3641 }, 3642 dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|Ñи|ви|Ñи|ми)/, 3643 ordinal: function (number) { 3644 var lastDigit = number % 10, 3645 last2Digits = number % 100; 3646 3647 if (number === 0) { 3648 return number + '-ев'; 3649 } else if (last2Digits === 0) { 3650 return number + '-ен'; 3651 } else if (last2Digits > 10 && last2Digits < 20) { 3652 return number + '-Ñи'; 3653 } else if (lastDigit === 1) { 3654 return number + '-ви'; 3655 } else if (lastDigit === 2) { 3656 return number + '-Ñи'; 3657 } else if (lastDigit === 7 || lastDigit === 8) { 3658 return number + '-ми'; 3659 } else { 3660 return number + '-Ñи'; 3661 } 3662 }, 3663 week: { 3664 dow: 1, 3665 // Monday is the first day of the week. 3666 doy: 7 // The week that contains Jan 7th is the first week of the year. 3667 3668 } 3669 }); 3670 return bg; 3671}); 3672 3673/***/ }), 3674
vendor: 2,001 bytes, lines 3675-3739
3675/***/ "./node_modules/moment/locale/bm.js": 3676/*!******************************************!*\ 3677 !*** ./node_modules/moment/locale/bm.js ***! 3678 \******************************************/ 3679/*! no static exports found */ 3680/***/ (function(module, exports, __webpack_require__) { 3681 3682//! moment.js locale configuration 3683; 3684 3685(function (global, factory) { 3686 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 3687})(this, function (moment) { 3688 'use strict'; 3689 3690 var bm = moment.defineLocale('bm', { 3691 months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_MÉkalo_ZuwÉnkalo_Zuluyekalo_Utikalo_SÉtanburukalo_ÉkutÉburukalo_Nowanburukalo_Desanburukalo'.split('_'), 3692 monthsShort: 'Zan_Few_Mar_Awi_MÉ_Zuw_Zul_Uti_SÉt_Éku_Now_Des'.split('_'), 3693 weekdays: 'Kari_NtÉnÉn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'), 3694 weekdaysShort: 'Kar_NtÉ_Tar_Ara_Ala_Jum_Sib'.split('_'), 3695 weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'), 3696 longDateFormat: { 3697 LT: 'HH:mm', 3698 LTS: 'HH:mm:ss', 3699 L: 'DD/MM/YYYY', 3700 LL: 'MMMM [tile] D [san] YYYY', 3701 LLL: 'MMMM [tile] D [san] YYYY [lÉrÉ] HH:mm', 3702 LLLL: 'dddd MMMM [tile] D [san] YYYY [lÉrÉ] HH:mm' 3703 }, 3704 calendar: { 3705 sameDay: '[Bi lÉrÉ] LT', 3706 nextDay: '[Sini lÉrÉ] LT', 3707 nextWeek: 'dddd [don lÉrÉ] LT', 3708 lastDay: '[Kunu lÉrÉ] LT', 3709 lastWeek: 'dddd [tÉmÉnen lÉrÉ] LT', 3710 sameElse: 'L' 3711 }, 3712 relativeTime: { 3713 future: '%s kÉnÉ', 3714 past: 'a bÉ %s bÉ', 3715 s: 'sanga dama dama', 3716 ss: 'sekondi %d', 3717 m: 'miniti kelen', 3718 mm: 'miniti %d', 3719 h: 'lÉrÉ kelen', 3720 hh: 'lÉrÉ %d', 3721 d: 'tile kelen', 3722 dd: 'tile %d', 3723 M: 'kalo kelen', 3724 MM: 'kalo %d', 3725 y: 'san kelen', 3726 yy: 'san %d' 3727 }, 3728 week: { 3729 dow: 1, 3730 // Monday is the first day of the week. 3731 doy: 4 // The week that contains Jan 4th is the first week of the year. 3732 3733 } 3734 }); 3735 return bm; 3736}); 3737 3738/***/ }), 3739
vendor: 3,936 bytes, lines 3740-3863
3740/***/ "./node_modules/moment/locale/bn.js": 3741/*!******************************************!*\ 3742 !*** ./node_modules/moment/locale/bn.js ***! 3743 \******************************************/ 3744/*! no static exports found */ 3745/***/ (function(module, exports, __webpack_require__) { 3746 3747//! moment.js locale configuration 3748; 3749 3750(function (global, factory) { 3751 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 3752})(this, function (moment) { 3753 'use strict'; 3754 3755 var symbolMap = { 3756 '1': 'à§§', 3757 '2': '২', 3758 '3': 'à§©', 3759 '4': '৪', 3760 '5': 'à§«', 3761 '6': '৬', 3762 '7': 'à§', 3763 '8': 'à§®', 3764 '9': '৯', 3765 '0': '০' 3766 }, 3767 numberMap = { 3768 'à§§': '1', 3769 '২': '2', 3770 'à§©': '3', 3771 '৪': '4', 3772 'à§«': '5', 3773 '৬': '6', 3774 'à§': '7', 3775 'à§®': '8', 3776 '৯': '9', 3777 '০': '0' 3778 }; 3779 var bn = moment.defineLocale('bn', { 3780 months: 'à¦à¦¾à¦¨à§à§à¦¾à¦°à§_ফà§à¦¬à§à¦°à§à§à¦¾à¦°à¦¿_মারà§à¦_à¦à¦ªà§à¦°à¦¿à¦²_মà§_à¦à§à¦¨_à¦à§à¦²à¦¾à¦_à¦à¦à¦¸à§à¦_সà§à¦ªà§à¦à§à¦®à§à¦¬à¦°_ঠà¦à§à¦à§à¦¬à¦°_নà¦à§à¦®à§à¦¬à¦°_ডিসà§à¦®à§à¦¬à¦°'.split('_'), 3781 monthsShort: 'à¦à¦¾à¦¨à§_ফà§à¦¬_মারà§à¦_à¦à¦ªà§à¦°_মà§_à¦à§à¦¨_à¦à§à¦²_à¦à¦_সà§à¦ªà§à¦_ঠà¦à§à¦à§_নà¦à§_ডিসà§'.split('_'), 3782 weekdays: 'রবিবার_সà§à¦®à¦¬à¦¾à¦°_মà¦à§à¦à¦²à¦¬à¦¾à¦°_বà§à¦§à¦¬à¦¾à¦°_বà§à¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_শà§à¦à§à¦°à¦¬à¦¾à¦°_শনিবার'.split('_'), 3783 weekdaysShort: 'রবি_সà§à¦®_মà¦à§à¦à¦²_বà§à¦§_বà§à¦¹à¦¸à§à¦ªà¦¤à¦¿_শà§à¦à§à¦°_শনি'.split('_'), 3784 weekdaysMin: 'রবি_সà§à¦®_মà¦à§à¦_বà§à¦§_বà§à¦¹à¦_শà§à¦à§à¦°_শনি'.split('_'), 3785 longDateFormat: { 3786 LT: 'A h:mm সমà§', 3787 LTS: 'A h:mm:ss সমà§', 3788 L: 'DD/MM/YYYY', 3789 LL: 'D MMMM YYYY', 3790 LLL: 'D MMMM YYYY, A h:mm সমà§', 3791 LLLL: 'dddd, D MMMM YYYY, A h:mm সমà§' 3792 }, 3793 calendar: { 3794 sameDay: '[à¦à¦] LT', 3795 nextDay: '[à¦à¦à¦¾à¦®à§à¦à¦¾à¦²] LT', 3796 nextWeek: 'dddd, LT', 3797 lastDay: '[à¦à¦¤à¦à¦¾à¦²] LT', 3798 lastWeek: '[à¦à¦¤] dddd, LT', 3799 sameElse: 'L' 3800 }, 3801 relativeTime: { 3802 future: '%s পরà§', 3803 past: '%s à¦à¦à§', 3804 s: 'à¦à§à§à¦ সà§à¦à§à¦¨à§à¦¡', 3805 ss: '%d সà§à¦à§à¦¨à§à¦¡', 3806 m: 'à¦à¦ মিনিà¦', 3807 mm: '%d মিনিà¦', 3808 h: 'à¦à¦ à¦à¦¨à§à¦à¦¾', 3809 hh: '%d à¦à¦¨à§à¦à¦¾', 3810 d: 'à¦à¦ দিন', 3811 dd: '%d দিন', 3812 M: 'à¦à¦ মাস', 3813 MM: '%d মাস', 3814 y: 'à¦à¦ বà¦à¦°', 3815 yy: '%d বà¦à¦°' 3816 }, 3817 preparse: function (string) { 3818 return string.replace(/[১২৩৪৫৬à§à§®à§¯à§¦]/g, function (match) { 3819 return numberMap[match]; 3820 }); 3821 }, 3822 postformat: function (string) { 3823 return string.replace(/\d/g, function (match) { 3824 return symbolMap[match]; 3825 }); 3826 }, 3827 meridiemParse: /রাত|সà¦à¦¾à¦²|দà§à¦ªà§à¦°|বিà¦à¦¾à¦²|রাত/, 3828 meridiemHour: function (hour, meridiem) { 3829 if (hour === 12) { 3830 hour = 0; 3831 } 3832 3833 if (meridiem === 'রাত' && hour >= 4 || meridiem === 'দà§à¦ªà§à¦°' && hour < 5 || meridiem === 'বিà¦à¦¾à¦²') { 3834 return hour + 12; 3835 } else { 3836 return hour; 3837 } 3838 }, 3839 meridiem: function (hour, minute, isLower) { 3840 if (hour < 4) { 3841 return 'রাত'; 3842 } else if (hour < 10) { 3843 return 'সà¦à¦¾à¦²'; 3844 } else if (hour < 17) { 3845 return 'দà§à¦ªà§à¦°'; 3846 } else if (hour < 20) { 3847 return 'বিà¦à¦¾à¦²'; 3848 } else { 3849 return 'রাত'; 3850 } 3851 }, 3852 week: { 3853 dow: 0, 3854 // Sunday is the first day of the week. 3855 doy: 6 // The week that contains Jan 6th is the first week of the year. 3856 3857 } 3858 }); 3859 return bn; 3860}); 3861 3862/***/ }), 3863
vendor: 4,713 bytes, lines 3864-3987
3864/***/ "./node_modules/moment/locale/bo.js": 3865/*!******************************************!*\ 3866 !*** ./node_modules/moment/locale/bo.js ***! 3867 \******************************************/ 3868/*! no static exports found */ 3869/***/ (function(module, exports, __webpack_require__) { 3870 3871//! moment.js locale configuration 3872; 3873 3874(function (global, factory) { 3875 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 3876})(this, function (moment) { 3877 'use strict'; 3878 3879 var symbolMap = { 3880 '1': '༡', 3881 '2': '༢', 3882 '3': '༣', 3883 '4': '༤', 3884 '5': '༥', 3885 '6': '༦', 3886 '7': '༧', 3887 '8': '༨', 3888 '9': '༩', 3889 '0': '༠' 3890 }, 3891 numberMap = { 3892 '༡': '1', 3893 '༢': '2', 3894 '༣': '3', 3895 '༤': '4', 3896 '༥': '5', 3897 '༦': '6', 3898 '༧': '7', 3899 '༨': '8', 3900 '༩': '9', 3901 '༠': '0' 3902 }; 3903 var bo = moment.defineLocale('bo', { 3904 months: 'à½à¾³à¼à½à¼à½à½à¼à½à½¼_à½à¾³à¼à½à¼à½à½à½²à½¦à¼à½_à½à¾³à¼à½à¼à½à½¦à½´à½à¼à½_à½à¾³à¼à½à¼à½à½à½²à¼à½_à½à¾³à¼à½à¼à½£à¾à¼à½_à½à¾³à¼à½à¼à½à¾²à½´à½à¼à½_à½à¾³à¼à½à¼à½à½à½´à½à¼à½_à½à¾³à¼à½à¼à½à½¢à¾à¾±à½à¼à½_à½à¾³à¼à½à¼à½à½à½´à¼à½_à½à¾³à¼à½à¼à½à½ ུà¼à½_à½à¾³à¼à½à¼à½à½ ུà¼à½à½ ིà½à¼à½_à½à¾³à¼à½à¼à½à½ ུà¼à½à½à½²à½¦à¼à½'.split('_'), 3905 monthsShort: 'à½à¾³à¼à½à¼à½à½à¼à½à½¼_à½à¾³à¼à½à¼à½à½à½²à½¦à¼à½_à½à¾³à¼à½à¼à½à½¦à½´à½à¼à½_à½à¾³à¼à½à¼à½à½à½²à¼à½_à½à¾³à¼à½à¼à½£à¾à¼à½_à½à¾³à¼à½à¼à½à¾²à½´à½à¼à½_à½à¾³à¼à½à¼à½à½à½´à½à¼à½_à½à¾³à¼à½à¼à½à½¢à¾à¾±à½à¼à½_à½à¾³à¼à½à¼à½à½à½´à¼à½_à½à¾³à¼à½à¼à½à½ ུà¼à½_à½à¾³à¼à½à¼à½à½ ུà¼à½à½ ིà½à¼à½_à½à¾³à¼à½à¼à½à½ ུà¼à½à½à½²à½¦à¼à½'.split('_'), 3906 weekdays: 'à½à½à½ à¼à½à½²à¼à½à¼_à½à½à½ à¼à½à¾³à¼à½à¼_à½à½à½ à¼à½à½²à½à¼à½à½à½¢à¼_à½à½à½ à¼à½£à¾·à½à¼à½à¼_à½à½à½ à¼à½à½´à½¢à¼à½à½´_à½à½à½ à¼à½à¼à½¦à½à½¦à¼_à½à½à½ à¼à½¦à¾¤à½ºà½à¼à½à¼'.split('_'), 3907 weekdaysShort: 'à½à½²à¼à½à¼_à½à¾³à¼à½à¼_à½à½²à½à¼à½à½à½¢à¼_ལྷà½à¼à½à¼_à½à½´à½¢à¼à½à½´_à½à¼à½¦à½à½¦à¼_སྤེà½à¼à½à¼'.split('_'), 3908 weekdaysMin: 'à½à½²à¼à½à¼_à½à¾³à¼à½à¼_à½à½²à½à¼à½à½à½¢à¼_ལྷà½à¼à½à¼_à½à½´à½¢à¼à½à½´_à½à¼à½¦à½à½¦à¼_སྤེà½à¼à½à¼'.split('_'), 3909 longDateFormat: { 3910 LT: 'A h:mm', 3911 LTS: 'A h:mm:ss', 3912 L: 'DD/MM/YYYY', 3913 LL: 'D MMMM YYYY', 3914 LLL: 'D MMMM YYYY, A h:mm', 3915 LLLL: 'dddd, D MMMM YYYY, A h:mm' 3916 }, 3917 calendar: { 3918 sameDay: '[à½à½²à¼à½¢à½²à½] LT', 3919 nextDay: '[སà½à¼à½à½²à½] LT', 3920 nextWeek: '[à½à½à½´à½à¼à½à¾²à½à¼à½¢à¾à½ºà½¦à¼à½], LT', 3921 lastDay: '[à½à¼à½¦à½] LT', 3922 lastWeek: '[à½à½à½´à½à¼à½à¾²à½à¼à½à½à½ à¼à½] dddd, LT', 3923 sameElse: 'L' 3924 }, 3925 relativeTime: { 3926 future: '%s ལà¼', 3927 past: '%s སà¾à½à¼à½£', 3928 s: 'ལà½à¼à½¦à½', 3929 ss: '%d སà¾à½¢à¼à½à¼', 3930 m: 'སà¾à½¢à¼à½à¼à½à½ ིà½', 3931 mm: '%d སà¾à½¢à¼à½', 3932 h: 'à½à½´à¼à½à½¼à½à¼à½à½ ིà½', 3933 hh: '%d à½à½´à¼à½à½¼à½', 3934 d: 'à½à½²à½à¼à½à½ ིà½', 3935 dd: '%d à½à½²à½à¼', 3936 M: 'à½à¾³à¼à½à¼à½à½ ིà½', 3937 MM: '%d à½à¾³à¼à½', 3938 y: 'ལོà¼à½à½ ིà½', 3939 yy: '%d ལོ' 3940 }, 3941 preparse: function (string) { 3942 return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { 3943 return numberMap[match]; 3944 }); 3945 }, 3946 postformat: function (string) { 3947 return string.replace(/\d/g, function (match) { 3948 return symbolMap[match]; 3949 }); 3950 }, 3951 meridiemParse: /à½à½à½à¼à½à½¼|à½à½¼à½à½¦à¼à½à½¦|à½à½²à½à¼à½à½´à½|à½à½à½¼à½à¼à½à½|à½à½à½à¼à½à½¼/, 3952 meridiemHour: function (hour, meridiem) { 3953 if (hour === 12) { 3954 hour = 0; 3955 } 3956 3957 if (meridiem === 'à½à½à½à¼à½à½¼' && hour >= 4 || meridiem === 'à½à½²à½à¼à½à½´à½' && hour < 5 || meridiem === 'à½à½à½¼à½à¼à½à½') { 3958 return hour + 12; 3959 } else { 3960 return hour; 3961 } 3962 }, 3963 meridiem: function (hour, minute, isLower) { 3964 if (hour < 4) { 3965 return 'à½à½à½à¼à½à½¼'; 3966 } else if (hour < 10) { 3967 return 'à½à½¼à½à½¦à¼à½à½¦'; 3968 } else if (hour < 17) { 3969 return 'à½à½²à½à¼à½à½´à½'; 3970 } else if (hour < 20) { 3971 return 'à½à½à½¼à½à¼à½à½'; 3972 } else { 3973 return 'à½à½à½à¼à½à½¼'; 3974 } 3975 }, 3976 week: { 3977 dow: 0, 3978 // Sunday is the first day of the week. 3979 doy: 6 // The week that contains Jan 6th is the first week of the year. 3980 3981 } 3982 }); 3983 return bo; 3984}); 3985 3986/***/ }), 3987
vendor: 3,104 bytes, lines 3988-4111
3988/***/ "./node_modules/moment/locale/br.js": 3989/*!******************************************!*\ 3990 !*** ./node_modules/moment/locale/br.js ***! 3991 \******************************************/ 3992/*! no static exports found */ 3993/***/ (function(module, exports, __webpack_require__) { 3994 3995//! moment.js locale configuration 3996; 3997 3998(function (global, factory) { 3999 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 4000})(this, function (moment) { 4001 'use strict'; 4002 4003 function relativeTimeWithMutation(number, withoutSuffix, key) { 4004 var format = { 4005 'mm': 'munutenn', 4006 'MM': 'miz', 4007 'dd': 'devezh' 4008 }; 4009 return number + ' ' + mutation(format[key], number); 4010 } 4011 4012 function specialMutationForYears(number) { 4013 switch (lastNumber(number)) { 4014 case 1: 4015 case 3: 4016 case 4: 4017 case 5: 4018 case 9: 4019 return number + ' bloaz'; 4020 4021 default: 4022 return number + ' vloaz'; 4023 } 4024 } 4025 4026 function lastNumber(number) { 4027 if (number > 9) { 4028 return lastNumber(number % 10); 4029 } 4030 4031 return number; 4032 } 4033 4034 function mutation(text, number) { 4035 if (number === 2) { 4036 return softMutation(text); 4037 } 4038 4039 return text; 4040 } 4041 4042 function softMutation(text) { 4043 var mutationTable = { 4044 'm': 'v', 4045 'b': 'v', 4046 'd': 'z' 4047 }; 4048 4049 if (mutationTable[text.charAt(0)] === undefined) { 4050 return text; 4051 } 4052 4053 return mutationTable[text.charAt(0)] + text.substring(1); 4054 } 4055 4056 var br = moment.defineLocale('br', { 4057 months: 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'), 4058 monthsShort: 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), 4059 weekdays: 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'), 4060 weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), 4061 weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), 4062 weekdaysParseExact: true, 4063 longDateFormat: { 4064 LT: 'h[e]mm A', 4065 LTS: 'h[e]mm:ss A', 4066 L: 'DD/MM/YYYY', 4067 LL: 'D [a viz] MMMM YYYY', 4068 LLL: 'D [a viz] MMMM YYYY h[e]mm A', 4069 LLLL: 'dddd, D [a viz] MMMM YYYY h[e]mm A' 4070 }, 4071 calendar: { 4072 sameDay: '[Hiziv da] LT', 4073 nextDay: '[Warc\'hoazh da] LT', 4074 nextWeek: 'dddd [da] LT', 4075 lastDay: '[Dec\'h da] LT', 4076 lastWeek: 'dddd [paset da] LT', 4077 sameElse: 'L' 4078 }, 4079 relativeTime: { 4080 future: 'a-benn %s', 4081 past: '%s \'zo', 4082 s: 'un nebeud segondennoù', 4083 ss: '%d eilenn', 4084 m: 'ur vunutenn', 4085 mm: relativeTimeWithMutation, 4086 h: 'un eur', 4087 hh: '%d eur', 4088 d: 'un devezh', 4089 dd: relativeTimeWithMutation, 4090 M: 'ur miz', 4091 MM: relativeTimeWithMutation, 4092 y: 'ur bloaz', 4093 yy: specialMutationForYears 4094 }, 4095 dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/, 4096 ordinal: function (number) { 4097 var output = number === 1 ? 'añ' : 'vet'; 4098 return number + output; 4099 }, 4100 week: { 4101 dow: 1, 4102 // Monday is the first day of the week. 4103 doy: 4 // The week that contains Jan 4th is the first week of the year. 4104 4105 } 4106 }); 4107 return br; 4108}); 4109 4110/***/ }), 4111
vendor: 4,302 bytes, lines 4112-4288
4112/***/ "./node_modules/moment/locale/bs.js": 4113/*!******************************************!*\ 4114 !*** ./node_modules/moment/locale/bs.js ***! 4115 \******************************************/ 4116/*! no static exports found */ 4117/***/ (function(module, exports, __webpack_require__) { 4118 4119//! moment.js locale configuration 4120; 4121 4122(function (global, factory) { 4123 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 4124})(this, function (moment) { 4125 'use strict'; 4126 4127 function translate(number, withoutSuffix, key) { 4128 var result = number + ' '; 4129 4130 switch (key) { 4131 case 'ss': 4132 if (number === 1) { 4133 result += 'sekunda'; 4134 } else if (number === 2 || number === 3 || number === 4) { 4135 result += 'sekunde'; 4136 } else { 4137 result += 'sekundi'; 4138 } 4139 4140 return result; 4141 4142 case 'm': 4143 return withoutSuffix ? 'jedna minuta' : 'jedne minute'; 4144 4145 case 'mm': 4146 if (number === 1) { 4147 result += 'minuta'; 4148 } else if (number === 2 || number === 3 || number === 4) { 4149 result += 'minute'; 4150 } else { 4151 result += 'minuta'; 4152 } 4153 4154 return result; 4155 4156 case 'h': 4157 return withoutSuffix ? 'jedan sat' : 'jednog sata'; 4158 4159 case 'hh': 4160 if (number === 1) { 4161 result += 'sat'; 4162 } else if (number === 2 || number === 3 || number === 4) { 4163 result += 'sata'; 4164 } else { 4165 result += 'sati'; 4166 } 4167 4168 return result; 4169 4170 case 'dd': 4171 if (number === 1) { 4172 result += 'dan'; 4173 } else { 4174 result += 'dana'; 4175 } 4176 4177 return result; 4178 4179 case 'MM': 4180 if (number === 1) { 4181 result += 'mjesec'; 4182 } else if (number === 2 || number === 3 || number === 4) { 4183 result += 'mjeseca'; 4184 } else { 4185 result += 'mjeseci'; 4186 } 4187 4188 return result; 4189 4190 case 'yy': 4191 if (number === 1) { 4192 result += 'godina'; 4193 } else if (number === 2 || number === 3 || number === 4) { 4194 result += 'godine'; 4195 } else { 4196 result += 'godina'; 4197 } 4198 4199 return result; 4200 } 4201 } 4202 4203 var bs = moment.defineLocale('bs', { 4204 months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'), 4205 monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'), 4206 monthsParseExact: true, 4207 weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split('_'), 4208 weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'), 4209 weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'), 4210 weekdaysParseExact: true, 4211 longDateFormat: { 4212 LT: 'H:mm', 4213 LTS: 'H:mm:ss', 4214 L: 'DD.MM.YYYY', 4215 LL: 'D. MMMM YYYY', 4216 LLL: 'D. MMMM YYYY H:mm', 4217 LLLL: 'dddd, D. MMMM YYYY H:mm' 4218 }, 4219 calendar: { 4220 sameDay: '[danas u] LT', 4221 nextDay: '[sutra u] LT', 4222 nextWeek: function () { 4223 switch (this.day()) { 4224 case 0: 4225 return '[u] [nedjelju] [u] LT'; 4226 4227 case 3: 4228 return '[u] [srijedu] [u] LT'; 4229 4230 case 6: 4231 return '[u] [subotu] [u] LT'; 4232 4233 case 1: 4234 case 2: 4235 case 4: 4236 case 5: 4237 return '[u] dddd [u] LT'; 4238 } 4239 }, 4240 lastDay: '[juÄer u] LT', 4241 lastWeek: function () { 4242 switch (this.day()) { 4243 case 0: 4244 case 3: 4245 return '[proÅ¡lu] dddd [u] LT'; 4246 4247 case 6: 4248 return '[proÅ¡le] [subote] [u] LT'; 4249 4250 case 1: 4251 case 2: 4252 case 4: 4253 case 5: 4254 return '[proÅ¡li] dddd [u] LT'; 4255 } 4256 }, 4257 sameElse: 'L' 4258 }, 4259 relativeTime: { 4260 future: 'za %s', 4261 past: 'prije %s', 4262 s: 'par sekundi', 4263 ss: translate, 4264 m: translate, 4265 mm: translate, 4266 h: translate, 4267 hh: translate, 4268 d: 'dan', 4269 dd: translate, 4270 M: 'mjesec', 4271 MM: translate, 4272 y: 'godinu', 4273 yy: translate 4274 }, 4275 dayOfMonthOrdinalParse: /\d{1,2}\./, 4276 ordinal: '%d.', 4277 week: { 4278 dow: 1, 4279 // Monday is the first day of the week. 4280 doy: 7 // The week that contains Jan 7th is the first week of the year. 4281 4282 } 4283 }); 4284 return bs; 4285}); 4286 4287/***/ }), 4288
vendor: 2,962 bytes, lines 4289-4382
4289/***/ "./node_modules/moment/locale/ca.js": 4290/*!******************************************!*\ 4291 !*** ./node_modules/moment/locale/ca.js ***! 4292 \******************************************/ 4293/*! no static exports found */ 4294/***/ (function(module, exports, __webpack_require__) { 4295 4296//! moment.js locale configuration 4297; 4298 4299(function (global, factory) { 4300 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 4301})(this, function (moment) { 4302 'use strict'; 4303 4304 var ca = moment.defineLocale('ca', { 4305 months: { 4306 standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'), 4307 format: 'de gener_de febrer_de març_d\'abril_de maig_de juny_de juliol_d\'agost_de setembre_d\'octubre_de novembre_de desembre'.split('_'), 4308 isFormat: /D[oD]?(\s)+MMMM/ 4309 }, 4310 monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'), 4311 monthsParseExact: true, 4312 weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'), 4313 weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), 4314 weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'), 4315 weekdaysParseExact: true, 4316 longDateFormat: { 4317 LT: 'H:mm', 4318 LTS: 'H:mm:ss', 4319 L: 'DD/MM/YYYY', 4320 LL: 'D MMMM [de] YYYY', 4321 ll: 'D MMM YYYY', 4322 LLL: 'D MMMM [de] YYYY [a les] H:mm', 4323 lll: 'D MMM YYYY, H:mm', 4324 LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm', 4325 llll: 'ddd D MMM YYYY, H:mm' 4326 }, 4327 calendar: { 4328 sameDay: function () { 4329 return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; 4330 }, 4331 nextDay: function () { 4332 return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; 4333 }, 4334 nextWeek: function () { 4335 return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; 4336 }, 4337 lastDay: function () { 4338 return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; 4339 }, 4340 lastWeek: function () { 4341 return '[el] dddd [passat a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT'; 4342 }, 4343 sameElse: 'L' 4344 }, 4345 relativeTime: { 4346 future: 'd\'aquà %s', 4347 past: 'fa %s', 4348 s: 'uns segons', 4349 ss: '%d segons', 4350 m: 'un minut', 4351 mm: '%d minuts', 4352 h: 'una hora', 4353 hh: '%d hores', 4354 d: 'un dia', 4355 dd: '%d dies', 4356 M: 'un mes', 4357 MM: '%d mesos', 4358 y: 'un any', 4359 yy: '%d anys' 4360 }, 4361 dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, 4362 ordinal: function (number, period) { 4363 var output = number === 1 ? 'r' : number === 2 ? 'n' : number === 3 ? 'r' : number === 4 ? 't' : 'è'; 4364 4365 if (period === 'w' || period === 'W') { 4366 output = 'a'; 4367 } 4368 4369 return number + output; 4370 }, 4371 week: { 4372 dow: 1, 4373 // Monday is the first day of the week. 4374 doy: 4 // The week that contains Jan 4th is the first week of the year. 4375 4376 } 4377 }); 4378 return ca; 4379}); 4380 4381/***/ }), 4382
vendor: 6,534 bytes, lines 4383-4600
4383/***/ "./node_modules/moment/locale/cs.js": 4384/*!******************************************!*\ 4385 !*** ./node_modules/moment/locale/cs.js ***! 4386 \******************************************/ 4387/*! no static exports found */ 4388/***/ (function(module, exports, __webpack_require__) { 4389 4390//! moment.js locale configuration 4391; 4392 4393(function (global, factory) { 4394 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 4395})(this, function (moment) { 4396 'use strict'; 4397 4398 var months = 'leden_únor_bÅezen_duben_kvÄten_Äerven_Äervenec_srpen_záÅÃ_ÅÃjen_listopad_prosinec'.split('_'), 4399 monthsShort = 'led_úno_bÅe_dub_kvÄ_Ävn_Ävc_srp_záÅ_ÅÃj_lis_pro'.split('_'); 4400 var monthsParse = [/^led/i, /^úno/i, /^bÅe/i, /^dub/i, /^kvÄ/i, /^(Ävn|Äerven$|Äervna)/i, /^(Ävc|Äervenec|Äervence)/i, /^srp/i, /^záÅ/i, /^ÅÃj/i, /^lis/i, /^pro/i]; // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched. 4401 // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'. 4402 4403 var monthsRegex = /^(leden|únor|bÅezen|duben|kvÄten|Äervenec|Äervence|Äerven|Äervna|srpen|záÅÃ|ÅÃjen|listopad|prosinec|led|úno|bÅe|dub|kvÄ|Ävn|Ävc|srp|záÅ|ÅÃj|lis|pro)/i; 4404 4405 function plural(n) { 4406 return n > 1 && n < 5 && ~~(n / 10) !== 1; 4407 } 4408 4409 function translate(number, withoutSuffix, key, isFuture) { 4410 var result = number + ' '; 4411 4412 switch (key) { 4413 case 's': 4414 // a few seconds / in a few seconds / a few seconds ago 4415 return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami'; 4416 4417 case 'ss': 4418 // 9 seconds / in 9 seconds / 9 seconds ago 4419 if (withoutSuffix || isFuture) { 4420 return result + (plural(number) ? 'sekundy' : 'sekund'); 4421 } else { 4422 return result + 'sekundami'; 4423 } 4424 4425 break; 4426 4427 case 'm': 4428 // a minute / in a minute / a minute ago 4429 return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou'; 4430 4431 case 'mm': 4432 // 9 minutes / in 9 minutes / 9 minutes ago 4433 if (withoutSuffix || isFuture) { 4434 return result + (plural(number) ? 'minuty' : 'minut'); 4435 } else { 4436 return result + 'minutami'; 4437 } 4438 4439 break; 4440 4441 case 'h': 4442 // an hour / in an hour / an hour ago 4443 return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; 4444 4445 case 'hh': 4446 // 9 hours / in 9 hours / 9 hours ago 4447 if (withoutSuffix || isFuture) { 4448 return result + (plural(number) ? 'hodiny' : 'hodin'); 4449 } else { 4450 return result + 'hodinami'; 4451 } 4452 4453 break; 4454 4455 case 'd': 4456 // a day / in a day / a day ago 4457 return withoutSuffix || isFuture ? 'den' : 'dnem'; 4458 4459 case 'dd': 4460 // 9 days / in 9 days / 9 days ago 4461 if (withoutSuffix || isFuture) { 4462 return result + (plural(number) ? 'dny' : 'dnÃ'); 4463 } else { 4464 return result + 'dny'; 4465 } 4466 4467 break; 4468 4469 case 'M': 4470 // a month / in a month / a month ago 4471 return withoutSuffix || isFuture ? 'mÄsÃc' : 'mÄsÃcem'; 4472 4473 case 'MM': 4474 // 9 months / in 9 months / 9 months ago 4475 if (withoutSuffix || isFuture) { 4476 return result + (plural(number) ? 'mÄsÃce' : 'mÄsÃců'); 4477 } else { 4478 return result + 'mÄsÃci'; 4479 } 4480 4481 break; 4482 4483 case 'y': 4484 // a year / in a year / a year ago 4485 return withoutSuffix || isFuture ? 'rok' : 'rokem'; 4486 4487 case 'yy': 4488 // 9 years / in 9 years / 9 years ago 4489 if (withoutSuffix || isFuture) { 4490 return result + (plural(number) ? 'roky' : 'let'); 4491 } else { 4492 return result + 'lety'; 4493 } 4494 4495 break; 4496 } 4497 } 4498 4499 var cs = moment.defineLocale('cs', { 4500 months: months, 4501 monthsShort: monthsShort, 4502 monthsRegex: monthsRegex, 4503 monthsShortRegex: monthsRegex, 4504 // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched. 4505 // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'. 4506 monthsStrictRegex: /^(leden|ledna|února|únor|bÅezen|bÅezna|duben|dubna|kvÄten|kvÄtna|Äervenec|Äervence|Äerven|Äervna|srpen|srpna|záÅÃ|ÅÃjen|ÅÃjna|listopadu|listopad|prosinec|prosince)/i, 4507 monthsShortStrictRegex: /^(led|úno|bÅe|dub|kvÄ|Ävn|Ävc|srp|záÅ|ÅÃj|lis|pro)/i, 4508 monthsParse: monthsParse, 4509 longMonthsParse: monthsParse, 4510 shortMonthsParse: monthsParse, 4511 weekdays: 'nedÄle_pondÄlÃ_úterý_stÅeda_Ätvrtek_pátek_sobota'.split('_'), 4512 weekdaysShort: 'ne_po_út_st_Ät_pá_so'.split('_'), 4513 weekdaysMin: 'ne_po_út_st_Ät_pá_so'.split('_'), 4514 longDateFormat: { 4515 LT: 'H:mm', 4516 LTS: 'H:mm:ss', 4517 L: 'DD.MM.YYYY', 4518 LL: 'D. MMMM YYYY', 4519 LLL: 'D. MMMM YYYY H:mm', 4520 LLLL: 'dddd D. MMMM YYYY H:mm', 4521 l: 'D. M. YYYY' 4522 }, 4523 calendar: { 4524 sameDay: '[dnes v] LT', 4525 nextDay: '[zÃtra v] LT', 4526 nextWeek: function () { 4527 switch (this.day()) { 4528 case 0: 4529 return '[v nedÄli v] LT'; 4530 4531 case 1: 4532 case 2: 4533 return '[v] dddd [v] LT'; 4534 4535 case 3: 4536 return '[ve stÅedu v] LT'; 4537 4538 case 4: 4539 return '[ve Ätvrtek v] LT'; 4540 4541 case 5: 4542 return '[v pátek v] LT'; 4543 4544 case 6: 4545 return '[v sobotu v] LT'; 4546 } 4547 }, 4548 lastDay: '[vÄera v] LT', 4549 lastWeek: function () { 4550 switch (this.day()) { 4551 case 0: 4552 return '[minulou nedÄli v] LT'; 4553 4554 case 1: 4555 case 2: 4556 return '[minulé] dddd [v] LT'; 4557 4558 case 3: 4559 return '[minulou stÅedu v] LT'; 4560 4561 case 4: 4562 case 5: 4563 return '[minulý] dddd [v] LT'; 4564 4565 case 6: 4566 return '[minulou sobotu v] LT'; 4567 } 4568 }, 4569 sameElse: 'L' 4570 }, 4571 relativeTime: { 4572 future: 'za %s', 4573 past: 'pÅed %s', 4574 s: translate, 4575 ss: translate, 4576 m: translate, 4577 mm: translate, 4578 h: translate, 4579 hh: translate, 4580 d: translate, 4581 dd: translate, 4582 M: translate, 4583 MM: translate, 4584 y: translate, 4585 yy: translate 4586 }, 4587 dayOfMonthOrdinalParse: /\d{1,2}\./, 4588 ordinal: '%d.', 4589 week: { 4590 dow: 1, 4591 // Monday is the first day of the week. 4592 doy: 4 // The week that contains Jan 4th is the first week of the year. 4593 4594 } 4595 }); 4596 return cs; 4597}); 4598 4599/***/ }), 4600
vendor: 2,534 bytes, lines 4601-4670
4601/***/ "./node_modules/moment/locale/cv.js": 4602/*!******************************************!*\ 4603 !*** ./node_modules/moment/locale/cv.js ***! 4604 \******************************************/ 4605/*! no static exports found */ 4606/***/ (function(module, exports, __webpack_require__) { 4607 4608//! moment.js locale configuration 4609; 4610 4611(function (global, factory) { 4612 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 4613})(this, function (moment) { 4614 'use strict'; 4615 4616 var cv = moment.defineLocale('cv', { 4617 months: 'кÓÑлаÑ_наÑÓÑ_пÑÑ_ака_май_Ò«ÓÑÑме_ÑÑÓ_Ò«ÑÑла_авÓн_Ñпа_Ñӳк_ÑаÑÑав'.split('_'), 4618 monthsShort: 'кÓÑ_наÑ_пÑÑ_ака_май_Ò«ÓÑ_ÑÑÓ_Ò«ÑÑ_авн_Ñпа_Ñӳк_ÑаÑ'.split('_'), 4619 weekdays: 'вÑÑÑаÑникÑн_ÑÑнÑикÑн_ÑÑлаÑикÑн_ÑнкÑн_кÓҫнеÑникÑн_ÑÑнекÑн_ÑÓмаÑкÑн'.split('_'), 4620 weekdaysShort: 'вÑÑ_ÑÑн_ÑÑл_Ñн_кÓÒ«_ÑÑн_ÑÓм'.split('_'), 4621 weekdaysMin: 'вÑ_Ñн_ÑÑ_Ñн_кҫ_ÑÑ_Ñм'.split('_'), 4622 longDateFormat: { 4623 LT: 'HH:mm', 4624 LTS: 'HH:mm:ss', 4625 L: 'DD-MM-YYYY', 4626 LL: 'YYYY [Ò«ÑÐ»Ñ Ð¸] MMMM [ÑйÓÑ Óн] D[-мÓÑÓ]', 4627 LLL: 'YYYY [Ò«ÑÐ»Ñ Ð¸] MMMM [ÑйÓÑ Óн] D[-мÓÑÓ], HH:mm', 4628 LLLL: 'dddd, YYYY [Ò«ÑÐ»Ñ Ð¸] MMMM [ÑйÓÑ Óн] D[-мÓÑÓ], HH:mm' 4629 }, 4630 calendar: { 4631 sameDay: '[ÐаÑн] LT [ÑÐµÑ ÐµÑÑе]', 4632 nextDay: '[ЫÑан] LT [ÑÐµÑ ÐµÑÑе]', 4633 lastDay: '[ÓнеÑ] LT [ÑÐµÑ ÐµÑÑе]', 4634 nextWeek: '[ҪиÑеÑ] dddd LT [ÑÐµÑ ÐµÑÑе]', 4635 lastWeek: '[ÐÑÑнÓ] dddd LT [ÑÐµÑ ÐµÑÑе]', 4636 sameElse: 'L' 4637 }, 4638 relativeTime: { 4639 future: function (output) { 4640 var affix = /ÑÐµÑ ÐµÑ$/i.exec(output) ? 'Ñен' : /Ò«Ñл$/i.exec(output) ? 'Ñан' : 'Ñан'; 4641 return output + affix; 4642 }, 4643 past: '%s каÑлла', 4644 s: 'пÓÑ-ик ҫеккÑнÑ', 4645 ss: '%d ҫеккÑнÑ', 4646 m: 'пÓÑ Ð¼Ð¸Ð½ÑÑ', 4647 mm: '%d минÑÑ', 4648 h: 'пÓÑ ÑÐµÑ ÐµÑ', 4649 hh: '%d ÑÐµÑ ÐµÑ', 4650 d: 'пÓÑ ÐºÑн', 4651 dd: '%d кÑн', 4652 M: 'пÓÑ ÑйÓÑ ', 4653 MM: '%d ÑйÓÑ ', 4654 y: 'пÓÑ Ò«Ñл', 4655 yy: '%d Ò«Ñл' 4656 }, 4657 dayOfMonthOrdinalParse: /\d{1,2}-мÓÑ/, 4658 ordinal: '%d-мÓÑ', 4659 week: { 4660 dow: 1, 4661 // Monday is the first day of the week. 4662 doy: 7 // The week that contains Jan 7th is the first week of the year. 4663 4664 } 4665 }); 4666 return cv; 4667}); 4668 4669/***/ }), 4670
vendor: 2,670 bytes, lines 4671-4758
4671/***/ "./node_modules/moment/locale/cy.js": 4672/*!******************************************!*\ 4673 !*** ./node_modules/moment/locale/cy.js ***! 4674 \******************************************/ 4675/*! no static exports found */ 4676/***/ (function(module, exports, __webpack_require__) { 4677 4678//! moment.js locale configuration 4679; 4680 4681(function (global, factory) { 4682 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 4683})(this, function (moment) { 4684 'use strict'; 4685 4686 var cy = moment.defineLocale('cy', { 4687 months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'), 4688 monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'), 4689 weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'), 4690 weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), 4691 weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), 4692 weekdaysParseExact: true, 4693 // time formats are the same as en-gb 4694 longDateFormat: { 4695 LT: 'HH:mm', 4696 LTS: 'HH:mm:ss', 4697 L: 'DD/MM/YYYY', 4698 LL: 'D MMMM YYYY', 4699 LLL: 'D MMMM YYYY HH:mm', 4700 LLLL: 'dddd, D MMMM YYYY HH:mm' 4701 }, 4702 calendar: { 4703 sameDay: '[Heddiw am] LT', 4704 nextDay: '[Yfory am] LT', 4705 nextWeek: 'dddd [am] LT', 4706 lastDay: '[Ddoe am] LT', 4707 lastWeek: 'dddd [diwethaf am] LT', 4708 sameElse: 'L' 4709 }, 4710 relativeTime: { 4711 future: 'mewn %s', 4712 past: '%s yn ôl', 4713 s: 'ychydig eiliadau', 4714 ss: '%d eiliad', 4715 m: 'munud', 4716 mm: '%d munud', 4717 h: 'awr', 4718 hh: '%d awr', 4719 d: 'diwrnod', 4720 dd: '%d diwrnod', 4721 M: 'mis', 4722 MM: '%d mis', 4723 y: 'blwyddyn', 4724 yy: '%d flynedd' 4725 }, 4726 dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, 4727 // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh 4728 ordinal: function (number) { 4729 var b = number, 4730 output = '', 4731 lookup = ['', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed 4732 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed 4733 ]; 4734 4735 if (b > 20) { 4736 if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { 4737 output = 'fed'; // not 30ain, 70ain or 90ain 4738 } else { 4739 output = 'ain'; 4740 } 4741 } else if (b > 0) { 4742 output = lookup[b]; 4743 } 4744 4745 return number + output; 4746 }, 4747 week: { 4748 dow: 1, 4749 // Monday is the first day of the week. 4750 doy: 4 // The week that contains Jan 4th is the first week of the year. 4751 4752 } 4753 }); 4754 return cy; 4755}); 4756 4757/***/ }), 4758
vendor: 1,932 bytes, lines 4759-4825
4759/***/ "./node_modules/moment/locale/da.js": 4760/*!******************************************!*\ 4761 !*** ./node_modules/moment/locale/da.js ***! 4762 \******************************************/ 4763/*! no static exports found */ 4764/***/ (function(module, exports, __webpack_require__) { 4765 4766//! moment.js locale configuration 4767; 4768 4769(function (global, factory) { 4770 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 4771})(this, function (moment) { 4772 'use strict'; 4773 4774 var da = moment.defineLocale('da', { 4775 months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'), 4776 monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), 4777 weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), 4778 weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'), 4779 weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'), 4780 longDateFormat: { 4781 LT: 'HH:mm', 4782 LTS: 'HH:mm:ss', 4783 L: 'DD.MM.YYYY', 4784 LL: 'D. MMMM YYYY', 4785 LLL: 'D. MMMM YYYY HH:mm', 4786 LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm' 4787 }, 4788 calendar: { 4789 sameDay: '[i dag kl.] LT', 4790 nextDay: '[i morgen kl.] LT', 4791 nextWeek: 'på dddd [kl.] LT', 4792 lastDay: '[i går kl.] LT', 4793 lastWeek: '[i] dddd[s kl.] LT', 4794 sameElse: 'L' 4795 }, 4796 relativeTime: { 4797 future: 'om %s', 4798 past: '%s siden', 4799 s: 'få sekunder', 4800 ss: '%d sekunder', 4801 m: 'et minut', 4802 mm: '%d minutter', 4803 h: 'en time', 4804 hh: '%d timer', 4805 d: 'en dag', 4806 dd: '%d dage', 4807 M: 'en måned', 4808 MM: '%d måneder', 4809 y: 'et år', 4810 yy: '%d år' 4811 }, 4812 dayOfMonthOrdinalParse: /\d{1,2}\./, 4813 ordinal: '%d.', 4814 week: { 4815 dow: 1, 4816 // Monday is the first day of the week. 4817 doy: 4 // The week that contains Jan 4th is the first week of the year. 4818 4819 } 4820 }); 4821 return da; 4822}); 4823 4824/***/ }), 4825
vendor: 2,646 bytes, lines 4826-4908
4826/***/ "./node_modules/moment/locale/de-at.js": 4827/*!*********************************************!*\ 4828 !*** ./node_modules/moment/locale/de-at.js ***! 4829 \*********************************************/ 4830/*! no static exports found */ 4831/***/ (function(module, exports, __webpack_require__) { 4832 4833//! moment.js locale configuration 4834; 4835 4836(function (global, factory) { 4837 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 4838})(this, function (moment) { 4839 'use strict'; 4840 4841 function processRelativeTime(number, withoutSuffix, key, isFuture) { 4842 var format = { 4843 'm': ['eine Minute', 'einer Minute'], 4844 'h': ['eine Stunde', 'einer Stunde'], 4845 'd': ['ein Tag', 'einem Tag'], 4846 'dd': [number + ' Tage', number + ' Tagen'], 4847 'M': ['ein Monat', 'einem Monat'], 4848 'MM': [number + ' Monate', number + ' Monaten'], 4849 'y': ['ein Jahr', 'einem Jahr'], 4850 'yy': [number + ' Jahre', number + ' Jahren'] 4851 }; 4852 return withoutSuffix ? format[key][0] : format[key][1]; 4853 } 4854 4855 var deAt = moment.defineLocale('de-at', { 4856 months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), 4857 monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), 4858 monthsParseExact: true, 4859 weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), 4860 weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), 4861 weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), 4862 weekdaysParseExact: true, 4863 longDateFormat: { 4864 LT: 'HH:mm', 4865 LTS: 'HH:mm:ss', 4866 L: 'DD.MM.YYYY', 4867 LL: 'D. MMMM YYYY', 4868 LLL: 'D. MMMM YYYY HH:mm', 4869 LLLL: 'dddd, D. MMMM YYYY HH:mm' 4870 }, 4871 calendar: { 4872 sameDay: '[heute um] LT [Uhr]', 4873 sameElse: 'L', 4874 nextDay: '[morgen um] LT [Uhr]', 4875 nextWeek: 'dddd [um] LT [Uhr]', 4876 lastDay: '[gestern um] LT [Uhr]', 4877 lastWeek: '[letzten] dddd [um] LT [Uhr]' 4878 }, 4879 relativeTime: { 4880 future: 'in %s', 4881 past: 'vor %s', 4882 s: 'ein paar Sekunden', 4883 ss: '%d Sekunden', 4884 m: processRelativeTime, 4885 mm: '%d Minuten', 4886 h: processRelativeTime, 4887 hh: '%d Stunden', 4888 d: processRelativeTime, 4889 dd: processRelativeTime, 4890 M: processRelativeTime, 4891 MM: processRelativeTime, 4892 y: processRelativeTime, 4893 yy: processRelativeTime 4894 }, 4895 dayOfMonthOrdinalParse: /\d{1,2}\./, 4896 ordinal: '%d.', 4897 week: { 4898 dow: 1, 4899 // Monday is the first day of the week. 4900 doy: 4 // The week that contains Jan 4th is the first week of the year. 4901 4902 } 4903 }); 4904 return deAt; 4905}); 4906 4907/***/ }), 4908
vendor: 2,637 bytes, lines 4909-4991
4909/***/ "./node_modules/moment/locale/de-ch.js": 4910/*!*********************************************!*\ 4911 !*** ./node_modules/moment/locale/de-ch.js ***! 4912 \*********************************************/ 4913/*! no static exports found */ 4914/***/ (function(module, exports, __webpack_require__) { 4915 4916//! moment.js locale configuration 4917; 4918 4919(function (global, factory) { 4920 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 4921})(this, function (moment) { 4922 'use strict'; 4923 4924 function processRelativeTime(number, withoutSuffix, key, isFuture) { 4925 var format = { 4926 'm': ['eine Minute', 'einer Minute'], 4927 'h': ['eine Stunde', 'einer Stunde'], 4928 'd': ['ein Tag', 'einem Tag'], 4929 'dd': [number + ' Tage', number + ' Tagen'], 4930 'M': ['ein Monat', 'einem Monat'], 4931 'MM': [number + ' Monate', number + ' Monaten'], 4932 'y': ['ein Jahr', 'einem Jahr'], 4933 'yy': [number + ' Jahre', number + ' Jahren'] 4934 }; 4935 return withoutSuffix ? format[key][0] : format[key][1]; 4936 } 4937 4938 var deCh = moment.defineLocale('de-ch', { 4939 months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), 4940 monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), 4941 monthsParseExact: true, 4942 weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), 4943 weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), 4944 weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), 4945 weekdaysParseExact: true, 4946 longDateFormat: { 4947 LT: 'HH:mm', 4948 LTS: 'HH:mm:ss', 4949 L: 'DD.MM.YYYY', 4950 LL: 'D. MMMM YYYY', 4951 LLL: 'D. MMMM YYYY HH:mm', 4952 LLLL: 'dddd, D. MMMM YYYY HH:mm' 4953 }, 4954 calendar: { 4955 sameDay: '[heute um] LT [Uhr]', 4956 sameElse: 'L', 4957 nextDay: '[morgen um] LT [Uhr]', 4958 nextWeek: 'dddd [um] LT [Uhr]', 4959 lastDay: '[gestern um] LT [Uhr]', 4960 lastWeek: '[letzten] dddd [um] LT [Uhr]' 4961 }, 4962 relativeTime: { 4963 future: 'in %s', 4964 past: 'vor %s', 4965 s: 'ein paar Sekunden', 4966 ss: '%d Sekunden', 4967 m: processRelativeTime, 4968 mm: '%d Minuten', 4969 h: processRelativeTime, 4970 hh: '%d Stunden', 4971 d: processRelativeTime, 4972 dd: processRelativeTime, 4973 M: processRelativeTime, 4974 MM: processRelativeTime, 4975 y: processRelativeTime, 4976 yy: processRelativeTime 4977 }, 4978 dayOfMonthOrdinalParse: /\d{1,2}\./, 4979 ordinal: '%d.', 4980 week: { 4981 dow: 1, 4982 // Monday is the first day of the week. 4983 doy: 4 // The week that contains Jan 4th is the first week of the year. 4984 4985 } 4986 }); 4987 return deCh; 4988}); 4989 4990/***/ }), 4991
vendor: 2,625 bytes, lines 4992-5074
4992/***/ "./node_modules/moment/locale/de.js": 4993/*!******************************************!*\ 4994 !*** ./node_modules/moment/locale/de.js ***! 4995 \******************************************/ 4996/*! no static exports found */ 4997/***/ (function(module, exports, __webpack_require__) { 4998 4999//! moment.js locale configuration 5000; 5001 5002(function (global, factory) { 5003 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 5004})(this, function (moment) { 5005 'use strict'; 5006 5007 function processRelativeTime(number, withoutSuffix, key, isFuture) { 5008 var format = { 5009 'm': ['eine Minute', 'einer Minute'], 5010 'h': ['eine Stunde', 'einer Stunde'], 5011 'd': ['ein Tag', 'einem Tag'], 5012 'dd': [number + ' Tage', number + ' Tagen'], 5013 'M': ['ein Monat', 'einem Monat'], 5014 'MM': [number + ' Monate', number + ' Monaten'], 5015 'y': ['ein Jahr', 'einem Jahr'], 5016 'yy': [number + ' Jahre', number + ' Jahren'] 5017 }; 5018 return withoutSuffix ? format[key][0] : format[key][1]; 5019 } 5020 5021 var de = moment.defineLocale('de', { 5022 months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), 5023 monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), 5024 monthsParseExact: true, 5025 weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), 5026 weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), 5027 weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), 5028 weekdaysParseExact: true, 5029 longDateFormat: { 5030 LT: 'HH:mm', 5031 LTS: 'HH:mm:ss', 5032 L: 'DD.MM.YYYY', 5033 LL: 'D. MMMM YYYY', 5034 LLL: 'D. MMMM YYYY HH:mm', 5035 LLLL: 'dddd, D. MMMM YYYY HH:mm' 5036 }, 5037 calendar: { 5038 sameDay: '[heute um] LT [Uhr]', 5039 sameElse: 'L', 5040 nextDay: '[morgen um] LT [Uhr]', 5041 nextWeek: 'dddd [um] LT [Uhr]', 5042 lastDay: '[gestern um] LT [Uhr]', 5043 lastWeek: '[letzten] dddd [um] LT [Uhr]' 5044 }, 5045 relativeTime: { 5046 future: 'in %s', 5047 past: 'vor %s', 5048 s: 'ein paar Sekunden', 5049 ss: '%d Sekunden', 5050 m: processRelativeTime, 5051 mm: '%d Minuten', 5052 h: processRelativeTime, 5053 hh: '%d Stunden', 5054 d: processRelativeTime, 5055 dd: processRelativeTime, 5056 M: processRelativeTime, 5057 MM: processRelativeTime, 5058 y: processRelativeTime, 5059 yy: processRelativeTime 5060 }, 5061 dayOfMonthOrdinalParse: /\d{1,2}\./, 5062 ordinal: '%d.', 5063 week: { 5064 dow: 1, 5065 // Monday is the first day of the week. 5066 doy: 4 // The week that contains Jan 4th is the first week of the year. 5067 5068 } 5069 }); 5070 return de; 5071}); 5072 5073/***/ }), 5074
vendor: 2,595 bytes, lines 5075-5158
5075/***/ "./node_modules/moment/locale/dv.js": 5076/*!******************************************!*\ 5077 !*** ./node_modules/moment/locale/dv.js ***! 5078 \******************************************/ 5079/*! no static exports found */ 5080/***/ (function(module, exports, __webpack_require__) { 5081 5082//! moment.js locale configuration 5083; 5084 5085(function (global, factory) { 5086 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 5087})(this, function (moment) { 5088 'use strict'; 5089 5090 var months = ['ÞÞ¬ÞÞªÞÞ¦ÞÞ©', 'ÞÞ¬ÞÞ°ÞÞªÞÞ¦ÞÞ©', 'ÞÞ§ÞÞ¨ÞÞª', 'ÞÞÞÞ°ÞÞ©ÞÞª', 'ÞÞ', 'ÞÞ«ÞÞ°', 'ÞÞªÞÞ¦ÞÞ¨', 'ÞÞ¯ÞÞ¦ÞÞ°ÞÞª', 'ÞÞ¬ÞÞ°ÞÞ¬ÞÞ°ÞÞ¦ÞÞª', 'ÞÞ®ÞÞ°ÞÞ¯ÞÞ¦ÞÞª', 'ÞÞ®ÞÞ¬ÞÞ°ÞÞ¦ÞÞª', 'ÞÞ¨ÞÞ¬ÞÞ°ÞÞ¦ÞÞª'], 5091 weekdays = ['ÞÞ§ÞÞ¨ÞÞ°ÞÞ¦', 'ÞÞ¯ÞÞ¦', 'ÞÞ¦ÞÞ°ÞÞ§ÞÞ¦', 'ÞÞªÞÞ¦', 'ÞÞªÞÞ§ÞÞ°ÞÞ¦ÞÞ¨', 'ÞÞªÞÞªÞÞª', 'ÞÞ®ÞÞ¨ÞÞ¨ÞÞª']; 5092 var dv = moment.defineLocale('dv', { 5093 months: months, 5094 monthsShort: months, 5095 weekdays: weekdays, 5096 weekdaysShort: weekdays, 5097 weekdaysMin: 'ÞÞ§ÞÞ¨_ÞÞ¯ÞÞ¦_ÞÞ¦ÞÞ°_ÞÞªÞÞ¦_ÞÞªÞÞ§_ÞÞªÞÞª_ÞÞ®ÞÞ¨'.split('_'), 5098 longDateFormat: { 5099 LT: 'HH:mm', 5100 LTS: 'HH:mm:ss', 5101 L: 'D/M/YYYY', 5102 LL: 'D MMMM YYYY', 5103 LLL: 'D MMMM YYYY HH:mm', 5104 LLLL: 'dddd D MMMM YYYY HH:mm' 5105 }, 5106 meridiemParse: /ÞÞ|ÞÞ/, 5107 isPM: function (input) { 5108 return 'ÞÞ' === input; 5109 }, 5110 meridiem: function (hour, minute, isLower) { 5111 if (hour < 12) { 5112 return 'ÞÞ'; 5113 } else { 5114 return 'ÞÞ'; 5115 } 5116 }, 5117 calendar: { 5118 sameDay: '[ÞÞ¨ÞÞ¦ÞÞª] LT', 5119 nextDay: '[ÞÞ§ÞÞ¦ÞÞ§] LT', 5120 nextWeek: 'dddd LT', 5121 lastDay: '[ÞÞ¨ÞÞ°ÞÞ¬] LT', 5122 lastWeek: '[ÞÞ§ÞÞ¨ÞÞªÞÞ¨] dddd LT', 5123 sameElse: 'L' 5124 }, 5125 relativeTime: { 5126 future: 'ÞÞ¬ÞÞÞÞ¦ÞÞ¨ %s', 5127 past: 'ÞÞªÞÞ¨ÞÞ° %s', 5128 s: 'ÞÞ¨ÞÞªÞÞ°ÞÞªÞÞ®Þ Þ¬ÞÞ°', 5129 ss: 'd% ÞÞ¨ÞÞªÞÞ°ÞÞª', 5130 m: 'ÞÞ¨ÞÞ¨ÞÞ¬ÞÞ°', 5131 mm: 'ÞÞ¨ÞÞ¨ÞÞª %d', 5132 h: 'ÞÞ¦ÞÞ¨ÞÞ¨ÞÞ¬ÞÞ°', 5133 hh: 'ÞÞ¦ÞÞ¨ÞÞ¨ÞÞª %d', 5134 d: 'ÞÞªÞÞ¦ÞÞ¬ÞÞ°', 5135 dd: 'ÞÞªÞÞ¦ÞÞ° %d', 5136 M: 'ÞÞ¦ÞÞ¬ÞÞ°', 5137 MM: 'ÞÞ¦ÞÞ° %d', 5138 y: 'ÞÞ¦ÞÞ¦ÞÞ¬ÞÞ°', 5139 yy: 'ÞÞ¦ÞÞ¦ÞÞª %d' 5140 }, 5141 preparse: function (string) { 5142 return string.replace(/Ø/g, ','); 5143 }, 5144 postformat: function (string) { 5145 return string.replace(/,/g, 'Ø'); 5146 }, 5147 week: { 5148 dow: 7, 5149 // Sunday is the first day of the week. 5150 doy: 12 // The week that contains Jan 12th is the first week of the year. 5151 5152 } 5153 }); 5154 return dv; 5155}); 5156 5157/***/ }), 5158
vendor: 3,938 bytes, lines 5159-5269
5159/***/ "./node_modules/moment/locale/el.js": 5160/*!******************************************!*\ 5161 !*** ./node_modules/moment/locale/el.js ***! 5162 \******************************************/ 5163/*! no static exports found */ 5164/***/ (function(module, exports, __webpack_require__) { 5165 5166//! moment.js locale configuration 5167; 5168 5169(function (global, factory) { 5170 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 5171})(this, function (moment) { 5172 'use strict'; 5173 5174 function isFunction(input) { 5175 return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; 5176 } 5177 5178 var el = moment.defineLocale('el', { 5179 monthsNominativeEl: 'ÎÎ±Î½Î¿Ï Î¬ÏιοÏ_ΦεβÏÎ¿Ï Î¬ÏιοÏ_ÎάÏÏιοÏ_ÎÏÏίλιοÏ_ÎάιοÏ_ÎοÏνιοÏ_ÎοÏλιοÏ_ÎÏÎ³Î¿Ï ÏÏοÏ_ΣεÏÏÎμβÏιοÏ_ÎκÏÏβÏιοÏ_ÎοÎμβÏιοÏ_ÎεκÎμβÏιοÏ'.split('_'), 5180 monthsGenitiveEl: 'ÎÎ±Î½Î¿Ï Î±ÏÎ¯Î¿Ï _ΦεβÏÎ¿Ï Î±ÏÎ¯Î¿Ï _ÎαÏÏÎ¯Î¿Ï _ÎÏÏÎ¹Î»Î¯Î¿Ï _ÎαÎÎ¿Ï _ÎÎ¿Ï Î½Î¯Î¿Ï _ÎÎ¿Ï Î»Î¯Î¿Ï _ÎÏ Î³Î¿ÏÏÏÎ¿Ï _ΣεÏÏεμβÏÎ¯Î¿Ï _ÎκÏÏβÏÎ¯Î¿Ï _ÎοεμβÏÎ¯Î¿Ï _ÎεκεμβÏÎ¯Î¿Ï '.split('_'), 5181 months: function (momentToFormat, format) { 5182 if (!momentToFormat) { 5183 return this._monthsNominativeEl; 5184 } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { 5185 // if there is a day number before 'MMMM' 5186 return this._monthsGenitiveEl[momentToFormat.month()]; 5187 } else { 5188 return this._monthsNominativeEl[momentToFormat.month()]; 5189 } 5190 }, 5191 monthsShort: 'Îαν_Φεβ_ÎαÏ_ÎÏÏ_ÎαÏ_ÎÎ¿Ï Î½_ÎÎ¿Ï Î»_ÎÏ Î³_ΣεÏ_ÎκÏ_Îοε_Îεκ'.split('_'), 5192 weekdays: 'ÎÏ Ïιακή_ÎÎµÏ ÏÎÏα_ΤÏίÏη_ΤεÏάÏÏη_Î ÎμÏÏη_ΠαÏαÏÎºÎµÏ Î®_ΣάββαÏο'.split('_'), 5193 weekdaysShort: 'ÎÏ Ï_ÎÎµÏ _ΤÏι_ΤεÏ_Πεμ_ΠαÏ_Σαβ'.split('_'), 5194 weekdaysMin: 'ÎÏ _Îε_ΤÏ_Τε_Πε_Πα_Σα'.split('_'), 5195 meridiem: function (hours, minutes, isLower) { 5196 if (hours > 11) { 5197 return isLower ? 'μμ' : 'ÎÎ'; 5198 } else { 5199 return isLower ? 'Ïμ' : 'Î Î'; 5200 } 5201 }, 5202 isPM: function (input) { 5203 return (input + '').toLowerCase()[0] === 'μ'; 5204 }, 5205 meridiemParse: /[Î Î]\.?Î?\.?/i, 5206 longDateFormat: { 5207 LT: 'h:mm A', 5208 LTS: 'h:mm:ss A', 5209 L: 'DD/MM/YYYY', 5210 LL: 'D MMMM YYYY', 5211 LLL: 'D MMMM YYYY h:mm A', 5212 LLLL: 'dddd, D MMMM YYYY h:mm A' 5213 }, 5214 calendarEl: { 5215 sameDay: '[ΣήμεÏα {}] LT', 5216 nextDay: '[ÎÏÏιο {}] LT', 5217 nextWeek: 'dddd [{}] LT', 5218 lastDay: '[Î§Î¸ÎµÏ {}] LT', 5219 lastWeek: function () { 5220 switch (this.day()) { 5221 case 6: 5222 return '[Ïο ÏÏοηγοÏμενο] dddd [{}] LT'; 5223 5224 default: 5225 return '[Ïην ÏÏοηγοÏμενη] dddd [{}] LT'; 5226 } 5227 }, 5228 sameElse: 'L' 5229 }, 5230 calendar: function (key, mom) { 5231 var output = this._calendarEl[key], 5232 hours = mom && mom.hours(); 5233 5234 if (isFunction(output)) { 5235 output = output.apply(mom); 5236 } 5237 5238 return output.replace('{}', hours % 12 === 1 ? 'ÏÏη' : 'ÏÏιÏ'); 5239 }, 5240 relativeTime: { 5241 future: 'Ïε %s', 5242 past: '%s ÏÏιν', 5243 s: 'λίγα Î´ÎµÏ ÏεÏÏλεÏÏα', 5244 ss: '%d Î´ÎµÏ ÏεÏÏλεÏÏα', 5245 m: 'Îνα λεÏÏÏ', 5246 mm: '%d λεÏÏά', 5247 h: 'μία ÏÏα', 5248 hh: '%d ÏÏεÏ', 5249 d: 'μία μÎÏα', 5250 dd: '%d μÎÏεÏ', 5251 M: 'ÎÎ½Î±Ï Î¼Î®Î½Î±Ï', 5252 MM: '%d μήνεÏ', 5253 y: 'ÎÎ½Î±Ï ÏÏÏνοÏ', 5254 yy: '%d ÏÏÏνια' 5255 }, 5256 dayOfMonthOrdinalParse: /\d{1,2}η/, 5257 ordinal: '%dη', 5258 week: { 5259 dow: 1, 5260 // Monday is the first day of the week. 5261 doy: 4 // The week that contains Jan 4st is the first week of the year. 5262 5263 } 5264 }); 5265 return el; 5266}); 5267 5268/***/ }), 5269
vendor: 2,131 bytes, lines 5270-5340
5270/***/ "./node_modules/moment/locale/en-SG.js": 5271/*!*********************************************!*\ 5272 !*** ./node_modules/moment/locale/en-SG.js ***! 5273 \*********************************************/ 5274/*! no static exports found */ 5275/***/ (function(module, exports, __webpack_require__) { 5276 5277//! moment.js locale configuration 5278; 5279 5280(function (global, factory) { 5281 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 5282})(this, function (moment) { 5283 'use strict'; 5284 5285 var enSG = moment.defineLocale('en-SG', { 5286 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), 5287 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 5288 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), 5289 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 5290 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 5291 longDateFormat: { 5292 LT: 'HH:mm', 5293 LTS: 'HH:mm:ss', 5294 L: 'DD/MM/YYYY', 5295 LL: 'D MMMM YYYY', 5296 LLL: 'D MMMM YYYY HH:mm', 5297 LLLL: 'dddd, D MMMM YYYY HH:mm' 5298 }, 5299 calendar: { 5300 sameDay: '[Today at] LT', 5301 nextDay: '[Tomorrow at] LT', 5302 nextWeek: 'dddd [at] LT', 5303 lastDay: '[Yesterday at] LT', 5304 lastWeek: '[Last] dddd [at] LT', 5305 sameElse: 'L' 5306 }, 5307 relativeTime: { 5308 future: 'in %s', 5309 past: '%s ago', 5310 s: 'a few seconds', 5311 ss: '%d seconds', 5312 m: 'a minute', 5313 mm: '%d minutes', 5314 h: 'an hour', 5315 hh: '%d hours', 5316 d: 'a day', 5317 dd: '%d days', 5318 M: 'a month', 5319 MM: '%d months', 5320 y: 'a year', 5321 yy: '%d years' 5322 }, 5323 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 5324 ordinal: function (number) { 5325 var b = number % 10, 5326 output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th'; 5327 return number + output; 5328 }, 5329 week: { 5330 dow: 1, 5331 // Monday is the first day of the week. 5332 doy: 4 // The week that contains Jan 4th is the first week of the year. 5333 5334 } 5335 }); 5336 return enSG; 5337}); 5338 5339/***/ }), 5340
vendor: 2,135 bytes, lines 5341-5411
5341/***/ "./node_modules/moment/locale/en-au.js": 5342/*!*********************************************!*\ 5343 !*** ./node_modules/moment/locale/en-au.js ***! 5344 \*********************************************/ 5345/*! no static exports found */ 5346/***/ (function(module, exports, __webpack_require__) { 5347 5348//! moment.js locale configuration 5349; 5350 5351(function (global, factory) { 5352 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 5353})(this, function (moment) { 5354 'use strict'; 5355 5356 var enAu = moment.defineLocale('en-au', { 5357 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), 5358 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 5359 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), 5360 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 5361 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 5362 longDateFormat: { 5363 LT: 'h:mm A', 5364 LTS: 'h:mm:ss A', 5365 L: 'DD/MM/YYYY', 5366 LL: 'D MMMM YYYY', 5367 LLL: 'D MMMM YYYY h:mm A', 5368 LLLL: 'dddd, D MMMM YYYY h:mm A' 5369 }, 5370 calendar: { 5371 sameDay: '[Today at] LT', 5372 nextDay: '[Tomorrow at] LT', 5373 nextWeek: 'dddd [at] LT', 5374 lastDay: '[Yesterday at] LT', 5375 lastWeek: '[Last] dddd [at] LT', 5376 sameElse: 'L' 5377 }, 5378 relativeTime: { 5379 future: 'in %s', 5380 past: '%s ago', 5381 s: 'a few seconds', 5382 ss: '%d seconds', 5383 m: 'a minute', 5384 mm: '%d minutes', 5385 h: 'an hour', 5386 hh: '%d hours', 5387 d: 'a day', 5388 dd: '%d days', 5389 M: 'a month', 5390 MM: '%d months', 5391 y: 'a year', 5392 yy: '%d years' 5393 }, 5394 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 5395 ordinal: function (number) { 5396 var b = number % 10, 5397 output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th'; 5398 return number + output; 5399 }, 5400 week: { 5401 dow: 1, 5402 // Monday is the first day of the week. 5403 doy: 4 // The week that contains Jan 4th is the first week of the year. 5404 5405 } 5406 }); 5407 return enAu; 5408}); 5409 5410/***/ }), 5411
vendor: 1,980 bytes, lines 5412-5476
5412/***/ "./node_modules/moment/locale/en-ca.js": 5413/*!*********************************************!*\ 5414 !*** ./node_modules/moment/locale/en-ca.js ***! 5415 \*********************************************/ 5416/*! no static exports found */ 5417/***/ (function(module, exports, __webpack_require__) { 5418 5419//! moment.js locale configuration 5420; 5421 5422(function (global, factory) { 5423 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 5424})(this, function (moment) { 5425 'use strict'; 5426 5427 var enCa = moment.defineLocale('en-ca', { 5428 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), 5429 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 5430 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), 5431 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 5432 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 5433 longDateFormat: { 5434 LT: 'h:mm A', 5435 LTS: 'h:mm:ss A', 5436 L: 'YYYY-MM-DD', 5437 LL: 'MMMM D, YYYY', 5438 LLL: 'MMMM D, YYYY h:mm A', 5439 LLLL: 'dddd, MMMM D, YYYY h:mm A' 5440 }, 5441 calendar: { 5442 sameDay: '[Today at] LT', 5443 nextDay: '[Tomorrow at] LT', 5444 nextWeek: 'dddd [at] LT', 5445 lastDay: '[Yesterday at] LT', 5446 lastWeek: '[Last] dddd [at] LT', 5447 sameElse: 'L' 5448 }, 5449 relativeTime: { 5450 future: 'in %s', 5451 past: '%s ago', 5452 s: 'a few seconds', 5453 ss: '%d seconds', 5454 m: 'a minute', 5455 mm: '%d minutes', 5456 h: 'an hour', 5457 hh: '%d hours', 5458 d: 'a day', 5459 dd: '%d days', 5460 M: 'a month', 5461 MM: '%d months', 5462 y: 'a year', 5463 yy: '%d years' 5464 }, 5465 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 5466 ordinal: function (number) { 5467 var b = number % 10, 5468 output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th'; 5469 return number + output; 5470 } 5471 }); 5472 return enCa; 5473}); 5474 5475/***/ }), 5476
vendor: 2,131 bytes, lines 5477-5547
5477/***/ "./node_modules/moment/locale/en-gb.js": 5478/*!*********************************************!*\ 5479 !*** ./node_modules/moment/locale/en-gb.js ***! 5480 \*********************************************/ 5481/*! no static exports found */ 5482/***/ (function(module, exports, __webpack_require__) { 5483 5484//! moment.js locale configuration 5485; 5486 5487(function (global, factory) { 5488 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 5489})(this, function (moment) { 5490 'use strict'; 5491 5492 var enGb = moment.defineLocale('en-gb', { 5493 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), 5494 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 5495 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), 5496 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 5497 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 5498 longDateFormat: { 5499 LT: 'HH:mm', 5500 LTS: 'HH:mm:ss', 5501 L: 'DD/MM/YYYY', 5502 LL: 'D MMMM YYYY', 5503 LLL: 'D MMMM YYYY HH:mm', 5504 LLLL: 'dddd, D MMMM YYYY HH:mm' 5505 }, 5506 calendar: { 5507 sameDay: '[Today at] LT', 5508 nextDay: '[Tomorrow at] LT', 5509 nextWeek: 'dddd [at] LT', 5510 lastDay: '[Yesterday at] LT', 5511 lastWeek: '[Last] dddd [at] LT', 5512 sameElse: 'L' 5513 }, 5514 relativeTime: { 5515 future: 'in %s', 5516 past: '%s ago', 5517 s: 'a few seconds', 5518 ss: '%d seconds', 5519 m: 'a minute', 5520 mm: '%d minutes', 5521 h: 'an hour', 5522 hh: '%d hours', 5523 d: 'a day', 5524 dd: '%d days', 5525 M: 'a month', 5526 MM: '%d months', 5527 y: 'a year', 5528 yy: '%d years' 5529 }, 5530 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 5531 ordinal: function (number) { 5532 var b = number % 10, 5533 output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th'; 5534 return number + output; 5535 }, 5536 week: { 5537 dow: 1, 5538 // Monday is the first day of the week. 5539 doy: 4 // The week that contains Jan 4th is the first week of the year. 5540 5541 } 5542 }); 5543 return enGb; 5544}); 5545 5546/***/ }), 5547
vendor: 2,130 bytes, lines 5548-5618
5548/***/ "./node_modules/moment/locale/en-ie.js": 5549/*!*********************************************!*\ 5550 !*** ./node_modules/moment/locale/en-ie.js ***! 5551 \*********************************************/ 5552/*! no static exports found */ 5553/***/ (function(module, exports, __webpack_require__) { 5554 5555//! moment.js locale configuration 5556; 5557 5558(function (global, factory) { 5559 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 5560})(this, function (moment) { 5561 'use strict'; 5562 5563 var enIe = moment.defineLocale('en-ie', { 5564 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), 5565 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 5566 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), 5567 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 5568 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 5569 longDateFormat: { 5570 LT: 'HH:mm', 5571 LTS: 'HH:mm:ss', 5572 L: 'DD/MM/YYYY', 5573 LL: 'D MMMM YYYY', 5574 LLL: 'D MMMM YYYY HH:mm', 5575 LLLL: 'dddd D MMMM YYYY HH:mm' 5576 }, 5577 calendar: { 5578 sameDay: '[Today at] LT', 5579 nextDay: '[Tomorrow at] LT', 5580 nextWeek: 'dddd [at] LT', 5581 lastDay: '[Yesterday at] LT', 5582 lastWeek: '[Last] dddd [at] LT', 5583 sameElse: 'L' 5584 }, 5585 relativeTime: { 5586 future: 'in %s', 5587 past: '%s ago', 5588 s: 'a few seconds', 5589 ss: '%d seconds', 5590 m: 'a minute', 5591 mm: '%d minutes', 5592 h: 'an hour', 5593 hh: '%d hours', 5594 d: 'a day', 5595 dd: '%d days', 5596 M: 'a month', 5597 MM: '%d months', 5598 y: 'a year', 5599 yy: '%d years' 5600 }, 5601 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 5602 ordinal: function (number) { 5603 var b = number % 10, 5604 output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th'; 5605 return number + output; 5606 }, 5607 week: { 5608 dow: 1, 5609 // Monday is the first day of the week. 5610 doy: 4 // The week that contains Jan 4th is the first week of the year. 5611 5612 } 5613 }); 5614 return enIe; 5615}); 5616 5617/***/ }), 5618
vendor: 1,949 bytes, lines 5619-5682
5619/***/ "./node_modules/moment/locale/en-il.js": 5620/*!*********************************************!*\ 5621 !*** ./node_modules/moment/locale/en-il.js ***! 5622 \*********************************************/ 5623/*! no static exports found */ 5624/***/ (function(module, exports, __webpack_require__) { 5625 5626//! moment.js locale configuration 5627; 5628 5629(function (global, factory) { 5630 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 5631})(this, function (moment) { 5632 'use strict'; 5633 5634 var enIl = moment.defineLocale('en-il', { 5635 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), 5636 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 5637 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), 5638 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 5639 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 5640 longDateFormat: { 5641 LT: 'HH:mm', 5642 LTS: 'HH:mm:ss', 5643 L: 'DD/MM/YYYY', 5644 LL: 'D MMMM YYYY', 5645 LLL: 'D MMMM YYYY HH:mm', 5646 LLLL: 'dddd, D MMMM YYYY HH:mm' 5647 }, 5648 calendar: { 5649 sameDay: '[Today at] LT', 5650 nextDay: '[Tomorrow at] LT', 5651 nextWeek: 'dddd [at] LT', 5652 lastDay: '[Yesterday at] LT', 5653 lastWeek: '[Last] dddd [at] LT', 5654 sameElse: 'L' 5655 }, 5656 relativeTime: { 5657 future: 'in %s', 5658 past: '%s ago', 5659 s: 'a few seconds', 5660 m: 'a minute', 5661 mm: '%d minutes', 5662 h: 'an hour', 5663 hh: '%d hours', 5664 d: 'a day', 5665 dd: '%d days', 5666 M: 'a month', 5667 MM: '%d months', 5668 y: 'a year', 5669 yy: '%d years' 5670 }, 5671 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 5672 ordinal: function (number) { 5673 var b = number % 10, 5674 output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th'; 5675 return number + output; 5676 } 5677 }); 5678 return enIl; 5679}); 5680 5681/***/ }), 5682
vendor: 2,135 bytes, lines 5683-5753
5683/***/ "./node_modules/moment/locale/en-nz.js": 5684/*!*********************************************!*\ 5685 !*** ./node_modules/moment/locale/en-nz.js ***! 5686 \*********************************************/ 5687/*! no static exports found */ 5688/***/ (function(module, exports, __webpack_require__) { 5689 5690//! moment.js locale configuration 5691; 5692 5693(function (global, factory) { 5694 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 5695})(this, function (moment) { 5696 'use strict'; 5697 5698 var enNz = moment.defineLocale('en-nz', { 5699 months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), 5700 monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), 5701 weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), 5702 weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), 5703 weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), 5704 longDateFormat: { 5705 LT: 'h:mm A', 5706 LTS: 'h:mm:ss A', 5707 L: 'DD/MM/YYYY', 5708 LL: 'D MMMM YYYY', 5709 LLL: 'D MMMM YYYY h:mm A', 5710 LLLL: 'dddd, D MMMM YYYY h:mm A' 5711 }, 5712 calendar: { 5713 sameDay: '[Today at] LT', 5714 nextDay: '[Tomorrow at] LT', 5715 nextWeek: 'dddd [at] LT', 5716 lastDay: '[Yesterday at] LT', 5717 lastWeek: '[Last] dddd [at] LT', 5718 sameElse: 'L' 5719 }, 5720 relativeTime: { 5721 future: 'in %s', 5722 past: '%s ago', 5723 s: 'a few seconds', 5724 ss: '%d seconds', 5725 m: 'a minute', 5726 mm: '%d minutes', 5727 h: 'an hour', 5728 hh: '%d hours', 5729 d: 'a day', 5730 dd: '%d days', 5731 M: 'a month', 5732 MM: '%d months', 5733 y: 'a year', 5734 yy: '%d years' 5735 }, 5736 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 5737 ordinal: function (number) { 5738 var b = number % 10, 5739 output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th'; 5740 return number + output; 5741 }, 5742 week: { 5743 dow: 1, 5744 // Monday is the first day of the week. 5745 doy: 4 // The week that contains Jan 4th is the first week of the year. 5746 5747 } 5748 }); 5749 return enNz; 5750}); 5751 5752/***/ }), 5753
vendor: 2,316 bytes, lines 5754-5832
5754/***/ "./node_modules/moment/locale/eo.js": 5755/*!******************************************!*\ 5756 !*** ./node_modules/moment/locale/eo.js ***! 5757 \******************************************/ 5758/*! no static exports found */ 5759/***/ (function(module, exports, __webpack_require__) { 5760 5761//! moment.js locale configuration 5762; 5763 5764(function (global, factory) { 5765 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 5766})(this, function (moment) { 5767 'use strict'; 5768 5769 var eo = moment.defineLocale('eo', { 5770 months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aÅgusto_septembro_oktobro_novembro_decembro'.split('_'), 5771 monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aÅg_sep_okt_nov_dec'.split('_'), 5772 weekdays: 'dimanÄo_lundo_mardo_merkredo_ĵaÅdo_vendredo_sabato'.split('_'), 5773 weekdaysShort: 'dim_lun_mard_merk_ĵaÅ_ven_sab'.split('_'), 5774 weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'), 5775 longDateFormat: { 5776 LT: 'HH:mm', 5777 LTS: 'HH:mm:ss', 5778 L: 'YYYY-MM-DD', 5779 LL: 'D[-a de] MMMM, YYYY', 5780 LLL: 'D[-a de] MMMM, YYYY HH:mm', 5781 LLLL: 'dddd, [la] D[-a de] MMMM, YYYY HH:mm' 5782 }, 5783 meridiemParse: /[ap]\.t\.m/i, 5784 isPM: function (input) { 5785 return input.charAt(0).toLowerCase() === 'p'; 5786 }, 5787 meridiem: function (hours, minutes, isLower) { 5788 if (hours > 11) { 5789 return isLower ? 'p.t.m.' : 'P.T.M.'; 5790 } else { 5791 return isLower ? 'a.t.m.' : 'A.T.M.'; 5792 } 5793 }, 5794 calendar: { 5795 sameDay: '[HodiaÅ je] LT', 5796 nextDay: '[MorgaÅ je] LT', 5797 nextWeek: 'dddd [je] LT', 5798 lastDay: '[HieraÅ je] LT', 5799 lastWeek: '[pasinta] dddd [je] LT', 5800 sameElse: 'L' 5801 }, 5802 relativeTime: { 5803 future: 'post %s', 5804 past: 'antaÅ %s', 5805 s: 'sekundoj', 5806 ss: '%d sekundoj', 5807 m: 'minuto', 5808 mm: '%d minutoj', 5809 h: 'horo', 5810 hh: '%d horoj', 5811 d: 'tago', 5812 //ne 'diurno', Äar estas uzita por proksimumo 5813 dd: '%d tagoj', 5814 M: 'monato', 5815 MM: '%d monatoj', 5816 y: 'jaro', 5817 yy: '%d jaroj' 5818 }, 5819 dayOfMonthOrdinalParse: /\d{1,2}a/, 5820 ordinal: '%da', 5821 week: { 5822 dow: 1, 5823 // Monday is the first day of the week. 5824 doy: 7 // The week that contains Jan 7th is the first week of the year. 5825 5826 } 5827 }); 5828 return eo; 5829}); 5830 5831/***/ }), 5832
vendor: 3,475 bytes, lines 5833-5929
5833/***/ "./node_modules/moment/locale/es-do.js": 5834/*!*********************************************!*\ 5835 !*** ./node_modules/moment/locale/es-do.js ***! 5836 \*********************************************/ 5837/*! no static exports found */ 5838/***/ (function(module, exports, __webpack_require__) { 5839 5840//! moment.js locale configuration 5841; 5842 5843(function (global, factory) { 5844 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 5845})(this, function (moment) { 5846 'use strict'; 5847 5848 var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'), 5849 monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); 5850 var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]; 5851 var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; 5852 var esDo = moment.defineLocale('es-do', { 5853 months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), 5854 monthsShort: function (m, format) { 5855 if (!m) { 5856 return monthsShortDot; 5857 } else if (/-MMM-/.test(format)) { 5858 return monthsShort[m.month()]; 5859 } else { 5860 return monthsShortDot[m.month()]; 5861 } 5862 }, 5863 monthsRegex: monthsRegex, 5864 monthsShortRegex: monthsRegex, 5865 monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, 5866 monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, 5867 monthsParse: monthsParse, 5868 longMonthsParse: monthsParse, 5869 shortMonthsParse: monthsParse, 5870 weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), 5871 weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), 5872 weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), 5873 weekdaysParseExact: true, 5874 longDateFormat: { 5875 LT: 'h:mm A', 5876 LTS: 'h:mm:ss A', 5877 L: 'DD/MM/YYYY', 5878 LL: 'D [de] MMMM [de] YYYY', 5879 LLL: 'D [de] MMMM [de] YYYY h:mm A', 5880 LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A' 5881 }, 5882 calendar: { 5883 sameDay: function () { 5884 return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 5885 }, 5886 nextDay: function () { 5887 return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 5888 }, 5889 nextWeek: function () { 5890 return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 5891 }, 5892 lastDay: function () { 5893 return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 5894 }, 5895 lastWeek: function () { 5896 return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 5897 }, 5898 sameElse: 'L' 5899 }, 5900 relativeTime: { 5901 future: 'en %s', 5902 past: 'hace %s', 5903 s: 'unos segundos', 5904 ss: '%d segundos', 5905 m: 'un minuto', 5906 mm: '%d minutos', 5907 h: 'una hora', 5908 hh: '%d horas', 5909 d: 'un dÃa', 5910 dd: '%d dÃas', 5911 M: 'un mes', 5912 MM: '%d meses', 5913 y: 'un año', 5914 yy: '%d años' 5915 }, 5916 dayOfMonthOrdinalParse: /\d{1,2}º/, 5917 ordinal: '%dº', 5918 week: { 5919 dow: 1, 5920 // Monday is the first day of the week. 5921 doy: 4 // The week that contains Jan 4th is the first week of the year. 5922 5923 } 5924 }); 5925 return esDo; 5926}); 5927 5928/***/ }), 5929
vendor: 3,475 bytes, lines 5930-6026
5930/***/ "./node_modules/moment/locale/es-us.js": 5931/*!*********************************************!*\ 5932 !*** ./node_modules/moment/locale/es-us.js ***! 5933 \*********************************************/ 5934/*! no static exports found */ 5935/***/ (function(module, exports, __webpack_require__) { 5936 5937//! moment.js locale configuration 5938; 5939 5940(function (global, factory) { 5941 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 5942})(this, function (moment) { 5943 'use strict'; 5944 5945 var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'), 5946 monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); 5947 var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]; 5948 var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; 5949 var esUs = moment.defineLocale('es-us', { 5950 months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), 5951 monthsShort: function (m, format) { 5952 if (!m) { 5953 return monthsShortDot; 5954 } else if (/-MMM-/.test(format)) { 5955 return monthsShort[m.month()]; 5956 } else { 5957 return monthsShortDot[m.month()]; 5958 } 5959 }, 5960 monthsRegex: monthsRegex, 5961 monthsShortRegex: monthsRegex, 5962 monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, 5963 monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, 5964 monthsParse: monthsParse, 5965 longMonthsParse: monthsParse, 5966 shortMonthsParse: monthsParse, 5967 weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), 5968 weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), 5969 weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), 5970 weekdaysParseExact: true, 5971 longDateFormat: { 5972 LT: 'h:mm A', 5973 LTS: 'h:mm:ss A', 5974 L: 'MM/DD/YYYY', 5975 LL: 'D [de] MMMM [de] YYYY', 5976 LLL: 'D [de] MMMM [de] YYYY h:mm A', 5977 LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A' 5978 }, 5979 calendar: { 5980 sameDay: function () { 5981 return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 5982 }, 5983 nextDay: function () { 5984 return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 5985 }, 5986 nextWeek: function () { 5987 return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 5988 }, 5989 lastDay: function () { 5990 return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 5991 }, 5992 lastWeek: function () { 5993 return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 5994 }, 5995 sameElse: 'L' 5996 }, 5997 relativeTime: { 5998 future: 'en %s', 5999 past: 'hace %s', 6000 s: 'unos segundos', 6001 ss: '%d segundos', 6002 m: 'un minuto', 6003 mm: '%d minutos', 6004 h: 'una hora', 6005 hh: '%d horas', 6006 d: 'un dÃa', 6007 dd: '%d dÃas', 6008 M: 'un mes', 6009 MM: '%d meses', 6010 y: 'un año', 6011 yy: '%d años' 6012 }, 6013 dayOfMonthOrdinalParse: /\d{1,2}º/, 6014 ordinal: '%dº', 6015 week: { 6016 dow: 0, 6017 // Sunday is the first day of the week. 6018 doy: 6 // The week that contains Jan 6th is the first week of the year. 6019 6020 } 6021 }); 6022 return esUs; 6023}); 6024 6025/***/ }), 6026
vendor: 3,448 bytes, lines 6027-6123
6027/***/ "./node_modules/moment/locale/es.js": 6028/*!******************************************!*\ 6029 !*** ./node_modules/moment/locale/es.js ***! 6030 \******************************************/ 6031/*! no static exports found */ 6032/***/ (function(module, exports, __webpack_require__) { 6033 6034//! moment.js locale configuration 6035; 6036 6037(function (global, factory) { 6038 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 6039})(this, function (moment) { 6040 'use strict'; 6041 6042 var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'), 6043 monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); 6044 var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]; 6045 var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; 6046 var es = moment.defineLocale('es', { 6047 months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), 6048 monthsShort: function (m, format) { 6049 if (!m) { 6050 return monthsShortDot; 6051 } else if (/-MMM-/.test(format)) { 6052 return monthsShort[m.month()]; 6053 } else { 6054 return monthsShortDot[m.month()]; 6055 } 6056 }, 6057 monthsRegex: monthsRegex, 6058 monthsShortRegex: monthsRegex, 6059 monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, 6060 monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, 6061 monthsParse: monthsParse, 6062 longMonthsParse: monthsParse, 6063 shortMonthsParse: monthsParse, 6064 weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), 6065 weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), 6066 weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), 6067 weekdaysParseExact: true, 6068 longDateFormat: { 6069 LT: 'H:mm', 6070 LTS: 'H:mm:ss', 6071 L: 'DD/MM/YYYY', 6072 LL: 'D [de] MMMM [de] YYYY', 6073 LLL: 'D [de] MMMM [de] YYYY H:mm', 6074 LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm' 6075 }, 6076 calendar: { 6077 sameDay: function () { 6078 return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 6079 }, 6080 nextDay: function () { 6081 return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 6082 }, 6083 nextWeek: function () { 6084 return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 6085 }, 6086 lastDay: function () { 6087 return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 6088 }, 6089 lastWeek: function () { 6090 return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; 6091 }, 6092 sameElse: 'L' 6093 }, 6094 relativeTime: { 6095 future: 'en %s', 6096 past: 'hace %s', 6097 s: 'unos segundos', 6098 ss: '%d segundos', 6099 m: 'un minuto', 6100 mm: '%d minutos', 6101 h: 'una hora', 6102 hh: '%d horas', 6103 d: 'un dÃa', 6104 dd: '%d dÃas', 6105 M: 'un mes', 6106 MM: '%d meses', 6107 y: 'un año', 6108 yy: '%d años' 6109 }, 6110 dayOfMonthOrdinalParse: /\d{1,2}º/, 6111 ordinal: '%dº', 6112 week: { 6113 dow: 1, 6114 // Monday is the first day of the week. 6115 doy: 4 // The week that contains Jan 4th is the first week of the year. 6116 6117 } 6118 }); 6119 return es; 6120}); 6121 6122/***/ }), 6123
vendor: 2,831 bytes, lines 6124-6212
6124/***/ "./node_modules/moment/locale/et.js": 6125/*!******************************************!*\ 6126 !*** ./node_modules/moment/locale/et.js ***! 6127 \******************************************/ 6128/*! no static exports found */ 6129/***/ (function(module, exports, __webpack_require__) { 6130 6131//! moment.js locale configuration 6132; 6133 6134(function (global, factory) { 6135 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 6136})(this, function (moment) { 6137 'use strict'; 6138 6139 function processRelativeTime(number, withoutSuffix, key, isFuture) { 6140 var format = { 6141 's': ['mõne sekundi', 'mõni sekund', 'paar sekundit'], 6142 'ss': [number + 'sekundi', number + 'sekundit'], 6143 'm': ['ühe minuti', 'üks minut'], 6144 'mm': [number + ' minuti', number + ' minutit'], 6145 'h': ['ühe tunni', 'tund aega', 'üks tund'], 6146 'hh': [number + ' tunni', number + ' tundi'], 6147 'd': ['ühe päeva', 'üks päev'], 6148 'M': ['kuu aja', 'kuu aega', 'üks kuu'], 6149 'MM': [number + ' kuu', number + ' kuud'], 6150 'y': ['ühe aasta', 'aasta', 'üks aasta'], 6151 'yy': [number + ' aasta', number + ' aastat'] 6152 }; 6153 6154 if (withoutSuffix) { 6155 return format[key][2] ? format[key][2] : format[key][1]; 6156 } 6157 6158 return isFuture ? format[key][0] : format[key][1]; 6159 } 6160 6161 var et = moment.defineLocale('et', { 6162 months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'), 6163 monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'), 6164 weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'), 6165 weekdaysShort: 'P_E_T_K_N_R_L'.split('_'), 6166 weekdaysMin: 'P_E_T_K_N_R_L'.split('_'), 6167 longDateFormat: { 6168 LT: 'H:mm', 6169 LTS: 'H:mm:ss', 6170 L: 'DD.MM.YYYY', 6171 LL: 'D. MMMM YYYY', 6172 LLL: 'D. MMMM YYYY H:mm', 6173 LLLL: 'dddd, D. MMMM YYYY H:mm' 6174 }, 6175 calendar: { 6176 sameDay: '[Täna,] LT', 6177 nextDay: '[Homme,] LT', 6178 nextWeek: '[Järgmine] dddd LT', 6179 lastDay: '[Eile,] LT', 6180 lastWeek: '[Eelmine] dddd LT', 6181 sameElse: 'L' 6182 }, 6183 relativeTime: { 6184 future: '%s pärast', 6185 past: '%s tagasi', 6186 s: processRelativeTime, 6187 ss: processRelativeTime, 6188 m: processRelativeTime, 6189 mm: processRelativeTime, 6190 h: processRelativeTime, 6191 hh: processRelativeTime, 6192 d: processRelativeTime, 6193 dd: '%d päeva', 6194 M: processRelativeTime, 6195 MM: processRelativeTime, 6196 y: processRelativeTime, 6197 yy: processRelativeTime 6198 }, 6199 dayOfMonthOrdinalParse: /\d{1,2}\./, 6200 ordinal: '%d.', 6201 week: { 6202 dow: 1, 6203 // Monday is the first day of the week. 6204 doy: 4 // The week that contains Jan 4th is the first week of the year. 6205 6206 } 6207 }); 6208 return et; 6209}); 6210 6211/***/ }), 6212
vendor: 2,192 bytes, lines 6213-6285
6213/***/ "./node_modules/moment/locale/eu.js": 6214/*!******************************************!*\ 6215 !*** ./node_modules/moment/locale/eu.js ***! 6216 \******************************************/ 6217/*! no static exports found */ 6218/***/ (function(module, exports, __webpack_require__) { 6219 6220//! moment.js locale configuration 6221; 6222 6223(function (global, factory) { 6224 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 6225})(this, function (moment) { 6226 'use strict'; 6227 6228 var eu = moment.defineLocale('eu', { 6229 months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'), 6230 monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'), 6231 monthsParseExact: true, 6232 weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'), 6233 weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'), 6234 weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'), 6235 weekdaysParseExact: true, 6236 longDateFormat: { 6237 LT: 'HH:mm', 6238 LTS: 'HH:mm:ss', 6239 L: 'YYYY-MM-DD', 6240 LL: 'YYYY[ko] MMMM[ren] D[a]', 6241 LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm', 6242 LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', 6243 l: 'YYYY-M-D', 6244 ll: 'YYYY[ko] MMM D[a]', 6245 lll: 'YYYY[ko] MMM D[a] HH:mm', 6246 llll: 'ddd, YYYY[ko] MMM D[a] HH:mm' 6247 }, 6248 calendar: { 6249 sameDay: '[gaur] LT[etan]', 6250 nextDay: '[bihar] LT[etan]', 6251 nextWeek: 'dddd LT[etan]', 6252 lastDay: '[atzo] LT[etan]', 6253 lastWeek: '[aurreko] dddd LT[etan]', 6254 sameElse: 'L' 6255 }, 6256 relativeTime: { 6257 future: '%s barru', 6258 past: 'duela %s', 6259 s: 'segundo batzuk', 6260 ss: '%d segundo', 6261 m: 'minutu bat', 6262 mm: '%d minutu', 6263 h: 'ordu bat', 6264 hh: '%d ordu', 6265 d: 'egun bat', 6266 dd: '%d egun', 6267 M: 'hilabete bat', 6268 MM: '%d hilabete', 6269 y: 'urte bat', 6270 yy: '%d urte' 6271 }, 6272 dayOfMonthOrdinalParse: /\d{1,2}\./, 6273 ordinal: '%d.', 6274 week: { 6275 dow: 1, 6276 // Monday is the first day of the week. 6277 doy: 7 // The week that contains Jan 7th is the first week of the year. 6278 6279 } 6280 }); 6281 return eu; 6282}); 6283 6284/***/ }), 6285
vendor: 3,274 bytes, lines 6286-6398
6286/***/ "./node_modules/moment/locale/fa.js": 6287/*!******************************************!*\ 6288 !*** ./node_modules/moment/locale/fa.js ***! 6289 \******************************************/ 6290/*! no static exports found */ 6291/***/ (function(module, exports, __webpack_require__) { 6292 6293//! moment.js locale configuration 6294; 6295 6296(function (global, factory) { 6297 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 6298})(this, function (moment) { 6299 'use strict'; 6300 6301 var symbolMap = { 6302 '1': 'Û±', 6303 '2': 'Û²', 6304 '3': 'Û³', 6305 '4': 'Û´', 6306 '5': 'Ûµ', 6307 '6': 'Û¶', 6308 '7': 'Û·', 6309 '8': 'Û¸', 6310 '9': 'Û¹', 6311 '0': 'Û°' 6312 }, 6313 numberMap = { 6314 'Û±': '1', 6315 'Û²': '2', 6316 'Û³': '3', 6317 'Û´': '4', 6318 'Ûµ': '5', 6319 'Û¶': '6', 6320 'Û·': '7', 6321 'Û¸': '8', 6322 'Û¹': '9', 6323 'Û°': '0' 6324 }; 6325 var fa = moment.defineLocale('fa', { 6326 months: 'ÚØ§ÙÙÛÙ_ÙÙØ±ÛÙ_٠ارس_Ø¢ÙØ±ÛÙ_Ù Ù_ÚÙØ¦Ù_ÚÙØ¦ÛÙ_Ø§ÙØª_سپتا٠بر_اکتبر_ÙÙØ§Ù بر_دسا٠بر'.split('_'), 6327 monthsShort: 'ÚØ§ÙÙÛÙ_ÙÙØ±ÛÙ_٠ارس_Ø¢ÙØ±ÛÙ_Ù Ù_ÚÙØ¦Ù_ÚÙØ¦ÛÙ_Ø§ÙØª_سپتا٠بر_اکتبر_ÙÙØ§Ù بر_دسا٠بر'.split('_'), 6328 weekdays: 'ÛÚ©\u200cØ´ÙØ¨Ù_Ø¯ÙØ´ÙبÙ_سÙ\u200cØ´ÙØ¨Ù_ÚÙØ§Ø±Ø´ÙبÙ_Ù¾ÙØ¬\u200cØ´ÙØ¨Ù_ج٠عÙ_Ø´ÙØ¨Ù'.split('_'), 6329 weekdaysShort: 'ÛÚ©\u200cØ´ÙØ¨Ù_Ø¯ÙØ´ÙبÙ_سÙ\u200cØ´ÙØ¨Ù_ÚÙØ§Ø±Ø´ÙبÙ_Ù¾ÙØ¬\u200cØ´ÙØ¨Ù_ج٠عÙ_Ø´ÙØ¨Ù'.split('_'), 6330 weekdaysMin: 'Û_د_س_Ú_Ù¾_ج_Ø´'.split('_'), 6331 weekdaysParseExact: true, 6332 longDateFormat: { 6333 LT: 'HH:mm', 6334 LTS: 'HH:mm:ss', 6335 L: 'DD/MM/YYYY', 6336 LL: 'D MMMM YYYY', 6337 LLL: 'D MMMM YYYY HH:mm', 6338 LLLL: 'dddd, D MMMM YYYY HH:mm' 6339 }, 6340 meridiemParse: /ÙØ¨Ù از Ø¸ÙØ±|بعد از Ø¸ÙØ±/, 6341 isPM: function (input) { 6342 return /بعد از Ø¸ÙØ±/.test(input); 6343 }, 6344 meridiem: function (hour, minute, isLower) { 6345 if (hour < 12) { 6346 return 'ÙØ¨Ù از Ø¸ÙØ±'; 6347 } else { 6348 return 'بعد از Ø¸ÙØ±'; 6349 } 6350 }, 6351 calendar: { 6352 sameDay: '[Ø§Ù Ø±ÙØ² ساعت] LT', 6353 nextDay: '[ÙØ±Ø¯Ø§ ساعت] LT', 6354 nextWeek: 'dddd [ساعت] LT', 6355 lastDay: '[Ø¯ÛØ±Ùز ساعت] LT', 6356 lastWeek: 'dddd [Ù¾ÛØ´] [ساعت] LT', 6357 sameElse: 'L' 6358 }, 6359 relativeTime: { 6360 future: 'در %s', 6361 past: '%s Ù¾ÛØ´', 6362 s: 'ÚÙØ¯ ثاÙÛÙ', 6363 ss: 'ثاÙÛÙ d%', 6364 m: 'ÛÚ© دÙÛÙÙ', 6365 mm: '%d دÙÛÙÙ', 6366 h: 'ÛÚ© ساعت', 6367 hh: '%d ساعت', 6368 d: 'ÛÚ© Ø±ÙØ²', 6369 dd: '%d Ø±ÙØ²', 6370 M: 'ÛÚ© ٠اÙ', 6371 MM: '%d ٠اÙ', 6372 y: 'ÛÚ© ساÙ', 6373 yy: '%d ساÙ' 6374 }, 6375 preparse: function (string) { 6376 return string.replace(/[Û°-Û¹]/g, function (match) { 6377 return numberMap[match]; 6378 }).replace(/Ø/g, ','); 6379 }, 6380 postformat: function (string) { 6381 return string.replace(/\d/g, function (match) { 6382 return symbolMap[match]; 6383 }).replace(/,/g, 'Ø'); 6384 }, 6385 dayOfMonthOrdinalParse: /\d{1,2}Ù /, 6386 ordinal: '%dÙ ', 6387 week: { 6388 dow: 6, 6389 // Saturday is the first day of the week. 6390 doy: 12 // The week that contains Jan 12th is the first week of the year. 6391 6392 } 6393 }); 6394 return fa; 6395}); 6396 6397/***/ }), 6398
vendor: 3,618 bytes, lines 6399-6526
6399/***/ "./node_modules/moment/locale/fi.js": 6400/*!******************************************!*\ 6401 !*** ./node_modules/moment/locale/fi.js ***! 6402 \******************************************/ 6403/*! no static exports found */ 6404/***/ (function(module, exports, __webpack_require__) { 6405 6406//! moment.js locale configuration 6407; 6408 6409(function (global, factory) { 6410 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 6411})(this, function (moment) { 6412 'use strict'; 6413 6414 var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '), 6415 numbersFuture = ['nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', numbersPast[7], numbersPast[8], numbersPast[9]]; 6416 6417 function translate(number, withoutSuffix, key, isFuture) { 6418 var result = ''; 6419 6420 switch (key) { 6421 case 's': 6422 return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; 6423 6424 case 'ss': 6425 return isFuture ? 'sekunnin' : 'sekuntia'; 6426 6427 case 'm': 6428 return isFuture ? 'minuutin' : 'minuutti'; 6429 6430 case 'mm': 6431 result = isFuture ? 'minuutin' : 'minuuttia'; 6432 break; 6433 6434 case 'h': 6435 return isFuture ? 'tunnin' : 'tunti'; 6436 6437 case 'hh': 6438 result = isFuture ? 'tunnin' : 'tuntia'; 6439 break; 6440 6441 case 'd': 6442 return isFuture ? 'päivän' : 'päivä'; 6443 6444 case 'dd': 6445 result = isFuture ? 'päivän' : 'päivää'; 6446 break; 6447 6448 case 'M': 6449 return isFuture ? 'kuukauden' : 'kuukausi'; 6450 6451 case 'MM': 6452 result = isFuture ? 'kuukauden' : 'kuukautta'; 6453 break; 6454 6455 case 'y': 6456 return isFuture ? 'vuoden' : 'vuosi'; 6457 6458 case 'yy': 6459 result = isFuture ? 'vuoden' : 'vuotta'; 6460 break; 6461 } 6462 6463 result = verbalNumber(number, isFuture) + ' ' + result; 6464 return result; 6465 } 6466 6467 function verbalNumber(number, isFuture) { 6468 return number < 10 ? isFuture ? numbersFuture[number] : numbersPast[number] : number; 6469 } 6470 6471 var fi = moment.defineLocale('fi', { 6472 months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'), 6473 monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'), 6474 weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'), 6475 weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'), 6476 weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'), 6477 longDateFormat: { 6478 LT: 'HH.mm', 6479 LTS: 'HH.mm.ss', 6480 L: 'DD.MM.YYYY', 6481 LL: 'Do MMMM[ta] YYYY', 6482 LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm', 6483 LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm', 6484 l: 'D.M.YYYY', 6485 ll: 'Do MMM YYYY', 6486 lll: 'Do MMM YYYY, [klo] HH.mm', 6487 llll: 'ddd, Do MMM YYYY, [klo] HH.mm' 6488 }, 6489 calendar: { 6490 sameDay: '[tänään] [klo] LT', 6491 nextDay: '[huomenna] [klo] LT', 6492 nextWeek: 'dddd [klo] LT', 6493 lastDay: '[eilen] [klo] LT', 6494 lastWeek: '[viime] dddd[na] [klo] LT', 6495 sameElse: 'L' 6496 }, 6497 relativeTime: { 6498 future: '%s päästä', 6499 past: '%s sitten', 6500 s: translate, 6501 ss: translate, 6502 m: translate, 6503 mm: translate, 6504 h: translate, 6505 hh: translate, 6506 d: translate, 6507 dd: translate, 6508 M: translate, 6509 MM: translate, 6510 y: translate, 6511 yy: translate 6512 }, 6513 dayOfMonthOrdinalParse: /\d{1,2}\./, 6514 ordinal: '%d.', 6515 week: { 6516 dow: 1, 6517 // Monday is the first day of the week. 6518 doy: 4 // The week that contains Jan 4th is the first week of the year. 6519 6520 } 6521 }); 6522 return fi; 6523}); 6524 6525/***/ }), 6526
vendor: 1,972 bytes, lines 6527-6593
6527/***/ "./node_modules/moment/locale/fo.js": 6528/*!******************************************!*\ 6529 !*** ./node_modules/moment/locale/fo.js ***! 6530 \******************************************/ 6531/*! no static exports found */ 6532/***/ (function(module, exports, __webpack_require__) { 6533 6534//! moment.js locale configuration 6535; 6536 6537(function (global, factory) { 6538 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 6539})(this, function (moment) { 6540 'use strict'; 6541 6542 var fo = moment.defineLocale('fo', { 6543 months: 'januar_februar_mars_aprÃl_mai_juni_juli_august_september_oktober_november_desember'.split('_'), 6544 monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), 6545 weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_frÃggjadagur_leygardagur'.split('_'), 6546 weekdaysShort: 'sun_mán_týs_mik_hós_frÃ_ley'.split('_'), 6547 weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'), 6548 longDateFormat: { 6549 LT: 'HH:mm', 6550 LTS: 'HH:mm:ss', 6551 L: 'DD/MM/YYYY', 6552 LL: 'D MMMM YYYY', 6553 LLL: 'D MMMM YYYY HH:mm', 6554 LLLL: 'dddd D. MMMM, YYYY HH:mm' 6555 }, 6556 calendar: { 6557 sameDay: '[à dag kl.] LT', 6558 nextDay: '[à morgin kl.] LT', 6559 nextWeek: 'dddd [kl.] LT', 6560 lastDay: '[à gjár kl.] LT', 6561 lastWeek: '[sÃðstu] dddd [kl] LT', 6562 sameElse: 'L' 6563 }, 6564 relativeTime: { 6565 future: 'um %s', 6566 past: '%s sÃðani', 6567 s: 'fá sekund', 6568 ss: '%d sekundir', 6569 m: 'ein minuttur', 6570 mm: '%d minuttir', 6571 h: 'ein tÃmi', 6572 hh: '%d tÃmar', 6573 d: 'ein dagur', 6574 dd: '%d dagar', 6575 M: 'ein mánaður', 6576 MM: '%d mánaðir', 6577 y: 'eitt ár', 6578 yy: '%d ár' 6579 }, 6580 dayOfMonthOrdinalParse: /\d{1,2}\./, 6581 ordinal: '%d.', 6582 week: { 6583 dow: 1, 6584 // Monday is the first day of the week. 6585 doy: 4 // The week that contains Jan 4th is the first week of the year. 6586 6587 } 6588 }); 6589 return fo; 6590}); 6591 6592/***/ }), 6593
vendor: 2,319 bytes, lines 6594-6672
6594/***/ "./node_modules/moment/locale/fr-ca.js": 6595/*!*********************************************!*\ 6596 !*** ./node_modules/moment/locale/fr-ca.js ***! 6597 \*********************************************/ 6598/*! no static exports found */ 6599/***/ (function(module, exports, __webpack_require__) { 6600 6601//! moment.js locale configuration 6602; 6603 6604(function (global, factory) { 6605 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 6606})(this, function (moment) { 6607 'use strict'; 6608 6609 var frCa = moment.defineLocale('fr-ca', { 6610 months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), 6611 monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), 6612 monthsParseExact: true, 6613 weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), 6614 weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), 6615 weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), 6616 weekdaysParseExact: true, 6617 longDateFormat: { 6618 LT: 'HH:mm', 6619 LTS: 'HH:mm:ss', 6620 L: 'YYYY-MM-DD', 6621 LL: 'D MMMM YYYY', 6622 LLL: 'D MMMM YYYY HH:mm', 6623 LLLL: 'dddd D MMMM YYYY HH:mm' 6624 }, 6625 calendar: { 6626 sameDay: '[Aujourdâhui à ] LT', 6627 nextDay: '[Demain à ] LT', 6628 nextWeek: 'dddd [à ] LT', 6629 lastDay: '[Hier à ] LT', 6630 lastWeek: 'dddd [dernier à ] LT', 6631 sameElse: 'L' 6632 }, 6633 relativeTime: { 6634 future: 'dans %s', 6635 past: 'il y a %s', 6636 s: 'quelques secondes', 6637 ss: '%d secondes', 6638 m: 'une minute', 6639 mm: '%d minutes', 6640 h: 'une heure', 6641 hh: '%d heures', 6642 d: 'un jour', 6643 dd: '%d jours', 6644 M: 'un mois', 6645 MM: '%d mois', 6646 y: 'un an', 6647 yy: '%d ans' 6648 }, 6649 dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, 6650 ordinal: function (number, period) { 6651 switch (period) { 6652 // Words with masculine grammatical gender: mois, trimestre, jour 6653 default: 6654 case 'M': 6655 case 'Q': 6656 case 'D': 6657 case 'DDD': 6658 case 'd': 6659 return number + (number === 1 ? 'er' : 'e'); 6660 // Words with feminine grammatical gender: semaine 6661 6662 case 'w': 6663 case 'W': 6664 return number + (number === 1 ? 're' : 'e'); 6665 } 6666 } 6667 }); 6668 return frCa; 6669}); 6670 6671/***/ }), 6672
vendor: 2,477 bytes, lines 6673-6757
6673/***/ "./node_modules/moment/locale/fr-ch.js": 6674/*!*********************************************!*\ 6675 !*** ./node_modules/moment/locale/fr-ch.js ***! 6676 \*********************************************/ 6677/*! no static exports found */ 6678/***/ (function(module, exports, __webpack_require__) { 6679 6680//! moment.js locale configuration 6681; 6682 6683(function (global, factory) { 6684 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 6685})(this, function (moment) { 6686 'use strict'; 6687 6688 var frCh = moment.defineLocale('fr-ch', { 6689 months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), 6690 monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), 6691 monthsParseExact: true, 6692 weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), 6693 weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), 6694 weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), 6695 weekdaysParseExact: true, 6696 longDateFormat: { 6697 LT: 'HH:mm', 6698 LTS: 'HH:mm:ss', 6699 L: 'DD.MM.YYYY', 6700 LL: 'D MMMM YYYY', 6701 LLL: 'D MMMM YYYY HH:mm', 6702 LLLL: 'dddd D MMMM YYYY HH:mm' 6703 }, 6704 calendar: { 6705 sameDay: '[Aujourdâhui à ] LT', 6706 nextDay: '[Demain à ] LT', 6707 nextWeek: 'dddd [à ] LT', 6708 lastDay: '[Hier à ] LT', 6709 lastWeek: 'dddd [dernier à ] LT', 6710 sameElse: 'L' 6711 }, 6712 relativeTime: { 6713 future: 'dans %s', 6714 past: 'il y a %s', 6715 s: 'quelques secondes', 6716 ss: '%d secondes', 6717 m: 'une minute', 6718 mm: '%d minutes', 6719 h: 'une heure', 6720 hh: '%d heures', 6721 d: 'un jour', 6722 dd: '%d jours', 6723 M: 'un mois', 6724 MM: '%d mois', 6725 y: 'un an', 6726 yy: '%d ans' 6727 }, 6728 dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, 6729 ordinal: function (number, period) { 6730 switch (period) { 6731 // Words with masculine grammatical gender: mois, trimestre, jour 6732 default: 6733 case 'M': 6734 case 'Q': 6735 case 'D': 6736 case 'DDD': 6737 case 'd': 6738 return number + (number === 1 ? 'er' : 'e'); 6739 // Words with feminine grammatical gender: semaine 6740 6741 case 'w': 6742 case 'W': 6743 return number + (number === 1 ? 're' : 'e'); 6744 } 6745 }, 6746 week: { 6747 dow: 1, 6748 // Monday is the first day of the week. 6749 doy: 4 // The week that contains Jan 4th is the first week of the year. 6750 6751 } 6752 }); 6753 return frCh; 6754}); 6755 6756/***/ }), 6757
vendor: 2,689 bytes, lines 6758-6847
6758/***/ "./node_modules/moment/locale/fr.js": 6759/*!******************************************!*\ 6760 !*** ./node_modules/moment/locale/fr.js ***! 6761 \******************************************/ 6762/*! no static exports found */ 6763/***/ (function(module, exports, __webpack_require__) { 6764 6765//! moment.js locale configuration 6766; 6767 6768(function (global, factory) { 6769 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 6770})(this, function (moment) { 6771 'use strict'; 6772 6773 var fr = moment.defineLocale('fr', { 6774 months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), 6775 monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), 6776 monthsParseExact: true, 6777 weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), 6778 weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), 6779 weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), 6780 weekdaysParseExact: true, 6781 longDateFormat: { 6782 LT: 'HH:mm', 6783 LTS: 'HH:mm:ss', 6784 L: 'DD/MM/YYYY', 6785 LL: 'D MMMM YYYY', 6786 LLL: 'D MMMM YYYY HH:mm', 6787 LLLL: 'dddd D MMMM YYYY HH:mm' 6788 }, 6789 calendar: { 6790 sameDay: '[Aujourdâhui à ] LT', 6791 nextDay: '[Demain à ] LT', 6792 nextWeek: 'dddd [à ] LT', 6793 lastDay: '[Hier à ] LT', 6794 lastWeek: 'dddd [dernier à ] LT', 6795 sameElse: 'L' 6796 }, 6797 relativeTime: { 6798 future: 'dans %s', 6799 past: 'il y a %s', 6800 s: 'quelques secondes', 6801 ss: '%d secondes', 6802 m: 'une minute', 6803 mm: '%d minutes', 6804 h: 'une heure', 6805 hh: '%d heures', 6806 d: 'un jour', 6807 dd: '%d jours', 6808 M: 'un mois', 6809 MM: '%d mois', 6810 y: 'un an', 6811 yy: '%d ans' 6812 }, 6813 dayOfMonthOrdinalParse: /\d{1,2}(er|)/, 6814 ordinal: function (number, period) { 6815 switch (period) { 6816 // TODO: Return 'e' when day of month > 1. Move this case inside 6817 // block for masculine words below. 6818 // See https://github.com/moment/moment/issues/3375 6819 case 'D': 6820 return number + (number === 1 ? 'er' : ''); 6821 // Words with masculine grammatical gender: mois, trimestre, jour 6822 6823 default: 6824 case 'M': 6825 case 'Q': 6826 case 'DDD': 6827 case 'd': 6828 return number + (number === 1 ? 'er' : 'e'); 6829 // Words with feminine grammatical gender: semaine 6830 6831 case 'w': 6832 case 'W': 6833 return number + (number === 1 ? 're' : 'e'); 6834 } 6835 }, 6836 week: { 6837 dow: 1, 6838 // Monday is the first day of the week. 6839 doy: 4 // The week that contains Jan 4th is the first week of the year. 6840 6841 } 6842 }); 6843 return fr; 6844}); 6845 6846/***/ }), 6847
vendor: 2,477 bytes, lines 6848-6928
6848/***/ "./node_modules/moment/locale/fy.js": 6849/*!******************************************!*\ 6850 !*** ./node_modules/moment/locale/fy.js ***! 6851 \******************************************/ 6852/*! no static exports found */ 6853/***/ (function(module, exports, __webpack_require__) { 6854 6855//! moment.js locale configuration 6856; 6857 6858(function (global, factory) { 6859 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 6860})(this, function (moment) { 6861 'use strict'; 6862 6863 var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'), 6864 monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'); 6865 var fy = moment.defineLocale('fy', { 6866 months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'), 6867 monthsShort: function (m, format) { 6868 if (!m) { 6869 return monthsShortWithDots; 6870 } else if (/-MMM-/.test(format)) { 6871 return monthsShortWithoutDots[m.month()]; 6872 } else { 6873 return monthsShortWithDots[m.month()]; 6874 } 6875 }, 6876 monthsParseExact: true, 6877 weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'), 6878 weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'), 6879 weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), 6880 weekdaysParseExact: true, 6881 longDateFormat: { 6882 LT: 'HH:mm', 6883 LTS: 'HH:mm:ss', 6884 L: 'DD-MM-YYYY', 6885 LL: 'D MMMM YYYY', 6886 LLL: 'D MMMM YYYY HH:mm', 6887 LLLL: 'dddd D MMMM YYYY HH:mm' 6888 }, 6889 calendar: { 6890 sameDay: '[hjoed om] LT', 6891 nextDay: '[moarn om] LT', 6892 nextWeek: 'dddd [om] LT', 6893 lastDay: '[juster om] LT', 6894 lastWeek: '[ôfrûne] dddd [om] LT', 6895 sameElse: 'L' 6896 }, 6897 relativeTime: { 6898 future: 'oer %s', 6899 past: '%s lyn', 6900 s: 'in pear sekonden', 6901 ss: '%d sekonden', 6902 m: 'ien minút', 6903 mm: '%d minuten', 6904 h: 'ien oere', 6905 hh: '%d oeren', 6906 d: 'ien dei', 6907 dd: '%d dagen', 6908 M: 'ien moanne', 6909 MM: '%d moannen', 6910 y: 'ien jier', 6911 yy: '%d jierren' 6912 }, 6913 dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, 6914 ordinal: function (number) { 6915 return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de'); 6916 }, 6917 week: { 6918 dow: 1, 6919 // Monday is the first day of the week. 6920 doy: 4 // The week that contains Jan 4th is the first week of the year. 6921 6922 } 6923 }); 6924 return fy; 6925}); 6926 6927/***/ }), 6928
vendor: 2,393 bytes, lines 6929-7004
6929/***/ "./node_modules/moment/locale/ga.js": 6930/*!******************************************!*\ 6931 !*** ./node_modules/moment/locale/ga.js ***! 6932 \******************************************/ 6933/*! no static exports found */ 6934/***/ (function(module, exports, __webpack_require__) { 6935 6936//! moment.js locale configuration 6937; 6938 6939(function (global, factory) { 6940 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 6941})(this, function (moment) { 6942 'use strict'; 6943 6944 var months = ['Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Méitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deaireadh Fómhair', 'Samhain', 'Nollaig']; 6945 var monthsShort = ['Eaná', 'Feab', 'Márt', 'Aibr', 'Beal', 'Méit', 'Iúil', 'Lúna', 'Meán', 'Deai', 'Samh', 'Noll']; 6946 var weekdays = ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Satharn']; 6947 var weekdaysShort = ['Dom', 'Lua', 'Mái', 'Céa', 'Déa', 'hAo', 'Sat']; 6948 var weekdaysMin = ['Do', 'Lu', 'Má', 'Ce', 'Dé', 'hA', 'Sa']; 6949 var ga = moment.defineLocale('ga', { 6950 months: months, 6951 monthsShort: monthsShort, 6952 monthsParseExact: true, 6953 weekdays: weekdays, 6954 weekdaysShort: weekdaysShort, 6955 weekdaysMin: weekdaysMin, 6956 longDateFormat: { 6957 LT: 'HH:mm', 6958 LTS: 'HH:mm:ss', 6959 L: 'DD/MM/YYYY', 6960 LL: 'D MMMM YYYY', 6961 LLL: 'D MMMM YYYY HH:mm', 6962 LLLL: 'dddd, D MMMM YYYY HH:mm' 6963 }, 6964 calendar: { 6965 sameDay: '[Inniu ag] LT', 6966 nextDay: '[Amárach ag] LT', 6967 nextWeek: 'dddd [ag] LT', 6968 lastDay: '[Inné aig] LT', 6969 lastWeek: 'dddd [seo caite] [ag] LT', 6970 sameElse: 'L' 6971 }, 6972 relativeTime: { 6973 future: 'i %s', 6974 past: '%s ó shin', 6975 s: 'cúpla soicind', 6976 ss: '%d soicind', 6977 m: 'nóiméad', 6978 mm: '%d nóiméad', 6979 h: 'uair an chloig', 6980 hh: '%d uair an chloig', 6981 d: 'lá', 6982 dd: '%d lá', 6983 M: 'mÃ', 6984 MM: '%d mÃ', 6985 y: 'bliain', 6986 yy: '%d bliain' 6987 }, 6988 dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/, 6989 ordinal: function (number) { 6990 var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; 6991 return number + output; 6992 }, 6993 week: { 6994 dow: 1, 6995 // Monday is the first day of the week. 6996 doy: 4 // The week that contains Jan 4th is the first week of the year. 6997 6998 } 6999 }); 7000 return ga; 7001}); 7002 7003/***/ }), 7004
vendor: 2,422 bytes, lines 7005-7080
7005/***/ "./node_modules/moment/locale/gd.js": 7006/*!******************************************!*\ 7007 !*** ./node_modules/moment/locale/gd.js ***! 7008 \******************************************/ 7009/*! no static exports found */ 7010/***/ (function(module, exports, __webpack_require__) { 7011 7012//! moment.js locale configuration 7013; 7014 7015(function (global, factory) { 7016 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 7017})(this, function (moment) { 7018 'use strict'; 7019 7020 var months = ['Am Faoilleach', 'An Gearran', 'Am Mà rt', 'An Giblean', 'An Cèitean', 'An t-Ãgmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dà mhair', 'An t-Samhain', 'An Dùbhlachd']; 7021 var monthsShort = ['Faoi', 'Gear', 'Mà rt', 'Gibl', 'Cèit', 'Ãgmh', 'Iuch', 'Lùn', 'Sult', 'Dà mh', 'Samh', 'Dùbh']; 7022 var weekdays = ['Didòmhnaich', 'Diluain', 'Dimà irt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne']; 7023 var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis']; 7024 var weekdaysMin = ['Dò', 'Lu', 'Mà ', 'Ci', 'Ar', 'Ha', 'Sa']; 7025 var gd = moment.defineLocale('gd', { 7026 months: months, 7027 monthsShort: monthsShort, 7028 monthsParseExact: true, 7029 weekdays: weekdays, 7030 weekdaysShort: weekdaysShort, 7031 weekdaysMin: weekdaysMin, 7032 longDateFormat: { 7033 LT: 'HH:mm', 7034 LTS: 'HH:mm:ss', 7035 L: 'DD/MM/YYYY', 7036 LL: 'D MMMM YYYY', 7037 LLL: 'D MMMM YYYY HH:mm', 7038 LLLL: 'dddd, D MMMM YYYY HH:mm' 7039 }, 7040 calendar: { 7041 sameDay: '[An-diugh aig] LT', 7042 nextDay: '[A-mà ireach aig] LT', 7043 nextWeek: 'dddd [aig] LT', 7044 lastDay: '[An-dè aig] LT', 7045 lastWeek: 'dddd [seo chaidh] [aig] LT', 7046 sameElse: 'L' 7047 }, 7048 relativeTime: { 7049 future: 'ann an %s', 7050 past: 'bho chionn %s', 7051 s: 'beagan diogan', 7052 ss: '%d diogan', 7053 m: 'mionaid', 7054 mm: '%d mionaidean', 7055 h: 'uair', 7056 hh: '%d uairean', 7057 d: 'latha', 7058 dd: '%d latha', 7059 M: 'mìos', 7060 MM: '%d mìosan', 7061 y: 'bliadhna', 7062 yy: '%d bliadhna' 7063 }, 7064 dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/, 7065 ordinal: function (number) { 7066 var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; 7067 return number + output; 7068 }, 7069 week: { 7070 dow: 1, 7071 // Monday is the first day of the week. 7072 doy: 4 // The week that contains Jan 4th is the first week of the year. 7073 7074 } 7075 }); 7076 return gd; 7077}); 7078 7079/***/ }), 7080
vendor: 2,529 bytes, lines 7081-7165
7081/***/ "./node_modules/moment/locale/gl.js": 7082/*!******************************************!*\ 7083 !*** ./node_modules/moment/locale/gl.js ***! 7084 \******************************************/ 7085/*! no static exports found */ 7086/***/ (function(module, exports, __webpack_require__) { 7087 7088//! moment.js locale configuration 7089; 7090 7091(function (global, factory) { 7092 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 7093})(this, function (moment) { 7094 'use strict'; 7095 7096 var gl = moment.defineLocale('gl', { 7097 months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'), 7098 monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'), 7099 monthsParseExact: true, 7100 weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), 7101 weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), 7102 weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'), 7103 weekdaysParseExact: true, 7104 longDateFormat: { 7105 LT: 'H:mm', 7106 LTS: 'H:mm:ss', 7107 L: 'DD/MM/YYYY', 7108 LL: 'D [de] MMMM [de] YYYY', 7109 LLL: 'D [de] MMMM [de] YYYY H:mm', 7110 LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm' 7111 }, 7112 calendar: { 7113 sameDay: function () { 7114 return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT'; 7115 }, 7116 nextDay: function () { 7117 return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT'; 7118 }, 7119 nextWeek: function () { 7120 return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'; 7121 }, 7122 lastDay: function () { 7123 return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT'; 7124 }, 7125 lastWeek: function () { 7126 return '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'; 7127 }, 7128 sameElse: 'L' 7129 }, 7130 relativeTime: { 7131 future: function (str) { 7132 if (str.indexOf('un') === 0) { 7133 return 'n' + str; 7134 } 7135 7136 return 'en ' + str; 7137 }, 7138 past: 'hai %s', 7139 s: 'uns segundos', 7140 ss: '%d segundos', 7141 m: 'un minuto', 7142 mm: '%d minutos', 7143 h: 'unha hora', 7144 hh: '%d horas', 7145 d: 'un dÃa', 7146 dd: '%d dÃas', 7147 M: 'un mes', 7148 MM: '%d meses', 7149 y: 'un ano', 7150 yy: '%d anos' 7151 }, 7152 dayOfMonthOrdinalParse: /\d{1,2}º/, 7153 ordinal: '%dº', 7154 week: { 7155 dow: 1, 7156 // Monday is the first day of the week. 7157 doy: 4 // The week that contains Jan 4th is the first week of the year. 7158 7159 } 7160 }); 7161 return gl; 7162}); 7163 7164/***/ }), 7165
vendor: 4,033 bytes, lines 7166-7297
7166/***/ "./node_modules/moment/locale/gom-latn.js": 7167/*!************************************************!*\ 7168 !*** ./node_modules/moment/locale/gom-latn.js ***! 7169 \************************************************/ 7170/*! no static exports found */ 7171/***/ (function(module, exports, __webpack_require__) { 7172 7173//! moment.js locale configuration 7174; 7175 7176(function (global, factory) { 7177 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 7178})(this, function (moment) { 7179 'use strict'; 7180 7181 function processRelativeTime(number, withoutSuffix, key, isFuture) { 7182 var format = { 7183 's': ['thodde secondanim', 'thodde second'], 7184 'ss': [number + ' secondanim', number + ' second'], 7185 'm': ['eka mintan', 'ek minute'], 7186 'mm': [number + ' mintanim', number + ' mintam'], 7187 'h': ['eka voran', 'ek vor'], 7188 'hh': [number + ' voranim', number + ' voram'], 7189 'd': ['eka disan', 'ek dis'], 7190 'dd': [number + ' disanim', number + ' dis'], 7191 'M': ['eka mhoinean', 'ek mhoino'], 7192 'MM': [number + ' mhoineanim', number + ' mhoine'], 7193 'y': ['eka vorsan', 'ek voros'], 7194 'yy': [number + ' vorsanim', number + ' vorsam'] 7195 }; 7196 return withoutSuffix ? format[key][0] : format[key][1]; 7197 } 7198 7199 var gomLatn = moment.defineLocale('gom-latn', { 7200 months: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'), 7201 monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'), 7202 monthsParseExact: true, 7203 weekdays: 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\'var'.split('_'), 7204 weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), 7205 weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'), 7206 weekdaysParseExact: true, 7207 longDateFormat: { 7208 LT: 'A h:mm [vazta]', 7209 LTS: 'A h:mm:ss [vazta]', 7210 L: 'DD-MM-YYYY', 7211 LL: 'D MMMM YYYY', 7212 LLL: 'D MMMM YYYY A h:mm [vazta]', 7213 LLLL: 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]', 7214 llll: 'ddd, D MMM YYYY, A h:mm [vazta]' 7215 }, 7216 calendar: { 7217 sameDay: '[Aiz] LT', 7218 nextDay: '[Faleam] LT', 7219 nextWeek: '[Ieta to] dddd[,] LT', 7220 lastDay: '[Kal] LT', 7221 lastWeek: '[Fatlo] dddd[,] LT', 7222 sameElse: 'L' 7223 }, 7224 relativeTime: { 7225 future: '%s', 7226 past: '%s adim', 7227 s: processRelativeTime, 7228 ss: processRelativeTime, 7229 m: processRelativeTime, 7230 mm: processRelativeTime, 7231 h: processRelativeTime, 7232 hh: processRelativeTime, 7233 d: processRelativeTime, 7234 dd: processRelativeTime, 7235 M: processRelativeTime, 7236 MM: processRelativeTime, 7237 y: processRelativeTime, 7238 yy: processRelativeTime 7239 }, 7240 dayOfMonthOrdinalParse: /\d{1,2}(er)/, 7241 ordinal: function (number, period) { 7242 switch (period) { 7243 // the ordinal 'er' only applies to day of the month 7244 case 'D': 7245 return number + 'er'; 7246 7247 default: 7248 case 'M': 7249 case 'Q': 7250 case 'DDD': 7251 case 'd': 7252 case 'w': 7253 case 'W': 7254 return number; 7255 } 7256 }, 7257 week: { 7258 dow: 1, 7259 // Monday is the first day of the week. 7260 doy: 4 // The week that contains Jan 4th is the first week of the year. 7261 7262 }, 7263 meridiemParse: /rati|sokalli|donparam|sanje/, 7264 meridiemHour: function (hour, meridiem) { 7265 if (hour === 12) { 7266 hour = 0; 7267 } 7268 7269 if (meridiem === 'rati') { 7270 return hour < 4 ? hour : hour + 12; 7271 } else if (meridiem === 'sokalli') { 7272 return hour; 7273 } else if (meridiem === 'donparam') { 7274 return hour > 12 ? hour : hour + 12; 7275 } else if (meridiem === 'sanje') { 7276 return hour + 12; 7277 } 7278 }, 7279 meridiem: function (hour, minute, isLower) { 7280 if (hour < 4) { 7281 return 'rati'; 7282 } else if (hour < 12) { 7283 return 'sokalli'; 7284 } else if (hour < 16) { 7285 return 'donparam'; 7286 } else if (hour < 20) { 7287 return 'sanje'; 7288 } else { 7289 return 'rati'; 7290 } 7291 } 7292 }); 7293 return gomLatn; 7294}); 7295 7296/***/ }), 7297
vendor: 4,239 bytes, lines 7298-7428
7298/***/ "./node_modules/moment/locale/gu.js": 7299/*!******************************************!*\ 7300 !*** ./node_modules/moment/locale/gu.js ***! 7301 \******************************************/ 7302/*! no static exports found */ 7303/***/ (function(module, exports, __webpack_require__) { 7304 7305//! moment.js locale configuration 7306; 7307 7308(function (global, factory) { 7309 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 7310})(this, function (moment) { 7311 'use strict'; 7312 7313 var symbolMap = { 7314 '1': 'à«§', 7315 '2': '૨', 7316 '3': 'à«©', 7317 '4': '૪', 7318 '5': 'à««', 7319 '6': '૬', 7320 '7': 'à«', 7321 '8': 'à«®', 7322 '9': '૯', 7323 '0': '૦' 7324 }, 7325 numberMap = { 7326 'à«§': '1', 7327 '૨': '2', 7328 'à«©': '3', 7329 '૪': '4', 7330 'à««': '5', 7331 '૬': '6', 7332 'à«': '7', 7333 'à«®': '8', 7334 '૯': '9', 7335 '૦': '0' 7336 }; 7337 var gu = moment.defineLocale('gu', { 7338 months: 'àªàª¾àª¨à«àª¯à«àªàª°à«_ફà«àª¬à«àª°à«àªàª°à«_મારà«àª_àªàªªà«àª°àª¿àª²_મà«_àªà«àª¨_àªà«àª²àª¾àª_àªàªàª¸à«àª_સપà«àªà«àª®à«àª¬àª°_àªàªà«àªà«àª¬àª°_નવà«àª®à«àª¬àª°_ડિસà«àª®à«àª¬àª°'.split('_'), 7339 monthsShort: 'àªàª¾àª¨à«àª¯à«._ફà«àª¬à«àª°à«._મારà«àª_àªàªªà«àª°àª¿._મà«_àªà«àª¨_àªà«àª²àª¾._àªàª._સપà«àªà«._àªàªà«àªà«._નવà«._ડિસà«.'.split('_'), 7340 monthsParseExact: true, 7341 weekdays: 'રવિવાર_સà«àª®àªµàª¾àª°_મàªàªàª³àªµàª¾àª°_બà«àª§à«àªµàª¾àª°_àªà«àª°à«àªµàª¾àª°_શà«àªà«àª°àªµàª¾àª°_શનિવાર'.split('_'), 7342 weekdaysShort: 'રવિ_સà«àª®_મàªàªàª³_બà«àª§à«_àªà«àª°à«_શà«àªà«àª°_શનિ'.split('_'), 7343 weekdaysMin: 'ર_સà«_મàª_બà«_àªà«_શà«_શ'.split('_'), 7344 longDateFormat: { 7345 LT: 'A h:mm વાàªà«àª¯à«', 7346 LTS: 'A h:mm:ss વાàªà«àª¯à«', 7347 L: 'DD/MM/YYYY', 7348 LL: 'D MMMM YYYY', 7349 LLL: 'D MMMM YYYY, A h:mm વાàªà«àª¯à«', 7350 LLLL: 'dddd, D MMMM YYYY, A h:mm વાàªà«àª¯à«' 7351 }, 7352 calendar: { 7353 sameDay: '[àªàª] LT', 7354 nextDay: '[àªàª¾àª²à«] LT', 7355 nextWeek: 'dddd, LT', 7356 lastDay: '[àªàªàªàª¾àª²à«] LT', 7357 lastWeek: '[પાàªàª²àª¾] dddd, LT', 7358 sameElse: 'L' 7359 }, 7360 relativeTime: { 7361 future: '%s મા', 7362 past: '%s પà«àª¹àª²àª¾', 7363 s: 'ઠમà«àª પળà«', 7364 ss: '%d સà«àªàªàª¡', 7365 m: 'àªàª મિનિàª', 7366 mm: '%d મિનિàª', 7367 h: 'àªàª àªàª²àª¾àª', 7368 hh: '%d àªàª²àª¾àª', 7369 d: 'àªàª દિવસ', 7370 dd: '%d દિવસ', 7371 M: 'àªàª મહિનà«', 7372 MM: '%d મહિનà«', 7373 y: 'àªàª વરà«àª·', 7374 yy: '%d વરà«àª·' 7375 }, 7376 preparse: function (string) { 7377 return string.replace(/[૧૨૩૪૫૬à«à«®à«¯à«¦]/g, function (match) { 7378 return numberMap[match]; 7379 }); 7380 }, 7381 postformat: function (string) { 7382 return string.replace(/\d/g, function (match) { 7383 return symbolMap[match]; 7384 }); 7385 }, 7386 // Gujarati notation for meridiems are quite fuzzy in practice. While there exists 7387 // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati. 7388 meridiemParse: /રાત|બપà«àª°|સવાર|સાàªàª/, 7389 meridiemHour: function (hour, meridiem) { 7390 if (hour === 12) { 7391 hour = 0; 7392 } 7393 7394 if (meridiem === 'રાત') { 7395 return hour < 4 ? hour : hour + 12; 7396 } else if (meridiem === 'સવાર') { 7397 return hour; 7398 } else if (meridiem === 'બપà«àª°') { 7399 return hour >= 10 ? hour : hour + 12; 7400 } else if (meridiem === 'સાàªàª') { 7401 return hour + 12; 7402 } 7403 }, 7404 meridiem: function (hour, minute, isLower) { 7405 if (hour < 4) { 7406 return 'રાત'; 7407 } else if (hour < 10) { 7408 return 'સવાર'; 7409 } else if (hour < 17) { 7410 return 'બપà«àª°'; 7411 } else if (hour < 20) { 7412 return 'સાàªàª'; 7413 } else { 7414 return 'રાત'; 7415 } 7416 }, 7417 week: { 7418 dow: 0, 7419 // Sunday is the first day of the week. 7420 doy: 6 // The week that contains Jan 6th is the first week of the year. 7421 7422 } 7423 }); 7424 return gu; 7425}); 7426 7427/***/ }), 7428
vendor: 3,257 bytes, lines 7429-7534
7429/***/ "./node_modules/moment/locale/he.js": 7430/*!******************************************!*\ 7431 !*** ./node_modules/moment/locale/he.js ***! 7432 \******************************************/ 7433/*! no static exports found */ 7434/***/ (function(module, exports, __webpack_require__) { 7435 7436//! moment.js locale configuration 7437; 7438 7439(function (global, factory) { 7440 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 7441})(this, function (moment) { 7442 'use strict'; 7443 7444 var he = moment.defineLocale('he', { 7445 months: '×× ××ר_פ×ר××ר_×רץ_×פר××_×××_××× ×_××××_××××ס×_ספ×××ר_×××§×××ר_× ××××ר_×צ××ר'.split('_'), 7446 monthsShort: '×× ×׳_פ×ר׳_×רץ_×פר׳_×××_××× ×_××××_×××׳_ספ×׳_××ק׳_× ××׳_×צ×׳'.split('_'), 7447 weekdays: 'ר×ש××_×©× ×_ש××ש×_ר×××¢×_×××ש×_ש×ש×_ש×ת'.split('_'), 7448 weekdaysShort: '×׳_×׳_×׳_×׳_×׳_×׳_ש׳'.split('_'), 7449 weekdaysMin: '×_×_×_×_×_×_ש'.split('_'), 7450 longDateFormat: { 7451 LT: 'HH:mm', 7452 LTS: 'HH:mm:ss', 7453 L: 'DD/MM/YYYY', 7454 LL: 'D [×]MMMM YYYY', 7455 LLL: 'D [×]MMMM YYYY HH:mm', 7456 LLLL: 'dddd, D [×]MMMM YYYY HH:mm', 7457 l: 'D/M/YYYY', 7458 ll: 'D MMM YYYY', 7459 lll: 'D MMM YYYY HH:mm', 7460 llll: 'ddd, D MMM YYYY HH:mm' 7461 }, 7462 calendar: { 7463 sameDay: '[×××× ×Ö¾]LT', 7464 nextDay: '[××ר ×Ö¾]LT', 7465 nextWeek: 'dddd [×שע×] LT', 7466 lastDay: '[×ת××× ×Ö¾]LT', 7467 lastWeek: '[××××] dddd [×××ר×× ×שע×] LT', 7468 sameElse: 'L' 7469 }, 7470 relativeTime: { 7471 future: '××¢×× %s', 7472 past: '××¤× × %s', 7473 s: '×ספר ×©× ××ת', 7474 ss: '%d ×©× ××ת', 7475 m: '××§×', 7476 mm: '%d ××§×ת', 7477 h: 'שע×', 7478 hh: function (number) { 7479 if (number === 2) { 7480 return 'שעת×××'; 7481 } 7482 7483 return number + ' שע×ת'; 7484 }, 7485 d: '×××', 7486 dd: function (number) { 7487 if (number === 2) { 7488 return '××××××'; 7489 } 7490 7491 return number + ' ××××'; 7492 }, 7493 M: '×××ש', 7494 MM: function (number) { 7495 if (number === 2) { 7496 return '×××ש×××'; 7497 } 7498 7499 return number + ' ×××ש××'; 7500 }, 7501 y: '×©× ×', 7502 yy: function (number) { 7503 if (number === 2) { 7504 return '×©× ×ª×××'; 7505 } else if (number % 10 === 0 && number !== 10) { 7506 return number + ' ×©× ×'; 7507 } 7508 7509 return number + ' ×©× ××'; 7510 } 7511 }, 7512 meridiemParse: /×××"צ|××¤× ×"צ|×××¨× ×צ×ר×××|××¤× × ×צ×ר×××|××¤× ×ת ××קר|×××קר|×ער×/i, 7513 isPM: function (input) { 7514 return /^(×××"צ|×××¨× ×צ×ר×××|×ער×)$/.test(input); 7515 }, 7516 meridiem: function (hour, minute, isLower) { 7517 if (hour < 5) { 7518 return '××¤× ×ת ××קר'; 7519 } else if (hour < 10) { 7520 return '×××קר'; 7521 } else if (hour < 12) { 7522 return isLower ? '××¤× ×"צ' : '××¤× × ×צ×ר×××'; 7523 } else if (hour < 18) { 7524 return isLower ? '×××"צ' : '×××¨× ×צ×ר×××'; 7525 } else { 7526 return '×ער×'; 7527 } 7528 } 7529 }); 7530 return he; 7531}); 7532 7533/***/ }), 7534
vendor: 4,099 bytes, lines 7535-7665
7535/***/ "./node_modules/moment/locale/hi.js": 7536/*!******************************************!*\ 7537 !*** ./node_modules/moment/locale/hi.js ***! 7538 \******************************************/ 7539/*! no static exports found */ 7540/***/ (function(module, exports, __webpack_require__) { 7541 7542//! moment.js locale configuration 7543; 7544 7545(function (global, factory) { 7546 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 7547})(this, function (moment) { 7548 'use strict'; 7549 7550 var symbolMap = { 7551 '1': '१', 7552 '2': '२', 7553 '3': '३', 7554 '4': '४', 7555 '5': '५', 7556 '6': '६', 7557 '7': 'à¥', 7558 '8': '८', 7559 '9': '९', 7560 '0': '०' 7561 }, 7562 numberMap = { 7563 '१': '1', 7564 '२': '2', 7565 '३': '3', 7566 '४': '4', 7567 '५': '5', 7568 '६': '6', 7569 'à¥': '7', 7570 '८': '8', 7571 '९': '9', 7572 '०': '0' 7573 }; 7574 var hi = moment.defineLocale('hi', { 7575 months: 'à¤à¤¨à¤µà¤°à¥_फ़रवरà¥_मारà¥à¤_ठपà¥à¤°à¥à¤²_मà¤_à¤à¥à¤¨_à¤à¥à¤²à¤¾à¤_ठà¤à¤¸à¥à¤¤_सितमà¥à¤¬à¤°_ठà¤à¥à¤à¥à¤¬à¤°_नवमà¥à¤¬à¤°_दिसमà¥à¤¬à¤°'.split('_'), 7576 monthsShort: 'à¤à¤¨._फ़र._मारà¥à¤_ठपà¥à¤°à¥._मà¤_à¤à¥à¤¨_à¤à¥à¤²._ठà¤._सित._ठà¤à¥à¤à¥._नव._दिस.'.split('_'), 7577 monthsParseExact: true, 7578 weekdays: 'रविवार_सà¥à¤®à¤µà¤¾à¤°_मà¤à¤à¤²à¤µà¤¾à¤°_बà¥à¤§à¤µà¤¾à¤°_à¤à¥à¤°à¥à¤µà¤¾à¤°_शà¥à¤à¥à¤°à¤µà¤¾à¤°_शनिवार'.split('_'), 7579 weekdaysShort: 'रवि_सà¥à¤®_मà¤à¤à¤²_बà¥à¤§_à¤à¥à¤°à¥_शà¥à¤à¥à¤°_शनि'.split('_'), 7580 weekdaysMin: 'र_सà¥_मà¤_बà¥_à¤à¥_शà¥_श'.split('_'), 7581 longDateFormat: { 7582 LT: 'A h:mm बà¤à¥', 7583 LTS: 'A h:mm:ss बà¤à¥', 7584 L: 'DD/MM/YYYY', 7585 LL: 'D MMMM YYYY', 7586 LLL: 'D MMMM YYYY, A h:mm बà¤à¥', 7587 LLLL: 'dddd, D MMMM YYYY, A h:mm बà¤à¥' 7588 }, 7589 calendar: { 7590 sameDay: '[à¤à¤] LT', 7591 nextDay: '[à¤à¤²] LT', 7592 nextWeek: 'dddd, LT', 7593 lastDay: '[à¤à¤²] LT', 7594 lastWeek: '[पिà¤à¤²à¥] dddd, LT', 7595 sameElse: 'L' 7596 }, 7597 relativeTime: { 7598 future: '%s मà¥à¤', 7599 past: '%s पहलà¥', 7600 s: 'à¤à¥à¤ हॠà¤à¥à¤·à¤£', 7601 ss: '%d सà¥à¤à¤à¤¡', 7602 m: 'à¤à¤ मिनà¤', 7603 mm: '%d मिनà¤', 7604 h: 'à¤à¤ à¤à¤à¤à¤¾', 7605 hh: '%d à¤à¤à¤à¥', 7606 d: 'à¤à¤ दिन', 7607 dd: '%d दिन', 7608 M: 'à¤à¤ महà¥à¤¨à¥', 7609 MM: '%d महà¥à¤¨à¥', 7610 y: 'à¤à¤ वरà¥à¤·', 7611 yy: '%d वरà¥à¤·' 7612 }, 7613 preparse: function (string) { 7614 return string.replace(/[१२३४५६à¥à¥®à¥¯à¥¦]/g, function (match) { 7615 return numberMap[match]; 7616 }); 7617 }, 7618 postformat: function (string) { 7619 return string.replace(/\d/g, function (match) { 7620 return symbolMap[match]; 7621 }); 7622 }, 7623 // Hindi notation for meridiems are quite fuzzy in practice. While there exists 7624 // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. 7625 meridiemParse: /रात|सà¥à¤¬à¤¹|दà¥à¤ªà¤¹à¤°|शाम/, 7626 meridiemHour: function (hour, meridiem) { 7627 if (hour === 12) { 7628 hour = 0; 7629 } 7630 7631 if (meridiem === 'रात') { 7632 return hour < 4 ? hour : hour + 12; 7633 } else if (meridiem === 'सà¥à¤¬à¤¹') { 7634 return hour; 7635 } else if (meridiem === 'दà¥à¤ªà¤¹à¤°') { 7636 return hour >= 10 ? hour : hour + 12; 7637 } else if (meridiem === 'शाम') { 7638 return hour + 12; 7639 } 7640 }, 7641 meridiem: function (hour, minute, isLower) { 7642 if (hour < 4) { 7643 return 'रात'; 7644 } else if (hour < 10) { 7645 return 'सà¥à¤¬à¤¹'; 7646 } else if (hour < 17) { 7647 return 'दà¥à¤ªà¤¹à¤°'; 7648 } else if (hour < 20) { 7649 return 'शाम'; 7650 } else { 7651 return 'रात'; 7652 } 7653 }, 7654 week: { 7655 dow: 0, 7656 // Sunday is the first day of the week. 7657 doy: 6 // The week that contains Jan 6th is the first week of the year. 7658 7659 } 7660 }); 7661 return hi; 7662}); 7663 7664/***/ }), 7665
vendor: 4,473 bytes, lines 7666-7845
7666/***/ "./node_modules/moment/locale/hr.js": 7667/*!******************************************!*\ 7668 !*** ./node_modules/moment/locale/hr.js ***! 7669 \******************************************/ 7670/*! no static exports found */ 7671/***/ (function(module, exports, __webpack_require__) { 7672 7673//! moment.js locale configuration 7674; 7675 7676(function (global, factory) { 7677 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 7678})(this, function (moment) { 7679 'use strict'; 7680 7681 function translate(number, withoutSuffix, key) { 7682 var result = number + ' '; 7683 7684 switch (key) { 7685 case 'ss': 7686 if (number === 1) { 7687 result += 'sekunda'; 7688 } else if (number === 2 || number === 3 || number === 4) { 7689 result += 'sekunde'; 7690 } else { 7691 result += 'sekundi'; 7692 } 7693 7694 return result; 7695 7696 case 'm': 7697 return withoutSuffix ? 'jedna minuta' : 'jedne minute'; 7698 7699 case 'mm': 7700 if (number === 1) { 7701 result += 'minuta'; 7702 } else if (number === 2 || number === 3 || number === 4) { 7703 result += 'minute'; 7704 } else { 7705 result += 'minuta'; 7706 } 7707 7708 return result; 7709 7710 case 'h': 7711 return withoutSuffix ? 'jedan sat' : 'jednog sata'; 7712 7713 case 'hh': 7714 if (number === 1) { 7715 result += 'sat'; 7716 } else if (number === 2 || number === 3 || number === 4) { 7717 result += 'sata'; 7718 } else { 7719 result += 'sati'; 7720 } 7721 7722 return result; 7723 7724 case 'dd': 7725 if (number === 1) { 7726 result += 'dan'; 7727 } else { 7728 result += 'dana'; 7729 } 7730 7731 return result; 7732 7733 case 'MM': 7734 if (number === 1) { 7735 result += 'mjesec'; 7736 } else if (number === 2 || number === 3 || number === 4) { 7737 result += 'mjeseca'; 7738 } else { 7739 result += 'mjeseci'; 7740 } 7741 7742 return result; 7743 7744 case 'yy': 7745 if (number === 1) { 7746 result += 'godina'; 7747 } else if (number === 2 || number === 3 || number === 4) { 7748 result += 'godine'; 7749 } else { 7750 result += 'godina'; 7751 } 7752 7753 return result; 7754 } 7755 } 7756 7757 var hr = moment.defineLocale('hr', { 7758 months: { 7759 format: 'sijeÄnja_veljaÄe_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'), 7760 standalone: 'sijeÄanj_veljaÄa_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_') 7761 }, 7762 monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'), 7763 monthsParseExact: true, 7764 weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split('_'), 7765 weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'), 7766 weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'), 7767 weekdaysParseExact: true, 7768 longDateFormat: { 7769 LT: 'H:mm', 7770 LTS: 'H:mm:ss', 7771 L: 'DD.MM.YYYY', 7772 LL: 'D. MMMM YYYY', 7773 LLL: 'D. MMMM YYYY H:mm', 7774 LLLL: 'dddd, D. MMMM YYYY H:mm' 7775 }, 7776 calendar: { 7777 sameDay: '[danas u] LT', 7778 nextDay: '[sutra u] LT', 7779 nextWeek: function () { 7780 switch (this.day()) { 7781 case 0: 7782 return '[u] [nedjelju] [u] LT'; 7783 7784 case 3: 7785 return '[u] [srijedu] [u] LT'; 7786 7787 case 6: 7788 return '[u] [subotu] [u] LT'; 7789 7790 case 1: 7791 case 2: 7792 case 4: 7793 case 5: 7794 return '[u] dddd [u] LT'; 7795 } 7796 }, 7797 lastDay: '[juÄer u] LT', 7798 lastWeek: function () { 7799 switch (this.day()) { 7800 case 0: 7801 case 3: 7802 return '[proÅ¡lu] dddd [u] LT'; 7803 7804 case 6: 7805 return '[proÅ¡le] [subote] [u] LT'; 7806 7807 case 1: 7808 case 2: 7809 case 4: 7810 case 5: 7811 return '[proÅ¡li] dddd [u] LT'; 7812 } 7813 }, 7814 sameElse: 'L' 7815 }, 7816 relativeTime: { 7817 future: 'za %s', 7818 past: 'prije %s', 7819 s: 'par sekundi', 7820 ss: translate, 7821 m: translate, 7822 mm: translate, 7823 h: translate, 7824 hh: translate, 7825 d: 'dan', 7826 dd: translate, 7827 M: 'mjesec', 7828 MM: translate, 7829 y: 'godinu', 7830 yy: translate 7831 }, 7832 dayOfMonthOrdinalParse: /\d{1,2}\./, 7833 ordinal: '%d.', 7834 week: { 7835 dow: 1, 7836 // Monday is the first day of the week. 7837 doy: 7 // The week that contains Jan 7th is the first week of the year. 7838 7839 } 7840 }); 7841 return hr; 7842}); 7843 7844/***/ }), 7845
vendor: 3,802 bytes, lines 7846-7977
7846/***/ "./node_modules/moment/locale/hu.js": 7847/*!******************************************!*\ 7848 !*** ./node_modules/moment/locale/hu.js ***! 7849 \******************************************/ 7850/*! no static exports found */ 7851/***/ (function(module, exports, __webpack_require__) { 7852 7853//! moment.js locale configuration 7854; 7855 7856(function (global, factory) { 7857 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 7858})(this, function (moment) { 7859 'use strict'; 7860 7861 var weekEndings = 'vasárnap hétfÅn kedden szerdán csütörtökön pénteken szombaton'.split(' '); 7862 7863 function translate(number, withoutSuffix, key, isFuture) { 7864 var num = number; 7865 7866 switch (key) { 7867 case 's': 7868 return isFuture || withoutSuffix ? 'néhány másodperc' : 'néhány másodperce'; 7869 7870 case 'ss': 7871 return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce'; 7872 7873 case 'm': 7874 return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); 7875 7876 case 'mm': 7877 return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); 7878 7879 case 'h': 7880 return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); 7881 7882 case 'hh': 7883 return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); 7884 7885 case 'd': 7886 return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); 7887 7888 case 'dd': 7889 return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); 7890 7891 case 'M': 7892 return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); 7893 7894 case 'MM': 7895 return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); 7896 7897 case 'y': 7898 return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); 7899 7900 case 'yy': 7901 return num + (isFuture || withoutSuffix ? ' év' : ' éve'); 7902 } 7903 7904 return ''; 7905 } 7906 7907 function week(isFuture) { 7908 return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]'; 7909 } 7910 7911 var hu = moment.defineLocale('hu', { 7912 months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'), 7913 monthsShort: 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'), 7914 weekdays: 'vasárnap_hétfÅ_kedd_szerda_csütörtök_péntek_szombat'.split('_'), 7915 weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), 7916 weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'), 7917 longDateFormat: { 7918 LT: 'H:mm', 7919 LTS: 'H:mm:ss', 7920 L: 'YYYY.MM.DD.', 7921 LL: 'YYYY. MMMM D.', 7922 LLL: 'YYYY. MMMM D. H:mm', 7923 LLLL: 'YYYY. MMMM D., dddd H:mm' 7924 }, 7925 meridiemParse: /de|du/i, 7926 isPM: function (input) { 7927 return input.charAt(1).toLowerCase() === 'u'; 7928 }, 7929 meridiem: function (hours, minutes, isLower) { 7930 if (hours < 12) { 7931 return isLower === true ? 'de' : 'DE'; 7932 } else { 7933 return isLower === true ? 'du' : 'DU'; 7934 } 7935 }, 7936 calendar: { 7937 sameDay: '[ma] LT[-kor]', 7938 nextDay: '[holnap] LT[-kor]', 7939 nextWeek: function () { 7940 return week.call(this, true); 7941 }, 7942 lastDay: '[tegnap] LT[-kor]', 7943 lastWeek: function () { 7944 return week.call(this, false); 7945 }, 7946 sameElse: 'L' 7947 }, 7948 relativeTime: { 7949 future: '%s múlva', 7950 past: '%s', 7951 s: translate, 7952 ss: translate, 7953 m: translate, 7954 mm: translate, 7955 h: translate, 7956 hh: translate, 7957 d: translate, 7958 dd: translate, 7959 M: translate, 7960 MM: translate, 7961 y: translate, 7962 yy: translate 7963 }, 7964 dayOfMonthOrdinalParse: /\d{1,2}\./, 7965 ordinal: '%d.', 7966 week: { 7967 dow: 1, 7968 // Monday is the first day of the week. 7969 doy: 4 // The week that contains Jan 4th is the first week of the year. 7970 7971 } 7972 }); 7973 return hu; 7974}); 7975 7976/***/ }), 7977
vendor: 3,364 bytes, lines 7978-8081
7978/***/ "./node_modules/moment/locale/hy-am.js": 7979/*!*********************************************!*\ 7980 !*** ./node_modules/moment/locale/hy-am.js ***! 7981 \*********************************************/ 7982/*! no static exports found */ 7983/***/ (function(module, exports, __webpack_require__) { 7984 7985//! moment.js locale configuration 7986; 7987 7988(function (global, factory) { 7989 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 7990})(this, function (moment) { 7991 'use strict'; 7992 7993 var hyAm = moment.defineLocale('hy-am', { 7994 months: { 7995 format: 'Õ°Õ¸ÖÕ¶Õ¾Õ¡ÖÕ«_ÖÕ¥Õ¿ÖÕ¾Õ¡ÖÕ«_Õ´Õ¡ÖÕ¿Õ«_Õ¡ÕºÖÕ«Õ¬Õ«_Õ´Õ¡ÕµÕ«Õ½Õ«_Õ°Õ¸ÖÕ¶Õ«Õ½Õ«_Õ°Õ¸ÖÕ¬Õ«Õ½Õ«_Ö Õ£Õ¸Õ½Õ¿Õ¸Õ½Õ«_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥ÖÕ«_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥ÖÕ«_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥ÖÕ«_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥ÖÕ«'.split('_'), 7996 standalone: 'Õ°Õ¸ÖÕ¶Õ¾Õ¡Ö_ÖÕ¥Õ¿ÖÕ¾Õ¡Ö_Õ´Õ¡ÖÕ¿_Õ¡ÕºÖÕ«Õ¬_Õ´Õ¡ÕµÕ«Õ½_Õ°Õ¸ÖÕ¶Õ«Õ½_Õ°Õ¸ÖÕ¬Õ«Õ½_Ö Õ£Õ¸Õ½Õ¿Õ¸Õ½_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö'.split('_') 7997 }, 7998 monthsShort: 'Õ°Õ¶Õ¾_ÖÕ¿Ö_Õ´ÖÕ¿_Õ¡ÕºÖ_Õ´ÕµÕ½_Õ°Õ¶Õ½_Õ°Õ¬Õ½_Ö Õ£Õ½_Õ½ÕºÕ¿_Õ°Õ¯Õ¿_Õ¶Õ´Õ¢_Õ¤Õ¯Õ¿'.split('_'), 7999 weekdays: 'Õ¯Õ«ÖÕ¡Õ¯Õ«_Õ¥ÖÕ¯Õ¸ÖÕ·Õ¡Õ¢Õ©Õ«_Õ¥ÖÕ¥ÖÕ·Õ¡Õ¢Õ©Õ«_Õ¹Õ¸ÖÕ¥ÖÕ·Õ¡Õ¢Õ©Õ«_Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«_Õ¸ÖÖÕ¢Õ¡Õ©_Õ·Õ¡Õ¢Õ¡Õ©'.split('_'), 8000 weekdaysShort: 'Õ¯ÖÕ¯_Õ¥ÖÕ¯_Õ¥ÖÖ_Õ¹ÖÖ_Õ°Õ¶Õ£_Õ¸ÖÖÕ¢_Õ·Õ¢Õ©'.split('_'), 8001 weekdaysMin: 'Õ¯ÖÕ¯_Õ¥ÖÕ¯_Õ¥ÖÖ_Õ¹ÖÖ_Õ°Õ¶Õ£_Õ¸ÖÖÕ¢_Õ·Õ¢Õ©'.split('_'), 8002 longDateFormat: { 8003 LT: 'HH:mm', 8004 LTS: 'HH:mm:ss', 8005 L: 'DD.MM.YYYY', 8006 LL: 'D MMMM YYYY Õ©.', 8007 LLL: 'D MMMM YYYY Õ©., HH:mm', 8008 LLLL: 'dddd, D MMMM YYYY Õ©., HH:mm' 8009 }, 8010 calendar: { 8011 sameDay: '[Õ¡ÕµÕ½Ö Ö] LT', 8012 nextDay: '[Õ¾Õ¡Õ²Õ¨] LT', 8013 lastDay: '[Õ¥ÖÕ¥Õ¯] LT', 8014 nextWeek: function () { 8015 return 'dddd [Ö ÖÕ¨ ÕªÕ¡Õ´Õ¨] LT'; 8016 }, 8017 lastWeek: function () { 8018 return '[Õ¡Õ¶ÖÕ¡Õ®] dddd [Ö ÖÕ¨ ÕªÕ¡Õ´Õ¨] LT'; 8019 }, 8020 sameElse: 'L' 8021 }, 8022 relativeTime: { 8023 future: '%s Õ°Õ¥Õ¿Õ¸', 8024 past: '%s Õ¡Õ¼Õ¡Õ»', 8025 s: 'Õ´Õ« ÖÕ¡Õ¶Õ« Õ¾Õ¡ÕµÖÕ¯ÕµÕ¡Õ¶', 8026 ss: '%d Õ¾Õ¡ÕµÖÕ¯ÕµÕ¡Õ¶', 8027 m: 'ÖÕ¸ÕºÕ¥', 8028 mm: '%d ÖÕ¸ÕºÕ¥', 8029 h: 'ÕªÕ¡Õ´', 8030 hh: '%d ÕªÕ¡Õ´', 8031 d: 'Ö Ö', 8032 dd: '%d Ö Ö', 8033 M: 'Õ¡Õ´Õ«Õ½', 8034 MM: '%d Õ¡Õ´Õ«Õ½', 8035 y: 'Õ¿Õ¡ÖÕ«', 8036 yy: '%d Õ¿Õ¡ÖÕ«' 8037 }, 8038 meridiemParse: /Õ£Õ«Õ·Õ¥ÖÕ¾Õ¡|Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡|ÖÕ¥ÖÕ¥Õ¯Õ¾Õ¡|Õ¥ÖÕ¥Õ¯Õ¸ÕµÕ¡Õ¶/, 8039 isPM: function (input) { 8040 return /^(ÖÕ¥ÖÕ¥Õ¯Õ¾Õ¡|Õ¥ÖÕ¥Õ¯Õ¸ÕµÕ¡Õ¶)$/.test(input); 8041 }, 8042 meridiem: function (hour) { 8043 if (hour < 4) { 8044 return 'Õ£Õ«Õ·Õ¥ÖÕ¾Õ¡'; 8045 } else if (hour < 12) { 8046 return 'Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡'; 8047 } else if (hour < 17) { 8048 return 'ÖÕ¥ÖÕ¥Õ¯Õ¾Õ¡'; 8049 } else { 8050 return 'Õ¥ÖÕ¥Õ¯Õ¸ÕµÕ¡Õ¶'; 8051 } 8052 }, 8053 dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(Õ«Õ¶|ÖÕ¤)/, 8054 ordinal: function (number, period) { 8055 switch (period) { 8056 case 'DDD': 8057 case 'w': 8058 case 'W': 8059 case 'DDDo': 8060 if (number === 1) { 8061 return number + '-Õ«Õ¶'; 8062 } 8063 8064 return number + '-ÖÕ¤'; 8065 8066 default: 8067 return number; 8068 } 8069 }, 8070 week: { 8071 dow: 1, 8072 // Monday is the first day of the week. 8073 doy: 7 // The week that contains Jan 7th is the first week of the year. 8074 8075 } 8076 }); 8077 return hyAm; 8078}); 8079 8080/***/ }), 8081
vendor: 2,515 bytes, lines 8082-8171
8082/***/ "./node_modules/moment/locale/id.js": 8083/*!******************************************!*\ 8084 !*** ./node_modules/moment/locale/id.js ***! 8085 \******************************************/ 8086/*! no static exports found */ 8087/***/ (function(module, exports, __webpack_require__) { 8088 8089//! moment.js locale configuration 8090; 8091 8092(function (global, factory) { 8093 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 8094})(this, function (moment) { 8095 'use strict'; 8096 8097 var id = moment.defineLocale('id', { 8098 months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'), 8099 monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'), 8100 weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), 8101 weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), 8102 weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), 8103 longDateFormat: { 8104 LT: 'HH.mm', 8105 LTS: 'HH.mm.ss', 8106 L: 'DD/MM/YYYY', 8107 LL: 'D MMMM YYYY', 8108 LLL: 'D MMMM YYYY [pukul] HH.mm', 8109 LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm' 8110 }, 8111 meridiemParse: /pagi|siang|sore|malam/, 8112 meridiemHour: function (hour, meridiem) { 8113 if (hour === 12) { 8114 hour = 0; 8115 } 8116 8117 if (meridiem === 'pagi') { 8118 return hour; 8119 } else if (meridiem === 'siang') { 8120 return hour >= 11 ? hour : hour + 12; 8121 } else if (meridiem === 'sore' || meridiem === 'malam') { 8122 return hour + 12; 8123 } 8124 }, 8125 meridiem: function (hours, minutes, isLower) { 8126 if (hours < 11) { 8127 return 'pagi'; 8128 } else if (hours < 15) { 8129 return 'siang'; 8130 } else if (hours < 19) { 8131 return 'sore'; 8132 } else { 8133 return 'malam'; 8134 } 8135 }, 8136 calendar: { 8137 sameDay: '[Hari ini pukul] LT', 8138 nextDay: '[Besok pukul] LT', 8139 nextWeek: 'dddd [pukul] LT', 8140 lastDay: '[Kemarin pukul] LT', 8141 lastWeek: 'dddd [lalu pukul] LT', 8142 sameElse: 'L' 8143 }, 8144 relativeTime: { 8145 future: 'dalam %s', 8146 past: '%s yang lalu', 8147 s: 'beberapa detik', 8148 ss: '%d detik', 8149 m: 'semenit', 8150 mm: '%d menit', 8151 h: 'sejam', 8152 hh: '%d jam', 8153 d: 'sehari', 8154 dd: '%d hari', 8155 M: 'sebulan', 8156 MM: '%d bulan', 8157 y: 'setahun', 8158 yy: '%d tahun' 8159 }, 8160 week: { 8161 dow: 1, 8162 // Monday is the first day of the week. 8163 doy: 7 // The week that contains Jan 7th is the first week of the year. 8164 8165 } 8166 }); 8167 return id; 8168}); 8169 8170/***/ }), 8171
vendor: 4,257 bytes, lines 8172-8333
8172/***/ "./node_modules/moment/locale/is.js": 8173/*!******************************************!*\ 8174 !*** ./node_modules/moment/locale/is.js ***! 8175 \******************************************/ 8176/*! no static exports found */ 8177/***/ (function(module, exports, __webpack_require__) { 8178 8179//! moment.js locale configuration 8180; 8181 8182(function (global, factory) { 8183 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 8184})(this, function (moment) { 8185 'use strict'; 8186 8187 function plural(n) { 8188 if (n % 100 === 11) { 8189 return true; 8190 } else if (n % 10 === 1) { 8191 return false; 8192 } 8193 8194 return true; 8195 } 8196 8197 function translate(number, withoutSuffix, key, isFuture) { 8198 var result = number + ' '; 8199 8200 switch (key) { 8201 case 's': 8202 return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum'; 8203 8204 case 'ss': 8205 if (plural(number)) { 8206 return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum'); 8207 } 8208 8209 return result + 'sekúnda'; 8210 8211 case 'm': 8212 return withoutSuffix ? 'mÃnúta' : 'mÃnútu'; 8213 8214 case 'mm': 8215 if (plural(number)) { 8216 return result + (withoutSuffix || isFuture ? 'mÃnútur' : 'mÃnútum'); 8217 } else if (withoutSuffix) { 8218 return result + 'mÃnúta'; 8219 } 8220 8221 return result + 'mÃnútu'; 8222 8223 case 'hh': 8224 if (plural(number)) { 8225 return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum'); 8226 } 8227 8228 return result + 'klukkustund'; 8229 8230 case 'd': 8231 if (withoutSuffix) { 8232 return 'dagur'; 8233 } 8234 8235 return isFuture ? 'dag' : 'degi'; 8236 8237 case 'dd': 8238 if (plural(number)) { 8239 if (withoutSuffix) { 8240 return result + 'dagar'; 8241 } 8242 8243 return result + (isFuture ? 'daga' : 'dögum'); 8244 } else if (withoutSuffix) { 8245 return result + 'dagur'; 8246 } 8247 8248 return result + (isFuture ? 'dag' : 'degi'); 8249 8250 case 'M': 8251 if (withoutSuffix) { 8252 return 'mánuður'; 8253 } 8254 8255 return isFuture ? 'mánuð' : 'mánuði'; 8256 8257 case 'MM': 8258 if (plural(number)) { 8259 if (withoutSuffix) { 8260 return result + 'mánuðir'; 8261 } 8262 8263 return result + (isFuture ? 'mánuði' : 'mánuðum'); 8264 } else if (withoutSuffix) { 8265 return result + 'mánuður'; 8266 } 8267 8268 return result + (isFuture ? 'mánuð' : 'mánuði'); 8269 8270 case 'y': 8271 return withoutSuffix || isFuture ? 'ár' : 'ári'; 8272 8273 case 'yy': 8274 if (plural(number)) { 8275 return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); 8276 } 8277 8278 return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); 8279 } 8280 } 8281 8282 var is = moment.defineLocale('is', { 8283 months: 'janúar_febrúar_mars_aprÃl_maÃ_júnÃ_júlÃ_ágúst_september_október_nóvember_desember'.split('_'), 8284 monthsShort: 'jan_feb_mar_apr_maÃ_jún_júl_ágú_sep_okt_nóv_des'.split('_'), 8285 weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'), 8286 weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'), 8287 weekdaysMin: 'Su_Má_Ãr_Mi_Fi_Fö_La'.split('_'), 8288 longDateFormat: { 8289 LT: 'H:mm', 8290 LTS: 'H:mm:ss', 8291 L: 'DD.MM.YYYY', 8292 LL: 'D. MMMM YYYY', 8293 LLL: 'D. MMMM YYYY [kl.] H:mm', 8294 LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm' 8295 }, 8296 calendar: { 8297 sameDay: '[à dag kl.] LT', 8298 nextDay: '[á morgun kl.] LT', 8299 nextWeek: 'dddd [kl.] LT', 8300 lastDay: '[à gær kl.] LT', 8301 lastWeek: '[sÃðasta] dddd [kl.] LT', 8302 sameElse: 'L' 8303 }, 8304 relativeTime: { 8305 future: 'eftir %s', 8306 past: 'fyrir %s sÃðan', 8307 s: translate, 8308 ss: translate, 8309 m: translate, 8310 mm: translate, 8311 h: 'klukkustund', 8312 hh: translate, 8313 d: translate, 8314 dd: translate, 8315 M: translate, 8316 MM: translate, 8317 y: translate, 8318 yy: translate 8319 }, 8320 dayOfMonthOrdinalParse: /\d{1,2}\./, 8321 ordinal: '%d.', 8322 week: { 8323 dow: 1, 8324 // Monday is the first day of the week. 8325 doy: 4 // The week that contains Jan 4th is the first week of the year. 8326 8327 } 8328 }); 8329 return is; 8330}); 8331 8332/***/ }), 8333
vendor: 2,199 bytes, lines 8334-8410
8334/***/ "./node_modules/moment/locale/it-ch.js": 8335/*!*********************************************!*\ 8336 !*** ./node_modules/moment/locale/it-ch.js ***! 8337 \*********************************************/ 8338/*! no static exports found */ 8339/***/ (function(module, exports, __webpack_require__) { 8340 8341//! moment.js locale configuration 8342; 8343 8344(function (global, factory) { 8345 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 8346})(this, function (moment) { 8347 'use strict'; 8348 8349 var itCh = moment.defineLocale('it-ch', { 8350 months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'), 8351 monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), 8352 weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'), 8353 weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), 8354 weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), 8355 longDateFormat: { 8356 LT: 'HH:mm', 8357 LTS: 'HH:mm:ss', 8358 L: 'DD.MM.YYYY', 8359 LL: 'D MMMM YYYY', 8360 LLL: 'D MMMM YYYY HH:mm', 8361 LLLL: 'dddd D MMMM YYYY HH:mm' 8362 }, 8363 calendar: { 8364 sameDay: '[Oggi alle] LT', 8365 nextDay: '[Domani alle] LT', 8366 nextWeek: 'dddd [alle] LT', 8367 lastDay: '[Ieri alle] LT', 8368 lastWeek: function () { 8369 switch (this.day()) { 8370 case 0: 8371 return '[la scorsa] dddd [alle] LT'; 8372 8373 default: 8374 return '[lo scorso] dddd [alle] LT'; 8375 } 8376 }, 8377 sameElse: 'L' 8378 }, 8379 relativeTime: { 8380 future: function (s) { 8381 return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s; 8382 }, 8383 past: '%s fa', 8384 s: 'alcuni secondi', 8385 ss: '%d secondi', 8386 m: 'un minuto', 8387 mm: '%d minuti', 8388 h: 'un\'ora', 8389 hh: '%d ore', 8390 d: 'un giorno', 8391 dd: '%d giorni', 8392 M: 'un mese', 8393 MM: '%d mesi', 8394 y: 'un anno', 8395 yy: '%d anni' 8396 }, 8397 dayOfMonthOrdinalParse: /\d{1,2}º/, 8398 ordinal: '%dº', 8399 week: { 8400 dow: 1, 8401 // Monday is the first day of the week. 8402 doy: 4 // The week that contains Jan 4th is the first week of the year. 8403 8404 } 8405 }); 8406 return itCh; 8407}); 8408 8409/***/ }), 8410
vendor: 2,180 bytes, lines 8411-8487
8411/***/ "./node_modules/moment/locale/it.js": 8412/*!******************************************!*\ 8413 !*** ./node_modules/moment/locale/it.js ***! 8414 \******************************************/ 8415/*! no static exports found */ 8416/***/ (function(module, exports, __webpack_require__) { 8417 8418//! moment.js locale configuration 8419; 8420 8421(function (global, factory) { 8422 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 8423})(this, function (moment) { 8424 'use strict'; 8425 8426 var it = moment.defineLocale('it', { 8427 months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'), 8428 monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), 8429 weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'), 8430 weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), 8431 weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), 8432 longDateFormat: { 8433 LT: 'HH:mm', 8434 LTS: 'HH:mm:ss', 8435 L: 'DD/MM/YYYY', 8436 LL: 'D MMMM YYYY', 8437 LLL: 'D MMMM YYYY HH:mm', 8438 LLLL: 'dddd D MMMM YYYY HH:mm' 8439 }, 8440 calendar: { 8441 sameDay: '[Oggi alle] LT', 8442 nextDay: '[Domani alle] LT', 8443 nextWeek: 'dddd [alle] LT', 8444 lastDay: '[Ieri alle] LT', 8445 lastWeek: function () { 8446 switch (this.day()) { 8447 case 0: 8448 return '[la scorsa] dddd [alle] LT'; 8449 8450 default: 8451 return '[lo scorso] dddd [alle] LT'; 8452 } 8453 }, 8454 sameElse: 'L' 8455 }, 8456 relativeTime: { 8457 future: function (s) { 8458 return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s; 8459 }, 8460 past: '%s fa', 8461 s: 'alcuni secondi', 8462 ss: '%d secondi', 8463 m: 'un minuto', 8464 mm: '%d minuti', 8465 h: 'un\'ora', 8466 hh: '%d ore', 8467 d: 'un giorno', 8468 dd: '%d giorni', 8469 M: 'un mese', 8470 MM: '%d mesi', 8471 y: 'un anno', 8472 yy: '%d anni' 8473 }, 8474 dayOfMonthOrdinalParse: /\d{1,2}º/, 8475 ordinal: '%dº', 8476 week: { 8477 dow: 1, 8478 // Monday is the first day of the week. 8479 doy: 4 // The week that contains Jan 4th is the first week of the year. 8480 8481 } 8482 }); 8483 return it; 8484}); 8485 8486/***/ }), 8487
vendor: 2,615 bytes, lines 8488-8585
8488/***/ "./node_modules/moment/locale/ja.js": 8489/*!******************************************!*\ 8490 !*** ./node_modules/moment/locale/ja.js ***! 8491 \******************************************/ 8492/*! no static exports found */ 8493/***/ (function(module, exports, __webpack_require__) { 8494 8495//! moment.js locale configuration 8496; 8497 8498(function (global, factory) { 8499 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 8500})(this, function (moment) { 8501 'use strict'; 8502 8503 var ja = moment.defineLocale('ja', { 8504 months: '䏿_äºæ_䏿_åæ_äºæ_å æ_䏿_å «æ_乿_åæ_å䏿_åäºæ'.split('_'), 8505 monthsShort: '1æ_2æ_3æ_4æ_5æ_6æ_7æ_8æ_9æ_10æ_11æ_12æ'.split('_'), 8506 weekdays: 'æ¥ææ¥_æææ¥_ç«ææ¥_æ°´ææ¥_æ¨ææ¥_éææ¥_åææ¥'.split('_'), 8507 weekdaysShort: 'æ¥_æ_ç«_æ°´_æ¨_é_å'.split('_'), 8508 weekdaysMin: 'æ¥_æ_ç«_æ°´_æ¨_é_å'.split('_'), 8509 longDateFormat: { 8510 LT: 'HH:mm', 8511 LTS: 'HH:mm:ss', 8512 L: 'YYYY/MM/DD', 8513 LL: 'YYYYå¹´MæDæ¥', 8514 LLL: 'YYYYå¹´MæDæ¥ HH:mm', 8515 LLLL: 'YYYYå¹´MæDæ¥ dddd HH:mm', 8516 l: 'YYYY/MM/DD', 8517 ll: 'YYYYå¹´MæDæ¥', 8518 lll: 'YYYYå¹´MæDæ¥ HH:mm', 8519 llll: 'YYYYå¹´MæDæ¥(ddd) HH:mm' 8520 }, 8521 meridiemParse: /åå|åå¾/i, 8522 isPM: function (input) { 8523 return input === 'åå¾'; 8524 }, 8525 meridiem: function (hour, minute, isLower) { 8526 if (hour < 12) { 8527 return 'åå'; 8528 } else { 8529 return 'åå¾'; 8530 } 8531 }, 8532 calendar: { 8533 sameDay: '[仿¥] LT', 8534 nextDay: '[ææ¥] LT', 8535 nextWeek: function (now) { 8536 if (now.week() < this.week()) { 8537 return '[æ¥é±]dddd LT'; 8538 } else { 8539 return 'dddd LT'; 8540 } 8541 }, 8542 lastDay: '[æ¨æ¥] LT', 8543 lastWeek: function (now) { 8544 if (this.week() < now.week()) { 8545 return '[å é±]dddd LT'; 8546 } else { 8547 return 'dddd LT'; 8548 } 8549 }, 8550 sameElse: 'L' 8551 }, 8552 dayOfMonthOrdinalParse: /\d{1,2}æ¥/, 8553 ordinal: function (number, period) { 8554 switch (period) { 8555 case 'd': 8556 case 'D': 8557 case 'DDD': 8558 return number + 'æ¥'; 8559 8560 default: 8561 return number; 8562 } 8563 }, 8564 relativeTime: { 8565 future: '%så¾', 8566 past: '%så', 8567 s: 'æ°ç§', 8568 ss: '%dç§', 8569 m: '1å', 8570 mm: '%då', 8571 h: '1æé', 8572 hh: '%dæé', 8573 d: '1æ¥', 8574 dd: '%dæ¥', 8575 M: '1ã¶æ', 8576 MM: '%dã¶æ', 8577 y: '1å¹´', 8578 yy: '%då¹´' 8579 } 8580 }); 8581 return ja; 8582}); 8583 8584/***/ }), 8585
vendor: 2,580 bytes, lines 8586-8675
8586/***/ "./node_modules/moment/locale/jv.js": 8587/*!******************************************!*\ 8588 !*** ./node_modules/moment/locale/jv.js ***! 8589 \******************************************/ 8590/*! no static exports found */ 8591/***/ (function(module, exports, __webpack_require__) { 8592 8593//! moment.js locale configuration 8594; 8595 8596(function (global, factory) { 8597 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 8598})(this, function (moment) { 8599 'use strict'; 8600 8601 var jv = moment.defineLocale('jv', { 8602 months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'), 8603 monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), 8604 weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), 8605 weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), 8606 weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), 8607 longDateFormat: { 8608 LT: 'HH.mm', 8609 LTS: 'HH.mm.ss', 8610 L: 'DD/MM/YYYY', 8611 LL: 'D MMMM YYYY', 8612 LLL: 'D MMMM YYYY [pukul] HH.mm', 8613 LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm' 8614 }, 8615 meridiemParse: /enjing|siyang|sonten|ndalu/, 8616 meridiemHour: function (hour, meridiem) { 8617 if (hour === 12) { 8618 hour = 0; 8619 } 8620 8621 if (meridiem === 'enjing') { 8622 return hour; 8623 } else if (meridiem === 'siyang') { 8624 return hour >= 11 ? hour : hour + 12; 8625 } else if (meridiem === 'sonten' || meridiem === 'ndalu') { 8626 return hour + 12; 8627 } 8628 }, 8629 meridiem: function (hours, minutes, isLower) { 8630 if (hours < 11) { 8631 return 'enjing'; 8632 } else if (hours < 15) { 8633 return 'siyang'; 8634 } else if (hours < 19) { 8635 return 'sonten'; 8636 } else { 8637 return 'ndalu'; 8638 } 8639 }, 8640 calendar: { 8641 sameDay: '[Dinten puniko pukul] LT', 8642 nextDay: '[Mbenjang pukul] LT', 8643 nextWeek: 'dddd [pukul] LT', 8644 lastDay: '[Kala wingi pukul] LT', 8645 lastWeek: 'dddd [kepengker pukul] LT', 8646 sameElse: 'L' 8647 }, 8648 relativeTime: { 8649 future: 'wonten ing %s', 8650 past: '%s ingkang kepengker', 8651 s: 'sawetawis detik', 8652 ss: '%d detik', 8653 m: 'setunggal menit', 8654 mm: '%d menit', 8655 h: 'setunggal jam', 8656 hh: '%d jam', 8657 d: 'sedinten', 8658 dd: '%d dinten', 8659 M: 'sewulan', 8660 MM: '%d wulan', 8661 y: 'setaun', 8662 yy: '%d taun' 8663 }, 8664 week: { 8665 dow: 1, 8666 // Monday is the first day of the week. 8667 doy: 7 // The week that contains Jan 7th is the first week of the year. 8668 8669 } 8670 }); 8671 return jv; 8672}); 8673 8674/***/ }), 8675
vendor: 3,788 bytes, lines 8676-8771
8676/***/ "./node_modules/moment/locale/ka.js": 8677/*!******************************************!*\ 8678 !*** ./node_modules/moment/locale/ka.js ***! 8679 \******************************************/ 8680/*! no static exports found */ 8681/***/ (function(module, exports, __webpack_require__) { 8682 8683//! moment.js locale configuration 8684; 8685 8686(function (global, factory) { 8687 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 8688})(this, function (moment) { 8689 'use strict'; 8690 8691 var ka = moment.defineLocale('ka', { 8692 months: { 8693 standalone: 'áááááá á_ááááá áááá_ááá á¢á_ááá ááá_áááá¡á_ááááá¡á_ááááá¡á_ááááá¡á¢á_á¡áá¥á¢ááááá á_áá¥á¢ááááá á_ááááááá á_áááááááá á'.split('_'), 8694 format: 'áááááá á¡_ááááá áááá¡_ááá á¢á¡_ááá áááá¡_áááá¡á¡_ááááá¡á¡_ááááá¡á¡_ááááá¡á¢á¡_á¡áá¥á¢ááááá á¡_áá¥á¢ááááá á¡_ááááááá á¡_áááááááá á¡'.split('_') 8695 }, 8696 monthsShort: 'ááá_ááá_ááá _ááá _ááá_ááá_ááá_ááá_á¡áá¥_áá¥á¢_ááá_ááá'.split('_'), 8697 weekdays: { 8698 standalone: 'áááá á_áá á¨ááááá_á¡ááá¨ááááá_ááá®á¨ááááá_á®á£áá¨ááááá_ááá áá¡áááá_á¨ááááá'.split('_'), 8699 format: 'áááá áá¡_áá á¨ááááá¡_á¡ááá¨ááááá¡_ááá®á¨ááááá¡_á®á£áá¨ááááá¡_ááá áá¡áááá¡_á¨ááááá¡'.split('_'), 8700 isFormat: /(á¬ááá|á¨ááááá)/ 8701 }, 8702 weekdaysShort: 'ááá_áá á¨_á¡áá_ááá®_á®á£á_ááá _á¨áá'.split('_'), 8703 weekdaysMin: 'áá_áá _á¡á_áá_á®á£_áá_á¨á'.split('_'), 8704 longDateFormat: { 8705 LT: 'h:mm A', 8706 LTS: 'h:mm:ss A', 8707 L: 'DD/MM/YYYY', 8708 LL: 'D MMMM YYYY', 8709 LLL: 'D MMMM YYYY h:mm A', 8710 LLLL: 'dddd, D MMMM YYYY h:mm A' 8711 }, 8712 calendar: { 8713 sameDay: '[áá¦áá¡] LT[-áá]', 8714 nextDay: '[á®ááá] LT[-áá]', 8715 lastDay: '[áá£á¨áá] LT[-áá]', 8716 nextWeek: '[á¨ááááá] dddd LT[-áá]', 8717 lastWeek: '[á¬ááá] dddd LT-áá', 8718 sameElse: 'L' 8719 }, 8720 relativeTime: { 8721 future: function (s) { 8722 return /(á¬ááá|á¬á£áá|á¡áááá|á¬ááá)/.test(s) ? s.replace(/á$/, 'á¨á') : s + 'á¨á'; 8723 }, 8724 past: function (s) { 8725 if (/(á¬ááá|á¬á£áá|á¡áááá|áá¦á|ááá)/.test(s)) { 8726 return s.replace(/(á|á)$/, 'áá¡ á¬áá'); 8727 } 8728 8729 if (/á¬ááá/.test(s)) { 8730 return s.replace(/á¬ááá$/, 'á¬ááá¡ á¬áá'); 8731 } 8732 }, 8733 s: 'á áááááááá á¬ááá', 8734 ss: '%d á¬ááá', 8735 m: 'á¬á£áá', 8736 mm: '%d á¬á£áá', 8737 h: 'á¡áááá', 8738 hh: '%d á¡áááá', 8739 d: 'áá¦á', 8740 dd: '%d áá¦á', 8741 M: 'ááá', 8742 MM: '%d ááá', 8743 y: 'á¬ááá', 8744 yy: '%d á¬ááá' 8745 }, 8746 dayOfMonthOrdinalParse: /0|1-áá|áá-\d{1,2}|\d{1,2}-á/, 8747 ordinal: function (number) { 8748 if (number === 0) { 8749 return number; 8750 } 8751 8752 if (number === 1) { 8753 return number + '-áá'; 8754 } 8755 8756 if (number < 20 || number <= 100 && number % 20 === 0 || number % 100 === 0) { 8757 return 'áá-' + number; 8758 } 8759 8760 return number + '-á'; 8761 }, 8762 week: { 8763 dow: 1, 8764 doy: 7 8765 } 8766 }); 8767 return ka; 8768}); 8769 8770/***/ }), 8771
vendor: 2,773 bytes, lines 8772-8864
8772/***/ "./node_modules/moment/locale/kk.js": 8773/*!******************************************!*\ 8774 !*** ./node_modules/moment/locale/kk.js ***! 8775 \******************************************/ 8776/*! no static exports found */ 8777/***/ (function(module, exports, __webpack_require__) { 8778 8779//! moment.js locale configuration 8780; 8781 8782(function (global, factory) { 8783 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 8784})(this, function (moment) { 8785 'use strict'; 8786 8787 var suffixes = { 8788 0: '-ÑÑ', 8789 1: '-ÑÑ', 8790 2: '-ÑÑ', 8791 3: '-ÑÑ', 8792 4: '-ÑÑ', 8793 5: '-ÑÑ', 8794 6: '-ÑÑ', 8795 7: '-ÑÑ', 8796 8: '-ÑÑ', 8797 9: '-ÑÑ', 8798 10: '-ÑÑ', 8799 20: '-ÑÑ', 8800 30: '-ÑÑ', 8801 40: '-ÑÑ', 8802 50: '-ÑÑ', 8803 60: '-ÑÑ', 8804 70: '-ÑÑ', 8805 80: '-ÑÑ', 8806 90: '-ÑÑ', 8807 100: '-ÑÑ' 8808 }; 8809 var kk = moment.defineLocale('kk', { 8810 months: 'ÒаңÑаÑ_аÒпан_наÑÑÑз_ÑÓÑÑÑ_мамÑÑ_маÑÑÑм_ÑÑлде_ÑамÑз_ÒÑÑкүйек_Òазан_ÒаÑаÑа_желÑоÒÑан'.split('_'), 8811 monthsShort: 'Òаң_аÒп_наÑ_ÑÓÑ_мам_маÑ_ÑÑл_Ñам_ÒÑÑ_Òаз_ÒаÑ_жел'.split('_'), 8812 weekdays: 'жекÑенбÑ_дүйÑенбÑ_ÑейÑенбÑ_ÑÓÑÑенбÑ_бейÑенбÑ_жұма_ÑенбÑ'.split('_'), 8813 weekdaysShort: 'жек_дүй_Ñей_ÑÓÑ_бей_жұм_Ñен'.split('_'), 8814 weekdaysMin: 'жк_дй_Ñй_ÑÑ_бй_жм_Ñн'.split('_'), 8815 longDateFormat: { 8816 LT: 'HH:mm', 8817 LTS: 'HH:mm:ss', 8818 L: 'DD.MM.YYYY', 8819 LL: 'D MMMM YYYY', 8820 LLL: 'D MMMM YYYY HH:mm', 8821 LLLL: 'dddd, D MMMM YYYY HH:mm' 8822 }, 8823 calendar: { 8824 sameDay: '[ÐүгÑн ÑаÒаÑ] LT', 8825 nextDay: '[ÐÑÑең ÑаÒаÑ] LT', 8826 nextWeek: 'dddd [ÑаÒаÑ] LT', 8827 lastDay: '[ÐеÑе ÑаÒаÑ] LT', 8828 lastWeek: '[Ó¨Ñкен апÑанÑÒ£] dddd [ÑаÒаÑ] LT', 8829 sameElse: 'L' 8830 }, 8831 relativeTime: { 8832 future: '%s ÑÑÑнде', 8833 past: '%s бұÑÑн', 8834 s: 'бÑÑнеÑе ÑекÑнд', 8835 ss: '%d ÑекÑнд', 8836 m: 'бÑÑ Ð¼Ð¸Ð½ÑÑ', 8837 mm: '%d минÑÑ', 8838 h: 'бÑÑ ÑаÒаÑ', 8839 hh: '%d ÑаÒаÑ', 8840 d: 'бÑÑ ÐºÒ¯Ð½', 8841 dd: '%d күн', 8842 M: 'бÑÑ Ð°Ð¹', 8843 MM: '%d ай', 8844 y: 'бÑÑ Ð¶Ñл', 8845 yy: '%d жÑл' 8846 }, 8847 dayOfMonthOrdinalParse: /\d{1,2}-(ÑÑ|ÑÑ)/, 8848 ordinal: function (number) { 8849 var a = number % 10, 8850 b = number >= 100 ? 100 : null; 8851 return number + (suffixes[number] || suffixes[a] || suffixes[b]); 8852 }, 8853 week: { 8854 dow: 1, 8855 // Monday is the first day of the week. 8856 doy: 7 // The week that contains Jan 7th is the first week of the year. 8857 8858 } 8859 }); 8860 return kk; 8861}); 8862 8863/***/ }), 8864
vendor: 3,537 bytes, lines 8865-8977
8865/***/ "./node_modules/moment/locale/km.js": 8866/*!******************************************!*\ 8867 !*** ./node_modules/moment/locale/km.js ***! 8868 \******************************************/ 8869/*! no static exports found */ 8870/***/ (function(module, exports, __webpack_require__) { 8871 8872//! moment.js locale configuration 8873; 8874 8875(function (global, factory) { 8876 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 8877})(this, function (moment) { 8878 'use strict'; 8879 8880 var symbolMap = { 8881 '1': 'á¡', 8882 '2': 'á¢', 8883 '3': 'á£', 8884 '4': 'á¤', 8885 '5': 'á¥', 8886 '6': 'á¦', 8887 '7': 'á§', 8888 '8': 'á¨', 8889 '9': 'á©', 8890 '0': 'á ' 8891 }, 8892 numberMap = { 8893 'á¡': '1', 8894 'á¢': '2', 8895 'á£': '3', 8896 'á¤': '4', 8897 'á¥': '5', 8898 'á¦': '6', 8899 'á§': '7', 8900 'á¨': '8', 8901 'á©': '9', 8902 'á ': '0' 8903 }; 8904 var km = moment.defineLocale('km', { 8905 months: 'áááá¶_áá»áááá_áá¸áá¶_áááá¶_á§ááá¶_áá·áá»áá¶_áááááá¶_áá¸á á¶_ááááá¶_áá»áá¶_áá·á ááá·áá¶_áááá¼'.split('_'), 8906 monthsShort: 'áááá¶_áá»áááá_áá¸áá¶_áááá¶_á§ááá¶_áá·áá»áá¶_áááááá¶_áá¸á á¶_ááááá¶_áá»áá¶_áá·á ááá·áá¶_áááá¼'.split('_'), 8907 weekdays: 'á¢á¶áá·ááá_á áááá_á¢áááá¶á_áá»á_áááá ááááá·á_áá»ááá_áá áá'.split('_'), 8908 weekdaysShort: 'á¢á¶_á _á¢_á_ááá_áá»_á'.split('_'), 8909 weekdaysMin: 'á¢á¶_á _á¢_á_ááá_áá»_á'.split('_'), 8910 weekdaysParseExact: true, 8911 longDateFormat: { 8912 LT: 'HH:mm', 8913 LTS: 'HH:mm:ss', 8914 L: 'DD/MM/YYYY', 8915 LL: 'D MMMM YYYY', 8916 LLL: 'D MMMM YYYY HH:mm', 8917 LLLL: 'dddd, D MMMM YYYY HH:mm' 8918 }, 8919 meridiemParse: /áááá¹á|áááá¶á /, 8920 isPM: function (input) { 8921 return input === 'áááá¶á '; 8922 }, 8923 meridiem: function (hour, minute, isLower) { 8924 if (hour < 12) { 8925 return 'áááá¹á'; 8926 } else { 8927 return 'áááá¶á '; 8928 } 8929 }, 8930 calendar: { 8931 sameDay: '[ááááááá áááá] LT', 8932 nextDay: '[ááá¢áá áááá] LT', 8933 nextWeek: 'dddd [áááá] LT', 8934 lastDay: '[áááá·ááá·á áááá] LT', 8935 lastWeek: 'dddd [ááááá¶á ááá»á] [áááá] LT', 8936 sameElse: 'L' 8937 }, 8938 relativeTime: { 8939 future: '%sááá', 8940 past: '%sáá»á', 8941 s: 'ááá»áááá¶ááá·áá¶áá¸', 8942 ss: '%d áá·áá¶áá¸', 8943 m: 'áá½ááá¶áá¸', 8944 mm: '%d áá¶áá¸', 8945 h: 'áá½ááááá', 8946 hh: '%d áááá', 8947 d: 'áá½ááááá', 8948 dd: '%d áááá', 8949 M: 'áá½ááá', 8950 MM: '%d áá', 8951 y: 'áá½ááááá¶á', 8952 yy: '%d áááá¶á' 8953 }, 8954 dayOfMonthOrdinalParse: /áá¸\d{1,2}/, 8955 ordinal: 'áá¸%d', 8956 preparse: function (string) { 8957 return string.replace(/[á¡á¢á£á¤á¥á¦á§á¨á©á ]/g, function (match) { 8958 return numberMap[match]; 8959 }); 8960 }, 8961 postformat: function (string) { 8962 return string.replace(/\d/g, function (match) { 8963 return symbolMap[match]; 8964 }); 8965 }, 8966 week: { 8967 dow: 1, 8968 // Monday is the first day of the week. 8969 doy: 4 // The week that contains Jan 4th is the first week of the year. 8970 8971 } 8972 }); 8973 return km; 8974}); 8975 8976/***/ }), 8977
vendor: 4,360 bytes, lines 8978-9110
8978/***/ "./node_modules/moment/locale/kn.js": 8979/*!******************************************!*\ 8980 !*** ./node_modules/moment/locale/kn.js ***! 8981 \******************************************/ 8982/*! no static exports found */ 8983/***/ (function(module, exports, __webpack_require__) { 8984 8985//! moment.js locale configuration 8986; 8987 8988(function (global, factory) { 8989 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 8990})(this, function (moment) { 8991 'use strict'; 8992 8993 var symbolMap = { 8994 '1': 'à³§', 8995 '2': '೨', 8996 '3': '೩', 8997 '4': '೪', 8998 '5': '೫', 8999 '6': '೬', 9000 '7': 'à³', 9001 '8': 'à³®', 9002 '9': '೯', 9003 '0': '೦' 9004 }, 9005 numberMap = { 9006 'à³§': '1', 9007 '೨': '2', 9008 '೩': '3', 9009 '೪': '4', 9010 '೫': '5', 9011 '೬': '6', 9012 'à³': '7', 9013 'à³®': '8', 9014 '೯': '9', 9015 '೦': '0' 9016 }; 9017 var kn = moment.defineLocale('kn', { 9018 months: 'à²à²¨à²µà²°à²¿_ಫà³à²¬à³à²°à²µà²°à²¿_ಮಾರà³à²à³_à²à²ªà³à²°à²¿à²²à³_ಮà³à³_à²à³à²¨à³_à²à³à²²à³à³_à²à²à²¸à³à²à³_ಸà³à²ªà³à²à³à²à²¬à²°à³_ಠà²à³à²à³à³à³à²¬à²°à³_ನವà³à²à²¬à²°à³_ಡಿಸà³à²à²¬à²°à³'.split('_'), 9019 monthsShort: 'à²à²¨_ಫà³à²¬à³à²°_ಮಾರà³à²à³_à²à²ªà³à²°à²¿à²²à³_ಮà³à³_à²à³à²¨à³_à²à³à²²à³à³_à²à²à²¸à³à²à³_ಸà³à²ªà³à²à³à²_ಠà²à³à²à³à³à³_ನವà³à²_ಡಿಸà³à²'.split('_'), 9020 monthsParseExact: true, 9021 weekdays: 'à²à²¾à²¨à³à²µà²¾à²°_ಸà³à³à³à²®à²µà²¾à²°_ಮà²à²à²³à²µà²¾à²°_ಬà³à²§à²µà²¾à²°_à²à³à²°à³à²µà²¾à²°_ಶà³à²à³à²°à²µà²¾à²°_ಶನಿವಾರ'.split('_'), 9022 weekdaysShort: 'à²à²¾à²¨à³_ಸà³à³à³à²®_ಮà²à²à²³_ಬà³à²§_à²à³à²°à³_ಶà³à²à³à²°_ಶನಿ'.split('_'), 9023 weekdaysMin: 'à²à²¾_ಸà³à³à³_ಮà²_ಬà³_à²à³_ಶà³_ಶ'.split('_'), 9024 longDateFormat: { 9025 LT: 'A h:mm', 9026 LTS: 'A h:mm:ss', 9027 L: 'DD/MM/YYYY', 9028 LL: 'D MMMM YYYY', 9029 LLL: 'D MMMM YYYY, A h:mm', 9030 LLLL: 'dddd, D MMMM YYYY, A h:mm' 9031 }, 9032 calendar: { 9033 sameDay: '[à²à²à²¦à³] LT', 9034 nextDay: '[ನಾಳà³] LT', 9035 nextWeek: 'dddd, LT', 9036 lastDay: '[ನಿನà³à²¨à³] LT', 9037 lastWeek: '[à²à³à³à²¨à³à²¯] dddd, LT', 9038 sameElse: 'L' 9039 }, 9040 relativeTime: { 9041 future: '%s ನà²à²¤à²°', 9042 past: '%s ಹಿà²à²¦à³', 9043 s: 'à²à³à²²à²µà³ à²à³à²·à²£à²à²³à³', 9044 ss: '%d ಸà³à²à³à²à²¡à³à²à²³à³', 9045 m: 'à²à²à²¦à³ ನಿಮಿಷ', 9046 mm: '%d ನಿಮಿಷ', 9047 h: 'à²à²à²¦à³ à²à²à²à³', 9048 hh: '%d à²à²à²à³', 9049 d: 'à²à²à²¦à³ ದಿನ', 9050 dd: '%d ದಿನ', 9051 M: 'à²à²à²¦à³ ತಿà²à²à²³à³', 9052 MM: '%d ತಿà²à²à²³à³', 9053 y: 'à²à²à²¦à³ ವರà³à²·', 9054 yy: '%d ವರà³à²·' 9055 }, 9056 preparse: function (string) { 9057 return string.replace(/[೧೨೩೪೫೬à³à³®à³¯à³¦]/g, function (match) { 9058 return numberMap[match]; 9059 }); 9060 }, 9061 postformat: function (string) { 9062 return string.replace(/\d/g, function (match) { 9063 return symbolMap[match]; 9064 }); 9065 }, 9066 meridiemParse: /ರಾತà³à²°à²¿|ಬà³à²³à²¿à²à³à²à³|ಮಧà³à²¯à²¾à²¹à³à²¨|ಸà²à²à³/, 9067 meridiemHour: function (hour, meridiem) { 9068 if (hour === 12) { 9069 hour = 0; 9070 } 9071 9072 if (meridiem === 'ರಾತà³à²°à²¿') { 9073 return hour < 4 ? hour : hour + 12; 9074 } else if (meridiem === 'ಬà³à²³à²¿à²à³à²à³') { 9075 return hour; 9076 } else if (meridiem === 'ಮಧà³à²¯à²¾à²¹à³à²¨') { 9077 return hour >= 10 ? hour : hour + 12; 9078 } else if (meridiem === 'ಸà²à²à³') { 9079 return hour + 12; 9080 } 9081 }, 9082 meridiem: function (hour, minute, isLower) { 9083 if (hour < 4) { 9084 return 'ರಾತà³à²°à²¿'; 9085 } else if (hour < 10) { 9086 return 'ಬà³à²³à²¿à²à³à²à³'; 9087 } else if (hour < 17) { 9088 return 'ಮಧà³à²¯à²¾à²¹à³à²¨'; 9089 } else if (hour < 20) { 9090 return 'ಸà²à²à³'; 9091 } else { 9092 return 'ರಾತà³à²°à²¿'; 9093 } 9094 }, 9095 dayOfMonthOrdinalParse: /\d{1,2}(ನà³à³)/, 9096 ordinal: function (number) { 9097 return number + 'ನà³à³'; 9098 }, 9099 week: { 9100 dow: 0, 9101 // Sunday is the first day of the week. 9102 doy: 6 // The week that contains Jan 6th is the first week of the year. 9103 9104 } 9105 }); 9106 return kn; 9107}); 9108 9109/***/ }), 9110
vendor: 2,409 bytes, lines 9111-9199
9111/***/ "./node_modules/moment/locale/ko.js": 9112/*!******************************************!*\ 9113 !*** ./node_modules/moment/locale/ko.js ***! 9114 \******************************************/ 9115/*! no static exports found */ 9116/***/ (function(module, exports, __webpack_require__) { 9117 9118//! moment.js locale configuration 9119; 9120 9121(function (global, factory) { 9122 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 9123})(this, function (moment) { 9124 'use strict'; 9125 9126 var ko = moment.defineLocale('ko', { 9127 months: '1ì_2ì_3ì_4ì_5ì_6ì_7ì_8ì_9ì_10ì_11ì_12ì'.split('_'), 9128 monthsShort: '1ì_2ì_3ì_4ì_5ì_6ì_7ì_8ì_9ì_10ì_11ì_12ì'.split('_'), 9129 weekdays: 'ì¼ìì¼_ììì¼_íìì¼_ììì¼_목ìì¼_ê¸ìì¼_í ìì¼'.split('_'), 9130 weekdaysShort: 'ì¼_ì_í_ì_목_ê¸_í '.split('_'), 9131 weekdaysMin: 'ì¼_ì_í_ì_목_ê¸_í '.split('_'), 9132 longDateFormat: { 9133 LT: 'A h:mm', 9134 LTS: 'A h:mm:ss', 9135 L: 'YYYY.MM.DD.', 9136 LL: 'YYYYë MMMM Dì¼', 9137 LLL: 'YYYYë MMMM Dì¼ A h:mm', 9138 LLLL: 'YYYYë MMMM Dì¼ dddd A h:mm', 9139 l: 'YYYY.MM.DD.', 9140 ll: 'YYYYë MMMM Dì¼', 9141 lll: 'YYYYë MMMM Dì¼ A h:mm', 9142 llll: 'YYYYë MMMM Dì¼ dddd A h:mm' 9143 }, 9144 calendar: { 9145 sameDay: 'ì¤ë LT', 9146 nextDay: 'ë´ì¼ LT', 9147 nextWeek: 'dddd LT', 9148 lastDay: 'ì´ì LT', 9149 lastWeek: 'ì§ë주 dddd LT', 9150 sameElse: 'L' 9151 }, 9152 relativeTime: { 9153 future: '%s í', 9154 past: '%s ì ', 9155 s: 'ëª ì´', 9156 ss: '%dì´', 9157 m: '1ë¶', 9158 mm: '%dë¶', 9159 h: 'í ìê°', 9160 hh: '%dìê°', 9161 d: 'í루', 9162 dd: '%dì¼', 9163 M: 'í ë¬', 9164 MM: '%dë¬', 9165 y: 'ì¼ ë ', 9166 yy: '%dë ' 9167 }, 9168 dayOfMonthOrdinalParse: /\d{1,2}(ì¼|ì|주)/, 9169 ordinal: function (number, period) { 9170 switch (period) { 9171 case 'd': 9172 case 'D': 9173 case 'DDD': 9174 return number + 'ì¼'; 9175 9176 case 'M': 9177 return number + 'ì'; 9178 9179 case 'w': 9180 case 'W': 9181 return number + '주'; 9182 9183 default: 9184 return number; 9185 } 9186 }, 9187 meridiemParse: /ì¤ì |ì¤í/, 9188 isPM: function (token) { 9189 return token === 'ì¤í'; 9190 }, 9191 meridiem: function (hour, minute, isUpper) { 9192 return hour < 12 ? 'ì¤ì ' : 'ì¤í'; 9193 } 9194 }); 9195 return ko; 9196}); 9197 9198/***/ }), 9199
vendor: 3,332 bytes, lines 9200-9311
9200/***/ "./node_modules/moment/locale/ku.js": 9201/*!******************************************!*\ 9202 !*** ./node_modules/moment/locale/ku.js ***! 9203 \******************************************/ 9204/*! no static exports found */ 9205/***/ (function(module, exports, __webpack_require__) { 9206 9207//! moment.js locale configuration 9208; 9209 9210(function (global, factory) { 9211 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 9212})(this, function (moment) { 9213 'use strict'; 9214 9215 var symbolMap = { 9216 '1': 'Ù¡', 9217 '2': 'Ù¢', 9218 '3': 'Ù£', 9219 '4': 'Ù¤', 9220 '5': 'Ù¥', 9221 '6': 'Ù¦', 9222 '7': 'Ù§', 9223 '8': 'Ù¨', 9224 '9': 'Ù©', 9225 '0': 'Ù ' 9226 }, 9227 numberMap = { 9228 'Ù¡': '1', 9229 'Ù¢': '2', 9230 'Ù£': '3', 9231 'Ù¤': '4', 9232 'Ù¥': '5', 9233 'Ù¦': '6', 9234 'Ù§': '7', 9235 'Ù¨': '8', 9236 'Ù©': '9', 9237 'Ù ': '0' 9238 }, 9239 months = ['کاÙÙÙÛ Ø¯ÙÙÛÙ ', 'Ø´ÙØ¨Ø§Øª', 'ئازار', 'ÙÛØ³Ø§Ù', 'Ø¦Ø§ÛØ§Ø±', 'ØÙزÛÛØ±Ø§Ù', 'تÛÙ Ù ÙØ²', 'ئاب', 'ئÛÛÙÙÙÙ', 'تشرÛÙÛ ÛÛÙÛÙ ', 'تشرÛÙÛ Ø¯ÙÙÛÙ ', 'ÙØ§ÙÙÙÛ ÛÛÚ©ÛÙ ']; 9240 var ku = moment.defineLocale('ku', { 9241 months: months, 9242 monthsShort: months, 9243 weekdays: 'ÛÙâÙØ´ÙâÙ Ù Ùâ_دÙÙØ´ÙâÙ Ù Ùâ_Ø³ÛØ´ÙâÙ Ù Ùâ_ÚÙØ§Ø±Ø´ÙâÙ Ù Ùâ_Ù¾ÛÙØ¬Ø´ÙâÙ Ù Ùâ_ÙÙâÛÙÛ_Ø´ÙâÙ Ù Ùâ'.split('_'), 9244 weekdaysShort: 'ÛÙâÙØ´ÙâÙ _دÙÙØ´ÙâÙ _Ø³ÛØ´ÙâÙ _ÚÙØ§Ø±Ø´ÙâÙ _Ù¾ÛÙØ¬Ø´ÙâÙ _ÙÙâÛÙÛ_Ø´ÙâÙ Ù Ùâ'.split('_'), 9245 weekdaysMin: 'Û_د_س_Ú_Ù¾_Ù_Ø´'.split('_'), 9246 weekdaysParseExact: true, 9247 longDateFormat: { 9248 LT: 'HH:mm', 9249 LTS: 'HH:mm:ss', 9250 L: 'DD/MM/YYYY', 9251 LL: 'D MMMM YYYY', 9252 LLL: 'D MMMM YYYY HH:mm', 9253 LLLL: 'dddd, D MMMM YYYY HH:mm' 9254 }, 9255 meridiemParse: /ئÛÙØ§Ø±Ùâ|بÙâÛØ§ÙÛ/, 9256 isPM: function (input) { 9257 return /ئÛÙØ§Ø±Ùâ/.test(input); 9258 }, 9259 meridiem: function (hour, minute, isLower) { 9260 if (hour < 12) { 9261 return 'بÙâÛØ§ÙÛ'; 9262 } else { 9263 return 'ئÛÙØ§Ø±Ùâ'; 9264 } 9265 }, 9266 calendar: { 9267 sameDay: '[ئÙâÙ Ø±Û ÙØ§ØªÚÙ ÛØ±] LT', 9268 nextDay: '[بÙâÛØ§ÙÛ ÙØ§ØªÚÙ ÛØ±] LT', 9269 nextWeek: 'dddd [ÙØ§ØªÚÙ ÛØ±] LT', 9270 lastDay: '[دÙÛÙÛ ÙØ§ØªÚÙ ÛØ±] LT', 9271 lastWeek: 'dddd [ÙØ§ØªÚÙ ÛØ±] LT', 9272 sameElse: 'L' 9273 }, 9274 relativeTime: { 9275 future: 'ÙÙâ %s', 9276 past: '%s', 9277 s: 'ÚÙâÙØ¯ ÚØ±ÙÙâÛÙâÙ', 9278 ss: 'ÚØ±ÙÙâ %d', 9279 m: 'ÛÙâÙ Ø®ÙÙÙâÙ', 9280 mm: '%d Ø®ÙÙÙâÙ', 9281 h: 'ÛÙâÙ ÙØ§ØªÚÙ ÛØ±', 9282 hh: '%d ÙØ§ØªÚÙ ÛØ±', 9283 d: 'ÛÙâÙ ÚÛÚ', 9284 dd: '%d ÚÛÚ', 9285 M: 'ÛÙâ٠٠اÙÚ¯', 9286 MM: '%d ٠اÙÚ¯', 9287 y: 'ÛÙâ٠ساڵ', 9288 yy: '%d ساڵ' 9289 }, 9290 preparse: function (string) { 9291 return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { 9292 return numberMap[match]; 9293 }).replace(/Ø/g, ','); 9294 }, 9295 postformat: function (string) { 9296 return string.replace(/\d/g, function (match) { 9297 return symbolMap[match]; 9298 }).replace(/,/g, 'Ø'); 9299 }, 9300 week: { 9301 dow: 6, 9302 // Saturday is the first day of the week. 9303 doy: 12 // The week that contains Jan 12th is the first week of the year. 9304 9305 } 9306 }); 9307 return ku; 9308}); 9309 9310/***/ }), 9311
vendor: 2,784 bytes, lines 9312-9404
9312/***/ "./node_modules/moment/locale/ky.js": 9313/*!******************************************!*\ 9314 !*** ./node_modules/moment/locale/ky.js ***! 9315 \******************************************/ 9316/*! no static exports found */ 9317/***/ (function(module, exports, __webpack_require__) { 9318 9319//! moment.js locale configuration 9320; 9321 9322(function (global, factory) { 9323 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 9324})(this, function (moment) { 9325 'use strict'; 9326 9327 var suffixes = { 9328 0: '-ÑÒ¯', 9329 1: '-Ñи', 9330 2: '-Ñи', 9331 3: '-ÑÒ¯', 9332 4: '-ÑÒ¯', 9333 5: '-Ñи', 9334 6: '-ÑÑ', 9335 7: '-Ñи', 9336 8: '-Ñи', 9337 9: '-ÑÑ', 9338 10: '-ÑÑ', 9339 20: '-ÑÑ', 9340 30: '-ÑÑ', 9341 40: '-ÑÑ', 9342 50: '-ÑÒ¯', 9343 60: '-ÑÑ', 9344 70: '-Ñи', 9345 80: '-Ñи', 9346 90: '-ÑÑ', 9347 100: '-ÑÒ¯' 9348 }; 9349 var ky = moment.defineLocale('ky', { 9350 months: 'ÑнваÑÑ_ÑевÑалÑ_маÑÑ_апÑелÑ_май_иÑнÑ_иÑлÑ_авгÑÑÑ_ÑенÑÑбÑÑ_окÑÑбÑÑ_ноÑбÑÑ_декабÑÑ'.split('_'), 9351 monthsShort: 'Ñнв_Ñев_маÑÑ_апÑ_май_иÑнÑ_иÑлÑ_авг_Ñен_окÑ_ноÑ_дек'.split('_'), 9352 weekdays: 'ÐекÑемби_ÐүйÑөмбү_ШейÑемби_ШаÑÑемби_ÐейÑемби_ÐÑма_ÐÑемби'.split('_'), 9353 weekdaysShort: 'Ðек_Ðүй_Шей_ШаÑ_Ðей_ÐÑм_ÐÑе'.split('_'), 9354 weekdaysMin: 'Ðк_Ðй_Шй_ШÑ_Ðй_Ðм_ÐÑ'.split('_'), 9355 longDateFormat: { 9356 LT: 'HH:mm', 9357 LTS: 'HH:mm:ss', 9358 L: 'DD.MM.YYYY', 9359 LL: 'D MMMM YYYY', 9360 LLL: 'D MMMM YYYY HH:mm', 9361 LLLL: 'dddd, D MMMM YYYY HH:mm' 9362 }, 9363 calendar: { 9364 sameDay: '[Ðүгүн ÑааÑ] LT', 9365 nextDay: '[ÐÑÑең ÑааÑ] LT', 9366 nextWeek: 'dddd [ÑааÑ] LT', 9367 lastDay: '[ÐеÑÑÑ ÑааÑ] LT', 9368 lastWeek: '[Ó¨Ñкөн апÑанÑн] dddd [күнү] [ÑааÑ] LT', 9369 sameElse: 'L' 9370 }, 9371 relativeTime: { 9372 future: '%s иÑинде', 9373 past: '%s мÑÑÑн', 9374 s: 'биÑнеÑе ÑекÑнд', 9375 ss: '%d ÑекÑнд', 9376 m: 'Ð±Ð¸Ñ Ð¼Ò¯Ð½Ó©Ñ', 9377 mm: '%d мүнөÑ', 9378 h: 'Ð±Ð¸Ñ ÑааÑ', 9379 hh: '%d ÑааÑ', 9380 d: 'Ð±Ð¸Ñ ÐºÒ¯Ð½', 9381 dd: '%d күн', 9382 M: 'Ð±Ð¸Ñ Ð°Ð¹', 9383 MM: '%d ай', 9384 y: 'Ð±Ð¸Ñ Ð¶Ñл', 9385 yy: '%d жÑл' 9386 }, 9387 dayOfMonthOrdinalParse: /\d{1,2}-(Ñи|ÑÑ|ÑÒ¯|ÑÑ)/, 9388 ordinal: function (number) { 9389 var a = number % 10, 9390 b = number >= 100 ? 100 : null; 9391 return number + (suffixes[number] || suffixes[a] || suffixes[b]); 9392 }, 9393 week: { 9394 dow: 1, 9395 // Monday is the first day of the week. 9396 doy: 7 // The week that contains Jan 7th is the first week of the year. 9397 9398 } 9399 }); 9400 return ky; 9401}); 9402 9403/***/ }), 9404
vendor: 4,383 bytes, lines 9405-9563
9405/***/ "./node_modules/moment/locale/lb.js": 9406/*!******************************************!*\ 9407 !*** ./node_modules/moment/locale/lb.js ***! 9408 \******************************************/ 9409/*! no static exports found */ 9410/***/ (function(module, exports, __webpack_require__) { 9411 9412//! moment.js locale configuration 9413; 9414 9415(function (global, factory) { 9416 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 9417})(this, function (moment) { 9418 'use strict'; 9419 9420 function processRelativeTime(number, withoutSuffix, key, isFuture) { 9421 var format = { 9422 'm': ['eng Minutt', 'enger Minutt'], 9423 'h': ['eng Stonn', 'enger Stonn'], 9424 'd': ['een Dag', 'engem Dag'], 9425 'M': ['ee Mount', 'engem Mount'], 9426 'y': ['ee Joer', 'engem Joer'] 9427 }; 9428 return withoutSuffix ? format[key][0] : format[key][1]; 9429 } 9430 9431 function processFutureTime(string) { 9432 var number = string.substr(0, string.indexOf(' ')); 9433 9434 if (eifelerRegelAppliesToNumber(number)) { 9435 return 'a ' + string; 9436 } 9437 9438 return 'an ' + string; 9439 } 9440 9441 function processPastTime(string) { 9442 var number = string.substr(0, string.indexOf(' ')); 9443 9444 if (eifelerRegelAppliesToNumber(number)) { 9445 return 'viru ' + string; 9446 } 9447 9448 return 'virun ' + string; 9449 } 9450 /** 9451 * Returns true if the word before the given number loses the '-n' ending. 9452 * e.g. 'an 10 Deeg' but 'a 5 Deeg' 9453 * 9454 * @param number {integer} 9455 * @returns {boolean} 9456 */ 9457 9458 9459 function eifelerRegelAppliesToNumber(number) { 9460 number = parseInt(number, 10); 9461 9462 if (isNaN(number)) { 9463 return false; 9464 } 9465 9466 if (number < 0) { 9467 // Negative Number --> always true 9468 return true; 9469 } else if (number < 10) { 9470 // Only 1 digit 9471 if (4 <= number && number <= 7) { 9472 return true; 9473 } 9474 9475 return false; 9476 } else if (number < 100) { 9477 // 2 digits 9478 var lastDigit = number % 10, 9479 firstDigit = number / 10; 9480 9481 if (lastDigit === 0) { 9482 return eifelerRegelAppliesToNumber(firstDigit); 9483 } 9484 9485 return eifelerRegelAppliesToNumber(lastDigit); 9486 } else if (number < 10000) { 9487 // 3 or 4 digits --> recursively check first digit 9488 while (number >= 10) { 9489 number = number / 10; 9490 } 9491 9492 return eifelerRegelAppliesToNumber(number); 9493 } else { 9494 // Anything larger than 4 digits: recursively check first n-3 digits 9495 number = number / 1000; 9496 return eifelerRegelAppliesToNumber(number); 9497 } 9498 } 9499 9500 var lb = moment.defineLocale('lb', { 9501 months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), 9502 monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), 9503 monthsParseExact: true, 9504 weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'), 9505 weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), 9506 weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), 9507 weekdaysParseExact: true, 9508 longDateFormat: { 9509 LT: 'H:mm [Auer]', 9510 LTS: 'H:mm:ss [Auer]', 9511 L: 'DD.MM.YYYY', 9512 LL: 'D. MMMM YYYY', 9513 LLL: 'D. MMMM YYYY H:mm [Auer]', 9514 LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]' 9515 }, 9516 calendar: { 9517 sameDay: '[Haut um] LT', 9518 sameElse: 'L', 9519 nextDay: '[Muer um] LT', 9520 nextWeek: 'dddd [um] LT', 9521 lastDay: '[Gëschter um] LT', 9522 lastWeek: function () { 9523 // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule 9524 switch (this.day()) { 9525 case 2: 9526 case 4: 9527 return '[Leschten] dddd [um] LT'; 9528 9529 default: 9530 return '[Leschte] dddd [um] LT'; 9531 } 9532 } 9533 }, 9534 relativeTime: { 9535 future: processFutureTime, 9536 past: processPastTime, 9537 s: 'e puer Sekonnen', 9538 ss: '%d Sekonnen', 9539 m: processRelativeTime, 9540 mm: '%d Minutten', 9541 h: processRelativeTime, 9542 hh: '%d Stonnen', 9543 d: processRelativeTime, 9544 dd: '%d Deeg', 9545 M: processRelativeTime, 9546 MM: '%d Méint', 9547 y: processRelativeTime, 9548 yy: '%d Joer' 9549 }, 9550 dayOfMonthOrdinalParse: /\d{1,2}\./, 9551 ordinal: '%d.', 9552 week: { 9553 dow: 1, 9554 // Monday is the first day of the week. 9555 doy: 4 // The week that contains Jan 4th is the first week of the year. 9556 9557 } 9558 }); 9559 return lb; 9560}); 9561 9562/***/ }), 9563
vendor: 2,842 bytes, lines 9564-9638
9564/***/ "./node_modules/moment/locale/lo.js": 9565/*!******************************************!*\ 9566 !*** ./node_modules/moment/locale/lo.js ***! 9567 \******************************************/ 9568/*! no static exports found */ 9569/***/ (function(module, exports, __webpack_require__) { 9570 9571//! moment.js locale configuration 9572; 9573 9574(function (global, factory) { 9575 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 9576})(this, function (moment) { 9577 'use strict'; 9578 9579 var lo = moment.defineLocale('lo', { 9580 months: 'ມັàºàºàºàº_àºàº¸àº¡àºàº²_ມີàºàº²_à»àº¡àºªàº²_àºàº¶àºàºªàº°àºàº²_ມິàºàº¸àºàº²_àºà»àº¥àº°àºàº»àº_ສິàºàº«àº²_àºàº±àºàºàº²_àºàº¸àº¥àº²_àºàº°àºàº´àº_àºàº±àºàº§àº²'.split('_'), 9581 monthsShort: 'ມັàºàºàºàº_àºàº¸àº¡àºàº²_ມີàºàº²_à»àº¡àºªàº²_àºàº¶àºàºªàº°àºàº²_ມິàºàº¸àºàº²_àºà»àº¥àº°àºàº»àº_ສິàºàº«àº²_àºàº±àºàºàº²_àºàº¸àº¥àº²_àºàº°àºàº´àº_àºàº±àºàº§àº²'.split('_'), 9582 weekdays: 'àºàº²àºàº´àº_àºàº±àº_àºàº±àºàºàº²àº_àºàº¸àº_àºàº°àº«àº±àº_ສຸàº_à»àºªàº»àº²'.split('_'), 9583 weekdaysShort: 'àºàº´àº_àºàº±àº_àºàº±àºàºàº²àº_àºàº¸àº_àºàº°àº«àº±àº_ສຸàº_à»àºªàº»àº²'.split('_'), 9584 weekdaysMin: 'àº_àº_àºàº_àº_àºàº«_ສàº_ສ'.split('_'), 9585 weekdaysParseExact: true, 9586 longDateFormat: { 9587 LT: 'HH:mm', 9588 LTS: 'HH:mm:ss', 9589 L: 'DD/MM/YYYY', 9590 LL: 'D MMMM YYYY', 9591 LLL: 'D MMMM YYYY HH:mm', 9592 LLLL: 'ວັàºdddd D MMMM YYYY HH:mm' 9593 }, 9594 meridiemParse: /àºàºàºà»àºàº»à»àº²|àºàºàºà»àº¥àº/, 9595 isPM: function (input) { 9596 return input === 'àºàºàºà»àº¥àº'; 9597 }, 9598 meridiem: function (hour, minute, isLower) { 9599 if (hour < 12) { 9600 return 'àºàºàºà»àºàº»à»àº²'; 9601 } else { 9602 return 'àºàºàºà»àº¥àº'; 9603 } 9604 }, 9605 calendar: { 9606 sameDay: '[ມືà»àºàºµà»à»àº§àº¥àº²] LT', 9607 nextDay: '[ມືà»àºàº·à»àºà»àº§àº¥àº²] LT', 9608 nextWeek: '[ວັàº]dddd[à»à»àº²à»àº§àº¥àº²] LT', 9609 lastDay: '[ມືà»àº§àº²àºàºàºµà»à»àº§àº¥àº²] LT', 9610 lastWeek: '[ວັàº]dddd[à»àº¥à»àº§àºàºµà»à»àº§àº¥àº²] LT', 9611 sameElse: 'L' 9612 }, 9613 relativeTime: { 9614 future: 'àºàºµàº %s', 9615 past: '%sàºà»àº²àºàº¡àº²', 9616 s: 'àºà»à»à»àºàº»à»àº²à»àºàº§àº´àºàº²àºàºµ', 9617 ss: '%d ວິàºàº²àºàºµ', 9618 m: '1 àºàº²àºàºµ', 9619 mm: '%d àºàº²àºàºµ', 9620 h: '1 àºàº»à»àº§à»àº¡àº', 9621 hh: '%d àºàº»à»àº§à»àº¡àº', 9622 d: '1 ມືà»', 9623 dd: '%d ມືà»', 9624 M: '1 à»àºàº·àºàº', 9625 MM: '%d à»àºàº·àºàº', 9626 y: '1 àºàºµ', 9627 yy: '%d àºàºµ' 9628 }, 9629 dayOfMonthOrdinalParse: /(àºàºµà»)\d{1,2}/, 9630 ordinal: function (number) { 9631 return 'àºàºµà»' + number; 9632 } 9633 }); 9634 return lo; 9635}); 9636 9637/***/ }), 9638
vendor: 4,131 bytes, lines 9639-9770
9639/***/ "./node_modules/moment/locale/lt.js": 9640/*!******************************************!*\ 9641 !*** ./node_modules/moment/locale/lt.js ***! 9642 \******************************************/ 9643/*! no static exports found */ 9644/***/ (function(module, exports, __webpack_require__) { 9645 9646//! moment.js locale configuration 9647; 9648 9649(function (global, factory) { 9650 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 9651})(this, function (moment) { 9652 'use strict'; 9653 9654 var units = { 9655 'ss': 'sekundÄ_sekundžių_sekundes', 9656 'm': 'minutÄ_minutÄs_minutÄ', 9657 'mm': 'minutÄs_minuÄių_minutes', 9658 'h': 'valanda_valandos_valandÄ ', 9659 'hh': 'valandos_valandų_valandas', 9660 'd': 'diena_dienos_dienÄ ', 9661 'dd': 'dienos_dienų_dienas', 9662 'M': 'mÄnuo_mÄnesio_mÄnesį', 9663 'MM': 'mÄnesiai_mÄnesių_mÄnesius', 9664 'y': 'metai_metų_metus', 9665 'yy': 'metai_metų_metus' 9666 }; 9667 9668 function translateSeconds(number, withoutSuffix, key, isFuture) { 9669 if (withoutSuffix) { 9670 return 'kelios sekundÄs'; 9671 } else { 9672 return isFuture ? 'kelių sekundžių' : 'kelias sekundes'; 9673 } 9674 } 9675 9676 function translateSingular(number, withoutSuffix, key, isFuture) { 9677 return withoutSuffix ? forms(key)[0] : isFuture ? forms(key)[1] : forms(key)[2]; 9678 } 9679 9680 function special(number) { 9681 return number % 10 === 0 || number > 10 && number < 20; 9682 } 9683 9684 function forms(key) { 9685 return units[key].split('_'); 9686 } 9687 9688 function translate(number, withoutSuffix, key, isFuture) { 9689 var result = number + ' '; 9690 9691 if (number === 1) { 9692 return result + translateSingular(number, withoutSuffix, key[0], isFuture); 9693 } else if (withoutSuffix) { 9694 return result + (special(number) ? forms(key)[1] : forms(key)[0]); 9695 } else { 9696 if (isFuture) { 9697 return result + forms(key)[1]; 9698 } else { 9699 return result + (special(number) ? forms(key)[1] : forms(key)[2]); 9700 } 9701 } 9702 } 9703 9704 var lt = moment.defineLocale('lt', { 9705 months: { 9706 format: 'sausio_vasario_kovo_balandžio_gegužÄs_birželio_liepos_rugpjÅ«Äio_rugsÄjo_spalio_lapkriÄio_gruodžio'.split('_'), 9707 standalone: 'sausis_vasaris_kovas_balandis_gegužÄ_birželis_liepa_rugpjÅ«tis_rugsÄjis_spalis_lapkritis_gruodis'.split('_'), 9708 isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/ 9709 }, 9710 monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), 9711 weekdays: { 9712 format: 'sekmadienį_pirmadienį_antradienį_treÄiadienį_ketvirtadienį_penktadienį_Å¡eÅ¡tadienį'.split('_'), 9713 standalone: 'sekmadienis_pirmadienis_antradienis_treÄiadienis_ketvirtadienis_penktadienis_Å¡eÅ¡tadienis'.split('_'), 9714 isFormat: /dddd HH:mm/ 9715 }, 9716 weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Å eÅ¡'.split('_'), 9717 weekdaysMin: 'S_P_A_T_K_Pn_Å '.split('_'), 9718 weekdaysParseExact: true, 9719 longDateFormat: { 9720 LT: 'HH:mm', 9721 LTS: 'HH:mm:ss', 9722 L: 'YYYY-MM-DD', 9723 LL: 'YYYY [m.] MMMM D [d.]', 9724 LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', 9725 LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', 9726 l: 'YYYY-MM-DD', 9727 ll: 'YYYY [m.] MMMM D [d.]', 9728 lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', 9729 llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]' 9730 }, 9731 calendar: { 9732 sameDay: '[Å iandien] LT', 9733 nextDay: '[Rytoj] LT', 9734 nextWeek: 'dddd LT', 9735 lastDay: '[Vakar] LT', 9736 lastWeek: '[PraÄjusį] dddd LT', 9737 sameElse: 'L' 9738 }, 9739 relativeTime: { 9740 future: 'po %s', 9741 past: 'prieÅ¡ %s', 9742 s: translateSeconds, 9743 ss: translate, 9744 m: translateSingular, 9745 mm: translate, 9746 h: translateSingular, 9747 hh: translate, 9748 d: translateSingular, 9749 dd: translate, 9750 M: translateSingular, 9751 MM: translate, 9752 y: translateSingular, 9753 yy: translate 9754 }, 9755 dayOfMonthOrdinalParse: /\d{1,2}-oji/, 9756 ordinal: function (number) { 9757 return number + '-oji'; 9758 }, 9759 week: { 9760 dow: 1, 9761 // Monday is the first day of the week. 9762 doy: 4 // The week that contains Jan 4th is the first week of the year. 9763 9764 } 9765 }); 9766 return lt; 9767}); 9768 9769/***/ }), 9770
vendor: 3,702 bytes, lines 9771-9878
9771/***/ "./node_modules/moment/locale/lv.js": 9772/*!******************************************!*\ 9773 !*** ./node_modules/moment/locale/lv.js ***! 9774 \******************************************/ 9775/*! no static exports found */ 9776/***/ (function(module, exports, __webpack_require__) { 9777 9778//! moment.js locale configuration 9779; 9780 9781(function (global, factory) { 9782 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 9783})(this, function (moment) { 9784 'use strict'; 9785 9786 var units = { 9787 'ss': 'sekundes_sekundÄm_sekunde_sekundes'.split('_'), 9788 'm': 'minÅ«tes_minÅ«tÄm_minÅ«te_minÅ«tes'.split('_'), 9789 'mm': 'minÅ«tes_minÅ«tÄm_minÅ«te_minÅ«tes'.split('_'), 9790 'h': 'stundas_stundÄm_stunda_stundas'.split('_'), 9791 'hh': 'stundas_stundÄm_stunda_stundas'.split('_'), 9792 'd': 'dienas_dienÄm_diena_dienas'.split('_'), 9793 'dd': 'dienas_dienÄm_diena_dienas'.split('_'), 9794 'M': 'mÄneÅ¡a_mÄneÅ¡iem_mÄnesis_mÄneÅ¡i'.split('_'), 9795 'MM': 'mÄneÅ¡a_mÄneÅ¡iem_mÄnesis_mÄneÅ¡i'.split('_'), 9796 'y': 'gada_gadiem_gads_gadi'.split('_'), 9797 'yy': 'gada_gadiem_gads_gadi'.split('_') 9798 }; 9799 /** 9800 * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. 9801 */ 9802 9803 function format(forms, number, withoutSuffix) { 9804 if (withoutSuffix) { 9805 // E.g. "21 minÅ«te", "3 minÅ«tes". 9806 return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3]; 9807 } else { 9808 // E.g. "21 minÅ«tes" as in "pÄc 21 minÅ«tes". 9809 // E.g. "3 minÅ«tÄm" as in "pÄc 3 minÅ«tÄm". 9810 return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1]; 9811 } 9812 } 9813 9814 function relativeTimeWithPlural(number, withoutSuffix, key) { 9815 return number + ' ' + format(units[key], number, withoutSuffix); 9816 } 9817 9818 function relativeTimeWithSingular(number, withoutSuffix, key) { 9819 return format(units[key], number, withoutSuffix); 9820 } 9821 9822 function relativeSeconds(number, withoutSuffix) { 9823 return withoutSuffix ? 'dažas sekundes' : 'dažÄm sekundÄm'; 9824 } 9825 9826 var lv = moment.defineLocale('lv', { 9827 months: 'janvÄris_februÄris_marts_aprÄ«lis_maijs_jÅ«nijs_jÅ«lijs_augusts_septembris_oktobris_novembris_decembris'.split('_'), 9828 monthsShort: 'jan_feb_mar_apr_mai_jÅ«n_jÅ«l_aug_sep_okt_nov_dec'.split('_'), 9829 weekdays: 'svÄtdiena_pirmdiena_otrdiena_treÅ¡diena_ceturtdiena_piektdiena_sestdiena'.split('_'), 9830 weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'), 9831 weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'), 9832 weekdaysParseExact: true, 9833 longDateFormat: { 9834 LT: 'HH:mm', 9835 LTS: 'HH:mm:ss', 9836 L: 'DD.MM.YYYY.', 9837 LL: 'YYYY. [gada] D. MMMM', 9838 LLL: 'YYYY. [gada] D. MMMM, HH:mm', 9839 LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm' 9840 }, 9841 calendar: { 9842 sameDay: '[Å odien pulksten] LT', 9843 nextDay: '[RÄ«t pulksten] LT', 9844 nextWeek: 'dddd [pulksten] LT', 9845 lastDay: '[Vakar pulksten] LT', 9846 lastWeek: '[PagÄjuÅ¡Ä] dddd [pulksten] LT', 9847 sameElse: 'L' 9848 }, 9849 relativeTime: { 9850 future: 'pÄc %s', 9851 past: 'pirms %s', 9852 s: relativeSeconds, 9853 ss: relativeTimeWithPlural, 9854 m: relativeTimeWithSingular, 9855 mm: relativeTimeWithPlural, 9856 h: relativeTimeWithSingular, 9857 hh: relativeTimeWithPlural, 9858 d: relativeTimeWithSingular, 9859 dd: relativeTimeWithPlural, 9860 M: relativeTimeWithSingular, 9861 MM: relativeTimeWithPlural, 9862 y: relativeTimeWithSingular, 9863 yy: relativeTimeWithPlural 9864 }, 9865 dayOfMonthOrdinalParse: /\d{1,2}\./, 9866 ordinal: '%d.', 9867 week: { 9868 dow: 1, 9869 // Monday is the first day of the week. 9870 doy: 4 // The week that contains Jan 4th is the first week of the year. 9871 9872 } 9873 }); 9874 return lv; 9875}); 9876 9877/***/ }), 9878
vendor: 3,542 bytes, lines 9879-9992
9879/***/ "./node_modules/moment/locale/me.js": 9880/*!******************************************!*\ 9881 !*** ./node_modules/moment/locale/me.js ***! 9882 \******************************************/ 9883/*! no static exports found */ 9884/***/ (function(module, exports, __webpack_require__) { 9885 9886//! moment.js locale configuration 9887; 9888 9889(function (global, factory) { 9890 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 9891})(this, function (moment) { 9892 'use strict'; 9893 9894 var translator = { 9895 words: { 9896 //Different grammatical cases 9897 ss: ['sekund', 'sekunda', 'sekundi'], 9898 m: ['jedan minut', 'jednog minuta'], 9899 mm: ['minut', 'minuta', 'minuta'], 9900 h: ['jedan sat', 'jednog sata'], 9901 hh: ['sat', 'sata', 'sati'], 9902 dd: ['dan', 'dana', 'dana'], 9903 MM: ['mjesec', 'mjeseca', 'mjeseci'], 9904 yy: ['godina', 'godine', 'godina'] 9905 }, 9906 correctGrammaticalCase: function (number, wordKey) { 9907 return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]; 9908 }, 9909 translate: function (number, withoutSuffix, key) { 9910 var wordKey = translator.words[key]; 9911 9912 if (key.length === 1) { 9913 return withoutSuffix ? wordKey[0] : wordKey[1]; 9914 } else { 9915 return number + ' ' + translator.correctGrammaticalCase(number, wordKey); 9916 } 9917 } 9918 }; 9919 var me = moment.defineLocale('me', { 9920 months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), 9921 monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), 9922 monthsParseExact: true, 9923 weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split('_'), 9924 weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'), 9925 weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'), 9926 weekdaysParseExact: true, 9927 longDateFormat: { 9928 LT: 'H:mm', 9929 LTS: 'H:mm:ss', 9930 L: 'DD.MM.YYYY', 9931 LL: 'D. MMMM YYYY', 9932 LLL: 'D. MMMM YYYY H:mm', 9933 LLLL: 'dddd, D. MMMM YYYY H:mm' 9934 }, 9935 calendar: { 9936 sameDay: '[danas u] LT', 9937 nextDay: '[sjutra u] LT', 9938 nextWeek: function () { 9939 switch (this.day()) { 9940 case 0: 9941 return '[u] [nedjelju] [u] LT'; 9942 9943 case 3: 9944 return '[u] [srijedu] [u] LT'; 9945 9946 case 6: 9947 return '[u] [subotu] [u] LT'; 9948 9949 case 1: 9950 case 2: 9951 case 4: 9952 case 5: 9953 return '[u] dddd [u] LT'; 9954 } 9955 }, 9956 lastDay: '[juÄe u] LT', 9957 lastWeek: function () { 9958 var lastWeekDays = ['[proÅ¡le] [nedjelje] [u] LT', '[proÅ¡log] [ponedjeljka] [u] LT', '[proÅ¡log] [utorka] [u] LT', '[proÅ¡le] [srijede] [u] LT', '[proÅ¡log] [Äetvrtka] [u] LT', '[proÅ¡log] [petka] [u] LT', '[proÅ¡le] [subote] [u] LT']; 9959 return lastWeekDays[this.day()]; 9960 }, 9961 sameElse: 'L' 9962 }, 9963 relativeTime: { 9964 future: 'za %s', 9965 past: 'prije %s', 9966 s: 'nekoliko sekundi', 9967 ss: translator.translate, 9968 m: translator.translate, 9969 mm: translator.translate, 9970 h: translator.translate, 9971 hh: translator.translate, 9972 d: 'dan', 9973 dd: translator.translate, 9974 M: 'mjesec', 9975 MM: translator.translate, 9976 y: 'godinu', 9977 yy: translator.translate 9978 }, 9979 dayOfMonthOrdinalParse: /\d{1,2}\./, 9980 ordinal: '%d.', 9981 week: { 9982 dow: 1, 9983 // Monday is the first day of the week. 9984 doy: 7 // The week that contains Jan 7th is the first week of the year. 9985 9986 } 9987 }); 9988 return me; 9989}); 9990 9991/***/ }), 9992
vendor: 2,269 bytes, lines 9993-10063
9993/***/ "./node_modules/moment/locale/mi.js": 9994/*!******************************************!*\ 9995 !*** ./node_modules/moment/locale/mi.js ***! 9996 \******************************************/ 9997/*! no static exports found */ 9998/***/ (function(module, exports, __webpack_require__) { 9999 10000//! moment.js locale configuration 10001; 10002 10003(function (global, factory) { 10004 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 10005})(this, function (moment) { 10006 'use strict'; 10007 10008 var mi = moment.defineLocale('mi', { 10009 months: 'Kohi-tÄte_Hui-tanguru_PoutÅ«-te-rangi_Paenga-whÄwhÄ_Haratua_Pipiri_HÅngoingoi_Here-turi-kÅkÄ_Mahuru_Whiringa-Ä-nuku_Whiringa-Ä-rangi_Hakihea'.split('_'), 10010 monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_HÅngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'), 10011 monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, 10012 monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, 10013 monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, 10014 monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i, 10015 weekdays: 'RÄtapu_Mane_TÅ«rei_Wenerei_TÄite_Paraire_HÄtarei'.split('_'), 10016 weekdaysShort: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'), 10017 weekdaysMin: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'), 10018 longDateFormat: { 10019 LT: 'HH:mm', 10020 LTS: 'HH:mm:ss', 10021 L: 'DD/MM/YYYY', 10022 LL: 'D MMMM YYYY', 10023 LLL: 'D MMMM YYYY [i] HH:mm', 10024 LLLL: 'dddd, D MMMM YYYY [i] HH:mm' 10025 }, 10026 calendar: { 10027 sameDay: '[i teie mahana, i] LT', 10028 nextDay: '[apopo i] LT', 10029 nextWeek: 'dddd [i] LT', 10030 lastDay: '[inanahi i] LT', 10031 lastWeek: 'dddd [whakamutunga i] LT', 10032 sameElse: 'L' 10033 }, 10034 relativeTime: { 10035 future: 'i roto i %s', 10036 past: '%s i mua', 10037 s: 'te hÄkona ruarua', 10038 ss: '%d hÄkona', 10039 m: 'he meneti', 10040 mm: '%d meneti', 10041 h: 'te haora', 10042 hh: '%d haora', 10043 d: 'he ra', 10044 dd: '%d ra', 10045 M: 'he marama', 10046 MM: '%d marama', 10047 y: 'he tau', 10048 yy: '%d tau' 10049 }, 10050 dayOfMonthOrdinalParse: /\d{1,2}º/, 10051 ordinal: '%dº', 10052 week: { 10053 dow: 1, 10054 // Monday is the first day of the week. 10055 doy: 4 // The week that contains Jan 4th is the first week of the year. 10056 10057 } 10058 }); 10059 return mi; 10060}); 10061 10062/***/ }), 10063
vendor: 3,098 bytes, lines 10064-10162
10064/***/ "./node_modules/moment/locale/mk.js": 10065/*!******************************************!*\ 10066 !*** ./node_modules/moment/locale/mk.js ***! 10067 \******************************************/ 10068/*! no static exports found */ 10069/***/ (function(module, exports, __webpack_require__) { 10070 10071//! moment.js locale configuration 10072; 10073 10074(function (global, factory) { 10075 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 10076})(this, function (moment) { 10077 'use strict'; 10078 10079 var mk = moment.defineLocale('mk', { 10080 months: 'ÑанÑаÑи_ÑевÑÑаÑи_маÑÑ_апÑил_маÑ_ÑÑни_ÑÑли_авгÑÑÑ_ÑепÑемвÑи_окÑомвÑи_ноемвÑи_декемвÑи'.split('_'), 10081 monthsShort: 'Ñан_Ñев_маÑ_апÑ_маÑ_ÑÑн_ÑÑл_авг_Ñеп_окÑ_ное_дек'.split('_'), 10082 weekdays: 'недела_понеделник_вÑоÑник_ÑÑеда_ÑеÑвÑÑок_пеÑок_ÑабоÑа'.split('_'), 10083 weekdaysShort: 'нед_пон_вÑо_ÑÑе_ÑеÑ_пеÑ_Ñаб'.split('_'), 10084 weekdaysMin: 'нe_пo_вÑ_ÑÑ_Ñе_пе_Ña'.split('_'), 10085 longDateFormat: { 10086 LT: 'H:mm', 10087 LTS: 'H:mm:ss', 10088 L: 'D.MM.YYYY', 10089 LL: 'D MMMM YYYY', 10090 LLL: 'D MMMM YYYY H:mm', 10091 LLLL: 'dddd, D MMMM YYYY H:mm' 10092 }, 10093 calendar: { 10094 sameDay: '[ÐÐµÐ½ÐµÑ Ð²Ð¾] LT', 10095 nextDay: '[УÑÑе во] LT', 10096 nextWeek: '[Ðо] dddd [во] LT', 10097 lastDay: '[ÐÑеÑа во] LT', 10098 lastWeek: function () { 10099 switch (this.day()) { 10100 case 0: 10101 case 3: 10102 case 6: 10103 return '[ÐзминаÑаÑа] dddd [во] LT'; 10104 10105 case 1: 10106 case 2: 10107 case 4: 10108 case 5: 10109 return '[ÐзминаÑиоÑ] dddd [во] LT'; 10110 } 10111 }, 10112 sameElse: 'L' 10113 }, 10114 relativeTime: { 10115 future: 'поÑле %s', 10116 past: 'пÑед %s', 10117 s: 'Ð½ÐµÐºÐ¾Ð»ÐºÑ ÑекÑнди', 10118 ss: '%d ÑекÑнди', 10119 m: 'минÑÑа', 10120 mm: '%d минÑÑи', 10121 h: 'ÑаÑ', 10122 hh: '%d ÑаÑа', 10123 d: 'ден', 10124 dd: '%d дена', 10125 M: 'меÑеÑ', 10126 MM: '%d меÑеÑи', 10127 y: 'година', 10128 yy: '%d години' 10129 }, 10130 dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|Ñи|ви|Ñи|ми)/, 10131 ordinal: function (number) { 10132 var lastDigit = number % 10, 10133 last2Digits = number % 100; 10134 10135 if (number === 0) { 10136 return number + '-ев'; 10137 } else if (last2Digits === 0) { 10138 return number + '-ен'; 10139 } else if (last2Digits > 10 && last2Digits < 20) { 10140 return number + '-Ñи'; 10141 } else if (lastDigit === 1) { 10142 return number + '-ви'; 10143 } else if (lastDigit === 2) { 10144 return number + '-Ñи'; 10145 } else if (lastDigit === 7 || lastDigit === 8) { 10146 return number + '-ми'; 10147 } else { 10148 return number + '-Ñи'; 10149 } 10150 }, 10151 week: { 10152 dow: 1, 10153 // Monday is the first day of the week. 10154 doy: 7 // The week that contains Jan 7th is the first week of the year. 10155 10156 } 10157 }); 10158 return mk; 10159}); 10160 10161/***/ }), 10162
vendor: 3,424 bytes, lines 10163-10247
10163/***/ "./node_modules/moment/locale/ml.js": 10164/*!******************************************!*\ 10165 !*** ./node_modules/moment/locale/ml.js ***! 10166 \******************************************/ 10167/*! no static exports found */ 10168/***/ (function(module, exports, __webpack_require__) { 10169 10170//! moment.js locale configuration 10171; 10172 10173(function (global, factory) { 10174 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 10175})(this, function (moment) { 10176 'use strict'; 10177 10178 var ml = moment.defineLocale('ml', { 10179 months: 'à´à´¨àµà´µà´°à´¿_à´«àµà´¬àµà´°àµà´µà´°à´¿_മാർà´àµà´àµ_à´à´ªàµà´°à´¿àµ½_à´®àµà´¯àµ_à´àµàµº_à´àµà´²àµ_à´à´à´¸àµà´±àµà´±àµ_à´¸àµà´ªàµà´±àµà´±à´à´¬àµ¼_à´à´àµà´àµà´¬àµ¼_നവà´à´¬àµ¼_à´¡à´¿à´¸à´à´¬àµ¼'.split('_'), 10180 monthsShort: 'à´à´¨àµ._à´«àµà´¬àµà´°àµ._മാർ._à´à´ªàµà´°à´¿._à´®àµà´¯àµ_à´àµàµº_à´àµà´²àµ._à´à´._à´¸àµà´ªàµà´±àµà´±._à´à´àµà´àµ._നവà´._à´¡à´¿à´¸à´.'.split('_'), 10181 monthsParseExact: true, 10182 weekdays: 'à´à´¾à´¯à´±à´¾à´´àµà´_തിà´àµà´à´³à´¾à´´àµà´_à´àµà´µàµà´µà´¾à´´àµà´_à´¬àµà´§à´¨à´¾à´´àµà´_à´µàµà´¯à´¾à´´à´¾à´´àµà´_à´µàµà´³àµà´³à´¿à´¯à´¾à´´àµà´_ശനിയാഴàµà´'.split('_'), 10183 weekdaysShort: 'à´à´¾à´¯àµ¼_തിà´àµà´àµ¾_à´àµà´µàµà´µ_à´¬àµà´§àµ»_à´µàµà´¯à´¾à´´à´_à´µàµà´³àµà´³à´¿_ശനി'.split('_'), 10184 weekdaysMin: 'à´à´¾_തി_à´àµ_à´¬àµ_à´µàµà´¯à´¾_à´µàµ_à´¶'.split('_'), 10185 longDateFormat: { 10186 LT: 'A h:mm -à´¨àµ', 10187 LTS: 'A h:mm:ss -à´¨àµ', 10188 L: 'DD/MM/YYYY', 10189 LL: 'D MMMM YYYY', 10190 LLL: 'D MMMM YYYY, A h:mm -à´¨àµ', 10191 LLLL: 'dddd, D MMMM YYYY, A h:mm -à´¨àµ' 10192 }, 10193 calendar: { 10194 sameDay: '[à´à´¨àµà´¨àµ] LT', 10195 nextDay: '[നാളàµ] LT', 10196 nextWeek: 'dddd, LT', 10197 lastDay: '[à´à´¨àµà´¨à´²àµ] LT', 10198 lastWeek: '[à´à´´à´¿à´àµà´] dddd, LT', 10199 sameElse: 'L' 10200 }, 10201 relativeTime: { 10202 future: '%s à´à´´à´¿à´àµà´àµ', 10203 past: '%s à´®àµàµ»à´ªàµ', 10204 s: 'ഠൽപ നിമിഷà´àµà´àµ¾', 10205 ss: '%d à´¸àµà´àµà´àµ»à´¡àµ', 10206 m: 'à´à´°àµ മിനിറàµà´±àµ', 10207 mm: '%d മിനിറàµà´±àµ', 10208 h: 'à´à´°àµ മണിà´àµà´àµàµ¼', 10209 hh: '%d മണിà´àµà´àµàµ¼', 10210 d: 'à´à´°àµ ദിവസà´', 10211 dd: '%d ദിവസà´', 10212 M: 'à´à´°àµ മാസà´', 10213 MM: '%d മാസà´', 10214 y: 'à´à´°àµ വർഷà´', 10215 yy: '%d വർഷà´' 10216 }, 10217 meridiemParse: /രാതàµà´°à´¿|രാവിലàµ|à´à´àµà´ à´à´´à´¿à´àµà´àµ|à´µàµà´àµà´¨àµà´¨àµà´°à´|രാതàµà´°à´¿/i, 10218 meridiemHour: function (hour, meridiem) { 10219 if (hour === 12) { 10220 hour = 0; 10221 } 10222 10223 if (meridiem === 'രാതàµà´°à´¿' && hour >= 4 || meridiem === 'à´à´àµà´ à´à´´à´¿à´àµà´àµ' || meridiem === 'à´µàµà´àµà´¨àµà´¨àµà´°à´') { 10224 return hour + 12; 10225 } else { 10226 return hour; 10227 } 10228 }, 10229 meridiem: function (hour, minute, isLower) { 10230 if (hour < 4) { 10231 return 'രാതàµà´°à´¿'; 10232 } else if (hour < 12) { 10233 return 'രാവിലàµ'; 10234 } else if (hour < 17) { 10235 return 'à´à´àµà´ à´à´´à´¿à´àµà´àµ'; 10236 } else if (hour < 20) { 10237 return 'à´µàµà´àµà´¨àµà´¨àµà´°à´'; 10238 } else { 10239 return 'രാതàµà´°à´¿'; 10240 } 10241 } 10242 }); 10243 return ml; 10244}); 10245 10246/***/ }), 10247
vendor: 3,576 bytes, lines 10248-10364
10248/***/ "./node_modules/moment/locale/mn.js": 10249/*!******************************************!*\ 10250 !*** ./node_modules/moment/locale/mn.js ***! 10251 \******************************************/ 10252/*! no static exports found */ 10253/***/ (function(module, exports, __webpack_require__) { 10254 10255//! moment.js locale configuration 10256; 10257 10258(function (global, factory) { 10259 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 10260})(this, function (moment) { 10261 'use strict'; 10262 10263 function translate(number, withoutSuffix, key, isFuture) { 10264 switch (key) { 10265 case 's': 10266 return withoutSuffix ? 'Ñ ÑÐ´Ñ Ñн ÑекÑнд' : 'Ñ ÑÐ´Ñ Ñн ÑекÑндÑн'; 10267 10268 case 'ss': 10269 return number + (withoutSuffix ? ' ÑекÑнд' : ' ÑекÑндÑн'); 10270 10271 case 'm': 10272 case 'mm': 10273 return number + (withoutSuffix ? ' минÑÑ' : ' минÑÑÑн'); 10274 10275 case 'h': 10276 case 'hh': 10277 return number + (withoutSuffix ? ' Ñаг' : ' Ñагийн'); 10278 10279 case 'd': 10280 case 'dd': 10281 return number + (withoutSuffix ? ' өдөÑ' : ' өдÑийн'); 10282 10283 case 'M': 10284 case 'MM': 10285 return number + (withoutSuffix ? ' ÑаÑ' : ' ÑаÑÑн'); 10286 10287 case 'y': 10288 case 'yy': 10289 return number + (withoutSuffix ? ' жил' : ' жилийн'); 10290 10291 default: 10292 return number; 10293 } 10294 } 10295 10296 var mn = moment.defineLocale('mn', { 10297 months: 'ÐÑгдүгÑÑÑ ÑаÑ_ХоÑÑдÑÐ³Ð°Ð°Ñ ÑаÑ_ÐÑÑавдÑÐ³Ð°Ð°Ñ ÑаÑ_ÐÓ©ÑөвдүгÑÑÑ ÑаÑ_ТавдÑÐ³Ð°Ð°Ñ ÑаÑ_ÐÑÑгадÑÐ³Ð°Ð°Ñ ÑаÑ_ÐолдÑÐ³Ð°Ð°Ñ ÑаÑ_ÐаймдÑÐ³Ð°Ð°Ñ ÑаÑ_ÐÑдүгÑÑÑ ÑаÑ_ÐÑавдÑÐ³Ð°Ð°Ñ ÑаÑ_ÐÑван нÑгдүгÑÑÑ ÑаÑ_ÐÑван Ñ Ð¾ÑÑдÑÐ³Ð°Ð°Ñ ÑаÑ'.split('_'), 10298 monthsShort: '1 ÑаÑ_2 ÑаÑ_3 ÑаÑ_4 ÑаÑ_5 ÑаÑ_6 ÑаÑ_7 ÑаÑ_8 ÑаÑ_9 ÑаÑ_10 ÑаÑ_11 ÑаÑ_12 ÑаÑ'.split('_'), 10299 monthsParseExact: true, 10300 weekdays: 'ÐÑм_Ðаваа_ÐÑгмаÑ_ÐÑ Ð°Ð³Ð²Ð°_ÐÒ¯ÑÑв_ÐааÑан_ÐÑмба'.split('_'), 10301 weekdaysShort: 'ÐÑм_Ðав_ÐÑг_ÐÑ Ð°_ÐÒ¯Ñ_Ðаа_ÐÑм'.split('_'), 10302 weekdaysMin: 'ÐÑ_Ðа_ÐÑ_ÐÑ _ÐÒ¯_Ðа_ÐÑ'.split('_'), 10303 weekdaysParseExact: true, 10304 longDateFormat: { 10305 LT: 'HH:mm', 10306 LTS: 'HH:mm:ss', 10307 L: 'YYYY-MM-DD', 10308 LL: 'YYYY Ð¾Ð½Ñ MMMMÑн D', 10309 LLL: 'YYYY Ð¾Ð½Ñ MMMMÑн D HH:mm', 10310 LLLL: 'dddd, YYYY Ð¾Ð½Ñ MMMMÑн D HH:mm' 10311 }, 10312 meridiemParse: /Ò®Ó¨|ҮХ/i, 10313 isPM: function (input) { 10314 return input === 'ҮХ'; 10315 }, 10316 meridiem: function (hour, minute, isLower) { 10317 if (hour < 12) { 10318 return 'Ò®Ó¨'; 10319 } else { 10320 return 'ҮХ'; 10321 } 10322 }, 10323 calendar: { 10324 sameDay: '[ӨнөөдөÑ] LT', 10325 nextDay: '[ÐаÑгааÑ] LT', 10326 nextWeek: '[ÐÑÑÑ ] dddd LT', 10327 lastDay: '[Ó¨ÑигдөÑ] LT', 10328 lastWeek: '[ӨнгөÑÑөн] dddd LT', 10329 sameElse: 'L' 10330 }, 10331 relativeTime: { 10332 future: '%s даÑаа', 10333 past: '%s өмнө', 10334 s: translate, 10335 ss: translate, 10336 m: translate, 10337 mm: translate, 10338 h: translate, 10339 hh: translate, 10340 d: translate, 10341 dd: translate, 10342 M: translate, 10343 MM: translate, 10344 y: translate, 10345 yy: translate 10346 }, 10347 dayOfMonthOrdinalParse: /\d{1,2} өдөÑ/, 10348 ordinal: function (number, period) { 10349 switch (period) { 10350 case 'd': 10351 case 'D': 10352 case 'DDD': 10353 return number + ' өдөÑ'; 10354 10355 default: 10356 return number; 10357 } 10358 } 10359 }); 10360 return mn; 10361}); 10362 10363/***/ }), 10364
vendor: 6,292 bytes, lines 10365-10602
10365/***/ "./node_modules/moment/locale/mr.js": 10366/*!******************************************!*\ 10367 !*** ./node_modules/moment/locale/mr.js ***! 10368 \******************************************/ 10369/*! no static exports found */ 10370/***/ (function(module, exports, __webpack_require__) { 10371 10372//! moment.js locale configuration 10373; 10374 10375(function (global, factory) { 10376 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 10377})(this, function (moment) { 10378 'use strict'; 10379 10380 var symbolMap = { 10381 '1': '१', 10382 '2': '२', 10383 '3': '३', 10384 '4': '४', 10385 '5': '५', 10386 '6': '६', 10387 '7': 'à¥', 10388 '8': '८', 10389 '9': '९', 10390 '0': '०' 10391 }, 10392 numberMap = { 10393 '१': '1', 10394 '२': '2', 10395 '३': '3', 10396 '४': '4', 10397 '५': '5', 10398 '६': '6', 10399 'à¥': '7', 10400 '८': '8', 10401 '९': '9', 10402 '०': '0' 10403 }; 10404 10405 function relativeTimeMr(number, withoutSuffix, string, isFuture) { 10406 var output = ''; 10407 10408 if (withoutSuffix) { 10409 switch (string) { 10410 case 's': 10411 output = 'à¤à¤¾à¤¹à¥ सà¥à¤à¤à¤¦'; 10412 break; 10413 10414 case 'ss': 10415 output = '%d सà¥à¤à¤à¤¦'; 10416 break; 10417 10418 case 'm': 10419 output = 'à¤à¤ मिनिà¤'; 10420 break; 10421 10422 case 'mm': 10423 output = '%d मिनिà¤à¥'; 10424 break; 10425 10426 case 'h': 10427 output = 'à¤à¤ तास'; 10428 break; 10429 10430 case 'hh': 10431 output = '%d तास'; 10432 break; 10433 10434 case 'd': 10435 output = 'à¤à¤ दिवस'; 10436 break; 10437 10438 case 'dd': 10439 output = '%d दिवस'; 10440 break; 10441 10442 case 'M': 10443 output = 'à¤à¤ महिना'; 10444 break; 10445 10446 case 'MM': 10447 output = '%d महिनà¥'; 10448 break; 10449 10450 case 'y': 10451 output = 'à¤à¤ वरà¥à¤·'; 10452 break; 10453 10454 case 'yy': 10455 output = '%d वरà¥à¤·à¥'; 10456 break; 10457 } 10458 } else { 10459 switch (string) { 10460 case 's': 10461 output = 'à¤à¤¾à¤¹à¥ सà¥à¤à¤à¤¦à¤¾à¤'; 10462 break; 10463 10464 case 'ss': 10465 output = '%d सà¥à¤à¤à¤¦à¤¾à¤'; 10466 break; 10467 10468 case 'm': 10469 output = 'à¤à¤à¤¾ मिनिà¤à¤¾'; 10470 break; 10471 10472 case 'mm': 10473 output = '%d मिनिà¤à¤¾à¤'; 10474 break; 10475 10476 case 'h': 10477 output = 'à¤à¤à¤¾ तासा'; 10478 break; 10479 10480 case 'hh': 10481 output = '%d तासाà¤'; 10482 break; 10483 10484 case 'd': 10485 output = 'à¤à¤à¤¾ दिवसा'; 10486 break; 10487 10488 case 'dd': 10489 output = '%d दिवसाà¤'; 10490 break; 10491 10492 case 'M': 10493 output = 'à¤à¤à¤¾ महिनà¥à¤¯à¤¾'; 10494 break; 10495 10496 case 'MM': 10497 output = '%d महिनà¥à¤¯à¤¾à¤'; 10498 break; 10499 10500 case 'y': 10501 output = 'à¤à¤à¤¾ वरà¥à¤·à¤¾'; 10502 break; 10503 10504 case 'yy': 10505 output = '%d वरà¥à¤·à¤¾à¤'; 10506 break; 10507 } 10508 } 10509 10510 return output.replace(/%d/i, number); 10511 } 10512 10513 var mr = moment.defineLocale('mr', { 10514 months: 'à¤à¤¾à¤¨à¥à¤µà¤¾à¤°à¥_फà¥à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥_मारà¥à¤_à¤à¤ªà¥à¤°à¤¿à¤²_मà¥_à¤à¥à¤¨_à¤à¥à¤²à¥_à¤à¤à¤¸à¥à¤_सपà¥à¤à¥à¤à¤¬à¤°_à¤à¤à¥à¤à¥à¤¬à¤°_नà¥à¤µà¥à¤¹à¥à¤à¤¬à¤°_डिसà¥à¤à¤¬à¤°'.split('_'), 10515 monthsShort: 'à¤à¤¾à¤¨à¥._फà¥à¤¬à¥à¤°à¥._मारà¥à¤._à¤à¤ªà¥à¤°à¤¿._मà¥._à¤à¥à¤¨._à¤à¥à¤²à¥._à¤à¤._सपà¥à¤à¥à¤._à¤à¤à¥à¤à¥._नà¥à¤µà¥à¤¹à¥à¤._डिसà¥à¤.'.split('_'), 10516 monthsParseExact: true, 10517 weekdays: 'रविवार_सà¥à¤®à¤µà¤¾à¤°_मà¤à¤à¤³à¤µà¤¾à¤°_बà¥à¤§à¤µà¤¾à¤°_à¤à¥à¤°à¥à¤µà¤¾à¤°_शà¥à¤à¥à¤°à¤µà¤¾à¤°_शनिवार'.split('_'), 10518 weekdaysShort: 'रवि_सà¥à¤®_मà¤à¤à¤³_बà¥à¤§_à¤à¥à¤°à¥_शà¥à¤à¥à¤°_शनि'.split('_'), 10519 weekdaysMin: 'र_सà¥_मà¤_बà¥_à¤à¥_शà¥_श'.split('_'), 10520 longDateFormat: { 10521 LT: 'A h:mm वाà¤à¤¤à¤¾', 10522 LTS: 'A h:mm:ss वाà¤à¤¤à¤¾', 10523 L: 'DD/MM/YYYY', 10524 LL: 'D MMMM YYYY', 10525 LLL: 'D MMMM YYYY, A h:mm वाà¤à¤¤à¤¾', 10526 LLLL: 'dddd, D MMMM YYYY, A h:mm वाà¤à¤¤à¤¾' 10527 }, 10528 calendar: { 10529 sameDay: '[à¤à¤] LT', 10530 nextDay: '[à¤à¤¦à¥à¤¯à¤¾] LT', 10531 nextWeek: 'dddd, LT', 10532 lastDay: '[à¤à¤¾à¤²] LT', 10533 lastWeek: '[माà¤à¥à¤²] dddd, LT', 10534 sameElse: 'L' 10535 }, 10536 relativeTime: { 10537 future: '%sमधà¥à¤¯à¥', 10538 past: '%sपà¥à¤°à¥à¤µà¥', 10539 s: relativeTimeMr, 10540 ss: relativeTimeMr, 10541 m: relativeTimeMr, 10542 mm: relativeTimeMr, 10543 h: relativeTimeMr, 10544 hh: relativeTimeMr, 10545 d: relativeTimeMr, 10546 dd: relativeTimeMr, 10547 M: relativeTimeMr, 10548 MM: relativeTimeMr, 10549 y: relativeTimeMr, 10550 yy: relativeTimeMr 10551 }, 10552 preparse: function (string) { 10553 return string.replace(/[१२३४५६à¥à¥®à¥¯à¥¦]/g, function (match) { 10554 return numberMap[match]; 10555 }); 10556 }, 10557 postformat: function (string) { 10558 return string.replace(/\d/g, function (match) { 10559 return symbolMap[match]; 10560 }); 10561 }, 10562 meridiemParse: /रातà¥à¤°à¥|सà¤à¤¾à¤³à¥|दà¥à¤ªà¤¾à¤°à¥|सायà¤à¤à¤¾à¤³à¥/, 10563 meridiemHour: function (hour, meridiem) { 10564 if (hour === 12) { 10565 hour = 0; 10566 } 10567 10568 if (meridiem === 'रातà¥à¤°à¥') { 10569 return hour < 4 ? hour : hour + 12; 10570 } else if (meridiem === 'सà¤à¤¾à¤³à¥') { 10571 return hour; 10572 } else if (meridiem === 'दà¥à¤ªà¤¾à¤°à¥') { 10573 return hour >= 10 ? hour : hour + 12; 10574 } else if (meridiem === 'सायà¤à¤à¤¾à¤³à¥') { 10575 return hour + 12; 10576 } 10577 }, 10578 meridiem: function (hour, minute, isLower) { 10579 if (hour < 4) { 10580 return 'रातà¥à¤°à¥'; 10581 } else if (hour < 10) { 10582 return 'सà¤à¤¾à¤³à¥'; 10583 } else if (hour < 17) { 10584 return 'दà¥à¤ªà¤¾à¤°à¥'; 10585 } else if (hour < 20) { 10586 return 'सायà¤à¤à¤¾à¤³à¥'; 10587 } else { 10588 return 'रातà¥à¤°à¥'; 10589 } 10590 }, 10591 week: { 10592 dow: 0, 10593 // Sunday is the first day of the week. 10594 doy: 6 // The week that contains Jan 6th is the first week of the year. 10595 10596 } 10597 }); 10598 return mr; 10599}); 10600 10601/***/ }), 10602
vendor: 2,547 bytes, lines 10603-10692
10603/***/ "./node_modules/moment/locale/ms-my.js": 10604/*!*********************************************!*\ 10605 !*** ./node_modules/moment/locale/ms-my.js ***! 10606 \*********************************************/ 10607/*! no static exports found */ 10608/***/ (function(module, exports, __webpack_require__) { 10609 10610//! moment.js locale configuration 10611; 10612 10613(function (global, factory) { 10614 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 10615})(this, function (moment) { 10616 'use strict'; 10617 10618 var msMy = moment.defineLocale('ms-my', { 10619 months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), 10620 monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), 10621 weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), 10622 weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), 10623 weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), 10624 longDateFormat: { 10625 LT: 'HH.mm', 10626 LTS: 'HH.mm.ss', 10627 L: 'DD/MM/YYYY', 10628 LL: 'D MMMM YYYY', 10629 LLL: 'D MMMM YYYY [pukul] HH.mm', 10630 LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm' 10631 }, 10632 meridiemParse: /pagi|tengahari|petang|malam/, 10633 meridiemHour: function (hour, meridiem) { 10634 if (hour === 12) { 10635 hour = 0; 10636 } 10637 10638 if (meridiem === 'pagi') { 10639 return hour; 10640 } else if (meridiem === 'tengahari') { 10641 return hour >= 11 ? hour : hour + 12; 10642 } else if (meridiem === 'petang' || meridiem === 'malam') { 10643 return hour + 12; 10644 } 10645 }, 10646 meridiem: function (hours, minutes, isLower) { 10647 if (hours < 11) { 10648 return 'pagi'; 10649 } else if (hours < 15) { 10650 return 'tengahari'; 10651 } else if (hours < 19) { 10652 return 'petang'; 10653 } else { 10654 return 'malam'; 10655 } 10656 }, 10657 calendar: { 10658 sameDay: '[Hari ini pukul] LT', 10659 nextDay: '[Esok pukul] LT', 10660 nextWeek: 'dddd [pukul] LT', 10661 lastDay: '[Kelmarin pukul] LT', 10662 lastWeek: 'dddd [lepas pukul] LT', 10663 sameElse: 'L' 10664 }, 10665 relativeTime: { 10666 future: 'dalam %s', 10667 past: '%s yang lepas', 10668 s: 'beberapa saat', 10669 ss: '%d saat', 10670 m: 'seminit', 10671 mm: '%d minit', 10672 h: 'sejam', 10673 hh: '%d jam', 10674 d: 'sehari', 10675 dd: '%d hari', 10676 M: 'sebulan', 10677 MM: '%d bulan', 10678 y: 'setahun', 10679 yy: '%d tahun' 10680 }, 10681 week: { 10682 dow: 1, 10683 // Monday is the first day of the week. 10684 doy: 7 // The week that contains Jan 7th is the first week of the year. 10685 10686 } 10687 }); 10688 return msMy; 10689}); 10690 10691/***/ }), 10692
vendor: 2,528 bytes, lines 10693-10782
10693/***/ "./node_modules/moment/locale/ms.js": 10694/*!******************************************!*\ 10695 !*** ./node_modules/moment/locale/ms.js ***! 10696 \******************************************/ 10697/*! no static exports found */ 10698/***/ (function(module, exports, __webpack_require__) { 10699 10700//! moment.js locale configuration 10701; 10702 10703(function (global, factory) { 10704 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 10705})(this, function (moment) { 10706 'use strict'; 10707 10708 var ms = moment.defineLocale('ms', { 10709 months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), 10710 monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), 10711 weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), 10712 weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), 10713 weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), 10714 longDateFormat: { 10715 LT: 'HH.mm', 10716 LTS: 'HH.mm.ss', 10717 L: 'DD/MM/YYYY', 10718 LL: 'D MMMM YYYY', 10719 LLL: 'D MMMM YYYY [pukul] HH.mm', 10720 LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm' 10721 }, 10722 meridiemParse: /pagi|tengahari|petang|malam/, 10723 meridiemHour: function (hour, meridiem) { 10724 if (hour === 12) { 10725 hour = 0; 10726 } 10727 10728 if (meridiem === 'pagi') { 10729 return hour; 10730 } else if (meridiem === 'tengahari') { 10731 return hour >= 11 ? hour : hour + 12; 10732 } else if (meridiem === 'petang' || meridiem === 'malam') { 10733 return hour + 12; 10734 } 10735 }, 10736 meridiem: function (hours, minutes, isLower) { 10737 if (hours < 11) { 10738 return 'pagi'; 10739 } else if (hours < 15) { 10740 return 'tengahari'; 10741 } else if (hours < 19) { 10742 return 'petang'; 10743 } else { 10744 return 'malam'; 10745 } 10746 }, 10747 calendar: { 10748 sameDay: '[Hari ini pukul] LT', 10749 nextDay: '[Esok pukul] LT', 10750 nextWeek: 'dddd [pukul] LT', 10751 lastDay: '[Kelmarin pukul] LT', 10752 lastWeek: 'dddd [lepas pukul] LT', 10753 sameElse: 'L' 10754 }, 10755 relativeTime: { 10756 future: 'dalam %s', 10757 past: '%s yang lepas', 10758 s: 'beberapa saat', 10759 ss: '%d saat', 10760 m: 'seminit', 10761 mm: '%d minit', 10762 h: 'sejam', 10763 hh: '%d jam', 10764 d: 'sehari', 10765 dd: '%d hari', 10766 M: 'sebulan', 10767 MM: '%d bulan', 10768 y: 'setahun', 10769 yy: '%d tahun' 10770 }, 10771 week: { 10772 dow: 1, 10773 // Monday is the first day of the week. 10774 doy: 7 // The week that contains Jan 7th is the first week of the year. 10775 10776 } 10777 }); 10778 return ms; 10779}); 10780 10781/***/ }), 10782
vendor: 1,942 bytes, lines 10783-10849
10783/***/ "./node_modules/moment/locale/mt.js": 10784/*!******************************************!*\ 10785 !*** ./node_modules/moment/locale/mt.js ***! 10786 \******************************************/ 10787/*! no static exports found */ 10788/***/ (function(module, exports, __webpack_require__) { 10789 10790//! moment.js locale configuration 10791; 10792 10793(function (global, factory) { 10794 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 10795})(this, function (moment) { 10796 'use strict'; 10797 10798 var mt = moment.defineLocale('mt', { 10799 months: 'Jannar_Frar_Marzu_April_Mejju_Ä unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_DiÄembru'.split('_'), 10800 monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ä un_Lul_Aww_Set_Ott_Nov_DiÄ'.split('_'), 10801 weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ä imgħa_Is-Sibt'.split('_'), 10802 weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ä im_Sib'.split('_'), 10803 weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ä i_Si'.split('_'), 10804 longDateFormat: { 10805 LT: 'HH:mm', 10806 LTS: 'HH:mm:ss', 10807 L: 'DD/MM/YYYY', 10808 LL: 'D MMMM YYYY', 10809 LLL: 'D MMMM YYYY HH:mm', 10810 LLLL: 'dddd, D MMMM YYYY HH:mm' 10811 }, 10812 calendar: { 10813 sameDay: '[Illum fil-]LT', 10814 nextDay: '[Għada fil-]LT', 10815 nextWeek: 'dddd [fil-]LT', 10816 lastDay: '[Il-bieraħ fil-]LT', 10817 lastWeek: 'dddd [li għadda] [fil-]LT', 10818 sameElse: 'L' 10819 }, 10820 relativeTime: { 10821 future: 'fâ %s', 10822 past: '%s ilu', 10823 s: 'ftit sekondi', 10824 ss: '%d sekondi', 10825 m: 'minuta', 10826 mm: '%d minuti', 10827 h: 'siegħa', 10828 hh: '%d siegħat', 10829 d: 'Ä¡urnata', 10830 dd: '%d Ä¡ranet', 10831 M: 'xahar', 10832 MM: '%d xhur', 10833 y: 'sena', 10834 yy: '%d sni' 10835 }, 10836 dayOfMonthOrdinalParse: /\d{1,2}º/, 10837 ordinal: '%dº', 10838 week: { 10839 dow: 1, 10840 // Monday is the first day of the week. 10841 doy: 4 // The week that contains Jan 4th is the first week of the year. 10842 10843 } 10844 }); 10845 return mt; 10846}); 10847 10848/***/ }), 10849
vendor: 3,201 bytes, lines 10850-10948
10850/***/ "./node_modules/moment/locale/my.js": 10851/*!******************************************!*\ 10852 !*** ./node_modules/moment/locale/my.js ***! 10853 \******************************************/ 10854/*! no static exports found */ 10855/***/ (function(module, exports, __webpack_require__) { 10856 10857//! moment.js locale configuration 10858; 10859 10860(function (global, factory) { 10861 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 10862})(this, function (moment) { 10863 'use strict'; 10864 10865 var symbolMap = { 10866 '1': 'á', 10867 '2': 'á', 10868 '3': 'á', 10869 '4': 'á', 10870 '5': 'á ', 10871 '6': 'á', 10872 '7': 'á', 10873 '8': 'á', 10874 '9': 'á', 10875 '0': 'á' 10876 }, 10877 numberMap = { 10878 'á': '1', 10879 'á': '2', 10880 'á': '3', 10881 'á': '4', 10882 'á ': '5', 10883 'á': '6', 10884 'á': '7', 10885 'á': '8', 10886 'á': '9', 10887 'á': '0' 10888 }; 10889 var my = moment.defineLocale('my', { 10890 months: 'áááºááá«áá®_áá±áá±á¬áºáá«áá®_áááº_á§áá¼á®_áá±_áá½ááº_áá°ááá¯ááº_áá¼áá¯ááº_á ááºáááºáá¬_á¡á±á¬ááºááá¯áá¬_ááá¯áááºáá¬_áá®áááºáá¬'.split('_'), 10891 monthsShort: 'áááº_áá±_áááº_áá¼á®_áá±_áá½ááº_ááá¯ááº_áá¼_á ááº_á¡á±á¬ááº_ááá¯_áá®'.split('_'), 10892 weekdays: 'ááááºá¹ááá½á±_ááááºá¹áá¬_á¡ááºá¹áá«_áá¯áá¹ááá°á¸_áá¼á¬áááá±á¸_áá±á¬áá¼á¬_á áá±'.split('_'), 10893 weekdaysShort: 'áá½á±_áá¬_áá«_áá°á¸_áá¼á¬_áá±á¬_áá±'.split('_'), 10894 weekdaysMin: 'áá½á±_áá¬_áá«_áá°á¸_áá¼á¬_áá±á¬_áá±'.split('_'), 10895 longDateFormat: { 10896 LT: 'HH:mm', 10897 LTS: 'HH:mm:ss', 10898 L: 'DD/MM/YYYY', 10899 LL: 'D MMMM YYYY', 10900 LLL: 'D MMMM YYYY HH:mm', 10901 LLLL: 'dddd D MMMM YYYY HH:mm' 10902 }, 10903 calendar: { 10904 sameDay: '[ááá±.] LT [áá¾á¬]', 10905 nextDay: '[ááááºáá¼ááº] LT [áá¾á¬]', 10906 nextWeek: 'dddd LT [áá¾á¬]', 10907 lastDay: '[ááá±.á] LT [áá¾á¬]', 10908 lastWeek: '[áá¼á®á¸áá²á·áá±á¬] dddd LT [áá¾á¬]', 10909 sameElse: 'L' 10910 }, 10911 relativeTime: { 10912 future: 'áá¬áááºá· %s áá¾á¬', 10913 past: 'áá½ááºáá²á·áá±á¬ %s á', 10914 s: 'á áá¹áááº.á¡áááºá¸áááº', 10915 ss: '%d á áá¹ááá·áº', 10916 m: 'áá áºáááá áº', 10917 mm: '%d áááá áº', 10918 h: 'áá áºáá¬áá®', 10919 hh: '%d áá¬áá®', 10920 d: 'áá áºáááº', 10921 dd: '%d áááº', 10922 M: 'áá áºá', 10923 MM: '%d á', 10924 y: 'áá áºáá¾á áº', 10925 yy: '%d áá¾á áº' 10926 }, 10927 preparse: function (string) { 10928 return string.replace(/[ááááá ááááá]/g, function (match) { 10929 return numberMap[match]; 10930 }); 10931 }, 10932 postformat: function (string) { 10933 return string.replace(/\d/g, function (match) { 10934 return symbolMap[match]; 10935 }); 10936 }, 10937 week: { 10938 dow: 1, 10939 // Monday is the first day of the week. 10940 doy: 4 // The week that contains Jan 4th is the first week of the year. 10941 10942 } 10943 }); 10944 return my; 10945}); 10946 10947/***/ }), 10948
vendor: 2,008 bytes, lines 10949-11017
10949/***/ "./node_modules/moment/locale/nb.js": 10950/*!******************************************!*\ 10951 !*** ./node_modules/moment/locale/nb.js ***! 10952 \******************************************/ 10953/*! no static exports found */ 10954/***/ (function(module, exports, __webpack_require__) { 10955 10956//! moment.js locale configuration 10957; 10958 10959(function (global, factory) { 10960 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 10961})(this, function (moment) { 10962 'use strict'; 10963 10964 var nb = moment.defineLocale('nb', { 10965 months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), 10966 monthsShort: 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'), 10967 monthsParseExact: true, 10968 weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), 10969 weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'), 10970 weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'), 10971 weekdaysParseExact: true, 10972 longDateFormat: { 10973 LT: 'HH:mm', 10974 LTS: 'HH:mm:ss', 10975 L: 'DD.MM.YYYY', 10976 LL: 'D. MMMM YYYY', 10977 LLL: 'D. MMMM YYYY [kl.] HH:mm', 10978 LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm' 10979 }, 10980 calendar: { 10981 sameDay: '[i dag kl.] LT', 10982 nextDay: '[i morgen kl.] LT', 10983 nextWeek: 'dddd [kl.] LT', 10984 lastDay: '[i går kl.] LT', 10985 lastWeek: '[forrige] dddd [kl.] LT', 10986 sameElse: 'L' 10987 }, 10988 relativeTime: { 10989 future: 'om %s', 10990 past: '%s siden', 10991 s: 'noen sekunder', 10992 ss: '%d sekunder', 10993 m: 'ett minutt', 10994 mm: '%d minutter', 10995 h: 'en time', 10996 hh: '%d timer', 10997 d: 'en dag', 10998 dd: '%d dager', 10999 M: 'en måned', 11000 MM: '%d måneder', 11001 y: 'ett år', 11002 yy: '%d år' 11003 }, 11004 dayOfMonthOrdinalParse: /\d{1,2}\./, 11005 ordinal: '%d.', 11006 week: { 11007 dow: 1, 11008 // Monday is the first day of the week. 11009 doy: 4 // The week that contains Jan 4th is the first week of the year. 11010 11011 } 11012 }); 11013 return nb; 11014}); 11015 11016/***/ }), 11017
vendor: 4,151 bytes, lines 11018-11147
11018/***/ "./node_modules/moment/locale/ne.js": 11019/*!******************************************!*\ 11020 !*** ./node_modules/moment/locale/ne.js ***! 11021 \******************************************/ 11022/*! no static exports found */ 11023/***/ (function(module, exports, __webpack_require__) { 11024 11025//! moment.js locale configuration 11026; 11027 11028(function (global, factory) { 11029 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 11030})(this, function (moment) { 11031 'use strict'; 11032 11033 var symbolMap = { 11034 '1': '१', 11035 '2': '२', 11036 '3': '३', 11037 '4': '४', 11038 '5': '५', 11039 '6': '६', 11040 '7': 'à¥', 11041 '8': '८', 11042 '9': '९', 11043 '0': '०' 11044 }, 11045 numberMap = { 11046 '१': '1', 11047 '२': '2', 11048 '३': '3', 11049 '४': '4', 11050 '५': '5', 11051 '६': '6', 11052 'à¥': '7', 11053 '८': '8', 11054 '९': '9', 11055 '०': '0' 11056 }; 11057 var ne = moment.defineLocale('ne', { 11058 months: 'à¤à¤¨à¤µà¤°à¥_फà¥à¤¬à¥à¤°à¥à¤µà¤°à¥_मारà¥à¤_ठपà¥à¤°à¤¿à¤²_मà¤_à¤à¥à¤¨_à¤à¥à¤²à¤¾à¤_ठà¤à¤·à¥à¤_सà¥à¤ªà¥à¤à¥à¤®à¥à¤¬à¤°_ठà¤à¥à¤à¥à¤¬à¤°_नà¥à¤à¥à¤®à¥à¤¬à¤°_डिसà¥à¤®à¥à¤¬à¤°'.split('_'), 11059 monthsShort: 'à¤à¤¨._फà¥à¤¬à¥à¤°à¥._मारà¥à¤_ठपà¥à¤°à¤¿._मà¤_à¤à¥à¤¨_à¤à¥à¤²à¤¾à¤._ठà¤._सà¥à¤ªà¥à¤._ठà¤à¥à¤à¥._नà¥à¤à¥._डिसà¥.'.split('_'), 11060 monthsParseExact: true, 11061 weekdays: 'à¤à¤à¤¤à¤¬à¤¾à¤°_सà¥à¤®à¤¬à¤¾à¤°_मà¤à¥à¤à¤²à¤¬à¤¾à¤°_बà¥à¤§à¤¬à¤¾à¤°_बिहिबार_शà¥à¤à¥à¤°à¤¬à¤¾à¤°_शनिबार'.split('_'), 11062 weekdaysShort: 'à¤à¤à¤¤._सà¥à¤®._मà¤à¥à¤à¤²._बà¥à¤§._बिहि._शà¥à¤à¥à¤°._शनि.'.split('_'), 11063 weekdaysMin: 'à¤._सà¥._मà¤._बà¥._बि._शà¥._श.'.split('_'), 11064 weekdaysParseExact: true, 11065 longDateFormat: { 11066 LT: 'Aà¤à¥ h:mm बà¤à¥', 11067 LTS: 'Aà¤à¥ h:mm:ss बà¤à¥', 11068 L: 'DD/MM/YYYY', 11069 LL: 'D MMMM YYYY', 11070 LLL: 'D MMMM YYYY, Aà¤à¥ h:mm बà¤à¥', 11071 LLLL: 'dddd, D MMMM YYYY, Aà¤à¥ h:mm बà¤à¥' 11072 }, 11073 preparse: function (string) { 11074 return string.replace(/[१२३४५६à¥à¥®à¥¯à¥¦]/g, function (match) { 11075 return numberMap[match]; 11076 }); 11077 }, 11078 postformat: function (string) { 11079 return string.replace(/\d/g, function (match) { 11080 return symbolMap[match]; 11081 }); 11082 }, 11083 meridiemParse: /राति|बिहान|दिà¤à¤à¤¸à¥|साà¤à¤/, 11084 meridiemHour: function (hour, meridiem) { 11085 if (hour === 12) { 11086 hour = 0; 11087 } 11088 11089 if (meridiem === 'राति') { 11090 return hour < 4 ? hour : hour + 12; 11091 } else if (meridiem === 'बिहान') { 11092 return hour; 11093 } else if (meridiem === 'दिà¤à¤à¤¸à¥') { 11094 return hour >= 10 ? hour : hour + 12; 11095 } else if (meridiem === 'साà¤à¤') { 11096 return hour + 12; 11097 } 11098 }, 11099 meridiem: function (hour, minute, isLower) { 11100 if (hour < 3) { 11101 return 'राति'; 11102 } else if (hour < 12) { 11103 return 'बिहान'; 11104 } else if (hour < 16) { 11105 return 'दिà¤à¤à¤¸à¥'; 11106 } else if (hour < 20) { 11107 return 'साà¤à¤'; 11108 } else { 11109 return 'राति'; 11110 } 11111 }, 11112 calendar: { 11113 sameDay: '[à¤à¤] LT', 11114 nextDay: '[à¤à¥à¤²à¤¿] LT', 11115 nextWeek: '[à¤à¤à¤à¤¦à¥] dddd[,] LT', 11116 lastDay: '[हिà¤à¥] LT', 11117 lastWeek: '[à¤à¤à¤à¥] dddd[,] LT', 11118 sameElse: 'L' 11119 }, 11120 relativeTime: { 11121 future: '%sमा', 11122 past: '%s ठà¤à¤¾à¤¡à¤¿', 11123 s: 'à¤à¥à¤¹à¥ à¤à¥à¤·à¤£', 11124 ss: '%d सà¥à¤à¥à¤£à¥à¤¡', 11125 m: 'à¤à¤ मिनà¥à¤', 11126 mm: '%d मिनà¥à¤', 11127 h: 'à¤à¤ à¤à¤£à¥à¤à¤¾', 11128 hh: '%d à¤à¤£à¥à¤à¤¾', 11129 d: 'à¤à¤ दिन', 11130 dd: '%d दिन', 11131 M: 'à¤à¤ महिना', 11132 MM: '%d महिना', 11133 y: 'à¤à¤ बरà¥à¤·', 11134 yy: '%d बरà¥à¤·' 11135 }, 11136 week: { 11137 dow: 0, 11138 // Sunday is the first day of the week. 11139 doy: 6 // The week that contains Jan 6th is the first week of the year. 11140 11141 } 11142 }); 11143 return ne; 11144}); 11145 11146/***/ }), 11147
vendor: 3,211 bytes, lines 11148-11236
11148/***/ "./node_modules/moment/locale/nl-be.js": 11149/*!*********************************************!*\ 11150 !*** ./node_modules/moment/locale/nl-be.js ***! 11151 \*********************************************/ 11152/*! no static exports found */ 11153/***/ (function(module, exports, __webpack_require__) { 11154 11155//! moment.js locale configuration 11156; 11157 11158(function (global, factory) { 11159 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 11160})(this, function (moment) { 11161 'use strict'; 11162 11163 var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'), 11164 monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); 11165 var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; 11166 var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; 11167 var nlBe = moment.defineLocale('nl-be', { 11168 months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), 11169 monthsShort: function (m, format) { 11170 if (!m) { 11171 return monthsShortWithDots; 11172 } else if (/-MMM-/.test(format)) { 11173 return monthsShortWithoutDots[m.month()]; 11174 } else { 11175 return monthsShortWithDots[m.month()]; 11176 } 11177 }, 11178 monthsRegex: monthsRegex, 11179 monthsShortRegex: monthsRegex, 11180 monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, 11181 monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, 11182 monthsParse: monthsParse, 11183 longMonthsParse: monthsParse, 11184 shortMonthsParse: monthsParse, 11185 weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), 11186 weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), 11187 weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), 11188 weekdaysParseExact: true, 11189 longDateFormat: { 11190 LT: 'HH:mm', 11191 LTS: 'HH:mm:ss', 11192 L: 'DD/MM/YYYY', 11193 LL: 'D MMMM YYYY', 11194 LLL: 'D MMMM YYYY HH:mm', 11195 LLLL: 'dddd D MMMM YYYY HH:mm' 11196 }, 11197 calendar: { 11198 sameDay: '[vandaag om] LT', 11199 nextDay: '[morgen om] LT', 11200 nextWeek: 'dddd [om] LT', 11201 lastDay: '[gisteren om] LT', 11202 lastWeek: '[afgelopen] dddd [om] LT', 11203 sameElse: 'L' 11204 }, 11205 relativeTime: { 11206 future: 'over %s', 11207 past: '%s geleden', 11208 s: 'een paar seconden', 11209 ss: '%d seconden', 11210 m: 'één minuut', 11211 mm: '%d minuten', 11212 h: 'één uur', 11213 hh: '%d uur', 11214 d: 'één dag', 11215 dd: '%d dagen', 11216 M: 'één maand', 11217 MM: '%d maanden', 11218 y: 'één jaar', 11219 yy: '%d jaar' 11220 }, 11221 dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, 11222 ordinal: function (number) { 11223 return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de'); 11224 }, 11225 week: { 11226 dow: 1, 11227 // Monday is the first day of the week. 11228 doy: 4 // The week that contains Jan 4th is the first week of the year. 11229 11230 } 11231 }); 11232 return nlBe; 11233}); 11234 11235/***/ }), 11236
vendor: 3,192 bytes, lines 11237-11325
11237/***/ "./node_modules/moment/locale/nl.js": 11238/*!******************************************!*\ 11239 !*** ./node_modules/moment/locale/nl.js ***! 11240 \******************************************/ 11241/*! no static exports found */ 11242/***/ (function(module, exports, __webpack_require__) { 11243 11244//! moment.js locale configuration 11245; 11246 11247(function (global, factory) { 11248 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 11249})(this, function (moment) { 11250 'use strict'; 11251 11252 var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'), 11253 monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); 11254 var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; 11255 var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; 11256 var nl = moment.defineLocale('nl', { 11257 months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), 11258 monthsShort: function (m, format) { 11259 if (!m) { 11260 return monthsShortWithDots; 11261 } else if (/-MMM-/.test(format)) { 11262 return monthsShortWithoutDots[m.month()]; 11263 } else { 11264 return monthsShortWithDots[m.month()]; 11265 } 11266 }, 11267 monthsRegex: monthsRegex, 11268 monthsShortRegex: monthsRegex, 11269 monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, 11270 monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, 11271 monthsParse: monthsParse, 11272 longMonthsParse: monthsParse, 11273 shortMonthsParse: monthsParse, 11274 weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), 11275 weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), 11276 weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), 11277 weekdaysParseExact: true, 11278 longDateFormat: { 11279 LT: 'HH:mm', 11280 LTS: 'HH:mm:ss', 11281 L: 'DD-MM-YYYY', 11282 LL: 'D MMMM YYYY', 11283 LLL: 'D MMMM YYYY HH:mm', 11284 LLLL: 'dddd D MMMM YYYY HH:mm' 11285 }, 11286 calendar: { 11287 sameDay: '[vandaag om] LT', 11288 nextDay: '[morgen om] LT', 11289 nextWeek: 'dddd [om] LT', 11290 lastDay: '[gisteren om] LT', 11291 lastWeek: '[afgelopen] dddd [om] LT', 11292 sameElse: 'L' 11293 }, 11294 relativeTime: { 11295 future: 'over %s', 11296 past: '%s geleden', 11297 s: 'een paar seconden', 11298 ss: '%d seconden', 11299 m: 'één minuut', 11300 mm: '%d minuten', 11301 h: 'één uur', 11302 hh: '%d uur', 11303 d: 'één dag', 11304 dd: '%d dagen', 11305 M: 'één maand', 11306 MM: '%d maanden', 11307 y: 'één jaar', 11308 yy: '%d jaar' 11309 }, 11310 dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, 11311 ordinal: function (number) { 11312 return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de'); 11313 }, 11314 week: { 11315 dow: 1, 11316 // Monday is the first day of the week. 11317 doy: 4 // The week that contains Jan 4th is the first week of the year. 11318 11319 } 11320 }); 11321 return nl; 11322}); 11323 11324/***/ }), 11325
vendor: 1,953 bytes, lines 11326-11392
11326/***/ "./node_modules/moment/locale/nn.js": 11327/*!******************************************!*\ 11328 !*** ./node_modules/moment/locale/nn.js ***! 11329 \******************************************/ 11330/*! no static exports found */ 11331/***/ (function(module, exports, __webpack_require__) { 11332 11333//! moment.js locale configuration 11334; 11335 11336(function (global, factory) { 11337 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 11338})(this, function (moment) { 11339 'use strict'; 11340 11341 var nn = moment.defineLocale('nn', { 11342 months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), 11343 monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), 11344 weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), 11345 weekdaysShort: 'sun_mån_tys_ons_tor_fre_lau'.split('_'), 11346 weekdaysMin: 'su_må_ty_on_to_fr_lø'.split('_'), 11347 longDateFormat: { 11348 LT: 'HH:mm', 11349 LTS: 'HH:mm:ss', 11350 L: 'DD.MM.YYYY', 11351 LL: 'D. MMMM YYYY', 11352 LLL: 'D. MMMM YYYY [kl.] H:mm', 11353 LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm' 11354 }, 11355 calendar: { 11356 sameDay: '[I dag klokka] LT', 11357 nextDay: '[I morgon klokka] LT', 11358 nextWeek: 'dddd [klokka] LT', 11359 lastDay: '[I går klokka] LT', 11360 lastWeek: '[Føregåande] dddd [klokka] LT', 11361 sameElse: 'L' 11362 }, 11363 relativeTime: { 11364 future: 'om %s', 11365 past: '%s sidan', 11366 s: 'nokre sekund', 11367 ss: '%d sekund', 11368 m: 'eit minutt', 11369 mm: '%d minutt', 11370 h: 'ein time', 11371 hh: '%d timar', 11372 d: 'ein dag', 11373 dd: '%d dagar', 11374 M: 'ein månad', 11375 MM: '%d månader', 11376 y: 'eit år', 11377 yy: '%d år' 11378 }, 11379 dayOfMonthOrdinalParse: /\d{1,2}\./, 11380 ordinal: '%d.', 11381 week: { 11382 dow: 1, 11383 // Monday is the first day of the week. 11384 doy: 4 // The week that contains Jan 4th is the first week of the year. 11385 11386 } 11387 }); 11388 return nn; 11389}); 11390 11391/***/ }), 11392
vendor: 4,303 bytes, lines 11393-11523
11393/***/ "./node_modules/moment/locale/pa-in.js": 11394/*!*********************************************!*\ 11395 !*** ./node_modules/moment/locale/pa-in.js ***! 11396 \*********************************************/ 11397/*! no static exports found */ 11398/***/ (function(module, exports, __webpack_require__) { 11399 11400//! moment.js locale configuration 11401; 11402 11403(function (global, factory) { 11404 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 11405})(this, function (moment) { 11406 'use strict'; 11407 11408 var symbolMap = { 11409 '1': 'à©§', 11410 '2': '੨', 11411 '3': 'à©©', 11412 '4': '੪', 11413 '5': 'à©«', 11414 '6': '੬', 11415 '7': 'à©', 11416 '8': 'à©®', 11417 '9': '੯', 11418 '0': '੦' 11419 }, 11420 numberMap = { 11421 'à©§': '1', 11422 '੨': '2', 11423 'à©©': '3', 11424 '੪': '4', 11425 'à©«': '5', 11426 '੬': '6', 11427 'à©': '7', 11428 'à©®': '8', 11429 '੯': '9', 11430 '੦': '0' 11431 }; 11432 var paIn = moment.defineLocale('pa-in', { 11433 // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi. 11434 months: 'à¨à¨¨à¨µà¨°à©_ਫ਼ਰਵਰà©_ਮਾਰà¨_ਠਪà©à¨°à©à¨²_ਮà¨_à¨à©à¨¨_à¨à©à¨²à¨¾à¨_ਠà¨à¨¸à¨¤_ਸਤੰਬਰ_ਠà¨à¨¤à©à¨¬à¨°_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), 11435 monthsShort: 'à¨à¨¨à¨µà¨°à©_ਫ਼ਰਵਰà©_ਮਾਰà¨_ਠਪà©à¨°à©à¨²_ਮà¨_à¨à©à¨¨_à¨à©à¨²à¨¾à¨_ਠà¨à¨¸à¨¤_ਸਤੰਬਰ_ਠà¨à¨¤à©à¨¬à¨°_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), 11436 weekdays: 'à¨à¨¤à¨µà¨¾à¨°_ਸà©à¨®à¨µà¨¾à¨°_ਮੰà¨à¨²à¨µà¨¾à¨°_ਬà©à¨§à¨µà¨¾à¨°_ਵà©à¨°à¨µà¨¾à¨°_ਸ਼à©à©±à¨à¨°à¨µà¨¾à¨°_ਸ਼ਨà©à¨à¨°à¨µà¨¾à¨°'.split('_'), 11437 weekdaysShort: 'à¨à¨¤_ਸà©à¨®_ਮੰà¨à¨²_ਬà©à¨§_ਵà©à¨°_ਸ਼à©à¨à¨°_ਸ਼ਨà©'.split('_'), 11438 weekdaysMin: 'à¨à¨¤_ਸà©à¨®_ਮੰà¨à¨²_ਬà©à¨§_ਵà©à¨°_ਸ਼à©à¨à¨°_ਸ਼ਨà©'.split('_'), 11439 longDateFormat: { 11440 LT: 'A h:mm ਵà¨à©', 11441 LTS: 'A h:mm:ss ਵà¨à©', 11442 L: 'DD/MM/YYYY', 11443 LL: 'D MMMM YYYY', 11444 LLL: 'D MMMM YYYY, A h:mm ਵà¨à©', 11445 LLLL: 'dddd, D MMMM YYYY, A h:mm ਵà¨à©' 11446 }, 11447 calendar: { 11448 sameDay: '[ਠà¨] LT', 11449 nextDay: '[à¨à¨²] LT', 11450 nextWeek: '[ਠà¨à¨²à¨¾] dddd, LT', 11451 lastDay: '[à¨à¨²] LT', 11452 lastWeek: '[ਪਿà¨à¨²à©] dddd, LT', 11453 sameElse: 'L' 11454 }, 11455 relativeTime: { 11456 future: '%s ਵਿੱà¨', 11457 past: '%s ਪਿà¨à¨²à©', 11458 s: 'à¨à©à¨ ਸà¨à¨¿à©°à¨', 11459 ss: '%d ਸà¨à¨¿à©°à¨', 11460 m: 'à¨à¨ ਮਿੰà¨', 11461 mm: '%d ਮਿੰà¨', 11462 h: 'à¨à©±à¨ à¨à©°à¨à¨¾', 11463 hh: '%d à¨à©°à¨à©', 11464 d: 'à¨à©±à¨ ਦਿਨ', 11465 dd: '%d ਦਿਨ', 11466 M: 'à¨à©±à¨ ਮਹà©à¨¨à¨¾', 11467 MM: '%d ਮਹà©à¨¨à©', 11468 y: 'à¨à©±à¨ ਸਾਲ', 11469 yy: '%d ਸਾਲ' 11470 }, 11471 preparse: function (string) { 11472 return string.replace(/[੧੨੩੪੫੬à©à©®à©¯à©¦]/g, function (match) { 11473 return numberMap[match]; 11474 }); 11475 }, 11476 postformat: function (string) { 11477 return string.replace(/\d/g, function (match) { 11478 return symbolMap[match]; 11479 }); 11480 }, 11481 // Punjabi notation for meridiems are quite fuzzy in practice. While there exists 11482 // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. 11483 meridiemParse: /ਰਾਤ|ਸਵà©à¨°|ਦà©à¨ªà¨¹à¨¿à¨°|ਸ਼ਾਮ/, 11484 meridiemHour: function (hour, meridiem) { 11485 if (hour === 12) { 11486 hour = 0; 11487 } 11488 11489 if (meridiem === 'ਰਾਤ') { 11490 return hour < 4 ? hour : hour + 12; 11491 } else if (meridiem === 'ਸਵà©à¨°') { 11492 return hour; 11493 } else if (meridiem === 'ਦà©à¨ªà¨¹à¨¿à¨°') { 11494 return hour >= 10 ? hour : hour + 12; 11495 } else if (meridiem === 'ਸ਼ਾਮ') { 11496 return hour + 12; 11497 } 11498 }, 11499 meridiem: function (hour, minute, isLower) { 11500 if (hour < 4) { 11501 return 'ਰਾਤ'; 11502 } else if (hour < 10) { 11503 return 'ਸਵà©à¨°'; 11504 } else if (hour < 17) { 11505 return 'ਦà©à¨ªà¨¹à¨¿à¨°'; 11506 } else if (hour < 20) { 11507 return 'ਸ਼ਾਮ'; 11508 } else { 11509 return 'ਰਾਤ'; 11510 } 11511 }, 11512 week: { 11513 dow: 0, 11514 // Sunday is the first day of the week. 11515 doy: 6 // The week that contains Jan 6th is the first week of the year. 11516 11517 } 11518 }); 11519 return paIn; 11520}); 11521 11522/***/ }), 11523
vendor: 4,092 bytes, lines 11524-11668
11524/***/ "./node_modules/moment/locale/pl.js": 11525/*!******************************************!*\ 11526 !*** ./node_modules/moment/locale/pl.js ***! 11527 \******************************************/ 11528/*! no static exports found */ 11529/***/ (function(module, exports, __webpack_require__) { 11530 11531//! moment.js locale configuration 11532; 11533 11534(function (global, factory) { 11535 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 11536})(this, function (moment) { 11537 'use strict'; 11538 11539 var monthsNominative = 'styczeÅ_luty_marzec_kwiecieÅ_maj_czerwiec_lipiec_sierpieÅ_wrzesieÅ_październik_listopad_grudzieÅ'.split('_'), 11540 monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrzeÅnia_października_listopada_grudnia'.split('_'); 11541 11542 function plural(n) { 11543 return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1; 11544 } 11545 11546 function translate(number, withoutSuffix, key) { 11547 var result = number + ' '; 11548 11549 switch (key) { 11550 case 'ss': 11551 return result + (plural(number) ? 'sekundy' : 'sekund'); 11552 11553 case 'm': 11554 return withoutSuffix ? 'minuta' : 'minutÄ'; 11555 11556 case 'mm': 11557 return result + (plural(number) ? 'minuty' : 'minut'); 11558 11559 case 'h': 11560 return withoutSuffix ? 'godzina' : 'godzinÄ'; 11561 11562 case 'hh': 11563 return result + (plural(number) ? 'godziny' : 'godzin'); 11564 11565 case 'MM': 11566 return result + (plural(number) ? 'miesiÄ ce' : 'miesiÄcy'); 11567 11568 case 'yy': 11569 return result + (plural(number) ? 'lata' : 'lat'); 11570 } 11571 } 11572 11573 var pl = moment.defineLocale('pl', { 11574 months: function (momentToFormat, format) { 11575 if (!momentToFormat) { 11576 return monthsNominative; 11577 } else if (format === '') { 11578 // Hack: if format empty we know this is used to generate 11579 // RegExp by moment. Give then back both valid forms of months 11580 // in RegExp ready format. 11581 return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')'; 11582 } else if (/D MMMM/.test(format)) { 11583 return monthsSubjective[momentToFormat.month()]; 11584 } else { 11585 return monthsNominative[momentToFormat.month()]; 11586 } 11587 }, 11588 monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), 11589 weekdays: 'niedziela_poniedziaÅek_wtorek_Åroda_czwartek_piÄ tek_sobota'.split('_'), 11590 weekdaysShort: 'ndz_pon_wt_År_czw_pt_sob'.split('_'), 11591 weekdaysMin: 'Nd_Pn_Wt_År_Cz_Pt_So'.split('_'), 11592 longDateFormat: { 11593 LT: 'HH:mm', 11594 LTS: 'HH:mm:ss', 11595 L: 'DD.MM.YYYY', 11596 LL: 'D MMMM YYYY', 11597 LLL: 'D MMMM YYYY HH:mm', 11598 LLLL: 'dddd, D MMMM YYYY HH:mm' 11599 }, 11600 calendar: { 11601 sameDay: '[DziÅ o] LT', 11602 nextDay: '[Jutro o] LT', 11603 nextWeek: function () { 11604 switch (this.day()) { 11605 case 0: 11606 return '[W niedzielÄ o] LT'; 11607 11608 case 2: 11609 return '[We wtorek o] LT'; 11610 11611 case 3: 11612 return '[W ÅrodÄ o] LT'; 11613 11614 case 6: 11615 return '[W sobotÄ o] LT'; 11616 11617 default: 11618 return '[W] dddd [o] LT'; 11619 } 11620 }, 11621 lastDay: '[Wczoraj o] LT', 11622 lastWeek: function () { 11623 switch (this.day()) { 11624 case 0: 11625 return '[W zeszÅÄ niedzielÄ o] LT'; 11626 11627 case 3: 11628 return '[W zeszÅÄ ÅrodÄ o] LT'; 11629 11630 case 6: 11631 return '[W zeszÅÄ sobotÄ o] LT'; 11632 11633 default: 11634 return '[W zeszÅy] dddd [o] LT'; 11635 } 11636 }, 11637 sameElse: 'L' 11638 }, 11639 relativeTime: { 11640 future: 'za %s', 11641 past: '%s temu', 11642 s: 'kilka sekund', 11643 ss: translate, 11644 m: translate, 11645 mm: translate, 11646 h: translate, 11647 hh: translate, 11648 d: '1 dzieÅ', 11649 dd: '%d dni', 11650 M: 'miesiÄ c', 11651 MM: translate, 11652 y: 'rok', 11653 yy: translate 11654 }, 11655 dayOfMonthOrdinalParse: /\d{1,2}\./, 11656 ordinal: '%d.', 11657 week: { 11658 dow: 1, 11659 // Monday is the first day of the week. 11660 doy: 4 // The week that contains Jan 4th is the first week of the year. 11661 11662 } 11663 }); 11664 return pl; 11665}); 11666 11667/***/ }), 11668
vendor: 2,039 bytes, lines 11669-11733
11669/***/ "./node_modules/moment/locale/pt-br.js": 11670/*!*********************************************!*\ 11671 !*** ./node_modules/moment/locale/pt-br.js ***! 11672 \*********************************************/ 11673/*! no static exports found */ 11674/***/ (function(module, exports, __webpack_require__) { 11675 11676//! moment.js locale configuration 11677; 11678 11679(function (global, factory) { 11680 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 11681})(this, function (moment) { 11682 'use strict'; 11683 11684 var ptBr = moment.defineLocale('pt-br', { 11685 months: 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), 11686 monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), 11687 weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), 11688 weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), 11689 weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), 11690 weekdaysParseExact: true, 11691 longDateFormat: { 11692 LT: 'HH:mm', 11693 LTS: 'HH:mm:ss', 11694 L: 'DD/MM/YYYY', 11695 LL: 'D [de] MMMM [de] YYYY', 11696 LLL: 'D [de] MMMM [de] YYYY [à s] HH:mm', 11697 LLLL: 'dddd, D [de] MMMM [de] YYYY [à s] HH:mm' 11698 }, 11699 calendar: { 11700 sameDay: '[Hoje à s] LT', 11701 nextDay: '[Amanhã à s] LT', 11702 nextWeek: 'dddd [à s] LT', 11703 lastDay: '[Ontem à s] LT', 11704 lastWeek: function () { 11705 return this.day() === 0 || this.day() === 6 ? '[Ãltimo] dddd [à s] LT' : // Saturday + Sunday 11706 '[Ãltima] dddd [à s] LT'; // Monday - Friday 11707 }, 11708 sameElse: 'L' 11709 }, 11710 relativeTime: { 11711 future: 'em %s', 11712 past: 'há %s', 11713 s: 'poucos segundos', 11714 ss: '%d segundos', 11715 m: 'um minuto', 11716 mm: '%d minutos', 11717 h: 'uma hora', 11718 hh: '%d horas', 11719 d: 'um dia', 11720 dd: '%d dias', 11721 M: 'um mês', 11722 MM: '%d meses', 11723 y: 'um ano', 11724 yy: '%d anos' 11725 }, 11726 dayOfMonthOrdinalParse: /\d{1,2}º/, 11727 ordinal: '%dº' 11728 }); 11729 return ptBr; 11730}); 11731 11732/***/ }), 11733
vendor: 2,159 bytes, lines 11734-11804
11734/***/ "./node_modules/moment/locale/pt.js": 11735/*!******************************************!*\ 11736 !*** ./node_modules/moment/locale/pt.js ***! 11737 \******************************************/ 11738/*! no static exports found */ 11739/***/ (function(module, exports, __webpack_require__) { 11740 11741//! moment.js locale configuration 11742; 11743 11744(function (global, factory) { 11745 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 11746})(this, function (moment) { 11747 'use strict'; 11748 11749 var pt = moment.defineLocale('pt', { 11750 months: 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), 11751 monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), 11752 weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), 11753 weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), 11754 weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), 11755 weekdaysParseExact: true, 11756 longDateFormat: { 11757 LT: 'HH:mm', 11758 LTS: 'HH:mm:ss', 11759 L: 'DD/MM/YYYY', 11760 LL: 'D [de] MMMM [de] YYYY', 11761 LLL: 'D [de] MMMM [de] YYYY HH:mm', 11762 LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm' 11763 }, 11764 calendar: { 11765 sameDay: '[Hoje à s] LT', 11766 nextDay: '[Amanhã à s] LT', 11767 nextWeek: 'dddd [à s] LT', 11768 lastDay: '[Ontem à s] LT', 11769 lastWeek: function () { 11770 return this.day() === 0 || this.day() === 6 ? '[Ãltimo] dddd [à s] LT' : // Saturday + Sunday 11771 '[Ãltima] dddd [à s] LT'; // Monday - Friday 11772 }, 11773 sameElse: 'L' 11774 }, 11775 relativeTime: { 11776 future: 'em %s', 11777 past: 'há %s', 11778 s: 'segundos', 11779 ss: '%d segundos', 11780 m: 'um minuto', 11781 mm: '%d minutos', 11782 h: 'uma hora', 11783 hh: '%d horas', 11784 d: 'um dia', 11785 dd: '%d dias', 11786 M: 'um mês', 11787 MM: '%d meses', 11788 y: 'um ano', 11789 yy: '%d anos' 11790 }, 11791 dayOfMonthOrdinalParse: /\d{1,2}º/, 11792 ordinal: '%dº', 11793 week: { 11794 dow: 1, 11795 // Monday is the first day of the week. 11796 doy: 4 // The week that contains Jan 4th is the first week of the year. 11797 11798 } 11799 }); 11800 return pt; 11801}); 11802 11803/***/ }), 11804
vendor: 2,356 bytes, lines 11805-11888
11805/***/ "./node_modules/moment/locale/ro.js": 11806/*!******************************************!*\ 11807 !*** ./node_modules/moment/locale/ro.js ***! 11808 \******************************************/ 11809/*! no static exports found */ 11810/***/ (function(module, exports, __webpack_require__) { 11811 11812//! moment.js locale configuration 11813; 11814 11815(function (global, factory) { 11816 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 11817})(this, function (moment) { 11818 'use strict'; 11819 11820 function relativeTimeWithPlural(number, withoutSuffix, key) { 11821 var format = { 11822 'ss': 'secunde', 11823 'mm': 'minute', 11824 'hh': 'ore', 11825 'dd': 'zile', 11826 'MM': 'luni', 11827 'yy': 'ani' 11828 }, 11829 separator = ' '; 11830 11831 if (number % 100 >= 20 || number >= 100 && number % 100 === 0) { 11832 separator = ' de '; 11833 } 11834 11835 return number + separator + format[key]; 11836 } 11837 11838 var ro = moment.defineLocale('ro', { 11839 months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'), 11840 monthsShort: 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'), 11841 monthsParseExact: true, 11842 weekdays: 'duminicÄ_luni_marÈi_miercuri_joi_vineri_sâmbÄtÄ'.split('_'), 11843 weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), 11844 weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), 11845 longDateFormat: { 11846 LT: 'H:mm', 11847 LTS: 'H:mm:ss', 11848 L: 'DD.MM.YYYY', 11849 LL: 'D MMMM YYYY', 11850 LLL: 'D MMMM YYYY H:mm', 11851 LLLL: 'dddd, D MMMM YYYY H:mm' 11852 }, 11853 calendar: { 11854 sameDay: '[azi la] LT', 11855 nextDay: '[mâine la] LT', 11856 nextWeek: 'dddd [la] LT', 11857 lastDay: '[ieri la] LT', 11858 lastWeek: '[fosta] dddd [la] LT', 11859 sameElse: 'L' 11860 }, 11861 relativeTime: { 11862 future: 'peste %s', 11863 past: '%s în urmÄ', 11864 s: 'câteva secunde', 11865 ss: relativeTimeWithPlural, 11866 m: 'un minut', 11867 mm: relativeTimeWithPlural, 11868 h: 'o orÄ', 11869 hh: relativeTimeWithPlural, 11870 d: 'o zi', 11871 dd: relativeTimeWithPlural, 11872 M: 'o lunÄ', 11873 MM: relativeTimeWithPlural, 11874 y: 'un an', 11875 yy: relativeTimeWithPlural 11876 }, 11877 week: { 11878 dow: 1, 11879 // Monday is the first day of the week. 11880 doy: 7 // The week that contains Jan 7th is the first week of the year. 11881 11882 } 11883 }); 11884 return ro; 11885}); 11886 11887/***/ }), 11888
vendor: 7,792 bytes, lines 11889-12081
11889/***/ "./node_modules/moment/locale/ru.js": 11890/*!******************************************!*\ 11891 !*** ./node_modules/moment/locale/ru.js ***! 11892 \******************************************/ 11893/*! no static exports found */ 11894/***/ (function(module, exports, __webpack_require__) { 11895 11896//! moment.js locale configuration 11897; 11898 11899(function (global, factory) { 11900 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 11901})(this, function (moment) { 11902 'use strict'; 11903 11904 function plural(word, num) { 11905 var forms = word.split('_'); 11906 return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]; 11907 } 11908 11909 function relativeTimeWithPlural(number, withoutSuffix, key) { 11910 var format = { 11911 'ss': withoutSuffix ? 'ÑекÑнда_ÑекÑндÑ_ÑекÑнд' : 'ÑекÑндÑ_ÑекÑндÑ_ÑекÑнд', 11912 'mm': withoutSuffix ? 'минÑÑа_минÑÑÑ_минÑÑ' : 'минÑÑÑ_минÑÑÑ_минÑÑ', 11913 'hh': 'ÑаÑ_ÑаÑа_ÑаÑов', 11914 'dd': 'денÑ_днÑ_дней', 11915 'MM': 'меÑÑÑ_меÑÑÑа_меÑÑÑев', 11916 'yy': 'год_года_леÑ' 11917 }; 11918 11919 if (key === 'm') { 11920 return withoutSuffix ? 'минÑÑа' : 'минÑÑÑ'; 11921 } else { 11922 return number + ' ' + plural(format[key], +number); 11923 } 11924 } 11925 11926 var monthsParse = [/^Ñнв/i, /^Ñев/i, /^маÑ/i, /^апÑ/i, /^ма[йÑ]/i, /^иÑн/i, /^иÑл/i, /^авг/i, /^Ñен/i, /^окÑ/i, /^ноÑ/i, /^дек/i]; // http://new.gramota.ru/spravka/rules/139-prop : § 103 11927 // СокÑаÑÐµÐ½Ð¸Ñ Ð¼ÐµÑÑÑев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 11928 // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 11929 11930 var ru = moment.defineLocale('ru', { 11931 months: { 11932 format: 'ÑнваÑÑ_ÑевÑалÑ_маÑÑа_апÑелÑ_маÑ_иÑнÑ_иÑлÑ_авгÑÑÑа_ÑенÑÑбÑÑ_окÑÑбÑÑ_ноÑбÑÑ_декабÑÑ'.split('_'), 11933 standalone: 'ÑнваÑÑ_ÑевÑалÑ_маÑÑ_апÑелÑ_май_иÑнÑ_иÑлÑ_авгÑÑÑ_ÑенÑÑбÑÑ_окÑÑбÑÑ_ноÑбÑÑ_декабÑÑ'.split('_') 11934 }, 11935 monthsShort: { 11936 // по CLDR именно "иÑл." и "иÑн.", но какой ÑмÑÑл менÑÑÑ Ð±ÑÐºÐ²Ñ Ð½Ð° ÑоÑÐºÑ ? 11937 format: 'Ñнв._ÑевÑ._маÑ._апÑ._маÑ_иÑнÑ_иÑлÑ_авг._ÑенÑ._окÑ._ноÑб._дек.'.split('_'), 11938 standalone: 'Ñнв._ÑевÑ._маÑÑ_апÑ._май_иÑнÑ_иÑлÑ_авг._ÑенÑ._окÑ._ноÑб._дек.'.split('_') 11939 }, 11940 weekdays: { 11941 standalone: 'воÑкÑеÑенÑе_понеделÑник_вÑоÑник_ÑÑеда_ÑеÑвеÑг_пÑÑниÑа_ÑÑббоÑа'.split('_'), 11942 format: 'воÑкÑеÑенÑе_понеделÑник_вÑоÑник_ÑÑедÑ_ÑеÑвеÑг_пÑÑниÑÑ_ÑÑббоÑÑ'.split('_'), 11943 isFormat: /\[ ?[Ðв] ?(?:пÑоÑлÑÑ|ÑледÑÑÑÑÑ|ÑÑÑ)? ?\] ?dddd/ 11944 }, 11945 weekdaysShort: 'вÑ_пн_вÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 11946 weekdaysMin: 'вÑ_пн_вÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 11947 monthsParse: monthsParse, 11948 longMonthsParse: monthsParse, 11949 shortMonthsParse: monthsParse, 11950 // полнÑе Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸, по ÑÑи бÑквÑ, Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ , по 4 бÑквÑ, ÑокÑаÑÐµÐ½Ð¸Ñ Ñ ÑоÑкой и без ÑоÑки 11951 monthsRegex: /^(ÑнваÑ[ÑÑ]|Ñнв\.?|ÑевÑал[ÑÑ]|ÑевÑ?\.?|маÑÑа?|маÑ\.?|апÑел[ÑÑ]|апÑ\.?|ма[йÑ]|иÑн[ÑÑ]|иÑн\.?|иÑл[ÑÑ]|иÑл\.?|авгÑÑÑа?|авг\.?|ÑенÑÑбÑ[ÑÑ]|ÑенÑ?\.?|окÑÑбÑ[ÑÑ]|окÑ\.?|ноÑбÑ[ÑÑ]|ноÑб?\.?|декабÑ[ÑÑ]|дек\.?)/i, 11952 // ÐºÐ¾Ð¿Ð¸Ñ Ð¿ÑедÑдÑÑего 11953 monthsShortRegex: /^(ÑнваÑ[ÑÑ]|Ñнв\.?|ÑевÑал[ÑÑ]|ÑевÑ?\.?|маÑÑа?|маÑ\.?|апÑел[ÑÑ]|апÑ\.?|ма[йÑ]|иÑн[ÑÑ]|иÑн\.?|иÑл[ÑÑ]|иÑл\.?|авгÑÑÑа?|авг\.?|ÑенÑÑбÑ[ÑÑ]|ÑенÑ?\.?|окÑÑбÑ[ÑÑ]|окÑ\.?|ноÑбÑ[ÑÑ]|ноÑб?\.?|декабÑ[ÑÑ]|дек\.?)/i, 11954 // полнÑе Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸ 11955 monthsStrictRegex: /^(ÑнваÑ[ÑÑ]|ÑевÑал[ÑÑ]|маÑÑа?|апÑел[ÑÑ]|ма[Ñй]|иÑн[ÑÑ]|иÑл[ÑÑ]|авгÑÑÑа?|ÑенÑÑбÑ[ÑÑ]|окÑÑбÑ[ÑÑ]|ноÑбÑ[ÑÑ]|декабÑ[ÑÑ])/i, 11956 // ÐÑÑажение, коÑоÑое ÑооÑвеÑÑвÑÐµÑ ÑолÑко ÑокÑаÑÑннÑм ÑоÑмам 11957 monthsShortStrictRegex: /^(Ñнв\.|ÑевÑ?\.|маÑ[Ñ.]|апÑ\.|ма[Ñй]|иÑн[ÑÑ.]|иÑл[ÑÑ.]|авг\.|ÑенÑ?\.|окÑ\.|ноÑб?\.|дек\.)/i, 11958 longDateFormat: { 11959 LT: 'H:mm', 11960 LTS: 'H:mm:ss', 11961 L: 'DD.MM.YYYY', 11962 LL: 'D MMMM YYYY г.', 11963 LLL: 'D MMMM YYYY г., H:mm', 11964 LLLL: 'dddd, D MMMM YYYY г., H:mm' 11965 }, 11966 calendar: { 11967 sameDay: '[СегоднÑ, в] LT', 11968 nextDay: '[ÐавÑÑа, в] LT', 11969 lastDay: '[ÐÑеÑа, в] LT', 11970 nextWeek: function (now) { 11971 if (now.week() !== this.week()) { 11972 switch (this.day()) { 11973 case 0: 11974 return '[Ð ÑледÑÑÑее] dddd, [в] LT'; 11975 11976 case 1: 11977 case 2: 11978 case 4: 11979 return '[Ð ÑледÑÑÑий] dddd, [в] LT'; 11980 11981 case 3: 11982 case 5: 11983 case 6: 11984 return '[Ð ÑледÑÑÑÑÑ] dddd, [в] LT'; 11985 } 11986 } else { 11987 if (this.day() === 2) { 11988 return '[Ðо] dddd, [в] LT'; 11989 } else { 11990 return '[Ð] dddd, [в] LT'; 11991 } 11992 } 11993 }, 11994 lastWeek: function (now) { 11995 if (now.week() !== this.week()) { 11996 switch (this.day()) { 11997 case 0: 11998 return '[РпÑоÑлое] dddd, [в] LT'; 11999 12000 case 1: 12001 case 2: 12002 case 4: 12003 return '[РпÑоÑлÑй] dddd, [в] LT'; 12004 12005 case 3: 12006 case 5: 12007 case 6: 12008 return '[РпÑоÑлÑÑ] dddd, [в] LT'; 12009 } 12010 } else { 12011 if (this.day() === 2) { 12012 return '[Ðо] dddd, [в] LT'; 12013 } else { 12014 return '[Ð] dddd, [в] LT'; 12015 } 12016 } 12017 }, 12018 sameElse: 'L' 12019 }, 12020 relativeTime: { 12021 future: 'ÑеÑез %s', 12022 past: '%s назад', 12023 s: 'неÑколÑко ÑекÑнд', 12024 ss: relativeTimeWithPlural, 12025 m: relativeTimeWithPlural, 12026 mm: relativeTimeWithPlural, 12027 h: 'ÑаÑ', 12028 hh: relativeTimeWithPlural, 12029 d: 'денÑ', 12030 dd: relativeTimeWithPlural, 12031 M: 'меÑÑÑ', 12032 MM: relativeTimeWithPlural, 12033 y: 'год', 12034 yy: relativeTimeWithPlural 12035 }, 12036 meridiemParse: /ноÑи|ÑÑÑа|днÑ|веÑеÑа/i, 12037 isPM: function (input) { 12038 return /^(днÑ|веÑеÑа)$/.test(input); 12039 }, 12040 meridiem: function (hour, minute, isLower) { 12041 if (hour < 4) { 12042 return 'ноÑи'; 12043 } else if (hour < 12) { 12044 return 'ÑÑÑа'; 12045 } else if (hour < 17) { 12046 return 'днÑ'; 12047 } else { 12048 return 'веÑеÑа'; 12049 } 12050 }, 12051 dayOfMonthOrdinalParse: /\d{1,2}-(й|го|Ñ)/, 12052 ordinal: function (number, period) { 12053 switch (period) { 12054 case 'M': 12055 case 'd': 12056 case 'DDD': 12057 return number + '-й'; 12058 12059 case 'D': 12060 return number + '-го'; 12061 12062 case 'w': 12063 case 'W': 12064 return number + '-Ñ'; 12065 12066 default: 12067 return number; 12068 } 12069 }, 12070 week: { 12071 dow: 1, 12072 // Monday is the first day of the week. 12073 doy: 4 // The week that contains Jan 4th is the first week of the year. 12074 12075 } 12076 }); 12077 return ru; 12078}); 12079 12080/***/ }), 12081
vendor: 2,351 bytes, lines 12082-12165
12082/***/ "./node_modules/moment/locale/sd.js": 12083/*!******************************************!*\ 12084 !*** ./node_modules/moment/locale/sd.js ***! 12085 \******************************************/ 12086/*! no static exports found */ 12087/***/ (function(module, exports, __webpack_require__) { 12088 12089//! moment.js locale configuration 12090; 12091 12092(function (global, factory) { 12093 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 12094})(this, function (moment) { 12095 'use strict'; 12096 12097 var months = ['جÙÙØ±Ù', 'ÙÙØ¨Ø±ÙرÙ', '٠ارÚ', 'اپرÙÙ', '٠ئÙ', 'جÙÙ', 'جÙÙØ§Ø¡Ù', 'آگسٽ', 'سÙپٽ٠بر', 'Ø¢ÚªÙ½ÙØ¨Ø±', 'ÙÙ٠بر', 'ÚØ³Ù بر']; 12098 var days = ['Ø¢ÚØ±', 'سÙ٠ر', 'اڱارÙ', 'اربع', 'Ø®Ù ÙØ³', 'ج٠ع', 'ÚÙÚØ±']; 12099 var sd = moment.defineLocale('sd', { 12100 months: months, 12101 monthsShort: months, 12102 weekdays: days, 12103 weekdaysShort: days, 12104 weekdaysMin: days, 12105 longDateFormat: { 12106 LT: 'HH:mm', 12107 LTS: 'HH:mm:ss', 12108 L: 'DD/MM/YYYY', 12109 LL: 'D MMMM YYYY', 12110 LLL: 'D MMMM YYYY HH:mm', 12111 LLLL: 'ddddØ D MMMM YYYY HH:mm' 12112 }, 12113 meridiemParse: /صبØ|شا٠/, 12114 isPM: function (input) { 12115 return 'شا٠' === input; 12116 }, 12117 meridiem: function (hour, minute, isLower) { 12118 if (hour < 12) { 12119 return 'صبØ'; 12120 } 12121 12122 return 'شا٠'; 12123 }, 12124 calendar: { 12125 sameDay: '[اÚ] LT', 12126 nextDay: '[Ø³ÚØ§Ú»Ù] LT', 12127 nextWeek: 'dddd [اڳÙÙ ÙÙØªÙ تÙ] LT', 12128 lastDay: '[ڪاÙÙÙ] LT', 12129 lastWeek: '[گزرÙÙ ÙÙØªÙ] dddd [تÙ] LT', 12130 sameElse: 'L' 12131 }, 12132 relativeTime: { 12133 future: '%s Ù¾ÙØ¡', 12134 past: '%s اڳ', 12135 s: 'ÚÙØ¯ سÙÚªÙÚ', 12136 ss: '%d سÙÚªÙÚ', 12137 m: 'ÙÚª Ù ÙÙ½', 12138 mm: '%d Ù ÙÙ½', 12139 h: 'ÙÚª ÚªÙØ§Úª', 12140 hh: '%d ÚªÙØ§Úª', 12141 d: 'ÙÚª ÚÙÙÙÙ', 12142 dd: '%d ÚÙÙÙÙ', 12143 M: 'ÙÚª Ù ÙÙÙÙ', 12144 MM: '%d Ù ÙÙÙØ§', 12145 y: 'ÙÚª ساÙ', 12146 yy: '%d ساÙ' 12147 }, 12148 preparse: function (string) { 12149 return string.replace(/Ø/g, ','); 12150 }, 12151 postformat: function (string) { 12152 return string.replace(/,/g, 'Ø'); 12153 }, 12154 week: { 12155 dow: 1, 12156 // Monday is the first day of the week. 12157 doy: 4 // The week that contains Jan 4th is the first week of the year. 12158 12159 } 12160 }); 12161 return sd; 12162}); 12163 12164/***/ }), 12165
vendor: 2,094 bytes, lines 12166-12232
12166/***/ "./node_modules/moment/locale/se.js": 12167/*!******************************************!*\ 12168 !*** ./node_modules/moment/locale/se.js ***! 12169 \******************************************/ 12170/*! no static exports found */ 12171/***/ (function(module, exports, __webpack_require__) { 12172 12173//! moment.js locale configuration 12174; 12175 12176(function (global, factory) { 12177 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 12178})(this, function (moment) { 12179 'use strict'; 12180 12181 var se = moment.defineLocale('se', { 12182 months: 'oÄÄajagemánnu_guovvamánnu_njukÄamánnu_cuoÅománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_ÄakÄamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'), 12183 monthsShort: 'oÄÄj_guov_njuk_cuo_mies_geas_suoi_borg_ÄakÄ_golg_skáb_juov'.split('_'), 12184 weekdays: 'sotnabeaivi_vuossárga_maÅÅebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'), 12185 weekdaysShort: 'sotn_vuos_maÅ_gask_duor_bear_láv'.split('_'), 12186 weekdaysMin: 's_v_m_g_d_b_L'.split('_'), 12187 longDateFormat: { 12188 LT: 'HH:mm', 12189 LTS: 'HH:mm:ss', 12190 L: 'DD.MM.YYYY', 12191 LL: 'MMMM D. [b.] YYYY', 12192 LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm', 12193 LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm' 12194 }, 12195 calendar: { 12196 sameDay: '[otne ti] LT', 12197 nextDay: '[ihttin ti] LT', 12198 nextWeek: 'dddd [ti] LT', 12199 lastDay: '[ikte ti] LT', 12200 lastWeek: '[ovddit] dddd [ti] LT', 12201 sameElse: 'L' 12202 }, 12203 relativeTime: { 12204 future: '%s geažes', 12205 past: 'maÅit %s', 12206 s: 'moadde sekunddat', 12207 ss: '%d sekunddat', 12208 m: 'okta minuhta', 12209 mm: '%d minuhtat', 12210 h: 'okta diimmu', 12211 hh: '%d diimmut', 12212 d: 'okta beaivi', 12213 dd: '%d beaivvit', 12214 M: 'okta mánnu', 12215 MM: '%d mánut', 12216 y: 'okta jahki', 12217 yy: '%d jagit' 12218 }, 12219 dayOfMonthOrdinalParse: /\d{1,2}\./, 12220 ordinal: '%d.', 12221 week: { 12222 dow: 1, 12223 // Monday is the first day of the week. 12224 doy: 4 // The week that contains Jan 4th is the first week of the year. 12225 12226 } 12227 }); 12228 return se; 12229}); 12230 12231/***/ }), 12232
vendor: 2,907 bytes, lines 12233-12308
12233/***/ "./node_modules/moment/locale/si.js": 12234/*!******************************************!*\ 12235 !*** ./node_modules/moment/locale/si.js ***! 12236 \******************************************/ 12237/*! no static exports found */ 12238/***/ (function(module, exports, __webpack_require__) { 12239 12240//! moment.js locale configuration 12241; 12242 12243(function (global, factory) { 12244 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 12245})(this, function (moment) { 12246 'use strict'; 12247 /*jshint -W100*/ 12248 12249 var si = moment.defineLocale('si', { 12250 months: 'ජනà·à·à¶»à·_à¶´à·à¶¶à¶»à·à·à¶»à·_මà·à¶»à·à¶à·_à¶ à¶´à·âà¶»à·à¶½à·_මà·à¶ºà·_à¶¢à·à¶±à·_à¶¢à·à¶½à·_à¶ à¶à·à·à·à¶à·_à·à·à¶´à·à¶à·à¶¸à·à¶¶à¶»à·_à¶à¶à·à¶à·à¶¶à¶»à·_à¶±à·à·à·à¶¸à·à¶¶à¶»à·_දà·à·à·à¶¸à·à¶¶à¶»à·'.split('_'), 12251 monthsShort: 'ජන_à¶´à·à¶¶_මà·à¶»à·_à¶ à¶´à·_මà·à¶ºà·_à¶¢à·à¶±à·_à¶¢à·à¶½à·_à¶ à¶à·_à·à·à¶´à·_à¶à¶à·_à¶±à·à·à·_දà·à·à·'.split('_'), 12252 weekdays: 'à¶à¶»à·à¶¯à·_à·à¶³à·à¶¯à·_à¶ à¶à·à¶»à·à·à·à¶¯à·_බදà·à¶¯à·_à¶¶à·âà¶»à·à·à·à¶´à¶à·à¶±à·à¶¯à·_à·à·à¶à·à¶»à·à¶¯à·_à·à·à¶±à·à·à¶»à·à¶¯à·'.split('_'), 12253 weekdaysShort: 'à¶à¶»à·_à·à¶³à·_à¶ à¶_බදà·_à¶¶à·âà¶»à·_à·à·à¶à·_à·à·à¶±'.split('_'), 12254 weekdaysMin: 'à¶_à·_à¶ _à¶¶_à¶¶à·âà¶»_à·à·_à·à·'.split('_'), 12255 weekdaysParseExact: true, 12256 longDateFormat: { 12257 LT: 'a h:mm', 12258 LTS: 'a h:mm:ss', 12259 L: 'YYYY/MM/DD', 12260 LL: 'YYYY MMMM D', 12261 LLL: 'YYYY MMMM D, a h:mm', 12262 LLLL: 'YYYY MMMM D [à·à·à¶±à·] dddd, a h:mm:ss' 12263 }, 12264 calendar: { 12265 sameDay: '[චද] LT[à¶§]', 12266 nextDay: '[à·à·à¶§] LT[à¶§]', 12267 nextWeek: 'dddd LT[à¶§]', 12268 lastDay: '[à¶à¶ºà·] LT[à¶§]', 12269 lastWeek: '[à¶´à·à·à¶à·à¶º] dddd LT[à¶§]', 12270 sameElse: 'L' 12271 }, 12272 relativeTime: { 12273 future: '%sà¶à·à¶±à·', 12274 past: '%sà¶à¶§ à¶´à·à¶»', 12275 s: 'à¶à¶à·à¶´à¶» à¶à·à·à·à¶´à¶º', 12276 ss: 'à¶à¶à·à¶´à¶» %d', 12277 m: 'මà·à¶±à·à¶à·à¶à·à·', 12278 mm: 'මà·à¶±à·à¶à·à¶à· %d', 12279 h: 'à¶´à·à¶º', 12280 hh: 'à¶´à·à¶º %d', 12281 d: 'දà·à¶±à¶º', 12282 dd: 'දà·à¶± %d', 12283 M: 'මà·à·à¶º', 12284 MM: 'මà·à· %d', 12285 y: 'à·à·à¶»', 12286 yy: 'à·à·à¶» %d' 12287 }, 12288 dayOfMonthOrdinalParse: /\d{1,2} à·à·à¶±à·/, 12289 ordinal: function (number) { 12290 return number + ' à·à·à¶±à·'; 12291 }, 12292 meridiemParse: /à¶´à·à¶» à·à¶»à·|à¶´à·à· à·à¶»à·|à¶´à·.à·|à¶´.à·./, 12293 isPM: function (input) { 12294 return input === 'à¶´.à·.' || input === 'à¶´à·à· à·à¶»à·'; 12295 }, 12296 meridiem: function (hours, minutes, isLower) { 12297 if (hours > 11) { 12298 return isLower ? 'à¶´.à·.' : 'à¶´à·à· à·à¶»à·'; 12299 } else { 12300 return isLower ? 'à¶´à·.à·.' : 'à¶´à·à¶» à·à¶»à·'; 12301 } 12302 } 12303 }); 12304 return si; 12305}); 12306 12307/***/ }), 12308
vendor: 5,247 bytes, lines 12309-12512
12309/***/ "./node_modules/moment/locale/sk.js": 12310/*!******************************************!*\ 12311 !*** ./node_modules/moment/locale/sk.js ***! 12312 \******************************************/ 12313/*! no static exports found */ 12314/***/ (function(module, exports, __webpack_require__) { 12315 12316//! moment.js locale configuration 12317; 12318 12319(function (global, factory) { 12320 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 12321})(this, function (moment) { 12322 'use strict'; 12323 12324 var months = 'január_február_marec_aprÃl_máj_jún_júl_august_september_október_november_december'.split('_'), 12325 monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'); 12326 12327 function plural(n) { 12328 return n > 1 && n < 5; 12329 } 12330 12331 function translate(number, withoutSuffix, key, isFuture) { 12332 var result = number + ' '; 12333 12334 switch (key) { 12335 case 's': 12336 // a few seconds / in a few seconds / a few seconds ago 12337 return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami'; 12338 12339 case 'ss': 12340 // 9 seconds / in 9 seconds / 9 seconds ago 12341 if (withoutSuffix || isFuture) { 12342 return result + (plural(number) ? 'sekundy' : 'sekúnd'); 12343 } else { 12344 return result + 'sekundami'; 12345 } 12346 12347 break; 12348 12349 case 'm': 12350 // a minute / in a minute / a minute ago 12351 return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou'; 12352 12353 case 'mm': 12354 // 9 minutes / in 9 minutes / 9 minutes ago 12355 if (withoutSuffix || isFuture) { 12356 return result + (plural(number) ? 'minúty' : 'minút'); 12357 } else { 12358 return result + 'minútami'; 12359 } 12360 12361 break; 12362 12363 case 'h': 12364 // an hour / in an hour / an hour ago 12365 return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; 12366 12367 case 'hh': 12368 // 9 hours / in 9 hours / 9 hours ago 12369 if (withoutSuffix || isFuture) { 12370 return result + (plural(number) ? 'hodiny' : 'hodÃn'); 12371 } else { 12372 return result + 'hodinami'; 12373 } 12374 12375 break; 12376 12377 case 'd': 12378 // a day / in a day / a day ago 12379 return withoutSuffix || isFuture ? 'deÅ' : 'dÅom'; 12380 12381 case 'dd': 12382 // 9 days / in 9 days / 9 days ago 12383 if (withoutSuffix || isFuture) { 12384 return result + (plural(number) ? 'dni' : 'dnÃ'); 12385 } else { 12386 return result + 'dÅami'; 12387 } 12388 12389 break; 12390 12391 case 'M': 12392 // a month / in a month / a month ago 12393 return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom'; 12394 12395 case 'MM': 12396 // 9 months / in 9 months / 9 months ago 12397 if (withoutSuffix || isFuture) { 12398 return result + (plural(number) ? 'mesiace' : 'mesiacov'); 12399 } else { 12400 return result + 'mesiacmi'; 12401 } 12402 12403 break; 12404 12405 case 'y': 12406 // a year / in a year / a year ago 12407 return withoutSuffix || isFuture ? 'rok' : 'rokom'; 12408 12409 case 'yy': 12410 // 9 years / in 9 years / 9 years ago 12411 if (withoutSuffix || isFuture) { 12412 return result + (plural(number) ? 'roky' : 'rokov'); 12413 } else { 12414 return result + 'rokmi'; 12415 } 12416 12417 break; 12418 } 12419 } 12420 12421 var sk = moment.defineLocale('sk', { 12422 months: months, 12423 monthsShort: monthsShort, 12424 weekdays: 'nedeľa_pondelok_utorok_streda_Å¡tvrtok_piatok_sobota'.split('_'), 12425 weekdaysShort: 'ne_po_ut_st_Å¡t_pi_so'.split('_'), 12426 weekdaysMin: 'ne_po_ut_st_Å¡t_pi_so'.split('_'), 12427 longDateFormat: { 12428 LT: 'H:mm', 12429 LTS: 'H:mm:ss', 12430 L: 'DD.MM.YYYY', 12431 LL: 'D. MMMM YYYY', 12432 LLL: 'D. MMMM YYYY H:mm', 12433 LLLL: 'dddd D. MMMM YYYY H:mm' 12434 }, 12435 calendar: { 12436 sameDay: '[dnes o] LT', 12437 nextDay: '[zajtra o] LT', 12438 nextWeek: function () { 12439 switch (this.day()) { 12440 case 0: 12441 return '[v nedeľu o] LT'; 12442 12443 case 1: 12444 case 2: 12445 return '[v] dddd [o] LT'; 12446 12447 case 3: 12448 return '[v stredu o] LT'; 12449 12450 case 4: 12451 return '[vo Å¡tvrtok o] LT'; 12452 12453 case 5: 12454 return '[v piatok o] LT'; 12455 12456 case 6: 12457 return '[v sobotu o] LT'; 12458 } 12459 }, 12460 lastDay: '[vÄera o] LT', 12461 lastWeek: function () { 12462 switch (this.day()) { 12463 case 0: 12464 return '[minulú nedeľu o] LT'; 12465 12466 case 1: 12467 case 2: 12468 return '[minulý] dddd [o] LT'; 12469 12470 case 3: 12471 return '[minulú stredu o] LT'; 12472 12473 case 4: 12474 case 5: 12475 return '[minulý] dddd [o] LT'; 12476 12477 case 6: 12478 return '[minulú sobotu o] LT'; 12479 } 12480 }, 12481 sameElse: 'L' 12482 }, 12483 relativeTime: { 12484 future: 'za %s', 12485 past: 'pred %s', 12486 s: translate, 12487 ss: translate, 12488 m: translate, 12489 mm: translate, 12490 h: translate, 12491 hh: translate, 12492 d: translate, 12493 dd: translate, 12494 M: translate, 12495 MM: translate, 12496 y: translate, 12497 yy: translate 12498 }, 12499 dayOfMonthOrdinalParse: /\d{1,2}\./, 12500 ordinal: '%d.', 12501 week: { 12502 dow: 1, 12503 // Monday is the first day of the week. 12504 doy: 4 // The week that contains Jan 4th is the first week of the year. 12505 12506 } 12507 }); 12508 return sk; 12509}); 12510 12511/***/ }), 12512
vendor: 5,879 bytes, lines 12513-12715
12513/***/ "./node_modules/moment/locale/sl.js": 12514/*!******************************************!*\ 12515 !*** ./node_modules/moment/locale/sl.js ***! 12516 \******************************************/ 12517/*! no static exports found */ 12518/***/ (function(module, exports, __webpack_require__) { 12519 12520//! moment.js locale configuration 12521; 12522 12523(function (global, factory) { 12524 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 12525})(this, function (moment) { 12526 'use strict'; 12527 12528 function processRelativeTime(number, withoutSuffix, key, isFuture) { 12529 var result = number + ' '; 12530 12531 switch (key) { 12532 case 's': 12533 return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami'; 12534 12535 case 'ss': 12536 if (number === 1) { 12537 result += withoutSuffix ? 'sekundo' : 'sekundi'; 12538 } else if (number === 2) { 12539 result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah'; 12540 } else if (number < 5) { 12541 result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah'; 12542 } else { 12543 result += 'sekund'; 12544 } 12545 12546 return result; 12547 12548 case 'm': 12549 return withoutSuffix ? 'ena minuta' : 'eno minuto'; 12550 12551 case 'mm': 12552 if (number === 1) { 12553 result += withoutSuffix ? 'minuta' : 'minuto'; 12554 } else if (number === 2) { 12555 result += withoutSuffix || isFuture ? 'minuti' : 'minutama'; 12556 } else if (number < 5) { 12557 result += withoutSuffix || isFuture ? 'minute' : 'minutami'; 12558 } else { 12559 result += withoutSuffix || isFuture ? 'minut' : 'minutami'; 12560 } 12561 12562 return result; 12563 12564 case 'h': 12565 return withoutSuffix ? 'ena ura' : 'eno uro'; 12566 12567 case 'hh': 12568 if (number === 1) { 12569 result += withoutSuffix ? 'ura' : 'uro'; 12570 } else if (number === 2) { 12571 result += withoutSuffix || isFuture ? 'uri' : 'urama'; 12572 } else if (number < 5) { 12573 result += withoutSuffix || isFuture ? 'ure' : 'urami'; 12574 } else { 12575 result += withoutSuffix || isFuture ? 'ur' : 'urami'; 12576 } 12577 12578 return result; 12579 12580 case 'd': 12581 return withoutSuffix || isFuture ? 'en dan' : 'enim dnem'; 12582 12583 case 'dd': 12584 if (number === 1) { 12585 result += withoutSuffix || isFuture ? 'dan' : 'dnem'; 12586 } else if (number === 2) { 12587 result += withoutSuffix || isFuture ? 'dni' : 'dnevoma'; 12588 } else { 12589 result += withoutSuffix || isFuture ? 'dni' : 'dnevi'; 12590 } 12591 12592 return result; 12593 12594 case 'M': 12595 return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem'; 12596 12597 case 'MM': 12598 if (number === 1) { 12599 result += withoutSuffix || isFuture ? 'mesec' : 'mesecem'; 12600 } else if (number === 2) { 12601 result += withoutSuffix || isFuture ? 'meseca' : 'mesecema'; 12602 } else if (number < 5) { 12603 result += withoutSuffix || isFuture ? 'mesece' : 'meseci'; 12604 } else { 12605 result += withoutSuffix || isFuture ? 'mesecev' : 'meseci'; 12606 } 12607 12608 return result; 12609 12610 case 'y': 12611 return withoutSuffix || isFuture ? 'eno leto' : 'enim letom'; 12612 12613 case 'yy': 12614 if (number === 1) { 12615 result += withoutSuffix || isFuture ? 'leto' : 'letom'; 12616 } else if (number === 2) { 12617 result += withoutSuffix || isFuture ? 'leti' : 'letoma'; 12618 } else if (number < 5) { 12619 result += withoutSuffix || isFuture ? 'leta' : 'leti'; 12620 } else { 12621 result += withoutSuffix || isFuture ? 'let' : 'leti'; 12622 } 12623 12624 return result; 12625 } 12626 } 12627 12628 var sl = moment.defineLocale('sl', { 12629 months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'), 12630 monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'), 12631 monthsParseExact: true, 12632 weekdays: 'nedelja_ponedeljek_torek_sreda_Äetrtek_petek_sobota'.split('_'), 12633 weekdaysShort: 'ned._pon._tor._sre._Äet._pet._sob.'.split('_'), 12634 weekdaysMin: 'ne_po_to_sr_Äe_pe_so'.split('_'), 12635 weekdaysParseExact: true, 12636 longDateFormat: { 12637 LT: 'H:mm', 12638 LTS: 'H:mm:ss', 12639 L: 'DD.MM.YYYY', 12640 LL: 'D. MMMM YYYY', 12641 LLL: 'D. MMMM YYYY H:mm', 12642 LLLL: 'dddd, D. MMMM YYYY H:mm' 12643 }, 12644 calendar: { 12645 sameDay: '[danes ob] LT', 12646 nextDay: '[jutri ob] LT', 12647 nextWeek: function () { 12648 switch (this.day()) { 12649 case 0: 12650 return '[v] [nedeljo] [ob] LT'; 12651 12652 case 3: 12653 return '[v] [sredo] [ob] LT'; 12654 12655 case 6: 12656 return '[v] [soboto] [ob] LT'; 12657 12658 case 1: 12659 case 2: 12660 case 4: 12661 case 5: 12662 return '[v] dddd [ob] LT'; 12663 } 12664 }, 12665 lastDay: '[vÄeraj ob] LT', 12666 lastWeek: function () { 12667 switch (this.day()) { 12668 case 0: 12669 return '[prejÅ¡njo] [nedeljo] [ob] LT'; 12670 12671 case 3: 12672 return '[prejÅ¡njo] [sredo] [ob] LT'; 12673 12674 case 6: 12675 return '[prejÅ¡njo] [soboto] [ob] LT'; 12676 12677 case 1: 12678 case 2: 12679 case 4: 12680 case 5: 12681 return '[prejÅ¡nji] dddd [ob] LT'; 12682 } 12683 }, 12684 sameElse: 'L' 12685 }, 12686 relativeTime: { 12687 future: 'Äez %s', 12688 past: 'pred %s', 12689 s: processRelativeTime, 12690 ss: processRelativeTime, 12691 m: processRelativeTime, 12692 mm: processRelativeTime, 12693 h: processRelativeTime, 12694 hh: processRelativeTime, 12695 d: processRelativeTime, 12696 dd: processRelativeTime, 12697 M: processRelativeTime, 12698 MM: processRelativeTime, 12699 y: processRelativeTime, 12700 yy: processRelativeTime 12701 }, 12702 dayOfMonthOrdinalParse: /\d{1,2}\./, 12703 ordinal: '%d.', 12704 week: { 12705 dow: 1, 12706 // Monday is the first day of the week. 12707 doy: 7 // The week that contains Jan 7th is the first week of the year. 12708 12709 } 12710 }); 12711 return sl; 12712}); 12713 12714/***/ }), 12715
vendor: 2,154 bytes, lines 12716-12790
12716/***/ "./node_modules/moment/locale/sq.js": 12717/*!******************************************!*\ 12718 !*** ./node_modules/moment/locale/sq.js ***! 12719 \******************************************/ 12720/*! no static exports found */ 12721/***/ (function(module, exports, __webpack_require__) { 12722 12723//! moment.js locale configuration 12724; 12725 12726(function (global, factory) { 12727 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 12728})(this, function (moment) { 12729 'use strict'; 12730 12731 var sq = moment.defineLocale('sq', { 12732 months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'), 12733 monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), 12734 weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'), 12735 weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), 12736 weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'), 12737 weekdaysParseExact: true, 12738 meridiemParse: /PD|MD/, 12739 isPM: function (input) { 12740 return input.charAt(0) === 'M'; 12741 }, 12742 meridiem: function (hours, minutes, isLower) { 12743 return hours < 12 ? 'PD' : 'MD'; 12744 }, 12745 longDateFormat: { 12746 LT: 'HH:mm', 12747 LTS: 'HH:mm:ss', 12748 L: 'DD/MM/YYYY', 12749 LL: 'D MMMM YYYY', 12750 LLL: 'D MMMM YYYY HH:mm', 12751 LLLL: 'dddd, D MMMM YYYY HH:mm' 12752 }, 12753 calendar: { 12754 sameDay: '[Sot në] LT', 12755 nextDay: '[Nesër në] LT', 12756 nextWeek: 'dddd [në] LT', 12757 lastDay: '[Dje në] LT', 12758 lastWeek: 'dddd [e kaluar në] LT', 12759 sameElse: 'L' 12760 }, 12761 relativeTime: { 12762 future: 'në %s', 12763 past: '%s më parë', 12764 s: 'disa sekonda', 12765 ss: '%d sekonda', 12766 m: 'një minutë', 12767 mm: '%d minuta', 12768 h: 'një orë', 12769 hh: '%d orë', 12770 d: 'një ditë', 12771 dd: '%d ditë', 12772 M: 'një muaj', 12773 MM: '%d muaj', 12774 y: 'një vit', 12775 yy: '%d vite' 12776 }, 12777 dayOfMonthOrdinalParse: /\d{1,2}\./, 12778 ordinal: '%d.', 12779 week: { 12780 dow: 1, 12781 // Monday is the first day of the week. 12782 doy: 4 // The week that contains Jan 4th is the first week of the year. 12783 12784 } 12785 }); 12786 return sq; 12787}); 12788 12789/***/ }), 12790
vendor: 4,033 bytes, lines 12791-12904
12791/***/ "./node_modules/moment/locale/sr-cyrl.js": 12792/*!***********************************************!*\ 12793 !*** ./node_modules/moment/locale/sr-cyrl.js ***! 12794 \***********************************************/ 12795/*! no static exports found */ 12796/***/ (function(module, exports, __webpack_require__) { 12797 12798//! moment.js locale configuration 12799; 12800 12801(function (global, factory) { 12802 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 12803})(this, function (moment) { 12804 'use strict'; 12805 12806 var translator = { 12807 words: { 12808 //Different grammatical cases 12809 ss: ['ÑекÑнда', 'ÑекÑнде', 'ÑекÑнди'], 12810 m: ['Ñедан минÑÑ', 'Ñедне минÑÑе'], 12811 mm: ['минÑÑ', 'минÑÑе', 'минÑÑа'], 12812 h: ['Ñедан ÑаÑ', 'Ñедног ÑаÑа'], 12813 hh: ['ÑаÑ', 'ÑаÑа', 'ÑаÑи'], 12814 dd: ['дан', 'дана', 'дана'], 12815 MM: ['меÑеÑ', 'меÑеÑа', 'меÑеÑи'], 12816 yy: ['година', 'године', 'година'] 12817 }, 12818 correctGrammaticalCase: function (number, wordKey) { 12819 return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]; 12820 }, 12821 translate: function (number, withoutSuffix, key) { 12822 var wordKey = translator.words[key]; 12823 12824 if (key.length === 1) { 12825 return withoutSuffix ? wordKey[0] : wordKey[1]; 12826 } else { 12827 return number + ' ' + translator.correctGrammaticalCase(number, wordKey); 12828 } 12829 } 12830 }; 12831 var srCyrl = moment.defineLocale('sr-cyrl', { 12832 months: 'ÑанÑаÑ_ÑебÑÑаÑ_маÑÑ_апÑил_маÑ_ÑÑн_ÑÑл_авгÑÑÑ_ÑепÑембаÑ_окÑобаÑ_новембаÑ_деÑембаÑ'.split('_'), 12833 monthsShort: 'Ñан._Ñеб._маÑ._апÑ._маÑ_ÑÑн_ÑÑл_авг._Ñеп._окÑ._нов._деÑ.'.split('_'), 12834 monthsParseExact: true, 12835 weekdays: 'недеÑа_понедеÑак_ÑÑоÑак_ÑÑеда_ÑеÑвÑÑак_пеÑак_ÑÑбоÑа'.split('_'), 12836 weekdaysShort: 'нед._пон._ÑÑо._ÑÑе._ÑеÑ._пеÑ._ÑÑб.'.split('_'), 12837 weekdaysMin: 'не_по_ÑÑ_ÑÑ_Ñе_пе_ÑÑ'.split('_'), 12838 weekdaysParseExact: true, 12839 longDateFormat: { 12840 LT: 'H:mm', 12841 LTS: 'H:mm:ss', 12842 L: 'DD.MM.YYYY', 12843 LL: 'D. MMMM YYYY', 12844 LLL: 'D. MMMM YYYY H:mm', 12845 LLLL: 'dddd, D. MMMM YYYY H:mm' 12846 }, 12847 calendar: { 12848 sameDay: '[Ð´Ð°Ð½Ð°Ñ Ñ] LT', 12849 nextDay: '[ÑÑÑÑа Ñ] LT', 12850 nextWeek: function () { 12851 switch (this.day()) { 12852 case 0: 12853 return '[Ñ] [недеÑÑ] [Ñ] LT'; 12854 12855 case 3: 12856 return '[Ñ] [ÑÑедÑ] [Ñ] LT'; 12857 12858 case 6: 12859 return '[Ñ] [ÑÑбоÑÑ] [Ñ] LT'; 12860 12861 case 1: 12862 case 2: 12863 case 4: 12864 case 5: 12865 return '[Ñ] dddd [Ñ] LT'; 12866 } 12867 }, 12868 lastDay: '[ÑÑÑе Ñ] LT', 12869 lastWeek: function () { 12870 var lastWeekDays = ['[пÑоÑле] [недеÑе] [Ñ] LT', '[пÑоÑлог] [понедеÑка] [Ñ] LT', '[пÑоÑлог] [ÑÑоÑка] [Ñ] LT', '[пÑоÑле] [ÑÑеде] [Ñ] LT', '[пÑоÑлог] [ÑеÑвÑÑка] [Ñ] LT', '[пÑоÑлог] [пеÑка] [Ñ] LT', '[пÑоÑле] [ÑÑбоÑе] [Ñ] LT']; 12871 return lastWeekDays[this.day()]; 12872 }, 12873 sameElse: 'L' 12874 }, 12875 relativeTime: { 12876 future: 'за %s', 12877 past: 'пÑе %s', 12878 s: 'неколико ÑекÑнди', 12879 ss: translator.translate, 12880 m: translator.translate, 12881 mm: translator.translate, 12882 h: translator.translate, 12883 hh: translator.translate, 12884 d: 'дан', 12885 dd: translator.translate, 12886 M: 'меÑеÑ', 12887 MM: translator.translate, 12888 y: 'годинÑ', 12889 yy: translator.translate 12890 }, 12891 dayOfMonthOrdinalParse: /\d{1,2}\./, 12892 ordinal: '%d.', 12893 week: { 12894 dow: 1, 12895 // Monday is the first day of the week. 12896 doy: 7 // The week that contains Jan 7th is the first week of the year. 12897 12898 } 12899 }); 12900 return srCyrl; 12901}); 12902 12903/***/ }), 12904
vendor: 3,524 bytes, lines 12905-13018
12905/***/ "./node_modules/moment/locale/sr.js": 12906/*!******************************************!*\ 12907 !*** ./node_modules/moment/locale/sr.js ***! 12908 \******************************************/ 12909/*! no static exports found */ 12910/***/ (function(module, exports, __webpack_require__) { 12911 12912//! moment.js locale configuration 12913; 12914 12915(function (global, factory) { 12916 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 12917})(this, function (moment) { 12918 'use strict'; 12919 12920 var translator = { 12921 words: { 12922 //Different grammatical cases 12923 ss: ['sekunda', 'sekunde', 'sekundi'], 12924 m: ['jedan minut', 'jedne minute'], 12925 mm: ['minut', 'minute', 'minuta'], 12926 h: ['jedan sat', 'jednog sata'], 12927 hh: ['sat', 'sata', 'sati'], 12928 dd: ['dan', 'dana', 'dana'], 12929 MM: ['mesec', 'meseca', 'meseci'], 12930 yy: ['godina', 'godine', 'godina'] 12931 }, 12932 correctGrammaticalCase: function (number, wordKey) { 12933 return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]; 12934 }, 12935 translate: function (number, withoutSuffix, key) { 12936 var wordKey = translator.words[key]; 12937 12938 if (key.length === 1) { 12939 return withoutSuffix ? wordKey[0] : wordKey[1]; 12940 } else { 12941 return number + ' ' + translator.correctGrammaticalCase(number, wordKey); 12942 } 12943 } 12944 }; 12945 var sr = moment.defineLocale('sr', { 12946 months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), 12947 monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), 12948 monthsParseExact: true, 12949 weekdays: 'nedelja_ponedeljak_utorak_sreda_Äetvrtak_petak_subota'.split('_'), 12950 weekdaysShort: 'ned._pon._uto._sre._Äet._pet._sub.'.split('_'), 12951 weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'), 12952 weekdaysParseExact: true, 12953 longDateFormat: { 12954 LT: 'H:mm', 12955 LTS: 'H:mm:ss', 12956 L: 'DD.MM.YYYY', 12957 LL: 'D. MMMM YYYY', 12958 LLL: 'D. MMMM YYYY H:mm', 12959 LLLL: 'dddd, D. MMMM YYYY H:mm' 12960 }, 12961 calendar: { 12962 sameDay: '[danas u] LT', 12963 nextDay: '[sutra u] LT', 12964 nextWeek: function () { 12965 switch (this.day()) { 12966 case 0: 12967 return '[u] [nedelju] [u] LT'; 12968 12969 case 3: 12970 return '[u] [sredu] [u] LT'; 12971 12972 case 6: 12973 return '[u] [subotu] [u] LT'; 12974 12975 case 1: 12976 case 2: 12977 case 4: 12978 case 5: 12979 return '[u] dddd [u] LT'; 12980 } 12981 }, 12982 lastDay: '[juÄe u] LT', 12983 lastWeek: function () { 12984 var lastWeekDays = ['[proÅ¡le] [nedelje] [u] LT', '[proÅ¡log] [ponedeljka] [u] LT', '[proÅ¡log] [utorka] [u] LT', '[proÅ¡le] [srede] [u] LT', '[proÅ¡log] [Äetvrtka] [u] LT', '[proÅ¡log] [petka] [u] LT', '[proÅ¡le] [subote] [u] LT']; 12985 return lastWeekDays[this.day()]; 12986 }, 12987 sameElse: 'L' 12988 }, 12989 relativeTime: { 12990 future: 'za %s', 12991 past: 'pre %s', 12992 s: 'nekoliko sekundi', 12993 ss: translator.translate, 12994 m: translator.translate, 12995 mm: translator.translate, 12996 h: translator.translate, 12997 hh: translator.translate, 12998 d: 'dan', 12999 dd: translator.translate, 13000 M: 'mesec', 13001 MM: translator.translate, 13002 y: 'godinu', 13003 yy: translator.translate 13004 }, 13005 dayOfMonthOrdinalParse: /\d{1,2}\./, 13006 ordinal: '%d.', 13007 week: { 13008 dow: 1, 13009 // Monday is the first day of the week. 13010 doy: 7 // The week that contains Jan 7th is the first week of the year. 13011 13012 } 13013 }); 13014 return sr; 13015}); 13016 13017/***/ }), 13018
vendor: 2,753 bytes, lines 13019-13115
13019/***/ "./node_modules/moment/locale/ss.js": 13020/*!******************************************!*\ 13021 !*** ./node_modules/moment/locale/ss.js ***! 13022 \******************************************/ 13023/*! no static exports found */ 13024/***/ (function(module, exports, __webpack_require__) { 13025 13026//! moment.js locale configuration 13027; 13028 13029(function (global, factory) { 13030 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 13031})(this, function (moment) { 13032 'use strict'; 13033 13034 var ss = moment.defineLocale('ss', { 13035 months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'), 13036 monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), 13037 weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'), 13038 weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), 13039 weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), 13040 weekdaysParseExact: true, 13041 longDateFormat: { 13042 LT: 'h:mm A', 13043 LTS: 'h:mm:ss A', 13044 L: 'DD/MM/YYYY', 13045 LL: 'D MMMM YYYY', 13046 LLL: 'D MMMM YYYY h:mm A', 13047 LLLL: 'dddd, D MMMM YYYY h:mm A' 13048 }, 13049 calendar: { 13050 sameDay: '[Namuhla nga] LT', 13051 nextDay: '[Kusasa nga] LT', 13052 nextWeek: 'dddd [nga] LT', 13053 lastDay: '[Itolo nga] LT', 13054 lastWeek: 'dddd [leliphelile] [nga] LT', 13055 sameElse: 'L' 13056 }, 13057 relativeTime: { 13058 future: 'nga %s', 13059 past: 'wenteka nga %s', 13060 s: 'emizuzwana lomcane', 13061 ss: '%d mzuzwana', 13062 m: 'umzuzu', 13063 mm: '%d emizuzu', 13064 h: 'lihora', 13065 hh: '%d emahora', 13066 d: 'lilanga', 13067 dd: '%d emalanga', 13068 M: 'inyanga', 13069 MM: '%d tinyanga', 13070 y: 'umnyaka', 13071 yy: '%d iminyaka' 13072 }, 13073 meridiemParse: /ekuseni|emini|entsambama|ebusuku/, 13074 meridiem: function (hours, minutes, isLower) { 13075 if (hours < 11) { 13076 return 'ekuseni'; 13077 } else if (hours < 15) { 13078 return 'emini'; 13079 } else if (hours < 19) { 13080 return 'entsambama'; 13081 } else { 13082 return 'ebusuku'; 13083 } 13084 }, 13085 meridiemHour: function (hour, meridiem) { 13086 if (hour === 12) { 13087 hour = 0; 13088 } 13089 13090 if (meridiem === 'ekuseni') { 13091 return hour; 13092 } else if (meridiem === 'emini') { 13093 return hour >= 11 ? hour : hour + 12; 13094 } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') { 13095 if (hour === 0) { 13096 return 0; 13097 } 13098 13099 return hour + 12; 13100 } 13101 }, 13102 dayOfMonthOrdinalParse: /\d{1,2}/, 13103 ordinal: '%d', 13104 week: { 13105 dow: 1, 13106 // Monday is the first day of the week. 13107 doy: 4 // The week that contains Jan 4th is the first week of the year. 13108 13109 } 13110 }); 13111 return ss; 13112}); 13113 13114/***/ }), 13115
vendor: 2,177 bytes, lines 13116-13188
13116/***/ "./node_modules/moment/locale/sv.js": 13117/*!******************************************!*\ 13118 !*** ./node_modules/moment/locale/sv.js ***! 13119 \******************************************/ 13120/*! no static exports found */ 13121/***/ (function(module, exports, __webpack_require__) { 13122 13123//! moment.js locale configuration 13124; 13125 13126(function (global, factory) { 13127 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 13128})(this, function (moment) { 13129 'use strict'; 13130 13131 var sv = moment.defineLocale('sv', { 13132 months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'), 13133 monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), 13134 weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), 13135 weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'), 13136 weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'), 13137 longDateFormat: { 13138 LT: 'HH:mm', 13139 LTS: 'HH:mm:ss', 13140 L: 'YYYY-MM-DD', 13141 LL: 'D MMMM YYYY', 13142 LLL: 'D MMMM YYYY [kl.] HH:mm', 13143 LLLL: 'dddd D MMMM YYYY [kl.] HH:mm', 13144 lll: 'D MMM YYYY HH:mm', 13145 llll: 'ddd D MMM YYYY HH:mm' 13146 }, 13147 calendar: { 13148 sameDay: '[Idag] LT', 13149 nextDay: '[Imorgon] LT', 13150 lastDay: '[Igår] LT', 13151 nextWeek: '[På] dddd LT', 13152 lastWeek: '[I] dddd[s] LT', 13153 sameElse: 'L' 13154 }, 13155 relativeTime: { 13156 future: 'om %s', 13157 past: 'för %s sedan', 13158 s: 'några sekunder', 13159 ss: '%d sekunder', 13160 m: 'en minut', 13161 mm: '%d minuter', 13162 h: 'en timme', 13163 hh: '%d timmar', 13164 d: 'en dag', 13165 dd: '%d dagar', 13166 M: 'en månad', 13167 MM: '%d månader', 13168 y: 'ett år', 13169 yy: '%d år' 13170 }, 13171 dayOfMonthOrdinalParse: /\d{1,2}(e|a)/, 13172 ordinal: function (number) { 13173 var b = number % 10, 13174 output = ~~(number % 100 / 10) === 1 ? 'e' : b === 1 ? 'a' : b === 2 ? 'a' : b === 3 ? 'e' : 'e'; 13175 return number + output; 13176 }, 13177 week: { 13178 dow: 1, 13179 // Monday is the first day of the week. 13180 doy: 4 // The week that contains Jan 4th is the first week of the year. 13181 13182 } 13183 }); 13184 return sv; 13185}); 13186 13187/***/ }), 13188
vendor: 1,924 bytes, lines 13189-13254
13189/***/ "./node_modules/moment/locale/sw.js": 13190/*!******************************************!*\ 13191 !*** ./node_modules/moment/locale/sw.js ***! 13192 \******************************************/ 13193/*! no static exports found */ 13194/***/ (function(module, exports, __webpack_require__) { 13195 13196//! moment.js locale configuration 13197; 13198 13199(function (global, factory) { 13200 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 13201})(this, function (moment) { 13202 'use strict'; 13203 13204 var sw = moment.defineLocale('sw', { 13205 months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'), 13206 monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), 13207 weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'), 13208 weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), 13209 weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), 13210 weekdaysParseExact: true, 13211 longDateFormat: { 13212 LT: 'HH:mm', 13213 LTS: 'HH:mm:ss', 13214 L: 'DD.MM.YYYY', 13215 LL: 'D MMMM YYYY', 13216 LLL: 'D MMMM YYYY HH:mm', 13217 LLLL: 'dddd, D MMMM YYYY HH:mm' 13218 }, 13219 calendar: { 13220 sameDay: '[leo saa] LT', 13221 nextDay: '[kesho saa] LT', 13222 nextWeek: '[wiki ijayo] dddd [saat] LT', 13223 lastDay: '[jana] LT', 13224 lastWeek: '[wiki iliyopita] dddd [saat] LT', 13225 sameElse: 'L' 13226 }, 13227 relativeTime: { 13228 future: '%s baadaye', 13229 past: 'tokea %s', 13230 s: 'hivi punde', 13231 ss: 'sekunde %d', 13232 m: 'dakika moja', 13233 mm: 'dakika %d', 13234 h: 'saa limoja', 13235 hh: 'masaa %d', 13236 d: 'siku moja', 13237 dd: 'masiku %d', 13238 M: 'mwezi mmoja', 13239 MM: 'miezi %d', 13240 y: 'mwaka mmoja', 13241 yy: 'miaka %d' 13242 }, 13243 week: { 13244 dow: 1, 13245 // Monday is the first day of the week. 13246 doy: 7 // The week that contains Jan 7th is the first week of the year. 13247 13248 } 13249 }); 13250 return sw; 13251}); 13252 13253/***/ }), 13254
vendor: 4,858 bytes, lines 13255-13391
13255/***/ "./node_modules/moment/locale/ta.js": 13256/*!******************************************!*\ 13257 !*** ./node_modules/moment/locale/ta.js ***! 13258 \******************************************/ 13259/*! no static exports found */ 13260/***/ (function(module, exports, __webpack_require__) { 13261 13262//! moment.js locale configuration 13263; 13264 13265(function (global, factory) { 13266 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 13267})(this, function (moment) { 13268 'use strict'; 13269 13270 var symbolMap = { 13271 '1': '௧', 13272 '2': '௨', 13273 '3': '௩', 13274 '4': '௪', 13275 '5': '௫', 13276 '6': '௬', 13277 '7': 'à¯', 13278 '8': '௮', 13279 '9': '௯', 13280 '0': '௦' 13281 }, 13282 numberMap = { 13283 '௧': '1', 13284 '௨': '2', 13285 '௩': '3', 13286 '௪': '4', 13287 '௫': '5', 13288 '௬': '6', 13289 'à¯': '7', 13290 '௮': '8', 13291 '௯': '9', 13292 '௦': '0' 13293 }; 13294 var ta = moment.defineLocale('ta', { 13295 months: 'à®à®©à®µà®°à®¿_பிபà¯à®°à®µà®°à®¿_மாரà¯à®à¯_à®à®ªà¯à®°à®²à¯_à®®à¯_à®à¯à®©à¯_à®à¯à®²à¯_à®à®à®¸à¯à®à¯_à®à¯à®ªà¯à®à¯à®®à¯à®ªà®°à¯_à® à®à¯à®à¯à®¾à®ªà®°à¯_நவமà¯à®ªà®°à¯_à®à®¿à®à®®à¯à®ªà®°à¯'.split('_'), 13296 monthsShort: 'à®à®©à®µà®°à®¿_பிபà¯à®°à®µà®°à®¿_மாரà¯à®à¯_à®à®ªà¯à®°à®²à¯_à®®à¯_à®à¯à®©à¯_à®à¯à®²à¯_à®à®à®¸à¯à®à¯_à®à¯à®ªà¯à®à¯à®®à¯à®ªà®°à¯_à® à®à¯à®à¯à®¾à®ªà®°à¯_நவமà¯à®ªà®°à¯_à®à®¿à®à®®à¯à®ªà®°à¯'.split('_'), 13297 weekdays: 'à®à®¾à®¯à®¿à®±à¯à®±à¯à®à¯à®à®¿à®´à®®à¯_திà®à¯à®à®à¯à®à®¿à®´à®®à¯_à®à¯à®µà¯à®µà®¾à®¯à¯à®à®¿à®´à®®à¯_பà¯à®¤à®©à¯à®à®¿à®´à®®à¯_வியாழà®à¯à®à®¿à®´à®®à¯_வà¯à®³à¯à®³à®¿à®à¯à®à®¿à®´à®®à¯_à®à®©à®¿à®à¯à®à®¿à®´à®®à¯'.split('_'), 13298 weekdaysShort: 'à®à®¾à®¯à®¿à®±à¯_திà®à¯à®à®³à¯_à®à¯à®µà¯à®µà®¾à®¯à¯_பà¯à®¤à®©à¯_வியாழனà¯_வà¯à®³à¯à®³à®¿_à®à®©à®¿'.split('_'), 13299 weekdaysMin: 'à®à®¾_தி_à®à¯_பà¯_வி_வà¯_à®'.split('_'), 13300 longDateFormat: { 13301 LT: 'HH:mm', 13302 LTS: 'HH:mm:ss', 13303 L: 'DD/MM/YYYY', 13304 LL: 'D MMMM YYYY', 13305 LLL: 'D MMMM YYYY, HH:mm', 13306 LLLL: 'dddd, D MMMM YYYY, HH:mm' 13307 }, 13308 calendar: { 13309 sameDay: '[à®à®©à¯à®±à¯] LT', 13310 nextDay: '[நாளà¯] LT', 13311 nextWeek: 'dddd, LT', 13312 lastDay: '[நà¯à®±à¯à®±à¯] LT', 13313 lastWeek: '[à®à®à®¨à¯à®¤ வாரமà¯] dddd, LT', 13314 sameElse: 'L' 13315 }, 13316 relativeTime: { 13317 future: '%s à®à®²à¯', 13318 past: '%s à®®à¯à®©à¯', 13319 s: 'à®à®°à¯ à®à®¿à®² விநாà®à®¿à®à®³à¯', 13320 ss: '%d விநாà®à®¿à®à®³à¯', 13321 m: 'à®à®°à¯ நிமிà®à®®à¯', 13322 mm: '%d நிமிà®à®à¯à®à®³à¯', 13323 h: 'à®à®°à¯ மணி நà¯à®°à®®à¯', 13324 hh: '%d மணி நà¯à®°à®®à¯', 13325 d: 'à®à®°à¯ நாளà¯', 13326 dd: '%d நாà®à¯à®à®³à¯', 13327 M: 'à®à®°à¯ மாதமà¯', 13328 MM: '%d மாதà®à¯à®à®³à¯', 13329 y: 'à®à®°à¯ வரà¯à®à®®à¯', 13330 yy: '%d à®à®£à¯à®à¯à®à®³à¯' 13331 }, 13332 dayOfMonthOrdinalParse: /\d{1,2}வதà¯/, 13333 ordinal: function (number) { 13334 return number + 'வதà¯'; 13335 }, 13336 preparse: function (string) { 13337 return string.replace(/[௧௨௩௪௫௬à¯à¯®à¯¯à¯¦]/g, function (match) { 13338 return numberMap[match]; 13339 }); 13340 }, 13341 postformat: function (string) { 13342 return string.replace(/\d/g, function (match) { 13343 return symbolMap[match]; 13344 }); 13345 }, 13346 // refer http://ta.wikipedia.org/s/1er1 13347 meridiemParse: /யாமமà¯|வà¯à®à®±à¯|à®à®¾à®²à¯|நணà¯à®ªà®à®²à¯|à®à®±à¯à®ªà®¾à®à¯|மாலà¯/, 13348 meridiem: function (hour, minute, isLower) { 13349 if (hour < 2) { 13350 return ' யாமமà¯'; 13351 } else if (hour < 6) { 13352 return ' வà¯à®à®±à¯'; // வà¯à®à®±à¯ 13353 } else if (hour < 10) { 13354 return ' à®à®¾à®²à¯'; // à®à®¾à®²à¯ 13355 } else if (hour < 14) { 13356 return ' நணà¯à®ªà®à®²à¯'; // நணà¯à®ªà®à®²à¯ 13357 } else if (hour < 18) { 13358 return ' à®à®±à¯à®ªà®¾à®à¯'; // à®à®±à¯à®ªà®¾à®à¯ 13359 } else if (hour < 22) { 13360 return ' மாலà¯'; // மால௠13361 } else { 13362 return ' யாமமà¯'; 13363 } 13364 }, 13365 meridiemHour: function (hour, meridiem) { 13366 if (hour === 12) { 13367 hour = 0; 13368 } 13369 13370 if (meridiem === 'யாமமà¯') { 13371 return hour < 2 ? hour : hour + 12; 13372 } else if (meridiem === 'வà¯à®à®±à¯' || meridiem === 'à®à®¾à®²à¯') { 13373 return hour; 13374 } else if (meridiem === 'நணà¯à®ªà®à®²à¯') { 13375 return hour >= 10 ? hour : hour + 12; 13376 } else { 13377 return hour + 12; 13378 } 13379 }, 13380 week: { 13381 dow: 0, 13382 // Sunday is the first day of the week. 13383 doy: 6 // The week that contains Jan 6th is the first week of the year. 13384 13385 } 13386 }); 13387 return ta; 13388}); 13389 13390/***/ }), 13391
vendor: 3,559 bytes, lines 13392-13488
13392/***/ "./node_modules/moment/locale/te.js": 13393/*!******************************************!*\ 13394 !*** ./node_modules/moment/locale/te.js ***! 13395 \******************************************/ 13396/*! no static exports found */ 13397/***/ (function(module, exports, __webpack_require__) { 13398 13399//! moment.js locale configuration 13400; 13401 13402(function (global, factory) { 13403 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 13404})(this, function (moment) { 13405 'use strict'; 13406 13407 var te = moment.defineLocale('te', { 13408 months: 'à°à°¨à°µà°°à°¿_à°«à°¿à°¬à±à°°à°µà°°à°¿_మారà±à°à°¿_à°à°ªà±à°°à°¿à°²à±_à°®à±_à°à±à°¨à±_à°à±à°²à±_à°à°à°¸à±à°à±_à°¸à±à°ªà±à°à±à°à°¬à°°à±_à° à°à±à°à±à°¬à°°à±_నవà°à°¬à°°à±_à°¡à°¿à°¸à±à°à°¬à°°à±'.split('_'), 13409 monthsShort: 'à°à°¨._à°«à°¿à°¬à±à°°._మారà±à°à°¿_à°à°ªà±à°°à°¿._à°®à±_à°à±à°¨à±_à°à±à°²à±_à°à°._à°¸à±à°ªà±._à° à°à±à°à±._నవ._à°¡à°¿à°¸à±.'.split('_'), 13410 monthsParseExact: true, 13411 weekdays: 'à°à°¦à°¿à°µà°¾à°°à°_à°¸à±à°®à°µà°¾à°°à°_à°®à°à°à°³à°µà°¾à°°à°_à°¬à±à°§à°µà°¾à°°à°_à°à±à°°à±à°µà°¾à°°à°_à°¶à±à°à±à°°à°µà°¾à°°à°_శనివారà°'.split('_'), 13412 weekdaysShort: 'à°à°¦à°¿_à°¸à±à°®_à°®à°à°à°³_à°¬à±à°§_à°à±à°°à±_à°¶à±à°à±à°°_శని'.split('_'), 13413 weekdaysMin: 'à°_à°¸à±_à°®à°_à°¬à±_à°à±_à°¶à±_à°¶'.split('_'), 13414 longDateFormat: { 13415 LT: 'A h:mm', 13416 LTS: 'A h:mm:ss', 13417 L: 'DD/MM/YYYY', 13418 LL: 'D MMMM YYYY', 13419 LLL: 'D MMMM YYYY, A h:mm', 13420 LLLL: 'dddd, D MMMM YYYY, A h:mm' 13421 }, 13422 calendar: { 13423 sameDay: '[à°¨à±à°¡à±] LT', 13424 nextDay: '[à°°à±à°ªà±] LT', 13425 nextWeek: 'dddd, LT', 13426 lastDay: '[నినà±à°¨] LT', 13427 lastWeek: '[à°à°¤] dddd, LT', 13428 sameElse: 'L' 13429 }, 13430 relativeTime: { 13431 future: '%s à°²à±', 13432 past: '%s à°à±à°°à°¿à°¤à°', 13433 s: 'à°à±à°¨à±à°¨à°¿ à°à±à°·à°£à°¾à°²à±', 13434 ss: '%d à°¸à±à°à°¨à±à°²à±', 13435 m: 'à°à° నిమిషà°', 13436 mm: '%d నిమిషాలà±', 13437 h: 'à°à° à°à°à°', 13438 hh: '%d à°à°à°à°²à±', 13439 d: 'à°à° à°°à±à°à±', 13440 dd: '%d à°°à±à°à±à°²à±', 13441 M: 'à°à° à°¨à±à°²', 13442 MM: '%d à°¨à±à°²à°²à±', 13443 y: 'à°à° à°¸à°à°µà°¤à±à°¸à°°à°', 13444 yy: '%d à°¸à°à°µà°¤à±à°¸à°°à°¾à°²à±' 13445 }, 13446 dayOfMonthOrdinalParse: /\d{1,2}à°µ/, 13447 ordinal: '%dà°µ', 13448 meridiemParse: /రాతà±à°°à°¿|à°à°¦à°¯à°|మధà±à°¯à°¾à°¹à±à°¨à°|సాయà°à°¤à±à°°à°/, 13449 meridiemHour: function (hour, meridiem) { 13450 if (hour === 12) { 13451 hour = 0; 13452 } 13453 13454 if (meridiem === 'రాతà±à°°à°¿') { 13455 return hour < 4 ? hour : hour + 12; 13456 } else if (meridiem === 'à°à°¦à°¯à°') { 13457 return hour; 13458 } else if (meridiem === 'మధà±à°¯à°¾à°¹à±à°¨à°') { 13459 return hour >= 10 ? hour : hour + 12; 13460 } else if (meridiem === 'సాయà°à°¤à±à°°à°') { 13461 return hour + 12; 13462 } 13463 }, 13464 meridiem: function (hour, minute, isLower) { 13465 if (hour < 4) { 13466 return 'రాతà±à°°à°¿'; 13467 } else if (hour < 10) { 13468 return 'à°à°¦à°¯à°'; 13469 } else if (hour < 17) { 13470 return 'మధà±à°¯à°¾à°¹à±à°¨à°'; 13471 } else if (hour < 20) { 13472 return 'సాయà°à°¤à±à°°à°'; 13473 } else { 13474 return 'రాతà±à°°à°¿'; 13475 } 13476 }, 13477 week: { 13478 dow: 0, 13479 // Sunday is the first day of the week. 13480 doy: 6 // The week that contains Jan 6th is the first week of the year. 13481 13482 } 13483 }); 13484 return te; 13485}); 13486 13487/***/ }), 13488
vendor: 2,136 bytes, lines 13489-13559
13489/***/ "./node_modules/moment/locale/tet.js": 13490/*!*******************************************!*\ 13491 !*** ./node_modules/moment/locale/tet.js ***! 13492 \*******************************************/ 13493/*! no static exports found */ 13494/***/ (function(module, exports, __webpack_require__) { 13495 13496//! moment.js locale configuration 13497; 13498 13499(function (global, factory) { 13500 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 13501})(this, function (moment) { 13502 'use strict'; 13503 13504 var tet = moment.defineLocale('tet', { 13505 months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'), 13506 monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), 13507 weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'), 13508 weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'), 13509 weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'), 13510 longDateFormat: { 13511 LT: 'HH:mm', 13512 LTS: 'HH:mm:ss', 13513 L: 'DD/MM/YYYY', 13514 LL: 'D MMMM YYYY', 13515 LLL: 'D MMMM YYYY HH:mm', 13516 LLLL: 'dddd, D MMMM YYYY HH:mm' 13517 }, 13518 calendar: { 13519 sameDay: '[Ohin iha] LT', 13520 nextDay: '[Aban iha] LT', 13521 nextWeek: 'dddd [iha] LT', 13522 lastDay: '[Horiseik iha] LT', 13523 lastWeek: 'dddd [semana kotuk] [iha] LT', 13524 sameElse: 'L' 13525 }, 13526 relativeTime: { 13527 future: 'iha %s', 13528 past: '%s liuba', 13529 s: 'minutu balun', 13530 ss: 'minutu %d', 13531 m: 'minutu ida', 13532 mm: 'minutu %d', 13533 h: 'oras ida', 13534 hh: 'oras %d', 13535 d: 'loron ida', 13536 dd: 'loron %d', 13537 M: 'fulan ida', 13538 MM: 'fulan %d', 13539 y: 'tinan ida', 13540 yy: 'tinan %d' 13541 }, 13542 dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, 13543 ordinal: function (number) { 13544 var b = number % 10, 13545 output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th'; 13546 return number + output; 13547 }, 13548 week: { 13549 dow: 1, 13550 // Monday is the first day of the week. 13551 doy: 4 // The week that contains Jan 4th is the first week of the year. 13552 13553 } 13554 }); 13555 return tet; 13556}); 13557 13558/***/ }), 13559
vendor: 3,565 bytes, lines 13560-13682
13560/***/ "./node_modules/moment/locale/tg.js": 13561/*!******************************************!*\ 13562 !*** ./node_modules/moment/locale/tg.js ***! 13563 \******************************************/ 13564/*! no static exports found */ 13565/***/ (function(module, exports, __webpack_require__) { 13566 13567//! moment.js locale configuration 13568; 13569 13570(function (global, factory) { 13571 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 13572})(this, function (moment) { 13573 'use strict'; 13574 13575 var suffixes = { 13576 0: '-Ñм', 13577 1: '-Ñм', 13578 2: '-Ñм', 13579 3: '-Ñм', 13580 4: '-Ñм', 13581 5: '-Ñм', 13582 6: '-Ñм', 13583 7: '-Ñм', 13584 8: '-Ñм', 13585 9: '-Ñм', 13586 10: '-Ñм', 13587 12: '-Ñм', 13588 13: '-Ñм', 13589 20: '-Ñм', 13590 30: '-Ñм', 13591 40: '-Ñм', 13592 50: '-Ñм', 13593 60: '-Ñм', 13594 70: '-Ñм', 13595 80: '-Ñм', 13596 90: '-Ñм', 13597 100: '-Ñм' 13598 }; 13599 var tg = moment.defineLocale('tg', { 13600 months: 'ÑнваÑ_ÑевÑал_маÑÑ_апÑел_май_иÑн_иÑл_авгÑÑÑ_ÑенÑÑбÑ_окÑÑбÑ_ноÑбÑ_декабÑ'.split('_'), 13601 monthsShort: 'Ñнв_Ñев_маÑ_апÑ_май_иÑн_иÑл_авг_Ñен_окÑ_ноÑ_дек'.split('_'), 13602 weekdays: 'ÑкÑанбе_дÑÑанбе_ÑеÑанбе_ÑоÑÑанбе_панҷÑанбе_Ò·ÑмÑа_Ñанбе'.split('_'), 13603 weekdaysShort: 'ÑÑб_дÑб_ÑÑб_ÑÑб_пÑб_Ò·Ñм_Ñнб'.split('_'), 13604 weekdaysMin: 'ÑÑ_дÑ_ÑÑ_ÑÑ_пÑ_ҷм_Ñб'.split('_'), 13605 longDateFormat: { 13606 LT: 'HH:mm', 13607 LTS: 'HH:mm:ss', 13608 L: 'DD/MM/YYYY', 13609 LL: 'D MMMM YYYY', 13610 LLL: 'D MMMM YYYY HH:mm', 13611 LLLL: 'dddd, D MMMM YYYY HH:mm' 13612 }, 13613 calendar: { 13614 sameDay: '[ÐмÑӯз ÑоаÑи] LT', 13615 nextDay: '[Ðагоҳ ÑоаÑи] LT', 13616 lastDay: '[ÐиÑӯз ÑоаÑи] LT', 13617 nextWeek: 'dddd[и] [ҳаÑÑаи оÑнда ÑоаÑи] LT', 13618 lastWeek: 'dddd[и] [ҳаÑÑаи гÑзаÑÑа ÑоаÑи] LT', 13619 sameElse: 'L' 13620 }, 13621 relativeTime: { 13622 future: 'баÑди %s', 13623 past: '%s пеÑ', 13624 s: 'ÑкÑанд ÑониÑ', 13625 m: 'Ñк даÒиÒа', 13626 mm: '%d даÒиÒа', 13627 h: 'Ñк ÑоаÑ', 13628 hh: '%d ÑоаÑ', 13629 d: 'Ñк Ñӯз', 13630 dd: '%d Ñӯз', 13631 M: 'Ñк моҳ', 13632 MM: '%d моҳ', 13633 y: 'Ñк Ñол', 13634 yy: '%d Ñол' 13635 }, 13636 meridiemParse: /Ñаб|ÑÑбҳ|Ñӯз|бегоҳ/, 13637 meridiemHour: function (hour, meridiem) { 13638 if (hour === 12) { 13639 hour = 0; 13640 } 13641 13642 if (meridiem === 'Ñаб') { 13643 return hour < 4 ? hour : hour + 12; 13644 } else if (meridiem === 'ÑÑбҳ') { 13645 return hour; 13646 } else if (meridiem === 'Ñӯз') { 13647 return hour >= 11 ? hour : hour + 12; 13648 } else if (meridiem === 'бегоҳ') { 13649 return hour + 12; 13650 } 13651 }, 13652 meridiem: function (hour, minute, isLower) { 13653 if (hour < 4) { 13654 return 'Ñаб'; 13655 } else if (hour < 11) { 13656 return 'ÑÑбҳ'; 13657 } else if (hour < 16) { 13658 return 'Ñӯз'; 13659 } else if (hour < 19) { 13660 return 'бегоҳ'; 13661 } else { 13662 return 'Ñаб'; 13663 } 13664 }, 13665 dayOfMonthOrdinalParse: /\d{1,2}-(Ñм|Ñм)/, 13666 ordinal: function (number) { 13667 var a = number % 10, 13668 b = number >= 100 ? 100 : null; 13669 return number + (suffixes[number] || suffixes[a] || suffixes[b]); 13670 }, 13671 week: { 13672 dow: 1, 13673 // Monday is the first day of the week. 13674 doy: 7 // The week that contains Jan 1th is the first week of the year. 13675 13676 } 13677 }); 13678 return tg; 13679}); 13680 13681/***/ }), 13682
vendor: 2,913 bytes, lines 13683-13755
13683/***/ "./node_modules/moment/locale/th.js": 13684/*!******************************************!*\ 13685 !*** ./node_modules/moment/locale/th.js ***! 13686 \******************************************/ 13687/*! no static exports found */ 13688/***/ (function(module, exports, __webpack_require__) { 13689 13690//! moment.js locale configuration 13691; 13692 13693(function (global, factory) { 13694 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 13695})(this, function (moment) { 13696 'use strict'; 13697 13698 var th = moment.defineLocale('th', { 13699 months: 'มà¸à¸£à¸²à¸à¸¡_à¸à¸¸à¸¡à¸ าà¸à¸±à¸à¸à¹_มีà¸à¸²à¸à¸¡_à¹à¸¡à¸©à¸²à¸¢à¸_à¸à¸¤à¸©à¸ าà¸à¸¡_มิà¸à¸¸à¸à¸²à¸¢à¸_à¸à¸£à¸à¸à¸²à¸à¸¡_สิà¸à¸«à¸²à¸à¸¡_à¸à¸±à¸à¸¢à¸²à¸¢à¸_à¸à¸¸à¸¥à¸²à¸à¸¡_à¸à¸¤à¸¨à¸à¸´à¸à¸²à¸¢à¸_à¸à¸±à¸à¸§à¸²à¸à¸¡'.split('_'), 13700 monthsShort: 'ม.à¸._à¸.à¸._มี.à¸._à¹à¸¡.ย._à¸.à¸._มิ.ย._à¸.à¸._ส.à¸._à¸.ย._à¸.à¸._à¸.ย._à¸.à¸.'.split('_'), 13701 monthsParseExact: true, 13702 weekdays: 'à¸à¸²à¸à¸´à¸à¸¢à¹_à¸à¸±à¸à¸à¸£à¹_à¸à¸±à¸à¸à¸²à¸£_à¸à¸¸à¸_à¸à¸¤à¸«à¸±à¸ªà¸à¸à¸µ_ศุà¸à¸£à¹_à¹à¸ªà¸²à¸£à¹'.split('_'), 13703 weekdaysShort: 'à¸à¸²à¸à¸´à¸à¸¢à¹_à¸à¸±à¸à¸à¸£à¹_à¸à¸±à¸à¸à¸²à¸£_à¸à¸¸à¸_à¸à¸¤à¸«à¸±à¸ª_ศุà¸à¸£à¹_à¹à¸ªà¸²à¸£à¹'.split('_'), 13704 // yes, three characters difference 13705 weekdaysMin: 'à¸à¸²._à¸._à¸._à¸._à¸à¸¤._ศ._ส.'.split('_'), 13706 weekdaysParseExact: true, 13707 longDateFormat: { 13708 LT: 'H:mm', 13709 LTS: 'H:mm:ss', 13710 L: 'DD/MM/YYYY', 13711 LL: 'D MMMM YYYY', 13712 LLL: 'D MMMM YYYY à¹à¸§à¸¥à¸² H:mm', 13713 LLLL: 'วัà¸ddddà¸à¸µà¹ D MMMM YYYY à¹à¸§à¸¥à¸² H:mm' 13714 }, 13715 meridiemParse: /à¸à¹à¸à¸à¹à¸à¸µà¹à¸¢à¸|หลัà¸à¹à¸à¸µà¹à¸¢à¸/, 13716 isPM: function (input) { 13717 return input === 'หลัà¸à¹à¸à¸µà¹à¸¢à¸'; 13718 }, 13719 meridiem: function (hour, minute, isLower) { 13720 if (hour < 12) { 13721 return 'à¸à¹à¸à¸à¹à¸à¸µà¹à¸¢à¸'; 13722 } else { 13723 return 'หลัà¸à¹à¸à¸µà¹à¸¢à¸'; 13724 } 13725 }, 13726 calendar: { 13727 sameDay: '[วัà¸à¸à¸µà¹ à¹à¸§à¸¥à¸²] LT', 13728 nextDay: '[à¸à¸£à¸¸à¹à¸à¸à¸µà¹ à¹à¸§à¸¥à¸²] LT', 13729 nextWeek: 'dddd[หà¸à¹à¸² à¹à¸§à¸¥à¸²] LT', 13730 lastDay: '[à¹à¸¡à¸·à¹à¸à¸§à¸²à¸à¸à¸µà¹ à¹à¸§à¸¥à¸²] LT', 13731 lastWeek: '[วัà¸]dddd[à¸à¸µà¹à¹à¸¥à¹à¸§ à¹à¸§à¸¥à¸²] LT', 13732 sameElse: 'L' 13733 }, 13734 relativeTime: { 13735 future: 'à¸à¸µà¸ %s', 13736 past: '%sà¸à¸µà¹à¹à¸¥à¹à¸§', 13737 s: 'à¹à¸¡à¹à¸à¸µà¹à¸§à¸´à¸à¸²à¸à¸µ', 13738 ss: '%d วิà¸à¸²à¸à¸µ', 13739 m: '1 à¸à¸²à¸à¸µ', 13740 mm: '%d à¸à¸²à¸à¸µ', 13741 h: '1 à¸à¸±à¹à¸§à¹à¸¡à¸', 13742 hh: '%d à¸à¸±à¹à¸§à¹à¸¡à¸', 13743 d: '1 วัà¸', 13744 dd: '%d วัà¸', 13745 M: '1 à¹à¸à¸·à¸à¸', 13746 MM: '%d à¹à¸à¸·à¸à¸', 13747 y: '1 à¸à¸µ', 13748 yy: '%d à¸à¸µ' 13749 } 13750 }); 13751 return th; 13752}); 13753 13754/***/ }), 13755
vendor: 2,020 bytes, lines 13756-13824
13756/***/ "./node_modules/moment/locale/tl-ph.js": 13757/*!*********************************************!*\ 13758 !*** ./node_modules/moment/locale/tl-ph.js ***! 13759 \*********************************************/ 13760/*! no static exports found */ 13761/***/ (function(module, exports, __webpack_require__) { 13762 13763//! moment.js locale configuration 13764; 13765 13766(function (global, factory) { 13767 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 13768})(this, function (moment) { 13769 'use strict'; 13770 13771 var tlPh = moment.defineLocale('tl-ph', { 13772 months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'), 13773 monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), 13774 weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'), 13775 weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), 13776 weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), 13777 longDateFormat: { 13778 LT: 'HH:mm', 13779 LTS: 'HH:mm:ss', 13780 L: 'MM/D/YYYY', 13781 LL: 'MMMM D, YYYY', 13782 LLL: 'MMMM D, YYYY HH:mm', 13783 LLLL: 'dddd, MMMM DD, YYYY HH:mm' 13784 }, 13785 calendar: { 13786 sameDay: 'LT [ngayong araw]', 13787 nextDay: '[Bukas ng] LT', 13788 nextWeek: 'LT [sa susunod na] dddd', 13789 lastDay: 'LT [kahapon]', 13790 lastWeek: 'LT [noong nakaraang] dddd', 13791 sameElse: 'L' 13792 }, 13793 relativeTime: { 13794 future: 'sa loob ng %s', 13795 past: '%s ang nakalipas', 13796 s: 'ilang segundo', 13797 ss: '%d segundo', 13798 m: 'isang minuto', 13799 mm: '%d minuto', 13800 h: 'isang oras', 13801 hh: '%d oras', 13802 d: 'isang araw', 13803 dd: '%d araw', 13804 M: 'isang buwan', 13805 MM: '%d buwan', 13806 y: 'isang taon', 13807 yy: '%d taon' 13808 }, 13809 dayOfMonthOrdinalParse: /\d{1,2}/, 13810 ordinal: function (number) { 13811 return number; 13812 }, 13813 week: { 13814 dow: 1, 13815 // Monday is the first day of the week. 13816 doy: 4 // The week that contains Jan 4th is the first week of the year. 13817 13818 } 13819 }); 13820 return tlPh; 13821}); 13822 13823/***/ }), 13824
vendor: 3,818 bytes, lines 13825-13951
13825/***/ "./node_modules/moment/locale/tlh.js": 13826/*!*******************************************!*\ 13827 !*** ./node_modules/moment/locale/tlh.js ***! 13828 \*******************************************/ 13829/*! no static exports found */ 13830/***/ (function(module, exports, __webpack_require__) { 13831 13832//! moment.js locale configuration 13833; 13834 13835(function (global, factory) { 13836 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 13837})(this, function (moment) { 13838 'use strict'; 13839 13840 var numbersNouns = 'pagh_waâ_chaâ_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_'); 13841 13842 function translateFuture(output) { 13843 var time = output; 13844 time = output.indexOf('jaj') !== -1 ? time.slice(0, -3) + 'leS' : output.indexOf('jar') !== -1 ? time.slice(0, -3) + 'waQ' : output.indexOf('DIS') !== -1 ? time.slice(0, -3) + 'nem' : time + ' pIq'; 13845 return time; 13846 } 13847 13848 function translatePast(output) { 13849 var time = output; 13850 time = output.indexOf('jaj') !== -1 ? time.slice(0, -3) + 'Huâ' : output.indexOf('jar') !== -1 ? time.slice(0, -3) + 'wen' : output.indexOf('DIS') !== -1 ? time.slice(0, -3) + 'ben' : time + ' ret'; 13851 return time; 13852 } 13853 13854 function translate(number, withoutSuffix, string, isFuture) { 13855 var numberNoun = numberAsNoun(number); 13856 13857 switch (string) { 13858 case 'ss': 13859 return numberNoun + ' lup'; 13860 13861 case 'mm': 13862 return numberNoun + ' tup'; 13863 13864 case 'hh': 13865 return numberNoun + ' rep'; 13866 13867 case 'dd': 13868 return numberNoun + ' jaj'; 13869 13870 case 'MM': 13871 return numberNoun + ' jar'; 13872 13873 case 'yy': 13874 return numberNoun + ' DIS'; 13875 } 13876 } 13877 13878 function numberAsNoun(number) { 13879 var hundred = Math.floor(number % 1000 / 100), 13880 ten = Math.floor(number % 100 / 10), 13881 one = number % 10, 13882 word = ''; 13883 13884 if (hundred > 0) { 13885 word += numbersNouns[hundred] + 'vatlh'; 13886 } 13887 13888 if (ten > 0) { 13889 word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH'; 13890 } 13891 13892 if (one > 0) { 13893 word += (word !== '' ? ' ' : '') + numbersNouns[one]; 13894 } 13895 13896 return word === '' ? 'pagh' : word; 13897 } 13898 13899 var tlh = moment.defineLocale('tlh', { 13900 months: 'teraâ jar waâ_teraâ jar chaâ_teraâ jar wej_teraâ jar loS_teraâ jar vagh_teraâ jar jav_teraâ jar Soch_teraâ jar chorgh_teraâ jar Hut_teraâ jar waâmaH_teraâ jar waâmaH waâ_teraâ jar waâmaH chaâ'.split('_'), 13901 monthsShort: 'jar waâ_jar chaâ_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar waâmaH_jar waâmaH waâ_jar waâmaH chaâ'.split('_'), 13902 monthsParseExact: true, 13903 weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), 13904 weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), 13905 weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), 13906 longDateFormat: { 13907 LT: 'HH:mm', 13908 LTS: 'HH:mm:ss', 13909 L: 'DD.MM.YYYY', 13910 LL: 'D MMMM YYYY', 13911 LLL: 'D MMMM YYYY HH:mm', 13912 LLLL: 'dddd, D MMMM YYYY HH:mm' 13913 }, 13914 calendar: { 13915 sameDay: '[DaHjaj] LT', 13916 nextDay: '[waâleS] LT', 13917 nextWeek: 'LLL', 13918 lastDay: '[waâHuâ] LT', 13919 lastWeek: 'LLL', 13920 sameElse: 'L' 13921 }, 13922 relativeTime: { 13923 future: translateFuture, 13924 past: translatePast, 13925 s: 'puS lup', 13926 ss: translate, 13927 m: 'waâ tup', 13928 mm: translate, 13929 h: 'waâ rep', 13930 hh: translate, 13931 d: 'waâ jaj', 13932 dd: translate, 13933 M: 'waâ jar', 13934 MM: translate, 13935 y: 'waâ DIS', 13936 yy: translate 13937 }, 13938 dayOfMonthOrdinalParse: /\d{1,2}\./, 13939 ordinal: '%d.', 13940 week: { 13941 dow: 1, 13942 // Monday is the first day of the week. 13943 doy: 4 // The week that contains Jan 4th is the first week of the year. 13944 13945 } 13946 }); 13947 return tlh; 13948}); 13949 13950/***/ }), 13951
vendor: 2,677 bytes, lines 13952-14055
13952/***/ "./node_modules/moment/locale/tr.js": 13953/*!******************************************!*\ 13954 !*** ./node_modules/moment/locale/tr.js ***! 13955 \******************************************/ 13956/*! no static exports found */ 13957/***/ (function(module, exports, __webpack_require__) { 13958 13959; 13960 13961(function (global, factory) { 13962 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 13963})(this, function (moment) { 13964 'use strict'; 13965 13966 var suffixes = { 13967 1: '\'inci', 13968 5: '\'inci', 13969 8: '\'inci', 13970 70: '\'inci', 13971 80: '\'inci', 13972 2: '\'nci', 13973 7: '\'nci', 13974 20: '\'nci', 13975 50: '\'nci', 13976 3: '\'üncü', 13977 4: '\'üncü', 13978 100: '\'üncü', 13979 6: '\'ncı', 13980 9: '\'uncu', 13981 10: '\'uncu', 13982 30: '\'uncu', 13983 60: '\'ıncı', 13984 90: '\'ıncı' 13985 }; 13986 var tr = moment.defineLocale('tr', { 13987 months: 'Ocak_Åubat_Mart_Nisan_Mayıs_Haziran_Temmuz_AÄustos_Eylül_Ekim_Kasım_Aralık'.split('_'), 13988 monthsShort: 'Oca_Åub_Mar_Nis_May_Haz_Tem_AÄu_Eyl_Eki_Kas_Ara'.split('_'), 13989 weekdays: 'Pazar_Pazartesi_Salı_ÃarÅamba_PerÅembe_Cuma_Cumartesi'.split('_'), 13990 weekdaysShort: 'Paz_Pts_Sal_Ãar_Per_Cum_Cts'.split('_'), 13991 weekdaysMin: 'Pz_Pt_Sa_Ãa_Pe_Cu_Ct'.split('_'), 13992 longDateFormat: { 13993 LT: 'HH:mm', 13994 LTS: 'HH:mm:ss', 13995 L: 'DD.MM.YYYY', 13996 LL: 'D MMMM YYYY', 13997 LLL: 'D MMMM YYYY HH:mm', 13998 LLLL: 'dddd, D MMMM YYYY HH:mm' 13999 }, 14000 calendar: { 14001 sameDay: '[bugün saat] LT', 14002 nextDay: '[yarın saat] LT', 14003 nextWeek: '[gelecek] dddd [saat] LT', 14004 lastDay: '[dün] LT', 14005 lastWeek: '[geçen] dddd [saat] LT', 14006 sameElse: 'L' 14007 }, 14008 relativeTime: { 14009 future: '%s sonra', 14010 past: '%s önce', 14011 s: 'birkaç saniye', 14012 ss: '%d saniye', 14013 m: 'bir dakika', 14014 mm: '%d dakika', 14015 h: 'bir saat', 14016 hh: '%d saat', 14017 d: 'bir gün', 14018 dd: '%d gün', 14019 M: 'bir ay', 14020 MM: '%d ay', 14021 y: 'bir yıl', 14022 yy: '%d yıl' 14023 }, 14024 ordinal: function (number, period) { 14025 switch (period) { 14026 case 'd': 14027 case 'D': 14028 case 'Do': 14029 case 'DD': 14030 return number; 14031 14032 default: 14033 if (number === 0) { 14034 // special case for zero 14035 return number + '\'ıncı'; 14036 } 14037 14038 var a = number % 10, 14039 b = number % 100 - a, 14040 c = number >= 100 ? 100 : null; 14041 return number + (suffixes[a] || suffixes[b] || suffixes[c]); 14042 } 14043 }, 14044 week: { 14045 dow: 1, 14046 // Monday is the first day of the week. 14047 doy: 7 // The week that contains Jan 7th is the first week of the year. 14048 14049 } 14050 }); 14051 return tr; 14052}); 14053 14054/***/ }), 14055
vendor: 3,348 bytes, lines 14056-14153
14056/***/ "./node_modules/moment/locale/tzl.js": 14057/*!*******************************************!*\ 14058 !*** ./node_modules/moment/locale/tzl.js ***! 14059 \*******************************************/ 14060/*! no static exports found */ 14061/***/ (function(module, exports, __webpack_require__) { 14062 14063//! moment.js locale configuration 14064; 14065 14066(function (global, factory) { 14067 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 14068})(this, function (moment) { 14069 'use strict'; // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. 14070 // This is currently too difficult (maybe even impossible) to add. 14071 14072 var tzl = moment.defineLocale('tzl', { 14073 months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'), 14074 monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), 14075 weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), 14076 weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), 14077 weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), 14078 longDateFormat: { 14079 LT: 'HH.mm', 14080 LTS: 'HH.mm.ss', 14081 L: 'DD.MM.YYYY', 14082 LL: 'D. MMMM [dallas] YYYY', 14083 LLL: 'D. MMMM [dallas] YYYY HH.mm', 14084 LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm' 14085 }, 14086 meridiemParse: /d\'o|d\'a/i, 14087 isPM: function (input) { 14088 return 'd\'o' === input.toLowerCase(); 14089 }, 14090 meridiem: function (hours, minutes, isLower) { 14091 if (hours > 11) { 14092 return isLower ? 'd\'o' : 'D\'O'; 14093 } else { 14094 return isLower ? 'd\'a' : 'D\'A'; 14095 } 14096 }, 14097 calendar: { 14098 sameDay: '[oxhi à ] LT', 14099 nextDay: '[demà à ] LT', 14100 nextWeek: 'dddd [à ] LT', 14101 lastDay: '[ieiri à ] LT', 14102 lastWeek: '[sür el] dddd [lasteu à ] LT', 14103 sameElse: 'L' 14104 }, 14105 relativeTime: { 14106 future: 'osprei %s', 14107 past: 'ja%s', 14108 s: processRelativeTime, 14109 ss: processRelativeTime, 14110 m: processRelativeTime, 14111 mm: processRelativeTime, 14112 h: processRelativeTime, 14113 hh: processRelativeTime, 14114 d: processRelativeTime, 14115 dd: processRelativeTime, 14116 M: processRelativeTime, 14117 MM: processRelativeTime, 14118 y: processRelativeTime, 14119 yy: processRelativeTime 14120 }, 14121 dayOfMonthOrdinalParse: /\d{1,2}\./, 14122 ordinal: '%d.', 14123 week: { 14124 dow: 1, 14125 // Monday is the first day of the week. 14126 doy: 4 // The week that contains Jan 4th is the first week of the year. 14127 14128 } 14129 }); 14130 14131 function processRelativeTime(number, withoutSuffix, key, isFuture) { 14132 var format = { 14133 's': ['viensas secunds', '\'iensas secunds'], 14134 'ss': [number + ' secunds', '' + number + ' secunds'], 14135 'm': ['\'n mÃut', '\'iens mÃut'], 14136 'mm': [number + ' mÃuts', '' + number + ' mÃuts'], 14137 'h': ['\'n þora', '\'iensa þora'], 14138 'hh': [number + ' þoras', '' + number + ' þoras'], 14139 'd': ['\'n ziua', '\'iensa ziua'], 14140 'dd': [number + ' ziuas', '' + number + ' ziuas'], 14141 'M': ['\'n mes', '\'iens mes'], 14142 'MM': [number + ' mesen', '' + number + ' mesen'], 14143 'y': ['\'n ar', '\'iens ar'], 14144 'yy': [number + ' ars', '' + number + ' ars'] 14145 }; 14146 return isFuture ? format[key][0] : withoutSuffix ? format[key][0] : format[key][1]; 14147 } 14148 14149 return tzl; 14150}); 14151 14152/***/ }), 14153
vendor: 1,969 bytes, lines 14154-14218
14154/***/ "./node_modules/moment/locale/tzm-latn.js": 14155/*!************************************************!*\ 14156 !*** ./node_modules/moment/locale/tzm-latn.js ***! 14157 \************************************************/ 14158/*! no static exports found */ 14159/***/ (function(module, exports, __webpack_require__) { 14160 14161//! moment.js locale configuration 14162; 14163 14164(function (global, factory) { 14165 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 14166})(this, function (moment) { 14167 'use strict'; 14168 14169 var tzmLatn = moment.defineLocale('tzm-latn', { 14170 months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), 14171 monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), 14172 weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'), 14173 weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'), 14174 weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'), 14175 longDateFormat: { 14176 LT: 'HH:mm', 14177 LTS: 'HH:mm:ss', 14178 L: 'DD/MM/YYYY', 14179 LL: 'D MMMM YYYY', 14180 LLL: 'D MMMM YYYY HH:mm', 14181 LLLL: 'dddd D MMMM YYYY HH:mm' 14182 }, 14183 calendar: { 14184 sameDay: '[asdkh g] LT', 14185 nextDay: '[aska g] LT', 14186 nextWeek: 'dddd [g] LT', 14187 lastDay: '[assant g] LT', 14188 lastWeek: 'dddd [g] LT', 14189 sameElse: 'L' 14190 }, 14191 relativeTime: { 14192 future: 'dadkh s yan %s', 14193 past: 'yan %s', 14194 s: 'imik', 14195 ss: '%d imik', 14196 m: 'minuá¸', 14197 mm: '%d minuá¸', 14198 h: 'saÉa', 14199 hh: '%d tassaÉin', 14200 d: 'ass', 14201 dd: '%d ossan', 14202 M: 'ayowr', 14203 MM: '%d iyyirn', 14204 y: 'asgas', 14205 yy: '%d isgasn' 14206 }, 14207 week: { 14208 dow: 6, 14209 // Saturday is the first day of the week. 14210 doy: 12 // The week that contains Jan 12th is the first week of the year. 14211 14212 } 14213 }); 14214 return tzmLatn; 14215}); 14216 14217/***/ }), 14218
vendor: 2,583 bytes, lines 14219-14283
14219/***/ "./node_modules/moment/locale/tzm.js": 14220/*!*******************************************!*\ 14221 !*** ./node_modules/moment/locale/tzm.js ***! 14222 \*******************************************/ 14223/*! no static exports found */ 14224/***/ (function(module, exports, __webpack_require__) { 14225 14226//! moment.js locale configuration 14227; 14228 14229(function (global, factory) { 14230 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 14231})(this, function (moment) { 14232 'use strict'; 14233 14234 var tzm = moment.defineLocale('tzm', { 14235 months: 'âµâµâµâ´°âµ¢âµ_â´±âµâ´°âµ¢âµ_âµâ´°âµâµ_âµâ´±âµâµâµ_âµâ´°âµ¢âµ¢âµ_âµ¢âµâµâµ¢âµ_âµ¢âµâµâµ¢âµâµ£_âµâµâµâµ_âµâµâµâ´°âµâ´±âµâµ_â´½âµâµâ´±âµ_âµâµâµ¡â´°âµâ´±âµâµ_â´·âµâµâµâ´±âµâµ'.split('_'), 14236 monthsShort: 'âµâµâµâ´°âµ¢âµ_â´±âµâ´°âµ¢âµ_âµâ´°âµâµ_âµâ´±âµâµâµ_âµâ´°âµ¢âµ¢âµ_âµ¢âµâµâµ¢âµ_âµ¢âµâµâµ¢âµâµ£_âµâµâµâµ_âµâµâµâ´°âµâ´±âµâµ_â´½âµâµâ´±âµ_âµâµâµ¡â´°âµâ´±âµâµ_â´·âµâµâµâ´±âµâµ'.split('_'), 14237 weekdays: 'â´°âµâ´°âµâ´°âµ_â´°âµ¢âµâ´°âµ_â´°âµâµâµâ´°âµ_â´°â´½âµâ´°âµ_ⴰⴽⵡⴰâµ_â´°âµâµâµâµ¡â´°âµ_â´°âµâµâ´¹âµ¢â´°âµ'.split('_'), 14238 weekdaysShort: 'â´°âµâ´°âµâ´°âµ_â´°âµ¢âµâ´°âµ_â´°âµâµâµâ´°âµ_â´°â´½âµâ´°âµ_ⴰⴽⵡⴰâµ_â´°âµâµâµâµ¡â´°âµ_â´°âµâµâ´¹âµ¢â´°âµ'.split('_'), 14239 weekdaysMin: 'â´°âµâ´°âµâ´°âµ_â´°âµ¢âµâ´°âµ_â´°âµâµâµâ´°âµ_â´°â´½âµâ´°âµ_ⴰⴽⵡⴰâµ_â´°âµâµâµâµ¡â´°âµ_â´°âµâµâ´¹âµ¢â´°âµ'.split('_'), 14240 longDateFormat: { 14241 LT: 'HH:mm', 14242 LTS: 'HH:mm:ss', 14243 L: 'DD/MM/YYYY', 14244 LL: 'D MMMM YYYY', 14245 LLL: 'D MMMM YYYY HH:mm', 14246 LLLL: 'dddd D MMMM YYYY HH:mm' 14247 }, 14248 calendar: { 14249 sameDay: '[â´°âµâ´·âµ â´´] LT', 14250 nextDay: '[â´°âµâ´½â´° â´´] LT', 14251 nextWeek: 'dddd [â´´] LT', 14252 lastDay: '[â´°âµâ´°âµâµ â´´] LT', 14253 lastWeek: 'dddd [â´´] LT', 14254 sameElse: 'L' 14255 }, 14256 relativeTime: { 14257 future: 'ⴷⴰⴷⵠⵠⵢⴰⵠ%s', 14258 past: 'ⵢⴰⵠ%s', 14259 s: 'âµâµâµâ´½', 14260 ss: '%d âµâµâµâ´½', 14261 m: 'âµâµâµâµâ´º', 14262 mm: '%d âµâµâµâµâ´º', 14263 h: 'âµâ´°âµâ´°', 14264 hh: '%d âµâ´°âµâµâ´°âµâµâµ', 14265 d: 'â´°âµâµ', 14266 dd: '%d oâµâµâ´°âµ', 14267 M: 'â´°âµ¢oâµâµ', 14268 MM: '%d âµâµ¢âµ¢âµâµâµ', 14269 y: 'â´°âµâ´³â´°âµ', 14270 yy: '%d âµâµâ´³â´°âµâµ' 14271 }, 14272 week: { 14273 dow: 6, 14274 // Saturday is the first day of the week. 14275 doy: 12 // The week that contains Jan 12th is the first week of the year. 14276 14277 } 14278 }); 14279 return tzm; 14280}); 14281 14282/***/ }), 14283
vendor: 3,993 bytes, lines 14284-14402
14284/***/ "./node_modules/moment/locale/ug-cn.js": 14285/*!*********************************************!*\ 14286 !*** ./node_modules/moment/locale/ug-cn.js ***! 14287 \*********************************************/ 14288/*! no static exports found */ 14289/***/ (function(module, exports, __webpack_require__) { 14290 14291//! moment.js language configuration 14292; 14293 14294(function (global, factory) { 14295 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 14296})(this, function (moment) { 14297 'use strict'; 14298 14299 var ugCn = moment.defineLocale('ug-cn', { 14300 months: 'ÙØ§ÙÛØ§Ø±_ÙÛÛØ±Ø§Ù_٠ارت_ئاپرÛÙ_٠اÙ_ئÙÙÛÙ_ئÙÙÛÙ_Ø¦Ø§ÛØºÛست_سÛÙØªÛØ¨ÙØ±_ئÛÙØªÛØ¨ÙØ±_ÙÙÙØ§Ø¨Ùر_دÛÙØ§Ø¨Ùر'.split('_'), 14301 monthsShort: 'ÙØ§ÙÛØ§Ø±_ÙÛÛØ±Ø§Ù_٠ارت_ئاپرÛÙ_٠اÙ_ئÙÙÛÙ_ئÙÙÛÙ_Ø¦Ø§ÛØºÛست_سÛÙØªÛØ¨ÙØ±_ئÛÙØªÛØ¨ÙØ±_ÙÙÙØ§Ø¨Ùر_دÛÙØ§Ø¨Ùر'.split('_'), 14302 weekdays: 'ÙÛÙØ´ÛÙØ¨Û_Ø¯ÛØ´ÛÙØ¨Û_سÛÙØ´ÛÙØ¨Û_ÚØ§Ø±Ø´ÛÙØ¨Û_Ù¾ÛÙØ´ÛÙØ¨Û_جÛÙ Û_Ø´ÛÙØ¨Û'.split('_'), 14303 weekdaysShort: 'ÙÛ_دÛ_سÛ_ÚØ§_Ù¾Û_جÛ_Ø´Û'.split('_'), 14304 weekdaysMin: 'ÙÛ_دÛ_سÛ_ÚØ§_Ù¾Û_جÛ_Ø´Û'.split('_'), 14305 longDateFormat: { 14306 LT: 'HH:mm', 14307 LTS: 'HH:mm:ss', 14308 L: 'YYYY-MM-DD', 14309 LL: 'YYYY-ÙÙÙÙM-ئاÙÙÙÚD-ÙÛÙÙ', 14310 LLL: 'YYYY-ÙÙÙÙM-ئاÙÙÙÚD-ÙÛÙÙØ HH:mm', 14311 LLLL: 'ddddØ YYYY-ÙÙÙÙM-ئاÙÙÙÚD-ÙÛÙÙØ HH:mm' 14312 }, 14313 meridiemParse: /ÙÛØ±ÙÙ ÙÛÚÛ|سÛÚ¾ÛØ±|ÚÛØ´ØªÙÙ Ø¨ÛØ±ÛÙ|ÚÛØ´|ÚÛØ´ØªÙÙ ÙÛÙÙÙ|ÙÛÚ/, 14314 meridiemHour: function (hour, meridiem) { 14315 if (hour === 12) { 14316 hour = 0; 14317 } 14318 14319 if (meridiem === 'ÙÛØ±ÙÙ ÙÛÚÛ' || meridiem === 'سÛÚ¾ÛØ±' || meridiem === 'ÚÛØ´ØªÙÙ Ø¨ÛØ±ÛÙ') { 14320 return hour; 14321 } else if (meridiem === 'ÚÛØ´ØªÙÙ ÙÛÙÙÙ' || meridiem === 'ÙÛÚ') { 14322 return hour + 12; 14323 } else { 14324 return hour >= 11 ? hour : hour + 12; 14325 } 14326 }, 14327 meridiem: function (hour, minute, isLower) { 14328 var hm = hour * 100 + minute; 14329 14330 if (hm < 600) { 14331 return 'ÙÛØ±ÙÙ ÙÛÚÛ'; 14332 } else if (hm < 900) { 14333 return 'سÛÚ¾ÛØ±'; 14334 } else if (hm < 1130) { 14335 return 'ÚÛØ´ØªÙÙ Ø¨ÛØ±ÛÙ'; 14336 } else if (hm < 1230) { 14337 return 'ÚÛØ´'; 14338 } else if (hm < 1800) { 14339 return 'ÚÛØ´ØªÙÙ ÙÛÙÙÙ'; 14340 } else { 14341 return 'ÙÛÚ'; 14342 } 14343 }, 14344 calendar: { 14345 sameDay: '[بÛÚ¯ÛÙ Ø³Ø§Ø¦ÛØª] LT', 14346 nextDay: '[Ø¦ÛØªÛ Ø³Ø§Ø¦ÛØª] LT', 14347 nextWeek: '[ÙÛÙÛØ±ÙÙ] dddd [Ø³Ø§Ø¦ÛØª] LT', 14348 lastDay: '[تÛÙÛÚ¯ÛÙ] LT', 14349 lastWeek: '[Ø¦Ø§ÙØ¯ÙÙÙÙ] dddd [Ø³Ø§Ø¦ÛØª] LT', 14350 sameElse: 'L' 14351 }, 14352 relativeTime: { 14353 future: '%s ÙÛÙÙÙ', 14354 past: '%s Ø¨ÛØ±ÛÙ', 14355 s: 'ÙÛÚÚÛ Ø³ÛÙÙÙØª', 14356 ss: '%d سÛÙÙÙØª', 14357 m: 'Ø¨ÙØ± Ù ÙÙÛØª', 14358 mm: '%d Ù ÙÙÛØª', 14359 h: 'Ø¨ÙØ± Ø³Ø§Ø¦ÛØª', 14360 hh: '%d Ø³Ø§Ø¦ÛØª', 14361 d: 'Ø¨ÙØ± ÙÛÙ', 14362 dd: '%d ÙÛÙ', 14363 M: 'Ø¨ÙØ± ئاÙ', 14364 MM: '%d ئاÙ', 14365 y: 'Ø¨ÙØ± ÙÙÙ', 14366 yy: '%d ÙÙÙ' 14367 }, 14368 dayOfMonthOrdinalParse: /\d{1,2}(-ÙÛÙÙ|-ئاÙ|-Ú¾ÛپتÛ)/, 14369 ordinal: function (number, period) { 14370 switch (period) { 14371 case 'd': 14372 case 'D': 14373 case 'DDD': 14374 return number + '-ÙÛÙÙ'; 14375 14376 case 'w': 14377 case 'W': 14378 return number + '-Ú¾ÛپتÛ'; 14379 14380 default: 14381 return number; 14382 } 14383 }, 14384 preparse: function (string) { 14385 return string.replace(/Ø/g, ','); 14386 }, 14387 postformat: function (string) { 14388 return string.replace(/,/g, 'Ø'); 14389 }, 14390 week: { 14391 // GB/T 7408-1994ãæ°æ®å åäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ¥æåæ¶é´è¡¨ç¤ºæ³ãä¸ISO 8601:1988çæ 14392 dow: 1, 14393 // Monday is the first day of the week. 14394 doy: 7 // The week that contains Jan 1st is the first week of the year. 14395 14396 } 14397 }); 14398 return ugCn; 14399}); 14400 14401/***/ }), 14402
vendor: 5,717 bytes, lines 14403-14565
14403/***/ "./node_modules/moment/locale/uk.js": 14404/*!******************************************!*\ 14405 !*** ./node_modules/moment/locale/uk.js ***! 14406 \******************************************/ 14407/*! no static exports found */ 14408/***/ (function(module, exports, __webpack_require__) { 14409 14410//! moment.js locale configuration 14411; 14412 14413(function (global, factory) { 14414 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 14415})(this, function (moment) { 14416 'use strict'; 14417 14418 function plural(word, num) { 14419 var forms = word.split('_'); 14420 return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]; 14421 } 14422 14423 function relativeTimeWithPlural(number, withoutSuffix, key) { 14424 var format = { 14425 'ss': withoutSuffix ? 'ÑекÑнда_ÑекÑнди_ÑекÑнд' : 'ÑекÑндÑ_ÑекÑнди_ÑекÑнд', 14426 'mm': withoutSuffix ? 'Ñ Ð²Ð¸Ð»Ð¸Ð½Ð°_Ñ Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ Ð²Ð¸Ð»Ð¸Ð½' : 'Ñ Ð²Ð¸Ð»Ð¸Ð½Ñ_Ñ Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ Ð²Ð¸Ð»Ð¸Ð½', 14427 'hh': withoutSuffix ? 'година_години_годин' : 'годинÑ_години_годин', 14428 'dd': 'денÑ_днÑ_днÑв', 14429 'MM': 'мÑÑÑÑÑ_мÑÑÑÑÑ_мÑÑÑÑÑв', 14430 'yy': 'ÑÑк_Ñоки_ÑокÑв' 14431 }; 14432 14433 if (key === 'm') { 14434 return withoutSuffix ? 'Ñ Ð²Ð¸Ð»Ð¸Ð½Ð°' : 'Ñ Ð²Ð¸Ð»Ð¸Ð½Ñ'; 14435 } else if (key === 'h') { 14436 return withoutSuffix ? 'година' : 'годинÑ'; 14437 } else { 14438 return number + ' ' + plural(format[key], +number); 14439 } 14440 } 14441 14442 function weekdaysCaseReplace(m, format) { 14443 var weekdays = { 14444 'nominative': 'недÑлÑ_понедÑлок_вÑвÑоÑок_ÑеÑеда_ÑеÑвеÑ_пâÑÑниÑÑ_ÑÑбоÑа'.split('_'), 14445 'accusative': 'недÑлÑ_понедÑлок_вÑвÑоÑок_ÑеÑедÑ_ÑеÑвеÑ_пâÑÑниÑÑ_ÑÑбоÑÑ'.split('_'), 14446 'genitive': 'недÑлÑ_понедÑлка_вÑвÑоÑка_ÑеÑеди_ÑеÑвеÑга_пâÑÑниÑÑ_ÑÑбоÑи'.split('_') 14447 }; 14448 14449 if (m === true) { 14450 return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1)); 14451 } 14452 14453 if (!m) { 14454 return weekdays['nominative']; 14455 } 14456 14457 var nounCase = /(\[[ÐвУÑ]\]) ?dddd/.test(format) ? 'accusative' : /\[?(?:минÑлоÑ|наÑÑÑпноÑ)? ?\] ?dddd/.test(format) ? 'genitive' : 'nominative'; 14458 return weekdays[nounCase][m.day()]; 14459 } 14460 14461 function processHoursFunction(str) { 14462 return function () { 14463 return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; 14464 }; 14465 } 14466 14467 var uk = moment.defineLocale('uk', { 14468 months: { 14469 'format': 'ÑÑÑнÑ_лÑÑого_беÑезнÑ_квÑÑнÑ_ÑÑавнÑ_ÑеÑвнÑ_липнÑ_ÑеÑпнÑ_веÑеÑнÑ_жовÑнÑ_лиÑÑопада_гÑÑднÑ'.split('_'), 14470 'standalone': 'ÑÑÑенÑ_лÑÑий_беÑезенÑ_квÑÑенÑ_ÑÑавенÑ_ÑеÑвенÑ_липенÑ_ÑеÑпенÑ_веÑеÑенÑ_жовÑенÑ_лиÑÑопад_гÑÑденÑ'.split('_') 14471 }, 14472 monthsShort: 'ÑÑÑ_лÑÑ_беÑ_квÑÑ_ÑÑав_ÑеÑв_лип_ÑеÑп_веÑ_жовÑ_лиÑÑ_гÑÑд'.split('_'), 14473 weekdays: weekdaysCaseReplace, 14474 weekdaysShort: 'нд_пн_вÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 14475 weekdaysMin: 'нд_пн_вÑ_ÑÑ_ÑÑ_пÑ_Ñб'.split('_'), 14476 longDateFormat: { 14477 LT: 'HH:mm', 14478 LTS: 'HH:mm:ss', 14479 L: 'DD.MM.YYYY', 14480 LL: 'D MMMM YYYY Ñ.', 14481 LLL: 'D MMMM YYYY Ñ., HH:mm', 14482 LLLL: 'dddd, D MMMM YYYY Ñ., HH:mm' 14483 }, 14484 calendar: { 14485 sameDay: processHoursFunction('[СÑÐ¾Ð³Ð¾Ð´Ð½Ñ '), 14486 nextDay: processHoursFunction('[ÐавÑÑа '), 14487 lastDay: processHoursFunction('[ÐÑоÑа '), 14488 nextWeek: processHoursFunction('[У] dddd ['), 14489 lastWeek: function () { 14490 switch (this.day()) { 14491 case 0: 14492 case 3: 14493 case 5: 14494 case 6: 14495 return processHoursFunction('[ÐинÑлоÑ] dddd [').call(this); 14496 14497 case 1: 14498 case 2: 14499 case 4: 14500 return processHoursFunction('[ÐинÑлого] dddd [').call(this); 14501 } 14502 }, 14503 sameElse: 'L' 14504 }, 14505 relativeTime: { 14506 future: 'за %s', 14507 past: '%s ÑомÑ', 14508 s: 'декÑлÑка ÑекÑнд', 14509 ss: relativeTimeWithPlural, 14510 m: relativeTimeWithPlural, 14511 mm: relativeTimeWithPlural, 14512 h: 'годинÑ', 14513 hh: relativeTimeWithPlural, 14514 d: 'денÑ', 14515 dd: relativeTimeWithPlural, 14516 M: 'мÑÑÑÑÑ', 14517 MM: relativeTimeWithPlural, 14518 y: 'ÑÑк', 14519 yy: relativeTimeWithPlural 14520 }, 14521 // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason 14522 meridiemParse: /ноÑÑ|ÑанкÑ|днÑ|веÑоÑа/, 14523 isPM: function (input) { 14524 return /^(днÑ|веÑоÑа)$/.test(input); 14525 }, 14526 meridiem: function (hour, minute, isLower) { 14527 if (hour < 4) { 14528 return 'ноÑÑ'; 14529 } else if (hour < 12) { 14530 return 'ÑанкÑ'; 14531 } else if (hour < 17) { 14532 return 'днÑ'; 14533 } else { 14534 return 'веÑоÑа'; 14535 } 14536 }, 14537 dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/, 14538 ordinal: function (number, period) { 14539 switch (period) { 14540 case 'M': 14541 case 'd': 14542 case 'DDD': 14543 case 'w': 14544 case 'W': 14545 return number + '-й'; 14546 14547 case 'D': 14548 return number + '-го'; 14549 14550 default: 14551 return number; 14552 } 14553 }, 14554 week: { 14555 dow: 1, 14556 // Monday is the first day of the week. 14557 doy: 7 // The week that contains Jan 7th is the first week of the year. 14558 14559 } 14560 }); 14561 return uk; 14562}); 14563 14564/***/ }), 14565
vendor: 2,352 bytes, lines 14566-14649
14566/***/ "./node_modules/moment/locale/ur.js": 14567/*!******************************************!*\ 14568 !*** ./node_modules/moment/locale/ur.js ***! 14569 \******************************************/ 14570/*! no static exports found */ 14571/***/ (function(module, exports, __webpack_require__) { 14572 14573//! moment.js locale configuration 14574; 14575 14576(function (global, factory) { 14577 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 14578})(this, function (moment) { 14579 'use strict'; 14580 14581 var months = ['جÙÙØ±Û', 'ÙØ±ÙرÛ', '٠ارÚ', 'اپرÛÙ', '٠ئÛ', 'جÙÙ', 'جÙÙØ§Ø¦Û', 'اگست', 'ست٠بر', 'Ø§Ú©ØªÙØ¨Ø±', 'ÙÙ٠بر', 'دس٠بر']; 14582 var days = ['Ø§ØªÙØ§Ø±', 'Ù¾ÛØ±', 'Ù ÙÚ¯Ù', 'بدھ', 'ج٠عرات', 'ج٠عÛ', 'ÛÙØªÛ']; 14583 var ur = moment.defineLocale('ur', { 14584 months: months, 14585 monthsShort: months, 14586 weekdays: days, 14587 weekdaysShort: days, 14588 weekdaysMin: days, 14589 longDateFormat: { 14590 LT: 'HH:mm', 14591 LTS: 'HH:mm:ss', 14592 L: 'DD/MM/YYYY', 14593 LL: 'D MMMM YYYY', 14594 LLL: 'D MMMM YYYY HH:mm', 14595 LLLL: 'ddddØ D MMMM YYYY HH:mm' 14596 }, 14597 meridiemParse: /صبØ|شا٠/, 14598 isPM: function (input) { 14599 return 'شا٠' === input; 14600 }, 14601 meridiem: function (hour, minute, isLower) { 14602 if (hour < 12) { 14603 return 'صبØ'; 14604 } 14605 14606 return 'شا٠'; 14607 }, 14608 calendar: { 14609 sameDay: '[آج بÙÙØª] LT', 14610 nextDay: '[ک٠بÙÙØª] LT', 14611 nextWeek: 'dddd [بÙÙØª] LT', 14612 lastDay: '[Ú¯Ø°Ø´ØªÛ Ø±ÙØ² بÙÙØª] LT', 14613 lastWeek: '[گذشتÛ] dddd [بÙÙØª] LT', 14614 sameElse: 'L' 14615 }, 14616 relativeTime: { 14617 future: '%s بعد', 14618 past: '%s ÙØ¨Ù', 14619 s: 'ÚÙØ¯ سÛÚ©ÙÚ', 14620 ss: '%d سÛÚ©ÙÚ', 14621 m: 'اÛÚ© Ù ÙÙ¹', 14622 mm: '%d Ù ÙÙ¹', 14623 h: 'اÛÚ© Ú¯Ú¾ÙÙ¹Û', 14624 hh: '%d Ú¯Ú¾ÙÙ¹Û', 14625 d: 'اÛÚ© دÙ', 14626 dd: '%d دÙ', 14627 M: 'اÛÚ© ٠اÛ', 14628 MM: '%d ٠اÛ', 14629 y: 'اÛÚ© ساÙ', 14630 yy: '%d ساÙ' 14631 }, 14632 preparse: function (string) { 14633 return string.replace(/Ø/g, ','); 14634 }, 14635 postformat: function (string) { 14636 return string.replace(/,/g, 'Ø'); 14637 }, 14638 week: { 14639 dow: 1, 14640 // Monday is the first day of the week. 14641 doy: 4 // The week that contains Jan 4th is the first week of the year. 14642 14643 } 14644 }); 14645 return ur; 14646}); 14647 14648/***/ }), 14649
vendor: 1,931 bytes, lines 14650-14714
14650/***/ "./node_modules/moment/locale/uz-latn.js": 14651/*!***********************************************!*\ 14652 !*** ./node_modules/moment/locale/uz-latn.js ***! 14653 \***********************************************/ 14654/*! no static exports found */ 14655/***/ (function(module, exports, __webpack_require__) { 14656 14657//! moment.js locale configuration 14658; 14659 14660(function (global, factory) { 14661 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 14662})(this, function (moment) { 14663 'use strict'; 14664 14665 var uzLatn = moment.defineLocale('uz-latn', { 14666 months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'), 14667 monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), 14668 weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'), 14669 weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), 14670 weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), 14671 longDateFormat: { 14672 LT: 'HH:mm', 14673 LTS: 'HH:mm:ss', 14674 L: 'DD/MM/YYYY', 14675 LL: 'D MMMM YYYY', 14676 LLL: 'D MMMM YYYY HH:mm', 14677 LLLL: 'D MMMM YYYY, dddd HH:mm' 14678 }, 14679 calendar: { 14680 sameDay: '[Bugun soat] LT [da]', 14681 nextDay: '[Ertaga] LT [da]', 14682 nextWeek: 'dddd [kuni soat] LT [da]', 14683 lastDay: '[Kecha soat] LT [da]', 14684 lastWeek: '[O\'tgan] dddd [kuni soat] LT [da]', 14685 sameElse: 'L' 14686 }, 14687 relativeTime: { 14688 future: 'Yaqin %s ichida', 14689 past: 'Bir necha %s oldin', 14690 s: 'soniya', 14691 ss: '%d soniya', 14692 m: 'bir daqiqa', 14693 mm: '%d daqiqa', 14694 h: 'bir soat', 14695 hh: '%d soat', 14696 d: 'bir kun', 14697 dd: '%d kun', 14698 M: 'bir oy', 14699 MM: '%d oy', 14700 y: 'bir yil', 14701 yy: '%d yil' 14702 }, 14703 week: { 14704 dow: 1, 14705 // Monday is the first day of the week. 14706 doy: 7 // The week that contains Jan 7th is the first week of the year. 14707 14708 } 14709 }); 14710 return uzLatn; 14711}); 14712 14713/***/ }), 14714
vendor: 2,186 bytes, lines 14715-14779
14715/***/ "./node_modules/moment/locale/uz.js": 14716/*!******************************************!*\ 14717 !*** ./node_modules/moment/locale/uz.js ***! 14718 \******************************************/ 14719/*! no static exports found */ 14720/***/ (function(module, exports, __webpack_require__) { 14721 14722//! moment.js locale configuration 14723; 14724 14725(function (global, factory) { 14726 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 14727})(this, function (moment) { 14728 'use strict'; 14729 14730 var uz = moment.defineLocale('uz', { 14731 months: 'ÑнваÑ_ÑевÑал_маÑÑ_апÑел_май_иÑн_иÑл_авгÑÑÑ_ÑенÑÑбÑ_окÑÑбÑ_ноÑбÑ_декабÑ'.split('_'), 14732 monthsShort: 'Ñнв_Ñев_маÑ_апÑ_май_иÑн_иÑл_авг_Ñен_окÑ_ноÑ_дек'.split('_'), 14733 weekdays: 'ЯкÑанба_ÐÑÑанба_СеÑанба_ЧоÑÑанба_ÐайÑанба_ÐÑма_Шанба'.split('_'), 14734 weekdaysShort: 'ЯкÑ_ÐÑÑ_СеÑ_ЧоÑ_Ðай_ÐÑм_Шан'.split('_'), 14735 weekdaysMin: 'Як_ÐÑ_Се_Чо_Ðа_ÐÑ_Ша'.split('_'), 14736 longDateFormat: { 14737 LT: 'HH:mm', 14738 LTS: 'HH:mm:ss', 14739 L: 'DD/MM/YYYY', 14740 LL: 'D MMMM YYYY', 14741 LLL: 'D MMMM YYYY HH:mm', 14742 LLLL: 'D MMMM YYYY, dddd HH:mm' 14743 }, 14744 calendar: { 14745 sameDay: '[ÐÑгÑн ÑоаÑ] LT [да]', 14746 nextDay: '[ÐÑÑага] LT [да]', 14747 nextWeek: 'dddd [кÑни ÑоаÑ] LT [да]', 14748 lastDay: '[ÐеÑа ÑоаÑ] LT [да]', 14749 lastWeek: '[УÑган] dddd [кÑни ÑоаÑ] LT [да]', 14750 sameElse: 'L' 14751 }, 14752 relativeTime: { 14753 future: 'Якин %s иÑида', 14754 past: 'ÐÐ¸Ñ Ð½ÐµÑа %s олдин', 14755 s: 'ÑÑÑÑаÑ', 14756 ss: '%d ÑÑÑÑаÑ', 14757 m: 'Ð±Ð¸Ñ Ð´Ð°ÐºÐ¸ÐºÐ°', 14758 mm: '%d дакика', 14759 h: 'Ð±Ð¸Ñ ÑоаÑ', 14760 hh: '%d ÑоаÑ', 14761 d: 'Ð±Ð¸Ñ ÐºÑн', 14762 dd: '%d кÑн', 14763 M: 'Ð±Ð¸Ñ Ð¾Ð¹', 14764 MM: '%d ой', 14765 y: 'Ð±Ð¸Ñ Ð¹Ð¸Ð»', 14766 yy: '%d йил' 14767 }, 14768 week: { 14769 dow: 1, 14770 // Monday is the first day of the week. 14771 doy: 7 // The week that contains Jan 4th is the first week of the year. 14772 14773 } 14774 }); 14775 return uz; 14776}); 14777 14778/***/ }), 14779
vendor: 2,527 bytes, lines 14780-14865
14780/***/ "./node_modules/moment/locale/vi.js": 14781/*!******************************************!*\ 14782 !*** ./node_modules/moment/locale/vi.js ***! 14783 \******************************************/ 14784/*! no static exports found */ 14785/***/ (function(module, exports, __webpack_require__) { 14786 14787//! moment.js locale configuration 14788; 14789 14790(function (global, factory) { 14791 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 14792})(this, function (moment) { 14793 'use strict'; 14794 14795 var vi = moment.defineLocale('vi', { 14796 months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'), 14797 monthsShort: 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'), 14798 monthsParseExact: true, 14799 weekdays: 'chá»§ nháºt_thứ hai_thứ ba_thứ tư_thứ nÄm_thứ sáu_thứ bảy'.split('_'), 14800 weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), 14801 weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), 14802 weekdaysParseExact: true, 14803 meridiemParse: /sa|ch/i, 14804 isPM: function (input) { 14805 return /^ch$/i.test(input); 14806 }, 14807 meridiem: function (hours, minutes, isLower) { 14808 if (hours < 12) { 14809 return isLower ? 'sa' : 'SA'; 14810 } else { 14811 return isLower ? 'ch' : 'CH'; 14812 } 14813 }, 14814 longDateFormat: { 14815 LT: 'HH:mm', 14816 LTS: 'HH:mm:ss', 14817 L: 'DD/MM/YYYY', 14818 LL: 'D MMMM [nÄm] YYYY', 14819 LLL: 'D MMMM [nÄm] YYYY HH:mm', 14820 LLLL: 'dddd, D MMMM [nÄm] YYYY HH:mm', 14821 l: 'DD/M/YYYY', 14822 ll: 'D MMM YYYY', 14823 lll: 'D MMM YYYY HH:mm', 14824 llll: 'ddd, D MMM YYYY HH:mm' 14825 }, 14826 calendar: { 14827 sameDay: '[Hôm nay lúc] LT', 14828 nextDay: '[Ngà y mai lúc] LT', 14829 nextWeek: 'dddd [tuần tá»i lúc] LT', 14830 lastDay: '[Hôm qua lúc] LT', 14831 lastWeek: 'dddd [tuần rá»i lúc] LT', 14832 sameElse: 'L' 14833 }, 14834 relativeTime: { 14835 future: '%s tá»i', 14836 past: '%s trưá»c', 14837 s: 'và i giây', 14838 ss: '%d giây', 14839 m: 'má»t phút', 14840 mm: '%d phút', 14841 h: 'má»t giá»', 14842 hh: '%d giá»', 14843 d: 'má»t ngà y', 14844 dd: '%d ngà y', 14845 M: 'má»t tháng', 14846 MM: '%d tháng', 14847 y: 'má»t nÄm', 14848 yy: '%d nÄm' 14849 }, 14850 dayOfMonthOrdinalParse: /\d{1,2}/, 14851 ordinal: function (number) { 14852 return number; 14853 }, 14854 week: { 14855 dow: 1, 14856 // Monday is the first day of the week. 14857 doy: 4 // The week that contains Jan 4th is the first week of the year. 14858 14859 } 14860 }); 14861 return vi; 14862}); 14863 14864/***/ }), 14865
vendor: 2,432 bytes, lines 14866-14937
14866/***/ "./node_modules/moment/locale/x-pseudo.js": 14867/*!************************************************!*\ 14868 !*** ./node_modules/moment/locale/x-pseudo.js ***! 14869 \************************************************/ 14870/*! no static exports found */ 14871/***/ (function(module, exports, __webpack_require__) { 14872 14873//! moment.js locale configuration 14874; 14875 14876(function (global, factory) { 14877 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 14878})(this, function (moment) { 14879 'use strict'; 14880 14881 var xPseudo = moment.defineLocale('x-pseudo', { 14882 months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Ãp~rÃl_~Máý_~Júñé~_Júl~ý_Ãú~gúst~_Sép~témb~ér_Ã~ctób~ér_Ã~óvém~bér_~Décé~mbér'.split('_'), 14883 monthsShort: 'J~áñ_~Féb_~Már_~Ãpr_~Máý_~Júñ_~Júl_~Ãúg_~Sép_~Ãct_~Ãóv_~Déc'.split('_'), 14884 monthsParseExact: true, 14885 weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~FrÃd~áý_S~átúr~dáý'.split('_'), 14886 weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~FrÃ_~Sát'.split('_'), 14887 weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), 14888 weekdaysParseExact: true, 14889 longDateFormat: { 14890 LT: 'HH:mm', 14891 L: 'DD/MM/YYYY', 14892 LL: 'D MMMM YYYY', 14893 LLL: 'D MMMM YYYY HH:mm', 14894 LLLL: 'dddd, D MMMM YYYY HH:mm' 14895 }, 14896 calendar: { 14897 sameDay: '[T~ódá~ý át] LT', 14898 nextDay: '[T~ómó~rró~w át] LT', 14899 nextWeek: 'dddd [át] LT', 14900 lastDay: '[Ã~ést~érdá~ý át] LT', 14901 lastWeek: '[L~ást] dddd [át] LT', 14902 sameElse: 'L' 14903 }, 14904 relativeTime: { 14905 future: 'Ã~ñ %s', 14906 past: '%s á~gó', 14907 s: 'á ~féw ~sécó~ñds', 14908 ss: '%d s~écóñ~ds', 14909 m: 'á ~mÃñ~úté', 14910 mm: '%d m~Ãñú~tés', 14911 h: 'á~ñ hó~úr', 14912 hh: '%d h~óúrs', 14913 d: 'á ~dáý', 14914 dd: '%d d~áýs', 14915 M: 'á ~móñ~th', 14916 MM: '%d m~óñt~hs', 14917 y: 'á ~ýéár', 14918 yy: '%d ý~éárs' 14919 }, 14920 dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, 14921 ordinal: function (number) { 14922 var b = number % 10, 14923 output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th'; 14924 return number + output; 14925 }, 14926 week: { 14927 dow: 1, 14928 // Monday is the first day of the week. 14929 doy: 4 // The week that contains Jan 4th is the first week of the year. 14930 14931 } 14932 }); 14933 return xPseudo; 14934}); 14935 14936/***/ }), 14937
vendor: 2,170 bytes, lines 14938-15004
14938/***/ "./node_modules/moment/locale/yo.js": 14939/*!******************************************!*\ 14940 !*** ./node_modules/moment/locale/yo.js ***! 14941 \******************************************/ 14942/*! no static exports found */ 14943/***/ (function(module, exports, __webpack_require__) { 14944 14945//! moment.js locale configuration 14946; 14947 14948(function (global, factory) { 14949 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 14950})(this, function (moment) { 14951 'use strict'; 14952 14953 var yo = moment.defineLocale('yo', { 14954 months: 'SẹÌrẹÌ_EÌreÌleÌ_ẸrẹÌnaÌ_IÌgbeÌ_EÌbibi_OÌkuÌdu_Agẹmo_OÌguÌn_Owewe_á»ÌwaÌraÌ_BeÌluÌ_á»ÌpẹÌÌ'.split('_'), 14955 monthsShort: 'SẹÌr_EÌrl_Ẹrn_IÌgb_EÌbi_OÌkuÌ_Agẹ_OÌguÌ_Owe_á»ÌwaÌ_BeÌl_á»ÌpẹÌÌ'.split('_'), 14956 weekdays: 'AÌiÌkuÌ_AjeÌ_IÌsẹÌgun_á»já»ÌruÌ_á»já»Ìbá»_ẸtiÌ_AÌbaÌmẹÌta'.split('_'), 14957 weekdaysShort: 'AÌiÌk_AjeÌ_IÌsẹÌ_á»jr_á»jb_ẸtiÌ_AÌbaÌ'.split('_'), 14958 weekdaysMin: 'AÌiÌ_Aj_IÌs_á»r_á»b_Ẹt_AÌb'.split('_'), 14959 longDateFormat: { 14960 LT: 'h:mm A', 14961 LTS: 'h:mm:ss A', 14962 L: 'DD/MM/YYYY', 14963 LL: 'D MMMM YYYY', 14964 LLL: 'D MMMM YYYY h:mm A', 14965 LLLL: 'dddd, D MMMM YYYY h:mm A' 14966 }, 14967 calendar: { 14968 sameDay: '[OÌniÌ ni] LT', 14969 nextDay: '[á»Ìla ni] LT', 14970 nextWeek: 'dddd [á»sáº¹Ì toÌn\'bá»] [ni] LT', 14971 lastDay: '[AÌna ni] LT', 14972 lastWeek: 'dddd [á»sáº¹Ì toÌlá»Ì] [ni] LT', 14973 sameElse: 'L' 14974 }, 14975 relativeTime: { 14976 future: 'niÌ %s', 14977 past: '%s ká»jaÌ', 14978 s: 'iÌsẹjuÌ aayaÌ die', 14979 ss: 'aayaÌ %d', 14980 m: 'iÌsẹjuÌ kan', 14981 mm: 'iÌsẹjuÌ %d', 14982 h: 'waÌkati kan', 14983 hh: 'waÌkati %d', 14984 d: 'á»já»Ì kan', 14985 dd: 'á»já»Ì %d', 14986 M: 'osuÌ kan', 14987 MM: 'osuÌ %d', 14988 y: 'á»duÌn kan', 14989 yy: 'á»duÌn %d' 14990 }, 14991 dayOfMonthOrdinalParse: /á»já»Ì\s\d{1,2}/, 14992 ordinal: 'á»já»Ì %d', 14993 week: { 14994 dow: 1, 14995 // Monday is the first day of the week. 14996 doy: 4 // The week that contains Jan 4th is the first week of the year. 14997 14998 } 14999 }); 15000 return yo; 15001}); 15002 15003/***/ }), 15004
vendor: 3,401 bytes, lines 15005-15125
15005/***/ "./node_modules/moment/locale/zh-cn.js": 15006/*!*********************************************!*\ 15007 !*** ./node_modules/moment/locale/zh-cn.js ***! 15008 \*********************************************/ 15009/*! no static exports found */ 15010/***/ (function(module, exports, __webpack_require__) { 15011 15012//! moment.js locale configuration 15013; 15014 15015(function (global, factory) { 15016 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 15017})(this, function (moment) { 15018 'use strict'; 15019 15020 var zhCn = moment.defineLocale('zh-cn', { 15021 months: '䏿_äºæ_䏿_åæ_äºæ_å æ_䏿_å «æ_乿_åæ_å䏿_åäºæ'.split('_'), 15022 monthsShort: '1æ_2æ_3æ_4æ_5æ_6æ_7æ_8æ_9æ_10æ_11æ_12æ'.split('_'), 15023 weekdays: 'æææ¥_ææä¸_ææäº_ææä¸_ææå_ææäº_ææå '.split('_'), 15024 weekdaysShort: '卿¥_å¨ä¸_å¨äº_å¨ä¸_å¨å_å¨äº_å¨å '.split('_'), 15025 weekdaysMin: 'æ¥_ä¸_äº_ä¸_å_äº_å '.split('_'), 15026 longDateFormat: { 15027 LT: 'HH:mm', 15028 LTS: 'HH:mm:ss', 15029 L: 'YYYY/MM/DD', 15030 LL: 'YYYYå¹´MæDæ¥', 15031 LLL: 'YYYYå¹´MæDæ¥Ahç¹mmå', 15032 LLLL: 'YYYYå¹´MæDæ¥ddddAhç¹mmå', 15033 l: 'YYYY/M/D', 15034 ll: 'YYYYå¹´MæDæ¥', 15035 lll: 'YYYYå¹´MæDæ¥ HH:mm', 15036 llll: 'YYYYå¹´MæDæ¥dddd HH:mm' 15037 }, 15038 meridiemParse: /忍|æ©ä¸|ä¸å|ä¸å|ä¸å|æä¸/, 15039 meridiemHour: function (hour, meridiem) { 15040 if (hour === 12) { 15041 hour = 0; 15042 } 15043 15044 if (meridiem === '忍' || meridiem === 'æ©ä¸' || meridiem === 'ä¸å') { 15045 return hour; 15046 } else if (meridiem === 'ä¸å' || meridiem === 'æä¸') { 15047 return hour + 12; 15048 } else { 15049 // 'ä¸å' 15050 return hour >= 11 ? hour : hour + 12; 15051 } 15052 }, 15053 meridiem: function (hour, minute, isLower) { 15054 var hm = hour * 100 + minute; 15055 15056 if (hm < 600) { 15057 return '忍'; 15058 } else if (hm < 900) { 15059 return 'æ©ä¸'; 15060 } else if (hm < 1130) { 15061 return 'ä¸å'; 15062 } else if (hm < 1230) { 15063 return 'ä¸å'; 15064 } else if (hm < 1800) { 15065 return 'ä¸å'; 15066 } else { 15067 return 'æä¸'; 15068 } 15069 }, 15070 calendar: { 15071 sameDay: '[ä»å¤©]LT', 15072 nextDay: '[æå¤©]LT', 15073 nextWeek: '[ä¸]ddddLT', 15074 lastDay: '[æ¨å¤©]LT', 15075 lastWeek: '[ä¸]ddddLT', 15076 sameElse: 'L' 15077 }, 15078 dayOfMonthOrdinalParse: /\d{1,2}(æ¥|æ|å¨)/, 15079 ordinal: function (number, period) { 15080 switch (period) { 15081 case 'd': 15082 case 'D': 15083 case 'DDD': 15084 return number + 'æ¥'; 15085 15086 case 'M': 15087 return number + 'æ'; 15088 15089 case 'w': 15090 case 'W': 15091 return number + 'å¨'; 15092 15093 default: 15094 return number; 15095 } 15096 }, 15097 relativeTime: { 15098 future: '%så ', 15099 past: '%så', 15100 s: 'å ç§', 15101 ss: '%d ç§', 15102 m: '1 åé', 15103 mm: '%d åé', 15104 h: '1 å°æ¶', 15105 hh: '%d å°æ¶', 15106 d: '1 天', 15107 dd: '%d 天', 15108 M: '1 个æ', 15109 MM: '%d 个æ', 15110 y: '1 å¹´', 15111 yy: '%d å¹´' 15112 }, 15113 week: { 15114 // GB/T 7408-1994ãæ°æ®å åäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ¥æåæ¶é´è¡¨ç¤ºæ³ãä¸ISO 8601:1988çæ 15115 dow: 1, 15116 // Monday is the first day of the week. 15117 doy: 4 // The week that contains Jan 4th is the first week of the year. 15118 15119 } 15120 }); 15121 return zhCn; 15122}); 15123 15124/***/ }), 15125
vendor: 3,126 bytes, lines 15126-15238
15126/***/ "./node_modules/moment/locale/zh-hk.js": 15127/*!*********************************************!*\ 15128 !*** ./node_modules/moment/locale/zh-hk.js ***! 15129 \*********************************************/ 15130/*! no static exports found */ 15131/***/ (function(module, exports, __webpack_require__) { 15132 15133//! moment.js locale configuration 15134; 15135 15136(function (global, factory) { 15137 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 15138})(this, function (moment) { 15139 'use strict'; 15140 15141 var zhHk = moment.defineLocale('zh-hk', { 15142 months: '䏿_äºæ_䏿_åæ_äºæ_å æ_䏿_å «æ_乿_åæ_å䏿_åäºæ'.split('_'), 15143 monthsShort: '1æ_2æ_3æ_4æ_5æ_6æ_7æ_8æ_9æ_10æ_11æ_12æ'.split('_'), 15144 weekdays: 'æææ¥_ææä¸_ææäº_ææä¸_ææå_ææäº_ææå '.split('_'), 15145 weekdaysShort: '鱿¥_é±ä¸_é±äº_é±ä¸_é±å_é±äº_é±å '.split('_'), 15146 weekdaysMin: 'æ¥_ä¸_äº_ä¸_å_äº_å '.split('_'), 15147 longDateFormat: { 15148 LT: 'HH:mm', 15149 LTS: 'HH:mm:ss', 15150 L: 'YYYY/MM/DD', 15151 LL: 'YYYYå¹´MæDæ¥', 15152 LLL: 'YYYYå¹´MæDæ¥ HH:mm', 15153 LLLL: 'YYYYå¹´MæDæ¥dddd HH:mm', 15154 l: 'YYYY/M/D', 15155 ll: 'YYYYå¹´MæDæ¥', 15156 lll: 'YYYYå¹´MæDæ¥ HH:mm', 15157 llll: 'YYYYå¹´MæDæ¥dddd HH:mm' 15158 }, 15159 meridiemParse: /忍|æ©ä¸|ä¸å|ä¸å|ä¸å|æä¸/, 15160 meridiemHour: function (hour, meridiem) { 15161 if (hour === 12) { 15162 hour = 0; 15163 } 15164 15165 if (meridiem === '忍' || meridiem === 'æ©ä¸' || meridiem === 'ä¸å') { 15166 return hour; 15167 } else if (meridiem === 'ä¸å') { 15168 return hour >= 11 ? hour : hour + 12; 15169 } else if (meridiem === 'ä¸å' || meridiem === 'æä¸') { 15170 return hour + 12; 15171 } 15172 }, 15173 meridiem: function (hour, minute, isLower) { 15174 var hm = hour * 100 + minute; 15175 15176 if (hm < 600) { 15177 return '忍'; 15178 } else if (hm < 900) { 15179 return 'æ©ä¸'; 15180 } else if (hm < 1130) { 15181 return 'ä¸å'; 15182 } else if (hm < 1230) { 15183 return 'ä¸å'; 15184 } else if (hm < 1800) { 15185 return 'ä¸å'; 15186 } else { 15187 return 'æä¸'; 15188 } 15189 }, 15190 calendar: { 15191 sameDay: '[ä»å¤©]LT', 15192 nextDay: '[æå¤©]LT', 15193 nextWeek: '[ä¸]ddddLT', 15194 lastDay: '[æ¨å¤©]LT', 15195 lastWeek: '[ä¸]ddddLT', 15196 sameElse: 'L' 15197 }, 15198 dayOfMonthOrdinalParse: /\d{1,2}(æ¥|æ|é±)/, 15199 ordinal: function (number, period) { 15200 switch (period) { 15201 case 'd': 15202 case 'D': 15203 case 'DDD': 15204 return number + 'æ¥'; 15205 15206 case 'M': 15207 return number + 'æ'; 15208 15209 case 'w': 15210 case 'W': 15211 return number + 'é±'; 15212 15213 default: 15214 return number; 15215 } 15216 }, 15217 relativeTime: { 15218 future: '%så §', 15219 past: '%så', 15220 s: 'å¹¾ç§', 15221 ss: '%d ç§', 15222 m: '1 åé', 15223 mm: '%d åé', 15224 h: '1 å°æ', 15225 hh: '%d å°æ', 15226 d: '1 天', 15227 dd: '%d 天', 15228 M: '1 åæ', 15229 MM: '%d åæ', 15230 y: '1 å¹´', 15231 yy: '%d å¹´' 15232 } 15233 }); 15234 return zhHk; 15235}); 15236 15237/***/ }), 15238
vendor: 3,131 bytes, lines 15239-15351
15239/***/ "./node_modules/moment/locale/zh-tw.js": 15240/*!*********************************************!*\ 15241 !*** ./node_modules/moment/locale/zh-tw.js ***! 15242 \*********************************************/ 15243/*! no static exports found */ 15244/***/ (function(module, exports, __webpack_require__) { 15245 15246//! moment.js locale configuration 15247; 15248 15249(function (global, factory) { 15250 true ? factory(__webpack_require__(/*! ../moment */ "./node_modules/moment/moment.js")) : undefined; 15251})(this, function (moment) { 15252 'use strict'; 15253 15254 var zhTw = moment.defineLocale('zh-tw', { 15255 months: '䏿_äºæ_䏿_åæ_äºæ_å æ_䏿_å «æ_乿_åæ_å䏿_åäºæ'.split('_'), 15256 monthsShort: '1æ_2æ_3æ_4æ_5æ_6æ_7æ_8æ_9æ_10æ_11æ_12æ'.split('_'), 15257 weekdays: 'æææ¥_ææä¸_ææäº_ææä¸_ææå_ææäº_ææå '.split('_'), 15258 weekdaysShort: '鱿¥_é±ä¸_é±äº_é±ä¸_é±å_é±äº_é±å '.split('_'), 15259 weekdaysMin: 'æ¥_ä¸_äº_ä¸_å_äº_å '.split('_'), 15260 longDateFormat: { 15261 LT: 'HH:mm', 15262 LTS: 'HH:mm:ss', 15263 L: 'YYYY/MM/DD', 15264 LL: 'YYYYå¹´MæDæ¥', 15265 LLL: 'YYYYå¹´MæDæ¥ HH:mm', 15266 LLLL: 'YYYYå¹´MæDæ¥dddd HH:mm', 15267 l: 'YYYY/M/D', 15268 ll: 'YYYYå¹´MæDæ¥', 15269 lll: 'YYYYå¹´MæDæ¥ HH:mm', 15270 llll: 'YYYYå¹´MæDæ¥dddd HH:mm' 15271 }, 15272 meridiemParse: /忍|æ©ä¸|ä¸å|ä¸å|ä¸å|æä¸/, 15273 meridiemHour: function (hour, meridiem) { 15274 if (hour === 12) { 15275 hour = 0; 15276 } 15277 15278 if (meridiem === '忍' || meridiem === 'æ©ä¸' || meridiem === 'ä¸å') { 15279 return hour; 15280 } else if (meridiem === 'ä¸å') { 15281 return hour >= 11 ? hour : hour + 12; 15282 } else if (meridiem === 'ä¸å' || meridiem === 'æä¸') { 15283 return hour + 12; 15284 } 15285 }, 15286 meridiem: function (hour, minute, isLower) { 15287 var hm = hour * 100 + minute; 15288 15289 if (hm < 600) { 15290 return '忍'; 15291 } else if (hm < 900) { 15292 return 'æ©ä¸'; 15293 } else if (hm < 1130) { 15294 return 'ä¸å'; 15295 } else if (hm < 1230) { 15296 return 'ä¸å'; 15297 } else if (hm < 1800) { 15298 return 'ä¸å'; 15299 } else { 15300 return 'æä¸'; 15301 } 15302 }, 15303 calendar: { 15304 sameDay: '[ä»å¤©] LT', 15305 nextDay: '[æå¤©] LT', 15306 nextWeek: '[ä¸]dddd LT', 15307 lastDay: '[æ¨å¤©] LT', 15308 lastWeek: '[ä¸]dddd LT', 15309 sameElse: 'L' 15310 }, 15311 dayOfMonthOrdinalParse: /\d{1,2}(æ¥|æ|é±)/, 15312 ordinal: function (number, period) { 15313 switch (period) { 15314 case 'd': 15315 case 'D': 15316 case 'DDD': 15317 return number + 'æ¥'; 15318 15319 case 'M': 15320 return number + 'æ'; 15321 15322 case 'w': 15323 case 'W': 15324 return number + 'é±'; 15325 15326 default: 15327 return number; 15328 } 15329 }, 15330 relativeTime: { 15331 future: '%så §', 15332 past: '%så', 15333 s: 'å¹¾ç§', 15334 ss: '%d ç§', 15335 m: '1 åé', 15336 mm: '%d åé', 15337 h: '1 å°æ', 15338 hh: '%d å°æ', 15339 d: '1 天', 15340 dd: '%d 天', 15341 M: '1 åæ', 15342 MM: '%d åæ', 15343 y: '1 å¹´', 15344 yy: '%d å¹´' 15345 } 15346 }); 15347 return zhTw; 15348}); 15349 15350/***/ }), 15351
vendor: 131,031 bytes, lines 15352-19945
15352/***/ "./node_modules/moment/moment.js": 15353/*!***************************************!*\ 15354 !*** ./node_modules/moment/moment.js ***! 15355 \***************************************/ 15356/*! no static exports found */ 15357/***/ (function(module, exports, __webpack_require__) { 15358 15359/* WEBPACK VAR INJECTION */(function(module) {var require;//! moment.js 15360; 15361 15362(function (global, factory) { 15363 true ? module.exports = factory() : undefined; 15364})(this, function () { 15365 'use strict'; 15366 15367 var hookCallback; 15368 15369 function hooks() { 15370 return hookCallback.apply(null, arguments); 15371 } // This is done to register the method called with moment() 15372 // without creating circular dependencies. 15373 15374 15375 function setHookCallback(callback) { 15376 hookCallback = callback; 15377 } 15378 15379 function isArray(input) { 15380 return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; 15381 } 15382 15383 function isObject(input) { 15384 // IE8 will treat undefined and null as object if it wasn't for 15385 // input != null 15386 return input != null && Object.prototype.toString.call(input) === '[object Object]'; 15387 } 15388 15389 function isObjectEmpty(obj) { 15390 if (Object.getOwnPropertyNames) { 15391 return Object.getOwnPropertyNames(obj).length === 0; 15392 } else { 15393 var k; 15394 15395 for (k in obj) { 15396 if (obj.hasOwnProperty(k)) { 15397 return false; 15398 } 15399 } 15400 15401 return true; 15402 } 15403 } 15404 15405 function isUndefined(input) { 15406 return input === void 0; 15407 } 15408 15409 function isNumber(input) { 15410 return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]'; 15411 } 15412 15413 function isDate(input) { 15414 return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; 15415 } 15416 15417 function map(arr, fn) { 15418 var res = [], 15419 i; 15420 15421 for (i = 0; i < arr.length; ++i) { 15422 res.push(fn(arr[i], i)); 15423 } 15424 15425 return res; 15426 } 15427 15428 function hasOwnProp(a, b) { 15429 return Object.prototype.hasOwnProperty.call(a, b); 15430 } 15431 15432 function extend(a, b) { 15433 for (var i in b) { 15434 if (hasOwnProp(b, i)) { 15435 a[i] = b[i]; 15436 } 15437 } 15438 15439 if (hasOwnProp(b, 'toString')) { 15440 a.toString = b.toString; 15441 } 15442 15443 if (hasOwnProp(b, 'valueOf')) { 15444 a.valueOf = b.valueOf; 15445 } 15446 15447 return a; 15448 } 15449 15450 function createUTC(input, format, locale, strict) { 15451 return createLocalOrUTC(input, format, locale, strict, true).utc(); 15452 } 15453 15454 function defaultParsingFlags() { 15455 // We need to deep clone this object. 15456 return { 15457 empty: false, 15458 unusedTokens: [], 15459 unusedInput: [], 15460 overflow: -2, 15461 charsLeftOver: 0, 15462 nullInput: false, 15463 invalidMonth: null, 15464 invalidFormat: false, 15465 userInvalidated: false, 15466 iso: false, 15467 parsedDateParts: [], 15468 meridiem: null, 15469 rfc2822: false, 15470 weekdayMismatch: false 15471 }; 15472 } 15473 15474 function getParsingFlags(m) { 15475 if (m._pf == null) { 15476 m._pf = defaultParsingFlags(); 15477 } 15478 15479 return m._pf; 15480 } 15481 15482 var some; 15483 15484 if (Array.prototype.some) { 15485 some = Array.prototype.some; 15486 } else { 15487 some = function (fun) { 15488 var t = Object(this); 15489 var len = t.length >>> 0; 15490 15491 for (var i = 0; i < len; i++) { 15492 if (i in t && fun.call(this, t[i], i, t)) { 15493 return true; 15494 } 15495 } 15496 15497 return false; 15498 }; 15499 } 15500 15501 function isValid(m) { 15502 if (m._isValid == null) { 15503 var flags = getParsingFlags(m); 15504 var parsedParts = some.call(flags.parsedDateParts, function (i) { 15505 return i != null; 15506 }); 15507 var isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts); 15508 15509 if (m._strict) { 15510 isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined; 15511 } 15512 15513 if (Object.isFrozen == null || !Object.isFrozen(m)) { 15514 m._isValid = isNowValid; 15515 } else { 15516 return isNowValid; 15517 } 15518 } 15519 15520 return m._isValid; 15521 } 15522 15523 function createInvalid(flags) { 15524 var m = createUTC(NaN); 15525 15526 if (flags != null) { 15527 extend(getParsingFlags(m), flags); 15528 } else { 15529 getParsingFlags(m).userInvalidated = true; 15530 } 15531 15532 return m; 15533 } // Plugins that add properties should also add the key here (null value), 15534 // so we can properly clone ourselves. 15535 15536 15537 var momentProperties = hooks.momentProperties = []; 15538 15539 function copyConfig(to, from) { 15540 var i, prop, val; 15541 15542 if (!isUndefined(from._isAMomentObject)) { 15543 to._isAMomentObject = from._isAMomentObject; 15544 } 15545 15546 if (!isUndefined(from._i)) { 15547 to._i = from._i; 15548 } 15549 15550 if (!isUndefined(from._f)) { 15551 to._f = from._f; 15552 } 15553 15554 if (!isUndefined(from._l)) { 15555 to._l = from._l; 15556 } 15557 15558 if (!isUndefined(from._strict)) { 15559 to._strict = from._strict; 15560 } 15561 15562 if (!isUndefined(from._tzm)) { 15563 to._tzm = from._tzm; 15564 } 15565 15566 if (!isUndefined(from._isUTC)) { 15567 to._isUTC = from._isUTC; 15568 } 15569 15570 if (!isUndefined(from._offset)) { 15571 to._offset = from._offset; 15572 } 15573 15574 if (!isUndefined(from._pf)) { 15575 to._pf = getParsingFlags(from); 15576 } 15577 15578 if (!isUndefined(from._locale)) { 15579 to._locale = from._locale; 15580 } 15581 15582 if (momentProperties.length > 0) { 15583 for (i = 0; i < momentProperties.length; i++) { 15584 prop = momentProperties[i]; 15585 val = from[prop]; 15586 15587 if (!isUndefined(val)) { 15588 to[prop] = val; 15589 } 15590 } 15591 } 15592 15593 return to; 15594 } 15595 15596 var updateInProgress = false; // Moment prototype object 15597 15598 function Moment(config) { 15599 copyConfig(this, config); 15600 this._d = new Date(config._d != null ? config._d.getTime() : NaN); 15601 15602 if (!this.isValid()) { 15603 this._d = new Date(NaN); 15604 } // Prevent infinite loop in case updateOffset creates new moment 15605 // objects. 15606 15607 15608 if (updateInProgress === false) { 15609 updateInProgress = true; 15610 hooks.updateOffset(this); 15611 updateInProgress = false; 15612 } 15613 } 15614 15615 function isMoment(obj) { 15616 return obj instanceof Moment || obj != null && obj._isAMomentObject != null; 15617 } 15618 15619 function absFloor(number) { 15620 if (number < 0) { 15621 // -0 -> 0 15622 return Math.ceil(number) || 0; 15623 } else { 15624 return Math.floor(number); 15625 } 15626 } 15627 15628 function toInt(argumentForCoercion) { 15629 var coercedNumber = +argumentForCoercion, 15630 value = 0; 15631 15632 if (coercedNumber !== 0 && isFinite(coercedNumber)) { 15633 value = absFloor(coercedNumber); 15634 } 15635 15636 return value; 15637 } // compare two arrays, return the number of differences 15638 15639 15640 function compareArrays(array1, array2, dontConvert) { 15641 var len = Math.min(array1.length, array2.length), 15642 lengthDiff = Math.abs(array1.length - array2.length), 15643 diffs = 0, 15644 i; 15645 15646 for (i = 0; i < len; i++) { 15647 if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) { 15648 diffs++; 15649 } 15650 } 15651 15652 return diffs + lengthDiff; 15653 } 15654 15655 function warn(msg) { 15656 if (hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) { 15657 console.warn('Deprecation warning: ' + msg); 15658 } 15659 } 15660 15661 function deprecate(msg, fn) { 15662 var firstTime = true; 15663 return extend(function () { 15664 if (hooks.deprecationHandler != null) { 15665 hooks.deprecationHandler(null, msg); 15666 } 15667 15668 if (firstTime) { 15669 var args = []; 15670 var arg; 15671 15672 for (var i = 0; i < arguments.length; i++) { 15673 arg = ''; 15674 15675 if (typeof arguments[i] === 'object') { 15676 arg += '\n[' + i + '] '; 15677 15678 for (var key in arguments[0]) { 15679 arg += key + ': ' + arguments[0][key] + ', '; 15680 } 15681 15682 arg = arg.slice(0, -2); // Remove trailing comma and space 15683 } else { 15684 arg = arguments[i]; 15685 } 15686 15687 args.push(arg); 15688 } 15689 15690 warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + new Error().stack); 15691 firstTime = false; 15692 } 15693 15694 return fn.apply(this, arguments); 15695 }, fn); 15696 } 15697 15698 var deprecations = {}; 15699 15700 function deprecateSimple(name, msg) { 15701 if (hooks.deprecationHandler != null) { 15702 hooks.deprecationHandler(name, msg); 15703 } 15704 15705 if (!deprecations[name]) { 15706 warn(msg); 15707 deprecations[name] = true; 15708 } 15709 } 15710 15711 hooks.suppressDeprecationWarnings = false; 15712 hooks.deprecationHandler = null; 15713 15714 function isFunction(input) { 15715 return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; 15716 } 15717 15718 function set(config) { 15719 var prop, i; 15720 15721 for (i in config) { 15722 prop = config[i]; 15723 15724 if (isFunction(prop)) { 15725 this[i] = prop; 15726 } else { 15727 this['_' + i] = prop; 15728 } 15729 } 15730 15731 this._config = config; // Lenient ordinal parsing accepts just a number in addition to 15732 // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. 15733 // TODO: Remove "ordinalParse" fallback in next major release. 15734 15735 this._dayOfMonthOrdinalParseLenient = new RegExp((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + '|' + /\d{1,2}/.source); 15736 } 15737 15738 function mergeConfigs(parentConfig, childConfig) { 15739 var res = extend({}, parentConfig), 15740 prop; 15741 15742 for (prop in childConfig) { 15743 if (hasOwnProp(childConfig, prop)) { 15744 if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { 15745 res[prop] = {}; 15746 extend(res[prop], parentConfig[prop]); 15747 extend(res[prop], childConfig[prop]); 15748 } else if (childConfig[prop] != null) { 15749 res[prop] = childConfig[prop]; 15750 } else { 15751 delete res[prop]; 15752 } 15753 } 15754 } 15755 15756 for (prop in parentConfig) { 15757 if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) { 15758 // make sure changes to properties don't modify parent config 15759 res[prop] = extend({}, res[prop]); 15760 } 15761 } 15762 15763 return res; 15764 } 15765 15766 function Locale(config) { 15767 if (config != null) { 15768 this.set(config); 15769 } 15770 } 15771 15772 var keys; 15773 15774 if (Object.keys) { 15775 keys = Object.keys; 15776 } else { 15777 keys = function (obj) { 15778 var i, 15779 res = []; 15780 15781 for (i in obj) { 15782 if (hasOwnProp(obj, i)) { 15783 res.push(i); 15784 } 15785 } 15786 15787 return res; 15788 }; 15789 } 15790 15791 var defaultCalendar = { 15792 sameDay: '[Today at] LT', 15793 nextDay: '[Tomorrow at] LT', 15794 nextWeek: 'dddd [at] LT', 15795 lastDay: '[Yesterday at] LT', 15796 lastWeek: '[Last] dddd [at] LT', 15797 sameElse: 'L' 15798 }; 15799 15800 function calendar(key, mom, now) { 15801 var output = this._calendar[key] || this._calendar['sameElse']; 15802 return isFunction(output) ? output.call(mom, now) : output; 15803 } 15804 15805 var defaultLongDateFormat = { 15806 LTS: 'h:mm:ss A', 15807 LT: 'h:mm A', 15808 L: 'MM/DD/YYYY', 15809 LL: 'MMMM D, YYYY', 15810 LLL: 'MMMM D, YYYY h:mm A', 15811 LLLL: 'dddd, MMMM D, YYYY h:mm A' 15812 }; 15813 15814 function longDateFormat(key) { 15815 var format = this._longDateFormat[key], 15816 formatUpper = this._longDateFormat[key.toUpperCase()]; 15817 15818 if (format || !formatUpper) { 15819 return format; 15820 } 15821 15822 this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { 15823 return val.slice(1); 15824 }); 15825 return this._longDateFormat[key]; 15826 } 15827 15828 var defaultInvalidDate = 'Invalid date'; 15829 15830 function invalidDate() { 15831 return this._invalidDate; 15832 } 15833 15834 var defaultOrdinal = '%d'; 15835 var defaultDayOfMonthOrdinalParse = /\d{1,2}/; 15836 15837 function ordinal(number) { 15838 return this._ordinal.replace('%d', number); 15839 } 15840 15841 var defaultRelativeTime = { 15842 future: 'in %s', 15843 past: '%s ago', 15844 s: 'a few seconds', 15845 ss: '%d seconds', 15846 m: 'a minute', 15847 mm: '%d minutes', 15848 h: 'an hour', 15849 hh: '%d hours', 15850 d: 'a day', 15851 dd: '%d days', 15852 M: 'a month', 15853 MM: '%d months', 15854 y: 'a year', 15855 yy: '%d years' 15856 }; 15857 15858 function relativeTime(number, withoutSuffix, string, isFuture) { 15859 var output = this._relativeTime[string]; 15860 return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number); 15861 } 15862 15863 function pastFuture(diff, output) { 15864 var format = this._relativeTime[diff > 0 ? 'future' : 'past']; 15865 return isFunction(format) ? format(output) : format.replace(/%s/i, output); 15866 } 15867 15868 var aliases = {}; 15869 15870 function addUnitAlias(unit, shorthand) { 15871 var lowerCase = unit.toLowerCase(); 15872 aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; 15873 } 15874 15875 function normalizeUnits(units) { 15876 return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; 15877 } 15878 15879 function normalizeObjectUnits(inputObject) { 15880 var normalizedInput = {}, 15881 normalizedProp, 15882 prop; 15883 15884 for (prop in inputObject) { 15885 if (hasOwnProp(inputObject, prop)) { 15886 normalizedProp = normalizeUnits(prop); 15887 15888 if (normalizedProp) { 15889 normalizedInput[normalizedProp] = inputObject[prop]; 15890 } 15891 } 15892 } 15893 15894 return normalizedInput; 15895 } 15896 15897 var priorities = {}; 15898 15899 function addUnitPriority(unit, priority) { 15900 priorities[unit] = priority; 15901 } 15902 15903 function getPrioritizedUnits(unitsObj) { 15904 var units = []; 15905 15906 for (var u in unitsObj) { 15907 units.push({ 15908 unit: u, 15909 priority: priorities[u] 15910 }); 15911 } 15912 15913 units.sort(function (a, b) { 15914 return a.priority - b.priority; 15915 }); 15916 return units; 15917 } 15918 15919 function zeroFill(number, targetLength, forceSign) { 15920 var absNumber = '' + Math.abs(number), 15921 zerosToFill = targetLength - absNumber.length, 15922 sign = number >= 0; 15923 return (sign ? forceSign ? '+' : '' : '-') + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; 15924 } 15925 15926 var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; 15927 var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; 15928 var formatFunctions = {}; 15929 var formatTokenFunctions = {}; // token: 'M' 15930 // padded: ['MM', 2] 15931 // ordinal: 'Mo' 15932 // callback: function () { this.month() + 1 } 15933 15934 function addFormatToken(token, padded, ordinal, callback) { 15935 var func = callback; 15936 15937 if (typeof callback === 'string') { 15938 func = function () { 15939 return this[callback](); 15940 }; 15941 } 15942 15943 if (token) { 15944 formatTokenFunctions[token] = func; 15945 } 15946 15947 if (padded) { 15948 formatTokenFunctions[padded[0]] = function () { 15949 return zeroFill(func.apply(this, arguments), padded[1], padded[2]); 15950 }; 15951 } 15952 15953 if (ordinal) { 15954 formatTokenFunctions[ordinal] = function () { 15955 return this.localeData().ordinal(func.apply(this, arguments), token); 15956 }; 15957 } 15958 } 15959 15960 function removeFormattingTokens(input) { 15961 if (input.match(/\[[\s\S]/)) { 15962 return input.replace(/^\[|\]$/g, ''); 15963 } 15964 15965 return input.replace(/\\/g, ''); 15966 } 15967 15968 function makeFormatFunction(format) { 15969 var array = format.match(formattingTokens), 15970 i, 15971 length; 15972 15973 for (i = 0, length = array.length; i < length; i++) { 15974 if (formatTokenFunctions[array[i]]) { 15975 array[i] = formatTokenFunctions[array[i]]; 15976 } else { 15977 array[i] = removeFormattingTokens(array[i]); 15978 } 15979 } 15980 15981 return function (mom) { 15982 var output = '', 15983 i; 15984 15985 for (i = 0; i < length; i++) { 15986 output += isFunction(array[i]) ? array[i].call(mom, format) : array[i]; 15987 } 15988 15989 return output; 15990 }; 15991 } // format date using native date object 15992 15993 15994 function formatMoment(m, format) { 15995 if (!m.isValid()) { 15996 return m.localeData().invalidDate(); 15997 } 15998 15999 format = expandFormat(format, m.localeData()); 16000 formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); 16001 return formatFunctions[format](m); 16002 } 16003 16004 function expandFormat(format, locale) { 16005 var i = 5; 16006 16007 function replaceLongDateFormatTokens(input) { 16008 return locale.longDateFormat(input) || input; 16009 } 16010 16011 localFormattingTokens.lastIndex = 0; 16012 16013 while (i >= 0 && localFormattingTokens.test(format)) { 16014 format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); 16015 localFormattingTokens.lastIndex = 0; 16016 i -= 1; 16017 } 16018 16019 return format; 16020 } 16021 16022 var match1 = /\d/; // 0 - 9 16023 16024 var match2 = /\d\d/; // 00 - 99 16025 16026 var match3 = /\d{3}/; // 000 - 999 16027 16028 var match4 = /\d{4}/; // 0000 - 9999 16029 16030 var match6 = /[+-]?\d{6}/; // -999999 - 999999 16031 16032 var match1to2 = /\d\d?/; // 0 - 99 16033 16034 var match3to4 = /\d\d\d\d?/; // 999 - 9999 16035 16036 var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 16037 16038 var match1to3 = /\d{1,3}/; // 0 - 999 16039 16040 var match1to4 = /\d{1,4}/; // 0 - 9999 16041 16042 var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 16043 16044 var matchUnsigned = /\d+/; // 0 - inf 16045 16046 var matchSigned = /[+-]?\d+/; // -inf - inf 16047 16048 var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z 16049 16050 var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z 16051 16052 var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 16053 // any word (or two) characters or numbers including two/three word month in arabic. 16054 // includes scottish gaelic two word and hyphenated months 16055 16056 var matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i; 16057 var regexes = {}; 16058 16059 function addRegexToken(token, regex, strictRegex) { 16060 regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { 16061 return isStrict && strictRegex ? strictRegex : regex; 16062 }; 16063 } 16064 16065 function getParseRegexForToken(token, config) { 16066 if (!hasOwnProp(regexes, token)) { 16067 return new RegExp(unescapeFormat(token)); 16068 } 16069 16070 return regexes[token](config._strict, config._locale); 16071 } // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript 16072 16073 16074 function unescapeFormat(s) { 16075 return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { 16076 return p1 || p2 || p3 || p4; 16077 })); 16078 } 16079 16080 function regexEscape(s) { 16081 return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 16082 } 16083 16084 var tokens = {}; 16085 16086 function addParseToken(token, callback) { 16087 var i, 16088 func = callback; 16089 16090 if (typeof token === 'string') { 16091 token = [token]; 16092 } 16093 16094 if (isNumber(callback)) { 16095 func = function (input, array) { 16096 array[callback] = toInt(input); 16097 }; 16098 } 16099 16100 for (i = 0; i < token.length; i++) { 16101 tokens[token[i]] = func; 16102 } 16103 } 16104 16105 function addWeekParseToken(token, callback) { 16106 addParseToken(token, function (input, array, config, token) { 16107 config._w = config._w || {}; 16108 callback(input, config._w, config, token); 16109 }); 16110 } 16111 16112 function addTimeToArrayFromToken(token, input, config) { 16113 if (input != null && hasOwnProp(tokens, token)) { 16114 tokens[token](input, config._a, config, token); 16115 } 16116 } 16117 16118 var YEAR = 0; 16119 var MONTH = 1; 16120 var DATE = 2; 16121 var HOUR = 3; 16122 var MINUTE = 4; 16123 var SECOND = 5; 16124 var MILLISECOND = 6; 16125 var WEEK = 7; 16126 var WEEKDAY = 8; // FORMATTING 16127 16128 addFormatToken('Y', 0, 0, function () { 16129 var y = this.year(); 16130 return y <= 9999 ? '' + y : '+' + y; 16131 }); 16132 addFormatToken(0, ['YY', 2], 0, function () { 16133 return this.year() % 100; 16134 }); 16135 addFormatToken(0, ['YYYY', 4], 0, 'year'); 16136 addFormatToken(0, ['YYYYY', 5], 0, 'year'); 16137 addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); // ALIASES 16138 16139 addUnitAlias('year', 'y'); // PRIORITIES 16140 16141 addUnitPriority('year', 1); // PARSING 16142 16143 addRegexToken('Y', matchSigned); 16144 addRegexToken('YY', match1to2, match2); 16145 addRegexToken('YYYY', match1to4, match4); 16146 addRegexToken('YYYYY', match1to6, match6); 16147 addRegexToken('YYYYYY', match1to6, match6); 16148 addParseToken(['YYYYY', 'YYYYYY'], YEAR); 16149 addParseToken('YYYY', function (input, array) { 16150 array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); 16151 }); 16152 addParseToken('YY', function (input, array) { 16153 array[YEAR] = hooks.parseTwoDigitYear(input); 16154 }); 16155 addParseToken('Y', function (input, array) { 16156 array[YEAR] = parseInt(input, 10); 16157 }); // HELPERS 16158 16159 function daysInYear(year) { 16160 return isLeapYear(year) ? 366 : 365; 16161 } 16162 16163 function isLeapYear(year) { 16164 return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; 16165 } // HOOKS 16166 16167 16168 hooks.parseTwoDigitYear = function (input) { 16169 return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); 16170 }; // MOMENTS 16171 16172 16173 var getSetYear = makeGetSet('FullYear', true); 16174 16175 function getIsLeapYear() { 16176 return isLeapYear(this.year()); 16177 } 16178 16179 function makeGetSet(unit, keepTime) { 16180 return function (value) { 16181 if (value != null) { 16182 set$1(this, unit, value); 16183 hooks.updateOffset(this, keepTime); 16184 return this; 16185 } else { 16186 return get(this, unit); 16187 } 16188 }; 16189 } 16190 16191 function get(mom, unit) { 16192 return mom.isValid() ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; 16193 } 16194 16195 function set$1(mom, unit, value) { 16196 if (mom.isValid() && !isNaN(value)) { 16197 if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) { 16198 mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month())); 16199 } else { 16200 mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); 16201 } 16202 } 16203 } // MOMENTS 16204 16205 16206 function stringGet(units) { 16207 units = normalizeUnits(units); 16208 16209 if (isFunction(this[units])) { 16210 return this[units](); 16211 } 16212 16213 return this; 16214 } 16215 16216 function stringSet(units, value) { 16217 if (typeof units === 'object') { 16218 units = normalizeObjectUnits(units); 16219 var prioritized = getPrioritizedUnits(units); 16220 16221 for (var i = 0; i < prioritized.length; i++) { 16222 this[prioritized[i].unit](units[prioritized[i].unit]); 16223 } 16224 } else { 16225 units = normalizeUnits(units); 16226 16227 if (isFunction(this[units])) { 16228 return this[units](value); 16229 } 16230 } 16231 16232 return this; 16233 } 16234 16235 function mod(n, x) { 16236 return (n % x + x) % x; 16237 } 16238 16239 var indexOf; 16240 16241 if (Array.prototype.indexOf) { 16242 indexOf = Array.prototype.indexOf; 16243 } else { 16244 indexOf = function (o) { 16245 // I know 16246 var i; 16247 16248 for (i = 0; i < this.length; ++i) { 16249 if (this[i] === o) { 16250 return i; 16251 } 16252 } 16253 16254 return -1; 16255 }; 16256 } 16257 16258 function daysInMonth(year, month) { 16259 if (isNaN(year) || isNaN(month)) { 16260 return NaN; 16261 } 16262 16263 var modMonth = mod(month, 12); 16264 year += (month - modMonth) / 12; 16265 return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2; 16266 } // FORMATTING 16267 16268 16269 addFormatToken('M', ['MM', 2], 'Mo', function () { 16270 return this.month() + 1; 16271 }); 16272 addFormatToken('MMM', 0, 0, function (format) { 16273 return this.localeData().monthsShort(this, format); 16274 }); 16275 addFormatToken('MMMM', 0, 0, function (format) { 16276 return this.localeData().months(this, format); 16277 }); // ALIASES 16278 16279 addUnitAlias('month', 'M'); // PRIORITY 16280 16281 addUnitPriority('month', 8); // PARSING 16282 16283 addRegexToken('M', match1to2); 16284 addRegexToken('MM', match1to2, match2); 16285 addRegexToken('MMM', function (isStrict, locale) { 16286 return locale.monthsShortRegex(isStrict); 16287 }); 16288 addRegexToken('MMMM', function (isStrict, locale) { 16289 return locale.monthsRegex(isStrict); 16290 }); 16291 addParseToken(['M', 'MM'], function (input, array) { 16292 array[MONTH] = toInt(input) - 1; 16293 }); 16294 addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { 16295 var month = config._locale.monthsParse(input, token, config._strict); // if we didn't find a month name, mark the date as invalid. 16296 16297 16298 if (month != null) { 16299 array[MONTH] = month; 16300 } else { 16301 getParsingFlags(config).invalidMonth = input; 16302 } 16303 }); // LOCALES 16304 16305 var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/; 16306 var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); 16307 16308 function localeMonths(m, format) { 16309 if (!m) { 16310 return isArray(this._months) ? this._months : this._months['standalone']; 16311 } 16312 16313 return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()]; 16314 } 16315 16316 var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); 16317 16318 function localeMonthsShort(m, format) { 16319 if (!m) { 16320 return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort['standalone']; 16321 } 16322 16323 return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; 16324 } 16325 16326 function handleStrictParse(monthName, format, strict) { 16327 var i, 16328 ii, 16329 mom, 16330 llc = monthName.toLocaleLowerCase(); 16331 16332 if (!this._monthsParse) { 16333 // this is not used 16334 this._monthsParse = []; 16335 this._longMonthsParse = []; 16336 this._shortMonthsParse = []; 16337 16338 for (i = 0; i < 12; ++i) { 16339 mom = createUTC([2000, i]); 16340 this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase(); 16341 this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); 16342 } 16343 } 16344 16345 if (strict) { 16346 if (format === 'MMM') { 16347 ii = indexOf.call(this._shortMonthsParse, llc); 16348 return ii !== -1 ? ii : null; 16349 } else { 16350 ii = indexOf.call(this._longMonthsParse, llc); 16351 return ii !== -1 ? ii : null; 16352 } 16353 } else { 16354 if (format === 'MMM') { 16355 ii = indexOf.call(this._shortMonthsParse, llc); 16356 16357 if (ii !== -1) { 16358 return ii; 16359 } 16360 16361 ii = indexOf.call(this._longMonthsParse, llc); 16362 return ii !== -1 ? ii : null; 16363 } else { 16364 ii = indexOf.call(this._longMonthsParse, llc); 16365 16366 if (ii !== -1) { 16367 return ii; 16368 } 16369 16370 ii = indexOf.call(this._shortMonthsParse, llc); 16371 return ii !== -1 ? ii : null; 16372 } 16373 } 16374 } 16375 16376 function localeMonthsParse(monthName, format, strict) { 16377 var i, mom, regex; 16378 16379 if (this._monthsParseExact) { 16380 return handleStrictParse.call(this, monthName, format, strict); 16381 } 16382 16383 if (!this._monthsParse) { 16384 this._monthsParse = []; 16385 this._longMonthsParse = []; 16386 this._shortMonthsParse = []; 16387 } // TODO: add sorting 16388 // Sorting makes sure if one month (or abbr) is a prefix of another 16389 // see sorting in computeMonthsParse 16390 16391 16392 for (i = 0; i < 12; i++) { 16393 // make the regex if we don't have it already 16394 mom = createUTC([2000, i]); 16395 16396 if (strict && !this._longMonthsParse[i]) { 16397 this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); 16398 this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); 16399 } 16400 16401 if (!strict && !this._monthsParse[i]) { 16402 regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); 16403 this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); 16404 } // test the regex 16405 16406 16407 if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { 16408 return i; 16409 } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { 16410 return i; 16411 } else if (!strict && this._monthsParse[i].test(monthName)) { 16412 return i; 16413 } 16414 } 16415 } // MOMENTS 16416 16417 16418 function setMonth(mom, value) { 16419 var dayOfMonth; 16420 16421 if (!mom.isValid()) { 16422 // No op 16423 return mom; 16424 } 16425 16426 if (typeof value === 'string') { 16427 if (/^\d+$/.test(value)) { 16428 value = toInt(value); 16429 } else { 16430 value = mom.localeData().monthsParse(value); // TODO: Another silent failure? 16431 16432 if (!isNumber(value)) { 16433 return mom; 16434 } 16435 } 16436 } 16437 16438 dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); 16439 16440 mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); 16441 16442 return mom; 16443 } 16444 16445 function getSetMonth(value) { 16446 if (value != null) { 16447 setMonth(this, value); 16448 hooks.updateOffset(this, true); 16449 return this; 16450 } else { 16451 return get(this, 'Month'); 16452 } 16453 } 16454 16455 function getDaysInMonth() { 16456 return daysInMonth(this.year(), this.month()); 16457 } 16458 16459 var defaultMonthsShortRegex = matchWord; 16460 16461 function monthsShortRegex(isStrict) { 16462 if (this._monthsParseExact) { 16463 if (!hasOwnProp(this, '_monthsRegex')) { 16464 computeMonthsParse.call(this); 16465 } 16466 16467 if (isStrict) { 16468 return this._monthsShortStrictRegex; 16469 } else { 16470 return this._monthsShortRegex; 16471 } 16472 } else { 16473 if (!hasOwnProp(this, '_monthsShortRegex')) { 16474 this._monthsShortRegex = defaultMonthsShortRegex; 16475 } 16476 16477 return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex; 16478 } 16479 } 16480 16481 var defaultMonthsRegex = matchWord; 16482 16483 function monthsRegex(isStrict) { 16484 if (this._monthsParseExact) { 16485 if (!hasOwnProp(this, '_monthsRegex')) { 16486 computeMonthsParse.call(this); 16487 } 16488 16489 if (isStrict) { 16490 return this._monthsStrictRegex; 16491 } else { 16492 return this._monthsRegex; 16493 } 16494 } else { 16495 if (!hasOwnProp(this, '_monthsRegex')) { 16496 this._monthsRegex = defaultMonthsRegex; 16497 } 16498 16499 return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex; 16500 } 16501 } 16502 16503 function computeMonthsParse() { 16504 function cmpLenRev(a, b) { 16505 return b.length - a.length; 16506 } 16507 16508 var shortPieces = [], 16509 longPieces = [], 16510 mixedPieces = [], 16511 i, 16512 mom; 16513 16514 for (i = 0; i < 12; i++) { 16515 // make the regex if we don't have it already 16516 mom = createUTC([2000, i]); 16517 shortPieces.push(this.monthsShort(mom, '')); 16518 longPieces.push(this.months(mom, '')); 16519 mixedPieces.push(this.months(mom, '')); 16520 mixedPieces.push(this.monthsShort(mom, '')); 16521 } // Sorting makes sure if one month (or abbr) is a prefix of another it 16522 // will match the longer piece. 16523 16524 16525 shortPieces.sort(cmpLenRev); 16526 longPieces.sort(cmpLenRev); 16527 mixedPieces.sort(cmpLenRev); 16528 16529 for (i = 0; i < 12; i++) { 16530 shortPieces[i] = regexEscape(shortPieces[i]); 16531 longPieces[i] = regexEscape(longPieces[i]); 16532 } 16533 16534 for (i = 0; i < 24; i++) { 16535 mixedPieces[i] = regexEscape(mixedPieces[i]); 16536 } 16537 16538 this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); 16539 this._monthsShortRegex = this._monthsRegex; 16540 this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); 16541 this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); 16542 } 16543 16544 function createDate(y, m, d, h, M, s, ms) { 16545 // can't just apply() to create a date: 16546 // https://stackoverflow.com/q/181348 16547 var date; // the date constructor remaps years 0-99 to 1900-1999 16548 16549 if (y < 100 && y >= 0) { 16550 // preserve leap years using a full 400 year cycle, then reset 16551 date = new Date(y + 400, m, d, h, M, s, ms); 16552 16553 if (isFinite(date.getFullYear())) { 16554 date.setFullYear(y); 16555 } 16556 } else { 16557 date = new Date(y, m, d, h, M, s, ms); 16558 } 16559 16560 return date; 16561 } 16562 16563 function createUTCDate(y) { 16564 var date; // the Date.UTC function remaps years 0-99 to 1900-1999 16565 16566 if (y < 100 && y >= 0) { 16567 var args = Array.prototype.slice.call(arguments); // preserve leap years using a full 400 year cycle, then reset 16568 16569 args[0] = y + 400; 16570 date = new Date(Date.UTC.apply(null, args)); 16571 16572 if (isFinite(date.getUTCFullYear())) { 16573 date.setUTCFullYear(y); 16574 } 16575 } else { 16576 date = new Date(Date.UTC.apply(null, arguments)); 16577 } 16578 16579 return date; 16580 } // start-of-first-week - start-of-year 16581 16582 16583 function firstWeekOffset(year, dow, doy) { 16584 var // first-week day -- which january is always in the first week (4 for iso, 1 for other) 16585 fwd = 7 + dow - doy, 16586 // first-week day local weekday -- which local weekday is fwd 16587 fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; 16588 return -fwdlw + fwd - 1; 16589 } // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday 16590 16591 16592 function dayOfYearFromWeeks(year, week, weekday, dow, doy) { 16593 var localWeekday = (7 + weekday - dow) % 7, 16594 weekOffset = firstWeekOffset(year, dow, doy), 16595 dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, 16596 resYear, 16597 resDayOfYear; 16598 16599 if (dayOfYear <= 0) { 16600 resYear = year - 1; 16601 resDayOfYear = daysInYear(resYear) + dayOfYear; 16602 } else if (dayOfYear > daysInYear(year)) { 16603 resYear = year + 1; 16604 resDayOfYear = dayOfYear - daysInYear(year); 16605 } else { 16606 resYear = year; 16607 resDayOfYear = dayOfYear; 16608 } 16609 16610 return { 16611 year: resYear, 16612 dayOfYear: resDayOfYear 16613 }; 16614 } 16615 16616 function weekOfYear(mom, dow, doy) { 16617 var weekOffset = firstWeekOffset(mom.year(), dow, doy), 16618 week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, 16619 resWeek, 16620 resYear; 16621 16622 if (week < 1) { 16623 resYear = mom.year() - 1; 16624 resWeek = week + weeksInYear(resYear, dow, doy); 16625 } else if (week > weeksInYear(mom.year(), dow, doy)) { 16626 resWeek = week - weeksInYear(mom.year(), dow, doy); 16627 resYear = mom.year() + 1; 16628 } else { 16629 resYear = mom.year(); 16630 resWeek = week; 16631 } 16632 16633 return { 16634 week: resWeek, 16635 year: resYear 16636 }; 16637 } 16638 16639 function weeksInYear(year, dow, doy) { 16640 var weekOffset = firstWeekOffset(year, dow, doy), 16641 weekOffsetNext = firstWeekOffset(year + 1, dow, doy); 16642 return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; 16643 } // FORMATTING 16644 16645 16646 addFormatToken('w', ['ww', 2], 'wo', 'week'); 16647 addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); // ALIASES 16648 16649 addUnitAlias('week', 'w'); 16650 addUnitAlias('isoWeek', 'W'); // PRIORITIES 16651 16652 addUnitPriority('week', 5); 16653 addUnitPriority('isoWeek', 5); // PARSING 16654 16655 addRegexToken('w', match1to2); 16656 addRegexToken('ww', match1to2, match2); 16657 addRegexToken('W', match1to2); 16658 addRegexToken('WW', match1to2, match2); 16659 addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { 16660 week[token.substr(0, 1)] = toInt(input); 16661 }); // HELPERS 16662 // LOCALES 16663 16664 function localeWeek(mom) { 16665 return weekOfYear(mom, this._week.dow, this._week.doy).week; 16666 } 16667 16668 var defaultLocaleWeek = { 16669 dow: 0, 16670 // Sunday is the first day of the week. 16671 doy: 6 // The week that contains Jan 6th is the first week of the year. 16672 16673 }; 16674 16675 function localeFirstDayOfWeek() { 16676 return this._week.dow; 16677 } 16678 16679 function localeFirstDayOfYear() { 16680 return this._week.doy; 16681 } // MOMENTS 16682 16683 16684 function getSetWeek(input) { 16685 var week = this.localeData().week(this); 16686 return input == null ? week : this.add((input - week) * 7, 'd'); 16687 } 16688 16689 function getSetISOWeek(input) { 16690 var week = weekOfYear(this, 1, 4).week; 16691 return input == null ? week : this.add((input - week) * 7, 'd'); 16692 } // FORMATTING 16693 16694 16695 addFormatToken('d', 0, 'do', 'day'); 16696 addFormatToken('dd', 0, 0, function (format) { 16697 return this.localeData().weekdaysMin(this, format); 16698 }); 16699 addFormatToken('ddd', 0, 0, function (format) { 16700 return this.localeData().weekdaysShort(this, format); 16701 }); 16702 addFormatToken('dddd', 0, 0, function (format) { 16703 return this.localeData().weekdays(this, format); 16704 }); 16705 addFormatToken('e', 0, 0, 'weekday'); 16706 addFormatToken('E', 0, 0, 'isoWeekday'); // ALIASES 16707 16708 addUnitAlias('day', 'd'); 16709 addUnitAlias('weekday', 'e'); 16710 addUnitAlias('isoWeekday', 'E'); // PRIORITY 16711 16712 addUnitPriority('day', 11); 16713 addUnitPriority('weekday', 11); 16714 addUnitPriority('isoWeekday', 11); // PARSING 16715 16716 addRegexToken('d', match1to2); 16717 addRegexToken('e', match1to2); 16718 addRegexToken('E', match1to2); 16719 addRegexToken('dd', function (isStrict, locale) { 16720 return locale.weekdaysMinRegex(isStrict); 16721 }); 16722 addRegexToken('ddd', function (isStrict, locale) { 16723 return locale.weekdaysShortRegex(isStrict); 16724 }); 16725 addRegexToken('dddd', function (isStrict, locale) { 16726 return locale.weekdaysRegex(isStrict); 16727 }); 16728 addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { 16729 var weekday = config._locale.weekdaysParse(input, token, config._strict); // if we didn't get a weekday name, mark the date as invalid 16730 16731 16732 if (weekday != null) { 16733 week.d = weekday; 16734 } else { 16735 getParsingFlags(config).invalidWeekday = input; 16736 } 16737 }); 16738 addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { 16739 week[token] = toInt(input); 16740 }); // HELPERS 16741 16742 function parseWeekday(input, locale) { 16743 if (typeof input !== 'string') { 16744 return input; 16745 } 16746 16747 if (!isNaN(input)) { 16748 return parseInt(input, 10); 16749 } 16750 16751 input = locale.weekdaysParse(input); 16752 16753 if (typeof input === 'number') { 16754 return input; 16755 } 16756 16757 return null; 16758 } 16759 16760 function parseIsoWeekday(input, locale) { 16761 if (typeof input === 'string') { 16762 return locale.weekdaysParse(input) % 7 || 7; 16763 } 16764 16765 return isNaN(input) ? null : input; 16766 } // LOCALES 16767 16768 16769 function shiftWeekdays(ws, n) { 16770 return ws.slice(n, 7).concat(ws.slice(0, n)); 16771 } 16772 16773 var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); 16774 16775 function localeWeekdays(m, format) { 16776 var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format) ? 'format' : 'standalone']; 16777 return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays; 16778 } 16779 16780 var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); 16781 16782 function localeWeekdaysShort(m) { 16783 return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort; 16784 } 16785 16786 var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); 16787 16788 function localeWeekdaysMin(m) { 16789 return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin; 16790 } 16791 16792 function handleStrictParse$1(weekdayName, format, strict) { 16793 var i, 16794 ii, 16795 mom, 16796 llc = weekdayName.toLocaleLowerCase(); 16797 16798 if (!this._weekdaysParse) { 16799 this._weekdaysParse = []; 16800 this._shortWeekdaysParse = []; 16801 this._minWeekdaysParse = []; 16802 16803 for (i = 0; i < 7; ++i) { 16804 mom = createUTC([2000, 1]).day(i); 16805 this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase(); 16806 this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase(); 16807 this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); 16808 } 16809 } 16810 16811 if (strict) { 16812 if (format === 'dddd') { 16813 ii = indexOf.call(this._weekdaysParse, llc); 16814 return ii !== -1 ? ii : null; 16815 } else if (format === 'ddd') { 16816 ii = indexOf.call(this._shortWeekdaysParse, llc); 16817 return ii !== -1 ? ii : null; 16818 } else { 16819 ii = indexOf.call(this._minWeekdaysParse, llc); 16820 return ii !== -1 ? ii : null; 16821 } 16822 } else { 16823 if (format === 'dddd') { 16824 ii = indexOf.call(this._weekdaysParse, llc); 16825 16826 if (ii !== -1) { 16827 return ii; 16828 } 16829 16830 ii = indexOf.call(this._shortWeekdaysParse, llc); 16831 16832 if (ii !== -1) { 16833 return ii; 16834 } 16835 16836 ii = indexOf.call(this._minWeekdaysParse, llc); 16837 return ii !== -1 ? ii : null; 16838 } else if (format === 'ddd') { 16839 ii = indexOf.call(this._shortWeekdaysParse, llc); 16840 16841 if (ii !== -1) { 16842 return ii; 16843 } 16844 16845 ii = indexOf.call(this._weekdaysParse, llc); 16846 16847 if (ii !== -1) { 16848 return ii; 16849 } 16850 16851 ii = indexOf.call(this._minWeekdaysParse, llc); 16852 return ii !== -1 ? ii : null; 16853 } else { 16854 ii = indexOf.call(this._minWeekdaysParse, llc); 16855 16856 if (ii !== -1) { 16857 return ii; 16858 } 16859 16860 ii = indexOf.call(this._weekdaysParse, llc); 16861 16862 if (ii !== -1) { 16863 return ii; 16864 } 16865 16866 ii = indexOf.call(this._shortWeekdaysParse, llc); 16867 return ii !== -1 ? ii : null; 16868 } 16869 } 16870 } 16871 16872 function localeWeekdaysParse(weekdayName, format, strict) { 16873 var i, mom, regex; 16874 16875 if (this._weekdaysParseExact) { 16876 return handleStrictParse$1.call(this, weekdayName, format, strict); 16877 } 16878 16879 if (!this._weekdaysParse) { 16880 this._weekdaysParse = []; 16881 this._minWeekdaysParse = []; 16882 this._shortWeekdaysParse = []; 16883 this._fullWeekdaysParse = []; 16884 } 16885 16886 for (i = 0; i < 7; i++) { 16887 // make the regex if we don't have it already 16888 mom = createUTC([2000, 1]).day(i); 16889 16890 if (strict && !this._fullWeekdaysParse[i]) { 16891 this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i'); 16892 this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i'); 16893 this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i'); 16894 } 16895 16896 if (!this._weekdaysParse[i]) { 16897 regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); 16898 this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); 16899 } // test the regex 16900 16901 16902 if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { 16903 return i; 16904 } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { 16905 return i; 16906 } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { 16907 return i; 16908 } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { 16909 return i; 16910 } 16911 } 16912 } // MOMENTS 16913 16914 16915 function getSetDayOfWeek(input) { 16916 if (!this.isValid()) { 16917 return input != null ? this : NaN; 16918 } 16919 16920 var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); 16921 16922 if (input != null) { 16923 input = parseWeekday(input, this.localeData()); 16924 return this.add(input - day, 'd'); 16925 } else { 16926 return day; 16927 } 16928 } 16929 16930 function getSetLocaleDayOfWeek(input) { 16931 if (!this.isValid()) { 16932 return input != null ? this : NaN; 16933 } 16934 16935 var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; 16936 return input == null ? weekday : this.add(input - weekday, 'd'); 16937 } 16938 16939 function getSetISODayOfWeek(input) { 16940 if (!this.isValid()) { 16941 return input != null ? this : NaN; 16942 } // behaves the same as moment#day except 16943 // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) 16944 // as a setter, sunday should belong to the previous week. 16945 16946 16947 if (input != null) { 16948 var weekday = parseIsoWeekday(input, this.localeData()); 16949 return this.day(this.day() % 7 ? weekday : weekday - 7); 16950 } else { 16951 return this.day() || 7; 16952 } 16953 } 16954 16955 var defaultWeekdaysRegex = matchWord; 16956 16957 function weekdaysRegex(isStrict) { 16958 if (this._weekdaysParseExact) { 16959 if (!hasOwnProp(this, '_weekdaysRegex')) { 16960 computeWeekdaysParse.call(this); 16961 } 16962 16963 if (isStrict) { 16964 return this._weekdaysStrictRegex; 16965 } else { 16966 return this._weekdaysRegex; 16967 } 16968 } else { 16969 if (!hasOwnProp(this, '_weekdaysRegex')) { 16970 this._weekdaysRegex = defaultWeekdaysRegex; 16971 } 16972 16973 return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex; 16974 } 16975 } 16976 16977 var defaultWeekdaysShortRegex = matchWord; 16978 16979 function weekdaysShortRegex(isStrict) { 16980 if (this._weekdaysParseExact) { 16981 if (!hasOwnProp(this, '_weekdaysRegex')) { 16982 computeWeekdaysParse.call(this); 16983 } 16984 16985 if (isStrict) { 16986 return this._weekdaysShortStrictRegex; 16987 } else { 16988 return this._weekdaysShortRegex; 16989 } 16990 } else { 16991 if (!hasOwnProp(this, '_weekdaysShortRegex')) { 16992 this._weekdaysShortRegex = defaultWeekdaysShortRegex; 16993 } 16994 16995 return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex; 16996 } 16997 } 16998 16999 var defaultWeekdaysMinRegex = matchWord; 17000 17001 function weekdaysMinRegex(isStrict) { 17002 if (this._weekdaysParseExact) { 17003 if (!hasOwnProp(this, '_weekdaysRegex')) { 17004 computeWeekdaysParse.call(this); 17005 } 17006 17007 if (isStrict) { 17008 return this._weekdaysMinStrictRegex; 17009 } else { 17010 return this._weekdaysMinRegex; 17011 } 17012 } else { 17013 if (!hasOwnProp(this, '_weekdaysMinRegex')) { 17014 this._weekdaysMinRegex = defaultWeekdaysMinRegex; 17015 } 17016 17017 return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex; 17018 } 17019 } 17020 17021 function computeWeekdaysParse() { 17022 function cmpLenRev(a, b) { 17023 return b.length - a.length; 17024 } 17025 17026 var minPieces = [], 17027 shortPieces = [], 17028 longPieces = [], 17029 mixedPieces = [], 17030 i, 17031 mom, 17032 minp, 17033 shortp, 17034 longp; 17035 17036 for (i = 0; i < 7; i++) { 17037 // make the regex if we don't have it already 17038 mom = createUTC([2000, 1]).day(i); 17039 minp = this.weekdaysMin(mom, ''); 17040 shortp = this.weekdaysShort(mom, ''); 17041 longp = this.weekdays(mom, ''); 17042 minPieces.push(minp); 17043 shortPieces.push(shortp); 17044 longPieces.push(longp); 17045 mixedPieces.push(minp); 17046 mixedPieces.push(shortp); 17047 mixedPieces.push(longp); 17048 } // Sorting makes sure if one weekday (or abbr) is a prefix of another it 17049 // will match the longer piece. 17050 17051 17052 minPieces.sort(cmpLenRev); 17053 shortPieces.sort(cmpLenRev); 17054 longPieces.sort(cmpLenRev); 17055 mixedPieces.sort(cmpLenRev); 17056 17057 for (i = 0; i < 7; i++) { 17058 shortPieces[i] = regexEscape(shortPieces[i]); 17059 longPieces[i] = regexEscape(longPieces[i]); 17060 mixedPieces[i] = regexEscape(mixedPieces[i]); 17061 } 17062 17063 this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); 17064 this._weekdaysShortRegex = this._weekdaysRegex; 17065 this._weekdaysMinRegex = this._weekdaysRegex; 17066 this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); 17067 this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); 17068 this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i'); 17069 } // FORMATTING 17070 17071 17072 function hFormat() { 17073 return this.hours() % 12 || 12; 17074 } 17075 17076 function kFormat() { 17077 return this.hours() || 24; 17078 } 17079 17080 addFormatToken('H', ['HH', 2], 0, 'hour'); 17081 addFormatToken('h', ['hh', 2], 0, hFormat); 17082 addFormatToken('k', ['kk', 2], 0, kFormat); 17083 addFormatToken('hmm', 0, 0, function () { 17084 return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); 17085 }); 17086 addFormatToken('hmmss', 0, 0, function () { 17087 return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2); 17088 }); 17089 addFormatToken('Hmm', 0, 0, function () { 17090 return '' + this.hours() + zeroFill(this.minutes(), 2); 17091 }); 17092 addFormatToken('Hmmss', 0, 0, function () { 17093 return '' + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2); 17094 }); 17095 17096 function meridiem(token, lowercase) { 17097 addFormatToken(token, 0, 0, function () { 17098 return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); 17099 }); 17100 } 17101 17102 meridiem('a', true); 17103 meridiem('A', false); // ALIASES 17104 17105 addUnitAlias('hour', 'h'); // PRIORITY 17106 17107 addUnitPriority('hour', 13); // PARSING 17108 17109 function matchMeridiem(isStrict, locale) { 17110 return locale._meridiemParse; 17111 } 17112 17113 addRegexToken('a', matchMeridiem); 17114 addRegexToken('A', matchMeridiem); 17115 addRegexToken('H', match1to2); 17116 addRegexToken('h', match1to2); 17117 addRegexToken('k', match1to2); 17118 addRegexToken('HH', match1to2, match2); 17119 addRegexToken('hh', match1to2, match2); 17120 addRegexToken('kk', match1to2, match2); 17121 addRegexToken('hmm', match3to4); 17122 addRegexToken('hmmss', match5to6); 17123 addRegexToken('Hmm', match3to4); 17124 addRegexToken('Hmmss', match5to6); 17125 addParseToken(['H', 'HH'], HOUR); 17126 addParseToken(['k', 'kk'], function (input, array, config) { 17127 var kInput = toInt(input); 17128 array[HOUR] = kInput === 24 ? 0 : kInput; 17129 }); 17130 addParseToken(['a', 'A'], function (input, array, config) { 17131 config._isPm = config._locale.isPM(input); 17132 config._meridiem = input; 17133 }); 17134 addParseToken(['h', 'hh'], function (input, array, config) { 17135 array[HOUR] = toInt(input); 17136 getParsingFlags(config).bigHour = true; 17137 }); 17138 addParseToken('hmm', function (input, array, config) { 17139 var pos = input.length - 2; 17140 array[HOUR] = toInt(input.substr(0, pos)); 17141 array[MINUTE] = toInt(input.substr(pos)); 17142 getParsingFlags(config).bigHour = true; 17143 }); 17144 addParseToken('hmmss', function (input, array, config) { 17145 var pos1 = input.length - 4; 17146 var pos2 = input.length - 2; 17147 array[HOUR] = toInt(input.substr(0, pos1)); 17148 array[MINUTE] = toInt(input.substr(pos1, 2)); 17149 array[SECOND] = toInt(input.substr(pos2)); 17150 getParsingFlags(config).bigHour = true; 17151 }); 17152 addParseToken('Hmm', function (input, array, config) { 17153 var pos = input.length - 2; 17154 array[HOUR] = toInt(input.substr(0, pos)); 17155 array[MINUTE] = toInt(input.substr(pos)); 17156 }); 17157 addParseToken('Hmmss', function (input, array, config) { 17158 var pos1 = input.length - 4; 17159 var pos2 = input.length - 2; 17160 array[HOUR] = toInt(input.substr(0, pos1)); 17161 array[MINUTE] = toInt(input.substr(pos1, 2)); 17162 array[SECOND] = toInt(input.substr(pos2)); 17163 }); // LOCALES 17164 17165 function localeIsPM(input) { 17166 // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays 17167 // Using charAt should be more compatible. 17168 return (input + '').toLowerCase().charAt(0) === 'p'; 17169 } 17170 17171 var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; 17172 17173 function localeMeridiem(hours, minutes, isLower) { 17174 if (hours > 11) { 17175 return isLower ? 'pm' : 'PM'; 17176 } else { 17177 return isLower ? 'am' : 'AM'; 17178 } 17179 } // MOMENTS 17180 // Setting the hour should keep the time, because the user explicitly 17181 // specified which hour they want. So trying to maintain the same hour (in 17182 // a new timezone) makes sense. Adding/subtracting hours does not follow 17183 // this rule. 17184 17185 17186 var getSetHour = makeGetSet('Hours', true); 17187 var baseConfig = { 17188 calendar: defaultCalendar, 17189 longDateFormat: defaultLongDateFormat, 17190 invalidDate: defaultInvalidDate, 17191 ordinal: defaultOrdinal, 17192 dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, 17193 relativeTime: defaultRelativeTime, 17194 months: defaultLocaleMonths, 17195 monthsShort: defaultLocaleMonthsShort, 17196 week: defaultLocaleWeek, 17197 weekdays: defaultLocaleWeekdays, 17198 weekdaysMin: defaultLocaleWeekdaysMin, 17199 weekdaysShort: defaultLocaleWeekdaysShort, 17200 meridiemParse: defaultLocaleMeridiemParse 17201 }; // internal storage for locale config files 17202 17203 var locales = {}; 17204 var localeFamilies = {}; 17205 var globalLocale; 17206 17207 function normalizeLocale(key) { 17208 return key ? key.toLowerCase().replace('_', '-') : key; 17209 } // pick the locale from the array 17210 // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each 17211 // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root 17212 17213 17214 function chooseLocale(names) { 17215 var i = 0, 17216 j, 17217 next, 17218 locale, 17219 split; 17220 17221 while (i < names.length) { 17222 split = normalizeLocale(names[i]).split('-'); 17223 j = split.length; 17224 next = normalizeLocale(names[i + 1]); 17225 next = next ? next.split('-') : null; 17226 17227 while (j > 0) { 17228 locale = loadLocale(split.slice(0, j).join('-')); 17229 17230 if (locale) { 17231 return locale; 17232 } 17233 17234 if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { 17235 //the next array item is better than a shallower substring of this one 17236 break; 17237 } 17238 17239 j--; 17240 } 17241 17242 i++; 17243 } 17244 17245 return globalLocale; 17246 } 17247 17248 function loadLocale(name) { 17249 var oldLocale = null; // TODO: Find a better way to register and load all the locales in Node 17250 17251 if (!locales[name] && typeof module !== 'undefined' && module && module.exports) { 17252 try { 17253 oldLocale = globalLocale._abbr; 17254 var aliasedRequire = require; 17255 __webpack_require__("./node_modules/moment/locale sync recursive ^\\.\\/.*$")("./" + name); 17256 getSetGlobalLocale(oldLocale); 17257 } catch (e) {} 17258 } 17259 17260 return locales[name]; 17261 } // This function will load locale and then set the global locale. If 17262 // no arguments are passed in, it will simply return the current global 17263 // locale key. 17264 17265 17266 function getSetGlobalLocale(key, values) { 17267 var data; 17268 17269 if (key) { 17270 if (isUndefined(values)) { 17271 data = getLocale(key); 17272 } else { 17273 data = defineLocale(key, values); 17274 } 17275 17276 if (data) { 17277 // moment.duration._locale = moment._locale = data; 17278 globalLocale = data; 17279 } else { 17280 if (typeof console !== 'undefined' && console.warn) { 17281 //warn user if arguments are passed but the locale could not be set 17282 console.warn('Locale ' + key + ' not found. Did you forget to load it?'); 17283 } 17284 } 17285 } 17286 17287 return globalLocale._abbr; 17288 } 17289 17290 function defineLocale(name, config) { 17291 if (config !== null) { 17292 var locale, 17293 parentConfig = baseConfig; 17294 config.abbr = name; 17295 17296 if (locales[name] != null) { 17297 deprecateSimple('defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + 'config) should only be used for creating a new locale ' + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'); 17298 parentConfig = locales[name]._config; 17299 } else if (config.parentLocale != null) { 17300 if (locales[config.parentLocale] != null) { 17301 parentConfig = locales[config.parentLocale]._config; 17302 } else { 17303 locale = loadLocale(config.parentLocale); 17304 17305 if (locale != null) { 17306 parentConfig = locale._config; 17307 } else { 17308 if (!localeFamilies[config.parentLocale]) { 17309 localeFamilies[config.parentLocale] = []; 17310 } 17311 17312 localeFamilies[config.parentLocale].push({ 17313 name: name, 17314 config: config 17315 }); 17316 return null; 17317 } 17318 } 17319 } 17320 17321 locales[name] = new Locale(mergeConfigs(parentConfig, config)); 17322 17323 if (localeFamilies[name]) { 17324 localeFamilies[name].forEach(function (x) { 17325 defineLocale(x.name, x.config); 17326 }); 17327 } // backwards compat for now: also set the locale 17328 // make sure we set the locale AFTER all child locales have been 17329 // created, so we won't end up with the child locale set. 17330 17331 17332 getSetGlobalLocale(name); 17333 return locales[name]; 17334 } else { 17335 // useful for testing 17336 delete locales[name]; 17337 return null; 17338 } 17339 } 17340 17341 function updateLocale(name, config) { 17342 if (config != null) { 17343 var locale, 17344 tmpLocale, 17345 parentConfig = baseConfig; // MERGE 17346 17347 tmpLocale = loadLocale(name); 17348 17349 if (tmpLocale != null) { 17350 parentConfig = tmpLocale._config; 17351 } 17352 17353 config = mergeConfigs(parentConfig, config); 17354 locale = new Locale(config); 17355 locale.parentLocale = locales[name]; 17356 locales[name] = locale; // backwards compat for now: also set the locale 17357 17358 getSetGlobalLocale(name); 17359 } else { 17360 // pass null for config to unupdate, useful for tests 17361 if (locales[name] != null) { 17362 if (locales[name].parentLocale != null) { 17363 locales[name] = locales[name].parentLocale; 17364 } else if (locales[name] != null) { 17365 delete locales[name]; 17366 } 17367 } 17368 } 17369 17370 return locales[name]; 17371 } // returns locale data 17372 17373 17374 function getLocale(key) { 17375 var locale; 17376 17377 if (key && key._locale && key._locale._abbr) { 17378 key = key._locale._abbr; 17379 } 17380 17381 if (!key) { 17382 return globalLocale; 17383 } 17384 17385 if (!isArray(key)) { 17386 //short-circuit everything else 17387 locale = loadLocale(key); 17388 17389 if (locale) { 17390 return locale; 17391 } 17392 17393 key = [key]; 17394 } 17395 17396 return chooseLocale(key); 17397 } 17398 17399 function listLocales() { 17400 return keys(locales); 17401 } 17402 17403 function checkOverflow(m) { 17404 var overflow; 17405 var a = m._a; 17406 17407 if (a && getParsingFlags(m).overflow === -2) { 17408 overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1; 17409 17410 if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { 17411 overflow = DATE; 17412 } 17413 17414 if (getParsingFlags(m)._overflowWeeks && overflow === -1) { 17415 overflow = WEEK; 17416 } 17417 17418 if (getParsingFlags(m)._overflowWeekday && overflow === -1) { 17419 overflow = WEEKDAY; 17420 } 17421 17422 getParsingFlags(m).overflow = overflow; 17423 } 17424 17425 return m; 17426 } // Pick the first defined of two or three arguments. 17427 17428 17429 function defaults(a, b, c) { 17430 if (a != null) { 17431 return a; 17432 } 17433 17434 if (b != null) { 17435 return b; 17436 } 17437 17438 return c; 17439 } 17440 17441 function currentDateArray(config) { 17442 // hooks is actually the exported moment object 17443 var nowValue = new Date(hooks.now()); 17444 17445 if (config._useUTC) { 17446 return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; 17447 } 17448 17449 return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; 17450 } // convert an array to a date. 17451 // the array should mirror the parameters below 17452 // note: all values past the year are optional and will default to the lowest possible value. 17453 // [year, month, day , hour, minute, second, millisecond] 17454 17455 17456 function configFromArray(config) { 17457 var i, 17458 date, 17459 input = [], 17460 currentDate, 17461 expectedWeekday, 17462 yearToUse; 17463 17464 if (config._d) { 17465 return; 17466 } 17467 17468 currentDate = currentDateArray(config); //compute day of the year from weeks and weekdays 17469 17470 if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { 17471 dayOfYearFromWeekInfo(config); 17472 } //if the day of the year is set, figure out what it is 17473 17474 17475 if (config._dayOfYear != null) { 17476 yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); 17477 17478 if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) { 17479 getParsingFlags(config)._overflowDayOfYear = true; 17480 } 17481 17482 date = createUTCDate(yearToUse, 0, config._dayOfYear); 17483 config._a[MONTH] = date.getUTCMonth(); 17484 config._a[DATE] = date.getUTCDate(); 17485 } // Default to current date. 17486 // * if no year, month, day of month are given, default to today 17487 // * if day of month is given, default month and year 17488 // * if month is given, default only year 17489 // * if year is given, don't default anything 17490 17491 17492 for (i = 0; i < 3 && config._a[i] == null; ++i) { 17493 config._a[i] = input[i] = currentDate[i]; 17494 } // Zero out whatever was not defaulted, including time 17495 17496 17497 for (; i < 7; i++) { 17498 config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i]; 17499 } // Check for 24:00:00.000 17500 17501 17502 if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) { 17503 config._nextDay = true; 17504 config._a[HOUR] = 0; 17505 } 17506 17507 config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); 17508 expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay(); // Apply timezone offset from input. The actual utcOffset can be changed 17509 // with parseZone. 17510 17511 if (config._tzm != null) { 17512 config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); 17513 } 17514 17515 if (config._nextDay) { 17516 config._a[HOUR] = 24; 17517 } // check for mismatching day of week 17518 17519 17520 if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) { 17521 getParsingFlags(config).weekdayMismatch = true; 17522 } 17523 } 17524 17525 function dayOfYearFromWeekInfo(config) { 17526 var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; 17527 w = config._w; 17528 17529 if (w.GG != null || w.W != null || w.E != null) { 17530 dow = 1; 17531 doy = 4; // TODO: We need to take the current isoWeekYear, but that depends on 17532 // how we interpret now (local, utc, fixed offset). So create 17533 // a now version of current config (take local/utc/offset flags, and 17534 // create now). 17535 17536 weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year); 17537 week = defaults(w.W, 1); 17538 weekday = defaults(w.E, 1); 17539 17540 if (weekday < 1 || weekday > 7) { 17541 weekdayOverflow = true; 17542 } 17543 } else { 17544 dow = config._locale._week.dow; 17545 doy = config._locale._week.doy; 17546 var curWeek = weekOfYear(createLocal(), dow, doy); 17547 weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); // Default to current week. 17548 17549 week = defaults(w.w, curWeek.week); 17550 17551 if (w.d != null) { 17552 // weekday -- low day numbers are considered next week 17553 weekday = w.d; 17554 17555 if (weekday < 0 || weekday > 6) { 17556 weekdayOverflow = true; 17557 } 17558 } else if (w.e != null) { 17559 // local weekday -- counting starts from beginning of week 17560 weekday = w.e + dow; 17561 17562 if (w.e < 0 || w.e > 6) { 17563 weekdayOverflow = true; 17564 } 17565 } else { 17566 // default to beginning of week 17567 weekday = dow; 17568 } 17569 } 17570 17571 if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { 17572 getParsingFlags(config)._overflowWeeks = true; 17573 } else if (weekdayOverflow != null) { 17574 getParsingFlags(config)._overflowWeekday = true; 17575 } else { 17576 temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); 17577 config._a[YEAR] = temp.year; 17578 config._dayOfYear = temp.dayOfYear; 17579 } 17580 } // iso 8601 regex 17581 // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) 17582 17583 17584 var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; 17585 var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; 17586 var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; 17587 var isoDates = [['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], ['GGGG-[W]WW', /\d{4}-W\d\d/, false], ['YYYY-DDD', /\d{4}-\d{3}/], ['YYYY-MM', /\d{4}-\d\d/, false], ['YYYYYYMMDD', /[+-]\d{10}/], ['YYYYMMDD', /\d{8}/], // YYYYMM is NOT allowed by the standard 17588 ['GGGG[W]WWE', /\d{4}W\d{3}/], ['GGGG[W]WW', /\d{4}W\d{2}/, false], ['YYYYDDD', /\d{7}/]]; // iso time formats and regexes 17589 17590 var isoTimes = [['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], ['HH:mm:ss', /\d\d:\d\d:\d\d/], ['HH:mm', /\d\d:\d\d/], ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], ['HHmmss', /\d\d\d\d\d\d/], ['HHmm', /\d\d\d\d/], ['HH', /\d\d/]]; 17591 var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; // date from iso format 17592 17593 function configFromISO(config) { 17594 var i, 17595 l, 17596 string = config._i, 17597 match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), 17598 allowTime, 17599 dateFormat, 17600 timeFormat, 17601 tzFormat; 17602 17603 if (match) { 17604 getParsingFlags(config).iso = true; 17605 17606 for (i = 0, l = isoDates.length; i < l; i++) { 17607 if (isoDates[i][1].exec(match[1])) { 17608 dateFormat = isoDates[i][0]; 17609 allowTime = isoDates[i][2] !== false; 17610 break; 17611 } 17612 } 17613 17614 if (dateFormat == null) { 17615 config._isValid = false; 17616 return; 17617 } 17618 17619 if (match[3]) { 17620 for (i = 0, l = isoTimes.length; i < l; i++) { 17621 if (isoTimes[i][1].exec(match[3])) { 17622 // match[2] should be 'T' or space 17623 timeFormat = (match[2] || ' ') + isoTimes[i][0]; 17624 break; 17625 } 17626 } 17627 17628 if (timeFormat == null) { 17629 config._isValid = false; 17630 return; 17631 } 17632 } 17633 17634 if (!allowTime && timeFormat != null) { 17635 config._isValid = false; 17636 return; 17637 } 17638 17639 if (match[4]) { 17640 if (tzRegex.exec(match[4])) { 17641 tzFormat = 'Z'; 17642 } else { 17643 config._isValid = false; 17644 return; 17645 } 17646 } 17647 17648 config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); 17649 configFromStringAndFormat(config); 17650 } else { 17651 config._isValid = false; 17652 } 17653 } // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 17654 17655 17656 var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/; 17657 17658 function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { 17659 var result = [untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10)]; 17660 17661 if (secondStr) { 17662 result.push(parseInt(secondStr, 10)); 17663 } 17664 17665 return result; 17666 } 17667 17668 function untruncateYear(yearStr) { 17669 var year = parseInt(yearStr, 10); 17670 17671 if (year <= 49) { 17672 return 2000 + year; 17673 } else if (year <= 999) { 17674 return 1900 + year; 17675 } 17676 17677 return year; 17678 } 17679 17680 function preprocessRFC2822(s) { 17681 // Remove comments and folding whitespace and replace multiple-spaces with a single space 17682 return s.replace(/\([^)]*\)|[\n\t]/g, ' ').replace(/(\s\s+)/g, ' ').replace(/^\s\s*/, '').replace(/\s\s*$/, ''); 17683 } 17684 17685 function checkWeekday(weekdayStr, parsedInput, config) { 17686 if (weekdayStr) { 17687 // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check. 17688 var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), 17689 weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay(); 17690 17691 if (weekdayProvided !== weekdayActual) { 17692 getParsingFlags(config).weekdayMismatch = true; 17693 config._isValid = false; 17694 return false; 17695 } 17696 } 17697 17698 return true; 17699 } 17700 17701 var obsOffsets = { 17702 UT: 0, 17703 GMT: 0, 17704 EDT: -4 * 60, 17705 EST: -5 * 60, 17706 CDT: -5 * 60, 17707 CST: -6 * 60, 17708 MDT: -6 * 60, 17709 MST: -7 * 60, 17710 PDT: -7 * 60, 17711 PST: -8 * 60 17712 }; 17713 17714 function calculateOffset(obsOffset, militaryOffset, numOffset) { 17715 if (obsOffset) { 17716 return obsOffsets[obsOffset]; 17717 } else if (militaryOffset) { 17718 // the only allowed military tz is Z 17719 return 0; 17720 } else { 17721 var hm = parseInt(numOffset, 10); 17722 var m = hm % 100, 17723 h = (hm - m) / 100; 17724 return h * 60 + m; 17725 } 17726 } // date and time from ref 2822 format 17727 17728 17729 function configFromRFC2822(config) { 17730 var match = rfc2822.exec(preprocessRFC2822(config._i)); 17731 17732 if (match) { 17733 var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]); 17734 17735 if (!checkWeekday(match[1], parsedArray, config)) { 17736 return; 17737 } 17738 17739 config._a = parsedArray; 17740 config._tzm = calculateOffset(match[8], match[9], match[10]); 17741 config._d = createUTCDate.apply(null, config._a); 17742 17743 config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); 17744 17745 getParsingFlags(config).rfc2822 = true; 17746 } else { 17747 config._isValid = false; 17748 } 17749 } // date from iso format or fallback 17750 17751 17752 function configFromString(config) { 17753 var matched = aspNetJsonRegex.exec(config._i); 17754 17755 if (matched !== null) { 17756 config._d = new Date(+matched[1]); 17757 return; 17758 } 17759 17760 configFromISO(config); 17761 17762 if (config._isValid === false) { 17763 delete config._isValid; 17764 } else { 17765 return; 17766 } 17767 17768 configFromRFC2822(config); 17769 17770 if (config._isValid === false) { 17771 delete config._isValid; 17772 } else { 17773 return; 17774 } // Final attempt, use Input Fallback 17775 17776 17777 hooks.createFromInputFallback(config); 17778 } 17779 17780 hooks.createFromInputFallback = deprecate('value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged and will be removed in an upcoming major release. Please refer to ' + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) { 17781 config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); 17782 }); // constant that refers to the ISO standard 17783 17784 hooks.ISO_8601 = function () {}; // constant that refers to the RFC 2822 form 17785 17786 17787 hooks.RFC_2822 = function () {}; // date from string and format string 17788 17789 17790 function configFromStringAndFormat(config) { 17791 // TODO: Move this to another part of the creation flow to prevent circular deps 17792 if (config._f === hooks.ISO_8601) { 17793 configFromISO(config); 17794 return; 17795 } 17796 17797 if (config._f === hooks.RFC_2822) { 17798 configFromRFC2822(config); 17799 return; 17800 } 17801 17802 config._a = []; 17803 getParsingFlags(config).empty = true; // This array is used to make a Date, either with `new Date` or `Date.UTC` 17804 17805 var string = '' + config._i, 17806 i, 17807 parsedInput, 17808 tokens, 17809 token, 17810 skipped, 17811 stringLength = string.length, 17812 totalParsedInputLength = 0; 17813 tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; 17814 17815 for (i = 0; i < tokens.length; i++) { 17816 token = tokens[i]; 17817 parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; // console.log('token', token, 'parsedInput', parsedInput, 17818 // 'regex', getParseRegexForToken(token, config)); 17819 17820 if (parsedInput) { 17821 skipped = string.substr(0, string.indexOf(parsedInput)); 17822 17823 if (skipped.length > 0) { 17824 getParsingFlags(config).unusedInput.push(skipped); 17825 } 17826 17827 string = string.slice(string.indexOf(parsedInput) + parsedInput.length); 17828 totalParsedInputLength += parsedInput.length; 17829 } // don't parse if it's not a known token 17830 17831 17832 if (formatTokenFunctions[token]) { 17833 if (parsedInput) { 17834 getParsingFlags(config).empty = false; 17835 } else { 17836 getParsingFlags(config).unusedTokens.push(token); 17837 } 17838 17839 addTimeToArrayFromToken(token, parsedInput, config); 17840 } else if (config._strict && !parsedInput) { 17841 getParsingFlags(config).unusedTokens.push(token); 17842 } 17843 } // add remaining unparsed input length to the string 17844 17845 17846 getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; 17847 17848 if (string.length > 0) { 17849 getParsingFlags(config).unusedInput.push(string); 17850 } // clear _12h flag if hour is <= 12 17851 17852 17853 if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) { 17854 getParsingFlags(config).bigHour = undefined; 17855 } 17856 17857 getParsingFlags(config).parsedDateParts = config._a.slice(0); 17858 getParsingFlags(config).meridiem = config._meridiem; // handle meridiem 17859 17860 config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); 17861 configFromArray(config); 17862 checkOverflow(config); 17863 } 17864 17865 function meridiemFixWrap(locale, hour, meridiem) { 17866 var isPm; 17867 17868 if (meridiem == null) { 17869 // nothing to do 17870 return hour; 17871 } 17872 17873 if (locale.meridiemHour != null) { 17874 return locale.meridiemHour(hour, meridiem); 17875 } else if (locale.isPM != null) { 17876 // Fallback 17877 isPm = locale.isPM(meridiem); 17878 17879 if (isPm && hour < 12) { 17880 hour += 12; 17881 } 17882 17883 if (!isPm && hour === 12) { 17884 hour = 0; 17885 } 17886 17887 return hour; 17888 } else { 17889 // this is not supposed to happen 17890 return hour; 17891 } 17892 } // date from string and array of format strings 17893 17894 17895 function configFromStringAndArray(config) { 17896 var tempConfig, bestMoment, scoreToBeat, i, currentScore; 17897 17898 if (config._f.length === 0) { 17899 getParsingFlags(config).invalidFormat = true; 17900 config._d = new Date(NaN); 17901 return; 17902 } 17903 17904 for (i = 0; i < config._f.length; i++) { 17905 currentScore = 0; 17906 tempConfig = copyConfig({}, config); 17907 17908 if (config._useUTC != null) { 17909 tempConfig._useUTC = config._useUTC; 17910 } 17911 17912 tempConfig._f = config._f[i]; 17913 configFromStringAndFormat(tempConfig); 17914 17915 if (!isValid(tempConfig)) { 17916 continue; 17917 } // if there is any input that was not parsed add a penalty for that format 17918 17919 17920 currentScore += getParsingFlags(tempConfig).charsLeftOver; //or tokens 17921 17922 currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; 17923 getParsingFlags(tempConfig).score = currentScore; 17924 17925 if (scoreToBeat == null || currentScore < scoreToBeat) { 17926 scoreToBeat = currentScore; 17927 bestMoment = tempConfig; 17928 } 17929 } 17930 17931 extend(config, bestMoment || tempConfig); 17932 } 17933 17934 function configFromObject(config) { 17935 if (config._d) { 17936 return; 17937 } 17938 17939 var i = normalizeObjectUnits(config._i); 17940 config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { 17941 return obj && parseInt(obj, 10); 17942 }); 17943 configFromArray(config); 17944 } 17945 17946 function createFromConfig(config) { 17947 var res = new Moment(checkOverflow(prepareConfig(config))); 17948 17949 if (res._nextDay) { 17950 // Adding is smart enough around DST 17951 res.add(1, 'd'); 17952 res._nextDay = undefined; 17953 } 17954 17955 return res; 17956 } 17957 17958 function prepareConfig(config) { 17959 var input = config._i, 17960 format = config._f; 17961 config._locale = config._locale || getLocale(config._l); 17962 17963 if (input === null || format === undefined && input === '') { 17964 return createInvalid({ 17965 nullInput: true 17966 }); 17967 } 17968 17969 if (typeof input === 'string') { 17970 config._i = input = config._locale.preparse(input); 17971 } 17972 17973 if (isMoment(input)) { 17974 return new Moment(checkOverflow(input)); 17975 } else if (isDate(input)) { 17976 config._d = input; 17977 } else if (isArray(format)) { 17978 configFromStringAndArray(config); 17979 } else if (format) { 17980 configFromStringAndFormat(config); 17981 } else { 17982 configFromInput(config); 17983 } 17984 17985 if (!isValid(config)) { 17986 config._d = null; 17987 } 17988 17989 return config; 17990 } 17991 17992 function configFromInput(config) { 17993 var input = config._i; 17994 17995 if (isUndefined(input)) { 17996 config._d = new Date(hooks.now()); 17997 } else if (isDate(input)) { 17998 config._d = new Date(input.valueOf()); 17999 } else if (typeof input === 'string') { 18000 configFromString(config); 18001 } else if (isArray(input)) { 18002 config._a = map(input.slice(0), function (obj) { 18003 return parseInt(obj, 10); 18004 }); 18005 configFromArray(config); 18006 } else if (isObject(input)) { 18007 configFromObject(config); 18008 } else if (isNumber(input)) { 18009 // from milliseconds 18010 config._d = new Date(input); 18011 } else { 18012 hooks.createFromInputFallback(config); 18013 } 18014 } 18015 18016 function createLocalOrUTC(input, format, locale, strict, isUTC) { 18017 var c = {}; 18018 18019 if (locale === true || locale === false) { 18020 strict = locale; 18021 locale = undefined; 18022 } 18023 18024 if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) { 18025 input = undefined; 18026 } // object construction must be done this way. 18027 // https://github.com/moment/moment/issues/1423 18028 18029 18030 c._isAMomentObject = true; 18031 c._useUTC = c._isUTC = isUTC; 18032 c._l = locale; 18033 c._i = input; 18034 c._f = format; 18035 c._strict = strict; 18036 return createFromConfig(c); 18037 } 18038 18039 function createLocal(input, format, locale, strict) { 18040 return createLocalOrUTC(input, format, locale, strict, false); 18041 } 18042 18043 var prototypeMin = deprecate('moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', function () { 18044 var other = createLocal.apply(null, arguments); 18045 18046 if (this.isValid() && other.isValid()) { 18047 return other < this ? this : other; 18048 } else { 18049 return createInvalid(); 18050 } 18051 }); 18052 var prototypeMax = deprecate('moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', function () { 18053 var other = createLocal.apply(null, arguments); 18054 18055 if (this.isValid() && other.isValid()) { 18056 return other > this ? this : other; 18057 } else { 18058 return createInvalid(); 18059 } 18060 }); // Pick a moment m from moments so that m[fn](other) is true for all 18061 // other. This relies on the function fn to be transitive. 18062 // 18063 // moments should either be an array of moment objects or an array, whose 18064 // first element is an array of moment objects. 18065 18066 function pickBy(fn, moments) { 18067 var res, i; 18068 18069 if (moments.length === 1 && isArray(moments[0])) { 18070 moments = moments[0]; 18071 } 18072 18073 if (!moments.length) { 18074 return createLocal(); 18075 } 18076 18077 res = moments[0]; 18078 18079 for (i = 1; i < moments.length; ++i) { 18080 if (!moments[i].isValid() || moments[i][fn](res)) { 18081 res = moments[i]; 18082 } 18083 } 18084 18085 return res; 18086 } // TODO: Use [].sort instead? 18087 18088 18089 function min() { 18090 var args = [].slice.call(arguments, 0); 18091 return pickBy('isBefore', args); 18092 } 18093 18094 function max() { 18095 var args = [].slice.call(arguments, 0); 18096 return pickBy('isAfter', args); 18097 } 18098 18099 var now = function () { 18100 return Date.now ? Date.now() : +new Date(); 18101 }; 18102 18103 var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; 18104 18105 function isDurationValid(m) { 18106 for (var key in m) { 18107 if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) { 18108 return false; 18109 } 18110 } 18111 18112 var unitHasDecimal = false; 18113 18114 for (var i = 0; i < ordering.length; ++i) { 18115 if (m[ordering[i]]) { 18116 if (unitHasDecimal) { 18117 return false; // only allow non-integers for smallest unit 18118 } 18119 18120 if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { 18121 unitHasDecimal = true; 18122 } 18123 } 18124 } 18125 18126 return true; 18127 } 18128 18129 function isValid$1() { 18130 return this._isValid; 18131 } 18132 18133 function createInvalid$1() { 18134 return createDuration(NaN); 18135 } 18136 18137 function Duration(duration) { 18138 var normalizedInput = normalizeObjectUnits(duration), 18139 years = normalizedInput.year || 0, 18140 quarters = normalizedInput.quarter || 0, 18141 months = normalizedInput.month || 0, 18142 weeks = normalizedInput.week || normalizedInput.isoWeek || 0, 18143 days = normalizedInput.day || 0, 18144 hours = normalizedInput.hour || 0, 18145 minutes = normalizedInput.minute || 0, 18146 seconds = normalizedInput.second || 0, 18147 milliseconds = normalizedInput.millisecond || 0; 18148 this._isValid = isDurationValid(normalizedInput); // representation for dateAddRemove 18149 18150 this._milliseconds = +milliseconds + seconds * 1e3 + // 1000 18151 minutes * 6e4 + // 1000 * 60 18152 hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 18153 // Because of dateAddRemove treats 24 hours as different from a 18154 // day when working around DST, we need to store them separately 18155 18156 this._days = +days + weeks * 7; // It is impossible to translate months into days without knowing 18157 // which months you are are talking about, so we have to store 18158 // it separately. 18159 18160 this._months = +months + quarters * 3 + years * 12; 18161 this._data = {}; 18162 this._locale = getLocale(); 18163 18164 this._bubble(); 18165 } 18166 18167 function isDuration(obj) { 18168 return obj instanceof Duration; 18169 } 18170 18171 function absRound(number) { 18172 if (number < 0) { 18173 return Math.round(-1 * number) * -1; 18174 } else { 18175 return Math.round(number); 18176 } 18177 } // FORMATTING 18178 18179 18180 function offset(token, separator) { 18181 addFormatToken(token, 0, 0, function () { 18182 var offset = this.utcOffset(); 18183 var sign = '+'; 18184 18185 if (offset < 0) { 18186 offset = -offset; 18187 sign = '-'; 18188 } 18189 18190 return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2); 18191 }); 18192 } 18193 18194 offset('Z', ':'); 18195 offset('ZZ', ''); // PARSING 18196 18197 addRegexToken('Z', matchShortOffset); 18198 addRegexToken('ZZ', matchShortOffset); 18199 addParseToken(['Z', 'ZZ'], function (input, array, config) { 18200 config._useUTC = true; 18201 config._tzm = offsetFromString(matchShortOffset, input); 18202 }); // HELPERS 18203 // timezone chunker 18204 // '+10:00' > ['10', '00'] 18205 // '-1530' > ['-15', '30'] 18206 18207 var chunkOffset = /([\+\-]|\d\d)/gi; 18208 18209 function offsetFromString(matcher, string) { 18210 var matches = (string || '').match(matcher); 18211 18212 if (matches === null) { 18213 return null; 18214 } 18215 18216 var chunk = matches[matches.length - 1] || []; 18217 var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; 18218 var minutes = +(parts[1] * 60) + toInt(parts[2]); 18219 return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes; 18220 } // Return a moment from input, that is local/utc/zone equivalent to model. 18221 18222 18223 function cloneWithOffset(input, model) { 18224 var res, diff; 18225 18226 if (model._isUTC) { 18227 res = model.clone(); 18228 diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); // Use low-level api, because this fn is low-level api. 18229 18230 res._d.setTime(res._d.valueOf() + diff); 18231 18232 hooks.updateOffset(res, false); 18233 return res; 18234 } else { 18235 return createLocal(input).local(); 18236 } 18237 } 18238 18239 function getDateOffset(m) { 18240 // On Firefox.24 Date#getTimezoneOffset returns a floating point. 18241 // https://github.com/moment/moment/pull/1871 18242 return -Math.round(m._d.getTimezoneOffset() / 15) * 15; 18243 } // HOOKS 18244 // This function will be called whenever a moment is mutated. 18245 // It is intended to keep the offset in sync with the timezone. 18246 18247 18248 hooks.updateOffset = function () {}; // MOMENTS 18249 // keepLocalTime = true means only change the timezone, without 18250 // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> 18251 // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset 18252 // +0200, so we adjust the time as needed, to be valid. 18253 // 18254 // Keeping the time actually adds/subtracts (one hour) 18255 // from the actual represented time. That is why we call updateOffset 18256 // a second time. In case it wants us to change the offset again 18257 // _changeInProgress == true case, then we have to adjust, because 18258 // there is no such time in the given timezone. 18259 18260 18261 function getSetOffset(input, keepLocalTime, keepMinutes) { 18262 var offset = this._offset || 0, 18263 localAdjust; 18264 18265 if (!this.isValid()) { 18266 return input != null ? this : NaN; 18267 } 18268 18269 if (input != null) { 18270 if (typeof input === 'string') { 18271 input = offsetFromString(matchShortOffset, input); 18272 18273 if (input === null) { 18274 return this; 18275 } 18276 } else if (Math.abs(input) < 16 && !keepMinutes) { 18277 input = input * 60; 18278 } 18279 18280 if (!this._isUTC && keepLocalTime) { 18281 localAdjust = getDateOffset(this); 18282 } 18283 18284 this._offset = input; 18285 this._isUTC = true; 18286 18287 if (localAdjust != null) { 18288 this.add(localAdjust, 'm'); 18289 } 18290 18291 if (offset !== input) { 18292 if (!keepLocalTime || this._changeInProgress) { 18293 addSubtract(this, createDuration(input - offset, 'm'), 1, false); 18294 } else if (!this._changeInProgress) { 18295 this._changeInProgress = true; 18296 hooks.updateOffset(this, true); 18297 this._changeInProgress = null; 18298 } 18299 } 18300 18301 return this; 18302 } else { 18303 return this._isUTC ? offset : getDateOffset(this); 18304 } 18305 } 18306 18307 function getSetZone(input, keepLocalTime) { 18308 if (input != null) { 18309 if (typeof input !== 'string') { 18310 input = -input; 18311 } 18312 18313 this.utcOffset(input, keepLocalTime); 18314 return this; 18315 } else { 18316 return -this.utcOffset(); 18317 } 18318 } 18319 18320 function setOffsetToUTC(keepLocalTime) { 18321 return this.utcOffset(0, keepLocalTime); 18322 } 18323 18324 function setOffsetToLocal(keepLocalTime) { 18325 if (this._isUTC) { 18326 this.utcOffset(0, keepLocalTime); 18327 this._isUTC = false; 18328 18329 if (keepLocalTime) { 18330 this.subtract(getDateOffset(this), 'm'); 18331 } 18332 } 18333 18334 return this; 18335 } 18336 18337 function setOffsetToParsedOffset() { 18338 if (this._tzm != null) { 18339 this.utcOffset(this._tzm, false, true); 18340 } else if (typeof this._i === 'string') { 18341 var tZone = offsetFromString(matchOffset, this._i); 18342 18343 if (tZone != null) { 18344 this.utcOffset(tZone); 18345 } else { 18346 this.utcOffset(0, true); 18347 } 18348 } 18349 18350 return this; 18351 } 18352 18353 function hasAlignedHourOffset(input) { 18354 if (!this.isValid()) { 18355 return false; 18356 } 18357 18358 input = input ? createLocal(input).utcOffset() : 0; 18359 return (this.utcOffset() - input) % 60 === 0; 18360 } 18361 18362 function isDaylightSavingTime() { 18363 return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset(); 18364 } 18365 18366 function isDaylightSavingTimeShifted() { 18367 if (!isUndefined(this._isDSTShifted)) { 18368 return this._isDSTShifted; 18369 } 18370 18371 var c = {}; 18372 copyConfig(c, this); 18373 c = prepareConfig(c); 18374 18375 if (c._a) { 18376 var other = c._isUTC ? createUTC(c._a) : createLocal(c._a); 18377 this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0; 18378 } else { 18379 this._isDSTShifted = false; 18380 } 18381 18382 return this._isDSTShifted; 18383 } 18384 18385 function isLocal() { 18386 return this.isValid() ? !this._isUTC : false; 18387 } 18388 18389 function isUtcOffset() { 18390 return this.isValid() ? this._isUTC : false; 18391 } 18392 18393 function isUtc() { 18394 return this.isValid() ? this._isUTC && this._offset === 0 : false; 18395 } // ASP.NET json date format regex 18396 18397 18398 var aspNetRegex = /^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/; // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html 18399 // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere 18400 // and further modified to allow for strings containing both week and day 18401 18402 var isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; 18403 18404 function createDuration(input, key) { 18405 var duration = input, 18406 // matching against regexp is expensive, do it on demand 18407 match = null, 18408 sign, 18409 ret, 18410 diffRes; 18411 18412 if (isDuration(input)) { 18413 duration = { 18414 ms: input._milliseconds, 18415 d: input._days, 18416 M: input._months 18417 }; 18418 } else if (isNumber(input)) { 18419 duration = {}; 18420 18421 if (key) { 18422 duration[key] = input; 18423 } else { 18424 duration.milliseconds = input; 18425 } 18426 } else if (!!(match = aspNetRegex.exec(input))) { 18427 sign = match[1] === '-' ? -1 : 1; 18428 duration = { 18429 y: 0, 18430 d: toInt(match[DATE]) * sign, 18431 h: toInt(match[HOUR]) * sign, 18432 m: toInt(match[MINUTE]) * sign, 18433 s: toInt(match[SECOND]) * sign, 18434 ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match 18435 18436 }; 18437 } else if (!!(match = isoRegex.exec(input))) { 18438 sign = match[1] === '-' ? -1 : 1; 18439 duration = { 18440 y: parseIso(match[2], sign), 18441 M: parseIso(match[3], sign), 18442 w: parseIso(match[4], sign), 18443 d: parseIso(match[5], sign), 18444 h: parseIso(match[6], sign), 18445 m: parseIso(match[7], sign), 18446 s: parseIso(match[8], sign) 18447 }; 18448 } else if (duration == null) { 18449 // checks for null or undefined 18450 duration = {}; 18451 } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { 18452 diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to)); 18453 duration = {}; 18454 duration.ms = diffRes.milliseconds; 18455 duration.M = diffRes.months; 18456 } 18457 18458 ret = new Duration(duration); 18459 18460 if (isDuration(input) && hasOwnProp(input, '_locale')) { 18461 ret._locale = input._locale; 18462 } 18463 18464 return ret; 18465 } 18466 18467 createDuration.fn = Duration.prototype; 18468 createDuration.invalid = createInvalid$1; 18469 18470 function parseIso(inp, sign) { 18471 // We'd normally use ~~inp for this, but unfortunately it also 18472 // converts floats to ints. 18473 // inp may be undefined, so careful calling replace on it. 18474 var res = inp && parseFloat(inp.replace(',', '.')); // apply sign while we're at it 18475 18476 return (isNaN(res) ? 0 : res) * sign; 18477 } 18478 18479 function positiveMomentsDifference(base, other) { 18480 var res = {}; 18481 res.months = other.month() - base.month() + (other.year() - base.year()) * 12; 18482 18483 if (base.clone().add(res.months, 'M').isAfter(other)) { 18484 --res.months; 18485 } 18486 18487 res.milliseconds = +other - +base.clone().add(res.months, 'M'); 18488 return res; 18489 } 18490 18491 function momentsDifference(base, other) { 18492 var res; 18493 18494 if (!(base.isValid() && other.isValid())) { 18495 return { 18496 milliseconds: 0, 18497 months: 0 18498 }; 18499 } 18500 18501 other = cloneWithOffset(other, base); 18502 18503 if (base.isBefore(other)) { 18504 res = positiveMomentsDifference(base, other); 18505 } else { 18506 res = positiveMomentsDifference(other, base); 18507 res.milliseconds = -res.milliseconds; 18508 res.months = -res.months; 18509 } 18510 18511 return res; 18512 } // TODO: remove 'name' arg after deprecation is removed 18513 18514 18515 function createAdder(direction, name) { 18516 return function (val, period) { 18517 var dur, tmp; //invert the arguments, but complain about it 18518 18519 if (period !== null && !isNaN(+period)) { 18520 deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'); 18521 tmp = val; 18522 val = period; 18523 period = tmp; 18524 } 18525 18526 val = typeof val === 'string' ? +val : val; 18527 dur = createDuration(val, period); 18528 addSubtract(this, dur, direction); 18529 return this; 18530 }; 18531 } 18532 18533 function addSubtract(mom, duration, isAdding, updateOffset) { 18534 var milliseconds = duration._milliseconds, 18535 days = absRound(duration._days), 18536 months = absRound(duration._months); 18537 18538 if (!mom.isValid()) { 18539 // No op 18540 return; 18541 } 18542 18543 updateOffset = updateOffset == null ? true : updateOffset; 18544 18545 if (months) { 18546 setMonth(mom, get(mom, 'Month') + months * isAdding); 18547 } 18548 18549 if (days) { 18550 set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); 18551 } 18552 18553 if (milliseconds) { 18554 mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); 18555 } 18556 18557 if (updateOffset) { 18558 hooks.updateOffset(mom, days || months); 18559 } 18560 } 18561 18562 var add = createAdder(1, 'add'); 18563 var subtract = createAdder(-1, 'subtract'); 18564 18565 function getCalendarFormat(myMoment, now) { 18566 var diff = myMoment.diff(now, 'days', true); 18567 return diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse'; 18568 } 18569 18570 function calendar$1(time, formats) { 18571 // We want to compare the start of today, vs this. 18572 // Getting start-of-today depends on whether we're local/utc/offset or not. 18573 var now = time || createLocal(), 18574 sod = cloneWithOffset(now, this).startOf('day'), 18575 format = hooks.calendarFormat(this, sod) || 'sameElse'; 18576 var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]); 18577 return this.format(output || this.localeData().calendar(format, this, createLocal(now))); 18578 } 18579 18580 function clone() { 18581 return new Moment(this); 18582 } 18583 18584 function isAfter(input, units) { 18585 var localInput = isMoment(input) ? input : createLocal(input); 18586 18587 if (!(this.isValid() && localInput.isValid())) { 18588 return false; 18589 } 18590 18591 units = normalizeUnits(units) || 'millisecond'; 18592 18593 if (units === 'millisecond') { 18594 return this.valueOf() > localInput.valueOf(); 18595 } else { 18596 return localInput.valueOf() < this.clone().startOf(units).valueOf(); 18597 } 18598 } 18599 18600 function isBefore(input, units) { 18601 var localInput = isMoment(input) ? input : createLocal(input); 18602 18603 if (!(this.isValid() && localInput.isValid())) { 18604 return false; 18605 } 18606 18607 units = normalizeUnits(units) || 'millisecond'; 18608 18609 if (units === 'millisecond') { 18610 return this.valueOf() < localInput.valueOf(); 18611 } else { 18612 return this.clone().endOf(units).valueOf() < localInput.valueOf(); 18613 } 18614 } 18615 18616 function isBetween(from, to, units, inclusivity) { 18617 var localFrom = isMoment(from) ? from : createLocal(from), 18618 localTo = isMoment(to) ? to : createLocal(to); 18619 18620 if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) { 18621 return false; 18622 } 18623 18624 inclusivity = inclusivity || '()'; 18625 return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units)); 18626 } 18627 18628 function isSame(input, units) { 18629 var localInput = isMoment(input) ? input : createLocal(input), 18630 inputMs; 18631 18632 if (!(this.isValid() && localInput.isValid())) { 18633 return false; 18634 } 18635 18636 units = normalizeUnits(units) || 'millisecond'; 18637 18638 if (units === 'millisecond') { 18639 return this.valueOf() === localInput.valueOf(); 18640 } else { 18641 inputMs = localInput.valueOf(); 18642 return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf(); 18643 } 18644 } 18645 18646 function isSameOrAfter(input, units) { 18647 return this.isSame(input, units) || this.isAfter(input, units); 18648 } 18649 18650 function isSameOrBefore(input, units) { 18651 return this.isSame(input, units) || this.isBefore(input, units); 18652 } 18653 18654 function diff(input, units, asFloat) { 18655 var that, zoneDelta, output; 18656 18657 if (!this.isValid()) { 18658 return NaN; 18659 } 18660 18661 that = cloneWithOffset(input, this); 18662 18663 if (!that.isValid()) { 18664 return NaN; 18665 } 18666 18667 zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; 18668 units = normalizeUnits(units); 18669 18670 switch (units) { 18671 case 'year': 18672 output = monthDiff(this, that) / 12; 18673 break; 18674 18675 case 'month': 18676 output = monthDiff(this, that); 18677 break; 18678 18679 case 'quarter': 18680 output = monthDiff(this, that) / 3; 18681 break; 18682 18683 case 'second': 18684 output = (this - that) / 1e3; 18685 break; 18686 // 1000 18687 18688 case 'minute': 18689 output = (this - that) / 6e4; 18690 break; 18691 // 1000 * 60 18692 18693 case 'hour': 18694 output = (this - that) / 36e5; 18695 break; 18696 // 1000 * 60 * 60 18697 18698 case 'day': 18699 output = (this - that - zoneDelta) / 864e5; 18700 break; 18701 // 1000 * 60 * 60 * 24, negate dst 18702 18703 case 'week': 18704 output = (this - that - zoneDelta) / 6048e5; 18705 break; 18706 // 1000 * 60 * 60 * 24 * 7, negate dst 18707 18708 default: 18709 output = this - that; 18710 } 18711 18712 return asFloat ? output : absFloor(output); 18713 } 18714 18715 function monthDiff(a, b) { 18716 // difference in months 18717 var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), 18718 // b is in (anchor - 1 month, anchor + 1 month) 18719 anchor = a.clone().add(wholeMonthDiff, 'months'), 18720 anchor2, 18721 adjust; 18722 18723 if (b - anchor < 0) { 18724 anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); // linear across the month 18725 18726 adjust = (b - anchor) / (anchor - anchor2); 18727 } else { 18728 anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); // linear across the month 18729 18730 adjust = (b - anchor) / (anchor2 - anchor); 18731 } //check for negative zero, return zero if negative zero 18732 18733 18734 return -(wholeMonthDiff + adjust) || 0; 18735 } 18736 18737 hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; 18738 hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; 18739 18740 function toString() { 18741 return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); 18742 } 18743 18744 function toISOString(keepOffset) { 18745 if (!this.isValid()) { 18746 return null; 18747 } 18748 18749 var utc = keepOffset !== true; 18750 var m = utc ? this.clone().utc() : this; 18751 18752 if (m.year() < 0 || m.year() > 9999) { 18753 return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'); 18754 } 18755 18756 if (isFunction(Date.prototype.toISOString)) { 18757 // native implementation is ~50x faster, use it when we can 18758 if (utc) { 18759 return this.toDate().toISOString(); 18760 } else { 18761 return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z')); 18762 } 18763 } 18764 18765 return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'); 18766 } 18767 /** 18768 * Return a human readable representation of a moment that can 18769 * also be evaluated to get a new moment which is the same 18770 * 18771 * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects 18772 */ 18773 18774 18775 function inspect() { 18776 if (!this.isValid()) { 18777 return 'moment.invalid(/* ' + this._i + ' */)'; 18778 } 18779 18780 var func = 'moment'; 18781 var zone = ''; 18782 18783 if (!this.isLocal()) { 18784 func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; 18785 zone = 'Z'; 18786 } 18787 18788 var prefix = '[' + func + '("]'; 18789 var year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY'; 18790 var datetime = '-MM-DD[T]HH:mm:ss.SSS'; 18791 var suffix = zone + '[")]'; 18792 return this.format(prefix + year + datetime + suffix); 18793 } 18794 18795 function format(inputString) { 18796 if (!inputString) { 18797 inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat; 18798 } 18799 18800 var output = formatMoment(this, inputString); 18801 return this.localeData().postformat(output); 18802 } 18803 18804 function from(time, withoutSuffix) { 18805 if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) { 18806 return createDuration({ 18807 to: this, 18808 from: time 18809 }).locale(this.locale()).humanize(!withoutSuffix); 18810 } else { 18811 return this.localeData().invalidDate(); 18812 } 18813 } 18814 18815 function fromNow(withoutSuffix) { 18816 return this.from(createLocal(), withoutSuffix); 18817 } 18818 18819 function to(time, withoutSuffix) { 18820 if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) { 18821 return createDuration({ 18822 from: this, 18823 to: time 18824 }).locale(this.locale()).humanize(!withoutSuffix); 18825 } else { 18826 return this.localeData().invalidDate(); 18827 } 18828 } 18829 18830 function toNow(withoutSuffix) { 18831 return this.to(createLocal(), withoutSuffix); 18832 } // If passed a locale key, it will set the locale for this 18833 // instance. Otherwise, it will return the locale configuration 18834 // variables for this instance. 18835 18836 18837 function locale(key) { 18838 var newLocaleData; 18839 18840 if (key === undefined) { 18841 return this._locale._abbr; 18842 } else { 18843 newLocaleData = getLocale(key); 18844 18845 if (newLocaleData != null) { 18846 this._locale = newLocaleData; 18847 } 18848 18849 return this; 18850 } 18851 } 18852 18853 var lang = deprecate('moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) { 18854 if (key === undefined) { 18855 return this.localeData(); 18856 } else { 18857 return this.locale(key); 18858 } 18859 }); 18860 18861 function localeData() { 18862 return this._locale; 18863 } 18864 18865 var MS_PER_SECOND = 1000; 18866 var MS_PER_MINUTE = 60 * MS_PER_SECOND; 18867 var MS_PER_HOUR = 60 * MS_PER_MINUTE; 18868 var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; // actual modulo - handles negative numbers (for dates before 1970): 18869 18870 function mod$1(dividend, divisor) { 18871 return (dividend % divisor + divisor) % divisor; 18872 } 18873 18874 function localStartOfDate(y, m, d) { 18875 // the date constructor remaps years 0-99 to 1900-1999 18876 if (y < 100 && y >= 0) { 18877 // preserve leap years using a full 400 year cycle, then reset 18878 return new Date(y + 400, m, d) - MS_PER_400_YEARS; 18879 } else { 18880 return new Date(y, m, d).valueOf(); 18881 } 18882 } 18883 18884 function utcStartOfDate(y, m, d) { 18885 // Date.UTC remaps years 0-99 to 1900-1999 18886 if (y < 100 && y >= 0) { 18887 // preserve leap years using a full 400 year cycle, then reset 18888 return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS; 18889 } else { 18890 return Date.UTC(y, m, d); 18891 } 18892 } 18893 18894 function startOf(units) { 18895 var time; 18896 units = normalizeUnits(units); 18897 18898 if (units === undefined || units === 'millisecond' || !this.isValid()) { 18899 return this; 18900 } 18901 18902 var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; 18903 18904 switch (units) { 18905 case 'year': 18906 time = startOfDate(this.year(), 0, 1); 18907 break; 18908 18909 case 'quarter': 18910 time = startOfDate(this.year(), this.month() - this.month() % 3, 1); 18911 break; 18912 18913 case 'month': 18914 time = startOfDate(this.year(), this.month(), 1); 18915 break; 18916 18917 case 'week': 18918 time = startOfDate(this.year(), this.month(), this.date() - this.weekday()); 18919 break; 18920 18921 case 'isoWeek': 18922 time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1)); 18923 break; 18924 18925 case 'day': 18926 case 'date': 18927 time = startOfDate(this.year(), this.month(), this.date()); 18928 break; 18929 18930 case 'hour': 18931 time = this._d.valueOf(); 18932 time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR); 18933 break; 18934 18935 case 'minute': 18936 time = this._d.valueOf(); 18937 time -= mod$1(time, MS_PER_MINUTE); 18938 break; 18939 18940 case 'second': 18941 time = this._d.valueOf(); 18942 time -= mod$1(time, MS_PER_SECOND); 18943 break; 18944 } 18945 18946 this._d.setTime(time); 18947 18948 hooks.updateOffset(this, true); 18949 return this; 18950 } 18951 18952 function endOf(units) { 18953 var time; 18954 units = normalizeUnits(units); 18955 18956 if (units === undefined || units === 'millisecond' || !this.isValid()) { 18957 return this; 18958 } 18959 18960 var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; 18961 18962 switch (units) { 18963 case 'year': 18964 time = startOfDate(this.year() + 1, 0, 1) - 1; 18965 break; 18966 18967 case 'quarter': 18968 time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1; 18969 break; 18970 18971 case 'month': 18972 time = startOfDate(this.year(), this.month() + 1, 1) - 1; 18973 break; 18974 18975 case 'week': 18976 time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1; 18977 break; 18978 18979 case 'isoWeek': 18980 time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1; 18981 break; 18982 18983 case 'day': 18984 case 'date': 18985 time = startOfDate(this.year(), this.month(), this.date() + 1) - 1; 18986 break; 18987 18988 case 'hour': 18989 time = this._d.valueOf(); 18990 time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1; 18991 break; 18992 18993 case 'minute': 18994 time = this._d.valueOf(); 18995 time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1; 18996 break; 18997 18998 case 'second': 18999 time = this._d.valueOf(); 19000 time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1; 19001 break; 19002 } 19003 19004 this._d.setTime(time); 19005 19006 hooks.updateOffset(this, true); 19007 return this; 19008 } 19009 19010 function valueOf() { 19011 return this._d.valueOf() - (this._offset || 0) * 60000; 19012 } 19013 19014 function unix() { 19015 return Math.floor(this.valueOf() / 1000); 19016 } 19017 19018 function toDate() { 19019 return new Date(this.valueOf()); 19020 } 19021 19022 function toArray() { 19023 var m = this; 19024 return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; 19025 } 19026 19027 function toObject() { 19028 var m = this; 19029 return { 19030 years: m.year(), 19031 months: m.month(), 19032 date: m.date(), 19033 hours: m.hours(), 19034 minutes: m.minutes(), 19035 seconds: m.seconds(), 19036 milliseconds: m.milliseconds() 19037 }; 19038 } 19039 19040 function toJSON() { 19041 // new Date(NaN).toJSON() === null 19042 return this.isValid() ? this.toISOString() : null; 19043 } 19044 19045 function isValid$2() { 19046 return isValid(this); 19047 } 19048 19049 function parsingFlags() { 19050 return extend({}, getParsingFlags(this)); 19051 } 19052 19053 function invalidAt() { 19054 return getParsingFlags(this).overflow; 19055 } 19056 19057 function creationData() { 19058 return { 19059 input: this._i, 19060 format: this._f, 19061 locale: this._locale, 19062 isUTC: this._isUTC, 19063 strict: this._strict 19064 }; 19065 } // FORMATTING 19066 19067 19068 addFormatToken(0, ['gg', 2], 0, function () { 19069 return this.weekYear() % 100; 19070 }); 19071 addFormatToken(0, ['GG', 2], 0, function () { 19072 return this.isoWeekYear() % 100; 19073 }); 19074 19075 function addWeekYearFormatToken(token, getter) { 19076 addFormatToken(0, [token, token.length], 0, getter); 19077 } 19078 19079 addWeekYearFormatToken('gggg', 'weekYear'); 19080 addWeekYearFormatToken('ggggg', 'weekYear'); 19081 addWeekYearFormatToken('GGGG', 'isoWeekYear'); 19082 addWeekYearFormatToken('GGGGG', 'isoWeekYear'); // ALIASES 19083 19084 addUnitAlias('weekYear', 'gg'); 19085 addUnitAlias('isoWeekYear', 'GG'); // PRIORITY 19086 19087 addUnitPriority('weekYear', 1); 19088 addUnitPriority('isoWeekYear', 1); // PARSING 19089 19090 addRegexToken('G', matchSigned); 19091 addRegexToken('g', matchSigned); 19092 addRegexToken('GG', match1to2, match2); 19093 addRegexToken('gg', match1to2, match2); 19094 addRegexToken('GGGG', match1to4, match4); 19095 addRegexToken('gggg', match1to4, match4); 19096 addRegexToken('GGGGG', match1to6, match6); 19097 addRegexToken('ggggg', match1to6, match6); 19098 addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { 19099 week[token.substr(0, 2)] = toInt(input); 19100 }); 19101 addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { 19102 week[token] = hooks.parseTwoDigitYear(input); 19103 }); // MOMENTS 19104 19105 function getSetWeekYear(input) { 19106 return getSetWeekYearHelper.call(this, input, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy); 19107 } 19108 19109 function getSetISOWeekYear(input) { 19110 return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4); 19111 } 19112 19113 function getISOWeeksInYear() { 19114 return weeksInYear(this.year(), 1, 4); 19115 } 19116 19117 function getWeeksInYear() { 19118 var weekInfo = this.localeData()._week; 19119 19120 return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); 19121 } 19122 19123 function getSetWeekYearHelper(input, week, weekday, dow, doy) { 19124 var weeksTarget; 19125 19126 if (input == null) { 19127 return weekOfYear(this, dow, doy).year; 19128 } else { 19129 weeksTarget = weeksInYear(input, dow, doy); 19130 19131 if (week > weeksTarget) { 19132 week = weeksTarget; 19133 } 19134 19135 return setWeekAll.call(this, input, week, weekday, dow, doy); 19136 } 19137 } 19138 19139 function setWeekAll(weekYear, week, weekday, dow, doy) { 19140 var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), 19141 date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); 19142 this.year(date.getUTCFullYear()); 19143 this.month(date.getUTCMonth()); 19144 this.date(date.getUTCDate()); 19145 return this; 19146 } // FORMATTING 19147 19148 19149 addFormatToken('Q', 0, 'Qo', 'quarter'); // ALIASES 19150 19151 addUnitAlias('quarter', 'Q'); // PRIORITY 19152 19153 addUnitPriority('quarter', 7); // PARSING 19154 19155 addRegexToken('Q', match1); 19156 addParseToken('Q', function (input, array) { 19157 array[MONTH] = (toInt(input) - 1) * 3; 19158 }); // MOMENTS 19159 19160 function getSetQuarter(input) { 19161 return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); 19162 } // FORMATTING 19163 19164 19165 addFormatToken('D', ['DD', 2], 'Do', 'date'); // ALIASES 19166 19167 addUnitAlias('date', 'D'); // PRIORITY 19168 19169 addUnitPriority('date', 9); // PARSING 19170 19171 addRegexToken('D', match1to2); 19172 addRegexToken('DD', match1to2, match2); 19173 addRegexToken('Do', function (isStrict, locale) { 19174 // TODO: Remove "ordinalParse" fallback in next major release. 19175 return isStrict ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient; 19176 }); 19177 addParseToken(['D', 'DD'], DATE); 19178 addParseToken('Do', function (input, array) { 19179 array[DATE] = toInt(input.match(match1to2)[0]); 19180 }); // MOMENTS 19181 19182 var getSetDayOfMonth = makeGetSet('Date', true); // FORMATTING 19183 19184 addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); // ALIASES 19185 19186 addUnitAlias('dayOfYear', 'DDD'); // PRIORITY 19187 19188 addUnitPriority('dayOfYear', 4); // PARSING 19189 19190 addRegexToken('DDD', match1to3); 19191 addRegexToken('DDDD', match3); 19192 addParseToken(['DDD', 'DDDD'], function (input, array, config) { 19193 config._dayOfYear = toInt(input); 19194 }); // HELPERS 19195 // MOMENTS 19196 19197 function getSetDayOfYear(input) { 19198 var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; 19199 return input == null ? dayOfYear : this.add(input - dayOfYear, 'd'); 19200 } // FORMATTING 19201 19202 19203 addFormatToken('m', ['mm', 2], 0, 'minute'); // ALIASES 19204 19205 addUnitAlias('minute', 'm'); // PRIORITY 19206 19207 addUnitPriority('minute', 14); // PARSING 19208 19209 addRegexToken('m', match1to2); 19210 addRegexToken('mm', match1to2, match2); 19211 addParseToken(['m', 'mm'], MINUTE); // MOMENTS 19212 19213 var getSetMinute = makeGetSet('Minutes', false); // FORMATTING 19214 19215 addFormatToken('s', ['ss', 2], 0, 'second'); // ALIASES 19216 19217 addUnitAlias('second', 's'); // PRIORITY 19218 19219 addUnitPriority('second', 15); // PARSING 19220 19221 addRegexToken('s', match1to2); 19222 addRegexToken('ss', match1to2, match2); 19223 addParseToken(['s', 'ss'], SECOND); // MOMENTS 19224 19225 var getSetSecond = makeGetSet('Seconds', false); // FORMATTING 19226 19227 addFormatToken('S', 0, 0, function () { 19228 return ~~(this.millisecond() / 100); 19229 }); 19230 addFormatToken(0, ['SS', 2], 0, function () { 19231 return ~~(this.millisecond() / 10); 19232 }); 19233 addFormatToken(0, ['SSS', 3], 0, 'millisecond'); 19234 addFormatToken(0, ['SSSS', 4], 0, function () { 19235 return this.millisecond() * 10; 19236 }); 19237 addFormatToken(0, ['SSSSS', 5], 0, function () { 19238 return this.millisecond() * 100; 19239 }); 19240 addFormatToken(0, ['SSSSSS', 6], 0, function () { 19241 return this.millisecond() * 1000; 19242 }); 19243 addFormatToken(0, ['SSSSSSS', 7], 0, function () { 19244 return this.millisecond() * 10000; 19245 }); 19246 addFormatToken(0, ['SSSSSSSS', 8], 0, function () { 19247 return this.millisecond() * 100000; 19248 }); 19249 addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { 19250 return this.millisecond() * 1000000; 19251 }); // ALIASES 19252 19253 addUnitAlias('millisecond', 'ms'); // PRIORITY 19254 19255 addUnitPriority('millisecond', 16); // PARSING 19256 19257 addRegexToken('S', match1to3, match1); 19258 addRegexToken('SS', match1to3, match2); 19259 addRegexToken('SSS', match1to3, match3); 19260 var token; 19261 19262 for (token = 'SSSS'; token.length <= 9; token += 'S') { 19263 addRegexToken(token, matchUnsigned); 19264 } 19265 19266 function parseMs(input, array) { 19267 array[MILLISECOND] = toInt(('0.' + input) * 1000); 19268 } 19269 19270 for (token = 'S'; token.length <= 9; token += 'S') { 19271 addParseToken(token, parseMs); 19272 } // MOMENTS 19273 19274 19275 var getSetMillisecond = makeGetSet('Milliseconds', false); // FORMATTING 19276 19277 addFormatToken('z', 0, 0, 'zoneAbbr'); 19278 addFormatToken('zz', 0, 0, 'zoneName'); // MOMENTS 19279 19280 function getZoneAbbr() { 19281 return this._isUTC ? 'UTC' : ''; 19282 } 19283 19284 function getZoneName() { 19285 return this._isUTC ? 'Coordinated Universal Time' : ''; 19286 } 19287 19288 var proto = Moment.prototype; 19289 proto.add = add; 19290 proto.calendar = calendar$1; 19291 proto.clone = clone; 19292 proto.diff = diff; 19293 proto.endOf = endOf; 19294 proto.format = format; 19295 proto.from = from; 19296 proto.fromNow = fromNow; 19297 proto.to = to; 19298 proto.toNow = toNow; 19299 proto.get = stringGet; 19300 proto.invalidAt = invalidAt; 19301 proto.isAfter = isAfter; 19302 proto.isBefore = isBefore; 19303 proto.isBetween = isBetween; 19304 proto.isSame = isSame; 19305 proto.isSameOrAfter = isSameOrAfter; 19306 proto.isSameOrBefore = isSameOrBefore; 19307 proto.isValid = isValid$2; 19308 proto.lang = lang; 19309 proto.locale = locale; 19310 proto.localeData = localeData; 19311 proto.max = prototypeMax; 19312 proto.min = prototypeMin; 19313 proto.parsingFlags = parsingFlags; 19314 proto.set = stringSet; 19315 proto.startOf = startOf; 19316 proto.subtract = subtract; 19317 proto.toArray = toArray; 19318 proto.toObject = toObject; 19319 proto.toDate = toDate; 19320 proto.toISOString = toISOString; 19321 proto.inspect = inspect; 19322 proto.toJSON = toJSON; 19323 proto.toString = toString; 19324 proto.unix = unix; 19325 proto.valueOf = valueOf; 19326 proto.creationData = creationData; 19327 proto.year = getSetYear; 19328 proto.isLeapYear = getIsLeapYear; 19329 proto.weekYear = getSetWeekYear; 19330 proto.isoWeekYear = getSetISOWeekYear; 19331 proto.quarter = proto.quarters = getSetQuarter; 19332 proto.month = getSetMonth; 19333 proto.daysInMonth = getDaysInMonth; 19334 proto.week = proto.weeks = getSetWeek; 19335 proto.isoWeek = proto.isoWeeks = getSetISOWeek; 19336 proto.weeksInYear = getWeeksInYear; 19337 proto.isoWeeksInYear = getISOWeeksInYear; 19338 proto.date = getSetDayOfMonth; 19339 proto.day = proto.days = getSetDayOfWeek; 19340 proto.weekday = getSetLocaleDayOfWeek; 19341 proto.isoWeekday = getSetISODayOfWeek; 19342 proto.dayOfYear = getSetDayOfYear; 19343 proto.hour = proto.hours = getSetHour; 19344 proto.minute = proto.minutes = getSetMinute; 19345 proto.second = proto.seconds = getSetSecond; 19346 proto.millisecond = proto.milliseconds = getSetMillisecond; 19347 proto.utcOffset = getSetOffset; 19348 proto.utc = setOffsetToUTC; 19349 proto.local = setOffsetToLocal; 19350 proto.parseZone = setOffsetToParsedOffset; 19351 proto.hasAlignedHourOffset = hasAlignedHourOffset; 19352 proto.isDST = isDaylightSavingTime; 19353 proto.isLocal = isLocal; 19354 proto.isUtcOffset = isUtcOffset; 19355 proto.isUtc = isUtc; 19356 proto.isUTC = isUtc; 19357 proto.zoneAbbr = getZoneAbbr; 19358 proto.zoneName = getZoneName; 19359 proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); 19360 proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); 19361 proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); 19362 proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone); 19363 proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted); 19364 19365 function createUnix(input) { 19366 return createLocal(input * 1000); 19367 } 19368 19369 function createInZone() { 19370 return createLocal.apply(null, arguments).parseZone(); 19371 } 19372 19373 function preParsePostFormat(string) { 19374 return string; 19375 } 19376 19377 var proto$1 = Locale.prototype; 19378 proto$1.calendar = calendar; 19379 proto$1.longDateFormat = longDateFormat; 19380 proto$1.invalidDate = invalidDate; 19381 proto$1.ordinal = ordinal; 19382 proto$1.preparse = preParsePostFormat; 19383 proto$1.postformat = preParsePostFormat; 19384 proto$1.relativeTime = relativeTime; 19385 proto$1.pastFuture = pastFuture; 19386 proto$1.set = set; 19387 proto$1.months = localeMonths; 19388 proto$1.monthsShort = localeMonthsShort; 19389 proto$1.monthsParse = localeMonthsParse; 19390 proto$1.monthsRegex = monthsRegex; 19391 proto$1.monthsShortRegex = monthsShortRegex; 19392 proto$1.week = localeWeek; 19393 proto$1.firstDayOfYear = localeFirstDayOfYear; 19394 proto$1.firstDayOfWeek = localeFirstDayOfWeek; 19395 proto$1.weekdays = localeWeekdays; 19396 proto$1.weekdaysMin = localeWeekdaysMin; 19397 proto$1.weekdaysShort = localeWeekdaysShort; 19398 proto$1.weekdaysParse = localeWeekdaysParse; 19399 proto$1.weekdaysRegex = weekdaysRegex; 19400 proto$1.weekdaysShortRegex = weekdaysShortRegex; 19401 proto$1.weekdaysMinRegex = weekdaysMinRegex; 19402 proto$1.isPM = localeIsPM; 19403 proto$1.meridiem = localeMeridiem; 19404 19405 function get$1(format, index, field, setter) { 19406 var locale = getLocale(); 19407 var utc = createUTC().set(setter, index); 19408 return locale[field](utc, format); 19409 } 19410 19411 function listMonthsImpl(format, index, field) { 19412 if (isNumber(format)) { 19413 index = format; 19414 format = undefined; 19415 } 19416 19417 format = format || ''; 19418 19419 if (index != null) { 19420 return get$1(format, index, field, 'month'); 19421 } 19422 19423 var i; 19424 var out = []; 19425 19426 for (i = 0; i < 12; i++) { 19427 out[i] = get$1(format, i, field, 'month'); 19428 } 19429 19430 return out; 19431 } // () 19432 // (5) 19433 // (fmt, 5) 19434 // (fmt) 19435 // (true) 19436 // (true, 5) 19437 // (true, fmt, 5) 19438 // (true, fmt) 19439 19440 19441 function listWeekdaysImpl(localeSorted, format, index, field) { 19442 if (typeof localeSorted === 'boolean') { 19443 if (isNumber(format)) { 19444 index = format; 19445 format = undefined; 19446 } 19447 19448 format = format || ''; 19449 } else { 19450 format = localeSorted; 19451 index = format; 19452 localeSorted = false; 19453 19454 if (isNumber(format)) { 19455 index = format; 19456 format = undefined; 19457 } 19458 19459 format = format || ''; 19460 } 19461 19462 var locale = getLocale(), 19463 shift = localeSorted ? locale._week.dow : 0; 19464 19465 if (index != null) { 19466 return get$1(format, (index + shift) % 7, field, 'day'); 19467 } 19468 19469 var i; 19470 var out = []; 19471 19472 for (i = 0; i < 7; i++) { 19473 out[i] = get$1(format, (i + shift) % 7, field, 'day'); 19474 } 19475 19476 return out; 19477 } 19478 19479 function listMonths(format, index) { 19480 return listMonthsImpl(format, index, 'months'); 19481 } 19482 19483 function listMonthsShort(format, index) { 19484 return listMonthsImpl(format, index, 'monthsShort'); 19485 } 19486 19487 function listWeekdays(localeSorted, format, index) { 19488 return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); 19489 } 19490 19491 function listWeekdaysShort(localeSorted, format, index) { 19492 return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); 19493 } 19494 19495 function listWeekdaysMin(localeSorted, format, index) { 19496 return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); 19497 } 19498 19499 getSetGlobalLocale('en', { 19500 dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, 19501 ordinal: function (number) { 19502 var b = number % 10, 19503 output = toInt(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th'; 19504 return number + output; 19505 } 19506 }); // Side effect imports 19507 19508 hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale); 19509 hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale); 19510 var mathAbs = Math.abs; 19511 19512 function abs() { 19513 var data = this._data; 19514 this._milliseconds = mathAbs(this._milliseconds); 19515 this._days = mathAbs(this._days); 19516 this._months = mathAbs(this._months); 19517 data.milliseconds = mathAbs(data.milliseconds); 19518 data.seconds = mathAbs(data.seconds); 19519 data.minutes = mathAbs(data.minutes); 19520 data.hours = mathAbs(data.hours); 19521 data.months = mathAbs(data.months); 19522 data.years = mathAbs(data.years); 19523 return this; 19524 } 19525 19526 function addSubtract$1(duration, input, value, direction) { 19527 var other = createDuration(input, value); 19528 duration._milliseconds += direction * other._milliseconds; 19529 duration._days += direction * other._days; 19530 duration._months += direction * other._months; 19531 return duration._bubble(); 19532 } // supports only 2.0-style add(1, 's') or add(duration) 19533 19534 19535 function add$1(input, value) { 19536 return addSubtract$1(this, input, value, 1); 19537 } // supports only 2.0-style subtract(1, 's') or subtract(duration) 19538 19539 19540 function subtract$1(input, value) { 19541 return addSubtract$1(this, input, value, -1); 19542 } 19543 19544 function absCeil(number) { 19545 if (number < 0) { 19546 return Math.floor(number); 19547 } else { 19548 return Math.ceil(number); 19549 } 19550 } 19551 19552 function bubble() { 19553 var milliseconds = this._milliseconds; 19554 var days = this._days; 19555 var months = this._months; 19556 var data = this._data; 19557 var seconds, minutes, hours, years, monthsFromDays; // if we have a mix of positive and negative values, bubble down first 19558 // check: https://github.com/moment/moment/issues/2166 19559 19560 if (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) { 19561 milliseconds += absCeil(monthsToDays(months) + days) * 864e5; 19562 days = 0; 19563 months = 0; 19564 } // The following code bubbles up values, see the tests for 19565 // examples of what that means. 19566 19567 19568 data.milliseconds = milliseconds % 1000; 19569 seconds = absFloor(milliseconds / 1000); 19570 data.seconds = seconds % 60; 19571 minutes = absFloor(seconds / 60); 19572 data.minutes = minutes % 60; 19573 hours = absFloor(minutes / 60); 19574 data.hours = hours % 24; 19575 days += absFloor(hours / 24); // convert days to months 19576 19577 monthsFromDays = absFloor(daysToMonths(days)); 19578 months += monthsFromDays; 19579 days -= absCeil(monthsToDays(monthsFromDays)); // 12 months -> 1 year 19580 19581 years = absFloor(months / 12); 19582 months %= 12; 19583 data.days = days; 19584 data.months = months; 19585 data.years = years; 19586 return this; 19587 } 19588 19589 function daysToMonths(days) { 19590 // 400 years have 146097 days (taking into account leap year rules) 19591 // 400 years have 12 months === 4800 19592 return days * 4800 / 146097; 19593 } 19594 19595 function monthsToDays(months) { 19596 // the reverse of daysToMonths 19597 return months * 146097 / 4800; 19598 } 19599 19600 function as(units) { 19601 if (!this.isValid()) { 19602 return NaN; 19603 } 19604 19605 var days; 19606 var months; 19607 var milliseconds = this._milliseconds; 19608 units = normalizeUnits(units); 19609 19610 if (units === 'month' || units === 'quarter' || units === 'year') { 19611 days = this._days + milliseconds / 864e5; 19612 months = this._months + daysToMonths(days); 19613 19614 switch (units) { 19615 case 'month': 19616 return months; 19617 19618 case 'quarter': 19619 return months / 3; 19620 19621 case 'year': 19622 return months / 12; 19623 } 19624 } else { 19625 // handle milliseconds separately because of floating point math errors (issue #1867) 19626 days = this._days + Math.round(monthsToDays(this._months)); 19627 19628 switch (units) { 19629 case 'week': 19630 return days / 7 + milliseconds / 6048e5; 19631 19632 case 'day': 19633 return days + milliseconds / 864e5; 19634 19635 case 'hour': 19636 return days * 24 + milliseconds / 36e5; 19637 19638 case 'minute': 19639 return days * 1440 + milliseconds / 6e4; 19640 19641 case 'second': 19642 return days * 86400 + milliseconds / 1000; 19643 // Math.floor prevents floating point math errors here 19644 19645 case 'millisecond': 19646 return Math.floor(days * 864e5) + milliseconds; 19647 19648 default: 19649 throw new Error('Unknown unit ' + units); 19650 } 19651 } 19652 } // TODO: Use this.as('ms')? 19653 19654 19655 function valueOf$1() { 19656 if (!this.isValid()) { 19657 return NaN; 19658 } 19659 19660 return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6; 19661 } 19662 19663 function makeAs(alias) { 19664 return function () { 19665 return this.as(alias); 19666 }; 19667 } 19668 19669 var asMilliseconds = makeAs('ms'); 19670 var asSeconds = makeAs('s'); 19671 var asMinutes = makeAs('m'); 19672 var asHours = makeAs('h'); 19673 var asDays = makeAs('d'); 19674 var asWeeks = makeAs('w'); 19675 var asMonths = makeAs('M'); 19676 var asQuarters = makeAs('Q'); 19677 var asYears = makeAs('y'); 19678 19679 function clone$1() { 19680 return createDuration(this); 19681 } 19682 19683 function get$2(units) { 19684 units = normalizeUnits(units); 19685 return this.isValid() ? this[units + 's']() : NaN; 19686 } 19687 19688 function makeGetter(name) { 19689 return function () { 19690 return this.isValid() ? this._data[name] : NaN; 19691 }; 19692 } 19693 19694 var milliseconds = makeGetter('milliseconds'); 19695 var seconds = makeGetter('seconds'); 19696 var minutes = makeGetter('minutes'); 19697 var hours = makeGetter('hours'); 19698 var days = makeGetter('days'); 19699 var months = makeGetter('months'); 19700 var years = makeGetter('years'); 19701 19702 function weeks() { 19703 return absFloor(this.days() / 7); 19704 } 19705 19706 var round = Math.round; 19707 var thresholds = { 19708 ss: 44, 19709 // a few seconds to seconds 19710 s: 45, 19711 // seconds to minute 19712 m: 45, 19713 // minutes to hour 19714 h: 22, 19715 // hours to day 19716 d: 26, 19717 // days to month 19718 M: 11 // months to year 19719 19720 }; // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize 19721 19722 function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { 19723 return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); 19724 } 19725 19726 function relativeTime$1(posNegDuration, withoutSuffix, locale) { 19727 var duration = createDuration(posNegDuration).abs(); 19728 var seconds = round(duration.as('s')); 19729 var minutes = round(duration.as('m')); 19730 var hours = round(duration.as('h')); 19731 var days = round(duration.as('d')); 19732 var months = round(duration.as('M')); 19733 var years = round(duration.as('y')); 19734 var a = seconds <= thresholds.ss && ['s', seconds] || seconds < thresholds.s && ['ss', seconds] || minutes <= 1 && ['m'] || minutes < thresholds.m && ['mm', minutes] || hours <= 1 && ['h'] || hours < thresholds.h && ['hh', hours] || days <= 1 && ['d'] || days < thresholds.d && ['dd', days] || months <= 1 && ['M'] || months < thresholds.M && ['MM', months] || years <= 1 && ['y'] || ['yy', years]; 19735 a[2] = withoutSuffix; 19736 a[3] = +posNegDuration > 0; 19737 a[4] = locale; 19738 return substituteTimeAgo.apply(null, a); 19739 } // This function allows you to set the rounding function for relative time strings 19740 19741 19742 function getSetRelativeTimeRounding(roundingFunction) { 19743 if (roundingFunction === undefined) { 19744 return round; 19745 } 19746 19747 if (typeof roundingFunction === 'function') { 19748 round = roundingFunction; 19749 return true; 19750 } 19751 19752 return false; 19753 } // This function allows you to set a threshold for relative time strings 19754 19755 19756 function getSetRelativeTimeThreshold(threshold, limit) { 19757 if (thresholds[threshold] === undefined) { 19758 return false; 19759 } 19760 19761 if (limit === undefined) { 19762 return thresholds[threshold]; 19763 } 19764 19765 thresholds[threshold] = limit; 19766 19767 if (threshold === 's') { 19768 thresholds.ss = limit - 1; 19769 } 19770 19771 return true; 19772 } 19773 19774 function humanize(withSuffix) { 19775 if (!this.isValid()) { 19776 return this.localeData().invalidDate(); 19777 } 19778 19779 var locale = this.localeData(); 19780 var output = relativeTime$1(this, !withSuffix, locale); 19781 19782 if (withSuffix) { 19783 output = locale.pastFuture(+this, output); 19784 } 19785 19786 return locale.postformat(output); 19787 } 19788 19789 var abs$1 = Math.abs; 19790 19791 function sign(x) { 19792 return (x > 0) - (x < 0) || +x; 19793 } 19794 19795 function toISOString$1() { 19796 // for ISO strings we do not use the normal bubbling rules: 19797 // * milliseconds bubble up until they become hours 19798 // * days do not bubble at all 19799 // * months bubble up until they become years 19800 // This is because there is no context-free conversion between hours and days 19801 // (think of clock changes) 19802 // and also not between days and months (28-31 days per month) 19803 if (!this.isValid()) { 19804 return this.localeData().invalidDate(); 19805 } 19806 19807 var seconds = abs$1(this._milliseconds) / 1000; 19808 var days = abs$1(this._days); 19809 var months = abs$1(this._months); 19810 var minutes, hours, years; // 3600 seconds -> 60 minutes -> 1 hour 19811 19812 minutes = absFloor(seconds / 60); 19813 hours = absFloor(minutes / 60); 19814 seconds %= 60; 19815 minutes %= 60; // 12 months -> 1 year 19816 19817 years = absFloor(months / 12); 19818 months %= 12; // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js 19819 19820 var Y = years; 19821 var M = months; 19822 var D = days; 19823 var h = hours; 19824 var m = minutes; 19825 var s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; 19826 var total = this.asSeconds(); 19827 19828 if (!total) { 19829 // this is the same as C#'s (Noda) and python (isodate)... 19830 // but not other JS (goog.date) 19831 return 'P0D'; 19832 } 19833 19834 var totalSign = total < 0 ? '-' : ''; 19835 var ymSign = sign(this._months) !== sign(total) ? '-' : ''; 19836 var daysSign = sign(this._days) !== sign(total) ? '-' : ''; 19837 var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; 19838 return totalSign + 'P' + (Y ? ymSign + Y + 'Y' : '') + (M ? ymSign + M + 'M' : '') + (D ? daysSign + D + 'D' : '') + (h || m || s ? 'T' : '') + (h ? hmsSign + h + 'H' : '') + (m ? hmsSign + m + 'M' : '') + (s ? hmsSign + s + 'S' : ''); 19839 } 19840 19841 var proto$2 = Duration.prototype; 19842 proto$2.isValid = isValid$1; 19843 proto$2.abs = abs; 19844 proto$2.add = add$1; 19845 proto$2.subtract = subtract$1; 19846 proto$2.as = as; 19847 proto$2.asMilliseconds = asMilliseconds; 19848 proto$2.asSeconds = asSeconds; 19849 proto$2.asMinutes = asMinutes; 19850 proto$2.asHours = asHours; 19851 proto$2.asDays = asDays; 19852 proto$2.asWeeks = asWeeks; 19853 proto$2.asMonths = asMonths; 19854 proto$2.asQuarters = asQuarters; 19855 proto$2.asYears = asYears; 19856 proto$2.valueOf = valueOf$1; 19857 proto$2._bubble = bubble; 19858 proto$2.clone = clone$1; 19859 proto$2.get = get$2; 19860 proto$2.milliseconds = milliseconds; 19861 proto$2.seconds = seconds; 19862 proto$2.minutes = minutes; 19863 proto$2.hours = hours; 19864 proto$2.days = days; 19865 proto$2.weeks = weeks; 19866 proto$2.months = months; 19867 proto$2.years = years; 19868 proto$2.humanize = humanize; 19869 proto$2.toISOString = toISOString$1; 19870 proto$2.toString = toISOString$1; 19871 proto$2.toJSON = toISOString$1; 19872 proto$2.locale = locale; 19873 proto$2.localeData = localeData; 19874 proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1); 19875 proto$2.lang = lang; // Side effect imports 19876 // FORMATTING 19877 19878 addFormatToken('X', 0, 0, 'unix'); 19879 addFormatToken('x', 0, 0, 'valueOf'); // PARSING 19880 19881 addRegexToken('x', matchSigned); 19882 addRegexToken('X', matchTimestamp); 19883 addParseToken('X', function (input, array, config) { 19884 config._d = new Date(parseFloat(input, 10) * 1000); 19885 }); 19886 addParseToken('x', function (input, array, config) { 19887 config._d = new Date(toInt(input)); 19888 }); // Side effect imports 19889 19890 hooks.version = '2.24.0'; 19891 setHookCallback(createLocal); 19892 hooks.fn = proto; 19893 hooks.min = min; 19894 hooks.max = max; 19895 hooks.now = now; 19896 hooks.utc = createUTC; 19897 hooks.unix = createUnix; 19898 hooks.months = listMonths; 19899 hooks.isDate = isDate; 19900 hooks.locale = getSetGlobalLocale; 19901 hooks.invalid = createInvalid; 19902 hooks.duration = createDuration; 19903 hooks.isMoment = isMoment; 19904 hooks.weekdays = listWeekdays; 19905 hooks.parseZone = createInZone; 19906 hooks.localeData = getLocale; 19907 hooks.isDuration = isDuration; 19908 hooks.monthsShort = listMonthsShort; 19909 hooks.weekdaysMin = listWeekdaysMin; 19910 hooks.defineLocale = defineLocale; 19911 hooks.updateLocale = updateLocale; 19912 hooks.locales = listLocales; 19913 hooks.weekdaysShort = listWeekdaysShort; 19914 hooks.normalizeUnits = normalizeUnits; 19915 hooks.relativeTimeRounding = getSetRelativeTimeRounding; 19916 hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; 19917 hooks.calendarFormat = getCalendarFormat; 19918 hooks.prototype = proto; // currently HTML5 input type only supports 24-hour formats 19919 19920 hooks.HTML5_FMT = { 19921 DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', 19922 // <input type="datetime-local" /> 19923 DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', 19924 // <input type="datetime-local" step="1" /> 19925 DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', 19926 // <input type="datetime-local" step="0.001" /> 19927 DATE: 'YYYY-MM-DD', 19928 // <input type="date" /> 19929 TIME: 'HH:mm', 19930 // <input type="time" /> 19931 TIME_SECONDS: 'HH:mm:ss', 19932 // <input type="time" step="1" /> 19933 TIME_MS: 'HH:mm:ss.SSS', 19934 // <input type="time" step="0.001" /> 19935 WEEK: 'GGGG-[W]WW', 19936 // <input type="week" /> 19937 MONTH: 'YYYY-MM' // <input type="month" /> 19938 19939 }; 19940 return hooks; 19941}); 19942/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) 19943 19944/***/ }), 19945
vendor: 5,344 bytes, lines 19946-20163
19946/***/ "./node_modules/process/browser.js": 19947/*!*****************************************!*\ 19948 !*** ./node_modules/process/browser.js ***! 19949 \*****************************************/ 19950/*! no static exports found */ 19951/***/ (function(module, exports) { 19952 19953// shim for using process in browser 19954var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it 19955// don't break things. But we need to wrap it in a try catch in case it is 19956// wrapped in strict mode code which doesn't define any globals. It's inside a 19957// function because try/catches deoptimize in certain engines. 19958 19959var cachedSetTimeout; 19960var cachedClearTimeout; 19961 19962function defaultSetTimout() { 19963 throw new Error('setTimeout has not been defined'); 19964} 19965 19966function defaultClearTimeout() { 19967 throw new Error('clearTimeout has not been defined'); 19968} 19969 19970(function () { 19971 try { 19972 if (typeof setTimeout === 'function') { 19973 cachedSetTimeout = setTimeout; 19974 } else { 19975 cachedSetTimeout = defaultSetTimout; 19976 } 19977 } catch (e) { 19978 cachedSetTimeout = defaultSetTimout; 19979 } 19980 19981 try { 19982 if (typeof clearTimeout === 'function') { 19983 cachedClearTimeout = clearTimeout; 19984 } else { 19985 cachedClearTimeout = defaultClearTimeout; 19986 } 19987 } catch (e) { 19988 cachedClearTimeout = defaultClearTimeout; 19989 } 19990})(); 19991 19992function runTimeout(fun) { 19993 if (cachedSetTimeout === setTimeout) { 19994 //normal enviroments in sane situations 19995 return setTimeout(fun, 0); 19996 } // if setTimeout wasn't available but was latter defined 19997 19998 19999 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { 20000 cachedSetTimeout = setTimeout; 20001 return setTimeout(fun, 0); 20002 } 20003 20004 try { 20005 // when when somebody has screwed with setTimeout but no I.E. maddness 20006 return cachedSetTimeout(fun, 0); 20007 } catch (e) { 20008 try { 20009 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 20010 return cachedSetTimeout.call(null, fun, 0); 20011 } catch (e) { 20012 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error 20013 return cachedSetTimeout.call(this, fun, 0); 20014 } 20015 } 20016} 20017 20018function runClearTimeout(marker) { 20019 if (cachedClearTimeout === clearTimeout) { 20020 //normal enviroments in sane situations 20021 return clearTimeout(marker); 20022 } // if clearTimeout wasn't available but was latter defined 20023 20024 20025 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { 20026 cachedClearTimeout = clearTimeout; 20027 return clearTimeout(marker); 20028 } 20029 20030 try { 20031 // when when somebody has screwed with setTimeout but no I.E. maddness 20032 return cachedClearTimeout(marker); 20033 } catch (e) { 20034 try { 20035 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 20036 return cachedClearTimeout.call(null, marker); 20037 } catch (e) { 20038 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. 20039 // Some versions of I.E. have different rules for clearTimeout vs setTimeout 20040 return cachedClearTimeout.call(this, marker); 20041 } 20042 } 20043} 20044 20045var queue = []; 20046var draining = false; 20047var currentQueue; 20048var queueIndex = -1; 20049 20050function cleanUpNextTick() { 20051 if (!draining || !currentQueue) { 20052 return; 20053 } 20054 20055 draining = false; 20056 20057 if (currentQueue.length) { 20058 queue = currentQueue.concat(queue); 20059 } else { 20060 queueIndex = -1; 20061 } 20062 20063 if (queue.length) { 20064 drainQueue(); 20065 } 20066} 20067 20068function drainQueue() { 20069 if (draining) { 20070 return; 20071 } 20072 20073 var timeout = runTimeout(cleanUpNextTick); 20074 draining = true; 20075 var len = queue.length; 20076 20077 while (len) { 20078 currentQueue = queue; 20079 queue = []; 20080 20081 while (++queueIndex < len) { 20082 if (currentQueue) { 20083 currentQueue[queueIndex].run(); 20084 } 20085 } 20086 20087 queueIndex = -1; 20088 len = queue.length; 20089 } 20090 20091 currentQueue = null; 20092 draining = false; 20093 runClearTimeout(timeout); 20094} 20095 20096process.nextTick = function (fun) { 20097 var args = new Array(arguments.length - 1); 20098 20099 if (arguments.length > 1) { 20100 for (var i = 1; i < arguments.length; i++) { 20101 args[i - 1] = arguments[i]; 20102 } 20103 } 20104 20105 queue.push(new Item(fun, args)); 20106 20107 if (queue.length === 1 && !draining) { 20108 runTimeout(drainQueue); 20109 } 20110}; // v8 likes predictible objects 20111 20112 20113function Item(fun, array) { 20114 this.fun = fun; 20115 this.array = array; 20116} 20117 20118Item.prototype.run = function () { 20119 this.fun.apply(null, this.array); 20120}; 20121 20122process.title = 'browser'; 20123process.browser = true; 20124process.env = {}; 20125process.argv = []; 20126process.version = ''; // empty string to avoid regexp issues 20127 20128process.versions = {}; 20129 20130function noop() {} 20131 20132process.on = noop; 20133process.addListener = noop; 20134process.once = noop; 20135process.off = noop; 20136process.removeListener = noop; 20137process.removeAllListeners = noop; 20138process.emit = noop; 20139process.prependListener = noop; 20140process.prependOnceListener = noop; 20141 20142process.listeners = function (name) { 20143 return []; 20144}; 20145 20146process.binding = function (name) { 20147 throw new Error('process.binding is not supported'); 20148}; 20149 20150process.cwd = function () { 20151 return '/'; 20152}; 20153 20154process.chdir = function (dir) { 20155 throw new Error('process.chdir is not supported'); 20156}; 20157 20158process.umask = function () { 20159 return 0; 20160}; 20161 20162/***/ }), 20163
vendor: 24,129 bytes, lines 20164-20878
20164/***/ "./node_modules/regenerator-runtime/runtime.js": 20165/*!*****************************************************!*\ 20166 !*** ./node_modules/regenerator-runtime/runtime.js ***! 20167 \*****************************************************/ 20168/*! no static exports found */ 20169/***/ (function(module, exports, __webpack_require__) { 20170 20171/** 20172 * Copyright (c) 2014-present, Facebook, Inc. 20173 * 20174 * This source code is licensed under the MIT license found in the 20175 * LICENSE file in the root directory of this source tree. 20176 */ 20177var runtime = function (exports) { 20178 "use strict"; 20179 20180 var Op = Object.prototype; 20181 var hasOwn = Op.hasOwnProperty; 20182 var undefined; // More compressible than void 0. 20183 20184 var $Symbol = typeof Symbol === "function" ? Symbol : {}; 20185 var iteratorSymbol = $Symbol.iterator || "@@iterator"; 20186 var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; 20187 var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; 20188 20189 function wrap(innerFn, outerFn, self, tryLocsList) { 20190 // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. 20191 var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; 20192 var generator = Object.create(protoGenerator.prototype); 20193 var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next, 20194 // .throw, and .return methods. 20195 20196 generator._invoke = makeInvokeMethod(innerFn, self, context); 20197 return generator; 20198 } 20199 20200 exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion 20201 // record like context.tryEntries[i].completion. This interface could 20202 // have been (and was previously) designed to take a closure to be 20203 // invoked without arguments, but in all the cases we care about we 20204 // already have an existing method we want to call, so there's no need 20205 // to create a new function object. We can even get away with assuming 20206 // the method takes exactly one argument, since that happens to be true 20207 // in every case, so we don't have to touch the arguments object. The 20208 // only additional allocation required is the completion record, which 20209 // has a stable shape and so hopefully should be cheap to allocate. 20210 20211 function tryCatch(fn, obj, arg) { 20212 try { 20213 return { 20214 type: "normal", 20215 arg: fn.call(obj, arg) 20216 }; 20217 } catch (err) { 20218 return { 20219 type: "throw", 20220 arg: err 20221 }; 20222 } 20223 } 20224 20225 var GenStateSuspendedStart = "suspendedStart"; 20226 var GenStateSuspendedYield = "suspendedYield"; 20227 var GenStateExecuting = "executing"; 20228 var GenStateCompleted = "completed"; // Returning this object from the innerFn has the same effect as 20229 // breaking out of the dispatch switch statement. 20230 20231 var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and 20232 // .constructor.prototype properties for functions that return Generator 20233 // objects. For full spec compliance, you may wish to configure your 20234 // minifier not to mangle the names of these two functions. 20235 20236 function Generator() {} 20237 20238 function GeneratorFunction() {} 20239 20240 function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that 20241 // don't natively support it. 20242 20243 20244 var IteratorPrototype = {}; 20245 20246 IteratorPrototype[iteratorSymbol] = function () { 20247 return this; 20248 }; 20249 20250 var getProto = Object.getPrototypeOf; 20251 var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); 20252 20253 if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { 20254 // This environment has a native %IteratorPrototype%; use it instead 20255 // of the polyfill. 20256 IteratorPrototype = NativeIteratorPrototype; 20257 } 20258 20259 var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); 20260 GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; 20261 GeneratorFunctionPrototype.constructor = GeneratorFunction; 20262 GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; // Helper for defining the .next, .throw, and .return methods of the 20263 // Iterator interface in terms of a single ._invoke method. 20264 20265 function defineIteratorMethods(prototype) { 20266 ["next", "throw", "return"].forEach(function (method) { 20267 prototype[method] = function (arg) { 20268 return this._invoke(method, arg); 20269 }; 20270 }); 20271 } 20272 20273 exports.isGeneratorFunction = function (genFun) { 20274 var ctor = typeof genFun === "function" && genFun.constructor; 20275 return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can 20276 // do is to check its .name property. 20277 (ctor.displayName || ctor.name) === "GeneratorFunction" : false; 20278 }; 20279 20280 exports.mark = function (genFun) { 20281 if (Object.setPrototypeOf) { 20282 Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); 20283 } else { 20284 genFun.__proto__ = GeneratorFunctionPrototype; 20285 20286 if (!(toStringTagSymbol in genFun)) { 20287 genFun[toStringTagSymbol] = "GeneratorFunction"; 20288 } 20289 } 20290 20291 genFun.prototype = Object.create(Gp); 20292 return genFun; 20293 }; // Within the body of any async function, `await x` is transformed to 20294 // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test 20295 // `hasOwn.call(value, "__await")` to determine if the yielded value is 20296 // meant to be awaited. 20297 20298 20299 exports.awrap = function (arg) { 20300 return { 20301 __await: arg 20302 }; 20303 }; 20304 20305 function AsyncIterator(generator) { 20306 function invoke(method, arg, resolve, reject) { 20307 var record = tryCatch(generator[method], generator, arg); 20308 20309 if (record.type === "throw") { 20310 reject(record.arg); 20311 } else { 20312 var result = record.arg; 20313 var value = result.value; 20314 20315 if (value && typeof value === "object" && hasOwn.call(value, "__await")) { 20316 return Promise.resolve(value.__await).then(function (value) { 20317 invoke("next", value, resolve, reject); 20318 }, function (err) { 20319 invoke("throw", err, resolve, reject); 20320 }); 20321 } 20322 20323 return Promise.resolve(value).then(function (unwrapped) { 20324 // When a yielded Promise is resolved, its final value becomes 20325 // the .value of the Promise<{value,done}> result for the 20326 // current iteration. 20327 result.value = unwrapped; 20328 resolve(result); 20329 }, function (error) { 20330 // If a rejected Promise was yielded, throw the rejection back 20331 // into the async generator function so it can be handled there. 20332 return invoke("throw", error, resolve, reject); 20333 }); 20334 } 20335 } 20336 20337 var previousPromise; 20338 20339 function enqueue(method, arg) { 20340 function callInvokeWithMethodAndArg() { 20341 return new Promise(function (resolve, reject) { 20342 invoke(method, arg, resolve, reject); 20343 }); 20344 } 20345 20346 return previousPromise = // If enqueue has been called before, then we want to wait until 20347 // all previous Promises have been resolved before calling invoke, 20348 // so that results are always delivered in the correct order. If 20349 // enqueue has not been called before, then it is important to 20350 // call invoke immediately, without waiting on a callback to fire, 20351 // so that the async generator function has the opportunity to do 20352 // any necessary setup in a predictable way. This predictability 20353 // is why the Promise constructor synchronously invokes its 20354 // executor callback, and why async functions synchronously 20355 // execute code before the first await. Since we implement simple 20356 // async functions in terms of async generators, it is especially 20357 // important to get this right, even though it requires care. 20358 previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later 20359 // invocations of the iterator. 20360 callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); 20361 } // Define the unified helper method that is used to implement .next, 20362 // .throw, and .return (see defineIteratorMethods). 20363 20364 20365 this._invoke = enqueue; 20366 } 20367 20368 defineIteratorMethods(AsyncIterator.prototype); 20369 20370 AsyncIterator.prototype[asyncIteratorSymbol] = function () { 20371 return this; 20372 }; 20373 20374 exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of 20375 // AsyncIterator objects; they just return a Promise for the value of 20376 // the final result produced by the iterator. 20377 20378 exports.async = function (innerFn, outerFn, self, tryLocsList) { 20379 var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList)); 20380 return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. 20381 : iter.next().then(function (result) { 20382 return result.done ? result.value : iter.next(); 20383 }); 20384 }; 20385 20386 function makeInvokeMethod(innerFn, self, context) { 20387 var state = GenStateSuspendedStart; 20388 return function invoke(method, arg) { 20389 if (state === GenStateExecuting) { 20390 throw new Error("Generator is already running"); 20391 } 20392 20393 if (state === GenStateCompleted) { 20394 if (method === "throw") { 20395 throw arg; 20396 } // Be forgiving, per 25.3.3.3.3 of the spec: 20397 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume 20398 20399 20400 return doneResult(); 20401 } 20402 20403 context.method = method; 20404 context.arg = arg; 20405 20406 while (true) { 20407 var delegate = context.delegate; 20408 20409 if (delegate) { 20410 var delegateResult = maybeInvokeDelegate(delegate, context); 20411 20412 if (delegateResult) { 20413 if (delegateResult === ContinueSentinel) continue; 20414 return delegateResult; 20415 } 20416 } 20417 20418 if (context.method === "next") { 20419 // Setting context._sent for legacy support of Babel's 20420 // function.sent implementation. 20421 context.sent = context._sent = context.arg; 20422 } else if (context.method === "throw") { 20423 if (state === GenStateSuspendedStart) { 20424 state = GenStateCompleted; 20425 throw context.arg; 20426 } 20427 20428 context.dispatchException(context.arg); 20429 } else if (context.method === "return") { 20430 context.abrupt("return", context.arg); 20431 } 20432 20433 state = GenStateExecuting; 20434 var record = tryCatch(innerFn, self, context); 20435 20436 if (record.type === "normal") { 20437 // If an exception is thrown from innerFn, we leave state === 20438 // GenStateExecuting and loop back for another invocation. 20439 state = context.done ? GenStateCompleted : GenStateSuspendedYield; 20440 20441 if (record.arg === ContinueSentinel) { 20442 continue; 20443 } 20444 20445 return { 20446 value: record.arg, 20447 done: context.done 20448 }; 20449 } else if (record.type === "throw") { 20450 state = GenStateCompleted; // Dispatch the exception by looping back around to the 20451 // context.dispatchException(context.arg) call above. 20452 20453 context.method = "throw"; 20454 context.arg = record.arg; 20455 } 20456 } 20457 }; 20458 } // Call delegate.iterator[context.method](context.arg) and handle the 20459 // result, either by returning a { value, done } result from the 20460 // delegate iterator, or by modifying context.method and context.arg, 20461 // setting context.delegate to null, and returning the ContinueSentinel. 20462 20463 20464 function maybeInvokeDelegate(delegate, context) { 20465 var method = delegate.iterator[context.method]; 20466 20467 if (method === undefined) { 20468 // A .throw or .return when the delegate iterator has no .throw 20469 // method always terminates the yield* loop. 20470 context.delegate = null; 20471 20472 if (context.method === "throw") { 20473 // Note: ["return"] must be used for ES3 parsing compatibility. 20474 if (delegate.iterator["return"]) { 20475 // If the delegate iterator has a return method, give it a 20476 // chance to clean up. 20477 context.method = "return"; 20478 context.arg = undefined; 20479 maybeInvokeDelegate(delegate, context); 20480 20481 if (context.method === "throw") { 20482 // If maybeInvokeDelegate(context) changed context.method from 20483 // "return" to "throw", let that override the TypeError below. 20484 return ContinueSentinel; 20485 } 20486 } 20487 20488 context.method = "throw"; 20489 context.arg = new TypeError("The iterator does not provide a 'throw' method"); 20490 } 20491 20492 return ContinueSentinel; 20493 } 20494 20495 var record = tryCatch(method, delegate.iterator, context.arg); 20496 20497 if (record.type === "throw") { 20498 context.method = "throw"; 20499 context.arg = record.arg; 20500 context.delegate = null; 20501 return ContinueSentinel; 20502 } 20503 20504 var info = record.arg; 20505 20506 if (!info) { 20507 context.method = "throw"; 20508 context.arg = new TypeError("iterator result is not an object"); 20509 context.delegate = null; 20510 return ContinueSentinel; 20511 } 20512 20513 if (info.done) { 20514 // Assign the result of the finished delegate to the temporary 20515 // variable specified by delegate.resultName (see delegateYield). 20516 context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield). 20517 20518 context.next = delegate.nextLoc; // If context.method was "throw" but the delegate handled the 20519 // exception, let the outer generator proceed normally. If 20520 // context.method was "next", forget context.arg since it has been 20521 // "consumed" by the delegate iterator. If context.method was 20522 // "return", allow the original .return call to continue in the 20523 // outer generator. 20524 20525 if (context.method !== "return") { 20526 context.method = "next"; 20527 context.arg = undefined; 20528 } 20529 } else { 20530 // Re-yield the result returned by the delegate method. 20531 return info; 20532 } // The delegate iterator is finished, so forget it and continue with 20533 // the outer generator. 20534 20535 20536 context.delegate = null; 20537 return ContinueSentinel; 20538 } // Define Generator.prototype.{next,throw,return} in terms of the 20539 // unified ._invoke helper method. 20540 20541 20542 defineIteratorMethods(Gp); 20543 Gp[toStringTagSymbol] = "Generator"; // A Generator should always return itself as the iterator object when the 20544 // @@iterator function is called on it. Some browsers' implementations of the 20545 // iterator prototype chain incorrectly implement this, causing the Generator 20546 // object to not be returned from this call. This ensures that doesn't happen. 20547 // See https://github.com/facebook/regenerator/issues/274 for more details. 20548 20549 Gp[iteratorSymbol] = function () { 20550 return this; 20551 }; 20552 20553 Gp.toString = function () { 20554 return "[object Generator]"; 20555 }; 20556 20557 function pushTryEntry(locs) { 20558 var entry = { 20559 tryLoc: locs[0] 20560 }; 20561 20562 if (1 in locs) { 20563 entry.catchLoc = locs[1]; 20564 } 20565 20566 if (2 in locs) { 20567 entry.finallyLoc = locs[2]; 20568 entry.afterLoc = locs[3]; 20569 } 20570 20571 this.tryEntries.push(entry); 20572 } 20573 20574 function resetTryEntry(entry) { 20575 var record = entry.completion || {}; 20576 record.type = "normal"; 20577 delete record.arg; 20578 entry.completion = record; 20579 } 20580 20581 function Context(tryLocsList) { 20582 // The root entry object (effectively a try statement without a catch 20583 // or a finally block) gives us a place to store values thrown from 20584 // locations where there is no enclosing try statement. 20585 this.tryEntries = [{ 20586 tryLoc: "root" 20587 }]; 20588 tryLocsList.forEach(pushTryEntry, this); 20589 this.reset(true); 20590 } 20591 20592 exports.keys = function (object) { 20593 var keys = []; 20594 20595 for (var key in object) { 20596 keys.push(key); 20597 } 20598 20599 keys.reverse(); // Rather than returning an object with a next method, we keep 20600 // things simple and return the next function itself. 20601 20602 return function next() { 20603 while (keys.length) { 20604 var key = keys.pop(); 20605 20606 if (key in object) { 20607 next.value = key; 20608 next.done = false; 20609 return next; 20610 } 20611 } // To avoid creating an additional object, we just hang the .value 20612 // and .done properties off the next function object itself. This 20613 // also ensures that the minifier will not anonymize the function. 20614 20615 20616 next.done = true; 20617 return next; 20618 }; 20619 }; 20620 20621 function values(iterable) { 20622 if (iterable) { 20623 var iteratorMethod = iterable[iteratorSymbol]; 20624 20625 if (iteratorMethod) { 20626 return iteratorMethod.call(iterable); 20627 } 20628 20629 if (typeof iterable.next === "function") { 20630 return iterable; 20631 } 20632 20633 if (!isNaN(iterable.length)) { 20634 var i = -1, 20635 next = function next() { 20636 while (++i < iterable.length) { 20637 if (hasOwn.call(iterable, i)) { 20638 next.value = iterable[i]; 20639 next.done = false; 20640 return next; 20641 } 20642 } 20643 20644 next.value = undefined; 20645 next.done = true; 20646 return next; 20647 }; 20648 20649 return next.next = next; 20650 } 20651 } // Return an iterator with no values. 20652 20653 20654 return { 20655 next: doneResult 20656 }; 20657 } 20658 20659 exports.values = values; 20660 20661 function doneResult() { 20662 return { 20663 value: undefined, 20664 done: true 20665 }; 20666 } 20667 20668 Context.prototype = { 20669 constructor: Context, 20670 reset: function (skipTempReset) { 20671 this.prev = 0; 20672 this.next = 0; // Resetting context._sent for legacy support of Babel's 20673 // function.sent implementation. 20674 20675 this.sent = this._sent = undefined; 20676 this.done = false; 20677 this.delegate = null; 20678 this.method = "next"; 20679 this.arg = undefined; 20680 this.tryEntries.forEach(resetTryEntry); 20681 20682 if (!skipTempReset) { 20683 for (var name in this) { 20684 // Not sure about the optimal order of these conditions: 20685 if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { 20686 this[name] = undefined; 20687 } 20688 } 20689 } 20690 }, 20691 stop: function () { 20692 this.done = true; 20693 var rootEntry = this.tryEntries[0]; 20694 var rootRecord = rootEntry.completion; 20695 20696 if (rootRecord.type === "throw") { 20697 throw rootRecord.arg; 20698 } 20699 20700 return this.rval; 20701 }, 20702 dispatchException: function (exception) { 20703 if (this.done) { 20704 throw exception; 20705 } 20706 20707 var context = this; 20708 20709 function handle(loc, caught) { 20710 record.type = "throw"; 20711 record.arg = exception; 20712 context.next = loc; 20713 20714 if (caught) { 20715 // If the dispatched exception was caught by a catch block, 20716 // then let that catch block handle the exception normally. 20717 context.method = "next"; 20718 context.arg = undefined; 20719 } 20720 20721 return !!caught; 20722 } 20723 20724 for (var i = this.tryEntries.length - 1; i >= 0; --i) { 20725 var entry = this.tryEntries[i]; 20726 var record = entry.completion; 20727 20728 if (entry.tryLoc === "root") { 20729 // Exception thrown outside of any try block that could handle 20730 // it, so set the completion value of the entire function to 20731 // throw the exception. 20732 return handle("end"); 20733 } 20734 20735 if (entry.tryLoc <= this.prev) { 20736 var hasCatch = hasOwn.call(entry, "catchLoc"); 20737 var hasFinally = hasOwn.call(entry, "finallyLoc"); 20738 20739 if (hasCatch && hasFinally) { 20740 if (this.prev < entry.catchLoc) { 20741 return handle(entry.catchLoc, true); 20742 } else if (this.prev < entry.finallyLoc) { 20743 return handle(entry.finallyLoc); 20744 } 20745 } else if (hasCatch) { 20746 if (this.prev < entry.catchLoc) { 20747 return handle(entry.catchLoc, true); 20748 } 20749 } else if (hasFinally) { 20750 if (this.prev < entry.finallyLoc) { 20751 return handle(entry.finallyLoc); 20752 } 20753 } else { 20754 throw new Error("try statement without catch or finally"); 20755 } 20756 } 20757 } 20758 }, 20759 abrupt: function (type, arg) { 20760 for (var i = this.tryEntries.length - 1; i >= 0; --i) { 20761 var entry = this.tryEntries[i]; 20762 20763 if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { 20764 var finallyEntry = entry; 20765 break; 20766 } 20767 } 20768 20769 if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { 20770 // Ignore the finally entry if control is not jumping to a 20771 // location outside the try/catch block. 20772 finallyEntry = null; 20773 } 20774 20775 var record = finallyEntry ? finallyEntry.completion : {}; 20776 record.type = type; 20777 record.arg = arg; 20778 20779 if (finallyEntry) { 20780 this.method = "next"; 20781 this.next = finallyEntry.finallyLoc; 20782 return ContinueSentinel; 20783 } 20784 20785 return this.complete(record); 20786 }, 20787 complete: function (record, afterLoc) { 20788 if (record.type === "throw") { 20789 throw record.arg; 20790 } 20791 20792 if (record.type === "break" || record.type === "continue") { 20793 this.next = record.arg; 20794 } else if (record.type === "return") { 20795 this.rval = this.arg = record.arg; 20796 this.method = "return"; 20797 this.next = "end"; 20798 } else if (record.type === "normal" && afterLoc) { 20799 this.next = afterLoc; 20800 } 20801 20802 return ContinueSentinel; 20803 }, 20804 finish: function (finallyLoc) { 20805 for (var i = this.tryEntries.length - 1; i >= 0; --i) { 20806 var entry = this.tryEntries[i]; 20807 20808 if (entry.finallyLoc === finallyLoc) { 20809 this.complete(entry.completion, entry.afterLoc); 20810 resetTryEntry(entry); 20811 return ContinueSentinel; 20812 } 20813 } 20814 }, 20815 "catch": function (tryLoc) { 20816 for (var i = this.tryEntries.length - 1; i >= 0; --i) { 20817 var entry = this.tryEntries[i]; 20818 20819 if (entry.tryLoc === tryLoc) { 20820 var record = entry.completion; 20821 20822 if (record.type === "throw") { 20823 var thrown = record.arg; 20824 resetTryEntry(entry); 20825 } 20826 20827 return thrown; 20828 } 20829 } // The context.catch method must only be called with a location 20830 // argument that corresponds to a known catch block. 20831 20832 20833 throw new Error("illegal catch attempt"); 20834 }, 20835 delegateYield: function (iterable, resultName, nextLoc) { 20836 this.delegate = { 20837 iterator: values(iterable), 20838 resultName: resultName, 20839 nextLoc: nextLoc 20840 }; 20841 20842 if (this.method === "next") { 20843 // Deliberately forget the last sent value so that we don't 20844 // accidentally pass it on to the delegate. 20845 this.arg = undefined; 20846 } 20847 20848 return ContinueSentinel; 20849 } 20850 }; // Regardless of whether this script is executing as a CommonJS module 20851 // or not, return the runtime object so that we can declare the variable 20852 // regeneratorRuntime in the outer scope, which allows this module to be 20853 // injected easily by `bin/regenerator --include-runtime script.js`. 20854 20855 return exports; 20856}( // If this script is executing as a CommonJS module, use module.exports 20857// as the regeneratorRuntime namespace. Otherwise create a new empty 20858// object. Either way, the resulting object will be used to initialize 20859// the regeneratorRuntime variable at the top of this file. 20860 true ? module.exports : undefined); 20861 20862try { 20863 regeneratorRuntime = runtime; 20864} catch (accidentalStrictMode) { 20865 // This module should not be running in strict mode, so the above 20866 // assignment should always work unless something is misconfigured. Just 20867 // in case runtime.js accidentally runs in strict mode, we can escape 20868 // strict mode using a global Function call. This could conceivably fail 20869 // if a Content Security Policy forbids using Function, but in that case 20870 // the proper solution is to fix the accidental strict mode problem. If 20871 // you've misconfigured your bundler to force strict mode and applied a 20872 // CSP to forbid Function, and you're not willing to fix either of those 20873 // problems, please detail your unique predicament in a GitHub issue. 20874 Function("r", "regeneratorRuntime = r")(runtime); 20875} 20876 20877/***/ }), 20878
vendor: 6,460 bytes, lines 20879-21090
20879/***/ "./node_modules/setimmediate/setImmediate.js": 20880/*!***************************************************!*\ 20881 !*** ./node_modules/setimmediate/setImmediate.js ***! 20882 \***************************************************/ 20883/*! no static exports found */ 20884/***/ (function(module, exports, __webpack_require__) { 20885 20886/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) { 20887 "use strict"; 20888 20889 if (global.setImmediate) { 20890 return; 20891 } 20892 20893 var nextHandle = 1; // Spec says greater than zero 20894 20895 var tasksByHandle = {}; 20896 var currentlyRunningATask = false; 20897 var doc = global.document; 20898 var registerImmediate; 20899 20900 function setImmediate(callback) { 20901 // Callback can either be a function or a string 20902 if (typeof callback !== "function") { 20903 callback = new Function("" + callback); 20904 } // Copy function arguments 20905 20906 20907 var args = new Array(arguments.length - 1); 20908 20909 for (var i = 0; i < args.length; i++) { 20910 args[i] = arguments[i + 1]; 20911 } // Store and register the task 20912 20913 20914 var task = { 20915 callback: callback, 20916 args: args 20917 }; 20918 tasksByHandle[nextHandle] = task; 20919 registerImmediate(nextHandle); 20920 return nextHandle++; 20921 } 20922 20923 function clearImmediate(handle) { 20924 delete tasksByHandle[handle]; 20925 } 20926 20927 function run(task) { 20928 var callback = task.callback; 20929 var args = task.args; 20930 20931 switch (args.length) { 20932 case 0: 20933 callback(); 20934 break; 20935 20936 case 1: 20937 callback(args[0]); 20938 break; 20939 20940 case 2: 20941 callback(args[0], args[1]); 20942 break; 20943 20944 case 3: 20945 callback(args[0], args[1], args[2]); 20946 break; 20947 20948 default: 20949 callback.apply(undefined, args); 20950 break; 20951 } 20952 } 20953 20954 function runIfPresent(handle) { 20955 // From the spec: "Wait until any invocations of this algorithm started before this one have completed." 20956 // So if we're currently running a task, we'll need to delay this invocation. 20957 if (currentlyRunningATask) { 20958 // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a 20959 // "too much recursion" error. 20960 setTimeout(runIfPresent, 0, handle); 20961 } else { 20962 var task = tasksByHandle[handle]; 20963 20964 if (task) { 20965 currentlyRunningATask = true; 20966 20967 try { 20968 run(task); 20969 } finally { 20970 clearImmediate(handle); 20971 currentlyRunningATask = false; 20972 } 20973 } 20974 } 20975 } 20976 20977 function installNextTickImplementation() { 20978 registerImmediate = function (handle) { 20979 process.nextTick(function () { 20980 runIfPresent(handle); 20981 }); 20982 }; 20983 } 20984 20985 function canUsePostMessage() { 20986 // The test against `importScripts` prevents this implementation from being installed inside a web worker, 20987 // where `global.postMessage` means something completely different and can't be used for this purpose. 20988 if (global.postMessage && !global.importScripts) { 20989 var postMessageIsAsynchronous = true; 20990 var oldOnMessage = global.onmessage; 20991 20992 global.onmessage = function () { 20993 postMessageIsAsynchronous = false; 20994 }; 20995 20996 global.postMessage("", "*"); 20997 global.onmessage = oldOnMessage; 20998 return postMessageIsAsynchronous; 20999 } 21000 } 21001 21002 function installPostMessageImplementation() { 21003 // Installs an event handler on `global` for the `message` event: see 21004 // * https://developer.mozilla.org/en/DOM/window.postMessage 21005 // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages 21006 var messagePrefix = "setImmediate$" + Math.random() + "$"; 21007 21008 var onGlobalMessage = function (event) { 21009 if (event.source === global && typeof event.data === "string" && event.data.indexOf(messagePrefix) === 0) { 21010 runIfPresent(+event.data.slice(messagePrefix.length)); 21011 } 21012 }; 21013 21014 if (global.addEventListener) { 21015 global.addEventListener("message", onGlobalMessage, false); 21016 } else { 21017 global.attachEvent("onmessage", onGlobalMessage); 21018 } 21019 21020 registerImmediate = function (handle) { 21021 global.postMessage(messagePrefix + handle, "*"); 21022 }; 21023 } 21024 21025 function installMessageChannelImplementation() { 21026 var channel = new MessageChannel(); 21027 21028 channel.port1.onmessage = function (event) { 21029 var handle = event.data; 21030 runIfPresent(handle); 21031 }; 21032 21033 registerImmediate = function (handle) { 21034 channel.port2.postMessage(handle); 21035 }; 21036 } 21037 21038 function installReadyStateChangeImplementation() { 21039 var html = doc.documentElement; 21040 21041 registerImmediate = function (handle) { 21042 // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted 21043 // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. 21044 var script = doc.createElement("script"); 21045 21046 script.onreadystatechange = function () { 21047 runIfPresent(handle); 21048 script.onreadystatechange = null; 21049 html.removeChild(script); 21050 script = null; 21051 }; 21052 21053 html.appendChild(script); 21054 }; 21055 } 21056 21057 function installSetTimeoutImplementation() { 21058 registerImmediate = function (handle) { 21059 setTimeout(runIfPresent, 0, handle); 21060 }; 21061 } // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live. 21062 21063 21064 var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global); 21065 attachTo = attachTo && attachTo.setTimeout ? attachTo : global; // Don't get fooled by e.g. browserify environments. 21066 21067 if ({}.toString.call(global.process) === "[object process]") { 21068 // For Node.js before 0.9 21069 installNextTickImplementation(); 21070 } else if (canUsePostMessage()) { 21071 // For non-IE10 modern browsers 21072 installPostMessageImplementation(); 21073 } else if (global.MessageChannel) { 21074 // For web workers, where supported 21075 installMessageChannelImplementation(); 21076 } else if (doc && "onreadystatechange" in doc.createElement("script")) { 21077 // For IE 6â8 21078 installReadyStateChangeImplementation(); 21079 } else { 21080 // For older browsers 21081 installSetTimeoutImplementation(); 21082 } 21083 21084 attachTo.setImmediate = setImmediate; 21085 attachTo.clearImmediate = clearImmediate; 21086})(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self); 21087/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) 21088 21089/***/ }), 21090
vendor: 10,063 bytes, lines 21091-21339
21091/***/ "./node_modules/timers-browserify/main.js": 21092/*!************************************************!*\ 21093 !*** ./node_modules/timers-browserify/main.js ***! 21094 \************************************************/ 21095/*! no static exports found */ 21096/***/ (function(module, exports, __webpack_require__) { 21097 21098/* WEBPACK VAR INJECTION */(function(global) {var scope = typeof global !== "undefined" && global || typeof self !== "undefined" && self || window; 21099var apply = Function.prototype.apply; // DOM APIs, for completeness 21100 21101exports.setTimeout = function () { 21102 return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout); 21103}; 21104 21105exports.setInterval = function () { 21106 return new Timeout(apply.call(setInterval, scope, arguments), clearInterval); 21107}; 21108 21109exports.clearTimeout = exports.clearInterval = function (timeout) { 21110 if (timeout) { 21111 timeout.close(); 21112 } 21113}; 21114 21115function Timeout(id, clearFn) { 21116 this._id = id; 21117 this._clearFn = clearFn; 21118} 21119 21120Timeout.prototype.unref = Timeout.prototype.ref = function () {}; 21121 21122Timeout.prototype.close = function () { 21123 this._clearFn.call(scope, this._id); 21124}; // Does not start the time, just sets up the members needed. 21125 21126 21127exports.enroll = function (item, msecs) { 21128 clearTimeout(item._idleTimeoutId); 21129 item._idleTimeout = msecs; 21130}; 21131 21132exports.unenroll = function (item) { 21133 clearTimeout(item._idleTimeoutId); 21134 item._idleTimeout = -1; 21135}; 21136 21137exports._unrefActive = exports.active = function (item) { 21138 clearTimeout(item._idleTimeoutId); 21139 var msecs = item._idleTimeout; 21140 21141 if (msecs >= 0) { 21142 item._idleTimeoutId = setTimeout(function onTimeout() { 21143 if (item._onTimeout) item._onTimeout(); 21144 }, msecs); 21145 } 21146}; // setimmediate attaches itself to the global object 21147 21148 21149__webpack_require__(/*! setimmediate */ "./node_modules/setimmediate/setImmediate.js"); // On some exotic environments, it's not clear which object `setimmediate` was 21150// able to install onto. Search each possibility in the same order as the 21151// `setimmediate` library. 21152 21153 21154exports.setImmediate = typeof self !== "undefined" && self.setImmediate || typeof global !== "undefined" && global.setImmediate || this && this.setImmediate; 21155exports.clearImmediate = typeof self !== "undefined" && self.clearImmediate || typeof global !== "undefined" && global.clearImmediate || this && this.clearImmediate; 21156/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) 21157 21158/***/ }), 21159 21160/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/components/OpeningHours/OpeningHour.vue?vue&type=template&id=cb64a19e&": 21161/*!******************************************************************************************************************************************************************************************************************!*\ 21162 !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./app/components/OpeningHours/OpeningHour.vue?vue&type=template&id=cb64a19e& ***! 21163 \******************************************************************************************************************************************************************************************************************/ 21164/*! exports provided: render, staticRenderFns */ 21165/***/ (function(module, __webpack_exports__, __webpack_require__) { 21166 21167"use strict"; 21168__webpack_require__.r(__webpack_exports__); 21169/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); 21170/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); 21171var render = function() { 21172 var _vm = this 21173 var _h = _vm.$createElement 21174 var _c = _vm._self._c || _h 21175 return _c("div", { staticClass: "opening-hour" }, [ 21176 _vm.openingHour.status == "closed" 21177 ? _c("span", { staticClass: "time closed" }, [ 21178 _vm._v(_vm._s(_vm.Drupal.t("Closed"))) 21179 ]) 21180 : _vm.openingHour.status === "opens_soon" 21181 ? _c("span", { staticClass: "time opens-soon" }, [ 21182 _vm._v(_vm._s(_vm.Drupal.t("Opens soon"))) 21183 ]) 21184 : _vm.openingHour.status === "closes_soon" 21185 ? _c("span", { staticClass: "time closes-soon" }, [ 21186 _vm._v(_vm._s(_vm.Drupal.t("Closes soon"))) 21187 ]) 21188 : _c("span", { staticClass: "time open" }, [ 21189 _vm._v( 21190 _vm._s(_vm.openingHour.start) + " - " + _vm._s(_vm.openingHour.end) 21191 ) 21192 ]), 21193 _vm._v(" "), 21194 _vm.openingHour.label 21195 ? _c("span", { staticClass: "label" }, [ 21196 _vm._v(_vm._s(_vm.openingHour.label)) 21197 ]) 21198 : _vm._e() 21199 ]) 21200} 21201var staticRenderFns = [] 21202render._withStripped = true 21203 21204 21205 21206/***/ }), 21207 21208/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/components/OpeningHours/OpeningHoursWeek.vue?vue&type=template&id=496d15b4&": 21209/*!***********************************************************************************************************************************************************************************************************************!*\ 21210 !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./app/components/OpeningHours/OpeningHoursWeek.vue?vue&type=template&id=496d15b4& ***! 21211 \***********************************************************************************************************************************************************************************************************************/ 21212/*! exports provided: render, staticRenderFns */ 21213/***/ (function(module, __webpack_exports__, __webpack_require__) { 21214 21215"use strict"; 21216__webpack_require__.r(__webpack_exports__); 21217/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); 21218/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); 21219var render = function() { 21220 var _vm = this 21221 var _h = _vm.$createElement 21222 var _c = _vm._self._c || _h 21223 return _c("div", { staticClass: "opening-hours-wrapper" }, [ 21224 _vm.openingHours && Object.keys(_vm.openingHours).length > 0 21225 ? _c( 21226 "div", 21227 { staticClass: "opening-hours" }, 21228 [ 21229 _c("div", { staticClass: "opening-hours-top" }, [ 21230 _c( 21231 "a", 21232 { 21233 directives: [ 21234 { 21235 name: "show", 21236 rawName: "v-show", 21237 value: _vm.showPrevious, 21238 expression: "showPrevious" 21239 } 21240 ], 21241 staticClass: "next-previous", 21242 class: { disabled: !_vm.showPrevious }, 21243 attrs: { href: "#" }, 21244 on: { 21245 click: function($event) { 21246 $event.preventDefault() 21247 _vm.showPrevious ? _vm.previous() : null 21248 } 21249 } 21250 }, 21251 [ 21252 _c("i", { 21253 staticClass: "fas fa-chevron-circle-left", 21254 attrs: { "aria-hidden": "true" } 21255 }), 21256 _vm._v(" "), 21257 _c("span", { staticClass: "visually-hidden" }, [ 21258 _vm._v(_vm._s(_vm.Drupal.t("Go to the previous week"))) 21259 ]) 21260 ] 21261 ), 21262 _vm._v(" "), 21263 _c("p", { staticClass: "opening-hours-top__title" }, [ 21264 _c("i", { 21265 staticClass: "fas fa-clock", 21266 attrs: { "aria-hidden": "true" } 21267 }), 21268 _vm._v(" " + _vm._s(_vm.Drupal.t("Opening hours from")) + " "), 21269 _c("strong", [_vm._v(_vm._s(_vm._f("formatDateMonthYear")(_vm.from)))]), 21270 _vm._v(" " + _vm._s(_vm.Drupal.t("to")) + " "), 21271 _c("strong", [_vm._v(_vm._s(_vm._f("formatDateMonthYear")(_vm.to)))]) 21272 ]), 21273 _vm._v(" "), 21274 _c( 21275 "a", 21276 { 21277 staticClass: "next-previous", 21278 attrs: { href: "#" }, 21279 on: { 21280 click: function($event) { 21281 $event.preventDefault() 21282 return _vm.next() 21283 } 21284 } 21285 }, 21286 [ 21287 _c("i", { 21288 staticClass: "fas fa-chevron-circle-right", 21289 attrs: { "aria-hidden": "true" } 21290 }), 21291 _vm._v(" "), 21292 _c("span", { staticClass: "visually-hidden" }, [ 21293 _vm._v(_vm._s(_vm.Drupal.t("Go to the next week"))) 21294 ]) 21295 ] 21296 ) 21297 ]), 21298 _vm._v(" "), 21299 _vm._l(_vm.openingHours, function(day, label, index) { 21300 return _c( 21301 "div", 21302 { 21303 staticClass: "day", 21304 class: { 21305 today: label === _vm.momentToday.format("YYYY-MM-DD") 21306 } 21307 }, 21308 [ 21309 _c("div", { staticClass: "day-label" }, [ 21310 _vm._v(_vm._s(_vm._f("longDate")(label))) 21311 ]), 21312 _vm._v(" "), 21313 _c( 21314 "div", 21315 { staticClass: "day-opening-hours" }, 21316 _vm._l(day, function(openingHour, index) { 21317 return _c("opening-hour", { 21318 key: index, 21319 attrs: { "opening-hour": openingHour } 21320 }) 21321 }), 21322 1 21323 ) 21324 ] 21325 ) 21326 }) 21327 ], 21328 2 21329 ) 21330 : _vm._e() 21331 ]) 21332} 21333var staticRenderFns = [] 21334render._withStripped = true 21335 21336 21337 21338/***/ }), 21339
vendor: 3,268 bytes, lines 21340-21446
21340/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js": 21341/*!********************************************************************!*\ 21342 !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***! 21343 \********************************************************************/ 21344/*! exports provided: default */ 21345/***/ (function(module, __webpack_exports__, __webpack_require__) { 21346 21347"use strict"; 21348__webpack_require__.r(__webpack_exports__); 21349/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; }); 21350/* globals __VUE_SSR_CONTEXT__ */ 21351 21352// IMPORTANT: Do NOT use ES2015 features in this file (except for modules). 21353// This module is a runtime utility for cleaner component module output and will 21354// be included in the final webpack user bundle. 21355 21356function normalizeComponent ( 21357 scriptExports, 21358 render, 21359 staticRenderFns, 21360 functionalTemplate, 21361 injectStyles, 21362 scopeId, 21363 moduleIdentifier, /* server only */ 21364 shadowMode /* vue-cli only */ 21365) { 21366 // Vue.extend constructor export interop 21367 var options = typeof scriptExports === 'function' 21368 ? scriptExports.options 21369 : scriptExports 21370 21371 // render functions 21372 if (render) { 21373 options.render = render 21374 options.staticRenderFns = staticRenderFns 21375 options._compiled = true 21376 } 21377 21378 // functional template 21379 if (functionalTemplate) { 21380 options.functional = true 21381 } 21382 21383 // scopedId 21384 if (scopeId) { 21385 options._scopeId = 'data-v-' + scopeId 21386 } 21387 21388 var hook 21389 if (moduleIdentifier) { // server build 21390 hook = function (context) { 21391 // 2.3 injection 21392 context = 21393 context || // cached call 21394 (this.$vnode && this.$vnode.ssrContext) || // stateful 21395 (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional 21396 // 2.2 with runInNewContext: true 21397 if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { 21398 context = __VUE_SSR_CONTEXT__ 21399 } 21400 // inject component styles 21401 if (injectStyles) { 21402 injectStyles.call(this, context) 21403 } 21404 // register component module identifier for async chunk inferrence 21405 if (context && context._registeredComponents) { 21406 context._registeredComponents.add(moduleIdentifier) 21407 } 21408 } 21409 // used by ssr in case component is cached and beforeCreate 21410 // never gets called 21411 options._ssrRegister = hook 21412 } else if (injectStyles) { 21413 hook = shadowMode 21414 ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) } 21415 : injectStyles 21416 } 21417 21418 if (hook) { 21419 if (options.functional) { 21420 // for template-only hot-reload because in that case the render fn doesn't 21421 // go through the normalizer 21422 options._injectStyles = hook 21423 // register for functional component in vue file 21424 var originalRender = options.render 21425 options.render = function renderWithStyleInjection (h, context) { 21426 hook.call(context) 21427 return originalRender(h, context) 21428 } 21429 } else { 21430 // inject component registration as beforeCreate hook 21431 var existing = options.beforeCreate 21432 options.beforeCreate = existing 21433 ? [].concat(existing, hook) 21434 : [hook] 21435 } 21436 } 21437 21438 return { 21439 exports: scriptExports, 21440 options: options 21441 } 21442} 21443 21444 21445/***/ }), 21446
vendor: 315,452 bytes, lines 21447-33314
21447/***/ "./node_modules/vue/dist/vue.esm.js": 21448/*!******************************************!*\ 21449 !*** ./node_modules/vue/dist/vue.esm.js ***! 21450 \******************************************/ 21451/*! exports provided: default */ 21452/***/ (function(module, __webpack_exports__, __webpack_require__) { 21453 21454"use strict"; 21455__webpack_require__.r(__webpack_exports__); 21456/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/*! 21457 * Vue.js v2.6.11 21458 * (c) 2014-2019 Evan You 21459 * Released under the MIT License. 21460 */ 21461 21462/* */ 21463var emptyObject = Object.freeze({}); // These helpers produce better VM code in JS engines due to their 21464// explicitness and function inlining. 21465 21466function isUndef(v) { 21467 return v === undefined || v === null; 21468} 21469 21470function isDef(v) { 21471 return v !== undefined && v !== null; 21472} 21473 21474function isTrue(v) { 21475 return v === true; 21476} 21477 21478function isFalse(v) { 21479 return v === false; 21480} 21481/** 21482 * Check if value is primitive. 21483 */ 21484 21485 21486function isPrimitive(value) { 21487 return typeof value === 'string' || typeof value === 'number' || // $flow-disable-line 21488 typeof value === 'symbol' || typeof value === 'boolean'; 21489} 21490/** 21491 * Quick object check - this is primarily used to tell 21492 * Objects from primitive values when we know the value 21493 * is a JSON-compliant type. 21494 */ 21495 21496 21497function isObject(obj) { 21498 return obj !== null && typeof obj === 'object'; 21499} 21500/** 21501 * Get the raw type string of a value, e.g., [object Object]. 21502 */ 21503 21504 21505var _toString = Object.prototype.toString; 21506 21507function toRawType(value) { 21508 return _toString.call(value).slice(8, -1); 21509} 21510/** 21511 * Strict object type check. Only returns true 21512 * for plain JavaScript objects. 21513 */ 21514 21515 21516function isPlainObject(obj) { 21517 return _toString.call(obj) === '[object Object]'; 21518} 21519 21520function isRegExp(v) { 21521 return _toString.call(v) === '[object RegExp]'; 21522} 21523/** 21524 * Check if val is a valid array index. 21525 */ 21526 21527 21528function isValidArrayIndex(val) { 21529 var n = parseFloat(String(val)); 21530 return n >= 0 && Math.floor(n) === n && isFinite(val); 21531} 21532 21533function isPromise(val) { 21534 return isDef(val) && typeof val.then === 'function' && typeof val.catch === 'function'; 21535} 21536/** 21537 * Convert a value to a string that is actually rendered. 21538 */ 21539 21540 21541function toString(val) { 21542 return val == null ? '' : Array.isArray(val) || isPlainObject(val) && val.toString === _toString ? JSON.stringify(val, null, 2) : String(val); 21543} 21544/** 21545 * Convert an input value to a number for persistence. 21546 * If the conversion fails, return original string. 21547 */ 21548 21549 21550function toNumber(val) { 21551 var n = parseFloat(val); 21552 return isNaN(n) ? val : n; 21553} 21554/** 21555 * Make a map and return a function for checking if a key 21556 * is in that map. 21557 */ 21558 21559 21560function makeMap(str, expectsLowerCase) { 21561 var map = Object.create(null); 21562 var list = str.split(','); 21563 21564 for (var i = 0; i < list.length; i++) { 21565 map[list[i]] = true; 21566 } 21567 21568 return expectsLowerCase ? function (val) { 21569 return map[val.toLowerCase()]; 21570 } : function (val) { 21571 return map[val]; 21572 }; 21573} 21574/** 21575 * Check if a tag is a built-in tag. 21576 */ 21577 21578 21579var isBuiltInTag = makeMap('slot,component', true); 21580/** 21581 * Check if an attribute is a reserved attribute. 21582 */ 21583 21584var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is'); 21585/** 21586 * Remove an item from an array. 21587 */ 21588 21589function remove(arr, item) { 21590 if (arr.length) { 21591 var index = arr.indexOf(item); 21592 21593 if (index > -1) { 21594 return arr.splice(index, 1); 21595 } 21596 } 21597} 21598/** 21599 * Check whether an object has the property. 21600 */ 21601 21602 21603var hasOwnProperty = Object.prototype.hasOwnProperty; 21604 21605function hasOwn(obj, key) { 21606 return hasOwnProperty.call(obj, key); 21607} 21608/** 21609 * Create a cached version of a pure function. 21610 */ 21611 21612 21613function cached(fn) { 21614 var cache = Object.create(null); 21615 return function cachedFn(str) { 21616 var hit = cache[str]; 21617 return hit || (cache[str] = fn(str)); 21618 }; 21619} 21620/** 21621 * Camelize a hyphen-delimited string. 21622 */ 21623 21624 21625var camelizeRE = /-(\w)/g; 21626var camelize = cached(function (str) { 21627 return str.replace(camelizeRE, function (_, c) { 21628 return c ? c.toUpperCase() : ''; 21629 }); 21630}); 21631/** 21632 * Capitalize a string. 21633 */ 21634 21635var capitalize = cached(function (str) { 21636 return str.charAt(0).toUpperCase() + str.slice(1); 21637}); 21638/** 21639 * Hyphenate a camelCase string. 21640 */ 21641 21642var hyphenateRE = /\B([A-Z])/g; 21643var hyphenate = cached(function (str) { 21644 return str.replace(hyphenateRE, '-$1').toLowerCase(); 21645}); 21646/** 21647 * Simple bind polyfill for environments that do not support it, 21648 * e.g., PhantomJS 1.x. Technically, we don't need this anymore 21649 * since native bind is now performant enough in most browsers. 21650 * But removing it would mean breaking code that was able to run in 21651 * PhantomJS 1.x, so this must be kept for backward compatibility. 21652 */ 21653 21654/* istanbul ignore next */ 21655 21656function polyfillBind(fn, ctx) { 21657 function boundFn(a) { 21658 var l = arguments.length; 21659 return l ? l > 1 ? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx); 21660 } 21661 21662 boundFn._length = fn.length; 21663 return boundFn; 21664} 21665 21666function nativeBind(fn, ctx) { 21667 return fn.bind(ctx); 21668} 21669 21670var bind = Function.prototype.bind ? nativeBind : polyfillBind; 21671/** 21672 * Convert an Array-like object to a real Array. 21673 */ 21674 21675function toArray(list, start) { 21676 start = start || 0; 21677 var i = list.length - start; 21678 var ret = new Array(i); 21679 21680 while (i--) { 21681 ret[i] = list[i + start]; 21682 } 21683 21684 return ret; 21685} 21686/** 21687 * Mix properties into target object. 21688 */ 21689 21690 21691function extend(to, _from) { 21692 for (var key in _from) { 21693 to[key] = _from[key]; 21694 } 21695 21696 return to; 21697} 21698/** 21699 * Merge an Array of Objects into a single Object. 21700 */ 21701 21702 21703function toObject(arr) { 21704 var res = {}; 21705 21706 for (var i = 0; i < arr.length; i++) { 21707 if (arr[i]) { 21708 extend(res, arr[i]); 21709 } 21710 } 21711 21712 return res; 21713} 21714/* eslint-disable no-unused-vars */ 21715 21716/** 21717 * Perform no operation. 21718 * Stubbing args to make Flow happy without leaving useless transpiled code 21719 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/). 21720 */ 21721 21722 21723function noop(a, b, c) {} 21724/** 21725 * Always return false. 21726 */ 21727 21728 21729var no = function (a, b, c) { 21730 return false; 21731}; 21732/* eslint-enable no-unused-vars */ 21733 21734/** 21735 * Return the same value. 21736 */ 21737 21738 21739var identity = function (_) { 21740 return _; 21741}; 21742/** 21743 * Generate a string containing static keys from compiler modules. 21744 */ 21745 21746 21747function genStaticKeys(modules) { 21748 return modules.reduce(function (keys, m) { 21749 return keys.concat(m.staticKeys || []); 21750 }, []).join(','); 21751} 21752/** 21753 * Check if two values are loosely equal - that is, 21754 * if they are plain objects, do they have the same shape? 21755 */ 21756 21757 21758function looseEqual(a, b) { 21759 if (a === b) { 21760 return true; 21761 } 21762 21763 var isObjectA = isObject(a); 21764 var isObjectB = isObject(b); 21765 21766 if (isObjectA && isObjectB) { 21767 try { 21768 var isArrayA = Array.isArray(a); 21769 var isArrayB = Array.isArray(b); 21770 21771 if (isArrayA && isArrayB) { 21772 return a.length === b.length && a.every(function (e, i) { 21773 return looseEqual(e, b[i]); 21774 }); 21775 } else if (a instanceof Date && b instanceof Date) { 21776 return a.getTime() === b.getTime(); 21777 } else if (!isArrayA && !isArrayB) { 21778 var keysA = Object.keys(a); 21779 var keysB = Object.keys(b); 21780 return keysA.length === keysB.length && keysA.every(function (key) { 21781 return looseEqual(a[key], b[key]); 21782 }); 21783 } else { 21784 /* istanbul ignore next */ 21785 return false; 21786 } 21787 } catch (e) { 21788 /* istanbul ignore next */ 21789 return false; 21790 } 21791 } else if (!isObjectA && !isObjectB) { 21792 return String(a) === String(b); 21793 } else { 21794 return false; 21795 } 21796} 21797/** 21798 * Return the first index at which a loosely equal value can be 21799 * found in the array (if value is a plain object, the array must 21800 * contain an object of the same shape), or -1 if it is not present. 21801 */ 21802 21803 21804function looseIndexOf(arr, val) { 21805 for (var i = 0; i < arr.length; i++) { 21806 if (looseEqual(arr[i], val)) { 21807 return i; 21808 } 21809 } 21810 21811 return -1; 21812} 21813/** 21814 * Ensure a function is called only once. 21815 */ 21816 21817 21818function once(fn) { 21819 var called = false; 21820 return function () { 21821 if (!called) { 21822 called = true; 21823 fn.apply(this, arguments); 21824 } 21825 }; 21826} 21827 21828var SSR_ATTR = 'data-server-rendered'; 21829var ASSET_TYPES = ['component', 'directive', 'filter']; 21830var LIFECYCLE_HOOKS = ['beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeUpdate', 'updated', 'beforeDestroy', 'destroyed', 'activated', 'deactivated', 'errorCaptured', 'serverPrefetch']; 21831/* */ 21832 21833var config = { 21834 /** 21835 * Option merge strategies (used in core/util/options) 21836 */ 21837 // $flow-disable-line 21838 optionMergeStrategies: Object.create(null), 21839 21840 /** 21841 * Whether to suppress warnings. 21842 */ 21843 silent: false, 21844 21845 /** 21846 * Show production mode tip message on boot? 21847 */ 21848 productionTip: "development" !== 'production', 21849 21850 /** 21851 * Whether to enable devtools 21852 */ 21853 devtools: "development" !== 'production', 21854 21855 /** 21856 * Whether to record perf 21857 */ 21858 performance: false, 21859 21860 /** 21861 * Error handler for watcher errors 21862 */ 21863 errorHandler: null, 21864 21865 /** 21866 * Warn handler for watcher warns 21867 */ 21868 warnHandler: null, 21869 21870 /** 21871 * Ignore certain custom elements 21872 */ 21873 ignoredElements: [], 21874 21875 /** 21876 * Custom user key aliases for v-on 21877 */ 21878 // $flow-disable-line 21879 keyCodes: Object.create(null), 21880 21881 /** 21882 * Check if a tag is reserved so that it cannot be registered as a 21883 * component. This is platform-dependent and may be overwritten. 21884 */ 21885 isReservedTag: no, 21886 21887 /** 21888 * Check if an attribute is reserved so that it cannot be used as a component 21889 * prop. This is platform-dependent and may be overwritten. 21890 */ 21891 isReservedAttr: no, 21892 21893 /** 21894 * Check if a tag is an unknown element. 21895 * Platform-dependent. 21896 */ 21897 isUnknownElement: no, 21898 21899 /** 21900 * Get the namespace of an element 21901 */ 21902 getTagNamespace: noop, 21903 21904 /** 21905 * Parse the real tag name for the specific platform. 21906 */ 21907 parsePlatformTagName: identity, 21908 21909 /** 21910 * Check if an attribute must be bound using property, e.g. value 21911 * Platform-dependent. 21912 */ 21913 mustUseProp: no, 21914 21915 /** 21916 * Perform updates asynchronously. Intended to be used by Vue Test Utils 21917 * This will significantly reduce performance if set to false. 21918 */ 21919 async: true, 21920 21921 /** 21922 * Exposed for legacy reasons 21923 */ 21924 _lifecycleHooks: LIFECYCLE_HOOKS 21925}; 21926/* */ 21927 21928/** 21929 * unicode letters used for parsing html tags, component names and property paths. 21930 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname 21931 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS 21932 */ 21933 21934var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/; 21935/** 21936 * Check if a string starts with $ or _ 21937 */ 21938 21939function isReserved(str) { 21940 var c = (str + '').charCodeAt(0); 21941 return c === 0x24 || c === 0x5F; 21942} 21943/** 21944 * Define a property. 21945 */ 21946 21947 21948function def(obj, key, val, enumerable) { 21949 Object.defineProperty(obj, key, { 21950 value: val, 21951 enumerable: !!enumerable, 21952 writable: true, 21953 configurable: true 21954 }); 21955} 21956/** 21957 * Parse simple path. 21958 */ 21959 21960 21961var bailRE = new RegExp("[^" + unicodeRegExp.source + ".$_\\d]"); 21962 21963function parsePath(path) { 21964 if (bailRE.test(path)) { 21965 return; 21966 } 21967 21968 var segments = path.split('.'); 21969 return function (obj) { 21970 for (var i = 0; i < segments.length; i++) { 21971 if (!obj) { 21972 return; 21973 } 21974 21975 obj = obj[segments[i]]; 21976 } 21977 21978 return obj; 21979 }; 21980} 21981/* */ 21982// can we use __proto__? 21983 21984 21985var hasProto = '__proto__' in {}; // Browser environment sniffing 21986 21987var inBrowser = typeof window !== 'undefined'; 21988var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform; 21989var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase(); 21990var UA = inBrowser && window.navigator.userAgent.toLowerCase(); 21991var isIE = UA && /msie|trident/.test(UA); 21992var isIE9 = UA && UA.indexOf('msie 9.0') > 0; 21993var isEdge = UA && UA.indexOf('edge/') > 0; 21994var isAndroid = UA && UA.indexOf('android') > 0 || weexPlatform === 'android'; 21995var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA) || weexPlatform === 'ios'; 21996var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge; 21997var isPhantomJS = UA && /phantomjs/.test(UA); 21998var isFF = UA && UA.match(/firefox\/(\d+)/); // Firefox has a "watch" function on Object.prototype... 21999 22000var nativeWatch = {}.watch; 22001var supportsPassive = false; 22002 22003if (inBrowser) { 22004 try { 22005 var opts = {}; 22006 Object.defineProperty(opts, 'passive', { 22007 get: function get() { 22008 /* istanbul ignore next */ 22009 supportsPassive = true; 22010 } 22011 }); // https://github.com/facebook/flow/issues/285 22012 22013 window.addEventListener('test-passive', null, opts); 22014 } catch (e) {} 22015} // this needs to be lazy-evaled because vue may be required before 22016// vue-server-renderer can set VUE_ENV 22017 22018 22019var _isServer; 22020 22021var isServerRendering = function () { 22022 if (_isServer === undefined) { 22023 /* istanbul ignore if */ 22024 if (!inBrowser && !inWeex && typeof global !== 'undefined') { 22025 // detect presence of vue-server-renderer and avoid 22026 // Webpack shimming the process 22027 _isServer = global['process'] && global['process'].env.VUE_ENV === 'server'; 22028 } else { 22029 _isServer = false; 22030 } 22031 } 22032 22033 return _isServer; 22034}; // detect devtools 22035 22036 22037var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; 22038/* istanbul ignore next */ 22039 22040function isNative(Ctor) { 22041 return typeof Ctor === 'function' && /native code/.test(Ctor.toString()); 22042} 22043 22044var hasSymbol = typeof Symbol !== 'undefined' && isNative(Symbol) && typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys); 22045 22046var _Set; 22047/* istanbul ignore if */ 22048// $flow-disable-line 22049 22050 22051if (typeof Set !== 'undefined' && isNative(Set)) { 22052 // use native Set when available. 22053 _Set = Set; 22054} else { 22055 // a non-standard Set polyfill that only works with primitive keys. 22056 _Set = 22057 /*@__PURE__*/ 22058 function () { 22059 function Set() { 22060 this.set = Object.create(null); 22061 } 22062 22063 Set.prototype.has = function has(key) { 22064 return this.set[key] === true; 22065 }; 22066 22067 Set.prototype.add = function add(key) { 22068 this.set[key] = true; 22069 }; 22070 22071 Set.prototype.clear = function clear() { 22072 this.set = Object.create(null); 22073 }; 22074 22075 return Set; 22076 }(); 22077} 22078/* */ 22079 22080 22081var warn = noop; 22082var tip = noop; 22083var generateComponentTrace = noop; // work around flow check 22084 22085var formatComponentName = noop; 22086 22087if (true) { 22088 var hasConsole = typeof console !== 'undefined'; 22089 var classifyRE = /(?:^|[-_])(\w)/g; 22090 22091 var classify = function (str) { 22092 return str.replace(classifyRE, function (c) { 22093 return c.toUpperCase(); 22094 }).replace(/[-_]/g, ''); 22095 }; 22096 22097 warn = function (msg, vm) { 22098 var trace = vm ? generateComponentTrace(vm) : ''; 22099 22100 if (config.warnHandler) { 22101 config.warnHandler.call(null, msg, vm, trace); 22102 } else if (hasConsole && !config.silent) { 22103 console.error("[Vue warn]: " + msg + trace); 22104 } 22105 }; 22106 22107 tip = function (msg, vm) { 22108 if (hasConsole && !config.silent) { 22109 console.warn("[Vue tip]: " + msg + (vm ? generateComponentTrace(vm) : '')); 22110 } 22111 }; 22112 22113 formatComponentName = function (vm, includeFile) { 22114 if (vm.$root === vm) { 22115 return '<Root>'; 22116 } 22117 22118 var options = typeof vm === 'function' && vm.cid != null ? vm.options : vm._isVue ? vm.$options || vm.constructor.options : vm; 22119 var name = options.name || options._componentTag; 22120 var file = options.__file; 22121 22122 if (!name && file) { 22123 var match = file.match(/([^/\\]+)\.vue$/); 22124 name = match && match[1]; 22125 } 22126 22127 return (name ? "<" + classify(name) + ">" : "<Anonymous>") + (file && includeFile !== false ? " at " + file : ''); 22128 }; 22129 22130 var repeat = function (str, n) { 22131 var res = ''; 22132 22133 while (n) { 22134 if (n % 2 === 1) { 22135 res += str; 22136 } 22137 22138 if (n > 1) { 22139 str += str; 22140 } 22141 22142 n >>= 1; 22143 } 22144 22145 return res; 22146 }; 22147 22148 generateComponentTrace = function (vm) { 22149 if (vm._isVue && vm.$parent) { 22150 var tree = []; 22151 var currentRecursiveSequence = 0; 22152 22153 while (vm) { 22154 if (tree.length > 0) { 22155 var last = tree[tree.length - 1]; 22156 22157 if (last.constructor === vm.constructor) { 22158 currentRecursiveSequence++; 22159 vm = vm.$parent; 22160 continue; 22161 } else if (currentRecursiveSequence > 0) { 22162 tree[tree.length - 1] = [last, currentRecursiveSequence]; 22163 currentRecursiveSequence = 0; 22164 } 22165 } 22166 22167 tree.push(vm); 22168 vm = vm.$parent; 22169 } 22170 22171 return '\n\nfound in\n\n' + tree.map(function (vm, i) { 22172 return "" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm) ? formatComponentName(vm[0]) + "... (" + vm[1] + " recursive calls)" : formatComponentName(vm)); 22173 }).join('\n'); 22174 } else { 22175 return "\n\n(found in " + formatComponentName(vm) + ")"; 22176 } 22177 }; 22178} 22179/* */ 22180 22181 22182var uid = 0; 22183/** 22184 * A dep is an observable that can have multiple 22185 * directives subscribing to it. 22186 */ 22187 22188var Dep = function Dep() { 22189 this.id = uid++; 22190 this.subs = []; 22191}; 22192 22193Dep.prototype.addSub = function addSub(sub) { 22194 this.subs.push(sub); 22195}; 22196 22197Dep.prototype.removeSub = function removeSub(sub) { 22198 remove(this.subs, sub); 22199}; 22200 22201Dep.prototype.depend = function depend() { 22202 if (Dep.target) { 22203 Dep.target.addDep(this); 22204 } 22205}; 22206 22207Dep.prototype.notify = function notify() { 22208 // stabilize the subscriber list first 22209 var subs = this.subs.slice(); 22210 22211 if ( true && !config.async) { 22212 // subs aren't sorted in scheduler if not running async 22213 // we need to sort them now to make sure they fire in correct 22214 // order 22215 subs.sort(function (a, b) { 22216 return a.id - b.id; 22217 }); 22218 } 22219 22220 for (var i = 0, l = subs.length; i < l; i++) { 22221 subs[i].update(); 22222 } 22223}; // The current target watcher being evaluated. 22224// This is globally unique because only one watcher 22225// can be evaluated at a time. 22226 22227 22228Dep.target = null; 22229var targetStack = []; 22230 22231function pushTarget(target) { 22232 targetStack.push(target); 22233 Dep.target = target; 22234} 22235 22236function popTarget() { 22237 targetStack.pop(); 22238 Dep.target = targetStack[targetStack.length - 1]; 22239} 22240/* */ 22241 22242 22243var VNode = function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) { 22244 this.tag = tag; 22245 this.data = data; 22246 this.children = children; 22247 this.text = text; 22248 this.elm = elm; 22249 this.ns = undefined; 22250 this.context = context; 22251 this.fnContext = undefined; 22252 this.fnOptions = undefined; 22253 this.fnScopeId = undefined; 22254 this.key = data && data.key; 22255 this.componentOptions = componentOptions; 22256 this.componentInstance = undefined; 22257 this.parent = undefined; 22258 this.raw = false; 22259 this.isStatic = false; 22260 this.isRootInsert = true; 22261 this.isComment = false; 22262 this.isCloned = false; 22263 this.isOnce = false; 22264 this.asyncFactory = asyncFactory; 22265 this.asyncMeta = undefined; 22266 this.isAsyncPlaceholder = false; 22267}; 22268 22269var prototypeAccessors = { 22270 child: { 22271 configurable: true 22272 } 22273}; // DEPRECATED: alias for componentInstance for backwards compat. 22274 22275/* istanbul ignore next */ 22276 22277prototypeAccessors.child.get = function () { 22278 return this.componentInstance; 22279}; 22280 22281Object.defineProperties(VNode.prototype, prototypeAccessors); 22282 22283var createEmptyVNode = function (text) { 22284 if (text === void 0) text = ''; 22285 var node = new VNode(); 22286 node.text = text; 22287 node.isComment = true; 22288 return node; 22289}; 22290 22291function createTextVNode(val) { 22292 return new VNode(undefined, undefined, undefined, String(val)); 22293} // optimized shallow clone 22294// used for static nodes and slot nodes because they may be reused across 22295// multiple renders, cloning them avoids errors when DOM manipulations rely 22296// on their elm reference. 22297 22298 22299function cloneVNode(vnode) { 22300 var cloned = new VNode(vnode.tag, vnode.data, // #7975 22301 // clone children array to avoid mutating original in case of cloning 22302 // a child. 22303 vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory); 22304 cloned.ns = vnode.ns; 22305 cloned.isStatic = vnode.isStatic; 22306 cloned.key = vnode.key; 22307 cloned.isComment = vnode.isComment; 22308 cloned.fnContext = vnode.fnContext; 22309 cloned.fnOptions = vnode.fnOptions; 22310 cloned.fnScopeId = vnode.fnScopeId; 22311 cloned.asyncMeta = vnode.asyncMeta; 22312 cloned.isCloned = true; 22313 return cloned; 22314} 22315/* 22316 * not type checking this file because flow doesn't play well with 22317 * dynamically accessing methods on Array prototype 22318 */ 22319 22320 22321var arrayProto = Array.prototype; 22322var arrayMethods = Object.create(arrayProto); 22323var methodsToPatch = ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse']; 22324/** 22325 * Intercept mutating methods and emit events 22326 */ 22327 22328methodsToPatch.forEach(function (method) { 22329 // cache original method 22330 var original = arrayProto[method]; 22331 def(arrayMethods, method, function mutator() { 22332 var args = [], 22333 len = arguments.length; 22334 22335 while (len--) args[len] = arguments[len]; 22336 22337 var result = original.apply(this, args); 22338 var ob = this.__ob__; 22339 var inserted; 22340 22341 switch (method) { 22342 case 'push': 22343 case 'unshift': 22344 inserted = args; 22345 break; 22346 22347 case 'splice': 22348 inserted = args.slice(2); 22349 break; 22350 } 22351 22352 if (inserted) { 22353 ob.observeArray(inserted); 22354 } // notify change 22355 22356 22357 ob.dep.notify(); 22358 return result; 22359 }); 22360}); 22361/* */ 22362 22363var arrayKeys = Object.getOwnPropertyNames(arrayMethods); 22364/** 22365 * In some cases we may want to disable observation inside a component's 22366 * update computation. 22367 */ 22368 22369var shouldObserve = true; 22370 22371function toggleObserving(value) { 22372 shouldObserve = value; 22373} 22374/** 22375 * Observer class that is attached to each observed 22376 * object. Once attached, the observer converts the target 22377 * object's property keys into getter/setters that 22378 * collect dependencies and dispatch updates. 22379 */ 22380 22381 22382var Observer = function Observer(value) { 22383 this.value = value; 22384 this.dep = new Dep(); 22385 this.vmCount = 0; 22386 def(value, '__ob__', this); 22387 22388 if (Array.isArray(value)) { 22389 if (hasProto) { 22390 protoAugment(value, arrayMethods); 22391 } else { 22392 copyAugment(value, arrayMethods, arrayKeys); 22393 } 22394 22395 this.observeArray(value); 22396 } else { 22397 this.walk(value); 22398 } 22399}; 22400/** 22401 * Walk through all properties and convert them into 22402 * getter/setters. This method should only be called when 22403 * value type is Object. 22404 */ 22405 22406 22407Observer.prototype.walk = function walk(obj) { 22408 var keys = Object.keys(obj); 22409 22410 for (var i = 0; i < keys.length; i++) { 22411 defineReactive$$1(obj, keys[i]); 22412 } 22413}; 22414/** 22415 * Observe a list of Array items. 22416 */ 22417 22418 22419Observer.prototype.observeArray = function observeArray(items) { 22420 for (var i = 0, l = items.length; i < l; i++) { 22421 observe(items[i]); 22422 } 22423}; // helpers 22424 22425/** 22426 * Augment a target Object or Array by intercepting 22427 * the prototype chain using __proto__ 22428 */ 22429 22430 22431function protoAugment(target, src) { 22432 /* eslint-disable no-proto */ 22433 target.__proto__ = src; 22434 /* eslint-enable no-proto */ 22435} 22436/** 22437 * Augment a target Object or Array by defining 22438 * hidden properties. 22439 */ 22440 22441/* istanbul ignore next */ 22442 22443 22444function copyAugment(target, src, keys) { 22445 for (var i = 0, l = keys.length; i < l; i++) { 22446 var key = keys[i]; 22447 def(target, key, src[key]); 22448 } 22449} 22450/** 22451 * Attempt to create an observer instance for a value, 22452 * returns the new observer if successfully observed, 22453 * or the existing observer if the value already has one. 22454 */ 22455 22456 22457function observe(value, asRootData) { 22458 if (!isObject(value) || value instanceof VNode) { 22459 return; 22460 } 22461 22462 var ob; 22463 22464 if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { 22465 ob = value.__ob__; 22466 } else if (shouldObserve && !isServerRendering() && (Array.isArray(value) || isPlainObject(value)) && Object.isExtensible(value) && !value._isVue) { 22467 ob = new Observer(value); 22468 } 22469 22470 if (asRootData && ob) { 22471 ob.vmCount++; 22472 } 22473 22474 return ob; 22475} 22476/** 22477 * Define a reactive property on an Object. 22478 */ 22479 22480 22481function defineReactive$$1(obj, key, val, customSetter, shallow) { 22482 var dep = new Dep(); 22483 var property = Object.getOwnPropertyDescriptor(obj, key); 22484 22485 if (property && property.configurable === false) { 22486 return; 22487 } // cater for pre-defined getter/setters 22488 22489 22490 var getter = property && property.get; 22491 var setter = property && property.set; 22492 22493 if ((!getter || setter) && arguments.length === 2) { 22494 val = obj[key]; 22495 } 22496 22497 var childOb = !shallow && observe(val); 22498 Object.defineProperty(obj, key, { 22499 enumerable: true, 22500 configurable: true, 22501 get: function reactiveGetter() { 22502 var value = getter ? getter.call(obj) : val; 22503 22504 if (Dep.target) { 22505 dep.depend(); 22506 22507 if (childOb) { 22508 childOb.dep.depend(); 22509 22510 if (Array.isArray(value)) { 22511 dependArray(value); 22512 } 22513 } 22514 } 22515 22516 return value; 22517 }, 22518 set: function reactiveSetter(newVal) { 22519 var value = getter ? getter.call(obj) : val; 22520 /* eslint-disable no-self-compare */ 22521 22522 if (newVal === value || newVal !== newVal && value !== value) { 22523 return; 22524 } 22525 /* eslint-enable no-self-compare */ 22526 22527 22528 if ( true && customSetter) { 22529 customSetter(); 22530 } // #7981: for accessor properties without setter 22531 22532 22533 if (getter && !setter) { 22534 return; 22535 } 22536 22537 if (setter) { 22538 setter.call(obj, newVal); 22539 } else { 22540 val = newVal; 22541 } 22542 22543 childOb = !shallow && observe(newVal); 22544 dep.notify(); 22545 } 22546 }); 22547} 22548/** 22549 * Set a property on an object. Adds the new property and 22550 * triggers change notification if the property doesn't 22551 * already exist. 22552 */ 22553 22554 22555function set(target, key, val) { 22556 if ( true && (isUndef(target) || isPrimitive(target))) { 22557 warn("Cannot set reactive property on undefined, null, or primitive value: " + target); 22558 } 22559 22560 if (Array.isArray(target) && isValidArrayIndex(key)) { 22561 target.length = Math.max(target.length, key); 22562 target.splice(key, 1, val); 22563 return val; 22564 } 22565 22566 if (key in target && !(key in Object.prototype)) { 22567 target[key] = val; 22568 return val; 22569 } 22570 22571 var ob = target.__ob__; 22572 22573 if (target._isVue || ob && ob.vmCount) { 22574 true && warn('Avoid adding reactive properties to a Vue instance or its root $data ' + 'at runtime - declare it upfront in the data option.'); 22575 return val; 22576 } 22577 22578 if (!ob) { 22579 target[key] = val; 22580 return val; 22581 } 22582 22583 defineReactive$$1(ob.value, key, val); 22584 ob.dep.notify(); 22585 return val; 22586} 22587/** 22588 * Delete a property and trigger change if necessary. 22589 */ 22590 22591 22592function del(target, key) { 22593 if ( true && (isUndef(target) || isPrimitive(target))) { 22594 warn("Cannot delete reactive property on undefined, null, or primitive value: " + target); 22595 } 22596 22597 if (Array.isArray(target) && isValidArrayIndex(key)) { 22598 target.splice(key, 1); 22599 return; 22600 } 22601 22602 var ob = target.__ob__; 22603 22604 if (target._isVue || ob && ob.vmCount) { 22605 true && warn('Avoid deleting properties on a Vue instance or its root $data ' + '- just set it to null.'); 22606 return; 22607 } 22608 22609 if (!hasOwn(target, key)) { 22610 return; 22611 } 22612 22613 delete target[key]; 22614 22615 if (!ob) { 22616 return; 22617 } 22618 22619 ob.dep.notify(); 22620} 22621/** 22622 * Collect dependencies on array elements when the array is touched, since 22623 * we cannot intercept array element access like property getters. 22624 */ 22625 22626 22627function dependArray(value) { 22628 for (var e = void 0, i = 0, l = value.length; i < l; i++) { 22629 e = value[i]; 22630 e && e.__ob__ && e.__ob__.dep.depend(); 22631 22632 if (Array.isArray(e)) { 22633 dependArray(e); 22634 } 22635 } 22636} 22637/* */ 22638 22639/** 22640 * Option overwriting strategies are functions that handle 22641 * how to merge a parent option value and a child option 22642 * value into the final value. 22643 */ 22644 22645 22646var strats = config.optionMergeStrategies; 22647/** 22648 * Options with restrictions 22649 */ 22650 22651if (true) { 22652 strats.el = strats.propsData = function (parent, child, vm, key) { 22653 if (!vm) { 22654 warn("option \"" + key + "\" can only be used during instance " + 'creation with the `new` keyword.'); 22655 } 22656 22657 return defaultStrat(parent, child); 22658 }; 22659} 22660/** 22661 * Helper that recursively merges two data objects together. 22662 */ 22663 22664 22665function mergeData(to, from) { 22666 if (!from) { 22667 return to; 22668 } 22669 22670 var key, toVal, fromVal; 22671 var keys = hasSymbol ? Reflect.ownKeys(from) : Object.keys(from); 22672 22673 for (var i = 0; i < keys.length; i++) { 22674 key = keys[i]; // in case the object is already observed... 22675 22676 if (key === '__ob__') { 22677 continue; 22678 } 22679 22680 toVal = to[key]; 22681 fromVal = from[key]; 22682 22683 if (!hasOwn(to, key)) { 22684 set(to, key, fromVal); 22685 } else if (toVal !== fromVal && isPlainObject(toVal) && isPlainObject(fromVal)) { 22686 mergeData(toVal, fromVal); 22687 } 22688 } 22689 22690 return to; 22691} 22692/** 22693 * Data 22694 */ 22695 22696 22697function mergeDataOrFn(parentVal, childVal, vm) { 22698 if (!vm) { 22699 // in a Vue.extend merge, both should be functions 22700 if (!childVal) { 22701 return parentVal; 22702 } 22703 22704 if (!parentVal) { 22705 return childVal; 22706 } // when parentVal & childVal are both present, 22707 // we need to return a function that returns the 22708 // merged result of both functions... no need to 22709 // check if parentVal is a function here because 22710 // it has to be a function to pass previous merges. 22711 22712 22713 return function mergedDataFn() { 22714 return mergeData(typeof childVal === 'function' ? childVal.call(this, this) : childVal, typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal); 22715 }; 22716 } else { 22717 return function mergedInstanceDataFn() { 22718 // instance merge 22719 var instanceData = typeof childVal === 'function' ? childVal.call(vm, vm) : childVal; 22720 var defaultData = typeof parentVal === 'function' ? parentVal.call(vm, vm) : parentVal; 22721 22722 if (instanceData) { 22723 return mergeData(instanceData, defaultData); 22724 } else { 22725 return defaultData; 22726 } 22727 }; 22728 } 22729} 22730 22731strats.data = function (parentVal, childVal, vm) { 22732 if (!vm) { 22733 if (childVal && typeof childVal !== 'function') { 22734 true && warn('The "data" option should be a function ' + 'that returns a per-instance value in component ' + 'definitions.', vm); 22735 return parentVal; 22736 } 22737 22738 return mergeDataOrFn(parentVal, childVal); 22739 } 22740 22741 return mergeDataOrFn(parentVal, childVal, vm); 22742}; 22743/** 22744 * Hooks and props are merged as arrays. 22745 */ 22746 22747 22748function mergeHook(parentVal, childVal) { 22749 var res = childVal ? parentVal ? parentVal.concat(childVal) : Array.isArray(childVal) ? childVal : [childVal] : parentVal; 22750 return res ? dedupeHooks(res) : res; 22751} 22752 22753function dedupeHooks(hooks) { 22754 var res = []; 22755 22756 for (var i = 0; i < hooks.length; i++) { 22757 if (res.indexOf(hooks[i]) === -1) { 22758 res.push(hooks[i]); 22759 } 22760 } 22761 22762 return res; 22763} 22764 22765LIFECYCLE_HOOKS.forEach(function (hook) { 22766 strats[hook] = mergeHook; 22767}); 22768/** 22769 * Assets 22770 * 22771 * When a vm is present (instance creation), we need to do 22772 * a three-way merge between constructor options, instance 22773 * options and parent options. 22774 */ 22775 22776function mergeAssets(parentVal, childVal, vm, key) { 22777 var res = Object.create(parentVal || null); 22778 22779 if (childVal) { 22780 true && assertObjectType(key, childVal, vm); 22781 return extend(res, childVal); 22782 } else { 22783 return res; 22784 } 22785} 22786 22787ASSET_TYPES.forEach(function (type) { 22788 strats[type + 's'] = mergeAssets; 22789}); 22790/** 22791 * Watchers. 22792 * 22793 * Watchers hashes should not overwrite one 22794 * another, so we merge them as arrays. 22795 */ 22796 22797strats.watch = function (parentVal, childVal, vm, key) { 22798 // work around Firefox's Object.prototype.watch... 22799 if (parentVal === nativeWatch) { 22800 parentVal = undefined; 22801 } 22802 22803 if (childVal === nativeWatch) { 22804 childVal = undefined; 22805 } 22806 /* istanbul ignore if */ 22807 22808 22809 if (!childVal) { 22810 return Object.create(parentVal || null); 22811 } 22812 22813 if (true) { 22814 assertObjectType(key, childVal, vm); 22815 } 22816 22817 if (!parentVal) { 22818 return childVal; 22819 } 22820 22821 var ret = {}; 22822 extend(ret, parentVal); 22823 22824 for (var key$1 in childVal) { 22825 var parent = ret[key$1]; 22826 var child = childVal[key$1]; 22827 22828 if (parent && !Array.isArray(parent)) { 22829 parent = [parent]; 22830 } 22831 22832 ret[key$1] = parent ? parent.concat(child) : Array.isArray(child) ? child : [child]; 22833 } 22834 22835 return ret; 22836}; 22837/** 22838 * Other object hashes. 22839 */ 22840 22841 22842strats.props = strats.methods = strats.inject = strats.computed = function (parentVal, childVal, vm, key) { 22843 if (childVal && "development" !== 'production') { 22844 assertObjectType(key, childVal, vm); 22845 } 22846 22847 if (!parentVal) { 22848 return childVal; 22849 } 22850 22851 var ret = Object.create(null); 22852 extend(ret, parentVal); 22853 22854 if (childVal) { 22855 extend(ret, childVal); 22856 } 22857 22858 return ret; 22859}; 22860 22861strats.provide = mergeDataOrFn; 22862/** 22863 * Default strategy. 22864 */ 22865 22866var defaultStrat = function (parentVal, childVal) { 22867 return childVal === undefined ? parentVal : childVal; 22868}; 22869/** 22870 * Validate component names 22871 */ 22872 22873 22874function checkComponents(options) { 22875 for (var key in options.components) { 22876 validateComponentName(key); 22877 } 22878} 22879 22880function validateComponentName(name) { 22881 if (!new RegExp("^[a-zA-Z][\\-\\.0-9_" + unicodeRegExp.source + "]*$").test(name)) { 22882 warn('Invalid component name: "' + name + '". Component names ' + 'should conform to valid custom element name in html5 specification.'); 22883 } 22884 22885 if (isBuiltInTag(name) || config.isReservedTag(name)) { 22886 warn('Do not use built-in or reserved HTML elements as component ' + 'id: ' + name); 22887 } 22888} 22889/** 22890 * Ensure all props option syntax are normalized into the 22891 * Object-based format. 22892 */ 22893 22894 22895function normalizeProps(options, vm) { 22896 var props = options.props; 22897 22898 if (!props) { 22899 return; 22900 } 22901 22902 var res = {}; 22903 var i, val, name; 22904 22905 if (Array.isArray(props)) { 22906 i = props.length; 22907 22908 while (i--) { 22909 val = props[i]; 22910 22911 if (typeof val === 'string') { 22912 name = camelize(val); 22913 res[name] = { 22914 type: null 22915 }; 22916 } else if (true) { 22917 warn('props must be strings when using array syntax.'); 22918 } 22919 } 22920 } else if (isPlainObject(props)) { 22921 for (var key in props) { 22922 val = props[key]; 22923 name = camelize(key); 22924 res[name] = isPlainObject(val) ? val : { 22925 type: val 22926 }; 22927 } 22928 } else if (true) { 22929 warn("Invalid value for option \"props\": expected an Array or an Object, " + "but got " + toRawType(props) + ".", vm); 22930 } 22931 22932 options.props = res; 22933} 22934/** 22935 * Normalize all injections into Object-based format 22936 */ 22937 22938 22939function normalizeInject(options, vm) { 22940 var inject = options.inject; 22941 22942 if (!inject) { 22943 return; 22944 } 22945 22946 var normalized = options.inject = {}; 22947 22948 if (Array.isArray(inject)) { 22949 for (var i = 0; i < inject.length; i++) { 22950 normalized[inject[i]] = { 22951 from: inject[i] 22952 }; 22953 } 22954 } else if (isPlainObject(inject)) { 22955 for (var key in inject) { 22956 var val = inject[key]; 22957 normalized[key] = isPlainObject(val) ? extend({ 22958 from: key 22959 }, val) : { 22960 from: val 22961 }; 22962 } 22963 } else if (true) { 22964 warn("Invalid value for option \"inject\": expected an Array or an Object, " + "but got " + toRawType(inject) + ".", vm); 22965 } 22966} 22967/** 22968 * Normalize raw function directives into object format. 22969 */ 22970 22971 22972function normalizeDirectives(options) { 22973 var dirs = options.directives; 22974 22975 if (dirs) { 22976 for (var key in dirs) { 22977 var def$$1 = dirs[key]; 22978 22979 if (typeof def$$1 === 'function') { 22980 dirs[key] = { 22981 bind: def$$1, 22982 update: def$$1 22983 }; 22984 } 22985 } 22986 } 22987} 22988 22989function assertObjectType(name, value, vm) { 22990 if (!isPlainObject(value)) { 22991 warn("Invalid value for option \"" + name + "\": expected an Object, " + "but got " + toRawType(value) + ".", vm); 22992 } 22993} 22994/** 22995 * Merge two option objects into a new one. 22996 * Core utility used in both instantiation and inheritance. 22997 */ 22998 22999 23000function mergeOptions(parent, child, vm) { 23001 if (true) { 23002 checkComponents(child); 23003 } 23004 23005 if (typeof child === 'function') { 23006 child = child.options; 23007 } 23008 23009 normalizeProps(child, vm); 23010 normalizeInject(child, vm); 23011 normalizeDirectives(child); // Apply extends and mixins on the child options, 23012 // but only if it is a raw options object that isn't 23013 // the result of another mergeOptions call. 23014 // Only merged options has the _base property. 23015 23016 if (!child._base) { 23017 if (child.extends) { 23018 parent = mergeOptions(parent, child.extends, vm); 23019 } 23020 23021 if (child.mixins) { 23022 for (var i = 0, l = child.mixins.length; i < l; i++) { 23023 parent = mergeOptions(parent, child.mixins[i], vm); 23024 } 23025 } 23026 } 23027 23028 var options = {}; 23029 var key; 23030 23031 for (key in parent) { 23032 mergeField(key); 23033 } 23034 23035 for (key in child) { 23036 if (!hasOwn(parent, key)) { 23037 mergeField(key); 23038 } 23039 } 23040 23041 function mergeField(key) { 23042 var strat = strats[key] || defaultStrat; 23043 options[key] = strat(parent[key], child[key], vm, key); 23044 } 23045 23046 return options; 23047} 23048/** 23049 * Resolve an asset. 23050 * This function is used because child instances need access 23051 * to assets defined in its ancestor chain. 23052 */ 23053 23054 23055function resolveAsset(options, type, id, warnMissing) { 23056 /* istanbul ignore if */ 23057 if (typeof id !== 'string') { 23058 return; 23059 } 23060 23061 var assets = options[type]; // check local registration variations first 23062 23063 if (hasOwn(assets, id)) { 23064 return assets[id]; 23065 } 23066 23067 var camelizedId = camelize(id); 23068 23069 if (hasOwn(assets, camelizedId)) { 23070 return assets[camelizedId]; 23071 } 23072 23073 var PascalCaseId = capitalize(camelizedId); 23074 23075 if (hasOwn(assets, PascalCaseId)) { 23076 return assets[PascalCaseId]; 23077 } // fallback to prototype chain 23078 23079 23080 var res = assets[id] || assets[camelizedId] || assets[PascalCaseId]; 23081 23082 if ( true && warnMissing && !res) { 23083 warn('Failed to resolve ' + type.slice(0, -1) + ': ' + id, options); 23084 } 23085 23086 return res; 23087} 23088/* */ 23089 23090 23091function validateProp(key, propOptions, propsData, vm) { 23092 var prop = propOptions[key]; 23093 var absent = !hasOwn(propsData, key); 23094 var value = propsData[key]; // boolean casting 23095 23096 var booleanIndex = getTypeIndex(Boolean, prop.type); 23097 23098 if (booleanIndex > -1) { 23099 if (absent && !hasOwn(prop, 'default')) { 23100 value = false; 23101 } else if (value === '' || value === hyphenate(key)) { 23102 // only cast empty string / same name to boolean if 23103 // boolean has higher priority 23104 var stringIndex = getTypeIndex(String, prop.type); 23105 23106 if (stringIndex < 0 || booleanIndex < stringIndex) { 23107 value = true; 23108 } 23109 } 23110 } // check default value 23111 23112 23113 if (value === undefined) { 23114 value = getPropDefaultValue(vm, prop, key); // since the default value is a fresh copy, 23115 // make sure to observe it. 23116 23117 var prevShouldObserve = shouldObserve; 23118 toggleObserving(true); 23119 observe(value); 23120 toggleObserving(prevShouldObserve); 23121 } 23122 23123 if (true) { 23124 assertProp(prop, key, value, vm, absent); 23125 } 23126 23127 return value; 23128} 23129/** 23130 * Get the default value of a prop. 23131 */ 23132 23133 23134function getPropDefaultValue(vm, prop, key) { 23135 // no default, return undefined 23136 if (!hasOwn(prop, 'default')) { 23137 return undefined; 23138 } 23139 23140 var def = prop.default; // warn against non-factory defaults for Object & Array 23141 23142 if ( true && isObject(def)) { 23143 warn('Invalid default value for prop "' + key + '": ' + 'Props with type Object/Array must use a factory function ' + 'to return the default value.', vm); 23144 } // the raw prop value was also undefined from previous render, 23145 // return previous default value to avoid unnecessary watcher trigger 23146 23147 23148 if (vm && vm.$options.propsData && vm.$options.propsData[key] === undefined && vm._props[key] !== undefined) { 23149 return vm._props[key]; 23150 } // call factory function for non-Function types 23151 // a value is Function if its prototype is function even across different execution context 23152 23153 23154 return typeof def === 'function' && getType(prop.type) !== 'Function' ? def.call(vm) : def; 23155} 23156/** 23157 * Assert whether a prop is valid. 23158 */ 23159 23160 23161function assertProp(prop, name, value, vm, absent) { 23162 if (prop.required && absent) { 23163 warn('Missing required prop: "' + name + '"', vm); 23164 return; 23165 } 23166 23167 if (value == null && !prop.required) { 23168 return; 23169 } 23170 23171 var type = prop.type; 23172 var valid = !type || type === true; 23173 var expectedTypes = []; 23174 23175 if (type) { 23176 if (!Array.isArray(type)) { 23177 type = [type]; 23178 } 23179 23180 for (var i = 0; i < type.length && !valid; i++) { 23181 var assertedType = assertType(value, type[i]); 23182 expectedTypes.push(assertedType.expectedType || ''); 23183 valid = assertedType.valid; 23184 } 23185 } 23186 23187 if (!valid) { 23188 warn(getInvalidTypeMessage(name, value, expectedTypes), vm); 23189 return; 23190 } 23191 23192 var validator = prop.validator; 23193 23194 if (validator) { 23195 if (!validator(value)) { 23196 warn('Invalid prop: custom validator check failed for prop "' + name + '".', vm); 23197 } 23198 } 23199} 23200 23201var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/; 23202 23203function assertType(value, type) { 23204 var valid; 23205 var expectedType = getType(type); 23206 23207 if (simpleCheckRE.test(expectedType)) { 23208 var t = typeof value; 23209 valid = t === expectedType.toLowerCase(); // for primitive wrapper objects 23210 23211 if (!valid && t === 'object') { 23212 valid = value instanceof type; 23213 } 23214 } else if (expectedType === 'Object') { 23215 valid = isPlainObject(value); 23216 } else if (expectedType === 'Array') { 23217 valid = Array.isArray(value); 23218 } else { 23219 valid = value instanceof type; 23220 } 23221 23222 return { 23223 valid: valid, 23224 expectedType: expectedType 23225 }; 23226} 23227/** 23228 * Use function string name to check built-in types, 23229 * because a simple equality check will fail when running 23230 * across different vms / iframes. 23231 */ 23232 23233 23234function getType(fn) { 23235 var match = fn && fn.toString().match(/^\s*function (\w+)/); 23236 return match ? match[1] : ''; 23237} 23238 23239function isSameType(a, b) { 23240 return getType(a) === getType(b); 23241} 23242 23243function getTypeIndex(type, expectedTypes) { 23244 if (!Array.isArray(expectedTypes)) { 23245 return isSameType(expectedTypes, type) ? 0 : -1; 23246 } 23247 23248 for (var i = 0, len = expectedTypes.length; i < len; i++) { 23249 if (isSameType(expectedTypes[i], type)) { 23250 return i; 23251 } 23252 } 23253 23254 return -1; 23255} 23256 23257function getInvalidTypeMessage(name, value, expectedTypes) { 23258 var message = "Invalid prop: type check failed for prop \"" + name + "\"." + " Expected " + expectedTypes.map(capitalize).join(', '); 23259 var expectedType = expectedTypes[0]; 23260 var receivedType = toRawType(value); 23261 var expectedValue = styleValue(value, expectedType); 23262 var receivedValue = styleValue(value, receivedType); // check if we need to specify expected value 23263 23264 if (expectedTypes.length === 1 && isExplicable(expectedType) && !isBoolean(expectedType, receivedType)) { 23265 message += " with value " + expectedValue; 23266 } 23267 23268 message += ", got " + receivedType + " "; // check if we need to specify received value 23269 23270 if (isExplicable(receivedType)) { 23271 message += "with value " + receivedValue + "."; 23272 } 23273 23274 return message; 23275} 23276 23277function styleValue(value, type) { 23278 if (type === 'String') { 23279 return "\"" + value + "\""; 23280 } else if (type === 'Number') { 23281 return "" + Number(value); 23282 } else { 23283 return "" + value; 23284 } 23285} 23286 23287function isExplicable(value) { 23288 var explicitTypes = ['string', 'number', 'boolean']; 23289 return explicitTypes.some(function (elem) { 23290 return value.toLowerCase() === elem; 23291 }); 23292} 23293 23294function isBoolean() { 23295 var args = [], 23296 len = arguments.length; 23297 23298 while (len--) args[len] = arguments[len]; 23299 23300 return args.some(function (elem) { 23301 return elem.toLowerCase() === 'boolean'; 23302 }); 23303} 23304/* */ 23305 23306 23307function handleError(err, vm, info) { 23308 // Deactivate deps tracking while processing error handler to avoid possible infinite rendering. 23309 // See: https://github.com/vuejs/vuex/issues/1505 23310 pushTarget(); 23311 23312 try { 23313 if (vm) { 23314 var cur = vm; 23315 23316 while (cur = cur.$parent) { 23317 var hooks = cur.$options.errorCaptured; 23318 23319 if (hooks) { 23320 for (var i = 0; i < hooks.length; i++) { 23321 try { 23322 var capture = hooks[i].call(cur, err, vm, info) === false; 23323 23324 if (capture) { 23325 return; 23326 } 23327 } catch (e) { 23328 globalHandleError(e, cur, 'errorCaptured hook'); 23329 } 23330 } 23331 } 23332 } 23333 } 23334 23335 globalHandleError(err, vm, info); 23336 } finally { 23337 popTarget(); 23338 } 23339} 23340 23341function invokeWithErrorHandling(handler, context, args, vm, info) { 23342 var res; 23343 23344 try { 23345 res = args ? handler.apply(context, args) : handler.call(context); 23346 23347 if (res && !res._isVue && isPromise(res) && !res._handled) { 23348 res.catch(function (e) { 23349 return handleError(e, vm, info + " (Promise/async)"); 23350 }); // issue #9511 23351 // avoid catch triggering multiple times when nested calls 23352 23353 res._handled = true; 23354 } 23355 } catch (e) { 23356 handleError(e, vm, info); 23357 } 23358 23359 return res; 23360} 23361 23362function globalHandleError(err, vm, info) { 23363 if (config.errorHandler) { 23364 try { 23365 return config.errorHandler.call(null, err, vm, info); 23366 } catch (e) { 23367 // if the user intentionally throws the original error in the handler, 23368 // do not log it twice 23369 if (e !== err) { 23370 logError(e, null, 'config.errorHandler'); 23371 } 23372 } 23373 } 23374 23375 logError(err, vm, info); 23376} 23377 23378function logError(err, vm, info) { 23379 if (true) { 23380 warn("Error in " + info + ": \"" + err.toString() + "\"", vm); 23381 } 23382 /* istanbul ignore else */ 23383 23384 23385 if ((inBrowser || inWeex) && typeof console !== 'undefined') { 23386 console.error(err); 23387 } else { 23388 throw err; 23389 } 23390} 23391/* */ 23392 23393 23394var isUsingMicroTask = false; 23395var callbacks = []; 23396var pending = false; 23397 23398function flushCallbacks() { 23399 pending = false; 23400 var copies = callbacks.slice(0); 23401 callbacks.length = 0; 23402 23403 for (var i = 0; i < copies.length; i++) { 23404 copies[i](); 23405 } 23406} // Here we have async deferring wrappers using microtasks. 23407// In 2.5 we used (macro) tasks (in combination with microtasks). 23408// However, it has subtle problems when state is changed right before repaint 23409// (e.g. #6813, out-in transitions). 23410// Also, using (macro) tasks in event handler would cause some weird behaviors 23411// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109). 23412// So we now use microtasks everywhere, again. 23413// A major drawback of this tradeoff is that there are some scenarios 23414// where microtasks have too high a priority and fire in between supposedly 23415// sequential events (e.g. #4521, #6690, which have workarounds) 23416// or even between bubbling of the same event (#6566). 23417 23418 23419var timerFunc; // The nextTick behavior leverages the microtask queue, which can be accessed 23420// via either native Promise.then or MutationObserver. 23421// MutationObserver has wider support, however it is seriously bugged in 23422// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It 23423// completely stops working after triggering a few times... so, if native 23424// Promise is available, we will use it: 23425 23426/* istanbul ignore next, $flow-disable-line */ 23427 23428if (typeof Promise !== 'undefined' && isNative(Promise)) { 23429 var p = Promise.resolve(); 23430 23431 timerFunc = function () { 23432 p.then(flushCallbacks); // In problematic UIWebViews, Promise.then doesn't completely break, but 23433 // it can get stuck in a weird state where callbacks are pushed into the 23434 // microtask queue but the queue isn't being flushed, until the browser 23435 // needs to do some other work, e.g. handle a timer. Therefore we can 23436 // "force" the microtask queue to be flushed by adding an empty timer. 23437 23438 if (isIOS) { 23439 setTimeout(noop); 23440 } 23441 }; 23442 23443 isUsingMicroTask = true; 23444} else if (!isIE && typeof MutationObserver !== 'undefined' && (isNative(MutationObserver) || // PhantomJS and iOS 7.x 23445MutationObserver.toString() === '[object MutationObserverConstructor]')) { 23446 // Use MutationObserver where native Promise is not available, 23447 // e.g. PhantomJS, iOS7, Android 4.4 23448 // (#6466 MutationObserver is unreliable in IE11) 23449 var counter = 1; 23450 var observer = new MutationObserver(flushCallbacks); 23451 var textNode = document.createTextNode(String(counter)); 23452 observer.observe(textNode, { 23453 characterData: true 23454 }); 23455 23456 timerFunc = function () { 23457 counter = (counter + 1) % 2; 23458 textNode.data = String(counter); 23459 }; 23460 23461 isUsingMicroTask = true; 23462} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) { 23463 // Fallback to setImmediate. 23464 // Technically it leverages the (macro) task queue, 23465 // but it is still a better choice than setTimeout. 23466 timerFunc = function () { 23467 setImmediate(flushCallbacks); 23468 }; 23469} else { 23470 // Fallback to setTimeout. 23471 timerFunc = function () { 23472 setTimeout(flushCallbacks, 0); 23473 }; 23474} 23475 23476function nextTick(cb, ctx) { 23477 var _resolve; 23478 23479 callbacks.push(function () { 23480 if (cb) { 23481 try { 23482 cb.call(ctx); 23483 } catch (e) { 23484 handleError(e, ctx, 'nextTick'); 23485 } 23486 } else if (_resolve) { 23487 _resolve(ctx); 23488 } 23489 }); 23490 23491 if (!pending) { 23492 pending = true; 23493 timerFunc(); 23494 } // $flow-disable-line 23495 23496 23497 if (!cb && typeof Promise !== 'undefined') { 23498 return new Promise(function (resolve) { 23499 _resolve = resolve; 23500 }); 23501 } 23502} 23503/* */ 23504 23505 23506var mark; 23507var measure; 23508 23509if (true) { 23510 var perf = inBrowser && window.performance; 23511 /* istanbul ignore if */ 23512 23513 if (perf && perf.mark && perf.measure && perf.clearMarks && perf.clearMeasures) { 23514 mark = function (tag) { 23515 return perf.mark(tag); 23516 }; 23517 23518 measure = function (name, startTag, endTag) { 23519 perf.measure(name, startTag, endTag); 23520 perf.clearMarks(startTag); 23521 perf.clearMarks(endTag); // perf.clearMeasures(name) 23522 }; 23523 } 23524} 23525/* not type checking this file because flow doesn't play well with Proxy */ 23526 23527 23528var initProxy; 23529 23530if (true) { 23531 var allowedGlobals = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' + 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' + 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' + 'require' // for Webpack/Browserify 23532 ); 23533 23534 var warnNonPresent = function (target, key) { 23535 warn("Property or method \"" + key + "\" is not defined on the instance but " + 'referenced during render. Make sure that this property is reactive, ' + 'either in the data option, or for class-based components, by ' + 'initializing the property. ' + 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target); 23536 }; 23537 23538 var warnReservedPrefix = function (target, key) { 23539 warn("Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " + 'properties starting with "$" or "_" are not proxied in the Vue instance to ' + 'prevent conflicts with Vue internals. ' + 'See: https://vuejs.org/v2/api/#data', target); 23540 }; 23541 23542 var hasProxy = typeof Proxy !== 'undefined' && isNative(Proxy); 23543 23544 if (hasProxy) { 23545 var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact'); 23546 config.keyCodes = new Proxy(config.keyCodes, { 23547 set: function set(target, key, value) { 23548 if (isBuiltInModifier(key)) { 23549 warn("Avoid overwriting built-in modifier in config.keyCodes: ." + key); 23550 return false; 23551 } else { 23552 target[key] = value; 23553 return true; 23554 } 23555 } 23556 }); 23557 } 23558 23559 var hasHandler = { 23560 has: function has(target, key) { 23561 var has = key in target; 23562 var isAllowed = allowedGlobals(key) || typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data); 23563 23564 if (!has && !isAllowed) { 23565 if (key in target.$data) { 23566 warnReservedPrefix(target, key); 23567 } else { 23568 warnNonPresent(target, key); 23569 } 23570 } 23571 23572 return has || !isAllowed; 23573 } 23574 }; 23575 var getHandler = { 23576 get: function get(target, key) { 23577 if (typeof key === 'string' && !(key in target)) { 23578 if (key in target.$data) { 23579 warnReservedPrefix(target, key); 23580 } else { 23581 warnNonPresent(target, key); 23582 } 23583 } 23584 23585 return target[key]; 23586 } 23587 }; 23588 23589 initProxy = function initProxy(vm) { 23590 if (hasProxy) { 23591 // determine which proxy handler to use 23592 var options = vm.$options; 23593 var handlers = options.render && options.render._withStripped ? getHandler : hasHandler; 23594 vm._renderProxy = new Proxy(vm, handlers); 23595 } else { 23596 vm._renderProxy = vm; 23597 } 23598 }; 23599} 23600/* */ 23601 23602 23603var seenObjects = new _Set(); 23604/** 23605 * Recursively traverse an object to evoke all converted 23606 * getters, so that every nested property inside the object 23607 * is collected as a "deep" dependency. 23608 */ 23609 23610function traverse(val) { 23611 _traverse(val, seenObjects); 23612 23613 seenObjects.clear(); 23614} 23615 23616function _traverse(val, seen) { 23617 var i, keys; 23618 var isA = Array.isArray(val); 23619 23620 if (!isA && !isObject(val) || Object.isFrozen(val) || val instanceof VNode) { 23621 return; 23622 } 23623 23624 if (val.__ob__) { 23625 var depId = val.__ob__.dep.id; 23626 23627 if (seen.has(depId)) { 23628 return; 23629 } 23630 23631 seen.add(depId); 23632 } 23633 23634 if (isA) { 23635 i = val.length; 23636 23637 while (i--) { 23638 _traverse(val[i], seen); 23639 } 23640 } else { 23641 keys = Object.keys(val); 23642 i = keys.length; 23643 23644 while (i--) { 23645 _traverse(val[keys[i]], seen); 23646 } 23647 } 23648} 23649/* */ 23650 23651 23652var normalizeEvent = cached(function (name) { 23653 var passive = name.charAt(0) === '&'; 23654 name = passive ? name.slice(1) : name; 23655 var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first 23656 23657 name = once$$1 ? name.slice(1) : name; 23658 var capture = name.charAt(0) === '!'; 23659 name = capture ? name.slice(1) : name; 23660 return { 23661 name: name, 23662 once: once$$1, 23663 capture: capture, 23664 passive: passive 23665 }; 23666}); 23667 23668function createFnInvoker(fns, vm) { 23669 function invoker() { 23670 var arguments$1 = arguments; 23671 var fns = invoker.fns; 23672 23673 if (Array.isArray(fns)) { 23674 var cloned = fns.slice(); 23675 23676 for (var i = 0; i < cloned.length; i++) { 23677 invokeWithErrorHandling(cloned[i], null, arguments$1, vm, "v-on handler"); 23678 } 23679 } else { 23680 // return handler return value for single handlers 23681 return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler"); 23682 } 23683 } 23684 23685 invoker.fns = fns; 23686 return invoker; 23687} 23688 23689function updateListeners(on, oldOn, add, remove$$1, createOnceHandler, vm) { 23690 var name, def$$1, cur, old, event; 23691 23692 for (name in on) { 23693 def$$1 = cur = on[name]; 23694 old = oldOn[name]; 23695 event = normalizeEvent(name); 23696 23697 if (isUndef(cur)) { 23698 true && warn("Invalid handler for event \"" + event.name + "\": got " + String(cur), vm); 23699 } else if (isUndef(old)) { 23700 if (isUndef(cur.fns)) { 23701 cur = on[name] = createFnInvoker(cur, vm); 23702 } 23703 23704 if (isTrue(event.once)) { 23705 cur = on[name] = createOnceHandler(event.name, cur, event.capture); 23706 } 23707 23708 add(event.name, cur, event.capture, event.passive, event.params); 23709 } else if (cur !== old) { 23710 old.fns = cur; 23711 on[name] = old; 23712 } 23713 } 23714 23715 for (name in oldOn) { 23716 if (isUndef(on[name])) { 23717 event = normalizeEvent(name); 23718 remove$$1(event.name, oldOn[name], event.capture); 23719 } 23720 } 23721} 23722/* */ 23723 23724 23725function mergeVNodeHook(def, hookKey, hook) { 23726 if (def instanceof VNode) { 23727 def = def.data.hook || (def.data.hook = {}); 23728 } 23729 23730 var invoker; 23731 var oldHook = def[hookKey]; 23732 23733 function wrappedHook() { 23734 hook.apply(this, arguments); // important: remove merged hook to ensure it's called only once 23735 // and prevent memory leak 23736 23737 remove(invoker.fns, wrappedHook); 23738 } 23739 23740 if (isUndef(oldHook)) { 23741 // no existing hook 23742 invoker = createFnInvoker([wrappedHook]); 23743 } else { 23744 /* istanbul ignore if */ 23745 if (isDef(oldHook.fns) && isTrue(oldHook.merged)) { 23746 // already a merged invoker 23747 invoker = oldHook; 23748 invoker.fns.push(wrappedHook); 23749 } else { 23750 // existing plain hook 23751 invoker = createFnInvoker([oldHook, wrappedHook]); 23752 } 23753 } 23754 23755 invoker.merged = true; 23756 def[hookKey] = invoker; 23757} 23758/* */ 23759 23760 23761function extractPropsFromVNodeData(data, Ctor, tag) { 23762 // we are only extracting raw values here. 23763 // validation and default values are handled in the child 23764 // component itself. 23765 var propOptions = Ctor.options.props; 23766 23767 if (isUndef(propOptions)) { 23768 return; 23769 } 23770 23771 var res = {}; 23772 var attrs = data.attrs; 23773 var props = data.props; 23774 23775 if (isDef(attrs) || isDef(props)) { 23776 for (var key in propOptions) { 23777 var altKey = hyphenate(key); 23778 23779 if (true) { 23780 var keyInLowerCase = key.toLowerCase(); 23781 23782 if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) { 23783 tip("Prop \"" + keyInLowerCase + "\" is passed to component " + formatComponentName(tag || Ctor) + ", but the declared prop name is" + " \"" + key + "\". " + "Note that HTML attributes are case-insensitive and camelCased " + "props need to use their kebab-case equivalents when using in-DOM " + "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"."); 23784 } 23785 } 23786 23787 checkProp(res, props, key, altKey, true) || checkProp(res, attrs, key, altKey, false); 23788 } 23789 } 23790 23791 return res; 23792} 23793 23794function checkProp(res, hash, key, altKey, preserve) { 23795 if (isDef(hash)) { 23796 if (hasOwn(hash, key)) { 23797 res[key] = hash[key]; 23798 23799 if (!preserve) { 23800 delete hash[key]; 23801 } 23802 23803 return true; 23804 } else if (hasOwn(hash, altKey)) { 23805 res[key] = hash[altKey]; 23806 23807 if (!preserve) { 23808 delete hash[altKey]; 23809 } 23810 23811 return true; 23812 } 23813 } 23814 23815 return false; 23816} 23817/* */ 23818// The template compiler attempts to minimize the need for normalization by 23819// statically analyzing the template at compile time. 23820// 23821// For plain HTML markup, normalization can be completely skipped because the 23822// generated render function is guaranteed to return Array<VNode>. There are 23823// two cases where extra normalization is needed: 23824// 1. When the children contains components - because a functional component 23825// may return an Array instead of a single root. In this case, just a simple 23826// normalization is needed - if any child is an Array, we flatten the whole 23827// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep 23828// because functional components already normalize their own children. 23829 23830 23831function simpleNormalizeChildren(children) { 23832 for (var i = 0; i < children.length; i++) { 23833 if (Array.isArray(children[i])) { 23834 return Array.prototype.concat.apply([], children); 23835 } 23836 } 23837 23838 return children; 23839} // 2. When the children contains constructs that always generated nested Arrays, 23840// e.g. <template>, <slot>, v-for, or when the children is provided by user 23841// with hand-written render functions / JSX. In such cases a full normalization 23842// is needed to cater to all possible types of children values. 23843 23844 23845function normalizeChildren(children) { 23846 return isPrimitive(children) ? [createTextVNode(children)] : Array.isArray(children) ? normalizeArrayChildren(children) : undefined; 23847} 23848 23849function isTextNode(node) { 23850 return isDef(node) && isDef(node.text) && isFalse(node.isComment); 23851} 23852 23853function normalizeArrayChildren(children, nestedIndex) { 23854 var res = []; 23855 var i, c, lastIndex, last; 23856 23857 for (i = 0; i < children.length; i++) { 23858 c = children[i]; 23859 23860 if (isUndef(c) || typeof c === 'boolean') { 23861 continue; 23862 } 23863 23864 lastIndex = res.length - 1; 23865 last = res[lastIndex]; // nested 23866 23867 if (Array.isArray(c)) { 23868 if (c.length > 0) { 23869 c = normalizeArrayChildren(c, (nestedIndex || '') + "_" + i); // merge adjacent text nodes 23870 23871 if (isTextNode(c[0]) && isTextNode(last)) { 23872 res[lastIndex] = createTextVNode(last.text + c[0].text); 23873 c.shift(); 23874 } 23875 23876 res.push.apply(res, c); 23877 } 23878 } else if (isPrimitive(c)) { 23879 if (isTextNode(last)) { 23880 // merge adjacent text nodes 23881 // this is necessary for SSR hydration because text nodes are 23882 // essentially merged when rendered to HTML strings 23883 res[lastIndex] = createTextVNode(last.text + c); 23884 } else if (c !== '') { 23885 // convert primitive to vnode 23886 res.push(createTextVNode(c)); 23887 } 23888 } else { 23889 if (isTextNode(c) && isTextNode(last)) { 23890 // merge adjacent text nodes 23891 res[lastIndex] = createTextVNode(last.text + c.text); 23892 } else { 23893 // default key for nested array children (likely generated by v-for) 23894 if (isTrue(children._isVList) && isDef(c.tag) && isUndef(c.key) && isDef(nestedIndex)) { 23895 c.key = "__vlist" + nestedIndex + "_" + i + "__"; 23896 } 23897 23898 res.push(c); 23899 } 23900 } 23901 } 23902 23903 return res; 23904} 23905/* */ 23906 23907 23908function initProvide(vm) { 23909 var provide = vm.$options.provide; 23910 23911 if (provide) { 23912 vm._provided = typeof provide === 'function' ? provide.call(vm) : provide; 23913 } 23914} 23915 23916function initInjections(vm) { 23917 var result = resolveInject(vm.$options.inject, vm); 23918 23919 if (result) { 23920 toggleObserving(false); 23921 Object.keys(result).forEach(function (key) { 23922 /* istanbul ignore else */ 23923 if (true) { 23924 defineReactive$$1(vm, key, result[key], function () { 23925 warn("Avoid mutating an injected value directly since the changes will be " + "overwritten whenever the provided component re-renders. " + "injection being mutated: \"" + key + "\"", vm); 23926 }); 23927 } else {} 23928 }); 23929 toggleObserving(true); 23930 } 23931} 23932 23933function resolveInject(inject, vm) { 23934 if (inject) { 23935 // inject is :any because flow is not smart enough to figure out cached 23936 var result = Object.create(null); 23937 var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject); 23938 23939 for (var i = 0; i < keys.length; i++) { 23940 var key = keys[i]; // #6574 in case the inject object is observed... 23941 23942 if (key === '__ob__') { 23943 continue; 23944 } 23945 23946 var provideKey = inject[key].from; 23947 var source = vm; 23948 23949 while (source) { 23950 if (source._provided && hasOwn(source._provided, provideKey)) { 23951 result[key] = source._provided[provideKey]; 23952 break; 23953 } 23954 23955 source = source.$parent; 23956 } 23957 23958 if (!source) { 23959 if ('default' in inject[key]) { 23960 var provideDefault = inject[key].default; 23961 result[key] = typeof provideDefault === 'function' ? provideDefault.call(vm) : provideDefault; 23962 } else if (true) { 23963 warn("Injection \"" + key + "\" not found", vm); 23964 } 23965 } 23966 } 23967 23968 return result; 23969 } 23970} 23971/* */ 23972 23973/** 23974 * Runtime helper for resolving raw children VNodes into a slot object. 23975 */ 23976 23977 23978function resolveSlots(children, context) { 23979 if (!children || !children.length) { 23980 return {}; 23981 } 23982 23983 var slots = {}; 23984 23985 for (var i = 0, l = children.length; i < l; i++) { 23986 var child = children[i]; 23987 var data = child.data; // remove slot attribute if the node is resolved as a Vue slot node 23988 23989 if (data && data.attrs && data.attrs.slot) { 23990 delete data.attrs.slot; 23991 } // named slots should only be respected if the vnode was rendered in the 23992 // same context. 23993 23994 23995 if ((child.context === context || child.fnContext === context) && data && data.slot != null) { 23996 var name = data.slot; 23997 var slot = slots[name] || (slots[name] = []); 23998 23999 if (child.tag === 'template') { 24000 slot.push.apply(slot, child.children || []); 24001 } else { 24002 slot.push(child); 24003 } 24004 } else { 24005 (slots.default || (slots.default = [])).push(child); 24006 } 24007 } // ignore slots that contains only whitespace 24008 24009 24010 for (var name$1 in slots) { 24011 if (slots[name$1].every(isWhitespace)) { 24012 delete slots[name$1]; 24013 } 24014 } 24015 24016 return slots; 24017} 24018 24019function isWhitespace(node) { 24020 return node.isComment && !node.asyncFactory || node.text === ' '; 24021} 24022/* */ 24023 24024 24025function normalizeScopedSlots(slots, normalSlots, prevSlots) { 24026 var res; 24027 var hasNormalSlots = Object.keys(normalSlots).length > 0; 24028 var isStable = slots ? !!slots.$stable : !hasNormalSlots; 24029 var key = slots && slots.$key; 24030 24031 if (!slots) { 24032 res = {}; 24033 } else if (slots._normalized) { 24034 // fast path 1: child component re-render only, parent did not change 24035 return slots._normalized; 24036 } else if (isStable && prevSlots && prevSlots !== emptyObject && key === prevSlots.$key && !hasNormalSlots && !prevSlots.$hasNormal) { 24037 // fast path 2: stable scoped slots w/ no normal slots to proxy, 24038 // only need to normalize once 24039 return prevSlots; 24040 } else { 24041 res = {}; 24042 24043 for (var key$1 in slots) { 24044 if (slots[key$1] && key$1[0] !== '$') { 24045 res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]); 24046 } 24047 } 24048 } // expose normal slots on scopedSlots 24049 24050 24051 for (var key$2 in normalSlots) { 24052 if (!(key$2 in res)) { 24053 res[key$2] = proxyNormalSlot(normalSlots, key$2); 24054 } 24055 } // avoriaz seems to mock a non-extensible $scopedSlots object 24056 // and when that is passed down this would cause an error 24057 24058 24059 if (slots && Object.isExtensible(slots)) { 24060 slots._normalized = res; 24061 } 24062 24063 def(res, '$stable', isStable); 24064 def(res, '$key', key); 24065 def(res, '$hasNormal', hasNormalSlots); 24066 return res; 24067} 24068 24069function normalizeScopedSlot(normalSlots, key, fn) { 24070 var normalized = function () { 24071 var res = arguments.length ? fn.apply(null, arguments) : fn({}); 24072 res = res && typeof res === 'object' && !Array.isArray(res) ? [res] // single vnode 24073 : normalizeChildren(res); 24074 return res && (res.length === 0 || res.length === 1 && res[0].isComment // #9658 24075 ) ? undefined : res; 24076 }; // this is a slot using the new v-slot syntax without scope. although it is 24077 // compiled as a scoped slot, render fn users would expect it to be present 24078 // on this.$slots because the usage is semantically a normal slot. 24079 24080 24081 if (fn.proxy) { 24082 Object.defineProperty(normalSlots, key, { 24083 get: normalized, 24084 enumerable: true, 24085 configurable: true 24086 }); 24087 } 24088 24089 return normalized; 24090} 24091 24092function proxyNormalSlot(slots, key) { 24093 return function () { 24094 return slots[key]; 24095 }; 24096} 24097/* */ 24098 24099/** 24100 * Runtime helper for rendering v-for lists. 24101 */ 24102 24103 24104function renderList(val, render) { 24105 var ret, i, l, keys, key; 24106 24107 if (Array.isArray(val) || typeof val === 'string') { 24108 ret = new Array(val.length); 24109 24110 for (i = 0, l = val.length; i < l; i++) { 24111 ret[i] = render(val[i], i); 24112 } 24113 } else if (typeof val === 'number') { 24114 ret = new Array(val); 24115 24116 for (i = 0; i < val; i++) { 24117 ret[i] = render(i + 1, i); 24118 } 24119 } else if (isObject(val)) { 24120 if (hasSymbol && val[Symbol.iterator]) { 24121 ret = []; 24122 var iterator = val[Symbol.iterator](); 24123 var result = iterator.next(); 24124 24125 while (!result.done) { 24126 ret.push(render(result.value, ret.length)); 24127 result = iterator.next(); 24128 } 24129 } else { 24130 keys = Object.keys(val); 24131 ret = new Array(keys.length); 24132 24133 for (i = 0, l = keys.length; i < l; i++) { 24134 key = keys[i]; 24135 ret[i] = render(val[key], key, i); 24136 } 24137 } 24138 } 24139 24140 if (!isDef(ret)) { 24141 ret = []; 24142 } 24143 24144 ret._isVList = true; 24145 return ret; 24146} 24147/* */ 24148 24149/** 24150 * Runtime helper for rendering <slot> 24151 */ 24152 24153 24154function renderSlot(name, fallback, props, bindObject) { 24155 var scopedSlotFn = this.$scopedSlots[name]; 24156 var nodes; 24157 24158 if (scopedSlotFn) { 24159 // scoped slot 24160 props = props || {}; 24161 24162 if (bindObject) { 24163 if ( true && !isObject(bindObject)) { 24164 warn('slot v-bind without argument expects an Object', this); 24165 } 24166 24167 props = extend(extend({}, bindObject), props); 24168 } 24169 24170 nodes = scopedSlotFn(props) || fallback; 24171 } else { 24172 nodes = this.$slots[name] || fallback; 24173 } 24174 24175 var target = props && props.slot; 24176 24177 if (target) { 24178 return this.$createElement('template', { 24179 slot: target 24180 }, nodes); 24181 } else { 24182 return nodes; 24183 } 24184} 24185/* */ 24186 24187/** 24188 * Runtime helper for resolving filters 24189 */ 24190 24191 24192function resolveFilter(id) { 24193 return resolveAsset(this.$options, 'filters', id, true) || identity; 24194} 24195/* */ 24196 24197 24198function isKeyNotMatch(expect, actual) { 24199 if (Array.isArray(expect)) { 24200 return expect.indexOf(actual) === -1; 24201 } else { 24202 return expect !== actual; 24203 } 24204} 24205/** 24206 * Runtime helper for checking keyCodes from config. 24207 * exposed as Vue.prototype._k 24208 * passing in eventKeyName as last argument separately for backwards compat 24209 */ 24210 24211 24212function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) { 24213 var mappedKeyCode = config.keyCodes[key] || builtInKeyCode; 24214 24215 if (builtInKeyName && eventKeyName && !config.keyCodes[key]) { 24216 return isKeyNotMatch(builtInKeyName, eventKeyName); 24217 } else if (mappedKeyCode) { 24218 return isKeyNotMatch(mappedKeyCode, eventKeyCode); 24219 } else if (eventKeyName) { 24220 return hyphenate(eventKeyName) !== key; 24221 } 24222} 24223/* */ 24224 24225/** 24226 * Runtime helper for merging v-bind="object" into a VNode's data. 24227 */ 24228 24229 24230function bindObjectProps(data, tag, value, asProp, isSync) { 24231 if (value) { 24232 if (!isObject(value)) { 24233 true && warn('v-bind without argument expects an Object or Array value', this); 24234 } else { 24235 if (Array.isArray(value)) { 24236 value = toObject(value); 24237 } 24238 24239 var hash; 24240 24241 var loop = function (key) { 24242 if (key === 'class' || key === 'style' || isReservedAttribute(key)) { 24243 hash = data; 24244 } else { 24245 var type = data.attrs && data.attrs.type; 24246 hash = asProp || config.mustUseProp(tag, type, key) ? data.domProps || (data.domProps = {}) : data.attrs || (data.attrs = {}); 24247 } 24248 24249 var camelizedKey = camelize(key); 24250 var hyphenatedKey = hyphenate(key); 24251 24252 if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) { 24253 hash[key] = value[key]; 24254 24255 if (isSync) { 24256 var on = data.on || (data.on = {}); 24257 24258 on["update:" + key] = function ($event) { 24259 value[key] = $event; 24260 }; 24261 } 24262 } 24263 }; 24264 24265 for (var key in value) loop(key); 24266 } 24267 } 24268 24269 return data; 24270} 24271/* */ 24272 24273/** 24274 * Runtime helper for rendering static trees. 24275 */ 24276 24277 24278function renderStatic(index, isInFor) { 24279 var cached = this._staticTrees || (this._staticTrees = []); 24280 var tree = cached[index]; // if has already-rendered static tree and not inside v-for, 24281 // we can reuse the same tree. 24282 24283 if (tree && !isInFor) { 24284 return tree; 24285 } // otherwise, render a fresh tree. 24286 24287 24288 tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, null, this // for render fns generated for functional component templates 24289 ); 24290 markStatic(tree, "__static__" + index, false); 24291 return tree; 24292} 24293/** 24294 * Runtime helper for v-once. 24295 * Effectively it means marking the node as static with a unique key. 24296 */ 24297 24298 24299function markOnce(tree, index, key) { 24300 markStatic(tree, "__once__" + index + (key ? "_" + key : ""), true); 24301 return tree; 24302} 24303 24304function markStatic(tree, key, isOnce) { 24305 if (Array.isArray(tree)) { 24306 for (var i = 0; i < tree.length; i++) { 24307 if (tree[i] && typeof tree[i] !== 'string') { 24308 markStaticNode(tree[i], key + "_" + i, isOnce); 24309 } 24310 } 24311 } else { 24312 markStaticNode(tree, key, isOnce); 24313 } 24314} 24315 24316function markStaticNode(node, key, isOnce) { 24317 node.isStatic = true; 24318 node.key = key; 24319 node.isOnce = isOnce; 24320} 24321/* */ 24322 24323 24324function bindObjectListeners(data, value) { 24325 if (value) { 24326 if (!isPlainObject(value)) { 24327 true && warn('v-on without argument expects an Object value', this); 24328 } else { 24329 var on = data.on = data.on ? extend({}, data.on) : {}; 24330 24331 for (var key in value) { 24332 var existing = on[key]; 24333 var ours = value[key]; 24334 on[key] = existing ? [].concat(existing, ours) : ours; 24335 } 24336 } 24337 } 24338 24339 return data; 24340} 24341/* */ 24342 24343 24344function resolveScopedSlots(fns, // see flow/vnode 24345res, // the following are added in 2.6 24346hasDynamicKeys, contentHashKey) { 24347 res = res || { 24348 $stable: !hasDynamicKeys 24349 }; 24350 24351 for (var i = 0; i < fns.length; i++) { 24352 var slot = fns[i]; 24353 24354 if (Array.isArray(slot)) { 24355 resolveScopedSlots(slot, res, hasDynamicKeys); 24356 } else if (slot) { 24357 // marker for reverse proxying v-slot without scope on this.$slots 24358 if (slot.proxy) { 24359 slot.fn.proxy = true; 24360 } 24361 24362 res[slot.key] = slot.fn; 24363 } 24364 } 24365 24366 if (contentHashKey) { 24367 res.$key = contentHashKey; 24368 } 24369 24370 return res; 24371} 24372/* */ 24373 24374 24375function bindDynamicKeys(baseObj, values) { 24376 for (var i = 0; i < values.length; i += 2) { 24377 var key = values[i]; 24378 24379 if (typeof key === 'string' && key) { 24380 baseObj[values[i]] = values[i + 1]; 24381 } else if ( true && key !== '' && key !== null) { 24382 // null is a special value for explicitly removing a binding 24383 warn("Invalid value for dynamic directive argument (expected string or null): " + key, this); 24384 } 24385 } 24386 24387 return baseObj; 24388} // helper to dynamically append modifier runtime markers to event names. 24389// ensure only append when value is already string, otherwise it will be cast 24390// to string and cause the type check to miss. 24391 24392 24393function prependModifier(value, symbol) { 24394 return typeof value === 'string' ? symbol + value : value; 24395} 24396/* */ 24397 24398 24399function installRenderHelpers(target) { 24400 target._o = markOnce; 24401 target._n = toNumber; 24402 target._s = toString; 24403 target._l = renderList; 24404 target._t = renderSlot; 24405 target._q = looseEqual; 24406 target._i = looseIndexOf; 24407 target._m = renderStatic; 24408 target._f = resolveFilter; 24409 target._k = checkKeyCodes; 24410 target._b = bindObjectProps; 24411 target._v = createTextVNode; 24412 target._e = createEmptyVNode; 24413 target._u = resolveScopedSlots; 24414 target._g = bindObjectListeners; 24415 target._d = bindDynamicKeys; 24416 target._p = prependModifier; 24417} 24418/* */ 24419 24420 24421function FunctionalRenderContext(data, props, children, parent, Ctor) { 24422 var this$1 = this; 24423 var options = Ctor.options; // ensure the createElement function in functional components 24424 // gets a unique context - this is necessary for correct named slot check 24425 24426 var contextVm; 24427 24428 if (hasOwn(parent, '_uid')) { 24429 contextVm = Object.create(parent); // $flow-disable-line 24430 24431 contextVm._original = parent; 24432 } else { 24433 // the context vm passed in is a functional context as well. 24434 // in this case we want to make sure we are able to get a hold to the 24435 // real context instance. 24436 contextVm = parent; // $flow-disable-line 24437 24438 parent = parent._original; 24439 } 24440 24441 var isCompiled = isTrue(options._compiled); 24442 var needNormalization = !isCompiled; 24443 this.data = data; 24444 this.props = props; 24445 this.children = children; 24446 this.parent = parent; 24447 this.listeners = data.on || emptyObject; 24448 this.injections = resolveInject(options.inject, parent); 24449 24450 this.slots = function () { 24451 if (!this$1.$slots) { 24452 normalizeScopedSlots(data.scopedSlots, this$1.$slots = resolveSlots(children, parent)); 24453 } 24454 24455 return this$1.$slots; 24456 }; 24457 24458 Object.defineProperty(this, 'scopedSlots', { 24459 enumerable: true, 24460 get: function get() { 24461 return normalizeScopedSlots(data.scopedSlots, this.slots()); 24462 } 24463 }); // support for compiled functional template 24464 24465 if (isCompiled) { 24466 // exposing $options for renderStatic() 24467 this.$options = options; // pre-resolve slots for renderSlot() 24468 24469 this.$slots = this.slots(); 24470 this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots); 24471 } 24472 24473 if (options._scopeId) { 24474 this._c = function (a, b, c, d) { 24475 var vnode = createElement(contextVm, a, b, c, d, needNormalization); 24476 24477 if (vnode && !Array.isArray(vnode)) { 24478 vnode.fnScopeId = options._scopeId; 24479 vnode.fnContext = parent; 24480 } 24481 24482 return vnode; 24483 }; 24484 } else { 24485 this._c = function (a, b, c, d) { 24486 return createElement(contextVm, a, b, c, d, needNormalization); 24487 }; 24488 } 24489} 24490 24491installRenderHelpers(FunctionalRenderContext.prototype); 24492 24493function createFunctionalComponent(Ctor, propsData, data, contextVm, children) { 24494 var options = Ctor.options; 24495 var props = {}; 24496 var propOptions = options.props; 24497 24498 if (isDef(propOptions)) { 24499 for (var key in propOptions) { 24500 props[key] = validateProp(key, propOptions, propsData || emptyObject); 24501 } 24502 } else { 24503 if (isDef(data.attrs)) { 24504 mergeProps(props, data.attrs); 24505 } 24506 24507 if (isDef(data.props)) { 24508 mergeProps(props, data.props); 24509 } 24510 } 24511 24512 var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor); 24513 var vnode = options.render.call(null, renderContext._c, renderContext); 24514 24515 if (vnode instanceof VNode) { 24516 return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext); 24517 } else if (Array.isArray(vnode)) { 24518 var vnodes = normalizeChildren(vnode) || []; 24519 var res = new Array(vnodes.length); 24520 24521 for (var i = 0; i < vnodes.length; i++) { 24522 res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext); 24523 } 24524 24525 return res; 24526 } 24527} 24528 24529function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) { 24530 // #7817 clone node before setting fnContext, otherwise if the node is reused 24531 // (e.g. it was from a cached normal slot) the fnContext causes named slots 24532 // that should not be matched to match. 24533 var clone = cloneVNode(vnode); 24534 clone.fnContext = contextVm; 24535 clone.fnOptions = options; 24536 24537 if (true) { 24538 (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext; 24539 } 24540 24541 if (data.slot) { 24542 (clone.data || (clone.data = {})).slot = data.slot; 24543 } 24544 24545 return clone; 24546} 24547 24548function mergeProps(to, from) { 24549 for (var key in from) { 24550 to[camelize(key)] = from[key]; 24551 } 24552} 24553/* */ 24554 24555/* */ 24556 24557/* */ 24558 24559/* */ 24560// inline hooks to be invoked on component VNodes during patch 24561 24562 24563var componentVNodeHooks = { 24564 init: function init(vnode, hydrating) { 24565 if (vnode.componentInstance && !vnode.componentInstance._isDestroyed && vnode.data.keepAlive) { 24566 // kept-alive components, treat as a patch 24567 var mountedNode = vnode; // work around flow 24568 24569 componentVNodeHooks.prepatch(mountedNode, mountedNode); 24570 } else { 24571 var child = vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance); 24572 child.$mount(hydrating ? vnode.elm : undefined, hydrating); 24573 } 24574 }, 24575 prepatch: function prepatch(oldVnode, vnode) { 24576 var options = vnode.componentOptions; 24577 var child = vnode.componentInstance = oldVnode.componentInstance; 24578 updateChildComponent(child, options.propsData, // updated props 24579 options.listeners, // updated listeners 24580 vnode, // new parent vnode 24581 options.children // new children 24582 ); 24583 }, 24584 insert: function insert(vnode) { 24585 var context = vnode.context; 24586 var componentInstance = vnode.componentInstance; 24587 24588 if (!componentInstance._isMounted) { 24589 componentInstance._isMounted = true; 24590 callHook(componentInstance, 'mounted'); 24591 } 24592 24593 if (vnode.data.keepAlive) { 24594 if (context._isMounted) { 24595 // vue-router#1212 24596 // During updates, a kept-alive component's child components may 24597 // change, so directly walking the tree here may call activated hooks 24598 // on incorrect children. Instead we push them into a queue which will 24599 // be processed after the whole patch process ended. 24600 queueActivatedComponent(componentInstance); 24601 } else { 24602 activateChildComponent(componentInstance, true 24603 /* direct */ 24604 ); 24605 } 24606 } 24607 }, 24608 destroy: function destroy(vnode) { 24609 var componentInstance = vnode.componentInstance; 24610 24611 if (!componentInstance._isDestroyed) { 24612 if (!vnode.data.keepAlive) { 24613 componentInstance.$destroy(); 24614 } else { 24615 deactivateChildComponent(componentInstance, true 24616 /* direct */ 24617 ); 24618 } 24619 } 24620 } 24621}; 24622var hooksToMerge = Object.keys(componentVNodeHooks); 24623 24624function createComponent(Ctor, data, context, children, tag) { 24625 if (isUndef(Ctor)) { 24626 return; 24627 } 24628 24629 var baseCtor = context.$options._base; // plain options object: turn it into a constructor 24630 24631 if (isObject(Ctor)) { 24632 Ctor = baseCtor.extend(Ctor); 24633 } // if at this stage it's not a constructor or an async component factory, 24634 // reject. 24635 24636 24637 if (typeof Ctor !== 'function') { 24638 if (true) { 24639 warn("Invalid Component definition: " + String(Ctor), context); 24640 } 24641 24642 return; 24643 } // async component 24644 24645 24646 var asyncFactory; 24647 24648 if (isUndef(Ctor.cid)) { 24649 asyncFactory = Ctor; 24650 Ctor = resolveAsyncComponent(asyncFactory, baseCtor); 24651 24652 if (Ctor === undefined) { 24653 // return a placeholder node for async component, which is rendered 24654 // as a comment node but preserves all the raw information for the node. 24655 // the information will be used for async server-rendering and hydration. 24656 return createAsyncPlaceholder(asyncFactory, data, context, children, tag); 24657 } 24658 } 24659 24660 data = data || {}; // resolve constructor options in case global mixins are applied after 24661 // component constructor creation 24662 24663 resolveConstructorOptions(Ctor); // transform component v-model data into props & events 24664 24665 if (isDef(data.model)) { 24666 transformModel(Ctor.options, data); 24667 } // extract props 24668 24669 24670 var propsData = extractPropsFromVNodeData(data, Ctor, tag); // functional component 24671 24672 if (isTrue(Ctor.options.functional)) { 24673 return createFunctionalComponent(Ctor, propsData, data, context, children); 24674 } // extract listeners, since these needs to be treated as 24675 // child component listeners instead of DOM listeners 24676 24677 24678 var listeners = data.on; // replace with listeners with .native modifier 24679 // so it gets processed during parent component patch. 24680 24681 data.on = data.nativeOn; 24682 24683 if (isTrue(Ctor.options.abstract)) { 24684 // abstract components do not keep anything 24685 // other than props & listeners & slot 24686 // work around flow 24687 var slot = data.slot; 24688 data = {}; 24689 24690 if (slot) { 24691 data.slot = slot; 24692 } 24693 } // install component management hooks onto the placeholder node 24694 24695 24696 installComponentHooks(data); // return a placeholder vnode 24697 24698 var name = Ctor.options.name || tag; 24699 var vnode = new VNode("vue-component-" + Ctor.cid + (name ? "-" + name : ''), data, undefined, undefined, undefined, context, { 24700 Ctor: Ctor, 24701 propsData: propsData, 24702 listeners: listeners, 24703 tag: tag, 24704 children: children 24705 }, asyncFactory); 24706 return vnode; 24707} 24708 24709function createComponentInstanceForVnode(vnode, // we know it's MountedComponentVNode but flow doesn't 24710parent // activeInstance in lifecycle state 24711) { 24712 var options = { 24713 _isComponent: true, 24714 _parentVnode: vnode, 24715 parent: parent 24716 }; // check inline-template render functions 24717 24718 var inlineTemplate = vnode.data.inlineTemplate; 24719 24720 if (isDef(inlineTemplate)) { 24721 options.render = inlineTemplate.render; 24722 options.staticRenderFns = inlineTemplate.staticRenderFns; 24723 } 24724 24725 return new vnode.componentOptions.Ctor(options); 24726} 24727 24728function installComponentHooks(data) { 24729 var hooks = data.hook || (data.hook = {}); 24730 24731 for (var i = 0; i < hooksToMerge.length; i++) { 24732 var key = hooksToMerge[i]; 24733 var existing = hooks[key]; 24734 var toMerge = componentVNodeHooks[key]; 24735 24736 if (existing !== toMerge && !(existing && existing._merged)) { 24737 hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge; 24738 } 24739 } 24740} 24741 24742function mergeHook$1(f1, f2) { 24743 var merged = function (a, b) { 24744 // flow complains about extra args which is why we use any 24745 f1(a, b); 24746 f2(a, b); 24747 }; 24748 24749 merged._merged = true; 24750 return merged; 24751} // transform component v-model info (value and callback) into 24752// prop and event handler respectively. 24753 24754 24755function transformModel(options, data) { 24756 var prop = options.model && options.model.prop || 'value'; 24757 var event = options.model && options.model.event || 'input'; 24758 (data.attrs || (data.attrs = {}))[prop] = data.model.value; 24759 var on = data.on || (data.on = {}); 24760 var existing = on[event]; 24761 var callback = data.model.callback; 24762 24763 if (isDef(existing)) { 24764 if (Array.isArray(existing) ? existing.indexOf(callback) === -1 : existing !== callback) { 24765 on[event] = [callback].concat(existing); 24766 } 24767 } else { 24768 on[event] = callback; 24769 } 24770} 24771/* */ 24772 24773 24774var SIMPLE_NORMALIZE = 1; 24775var ALWAYS_NORMALIZE = 2; // wrapper function for providing a more flexible interface 24776// without getting yelled at by flow 24777 24778function createElement(context, tag, data, children, normalizationType, alwaysNormalize) { 24779 if (Array.isArray(data) || isPrimitive(data)) { 24780 normalizationType = children; 24781 children = data; 24782 data = undefined; 24783 } 24784 24785 if (isTrue(alwaysNormalize)) { 24786 normalizationType = ALWAYS_NORMALIZE; 24787 } 24788 24789 return _createElement(context, tag, data, children, normalizationType); 24790} 24791 24792function _createElement(context, tag, data, children, normalizationType) { 24793 if (isDef(data) && isDef(data.__ob__)) { 24794 true && warn("Avoid using observed data object as vnode data: " + JSON.stringify(data) + "\n" + 'Always create fresh vnode data objects in each render!', context); 24795 return createEmptyVNode(); 24796 } // object syntax in v-bind 24797 24798 24799 if (isDef(data) && isDef(data.is)) { 24800 tag = data.is; 24801 } 24802 24803 if (!tag) { 24804 // in case of component :is set to falsy value 24805 return createEmptyVNode(); 24806 } // warn against non-primitive key 24807 24808 24809 if ( true && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) { 24810 { 24811 warn('Avoid using non-primitive value as key, ' + 'use string/number value instead.', context); 24812 } 24813 } // support single function children as default scoped slot 24814 24815 24816 if (Array.isArray(children) && typeof children[0] === 'function') { 24817 data = data || {}; 24818 data.scopedSlots = { 24819 default: children[0] 24820 }; 24821 children.length = 0; 24822 } 24823 24824 if (normalizationType === ALWAYS_NORMALIZE) { 24825 children = normalizeChildren(children); 24826 } else if (normalizationType === SIMPLE_NORMALIZE) { 24827 children = simpleNormalizeChildren(children); 24828 } 24829 24830 var vnode, ns; 24831 24832 if (typeof tag === 'string') { 24833 var Ctor; 24834 ns = context.$vnode && context.$vnode.ns || config.getTagNamespace(tag); 24835 24836 if (config.isReservedTag(tag)) { 24837 // platform built-in elements 24838 if ( true && isDef(data) && isDef(data.nativeOn)) { 24839 warn("The .native modifier for v-on is only valid on components but it was used on <" + tag + ">.", context); 24840 } 24841 24842 vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context); 24843 } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) { 24844 // component 24845 vnode = createComponent(Ctor, data, context, children, tag); 24846 } else { 24847 // unknown or unlisted namespaced elements 24848 // check at runtime because it may get assigned a namespace when its 24849 // parent normalizes children 24850 vnode = new VNode(tag, data, children, undefined, undefined, context); 24851 } 24852 } else { 24853 // direct component options / constructor 24854 vnode = createComponent(tag, data, context, children); 24855 } 24856 24857 if (Array.isArray(vnode)) { 24858 return vnode; 24859 } else if (isDef(vnode)) { 24860 if (isDef(ns)) { 24861 applyNS(vnode, ns); 24862 } 24863 24864 if (isDef(data)) { 24865 registerDeepBindings(data); 24866 } 24867 24868 return vnode; 24869 } else { 24870 return createEmptyVNode(); 24871 } 24872} 24873 24874function applyNS(vnode, ns, force) { 24875 vnode.ns = ns; 24876 24877 if (vnode.tag === 'foreignObject') { 24878 // use default namespace inside foreignObject 24879 ns = undefined; 24880 force = true; 24881 } 24882 24883 if (isDef(vnode.children)) { 24884 for (var i = 0, l = vnode.children.length; i < l; i++) { 24885 var child = vnode.children[i]; 24886 24887 if (isDef(child.tag) && (isUndef(child.ns) || isTrue(force) && child.tag !== 'svg')) { 24888 applyNS(child, ns, force); 24889 } 24890 } 24891 } 24892} // ref #5318 24893// necessary to ensure parent re-render when deep bindings like :style and 24894// :class are used on slot nodes 24895 24896 24897function registerDeepBindings(data) { 24898 if (isObject(data.style)) { 24899 traverse(data.style); 24900 } 24901 24902 if (isObject(data.class)) { 24903 traverse(data.class); 24904 } 24905} 24906/* */ 24907 24908 24909function initRender(vm) { 24910 vm._vnode = null; // the root of the child tree 24911 24912 vm._staticTrees = null; // v-once cached trees 24913 24914 var options = vm.$options; 24915 var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree 24916 24917 var renderContext = parentVnode && parentVnode.context; 24918 vm.$slots = resolveSlots(options._renderChildren, renderContext); 24919 vm.$scopedSlots = emptyObject; // bind the createElement fn to this instance 24920 // so that we get proper render context inside it. 24921 // args order: tag, data, children, normalizationType, alwaysNormalize 24922 // internal version is used by render functions compiled from templates 24923 24924 vm._c = function (a, b, c, d) { 24925 return createElement(vm, a, b, c, d, false); 24926 }; // normalization is always applied for the public version, used in 24927 // user-written render functions. 24928 24929 24930 vm.$createElement = function (a, b, c, d) { 24931 return createElement(vm, a, b, c, d, true); 24932 }; // $attrs & $listeners are exposed for easier HOC creation. 24933 // they need to be reactive so that HOCs using them are always updated 24934 24935 24936 var parentData = parentVnode && parentVnode.data; 24937 /* istanbul ignore else */ 24938 24939 if (true) { 24940 defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () { 24941 !isUpdatingChildComponent && warn("$attrs is readonly.", vm); 24942 }, true); 24943 defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () { 24944 !isUpdatingChildComponent && warn("$listeners is readonly.", vm); 24945 }, true); 24946 } else {} 24947} 24948 24949var currentRenderingInstance = null; 24950 24951function renderMixin(Vue) { 24952 // install runtime convenience helpers 24953 installRenderHelpers(Vue.prototype); 24954 24955 Vue.prototype.$nextTick = function (fn) { 24956 return nextTick(fn, this); 24957 }; 24958 24959 Vue.prototype._render = function () { 24960 var vm = this; 24961 var ref = vm.$options; 24962 var render = ref.render; 24963 var _parentVnode = ref._parentVnode; 24964 24965 if (_parentVnode) { 24966 vm.$scopedSlots = normalizeScopedSlots(_parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots); 24967 } // set parent vnode. this allows render functions to have access 24968 // to the data on the placeholder node. 24969 24970 24971 vm.$vnode = _parentVnode; // render self 24972 24973 var vnode; 24974 24975 try { 24976 // There's no need to maintain a stack because all render fns are called 24977 // separately from one another. Nested component's render fns are called 24978 // when parent component is patched. 24979 currentRenderingInstance = vm; 24980 vnode = render.call(vm._renderProxy, vm.$createElement); 24981 } catch (e) { 24982 handleError(e, vm, "render"); // return error render result, 24983 // or previous vnode to prevent render error causing blank component 24984 24985 /* istanbul ignore else */ 24986 24987 if ( true && vm.$options.renderError) { 24988 try { 24989 vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e); 24990 } catch (e) { 24991 handleError(e, vm, "renderError"); 24992 vnode = vm._vnode; 24993 } 24994 } else { 24995 vnode = vm._vnode; 24996 } 24997 } finally { 24998 currentRenderingInstance = null; 24999 } // if the returned array contains only a single node, allow it 25000 25001 25002 if (Array.isArray(vnode) && vnode.length === 1) { 25003 vnode = vnode[0]; 25004 } // return empty vnode in case the render function errored out 25005 25006 25007 if (!(vnode instanceof VNode)) { 25008 if ( true && Array.isArray(vnode)) { 25009 warn('Multiple root nodes returned from render function. Render function ' + 'should return a single root node.', vm); 25010 } 25011 25012 vnode = createEmptyVNode(); 25013 } // set parent 25014 25015 25016 vnode.parent = _parentVnode; 25017 return vnode; 25018 }; 25019} 25020/* */ 25021 25022 25023function ensureCtor(comp, base) { 25024 if (comp.__esModule || hasSymbol && comp[Symbol.toStringTag] === 'Module') { 25025 comp = comp.default; 25026 } 25027 25028 return isObject(comp) ? base.extend(comp) : comp; 25029} 25030 25031function createAsyncPlaceholder(factory, data, context, children, tag) { 25032 var node = createEmptyVNode(); 25033 node.asyncFactory = factory; 25034 node.asyncMeta = { 25035 data: data, 25036 context: context, 25037 children: children, 25038 tag: tag 25039 }; 25040 return node; 25041} 25042 25043function resolveAsyncComponent(factory, baseCtor) { 25044 if (isTrue(factory.error) && isDef(factory.errorComp)) { 25045 return factory.errorComp; 25046 } 25047 25048 if (isDef(factory.resolved)) { 25049 return factory.resolved; 25050 } 25051 25052 var owner = currentRenderingInstance; 25053 25054 if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) { 25055 // already pending 25056 factory.owners.push(owner); 25057 } 25058 25059 if (isTrue(factory.loading) && isDef(factory.loadingComp)) { 25060 return factory.loadingComp; 25061 } 25062 25063 if (owner && !isDef(factory.owners)) { 25064 var owners = factory.owners = [owner]; 25065 var sync = true; 25066 var timerLoading = null; 25067 var timerTimeout = null; 25068 owner.$on('hook:destroyed', function () { 25069 return remove(owners, owner); 25070 }); 25071 25072 var forceRender = function (renderCompleted) { 25073 for (var i = 0, l = owners.length; i < l; i++) { 25074 owners[i].$forceUpdate(); 25075 } 25076 25077 if (renderCompleted) { 25078 owners.length = 0; 25079 25080 if (timerLoading !== null) { 25081 clearTimeout(timerLoading); 25082 timerLoading = null; 25083 } 25084 25085 if (timerTimeout !== null) { 25086 clearTimeout(timerTimeout); 25087 timerTimeout = null; 25088 } 25089 } 25090 }; 25091 25092 var resolve = once(function (res) { 25093 // cache resolved 25094 factory.resolved = ensureCtor(res, baseCtor); // invoke callbacks only if this is not a synchronous resolve 25095 // (async resolves are shimmed as synchronous during SSR) 25096 25097 if (!sync) { 25098 forceRender(true); 25099 } else { 25100 owners.length = 0; 25101 } 25102 }); 25103 var reject = once(function (reason) { 25104 true && warn("Failed to resolve async component: " + String(factory) + (reason ? "\nReason: " + reason : '')); 25105 25106 if (isDef(factory.errorComp)) { 25107 factory.error = true; 25108 forceRender(true); 25109 } 25110 }); 25111 var res = factory(resolve, reject); 25112 25113 if (isObject(res)) { 25114 if (isPromise(res)) { 25115 // () => Promise 25116 if (isUndef(factory.resolved)) { 25117 res.then(resolve, reject); 25118 } 25119 } else if (isPromise(res.component)) { 25120 res.component.then(resolve, reject); 25121 25122 if (isDef(res.error)) { 25123 factory.errorComp = ensureCtor(res.error, baseCtor); 25124 } 25125 25126 if (isDef(res.loading)) { 25127 factory.loadingComp = ensureCtor(res.loading, baseCtor); 25128 25129 if (res.delay === 0) { 25130 factory.loading = true; 25131 } else { 25132 timerLoading = setTimeout(function () { 25133 timerLoading = null; 25134 25135 if (isUndef(factory.resolved) && isUndef(factory.error)) { 25136 factory.loading = true; 25137 forceRender(false); 25138 } 25139 }, res.delay || 200); 25140 } 25141 } 25142 25143 if (isDef(res.timeout)) { 25144 timerTimeout = setTimeout(function () { 25145 timerTimeout = null; 25146 25147 if (isUndef(factory.resolved)) { 25148 reject( true ? "timeout (" + res.timeout + "ms)" : undefined); 25149 } 25150 }, res.timeout); 25151 } 25152 } 25153 } 25154 25155 sync = false; // return in case resolved synchronously 25156 25157 return factory.loading ? factory.loadingComp : factory.resolved; 25158 } 25159} 25160/* */ 25161 25162 25163function isAsyncPlaceholder(node) { 25164 return node.isComment && node.asyncFactory; 25165} 25166/* */ 25167 25168 25169function getFirstComponentChild(children) { 25170 if (Array.isArray(children)) { 25171 for (var i = 0; i < children.length; i++) { 25172 var c = children[i]; 25173 25174 if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) { 25175 return c; 25176 } 25177 } 25178 } 25179} 25180/* */ 25181 25182/* */ 25183 25184 25185function initEvents(vm) { 25186 vm._events = Object.create(null); 25187 vm._hasHookEvent = false; // init parent attached events 25188 25189 var listeners = vm.$options._parentListeners; 25190 25191 if (listeners) { 25192 updateComponentListeners(vm, listeners); 25193 } 25194} 25195 25196var target; 25197 25198function add(event, fn) { 25199 target.$on(event, fn); 25200} 25201 25202function remove$1(event, fn) { 25203 target.$off(event, fn); 25204} 25205 25206function createOnceHandler(event, fn) { 25207 var _target = target; 25208 return function onceHandler() { 25209 var res = fn.apply(null, arguments); 25210 25211 if (res !== null) { 25212 _target.$off(event, onceHandler); 25213 } 25214 }; 25215} 25216 25217function updateComponentListeners(vm, listeners, oldListeners) { 25218 target = vm; 25219 updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm); 25220 target = undefined; 25221} 25222 25223function eventsMixin(Vue) { 25224 var hookRE = /^hook:/; 25225 25226 Vue.prototype.$on = function (event, fn) { 25227 var vm = this; 25228 25229 if (Array.isArray(event)) { 25230 for (var i = 0, l = event.length; i < l; i++) { 25231 vm.$on(event[i], fn); 25232 } 25233 } else { 25234 (vm._events[event] || (vm._events[event] = [])).push(fn); // optimize hook:event cost by using a boolean flag marked at registration 25235 // instead of a hash lookup 25236 25237 if (hookRE.test(event)) { 25238 vm._hasHookEvent = true; 25239 } 25240 } 25241 25242 return vm; 25243 }; 25244 25245 Vue.prototype.$once = function (event, fn) { 25246 var vm = this; 25247 25248 function on() { 25249 vm.$off(event, on); 25250 fn.apply(vm, arguments); 25251 } 25252 25253 on.fn = fn; 25254 vm.$on(event, on); 25255 return vm; 25256 }; 25257 25258 Vue.prototype.$off = function (event, fn) { 25259 var vm = this; // all 25260 25261 if (!arguments.length) { 25262 vm._events = Object.create(null); 25263 return vm; 25264 } // array of events 25265 25266 25267 if (Array.isArray(event)) { 25268 for (var i$1 = 0, l = event.length; i$1 < l; i$1++) { 25269 vm.$off(event[i$1], fn); 25270 } 25271 25272 return vm; 25273 } // specific event 25274 25275 25276 var cbs = vm._events[event]; 25277 25278 if (!cbs) { 25279 return vm; 25280 } 25281 25282 if (!fn) { 25283 vm._events[event] = null; 25284 return vm; 25285 } // specific handler 25286 25287 25288 var cb; 25289 var i = cbs.length; 25290 25291 while (i--) { 25292 cb = cbs[i]; 25293 25294 if (cb === fn || cb.fn === fn) { 25295 cbs.splice(i, 1); 25296 break; 25297 } 25298 } 25299 25300 return vm; 25301 }; 25302 25303 Vue.prototype.$emit = function (event) { 25304 var vm = this; 25305 25306 if (true) { 25307 var lowerCaseEvent = event.toLowerCase(); 25308 25309 if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) { 25310 tip("Event \"" + lowerCaseEvent + "\" is emitted in component " + formatComponentName(vm) + " but the handler is registered for \"" + event + "\". " + "Note that HTML attributes are case-insensitive and you cannot use " + "v-on to listen to camelCase events when using in-DOM templates. " + "You should probably use \"" + hyphenate(event) + "\" instead of \"" + event + "\"."); 25311 } 25312 } 25313 25314 var cbs = vm._events[event]; 25315 25316 if (cbs) { 25317 cbs = cbs.length > 1 ? toArray(cbs) : cbs; 25318 var args = toArray(arguments, 1); 25319 var info = "event handler for \"" + event + "\""; 25320 25321 for (var i = 0, l = cbs.length; i < l; i++) { 25322 invokeWithErrorHandling(cbs[i], vm, args, vm, info); 25323 } 25324 } 25325 25326 return vm; 25327 }; 25328} 25329/* */ 25330 25331 25332var activeInstance = null; 25333var isUpdatingChildComponent = false; 25334 25335function setActiveInstance(vm) { 25336 var prevActiveInstance = activeInstance; 25337 activeInstance = vm; 25338 return function () { 25339 activeInstance = prevActiveInstance; 25340 }; 25341} 25342 25343function initLifecycle(vm) { 25344 var options = vm.$options; // locate first non-abstract parent 25345 25346 var parent = options.parent; 25347 25348 if (parent && !options.abstract) { 25349 while (parent.$options.abstract && parent.$parent) { 25350 parent = parent.$parent; 25351 } 25352 25353 parent.$children.push(vm); 25354 } 25355 25356 vm.$parent = parent; 25357 vm.$root = parent ? parent.$root : vm; 25358 vm.$children = []; 25359 vm.$refs = {}; 25360 vm._watcher = null; 25361 vm._inactive = null; 25362 vm._directInactive = false; 25363 vm._isMounted = false; 25364 vm._isDestroyed = false; 25365 vm._isBeingDestroyed = false; 25366} 25367 25368function lifecycleMixin(Vue) { 25369 Vue.prototype._update = function (vnode, hydrating) { 25370 var vm = this; 25371 var prevEl = vm.$el; 25372 var prevVnode = vm._vnode; 25373 var restoreActiveInstance = setActiveInstance(vm); 25374 vm._vnode = vnode; // Vue.prototype.__patch__ is injected in entry points 25375 // based on the rendering backend used. 25376 25377 if (!prevVnode) { 25378 // initial render 25379 vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false 25380 /* removeOnly */ 25381 ); 25382 } else { 25383 // updates 25384 vm.$el = vm.__patch__(prevVnode, vnode); 25385 } 25386 25387 restoreActiveInstance(); // update __vue__ reference 25388 25389 if (prevEl) { 25390 prevEl.__vue__ = null; 25391 } 25392 25393 if (vm.$el) { 25394 vm.$el.__vue__ = vm; 25395 } // if parent is an HOC, update its $el as well 25396 25397 25398 if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) { 25399 vm.$parent.$el = vm.$el; 25400 } // updated hook is called by the scheduler to ensure that children are 25401 // updated in a parent's updated hook. 25402 25403 }; 25404 25405 Vue.prototype.$forceUpdate = function () { 25406 var vm = this; 25407 25408 if (vm._watcher) { 25409 vm._watcher.update(); 25410 } 25411 }; 25412 25413 Vue.prototype.$destroy = function () { 25414 var vm = this; 25415 25416 if (vm._isBeingDestroyed) { 25417 return; 25418 } 25419 25420 callHook(vm, 'beforeDestroy'); 25421 vm._isBeingDestroyed = true; // remove self from parent 25422 25423 var parent = vm.$parent; 25424 25425 if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) { 25426 remove(parent.$children, vm); 25427 } // teardown watchers 25428 25429 25430 if (vm._watcher) { 25431 vm._watcher.teardown(); 25432 } 25433 25434 var i = vm._watchers.length; 25435 25436 while (i--) { 25437 vm._watchers[i].teardown(); 25438 } // remove reference from data ob 25439 // frozen object may not have observer. 25440 25441 25442 if (vm._data.__ob__) { 25443 vm._data.__ob__.vmCount--; 25444 } // call the last hook... 25445 25446 25447 vm._isDestroyed = true; // invoke destroy hooks on current rendered tree 25448 25449 vm.__patch__(vm._vnode, null); // fire destroyed hook 25450 25451 25452 callHook(vm, 'destroyed'); // turn off all instance listeners. 25453 25454 vm.$off(); // remove __vue__ reference 25455 25456 if (vm.$el) { 25457 vm.$el.__vue__ = null; 25458 } // release circular reference (#6759) 25459 25460 25461 if (vm.$vnode) { 25462 vm.$vnode.parent = null; 25463 } 25464 }; 25465} 25466 25467function mountComponent(vm, el, hydrating) { 25468 vm.$el = el; 25469 25470 if (!vm.$options.render) { 25471 vm.$options.render = createEmptyVNode; 25472 25473 if (true) { 25474 /* istanbul ignore if */ 25475 if (vm.$options.template && vm.$options.template.charAt(0) !== '#' || vm.$options.el || el) { 25476 warn('You are using the runtime-only build of Vue where the template ' + 'compiler is not available. Either pre-compile the templates into ' + 'render functions, or use the compiler-included build.', vm); 25477 } else { 25478 warn('Failed to mount component: template or render function not defined.', vm); 25479 } 25480 } 25481 } 25482 25483 callHook(vm, 'beforeMount'); 25484 var updateComponent; 25485 /* istanbul ignore if */ 25486 25487 if ( true && config.performance && mark) { 25488 updateComponent = function () { 25489 var name = vm._name; 25490 var id = vm._uid; 25491 var startTag = "vue-perf-start:" + id; 25492 var endTag = "vue-perf-end:" + id; 25493 mark(startTag); 25494 25495 var vnode = vm._render(); 25496 25497 mark(endTag); 25498 measure("vue " + name + " render", startTag, endTag); 25499 mark(startTag); 25500 25501 vm._update(vnode, hydrating); 25502 25503 mark(endTag); 25504 measure("vue " + name + " patch", startTag, endTag); 25505 }; 25506 } else { 25507 updateComponent = function () { 25508 vm._update(vm._render(), hydrating); 25509 }; 25510 } // we set this to vm._watcher inside the watcher's constructor 25511 // since the watcher's initial patch may call $forceUpdate (e.g. inside child 25512 // component's mounted hook), which relies on vm._watcher being already defined 25513 25514 25515 new Watcher(vm, updateComponent, noop, { 25516 before: function before() { 25517 if (vm._isMounted && !vm._isDestroyed) { 25518 callHook(vm, 'beforeUpdate'); 25519 } 25520 } 25521 }, true 25522 /* isRenderWatcher */ 25523 ); 25524 hydrating = false; // manually mounted instance, call mounted on self 25525 // mounted is called for render-created child components in its inserted hook 25526 25527 if (vm.$vnode == null) { 25528 vm._isMounted = true; 25529 callHook(vm, 'mounted'); 25530 } 25531 25532 return vm; 25533} 25534 25535function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) { 25536 if (true) { 25537 isUpdatingChildComponent = true; 25538 } // determine whether component has slot children 25539 // we need to do this before overwriting $options._renderChildren. 25540 // check if there are dynamic scopedSlots (hand-written or compiled but with 25541 // dynamic slot names). Static scoped slots compiled from template has the 25542 // "$stable" marker. 25543 25544 25545 var newScopedSlots = parentVnode.data.scopedSlots; 25546 var oldScopedSlots = vm.$scopedSlots; 25547 var hasDynamicScopedSlot = !!(newScopedSlots && !newScopedSlots.$stable || oldScopedSlots !== emptyObject && !oldScopedSlots.$stable || newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key); // Any static slot children from the parent may have changed during parent's 25548 // update. Dynamic scoped slots may also have changed. In such cases, a forced 25549 // update is necessary to ensure correctness. 25550 25551 var needsForceUpdate = !!(renderChildren || // has new static slots 25552 vm.$options._renderChildren || // has old static slots 25553 hasDynamicScopedSlot); 25554 vm.$options._parentVnode = parentVnode; 25555 vm.$vnode = parentVnode; // update vm's placeholder node without re-render 25556 25557 if (vm._vnode) { 25558 // update child tree's parent 25559 vm._vnode.parent = parentVnode; 25560 } 25561 25562 vm.$options._renderChildren = renderChildren; // update $attrs and $listeners hash 25563 // these are also reactive so they may trigger child update if the child 25564 // used them during render 25565 25566 vm.$attrs = parentVnode.data.attrs || emptyObject; 25567 vm.$listeners = listeners || emptyObject; // update props 25568 25569 if (propsData && vm.$options.props) { 25570 toggleObserving(false); 25571 var props = vm._props; 25572 var propKeys = vm.$options._propKeys || []; 25573 25574 for (var i = 0; i < propKeys.length; i++) { 25575 var key = propKeys[i]; 25576 var propOptions = vm.$options.props; // wtf flow? 25577 25578 props[key] = validateProp(key, propOptions, propsData, vm); 25579 } 25580 25581 toggleObserving(true); // keep a copy of raw propsData 25582 25583 vm.$options.propsData = propsData; 25584 } // update listeners 25585 25586 25587 listeners = listeners || emptyObject; 25588 var oldListeners = vm.$options._parentListeners; 25589 vm.$options._parentListeners = listeners; 25590 updateComponentListeners(vm, listeners, oldListeners); // resolve slots + force update if has children 25591 25592 if (needsForceUpdate) { 25593 vm.$slots = resolveSlots(renderChildren, parentVnode.context); 25594 vm.$forceUpdate(); 25595 } 25596 25597 if (true) { 25598 isUpdatingChildComponent = false; 25599 } 25600} 25601 25602function isInInactiveTree(vm) { 25603 while (vm && (vm = vm.$parent)) { 25604 if (vm._inactive) { 25605 return true; 25606 } 25607 } 25608 25609 return false; 25610} 25611 25612function activateChildComponent(vm, direct) { 25613 if (direct) { 25614 vm._directInactive = false; 25615 25616 if (isInInactiveTree(vm)) { 25617 return; 25618 } 25619 } else if (vm._directInactive) { 25620 return; 25621 } 25622 25623 if (vm._inactive || vm._inactive === null) { 25624 vm._inactive = false; 25625 25626 for (var i = 0; i < vm.$children.length; i++) { 25627 activateChildComponent(vm.$children[i]); 25628 } 25629 25630 callHook(vm, 'activated'); 25631 } 25632} 25633 25634function deactivateChildComponent(vm, direct) { 25635 if (direct) { 25636 vm._directInactive = true; 25637 25638 if (isInInactiveTree(vm)) { 25639 return; 25640 } 25641 } 25642 25643 if (!vm._inactive) { 25644 vm._inactive = true; 25645 25646 for (var i = 0; i < vm.$children.length; i++) { 25647 deactivateChildComponent(vm.$children[i]); 25648 } 25649 25650 callHook(vm, 'deactivated'); 25651 } 25652} 25653 25654function callHook(vm, hook) { 25655 // #7573 disable dep collection when invoking lifecycle hooks 25656 pushTarget(); 25657 var handlers = vm.$options[hook]; 25658 var info = hook + " hook"; 25659 25660 if (handlers) { 25661 for (var i = 0, j = handlers.length; i < j; i++) { 25662 invokeWithErrorHandling(handlers[i], vm, null, vm, info); 25663 } 25664 } 25665 25666 if (vm._hasHookEvent) { 25667 vm.$emit('hook:' + hook); 25668 } 25669 25670 popTarget(); 25671} 25672/* */ 25673 25674 25675var MAX_UPDATE_COUNT = 100; 25676var queue = []; 25677var activatedChildren = []; 25678var has = {}; 25679var circular = {}; 25680var waiting = false; 25681var flushing = false; 25682var index = 0; 25683/** 25684 * Reset the scheduler's state. 25685 */ 25686 25687function resetSchedulerState() { 25688 index = queue.length = activatedChildren.length = 0; 25689 has = {}; 25690 25691 if (true) { 25692 circular = {}; 25693 } 25694 25695 waiting = flushing = false; 25696} // Async edge case #6566 requires saving the timestamp when event listeners are 25697// attached. However, calling performance.now() has a perf overhead especially 25698// if the page has thousands of event listeners. Instead, we take a timestamp 25699// every time the scheduler flushes and use that for all event listeners 25700// attached during that flush. 25701 25702 25703var currentFlushTimestamp = 0; // Async edge case fix requires storing an event listener's attach timestamp. 25704 25705var getNow = Date.now; // Determine what event timestamp the browser is using. Annoyingly, the 25706// timestamp can either be hi-res (relative to page load) or low-res 25707// (relative to UNIX epoch), so in order to compare time we have to use the 25708// same timestamp type when saving the flush timestamp. 25709// All IE versions use low-res event timestamps, and have problematic clock 25710// implementations (#9632) 25711 25712if (inBrowser && !isIE) { 25713 var performance = window.performance; 25714 25715 if (performance && typeof performance.now === 'function' && getNow() > document.createEvent('Event').timeStamp) { 25716 // if the event timestamp, although evaluated AFTER the Date.now(), is 25717 // smaller than it, it means the event is using a hi-res timestamp, 25718 // and we need to use the hi-res version for event listener timestamps as 25719 // well. 25720 getNow = function () { 25721 return performance.now(); 25722 }; 25723 } 25724} 25725/** 25726 * Flush both queues and run the watchers. 25727 */ 25728 25729 25730function flushSchedulerQueue() { 25731 currentFlushTimestamp = getNow(); 25732 flushing = true; 25733 var watcher, id; // Sort queue before flush. 25734 // This ensures that: 25735 // 1. Components are updated from parent to child. (because parent is always 25736 // created before the child) 25737 // 2. A component's user watchers are run before its render watcher (because 25738 // user watchers are created before the render watcher) 25739 // 3. If a component is destroyed during a parent component's watcher run, 25740 // its watchers can be skipped. 25741 25742 queue.sort(function (a, b) { 25743 return a.id - b.id; 25744 }); // do not cache length because more watchers might be pushed 25745 // as we run existing watchers 25746 25747 for (index = 0; index < queue.length; index++) { 25748 watcher = queue[index]; 25749 25750 if (watcher.before) { 25751 watcher.before(); 25752 } 25753 25754 id = watcher.id; 25755 has[id] = null; 25756 watcher.run(); // in dev build, check and stop circular updates. 25757 25758 if ( true && has[id] != null) { 25759 circular[id] = (circular[id] || 0) + 1; 25760 25761 if (circular[id] > MAX_UPDATE_COUNT) { 25762 warn('You may have an infinite update loop ' + (watcher.user ? "in watcher with expression \"" + watcher.expression + "\"" : "in a component render function."), watcher.vm); 25763 break; 25764 } 25765 } 25766 } // keep copies of post queues before resetting state 25767 25768 25769 var activatedQueue = activatedChildren.slice(); 25770 var updatedQueue = queue.slice(); 25771 resetSchedulerState(); // call component updated and activated hooks 25772 25773 callActivatedHooks(activatedQueue); 25774 callUpdatedHooks(updatedQueue); // devtool hook 25775 25776 /* istanbul ignore if */ 25777 25778 if (devtools && config.devtools) { 25779 devtools.emit('flush'); 25780 } 25781} 25782 25783function callUpdatedHooks(queue) { 25784 var i = queue.length; 25785 25786 while (i--) { 25787 var watcher = queue[i]; 25788 var vm = watcher.vm; 25789 25790 if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) { 25791 callHook(vm, 'updated'); 25792 } 25793 } 25794} 25795/** 25796 * Queue a kept-alive component that was activated during patch. 25797 * The queue will be processed after the entire tree has been patched. 25798 */ 25799 25800 25801function queueActivatedComponent(vm) { 25802 // setting _inactive to false here so that a render function can 25803 // rely on checking whether it's in an inactive tree (e.g. router-view) 25804 vm._inactive = false; 25805 activatedChildren.push(vm); 25806} 25807 25808function callActivatedHooks(queue) { 25809 for (var i = 0; i < queue.length; i++) { 25810 queue[i]._inactive = true; 25811 activateChildComponent(queue[i], true 25812 /* true */ 25813 ); 25814 } 25815} 25816/** 25817 * Push a watcher into the watcher queue. 25818 * Jobs with duplicate IDs will be skipped unless it's 25819 * pushed when the queue is being flushed. 25820 */ 25821 25822 25823function queueWatcher(watcher) { 25824 var id = watcher.id; 25825 25826 if (has[id] == null) { 25827 has[id] = true; 25828 25829 if (!flushing) { 25830 queue.push(watcher); 25831 } else { 25832 // if already flushing, splice the watcher based on its id 25833 // if already past its id, it will be run next immediately. 25834 var i = queue.length - 1; 25835 25836 while (i > index && queue[i].id > watcher.id) { 25837 i--; 25838 } 25839 25840 queue.splice(i + 1, 0, watcher); 25841 } // queue the flush 25842 25843 25844 if (!waiting) { 25845 waiting = true; 25846 25847 if ( true && !config.async) { 25848 flushSchedulerQueue(); 25849 return; 25850 } 25851 25852 nextTick(flushSchedulerQueue); 25853 } 25854 } 25855} 25856/* */ 25857 25858 25859var uid$2 = 0; 25860/** 25861 * A watcher parses an expression, collects dependencies, 25862 * and fires callback when the expression value changes. 25863 * This is used for both the $watch() api and directives. 25864 */ 25865 25866var Watcher = function Watcher(vm, expOrFn, cb, options, isRenderWatcher) { 25867 this.vm = vm; 25868 25869 if (isRenderWatcher) { 25870 vm._watcher = this; 25871 } 25872 25873 vm._watchers.push(this); // options 25874 25875 25876 if (options) { 25877 this.deep = !!options.deep; 25878 this.user = !!options.user; 25879 this.lazy = !!options.lazy; 25880 this.sync = !!options.sync; 25881 this.before = options.before; 25882 } else { 25883 this.deep = this.user = this.lazy = this.sync = false; 25884 } 25885 25886 this.cb = cb; 25887 this.id = ++uid$2; // uid for batching 25888 25889 this.active = true; 25890 this.dirty = this.lazy; // for lazy watchers 25891 25892 this.deps = []; 25893 this.newDeps = []; 25894 this.depIds = new _Set(); 25895 this.newDepIds = new _Set(); 25896 this.expression = true ? expOrFn.toString() : undefined; // parse expression for getter 25897 25898 if (typeof expOrFn === 'function') { 25899 this.getter = expOrFn; 25900 } else { 25901 this.getter = parsePath(expOrFn); 25902 25903 if (!this.getter) { 25904 this.getter = noop; 25905 true && warn("Failed watching path: \"" + expOrFn + "\" " + 'Watcher only accepts simple dot-delimited paths. ' + 'For full control, use a function instead.', vm); 25906 } 25907 } 25908 25909 this.value = this.lazy ? undefined : this.get(); 25910}; 25911/** 25912 * Evaluate the getter, and re-collect dependencies. 25913 */ 25914 25915 25916Watcher.prototype.get = function get() { 25917 pushTarget(this); 25918 var value; 25919 var vm = this.vm; 25920 25921 try { 25922 value = this.getter.call(vm, vm); 25923 } catch (e) { 25924 if (this.user) { 25925 handleError(e, vm, "getter for watcher \"" + this.expression + "\""); 25926 } else { 25927 throw e; 25928 } 25929 } finally { 25930 // "touch" every property so they are all tracked as 25931 // dependencies for deep watching 25932 if (this.deep) { 25933 traverse(value); 25934 } 25935 25936 popTarget(); 25937 this.cleanupDeps(); 25938 } 25939 25940 return value; 25941}; 25942/** 25943 * Add a dependency to this directive. 25944 */ 25945 25946 25947Watcher.prototype.addDep = function addDep(dep) { 25948 var id = dep.id; 25949 25950 if (!this.newDepIds.has(id)) { 25951 this.newDepIds.add(id); 25952 this.newDeps.push(dep); 25953 25954 if (!this.depIds.has(id)) { 25955 dep.addSub(this); 25956 } 25957 } 25958}; 25959/** 25960 * Clean up for dependency collection. 25961 */ 25962 25963 25964Watcher.prototype.cleanupDeps = function cleanupDeps() { 25965 var i = this.deps.length; 25966 25967 while (i--) { 25968 var dep = this.deps[i]; 25969 25970 if (!this.newDepIds.has(dep.id)) { 25971 dep.removeSub(this); 25972 } 25973 } 25974 25975 var tmp = this.depIds; 25976 this.depIds = this.newDepIds; 25977 this.newDepIds = tmp; 25978 this.newDepIds.clear(); 25979 tmp = this.deps; 25980 this.deps = this.newDeps; 25981 this.newDeps = tmp; 25982 this.newDeps.length = 0; 25983}; 25984/** 25985 * Subscriber interface. 25986 * Will be called when a dependency changes. 25987 */ 25988 25989 25990Watcher.prototype.update = function update() { 25991 /* istanbul ignore else */ 25992 if (this.lazy) { 25993 this.dirty = true; 25994 } else if (this.sync) { 25995 this.run(); 25996 } else { 25997 queueWatcher(this); 25998 } 25999}; 26000/** 26001 * Scheduler job interface. 26002 * Will be called by the scheduler. 26003 */ 26004 26005 26006Watcher.prototype.run = function run() { 26007 if (this.active) { 26008 var value = this.get(); 26009 26010 if (value !== this.value || // Deep watchers and watchers on Object/Arrays should fire even 26011 // when the value is the same, because the value may 26012 // have mutated. 26013 isObject(value) || this.deep) { 26014 // set new value 26015 var oldValue = this.value; 26016 this.value = value; 26017 26018 if (this.user) { 26019 try { 26020 this.cb.call(this.vm, value, oldValue); 26021 } catch (e) { 26022 handleError(e, this.vm, "callback for watcher \"" + this.expression + "\""); 26023 } 26024 } else { 26025 this.cb.call(this.vm, value, oldValue); 26026 } 26027 } 26028 } 26029}; 26030/** 26031 * Evaluate the value of the watcher. 26032 * This only gets called for lazy watchers. 26033 */ 26034 26035 26036Watcher.prototype.evaluate = function evaluate() { 26037 this.value = this.get(); 26038 this.dirty = false; 26039}; 26040/** 26041 * Depend on all deps collected by this watcher. 26042 */ 26043 26044 26045Watcher.prototype.depend = function depend() { 26046 var i = this.deps.length; 26047 26048 while (i--) { 26049 this.deps[i].depend(); 26050 } 26051}; 26052/** 26053 * Remove self from all dependencies' subscriber list. 26054 */ 26055 26056 26057Watcher.prototype.teardown = function teardown() { 26058 if (this.active) { 26059 // remove self from vm's watcher list 26060 // this is a somewhat expensive operation so we skip it 26061 // if the vm is being destroyed. 26062 if (!this.vm._isBeingDestroyed) { 26063 remove(this.vm._watchers, this); 26064 } 26065 26066 var i = this.deps.length; 26067 26068 while (i--) { 26069 this.deps[i].removeSub(this); 26070 } 26071 26072 this.active = false; 26073 } 26074}; 26075/* */ 26076 26077 26078var sharedPropertyDefinition = { 26079 enumerable: true, 26080 configurable: true, 26081 get: noop, 26082 set: noop 26083}; 26084 26085function proxy(target, sourceKey, key) { 26086 sharedPropertyDefinition.get = function proxyGetter() { 26087 return this[sourceKey][key]; 26088 }; 26089 26090 sharedPropertyDefinition.set = function proxySetter(val) { 26091 this[sourceKey][key] = val; 26092 }; 26093 26094 Object.defineProperty(target, key, sharedPropertyDefinition); 26095} 26096 26097function initState(vm) { 26098 vm._watchers = []; 26099 var opts = vm.$options; 26100 26101 if (opts.props) { 26102 initProps(vm, opts.props); 26103 } 26104 26105 if (opts.methods) { 26106 initMethods(vm, opts.methods); 26107 } 26108 26109 if (opts.data) { 26110 initData(vm); 26111 } else { 26112 observe(vm._data = {}, true 26113 /* asRootData */ 26114 ); 26115 } 26116 26117 if (opts.computed) { 26118 initComputed(vm, opts.computed); 26119 } 26120 26121 if (opts.watch && opts.watch !== nativeWatch) { 26122 initWatch(vm, opts.watch); 26123 } 26124} 26125 26126function initProps(vm, propsOptions) { 26127 var propsData = vm.$options.propsData || {}; 26128 var props = vm._props = {}; // cache prop keys so that future props updates can iterate using Array 26129 // instead of dynamic object key enumeration. 26130 26131 var keys = vm.$options._propKeys = []; 26132 var isRoot = !vm.$parent; // root instance props should be converted 26133 26134 if (!isRoot) { 26135 toggleObserving(false); 26136 } 26137 26138 var loop = function (key) { 26139 keys.push(key); 26140 var value = validateProp(key, propsOptions, propsData, vm); 26141 /* istanbul ignore else */ 26142 26143 if (true) { 26144 var hyphenatedKey = hyphenate(key); 26145 26146 if (isReservedAttribute(hyphenatedKey) || config.isReservedAttr(hyphenatedKey)) { 26147 warn("\"" + hyphenatedKey + "\" is a reserved attribute and cannot be used as component prop.", vm); 26148 } 26149 26150 defineReactive$$1(props, key, value, function () { 26151 if (!isRoot && !isUpdatingChildComponent) { 26152 warn("Avoid mutating a prop directly since the value will be " + "overwritten whenever the parent component re-renders. " + "Instead, use a data or computed property based on the prop's " + "value. Prop being mutated: \"" + key + "\"", vm); 26153 } 26154 }); 26155 } else {} // static props are already proxied on the component's prototype 26156 // during Vue.extend(). We only need to proxy props defined at 26157 // instantiation here. 26158 26159 26160 if (!(key in vm)) { 26161 proxy(vm, "_props", key); 26162 } 26163 }; 26164 26165 for (var key in propsOptions) loop(key); 26166 26167 toggleObserving(true); 26168} 26169 26170function initData(vm) { 26171 var data = vm.$options.data; 26172 data = vm._data = typeof data === 'function' ? getData(data, vm) : data || {}; 26173 26174 if (!isPlainObject(data)) { 26175 data = {}; 26176 true && warn('data functions should return an object:\n' + 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm); 26177 } // proxy data on instance 26178 26179 26180 var keys = Object.keys(data); 26181 var props = vm.$options.props; 26182 var methods = vm.$options.methods; 26183 var i = keys.length; 26184 26185 while (i--) { 26186 var key = keys[i]; 26187 26188 if (true) { 26189 if (methods && hasOwn(methods, key)) { 26190 warn("Method \"" + key + "\" has already been defined as a data property.", vm); 26191 } 26192 } 26193 26194 if (props && hasOwn(props, key)) { 26195 true && warn("The data property \"" + key + "\" is already declared as a prop. " + "Use prop default value instead.", vm); 26196 } else if (!isReserved(key)) { 26197 proxy(vm, "_data", key); 26198 } 26199 } // observe data 26200 26201 26202 observe(data, true 26203 /* asRootData */ 26204 ); 26205} 26206 26207function getData(data, vm) { 26208 // #7573 disable dep collection when invoking data getters 26209 pushTarget(); 26210 26211 try { 26212 return data.call(vm, vm); 26213 } catch (e) { 26214 handleError(e, vm, "data()"); 26215 return {}; 26216 } finally { 26217 popTarget(); 26218 } 26219} 26220 26221var computedWatcherOptions = { 26222 lazy: true 26223}; 26224 26225function initComputed(vm, computed) { 26226 // $flow-disable-line 26227 var watchers = vm._computedWatchers = Object.create(null); // computed properties are just getters during SSR 26228 26229 var isSSR = isServerRendering(); 26230 26231 for (var key in computed) { 26232 var userDef = computed[key]; 26233 var getter = typeof userDef === 'function' ? userDef : userDef.get; 26234 26235 if ( true && getter == null) { 26236 warn("Getter is missing for computed property \"" + key + "\".", vm); 26237 } 26238 26239 if (!isSSR) { 26240 // create internal watcher for the computed property. 26241 watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions); 26242 } // component-defined computed properties are already defined on the 26243 // component prototype. We only need to define computed properties defined 26244 // at instantiation here. 26245 26246 26247 if (!(key in vm)) { 26248 defineComputed(vm, key, userDef); 26249 } else if (true) { 26250 if (key in vm.$data) { 26251 warn("The computed property \"" + key + "\" is already defined in data.", vm); 26252 } else if (vm.$options.props && key in vm.$options.props) { 26253 warn("The computed property \"" + key + "\" is already defined as a prop.", vm); 26254 } 26255 } 26256 } 26257} 26258 26259function defineComputed(target, key, userDef) { 26260 var shouldCache = !isServerRendering(); 26261 26262 if (typeof userDef === 'function') { 26263 sharedPropertyDefinition.get = shouldCache ? createComputedGetter(key) : createGetterInvoker(userDef); 26264 sharedPropertyDefinition.set = noop; 26265 } else { 26266 sharedPropertyDefinition.get = userDef.get ? shouldCache && userDef.cache !== false ? createComputedGetter(key) : createGetterInvoker(userDef.get) : noop; 26267 sharedPropertyDefinition.set = userDef.set || noop; 26268 } 26269 26270 if ( true && sharedPropertyDefinition.set === noop) { 26271 sharedPropertyDefinition.set = function () { 26272 warn("Computed property \"" + key + "\" was assigned to but it has no setter.", this); 26273 }; 26274 } 26275 26276 Object.defineProperty(target, key, sharedPropertyDefinition); 26277} 26278 26279function createComputedGetter(key) { 26280 return function computedGetter() { 26281 var watcher = this._computedWatchers && this._computedWatchers[key]; 26282 26283 if (watcher) { 26284 if (watcher.dirty) { 26285 watcher.evaluate(); 26286 } 26287 26288 if (Dep.target) { 26289 watcher.depend(); 26290 } 26291 26292 return watcher.value; 26293 } 26294 }; 26295} 26296 26297function createGetterInvoker(fn) { 26298 return function computedGetter() { 26299 return fn.call(this, this); 26300 }; 26301} 26302 26303function initMethods(vm, methods) { 26304 var props = vm.$options.props; 26305 26306 for (var key in methods) { 26307 if (true) { 26308 if (typeof methods[key] !== 'function') { 26309 warn("Method \"" + key + "\" has type \"" + typeof methods[key] + "\" in the component definition. " + "Did you reference the function correctly?", vm); 26310 } 26311 26312 if (props && hasOwn(props, key)) { 26313 warn("Method \"" + key + "\" has already been defined as a prop.", vm); 26314 } 26315 26316 if (key in vm && isReserved(key)) { 26317 warn("Method \"" + key + "\" conflicts with an existing Vue instance method. " + "Avoid defining component methods that start with _ or $."); 26318 } 26319 } 26320 26321 vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm); 26322 } 26323} 26324 26325function initWatch(vm, watch) { 26326 for (var key in watch) { 26327 var handler = watch[key]; 26328 26329 if (Array.isArray(handler)) { 26330 for (var i = 0; i < handler.length; i++) { 26331 createWatcher(vm, key, handler[i]); 26332 } 26333 } else { 26334 createWatcher(vm, key, handler); 26335 } 26336 } 26337} 26338 26339function createWatcher(vm, expOrFn, handler, options) { 26340 if (isPlainObject(handler)) { 26341 options = handler; 26342 handler = handler.handler; 26343 } 26344 26345 if (typeof handler === 'string') { 26346 handler = vm[handler]; 26347 } 26348 26349 return vm.$watch(expOrFn, handler, options); 26350} 26351 26352function stateMixin(Vue) { 26353 // flow somehow has problems with directly declared definition object 26354 // when using Object.defineProperty, so we have to procedurally build up 26355 // the object here. 26356 var dataDef = {}; 26357 26358 dataDef.get = function () { 26359 return this._data; 26360 }; 26361 26362 var propsDef = {}; 26363 26364 propsDef.get = function () { 26365 return this._props; 26366 }; 26367 26368 if (true) { 26369 dataDef.set = function () { 26370 warn('Avoid replacing instance root $data. ' + 'Use nested data properties instead.', this); 26371 }; 26372 26373 propsDef.set = function () { 26374 warn("$props is readonly.", this); 26375 }; 26376 } 26377 26378 Object.defineProperty(Vue.prototype, '$data', dataDef); 26379 Object.defineProperty(Vue.prototype, '$props', propsDef); 26380 Vue.prototype.$set = set; 26381 Vue.prototype.$delete = del; 26382 26383 Vue.prototype.$watch = function (expOrFn, cb, options) { 26384 var vm = this; 26385 26386 if (isPlainObject(cb)) { 26387 return createWatcher(vm, expOrFn, cb, options); 26388 } 26389 26390 options = options || {}; 26391 options.user = true; 26392 var watcher = new Watcher(vm, expOrFn, cb, options); 26393 26394 if (options.immediate) { 26395 try { 26396 cb.call(vm, watcher.value); 26397 } catch (error) { 26398 handleError(error, vm, "callback for immediate watcher \"" + watcher.expression + "\""); 26399 } 26400 } 26401 26402 return function unwatchFn() { 26403 watcher.teardown(); 26404 }; 26405 }; 26406} 26407/* */ 26408 26409 26410var uid$3 = 0; 26411 26412function initMixin(Vue) { 26413 Vue.prototype._init = function (options) { 26414 var vm = this; // a uid 26415 26416 vm._uid = uid$3++; 26417 var startTag, endTag; 26418 /* istanbul ignore if */ 26419 26420 if ( true && config.performance && mark) { 26421 startTag = "vue-perf-start:" + vm._uid; 26422 endTag = "vue-perf-end:" + vm._uid; 26423 mark(startTag); 26424 } // a flag to avoid this being observed 26425 26426 26427 vm._isVue = true; // merge options 26428 26429 if (options && options._isComponent) { 26430 // optimize internal component instantiation 26431 // since dynamic options merging is pretty slow, and none of the 26432 // internal component options needs special treatment. 26433 initInternalComponent(vm, options); 26434 } else { 26435 vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm); 26436 } 26437 /* istanbul ignore else */ 26438 26439 26440 if (true) { 26441 initProxy(vm); 26442 } else {} // expose real self 26443 26444 26445 vm._self = vm; 26446 initLifecycle(vm); 26447 initEvents(vm); 26448 initRender(vm); 26449 callHook(vm, 'beforeCreate'); 26450 initInjections(vm); // resolve injections before data/props 26451 26452 initState(vm); 26453 initProvide(vm); // resolve provide after data/props 26454 26455 callHook(vm, 'created'); 26456 /* istanbul ignore if */ 26457 26458 if ( true && config.performance && mark) { 26459 vm._name = formatComponentName(vm, false); 26460 mark(endTag); 26461 measure("vue " + vm._name + " init", startTag, endTag); 26462 } 26463 26464 if (vm.$options.el) { 26465 vm.$mount(vm.$options.el); 26466 } 26467 }; 26468} 26469 26470function initInternalComponent(vm, options) { 26471 var opts = vm.$options = Object.create(vm.constructor.options); // doing this because it's faster than dynamic enumeration. 26472 26473 var parentVnode = options._parentVnode; 26474 opts.parent = options.parent; 26475 opts._parentVnode = parentVnode; 26476 var vnodeComponentOptions = parentVnode.componentOptions; 26477 opts.propsData = vnodeComponentOptions.propsData; 26478 opts._parentListeners = vnodeComponentOptions.listeners; 26479 opts._renderChildren = vnodeComponentOptions.children; 26480 opts._componentTag = vnodeComponentOptions.tag; 26481 26482 if (options.render) { 26483 opts.render = options.render; 26484 opts.staticRenderFns = options.staticRenderFns; 26485 } 26486} 26487 26488function resolveConstructorOptions(Ctor) { 26489 var options = Ctor.options; 26490 26491 if (Ctor.super) { 26492 var superOptions = resolveConstructorOptions(Ctor.super); 26493 var cachedSuperOptions = Ctor.superOptions; 26494 26495 if (superOptions !== cachedSuperOptions) { 26496 // super option changed, 26497 // need to resolve new options. 26498 Ctor.superOptions = superOptions; // check if there are any late-modified/attached options (#4976) 26499 26500 var modifiedOptions = resolveModifiedOptions(Ctor); // update base extend options 26501 26502 if (modifiedOptions) { 26503 extend(Ctor.extendOptions, modifiedOptions); 26504 } 26505 26506 options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions); 26507 26508 if (options.name) { 26509 options.components[options.name] = Ctor; 26510 } 26511 } 26512 } 26513 26514 return options; 26515} 26516 26517function resolveModifiedOptions(Ctor) { 26518 var modified; 26519 var latest = Ctor.options; 26520 var sealed = Ctor.sealedOptions; 26521 26522 for (var key in latest) { 26523 if (latest[key] !== sealed[key]) { 26524 if (!modified) { 26525 modified = {}; 26526 } 26527 26528 modified[key] = latest[key]; 26529 } 26530 } 26531 26532 return modified; 26533} 26534 26535function Vue(options) { 26536 if ( true && !(this instanceof Vue)) { 26537 warn('Vue is a constructor and should be called with the `new` keyword'); 26538 } 26539 26540 this._init(options); 26541} 26542 26543initMixin(Vue); 26544stateMixin(Vue); 26545eventsMixin(Vue); 26546lifecycleMixin(Vue); 26547renderMixin(Vue); 26548/* */ 26549 26550function initUse(Vue) { 26551 Vue.use = function (plugin) { 26552 var installedPlugins = this._installedPlugins || (this._installedPlugins = []); 26553 26554 if (installedPlugins.indexOf(plugin) > -1) { 26555 return this; 26556 } // additional parameters 26557 26558 26559 var args = toArray(arguments, 1); 26560 args.unshift(this); 26561 26562 if (typeof plugin.install === 'function') { 26563 plugin.install.apply(plugin, args); 26564 } else if (typeof plugin === 'function') { 26565 plugin.apply(null, args); 26566 } 26567 26568 installedPlugins.push(plugin); 26569 return this; 26570 }; 26571} 26572/* */ 26573 26574 26575function initMixin$1(Vue) { 26576 Vue.mixin = function (mixin) { 26577 this.options = mergeOptions(this.options, mixin); 26578 return this; 26579 }; 26580} 26581/* */ 26582 26583 26584function initExtend(Vue) { 26585 /** 26586 * Each instance constructor, including Vue, has a unique 26587 * cid. This enables us to create wrapped "child 26588 * constructors" for prototypal inheritance and cache them. 26589 */ 26590 Vue.cid = 0; 26591 var cid = 1; 26592 /** 26593 * Class inheritance 26594 */ 26595 26596 Vue.extend = function (extendOptions) { 26597 extendOptions = extendOptions || {}; 26598 var Super = this; 26599 var SuperId = Super.cid; 26600 var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {}); 26601 26602 if (cachedCtors[SuperId]) { 26603 return cachedCtors[SuperId]; 26604 } 26605 26606 var name = extendOptions.name || Super.options.name; 26607 26608 if ( true && name) { 26609 validateComponentName(name); 26610 } 26611 26612 var Sub = function VueComponent(options) { 26613 this._init(options); 26614 }; 26615 26616 Sub.prototype = Object.create(Super.prototype); 26617 Sub.prototype.constructor = Sub; 26618 Sub.cid = cid++; 26619 Sub.options = mergeOptions(Super.options, extendOptions); 26620 Sub['super'] = Super; // For props and computed properties, we define the proxy getters on 26621 // the Vue instances at extension time, on the extended prototype. This 26622 // avoids Object.defineProperty calls for each instance created. 26623 26624 if (Sub.options.props) { 26625 initProps$1(Sub); 26626 } 26627 26628 if (Sub.options.computed) { 26629 initComputed$1(Sub); 26630 } // allow further extension/mixin/plugin usage 26631 26632 26633 Sub.extend = Super.extend; 26634 Sub.mixin = Super.mixin; 26635 Sub.use = Super.use; // create asset registers, so extended classes 26636 // can have their private assets too. 26637 26638 ASSET_TYPES.forEach(function (type) { 26639 Sub[type] = Super[type]; 26640 }); // enable recursive self-lookup 26641 26642 if (name) { 26643 Sub.options.components[name] = Sub; 26644 } // keep a reference to the super options at extension time. 26645 // later at instantiation we can check if Super's options have 26646 // been updated. 26647 26648 26649 Sub.superOptions = Super.options; 26650 Sub.extendOptions = extendOptions; 26651 Sub.sealedOptions = extend({}, Sub.options); // cache constructor 26652 26653 cachedCtors[SuperId] = Sub; 26654 return Sub; 26655 }; 26656} 26657 26658function initProps$1(Comp) { 26659 var props = Comp.options.props; 26660 26661 for (var key in props) { 26662 proxy(Comp.prototype, "_props", key); 26663 } 26664} 26665 26666function initComputed$1(Comp) { 26667 var computed = Comp.options.computed; 26668 26669 for (var key in computed) { 26670 defineComputed(Comp.prototype, key, computed[key]); 26671 } 26672} 26673/* */ 26674 26675 26676function initAssetRegisters(Vue) { 26677 /** 26678 * Create asset registration methods. 26679 */ 26680 ASSET_TYPES.forEach(function (type) { 26681 Vue[type] = function (id, definition) { 26682 if (!definition) { 26683 return this.options[type + 's'][id]; 26684 } else { 26685 /* istanbul ignore if */ 26686 if ( true && type === 'component') { 26687 validateComponentName(id); 26688 } 26689 26690 if (type === 'component' && isPlainObject(definition)) { 26691 definition.name = definition.name || id; 26692 definition = this.options._base.extend(definition); 26693 } 26694 26695 if (type === 'directive' && typeof definition === 'function') { 26696 definition = { 26697 bind: definition, 26698 update: definition 26699 }; 26700 } 26701 26702 this.options[type + 's'][id] = definition; 26703 return definition; 26704 } 26705 }; 26706 }); 26707} 26708/* */ 26709 26710 26711function getComponentName(opts) { 26712 return opts && (opts.Ctor.options.name || opts.tag); 26713} 26714 26715function matches(pattern, name) { 26716 if (Array.isArray(pattern)) { 26717 return pattern.indexOf(name) > -1; 26718 } else if (typeof pattern === 'string') { 26719 return pattern.split(',').indexOf(name) > -1; 26720 } else if (isRegExp(pattern)) { 26721 return pattern.test(name); 26722 } 26723 /* istanbul ignore next */ 26724 26725 26726 return false; 26727} 26728 26729function pruneCache(keepAliveInstance, filter) { 26730 var cache = keepAliveInstance.cache; 26731 var keys = keepAliveInstance.keys; 26732 var _vnode = keepAliveInstance._vnode; 26733 26734 for (var key in cache) { 26735 var cachedNode = cache[key]; 26736 26737 if (cachedNode) { 26738 var name = getComponentName(cachedNode.componentOptions); 26739 26740 if (name && !filter(name)) { 26741 pruneCacheEntry(cache, key, keys, _vnode); 26742 } 26743 } 26744 } 26745} 26746 26747function pruneCacheEntry(cache, key, keys, current) { 26748 var cached$$1 = cache[key]; 26749 26750 if (cached$$1 && (!current || cached$$1.tag !== current.tag)) { 26751 cached$$1.componentInstance.$destroy(); 26752 } 26753 26754 cache[key] = null; 26755 remove(keys, key); 26756} 26757 26758var patternTypes = [String, RegExp, Array]; 26759var KeepAlive = { 26760 name: 'keep-alive', 26761 abstract: true, 26762 props: { 26763 include: patternTypes, 26764 exclude: patternTypes, 26765 max: [String, Number] 26766 }, 26767 created: function created() { 26768 this.cache = Object.create(null); 26769 this.keys = []; 26770 }, 26771 destroyed: function destroyed() { 26772 for (var key in this.cache) { 26773 pruneCacheEntry(this.cache, key, this.keys); 26774 } 26775 }, 26776 mounted: function mounted() { 26777 var this$1 = this; 26778 this.$watch('include', function (val) { 26779 pruneCache(this$1, function (name) { 26780 return matches(val, name); 26781 }); 26782 }); 26783 this.$watch('exclude', function (val) { 26784 pruneCache(this$1, function (name) { 26785 return !matches(val, name); 26786 }); 26787 }); 26788 }, 26789 render: function render() { 26790 var slot = this.$slots.default; 26791 var vnode = getFirstComponentChild(slot); 26792 var componentOptions = vnode && vnode.componentOptions; 26793 26794 if (componentOptions) { 26795 // check pattern 26796 var name = getComponentName(componentOptions); 26797 var ref = this; 26798 var include = ref.include; 26799 var exclude = ref.exclude; 26800 26801 if ( // not included 26802 include && (!name || !matches(include, name)) || // excluded 26803 exclude && name && matches(exclude, name)) { 26804 return vnode; 26805 } 26806 26807 var ref$1 = this; 26808 var cache = ref$1.cache; 26809 var keys = ref$1.keys; 26810 var key = vnode.key == null // same constructor may get registered as different local components 26811 // so cid alone is not enough (#3269) 26812 ? componentOptions.Ctor.cid + (componentOptions.tag ? "::" + componentOptions.tag : '') : vnode.key; 26813 26814 if (cache[key]) { 26815 vnode.componentInstance = cache[key].componentInstance; // make current key freshest 26816 26817 remove(keys, key); 26818 keys.push(key); 26819 } else { 26820 cache[key] = vnode; 26821 keys.push(key); // prune oldest entry 26822 26823 if (this.max && keys.length > parseInt(this.max)) { 26824 pruneCacheEntry(cache, keys[0], keys, this._vnode); 26825 } 26826 } 26827 26828 vnode.data.keepAlive = true; 26829 } 26830 26831 return vnode || slot && slot[0]; 26832 } 26833}; 26834var builtInComponents = { 26835 KeepAlive: KeepAlive 26836}; 26837/* */ 26838 26839function initGlobalAPI(Vue) { 26840 // config 26841 var configDef = {}; 26842 26843 configDef.get = function () { 26844 return config; 26845 }; 26846 26847 if (true) { 26848 configDef.set = function () { 26849 warn('Do not replace the Vue.config object, set individual fields instead.'); 26850 }; 26851 } 26852 26853 Object.defineProperty(Vue, 'config', configDef); // exposed util methods. 26854 // NOTE: these are not considered part of the public API - avoid relying on 26855 // them unless you are aware of the risk. 26856 26857 Vue.util = { 26858 warn: warn, 26859 extend: extend, 26860 mergeOptions: mergeOptions, 26861 defineReactive: defineReactive$$1 26862 }; 26863 Vue.set = set; 26864 Vue.delete = del; 26865 Vue.nextTick = nextTick; // 2.6 explicit observable API 26866 26867 Vue.observable = function (obj) { 26868 observe(obj); 26869 return obj; 26870 }; 26871 26872 Vue.options = Object.create(null); 26873 ASSET_TYPES.forEach(function (type) { 26874 Vue.options[type + 's'] = Object.create(null); 26875 }); // this is used to identify the "base" constructor to extend all plain-object 26876 // components with in Weex's multi-instance scenarios. 26877 26878 Vue.options._base = Vue; 26879 extend(Vue.options.components, builtInComponents); 26880 initUse(Vue); 26881 initMixin$1(Vue); 26882 initExtend(Vue); 26883 initAssetRegisters(Vue); 26884} 26885 26886initGlobalAPI(Vue); 26887Object.defineProperty(Vue.prototype, '$isServer', { 26888 get: isServerRendering 26889}); 26890Object.defineProperty(Vue.prototype, '$ssrContext', { 26891 get: function get() { 26892 /* istanbul ignore next */ 26893 return this.$vnode && this.$vnode.ssrContext; 26894 } 26895}); // expose FunctionalRenderContext for ssr runtime helper installation 26896 26897Object.defineProperty(Vue, 'FunctionalRenderContext', { 26898 value: FunctionalRenderContext 26899}); 26900Vue.version = '2.6.11'; 26901/* */ 26902// these are reserved for web because they are directly compiled away 26903// during template compilation 26904 26905var isReservedAttr = makeMap('style,class'); // attributes that should be using props for binding 26906 26907var acceptValue = makeMap('input,textarea,option,select,progress'); 26908 26909var mustUseProp = function (tag, type, attr) { 26910 return attr === 'value' && acceptValue(tag) && type !== 'button' || attr === 'selected' && tag === 'option' || attr === 'checked' && tag === 'input' || attr === 'muted' && tag === 'video'; 26911}; 26912 26913var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck'); 26914var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only'); 26915 26916var convertEnumeratedValue = function (key, value) { 26917 return isFalsyAttrValue(value) || value === 'false' ? 'false' // allow arbitrary string value for contenteditable 26918 : key === 'contenteditable' && isValidContentEditableValue(value) ? value : 'true'; 26919}; 26920 26921var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' + 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' + 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' + 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' + 'required,reversed,scoped,seamless,selected,sortable,translate,' + 'truespeed,typemustmatch,visible'); 26922var xlinkNS = 'http://www.w3.org/1999/xlink'; 26923 26924var isXlink = function (name) { 26925 return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'; 26926}; 26927 26928var getXlinkProp = function (name) { 26929 return isXlink(name) ? name.slice(6, name.length) : ''; 26930}; 26931 26932var isFalsyAttrValue = function (val) { 26933 return val == null || val === false; 26934}; 26935/* */ 26936 26937 26938function genClassForVnode(vnode) { 26939 var data = vnode.data; 26940 var parentNode = vnode; 26941 var childNode = vnode; 26942 26943 while (isDef(childNode.componentInstance)) { 26944 childNode = childNode.componentInstance._vnode; 26945 26946 if (childNode && childNode.data) { 26947 data = mergeClassData(childNode.data, data); 26948 } 26949 } 26950 26951 while (isDef(parentNode = parentNode.parent)) { 26952 if (parentNode && parentNode.data) { 26953 data = mergeClassData(data, parentNode.data); 26954 } 26955 } 26956 26957 return renderClass(data.staticClass, data.class); 26958} 26959 26960function mergeClassData(child, parent) { 26961 return { 26962 staticClass: concat(child.staticClass, parent.staticClass), 26963 class: isDef(child.class) ? [child.class, parent.class] : parent.class 26964 }; 26965} 26966 26967function renderClass(staticClass, dynamicClass) { 26968 if (isDef(staticClass) || isDef(dynamicClass)) { 26969 return concat(staticClass, stringifyClass(dynamicClass)); 26970 } 26971 /* istanbul ignore next */ 26972 26973 26974 return ''; 26975} 26976 26977function concat(a, b) { 26978 return a ? b ? a + ' ' + b : a : b || ''; 26979} 26980 26981function stringifyClass(value) { 26982 if (Array.isArray(value)) { 26983 return stringifyArray(value); 26984 } 26985 26986 if (isObject(value)) { 26987 return stringifyObject(value); 26988 } 26989 26990 if (typeof value === 'string') { 26991 return value; 26992 } 26993 /* istanbul ignore next */ 26994 26995 26996 return ''; 26997} 26998 26999function stringifyArray(value) { 27000 var res = ''; 27001 var stringified; 27002 27003 for (var i = 0, l = value.length; i < l; i++) { 27004 if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') { 27005 if (res) { 27006 res += ' '; 27007 } 27008 27009 res += stringified; 27010 } 27011 } 27012 27013 return res; 27014} 27015 27016function stringifyObject(value) { 27017 var res = ''; 27018 27019 for (var key in value) { 27020 if (value[key]) { 27021 if (res) { 27022 res += ' '; 27023 } 27024 27025 res += key; 27026 } 27027 } 27028 27029 return res; 27030} 27031/* */ 27032 27033 27034var namespaceMap = { 27035 svg: 'http://www.w3.org/2000/svg', 27036 math: 'http://www.w3.org/1998/Math/MathML' 27037}; 27038var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' + 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' + 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' + 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' + 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' + 'embed,object,param,source,canvas,script,noscript,del,ins,' + 'caption,col,colgroup,table,thead,tbody,td,th,tr,' + 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' + 'output,progress,select,textarea,' + 'details,dialog,menu,menuitem,summary,' + 'content,element,shadow,template,blockquote,iframe,tfoot'); // this map is intentionally selective, only covering SVG elements that may 27039// contain child elements. 27040 27041var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' + 'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' + 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true); 27042 27043var isPreTag = function (tag) { 27044 return tag === 'pre'; 27045}; 27046 27047var isReservedTag = function (tag) { 27048 return isHTMLTag(tag) || isSVG(tag); 27049}; 27050 27051function getTagNamespace(tag) { 27052 if (isSVG(tag)) { 27053 return 'svg'; 27054 } // basic support for MathML 27055 // note it doesn't support other MathML elements being component roots 27056 27057 27058 if (tag === 'math') { 27059 return 'math'; 27060 } 27061} 27062 27063var unknownElementCache = Object.create(null); 27064 27065function isUnknownElement(tag) { 27066 /* istanbul ignore if */ 27067 if (!inBrowser) { 27068 return true; 27069 } 27070 27071 if (isReservedTag(tag)) { 27072 return false; 27073 } 27074 27075 tag = tag.toLowerCase(); 27076 /* istanbul ignore if */ 27077 27078 if (unknownElementCache[tag] != null) { 27079 return unknownElementCache[tag]; 27080 } 27081 27082 var el = document.createElement(tag); 27083 27084 if (tag.indexOf('-') > -1) { 27085 // http://stackoverflow.com/a/28210364/1070244 27086 return unknownElementCache[tag] = el.constructor === window.HTMLUnknownElement || el.constructor === window.HTMLElement; 27087 } else { 27088 return unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()); 27089 } 27090} 27091 27092var isTextInputType = makeMap('text,number,password,search,email,tel,url'); 27093/* */ 27094 27095/** 27096 * Query an element selector if it's not an element already. 27097 */ 27098 27099function query(el) { 27100 if (typeof el === 'string') { 27101 var selected = document.querySelector(el); 27102 27103 if (!selected) { 27104 true && warn('Cannot find element: ' + el); 27105 return document.createElement('div'); 27106 } 27107 27108 return selected; 27109 } else { 27110 return el; 27111 } 27112} 27113/* */ 27114 27115 27116function createElement$1(tagName, vnode) { 27117 var elm = document.createElement(tagName); 27118 27119 if (tagName !== 'select') { 27120 return elm; 27121 } // false or null will remove the attribute but undefined will not 27122 27123 27124 if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) { 27125 elm.setAttribute('multiple', 'multiple'); 27126 } 27127 27128 return elm; 27129} 27130 27131function createElementNS(namespace, tagName) { 27132 return document.createElementNS(namespaceMap[namespace], tagName); 27133} 27134 27135function createTextNode(text) { 27136 return document.createTextNode(text); 27137} 27138 27139function createComment(text) { 27140 return document.createComment(text); 27141} 27142 27143function insertBefore(parentNode, newNode, referenceNode) { 27144 parentNode.insertBefore(newNode, referenceNode); 27145} 27146 27147function removeChild(node, child) { 27148 node.removeChild(child); 27149} 27150 27151function appendChild(node, child) { 27152 node.appendChild(child); 27153} 27154 27155function parentNode(node) { 27156 return node.parentNode; 27157} 27158 27159function nextSibling(node) { 27160 return node.nextSibling; 27161} 27162 27163function tagName(node) { 27164 return node.tagName; 27165} 27166 27167function setTextContent(node, text) { 27168 node.textContent = text; 27169} 27170 27171function setStyleScope(node, scopeId) { 27172 node.setAttribute(scopeId, ''); 27173} 27174 27175var nodeOps = 27176/*#__PURE__*/ 27177Object.freeze({ 27178 createElement: createElement$1, 27179 createElementNS: createElementNS, 27180 createTextNode: createTextNode, 27181 createComment: createComment, 27182 insertBefore: insertBefore, 27183 removeChild: removeChild, 27184 appendChild: appendChild, 27185 parentNode: parentNode, 27186 nextSibling: nextSibling, 27187 tagName: tagName, 27188 setTextContent: setTextContent, 27189 setStyleScope: setStyleScope 27190}); 27191/* */ 27192 27193var ref = { 27194 create: function create(_, vnode) { 27195 registerRef(vnode); 27196 }, 27197 update: function update(oldVnode, vnode) { 27198 if (oldVnode.data.ref !== vnode.data.ref) { 27199 registerRef(oldVnode, true); 27200 registerRef(vnode); 27201 } 27202 }, 27203 destroy: function destroy(vnode) { 27204 registerRef(vnode, true); 27205 } 27206}; 27207 27208function registerRef(vnode, isRemoval) { 27209 var key = vnode.data.ref; 27210 27211 if (!isDef(key)) { 27212 return; 27213 } 27214 27215 var vm = vnode.context; 27216 var ref = vnode.componentInstance || vnode.elm; 27217 var refs = vm.$refs; 27218 27219 if (isRemoval) { 27220 if (Array.isArray(refs[key])) { 27221 remove(refs[key], ref); 27222 } else if (refs[key] === ref) { 27223 refs[key] = undefined; 27224 } 27225 } else { 27226 if (vnode.data.refInFor) { 27227 if (!Array.isArray(refs[key])) { 27228 refs[key] = [ref]; 27229 } else if (refs[key].indexOf(ref) < 0) { 27230 // $flow-disable-line 27231 refs[key].push(ref); 27232 } 27233 } else { 27234 refs[key] = ref; 27235 } 27236 } 27237} 27238/** 27239 * Virtual DOM patching algorithm based on Snabbdom by 27240 * Simon Friis Vindum (@paldepind) 27241 * Licensed under the MIT License 27242 * https://github.com/paldepind/snabbdom/blob/master/LICENSE 27243 * 27244 * modified by Evan You (@yyx990803) 27245 * 27246 * Not type-checking this because this file is perf-critical and the cost 27247 * of making flow understand it is not worth it. 27248 */ 27249 27250 27251var emptyNode = new VNode('', {}, []); 27252var hooks = ['create', 'activate', 'update', 'remove', 'destroy']; 27253 27254function sameVnode(a, b) { 27255 return a.key === b.key && (a.tag === b.tag && a.isComment === b.isComment && isDef(a.data) === isDef(b.data) && sameInputType(a, b) || isTrue(a.isAsyncPlaceholder) && a.asyncFactory === b.asyncFactory && isUndef(b.asyncFactory.error)); 27256} 27257 27258function sameInputType(a, b) { 27259 if (a.tag !== 'input') { 27260 return true; 27261 } 27262 27263 var i; 27264 var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type; 27265 var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type; 27266 return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB); 27267} 27268 27269function createKeyToOldIdx(children, beginIdx, endIdx) { 27270 var i, key; 27271 var map = {}; 27272 27273 for (i = beginIdx; i <= endIdx; ++i) { 27274 key = children[i].key; 27275 27276 if (isDef(key)) { 27277 map[key] = i; 27278 } 27279 } 27280 27281 return map; 27282} 27283 27284function createPatchFunction(backend) { 27285 var i, j; 27286 var cbs = {}; 27287 var modules = backend.modules; 27288 var nodeOps = backend.nodeOps; 27289 27290 for (i = 0; i < hooks.length; ++i) { 27291 cbs[hooks[i]] = []; 27292 27293 for (j = 0; j < modules.length; ++j) { 27294 if (isDef(modules[j][hooks[i]])) { 27295 cbs[hooks[i]].push(modules[j][hooks[i]]); 27296 } 27297 } 27298 } 27299 27300 function emptyNodeAt(elm) { 27301 return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm); 27302 } 27303 27304 function createRmCb(childElm, listeners) { 27305 function remove$$1() { 27306 if (--remove$$1.listeners === 0) { 27307 removeNode(childElm); 27308 } 27309 } 27310 27311 remove$$1.listeners = listeners; 27312 return remove$$1; 27313 } 27314 27315 function removeNode(el) { 27316 var parent = nodeOps.parentNode(el); // element may have already been removed due to v-html / v-text 27317 27318 if (isDef(parent)) { 27319 nodeOps.removeChild(parent, el); 27320 } 27321 } 27322 27323 function isUnknownElement$$1(vnode, inVPre) { 27324 return !inVPre && !vnode.ns && !(config.ignoredElements.length && config.ignoredElements.some(function (ignore) { 27325 return isRegExp(ignore) ? ignore.test(vnode.tag) : ignore === vnode.tag; 27326 })) && config.isUnknownElement(vnode.tag); 27327 } 27328 27329 var creatingElmInVPre = 0; 27330 27331 function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) { 27332 if (isDef(vnode.elm) && isDef(ownerArray)) { 27333 // This vnode was used in a previous render! 27334 // now it's used as a new node, overwriting its elm would cause 27335 // potential patch errors down the road when it's used as an insertion 27336 // reference node. Instead, we clone the node on-demand before creating 27337 // associated DOM element for it. 27338 vnode = ownerArray[index] = cloneVNode(vnode); 27339 } 27340 27341 vnode.isRootInsert = !nested; // for transition enter check 27342 27343 if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) { 27344 return; 27345 } 27346 27347 var data = vnode.data; 27348 var children = vnode.children; 27349 var tag = vnode.tag; 27350 27351 if (isDef(tag)) { 27352 if (true) { 27353 if (data && data.pre) { 27354 creatingElmInVPre++; 27355 } 27356 27357 if (isUnknownElement$$1(vnode, creatingElmInVPre)) { 27358 warn('Unknown custom element: <' + tag + '> - did you ' + 'register the component correctly? For recursive components, ' + 'make sure to provide the "name" option.', vnode.context); 27359 } 27360 } 27361 27362 vnode.elm = vnode.ns ? nodeOps.createElementNS(vnode.ns, tag) : nodeOps.createElement(tag, vnode); 27363 setScope(vnode); 27364 /* istanbul ignore if */ 27365 27366 { 27367 createChildren(vnode, children, insertedVnodeQueue); 27368 27369 if (isDef(data)) { 27370 invokeCreateHooks(vnode, insertedVnodeQueue); 27371 } 27372 27373 insert(parentElm, vnode.elm, refElm); 27374 } 27375 27376 if ( true && data && data.pre) { 27377 creatingElmInVPre--; 27378 } 27379 } else if (isTrue(vnode.isComment)) { 27380 vnode.elm = nodeOps.createComment(vnode.text); 27381 insert(parentElm, vnode.elm, refElm); 27382 } else { 27383 vnode.elm = nodeOps.createTextNode(vnode.text); 27384 insert(parentElm, vnode.elm, refElm); 27385 } 27386 } 27387 27388 function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) { 27389 var i = vnode.data; 27390 27391 if (isDef(i)) { 27392 var isReactivated = isDef(vnode.componentInstance) && i.keepAlive; 27393 27394 if (isDef(i = i.hook) && isDef(i = i.init)) { 27395 i(vnode, false 27396 /* hydrating */ 27397 ); 27398 } // after calling the init hook, if the vnode is a child component 27399 // it should've created a child instance and mounted it. the child 27400 // component also has set the placeholder vnode's elm. 27401 // in that case we can just return the element and be done. 27402 27403 27404 if (isDef(vnode.componentInstance)) { 27405 initComponent(vnode, insertedVnodeQueue); 27406 insert(parentElm, vnode.elm, refElm); 27407 27408 if (isTrue(isReactivated)) { 27409 reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm); 27410 } 27411 27412 return true; 27413 } 27414 } 27415 } 27416 27417 function initComponent(vnode, insertedVnodeQueue) { 27418 if (isDef(vnode.data.pendingInsert)) { 27419 insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert); 27420 vnode.data.pendingInsert = null; 27421 } 27422 27423 vnode.elm = vnode.componentInstance.$el; 27424 27425 if (isPatchable(vnode)) { 27426 invokeCreateHooks(vnode, insertedVnodeQueue); 27427 setScope(vnode); 27428 } else { 27429 // empty component root. 27430 // skip all element-related modules except for ref (#3455) 27431 registerRef(vnode); // make sure to invoke the insert hook 27432 27433 insertedVnodeQueue.push(vnode); 27434 } 27435 } 27436 27437 function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) { 27438 var i; // hack for #4339: a reactivated component with inner transition 27439 // does not trigger because the inner node's created hooks are not called 27440 // again. It's not ideal to involve module-specific logic in here but 27441 // there doesn't seem to be a better way to do it. 27442 27443 var innerNode = vnode; 27444 27445 while (innerNode.componentInstance) { 27446 innerNode = innerNode.componentInstance._vnode; 27447 27448 if (isDef(i = innerNode.data) && isDef(i = i.transition)) { 27449 for (i = 0; i < cbs.activate.length; ++i) { 27450 cbs.activate[i](emptyNode, innerNode); 27451 } 27452 27453 insertedVnodeQueue.push(innerNode); 27454 break; 27455 } 27456 } // unlike a newly created component, 27457 // a reactivated keep-alive component doesn't insert itself 27458 27459 27460 insert(parentElm, vnode.elm, refElm); 27461 } 27462 27463 function insert(parent, elm, ref$$1) { 27464 if (isDef(parent)) { 27465 if (isDef(ref$$1)) { 27466 if (nodeOps.parentNode(ref$$1) === parent) { 27467 nodeOps.insertBefore(parent, elm, ref$$1); 27468 } 27469 } else { 27470 nodeOps.appendChild(parent, elm); 27471 } 27472 } 27473 } 27474 27475 function createChildren(vnode, children, insertedVnodeQueue) { 27476 if (Array.isArray(children)) { 27477 if (true) { 27478 checkDuplicateKeys(children); 27479 } 27480 27481 for (var i = 0; i < children.length; ++i) { 27482 createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i); 27483 } 27484 } else if (isPrimitive(vnode.text)) { 27485 nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text))); 27486 } 27487 } 27488 27489 function isPatchable(vnode) { 27490 while (vnode.componentInstance) { 27491 vnode = vnode.componentInstance._vnode; 27492 } 27493 27494 return isDef(vnode.tag); 27495 } 27496 27497 function invokeCreateHooks(vnode, insertedVnodeQueue) { 27498 for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) { 27499 cbs.create[i$1](emptyNode, vnode); 27500 } 27501 27502 i = vnode.data.hook; // Reuse variable 27503 27504 if (isDef(i)) { 27505 if (isDef(i.create)) { 27506 i.create(emptyNode, vnode); 27507 } 27508 27509 if (isDef(i.insert)) { 27510 insertedVnodeQueue.push(vnode); 27511 } 27512 } 27513 } // set scope id attribute for scoped CSS. 27514 // this is implemented as a special case to avoid the overhead 27515 // of going through the normal attribute patching process. 27516 27517 27518 function setScope(vnode) { 27519 var i; 27520 27521 if (isDef(i = vnode.fnScopeId)) { 27522 nodeOps.setStyleScope(vnode.elm, i); 27523 } else { 27524 var ancestor = vnode; 27525 27526 while (ancestor) { 27527 if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) { 27528 nodeOps.setStyleScope(vnode.elm, i); 27529 } 27530 27531 ancestor = ancestor.parent; 27532 } 27533 } // for slot content they should also get the scopeId from the host instance. 27534 27535 27536 if (isDef(i = activeInstance) && i !== vnode.context && i !== vnode.fnContext && isDef(i = i.$options._scopeId)) { 27537 nodeOps.setStyleScope(vnode.elm, i); 27538 } 27539 } 27540 27541 function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) { 27542 for (; startIdx <= endIdx; ++startIdx) { 27543 createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx); 27544 } 27545 } 27546 27547 function invokeDestroyHook(vnode) { 27548 var i, j; 27549 var data = vnode.data; 27550 27551 if (isDef(data)) { 27552 if (isDef(i = data.hook) && isDef(i = i.destroy)) { 27553 i(vnode); 27554 } 27555 27556 for (i = 0; i < cbs.destroy.length; ++i) { 27557 cbs.destroy[i](vnode); 27558 } 27559 } 27560 27561 if (isDef(i = vnode.children)) { 27562 for (j = 0; j < vnode.children.length; ++j) { 27563 invokeDestroyHook(vnode.children[j]); 27564 } 27565 } 27566 } 27567 27568 function removeVnodes(vnodes, startIdx, endIdx) { 27569 for (; startIdx <= endIdx; ++startIdx) { 27570 var ch = vnodes[startIdx]; 27571 27572 if (isDef(ch)) { 27573 if (isDef(ch.tag)) { 27574 removeAndInvokeRemoveHook(ch); 27575 invokeDestroyHook(ch); 27576 } else { 27577 // Text node 27578 removeNode(ch.elm); 27579 } 27580 } 27581 } 27582 } 27583 27584 function removeAndInvokeRemoveHook(vnode, rm) { 27585 if (isDef(rm) || isDef(vnode.data)) { 27586 var i; 27587 var listeners = cbs.remove.length + 1; 27588 27589 if (isDef(rm)) { 27590 // we have a recursively passed down rm callback 27591 // increase the listeners count 27592 rm.listeners += listeners; 27593 } else { 27594 // directly removing 27595 rm = createRmCb(vnode.elm, listeners); 27596 } // recursively invoke hooks on child component root node 27597 27598 27599 if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) { 27600 removeAndInvokeRemoveHook(i, rm); 27601 } 27602 27603 for (i = 0; i < cbs.remove.length; ++i) { 27604 cbs.remove[i](vnode, rm); 27605 } 27606 27607 if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) { 27608 i(vnode, rm); 27609 } else { 27610 rm(); 27611 } 27612 } else { 27613 removeNode(vnode.elm); 27614 } 27615 } 27616 27617 function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) { 27618 var oldStartIdx = 0; 27619 var newStartIdx = 0; 27620 var oldEndIdx = oldCh.length - 1; 27621 var oldStartVnode = oldCh[0]; 27622 var oldEndVnode = oldCh[oldEndIdx]; 27623 var newEndIdx = newCh.length - 1; 27624 var newStartVnode = newCh[0]; 27625 var newEndVnode = newCh[newEndIdx]; 27626 var oldKeyToIdx, idxInOld, vnodeToMove, refElm; // removeOnly is a special flag used only by <transition-group> 27627 // to ensure removed elements stay in correct relative positions 27628 // during leaving transitions 27629 27630 var canMove = !removeOnly; 27631 27632 if (true) { 27633 checkDuplicateKeys(newCh); 27634 } 27635 27636 while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) { 27637 if (isUndef(oldStartVnode)) { 27638 oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left 27639 } else if (isUndef(oldEndVnode)) { 27640 oldEndVnode = oldCh[--oldEndIdx]; 27641 } else if (sameVnode(oldStartVnode, newStartVnode)) { 27642 patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 27643 oldStartVnode = oldCh[++oldStartIdx]; 27644 newStartVnode = newCh[++newStartIdx]; 27645 } else if (sameVnode(oldEndVnode, newEndVnode)) { 27646 patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); 27647 oldEndVnode = oldCh[--oldEndIdx]; 27648 newEndVnode = newCh[--newEndIdx]; 27649 } else if (sameVnode(oldStartVnode, newEndVnode)) { 27650 // Vnode moved right 27651 patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); 27652 canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm)); 27653 oldStartVnode = oldCh[++oldStartIdx]; 27654 newEndVnode = newCh[--newEndIdx]; 27655 } else if (sameVnode(oldEndVnode, newStartVnode)) { 27656 // Vnode moved left 27657 patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 27658 canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm); 27659 oldEndVnode = oldCh[--oldEndIdx]; 27660 newStartVnode = newCh[++newStartIdx]; 27661 } else { 27662 if (isUndef(oldKeyToIdx)) { 27663 oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); 27664 } 27665 27666 idxInOld = isDef(newStartVnode.key) ? oldKeyToIdx[newStartVnode.key] : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx); 27667 27668 if (isUndef(idxInOld)) { 27669 // New element 27670 createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); 27671 } else { 27672 vnodeToMove = oldCh[idxInOld]; 27673 27674 if (sameVnode(vnodeToMove, newStartVnode)) { 27675 patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 27676 oldCh[idxInOld] = undefined; 27677 canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm); 27678 } else { 27679 // same key but different element. treat as new element 27680 createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); 27681 } 27682 } 27683 27684 newStartVnode = newCh[++newStartIdx]; 27685 } 27686 } 27687 27688 if (oldStartIdx > oldEndIdx) { 27689 refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm; 27690 addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue); 27691 } else if (newStartIdx > newEndIdx) { 27692 removeVnodes(oldCh, oldStartIdx, oldEndIdx); 27693 } 27694 } 27695 27696 function checkDuplicateKeys(children) { 27697 var seenKeys = {}; 27698 27699 for (var i = 0; i < children.length; i++) { 27700 var vnode = children[i]; 27701 var key = vnode.key; 27702 27703 if (isDef(key)) { 27704 if (seenKeys[key]) { 27705 warn("Duplicate keys detected: '" + key + "'. This may cause an update error.", vnode.context); 27706 } else { 27707 seenKeys[key] = true; 27708 } 27709 } 27710 } 27711 } 27712 27713 function findIdxInOld(node, oldCh, start, end) { 27714 for (var i = start; i < end; i++) { 27715 var c = oldCh[i]; 27716 27717 if (isDef(c) && sameVnode(node, c)) { 27718 return i; 27719 } 27720 } 27721 } 27722 27723 function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) { 27724 if (oldVnode === vnode) { 27725 return; 27726 } 27727 27728 if (isDef(vnode.elm) && isDef(ownerArray)) { 27729 // clone reused vnode 27730 vnode = ownerArray[index] = cloneVNode(vnode); 27731 } 27732 27733 var elm = vnode.elm = oldVnode.elm; 27734 27735 if (isTrue(oldVnode.isAsyncPlaceholder)) { 27736 if (isDef(vnode.asyncFactory.resolved)) { 27737 hydrate(oldVnode.elm, vnode, insertedVnodeQueue); 27738 } else { 27739 vnode.isAsyncPlaceholder = true; 27740 } 27741 27742 return; 27743 } // reuse element for static trees. 27744 // note we only do this if the vnode is cloned - 27745 // if the new node is not cloned it means the render functions have been 27746 // reset by the hot-reload-api and we need to do a proper re-render. 27747 27748 27749 if (isTrue(vnode.isStatic) && isTrue(oldVnode.isStatic) && vnode.key === oldVnode.key && (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) { 27750 vnode.componentInstance = oldVnode.componentInstance; 27751 return; 27752 } 27753 27754 var i; 27755 var data = vnode.data; 27756 27757 if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) { 27758 i(oldVnode, vnode); 27759 } 27760 27761 var oldCh = oldVnode.children; 27762 var ch = vnode.children; 27763 27764 if (isDef(data) && isPatchable(vnode)) { 27765 for (i = 0; i < cbs.update.length; ++i) { 27766 cbs.update[i](oldVnode, vnode); 27767 } 27768 27769 if (isDef(i = data.hook) && isDef(i = i.update)) { 27770 i(oldVnode, vnode); 27771 } 27772 } 27773 27774 if (isUndef(vnode.text)) { 27775 if (isDef(oldCh) && isDef(ch)) { 27776 if (oldCh !== ch) { 27777 updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); 27778 } 27779 } else if (isDef(ch)) { 27780 if (true) { 27781 checkDuplicateKeys(ch); 27782 } 27783 27784 if (isDef(oldVnode.text)) { 27785 nodeOps.setTextContent(elm, ''); 27786 } 27787 27788 addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue); 27789 } else if (isDef(oldCh)) { 27790 removeVnodes(oldCh, 0, oldCh.length - 1); 27791 } else if (isDef(oldVnode.text)) { 27792 nodeOps.setTextContent(elm, ''); 27793 } 27794 } else if (oldVnode.text !== vnode.text) { 27795 nodeOps.setTextContent(elm, vnode.text); 27796 } 27797 27798 if (isDef(data)) { 27799 if (isDef(i = data.hook) && isDef(i = i.postpatch)) { 27800 i(oldVnode, vnode); 27801 } 27802 } 27803 } 27804 27805 function invokeInsertHook(vnode, queue, initial) { 27806 // delay insert hooks for component root nodes, invoke them after the 27807 // element is really inserted 27808 if (isTrue(initial) && isDef(vnode.parent)) { 27809 vnode.parent.data.pendingInsert = queue; 27810 } else { 27811 for (var i = 0; i < queue.length; ++i) { 27812 queue[i].data.hook.insert(queue[i]); 27813 } 27814 } 27815 } 27816 27817 var hydrationBailed = false; // list of modules that can skip create hook during hydration because they 27818 // are already rendered on the client or has no need for initialization 27819 // Note: style is excluded because it relies on initial clone for future 27820 // deep updates (#7063). 27821 27822 var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key'); // Note: this is a browser-only function so we can assume elms are DOM nodes. 27823 27824 function hydrate(elm, vnode, insertedVnodeQueue, inVPre) { 27825 var i; 27826 var tag = vnode.tag; 27827 var data = vnode.data; 27828 var children = vnode.children; 27829 inVPre = inVPre || data && data.pre; 27830 vnode.elm = elm; 27831 27832 if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) { 27833 vnode.isAsyncPlaceholder = true; 27834 return true; 27835 } // assert node match 27836 27837 27838 if (true) { 27839 if (!assertNodeMatch(elm, vnode, inVPre)) { 27840 return false; 27841 } 27842 } 27843 27844 if (isDef(data)) { 27845 if (isDef(i = data.hook) && isDef(i = i.init)) { 27846 i(vnode, true 27847 /* hydrating */ 27848 ); 27849 } 27850 27851 if (isDef(i = vnode.componentInstance)) { 27852 // child component. it should have hydrated its own tree. 27853 initComponent(vnode, insertedVnodeQueue); 27854 return true; 27855 } 27856 } 27857 27858 if (isDef(tag)) { 27859 if (isDef(children)) { 27860 // empty element, allow client to pick up and populate children 27861 if (!elm.hasChildNodes()) { 27862 createChildren(vnode, children, insertedVnodeQueue); 27863 } else { 27864 // v-html and domProps: innerHTML 27865 if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) { 27866 if (i !== elm.innerHTML) { 27867 /* istanbul ignore if */ 27868 if ( true && typeof console !== 'undefined' && !hydrationBailed) { 27869 hydrationBailed = true; 27870 console.warn('Parent: ', elm); 27871 console.warn('server innerHTML: ', i); 27872 console.warn('client innerHTML: ', elm.innerHTML); 27873 } 27874 27875 return false; 27876 } 27877 } else { 27878 // iterate and compare children lists 27879 var childrenMatch = true; 27880 var childNode = elm.firstChild; 27881 27882 for (var i$1 = 0; i$1 < children.length; i$1++) { 27883 if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) { 27884 childrenMatch = false; 27885 break; 27886 } 27887 27888 childNode = childNode.nextSibling; 27889 } // if childNode is not null, it means the actual childNodes list is 27890 // longer than the virtual children list. 27891 27892 27893 if (!childrenMatch || childNode) { 27894 /* istanbul ignore if */ 27895 if ( true && typeof console !== 'undefined' && !hydrationBailed) { 27896 hydrationBailed = true; 27897 console.warn('Parent: ', elm); 27898 console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children); 27899 } 27900 27901 return false; 27902 } 27903 } 27904 } 27905 } 27906 27907 if (isDef(data)) { 27908 var fullInvoke = false; 27909 27910 for (var key in data) { 27911 if (!isRenderedModule(key)) { 27912 fullInvoke = true; 27913 invokeCreateHooks(vnode, insertedVnodeQueue); 27914 break; 27915 } 27916 } 27917 27918 if (!fullInvoke && data['class']) { 27919 // ensure collecting deps for deep class bindings for future updates 27920 traverse(data['class']); 27921 } 27922 } 27923 } else if (elm.data !== vnode.text) { 27924 elm.data = vnode.text; 27925 } 27926 27927 return true; 27928 } 27929 27930 function assertNodeMatch(node, vnode, inVPre) { 27931 if (isDef(vnode.tag)) { 27932 return vnode.tag.indexOf('vue-component') === 0 || !isUnknownElement$$1(vnode, inVPre) && vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase()); 27933 } else { 27934 return node.nodeType === (vnode.isComment ? 8 : 3); 27935 } 27936 } 27937 27938 return function patch(oldVnode, vnode, hydrating, removeOnly) { 27939 if (isUndef(vnode)) { 27940 if (isDef(oldVnode)) { 27941 invokeDestroyHook(oldVnode); 27942 } 27943 27944 return; 27945 } 27946 27947 var isInitialPatch = false; 27948 var insertedVnodeQueue = []; 27949 27950 if (isUndef(oldVnode)) { 27951 // empty mount (likely as component), create new root element 27952 isInitialPatch = true; 27953 createElm(vnode, insertedVnodeQueue); 27954 } else { 27955 var isRealElement = isDef(oldVnode.nodeType); 27956 27957 if (!isRealElement && sameVnode(oldVnode, vnode)) { 27958 // patch existing root node 27959 patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly); 27960 } else { 27961 if (isRealElement) { 27962 // mounting to a real element 27963 // check if this is server-rendered content and if we can perform 27964 // a successful hydration. 27965 if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) { 27966 oldVnode.removeAttribute(SSR_ATTR); 27967 hydrating = true; 27968 } 27969 27970 if (isTrue(hydrating)) { 27971 if (hydrate(oldVnode, vnode, insertedVnodeQueue)) { 27972 invokeInsertHook(vnode, insertedVnodeQueue, true); 27973 return oldVnode; 27974 } else if (true) { 27975 warn('The client-side rendered virtual DOM tree is not matching ' + 'server-rendered content. This is likely caused by incorrect ' + 'HTML markup, for example nesting block-level elements inside ' + '<p>, or missing <tbody>. Bailing hydration and performing ' + 'full client-side render.'); 27976 } 27977 } // either not server-rendered, or hydration failed. 27978 // create an empty node and replace it 27979 27980 27981 oldVnode = emptyNodeAt(oldVnode); 27982 } // replacing existing element 27983 27984 27985 var oldElm = oldVnode.elm; 27986 var parentElm = nodeOps.parentNode(oldElm); // create new node 27987 27988 createElm(vnode, insertedVnodeQueue, // extremely rare edge case: do not insert if old element is in a 27989 // leaving transition. Only happens when combining transition + 27990 // keep-alive + HOCs. (#4590) 27991 oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm)); // update parent placeholder node element, recursively 27992 27993 if (isDef(vnode.parent)) { 27994 var ancestor = vnode.parent; 27995 var patchable = isPatchable(vnode); 27996 27997 while (ancestor) { 27998 for (var i = 0; i < cbs.destroy.length; ++i) { 27999 cbs.destroy[i](ancestor); 28000 } 28001 28002 ancestor.elm = vnode.elm; 28003 28004 if (patchable) { 28005 for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) { 28006 cbs.create[i$1](emptyNode, ancestor); 28007 } // #6513 28008 // invoke insert hooks that may have been merged by create hooks. 28009 // e.g. for directives that uses the "inserted" hook. 28010 28011 28012 var insert = ancestor.data.hook.insert; 28013 28014 if (insert.merged) { 28015 // start at index 1 to avoid re-invoking component mounted hook 28016 for (var i$2 = 1; i$2 < insert.fns.length; i$2++) { 28017 insert.fns[i$2](); 28018 } 28019 } 28020 } else { 28021 registerRef(ancestor); 28022 } 28023 28024 ancestor = ancestor.parent; 28025 } 28026 } // destroy old node 28027 28028 28029 if (isDef(parentElm)) { 28030 removeVnodes([oldVnode], 0, 0); 28031 } else if (isDef(oldVnode.tag)) { 28032 invokeDestroyHook(oldVnode); 28033 } 28034 } 28035 } 28036 28037 invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch); 28038 return vnode.elm; 28039 }; 28040} 28041/* */ 28042 28043 28044var directives = { 28045 create: updateDirectives, 28046 update: updateDirectives, 28047 destroy: function unbindDirectives(vnode) { 28048 updateDirectives(vnode, emptyNode); 28049 } 28050}; 28051 28052function updateDirectives(oldVnode, vnode) { 28053 if (oldVnode.data.directives || vnode.data.directives) { 28054 _update(oldVnode, vnode); 28055 } 28056} 28057 28058function _update(oldVnode, vnode) { 28059 var isCreate = oldVnode === emptyNode; 28060 var isDestroy = vnode === emptyNode; 28061 var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context); 28062 var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context); 28063 var dirsWithInsert = []; 28064 var dirsWithPostpatch = []; 28065 var key, oldDir, dir; 28066 28067 for (key in newDirs) { 28068 oldDir = oldDirs[key]; 28069 dir = newDirs[key]; 28070 28071 if (!oldDir) { 28072 // new directive, bind 28073 callHook$1(dir, 'bind', vnode, oldVnode); 28074 28075 if (dir.def && dir.def.inserted) { 28076 dirsWithInsert.push(dir); 28077 } 28078 } else { 28079 // existing directive, update 28080 dir.oldValue = oldDir.value; 28081 dir.oldArg = oldDir.arg; 28082 callHook$1(dir, 'update', vnode, oldVnode); 28083 28084 if (dir.def && dir.def.componentUpdated) { 28085 dirsWithPostpatch.push(dir); 28086 } 28087 } 28088 } 28089 28090 if (dirsWithInsert.length) { 28091 var callInsert = function () { 28092 for (var i = 0; i < dirsWithInsert.length; i++) { 28093 callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode); 28094 } 28095 }; 28096 28097 if (isCreate) { 28098 mergeVNodeHook(vnode, 'insert', callInsert); 28099 } else { 28100 callInsert(); 28101 } 28102 } 28103 28104 if (dirsWithPostpatch.length) { 28105 mergeVNodeHook(vnode, 'postpatch', function () { 28106 for (var i = 0; i < dirsWithPostpatch.length; i++) { 28107 callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode); 28108 } 28109 }); 28110 } 28111 28112 if (!isCreate) { 28113 for (key in oldDirs) { 28114 if (!newDirs[key]) { 28115 // no longer present, unbind 28116 callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy); 28117 } 28118 } 28119 } 28120} 28121 28122var emptyModifiers = Object.create(null); 28123 28124function normalizeDirectives$1(dirs, vm) { 28125 var res = Object.create(null); 28126 28127 if (!dirs) { 28128 // $flow-disable-line 28129 return res; 28130 } 28131 28132 var i, dir; 28133 28134 for (i = 0; i < dirs.length; i++) { 28135 dir = dirs[i]; 28136 28137 if (!dir.modifiers) { 28138 // $flow-disable-line 28139 dir.modifiers = emptyModifiers; 28140 } 28141 28142 res[getRawDirName(dir)] = dir; 28143 dir.def = resolveAsset(vm.$options, 'directives', dir.name, true); 28144 } // $flow-disable-line 28145 28146 28147 return res; 28148} 28149 28150function getRawDirName(dir) { 28151 return dir.rawName || dir.name + "." + Object.keys(dir.modifiers || {}).join('.'); 28152} 28153 28154function callHook$1(dir, hook, vnode, oldVnode, isDestroy) { 28155 var fn = dir.def && dir.def[hook]; 28156 28157 if (fn) { 28158 try { 28159 fn(vnode.elm, dir, vnode, oldVnode, isDestroy); 28160 } catch (e) { 28161 handleError(e, vnode.context, "directive " + dir.name + " " + hook + " hook"); 28162 } 28163 } 28164} 28165 28166var baseModules = [ref, directives]; 28167/* */ 28168 28169function updateAttrs(oldVnode, vnode) { 28170 var opts = vnode.componentOptions; 28171 28172 if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) { 28173 return; 28174 } 28175 28176 if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) { 28177 return; 28178 } 28179 28180 var key, cur, old; 28181 var elm = vnode.elm; 28182 var oldAttrs = oldVnode.data.attrs || {}; 28183 var attrs = vnode.data.attrs || {}; // clone observed objects, as the user probably wants to mutate it 28184 28185 if (isDef(attrs.__ob__)) { 28186 attrs = vnode.data.attrs = extend({}, attrs); 28187 } 28188 28189 for (key in attrs) { 28190 cur = attrs[key]; 28191 old = oldAttrs[key]; 28192 28193 if (old !== cur) { 28194 setAttr(elm, key, cur); 28195 } 28196 } // #4391: in IE9, setting type can reset value for input[type=radio] 28197 // #6666: IE/Edge forces progress value down to 1 before setting a max 28198 28199 /* istanbul ignore if */ 28200 28201 28202 if ((isIE || isEdge) && attrs.value !== oldAttrs.value) { 28203 setAttr(elm, 'value', attrs.value); 28204 } 28205 28206 for (key in oldAttrs) { 28207 if (isUndef(attrs[key])) { 28208 if (isXlink(key)) { 28209 elm.removeAttributeNS(xlinkNS, getXlinkProp(key)); 28210 } else if (!isEnumeratedAttr(key)) { 28211 elm.removeAttribute(key); 28212 } 28213 } 28214 } 28215} 28216 28217function setAttr(el, key, value) { 28218 if (el.tagName.indexOf('-') > -1) { 28219 baseSetAttr(el, key, value); 28220 } else if (isBooleanAttr(key)) { 28221 // set attribute for blank value 28222 // e.g. <option disabled>Select one</option> 28223 if (isFalsyAttrValue(value)) { 28224 el.removeAttribute(key); 28225 } else { 28226 // technically allowfullscreen is a boolean attribute for <iframe>, 28227 // but Flash expects a value of "true" when used on <embed> tag 28228 value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key; 28229 el.setAttribute(key, value); 28230 } 28231 } else if (isEnumeratedAttr(key)) { 28232 el.setAttribute(key, convertEnumeratedValue(key, value)); 28233 } else if (isXlink(key)) { 28234 if (isFalsyAttrValue(value)) { 28235 el.removeAttributeNS(xlinkNS, getXlinkProp(key)); 28236 } else { 28237 el.setAttributeNS(xlinkNS, key, value); 28238 } 28239 } else { 28240 baseSetAttr(el, key, value); 28241 } 28242} 28243 28244function baseSetAttr(el, key, value) { 28245 if (isFalsyAttrValue(value)) { 28246 el.removeAttribute(key); 28247 } else { 28248 // #7138: IE10 & 11 fires input event when setting placeholder on 28249 // <textarea>... block the first input event and remove the blocker 28250 // immediately. 28251 28252 /* istanbul ignore if */ 28253 if (isIE && !isIE9 && el.tagName === 'TEXTAREA' && key === 'placeholder' && value !== '' && !el.__ieph) { 28254 var blocker = function (e) { 28255 e.stopImmediatePropagation(); 28256 el.removeEventListener('input', blocker); 28257 }; 28258 28259 el.addEventListener('input', blocker); // $flow-disable-line 28260 28261 el.__ieph = true; 28262 /* IE placeholder patched */ 28263 } 28264 28265 el.setAttribute(key, value); 28266 } 28267} 28268 28269var attrs = { 28270 create: updateAttrs, 28271 update: updateAttrs 28272}; 28273/* */ 28274 28275function updateClass(oldVnode, vnode) { 28276 var el = vnode.elm; 28277 var data = vnode.data; 28278 var oldData = oldVnode.data; 28279 28280 if (isUndef(data.staticClass) && isUndef(data.class) && (isUndef(oldData) || isUndef(oldData.staticClass) && isUndef(oldData.class))) { 28281 return; 28282 } 28283 28284 var cls = genClassForVnode(vnode); // handle transition classes 28285 28286 var transitionClass = el._transitionClasses; 28287 28288 if (isDef(transitionClass)) { 28289 cls = concat(cls, stringifyClass(transitionClass)); 28290 } // set the class 28291 28292 28293 if (cls !== el._prevClass) { 28294 el.setAttribute('class', cls); 28295 el._prevClass = cls; 28296 } 28297} 28298 28299var klass = { 28300 create: updateClass, 28301 update: updateClass 28302}; 28303/* */ 28304 28305var validDivisionCharRE = /[\w).+\-_$\]]/; 28306 28307function parseFilters(exp) { 28308 var inSingle = false; 28309 var inDouble = false; 28310 var inTemplateString = false; 28311 var inRegex = false; 28312 var curly = 0; 28313 var square = 0; 28314 var paren = 0; 28315 var lastFilterIndex = 0; 28316 var c, prev, i, expression, filters; 28317 28318 for (i = 0; i < exp.length; i++) { 28319 prev = c; 28320 c = exp.charCodeAt(i); 28321 28322 if (inSingle) { 28323 if (c === 0x27 && prev !== 0x5C) { 28324 inSingle = false; 28325 } 28326 } else if (inDouble) { 28327 if (c === 0x22 && prev !== 0x5C) { 28328 inDouble = false; 28329 } 28330 } else if (inTemplateString) { 28331 if (c === 0x60 && prev !== 0x5C) { 28332 inTemplateString = false; 28333 } 28334 } else if (inRegex) { 28335 if (c === 0x2f && prev !== 0x5C) { 28336 inRegex = false; 28337 } 28338 } else if (c === 0x7C && // pipe 28339 exp.charCodeAt(i + 1) !== 0x7C && exp.charCodeAt(i - 1) !== 0x7C && !curly && !square && !paren) { 28340 if (expression === undefined) { 28341 // first filter, end of expression 28342 lastFilterIndex = i + 1; 28343 expression = exp.slice(0, i).trim(); 28344 } else { 28345 pushFilter(); 28346 } 28347 } else { 28348 switch (c) { 28349 case 0x22: 28350 inDouble = true; 28351 break; 28352 // " 28353 28354 case 0x27: 28355 inSingle = true; 28356 break; 28357 // ' 28358 28359 case 0x60: 28360 inTemplateString = true; 28361 break; 28362 // ` 28363 28364 case 0x28: 28365 paren++; 28366 break; 28367 // ( 28368 28369 case 0x29: 28370 paren--; 28371 break; 28372 // ) 28373 28374 case 0x5B: 28375 square++; 28376 break; 28377 // [ 28378 28379 case 0x5D: 28380 square--; 28381 break; 28382 // ] 28383 28384 case 0x7B: 28385 curly++; 28386 break; 28387 // { 28388 28389 case 0x7D: 28390 curly--; 28391 break; 28392 // } 28393 } 28394 28395 if (c === 0x2f) { 28396 // / 28397 var j = i - 1; 28398 var p = void 0; // find first non-whitespace prev char 28399 28400 for (; j >= 0; j--) { 28401 p = exp.charAt(j); 28402 28403 if (p !== ' ') { 28404 break; 28405 } 28406 } 28407 28408 if (!p || !validDivisionCharRE.test(p)) { 28409 inRegex = true; 28410 } 28411 } 28412 } 28413 } 28414 28415 if (expression === undefined) { 28416 expression = exp.slice(0, i).trim(); 28417 } else if (lastFilterIndex !== 0) { 28418 pushFilter(); 28419 } 28420 28421 function pushFilter() { 28422 (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim()); 28423 lastFilterIndex = i + 1; 28424 } 28425 28426 if (filters) { 28427 for (i = 0; i < filters.length; i++) { 28428 expression = wrapFilter(expression, filters[i]); 28429 } 28430 } 28431 28432 return expression; 28433} 28434 28435function wrapFilter(exp, filter) { 28436 var i = filter.indexOf('('); 28437 28438 if (i < 0) { 28439 // _f: resolveFilter 28440 return "_f(\"" + filter + "\")(" + exp + ")"; 28441 } else { 28442 var name = filter.slice(0, i); 28443 var args = filter.slice(i + 1); 28444 return "_f(\"" + name + "\")(" + exp + (args !== ')' ? ',' + args : args); 28445 } 28446} 28447/* */ 28448 28449/* eslint-disable no-unused-vars */ 28450 28451 28452function baseWarn(msg, range) { 28453 console.error("[Vue compiler]: " + msg); 28454} 28455/* eslint-enable no-unused-vars */ 28456 28457 28458function pluckModuleFunction(modules, key) { 28459 return modules ? modules.map(function (m) { 28460 return m[key]; 28461 }).filter(function (_) { 28462 return _; 28463 }) : []; 28464} 28465 28466function addProp(el, name, value, range, dynamic) { 28467 (el.props || (el.props = [])).push(rangeSetItem({ 28468 name: name, 28469 value: value, 28470 dynamic: dynamic 28471 }, range)); 28472 el.plain = false; 28473} 28474 28475function addAttr(el, name, value, range, dynamic) { 28476 var attrs = dynamic ? el.dynamicAttrs || (el.dynamicAttrs = []) : el.attrs || (el.attrs = []); 28477 attrs.push(rangeSetItem({ 28478 name: name, 28479 value: value, 28480 dynamic: dynamic 28481 }, range)); 28482 el.plain = false; 28483} // add a raw attr (use this in preTransforms) 28484 28485 28486function addRawAttr(el, name, value, range) { 28487 el.attrsMap[name] = value; 28488 el.attrsList.push(rangeSetItem({ 28489 name: name, 28490 value: value 28491 }, range)); 28492} 28493 28494function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) { 28495 (el.directives || (el.directives = [])).push(rangeSetItem({ 28496 name: name, 28497 rawName: rawName, 28498 value: value, 28499 arg: arg, 28500 isDynamicArg: isDynamicArg, 28501 modifiers: modifiers 28502 }, range)); 28503 el.plain = false; 28504} 28505 28506function prependModifierMarker(symbol, name, dynamic) { 28507 return dynamic ? "_p(" + name + ",\"" + symbol + "\")" : symbol + name; // mark the event as captured 28508} 28509 28510function addHandler(el, name, value, modifiers, important, warn, range, dynamic) { 28511 modifiers = modifiers || emptyObject; // warn prevent and passive modifier 28512 28513 /* istanbul ignore if */ 28514 28515 if ( true && warn && modifiers.prevent && modifiers.passive) { 28516 warn('passive and prevent can\'t be used together. ' + 'Passive handler can\'t prevent default event.', range); 28517 } // normalize click.right and click.middle since they don't actually fire 28518 // this is technically browser-specific, but at least for now browsers are 28519 // the only target envs that have right/middle clicks. 28520 28521 28522 if (modifiers.right) { 28523 if (dynamic) { 28524 name = "(" + name + ")==='click'?'contextmenu':(" + name + ")"; 28525 } else if (name === 'click') { 28526 name = 'contextmenu'; 28527 delete modifiers.right; 28528 } 28529 } else if (modifiers.middle) { 28530 if (dynamic) { 28531 name = "(" + name + ")==='click'?'mouseup':(" + name + ")"; 28532 } else if (name === 'click') { 28533 name = 'mouseup'; 28534 } 28535 } // check capture modifier 28536 28537 28538 if (modifiers.capture) { 28539 delete modifiers.capture; 28540 name = prependModifierMarker('!', name, dynamic); 28541 } 28542 28543 if (modifiers.once) { 28544 delete modifiers.once; 28545 name = prependModifierMarker('~', name, dynamic); 28546 } 28547 /* istanbul ignore if */ 28548 28549 28550 if (modifiers.passive) { 28551 delete modifiers.passive; 28552 name = prependModifierMarker('&', name, dynamic); 28553 } 28554 28555 var events; 28556 28557 if (modifiers.native) { 28558 delete modifiers.native; 28559 events = el.nativeEvents || (el.nativeEvents = {}); 28560 } else { 28561 events = el.events || (el.events = {}); 28562 } 28563 28564 var newHandler = rangeSetItem({ 28565 value: value.trim(), 28566 dynamic: dynamic 28567 }, range); 28568 28569 if (modifiers !== emptyObject) { 28570 newHandler.modifiers = modifiers; 28571 } 28572 28573 var handlers = events[name]; 28574 /* istanbul ignore if */ 28575 28576 if (Array.isArray(handlers)) { 28577 important ? handlers.unshift(newHandler) : handlers.push(newHandler); 28578 } else if (handlers) { 28579 events[name] = important ? [newHandler, handlers] : [handlers, newHandler]; 28580 } else { 28581 events[name] = newHandler; 28582 } 28583 28584 el.plain = false; 28585} 28586 28587function getRawBindingAttr(el, name) { 28588 return el.rawAttrsMap[':' + name] || el.rawAttrsMap['v-bind:' + name] || el.rawAttrsMap[name]; 28589} 28590 28591function getBindingAttr(el, name, getStatic) { 28592 var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name); 28593 28594 if (dynamicValue != null) { 28595 return parseFilters(dynamicValue); 28596 } else if (getStatic !== false) { 28597 var staticValue = getAndRemoveAttr(el, name); 28598 28599 if (staticValue != null) { 28600 return JSON.stringify(staticValue); 28601 } 28602 } 28603} // note: this only removes the attr from the Array (attrsList) so that it 28604// doesn't get processed by processAttrs. 28605// By default it does NOT remove it from the map (attrsMap) because the map is 28606// needed during codegen. 28607 28608 28609function getAndRemoveAttr(el, name, removeFromMap) { 28610 var val; 28611 28612 if ((val = el.attrsMap[name]) != null) { 28613 var list = el.attrsList; 28614 28615 for (var i = 0, l = list.length; i < l; i++) { 28616 if (list[i].name === name) { 28617 list.splice(i, 1); 28618 break; 28619 } 28620 } 28621 } 28622 28623 if (removeFromMap) { 28624 delete el.attrsMap[name]; 28625 } 28626 28627 return val; 28628} 28629 28630function getAndRemoveAttrByRegex(el, name) { 28631 var list = el.attrsList; 28632 28633 for (var i = 0, l = list.length; i < l; i++) { 28634 var attr = list[i]; 28635 28636 if (name.test(attr.name)) { 28637 list.splice(i, 1); 28638 return attr; 28639 } 28640 } 28641} 28642 28643function rangeSetItem(item, range) { 28644 if (range) { 28645 if (range.start != null) { 28646 item.start = range.start; 28647 } 28648 28649 if (range.end != null) { 28650 item.end = range.end; 28651 } 28652 } 28653 28654 return item; 28655} 28656/* */ 28657 28658/** 28659 * Cross-platform code generation for component v-model 28660 */ 28661 28662 28663function genComponentModel(el, value, modifiers) { 28664 var ref = modifiers || {}; 28665 var number = ref.number; 28666 var trim = ref.trim; 28667 var baseValueExpression = '$$v'; 28668 var valueExpression = baseValueExpression; 28669 28670 if (trim) { 28671 valueExpression = "(typeof " + baseValueExpression + " === 'string'" + "? " + baseValueExpression + ".trim()" + ": " + baseValueExpression + ")"; 28672 } 28673 28674 if (number) { 28675 valueExpression = "_n(" + valueExpression + ")"; 28676 } 28677 28678 var assignment = genAssignmentCode(value, valueExpression); 28679 el.model = { 28680 value: "(" + value + ")", 28681 expression: JSON.stringify(value), 28682 callback: "function (" + baseValueExpression + ") {" + assignment + "}" 28683 }; 28684} 28685/** 28686 * Cross-platform codegen helper for generating v-model value assignment code. 28687 */ 28688 28689 28690function genAssignmentCode(value, assignment) { 28691 var res = parseModel(value); 28692 28693 if (res.key === null) { 28694 return value + "=" + assignment; 28695 } else { 28696 return "$set(" + res.exp + ", " + res.key + ", " + assignment + ")"; 28697 } 28698} 28699/** 28700 * Parse a v-model expression into a base path and a final key segment. 28701 * Handles both dot-path and possible square brackets. 28702 * 28703 * Possible cases: 28704 * 28705 * - test 28706 * - test[key] 28707 * - test[test1[key]] 28708 * - test["a"][key] 28709 * - xxx.test[a[a].test1[key]] 28710 * - test.xxx.a["asa"][test1[key]] 28711 * 28712 */ 28713 28714 28715var len, str, chr, index$1, expressionPos, expressionEndPos; 28716 28717function parseModel(val) { 28718 // Fix https://github.com/vuejs/vue/pull/7730 28719 // allow v-model="obj.val " (trailing whitespace) 28720 val = val.trim(); 28721 len = val.length; 28722 28723 if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) { 28724 index$1 = val.lastIndexOf('.'); 28725 28726 if (index$1 > -1) { 28727 return { 28728 exp: val.slice(0, index$1), 28729 key: '"' + val.slice(index$1 + 1) + '"' 28730 }; 28731 } else { 28732 return { 28733 exp: val, 28734 key: null 28735 }; 28736 } 28737 } 28738 28739 str = val; 28740 index$1 = expressionPos = expressionEndPos = 0; 28741 28742 while (!eof()) { 28743 chr = next(); 28744 /* istanbul ignore if */ 28745 28746 if (isStringStart(chr)) { 28747 parseString(chr); 28748 } else if (chr === 0x5B) { 28749 parseBracket(chr); 28750 } 28751 } 28752 28753 return { 28754 exp: val.slice(0, expressionPos), 28755 key: val.slice(expressionPos + 1, expressionEndPos) 28756 }; 28757} 28758 28759function next() { 28760 return str.charCodeAt(++index$1); 28761} 28762 28763function eof() { 28764 return index$1 >= len; 28765} 28766 28767function isStringStart(chr) { 28768 return chr === 0x22 || chr === 0x27; 28769} 28770 28771function parseBracket(chr) { 28772 var inBracket = 1; 28773 expressionPos = index$1; 28774 28775 while (!eof()) { 28776 chr = next(); 28777 28778 if (isStringStart(chr)) { 28779 parseString(chr); 28780 continue; 28781 } 28782 28783 if (chr === 0x5B) { 28784 inBracket++; 28785 } 28786 28787 if (chr === 0x5D) { 28788 inBracket--; 28789 } 28790 28791 if (inBracket === 0) { 28792 expressionEndPos = index$1; 28793 break; 28794 } 28795 } 28796} 28797 28798function parseString(chr) { 28799 var stringQuote = chr; 28800 28801 while (!eof()) { 28802 chr = next(); 28803 28804 if (chr === stringQuote) { 28805 break; 28806 } 28807 } 28808} 28809/* */ 28810 28811 28812var warn$1; // in some cases, the event used has to be determined at runtime 28813// so we used some reserved tokens during compile. 28814 28815var RANGE_TOKEN = '__r'; 28816var CHECKBOX_RADIO_TOKEN = '__c'; 28817 28818function model(el, dir, _warn) { 28819 warn$1 = _warn; 28820 var value = dir.value; 28821 var modifiers = dir.modifiers; 28822 var tag = el.tag; 28823 var type = el.attrsMap.type; 28824 28825 if (true) { 28826 // inputs with type="file" are read only and setting the input's 28827 // value will throw an error. 28828 if (tag === 'input' && type === 'file') { 28829 warn$1("<" + el.tag + " v-model=\"" + value + "\" type=\"file\">:\n" + "File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']); 28830 } 28831 } 28832 28833 if (el.component) { 28834 genComponentModel(el, value, modifiers); // component v-model doesn't need extra runtime 28835 28836 return false; 28837 } else if (tag === 'select') { 28838 genSelect(el, value, modifiers); 28839 } else if (tag === 'input' && type === 'checkbox') { 28840 genCheckboxModel(el, value, modifiers); 28841 } else if (tag === 'input' && type === 'radio') { 28842 genRadioModel(el, value, modifiers); 28843 } else if (tag === 'input' || tag === 'textarea') { 28844 genDefaultModel(el, value, modifiers); 28845 } else if (!config.isReservedTag(tag)) { 28846 genComponentModel(el, value, modifiers); // component v-model doesn't need extra runtime 28847 28848 return false; 28849 } else if (true) { 28850 warn$1("<" + el.tag + " v-model=\"" + value + "\">: " + "v-model is not supported on this element type. " + 'If you are working with contenteditable, it\'s recommended to ' + 'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']); 28851 } // ensure runtime directive metadata 28852 28853 28854 return true; 28855} 28856 28857function genCheckboxModel(el, value, modifiers) { 28858 var number = modifiers && modifiers.number; 28859 var valueBinding = getBindingAttr(el, 'value') || 'null'; 28860 var trueValueBinding = getBindingAttr(el, 'true-value') || 'true'; 28861 var falseValueBinding = getBindingAttr(el, 'false-value') || 'false'; 28862 addProp(el, 'checked', "Array.isArray(" + value + ")" + "?_i(" + value + "," + valueBinding + ")>-1" + (trueValueBinding === 'true' ? ":(" + value + ")" : ":_q(" + value + "," + trueValueBinding + ")")); 28863 addHandler(el, 'change', "var $$a=" + value + "," + '$$el=$event.target,' + "$$c=$$el.checked?(" + trueValueBinding + "):(" + falseValueBinding + ");" + 'if(Array.isArray($$a)){' + "var $$v=" + (number ? '_n(' + valueBinding + ')' : valueBinding) + "," + '$$i=_i($$a,$$v);' + "if($$el.checked){$$i<0&&(" + genAssignmentCode(value, '$$a.concat([$$v])') + ")}" + "else{$$i>-1&&(" + genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))') + ")}" + "}else{" + genAssignmentCode(value, '$$c') + "}", null, true); 28864} 28865 28866function genRadioModel(el, value, modifiers) { 28867 var number = modifiers && modifiers.number; 28868 var valueBinding = getBindingAttr(el, 'value') || 'null'; 28869 valueBinding = number ? "_n(" + valueBinding + ")" : valueBinding; 28870 addProp(el, 'checked', "_q(" + value + "," + valueBinding + ")"); 28871 addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true); 28872} 28873 28874function genSelect(el, value, modifiers) { 28875 var number = modifiers && modifiers.number; 28876 var selectedVal = "Array.prototype.filter" + ".call($event.target.options,function(o){return o.selected})" + ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" + "return " + (number ? '_n(val)' : 'val') + "})"; 28877 var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]'; 28878 var code = "var $$selectedVal = " + selectedVal + ";"; 28879 code = code + " " + genAssignmentCode(value, assignment); 28880 addHandler(el, 'change', code, null, true); 28881} 28882 28883function genDefaultModel(el, value, modifiers) { 28884 var type = el.attrsMap.type; // warn if v-bind:value conflicts with v-model 28885 // except for inputs with v-bind:type 28886 28887 if (true) { 28888 var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value']; 28889 var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type']; 28890 28891 if (value$1 && !typeBinding) { 28892 var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value'; 28893 warn$1(binding + "=\"" + value$1 + "\" conflicts with v-model on the same element " + 'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]); 28894 } 28895 } 28896 28897 var ref = modifiers || {}; 28898 var lazy = ref.lazy; 28899 var number = ref.number; 28900 var trim = ref.trim; 28901 var needCompositionGuard = !lazy && type !== 'range'; 28902 var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input'; 28903 var valueExpression = '$event.target.value'; 28904 28905 if (trim) { 28906 valueExpression = "$event.target.value.trim()"; 28907 } 28908 28909 if (number) { 28910 valueExpression = "_n(" + valueExpression + ")"; 28911 } 28912 28913 var code = genAssignmentCode(value, valueExpression); 28914 28915 if (needCompositionGuard) { 28916 code = "if($event.target.composing)return;" + code; 28917 } 28918 28919 addProp(el, 'value', "(" + value + ")"); 28920 addHandler(el, event, code, null, true); 28921 28922 if (trim || number) { 28923 addHandler(el, 'blur', '$forceUpdate()'); 28924 } 28925} 28926/* */ 28927// normalize v-model event tokens that can only be determined at runtime. 28928// it's important to place the event as the first in the array because 28929// the whole point is ensuring the v-model callback gets called before 28930// user-attached handlers. 28931 28932 28933function normalizeEvents(on) { 28934 /* istanbul ignore if */ 28935 if (isDef(on[RANGE_TOKEN])) { 28936 // IE input[type=range] only supports `change` event 28937 var event = isIE ? 'change' : 'input'; 28938 on[event] = [].concat(on[RANGE_TOKEN], on[event] || []); 28939 delete on[RANGE_TOKEN]; 28940 } // This was originally intended to fix #4521 but no longer necessary 28941 // after 2.5. Keeping it for backwards compat with generated code from < 2.4 28942 28943 /* istanbul ignore if */ 28944 28945 28946 if (isDef(on[CHECKBOX_RADIO_TOKEN])) { 28947 on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []); 28948 delete on[CHECKBOX_RADIO_TOKEN]; 28949 } 28950} 28951 28952var target$1; 28953 28954function createOnceHandler$1(event, handler, capture) { 28955 var _target = target$1; // save current target element in closure 28956 28957 return function onceHandler() { 28958 var res = handler.apply(null, arguments); 28959 28960 if (res !== null) { 28961 remove$2(event, onceHandler, capture, _target); 28962 } 28963 }; 28964} // #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp 28965// implementation and does not fire microtasks in between event propagation, so 28966// safe to exclude. 28967 28968 28969var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53); 28970 28971function add$1(name, handler, capture, passive) { 28972 // async edge case #6566: inner click event triggers patch, event handler 28973 // attached to outer element during patch, and triggered again. This 28974 // happens because browsers fire microtask ticks between event propagation. 28975 // the solution is simple: we save the timestamp when a handler is attached, 28976 // and the handler would only fire if the event passed to it was fired 28977 // AFTER it was attached. 28978 if (useMicrotaskFix) { 28979 var attachedTimestamp = currentFlushTimestamp; 28980 var original = handler; 28981 28982 handler = original._wrapper = function (e) { 28983 if ( // no bubbling, should always fire. 28984 // this is just a safety net in case event.timeStamp is unreliable in 28985 // certain weird environments... 28986 e.target === e.currentTarget || // event is fired after handler attachment 28987 e.timeStamp >= attachedTimestamp || // bail for environments that have buggy event.timeStamp implementations 28988 // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState 28989 // #9681 QtWebEngine event.timeStamp is negative value 28990 e.timeStamp <= 0 || // #9448 bail if event is fired in another document in a multi-page 28991 // electron/nw.js app, since event.timeStamp will be using a different 28992 // starting reference 28993 e.target.ownerDocument !== document) { 28994 return original.apply(this, arguments); 28995 } 28996 }; 28997 } 28998 28999 target$1.addEventListener(name, handler, supportsPassive ? { 29000 capture: capture, 29001 passive: passive 29002 } : capture); 29003} 29004 29005function remove$2(name, handler, capture, _target) { 29006 (_target || target$1).removeEventListener(name, handler._wrapper || handler, capture); 29007} 29008 29009function updateDOMListeners(oldVnode, vnode) { 29010 if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) { 29011 return; 29012 } 29013 29014 var on = vnode.data.on || {}; 29015 var oldOn = oldVnode.data.on || {}; 29016 target$1 = vnode.elm; 29017 normalizeEvents(on); 29018 updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context); 29019 target$1 = undefined; 29020} 29021 29022var events = { 29023 create: updateDOMListeners, 29024 update: updateDOMListeners 29025}; 29026/* */ 29027 29028var svgContainer; 29029 29030function updateDOMProps(oldVnode, vnode) { 29031 if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) { 29032 return; 29033 } 29034 29035 var key, cur; 29036 var elm = vnode.elm; 29037 var oldProps = oldVnode.data.domProps || {}; 29038 var props = vnode.data.domProps || {}; // clone observed objects, as the user probably wants to mutate it 29039 29040 if (isDef(props.__ob__)) { 29041 props = vnode.data.domProps = extend({}, props); 29042 } 29043 29044 for (key in oldProps) { 29045 if (!(key in props)) { 29046 elm[key] = ''; 29047 } 29048 } 29049 29050 for (key in props) { 29051 cur = props[key]; // ignore children if the node has textContent or innerHTML, 29052 // as these will throw away existing DOM nodes and cause removal errors 29053 // on subsequent patches (#3360) 29054 29055 if (key === 'textContent' || key === 'innerHTML') { 29056 if (vnode.children) { 29057 vnode.children.length = 0; 29058 } 29059 29060 if (cur === oldProps[key]) { 29061 continue; 29062 } // #6601 work around Chrome version <= 55 bug where single textNode 29063 // replaced by innerHTML/textContent retains its parentNode property 29064 29065 29066 if (elm.childNodes.length === 1) { 29067 elm.removeChild(elm.childNodes[0]); 29068 } 29069 } 29070 29071 if (key === 'value' && elm.tagName !== 'PROGRESS') { 29072 // store value as _value as well since 29073 // non-string values will be stringified 29074 elm._value = cur; // avoid resetting cursor position when value is the same 29075 29076 var strCur = isUndef(cur) ? '' : String(cur); 29077 29078 if (shouldUpdateValue(elm, strCur)) { 29079 elm.value = strCur; 29080 } 29081 } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) { 29082 // IE doesn't support innerHTML for SVG elements 29083 svgContainer = svgContainer || document.createElement('div'); 29084 svgContainer.innerHTML = "<svg>" + cur + "</svg>"; 29085 var svg = svgContainer.firstChild; 29086 29087 while (elm.firstChild) { 29088 elm.removeChild(elm.firstChild); 29089 } 29090 29091 while (svg.firstChild) { 29092 elm.appendChild(svg.firstChild); 29093 } 29094 } else if ( // skip the update if old and new VDOM state is the same. 29095 // `value` is handled separately because the DOM value may be temporarily 29096 // out of sync with VDOM state due to focus, composition and modifiers. 29097 // This #4521 by skipping the unnecesarry `checked` update. 29098 cur !== oldProps[key]) { 29099 // some property updates can throw 29100 // e.g. `value` on <progress> w/ non-finite value 29101 try { 29102 elm[key] = cur; 29103 } catch (e) {} 29104 } 29105 } 29106} // check platforms/web/util/attrs.js acceptValue 29107 29108 29109function shouldUpdateValue(elm, checkVal) { 29110 return !elm.composing && (elm.tagName === 'OPTION' || isNotInFocusAndDirty(elm, checkVal) || isDirtyWithModifiers(elm, checkVal)); 29111} 29112 29113function isNotInFocusAndDirty(elm, checkVal) { 29114 // return true when textbox (.number and .trim) loses focus and its value is 29115 // not equal to the updated value 29116 var notInFocus = true; // #6157 29117 // work around IE bug when accessing document.activeElement in an iframe 29118 29119 try { 29120 notInFocus = document.activeElement !== elm; 29121 } catch (e) {} 29122 29123 return notInFocus && elm.value !== checkVal; 29124} 29125 29126function isDirtyWithModifiers(elm, newVal) { 29127 var value = elm.value; 29128 var modifiers = elm._vModifiers; // injected by v-model runtime 29129 29130 if (isDef(modifiers)) { 29131 if (modifiers.number) { 29132 return toNumber(value) !== toNumber(newVal); 29133 } 29134 29135 if (modifiers.trim) { 29136 return value.trim() !== newVal.trim(); 29137 } 29138 } 29139 29140 return value !== newVal; 29141} 29142 29143var domProps = { 29144 create: updateDOMProps, 29145 update: updateDOMProps 29146}; 29147/* */ 29148 29149var parseStyleText = cached(function (cssText) { 29150 var res = {}; 29151 var listDelimiter = /;(?![^(]*\))/g; 29152 var propertyDelimiter = /:(.+)/; 29153 cssText.split(listDelimiter).forEach(function (item) { 29154 if (item) { 29155 var tmp = item.split(propertyDelimiter); 29156 tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); 29157 } 29158 }); 29159 return res; 29160}); // merge static and dynamic style data on the same vnode 29161 29162function normalizeStyleData(data) { 29163 var style = normalizeStyleBinding(data.style); // static style is pre-processed into an object during compilation 29164 // and is always a fresh object, so it's safe to merge into it 29165 29166 return data.staticStyle ? extend(data.staticStyle, style) : style; 29167} // normalize possible array / string values into Object 29168 29169 29170function normalizeStyleBinding(bindingStyle) { 29171 if (Array.isArray(bindingStyle)) { 29172 return toObject(bindingStyle); 29173 } 29174 29175 if (typeof bindingStyle === 'string') { 29176 return parseStyleText(bindingStyle); 29177 } 29178 29179 return bindingStyle; 29180} 29181/** 29182 * parent component style should be after child's 29183 * so that parent component's style could override it 29184 */ 29185 29186 29187function getStyle(vnode, checkChild) { 29188 var res = {}; 29189 var styleData; 29190 29191 if (checkChild) { 29192 var childNode = vnode; 29193 29194 while (childNode.componentInstance) { 29195 childNode = childNode.componentInstance._vnode; 29196 29197 if (childNode && childNode.data && (styleData = normalizeStyleData(childNode.data))) { 29198 extend(res, styleData); 29199 } 29200 } 29201 } 29202 29203 if (styleData = normalizeStyleData(vnode.data)) { 29204 extend(res, styleData); 29205 } 29206 29207 var parentNode = vnode; 29208 29209 while (parentNode = parentNode.parent) { 29210 if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) { 29211 extend(res, styleData); 29212 } 29213 } 29214 29215 return res; 29216} 29217/* */ 29218 29219 29220var cssVarRE = /^--/; 29221var importantRE = /\s*!important$/; 29222 29223var setProp = function (el, name, val) { 29224 /* istanbul ignore if */ 29225 if (cssVarRE.test(name)) { 29226 el.style.setProperty(name, val); 29227 } else if (importantRE.test(val)) { 29228 el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important'); 29229 } else { 29230 var normalizedName = normalize(name); 29231 29232 if (Array.isArray(val)) { 29233 // Support values array created by autoprefixer, e.g. 29234 // {display: ["-webkit-box", "-ms-flexbox", "flex"]} 29235 // Set them one by one, and the browser will only set those it can recognize 29236 for (var i = 0, len = val.length; i < len; i++) { 29237 el.style[normalizedName] = val[i]; 29238 } 29239 } else { 29240 el.style[normalizedName] = val; 29241 } 29242 } 29243}; 29244 29245var vendorNames = ['Webkit', 'Moz', 'ms']; 29246var emptyStyle; 29247var normalize = cached(function (prop) { 29248 emptyStyle = emptyStyle || document.createElement('div').style; 29249 prop = camelize(prop); 29250 29251 if (prop !== 'filter' && prop in emptyStyle) { 29252 return prop; 29253 } 29254 29255 var capName = prop.charAt(0).toUpperCase() + prop.slice(1); 29256 29257 for (var i = 0; i < vendorNames.length; i++) { 29258 var name = vendorNames[i] + capName; 29259 29260 if (name in emptyStyle) { 29261 return name; 29262 } 29263 } 29264}); 29265 29266function updateStyle(oldVnode, vnode) { 29267 var data = vnode.data; 29268 var oldData = oldVnode.data; 29269 29270 if (isUndef(data.staticStyle) && isUndef(data.style) && isUndef(oldData.staticStyle) && isUndef(oldData.style)) { 29271 return; 29272 } 29273 29274 var cur, name; 29275 var el = vnode.elm; 29276 var oldStaticStyle = oldData.staticStyle; 29277 var oldStyleBinding = oldData.normalizedStyle || oldData.style || {}; // if static style exists, stylebinding already merged into it when doing normalizeStyleData 29278 29279 var oldStyle = oldStaticStyle || oldStyleBinding; 29280 var style = normalizeStyleBinding(vnode.data.style) || {}; // store normalized style under a different key for next diff 29281 // make sure to clone it if it's reactive, since the user likely wants 29282 // to mutate it. 29283 29284 vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style; 29285 var newStyle = getStyle(vnode, true); 29286 29287 for (name in oldStyle) { 29288 if (isUndef(newStyle[name])) { 29289 setProp(el, name, ''); 29290 } 29291 } 29292 29293 for (name in newStyle) { 29294 cur = newStyle[name]; 29295 29296 if (cur !== oldStyle[name]) { 29297 // ie9 setting to null has no effect, must use empty string 29298 setProp(el, name, cur == null ? '' : cur); 29299 } 29300 } 29301} 29302 29303var style = { 29304 create: updateStyle, 29305 update: updateStyle 29306}; 29307/* */ 29308 29309var whitespaceRE = /\s+/; 29310/** 29311 * Add class with compatibility for SVG since classList is not supported on 29312 * SVG elements in IE 29313 */ 29314 29315function addClass(el, cls) { 29316 /* istanbul ignore if */ 29317 if (!cls || !(cls = cls.trim())) { 29318 return; 29319 } 29320 /* istanbul ignore else */ 29321 29322 29323 if (el.classList) { 29324 if (cls.indexOf(' ') > -1) { 29325 cls.split(whitespaceRE).forEach(function (c) { 29326 return el.classList.add(c); 29327 }); 29328 } else { 29329 el.classList.add(cls); 29330 } 29331 } else { 29332 var cur = " " + (el.getAttribute('class') || '') + " "; 29333 29334 if (cur.indexOf(' ' + cls + ' ') < 0) { 29335 el.setAttribute('class', (cur + cls).trim()); 29336 } 29337 } 29338} 29339/** 29340 * Remove class with compatibility for SVG since classList is not supported on 29341 * SVG elements in IE 29342 */ 29343 29344 29345function removeClass(el, cls) { 29346 /* istanbul ignore if */ 29347 if (!cls || !(cls = cls.trim())) { 29348 return; 29349 } 29350 /* istanbul ignore else */ 29351 29352 29353 if (el.classList) { 29354 if (cls.indexOf(' ') > -1) { 29355 cls.split(whitespaceRE).forEach(function (c) { 29356 return el.classList.remove(c); 29357 }); 29358 } else { 29359 el.classList.remove(cls); 29360 } 29361 29362 if (!el.classList.length) { 29363 el.removeAttribute('class'); 29364 } 29365 } else { 29366 var cur = " " + (el.getAttribute('class') || '') + " "; 29367 var tar = ' ' + cls + ' '; 29368 29369 while (cur.indexOf(tar) >= 0) { 29370 cur = cur.replace(tar, ' '); 29371 } 29372 29373 cur = cur.trim(); 29374 29375 if (cur) { 29376 el.setAttribute('class', cur); 29377 } else { 29378 el.removeAttribute('class'); 29379 } 29380 } 29381} 29382/* */ 29383 29384 29385function resolveTransition(def$$1) { 29386 if (!def$$1) { 29387 return; 29388 } 29389 /* istanbul ignore else */ 29390 29391 29392 if (typeof def$$1 === 'object') { 29393 var res = {}; 29394 29395 if (def$$1.css !== false) { 29396 extend(res, autoCssTransition(def$$1.name || 'v')); 29397 } 29398 29399 extend(res, def$$1); 29400 return res; 29401 } else if (typeof def$$1 === 'string') { 29402 return autoCssTransition(def$$1); 29403 } 29404} 29405 29406var autoCssTransition = cached(function (name) { 29407 return { 29408 enterClass: name + "-enter", 29409 enterToClass: name + "-enter-to", 29410 enterActiveClass: name + "-enter-active", 29411 leaveClass: name + "-leave", 29412 leaveToClass: name + "-leave-to", 29413 leaveActiveClass: name + "-leave-active" 29414 }; 29415}); 29416var hasTransition = inBrowser && !isIE9; 29417var TRANSITION = 'transition'; 29418var ANIMATION = 'animation'; // Transition property/event sniffing 29419 29420var transitionProp = 'transition'; 29421var transitionEndEvent = 'transitionend'; 29422var animationProp = 'animation'; 29423var animationEndEvent = 'animationend'; 29424 29425if (hasTransition) { 29426 /* istanbul ignore if */ 29427 if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) { 29428 transitionProp = 'WebkitTransition'; 29429 transitionEndEvent = 'webkitTransitionEnd'; 29430 } 29431 29432 if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) { 29433 animationProp = 'WebkitAnimation'; 29434 animationEndEvent = 'webkitAnimationEnd'; 29435 } 29436} // binding to window is necessary to make hot reload work in IE in strict mode 29437 29438 29439var raf = inBrowser ? window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : setTimeout : 29440/* istanbul ignore next */ 29441function (fn) { 29442 return fn(); 29443}; 29444 29445function nextFrame(fn) { 29446 raf(function () { 29447 raf(fn); 29448 }); 29449} 29450 29451function addTransitionClass(el, cls) { 29452 var transitionClasses = el._transitionClasses || (el._transitionClasses = []); 29453 29454 if (transitionClasses.indexOf(cls) < 0) { 29455 transitionClasses.push(cls); 29456 addClass(el, cls); 29457 } 29458} 29459 29460function removeTransitionClass(el, cls) { 29461 if (el._transitionClasses) { 29462 remove(el._transitionClasses, cls); 29463 } 29464 29465 removeClass(el, cls); 29466} 29467 29468function whenTransitionEnds(el, expectedType, cb) { 29469 var ref = getTransitionInfo(el, expectedType); 29470 var type = ref.type; 29471 var timeout = ref.timeout; 29472 var propCount = ref.propCount; 29473 29474 if (!type) { 29475 return cb(); 29476 } 29477 29478 var event = type === TRANSITION ? transitionEndEvent : animationEndEvent; 29479 var ended = 0; 29480 29481 var end = function () { 29482 el.removeEventListener(event, onEnd); 29483 cb(); 29484 }; 29485 29486 var onEnd = function (e) { 29487 if (e.target === el) { 29488 if (++ended >= propCount) { 29489 end(); 29490 } 29491 } 29492 }; 29493 29494 setTimeout(function () { 29495 if (ended < propCount) { 29496 end(); 29497 } 29498 }, timeout + 1); 29499 el.addEventListener(event, onEnd); 29500} 29501 29502var transformRE = /\b(transform|all)(,|$)/; 29503 29504function getTransitionInfo(el, expectedType) { 29505 var styles = window.getComputedStyle(el); // JSDOM may return undefined for transition properties 29506 29507 var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', '); 29508 var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', '); 29509 var transitionTimeout = getTimeout(transitionDelays, transitionDurations); 29510 var animationDelays = (styles[animationProp + 'Delay'] || '').split(', '); 29511 var animationDurations = (styles[animationProp + 'Duration'] || '').split(', '); 29512 var animationTimeout = getTimeout(animationDelays, animationDurations); 29513 var type; 29514 var timeout = 0; 29515 var propCount = 0; 29516 /* istanbul ignore if */ 29517 29518 if (expectedType === TRANSITION) { 29519 if (transitionTimeout > 0) { 29520 type = TRANSITION; 29521 timeout = transitionTimeout; 29522 propCount = transitionDurations.length; 29523 } 29524 } else if (expectedType === ANIMATION) { 29525 if (animationTimeout > 0) { 29526 type = ANIMATION; 29527 timeout = animationTimeout; 29528 propCount = animationDurations.length; 29529 } 29530 } else { 29531 timeout = Math.max(transitionTimeout, animationTimeout); 29532 type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null; 29533 propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0; 29534 } 29535 29536 var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']); 29537 return { 29538 type: type, 29539 timeout: timeout, 29540 propCount: propCount, 29541 hasTransform: hasTransform 29542 }; 29543} 29544 29545function getTimeout(delays, durations) { 29546 /* istanbul ignore next */ 29547 while (delays.length < durations.length) { 29548 delays = delays.concat(delays); 29549 } 29550 29551 return Math.max.apply(null, durations.map(function (d, i) { 29552 return toMs(d) + toMs(delays[i]); 29553 })); 29554} // Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers 29555// in a locale-dependent way, using a comma instead of a dot. 29556// If comma is not replaced with a dot, the input will be rounded down (i.e. acting 29557// as a floor function) causing unexpected behaviors 29558 29559 29560function toMs(s) { 29561 return Number(s.slice(0, -1).replace(',', '.')) * 1000; 29562} 29563/* */ 29564 29565 29566function enter(vnode, toggleDisplay) { 29567 var el = vnode.elm; // call leave callback now 29568 29569 if (isDef(el._leaveCb)) { 29570 el._leaveCb.cancelled = true; 29571 29572 el._leaveCb(); 29573 } 29574 29575 var data = resolveTransition(vnode.data.transition); 29576 29577 if (isUndef(data)) { 29578 return; 29579 } 29580 /* istanbul ignore if */ 29581 29582 29583 if (isDef(el._enterCb) || el.nodeType !== 1) { 29584 return; 29585 } 29586 29587 var css = data.css; 29588 var type = data.type; 29589 var enterClass = data.enterClass; 29590 var enterToClass = data.enterToClass; 29591 var enterActiveClass = data.enterActiveClass; 29592 var appearClass = data.appearClass; 29593 var appearToClass = data.appearToClass; 29594 var appearActiveClass = data.appearActiveClass; 29595 var beforeEnter = data.beforeEnter; 29596 var enter = data.enter; 29597 var afterEnter = data.afterEnter; 29598 var enterCancelled = data.enterCancelled; 29599 var beforeAppear = data.beforeAppear; 29600 var appear = data.appear; 29601 var afterAppear = data.afterAppear; 29602 var appearCancelled = data.appearCancelled; 29603 var duration = data.duration; // activeInstance will always be the <transition> component managing this 29604 // transition. One edge case to check is when the <transition> is placed 29605 // as the root node of a child component. In that case we need to check 29606 // <transition>'s parent for appear check. 29607 29608 var context = activeInstance; 29609 var transitionNode = activeInstance.$vnode; 29610 29611 while (transitionNode && transitionNode.parent) { 29612 context = transitionNode.context; 29613 transitionNode = transitionNode.parent; 29614 } 29615 29616 var isAppear = !context._isMounted || !vnode.isRootInsert; 29617 29618 if (isAppear && !appear && appear !== '') { 29619 return; 29620 } 29621 29622 var startClass = isAppear && appearClass ? appearClass : enterClass; 29623 var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass; 29624 var toClass = isAppear && appearToClass ? appearToClass : enterToClass; 29625 var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter; 29626 var enterHook = isAppear ? typeof appear === 'function' ? appear : enter : enter; 29627 var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter; 29628 var enterCancelledHook = isAppear ? appearCancelled || enterCancelled : enterCancelled; 29629 var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration); 29630 29631 if ( true && explicitEnterDuration != null) { 29632 checkDuration(explicitEnterDuration, 'enter', vnode); 29633 } 29634 29635 var expectsCSS = css !== false && !isIE9; 29636 var userWantsControl = getHookArgumentsLength(enterHook); 29637 var cb = el._enterCb = once(function () { 29638 if (expectsCSS) { 29639 removeTransitionClass(el, toClass); 29640 removeTransitionClass(el, activeClass); 29641 } 29642 29643 if (cb.cancelled) { 29644 if (expectsCSS) { 29645 removeTransitionClass(el, startClass); 29646 } 29647 29648 enterCancelledHook && enterCancelledHook(el); 29649 } else { 29650 afterEnterHook && afterEnterHook(el); 29651 } 29652 29653 el._enterCb = null; 29654 }); 29655 29656 if (!vnode.data.show) { 29657 // remove pending leave element on enter by injecting an insert hook 29658 mergeVNodeHook(vnode, 'insert', function () { 29659 var parent = el.parentNode; 29660 var pendingNode = parent && parent._pending && parent._pending[vnode.key]; 29661 29662 if (pendingNode && pendingNode.tag === vnode.tag && pendingNode.elm._leaveCb) { 29663 pendingNode.elm._leaveCb(); 29664 } 29665 29666 enterHook && enterHook(el, cb); 29667 }); 29668 } // start enter transition 29669 29670 29671 beforeEnterHook && beforeEnterHook(el); 29672 29673 if (expectsCSS) { 29674 addTransitionClass(el, startClass); 29675 addTransitionClass(el, activeClass); 29676 nextFrame(function () { 29677 removeTransitionClass(el, startClass); 29678 29679 if (!cb.cancelled) { 29680 addTransitionClass(el, toClass); 29681 29682 if (!userWantsControl) { 29683 if (isValidDuration(explicitEnterDuration)) { 29684 setTimeout(cb, explicitEnterDuration); 29685 } else { 29686 whenTransitionEnds(el, type, cb); 29687 } 29688 } 29689 } 29690 }); 29691 } 29692 29693 if (vnode.data.show) { 29694 toggleDisplay && toggleDisplay(); 29695 enterHook && enterHook(el, cb); 29696 } 29697 29698 if (!expectsCSS && !userWantsControl) { 29699 cb(); 29700 } 29701} 29702 29703function leave(vnode, rm) { 29704 var el = vnode.elm; // call enter callback now 29705 29706 if (isDef(el._enterCb)) { 29707 el._enterCb.cancelled = true; 29708 29709 el._enterCb(); 29710 } 29711 29712 var data = resolveTransition(vnode.data.transition); 29713 29714 if (isUndef(data) || el.nodeType !== 1) { 29715 return rm(); 29716 } 29717 /* istanbul ignore if */ 29718 29719 29720 if (isDef(el._leaveCb)) { 29721 return; 29722 } 29723 29724 var css = data.css; 29725 var type = data.type; 29726 var leaveClass = data.leaveClass; 29727 var leaveToClass = data.leaveToClass; 29728 var leaveActiveClass = data.leaveActiveClass; 29729 var beforeLeave = data.beforeLeave; 29730 var leave = data.leave; 29731 var afterLeave = data.afterLeave; 29732 var leaveCancelled = data.leaveCancelled; 29733 var delayLeave = data.delayLeave; 29734 var duration = data.duration; 29735 var expectsCSS = css !== false && !isIE9; 29736 var userWantsControl = getHookArgumentsLength(leave); 29737 var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration); 29738 29739 if ( true && isDef(explicitLeaveDuration)) { 29740 checkDuration(explicitLeaveDuration, 'leave', vnode); 29741 } 29742 29743 var cb = el._leaveCb = once(function () { 29744 if (el.parentNode && el.parentNode._pending) { 29745 el.parentNode._pending[vnode.key] = null; 29746 } 29747 29748 if (expectsCSS) { 29749 removeTransitionClass(el, leaveToClass); 29750 removeTransitionClass(el, leaveActiveClass); 29751 } 29752 29753 if (cb.cancelled) { 29754 if (expectsCSS) { 29755 removeTransitionClass(el, leaveClass); 29756 } 29757 29758 leaveCancelled && leaveCancelled(el); 29759 } else { 29760 rm(); 29761 afterLeave && afterLeave(el); 29762 } 29763 29764 el._leaveCb = null; 29765 }); 29766 29767 if (delayLeave) { 29768 delayLeave(performLeave); 29769 } else { 29770 performLeave(); 29771 } 29772 29773 function performLeave() { 29774 // the delayed leave may have already been cancelled 29775 if (cb.cancelled) { 29776 return; 29777 } // record leaving element 29778 29779 29780 if (!vnode.data.show && el.parentNode) { 29781 (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] = vnode; 29782 } 29783 29784 beforeLeave && beforeLeave(el); 29785 29786 if (expectsCSS) { 29787 addTransitionClass(el, leaveClass); 29788 addTransitionClass(el, leaveActiveClass); 29789 nextFrame(function () { 29790 removeTransitionClass(el, leaveClass); 29791 29792 if (!cb.cancelled) { 29793 addTransitionClass(el, leaveToClass); 29794 29795 if (!userWantsControl) { 29796 if (isValidDuration(explicitLeaveDuration)) { 29797 setTimeout(cb, explicitLeaveDuration); 29798 } else { 29799 whenTransitionEnds(el, type, cb); 29800 } 29801 } 29802 } 29803 }); 29804 } 29805 29806 leave && leave(el, cb); 29807 29808 if (!expectsCSS && !userWantsControl) { 29809 cb(); 29810 } 29811 } 29812} // only used in dev mode 29813 29814 29815function checkDuration(val, name, vnode) { 29816 if (typeof val !== 'number') { 29817 warn("<transition> explicit " + name + " duration is not a valid number - " + "got " + JSON.stringify(val) + ".", vnode.context); 29818 } else if (isNaN(val)) { 29819 warn("<transition> explicit " + name + " duration is NaN - " + 'the duration expression might be incorrect.', vnode.context); 29820 } 29821} 29822 29823function isValidDuration(val) { 29824 return typeof val === 'number' && !isNaN(val); 29825} 29826/** 29827 * Normalize a transition hook's argument length. The hook may be: 29828 * - a merged hook (invoker) with the original in .fns 29829 * - a wrapped component method (check ._length) 29830 * - a plain function (.length) 29831 */ 29832 29833 29834function getHookArgumentsLength(fn) { 29835 if (isUndef(fn)) { 29836 return false; 29837 } 29838 29839 var invokerFns = fn.fns; 29840 29841 if (isDef(invokerFns)) { 29842 // invoker 29843 return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns); 29844 } else { 29845 return (fn._length || fn.length) > 1; 29846 } 29847} 29848 29849function _enter(_, vnode) { 29850 if (vnode.data.show !== true) { 29851 enter(vnode); 29852 } 29853} 29854 29855var transition = inBrowser ? { 29856 create: _enter, 29857 activate: _enter, 29858 remove: function remove$$1(vnode, rm) { 29859 /* istanbul ignore else */ 29860 if (vnode.data.show !== true) { 29861 leave(vnode, rm); 29862 } else { 29863 rm(); 29864 } 29865 } 29866} : {}; 29867var platformModules = [attrs, klass, events, domProps, style, transition]; 29868/* */ 29869// the directive module should be applied last, after all 29870// built-in modules have been applied. 29871 29872var modules = platformModules.concat(baseModules); 29873var patch = createPatchFunction({ 29874 nodeOps: nodeOps, 29875 modules: modules 29876}); 29877/** 29878 * Not type checking this file because flow doesn't like attaching 29879 * properties to Elements. 29880 */ 29881 29882/* istanbul ignore if */ 29883 29884if (isIE9) { 29885 // http://www.matts411.com/post/internet-explorer-9-oninput/ 29886 document.addEventListener('selectionchange', function () { 29887 var el = document.activeElement; 29888 29889 if (el && el.vmodel) { 29890 trigger(el, 'input'); 29891 } 29892 }); 29893} 29894 29895var directive = { 29896 inserted: function inserted(el, binding, vnode, oldVnode) { 29897 if (vnode.tag === 'select') { 29898 // #6903 29899 if (oldVnode.elm && !oldVnode.elm._vOptions) { 29900 mergeVNodeHook(vnode, 'postpatch', function () { 29901 directive.componentUpdated(el, binding, vnode); 29902 }); 29903 } else { 29904 setSelected(el, binding, vnode.context); 29905 } 29906 29907 el._vOptions = [].map.call(el.options, getValue); 29908 } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) { 29909 el._vModifiers = binding.modifiers; 29910 29911 if (!binding.modifiers.lazy) { 29912 el.addEventListener('compositionstart', onCompositionStart); 29913 el.addEventListener('compositionend', onCompositionEnd); // Safari < 10.2 & UIWebView doesn't fire compositionend when 29914 // switching focus before confirming composition choice 29915 // this also fixes the issue where some browsers e.g. iOS Chrome 29916 // fires "change" instead of "input" on autocomplete. 29917 29918 el.addEventListener('change', onCompositionEnd); 29919 /* istanbul ignore if */ 29920 29921 if (isIE9) { 29922 el.vmodel = true; 29923 } 29924 } 29925 } 29926 }, 29927 componentUpdated: function componentUpdated(el, binding, vnode) { 29928 if (vnode.tag === 'select') { 29929 setSelected(el, binding, vnode.context); // in case the options rendered by v-for have changed, 29930 // it's possible that the value is out-of-sync with the rendered options. 29931 // detect such cases and filter out values that no longer has a matching 29932 // option in the DOM. 29933 29934 var prevOptions = el._vOptions; 29935 var curOptions = el._vOptions = [].map.call(el.options, getValue); 29936 29937 if (curOptions.some(function (o, i) { 29938 return !looseEqual(o, prevOptions[i]); 29939 })) { 29940 // trigger change event if 29941 // no matching option found for at least one value 29942 var needReset = el.multiple ? binding.value.some(function (v) { 29943 return hasNoMatchingOption(v, curOptions); 29944 }) : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions); 29945 29946 if (needReset) { 29947 trigger(el, 'change'); 29948 } 29949 } 29950 } 29951 } 29952}; 29953 29954function setSelected(el, binding, vm) { 29955 actuallySetSelected(el, binding, vm); 29956 /* istanbul ignore if */ 29957 29958 if (isIE || isEdge) { 29959 setTimeout(function () { 29960 actuallySetSelected(el, binding, vm); 29961 }, 0); 29962 } 29963} 29964 29965function actuallySetSelected(el, binding, vm) { 29966 var value = binding.value; 29967 var isMultiple = el.multiple; 29968 29969 if (isMultiple && !Array.isArray(value)) { 29970 true && warn("<select multiple v-model=\"" + binding.expression + "\"> " + "expects an Array value for its binding, but got " + Object.prototype.toString.call(value).slice(8, -1), vm); 29971 return; 29972 } 29973 29974 var selected, option; 29975 29976 for (var i = 0, l = el.options.length; i < l; i++) { 29977 option = el.options[i]; 29978 29979 if (isMultiple) { 29980 selected = looseIndexOf(value, getValue(option)) > -1; 29981 29982 if (option.selected !== selected) { 29983 option.selected = selected; 29984 } 29985 } else { 29986 if (looseEqual(getValue(option), value)) { 29987 if (el.selectedIndex !== i) { 29988 el.selectedIndex = i; 29989 } 29990 29991 return; 29992 } 29993 } 29994 } 29995 29996 if (!isMultiple) { 29997 el.selectedIndex = -1; 29998 } 29999} 30000 30001function hasNoMatchingOption(value, options) { 30002 return options.every(function (o) { 30003 return !looseEqual(o, value); 30004 }); 30005} 30006 30007function getValue(option) { 30008 return '_value' in option ? option._value : option.value; 30009} 30010 30011function onCompositionStart(e) { 30012 e.target.composing = true; 30013} 30014 30015function onCompositionEnd(e) { 30016 // prevent triggering an input event for no reason 30017 if (!e.target.composing) { 30018 return; 30019 } 30020 30021 e.target.composing = false; 30022 trigger(e.target, 'input'); 30023} 30024 30025function trigger(el, type) { 30026 var e = document.createEvent('HTMLEvents'); 30027 e.initEvent(type, true, true); 30028 el.dispatchEvent(e); 30029} 30030/* */ 30031// recursively search for possible transition defined inside the component root 30032 30033 30034function locateNode(vnode) { 30035 return vnode.componentInstance && (!vnode.data || !vnode.data.transition) ? locateNode(vnode.componentInstance._vnode) : vnode; 30036} 30037 30038var show = { 30039 bind: function bind(el, ref, vnode) { 30040 var value = ref.value; 30041 vnode = locateNode(vnode); 30042 var transition$$1 = vnode.data && vnode.data.transition; 30043 var originalDisplay = el.__vOriginalDisplay = el.style.display === 'none' ? '' : el.style.display; 30044 30045 if (value && transition$$1) { 30046 vnode.data.show = true; 30047 enter(vnode, function () { 30048 el.style.display = originalDisplay; 30049 }); 30050 } else { 30051 el.style.display = value ? originalDisplay : 'none'; 30052 } 30053 }, 30054 update: function update(el, ref, vnode) { 30055 var value = ref.value; 30056 var oldValue = ref.oldValue; 30057 /* istanbul ignore if */ 30058 30059 if (!value === !oldValue) { 30060 return; 30061 } 30062 30063 vnode = locateNode(vnode); 30064 var transition$$1 = vnode.data && vnode.data.transition; 30065 30066 if (transition$$1) { 30067 vnode.data.show = true; 30068 30069 if (value) { 30070 enter(vnode, function () { 30071 el.style.display = el.__vOriginalDisplay; 30072 }); 30073 } else { 30074 leave(vnode, function () { 30075 el.style.display = 'none'; 30076 }); 30077 } 30078 } else { 30079 el.style.display = value ? el.__vOriginalDisplay : 'none'; 30080 } 30081 }, 30082 unbind: function unbind(el, binding, vnode, oldVnode, isDestroy) { 30083 if (!isDestroy) { 30084 el.style.display = el.__vOriginalDisplay; 30085 } 30086 } 30087}; 30088var platformDirectives = { 30089 model: directive, 30090 show: show 30091}; 30092/* */ 30093 30094var transitionProps = { 30095 name: String, 30096 appear: Boolean, 30097 css: Boolean, 30098 mode: String, 30099 type: String, 30100 enterClass: String, 30101 leaveClass: String, 30102 enterToClass: String, 30103 leaveToClass: String, 30104 enterActiveClass: String, 30105 leaveActiveClass: String, 30106 appearClass: String, 30107 appearActiveClass: String, 30108 appearToClass: String, 30109 duration: [Number, String, Object] 30110}; // in case the child is also an abstract component, e.g. <keep-alive> 30111// we want to recursively retrieve the real component to be rendered 30112 30113function getRealChild(vnode) { 30114 var compOptions = vnode && vnode.componentOptions; 30115 30116 if (compOptions && compOptions.Ctor.options.abstract) { 30117 return getRealChild(getFirstComponentChild(compOptions.children)); 30118 } else { 30119 return vnode; 30120 } 30121} 30122 30123function extractTransitionData(comp) { 30124 var data = {}; 30125 var options = comp.$options; // props 30126 30127 for (var key in options.propsData) { 30128 data[key] = comp[key]; 30129 } // events. 30130 // extract listeners and pass them directly to the transition methods 30131 30132 30133 var listeners = options._parentListeners; 30134 30135 for (var key$1 in listeners) { 30136 data[camelize(key$1)] = listeners[key$1]; 30137 } 30138 30139 return data; 30140} 30141 30142function placeholder(h, rawChild) { 30143 if (/\d-keep-alive$/.test(rawChild.tag)) { 30144 return h('keep-alive', { 30145 props: rawChild.componentOptions.propsData 30146 }); 30147 } 30148} 30149 30150function hasParentTransition(vnode) { 30151 while (vnode = vnode.parent) { 30152 if (vnode.data.transition) { 30153 return true; 30154 } 30155 } 30156} 30157 30158function isSameChild(child, oldChild) { 30159 return oldChild.key === child.key && oldChild.tag === child.tag; 30160} 30161 30162var isNotTextNode = function (c) { 30163 return c.tag || isAsyncPlaceholder(c); 30164}; 30165 30166var isVShowDirective = function (d) { 30167 return d.name === 'show'; 30168}; 30169 30170var Transition = { 30171 name: 'transition', 30172 props: transitionProps, 30173 abstract: true, 30174 render: function render(h) { 30175 var this$1 = this; 30176 var children = this.$slots.default; 30177 30178 if (!children) { 30179 return; 30180 } // filter out text nodes (possible whitespaces) 30181 30182 30183 children = children.filter(isNotTextNode); 30184 /* istanbul ignore if */ 30185 30186 if (!children.length) { 30187 return; 30188 } // warn multiple elements 30189 30190 30191 if ( true && children.length > 1) { 30192 warn('<transition> can only be used on a single element. Use ' + '<transition-group> for lists.', this.$parent); 30193 } 30194 30195 var mode = this.mode; // warn invalid mode 30196 30197 if ( true && mode && mode !== 'in-out' && mode !== 'out-in') { 30198 warn('invalid <transition> mode: ' + mode, this.$parent); 30199 } 30200 30201 var rawChild = children[0]; // if this is a component root node and the component's 30202 // parent container node also has transition, skip. 30203 30204 if (hasParentTransition(this.$vnode)) { 30205 return rawChild; 30206 } // apply transition data to child 30207 // use getRealChild() to ignore abstract components e.g. keep-alive 30208 30209 30210 var child = getRealChild(rawChild); 30211 /* istanbul ignore if */ 30212 30213 if (!child) { 30214 return rawChild; 30215 } 30216 30217 if (this._leaving) { 30218 return placeholder(h, rawChild); 30219 } // ensure a key that is unique to the vnode type and to this transition 30220 // component instance. This key will be used to remove pending leaving nodes 30221 // during entering. 30222 30223 30224 var id = "__transition-" + this._uid + "-"; 30225 child.key = child.key == null ? child.isComment ? id + 'comment' : id + child.tag : isPrimitive(child.key) ? String(child.key).indexOf(id) === 0 ? child.key : id + child.key : child.key; 30226 var data = (child.data || (child.data = {})).transition = extractTransitionData(this); 30227 var oldRawChild = this._vnode; 30228 var oldChild = getRealChild(oldRawChild); // mark v-show 30229 // so that the transition module can hand over the control to the directive 30230 30231 if (child.data.directives && child.data.directives.some(isVShowDirective)) { 30232 child.data.show = true; 30233 } 30234 30235 if (oldChild && oldChild.data && !isSameChild(child, oldChild) && !isAsyncPlaceholder(oldChild) && // #6687 component root is a comment node 30236 !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)) { 30237 // replace old child transition data with fresh one 30238 // important for dynamic transitions! 30239 var oldData = oldChild.data.transition = extend({}, data); // handle transition mode 30240 30241 if (mode === 'out-in') { 30242 // return placeholder node and queue update when leave finishes 30243 this._leaving = true; 30244 mergeVNodeHook(oldData, 'afterLeave', function () { 30245 this$1._leaving = false; 30246 this$1.$forceUpdate(); 30247 }); 30248 return placeholder(h, rawChild); 30249 } else if (mode === 'in-out') { 30250 if (isAsyncPlaceholder(child)) { 30251 return oldRawChild; 30252 } 30253 30254 var delayedLeave; 30255 30256 var performLeave = function () { 30257 delayedLeave(); 30258 }; 30259 30260 mergeVNodeHook(data, 'afterEnter', performLeave); 30261 mergeVNodeHook(data, 'enterCancelled', performLeave); 30262 mergeVNodeHook(oldData, 'delayLeave', function (leave) { 30263 delayedLeave = leave; 30264 }); 30265 } 30266 } 30267 30268 return rawChild; 30269 } 30270}; 30271/* */ 30272 30273var props = extend({ 30274 tag: String, 30275 moveClass: String 30276}, transitionProps); 30277delete props.mode; 30278var TransitionGroup = { 30279 props: props, 30280 beforeMount: function beforeMount() { 30281 var this$1 = this; 30282 var update = this._update; 30283 30284 this._update = function (vnode, hydrating) { 30285 var restoreActiveInstance = setActiveInstance(this$1); // force removing pass 30286 30287 this$1.__patch__(this$1._vnode, this$1.kept, false, // hydrating 30288 true // removeOnly (!important, avoids unnecessary moves) 30289 ); 30290 30291 this$1._vnode = this$1.kept; 30292 restoreActiveInstance(); 30293 update.call(this$1, vnode, hydrating); 30294 }; 30295 }, 30296 render: function render(h) { 30297 var tag = this.tag || this.$vnode.data.tag || 'span'; 30298 var map = Object.create(null); 30299 var prevChildren = this.prevChildren = this.children; 30300 var rawChildren = this.$slots.default || []; 30301 var children = this.children = []; 30302 var transitionData = extractTransitionData(this); 30303 30304 for (var i = 0; i < rawChildren.length; i++) { 30305 var c = rawChildren[i]; 30306 30307 if (c.tag) { 30308 if (c.key != null && String(c.key).indexOf('__vlist') !== 0) { 30309 children.push(c); 30310 map[c.key] = c; 30311 (c.data || (c.data = {})).transition = transitionData; 30312 } else if (true) { 30313 var opts = c.componentOptions; 30314 var name = opts ? opts.Ctor.options.name || opts.tag || '' : c.tag; 30315 warn("<transition-group> children must be keyed: <" + name + ">"); 30316 } 30317 } 30318 } 30319 30320 if (prevChildren) { 30321 var kept = []; 30322 var removed = []; 30323 30324 for (var i$1 = 0; i$1 < prevChildren.length; i$1++) { 30325 var c$1 = prevChildren[i$1]; 30326 c$1.data.transition = transitionData; 30327 c$1.data.pos = c$1.elm.getBoundingClientRect(); 30328 30329 if (map[c$1.key]) { 30330 kept.push(c$1); 30331 } else { 30332 removed.push(c$1); 30333 } 30334 } 30335 30336 this.kept = h(tag, null, kept); 30337 this.removed = removed; 30338 } 30339 30340 return h(tag, null, children); 30341 }, 30342 updated: function updated() { 30343 var children = this.prevChildren; 30344 var moveClass = this.moveClass || (this.name || 'v') + '-move'; 30345 30346 if (!children.length || !this.hasMove(children[0].elm, moveClass)) { 30347 return; 30348 } // we divide the work into three loops to avoid mixing DOM reads and writes 30349 // in each iteration - which helps prevent layout thrashing. 30350 30351 30352 children.forEach(callPendingCbs); 30353 children.forEach(recordPosition); 30354 children.forEach(applyTranslation); // force reflow to put everything in position 30355 // assign to this to avoid being removed in tree-shaking 30356 // $flow-disable-line 30357 30358 this._reflow = document.body.offsetHeight; 30359 children.forEach(function (c) { 30360 if (c.data.moved) { 30361 var el = c.elm; 30362 var s = el.style; 30363 addTransitionClass(el, moveClass); 30364 s.transform = s.WebkitTransform = s.transitionDuration = ''; 30365 el.addEventListener(transitionEndEvent, el._moveCb = function cb(e) { 30366 if (e && e.target !== el) { 30367 return; 30368 } 30369 30370 if (!e || /transform$/.test(e.propertyName)) { 30371 el.removeEventListener(transitionEndEvent, cb); 30372 el._moveCb = null; 30373 removeTransitionClass(el, moveClass); 30374 } 30375 }); 30376 } 30377 }); 30378 }, 30379 methods: { 30380 hasMove: function hasMove(el, moveClass) { 30381 /* istanbul ignore if */ 30382 if (!hasTransition) { 30383 return false; 30384 } 30385 /* istanbul ignore if */ 30386 30387 30388 if (this._hasMove) { 30389 return this._hasMove; 30390 } // Detect whether an element with the move class applied has 30391 // CSS transitions. Since the element may be inside an entering 30392 // transition at this very moment, we make a clone of it and remove 30393 // all other transition classes applied to ensure only the move class 30394 // is applied. 30395 30396 30397 var clone = el.cloneNode(); 30398 30399 if (el._transitionClasses) { 30400 el._transitionClasses.forEach(function (cls) { 30401 removeClass(clone, cls); 30402 }); 30403 } 30404 30405 addClass(clone, moveClass); 30406 clone.style.display = 'none'; 30407 this.$el.appendChild(clone); 30408 var info = getTransitionInfo(clone); 30409 this.$el.removeChild(clone); 30410 return this._hasMove = info.hasTransform; 30411 } 30412 } 30413}; 30414 30415function callPendingCbs(c) { 30416 /* istanbul ignore if */ 30417 if (c.elm._moveCb) { 30418 c.elm._moveCb(); 30419 } 30420 /* istanbul ignore if */ 30421 30422 30423 if (c.elm._enterCb) { 30424 c.elm._enterCb(); 30425 } 30426} 30427 30428function recordPosition(c) { 30429 c.data.newPos = c.elm.getBoundingClientRect(); 30430} 30431 30432function applyTranslation(c) { 30433 var oldPos = c.data.pos; 30434 var newPos = c.data.newPos; 30435 var dx = oldPos.left - newPos.left; 30436 var dy = oldPos.top - newPos.top; 30437 30438 if (dx || dy) { 30439 c.data.moved = true; 30440 var s = c.elm.style; 30441 s.transform = s.WebkitTransform = "translate(" + dx + "px," + dy + "px)"; 30442 s.transitionDuration = '0s'; 30443 } 30444} 30445 30446var platformComponents = { 30447 Transition: Transition, 30448 TransitionGroup: TransitionGroup 30449}; 30450/* */ 30451// install platform specific utils 30452 30453Vue.config.mustUseProp = mustUseProp; 30454Vue.config.isReservedTag = isReservedTag; 30455Vue.config.isReservedAttr = isReservedAttr; 30456Vue.config.getTagNamespace = getTagNamespace; 30457Vue.config.isUnknownElement = isUnknownElement; // install platform runtime directives & components 30458 30459extend(Vue.options.directives, platformDirectives); 30460extend(Vue.options.components, platformComponents); // install platform patch function 30461 30462Vue.prototype.__patch__ = inBrowser ? patch : noop; // public mount method 30463 30464Vue.prototype.$mount = function (el, hydrating) { 30465 el = el && inBrowser ? query(el) : undefined; 30466 return mountComponent(this, el, hydrating); 30467}; // devtools global hook 30468 30469/* istanbul ignore next */ 30470 30471 30472if (inBrowser) { 30473 setTimeout(function () { 30474 if (config.devtools) { 30475 if (devtools) { 30476 devtools.emit('init', Vue); 30477 } else if (true) { 30478 console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' + 'https://github.com/vuejs/vue-devtools'); 30479 } 30480 } 30481 30482 if ( true && config.productionTip !== false && typeof console !== 'undefined') { 30483 console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" + "Make sure to turn on production mode when deploying for production.\n" + "See more tips at https://vuejs.org/guide/deployment.html"); 30484 } 30485 }, 0); 30486} 30487/* */ 30488 30489 30490var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g; 30491var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g; 30492var buildRegex = cached(function (delimiters) { 30493 var open = delimiters[0].replace(regexEscapeRE, '\\$&'); 30494 var close = delimiters[1].replace(regexEscapeRE, '\\$&'); 30495 return new RegExp(open + '((?:.|\\n)+?)' + close, 'g'); 30496}); 30497 30498function parseText(text, delimiters) { 30499 var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE; 30500 30501 if (!tagRE.test(text)) { 30502 return; 30503 } 30504 30505 var tokens = []; 30506 var rawTokens = []; 30507 var lastIndex = tagRE.lastIndex = 0; 30508 var match, index, tokenValue; 30509 30510 while (match = tagRE.exec(text)) { 30511 index = match.index; // push text token 30512 30513 if (index > lastIndex) { 30514 rawTokens.push(tokenValue = text.slice(lastIndex, index)); 30515 tokens.push(JSON.stringify(tokenValue)); 30516 } // tag token 30517 30518 30519 var exp = parseFilters(match[1].trim()); 30520 tokens.push("_s(" + exp + ")"); 30521 rawTokens.push({ 30522 '@binding': exp 30523 }); 30524 lastIndex = index + match[0].length; 30525 } 30526 30527 if (lastIndex < text.length) { 30528 rawTokens.push(tokenValue = text.slice(lastIndex)); 30529 tokens.push(JSON.stringify(tokenValue)); 30530 } 30531 30532 return { 30533 expression: tokens.join('+'), 30534 tokens: rawTokens 30535 }; 30536} 30537/* */ 30538 30539 30540function transformNode(el, options) { 30541 var warn = options.warn || baseWarn; 30542 var staticClass = getAndRemoveAttr(el, 'class'); 30543 30544 if ( true && staticClass) { 30545 var res = parseText(staticClass, options.delimiters); 30546 30547 if (res) { 30548 warn("class=\"" + staticClass + "\": " + 'Interpolation inside attributes has been removed. ' + 'Use v-bind or the colon shorthand instead. For example, ' + 'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']); 30549 } 30550 } 30551 30552 if (staticClass) { 30553 el.staticClass = JSON.stringify(staticClass); 30554 } 30555 30556 var classBinding = getBindingAttr(el, 'class', false 30557 /* getStatic */ 30558 ); 30559 30560 if (classBinding) { 30561 el.classBinding = classBinding; 30562 } 30563} 30564 30565function genData(el) { 30566 var data = ''; 30567 30568 if (el.staticClass) { 30569 data += "staticClass:" + el.staticClass + ","; 30570 } 30571 30572 if (el.classBinding) { 30573 data += "class:" + el.classBinding + ","; 30574 } 30575 30576 return data; 30577} 30578 30579var klass$1 = { 30580 staticKeys: ['staticClass'], 30581 transformNode: transformNode, 30582 genData: genData 30583}; 30584/* */ 30585 30586function transformNode$1(el, options) { 30587 var warn = options.warn || baseWarn; 30588 var staticStyle = getAndRemoveAttr(el, 'style'); 30589 30590 if (staticStyle) { 30591 /* istanbul ignore if */ 30592 if (true) { 30593 var res = parseText(staticStyle, options.delimiters); 30594 30595 if (res) { 30596 warn("style=\"" + staticStyle + "\": " + 'Interpolation inside attributes has been removed. ' + 'Use v-bind or the colon shorthand instead. For example, ' + 'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']); 30597 } 30598 } 30599 30600 el.staticStyle = JSON.stringify(parseStyleText(staticStyle)); 30601 } 30602 30603 var styleBinding = getBindingAttr(el, 'style', false 30604 /* getStatic */ 30605 ); 30606 30607 if (styleBinding) { 30608 el.styleBinding = styleBinding; 30609 } 30610} 30611 30612function genData$1(el) { 30613 var data = ''; 30614 30615 if (el.staticStyle) { 30616 data += "staticStyle:" + el.staticStyle + ","; 30617 } 30618 30619 if (el.styleBinding) { 30620 data += "style:(" + el.styleBinding + "),"; 30621 } 30622 30623 return data; 30624} 30625 30626var style$1 = { 30627 staticKeys: ['staticStyle'], 30628 transformNode: transformNode$1, 30629 genData: genData$1 30630}; 30631/* */ 30632 30633var decoder; 30634var he = { 30635 decode: function decode(html) { 30636 decoder = decoder || document.createElement('div'); 30637 decoder.innerHTML = html; 30638 return decoder.textContent; 30639 } 30640}; 30641/* */ 30642 30643var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' + 'link,meta,param,source,track,wbr'); // Elements that you can, intentionally, leave open 30644// (and which close themselves) 30645 30646var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'); // HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3 30647// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content 30648 30649var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' + 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' + 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' + 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' + 'title,tr,track'); 30650/** 30651 * Not type-checking this file because it's mostly vendor code. 30652 */ 30653// Regular Expressions for parsing tags and attributes 30654 30655var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; 30656var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; 30657var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z" + unicodeRegExp.source + "]*"; 30658var qnameCapture = "((?:" + ncname + "\\:)?" + ncname + ")"; 30659var startTagOpen = new RegExp("^<" + qnameCapture); 30660var startTagClose = /^\s*(\/?)>/; 30661var endTag = new RegExp("^<\\/" + qnameCapture + "[^>]*>"); 30662var doctype = /^<!DOCTYPE [^>]+>/i; // #7298: escape - to avoid being passed as HTML comment when inlined in page 30663 30664var comment = /^<!\--/; 30665var conditionalComment = /^<!\[/; // Special Elements (can contain anything) 30666 30667var isPlainTextElement = makeMap('script,style,textarea', true); 30668var reCache = {}; 30669var decodingMap = { 30670 '<': '<', 30671 '>': '>', 30672 '"': '"', 30673 '&': '&', 30674 ' ': '\n', 30675 '	': '\t', 30676 ''': "'" 30677}; 30678var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g; 30679var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g; // #5992 30680 30681var isIgnoreNewlineTag = makeMap('pre,textarea', true); 30682 30683var shouldIgnoreFirstNewline = function (tag, html) { 30684 return tag && isIgnoreNewlineTag(tag) && html[0] === '\n'; 30685}; 30686 30687function decodeAttr(value, shouldDecodeNewlines) { 30688 var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr; 30689 return value.replace(re, function (match) { 30690 return decodingMap[match]; 30691 }); 30692} 30693 30694function parseHTML(html, options) { 30695 var stack = []; 30696 var expectHTML = options.expectHTML; 30697 var isUnaryTag$$1 = options.isUnaryTag || no; 30698 var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no; 30699 var index = 0; 30700 var last, lastTag; 30701 30702 while (html) { 30703 last = html; // Make sure we're not in a plaintext content element like script/style 30704 30705 if (!lastTag || !isPlainTextElement(lastTag)) { 30706 var textEnd = html.indexOf('<'); 30707 30708 if (textEnd === 0) { 30709 // Comment: 30710 if (comment.test(html)) { 30711 var commentEnd = html.indexOf('-->'); 30712 30713 if (commentEnd >= 0) { 30714 if (options.shouldKeepComment) { 30715 options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3); 30716 } 30717 30718 advance(commentEnd + 3); 30719 continue; 30720 } 30721 } // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment 30722 30723 30724 if (conditionalComment.test(html)) { 30725 var conditionalEnd = html.indexOf(']>'); 30726 30727 if (conditionalEnd >= 0) { 30728 advance(conditionalEnd + 2); 30729 continue; 30730 } 30731 } // Doctype: 30732 30733 30734 var doctypeMatch = html.match(doctype); 30735 30736 if (doctypeMatch) { 30737 advance(doctypeMatch[0].length); 30738 continue; 30739 } // End tag: 30740 30741 30742 var endTagMatch = html.match(endTag); 30743 30744 if (endTagMatch) { 30745 var curIndex = index; 30746 advance(endTagMatch[0].length); 30747 parseEndTag(endTagMatch[1], curIndex, index); 30748 continue; 30749 } // Start tag: 30750 30751 30752 var startTagMatch = parseStartTag(); 30753 30754 if (startTagMatch) { 30755 handleStartTag(startTagMatch); 30756 30757 if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) { 30758 advance(1); 30759 } 30760 30761 continue; 30762 } 30763 } 30764 30765 var text = void 0, 30766 rest = void 0, 30767 next = void 0; 30768 30769 if (textEnd >= 0) { 30770 rest = html.slice(textEnd); 30771 30772 while (!endTag.test(rest) && !startTagOpen.test(rest) && !comment.test(rest) && !conditionalComment.test(rest)) { 30773 // < in plain text, be forgiving and treat it as text 30774 next = rest.indexOf('<', 1); 30775 30776 if (next < 0) { 30777 break; 30778 } 30779 30780 textEnd += next; 30781 rest = html.slice(textEnd); 30782 } 30783 30784 text = html.substring(0, textEnd); 30785 } 30786 30787 if (textEnd < 0) { 30788 text = html; 30789 } 30790 30791 if (text) { 30792 advance(text.length); 30793 } 30794 30795 if (options.chars && text) { 30796 options.chars(text, index - text.length, index); 30797 } 30798 } else { 30799 var endTagLength = 0; 30800 var stackedTag = lastTag.toLowerCase(); 30801 var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\s\\S]*?)(</' + stackedTag + '[^>]*>)', 'i')); 30802 var rest$1 = html.replace(reStackedTag, function (all, text, endTag) { 30803 endTagLength = endTag.length; 30804 30805 if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') { 30806 text = text.replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298 30807 .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1'); 30808 } 30809 30810 if (shouldIgnoreFirstNewline(stackedTag, text)) { 30811 text = text.slice(1); 30812 } 30813 30814 if (options.chars) { 30815 options.chars(text); 30816 } 30817 30818 return ''; 30819 }); 30820 index += html.length - rest$1.length; 30821 html = rest$1; 30822 parseEndTag(stackedTag, index - endTagLength, index); 30823 } 30824 30825 if (html === last) { 30826 options.chars && options.chars(html); 30827 30828 if ( true && !stack.length && options.warn) { 30829 options.warn("Mal-formatted tag at end of template: \"" + html + "\"", { 30830 start: index + html.length 30831 }); 30832 } 30833 30834 break; 30835 } 30836 } // Clean up any remaining tags 30837 30838 30839 parseEndTag(); 30840 30841 function advance(n) { 30842 index += n; 30843 html = html.substring(n); 30844 } 30845 30846 function parseStartTag() { 30847 var start = html.match(startTagOpen); 30848 30849 if (start) { 30850 var match = { 30851 tagName: start[1], 30852 attrs: [], 30853 start: index 30854 }; 30855 advance(start[0].length); 30856 var end, attr; 30857 30858 while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) { 30859 attr.start = index; 30860 advance(attr[0].length); 30861 attr.end = index; 30862 match.attrs.push(attr); 30863 } 30864 30865 if (end) { 30866 match.unarySlash = end[1]; 30867 advance(end[0].length); 30868 match.end = index; 30869 return match; 30870 } 30871 } 30872 } 30873 30874 function handleStartTag(match) { 30875 var tagName = match.tagName; 30876 var unarySlash = match.unarySlash; 30877 30878 if (expectHTML) { 30879 if (lastTag === 'p' && isNonPhrasingTag(tagName)) { 30880 parseEndTag(lastTag); 30881 } 30882 30883 if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) { 30884 parseEndTag(tagName); 30885 } 30886 } 30887 30888 var unary = isUnaryTag$$1(tagName) || !!unarySlash; 30889 var l = match.attrs.length; 30890 var attrs = new Array(l); 30891 30892 for (var i = 0; i < l; i++) { 30893 var args = match.attrs[i]; 30894 var value = args[3] || args[4] || args[5] || ''; 30895 var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href' ? options.shouldDecodeNewlinesForHref : options.shouldDecodeNewlines; 30896 attrs[i] = { 30897 name: args[1], 30898 value: decodeAttr(value, shouldDecodeNewlines) 30899 }; 30900 30901 if ( true && options.outputSourceRange) { 30902 attrs[i].start = args.start + args[0].match(/^\s*/).length; 30903 attrs[i].end = args.end; 30904 } 30905 } 30906 30907 if (!unary) { 30908 stack.push({ 30909 tag: tagName, 30910 lowerCasedTag: tagName.toLowerCase(), 30911 attrs: attrs, 30912 start: match.start, 30913 end: match.end 30914 }); 30915 lastTag = tagName; 30916 } 30917 30918 if (options.start) { 30919 options.start(tagName, attrs, unary, match.start, match.end); 30920 } 30921 } 30922 30923 function parseEndTag(tagName, start, end) { 30924 var pos, lowerCasedTagName; 30925 30926 if (start == null) { 30927 start = index; 30928 } 30929 30930 if (end == null) { 30931 end = index; 30932 } // Find the closest opened tag of the same type 30933 30934 30935 if (tagName) { 30936 lowerCasedTagName = tagName.toLowerCase(); 30937 30938 for (pos = stack.length - 1; pos >= 0; pos--) { 30939 if (stack[pos].lowerCasedTag === lowerCasedTagName) { 30940 break; 30941 } 30942 } 30943 } else { 30944 // If no tag name is provided, clean shop 30945 pos = 0; 30946 } 30947 30948 if (pos >= 0) { 30949 // Close all the open elements, up the stack 30950 for (var i = stack.length - 1; i >= pos; i--) { 30951 if ( true && (i > pos || !tagName) && options.warn) { 30952 options.warn("tag <" + stack[i].tag + "> has no matching end tag.", { 30953 start: stack[i].start, 30954 end: stack[i].end 30955 }); 30956 } 30957 30958 if (options.end) { 30959 options.end(stack[i].tag, start, end); 30960 } 30961 } // Remove the open elements from the stack 30962 30963 30964 stack.length = pos; 30965 lastTag = pos && stack[pos - 1].tag; 30966 } else if (lowerCasedTagName === 'br') { 30967 if (options.start) { 30968 options.start(tagName, [], true, start, end); 30969 } 30970 } else if (lowerCasedTagName === 'p') { 30971 if (options.start) { 30972 options.start(tagName, [], false, start, end); 30973 } 30974 30975 if (options.end) { 30976 options.end(tagName, start, end); 30977 } 30978 } 30979 } 30980} 30981/* */ 30982 30983 30984var onRE = /^@|^v-on:/; 30985var dirRE = /^v-|^@|^:|^#/; 30986var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/; 30987var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/; 30988var stripParensRE = /^\(|\)$/g; 30989var dynamicArgRE = /^\[.*\]$/; 30990var argRE = /:(.*)$/; 30991var bindRE = /^:|^\.|^v-bind:/; 30992var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g; 30993var slotRE = /^v-slot(:|$)|^#/; 30994var lineBreakRE = /[\r\n]/; 30995var whitespaceRE$1 = /\s+/g; 30996var invalidAttributeRE = /[\s"'<>\/=]/; 30997var decodeHTMLCached = cached(he.decode); 30998var emptySlotScopeToken = "_empty_"; // configurable state 30999 31000var warn$2; 31001var delimiters; 31002var transforms; 31003var preTransforms; 31004var postTransforms; 31005var platformIsPreTag; 31006var platformMustUseProp; 31007var platformGetTagNamespace; 31008var maybeComponent; 31009 31010function createASTElement(tag, attrs, parent) { 31011 return { 31012 type: 1, 31013 tag: tag, 31014 attrsList: attrs, 31015 attrsMap: makeAttrsMap(attrs), 31016 rawAttrsMap: {}, 31017 parent: parent, 31018 children: [] 31019 }; 31020} 31021/** 31022 * Convert HTML string to AST. 31023 */ 31024 31025 31026function parse(template, options) { 31027 warn$2 = options.warn || baseWarn; 31028 platformIsPreTag = options.isPreTag || no; 31029 platformMustUseProp = options.mustUseProp || no; 31030 platformGetTagNamespace = options.getTagNamespace || no; 31031 var isReservedTag = options.isReservedTag || no; 31032 31033 maybeComponent = function (el) { 31034 return !!el.component || !isReservedTag(el.tag); 31035 }; 31036 31037 transforms = pluckModuleFunction(options.modules, 'transformNode'); 31038 preTransforms = pluckModuleFunction(options.modules, 'preTransformNode'); 31039 postTransforms = pluckModuleFunction(options.modules, 'postTransformNode'); 31040 delimiters = options.delimiters; 31041 var stack = []; 31042 var preserveWhitespace = options.preserveWhitespace !== false; 31043 var whitespaceOption = options.whitespace; 31044 var root; 31045 var currentParent; 31046 var inVPre = false; 31047 var inPre = false; 31048 var warned = false; 31049 31050 function warnOnce(msg, range) { 31051 if (!warned) { 31052 warned = true; 31053 warn$2(msg, range); 31054 } 31055 } 31056 31057 function closeElement(element) { 31058 trimEndingWhitespace(element); 31059 31060 if (!inVPre && !element.processed) { 31061 element = processElement(element, options); 31062 } // tree management 31063 31064 31065 if (!stack.length && element !== root) { 31066 // allow root elements with v-if, v-else-if and v-else 31067 if (root.if && (element.elseif || element.else)) { 31068 if (true) { 31069 checkRootConstraints(element); 31070 } 31071 31072 addIfCondition(root, { 31073 exp: element.elseif, 31074 block: element 31075 }); 31076 } else if (true) { 31077 warnOnce("Component template should contain exactly one root element. " + "If you are using v-if on multiple elements, " + "use v-else-if to chain them instead.", { 31078 start: element.start 31079 }); 31080 } 31081 } 31082 31083 if (currentParent && !element.forbidden) { 31084 if (element.elseif || element.else) { 31085 processIfConditions(element, currentParent); 31086 } else { 31087 if (element.slotScope) { 31088 // scoped slot 31089 // keep it in the children list so that v-else(-if) conditions can 31090 // find it as the prev node. 31091 var name = element.slotTarget || '"default"'; 31092 (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element; 31093 } 31094 31095 currentParent.children.push(element); 31096 element.parent = currentParent; 31097 } 31098 } // final children cleanup 31099 // filter out scoped slots 31100 31101 31102 element.children = element.children.filter(function (c) { 31103 return !c.slotScope; 31104 }); // remove trailing whitespace node again 31105 31106 trimEndingWhitespace(element); // check pre state 31107 31108 if (element.pre) { 31109 inVPre = false; 31110 } 31111 31112 if (platformIsPreTag(element.tag)) { 31113 inPre = false; 31114 } // apply post-transforms 31115 31116 31117 for (var i = 0; i < postTransforms.length; i++) { 31118 postTransforms[i](element, options); 31119 } 31120 } 31121 31122 function trimEndingWhitespace(el) { 31123 // remove trailing whitespace node 31124 if (!inPre) { 31125 var lastNode; 31126 31127 while ((lastNode = el.children[el.children.length - 1]) && lastNode.type === 3 && lastNode.text === ' ') { 31128 el.children.pop(); 31129 } 31130 } 31131 } 31132 31133 function checkRootConstraints(el) { 31134 if (el.tag === 'slot' || el.tag === 'template') { 31135 warnOnce("Cannot use <" + el.tag + "> as component root element because it may " + 'contain multiple nodes.', { 31136 start: el.start 31137 }); 31138 } 31139 31140 if (el.attrsMap.hasOwnProperty('v-for')) { 31141 warnOnce('Cannot use v-for on stateful component root element because ' + 'it renders multiple elements.', el.rawAttrsMap['v-for']); 31142 } 31143 } 31144 31145 parseHTML(template, { 31146 warn: warn$2, 31147 expectHTML: options.expectHTML, 31148 isUnaryTag: options.isUnaryTag, 31149 canBeLeftOpenTag: options.canBeLeftOpenTag, 31150 shouldDecodeNewlines: options.shouldDecodeNewlines, 31151 shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref, 31152 shouldKeepComment: options.comments, 31153 outputSourceRange: options.outputSourceRange, 31154 start: function start(tag, attrs, unary, start$1, end) { 31155 // check namespace. 31156 // inherit parent ns if there is one 31157 var ns = currentParent && currentParent.ns || platformGetTagNamespace(tag); // handle IE svg bug 31158 31159 /* istanbul ignore if */ 31160 31161 if (isIE && ns === 'svg') { 31162 attrs = guardIESVGBug(attrs); 31163 } 31164 31165 var element = createASTElement(tag, attrs, currentParent); 31166 31167 if (ns) { 31168 element.ns = ns; 31169 } 31170 31171 if (true) { 31172 if (options.outputSourceRange) { 31173 element.start = start$1; 31174 element.end = end; 31175 element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) { 31176 cumulated[attr.name] = attr; 31177 return cumulated; 31178 }, {}); 31179 } 31180 31181 attrs.forEach(function (attr) { 31182 if (invalidAttributeRE.test(attr.name)) { 31183 warn$2("Invalid dynamic argument expression: attribute names cannot contain " + "spaces, quotes, <, >, / or =.", { 31184 start: attr.start + attr.name.indexOf("["), 31185 end: attr.start + attr.name.length 31186 }); 31187 } 31188 }); 31189 } 31190 31191 if (isForbiddenTag(element) && !isServerRendering()) { 31192 element.forbidden = true; 31193 true && warn$2('Templates should only be responsible for mapping the state to the ' + 'UI. Avoid placing tags with side-effects in your templates, such as ' + "<" + tag + ">" + ', as they will not be parsed.', { 31194 start: element.start 31195 }); 31196 } // apply pre-transforms 31197 31198 31199 for (var i = 0; i < preTransforms.length; i++) { 31200 element = preTransforms[i](element, options) || element; 31201 } 31202 31203 if (!inVPre) { 31204 processPre(element); 31205 31206 if (element.pre) { 31207 inVPre = true; 31208 } 31209 } 31210 31211 if (platformIsPreTag(element.tag)) { 31212 inPre = true; 31213 } 31214 31215 if (inVPre) { 31216 processRawAttrs(element); 31217 } else if (!element.processed) { 31218 // structural directives 31219 processFor(element); 31220 processIf(element); 31221 processOnce(element); 31222 } 31223 31224 if (!root) { 31225 root = element; 31226 31227 if (true) { 31228 checkRootConstraints(root); 31229 } 31230 } 31231 31232 if (!unary) { 31233 currentParent = element; 31234 stack.push(element); 31235 } else { 31236 closeElement(element); 31237 } 31238 }, 31239 end: function end(tag, start, end$1) { 31240 var element = stack[stack.length - 1]; // pop stack 31241 31242 stack.length -= 1; 31243 currentParent = stack[stack.length - 1]; 31244 31245 if ( true && options.outputSourceRange) { 31246 element.end = end$1; 31247 } 31248 31249 closeElement(element); 31250 }, 31251 chars: function chars(text, start, end) { 31252 if (!currentParent) { 31253 if (true) { 31254 if (text === template) { 31255 warnOnce('Component template requires a root element, rather than just text.', { 31256 start: start 31257 }); 31258 } else if (text = text.trim()) { 31259 warnOnce("text \"" + text + "\" outside root element will be ignored.", { 31260 start: start 31261 }); 31262 } 31263 } 31264 31265 return; 31266 } // IE textarea placeholder bug 31267 31268 /* istanbul ignore if */ 31269 31270 31271 if (isIE && currentParent.tag === 'textarea' && currentParent.attrsMap.placeholder === text) { 31272 return; 31273 } 31274 31275 var children = currentParent.children; 31276 31277 if (inPre || text.trim()) { 31278 text = isTextTag(currentParent) ? text : decodeHTMLCached(text); 31279 } else if (!children.length) { 31280 // remove the whitespace-only node right after an opening tag 31281 text = ''; 31282 } else if (whitespaceOption) { 31283 if (whitespaceOption === 'condense') { 31284 // in condense mode, remove the whitespace node if it contains 31285 // line break, otherwise condense to a single space 31286 text = lineBreakRE.test(text) ? '' : ' '; 31287 } else { 31288 text = ' '; 31289 } 31290 } else { 31291 text = preserveWhitespace ? ' ' : ''; 31292 } 31293 31294 if (text) { 31295 if (!inPre && whitespaceOption === 'condense') { 31296 // condense consecutive whitespaces into single space 31297 text = text.replace(whitespaceRE$1, ' '); 31298 } 31299 31300 var res; 31301 var child; 31302 31303 if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) { 31304 child = { 31305 type: 2, 31306 expression: res.expression, 31307 tokens: res.tokens, 31308 text: text 31309 }; 31310 } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') { 31311 child = { 31312 type: 3, 31313 text: text 31314 }; 31315 } 31316 31317 if (child) { 31318 if ( true && options.outputSourceRange) { 31319 child.start = start; 31320 child.end = end; 31321 } 31322 31323 children.push(child); 31324 } 31325 } 31326 }, 31327 comment: function comment(text, start, end) { 31328 // adding anyting as a sibling to the root node is forbidden 31329 // comments should still be allowed, but ignored 31330 if (currentParent) { 31331 var child = { 31332 type: 3, 31333 text: text, 31334 isComment: true 31335 }; 31336 31337 if ( true && options.outputSourceRange) { 31338 child.start = start; 31339 child.end = end; 31340 } 31341 31342 currentParent.children.push(child); 31343 } 31344 } 31345 }); 31346 return root; 31347} 31348 31349function processPre(el) { 31350 if (getAndRemoveAttr(el, 'v-pre') != null) { 31351 el.pre = true; 31352 } 31353} 31354 31355function processRawAttrs(el) { 31356 var list = el.attrsList; 31357 var len = list.length; 31358 31359 if (len) { 31360 var attrs = el.attrs = new Array(len); 31361 31362 for (var i = 0; i < len; i++) { 31363 attrs[i] = { 31364 name: list[i].name, 31365 value: JSON.stringify(list[i].value) 31366 }; 31367 31368 if (list[i].start != null) { 31369 attrs[i].start = list[i].start; 31370 attrs[i].end = list[i].end; 31371 } 31372 } 31373 } else if (!el.pre) { 31374 // non root node in pre blocks with no attributes 31375 el.plain = true; 31376 } 31377} 31378 31379function processElement(element, options) { 31380 processKey(element); // determine whether this is a plain element after 31381 // removing structural attributes 31382 31383 element.plain = !element.key && !element.scopedSlots && !element.attrsList.length; 31384 processRef(element); 31385 processSlotContent(element); 31386 processSlotOutlet(element); 31387 processComponent(element); 31388 31389 for (var i = 0; i < transforms.length; i++) { 31390 element = transforms[i](element, options) || element; 31391 } 31392 31393 processAttrs(element); 31394 return element; 31395} 31396 31397function processKey(el) { 31398 var exp = getBindingAttr(el, 'key'); 31399 31400 if (exp) { 31401 if (true) { 31402 if (el.tag === 'template') { 31403 warn$2("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key')); 31404 } 31405 31406 if (el.for) { 31407 var iterator = el.iterator2 || el.iterator1; 31408 var parent = el.parent; 31409 31410 if (iterator && iterator === exp && parent && parent.tag === 'transition-group') { 31411 warn$2("Do not use v-for index as key on <transition-group> children, " + "this is the same as not using keys.", getRawBindingAttr(el, 'key'), true 31412 /* tip */ 31413 ); 31414 } 31415 } 31416 } 31417 31418 el.key = exp; 31419 } 31420} 31421 31422function processRef(el) { 31423 var ref = getBindingAttr(el, 'ref'); 31424 31425 if (ref) { 31426 el.ref = ref; 31427 el.refInFor = checkInFor(el); 31428 } 31429} 31430 31431function processFor(el) { 31432 var exp; 31433 31434 if (exp = getAndRemoveAttr(el, 'v-for')) { 31435 var res = parseFor(exp); 31436 31437 if (res) { 31438 extend(el, res); 31439 } else if (true) { 31440 warn$2("Invalid v-for expression: " + exp, el.rawAttrsMap['v-for']); 31441 } 31442 } 31443} 31444 31445function parseFor(exp) { 31446 var inMatch = exp.match(forAliasRE); 31447 31448 if (!inMatch) { 31449 return; 31450 } 31451 31452 var res = {}; 31453 res.for = inMatch[2].trim(); 31454 var alias = inMatch[1].trim().replace(stripParensRE, ''); 31455 var iteratorMatch = alias.match(forIteratorRE); 31456 31457 if (iteratorMatch) { 31458 res.alias = alias.replace(forIteratorRE, '').trim(); 31459 res.iterator1 = iteratorMatch[1].trim(); 31460 31461 if (iteratorMatch[2]) { 31462 res.iterator2 = iteratorMatch[2].trim(); 31463 } 31464 } else { 31465 res.alias = alias; 31466 } 31467 31468 return res; 31469} 31470 31471function processIf(el) { 31472 var exp = getAndRemoveAttr(el, 'v-if'); 31473 31474 if (exp) { 31475 el.if = exp; 31476 addIfCondition(el, { 31477 exp: exp, 31478 block: el 31479 }); 31480 } else { 31481 if (getAndRemoveAttr(el, 'v-else') != null) { 31482 el.else = true; 31483 } 31484 31485 var elseif = getAndRemoveAttr(el, 'v-else-if'); 31486 31487 if (elseif) { 31488 el.elseif = elseif; 31489 } 31490 } 31491} 31492 31493function processIfConditions(el, parent) { 31494 var prev = findPrevElement(parent.children); 31495 31496 if (prev && prev.if) { 31497 addIfCondition(prev, { 31498 exp: el.elseif, 31499 block: el 31500 }); 31501 } else if (true) { 31502 warn$2("v-" + (el.elseif ? 'else-if="' + el.elseif + '"' : 'else') + " " + "used on element <" + el.tag + "> without corresponding v-if.", el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']); 31503 } 31504} 31505 31506function findPrevElement(children) { 31507 var i = children.length; 31508 31509 while (i--) { 31510 if (children[i].type === 1) { 31511 return children[i]; 31512 } else { 31513 if ( true && children[i].text !== ' ') { 31514 warn$2("text \"" + children[i].text.trim() + "\" between v-if and v-else(-if) " + "will be ignored.", children[i]); 31515 } 31516 31517 children.pop(); 31518 } 31519 } 31520} 31521 31522function addIfCondition(el, condition) { 31523 if (!el.ifConditions) { 31524 el.ifConditions = []; 31525 } 31526 31527 el.ifConditions.push(condition); 31528} 31529 31530function processOnce(el) { 31531 var once$$1 = getAndRemoveAttr(el, 'v-once'); 31532 31533 if (once$$1 != null) { 31534 el.once = true; 31535 } 31536} // handle content being passed to a component as slot, 31537// e.g. <template slot="xxx">, <div slot-scope="xxx"> 31538 31539 31540function processSlotContent(el) { 31541 var slotScope; 31542 31543 if (el.tag === 'template') { 31544 slotScope = getAndRemoveAttr(el, 'scope'); 31545 /* istanbul ignore if */ 31546 31547 if ( true && slotScope) { 31548 warn$2("the \"scope\" attribute for scoped slots have been deprecated and " + "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " + "can also be used on plain elements in addition to <template> to " + "denote scoped slots.", el.rawAttrsMap['scope'], true); 31549 } 31550 31551 el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope'); 31552 } else if (slotScope = getAndRemoveAttr(el, 'slot-scope')) { 31553 /* istanbul ignore if */ 31554 if ( true && el.attrsMap['v-for']) { 31555 warn$2("Ambiguous combined usage of slot-scope and v-for on <" + el.tag + "> " + "(v-for takes higher priority). Use a wrapper <template> for the " + "scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true); 31556 } 31557 31558 el.slotScope = slotScope; 31559 } // slot="xxx" 31560 31561 31562 var slotTarget = getBindingAttr(el, 'slot'); 31563 31564 if (slotTarget) { 31565 el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget; 31566 el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']); // preserve slot as an attribute for native shadow DOM compat 31567 // only for non-scoped slots. 31568 31569 if (el.tag !== 'template' && !el.slotScope) { 31570 addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot')); 31571 } 31572 } // 2.6 v-slot syntax 31573 31574 31575 { 31576 if (el.tag === 'template') { 31577 // v-slot on <template> 31578 var slotBinding = getAndRemoveAttrByRegex(el, slotRE); 31579 31580 if (slotBinding) { 31581 if (true) { 31582 if (el.slotTarget || el.slotScope) { 31583 warn$2("Unexpected mixed usage of different slot syntaxes.", el); 31584 } 31585 31586 if (el.parent && !maybeComponent(el.parent)) { 31587 warn$2("<template v-slot> can only appear at the root level inside " + "the receiving component", el); 31588 } 31589 } 31590 31591 var ref = getSlotName(slotBinding); 31592 var name = ref.name; 31593 var dynamic = ref.dynamic; 31594 el.slotTarget = name; 31595 el.slotTargetDynamic = dynamic; 31596 el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf 31597 } 31598 } else { 31599 // v-slot on component, denotes default slot 31600 var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE); 31601 31602 if (slotBinding$1) { 31603 if (true) { 31604 if (!maybeComponent(el)) { 31605 warn$2("v-slot can only be used on components or <template>.", slotBinding$1); 31606 } 31607 31608 if (el.slotScope || el.slotTarget) { 31609 warn$2("Unexpected mixed usage of different slot syntaxes.", el); 31610 } 31611 31612 if (el.scopedSlots) { 31613 warn$2("To avoid scope ambiguity, the default slot should also use " + "<template> syntax when there are other named slots.", slotBinding$1); 31614 } 31615 } // add the component's children to its default slot 31616 31617 31618 var slots = el.scopedSlots || (el.scopedSlots = {}); 31619 var ref$1 = getSlotName(slotBinding$1); 31620 var name$1 = ref$1.name; 31621 var dynamic$1 = ref$1.dynamic; 31622 var slotContainer = slots[name$1] = createASTElement('template', [], el); 31623 slotContainer.slotTarget = name$1; 31624 slotContainer.slotTargetDynamic = dynamic$1; 31625 slotContainer.children = el.children.filter(function (c) { 31626 if (!c.slotScope) { 31627 c.parent = slotContainer; 31628 return true; 31629 } 31630 }); 31631 slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken; // remove children as they are returned from scopedSlots now 31632 31633 el.children = []; // mark el non-plain so data gets generated 31634 31635 el.plain = false; 31636 } 31637 } 31638 } 31639} 31640 31641function getSlotName(binding) { 31642 var name = binding.name.replace(slotRE, ''); 31643 31644 if (!name) { 31645 if (binding.name[0] !== '#') { 31646 name = 'default'; 31647 } else if (true) { 31648 warn$2("v-slot shorthand syntax requires a slot name.", binding); 31649 } 31650 } 31651 31652 return dynamicArgRE.test(name) // dynamic [name] 31653 ? { 31654 name: name.slice(1, -1), 31655 dynamic: true 31656 } // static name 31657 : { 31658 name: "\"" + name + "\"", 31659 dynamic: false 31660 }; 31661} // handle <slot/> outlets 31662 31663 31664function processSlotOutlet(el) { 31665 if (el.tag === 'slot') { 31666 el.slotName = getBindingAttr(el, 'name'); 31667 31668 if ( true && el.key) { 31669 warn$2("`key` does not work on <slot> because slots are abstract outlets " + "and can possibly expand into multiple elements. " + "Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key')); 31670 } 31671 } 31672} 31673 31674function processComponent(el) { 31675 var binding; 31676 31677 if (binding = getBindingAttr(el, 'is')) { 31678 el.component = binding; 31679 } 31680 31681 if (getAndRemoveAttr(el, 'inline-template') != null) { 31682 el.inlineTemplate = true; 31683 } 31684} 31685 31686function processAttrs(el) { 31687 var list = el.attrsList; 31688 var i, l, name, rawName, value, modifiers, syncGen, isDynamic; 31689 31690 for (i = 0, l = list.length; i < l; i++) { 31691 name = rawName = list[i].name; 31692 value = list[i].value; 31693 31694 if (dirRE.test(name)) { 31695 // mark element as dynamic 31696 el.hasBindings = true; // modifiers 31697 31698 modifiers = parseModifiers(name.replace(dirRE, '')); // support .foo shorthand syntax for the .prop modifier 31699 31700 if (modifiers) { 31701 name = name.replace(modifierRE, ''); 31702 } 31703 31704 if (bindRE.test(name)) { 31705 // v-bind 31706 name = name.replace(bindRE, ''); 31707 value = parseFilters(value); 31708 isDynamic = dynamicArgRE.test(name); 31709 31710 if (isDynamic) { 31711 name = name.slice(1, -1); 31712 } 31713 31714 if ( true && value.trim().length === 0) { 31715 warn$2("The value for a v-bind expression cannot be empty. Found in \"v-bind:" + name + "\""); 31716 } 31717 31718 if (modifiers) { 31719 if (modifiers.prop && !isDynamic) { 31720 name = camelize(name); 31721 31722 if (name === 'innerHtml') { 31723 name = 'innerHTML'; 31724 } 31725 } 31726 31727 if (modifiers.camel && !isDynamic) { 31728 name = camelize(name); 31729 } 31730 31731 if (modifiers.sync) { 31732 syncGen = genAssignmentCode(value, "$event"); 31733 31734 if (!isDynamic) { 31735 addHandler(el, "update:" + camelize(name), syncGen, null, false, warn$2, list[i]); 31736 31737 if (hyphenate(name) !== camelize(name)) { 31738 addHandler(el, "update:" + hyphenate(name), syncGen, null, false, warn$2, list[i]); 31739 } 31740 } else { 31741 // handler w/ dynamic event name 31742 addHandler(el, "\"update:\"+(" + name + ")", syncGen, null, false, warn$2, list[i], true // dynamic 31743 ); 31744 } 31745 } 31746 } 31747 31748 if (modifiers && modifiers.prop || !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)) { 31749 addProp(el, name, value, list[i], isDynamic); 31750 } else { 31751 addAttr(el, name, value, list[i], isDynamic); 31752 } 31753 } else if (onRE.test(name)) { 31754 // v-on 31755 name = name.replace(onRE, ''); 31756 isDynamic = dynamicArgRE.test(name); 31757 31758 if (isDynamic) { 31759 name = name.slice(1, -1); 31760 } 31761 31762 addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic); 31763 } else { 31764 // normal directives 31765 name = name.replace(dirRE, ''); // parse arg 31766 31767 var argMatch = name.match(argRE); 31768 var arg = argMatch && argMatch[1]; 31769 isDynamic = false; 31770 31771 if (arg) { 31772 name = name.slice(0, -(arg.length + 1)); 31773 31774 if (dynamicArgRE.test(arg)) { 31775 arg = arg.slice(1, -1); 31776 isDynamic = true; 31777 } 31778 } 31779 31780 addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]); 31781 31782 if ( true && name === 'model') { 31783 checkForAliasModel(el, value); 31784 } 31785 } 31786 } else { 31787 // literal attribute 31788 if (true) { 31789 var res = parseText(value, delimiters); 31790 31791 if (res) { 31792 warn$2(name + "=\"" + value + "\": " + 'Interpolation inside attributes has been removed. ' + 'Use v-bind or the colon shorthand instead. For example, ' + 'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]); 31793 } 31794 } 31795 31796 addAttr(el, name, JSON.stringify(value), list[i]); // #6887 firefox doesn't update muted state if set via attribute 31797 // even immediately after element creation 31798 31799 if (!el.component && name === 'muted' && platformMustUseProp(el.tag, el.attrsMap.type, name)) { 31800 addProp(el, name, 'true', list[i]); 31801 } 31802 } 31803 } 31804} 31805 31806function checkInFor(el) { 31807 var parent = el; 31808 31809 while (parent) { 31810 if (parent.for !== undefined) { 31811 return true; 31812 } 31813 31814 parent = parent.parent; 31815 } 31816 31817 return false; 31818} 31819 31820function parseModifiers(name) { 31821 var match = name.match(modifierRE); 31822 31823 if (match) { 31824 var ret = {}; 31825 match.forEach(function (m) { 31826 ret[m.slice(1)] = true; 31827 }); 31828 return ret; 31829 } 31830} 31831 31832function makeAttrsMap(attrs) { 31833 var map = {}; 31834 31835 for (var i = 0, l = attrs.length; i < l; i++) { 31836 if ( true && map[attrs[i].name] && !isIE && !isEdge) { 31837 warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]); 31838 } 31839 31840 map[attrs[i].name] = attrs[i].value; 31841 } 31842 31843 return map; 31844} // for script (e.g. type="x/template") or style, do not decode content 31845 31846 31847function isTextTag(el) { 31848 return el.tag === 'script' || el.tag === 'style'; 31849} 31850 31851function isForbiddenTag(el) { 31852 return el.tag === 'style' || el.tag === 'script' && (!el.attrsMap.type || el.attrsMap.type === 'text/javascript'); 31853} 31854 31855var ieNSBug = /^xmlns:NS\d+/; 31856var ieNSPrefix = /^NS\d+:/; 31857/* istanbul ignore next */ 31858 31859function guardIESVGBug(attrs) { 31860 var res = []; 31861 31862 for (var i = 0; i < attrs.length; i++) { 31863 var attr = attrs[i]; 31864 31865 if (!ieNSBug.test(attr.name)) { 31866 attr.name = attr.name.replace(ieNSPrefix, ''); 31867 res.push(attr); 31868 } 31869 } 31870 31871 return res; 31872} 31873 31874function checkForAliasModel(el, value) { 31875 var _el = el; 31876 31877 while (_el) { 31878 if (_el.for && _el.alias === value) { 31879 warn$2("<" + el.tag + " v-model=\"" + value + "\">: " + "You are binding v-model directly to a v-for iteration alias. " + "This will not be able to modify the v-for source array because " + "writing to the alias is like modifying a function local variable. " + "Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']); 31880 } 31881 31882 _el = _el.parent; 31883 } 31884} 31885/* */ 31886 31887 31888function preTransformNode(el, options) { 31889 if (el.tag === 'input') { 31890 var map = el.attrsMap; 31891 31892 if (!map['v-model']) { 31893 return; 31894 } 31895 31896 var typeBinding; 31897 31898 if (map[':type'] || map['v-bind:type']) { 31899 typeBinding = getBindingAttr(el, 'type'); 31900 } 31901 31902 if (!map.type && !typeBinding && map['v-bind']) { 31903 typeBinding = "(" + map['v-bind'] + ").type"; 31904 } 31905 31906 if (typeBinding) { 31907 var ifCondition = getAndRemoveAttr(el, 'v-if', true); 31908 var ifConditionExtra = ifCondition ? "&&(" + ifCondition + ")" : ""; 31909 var hasElse = getAndRemoveAttr(el, 'v-else', true) != null; 31910 var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true); // 1. checkbox 31911 31912 var branch0 = cloneASTElement(el); // process for on the main node 31913 31914 processFor(branch0); 31915 addRawAttr(branch0, 'type', 'checkbox'); 31916 processElement(branch0, options); 31917 branch0.processed = true; // prevent it from double-processed 31918 31919 branch0.if = "(" + typeBinding + ")==='checkbox'" + ifConditionExtra; 31920 addIfCondition(branch0, { 31921 exp: branch0.if, 31922 block: branch0 31923 }); // 2. add radio else-if condition 31924 31925 var branch1 = cloneASTElement(el); 31926 getAndRemoveAttr(branch1, 'v-for', true); 31927 addRawAttr(branch1, 'type', 'radio'); 31928 processElement(branch1, options); 31929 addIfCondition(branch0, { 31930 exp: "(" + typeBinding + ")==='radio'" + ifConditionExtra, 31931 block: branch1 31932 }); // 3. other 31933 31934 var branch2 = cloneASTElement(el); 31935 getAndRemoveAttr(branch2, 'v-for', true); 31936 addRawAttr(branch2, ':type', typeBinding); 31937 processElement(branch2, options); 31938 addIfCondition(branch0, { 31939 exp: ifCondition, 31940 block: branch2 31941 }); 31942 31943 if (hasElse) { 31944 branch0.else = true; 31945 } else if (elseIfCondition) { 31946 branch0.elseif = elseIfCondition; 31947 } 31948 31949 return branch0; 31950 } 31951 } 31952} 31953 31954function cloneASTElement(el) { 31955 return createASTElement(el.tag, el.attrsList.slice(), el.parent); 31956} 31957 31958var model$1 = { 31959 preTransformNode: preTransformNode 31960}; 31961var modules$1 = [klass$1, style$1, model$1]; 31962/* */ 31963 31964function text(el, dir) { 31965 if (dir.value) { 31966 addProp(el, 'textContent', "_s(" + dir.value + ")", dir); 31967 } 31968} 31969/* */ 31970 31971 31972function html(el, dir) { 31973 if (dir.value) { 31974 addProp(el, 'innerHTML', "_s(" + dir.value + ")", dir); 31975 } 31976} 31977 31978var directives$1 = { 31979 model: model, 31980 text: text, 31981 html: html 31982}; 31983/* */ 31984 31985var baseOptions = { 31986 expectHTML: true, 31987 modules: modules$1, 31988 directives: directives$1, 31989 isPreTag: isPreTag, 31990 isUnaryTag: isUnaryTag, 31991 mustUseProp: mustUseProp, 31992 canBeLeftOpenTag: canBeLeftOpenTag, 31993 isReservedTag: isReservedTag, 31994 getTagNamespace: getTagNamespace, 31995 staticKeys: genStaticKeys(modules$1) 31996}; 31997/* */ 31998 31999var isStaticKey; 32000var isPlatformReservedTag; 32001var genStaticKeysCached = cached(genStaticKeys$1); 32002/** 32003 * Goal of the optimizer: walk the generated template AST tree 32004 * and detect sub-trees that are purely static, i.e. parts of 32005 * the DOM that never needs to change. 32006 * 32007 * Once we detect these sub-trees, we can: 32008 * 32009 * 1. Hoist them into constants, so that we no longer need to 32010 * create fresh nodes for them on each re-render; 32011 * 2. Completely skip them in the patching process. 32012 */ 32013 32014function optimize(root, options) { 32015 if (!root) { 32016 return; 32017 } 32018 32019 isStaticKey = genStaticKeysCached(options.staticKeys || ''); 32020 isPlatformReservedTag = options.isReservedTag || no; // first pass: mark all non-static nodes. 32021 32022 markStatic$1(root); // second pass: mark static roots. 32023 32024 markStaticRoots(root, false); 32025} 32026 32027function genStaticKeys$1(keys) { 32028 return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' + (keys ? ',' + keys : '')); 32029} 32030 32031function markStatic$1(node) { 32032 node.static = isStatic(node); 32033 32034 if (node.type === 1) { 32035 // do not make component slot content static. this avoids 32036 // 1. components not able to mutate slot nodes 32037 // 2. static slot content fails for hot-reloading 32038 if (!isPlatformReservedTag(node.tag) && node.tag !== 'slot' && node.attrsMap['inline-template'] == null) { 32039 return; 32040 } 32041 32042 for (var i = 0, l = node.children.length; i < l; i++) { 32043 var child = node.children[i]; 32044 markStatic$1(child); 32045 32046 if (!child.static) { 32047 node.static = false; 32048 } 32049 } 32050 32051 if (node.ifConditions) { 32052 for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) { 32053 var block = node.ifConditions[i$1].block; 32054 markStatic$1(block); 32055 32056 if (!block.static) { 32057 node.static = false; 32058 } 32059 } 32060 } 32061 } 32062} 32063 32064function markStaticRoots(node, isInFor) { 32065 if (node.type === 1) { 32066 if (node.static || node.once) { 32067 node.staticInFor = isInFor; 32068 } // For a node to qualify as a static root, it should have children that 32069 // are not just static text. Otherwise the cost of hoisting out will 32070 // outweigh the benefits and it's better off to just always render it fresh. 32071 32072 32073 if (node.static && node.children.length && !(node.children.length === 1 && node.children[0].type === 3)) { 32074 node.staticRoot = true; 32075 return; 32076 } else { 32077 node.staticRoot = false; 32078 } 32079 32080 if (node.children) { 32081 for (var i = 0, l = node.children.length; i < l; i++) { 32082 markStaticRoots(node.children[i], isInFor || !!node.for); 32083 } 32084 } 32085 32086 if (node.ifConditions) { 32087 for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) { 32088 markStaticRoots(node.ifConditions[i$1].block, isInFor); 32089 } 32090 } 32091 } 32092} 32093 32094function isStatic(node) { 32095 if (node.type === 2) { 32096 // expression 32097 return false; 32098 } 32099 32100 if (node.type === 3) { 32101 // text 32102 return true; 32103 } 32104 32105 return !!(node.pre || !node.hasBindings && // no dynamic bindings 32106 !node.if && !node.for && // not v-if or v-for or v-else 32107 !isBuiltInTag(node.tag) && // not a built-in 32108 isPlatformReservedTag(node.tag) && // not a component 32109 !isDirectChildOfTemplateFor(node) && Object.keys(node).every(isStaticKey)); 32110} 32111 32112function isDirectChildOfTemplateFor(node) { 32113 while (node.parent) { 32114 node = node.parent; 32115 32116 if (node.tag !== 'template') { 32117 return false; 32118 } 32119 32120 if (node.for) { 32121 return true; 32122 } 32123 } 32124 32125 return false; 32126} 32127/* */ 32128 32129 32130var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/; 32131var fnInvokeRE = /\([^)]*?\);*$/; 32132var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/; // KeyboardEvent.keyCode aliases 32133 32134var keyCodes = { 32135 esc: 27, 32136 tab: 9, 32137 enter: 13, 32138 space: 32, 32139 up: 38, 32140 left: 37, 32141 right: 39, 32142 down: 40, 32143 'delete': [8, 46] 32144}; // KeyboardEvent.key aliases 32145 32146var keyNames = { 32147 // #7880: IE11 and Edge use `Esc` for Escape key name. 32148 esc: ['Esc', 'Escape'], 32149 tab: 'Tab', 32150 enter: 'Enter', 32151 // #9112: IE11 uses `Spacebar` for Space key name. 32152 space: [' ', 'Spacebar'], 32153 // #7806: IE11 uses key names without `Arrow` prefix for arrow keys. 32154 up: ['Up', 'ArrowUp'], 32155 left: ['Left', 'ArrowLeft'], 32156 right: ['Right', 'ArrowRight'], 32157 down: ['Down', 'ArrowDown'], 32158 // #9112: IE11 uses `Del` for Delete key name. 32159 'delete': ['Backspace', 'Delete', 'Del'] 32160}; // #4868: modifiers that prevent the execution of the listener 32161// need to explicitly return null so that we can determine whether to remove 32162// the listener for .once 32163 32164var genGuard = function (condition) { 32165 return "if(" + condition + ")return null;"; 32166}; 32167 32168var modifierCode = { 32169 stop: '$event.stopPropagation();', 32170 prevent: '$event.preventDefault();', 32171 self: genGuard("$event.target !== $event.currentTarget"), 32172 ctrl: genGuard("!$event.ctrlKey"), 32173 shift: genGuard("!$event.shiftKey"), 32174 alt: genGuard("!$event.altKey"), 32175 meta: genGuard("!$event.metaKey"), 32176 left: genGuard("'button' in $event && $event.button !== 0"), 32177 middle: genGuard("'button' in $event && $event.button !== 1"), 32178 right: genGuard("'button' in $event && $event.button !== 2") 32179}; 32180 32181function genHandlers(events, isNative) { 32182 var prefix = isNative ? 'nativeOn:' : 'on:'; 32183 var staticHandlers = ""; 32184 var dynamicHandlers = ""; 32185 32186 for (var name in events) { 32187 var handlerCode = genHandler(events[name]); 32188 32189 if (events[name] && events[name].dynamic) { 32190 dynamicHandlers += name + "," + handlerCode + ","; 32191 } else { 32192 staticHandlers += "\"" + name + "\":" + handlerCode + ","; 32193 } 32194 } 32195 32196 staticHandlers = "{" + staticHandlers.slice(0, -1) + "}"; 32197 32198 if (dynamicHandlers) { 32199 return prefix + "_d(" + staticHandlers + ",[" + dynamicHandlers.slice(0, -1) + "])"; 32200 } else { 32201 return prefix + staticHandlers; 32202 } 32203} 32204 32205function genHandler(handler) { 32206 if (!handler) { 32207 return 'function(){}'; 32208 } 32209 32210 if (Array.isArray(handler)) { 32211 return "[" + handler.map(function (handler) { 32212 return genHandler(handler); 32213 }).join(',') + "]"; 32214 } 32215 32216 var isMethodPath = simplePathRE.test(handler.value); 32217 var isFunctionExpression = fnExpRE.test(handler.value); 32218 var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, '')); 32219 32220 if (!handler.modifiers) { 32221 if (isMethodPath || isFunctionExpression) { 32222 return handler.value; 32223 } 32224 32225 return "function($event){" + (isFunctionInvocation ? "return " + handler.value : handler.value) + "}"; // inline statement 32226 } else { 32227 var code = ''; 32228 var genModifierCode = ''; 32229 var keys = []; 32230 32231 for (var key in handler.modifiers) { 32232 if (modifierCode[key]) { 32233 genModifierCode += modifierCode[key]; // left/right 32234 32235 if (keyCodes[key]) { 32236 keys.push(key); 32237 } 32238 } else if (key === 'exact') { 32239 var modifiers = handler.modifiers; 32240 genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta'].filter(function (keyModifier) { 32241 return !modifiers[keyModifier]; 32242 }).map(function (keyModifier) { 32243 return "$event." + keyModifier + "Key"; 32244 }).join('||')); 32245 } else { 32246 keys.push(key); 32247 } 32248 } 32249 32250 if (keys.length) { 32251 code += genKeyFilter(keys); 32252 } // Make sure modifiers like prevent and stop get executed after key filtering 32253 32254 32255 if (genModifierCode) { 32256 code += genModifierCode; 32257 } 32258 32259 var handlerCode = isMethodPath ? "return " + handler.value + "($event)" : isFunctionExpression ? "return (" + handler.value + ")($event)" : isFunctionInvocation ? "return " + handler.value : handler.value; 32260 return "function($event){" + code + handlerCode + "}"; 32261 } 32262} 32263 32264function genKeyFilter(keys) { 32265 return (// make sure the key filters only apply to KeyboardEvents 32266 // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake 32267 // key events that do not have keyCode property... 32268 "if(!$event.type.indexOf('key')&&" + keys.map(genFilterCode).join('&&') + ")return null;" 32269 ); 32270} 32271 32272function genFilterCode(key) { 32273 var keyVal = parseInt(key, 10); 32274 32275 if (keyVal) { 32276 return "$event.keyCode!==" + keyVal; 32277 } 32278 32279 var keyCode = keyCodes[key]; 32280 var keyName = keyNames[key]; 32281 return "_k($event.keyCode," + JSON.stringify(key) + "," + JSON.stringify(keyCode) + "," + "$event.key," + "" + JSON.stringify(keyName) + ")"; 32282} 32283/* */ 32284 32285 32286function on(el, dir) { 32287 if ( true && dir.modifiers) { 32288 warn("v-on without argument does not support modifiers."); 32289 } 32290 32291 el.wrapListeners = function (code) { 32292 return "_g(" + code + "," + dir.value + ")"; 32293 }; 32294} 32295/* */ 32296 32297 32298function bind$1(el, dir) { 32299 el.wrapData = function (code) { 32300 return "_b(" + code + ",'" + el.tag + "'," + dir.value + "," + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + ")"; 32301 }; 32302} 32303/* */ 32304 32305 32306var baseDirectives = { 32307 on: on, 32308 bind: bind$1, 32309 cloak: noop 32310}; 32311/* */ 32312 32313var CodegenState = function CodegenState(options) { 32314 this.options = options; 32315 this.warn = options.warn || baseWarn; 32316 this.transforms = pluckModuleFunction(options.modules, 'transformCode'); 32317 this.dataGenFns = pluckModuleFunction(options.modules, 'genData'); 32318 this.directives = extend(extend({}, baseDirectives), options.directives); 32319 var isReservedTag = options.isReservedTag || no; 32320 32321 this.maybeComponent = function (el) { 32322 return !!el.component || !isReservedTag(el.tag); 32323 }; 32324 32325 this.onceId = 0; 32326 this.staticRenderFns = []; 32327 this.pre = false; 32328}; 32329 32330function generate(ast, options) { 32331 var state = new CodegenState(options); 32332 var code = ast ? genElement(ast, state) : '_c("div")'; 32333 return { 32334 render: "with(this){return " + code + "}", 32335 staticRenderFns: state.staticRenderFns 32336 }; 32337} 32338 32339function genElement(el, state) { 32340 if (el.parent) { 32341 el.pre = el.pre || el.parent.pre; 32342 } 32343 32344 if (el.staticRoot && !el.staticProcessed) { 32345 return genStatic(el, state); 32346 } else if (el.once && !el.onceProcessed) { 32347 return genOnce(el, state); 32348 } else if (el.for && !el.forProcessed) { 32349 return genFor(el, state); 32350 } else if (el.if && !el.ifProcessed) { 32351 return genIf(el, state); 32352 } else if (el.tag === 'template' && !el.slotTarget && !state.pre) { 32353 return genChildren(el, state) || 'void 0'; 32354 } else if (el.tag === 'slot') { 32355 return genSlot(el, state); 32356 } else { 32357 // component or element 32358 var code; 32359 32360 if (el.component) { 32361 code = genComponent(el.component, el, state); 32362 } else { 32363 var data; 32364 32365 if (!el.plain || el.pre && state.maybeComponent(el)) { 32366 data = genData$2(el, state); 32367 } 32368 32369 var children = el.inlineTemplate ? null : genChildren(el, state, true); 32370 code = "_c('" + el.tag + "'" + (data ? "," + data : '') + (children ? "," + children : '') + ")"; 32371 } // module transforms 32372 32373 32374 for (var i = 0; i < state.transforms.length; i++) { 32375 code = state.transforms[i](el, code); 32376 } 32377 32378 return code; 32379 } 32380} // hoist static sub-trees out 32381 32382 32383function genStatic(el, state) { 32384 el.staticProcessed = true; // Some elements (templates) need to behave differently inside of a v-pre 32385 // node. All pre nodes are static roots, so we can use this as a location to 32386 // wrap a state change and reset it upon exiting the pre node. 32387 32388 var originalPreState = state.pre; 32389 32390 if (el.pre) { 32391 state.pre = el.pre; 32392 } 32393 32394 state.staticRenderFns.push("with(this){return " + genElement(el, state) + "}"); 32395 state.pre = originalPreState; 32396 return "_m(" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + ")"; 32397} // v-once 32398 32399 32400function genOnce(el, state) { 32401 el.onceProcessed = true; 32402 32403 if (el.if && !el.ifProcessed) { 32404 return genIf(el, state); 32405 } else if (el.staticInFor) { 32406 var key = ''; 32407 var parent = el.parent; 32408 32409 while (parent) { 32410 if (parent.for) { 32411 key = parent.key; 32412 break; 32413 } 32414 32415 parent = parent.parent; 32416 } 32417 32418 if (!key) { 32419 true && state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']); 32420 return genElement(el, state); 32421 } 32422 32423 return "_o(" + genElement(el, state) + "," + state.onceId++ + "," + key + ")"; 32424 } else { 32425 return genStatic(el, state); 32426 } 32427} 32428 32429function genIf(el, state, altGen, altEmpty) { 32430 el.ifProcessed = true; // avoid recursion 32431 32432 return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty); 32433} 32434 32435function genIfConditions(conditions, state, altGen, altEmpty) { 32436 if (!conditions.length) { 32437 return altEmpty || '_e()'; 32438 } 32439 32440 var condition = conditions.shift(); 32441 32442 if (condition.exp) { 32443 return "(" + condition.exp + ")?" + genTernaryExp(condition.block) + ":" + genIfConditions(conditions, state, altGen, altEmpty); 32444 } else { 32445 return "" + genTernaryExp(condition.block); 32446 } // v-if with v-once should generate code like (a)?_m(0):_m(1) 32447 32448 32449 function genTernaryExp(el) { 32450 return altGen ? altGen(el, state) : el.once ? genOnce(el, state) : genElement(el, state); 32451 } 32452} 32453 32454function genFor(el, state, altGen, altHelper) { 32455 var exp = el.for; 32456 var alias = el.alias; 32457 var iterator1 = el.iterator1 ? "," + el.iterator1 : ''; 32458 var iterator2 = el.iterator2 ? "," + el.iterator2 : ''; 32459 32460 if ( true && state.maybeComponent(el) && el.tag !== 'slot' && el.tag !== 'template' && !el.key) { 32461 state.warn("<" + el.tag + " v-for=\"" + alias + " in " + exp + "\">: component lists rendered with " + "v-for should have explicit keys. " + "See https://vuejs.org/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true 32462 /* tip */ 32463 ); 32464 } 32465 32466 el.forProcessed = true; // avoid recursion 32467 32468 return (altHelper || '_l') + "((" + exp + ")," + "function(" + alias + iterator1 + iterator2 + "){" + "return " + (altGen || genElement)(el, state) + '})'; 32469} 32470 32471function genData$2(el, state) { 32472 var data = '{'; // directives first. 32473 // directives may mutate the el's other properties before they are generated. 32474 32475 var dirs = genDirectives(el, state); 32476 32477 if (dirs) { 32478 data += dirs + ','; 32479 } // key 32480 32481 32482 if (el.key) { 32483 data += "key:" + el.key + ","; 32484 } // ref 32485 32486 32487 if (el.ref) { 32488 data += "ref:" + el.ref + ","; 32489 } 32490 32491 if (el.refInFor) { 32492 data += "refInFor:true,"; 32493 } // pre 32494 32495 32496 if (el.pre) { 32497 data += "pre:true,"; 32498 } // record original tag name for components using "is" attribute 32499 32500 32501 if (el.component) { 32502 data += "tag:\"" + el.tag + "\","; 32503 } // module data generation functions 32504 32505 32506 for (var i = 0; i < state.dataGenFns.length; i++) { 32507 data += state.dataGenFns[i](el); 32508 } // attributes 32509 32510 32511 if (el.attrs) { 32512 data += "attrs:" + genProps(el.attrs) + ","; 32513 } // DOM props 32514 32515 32516 if (el.props) { 32517 data += "domProps:" + genProps(el.props) + ","; 32518 } // event handlers 32519 32520 32521 if (el.events) { 32522 data += genHandlers(el.events, false) + ","; 32523 } 32524 32525 if (el.nativeEvents) { 32526 data += genHandlers(el.nativeEvents, true) + ","; 32527 } // slot target 32528 // only for non-scoped slots 32529 32530 32531 if (el.slotTarget && !el.slotScope) { 32532 data += "slot:" + el.slotTarget + ","; 32533 } // scoped slots 32534 32535 32536 if (el.scopedSlots) { 32537 data += genScopedSlots(el, el.scopedSlots, state) + ","; 32538 } // component v-model 32539 32540 32541 if (el.model) { 32542 data += "model:{value:" + el.model.value + ",callback:" + el.model.callback + ",expression:" + el.model.expression + "},"; 32543 } // inline-template 32544 32545 32546 if (el.inlineTemplate) { 32547 var inlineTemplate = genInlineTemplate(el, state); 32548 32549 if (inlineTemplate) { 32550 data += inlineTemplate + ","; 32551 } 32552 } 32553 32554 data = data.replace(/,$/, '') + '}'; // v-bind dynamic argument wrap 32555 // v-bind with dynamic arguments must be applied using the same v-bind object 32556 // merge helper so that class/style/mustUseProp attrs are handled correctly. 32557 32558 if (el.dynamicAttrs) { 32559 data = "_b(" + data + ",\"" + el.tag + "\"," + genProps(el.dynamicAttrs) + ")"; 32560 } // v-bind data wrap 32561 32562 32563 if (el.wrapData) { 32564 data = el.wrapData(data); 32565 } // v-on data wrap 32566 32567 32568 if (el.wrapListeners) { 32569 data = el.wrapListeners(data); 32570 } 32571 32572 return data; 32573} 32574 32575function genDirectives(el, state) { 32576 var dirs = el.directives; 32577 32578 if (!dirs) { 32579 return; 32580 } 32581 32582 var res = 'directives:['; 32583 var hasRuntime = false; 32584 var i, l, dir, needRuntime; 32585 32586 for (i = 0, l = dirs.length; i < l; i++) { 32587 dir = dirs[i]; 32588 needRuntime = true; 32589 var gen = state.directives[dir.name]; 32590 32591 if (gen) { 32592 // compile-time directive that manipulates AST. 32593 // returns true if it also needs a runtime counterpart. 32594 needRuntime = !!gen(el, dir, state.warn); 32595 } 32596 32597 if (needRuntime) { 32598 hasRuntime = true; 32599 res += "{name:\"" + dir.name + "\",rawName:\"" + dir.rawName + "\"" + (dir.value ? ",value:(" + dir.value + "),expression:" + JSON.stringify(dir.value) : '') + (dir.arg ? ",arg:" + (dir.isDynamicArg ? dir.arg : "\"" + dir.arg + "\"") : '') + (dir.modifiers ? ",modifiers:" + JSON.stringify(dir.modifiers) : '') + "},"; 32600 } 32601 } 32602 32603 if (hasRuntime) { 32604 return res.slice(0, -1) + ']'; 32605 } 32606} 32607 32608function genInlineTemplate(el, state) { 32609 var ast = el.children[0]; 32610 32611 if ( true && (el.children.length !== 1 || ast.type !== 1)) { 32612 state.warn('Inline-template components must have exactly one child element.', { 32613 start: el.start 32614 }); 32615 } 32616 32617 if (ast && ast.type === 1) { 32618 var inlineRenderFns = generate(ast, state.options); 32619 return "inlineTemplate:{render:function(){" + inlineRenderFns.render + "},staticRenderFns:[" + inlineRenderFns.staticRenderFns.map(function (code) { 32620 return "function(){" + code + "}"; 32621 }).join(',') + "]}"; 32622 } 32623} 32624 32625function genScopedSlots(el, slots, state) { 32626 // by default scoped slots are considered "stable", this allows child 32627 // components with only scoped slots to skip forced updates from parent. 32628 // but in some cases we have to bail-out of this optimization 32629 // for example if the slot contains dynamic names, has v-if or v-for on them... 32630 var needsForceUpdate = el.for || Object.keys(slots).some(function (key) { 32631 var slot = slots[key]; 32632 return slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic 32633 ; 32634 }); // #9534: if a component with scoped slots is inside a conditional branch, 32635 // it's possible for the same component to be reused but with different 32636 // compiled slot content. To avoid that, we generate a unique key based on 32637 // the generated code of all the slot contents. 32638 32639 var needsKey = !!el.if; // OR when it is inside another scoped slot or v-for (the reactivity may be 32640 // disconnected due to the intermediate scope variable) 32641 // #9438, #9506 32642 // TODO: this can be further optimized by properly analyzing in-scope bindings 32643 // and skip force updating ones that do not actually use scope variables. 32644 32645 if (!needsForceUpdate) { 32646 var parent = el.parent; 32647 32648 while (parent) { 32649 if (parent.slotScope && parent.slotScope !== emptySlotScopeToken || parent.for) { 32650 needsForceUpdate = true; 32651 break; 32652 } 32653 32654 if (parent.if) { 32655 needsKey = true; 32656 } 32657 32658 parent = parent.parent; 32659 } 32660 } 32661 32662 var generatedSlots = Object.keys(slots).map(function (key) { 32663 return genScopedSlot(slots[key], state); 32664 }).join(','); 32665 return "scopedSlots:_u([" + generatedSlots + "]" + (needsForceUpdate ? ",null,true" : "") + (!needsForceUpdate && needsKey ? ",null,false," + hash(generatedSlots) : "") + ")"; 32666} 32667 32668function hash(str) { 32669 var hash = 5381; 32670 var i = str.length; 32671 32672 while (i) { 32673 hash = hash * 33 ^ str.charCodeAt(--i); 32674 } 32675 32676 return hash >>> 0; 32677} 32678 32679function containsSlotChild(el) { 32680 if (el.type === 1) { 32681 if (el.tag === 'slot') { 32682 return true; 32683 } 32684 32685 return el.children.some(containsSlotChild); 32686 } 32687 32688 return false; 32689} 32690 32691function genScopedSlot(el, state) { 32692 var isLegacySyntax = el.attrsMap['slot-scope']; 32693 32694 if (el.if && !el.ifProcessed && !isLegacySyntax) { 32695 return genIf(el, state, genScopedSlot, "null"); 32696 } 32697 32698 if (el.for && !el.forProcessed) { 32699 return genFor(el, state, genScopedSlot); 32700 } 32701 32702 var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope); 32703 var fn = "function(" + slotScope + "){" + "return " + (el.tag === 'template' ? el.if && isLegacySyntax ? "(" + el.if + ")?" + (genChildren(el, state) || 'undefined') + ":undefined" : genChildren(el, state) || 'undefined' : genElement(el, state)) + "}"; // reverse proxy v-slot without scope on this.$slots 32704 32705 var reverseProxy = slotScope ? "" : ",proxy:true"; 32706 return "{key:" + (el.slotTarget || "\"default\"") + ",fn:" + fn + reverseProxy + "}"; 32707} 32708 32709function genChildren(el, state, checkSkip, altGenElement, altGenNode) { 32710 var children = el.children; 32711 32712 if (children.length) { 32713 var el$1 = children[0]; // optimize single v-for 32714 32715 if (children.length === 1 && el$1.for && el$1.tag !== 'template' && el$1.tag !== 'slot') { 32716 var normalizationType = checkSkip ? state.maybeComponent(el$1) ? ",1" : ",0" : ""; 32717 return "" + (altGenElement || genElement)(el$1, state) + normalizationType; 32718 } 32719 32720 var normalizationType$1 = checkSkip ? getNormalizationType(children, state.maybeComponent) : 0; 32721 var gen = altGenNode || genNode; 32722 return "[" + children.map(function (c) { 32723 return gen(c, state); 32724 }).join(',') + "]" + (normalizationType$1 ? "," + normalizationType$1 : ''); 32725 } 32726} // determine the normalization needed for the children array. 32727// 0: no normalization needed 32728// 1: simple normalization needed (possible 1-level deep nested array) 32729// 2: full normalization needed 32730 32731 32732function getNormalizationType(children, maybeComponent) { 32733 var res = 0; 32734 32735 for (var i = 0; i < children.length; i++) { 32736 var el = children[i]; 32737 32738 if (el.type !== 1) { 32739 continue; 32740 } 32741 32742 if (needsNormalization(el) || el.ifConditions && el.ifConditions.some(function (c) { 32743 return needsNormalization(c.block); 32744 })) { 32745 res = 2; 32746 break; 32747 } 32748 32749 if (maybeComponent(el) || el.ifConditions && el.ifConditions.some(function (c) { 32750 return maybeComponent(c.block); 32751 })) { 32752 res = 1; 32753 } 32754 } 32755 32756 return res; 32757} 32758 32759function needsNormalization(el) { 32760 return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'; 32761} 32762 32763function genNode(node, state) { 32764 if (node.type === 1) { 32765 return genElement(node, state); 32766 } else if (node.type === 3 && node.isComment) { 32767 return genComment(node); 32768 } else { 32769 return genText(node); 32770 } 32771} 32772 32773function genText(text) { 32774 return "_v(" + (text.type === 2 ? text.expression // no need for () because already wrapped in _s() 32775 : transformSpecialNewlines(JSON.stringify(text.text))) + ")"; 32776} 32777 32778function genComment(comment) { 32779 return "_e(" + JSON.stringify(comment.text) + ")"; 32780} 32781 32782function genSlot(el, state) { 32783 var slotName = el.slotName || '"default"'; 32784 var children = genChildren(el, state); 32785 var res = "_t(" + slotName + (children ? "," + children : ''); 32786 var attrs = el.attrs || el.dynamicAttrs ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { 32787 return { 32788 // slot props are camelized 32789 name: camelize(attr.name), 32790 value: attr.value, 32791 dynamic: attr.dynamic 32792 }; 32793 })) : null; 32794 var bind$$1 = el.attrsMap['v-bind']; 32795 32796 if ((attrs || bind$$1) && !children) { 32797 res += ",null"; 32798 } 32799 32800 if (attrs) { 32801 res += "," + attrs; 32802 } 32803 32804 if (bind$$1) { 32805 res += (attrs ? '' : ',null') + "," + bind$$1; 32806 } 32807 32808 return res + ')'; 32809} // componentName is el.component, take it as argument to shun flow's pessimistic refinement 32810 32811 32812function genComponent(componentName, el, state) { 32813 var children = el.inlineTemplate ? null : genChildren(el, state, true); 32814 return "_c(" + componentName + "," + genData$2(el, state) + (children ? "," + children : '') + ")"; 32815} 32816 32817function genProps(props) { 32818 var staticProps = ""; 32819 var dynamicProps = ""; 32820 32821 for (var i = 0; i < props.length; i++) { 32822 var prop = props[i]; 32823 var value = transformSpecialNewlines(prop.value); 32824 32825 if (prop.dynamic) { 32826 dynamicProps += prop.name + "," + value + ","; 32827 } else { 32828 staticProps += "\"" + prop.name + "\":" + value + ","; 32829 } 32830 } 32831 32832 staticProps = "{" + staticProps.slice(0, -1) + "}"; 32833 32834 if (dynamicProps) { 32835 return "_d(" + staticProps + ",[" + dynamicProps.slice(0, -1) + "])"; 32836 } else { 32837 return staticProps; 32838 } 32839} // #3895, #4268 32840 32841 32842function transformSpecialNewlines(text) { 32843 return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029'); 32844} 32845/* */ 32846// these keywords should not appear inside expressions, but operators like 32847// typeof, instanceof and in are allowed 32848 32849 32850var prohibitedKeywordRE = new RegExp('\\b' + ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' + 'super,throw,while,yield,delete,export,import,return,switch,default,' + 'extends,finally,continue,debugger,function,arguments').split(',').join('\\b|\\b') + '\\b'); // these unary operators should not be used as property/method names 32851 32852var unaryOperatorsRE = new RegExp('\\b' + 'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') + '\\s*\\([^\\)]*\\)'); // strip strings in expressions 32853 32854var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g; // detect problematic expressions in a template 32855 32856function detectErrors(ast, warn) { 32857 if (ast) { 32858 checkNode(ast, warn); 32859 } 32860} 32861 32862function checkNode(node, warn) { 32863 if (node.type === 1) { 32864 for (var name in node.attrsMap) { 32865 if (dirRE.test(name)) { 32866 var value = node.attrsMap[name]; 32867 32868 if (value) { 32869 var range = node.rawAttrsMap[name]; 32870 32871 if (name === 'v-for') { 32872 checkFor(node, "v-for=\"" + value + "\"", warn, range); 32873 } else if (name === 'v-slot' || name[0] === '#') { 32874 checkFunctionParameterExpression(value, name + "=\"" + value + "\"", warn, range); 32875 } else if (onRE.test(name)) { 32876 checkEvent(value, name + "=\"" + value + "\"", warn, range); 32877 } else { 32878 checkExpression(value, name + "=\"" + value + "\"", warn, range); 32879 } 32880 } 32881 } 32882 } 32883 32884 if (node.children) { 32885 for (var i = 0; i < node.children.length; i++) { 32886 checkNode(node.children[i], warn); 32887 } 32888 } 32889 } else if (node.type === 2) { 32890 checkExpression(node.expression, node.text, warn, node); 32891 } 32892} 32893 32894function checkEvent(exp, text, warn, range) { 32895 var stripped = exp.replace(stripStringRE, ''); 32896 var keywordMatch = stripped.match(unaryOperatorsRE); 32897 32898 if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') { 32899 warn("avoid using JavaScript unary operator as property name: " + "\"" + keywordMatch[0] + "\" in expression " + text.trim(), range); 32900 } 32901 32902 checkExpression(exp, text, warn, range); 32903} 32904 32905function checkFor(node, text, warn, range) { 32906 checkExpression(node.for || '', text, warn, range); 32907 checkIdentifier(node.alias, 'v-for alias', text, warn, range); 32908 checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range); 32909 checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range); 32910} 32911 32912function checkIdentifier(ident, type, text, warn, range) { 32913 if (typeof ident === 'string') { 32914 try { 32915 new Function("var " + ident + "=_"); 32916 } catch (e) { 32917 warn("invalid " + type + " \"" + ident + "\" in expression: " + text.trim(), range); 32918 } 32919 } 32920} 32921 32922function checkExpression(exp, text, warn, range) { 32923 try { 32924 new Function("return " + exp); 32925 } catch (e) { 32926 var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE); 32927 32928 if (keywordMatch) { 32929 warn("avoid using JavaScript keyword as property name: " + "\"" + keywordMatch[0] + "\"\n Raw expression: " + text.trim(), range); 32930 } else { 32931 warn("invalid expression: " + e.message + " in\n\n" + " " + exp + "\n\n" + " Raw expression: " + text.trim() + "\n", range); 32932 } 32933 } 32934} 32935 32936function checkFunctionParameterExpression(exp, text, warn, range) { 32937 try { 32938 new Function(exp, ''); 32939 } catch (e) { 32940 warn("invalid function parameter expression: " + e.message + " in\n\n" + " " + exp + "\n\n" + " Raw expression: " + text.trim() + "\n", range); 32941 } 32942} 32943/* */ 32944 32945 32946var range = 2; 32947 32948function generateCodeFrame(source, start, end) { 32949 if (start === void 0) start = 0; 32950 if (end === void 0) end = source.length; 32951 var lines = source.split(/\r?\n/); 32952 var count = 0; 32953 var res = []; 32954 32955 for (var i = 0; i < lines.length; i++) { 32956 count += lines[i].length + 1; 32957 32958 if (count >= start) { 32959 for (var j = i - range; j <= i + range || end > count; j++) { 32960 if (j < 0 || j >= lines.length) { 32961 continue; 32962 } 32963 32964 res.push("" + (j + 1) + repeat$1(" ", 3 - String(j + 1).length) + "| " + lines[j]); 32965 var lineLength = lines[j].length; 32966 32967 if (j === i) { 32968 // push underline 32969 var pad = start - (count - lineLength) + 1; 32970 var length = end > count ? lineLength - pad : end - start; 32971 res.push(" | " + repeat$1(" ", pad) + repeat$1("^", length)); 32972 } else if (j > i) { 32973 if (end > count) { 32974 var length$1 = Math.min(end - count, lineLength); 32975 res.push(" | " + repeat$1("^", length$1)); 32976 } 32977 32978 count += lineLength + 1; 32979 } 32980 } 32981 32982 break; 32983 } 32984 } 32985 32986 return res.join('\n'); 32987} 32988 32989function repeat$1(str, n) { 32990 var result = ''; 32991 32992 if (n > 0) { 32993 while (true) { 32994 // eslint-disable-line 32995 if (n & 1) { 32996 result += str; 32997 } 32998 32999 n >>>= 1; 33000 33001 if (n <= 0) { 33002 break; 33003 } 33004 33005 str += str; 33006 } 33007 } 33008 33009 return result; 33010} 33011/* */ 33012 33013 33014function createFunction(code, errors) { 33015 try { 33016 return new Function(code); 33017 } catch (err) { 33018 errors.push({ 33019 err: err, 33020 code: code 33021 }); 33022 return noop; 33023 } 33024} 33025 33026function createCompileToFunctionFn(compile) { 33027 var cache = Object.create(null); 33028 return function compileToFunctions(template, options, vm) { 33029 options = extend({}, options); 33030 var warn$$1 = options.warn || warn; 33031 delete options.warn; 33032 /* istanbul ignore if */ 33033 33034 if (true) { 33035 // detect possible CSP restriction 33036 try { 33037 new Function('return 1'); 33038 } catch (e) { 33039 if (e.toString().match(/unsafe-eval|CSP/)) { 33040 warn$$1('It seems you are using the standalone build of Vue.js in an ' + 'environment with Content Security Policy that prohibits unsafe-eval. ' + 'The template compiler cannot work in this environment. Consider ' + 'relaxing the policy to allow unsafe-eval or pre-compiling your ' + 'templates into render functions.'); 33041 } 33042 } 33043 } // check cache 33044 33045 33046 var key = options.delimiters ? String(options.delimiters) + template : template; 33047 33048 if (cache[key]) { 33049 return cache[key]; 33050 } // compile 33051 33052 33053 var compiled = compile(template, options); // check compilation errors/tips 33054 33055 if (true) { 33056 if (compiled.errors && compiled.errors.length) { 33057 if (options.outputSourceRange) { 33058 compiled.errors.forEach(function (e) { 33059 warn$$1("Error compiling template:\n\n" + e.msg + "\n\n" + generateCodeFrame(template, e.start, e.end), vm); 33060 }); 33061 } else { 33062 warn$$1("Error compiling template:\n\n" + template + "\n\n" + compiled.errors.map(function (e) { 33063 return "- " + e; 33064 }).join('\n') + '\n', vm); 33065 } 33066 } 33067 33068 if (compiled.tips && compiled.tips.length) { 33069 if (options.outputSourceRange) { 33070 compiled.tips.forEach(function (e) { 33071 return tip(e.msg, vm); 33072 }); 33073 } else { 33074 compiled.tips.forEach(function (msg) { 33075 return tip(msg, vm); 33076 }); 33077 } 33078 } 33079 } // turn code into functions 33080 33081 33082 var res = {}; 33083 var fnGenErrors = []; 33084 res.render = createFunction(compiled.render, fnGenErrors); 33085 res.staticRenderFns = compiled.staticRenderFns.map(function (code) { 33086 return createFunction(code, fnGenErrors); 33087 }); // check function generation errors. 33088 // this should only happen if there is a bug in the compiler itself. 33089 // mostly for codegen development use 33090 33091 /* istanbul ignore if */ 33092 33093 if (true) { 33094 if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) { 33095 warn$$1("Failed to generate render function:\n\n" + fnGenErrors.map(function (ref) { 33096 var err = ref.err; 33097 var code = ref.code; 33098 return err.toString() + " in\n\n" + code + "\n"; 33099 }).join('\n'), vm); 33100 } 33101 } 33102 33103 return cache[key] = res; 33104 }; 33105} 33106/* */ 33107 33108 33109function createCompilerCreator(baseCompile) { 33110 return function createCompiler(baseOptions) { 33111 function compile(template, options) { 33112 var finalOptions = Object.create(baseOptions); 33113 var errors = []; 33114 var tips = []; 33115 33116 var warn = function (msg, range, tip) { 33117 (tip ? tips : errors).push(msg); 33118 }; 33119 33120 if (options) { 33121 if ( true && options.outputSourceRange) { 33122 // $flow-disable-line 33123 var leadingSpaceLength = template.match(/^\s*/)[0].length; 33124 33125 warn = function (msg, range, tip) { 33126 var data = { 33127 msg: msg 33128 }; 33129 33130 if (range) { 33131 if (range.start != null) { 33132 data.start = range.start + leadingSpaceLength; 33133 } 33134 33135 if (range.end != null) { 33136 data.end = range.end + leadingSpaceLength; 33137 } 33138 } 33139 33140 (tip ? tips : errors).push(data); 33141 }; 33142 } // merge custom modules 33143 33144 33145 if (options.modules) { 33146 finalOptions.modules = (baseOptions.modules || []).concat(options.modules); 33147 } // merge custom directives 33148 33149 33150 if (options.directives) { 33151 finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives); 33152 } // copy other options 33153 33154 33155 for (var key in options) { 33156 if (key !== 'modules' && key !== 'directives') { 33157 finalOptions[key] = options[key]; 33158 } 33159 } 33160 } 33161 33162 finalOptions.warn = warn; 33163 var compiled = baseCompile(template.trim(), finalOptions); 33164 33165 if (true) { 33166 detectErrors(compiled.ast, warn); 33167 } 33168 33169 compiled.errors = errors; 33170 compiled.tips = tips; 33171 return compiled; 33172 } 33173 33174 return { 33175 compile: compile, 33176 compileToFunctions: createCompileToFunctionFn(compile) 33177 }; 33178 }; 33179} 33180/* */ 33181// `createCompilerCreator` allows creating compilers that use alternative 33182// parser/optimizer/codegen, e.g the SSR optimizing compiler. 33183// Here we just export a default compiler using the default parts. 33184 33185 33186var createCompiler = createCompilerCreator(function baseCompile(template, options) { 33187 var ast = parse(template.trim(), options); 33188 33189 if (options.optimize !== false) { 33190 optimize(ast, options); 33191 } 33192 33193 var code = generate(ast, options); 33194 return { 33195 ast: ast, 33196 render: code.render, 33197 staticRenderFns: code.staticRenderFns 33198 }; 33199}); 33200/* */ 33201 33202var ref$1 = createCompiler(baseOptions); 33203var compile = ref$1.compile; 33204var compileToFunctions = ref$1.compileToFunctions; 33205/* */ 33206// check whether current browser encodes a char inside attribute values 33207 33208var div; 33209 33210function getShouldDecode(href) { 33211 div = div || document.createElement('div'); 33212 div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>"; 33213 return div.innerHTML.indexOf(' ') > 0; 33214} // #3663: IE encodes newlines inside attribute values while other browsers don't 33215 33216 33217var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false; // #6828: chrome encodes content in a[href] 33218 33219var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false; 33220/* */ 33221 33222var idToTemplate = cached(function (id) { 33223 var el = query(id); 33224 return el && el.innerHTML; 33225}); 33226var mount = Vue.prototype.$mount; 33227 33228Vue.prototype.$mount = function (el, hydrating) { 33229 el = el && query(el); 33230 /* istanbul ignore if */ 33231 33232 if (el === document.body || el === document.documentElement) { 33233 true && warn("Do not mount Vue to <html> or <body> - mount to normal elements instead."); 33234 return this; 33235 } 33236 33237 var options = this.$options; // resolve template/el and convert to render function 33238 33239 if (!options.render) { 33240 var template = options.template; 33241 33242 if (template) { 33243 if (typeof template === 'string') { 33244 if (template.charAt(0) === '#') { 33245 template = idToTemplate(template); 33246 /* istanbul ignore if */ 33247 33248 if ( true && !template) { 33249 warn("Template element not found or is empty: " + options.template, this); 33250 } 33251 } 33252 } else if (template.nodeType) { 33253 template = template.innerHTML; 33254 } else { 33255 if (true) { 33256 warn('invalid template option:' + template, this); 33257 } 33258 33259 return this; 33260 } 33261 } else if (el) { 33262 template = getOuterHTML(el); 33263 } 33264 33265 if (template) { 33266 /* istanbul ignore if */ 33267 if ( true && config.performance && mark) { 33268 mark('compile'); 33269 } 33270 33271 var ref = compileToFunctions(template, { 33272 outputSourceRange: "development" !== 'production', 33273 shouldDecodeNewlines: shouldDecodeNewlines, 33274 shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref, 33275 delimiters: options.delimiters, 33276 comments: options.comments 33277 }, this); 33278 var render = ref.render; 33279 var staticRenderFns = ref.staticRenderFns; 33280 options.render = render; 33281 options.staticRenderFns = staticRenderFns; 33282 /* istanbul ignore if */ 33283 33284 if ( true && config.performance && mark) { 33285 mark('compile end'); 33286 measure("vue " + this._name + " compile", 'compile', 'compile end'); 33287 } 33288 } 33289 } 33290 33291 return mount.call(this, el, hydrating); 33292}; 33293/** 33294 * Get outerHTML of elements, taking care 33295 * of SVG elements in IE as well. 33296 */ 33297 33298 33299function getOuterHTML(el) { 33300 if (el.outerHTML) { 33301 return el.outerHTML; 33302 } else { 33303 var container = document.createElement('div'); 33304 container.appendChild(el.cloneNode(true)); 33305 return container.innerHTML; 33306 } 33307} 33308 33309Vue.compile = compileToFunctions; 33310/* harmony default export */ __webpack_exports__["default"] = (Vue); 33311/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../../timers-browserify/main.js */ "./node_modules/timers-browserify/main.js").setImmediate)) 33312 33313/***/ }), 33314
vendor: 727 bytes, lines 33315-33342
33315/***/ "./node_modules/webpack/buildin/global.js": 33316/*!***********************************!*\ 33317 !*** (webpack)/buildin/global.js ***! 33318 \***********************************/ 33319/*! no static exports found */ 33320/***/ (function(module, exports) { 33321 33322var g; // This works in non-strict mode 33323 33324g = function () { 33325 return this; 33326}(); 33327 33328try { 33329 // This works if eval is allowed (see CSP) 33330 g = g || new Function("return this")(); 33331} catch (e) { 33332 // This works if the window reference is available 33333 if (typeof window === "object") g = window; 33334} // g can still be undefined, but nothing to do about it... 33335// We return undefined, instead of nothing here, so it's 33336// easier to handle this case. if(!global) { ...} 33337 33338 33339module.exports = g; 33340 33341/***/ }), 33342
vendor: 795 bytes, lines 33343-33375
33343/***/ "./node_modules/webpack/buildin/module.js": 33344/*!***********************************!*\ 33345 !*** (webpack)/buildin/module.js ***! 33346 \***********************************/ 33347/*! no static exports found */ 33348/***/ (function(module, exports) { 33349 33350module.exports = function (module) { 33351 if (!module.webpackPolyfill) { 33352 module.deprecate = function () {}; 33353 33354 module.paths = []; // module.parent = undefined by default 33355 33356 if (!module.children) module.children = []; 33357 Object.defineProperty(module, "loaded", { 33358 enumerable: true, 33359 get: function () { 33360 return module.l; 33361 } 33362 }); 33363 Object.defineProperty(module, "id", { 33364 enumerable: true, 33365 get: function () { 33366 return module.i; 33367 } 33368 }); 33369 module.webpackPolyfill = 1; 33370 } 33371 33372 return module; 33373}; 33374 33375/***/ })
33375 33376 33377/******/ }); 33378//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vYXBwL2NvbXBvbmVudHMvT3BlbmluZ0hvdXJzL09wZW5pbmdIb3VyLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hcHAvY29tcG9uZW50cy9PcGVuaW5nSG91cnMvT3BlbmluZ0hvdXIudnVlP2QwMTEiLCJ3ZWJwYWNrOi8vLy4vYXBwL2NvbXBvbmVudHMvT3BlbmluZ0hvdXJzL09wZW5pbmdIb3VyLnZ1ZT9mM2RjIiwid2VicGFjazovLy8uL2FwcC9jb21wb25lbnRzL09wZW5pbmdIb3Vycy9PcGVuaW5nSG91cnNXZWVrLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hcHAvY29tcG9uZW50cy9PcGVuaW5nSG91cnMvT3BlbmluZ0hvdXJzV2Vlay52dWU/YWI5MiIsIndlYnBhY2s6Ly8vLi9hcHAvY29tcG9uZW50cy9PcGVuaW5nSG91cnMvT3BlbmluZ0hvdXJzV2Vlay52dWU/NGM3OCIsIndlYnBhY2s6Ly8vLi9hcHAvb3BlbmluZy1ob3Vycy13ZWVrLWFwcC5qcyIsIndlYnBhY2s6Ly8vLi9hcHAvdXRpbHMvYXBpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2J1aWxkRnVsbFBhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2NyZWF0ZUVycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2VuaGFuY2VFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsIndlYnBhY2s6Ly8vYXBwL2NvbXBvbmVudHMvT3BlbmluZ0hvdXJzL09wZW5pbmdIb3VyLnZ1ZSIsIndlYnBhY2s6Ly8vYXBwL2NvbXBvbmVudHMvT3BlbmluZ0hvdXJzL09wZW5pbmdIb3Vyc1dlZWsudnVlIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlIHN5bmMgXlxcLlxcLy4qJCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1kei5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1rdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1tYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1zYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci10bi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hei5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ici5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9icy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jdi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1jaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kdi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1TRy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1hdS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1jYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1nYi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1uei5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy11cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9meS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nb20tbGF0bi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ndS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oaS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9odS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oeS1hbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC1jaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qdi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ray5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rdS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9reS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sYi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9taS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy1teS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9teS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uYi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC1iZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wYS1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC1ici5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9yby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ydS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zaS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci1jeXJsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90Zy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bC1waC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvd
33378HIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHpsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS1sYXRuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91Zy1jbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei1sYXRuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3ZpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3gtcHNldWRvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3lvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWNuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWhrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLXR3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9hcHAvY29tcG9uZW50cy9PcGVuaW5nSG91cnMvT3BlbmluZ0hvdXIudnVlP2IxNWMiLCJ3ZWJwYWNrOi8vLy4vYXBwL2NvbXBvbmVudHMvT3BlbmluZ0hvdXJzL09wZW5pbmdIb3Vyc1dlZWsudnVlP2M1ODEiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmVzbS5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiXSwibmFtZXMiOlsidnVlRWxlbWVudHMiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJjb3VudCIsImxlbmd0aCIsImkiLCJWdWUiLCJlbCIsImNvbXBvbmVudHMiLCJPcGVuaW5nSG91cnNXZWVrIiwiZHJ1cGFsU2V0dGluZ3MiLCJvcGVuaW5nSG91cnMiLCJwYXRoIiwiYXBpQmFzZVVybCIsInBhdGhQcmVmaXgiLCJheGlvcyIsImNyZWF0ZSIsImJhc2VVUkwiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIm9yaWdpbiIsImhlYWRlcnMiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJyZXNvbHZlIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJrZXkiLCJhcmciLCJpbmZvIiwidmFsdWUiLCJlcnJvciIsImRvbmUiLCJQcm9taXNlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiZm4iLCJzZWxmIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5IiwiZXJyIiwidW5kZWZpbmVkIiwibW9kdWxlIiwiZXhwb3J0cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJvYmoiLCJfX2VzTW9kdWxlIiwicmVxdWlyZSIsInV0aWxzIiwic2V0dGxlIiwiYnVpbGRVUkwiLCJidWlsZEZ1bGxQYXRoIiwicGFyc2VIZWFkZXJzIiwiaXNVUkxTYW1lT3JpZ2luIiwiY3JlYXRlRXJyb3IiLCJ4aHJBZGFwdGVyIiwiY29uZmlnIiwiZGlzcGF0Y2hYaHJSZXF1ZXN0IiwicmVxdWVzdERhdGEiLCJkYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJpc0Zvcm1EYXRhIiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1
33378ZXN0IiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJBdXRob3JpemF0aW9uIiwiYnRvYSIsImZ1bGxQYXRoIiwidXJsIiwib3BlbiIsIm1ldGhvZCIsInRvVXBwZXJDYXNlIiwicGFyYW1zIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJoYW5kbGVMb2FkIiwicmVhZHlTdGF0ZSIsInN0YXR1cyIsInJlc3BvbnNlVVJMIiwiaW5kZXhPZiIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlRGF0YSIsInJlc3BvbnNlVHlwZSIsInJlc3BvbnNlVGV4dCIsInJlc3BvbnNlIiwic3RhdHVzVGV4dCIsIm9uYWJvcnQiLCJoYW5kbGVBYm9ydCIsIm9uZXJyb3IiLCJoYW5kbGVFcnJvciIsIm9udGltZW91dCIsImhhbmRsZVRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiaXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJjb29raWVzIiwieHNyZlZhbHVlIiwid2l0aENyZWRlbnRpYWxzIiwieHNyZkNvb2tpZU5hbWUiLCJyZWFkIiwieHNyZkhlYWRlck5hbWUiLCJmb3JFYWNoIiwic2V0UmVxdWVzdEhlYWRlciIsInZhbCIsInRvTG93ZXJDYXNlIiwiaXNVbmRlZmluZWQiLCJlIiwib25Eb3dubG9hZFByb2dyZXNzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJjYW5jZWxUb2tlbiIsInByb21pc2UiLCJvbkNhbmNlbGVkIiwiY2FuY2VsIiwiYWJvcnQiLCJzZW5kIiwiYmluZCIsIkF4aW9zIiwibWVyZ2VDb25maWciLCJkZWZhdWx0cyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImNvbnRleHQiLCJpbnN0YW5jZSIsInByb3RvdHlwZSIsImV4dGVuZCIsImluc3RhbmNlQ29uZmlnIiwiQ2FuY2VsIiwiQ2FuY2VsVG9rZW4iLCJpc0NhbmNlbCIsImFsbCIsInByb21pc2VzIiwic3ByZWFkIiwiZGVmYXVsdCIsIm1lc3NhZ2UiLCJ0b1N0cmluZyIsIl9fQ0FOQ0VMX18iLCJleGVjdXRvciIsIlR5cGVFcnJvciIsInJlc29sdmVQcm9taXNlIiwicHJvbWlzZUV4ZWN1dG9yIiwidG9rZW4iLCJyZWFzb24iLCJ0aHJvd0lmUmVxdWVzdGVkIiwic291cmNlIiwiYyIsIkludGVyY2VwdG9yTWFuYWdlciIsImRpc3BhdGNoUmVxdWVzdCIsImludGVyY2VwdG9ycyIsImNoYWluIiwidW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInB1c2hSZXNwb25zZUludGVyY2VwdG9ycyIsInB1c2giLCJzaGlmdCIsImdldFVyaSIsInJlcGxhY2UiLCJmb3JFYWNoTWV0aG9kTm9EYXRhIiwibWVyZ2UiLCJmb3JFYWNoTWV0aG9kV2l0aERhdGEiLCJoYW5kbGVycyIsInVzZSIsImVqZWN0IiwiaWQiLCJmb3JFYWNoSGFuZGxlciIsImgiLCJpc0Fic29sdXRlVVJMIiwiY29tYmluZVVSTHMiLCJyZXF1ZXN0ZWRVUkwiLCJlbmhhbmNlRXJyb3IiLCJjb2RlIiwiRXJyb3IiLCJ0cmFuc2Zvcm1EYXRhIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRyYW5zZm9ybVJlcXVlc3QiLCJjb21tb24iLCJjbGVhbkhlYWRlckNvbmZpZyIsImFkYXB0ZXIiLCJvbkFkYXB0ZXJSZXNvbHV0aW9uIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJvbkFkYXB0ZXJSZWplY3Rpb24iLCJpc0F4aW9zRXJyb3IiLCJ0b0pTT04iLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJudW1iZXIiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJzdGFjayIsImNvbmZpZzEiLCJjb25maWcyIiwidmFsdWVGcm9tQ29uZmlnMktleXMiLCJtZXJnZURlZXBQcm9wZXJ0aWVzS2V5cyIsImRlZmF1bHRUb0NvbmZpZzJLZXlzIiwidmFsdWVGcm9tQ29uZmlnMiIsInByb3AiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwiaXNPYmplY3QiLCJkZWVwTWVyZ2UiLCJkZWZhdWx0VG9Db25maWcyIiwiYXhpb3NLZXlzIiwiY29uY2F0Iiwib3RoZXJLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImZpbHRlckF4aW9zS2V5cyIsIm90aGVyS2V5c0RlZmF1bHRUb0NvbmZpZzIiLCJ2YWxpZGF0ZVN0YXR1cyIsImZucyIsInRyYW5zZm9ybSIsIm5vcm1hbGl6ZUhlYWRlck5hbWUiLCJERUZBVUxUX0NPTlRFTlRfVFlQRSIsInNldENvbnRlbnRUeXBlSWZVbnNldCIsImdldERlZmF1bHRBZGFwdGVyIiwicHJvY2VzcyIsImNhbGwiLCJpc0FycmF5QnVmZmVyIiwiaXNCdWZmZXIiLCJpc1N0cmVhbSIsImlzRmlsZSIsImlzQmxvYiIsImlzQXJyYXlCdWZmZXJWaWV3IiwiYnVmZmVyIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJKU09OIiwic3RyaW5naWZ5IiwicGFyc2UiLCJtYXhDb250ZW50TGVuZ3RoIiwidGhpc0FyZyIsIndyYXAiLCJBcnJheSIsImVuY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInNlcmlhbGl6ZSIsImlzQXJyYXkiLCJwYXJzZVZhbHVlIiwidiIsImlzRGF0ZSIsInRvSVNPU3RyaW5nIiwiam9pbiIsImhhc2htYXJrSW5kZXgiLCJzbGljZSIsInJlbGF0aXZlVVJMIiwic3RhbmRhcmRCcm93c2VyRW52Iiwid3JpdGUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiaXNOdW1iZXIiLCJEYXRlIiwidG9HTVRTdHJpbmciLCJpc1N0cmluZyIsIm1hdGNoIiwiUmVnRXhwIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwibm93Iiwibm9uU3RhbmRhcmRCcm93c2VyRW52IiwidGVzdCIsIm1zaWUiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ1cmxQYXJzaW5nTm9kZSIsImNyZWF0ZUVsZW1lbnQiLCJvcmlnaW5VUkwiLCJyZXNvbHZlVVJMIiwiaHJlZiIsInNldEF0dHJpYnV0ZSIsInByb3RvY29sIiwiaG9zdCIsInNlYXJjaCIsImhhc2giLCJob3N0bmFtZSIsInBvcnQiLCJwYXRobmFtZSIsImNoYXJBdCIsInJlcXVlc3RVUkwiLCJwYXJzZWQiLCJub3JtYWxpemVkTmFtZSIsInByb2Nlc3NIZWFkZXIiLCJpZ25vcmVEdXBsaWNhdGVPZiIsInNwbGl0IiwicGFyc2VyIiwibGluZSIsInRyaW0iLCJzdWJzdHIiLCJjYWxsYmFjayIsImFyciIsImNvbnN0cnVjdG9yIiwiRm9ybURhdGEiLCJyZXN1bHQiLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImlzRnVuY3Rpb24iLCJwaXBlIiwiVVJMU2VhcmNoUGFyYW1zIiwic3RyIiwicHJvZHVjdCIsImwiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnblZhbHVlIiwiYSIsImIiLCJnbG9iYWwiLCJmYWN0b3J5IiwibW9tZW50IiwiYWYiLCJkZWZpbmVMb2NhbGUiLCJtb250aHMiLCJtb250aHNTaG9ydCIsIndlZWtkYXlzIiwid2Vla2RheXNTaG9ydCIsIndlZWtkYXlzTWluIiwibWVyaWRpZW1QYXJzZSIsImlzUE0iLCJpbnB1dCIsIm1lcmlkaWVtIiwiaG9
333781cnMiLCJtaW51dGVzIiwiaXNMb3dlciIsImxvbmdEYXRlRm9ybWF0IiwiTFQiLCJMVFMiLCJMIiwiTEwiLCJMTEwiLCJMTExMIiwiY2FsZW5kYXIiLCJzYW1lRGF5IiwibmV4dERheSIsIm5leHRXZWVrIiwibGFzdERheSIsImxhc3RXZWVrIiwic2FtZUVsc2UiLCJyZWxhdGl2ZVRpbWUiLCJmdXR1cmUiLCJwYXN0IiwicyIsInNzIiwibSIsIm1tIiwiaGgiLCJkIiwiZGQiLCJNIiwiTU0iLCJ5IiwieXkiLCJkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwib3JkaW5hbCIsIndlZWsiLCJkb3ciLCJkb3kiLCJhckR6Iiwid2Vla2RheXNQYXJzZUV4YWN0IiwiYXJLdyIsInN5bWJvbE1hcCIsInBsdXJhbEZvcm0iLCJuIiwicGx1cmFscyIsInBsdXJhbGl6ZSIsInUiLCJ3aXRob3V0U3VmZml4Iiwic3RyaW5nIiwiaXNGdXR1cmUiLCJmIiwiYXJMeSIsImhvdXIiLCJtaW51dGUiLCJwcmVwYXJzZSIsInBvc3Rmb3JtYXQiLCJhck1hIiwibnVtYmVyTWFwIiwiYXJTYSIsImFyVG4iLCJhciIsInN1ZmZpeGVzIiwiYXoiLCJwbHVyYWwiLCJ3b3JkIiwibnVtIiwiZm9ybXMiLCJyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsIiwiZm9ybWF0IiwiYmUiLCJzdGFuZGFsb25lIiwiaXNGb3JtYXQiLCJkYXkiLCJwZXJpb2QiLCJiZyIsImxhc3REaWdpdCIsImxhc3QyRGlnaXRzIiwiYm0iLCJibiIsIm1lcmlkaWVtSG91ciIsImJvIiwicmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uIiwibXV0YXRpb24iLCJzcGVjaWFsTXV0YXRpb25Gb3JZZWFycyIsImxhc3ROdW1iZXIiLCJ0ZXh0Iiwic29mdE11dGF0aW9uIiwibXV0YXRpb25UYWJsZSIsInN1YnN0cmluZyIsImJyIiwib3V0cHV0IiwidHJhbnNsYXRlIiwiYnMiLCJtb250aHNQYXJzZUV4YWN0IiwiY2EiLCJsbCIsImxsbCIsImxsbGwiLCJtb250aHNQYXJzZSIsIm1vbnRoc1JlZ2V4IiwiY3MiLCJtb250aHNTaG9ydFJlZ2V4IiwibW9udGhzU3RyaWN0UmVnZXgiLCJtb250aHNTaG9ydFN0cmljdFJlZ2V4IiwibG9uZ01vbnRoc1BhcnNlIiwic2hvcnRNb250aHNQYXJzZSIsImN2IiwiYWZmaXgiLCJleGVjIiwiY3kiLCJsb29rdXAiLCJkYSIsInByb2Nlc3NSZWxhdGl2ZVRpbWUiLCJkZUF0IiwiZGVDaCIsImRlIiwiZHYiLCJGdW5jdGlvbiIsIm1vbnRoc05vbWluYXRpdmVFbCIsIm1vbnRoc0dlbml0aXZlRWwiLCJtb21lbnRUb0Zvcm1hdCIsIl9tb250aHNOb21pbmF0aXZlRWwiLCJfbW9udGhzR2VuaXRpdmVFbCIsIm1vbnRoIiwiY2FsZW5kYXJFbCIsIm1vbSIsIl9jYWxlbmRhckVsIiwiZW5TRyIsImVuQXUiLCJlbkNhIiwiZW5HYiIsImVuSWUiLCJlbklsIiwiZW5OeiIsImVvIiwibW9udGhzU2hvcnREb3QiLCJlc0RvIiwiZXNVcyIsImVzIiwiZXQiLCJldSIsImZhIiwibnVtYmVyc1Bhc3QiLCJudW1iZXJzRnV0dXJlIiwidmVyYmFsTnVtYmVyIiwiZmkiLCJmbyIsImZyQ2EiLCJmckNoIiwiZnIiLCJtb250aHNTaG9ydFdpdGhEb3RzIiwibW9udGhzU2hvcnRXaXRob3V0RG90cyIsImZ5IiwiZ2EiLCJnZCIsImdsIiwiZ29tTGF0biIsImd1IiwiaGUiLCJoaSIsImhyIiwid2Vla0VuZGluZ3MiLCJodSIsImh5QW0iLCJpcyIsIml0Q2giLCJpdCIsImphIiwianYiLCJrYSIsImtrIiwia20iLCJrbiIsImtvIiwiaXNVcHBlciIsImt1Iiwia3kiLCJwcm9jZXNzRnV0dXJlVGltZSIsImVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlciIsInByb2Nlc3NQYXN0VGltZSIsInBhcnNlSW50IiwiaXNOYU4iLCJmaXJzdERpZ2l0IiwibGIiLCJsbyIsInVuaXRzIiwidHJhbnNsYXRlU2Vjb25kcyIsInRyYW5zbGF0ZVNpbmd1bGFyIiwic3BlY2lhbCIsImx0IiwicmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyIiwicmVsYXRpdmVTZWNvbmRzIiwibHYiLCJ0cmFuc2xhdG9yIiwid29yZHMiLCJjb3JyZWN0R3JhbW1hdGljYWxDYXNlIiwid29yZEtleSIsIm1lIiwibGFzdFdlZWtEYXlzIiwibWkiLCJtayIsIm1sIiwibW4iLCJyZWxhdGl2ZVRpbWVNciIsIm1yIiwibXNNeSIsIm1zIiwibXQiLCJteSIsIm5iIiwibmUiLCJubEJlIiwibmwiLCJubiIsInBhSW4iLCJtb250aHNOb21pbmF0aXZlIiwibW9udGhzU3ViamVjdGl2ZSIsInBsIiwicHRCciIsInB0Iiwic2VwYXJhdG9yIiwicm8iLCJydSIsImRheXMiLCJzZCIsInNlIiwic2kiLCJzayIsInNsIiwic3EiLCJzckN5cmwiLCJzciIsInN2Iiwic3ciLCJ0YSIsInRlIiwidGV0IiwidGciLCJ0aCIsInRsUGgiLCJudW1iZXJzTm91bnMiLCJ0cmFuc2xhdGVGdXR1cmUiLCJ0aW1lIiwidHJhbnNsYXRlUGFzdCIsIm51bWJlck5vdW4iLCJudW1iZXJBc05vdW4iLCJodW5kcmVkIiwiTWF0aCIsImZsb29yIiwidGVuIiwib25lIiwidGxoIiwidHIiLCJ0emwiLCJ0em1MYXRuIiwidHptIiwidWdDbiIsImhtIiwid2Vla2RheXNDYXNlUmVwbGFjZSIsIm5vdW5DYXNlIiwicHJvY2Vzc0hvdXJzRnVuY3Rpb24iLCJ1ayIsInVyIiwidXpMYXRuIiwidXoiLCJ2aSIsInhQc2V1ZG8iLCJ5byIsInpoQ24iLCJ6aEhrIiwiemhUdyIsImhvb2tDYWxsYmFjayIsImhvb2tzIiwic2V0SG9va0NhbGxiYWNrIiwiaXNPYmplY3RFbXB0eSIsImdldE93blByb3BlcnR5TmFtZXMiLCJrIiwibWFwIiwicmVzIiwiaGFzT3duUHJvcCIsInZhbHVlT2YiLCJjcmVhdGVVVEMiLCJsb2NhbGUiLCJzdHJpY3QiLCJjcmVhdGVMb2NhbE9yVVRDIiwidXRjIiwiZGVmYXVsdFBhcnNpbmdGbGFncyIsImVtcHR5IiwidW51c2VkVG9rZW5zIiwidW51c2VkSW5wdXQiLCJvdmVyZmxvdyIsImNoYXJzTGVmdE92ZXIiLCJudWxsSW5wdXQiLCJpbnZhbGlkTW9udGgiLCJpbnZhbGlkRm9ybWF0IiwidXNlckludmFsaWRhdGVkIiwiaXNvIiwicGFyc2VkRGF0ZVBhcnRzIiwicmZjMjgyMiIsIndlZWtkYXlNaXNtYXRjaCIsImdldFBhcnNpbmdGbGFncyIsIl9wZiIsInNvbWUiLCJmdW4iLCJ0IiwibGVuIiwiaXNWYWxpZCIsIl9pc1ZhbGlkIiwiZmxhZ3MiLCJwYXJzZWRQYXJ0cyIsImlzTm93VmFsaWQiLCJfZCIsImdldFRpbWUiLCJpbnZhbGlkV2Vla2RheSIsIl9zdHJpY3QiLCJiaWdIb3VyIiwiaXNGcm96ZW4iLCJjcmVhdGVJbnZhbGlkIiwiTmFOIiwibW9tZW50UHJvcGVydGllcyIsImNvcHlDb25maWciLCJ0byIsImZyb20iLCJfaXNBTW9tZW50T2JqZWN0IiwiX2kiLCJfZiIsIl9sIiwiX3R6bSIsIl9pc1VUQyIsIl9vZmZzZXQiLCJfbG9jYWxlIiwidXBkYXRlSW5Qcm9ncmVzcyIsIk1vbWVudCIsInVwZGF0ZU9mZnNldCIsImlzTW9tZW50IiwiYWJzRmxvb3IiLCJjZWls
33378IiwidG9JbnQiLCJhcmd1bWVudEZvckNvZXJjaW9uIiwiY29lcmNlZE51bWJlciIsImlzRmluaXRlIiwiY29tcGFyZUFycmF5cyIsImFycmF5MSIsImFycmF5MiIsImRvbnRDb252ZXJ0IiwibWluIiwibGVuZ3RoRGlmZiIsImFicyIsImRpZmZzIiwid2FybiIsIm1zZyIsInN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyIsImNvbnNvbGUiLCJkZXByZWNhdGUiLCJmaXJzdFRpbWUiLCJkZXByZWNhdGlvbkhhbmRsZXIiLCJkZXByZWNhdGlvbnMiLCJkZXByZWNhdGVTaW1wbGUiLCJzZXQiLCJfY29uZmlnIiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50IiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJfb3JkaW5hbFBhcnNlIiwibWVyZ2VDb25maWdzIiwicGFyZW50Q29uZmlnIiwiY2hpbGRDb25maWciLCJMb2NhbGUiLCJkZWZhdWx0Q2FsZW5kYXIiLCJfY2FsZW5kYXIiLCJkZWZhdWx0TG9uZ0RhdGVGb3JtYXQiLCJfbG9uZ0RhdGVGb3JtYXQiLCJmb3JtYXRVcHBlciIsImRlZmF1bHRJbnZhbGlkRGF0ZSIsImludmFsaWREYXRlIiwiX2ludmFsaWREYXRlIiwiZGVmYXVsdE9yZGluYWwiLCJkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIl9vcmRpbmFsIiwiZGVmYXVsdFJlbGF0aXZlVGltZSIsIl9yZWxhdGl2ZVRpbWUiLCJwYXN0RnV0dXJlIiwiZGlmZiIsImFsaWFzZXMiLCJhZGRVbml0QWxpYXMiLCJ1bml0Iiwic2hvcnRoYW5kIiwibG93ZXJDYXNlIiwibm9ybWFsaXplVW5pdHMiLCJub3JtYWxpemVPYmplY3RVbml0cyIsImlucHV0T2JqZWN0Iiwibm9ybWFsaXplZElucHV0Iiwibm9ybWFsaXplZFByb3AiLCJwcmlvcml0aWVzIiwiYWRkVW5pdFByaW9yaXR5IiwicHJpb3JpdHkiLCJnZXRQcmlvcml0aXplZFVuaXRzIiwidW5pdHNPYmoiLCJzb3J0IiwiemVyb0ZpbGwiLCJ0YXJnZXRMZW5ndGgiLCJmb3JjZVNpZ24iLCJhYnNOdW1iZXIiLCJ6ZXJvc1RvRmlsbCIsInNpZ24iLCJwb3ciLCJtYXgiLCJmb3JtYXR0aW5nVG9rZW5zIiwibG9jYWxGb3JtYXR0aW5nVG9rZW5zIiwiZm9ybWF0RnVuY3Rpb25zIiwiZm9ybWF0VG9rZW5GdW5jdGlvbnMiLCJhZGRGb3JtYXRUb2tlbiIsInBhZGRlZCIsImZ1bmMiLCJsb2NhbGVEYXRhIiwicmVtb3ZlRm9ybWF0dGluZ1Rva2VucyIsIm1ha2VGb3JtYXRGdW5jdGlvbiIsImFycmF5IiwiZm9ybWF0TW9tZW50IiwiZXhwYW5kRm9ybWF0IiwicmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zIiwibGFzdEluZGV4IiwibWF0Y2gxIiwibWF0Y2gyIiwibWF0Y2gzIiwibWF0Y2g0IiwibWF0Y2g2IiwibWF0Y2gxdG8yIiwibWF0Y2gzdG80IiwibWF0Y2g1dG82IiwibWF0Y2gxdG8zIiwibWF0Y2gxdG80IiwibWF0Y2gxdG82IiwibWF0Y2hVbnNpZ25lZCIsIm1hdGNoU2lnbmVkIiwibWF0Y2hPZmZzZXQiLCJtYXRjaFNob3J0T2Zmc2V0IiwibWF0Y2hUaW1lc3RhbXAiLCJtYXRjaFdvcmQiLCJyZWdleGVzIiwiYWRkUmVnZXhUb2tlbiIsInJlZ2V4Iiwic3RyaWN0UmVnZXgiLCJpc1N0cmljdCIsImdldFBhcnNlUmVnZXhGb3JUb2tlbiIsInVuZXNjYXBlRm9ybWF0IiwicmVnZXhFc2NhcGUiLCJtYXRjaGVkIiwicDEiLCJwMiIsInAzIiwicDQiLCJ0b2tlbnMiLCJhZGRQYXJzZVRva2VuIiwiYWRkV2Vla1BhcnNlVG9rZW4iLCJfdyIsImFkZFRpbWVUb0FycmF5RnJvbVRva2VuIiwiX2EiLCJZRUFSIiwiTU9OVEgiLCJEQVRFIiwiSE9VUiIsIk1JTlVURSIsIlNFQ09ORCIsIk1JTExJU0VDT05EIiwiV0VFSyIsIldFRUtEQVkiLCJ5ZWFyIiwicGFyc2VUd29EaWdpdFllYXIiLCJkYXlzSW5ZZWFyIiwiaXNMZWFwWWVhciIsImdldFNldFllYXIiLCJtYWtlR2V0U2V0IiwiZ2V0SXNMZWFwWWVhciIsImtlZXBUaW1lIiwic2V0JDEiLCJnZXQiLCJkYXRlIiwiZGF5c0luTW9udGgiLCJzdHJpbmdHZXQiLCJzdHJpbmdTZXQiLCJwcmlvcml0aXplZCIsIm1vZCIsIngiLCJvIiwibW9kTW9udGgiLCJNT05USFNfSU5fRk9STUFUIiwiZGVmYXVsdExvY2FsZU1vbnRocyIsImxvY2FsZU1vbnRocyIsIl9tb250aHMiLCJkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQiLCJsb2NhbGVNb250aHNTaG9ydCIsIl9tb250aHNTaG9ydCIsImhhbmRsZVN0cmljdFBhcnNlIiwibW9udGhOYW1lIiwiaWkiLCJsbGMiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsIl9tb250aHNQYXJzZSIsIl9sb25nTW9udGhzUGFyc2UiLCJfc2hvcnRNb250aHNQYXJzZSIsImxvY2FsZU1vbnRoc1BhcnNlIiwiX21vbnRoc1BhcnNlRXhhY3QiLCJzZXRNb250aCIsImRheU9mTW9udGgiLCJnZXRTZXRNb250aCIsImdldERheXNJbk1vbnRoIiwiZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXgiLCJjb21wdXRlTW9udGhzUGFyc2UiLCJfbW9udGhzU2hvcnRTdHJpY3RSZWdleCIsIl9tb250aHNTaG9ydFJlZ2V4IiwiZGVmYXVsdE1vbnRoc1JlZ2V4IiwiX21vbnRoc1N0cmljdFJlZ2V4IiwiX21vbnRoc1JlZ2V4IiwiY21wTGVuUmV2Iiwic2hvcnRQaWVjZXMiLCJsb25nUGllY2VzIiwibWl4ZWRQaWVjZXMiLCJjcmVhdGVEYXRlIiwiZ2V0RnVsbFllYXIiLCJzZXRGdWxsWWVhciIsImNyZWF0ZVVUQ0RhdGUiLCJVVEMiLCJnZXRVVENGdWxsWWVhciIsInNldFVUQ0Z1bGxZZWFyIiwiZmlyc3RXZWVrT2Zmc2V0IiwiZndkIiwiZndkbHciLCJnZXRVVENEYXkiLCJkYXlPZlllYXJGcm9tV2Vla3MiLCJ3ZWVrZGF5IiwibG9jYWxXZWVrZGF5Iiwid2Vla09mZnNldCIsImRheU9mWWVhciIsInJlc1llYXIiLCJyZXNEYXlPZlllYXIiLCJ3ZWVrT2ZZZWFyIiwicmVzV2VlayIsIndlZWtzSW5ZZWFyIiwid2Vla09mZnNldE5leHQiLCJsb2NhbGVXZWVrIiwiX3dlZWsiLCJkZWZhdWx0TG9jYWxlV2VlayIsImxvY2FsZUZpcnN0RGF5T2ZXZWVrIiwibG9jYWxlRmlyc3REYXlPZlllYXIiLCJnZXRTZXRXZWVrIiwiYWRkIiwiZ2V0U2V0SVNPV2VlayIsIndlZWtkYXlzTWluUmVnZXgiLCJ3ZWVrZGF5c1Nob3J0UmVnZXgiLCJ3ZWVrZGF5c1JlZ2V4Iiwid2Vla2RheXNQYXJzZSIsInBhcnNlV2Vla2RheSIsInBhcnNlSXNvV2Vla2RheSIsInNoaWZ0V2Vla2RheXMiLCJ3cyIsImRlZmF1bHRMb2NhbGVXZWVrZGF5cyIsImxvY2FsZVdlZWtkYXlzIiwiX3dlZWtkYXlzIiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQiLCJsb2NhbGVXZWVrZGF5c1Nob3J0IiwiX3dlZWtkYXlzU2hvcnQiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4iLCJsb2NhbGVXZWVrZGF5c01pbiIsIl93ZWVrZGF5c01pbiIsImhhbmRsZVN0cmljdFBhcnNlJDEiLCJ3ZWVrZGF5TmFtZSIsIl93ZWVrZGF5c1BhcnNlIiwiX3Nob3J0V2Vla2RheXNQYXJzZSIsIl9taW5XZWVrZGF5c1BhcnNlIiwibG9jYWxlV2Vla2RheXNQYXJzZSIsIl93ZWVrZGF5c1BhcnNlRXhhY3QiLCJfZnVsbFdlZWtkYXlzUGFyc2UiLCJnZXRTZXREYXlPZldlZWsiLCJnZXREYXkiLCJnZXRTZXRMb2NhbGVEYXlPZldlZWsiLCJnZXRTZXRJU09EYXlPZldlZWsiLCJkZWZhdWx0V2Vla2RheXNSZWdleCIsImNvbXB1dGVXZWVrZGF5c1BhcnNlIiwiX3dlZWtkYXlzU3RyaWN0UmVnZXgiLCJfd2Vla2RheXNSZWdleCIsImRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXgiLCJfd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4IiwiX3dlZWtkYXlzU2hvcnRSZWdleCIsImRlZmF1bHRXZWVrZGF5c01pblJlZ2V4IiwiX3dlZWtkYXlzTWluU3RyaWN0UmVnZXgiLCJfd2Vla2RheXNNaW5SZWdleCIsIm1pblBpZWNlcyIsIm1pbnAiLCJzaG9ydHAiLCJsb25ncCIsImhGb3JtYXQiLCJrRm9ybWF0Iiwic2Vjb25kcyIsImxvd2VyY2FzZSIsIm1hdGNoTWVyaWRpZW0iLCJfbWVyaWRpZW1QYXJzZSIsImtJbnB1dCIsIl9pc1BtIiwiX21lcmlkaWVtIiwicG9zIiwicG9zMSIsInBvczIiLCJ
33378sb2NhbGVJc1BNIiwiZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UiLCJsb2NhbGVNZXJpZGllbSIsImdldFNldEhvdXIiLCJiYXNlQ29uZmlnIiwibG9jYWxlcyIsImxvY2FsZUZhbWlsaWVzIiwiZ2xvYmFsTG9jYWxlIiwibm9ybWFsaXplTG9jYWxlIiwiY2hvb3NlTG9jYWxlIiwibmFtZXMiLCJqIiwibmV4dCIsImxvYWRMb2NhbGUiLCJvbGRMb2NhbGUiLCJfYWJiciIsImFsaWFzZWRSZXF1aXJlIiwiZ2V0U2V0R2xvYmFsTG9jYWxlIiwidmFsdWVzIiwiZ2V0TG9jYWxlIiwiYWJiciIsInBhcmVudExvY2FsZSIsInVwZGF0ZUxvY2FsZSIsInRtcExvY2FsZSIsImxpc3RMb2NhbGVzIiwiY2hlY2tPdmVyZmxvdyIsIl9vdmVyZmxvd0RheU9mWWVhciIsIl9vdmVyZmxvd1dlZWtzIiwiX292ZXJmbG93V2Vla2RheSIsImN1cnJlbnREYXRlQXJyYXkiLCJub3dWYWx1ZSIsIl91c2VVVEMiLCJnZXRVVENNb250aCIsImdldFVUQ0RhdGUiLCJnZXRNb250aCIsImdldERhdGUiLCJjb25maWdGcm9tQXJyYXkiLCJjdXJyZW50RGF0ZSIsImV4cGVjdGVkV2Vla2RheSIsInllYXJUb1VzZSIsImRheU9mWWVhckZyb21XZWVrSW5mbyIsIl9kYXlPZlllYXIiLCJfbmV4dERheSIsInNldFVUQ01pbnV0ZXMiLCJnZXRVVENNaW51dGVzIiwidyIsIndlZWtZZWFyIiwidGVtcCIsIndlZWtkYXlPdmVyZmxvdyIsIkdHIiwiVyIsIkUiLCJjcmVhdGVMb2NhbCIsImN1cldlZWsiLCJnZyIsImV4dGVuZGVkSXNvUmVnZXgiLCJiYXNpY0lzb1JlZ2V4IiwidHpSZWdleCIsImlzb0RhdGVzIiwiaXNvVGltZXMiLCJhc3BOZXRKc29uUmVnZXgiLCJjb25maWdGcm9tSVNPIiwiYWxsb3dUaW1lIiwiZGF0ZUZvcm1hdCIsInRpbWVGb3JtYXQiLCJ0ekZvcm1hdCIsImNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQiLCJleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzIiwieWVhclN0ciIsIm1vbnRoU3RyIiwiZGF5U3RyIiwiaG91clN0ciIsIm1pbnV0ZVN0ciIsInNlY29uZFN0ciIsInVudHJ1bmNhdGVZZWFyIiwicHJlcHJvY2Vzc1JGQzI4MjIiLCJjaGVja1dlZWtkYXkiLCJ3ZWVrZGF5U3RyIiwicGFyc2VkSW5wdXQiLCJ3ZWVrZGF5UHJvdmlkZWQiLCJ3ZWVrZGF5QWN0dWFsIiwib2JzT2Zmc2V0cyIsIlVUIiwiR01UIiwiRURUIiwiRVNUIiwiQ0RUIiwiQ1NUIiwiTURUIiwiTVNUIiwiUERUIiwiUFNUIiwiY2FsY3VsYXRlT2Zmc2V0Iiwib2JzT2Zmc2V0IiwibWlsaXRhcnlPZmZzZXQiLCJudW1PZmZzZXQiLCJjb25maWdGcm9tUkZDMjgyMiIsInBhcnNlZEFycmF5IiwiY29uZmlnRnJvbVN0cmluZyIsImNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrIiwiSVNPXzg2MDEiLCJSRkNfMjgyMiIsInNraXBwZWQiLCJzdHJpbmdMZW5ndGgiLCJ0b3RhbFBhcnNlZElucHV0TGVuZ3RoIiwibWVyaWRpZW1GaXhXcmFwIiwiaXNQbSIsImNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheSIsInRlbXBDb25maWciLCJiZXN0TW9tZW50Iiwic2NvcmVUb0JlYXQiLCJjdXJyZW50U2NvcmUiLCJzY29yZSIsImNvbmZpZ0Zyb21PYmplY3QiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCIsImNyZWF0ZUZyb21Db25maWciLCJwcmVwYXJlQ29uZmlnIiwiY29uZmlnRnJvbUlucHV0IiwiaXNVVEMiLCJwcm90b3R5cGVNaW4iLCJvdGhlciIsInByb3RvdHlwZU1heCIsInBpY2tCeSIsIm1vbWVudHMiLCJvcmRlcmluZyIsImlzRHVyYXRpb25WYWxpZCIsInVuaXRIYXNEZWNpbWFsIiwicGFyc2VGbG9hdCIsImlzVmFsaWQkMSIsImNyZWF0ZUludmFsaWQkMSIsImNyZWF0ZUR1cmF0aW9uIiwiRHVyYXRpb24iLCJkdXJhdGlvbiIsInllYXJzIiwicXVhcnRlcnMiLCJxdWFydGVyIiwid2Vla3MiLCJpc29XZWVrIiwibWlsbGlzZWNvbmRzIiwiX21pbGxpc2Vjb25kcyIsIl9kYXlzIiwiX2RhdGEiLCJfYnViYmxlIiwiaXNEdXJhdGlvbiIsImFic1JvdW5kIiwicm91bmQiLCJvZmZzZXQiLCJ1dGNPZmZzZXQiLCJvZmZzZXRGcm9tU3RyaW5nIiwiY2h1bmtPZmZzZXQiLCJtYXRjaGVyIiwibWF0Y2hlcyIsImNodW5rIiwiY2xvbmVXaXRoT2Zmc2V0IiwibW9kZWwiLCJjbG9uZSIsInNldFRpbWUiLCJsb2NhbCIsImdldERhdGVPZmZzZXQiLCJnZXRUaW1lem9uZU9mZnNldCIsImdldFNldE9mZnNldCIsImtlZXBMb2NhbFRpbWUiLCJrZWVwTWludXRlcyIsImxvY2FsQWRqdXN0IiwiX2NoYW5nZUluUHJvZ3Jlc3MiLCJhZGRTdWJ0cmFjdCIsImdldFNldFpvbmUiLCJzZXRPZmZzZXRUb1VUQyIsInNldE9mZnNldFRvTG9jYWwiLCJzdWJ0cmFjdCIsInNldE9mZnNldFRvUGFyc2VkT2Zmc2V0IiwidFpvbmUiLCJoYXNBbGlnbmVkSG91ck9mZnNldCIsImlzRGF5bGlnaHRTYXZpbmdUaW1lIiwiaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkIiwiX2lzRFNUU2hpZnRlZCIsInRvQXJyYXkiLCJpc0xvY2FsIiwiaXNVdGNPZmZzZXQiLCJpc1V0YyIsImFzcE5ldFJlZ2V4IiwiaXNvUmVnZXgiLCJyZXQiLCJkaWZmUmVzIiwicGFyc2VJc28iLCJtb21lbnRzRGlmZmVyZW5jZSIsImludmFsaWQiLCJpbnAiLCJwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlIiwiYmFzZSIsImlzQWZ0ZXIiLCJpc0JlZm9yZSIsImNyZWF0ZUFkZGVyIiwiZGlyZWN0aW9uIiwiZHVyIiwidG1wIiwiaXNBZGRpbmciLCJnZXRDYWxlbmRhckZvcm1hdCIsIm15TW9tZW50IiwiY2FsZW5kYXIkMSIsImZvcm1hdHMiLCJzb2QiLCJzdGFydE9mIiwiY2FsZW5kYXJGb3JtYXQiLCJsb2NhbElucHV0IiwiZW5kT2YiLCJpc0JldHdlZW4iLCJpbmNsdXNpdml0eSIsImxvY2FsRnJvbSIsImxvY2FsVG8iLCJpc1NhbWUiLCJpbnB1dE1zIiwiaXNTYW1lT3JBZnRlciIsImlzU2FtZU9yQmVmb3JlIiwiYXNGbG9hdCIsInRoYXQiLCJ6b25lRGVsdGEiLCJtb250aERpZmYiLCJ3aG9sZU1vbnRoRGlmZiIsImFuY2hvciIsImFuY2hvcjIiLCJhZGp1c3QiLCJkZWZhdWx0Rm9ybWF0IiwiZGVmYXVsdEZvcm1hdFV0YyIsImtlZXBPZmZzZXQiLCJ0b0RhdGUiLCJpbnNwZWN0Iiwiem9uZSIsInByZWZpeCIsImRhdGV0aW1lIiwic3VmZml4IiwiaW5wdXRTdHJpbmciLCJodW1hbml6ZSIsImZyb21Ob3ciLCJ0b05vdyIsIm5ld0xvY2FsZURhdGEiLCJsYW5nIiwiTVNfUEVSX1NFQ09ORCIsIk1TX1BFUl9NSU5VVEUiLCJNU19QRVJfSE9VUiIsIk1TX1BFUl80MDBfWUVBUlMiLCJtb2QkMSIsImRpdmlkZW5kIiwiZGl2aXNvciIsImxvY2FsU3RhcnRPZkRhdGUiLCJ1dGNTdGFydE9mRGF0ZSIsInN0YXJ0T2ZEYXRlIiwiaXNvV2Vla2RheSIsInVuaXgiLCJ0b09iamVjdCIsImlzVmFsaWQkMiIsInBhcnNpbmdGbGFncyIsImludmFsaWRBdCIsImNyZWF0aW9uRGF0YSIsImlzb1dlZWtZZWFyIiwiYWRkV2Vla1llYXJGb3JtYXRUb2tlbiIsImdldHRlciIsImdldFNldFdlZWtZZWFyIiwiZ2V0U2V0V2Vla1llYXJI
33378ZWxwZXIiLCJnZXRTZXRJU09XZWVrWWVhciIsImdldElTT1dlZWtzSW5ZZWFyIiwiZ2V0V2Vla3NJblllYXIiLCJ3ZWVrSW5mbyIsIndlZWtzVGFyZ2V0Iiwic2V0V2Vla0FsbCIsImRheU9mWWVhckRhdGEiLCJnZXRTZXRRdWFydGVyIiwiZ2V0U2V0RGF5T2ZNb250aCIsImdldFNldERheU9mWWVhciIsImdldFNldE1pbnV0ZSIsImdldFNldFNlY29uZCIsInBhcnNlTXMiLCJnZXRTZXRNaWxsaXNlY29uZCIsImdldFpvbmVBYmJyIiwiZ2V0Wm9uZU5hbWUiLCJwcm90byIsImlzb1dlZWtzIiwiaXNvV2Vla3NJblllYXIiLCJwYXJzZVpvbmUiLCJpc0RTVCIsInpvbmVBYmJyIiwiem9uZU5hbWUiLCJkYXRlcyIsImlzRFNUU2hpZnRlZCIsImNyZWF0ZVVuaXgiLCJjcmVhdGVJblpvbmUiLCJwcmVQYXJzZVBvc3RGb3JtYXQiLCJwcm90byQxIiwiZmlyc3REYXlPZlllYXIiLCJmaXJzdERheU9mV2VlayIsImdldCQxIiwiaW5kZXgiLCJmaWVsZCIsInNldHRlciIsImxpc3RNb250aHNJbXBsIiwib3V0IiwibGlzdFdlZWtkYXlzSW1wbCIsImxvY2FsZVNvcnRlZCIsImxpc3RNb250aHMiLCJsaXN0TW9udGhzU2hvcnQiLCJsaXN0V2Vla2RheXMiLCJsaXN0V2Vla2RheXNTaG9ydCIsImxpc3RXZWVrZGF5c01pbiIsImxhbmdEYXRhIiwibWF0aEFicyIsImFkZFN1YnRyYWN0JDEiLCJhZGQkMSIsInN1YnRyYWN0JDEiLCJhYnNDZWlsIiwiYnViYmxlIiwibW9udGhzRnJvbURheXMiLCJtb250aHNUb0RheXMiLCJkYXlzVG9Nb250aHMiLCJhcyIsInZhbHVlT2YkMSIsIm1ha2VBcyIsImFsaWFzIiwiYXNNaWxsaXNlY29uZHMiLCJhc1NlY29uZHMiLCJhc01pbnV0ZXMiLCJhc0hvdXJzIiwiYXNEYXlzIiwiYXNXZWVrcyIsImFzTW9udGhzIiwiYXNRdWFydGVycyIsImFzWWVhcnMiLCJjbG9uZSQxIiwiZ2V0JDIiLCJtYWtlR2V0dGVyIiwidGhyZXNob2xkcyIsInN1YnN0aXR1dGVUaW1lQWdvIiwicmVsYXRpdmVUaW1lJDEiLCJwb3NOZWdEdXJhdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nIiwicm91bmRpbmdGdW5jdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCIsInRocmVzaG9sZCIsImxpbWl0Iiwid2l0aFN1ZmZpeCIsImFicyQxIiwidG9JU09TdHJpbmckMSIsIlkiLCJEIiwidG9GaXhlZCIsInRvdGFsIiwidG90YWxTaWduIiwieW1TaWduIiwiZGF5c1NpZ24iLCJobXNTaWduIiwicHJvdG8kMiIsInRvSXNvU3RyaW5nIiwidmVyc2lvbiIsInJlbGF0aXZlVGltZVJvdW5kaW5nIiwicmVsYXRpdmVUaW1lVGhyZXNob2xkIiwiSFRNTDVfRk1UIiwiREFURVRJTUVfTE9DQUwiLCJEQVRFVElNRV9MT0NBTF9TRUNPTkRTIiwiREFURVRJTUVfTE9DQUxfTVMiLCJUSU1FIiwiVElNRV9TRUNPTkRTIiwiVElNRV9NUyIsImNhY2hlZFNldFRpbWVvdXQiLCJjYWNoZWRDbGVhclRpbWVvdXQiLCJkZWZhdWx0U2V0VGltb3V0IiwiZGVmYXVsdENsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJydW5UaW1lb3V0IiwicnVuQ2xlYXJUaW1lb3V0IiwibWFya2VyIiwicXVldWUiLCJkcmFpbmluZyIsImN1cnJlbnRRdWV1ZSIsInF1ZXVlSW5kZXgiLCJjbGVhblVwTmV4dFRpY2siLCJkcmFpblF1ZXVlIiwicnVuIiwibmV4dFRpY2siLCJJdGVtIiwidGl0bGUiLCJicm93c2VyIiwiZW52IiwiYXJndiIsInZlcnNpb25zIiwibm9vcCIsIm9uIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImxpc3RlbmVycyIsImJpbmRpbmciLCJjd2QiLCJjaGRpciIsImRpciIsInVtYXNrIiwicnVudGltZSIsIk9wIiwiaGFzT3duIiwiJFN5bWJvbCIsIlN5bWJvbCIsIml0ZXJhdG9yU3ltYm9sIiwiaXRlcmF0b3IiLCJhc3luY0l0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnU3ltYm9sIiwidG9TdHJpbmdUYWciLCJpbm5lckZuIiwib3V0ZXJGbiIsInRyeUxvY3NMaXN0IiwicHJvdG9HZW5lcmF0b3IiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJDb250ZXh0IiwiX2ludm9rZSIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0IiwiR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCIsIkdlblN0YXRlRXhlY3V0aW5nIiwiR2VuU3RhdGVDb21wbGV0ZWQiLCJDb250aW51ZVNlbnRpbmVsIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsIkl0ZXJhdG9yUHJvdG90eXBlIiwiZ2V0UHJvdG8iLCJnZXRQcm90b3R5cGVPZiIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwiR3AiLCJkaXNwbGF5TmFtZSIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJnZW5GdW4iLCJjdG9yIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJfX2F3YWl0IiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsInJlY29yZCIsInVud3JhcHBlZCIsInByZXZpb3VzUHJvbWlzZSIsImVucXVldWUiLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsImFzeW5jIiwiaXRlciIsInN0YXRlIiwiZG9uZVJlc3VsdCIsImRlbGVnYXRlIiwiZGVsZWdhdGVSZXN1bHQiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJyZXN1bHROYW1lIiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsImxvY3MiLCJlbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJvYmplY3QiLCJyZXZlcnNlIiwicG9wIiwiaXRlcmFibGUiLCJpdGVyYXRvck1ldGhvZCIsInNraXBUZW1wUmVzZXQiLCJwcmV2Iiwic3RvcCIsInJvb3RFbnRyeSIsInJvb3RSZWNvcmQiLCJydmFsIiwiZXhjZXB0aW9uIiwiaGFuZGxlIiwibG9jIiwiY2F1Z2h0IiwiaGFzQ2F0Y2giLCJoYXNGaW5hbGx5IiwiZmluYWxseUVudHJ5IiwiY29tcGxldGUiLCJmaW5pc2giLCJ0aHJvd24iLCJkZWxlZ2F0ZVlpZWxkIiwicmVnZW5lcmF0b3JSdW50aW1lIiwiYWNjaWRlbnRhbFN0cmljdE1vZGUiLCJzZXRJbW1lZGlhdGUiLCJuZXh0SGFuZGxlIiwidGFza3NCeUhhbmRsZSIsImN1cnJlbnRseVJ1bm5pbmdBVGFzayIsImRvYyIsInJlZ2lzdGVySW1tZWRpYXRlIiwidGFzayIsIm
33378NsZWFySW1tZWRpYXRlIiwicnVuSWZQcmVzZW50IiwiaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24iLCJjYW5Vc2VQb3N0TWVzc2FnZSIsInBvc3RNZXNzYWdlIiwiaW1wb3J0U2NyaXB0cyIsInBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMiLCJvbGRPbk1lc3NhZ2UiLCJvbm1lc3NhZ2UiLCJpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbiIsIm1lc3NhZ2VQcmVmaXgiLCJyYW5kb20iLCJvbkdsb2JhbE1lc3NhZ2UiLCJldmVudCIsImF0dGFjaEV2ZW50IiwiaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24iLCJjaGFubmVsIiwiTWVzc2FnZUNoYW5uZWwiLCJwb3J0MSIsInBvcnQyIiwiaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbiIsImh0bWwiLCJkb2N1bWVudEVsZW1lbnQiLCJzY3JpcHQiLCJyZW1vdmVDaGlsZCIsImFwcGVuZENoaWxkIiwiaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbiIsImF0dGFjaFRvIiwic2NvcGUiLCJUaW1lb3V0Iiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiY2xvc2UiLCJjbGVhckZuIiwiX2lkIiwiX2NsZWFyRm4iLCJ1bnJlZiIsInJlZiIsImVucm9sbCIsIml0ZW0iLCJtc2VjcyIsIl9pZGxlVGltZW91dElkIiwiX2lkbGVUaW1lb3V0IiwidW5lbnJvbGwiLCJfdW5yZWZBY3RpdmUiLCJhY3RpdmUiLCJvblRpbWVvdXQiLCJfb25UaW1lb3V0IiwiZW1wdHlPYmplY3QiLCJmcmVlemUiLCJpc1VuZGVmIiwiaXNEZWYiLCJpc1RydWUiLCJpc0ZhbHNlIiwiaXNQcmltaXRpdmUiLCJfdG9TdHJpbmciLCJ0b1Jhd1R5cGUiLCJpc1BsYWluT2JqZWN0IiwiaXNSZWdFeHAiLCJpc1ZhbGlkQXJyYXlJbmRleCIsIlN0cmluZyIsImlzUHJvbWlzZSIsImNhdGNoIiwidG9OdW1iZXIiLCJtYWtlTWFwIiwiZXhwZWN0c0xvd2VyQ2FzZSIsImxpc3QiLCJpc0J1aWx0SW5UYWciLCJpc1Jlc2VydmVkQXR0cmlidXRlIiwic3BsaWNlIiwiY2FjaGVkIiwiY2FjaGUiLCJjYWNoZWRGbiIsImhpdCIsImNhbWVsaXplUkUiLCJjYW1lbGl6ZSIsIl8iLCJjYXBpdGFsaXplIiwiaHlwaGVuYXRlUkUiLCJoeXBoZW5hdGUiLCJwb2x5ZmlsbEJpbmQiLCJjdHgiLCJib3VuZEZuIiwiX2xlbmd0aCIsIm5hdGl2ZUJpbmQiLCJzdGFydCIsIl9mcm9tIiwibm8iLCJpZGVudGl0eSIsImdlblN0YXRpY0tleXMiLCJtb2R1bGVzIiwicmVkdWNlIiwic3RhdGljS2V5cyIsImxvb3NlRXF1YWwiLCJpc09iamVjdEEiLCJpc09iamVjdEIiLCJpc0FycmF5QSIsImlzQXJyYXlCIiwiZXZlcnkiLCJrZXlzQSIsImtleXNCIiwibG9vc2VJbmRleE9mIiwiY2FsbGVkIiwiU1NSX0FUVFIiLCJBU1NFVF9UWVBFUyIsIkxJRkVDWUNMRV9IT09LUyIsIm9wdGlvbk1lcmdlU3RyYXRlZ2llcyIsInNpbGVudCIsInByb2R1Y3Rpb25UaXAiLCJkZXZ0b29scyIsInBlcmZvcm1hbmNlIiwiZXJyb3JIYW5kbGVyIiwid2FybkhhbmRsZXIiLCJpZ25vcmVkRWxlbWVudHMiLCJrZXlDb2RlcyIsImlzUmVzZXJ2ZWRUYWciLCJpc1Jlc2VydmVkQXR0ciIsImlzVW5rbm93bkVsZW1lbnQiLCJnZXRUYWdOYW1lc3BhY2UiLCJwYXJzZVBsYXRmb3JtVGFnTmFtZSIsIm11c3RVc2VQcm9wIiwiX2xpZmVjeWNsZUhvb2tzIiwidW5pY29kZVJlZ0V4cCIsImlzUmVzZXJ2ZWQiLCJjaGFyQ29kZUF0IiwiZGVmIiwiZW51bWVyYWJsZSIsImRlZmluZVByb3BlcnR5Iiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJiYWlsUkUiLCJwYXJzZVBhdGgiLCJzZWdtZW50cyIsImhhc1Byb3RvIiwiaW5Ccm93c2VyIiwiaW5XZWV4IiwiV1hFbnZpcm9ubWVudCIsInBsYXRmb3JtIiwid2VleFBsYXRmb3JtIiwiVUEiLCJpc0lFIiwiaXNJRTkiLCJpc0VkZ2UiLCJpc0FuZHJvaWQiLCJpc0lPUyIsImlzQ2hyb21lIiwiaXNQaGFudG9tSlMiLCJpc0ZGIiwibmF0aXZlV2F0Y2giLCJ3YXRjaCIsInN1cHBvcnRzUGFzc2l2ZSIsIm9wdHMiLCJfaXNTZXJ2ZXIiLCJpc1NlcnZlclJlbmRlcmluZyIsIlZVRV9FTlYiLCJfX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fIiwiaXNOYXRpdmUiLCJDdG9yIiwiaGFzU3ltYm9sIiwiUmVmbGVjdCIsIm93bktleXMiLCJfU2V0IiwiU2V0IiwiaGFzIiwiY2xlYXIiLCJ0aXAiLCJnZW5lcmF0ZUNvbXBvbmVudFRyYWNlIiwiZm9ybWF0Q29tcG9uZW50TmFtZSIsImhhc0NvbnNvbGUiLCJjbGFzc2lmeVJFIiwiY2xhc3NpZnkiLCJ2bSIsInRyYWNlIiwiaW5jbHVkZUZpbGUiLCIkcm9vdCIsIm9wdGlvbnMiLCJjaWQiLCJfaXNWdWUiLCIkb3B0aW9ucyIsIl9jb21wb25lbnRUYWciLCJmaWxlIiwiX19maWxlIiwicmVwZWF0IiwiJHBhcmVudCIsInRyZWUiLCJjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UiLCJsYXN0IiwidWlkIiwiRGVwIiwic3VicyIsImFkZFN1YiIsInN1YiIsInJlbW92ZVN1YiIsImRlcGVuZCIsInRhcmdldCIsImFkZERlcCIsIm5vdGlmeSIsInVwZGF0ZSIsInRhcmdldFN0YWNrIiwicHVzaFRhcmdldCIsInBvcFRhcmdldCIsIlZOb2RlIiwidGFnIiwiY2hpbGRyZW4iLCJlbG0iLCJjb21wb25lbnRPcHRpb25zIiwiYXN5bmNGYWN0b3J5IiwibnMiLCJmbkNvbnRleHQiLCJmbk9wdGlvbnMiLCJmblNjb3BlSWQiLCJjb21wb25lbnRJbnN0YW5jZSIsInBhcmVudCIsInJhdyIsImlzU3RhdGljIiwiaXNSb290SW5zZXJ0IiwiaXNDb21tZW50IiwiaXNDbG9uZWQiLCJpc09uY2UiLCJhc3luY01ldGEiLCJpc0FzeW5jUGxhY2Vob2xkZXIiLCJwcm90b3R5cGVBY2Nlc3NvcnMiLCJjaGlsZCIsImRlZmluZVByb3BlcnRpZXMiLCJjcmVhdGVFbXB0eVZOb2RlIiwibm9kZSIsImNyZWF0ZVRleHRWTm9kZSIsImNsb25lVk5vZGUiLCJ2bm9kZSIsImNsb25lZCIsImFycmF5UHJvdG8iLCJhcnJheU1ldGhvZHMiLCJtZXRob2RzVG9QYXRjaCIsIm9yaWdpbmFsIiwibXV0YXRvciIsIm9iIiwiX19vYl9fIiwiaW5zZXJ0ZWQiLCJvYnNlcnZlQXJyYXkiLCJkZXAiLCJhcnJheUtleXMiLCJzaG91bGRPYnNlcnZlIiwidG9nZ2xlT2JzZXJ2aW5nIiwiT2JzZXJ2ZXIiLCJ2bUNvdW50IiwicHJvdG9BdWdtZW50IiwiY29weUF1Z21lbnQiLCJ3YWxrIiwiZGVmaW5lUmVhY3RpdmUkJDEiLCJpdGVtcyIsIm9ic2VydmUiLCJzcmMiLCJhc1Jvb3REYXRhIiwiaXNFeHRlbnNpYmxlIiwiY3VzdG9tU2V0dGVyIiwic2hhbGxvdyIsInByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiY2hpbGRPYiIsInJlYWN0aXZlR2V0dGVyIiwi
33378ZGVwZW5kQXJyYXkiLCJyZWFjdGl2ZVNldHRlciIsIm5ld1ZhbCIsImRlbCIsInN0cmF0cyIsInByb3BzRGF0YSIsImRlZmF1bHRTdHJhdCIsIm1lcmdlRGF0YSIsInRvVmFsIiwiZnJvbVZhbCIsIm1lcmdlRGF0YU9yRm4iLCJwYXJlbnRWYWwiLCJjaGlsZFZhbCIsIm1lcmdlZERhdGFGbiIsIm1lcmdlZEluc3RhbmNlRGF0YUZuIiwiaW5zdGFuY2VEYXRhIiwiZGVmYXVsdERhdGEiLCJtZXJnZUhvb2siLCJkZWR1cGVIb29rcyIsImhvb2siLCJtZXJnZUFzc2V0cyIsImFzc2VydE9iamVjdFR5cGUiLCJrZXkkMSIsInByb3BzIiwibWV0aG9kcyIsImluamVjdCIsImNvbXB1dGVkIiwicHJvdmlkZSIsImNoZWNrQ29tcG9uZW50cyIsInZhbGlkYXRlQ29tcG9uZW50TmFtZSIsIm5vcm1hbGl6ZVByb3BzIiwibm9ybWFsaXplSW5qZWN0Iiwibm9ybWFsaXplZCIsIm5vcm1hbGl6ZURpcmVjdGl2ZXMiLCJkaXJzIiwiZGlyZWN0aXZlcyIsImRlZiQkMSIsIm1lcmdlT3B0aW9ucyIsIl9iYXNlIiwiZXh0ZW5kcyIsIm1peGlucyIsIm1lcmdlRmllbGQiLCJzdHJhdCIsInJlc29sdmVBc3NldCIsIndhcm5NaXNzaW5nIiwiYXNzZXRzIiwiY2FtZWxpemVkSWQiLCJQYXNjYWxDYXNlSWQiLCJ2YWxpZGF0ZVByb3AiLCJwcm9wT3B0aW9ucyIsImFic2VudCIsImJvb2xlYW5JbmRleCIsImdldFR5cGVJbmRleCIsIkJvb2xlYW4iLCJzdHJpbmdJbmRleCIsImdldFByb3BEZWZhdWx0VmFsdWUiLCJwcmV2U2hvdWxkT2JzZXJ2ZSIsImFzc2VydFByb3AiLCJfcHJvcHMiLCJnZXRUeXBlIiwicmVxdWlyZWQiLCJ2YWxpZCIsImV4cGVjdGVkVHlwZXMiLCJhc3NlcnRlZFR5cGUiLCJhc3NlcnRUeXBlIiwiZXhwZWN0ZWRUeXBlIiwiZ2V0SW52YWxpZFR5cGVNZXNzYWdlIiwidmFsaWRhdG9yIiwic2ltcGxlQ2hlY2tSRSIsImlzU2FtZVR5cGUiLCJyZWNlaXZlZFR5cGUiLCJleHBlY3RlZFZhbHVlIiwic3R5bGVWYWx1ZSIsInJlY2VpdmVkVmFsdWUiLCJpc0V4cGxpY2FibGUiLCJpc0Jvb2xlYW4iLCJOdW1iZXIiLCJleHBsaWNpdFR5cGVzIiwiZWxlbSIsImN1ciIsImVycm9yQ2FwdHVyZWQiLCJjYXB0dXJlIiwiZ2xvYmFsSGFuZGxlRXJyb3IiLCJpbnZva2VXaXRoRXJyb3JIYW5kbGluZyIsImhhbmRsZXIiLCJfaGFuZGxlZCIsImxvZ0Vycm9yIiwiaXNVc2luZ01pY3JvVGFzayIsImNhbGxiYWNrcyIsInBlbmRpbmciLCJmbHVzaENhbGxiYWNrcyIsImNvcGllcyIsInRpbWVyRnVuYyIsInAiLCJNdXRhdGlvbk9ic2VydmVyIiwiY291bnRlciIsIm9ic2VydmVyIiwidGV4dE5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsImNoYXJhY3RlckRhdGEiLCJjYiIsIl9yZXNvbHZlIiwibWVhc3VyZSIsInBlcmYiLCJjbGVhck1hcmtzIiwiY2xlYXJNZWFzdXJlcyIsInN0YXJ0VGFnIiwiZW5kVGFnIiwiaW5pdFByb3h5IiwiYWxsb3dlZEdsb2JhbHMiLCJ3YXJuTm9uUHJlc2VudCIsIndhcm5SZXNlcnZlZFByZWZpeCIsImhhc1Byb3h5IiwiUHJveHkiLCJpc0J1aWx0SW5Nb2RpZmllciIsImhhc0hhbmRsZXIiLCJpc0FsbG93ZWQiLCIkZGF0YSIsImdldEhhbmRsZXIiLCJyZW5kZXIiLCJfd2l0aFN0cmlwcGVkIiwiX3JlbmRlclByb3h5Iiwic2Vlbk9iamVjdHMiLCJ0cmF2ZXJzZSIsIl90cmF2ZXJzZSIsInNlZW4iLCJpc0EiLCJkZXBJZCIsIm5vcm1hbGl6ZUV2ZW50IiwicGFzc2l2ZSIsIm9uY2UkJDEiLCJjcmVhdGVGbkludm9rZXIiLCJpbnZva2VyIiwiYXJndW1lbnRzJDEiLCJ1cGRhdGVMaXN0ZW5lcnMiLCJvbGRPbiIsInJlbW92ZSQkMSIsImNyZWF0ZU9uY2VIYW5kbGVyIiwib2xkIiwibWVyZ2VWTm9kZUhvb2siLCJob29rS2V5Iiwib2xkSG9vayIsIndyYXBwZWRIb29rIiwibWVyZ2VkIiwiZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YSIsImF0dHJzIiwiYWx0S2V5Iiwia2V5SW5Mb3dlckNhc2UiLCJjaGVja1Byb3AiLCJwcmVzZXJ2ZSIsInNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuIiwibm9ybWFsaXplQ2hpbGRyZW4iLCJub3JtYWxpemVBcnJheUNoaWxkcmVuIiwiaXNUZXh0Tm9kZSIsIm5lc3RlZEluZGV4IiwiX2lzVkxpc3QiLCJpbml0UHJvdmlkZSIsIl9wcm92aWRlZCIsImluaXRJbmplY3Rpb25zIiwicmVzb2x2ZUluamVjdCIsInByb3ZpZGVLZXkiLCJwcm92aWRlRGVmYXVsdCIsInJlc29sdmVTbG90cyIsInNsb3RzIiwic2xvdCIsIm5hbWUkMSIsImlzV2hpdGVzcGFjZSIsIm5vcm1hbGl6ZVNjb3BlZFNsb3RzIiwibm9ybWFsU2xvdHMiLCJwcmV2U2xvdHMiLCJoYXNOb3JtYWxTbG90cyIsImlzU3RhYmxlIiwiJHN0YWJsZSIsIiRrZXkiLCJfbm9ybWFsaXplZCIsIiRoYXNOb3JtYWwiLCJub3JtYWxpemVTY29wZWRTbG90Iiwia2V5JDIiLCJwcm94eU5vcm1hbFNsb3QiLCJwcm94eSIsInJlbmRlckxpc3QiLCJyZW5kZXJTbG90IiwiZmFsbGJhY2siLCJiaW5kT2JqZWN0Iiwic2NvcGVkU2xvdEZuIiwiJHNjb3BlZFNsb3RzIiwibm9kZXMiLCIkc2xvdHMiLCIkY3JlYXRlRWxlbWVudCIsInJlc29sdmVGaWx0ZXIiLCJpc0tleU5vdE1hdGNoIiwiZXhwZWN0IiwiYWN0dWFsIiwiY2hlY2tLZXlDb2RlcyIsImV2ZW50S2V5Q29kZSIsImJ1aWx0SW5LZXlDb2RlIiwiZXZlbnRLZXlOYW1lIiwiYnVpbHRJbktleU5hbWUiLCJtYXBwZWRLZXlDb2RlIiwiYmluZE9iamVjdFByb3BzIiwiYXNQcm9wIiwiaXNTeW5jIiwibG9vcCIsImRvbVByb3BzIiwiY2FtZWxpemVkS2V5IiwiaHlwaGVuYXRlZEtleSIsIiRldmVudCIsInJlbmRlclN0YXRpYyIsImlzSW5Gb3IiLCJfc3RhdGljVHJlZXMiLCJzdGF0aWNSZW5kZXJGbnMiLCJtYXJrU3RhdGljIiwibWFya09uY2UiLCJtYXJrU3RhdGljTm9kZSIsImJpbmRPYmplY3RMaXN0ZW5lcnMiLCJleGlzdGluZyIsIm91cnMiLCJyZXNvbHZlU2NvcGVkU2xvdHMiLCJoYXNEeW5hbWljS2V5cyIsImNvbnRlbnRIYXNoS2V5IiwiYmluZER5bmFtaWNLZXlzIiwiYmFzZU9iaiIsInByZXBlbmRNb2RpZmllciIsInN5bWJvbCIsImluc3RhbGxSZW5kZXJIZWxwZXJzIiwiX28iLCJfbiIsIl9zIiwiX3QiLCJfcSIsIl9tIiwiX2siLCJfYiIsIl92IiwiX2UiLCJfdSIsIl9nIiwiX3AiLCJGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCIsInRoaXMkMSIsImNvbn
33378RleHRWbSIsIl9vcmlnaW5hbCIsImlzQ29tcGlsZWQiLCJfY29tcGlsZWQiLCJuZWVkTm9ybWFsaXphdGlvbiIsImluamVjdGlvbnMiLCJzY29wZWRTbG90cyIsIl9zY29wZUlkIiwiX2MiLCJjcmVhdGVGdW5jdGlvbmFsQ29tcG9uZW50IiwibWVyZ2VQcm9wcyIsInJlbmRlckNvbnRleHQiLCJjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0Iiwidm5vZGVzIiwiZGV2dG9vbHNNZXRhIiwiY29tcG9uZW50Vk5vZGVIb29rcyIsImluaXQiLCJoeWRyYXRpbmciLCJfaXNEZXN0cm95ZWQiLCJrZWVwQWxpdmUiLCJtb3VudGVkTm9kZSIsInByZXBhdGNoIiwiY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZSIsImFjdGl2ZUluc3RhbmNlIiwiJG1vdW50Iiwib2xkVm5vZGUiLCJ1cGRhdGVDaGlsZENvbXBvbmVudCIsImluc2VydCIsIl9pc01vdW50ZWQiLCJjYWxsSG9vayIsInF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50IiwiYWN0aXZhdGVDaGlsZENvbXBvbmVudCIsImRlc3Ryb3kiLCIkZGVzdHJveSIsImRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCIsImhvb2tzVG9NZXJnZSIsImNyZWF0ZUNvbXBvbmVudCIsImJhc2VDdG9yIiwicmVzb2x2ZUFzeW5jQ29tcG9uZW50IiwiY3JlYXRlQXN5bmNQbGFjZWhvbGRlciIsInJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMiLCJ0cmFuc2Zvcm1Nb2RlbCIsImZ1bmN0aW9uYWwiLCJuYXRpdmVPbiIsImFic3RyYWN0IiwiaW5zdGFsbENvbXBvbmVudEhvb2tzIiwiX2lzQ29tcG9uZW50IiwiX3BhcmVudFZub2RlIiwiaW5saW5lVGVtcGxhdGUiLCJ0b01lcmdlIiwiX21lcmdlZCIsIm1lcmdlSG9vayQxIiwiZjEiLCJmMiIsIlNJTVBMRV9OT1JNQUxJWkUiLCJBTFdBWVNfTk9STUFMSVpFIiwibm9ybWFsaXphdGlvblR5cGUiLCJhbHdheXNOb3JtYWxpemUiLCJfY3JlYXRlRWxlbWVudCIsIiR2bm9kZSIsInByZSIsImFwcGx5TlMiLCJyZWdpc3RlckRlZXBCaW5kaW5ncyIsImZvcmNlIiwic3R5bGUiLCJjbGFzcyIsImluaXRSZW5kZXIiLCJfdm5vZGUiLCJwYXJlbnRWbm9kZSIsIl9yZW5kZXJDaGlsZHJlbiIsInBhcmVudERhdGEiLCJpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQiLCJfcGFyZW50TGlzdGVuZXJzIiwiY3VycmVudFJlbmRlcmluZ0luc3RhbmNlIiwicmVuZGVyTWl4aW4iLCIkbmV4dFRpY2siLCJfcmVuZGVyIiwicmVuZGVyRXJyb3IiLCJlbnN1cmVDdG9yIiwiY29tcCIsImVycm9yQ29tcCIsInJlc29sdmVkIiwib3duZXIiLCJvd25lcnMiLCJsb2FkaW5nIiwibG9hZGluZ0NvbXAiLCJzeW5jIiwidGltZXJMb2FkaW5nIiwidGltZXJUaW1lb3V0IiwiJG9uIiwiZm9yY2VSZW5kZXIiLCJyZW5kZXJDb21wbGV0ZWQiLCIkZm9yY2VVcGRhdGUiLCJjb21wb25lbnQiLCJkZWxheSIsImdldEZpcnN0Q29tcG9uZW50Q2hpbGQiLCJpbml0RXZlbnRzIiwiX2V2ZW50cyIsIl9oYXNIb29rRXZlbnQiLCJ1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnMiLCJyZW1vdmUkMSIsIiRvZmYiLCJfdGFyZ2V0Iiwib25jZUhhbmRsZXIiLCJvbGRMaXN0ZW5lcnMiLCJldmVudHNNaXhpbiIsImhvb2tSRSIsIiRvbmNlIiwiaSQxIiwiY2JzIiwiJGVtaXQiLCJsb3dlckNhc2VFdmVudCIsInNldEFjdGl2ZUluc3RhbmNlIiwicHJldkFjdGl2ZUluc3RhbmNlIiwiaW5pdExpZmVjeWNsZSIsIiRjaGlsZHJlbiIsIiRyZWZzIiwiX3dhdGNoZXIiLCJfaW5hY3RpdmUiLCJfZGlyZWN0SW5hY3RpdmUiLCJfaXNCZWluZ0Rlc3Ryb3llZCIsImxpZmVjeWNsZU1peGluIiwiX3VwZGF0ZSIsInByZXZFbCIsIiRlbCIsInByZXZWbm9kZSIsInJlc3RvcmVBY3RpdmVJbnN0YW5jZSIsIl9fcGF0Y2hfXyIsIl9fdnVlX18iLCJ0ZWFyZG93biIsIl93YXRjaGVycyIsIm1vdW50Q29tcG9uZW50IiwidGVtcGxhdGUiLCJ1cGRhdGVDb21wb25lbnQiLCJfbmFtZSIsIl91aWQiLCJXYXRjaGVyIiwiYmVmb3JlIiwicmVuZGVyQ2hpbGRyZW4iLCJuZXdTY29wZWRTbG90cyIsIm9sZFNjb3BlZFNsb3RzIiwiaGFzRHluYW1pY1Njb3BlZFNsb3QiLCJuZWVkc0ZvcmNlVXBkYXRlIiwiJGF0dHJzIiwiJGxpc3RlbmVycyIsInByb3BLZXlzIiwiX3Byb3BLZXlzIiwiaXNJbkluYWN0aXZlVHJlZSIsImRpcmVjdCIsIk1BWF9VUERBVEVfQ09VTlQiLCJhY3RpdmF0ZWRDaGlsZHJlbiIsImNpcmN1bGFyIiwid2FpdGluZyIsImZsdXNoaW5nIiwicmVzZXRTY2hlZHVsZXJTdGF0ZSIsImN1cnJlbnRGbHVzaFRpbWVzdGFtcCIsImdldE5vdyIsImNyZWF0ZUV2ZW50IiwidGltZVN0YW1wIiwi
33378Zmx1c2hTY2hlZHVsZXJRdWV1ZSIsIndhdGNoZXIiLCJ1c2VyIiwiZXhwcmVzc2lvbiIsImFjdGl2YXRlZFF1ZXVlIiwidXBkYXRlZFF1ZXVlIiwiY2FsbEFjdGl2YXRlZEhvb2tzIiwiY2FsbFVwZGF0ZWRIb29rcyIsInF1ZXVlV2F0Y2hlciIsInVpZCQyIiwiZXhwT3JGbiIsImlzUmVuZGVyV2F0Y2hlciIsImRlZXAiLCJsYXp5IiwiZGlydHkiLCJkZXBzIiwibmV3RGVwcyIsImRlcElkcyIsIm5ld0RlcElkcyIsImNsZWFudXBEZXBzIiwib2xkVmFsdWUiLCJldmFsdWF0ZSIsInNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbiIsInNvdXJjZUtleSIsInByb3h5R2V0dGVyIiwicHJveHlTZXR0ZXIiLCJpbml0U3RhdGUiLCJpbml0UHJvcHMiLCJpbml0TWV0aG9kcyIsImluaXREYXRhIiwiaW5pdENvbXB1dGVkIiwiaW5pdFdhdGNoIiwicHJvcHNPcHRpb25zIiwiaXNSb290IiwiZ2V0RGF0YSIsImNvbXB1dGVkV2F0Y2hlck9wdGlvbnMiLCJ3YXRjaGVycyIsIl9jb21wdXRlZFdhdGNoZXJzIiwiaXNTU1IiLCJ1c2VyRGVmIiwiZGVmaW5lQ29tcHV0ZWQiLCJzaG91bGRDYWNoZSIsImNyZWF0ZUNvbXB1dGVkR2V0dGVyIiwiY3JlYXRlR2V0dGVySW52b2tlciIsImNvbXB1dGVkR2V0dGVyIiwiY3JlYXRlV2F0Y2hlciIsIiR3YXRjaCIsInN0YXRlTWl4aW4iLCJkYXRhRGVmIiwicHJvcHNEZWYiLCIkc2V0IiwiJGRlbGV0ZSIsImltbWVkaWF0ZSIsInVud2F0Y2hGbiIsInVpZCQzIiwiaW5pdE1peGluIiwiX2luaXQiLCJpbml0SW50ZXJuYWxDb21wb25lbnQiLCJfc2VsZiIsInZub2RlQ29tcG9uZW50T3B0aW9ucyIsInN1cGVyIiwic3VwZXJPcHRpb25zIiwiY2FjaGVkU3VwZXJPcHRpb25zIiwibW9kaWZpZWRPcHRpb25zIiwicmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyIsImV4dGVuZE9wdGlvbnMiLCJtb2RpZmllZCIsImxhdGVzdCIsInNlYWxlZCIsInNlYWxlZE9wdGlvbnMiLCJpbml0VXNlIiwicGx1Z2luIiwiaW5zdGFsbGVkUGx1Z2lucyIsIl9pbnN0YWxsZWRQbHVnaW5zIiwiaW5zdGFsbCIsImluaXRNaXhpbiQxIiwibWl4aW4iLCJpbml0RXh0ZW5kIiwiU3VwZXIiLCJTdXBlcklkIiwiY2FjaGVkQ3RvcnMiLCJfQ3RvciIsIlN1YiIsIlZ1ZUNvbXBvbmVudCIsImluaXRQcm9wcyQxIiwiaW5pdENvbXB1dGVkJDEiLCJDb21wIiwiaW5pdEFzc2V0UmVnaXN0ZXJzIiwiZGVmaW5pdGlvbiIsImdldENvbXBvbmVudE5hbWUiLCJwYXR0ZXJuIiwicHJ1bmVDYWNoZSIsImtlZXBBbGl2ZUluc3RhbmNlIiwiY2FjaGVkTm9kZSIsInBydW5lQ2FjaGVFbnRyeSIsImN1cnJlbnQiLCJjYWNoZWQkJDEiLCJwYXR0ZXJuVHlwZXMiLCJLZWVwQWxpdmUiLCJpbmNsdWRlIiwiZXhjbHVkZSIsImNyZWF0ZWQiLCJkZXN0cm95ZWQiLCJtb3VudGVkIiwicmVmJDEiLCJidWlsdEluQ29tcG9uZW50cyIsImluaXRHbG9iYWxBUEkiLCJjb25maWdEZWYiLCJ1dGlsIiwiZGVmaW5lUmVhY3RpdmUiLCJkZWxldGUiLCJvYnNlcnZhYmxlIiwic3NyQ29udGV4dCIsImFjY2VwdFZhbHVlIiwiYXR0ciIsImlzRW51bWVyYXRlZEF0dHIiLCJpc1ZhbGlkQ29udGVudEVkaXRhYmxlVmFsdWUiLCJjb252ZXJ0RW51bWVyYXRlZFZhbHVlIiwiaXNGYWxzeUF0dHJWYWx1ZSIsImlzQm9vbGVhbkF0dHIiLCJ4bGlua05TIiwiaXNYbGluayIsImdldFhsaW5rUHJvcCIsImdlbkNsYXNzRm9yVm5vZGUiLCJwYXJlbnROb2RlIiwiY2hpbGROb2RlIiwibWVyZ2VDbGFzc0RhdGEiLCJyZW5kZXJDbGFzcyIsInN0YXRpY0NsYXNzIiwiZHluYW1pY0NsYXNzIiwic3RyaW5naWZ5Q2xhc3MiLCJzdHJpbmdpZnlBcnJheSIsInN0cmluZ2lmeU9iamVjdCIsInN0cmluZ2lmaWVkIiwibmFtZXNwYWNlTWFwIiwic3ZnIiwibWF0aCIsImlzSFRNTFRhZyIsImlzU1ZHIiwiaXNQcmVUYWciLCJ1bmtub3duRWxlbWVudENhY2hlIiwiSFRNTFVua25vd25FbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJpc1RleHRJbnB1dFR5cGUiLCJxdWVyeSIsInNlbGVjdGVkIiwicXVlcnlTZWxlY3RvciIsImNyZWF0ZUVsZW1lbnQkMSIsInRhZ05hbWUiLCJtdWx0aXBsZSIsImNyZWF0ZUVsZW1lbnROUyIsIm5hbWVzcGFjZSIsImNyZWF0ZUNvbW1lbnQiLCJpbnNlcnRCZWZvcmUiLCJuZXdOb2RlIiwicmVmZXJlbmNlTm9kZSIsIm5leHRTaWJsaW5nIiwic2V0VGV4dENvbnRlbnQiLCJ0ZXh0Q29udGVudCIsInNldFN0eWxlU2NvcGUiLCJzY29wZUlkIiwibm9kZU9wcyIsInJlZ2lzdGVyUmVmIiwiaXNSZW1vdmFsIiwicmVmcyIsInJlZkluRm9yIiwiZW1wdHlOb2RlIiwic2FtZVZub2RlIiwic2FtZUlucHV0VHlwZSIsInR5cGVBIiwidHlwZUIiLCJjcmVhdGVLZXlUb09sZElkeCIsImJlZ2luSWR4IiwiZW5kSWR4IiwiY3JlYXRlUGF0Y2hGdW5jdGlvbiIsImJhY2tlbmQiLCJlbXB0eU5vZGVBdCIsImNyZWF0ZVJtQ2IiLCJjaGlsZEVsbSIsInJlbW92ZU5vZGUiLCJpc1Vua25vd25FbGVtZW50JCQxIiwiaW5WUHJlIiwiaWdub3JlIiwiY3JlYXRpbmdFbG1JblZQcmUiLCJjcmVhdGVFbG0iLCJpbnNlcnRlZFZub2RlUXVldWUiLCJwYXJlbnRFbG0iLCJyZWZFbG0iLCJuZXN0ZWQiLCJvd25lckFycmF5Iiwic2V0U2NvcGUiLCJjcmVhdGVDaGlsZHJlbiIsImludm9rZUNyZWF0ZUhvb2tzIiwiaXNSZWFjdGl2YXRlZCIsImluaXRDb21wb25lbnQiLCJyZWFjdGl2YXRlQ29tcG9uZW50IiwicGVuZGluZ0luc2VydCIsImlzUGF0Y2hhYmxlIiwiaW5uZXJOb2RlIiwidHJhbnNpdGlvbiIsImFjdGl2YXRlIiwicmVmJCQxIiwiY2hlY2tEdXBsaWNhdGVLZXlzIiwiYW5jZXN0b3IiLCJhZGRWbm9kZXMiLCJzdGFydElkeCIsImludm9rZURlc3Ryb3lIb29rIiwicmVtb3ZlVm5vZGVzIiwiY2giLCJyZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rIiwicm0iLCJ1cGRhdGVDaGlsZHJlbiIsIm9sZENoIiwibmV3Q2giLCJyZW1vdmVPbmx5Iiwib2xkU3RhcnRJZHgiLCJuZXdTdGFydElkeCIsIm9sZEVuZElkeCIsIm9sZFN0YXJ0Vm5vZGUiLCJvbGRFbmRWbm9kZSIsIm5ld0VuZElkeCIsIm5ld1N0YXJ0Vm5vZGUiLCJuZXdFbmRWbm9kZSIsIm9sZEtleVRvSWR4IiwiaWR4SW5PbGQiLCJ2bm9kZVRvTW92ZSIsImNhbk1vdmUiLCJwYXRjaFZub2RlIiwiZmluZElkeEluT2xkIiwic2VlbktleXMiLCJlbmQiLCJoeWRyYXRlIiwicG9zdHBhdGNoIiwiaW52b2tlSW5zZXJ0SG9vayIsImluaXRpYWwiLCJoeWRyYXRpb25CYWlsZWQiLCJpc1JlbmRlcmVkTW9kdWxlIiwiYXNzZXJ0Tm9kZU1hdGNoIiwiaGFzQ2hpbGROb2RlcyIsImlubmVySFRNTCIsImNoaWxkcmVuTWF0Y2giLCJmaXJzdENoaWxkIiwiY2hpbGROb2RlcyIsImZ1bGxJbnZva2UiLCJub2RlVHlwZSIsInBhdGNoIiwiaXNJbml0aWFsUGF0Y2giLCJpc1JlYWxFbGVtZW50IiwiaGFzQXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwib2xkRWxtIiwiX2xlYXZlQ2IiLCJwYXRjaGFibGUiLCJpJDIiLCJ1cGRhdGVEaXJlY3RpdmVzIiwidW5iaW5kRGlyZWN0aXZlcyIsImlzQ3JlYX
33378RlIiwiaXNEZXN0cm95Iiwib2xkRGlycyIsIm5vcm1hbGl6ZURpcmVjdGl2ZXMkMSIsIm5ld0RpcnMiLCJkaXJzV2l0aEluc2VydCIsImRpcnNXaXRoUG9zdHBhdGNoIiwib2xkRGlyIiwiY2FsbEhvb2skMSIsIm9sZEFyZyIsImNvbXBvbmVudFVwZGF0ZWQiLCJjYWxsSW5zZXJ0IiwiZW1wdHlNb2RpZmllcnMiLCJtb2RpZmllcnMiLCJnZXRSYXdEaXJOYW1lIiwicmF3TmFtZSIsImJhc2VNb2R1bGVzIiwidXBkYXRlQXR0cnMiLCJpbmhlcml0QXR0cnMiLCJvbGRBdHRycyIsInNldEF0dHIiLCJyZW1vdmVBdHRyaWJ1dGVOUyIsImJhc2VTZXRBdHRyIiwic2V0QXR0cmlidXRlTlMiLCJfX2llcGgiLCJibG9ja2VyIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVwZGF0ZUNsYXNzIiwib2xkRGF0YSIsImNscyIsInRyYW5zaXRpb25DbGFzcyIsIl90cmFuc2l0aW9uQ2xhc3NlcyIsIl9wcmV2Q2xhc3MiLCJrbGFzcyIsInZhbGlkRGl2aXNpb25DaGFyUkUiLCJwYXJzZUZpbHRlcnMiLCJleHAiLCJpblNpbmdsZSIsImluRG91YmxlIiwiaW5UZW1wbGF0ZVN0cmluZyIsImluUmVnZXgiLCJjdXJseSIsInNxdWFyZSIsInBhcmVuIiwibGFzdEZpbHRlckluZGV4IiwiZmlsdGVycyIsInB1c2hGaWx0ZXIiLCJ3cmFwRmlsdGVyIiwiYmFzZVdhcm4iLCJyYW5nZSIsInBsdWNrTW9kdWxlRnVuY3Rpb24iLCJhZGRQcm9wIiwiZHluYW1pYyIsInJhbmdlU2V0SXRlbSIsInBsYWluIiwiYWRkQXR0ciIsImR5bmFtaWNBdHRycyIsImFkZFJhd0F0dHIiLCJhdHRyc01hcCIsImF0dHJzTGlzdCIsImFkZERpcmVjdGl2ZSIsImlzRHluYW1pY0FyZyIsInByZXBlbmRNb2RpZmllck1hcmtlciIsImFkZEhhbmRsZXIiLCJpbXBvcnRhbnQiLCJwcmV2ZW50IiwicmlnaHQiLCJtaWRkbGUiLCJldmVudHMiLCJuYXRpdmUiLCJuYXRpdmVFdmVudHMiLCJuZXdIYW5kbGVyIiwiZ2V0UmF3QmluZGluZ0F0dHIiLCJyYXdBdHRyc01hcCIsImdldEJpbmRpbmdBdHRyIiwiZ2V0U3RhdGljIiwiZHluYW1pY1ZhbHVlIiwiZ2V0QW5kUmVtb3ZlQXR0ciIsInN0YXRpY1ZhbHVlIiwicmVtb3ZlRnJvbU1hcCIsImdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4IiwiZ2VuQ29tcG9uZW50TW9kZWwiLCJiYXNlVmFsdWVFeHByZXNzaW9uIiwidmFsdWVFeHByZXNzaW9uIiwiYXNzaWdubWVudCIsImdlbkFzc2lnbm1lbnRDb2RlIiwicGFyc2VNb2RlbCIsImNociIsImluZGV4JDEiLCJleHByZXNzaW9uUG9zIiwiZXhwcmVzc2lvbkVuZFBvcyIsImxhc3RJbmRleE9mIiwiZW9mIiwiaXNTdHJpbmdTdGFydCIsInBhcnNlU3RyaW5nIiwicGFyc2VCcmFja2V0IiwiaW5CcmFja2V0Iiwic3RyaW5nUXVvdGUiLCJ3YXJuJDEiLCJSQU5HRV9UT0tFTiIsIkNIRUNLQk9YX1JBRElPX1RPS0VOIiwiX3dhcm4iLCJnZW5TZWxlY3QiLCJnZW5DaGVja2JveE1vZGVsIiwiZ2VuUmFkaW9Nb2RlbCIsImdlbkRlZmF1bHRNb2RlbCIsInZhbHVlQmluZGluZyIsInRydWVWYWx1ZUJpbmRpbmciLCJmYWxzZVZhbHVlQmluZGluZyIsInNlbGVjdGVkVmFsIiwidmFsdWUkMSIsInR5cGVCaW5kaW5nIiwibmVlZENvbXBvc2l0aW9uR3VhcmQiLCJub3JtYWxpemVFdmVudHMiLCJ
33378jaGFuZ2UiLCJ0YXJnZXQkMSIsImNyZWF0ZU9uY2VIYW5kbGVyJDEiLCJyZW1vdmUkMiIsInVzZU1pY3JvdGFza0ZpeCIsImF0dGFjaGVkVGltZXN0YW1wIiwiX3dyYXBwZXIiLCJjdXJyZW50VGFyZ2V0Iiwib3duZXJEb2N1bWVudCIsInVwZGF0ZURPTUxpc3RlbmVycyIsInN2Z0NvbnRhaW5lciIsInVwZGF0ZURPTVByb3BzIiwib2xkUHJvcHMiLCJfdmFsdWUiLCJzdHJDdXIiLCJzaG91bGRVcGRhdGVWYWx1ZSIsImNoZWNrVmFsIiwiY29tcG9zaW5nIiwiaXNOb3RJbkZvY3VzQW5kRGlydHkiLCJpc0RpcnR5V2l0aE1vZGlmaWVycyIsIm5vdEluRm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiX3ZNb2RpZmllcnMiLCJwYXJzZVN0eWxlVGV4dCIsImNzc1RleHQiLCJsaXN0RGVsaW1pdGVyIiwicHJvcGVydHlEZWxpbWl0ZXIiLCJub3JtYWxpemVTdHlsZURhdGEiLCJub3JtYWxpemVTdHlsZUJpbmRpbmciLCJzdGF0aWNTdHlsZSIsImJpbmRpbmdTdHlsZSIsImdldFN0eWxlIiwiY2hlY2tDaGlsZCIsInN0eWxlRGF0YSIsImNzc1ZhclJFIiwiaW1wb3J0YW50UkUiLCJzZXRQcm9wIiwic2V0UHJvcGVydHkiLCJub3JtYWxpemUiLCJ2ZW5kb3JOYW1lcyIsImVtcHR5U3R5bGUiLCJjYXBOYW1lIiwidXBkYXRlU3R5bGUiLCJvbGRTdGF0aWNTdHlsZSIsIm9sZFN0eWxlQmluZGluZyIsIm5vcm1hbGl6ZWRTdHlsZSIsIm9sZFN0eWxlIiwibmV3U3R5bGUiLCJ3aGl0ZXNwYWNlUkUiLCJhZGRDbGFzcyIsImNsYXNzTGlzdCIsImdldEF0dHJpYnV0ZSIsInJlbW92ZUNsYXNzIiwidGFyIiwicmVzb2x2ZVRyYW5zaXRpb24iLCJjc3MiLCJhdXRvQ3NzVHJhbnNpdGlvbiIsImVudGVyQ2xhc3MiLCJlbnRlclRvQ2xhc3MiLCJlbnRlckFjdGl2ZUNsYXNzIiwibGVhdmVDbGFzcyIsImxlYXZlVG9DbGFzcyIsImxlYXZlQWN0aXZlQ2xhc3MiLCJoYXNUcmFuc2l0aW9uIiwiVFJBTlNJVElPTiIsIkFOSU1BVElPTiIsInRyYW5zaXRpb25Qcm9wIiwidHJhbnNpdGlvbkVuZEV2ZW50IiwiYW5pbWF0aW9uUHJvcCIsImFuaW1hdGlvbkVuZEV2ZW50Iiwib250cmFuc2l0aW9uZW5kIiwib253ZWJraXR0cmFuc2l0aW9uZW5kIiwib25hbmltYXRpb25lbmQiLCJvbndlYmtpdGFuaW1hdGlvbmVuZCIsInJhZiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm5leHRGcmFtZSIsImFkZFRyYW5zaXRpb25DbGFzcyIsInRyYW5zaXRpb25DbGFzc2VzIiwicmVtb3ZlVHJhbnNpdGlvbkNsYXNzIiwid2hlblRyYW5zaXRpb25FbmRzIiwiZ2V0VHJhbnNpdGlvbkluZm8iLCJwcm9wQ291bnQiLCJlbmRlZCIsIm9uRW5kIiwidHJhbnNmb3JtUkUiLCJzdHlsZXMiLCJnZXRDb21wdXRlZFN0eWxlIiwidHJhbnNpdGlvbkRlbGF5cyIsInRyYW5zaXRpb25EdXJhdGlvbnMiLCJ0cmFuc2l0aW9uVGltZW91dCIsImdldFRpbWVvdXQiLCJhbmltYXRpb25EZWxheXMiLCJhbmltYXRpb25EdXJhdGlvbnMiLCJhbmltYXRpb25UaW1lb3V0IiwiaGFzVHJhbnNmb3JtIiwiZGVsYXlzIiwiZHVyYXRpb25zIiwidG9NcyIsImVudGVyIiwidG9nZ2xlRGlzcGxheSIsImNhbmNlbGxlZCIsIl9lbnRlckNiIiwiYXBwZWFyQ2xhc3MiLCJhcHBlYXJUb0NsYXNzIiwiYXBwZWFyQWN0aXZlQ2xhc3MiLCJiZWZvcmVFbnRlciIsImFmdGVyRW50ZXIiLCJlbnRlckNhbmNlbGxlZCIsImJlZm9yZUFwcGVhciIsImFwcGVhciIsImFmdGVyQXBwZWFyIiwiYXBwZWFyQ2FuY2VsbGVkIiwidHJhbnNpdGlvbk5vZGUiLCJpc0FwcGVhciIsInN0YXJ0Q2xhc3MiLCJhY3RpdmVDbGFzcyIsInRvQ2xhc3MiLCJiZWZvcmVFbnRlckhvb2siLCJlbnRlckhvb2siLCJhZnRlckVudGVySG9vayIsImVudGVyQ2FuY2VsbGVkSG9vayIsImV4cGxpY2l0RW50ZXJEdXJhdGlvbiIsImNoZWNrRHVyYXRpb24iLCJleHBlY3RzQ1NTIiwidXNlcldhbnRzQ29udHJvbCIsImdldEhvb2tBcmd1bWVudHNMZW5ndGgiLCJzaG93IiwicGVuZGluZ05vZGUiLCJfcGVuZGluZyIsImlzVmFsaWREdXJhdGlvbiIsImxlYXZlIiwiYmVmb3JlTGVhdmUiLCJhZnRlckxlYXZlIiwibGVhdmVDYW5jZWxsZWQiLCJkZWxheUxlYXZlIiwiZXhwbGljaXRMZWF2ZUR1cmF0aW9uIiwicGVyZm9ybUxlYXZlIiwiaW52b2tlckZucyIsIl9lbnRlciIsInBsYXRmb3JtTW9kdWxlcyIsInZtb2RlbCIsInRyaWdnZXIiLCJkaXJlY3RpdmUiLCJfdk9wdGlvbnMiLCJzZXRTZWxlY3RlZCIsImdldFZhbHVlIiwib25Db21wb3NpdGlvblN0YXJ0Iiwib25Db21wb3NpdGlvbkVuZCIsInByZXZPcHRpb25zIiwiY3VyT3B0aW9ucyIsIm5lZWRSZXNldCIsImhhc05vTWF0Y2hpbmdPcHRpb24iLCJhY3R1YWxseVNldFNlbGVjdGVkIiwiaXNNdWx0aXBsZSIsIm9wdGlvbiIsInNlbGVjdGVkSW5kZXgiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwibG9jYXRlTm9kZSIsInRyYW5zaXRpb24kJDEiLCJvcmlnaW5hbERpc3BsYXkiLCJfX3ZPcmlnaW5hbERpc3BsYXkiLCJkaXNwbGF5IiwidW5iaW5kIiwicGxhdGZvcm1EaXJlY3RpdmVzIiwidHJhbnNpdGlvblByb3BzIiwibW9kZSIsImdldFJlYWxDaGlsZCIsImNvbXBPcHRpb25zIiwiZXh0cmFjdFRyYW5zaXRpb25EYXRhIiwicGxhY2Vob2xkZXIiLCJyYXdDaGlsZCIsImhhc1BhcmVudFRyYW5zaXRpb24iLCJpc1NhbWVDaGlsZCIsIm9sZENoaWxkIiwiaXNOb3RUZXh0Tm9kZSIsImlzVlNob3dEaXJlY3RpdmUiLCJUcmFuc2l0aW9uIiwiX2xlYXZpbmciLCJvbGRSYXdDaGlsZCIsImRlbGF5ZWRMZWF2ZSIsIm1vdmVDbGFzcyIsIlRyYW5zaXRpb25Hcm91cCIsImJlZm9yZU1vdW50Iiwia2VwdCIsInByZXZDaGlsZHJlbiIsInJhd0NoaWxkcmVuIiwidHJhbnNpdGlvbkRhdGEiLCJyZW1vdmVkIiwiYyQxIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidXBkYXRlZCIsImhhc01vdmUiLCJjYWxsUGVuZGluZ0NicyIsInJlY29yZFBvc2l0aW9uIiwiYXBwbHlUcmFuc2xhdGlvbiIsIl9yZWZsb3ciLCJib2R5Iiwib2Zmc2V0SGVpZ2h0IiwibW92ZWQiLCJXZWJraXRUcmFuc2Zvcm0iLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJfbW92ZUNiIiwicHJvcGVydHlOYW1lIiwiX2hhc01vdmUiLCJjbG9uZU5vZGUiLCJuZXdQb3MiLCJvbGRQb3MiLCJkeCIsImxlZnQiLCJkeSIsInRvcCIsInBsYXRmb3JtQ29tcG9uZW50cyIsImRlZmF1bHRUYWdSRSIsInJlZ2V4RXNjYXBlUkUiLCJidWlsZFJlZ2V4IiwiZGVsaW1pdGVycyIsInBhcnNlVGV4dCIsInRhZ1JFIiwicmF3VG9rZW5zIiwidG9rZW5WYWx1ZSIsInRyYW5zZm9ybU5vZGUiLCJjbGFzc0JpbmRpbmciLCJ
33378nZW5EYXRhIiwia2xhc3MkMSIsInRyYW5zZm9ybU5vZGUkMSIsInN0eWxlQmluZGluZyIsImdlbkRhdGEkMSIsInN0eWxlJDEiLCJkZWNvZGVyIiwiZGVjb2RlIiwiaXNVbmFyeVRhZyIsImNhbkJlTGVmdE9wZW5UYWciLCJpc05vblBocmFzaW5nVGFnIiwiYXR0cmlidXRlIiwiZHluYW1pY0FyZ0F0dHJpYnV0ZSIsIm5jbmFtZSIsInFuYW1lQ2FwdHVyZSIsInN0YXJ0VGFnT3BlbiIsInN0YXJ0VGFnQ2xvc2UiLCJkb2N0eXBlIiwiY29tbWVudCIsImNvbmRpdGlvbmFsQ29tbWVudCIsImlzUGxhaW5UZXh0RWxlbWVudCIsInJlQ2FjaGUiLCJkZWNvZGluZ01hcCIsImVuY29kZWRBdHRyIiwiZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMiLCJpc0lnbm9yZU5ld2xpbmVUYWciLCJzaG91bGRJZ25vcmVGaXJzdE5ld2xpbmUiLCJkZWNvZGVBdHRyIiwic2hvdWxkRGVjb2RlTmV3bGluZXMiLCJyZSIsInBhcnNlSFRNTCIsImV4cGVjdEhUTUwiLCJpc1VuYXJ5VGFnJCQxIiwiY2FuQmVMZWZ0T3BlblRhZyQkMSIsImxhc3RUYWciLCJ0ZXh0RW5kIiwiY29tbWVudEVuZCIsInNob3VsZEtlZXBDb21tZW50IiwiYWR2YW5jZSIsImNvbmRpdGlvbmFsRW5kIiwiZG9jdHlwZU1hdGNoIiwiZW5kVGFnTWF0Y2giLCJjdXJJbmRleCIsInBhcnNlRW5kVGFnIiwic3RhcnRUYWdNYXRjaCIsInBhcnNlU3RhcnRUYWciLCJoYW5kbGVTdGFydFRhZyIsInJlc3QiLCJjaGFycyIsImVuZFRhZ0xlbmd0aCIsInN0YWNrZWRUYWciLCJyZVN0YWNrZWRUYWciLCJyZXN0JDEiLCJ1bmFyeVNsYXNoIiwidW5hcnkiLCJzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYiLCJvdXRwdXRTb3VyY2VSYW5nZSIsImxvd2VyQ2FzZWRUYWciLCJsb3dlckNhc2VkVGFnTmFtZSIsIm9uUkUiLCJkaXJSRSIsImZvckFsaWFzUkUiLCJmb3JJdGVyYXRvclJFIiwic3RyaXBQYXJlbnNSRSIsImR5bmFtaWNBcmdSRSIsImFyZ1JFIiwiYmluZFJFIiwibW9kaWZpZXJSRSIsInNsb3RSRSIsImxpbmVCcmVha1JFIiwid2hpdGVzcGFjZVJFJDEiLCJpbnZhbGlkQXR0cmlidXRlUkUiLCJkZWNvZGVIVE1MQ2FjaGVkIiwiZW1wdHlTbG90U2NvcGVUb2tlbiIsIndhcm4kMiIsInRyYW5zZm9ybXMiLCJwcmVUcmFuc2Zvcm1zIiwicG9zdFRyYW5zZm9ybXMiLCJwbGF0Zm9ybUlzUHJlVGFnIiwicGxhdGZvcm1NdXN0VXNlUHJvcCIsInBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlIiwibWF5YmVDb21wb25lbnQiLCJjcmVhdGVBU1RFbGVtZW50IiwibWFrZUF0dHJzTWFwIiwicHJlc2VydmVXaGl0ZXNwYWNlIiwid2hpdGVzcGFjZU9wdGlvbiIsIndoaXRlc3BhY2UiLCJyb290IiwiY3VycmVudFBhcmVudCIsImluUHJlIiwid2FybmVkIiwid2Fybk9uY2UiLCJjbG9zZUVsZW1lbnQiLCJlbGVtZW50IiwidHJpbUVuZGluZ1doaXRlc3BhY2UiLCJwcm9jZXNzZWQiLCJwcm9jZXNzRWxlbWVudCIsImlmIiwiZWxzZWlmIiwiZWxzZSIsImNoZWNrUm9vdENvbnN0cmFpbnRzIiwiYWRkSWZDb25kaXRpb24iLCJibG9jayIsImZvcmJpZGRlbiIsInByb2Nlc3NJZkNvbmRpdGlvbnMiLCJzbG90U2NvcGUiLCJzbG90VGFyZ2V0IiwibGFzdE5vZGUiLCJjb21tZW50cyIsInN0YXJ0JDEiLCJndWFyZElFU1ZHQnVnIiwiY3VtdWxhdGVkIiwiaXNGb3JiaWRkZW5UYWciLCJwcm9jZXNzUHJlIiwicHJvY2Vzc1Jhd0F0dHJzIiwicHJvY2Vzc0ZvciIsInByb2Nlc3NJZiIsInByb2Nlc3NPbmNlIiwiZW5kJDEiLCJpc1RleHRUYWciLCJwcm9jZXNzS2V5IiwicHJvY2Vzc1JlZiIsInByb2Nlc3NTbG90Q29udGVudCIsInByb2Nlc3NTbG90T3V0bGV0IiwicHJvY2Vzc0NvbXBvbmVudCIsInByb2Nlc3NBdHRycyIsImZvciIsIml0ZXJhdG9yMiIsIml0ZXJhdG9yMSIsImNoZWNrSW5Gb3IiLCJwYXJzZUZvciIsImluTWF0Y2giLCJpdGVyYXRvck1hdGNoIiwiZmluZFByZXZFbGVtZW50IiwiY29uZGl0aW9uIiwiaWZDb25kaXRpb25zIiwic2xvdFRhcmdldER5bmFtaWMiLCJzbG90QmluZGluZyIsImdldFNsb3ROYW1lIiwic2xvdEJpbmRpbmckMSIsImR5bmFtaWMkMSIsInNsb3RDb250YWluZXIiLCJzbG90TmFtZSIsInN5bmNHZW4iLCJpc0R5bmFtaWMiLCJoYXNCaW5kaW5ncyIsInBhcnNlTW9kaWZpZXJzIiwiY2FtZWwiLCJhcmdNYXRjaCIsImNoZWNrRm9yQWxpYXNNb2RlbCIsImllTlNCdWciLCJpZU5TUHJlZml4IiwiX2VsIiwicHJlVHJhbnNmb3JtTm9kZSIsImlmQ29uZGl0aW9uIiwiaWZDb25kaXRpb25FeHRyYSIsImhhc0Vsc2UiLCJlbHNlSWZDb25kaXRpb24iLCJicmFuY2gwIiwiY2xvbmVBU1RFbGVtZW50IiwiYnJhbmNoMSIsImJyYW5jaDIiLCJtb2RlbCQxIiwibW9kdWxlcyQxIiwiZGlyZWN0aXZlcyQxIiwiYmFzZU9wdGlvbnMiLCJpc1N0YXRpY0tleSIsImlzUGxhdGZvcm1SZXNlcnZlZFRhZyIsImdlblN0YXRpY0tleXNDYWNoZWQiLCJnZW5TdGF0aWNLZXlzJDEiLCJvcHRpbWl6ZSIsIm1hcmtTdGF0aWMkMSIsIm1hcmtTdGF0aWNSb290cyIsInN0YXRpYyIsImwkMSIsInN0YXRpY0luRm9yIiwic3RhdGljUm9vdCIsImlzRGlyZWN0Q2hpbGRPZlRlbXBsYXRlRm9yIiwiZm5FeHBSRSIsImZuSW52b2tlUkUiLCJzaW1wbGVQYXRoUkUiLCJlc2MiLCJ0YWIiLCJzcGFjZSIsInVwIiwiZG93biIsImtleU5hbWVzIiwiZ2VuR3VhcmQiLCJtb2RpZmllckNvZGUiLCJjdHJsIiwiYWx0IiwibWV0YSIsImdlbkhhbmRsZXJzIiwic3RhdGljSGFuZGxlcnMiLCJkeW5hbWljSGFuZGxlcnMiLCJoYW5kbGVyQ29kZSIsImdlbkhhbmRsZXIiLCJpc01ldGhvZFBhdGgiLCJpc0Z1bmN0aW9uRXhwcmVzc2lvbiIsImlzRnVuY3Rpb25JbnZvY2F0aW9uIiwiZ2VuTW9kaWZpZXJDb2RlIiwia2V5TW9kaWZpZXIiLCJnZW5LZXlGaWx0ZXIiLCJnZW5GaWx0ZXJDb2RlIiwia2V5VmFsIiwia2V5Q29kZSIsImtleU5hbWUiLCJ3cmFwTGlzdGVuZXJzIiwiYmluZCQxIiwid3JhcERhdGEiLCJiYXNlRGlyZWN0aXZlcyIsImNsb2FrIiwiQ29kZWdlblN0YXRlIiwiZGF0YUdlbkZucyIsIm9uY2VJZCIsImdlbmVyYXRlIiwiYXN0IiwiZ2VuRWxlbWVudCIsInN0YXRpY1Byb2Nlc3NlZCIsImdlblN0YXRpYyIsIm9uY2VQcm9jZXNzZWQiLCJnZW5PbmNlIiwiZm9yUHJvY2Vzc2VkIiwiZ2VuRm9yIiwiaWZQcm9jZXNzZWQiLCJnZW5JZiIsImdlbkNoaWxkcmVuIiwiZ2VuU2xvdCIsImdlbkNvbXBvbmVudCIsImdlbkRhdGEkMiIsIm9yaWdpbmFsUHJlU3RhdGUiLCJhbHRHZW4iLCJhbHRFbXB0eSIsImdlbklmQ29uZGl0aW9ucyIsImNvbmRpdGlvbnMiLCJnZW5UZXJuYXJ5RXhwIiwiYWx0SGVscGVyIiwiZ2VuRGlyZWN0aXZlcyIsImdlblByb3BzIiwiZ2VuU2NvcGVkU2xvdHMiLCJ
33378nZW5JbmxpbmVUZW1wbGF0ZSIsImhhc1J1bnRpbWUiLCJuZWVkUnVudGltZSIsImlubGluZVJlbmRlckZucyIsImNvbnRhaW5zU2xvdENoaWxkIiwibmVlZHNLZXkiLCJnZW5lcmF0ZWRTbG90cyIsImdlblNjb3BlZFNsb3QiLCJpc0xlZ2FjeVN5bnRheCIsInJldmVyc2VQcm94eSIsImNoZWNrU2tpcCIsImFsdEdlbkVsZW1lbnQiLCJhbHRHZW5Ob2RlIiwiZWwkMSIsIm5vcm1hbGl6YXRpb25UeXBlJDEiLCJnZXROb3JtYWxpemF0aW9uVHlwZSIsImdlbk5vZGUiLCJuZWVkc05vcm1hbGl6YXRpb24iLCJnZW5Db21tZW50IiwiZ2VuVGV4dCIsInRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyIsImJpbmQkJDEiLCJjb21wb25lbnROYW1lIiwic3RhdGljUHJvcHMiLCJkeW5hbWljUHJvcHMiLCJwcm9oaWJpdGVkS2V5d29yZFJFIiwidW5hcnlPcGVyYXRvcnNSRSIsInN0cmlwU3RyaW5nUkUiLCJkZXRlY3RFcnJvcnMiLCJjaGVja05vZGUiLCJjaGVja0ZvciIsImNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJFeHByZXNzaW9uIiwiY2hlY2tFdmVudCIsImNoZWNrRXhwcmVzc2lvbiIsInN0cmlwcGVkIiwia2V5d29yZE1hdGNoIiwiY2hlY2tJZGVudGlmaWVyIiwiaWRlbnQiLCJnZW5lcmF0ZUNvZGVGcmFtZSIsImxpbmVzIiwicmVwZWF0JDEiLCJsaW5lTGVuZ3RoIiwicGFkIiwibGVuZ3RoJDEiLCJjcmVhdGVGdW5jdGlvbiIsImVycm9ycyIsImNyZWF0ZUNvbXBpbGVUb0Z1bmN0aW9uRm4iLCJjb21waWxlIiwiY29tcGlsZVRvRnVuY3Rpb25zIiwid2FybiQkMSIsImNvbXBpbGVkIiwidGlwcyIsImZuR2VuRXJyb3JzIiwiY3JlYXRlQ29tcGlsZXJDcmVhdG9yIiwiYmFzZUNvbXBpbGUiLCJjcmVhdGVDb21waWxlciIsImZpbmFsT3B0aW9ucyIsImxlYWRpbmdTcGFjZUxlbmd0aCIsImRpdiIsImdldFNob3VsZERlY29kZSIsImlkVG9UZW1wbGF0ZSIsIm1vdW50IiwiZ2V0T3V0ZXJIVE1MIiwib3V0ZXJIVE1MIiwiY29udGFpbmVyIiwiZyIsIndlYnBhY2tQb2x5ZmlsbCIsInBhdGhzIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBMEY7QUFDM0I7QUFDTDs7O0FBRzFEO0FBQzZGO0FBQzdGLGdCQUFnQiwyR0FBVTtBQUMxQixFQUFFLGlGQUFNO0FBQ1IsRUFBRSxzRkFBTTtBQUNSLEVBQUUsK0ZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ2UsZ0Y7Ozs7Ozs7Ozs7OztBQ3RDZjtBQUFBO0FBQUE7QUFBQTtBQUFpTCxDQUFnQiw4T0FBRyxFQUFDLEM7Ozs7Ozs7Ozs7OztBQ0FyTTtBQUFBO0FBQUE7QUFBQTtBQU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0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztlQUVBO0FBQ0EsMEJBREE7QUFFQTtBQUFBO0FBQUEsR0FGQTtBQUdBO0FBQ0E7QUFDQTtBQURBLEtBREE7QUFJQTtBQUNBO0FBREE7QUFKQSxHQUhBO0FBV0EsTUFYQSxrQkFXQTtBQUNBO0FBQ0Esb0JBREE7QUFFQSx3QkFGQTtBQUdBLHlCQUhBO0FBSUE7QUFKQTtBQU1BLEdBbEJBO0FBbUJBO0FBQ0EsbUJBREEsNkJBQ0E7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQ0Esb0JBQ0EsR0FEQSx5QkFDQSxTQURBLGNBQ0EsZUFEQSxjQUNBLDhCQURBLGNBQ0EsMEJBREEsR0FFQSxJQUZBLENBRUE7QUFBQTtBQUFBO0FBQUEsaUJBRkEsQ0FEQTs7QUFBQTtBQUNBLGtDQURBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUEsS0FMQTtBQU1BLFlBTkEsc0JBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQVZBO0FBV0EsUUFYQSxrQkFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZkEsR0FuQkE7QUFvQ0E7QUFDQSxRQURBLGtCQUNBO0FBQ0E7QUFDQSxLQUhBO0FBSUEsTUFKQSxnQkFJQTtBQUNBO0FBQ0EsS0FOQTtBQU9BLGdCQVBBLDBCQU9BO0FBQ0E7QUFDQTtBQVRBLEdBcENBO0FBK0NBLFNBL0NBLHFCQStD
33378QTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBcERBO0FBcURBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFyREEsQzs7Ozs7Ozs7Ozs7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0F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dDbTZGLENBQUMsR0FBR242RixNQUFKO0FBQ2hDLEMsQ0FFRDtBQUNBO0FBQ0E7OztBQUVBMEIsTUFBTSxDQUFDQyxPQUFQLEdBQWlCdzRGLENBQWpCLEM7Ozs7Ozs7Ozs7O0FDbkJBejRGLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixVQUFTRCxNQUFULEVBQWlCO0FBQ2pDLE1BQUksQ0FBQ0EsTUFBTSxDQUFDMDRGLGVBQVosRUFBNkI7QUFDNUIxNEYsVUFBTSxDQUFDOG5CLFNBQVAsR0FBbUIsWUFBVyxDQUFFLENBQWhDOztBQUNBOW5CLFVBQU0sQ0FBQzI0RixLQUFQLEdBQWUsRUFBZixDQUY0QixDQUc1Qjs7QUFDQSxRQUFJLENBQUMzNEYsTUFBTSxDQUFDNmpELFFBQVosRUFBc0I3akQsTUFBTSxDQUFDNmpELFFBQVAsR0FBa0IsRUFBbEI7QUFDdEJwNUMsVUFBTSxDQUFDdzBDLGNBQVAsQ0FBc0JqL0MsTUFBdEIsRUFBOEIsUUFBOUIsRUFBd0M7QUFDdkNnL0MsZ0JBQVUsRUFBRSxJQUQyQjtBQUV2Q3h2QixTQUFHLEVBQUUsWUFBVztBQUNmLGVBQU94dkIsTUFBTSxDQUFDNFEsQ0FBZDtBQUNBO0FBSnNDLEtB
33378QXhDO0FBTUFuRyxVQUFNLENBQUN3MEMsY0FBUCxDQUFzQmovQyxNQUF0QixFQUE4QixJQUE5QixFQUFvQztBQUNuQ2cvQyxnQkFBVSxFQUFFLElBRHVCO0FBRW5DeHZCLFNBQUcsRUFBRSxZQUFXO0FBQ2YsZUFBT3h2QixNQUFNLENBQUN2QyxDQUFkO0FBQ0E7QUFKa0MsS0FBcEM7QUFNQXVDLFVBQU0sQ0FBQzA0RixlQUFQLEdBQXlCLENBQXpCO0FBQ0E7O0FBQ0QsU0FBTzE0RixNQUFQO0FBQ0EsQ0FyQkQsQyIsImZpbGUiOiJhcHAvb3BlbmluZy1ob3Vycy13ZWVrLWFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2xpYnJhcmllcy92dWUvXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybi
33378BleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vYXBwL29wZW5pbmctaG91cnMtd2Vlay1hcHAuanNcIik7XG4iLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL09wZW5pbmdIb3VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYjY0YTE5ZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9PcGVuaW5nSG91ci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL09wZW5pbmdIb3VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3Zhci93d3cvdnVlL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2NiNjRhMTllJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2NiNjRhMTllJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2NiNjRhMTllJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9PcGVuaW5nSG91ci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2I2NGExOWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignY2I2NGExOWUnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImFwcC9jb21wb25lbnRzL09wZW5pbmdIb3Vycy9PcGVuaW5nSG91ci52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vT3BlbmluZ0hvdXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vT3BlbmluZ0hvdXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL09wZW5pbmdIb3VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYjY0YTE5ZSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vT3BlbmluZ0hvdXJzV2Vlay52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDk2ZDE1YjQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vT3BlbmluZ0hvdXJzV2Vlay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL09wZW5pbmdIb3Vyc1dlZWsudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdmFyL3d3dy92dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNDk2ZDE1YjQnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNDk2ZDE1YjQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNDk2ZDE1YjQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL09wZW5pbmdIb3Vyc1dlZWsudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ5NmQxNWI0JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzQ5NmQxNWI0Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJhcHAvY29tcG9uZW50cy9PcGVuaW5nSG91cnMvT3BlbmluZ0hvdXJzV2Vlay52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vT3BlbmluZ0hvdXJzV2Vlay52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9PcGVuaW5nSG91cnNXZWVrLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9PcGVuaW5nSG91cnNXZWVrLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00OTZkMTViNCZcIiIsImltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IE9wZW5pbmdIb3Vyc1dlZWsgZnJvbSBcIi4vY29tcG9uZW50cy9PcGVuaW5nSG91cnMvT3BlbmluZ0hvdXJzV2Vla1wiO1xuXG4vLyBTdXBwb3J0IG11bHRpcGxlIHZ1ZSBjb250YWN0IGNhcmRzIG9uIG9uZSBwYWdlLlxuY29uc3QgdnVlRWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwidnVlLW9wZW5pbmctaG91cnMtd2Vla1wiKTtcbmNvbnN0IGNvdW50ID0gdnVlRWxlbWVudHMubGVuZ3RoO1xuZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gIC8vIENyZWF0ZSBhIHZ1ZSBpbnN0YW5jZSBwZXIgb3BlbmluZyBob3VycyBjb21wb25lbnQuXG4gIG5ldyBWdWUoe1xuICAgIGVsOiB2dWVFbGVtZW50c1tpXSxcbiAgICBjb21wb25lbnRzOiB7T3BlbmluZ0hvdXJzV2Vla31cbiAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5cbmNvbnN0IHsgb3BlbmluZ0hvdXJzLCBwYXRoIH0gPSBkcnVwYWxTZXR0aW5ncztcbmNvbnN0IHsgYXBpQmFzZVVybCA9IG51bGwgfSA9IG9wZW5pbmdIb3VycztcbmNvbnN0IHsgcGF0aFByZWZpeCA9IFwiXCIgfSA9IHBhdGg7XG5cbmV4cG9ydCBkZWZhdWx0KCkgPT4ge1xuICByZXR1cm4gYXhpb3MuY3JlYXRlKHtcbiAgICBiYXNlVVJMOiBgJHthcGlCYXNlVXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW59LyR7cGF0aFByZWZpeH1qc29uYXBpYCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIH1cbiAgfSk7XG59XG4iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybi
33378BmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvcjsiLCJmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgIFwiZGVmYXVsdFwiOiBvYmpcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4uL2NvcmUvYnVpbGRGdWxsUGF0aCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1
33378ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlXG4gICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFjb25maWcucmVzcG9uc2VUeXBlIHx8IGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICd0ZXh0JyA/IHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2Y
33378XIgdGltZW91dEVycm9yTWVzc2FnZSA9ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCc7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIHZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcblxuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChjb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIEV4cGVjdGVkIERPTUV4Y2VwdGlvbiB0aHJvd24gYnkgYnJvd3NlcnMgbm90IGNvbXBhdGlibGUgWE1MSHR0cFJlcXVlc3QgTGV2ZWwgMi5cbiAgICAgICAgLy8gQnV0LCB0aGlzIGNhbiBiZSBzdXBwcmVzc2VkIGZvciAnanNvbicgdHlwZSBhcyBpdCBjYW4gYmUgcGFyc2VkIGJ5IGRlZmF1bHQgJ3RyYW5zZm9ybVJlc3BvbnNlJyBmdW5jdGlvbi5cbiAgICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KGNhbmNlbCk7XG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlI
33378HJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9jb3JlL21lcmdlQ29uZmlnJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIHZhciBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICB2YXIgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG5heGlvcy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGF4aW9zLmRlZmF1bHRzLCBpbnN0YW5jZUNvbmZpZykpO1xufTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWwnKTtcbmF4aW9zLkNhbmNlbFRva2VuID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsVG9rZW4nKTtcbmF4aW9zLmlzQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvaXNDYW5jZWwnKTtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZh
33378dWx0ID0gYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIEludGVyY2VwdG9yTWFuYWdlciA9IHJlcXVpcmUoJy4vSW50ZXJjZXB0b3JNYW5hZ2VyJyk7XG52YXIgZGlzcGF0Y2hSZXF1ZXN0ID0gcmVxdWlyZSgnLi9kaXNwYXRjaFJlcXVlc3QnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vbWVyZ2VDb25maWcnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcbiAgICBjb25maWcudXJsID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgLy8gSG9vayB1cCBpbnRlcmNlcHRvcnMgbWlkZGxld2FyZVxuICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHJldHVybi
33378BidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybFxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCh1dGlscy5tZXJnZShjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vZW5oYW5jZUVycm9yJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09
33378iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUVycm9yKG1lc3NhZ2UsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1xuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgZXJyb3IucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIGVycm9yLmlzQXhpb3NFcnJvciA9IHRydWU7XG5cbiAgZXJyb3IudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjb2RlOiB0aGlzLmNvZGVcbiAgICB9O1xuICB9O1xuICByZXR1cm4gZXJyb3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09
33378iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIHZhciB2YWx1ZUZyb21Db25maWcyS2V5cyA9IFsndXJsJywgJ21ldGhvZCcsICdwYXJhbXMnLCAnZGF0YSddO1xuICB2YXIgbWVyZ2VEZWVwUHJvcGVydGllc0tleXMgPSBbJ2hlYWRlcnMnLCAnYXV0aCcsICdwcm94eSddO1xuICB2YXIgZGVmYXVsdFRvQ29uZmlnMktleXMgPSBbXG4gICAgJ2Jhc2VVUkwnLCAndXJsJywgJ3RyYW5zZm9ybVJlcXVlc3QnLCAndHJhbnNmb3JtUmVzcG9uc2UnLCAncGFyYW1zU2VyaWFsaXplcicsXG4gICAgJ3RpbWVvdXQnLCAnd2l0aENyZWRlbnRpYWxzJywgJ2FkYXB0ZXInLCAncmVzcG9uc2VUeXBlJywgJ3hzcmZDb29raWVOYW1lJyxcbiAgICAneHNyZkhlYWRlck5hbWUnLCAnb25VcGxvYWRQcm9ncmVzcycsICdvbkRvd25sb2FkUHJvZ3Jlc3MnLFxuICAgICdtYXhDb250ZW50TGVuZ3RoJywgJ3ZhbGlkYXRlU3RhdHVzJywgJ21heFJlZGlyZWN0cycsICdodHRwQWdlbnQnLFxuICAgICdodHRwc0FnZW50JywgJ2NhbmNlbFRva2VuJywgJ3NvY2tldFBhdGgnXG4gIF07XG5cbiAgdXRpbHMuZm9yRWFjaCh2YWx1ZUZyb21Db25maWcyS2V5cywgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcyW3Byb3BdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uZmlnW3Byb3BdID0gY29uZmlnMltwcm9wXTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2gobWVyZ2VEZWVwUHJvcGVydGllc0tleXMsIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICh1dGlscy5pc09iamVjdChjb25maWcyW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gdXRpbHMuZGVlcE1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZzJbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcyW3Byb3BdO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IHV0aWxzLmRlZXBNZXJnZShjb25maWcxW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcxW3Byb3BdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uZmlnW3Byb3BdID0gY29uZmlnMVtwcm9wXTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2goZGVmYXVsdFRvQ29uZmlnMktleXMsIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnMltwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzJbcHJvcF07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnMVtwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzFbcHJvcF07XG4gICAgfVxuICB9KTtcblxuICB2YXIgYXhpb3NLZXlzID0gdmFsdWVGcm9tQ29uZmlnMktleXNcbiAgICAuY29uY2F0KG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzKVxuICAgIC5jb25jYXQoZGVmYXVsdFRvQ29uZmlnMktleXMpO1xuXG4gIHZhciBvdGhlcktleXMgPSBPYmplY3RcbiAgICAua2V5cyhjb25maWcyKVxuICAgIC5maWx0ZXIoZnVuY3Rpb24gZmlsdGVyQXhpb3NLZXlzKGtleSkge1xuICAgICAgcmV0dXJuIGF4aW9zS2V5cy5pbmRleE9mKGtleSkgPT09IC0xO1xuICAgIH0pO1xuXG4gIHV0aWxzLmZvckVhY2gob3RoZXJLZXlzLCBmdW5jdGlvbiBvdGhlcktleXNEZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZzJbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcyW3Byb3BdO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZzFbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcxW3Byb3BdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuKGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBub3JtYWxpem
33378VIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0FjY2VwdCcpO1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7IC8qIElnbm9yZSAqLyB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9XG59O1xuXG5kZWZhdWx0cy5oZWFkZXJzID0ge1xuICBjb21tb246IHtcbiAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lNDAvZ2ksICdAJykuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkUGFyYW1zO1xuICBpZiAocGFyYW1zU2VyaWFsaXplcikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXNTZXJpYWxpemVyKHBhcmFtcyk7XG4gIH0gZWxzZSBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSkge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXMudG9TdHJpbmc
33378oKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFydHMgPSBbXTtcblxuICAgIHV0aWxzLmZvckVhY2gocGFyYW1zLCBmdW5jdGlvbiBzZXJpYWxpemUodmFsLCBrZXkpIHtcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodXRpbHMuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGtleSA9IGtleSArICdbXSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBbdmFsXTtcbiAgICAgIH1cblxuICAgICAgdXRpbHMuZm9yRWFjaCh2YWwsIGZ1bmN0aW9uIHBhcnNlVmFsdWUodikge1xuICAgICAgICBpZiAodXRpbHMuaXNEYXRlKHYpKSB7XG4gICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdCh2KSkge1xuICAgICAgICAgIHYgPSBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHYpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcnRzLmpvaW4oJyYnKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdmFyIGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cblxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICAgIHZhciBjb29raWUgPSBbXTtcbiAgICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKCkge30sXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR
33378oZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICB2Y
33378XIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICB2YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybi
33378BwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8qZ2xvYmFsIHRvU3RyaW5nOnRydWUqL1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodmFsKSB7XG4gIHJldHVybiAodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJykgJiYgKHZhbCBpbnN0YW5jZW9mIEZvcm1EYXRhKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldy
33378h2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAodmFsLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyovLCAnJykucmVwbGFjZSgvXFxzKiQvLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIChuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTmF0aXZlU2NyaXB0JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTlMnKSkge1xuICAgIHJldHVybi
33378BmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0eXBlb2YgcmVzdWx0W2tleV0gPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gZXF1YWwgdG8gbWVyZ2Ugd2l0aCB0aGUgZGlmZmVyZW5jZSBiZWluZyB0aGF0IG5vIHJlZmVyZW5jZVxuICogdG8gb3JpZ2luYWwgb2JqZWN0cyBpcyBrZXB0LlxuICpcbiAqIEBzZWUgbWVyZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGRlZXBNZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0eXBlb2YgcmVzdWx0W2tleV0gPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGRlZXBNZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGRlZXBNZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybi
33378BhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBkZWVwTWVyZ2U6IGRlZXBNZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW1cbn07XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJvcGVuaW5nLWhvdXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cInRpbWUgY2xvc2VkXCIgdi1pZj1cIm9wZW5pbmdIb3VyLnN0YXR1cyA9PSAnY2xvc2VkJ1wiPnt7IERydXBhbC50KFwiQ2xvc2VkXCIpIH19PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwidGltZSBvcGVucy1zb29uXCIgdi1lbHNlLWlmPVwib3BlbmluZ0hvdXIuc3RhdHVzID09PSAnb3BlbnNfc29vbidcIj57eyBEcnVwYWwudChcIk9wZW5zIHNvb25cIikgfX08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJ0aW1lIGNsb3Nlcy1zb29uXCIgdi1lbHNlLWlmPVwib3BlbmluZ0hvdXIuc3RhdHVzID09PSAnY2xvc2VzX3Nvb24nXCI+e3sgRHJ1cGFsLnQoXCJDbG9zZXMgc29vblwiKSB9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cInRpbWUgb3BlblwiIHYtZWxzZT57eyBvcGVuaW5nSG91ci5zdGFydCB9fSAtIHt7IG9wZW5pbmdIb3VyLmVuZCB9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgdi1pZj1cIm9wZW5pbmdIb3VyLmxhYmVsXCI+e3sgb3BlbmluZ0hvdXIubGFiZWwgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6IFwiT3BlbmluZ0hvdXJcIixcbiAgICBwcm9wczoge1xuICAgICAgb3BlbmluZ0hvdXI6IG51bGwsXG4gICAgfSxcbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgRHJ1cGFsOiBEcnVwYWwsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJvcGVuaW5nLWhvdXJzLXdyYXBwZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwib3BlbmluZy1ob3Vyc1wiIHYtaWY9XCJvcGVuaW5nSG91cnMgJiYgT2JqZWN0LmtleXMob3BlbmluZ0hvdXJzKS5sZW5ndGggPiAwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwib3BlbmluZy1ob3Vycy10b3BcIj5cbiAgICAgICAgPGEgaHJlZj1cIiNcIlxuICAgICAgICAgICBjbGFzcz1cIm5leHQtcHJldmlvdXNcIlxuICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInNob3dQcmV2aW91cyA/IHByZXZpb3VzKCkgOiBudWxsXCJcbiAgICAgICAgICAgOmNsYXNzPVwie2Rpc2FibGVkOiAhc2hvd1ByZXZpb3VzfVwiXG4gICAgICAgICAgIHYtc2hvdyA9XCJzaG93UHJldmlvdXNcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3sgRHJ1cGFsLnQoXCJHbyB0byB0aGUgcHJldmlvdXMgd2Vla1wiKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8cCBjbGFzcz1cIm9wZW5pbmctaG91cnMtdG9wX190aXRsZVwiPjxpIGNsYXNzPVwiZmFzIGZhLWNsb2NrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyBEcnVwYWwudChcIk9wZW5pbmcgaG91cnMgZnJvbVwiKSB9fSA8c3Ryb25nPnt7XG4gICAgICAgICAgZnJvbSB9fTwvc3Ryb25nPiB7e1xuICAgICAgICAgIERydXBhbC50KFwidG9cIikgfX0gPHN0cm9uZz57eyB0byB9fTwvc3Ryb25nPjwvcD5cbiAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cIm5leHQtcHJldmlvdXNcIiBAY2xpY2sucHJldmVudD1cIm5leHQoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tY2lyY2xlLXJpZ2h0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3sgRHJ1cGFsLnQoXCJHbyB0byB0aGUgbmV4dCB3ZWVrXCIpIH19PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXlcIiB2LWZvcj1cIihkYXksIGxhYmVsLCBpbmRleCkgaW4gb3BlbmluZ0hvdXJzXCJcbiAgICAgICAgICAgOmNsYXNzPVwie3RvZGF5OiBsYWJlbCA9PT0gbW9tZW50VG9kYXkuZm9ybWF0KCdZWVlZLU1NLUREJykgfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5LWxhYmVsXCI+e3sgbGFiZWwgfMKgbG9uZ0RhdGUgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRheS1vcGVuaW5nLWhvdXJzXCI+XG4gICAgICAgICAgPG9wZW5pbmctaG91ciB2LWZvcj1cIihvcGVuaW5nSG91ciwgaW5kZXgpIGluIGRheVwiIDprZXk9XCJpbmRleFwiIDpvcGVuaW5nLWhvdXI9XCJvcGVuaW5nSG91clwiPjwvb3BlbmluZy1ob3VyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCBBcGkgZnJvbSBcIi4uLy4uL3V0aWxzL2FwaVwiO1xuICBpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbiAgaW1wb3J0IFwibW9tZW50L2xvY2FsZS9ubC1iZVwiO1xuICBpbXBvcnQgT3BlbmluZ0hvdXIgZnJvbSBcIi4vT3BlbmluZ0hvdXJcIjtcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogXCJPcGVuaW5nSG91cnNXZWVrXCIsXG4gICAgY29tcG9uZW50czoge09wZW5pbmdIb3VyfSxcbiAgICBwcm9wczoge1xuICAgICAgbmlkOiB7XG4gICAgICAgI
33378HR5cGU6IFN0cmluZyxcbiAgICAgIH0sXG4gICAgICBmaWVsZE5hbWU6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBEcnVwYWw6IERydXBhbCxcbiAgICAgICAgb3BlbmluZ0hvdXJzOiBudWxsLFxuICAgICAgICBtb21lbnRDdXJyZW50OiBudWxsLFxuICAgICAgICBtb21lbnRUb2RheTogbnVsbCxcbiAgICAgIH07XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBhc3luYyBnZXRPcGVuaW5nSG91cnMoKSB7XG4gICAgICAgIHRoaXMub3BlbmluZ0hvdXJzID0gYXdhaXQgQXBpKClcbiAgICAgICAgICAuZ2V0KGBvcGVuaW5nLWhvdXJzLyR7dGhpcy5uaWR9LyR7dGhpcy5maWVsZE5hbWV9LyR7dGhpcy5tb21lbnRDdXJyZW50LndlZWtZZWFyKCl9LyR7dGhpcy5tb21lbnRDdXJyZW50LndlZWsoKX1gKVxuICAgICAgICAgIC50aGVuKCh7IGRhdGE6IHsgZGF0YSB9IH0pID0+IGRhdGEpO1xuICAgICAgfSxcbiAgICAgIHByZXZpb3VzKCkge1xuICAgICAgICAvLyBDb3B5IHRoZSBvYmplY3Qgc28gVnVlIGNvbXB1dGVkIHdpbGwgcmVjb2duaXplIHRoZSBjaGFuZ2Ugb2YgdGhlIGltbXV0YWJsZSBtb21lbnRDdXJyZW50IG9iamVjdC5cbiAgICAgICAgdGhpcy5tb21lbnRDdXJyZW50ID0gdGhpcy5tb21lbnRDdXJyZW50LmNsb25lKCkuc3VidHJhY3QoMSwgXCJ3ZWVrXCIpO1xuICAgICAgICB0aGlzLmdldE9wZW5pbmdIb3VycygpO1xuICAgICAgfSxcbiAgICAgIG5leHQoKSB7XG4gICAgICAgIC8vIENvcHkgdGhlIG9iamVjdCBzbyBWdWUgY29tcHV0ZWQgd2lsbCByZWNvZ25pemUgdGhlIGNoYW5nZSBvZiB0aGUgaW1tdXRhYmxlIG1vbWVudEN1cnJlbnQgb2JqZWN0LlxuICAgICAgICB0aGlzLm1vbWVudEN1cnJlbnQgPSB0aGlzLm1vbWVudEN1cnJlbnQuY2xvbmUoKS5hZGQoMSwgXCJ3ZWVrXCIpO1xuICAgICAgICB0aGlzLmdldE9wZW5pbmdIb3VycygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGZyb20oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbWVudEN1cnJlbnQuc3RhcnRPZihcIndlZWtcIikuZm9ybWF0KFwiRCBNTU1NIFlZWVlcIik7XG4gICAgICB9LFxuICAgICAgdG8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbWVudEN1cnJlbnQuZW5kT2YoXCJ3ZWVrXCIpLmZvcm1hdChcIkQgTU1NTSBZWVlZXCIpO1xuICAgICAgfSxcbiAgICAgIHNob3dQcmV2aW91cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9tZW50VG9kYXkuaXNCZWZvcmUodGhpcy5tb21lbnRDdXJyZW50LnN0YXJ0T2YoXCJ3ZWVrXCIpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZWQoKSB7XG4gICAgICBtb21lbnQubG9jYWxlKFwibmwtYmVcIik7XG4gICAgICB0aGlzLm1vbWVudEN1cnJlbnQgPSBtb21lbnQoKTtcbiAgICAgIHRoaXMubW9tZW50VG9kYXkgPSB0aGlzLm1vbWVudEN1cnJlbnQuY2xvbmUoKTtcbiAgICAgIHRoaXMuZ2V0T3BlbmluZ0hvdXJzKCk7XG4gICAgfSxcbiAgICBmaWx0ZXJzOiB7XG4gICAgICBsb25nRGF0ZTogdmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS5mb3JtYXQoXCJkZGRkIEQgTU1NTVwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbjwvc2NyaXB0PlxuIiwidmFyIG1hcCA9IHtcblx0XCIuL2FmXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hZi5qc1wiLFxuXHRcIi4vYWYuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FmLmpzXCIsXG5cdFwiLi9hclwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIuanNcIixcblx0XCIuL2FyLWR6XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1kei5qc1wiLFxuXHRcIi4vYXItZHouanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLWR6LmpzXCIsXG5cdFwiLi9hci1rd1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIta3cuanNcIixcblx0XCIuL2FyLWt3LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1rdy5qc1wiLFxuXHRcIi4vYXItbHlcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLWx5LmpzXCIsXG5cdFwiLi9hci1seS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbHkuanNcIixcblx0XCIuL2FyLW1hXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1tYS5qc1wiLFxuXHRcIi4vYXItbWEuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLW1hLmpzXCIsXG5cdFwiLi9hci1zYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItc2EuanNcIixcblx0XCIuL2FyLXNhLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1zYS5qc1wiLFxuXHRcIi4vYXItdG5cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLXRuLmpzXCIsXG5cdFwiLi9hci10bi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItdG4uanNcIixcblx0XCIuL2FyLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci5qc1wiLFxuXHRcIi4vYXpcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2F6LmpzXCIsXG5cdFwiLi9hei5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXouanNcIixcblx0XCIuL2JlXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZS5qc1wiLFxuXHRcIi4vYmUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JlLmpzXCIsXG5cdFwiLi9iZ1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmcuanNcIixcblx0XCIuL2JnLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZy5qc1wiLFxuXHRcIi4vYm1cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JtLmpzXCIsXG5cdFwiLi9ibS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm0uanNcIixcblx0XCIuL2JuXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi5qc1wiLFxuXHRcIi4vYm4uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JuLmpzXCIsXG5cdFwiLi9ib1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm8uanNcIixcblx0XCIuL2JvLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iby5qc1wiLFxuXHRcIi4vYnJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JyLmpzXCIsXG5cdFwiLi9ici5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnIuanNcIixcblx0XCIuL2JzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9icy5qc1wiLFxuXHRcIi4vYnMuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JzLmpzXCIsXG5cdFwiLi9jYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY2EuanNcIixcblx0XCIuL2NhLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jYS5qc1wiLFxuXHRcIi4vY3NcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2NzLmpzXCIsXG5cdFwiLi9jcy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3MuanNcIixcblx0XCIuL2N2XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jdi5qc1wiLFxuXHRcIi4vY3YuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2N2LmpzXCIsXG5cdFwiLi9jeVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3kuanNcIixcblx0XCIuL2N5LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qc1wiLFxuXHRcIi4vZGFcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RhLmpzXCIsXG5cdFwiLi9kYS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGEuanNcIixcblx0XCIuL2RlXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qc1wiLFxuXHRcIi4vZGUtYXRcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLWF0LmpzXCIsXG5cdFwiLi9kZS1hdC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtYXQuanNcIixcblx0XCIuL2RlLWNoXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1jaC5qc1wiLFxuXHRcIi4vZGUtY2guanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLWNoLmpzXCIsXG5cdFwiLi9kZS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUuanNcIixcblx0XCIuL2R2XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kdi5qc1wiLFxuXHRcIi4vZHYuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2R2LmpzXCIsXG5cdFwiLi9lbFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZWwuanNcIixcblx0XCIuL2VsLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbC5qc1wiLFxuXHRcIi4vZW4tU0dcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLVNHLmpzXCIsXG5cdFwiLi9lbi1TRy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tU0cuanNcIixcblx0XCIuL2VuLWF1XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1hdS5qc1wiLFxuXHRcIi4vZW4tYXUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWF1LmpzXCIsXG5cdFwiLi9lbi1jYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tY2EuanNcIixcblx0XCIuL2VuLWNhLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1jYS5qc1wiLFxuXHRcIi4vZW4tZ2JcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWdiLmpzXCIsXG5cdFwiLi9lbi1nYi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tZ2IuanNcIixcblx0XCIuL2VuLWllXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pZS5qc1wiLFxuXHRcIi4vZW4taWUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWllLmpzXCIsXG5cdFwiLi9lbi1pbFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWwuanNcIixcblx0XCIuL2VuLWlsLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbC5qc1wiLFxuXHRcIi4vZW4tbnpcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLW56LmpzXCIsXG5cdFwiLi9lbi1uei5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tbnouanNcIixcblx0XCIuL2VvXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lby5qc1wiLFxuXHRcIi4vZW8uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VvLmpzXCIsXG5cdFwiLi9lc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMuanNcIixcblx0XCIuL2VzLWRvXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qc1wiLFxuXHRcIi4vZXMtZG8uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLWRvLmpzXCIsXG5cdFwiLi9lcy11c1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtdXMuanNcIixcblx0XCIuL2VzLXVzLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy11cy5qc1wiLFxuXHRcIi4vZXMuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLmpzXCIsXG5cdFwiLi9ldFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXQuanNcIixcblx0XCIuL2V0LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldC5qc1wiLFxuXHRcIi4vZXVcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2V1LmpzXCIsXG5cdFwiLi9ldS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXUuanNcIixcblx0XCIuL2ZhXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mYS5qc1wiLFxuXHRcIi4vZmEuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZhLmpzXCIsXG5cdFwiLi9maVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanNcIixcblx0XCIuL2ZpLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maS5qc1wiLFxuXHRcIi4vZm9cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZvLmpzXCIsXG5cdFwiLi9mby5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZm8uanNcIixcblx0XCIuL2ZyXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci5qc1wiLFxuXHRcIi4vZnItY2FcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNhLmpzXCIsXG5cdFwiLi9mci1jYS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2EuanNcIixcblx0XCIuL2ZyLWNoXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci1jaC5qc1wiLFxuXHRcIi4vZnItY2guanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNoLmpzXCIsXG5cdFwiLi9mci5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnIuanNcIixcblx0XCIuL2Z5XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9meS5qc1wiLFxuXHRcIi4vZnkuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2Z5LmpzXCIsXG5cdFwiLi9nYVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2EuanNcIixcblx0XCIuL2dhLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nYS5qc1wiLFxuXHRcIi4vZ2RcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dkLmpzXCIsXG5cdFwiLi9nZC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2QuanNcIixcblx0XCIuL2dsXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nbC5qc1wiLFxuXHRcIi4vZ2wuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dsLmpzXCIsXG5cdFwiLi9nb20tbGF0blwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWxhdG4uanNcIixcblx0XCIuL2dvbS1sYXRuLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nb20tbGF0bi5qc1wiLFxuXHRcIi4vZ3VcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2d1LmpzXCIsXG5cdFwiLi9ndS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ3UuanNcIixcblx0XCIuL2hlXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oZS5qc1wiLFxuXHRcIi4vaGUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hlLmpzXCIsXG5cdFwiLi9oaVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGkuanNcIixcblx0XCIuL2hpLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oaS5qc1wiLFxuXHRcIi4vaHJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hyLmpzXCIsXG5cdFwiLi9oci5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHIuanNcIixcblx0XCIuL2h1XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9odS5qc1wiLFxuXHRcIi4vaHUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2h1LmpzXCIsXG5cdFwiLi9oeS1hbVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHktYW0uanNcIixcblx0XCIuL2h5LWFtLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oeS1hbS5qc1wiLFxuXHRcIi4vaWRcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lkLmpzXCIsXG5cdFwiLi9pZC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaWQuanNcIixcblx0XCIuL2lzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pcy5qc1wiLFxuXHRcIi4vaXMuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lzLmpzXCIsXG5cdFwiLi9pdFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQuanNcIixcblx0XCIuL2l0LWNoXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC1jaC5qc1wiLFxuXHRcIi4vaXQtY2guanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2l0LWNoLmpzXCIsXG5cdFwiLi9pdC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQuanNcIixcblx0XCIuL2phXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qYS5qc1wiLFxuXHRcIi4vamEuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2phLmpzXCIsXG5cdFwiLi9qdlwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvanYuanNcIixcblx0XCIuL2p2LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qdi5qc1wiLFxuXHRcIi4va2FcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2thLmpzXCIsXG5cdFwiLi9rYS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2EuanNcIixcblx0XCIuL2trXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ray5qc1wiLFxuXHRcIi4va2suanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2trLmpzXCIsXG5cdFwiLi9rbVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva20uanNcIixcblx0XCIuL2ttLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbS5qc1wiLFxuXHRcIi4va25cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tuLmpzXCIsXG5cdFwiLi9rbi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva24uanNcIixcblx0XCIuL2tvXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rby5qc1wiLFxuXHRcIi4va28uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tvLmpzXCIsXG5cdFwiLi9rdVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3UuanNcIixcblx0XCIuL2t1LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rdS5qc1wiLFxuXHRcIi4va3lcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t5LmpzXCIsXG5cdFwiLi9reS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3kuanNcIixcblx0XCIuL2xiXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sYi5qc1wiLFxuXHRcIi4vbGIuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2xiLmpzXCIsXG5cdFwiLi9sb1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbG8uanNcIixcblx0XCIuL2xvLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sby5qc1wiLFxuXHRcIi4vbHRcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x0LmpzXCIsXG5cdFwiLi9sdC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHQuanNcIixcblx0XCIuL2x2XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdi5qc1wiLFxuXHRcIi4vbHYuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x2LmpzXCIsXG5cdFwiLi9tZVwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWUuanNcIixcblx0XCIuL21lLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tZS5qc1wiLFxuXHRcIi4vbWlcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21pLmpzXCIsXG5cdFwiLi9taS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWkuanNcIixcblx0XCIuL21rXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tay5qc1wiLFxuXHRcIi4vbWsuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21rLmpzXCIsXG5cdFwiLi9tbFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWwuanNcIixcblx0XCIuL21sLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbC5qc1wiLFxuXHRcIi4vbW5cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21uLmpzXCIsXG5cdFwiLi9tbi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbW4uanNcIixcblx0XCIuL21yXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tci5qc1wiLFxuXHRcIi4vbXIuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21yLmpzXCIsXG5cdFwiLi9tc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMuanNcIixcblx0XCIuL21zLW15XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy1teS5qc1wiLFxuXHRcIi4vbXMtbXkuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21zLW15LmpzXCIsXG5cdFwiLi9tcy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMuanNcIixcblx0XCIuL210XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tdC5qc1wiLFxuXHRcIi4vbXQuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL210LmpzXCIsXG5cdFwiLi9te
33378VwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXkuanNcIixcblx0XCIuL215LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9teS5qc1wiLFxuXHRcIi4vbmJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25iLmpzXCIsXG5cdFwiLi9uYi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmIuanNcIixcblx0XCIuL25lXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uZS5qc1wiLFxuXHRcIi4vbmUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25lLmpzXCIsXG5cdFwiLi9ubFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwuanNcIixcblx0XCIuL25sLWJlXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC1iZS5qc1wiLFxuXHRcIi4vbmwtYmUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLWJlLmpzXCIsXG5cdFwiLi9ubC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwuanNcIixcblx0XCIuL25uXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubi5qc1wiLFxuXHRcIi4vbm4uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25uLmpzXCIsXG5cdFwiLi9wYS1pblwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGEtaW4uanNcIixcblx0XCIuL3BhLWluLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wYS1pbi5qc1wiLFxuXHRcIi4vcGxcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BsLmpzXCIsXG5cdFwiLi9wbC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGwuanNcIixcblx0XCIuL3B0XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC5qc1wiLFxuXHRcIi4vcHQtYnJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LWJyLmpzXCIsXG5cdFwiLi9wdC1ici5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcHQtYnIuanNcIixcblx0XCIuL3B0LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC5qc1wiLFxuXHRcIi4vcm9cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3JvLmpzXCIsXG5cdFwiLi9yby5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcm8uanNcIixcblx0XCIuL3J1XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ydS5qc1wiLFxuXHRcIi4vcnUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3J1LmpzXCIsXG5cdFwiLi9zZFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2QuanNcIixcblx0XCIuL3NkLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZC5qc1wiLFxuXHRcIi4vc2VcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NlLmpzXCIsXG5cdFwiLi9zZS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2UuanNcIixcblx0XCIuL3NpXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zaS5qc1wiLFxuXHRcIi4vc2kuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NpLmpzXCIsXG5cdFwiLi9za1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2suanNcIixcblx0XCIuL3NrLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zay5qc1wiLFxuXHRcIi4vc2xcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NsLmpzXCIsXG5cdFwiLi9zbC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2wuanNcIixcblx0XCIuL3NxXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcS5qc1wiLFxuXHRcIi4vc3EuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NxLmpzXCIsXG5cdFwiLi9zclwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3IuanNcIixcblx0XCIuL3NyLWN5cmxcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLWN5cmwuanNcIixcblx0XCIuL3NyLWN5cmwuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLWN5cmwuanNcIixcblx0XCIuL3NyLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci5qc1wiLFxuXHRcIi4vc3NcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NzLmpzXCIsXG5cdFwiLi9zcy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3MuanNcIixcblx0XCIuL3N2XCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qc1wiLFxuXHRcIi4vc3YuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N2LmpzXCIsXG5cdFwiLi9zd1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3cuanNcIixcblx0XCIuL3N3LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdy5qc1wiLFxuXHRcIi4vdGFcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RhLmpzXCIsXG5cdFwiLi90YS5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGEuanNcIixcblx0XCIuL3RlXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZS5qc1wiLFxuXHRcIi4vdGUuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RlLmpzXCIsXG5cdFwiLi90ZXRcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RldC5qc1wiLFxuXHRcIi4vdGV0LmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ZXQuanNcIixcblx0XCIuL3RnXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90Zy5qc1wiLFxuXHRcIi4vdGcuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RnLmpzXCIsXG5cdFwiLi90aFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGguanNcIixcblx0XCIuL3RoLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90aC5qc1wiLFxuXHRcIi4vdGwtcGhcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsLXBoLmpzXCIsXG5cdFwiLi90bC1waC5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGwtcGguanNcIixcblx0XCIuL3RsaFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGxoLmpzXCIsXG5cdFwiLi90bGguanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsaC5qc1wiLFxuXHRcIi4vdHJcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RyLmpzXCIsXG5cdFwiLi90ci5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvd
33378HIuanNcIixcblx0XCIuL3R6bFwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHpsLmpzXCIsXG5cdFwiLi90emwuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bC5qc1wiLFxuXHRcIi4vdHptXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0uanNcIixcblx0XCIuL3R6bS1sYXRuXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0tbGF0bi5qc1wiLFxuXHRcIi4vdHptLWxhdG4uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS1sYXRuLmpzXCIsXG5cdFwiLi90em0uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS5qc1wiLFxuXHRcIi4vdWctY25cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VnLWNuLmpzXCIsXG5cdFwiLi91Zy1jbi5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdWctY24uanNcIixcblx0XCIuL3VrXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ay5qc1wiLFxuXHRcIi4vdWsuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VrLmpzXCIsXG5cdFwiLi91clwiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXIuanNcIixcblx0XCIuL3VyLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ci5qc1wiLFxuXHRcIi4vdXpcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LmpzXCIsXG5cdFwiLi91ei1sYXRuXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei1sYXRuLmpzXCIsXG5cdFwiLi91ei1sYXRuLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei1sYXRuLmpzXCIsXG5cdFwiLi91ei5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXouanNcIixcblx0XCIuL3ZpXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS92aS5qc1wiLFxuXHRcIi4vdmkuanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3ZpLmpzXCIsXG5cdFwiLi94LXBzZXVkb1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveC1wc2V1ZG8uanNcIixcblx0XCIuL3gtcHNldWRvLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS94LXBzZXVkby5qc1wiLFxuXHRcIi4veW9cIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3lvLmpzXCIsXG5cdFwiLi95by5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveW8uanNcIixcblx0XCIuL3poLWNuXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1jbi5qc1wiLFxuXHRcIi4vemgtY24uanNcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLWNuLmpzXCIsXG5cdFwiLi96aC1oa1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtaGsuanNcIixcblx0XCIuL3poLWhrLmpzXCI6IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1oay5qc1wiLFxuXHRcIi4vemgtdHdcIjogXCIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLXR3LmpzXCIsXG5cdFwiLi96aC10dy5qc1wiOiBcIi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtdHcuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZSBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qJFwiOyIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGFmID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYWYnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW51YXJpZV9GZWJydWFyaWVfTWFhcnRfQXByaWxfTWVpX0p1bmllX0p1bGllX0F1Z3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKYW5fRmViX01ydF9BcHJfTWVpX0p1bl9KdWxfQXVnX1NlcF9Pa3RfTm92X0Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnU29uZGFnX01hYW5kYWdfRGluc2RhZ19Xb2Vuc2RhZ19Eb25kZXJkYWdfVnJ5ZGFnX1NhdGVyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1Nvbl9NYWFfRGluX1dvZV9Eb25fVnJ5X1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU29fTWFfRGlfV29fRG9fVnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC92bXxubS9pLFxuICAgICAgICBpc1BNIDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL15ubSQvaS50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAndm0nIDogJ1ZNJztcbiAgICAgICAgICAgI
33378H0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnbm0nIDogJ05NJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW1ZhbmRhZyBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbTcO0cmUgb21dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tHaXN0ZXIgb21dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1tMYWFzXSBkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ29vciAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIGdlbGVkZScsXG4gICAgICAgICAgICBzIDogJ1xcJ24gcGFhciBzZWtvbmRlcycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWtvbmRlcycsXG4gICAgICAgICAgICBtIDogJ1xcJ24gbWludXV0JyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0ZScsXG4gICAgICAgICAgICBoIDogJ1xcJ24gdXVyJyxcbiAgICAgICAgICAgIGhoIDogJyVkIHVyZScsXG4gICAgICAgICAgICBkIDogJ1xcJ24gZGFnJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGRhZScsXG4gICAgICAgICAgICBNIDogJ1xcJ24gbWFhbmQnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbWFhbmRlJyxcbiAgICAgICAgICAgIHkgOiAnXFwnbiBqYWFyJyxcbiAgICAgICAgICAgIHl5IDogJyVkIGphYXInXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdGV8ZGUpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoKG51bWJlciA9PT0gMSB8fCBudW1iZXIgPT09IDggfHwgbnVtYmVyID49IDIwKSA/ICdzdGUnIDogJ2RlJyk7IC8vIFRoYW5rcyB0byBKb3JpcyBSw7ZsaW5nIDogaHR0cHM6Ly9naXRodWIuY29tL2pqdXBpdGVyXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNYWFuZGFnIGlzIGRpZSBlZXJzdGUgZGFnIHZhbiBkaWUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIERpZSB3ZWVrIHdhdCBkaWUgNGRlIEphbnVhcmllIGJldmF0IGlzIGRpZSBlZXJzdGUgd2VlayB2YW4gZGllIGphYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhZjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGFyRHogPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci1keicsIHtcbiAgICAgICAgbW9udGhzIDogJ9is2KfZhtmB2Ypf2YHZitmB2LHZil/Zhdin2LHYs1/Yo9mB2LHZitmEX9mF2KfZil/YrNmI2KfZhl/YrNmI2YrZhNmK2Klf2KPZiNiqX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn2KzYp9mG2YHZil/ZgdmK2YHYsdmKX9mF2KfYsdizX9ij2YHYsdmK2YRf2YXYp9mKX9is2YjYp9mGX9is2YjZitmE2YrYqV/Yo9mI2Kpf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn2KfYrdivX9in2KvZhtmK2YZf2KvZhNin2KvYp9ihX9in2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9ij2K1f2KXYq1/Yq9mE2Kdf2KPYsV/YrtmFX9is2YVf2LPYqCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9inINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgI
33378H0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfZgdmKICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHMgOiAn2KvZiNin2YYnLFxuICAgICAgICAgICAgc3MgOiAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBtIDogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW0gOiAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICBoIDogJ9iz2KfYudipJyxcbiAgICAgICAgICAgIGhoIDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZCA6ICfZitmI2YUnLFxuICAgICAgICAgICAgZGQgOiAnJWQg2KPZitin2YUnLFxuICAgICAgICAgICAgTSA6ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU0gOiAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgeSA6ICfYs9mG2KknLFxuICAgICAgICAgICAgeXkgOiAnJWQg2LPZhtmI2KfYqidcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJEejtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGFyS3cgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci1rdycsIHtcbiAgICAgICAgbW9udGhzIDogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ9in2YTYo9it2K9f2KfZhNil2KrZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfYp9it2K9f2KfYqtmG2YrZhl/Yq9mE2KfYq9in2KFf2KfYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzIDogJ9ir2YjYp9mGJyxcbiAgICAgICAgICAgIHNzIDogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbSA6ICfYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIG1tIDogJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgaCA6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaCA6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgIGQgOiAn2YrZiNmFJyxcbiAgICAgICAgICAgIGRkIDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE0gOiAn2LTZh9ixJyxcbiAgICAgICAgICAgIE1NIDogJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgIHkgOiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5IDogJyVkINiz2YbZiNin2KonXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDEyICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJLdztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eX
33378Blb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgJzEnOiAnMScsXG4gICAgICAgICcyJzogJzInLFxuICAgICAgICAnMyc6ICczJyxcbiAgICAgICAgJzQnOiAnNCcsXG4gICAgICAgICc1JzogJzUnLFxuICAgICAgICAnNic6ICc2JyxcbiAgICAgICAgJzcnOiAnNycsXG4gICAgICAgICc4JzogJzgnLFxuICAgICAgICAnOSc6ICc5JyxcbiAgICAgICAgJzAnOiAnMCdcbiAgICB9LCBwbHVyYWxGb3JtID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgcmV0dXJuIG4gPT09IDAgPyAwIDogbiA9PT0gMSA/IDEgOiBuID09PSAyID8gMiA6IG4gJSAxMDAgPj0gMyAmJiBuICUgMTAwIDw9IDEwID8gMyA6IG4gJSAxMDAgPj0gMTEgPyA0IDogNTtcbiAgICB9LCBwbHVyYWxzID0ge1xuICAgICAgICBzIDogWyfYo9mC2YQg2YXZhiDYq9in2YbZitipJywgJ9ir2KfZhtmK2Kkg2YjYp9it2K/YqScsIFsn2KvYp9mG2YrYqtin2YYnLCAn2KvYp9mG2YrYqtmK2YYnXSwgJyVkINir2YjYp9mGJywgJyVkINir2KfZhtmK2KknLCAnJWQg2KvYp9mG2YrYqSddLFxuICAgICAgICBtIDogWyfYo9mC2YQg2YXZhiDYr9mC2YrZgtipJywgJ9iv2YLZitmC2Kkg2YjYp9it2K/YqScsIFsn2K/ZgtmK2YLYqtin2YYnLCAn2K/ZgtmK2YLYqtmK2YYnXSwgJyVkINiv2YLYp9im2YInLCAnJWQg2K/ZgtmK2YLYqScsICclZCDYr9mC2YrZgtipJ10sXG4gICAgICAgIGggOiBbJ9ij2YLZhCDZhdmGINiz2KfYudipJywgJ9iz2KfYudipINmI2KfYrdiv2KknLCBbJ9iz2KfYudiq2KfZhicsICfYs9in2LnYqtmK2YYnXSwgJyVkINiz2KfYudin2KonLCAnJWQg2LPYp9i52KknLCAnJWQg2LPYp9i52KknXSxcbiAgICAgICAgZCA6IFsn2KPZgtmEINmF2YYg2YrZiNmFJywgJ9mK2YjZhSDZiNin2K3YrycsIFsn2YrZiNmF2KfZhicsICfZitmI2YXZitmGJ10sICclZCDYo9mK2KfZhScsICclZCDZitmI2YXZi9inJywgJyVkINmK2YjZhSddLFxuICAgICAgICBNIDogWyfYo9mC2YQg2YXZhiDYtNmH2LEnLCAn2LTZh9ixINmI2KfYrdivJywgWyfYtNmH2LHYp9mGJywgJ9i02YfYsdmK2YYnXSwgJyVkINij2LTZh9ixJywgJyVkINi02YfYsdinJywgJyVkINi02YfYsSddLFxuICAgICAgICB5IDogWyfYo9mC2YQg2YXZhiDYudin2YUnLCAn2LnYp9mFINmI2KfYrdivJywgWyfYudin2YXYp9mGJywgJ9i52KfZhdmK2YYnXSwgJyVkINij2LnZiNin2YUnLCAnJWQg2LnYp9mF2YvYpycsICclZCDYudin2YUnXVxuICAgIH0sIHBsdXJhbGl6ZSA9IGZ1bmN0aW9uICh1KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgICAgICB2Y
33378XIgZiA9IHBsdXJhbEZvcm0obnVtYmVyKSxcbiAgICAgICAgICAgICAgICBzdHIgPSBwbHVyYWxzW3VdW3BsdXJhbEZvcm0obnVtYmVyKV07XG4gICAgICAgICAgICBpZiAoZiA9PT0gMikge1xuICAgICAgICAgICAgICAgIHN0ciA9IHN0clt3aXRob3V0U3VmZml4ID8gMCA6IDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgICAgICB9O1xuICAgIH0sIG1vbnRocyA9IFtcbiAgICAgICAgJ9mK2YbYp9mK2LEnLFxuICAgICAgICAn2YHYqNix2KfZitixJyxcbiAgICAgICAgJ9mF2KfYsdizJyxcbiAgICAgICAgJ9ij2KjYsdmK2YQnLFxuICAgICAgICAn2YXYp9mK2YgnLFxuICAgICAgICAn2YrZiNmG2YrZiCcsXG4gICAgICAgICfZitmI2YTZitmIJyxcbiAgICAgICAgJ9ij2LrYs9i32LMnLFxuICAgICAgICAn2LPYqNiq2YXYqNixJyxcbiAgICAgICAgJ9ij2YPYqtmI2KjYsScsXG4gICAgICAgICfZhtmI2YHZhdio2LEnLFxuICAgICAgICAn2K/Zitiz2YXYqNixJ1xuICAgIF07XG5cbiAgICB2YXIgYXJMeSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLWx5Jywge1xuICAgICAgICBtb250aHMgOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0IDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5cyA6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0QvXFx1MjAwRk0vXFx1MjAwRllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i1fNmFLyxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfZhScgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZhSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9mL2Kcg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ9io2LnYryAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzIDogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBzcyA6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgbSA6IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgbW0gOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIGggOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGhoIDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgICAgICBkIDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBkZCA6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgTSA6IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgTU0gOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIHkgOiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgICAgIHl5IDogcGx1cmFsaXplKCd5JylcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KS5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDEyICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJMeTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGFyTWEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci1tYScsIHtcbiAgICAgICAgbW9udGhzIDogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEnLnNwbGl0KCdfJyksXG4gICAgICAgI
33378HdlZWtkYXlzIDogJ9in2YTYo9it2K9f2KfZhNil2KrZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfYp9it2K9f2KfYqtmG2YrZhl/Yq9mE2KfYq9in2KFf2KfYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzIDogJ9ir2YjYp9mGJyxcbiAgICAgICAgICAgIHNzIDogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbSA6ICfYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIG1tIDogJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgaCA6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaCA6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgIGQgOiAn2YrZiNmFJyxcbiAgICAgICAgICAgIGRkIDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE0gOiAn2LTZh9ixJyxcbiAgICAgICAgICAgIE1NIDogJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgIHkgOiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5IDogJyVkINiz2YbZiNin2KonXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogMTIgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhck1hO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAnMSc6ICfZoScsXG4gICAgICAgICcyJzogJ9miJyxcbiAgICAgICAgJzMnOiAn2aMnLFxuICAgICAgICAnNCc6ICfZpCcsXG4gICAgICAgICc1JzogJ9mlJyxcbiAgICAgICAgJzYnOiAn2aYnLFxuICAgICAgICAnNyc6ICfZpycsXG4gICAgICAgICc4JzogJ9moJyxcbiAgICAgICAgJzknOiAn2aknLFxuICAgICAgICAnMCc6ICfZoCdcbiAgICB9LCBudW1iZXJNYXAgPSB7XG4gICAgICAgICfZoSc6ICcxJyxcbiAgICAgICAgJ9miJzogJzInLFxuICAgICAgICAn2aMnOiAnMycsXG4gICAgICAgICfZpCc6ICc0JyxcbiAgICAgICAgJ9mlJzogJzUnLFxuICAgICAgICAn2aYnOiAnNicsXG4gICAgICAgICfZpyc6ICc3JyxcbiAgICAgICAgJ9moJzogJzgnLFxuICAgICAgICAn2aknOiAnOScsXG4gICAgICAgICfZoCc6ICcwJ1xuICAgIH07XG5cbiAgICB2YXIgYXJTYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLXNhJywge1xuICAgICAgICBtb250aHMgOiAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2YrZiF/ZitmI2YbZitmIX9mK2YjZhNmK2Yhf2KPYutiz2LfYs1/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mK2Yhf2YrZiNmG2YrZiF/ZitmI2YTZitmIX9ij2LrYs9i32LNf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgI
33378HdlZWtkYXlzTWluIDogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i1fNmFLyxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfZhScgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZhSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9inINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfZgdmKICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHMgOiAn2KvZiNin2YYnLFxuICAgICAgICAgICAgc3MgOiAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBtIDogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW0gOiAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICBoIDogJ9iz2KfYudipJyxcbiAgICAgICAgICAgIGhoIDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZCA6ICfZitmI2YUnLFxuICAgICAgICAgICAgZGQgOiAnJWQg2KPZitin2YUnLFxuICAgICAgICAgICAgTSA6ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU0gOiAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgeSA6ICfYs9mG2KknLFxuICAgICAgICAgICAgeXkgOiAnJWQg2LPZhtmI2KfYqidcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW9mh2aLZo9mk2aXZptmn2ajZqdmgXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSkucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJTYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGFyVG4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci10bicsIHtcbiAgICAgICAgbW9udGhzOiAn2KzYp9mG2YHZil/ZgdmK2YHYsdmKX9mF2KfYsdizX9ij2YHYsdmK2YRf2YXYp9mKX9is2YjYp9mGX9is2YjZitmE2YrYqV/Yo9mI2Kpf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydDogJ9is2KfZhtmB2Ypf2YHZitmB2LHZil/Zhdin2LHYs1/Yo9mB2LHZitmEX9mF2KfZil/YrNmI2KfZhl/YrNmI2YrZhNmK2Klf2KPZiNiqX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Y
33378sycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9mB2YogJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiAn2KvZiNin2YYnLFxuICAgICAgICAgICAgc3MgOiAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBtOiAn2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBtbTogJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgaDogJ9iz2KfYudipJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICBkOiAn2YrZiNmFJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2KPZitin2YUnLFxuICAgICAgICAgICAgTTogJ9i02YfYsScsXG4gICAgICAgICAgICBNTTogJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgIHk6ICfYs9mG2KknLFxuICAgICAgICAgICAgeXk6ICclZCDYs9mG2YjYp9iqJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0IC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyVG47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICcxJzogJ9mhJyxcbiAgICAgICAgJzInOiAn2aInLFxuICAgICAgICAnMyc6ICfZoycsXG4gICAgICAgICc0JzogJ9mkJyxcbiAgICAgICAgJzUnOiAn2aUnLFxuICAgICAgICAnNic6ICfZpicsXG4gICAgICAgICc3JzogJ9mnJyxcbiAgICAgICAgJzgnOiAn2agnLFxuICAgICAgICAnOSc6ICfZqScsXG4gICAgICAgICcwJzogJ9mgJ1xuICAgIH0sIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ9mhJzogJzEnLFxuICAgICAgICAn2aInOiAnMicsXG4gICAgICAgICfZoyc6ICczJyxcbiAgICAgICAgJ9mkJzogJzQnLFxuICAgICAgICAn2aUnOiAnNScsXG4gICAgICAgICfZpic6ICc2JyxcbiAgICAgICAgJ9mnJzogJzcnLFxuICAgICAgICAn2agnOiAnOCcsXG4gICAgICAgICfZqSc6ICc5JyxcbiAgICAgICAgJ9mgJzogJzAnXG4gICAgfSwgcGx1cmFsRm9ybSA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHJldHVybiBuID09PSAwID8gMCA6IG4gPT09IDEgPyAxIDogbiA9PT0gMiA/IDIgOiBuICUgMTAwID49IDMgJiYgbiAlIDEwMCA8PSAxMCA/IDMgOiBuICUgMTAwID49IDExID8gNCA6IDU7XG4gICAgfSwgcGx1cmFscyA9IHtcbiAgICAgICAgcyA6IFsn2KPZgtmEINmF2YYg2KvYp9mG2YrYqScsICfYq9in2YbZitipINmI2KfYrdiv2KknLCBbJ9ir2KfZhtmK2KrYp9mGJywgJ9ir2KfZhtmK2KrZitmGJ10sICclZCDYq9mI2KfZhicsICclZCDYq9in2YbZitipJywgJyVkINir2KfZhtmK2KknXSxcbiAgICAgICAgbSA6IFsn2KPZgtmEINmF2YYg2K/ZgtmK2YLYqScsICfYr9mC2YrZgtipINmI2KfYrdiv2KknLCBbJ9iv2YLZitmC2KrYp9mGJywgJ9iv2YLZitmC2KrZitmGJ10sICclZCDYr9mC2KfYptmCJywgJyVkINiv2YLZitmC2KknLCAnJWQg2K/ZgtmK2YLYqSddLFxuICAgICAgICBoIDogWyfYo9mC2YQg2YXZhiDYs9in2LnYqScsICfYs9in2LnYqSDZiNin2K3Yr9ipJywgWyfYs9in2LnYqtin2YYnLCAn2LPYp9i52KrZitmGJ10sICclZCDYs9in2LnYp9iqJywgJyVkINiz2KfYudipJywgJyVkINiz2KfYudipJ10sXG4gICAgICAgIGQgOiBbJ9ij2YLZhCDZhdmGINmK2YjZhScsICfZitmI2YUg2YjYp9it2K8nLCBbJ9mK2YjZhdin2YYnLCAn2YrZiNmF2YrZhiddLCAnJWQg2KPZitin2YUnLCAnJWQg2YrZiNmF2YvYpycsICclZCDZitmI2YUnXSxcbiAgICAgICAgTSA6IFsn2KPZgtmEINmF2YYg2LTZh9ixJywgJ9i02YfYsSDZiNin2K3YrycsIFsn2LTZh9ix2KfZhicsICfYtNmH2LHZitmGJ10sICclZCDYo9i02YfYsScsICclZCDYtNmH2LHYpycsICclZCDYtNmH2LEnXSxcbiAgICAgICAgeSA6IFsn2KPZgtmEINmF2YYg2LnYp9mFJywgJ9i52KfZhSDZiNin2K3YrycsIFsn2LnYp9mF2KfZhicsICfYudin2YXZitmGJ10sICclZCDYo9i52YjYp9mFJywgJyVkINi52KfZhdmL2KcnLCAnJWQg2LnYp9mFJ11cbiAgICB9LCBwbHVyYWxpemUgPSBmdW5jdGlvbiAodSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgdmFyIGYgPSBwbHVyYWxGb3JtKG51bWJlciksXG4gICAgICAgICAgICAgICAgc3RyID0gcGx1cmFsc1t1XVtwbHVyYWxGb3JtKG51bWJlcildO1xuICAgICAgICAgICAgaWYgKGYgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHJbd2l0aG91dFN1ZmZpeCA/IDAgOiAxXTtcbiAgICAgICAgICAgI
33378H1cbiAgICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICAgICAgfTtcbiAgICB9LCBtb250aHMgPSBbXG4gICAgICAgICfZitmG2KfZitixJyxcbiAgICAgICAgJ9mB2KjYsdin2YrYsScsXG4gICAgICAgICfZhdin2LHYsycsXG4gICAgICAgICfYo9io2LHZitmEJyxcbiAgICAgICAgJ9mF2KfZitmIJyxcbiAgICAgICAgJ9mK2YjZhtmK2YgnLFxuICAgICAgICAn2YrZiNmE2YrZiCcsXG4gICAgICAgICfYo9i62LPYt9izJyxcbiAgICAgICAgJ9iz2KjYqtmF2KjYsScsXG4gICAgICAgICfYo9mD2KrZiNio2LEnLFxuICAgICAgICAn2YbZiNmB2YXYqNixJyxcbiAgICAgICAgJ9iv2YrYs9mF2KjYsSdcbiAgICBdO1xuXG4gICAgdmFyIGFyID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXInLCB7XG4gICAgICAgIG1vbnRocyA6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQgOiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzIDogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnRC9cXHUyMDBGTS9cXHUyMDBGWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgICAgICBpc1BNIDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mFJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2YvYpyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn2KjYudivICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHMgOiBwbHVyYWxpemUoJ3MnKSxcbiAgICAgICAgICAgIHNzIDogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBtIDogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBtbSA6IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgaCA6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgaGggOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGQgOiBwbHVyYWxpemUoJ2QnKSxcbiAgICAgICAgICAgIGRkIDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBNIDogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICBNTSA6IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgeSA6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICAgICAgeXkgOiBwbHVyYWxpemUoJ3knKVxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b2aHZotmj2aTZpdmm2afZqNmp2aBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSkucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KS5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDEyICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eX
33378Blb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzdWZmaXhlcyA9IHtcbiAgICAgICAgMTogJy1pbmNpJyxcbiAgICAgICAgNTogJy1pbmNpJyxcbiAgICAgICAgODogJy1pbmNpJyxcbiAgICAgICAgNzA6ICctaW5jaScsXG4gICAgICAgIDgwOiAnLWluY2knLFxuICAgICAgICAyOiAnLW5jaScsXG4gICAgICAgIDc6ICctbmNpJyxcbiAgICAgICAgMjA6ICctbmNpJyxcbiAgICAgICAgNTA6ICctbmNpJyxcbiAgICAgICAgMzogJy3DvG5jw7wnLFxuICAgICAgICA0OiAnLcO8bmPDvCcsXG4gICAgICAgIDEwMDogJy3DvG5jw7wnLFxuICAgICAgICA2OiAnLW5jxLEnLFxuICAgICAgICA5OiAnLXVuY3UnLFxuICAgICAgICAxMDogJy11bmN1JyxcbiAgICAgICAgMzA6ICctdW5jdScsXG4gICAgICAgIDYwOiAnLcSxbmPEsScsXG4gICAgICAgIDkwOiAnLcSxbmPEsSdcbiAgICB9O1xuXG4gICAgdmFyIGF6ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXonLCB7XG4gICAgICAgIG1vbnRocyA6ICd5YW52YXJfZmV2cmFsX21hcnRfYXByZWxfbWF5X2l5dW5faXl1bF9hdnF1c3Rfc2VudHlhYnJfb2t0eWFicl9ub3lhYnJfZGVrYWJyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICd5YW5fZmV2X21hcl9hcHJfbWF5X2l5bl9peWxfYXZxX3Nlbl9va3Rfbm95X2Rlaycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnQmF6YXJfQmF6YXIgZXJ0yZlzaV/Dh8mZcsWfyZluYsmZIGF4xZ9hbcSxX8OHyZlyxZ/JmW5iyZlfQ8O8bcmZIGF4xZ9hbcSxX0PDvG3JmV/FnsmZbmLJmScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdCYXpfQnpFX8OHQXhfw4fJmXJfQ0F4X0PDvG1fxZ7JmW4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0J6X0JFX8OHQV/Dh8mZX0NBX0PDvF/FnsmZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbYnVnw7xuIHNhYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW3NhYmFoIHNhYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ1tnyZlsyZluIGjJmWZ0yZldIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW2TDvG7JmW5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1trZcOnyZluIGjJmWZ0yZldIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyBzb25yYScsXG4gICAgICAgICAgICBwYXN0IDogJyVzIMmZdnbJmWwnLFxuICAgICAgICAgICAgcyA6ICdiaXJuZcOnyZkgc2FuaXnJmScsXG4gICAgICAgICAgICBzcyA6ICclZCBzYW5pecmZJyxcbiAgICAgICAgICAgIG0gOiAnYmlyIGTJmXFpccmZJyxcbiAgICAgICAgICAgIG1tIDogJyVkIGTJmXFpccmZJyxcbiAgICAgICAgICAgIGggOiAnYmlyIHNhYXQnLFxuICAgICAgICAgICAgaGggOiAnJWQgc2FhdCcsXG4gICAgICAgICAgICBkIDogJ2JpciBnw7xuJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGfDvG4nLFxuICAgICAgICAgICAgTSA6ICdiaXIgYXknLFxuICAgICAgICAgICAgTU0gOiAnJWQgYXknLFxuICAgICAgICAgICAgeSA6ICdiaXIgaWwnLFxuICAgICAgICAgICAgeXkgOiAnJWQgaWwnXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9nZWPJmXxzyZloyZlyfGfDvG5kw7x6fGF4xZ9hbS8sXG4gICAgICAgIGlzUE0gOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXihnw7xuZMO8enxheMWfYW0pJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdnZWPJmSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc8mZaMmZcic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZ8O8bmTDvHonO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2F4xZ9hbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0oxLFuY8SxfGluY2l8bmNpfMO8bmPDvHxuY8SxfHVuY3UpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHsgIC8vIHNwZWNpYWwgY2FzZSBmb3IgemVyb1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLcSxbmPEsSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2Y
33378XIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGIgPSBudW1iZXIgJSAxMDAgLSBhLFxuICAgICAgICAgICAgICAgIGMgPSBudW1iZXIgPj0gMTAwID8gMTAwIDogbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0gfHwgc3VmZml4ZXNbY10pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhejtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgZnVuY3Rpb24gcGx1cmFsKHdvcmQsIG51bSkge1xuICAgICAgICB2Y
33378XIgZm9ybXMgPSB3b3JkLnNwbGl0KCdfJyk7XG4gICAgICAgIHJldHVybiBudW0gJSAxMCA9PT0gMSAmJiBudW0gJSAxMDAgIT09IDExID8gZm9ybXNbMF0gOiAobnVtICUgMTAgPj0gMiAmJiBudW0gJSAxMCA8PSA0ICYmIChudW0gJSAxMDAgPCAxMCB8fCBudW0gJSAxMDAgPj0gMjApID8gZm9ybXNbMV0gOiBmb3Jtc1syXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgICdzcyc6IHdpdGhvdXRTdWZmaXggPyAn0YHQtdC60YPQvdC00LBf0YHQtdC60YPQvdC00Ytf0YHQtdC60YPQvdC0JyA6ICfRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgJ21tJzogd2l0aG91dFN1ZmZpeCA/ICfRhdCy0ZbQu9GW0L3QsF/RhdCy0ZbQu9GW0L3Ri1/RhdCy0ZbQu9GW0L0nIDogJ9GF0LLRltC70ZbQvdGDX9GF0LLRltC70ZbQvdGLX9GF0LLRltC70ZbQvScsXG4gICAgICAgICAgICAnaGgnOiB3aXRob3V0U3VmZml4ID8gJ9Cz0LDQtNC30ZbQvdCwX9Cz0LDQtNC30ZbQvdGLX9Cz0LDQtNC30ZbQvScgOiAn0LPQsNC00LfRltC90YNf0LPQsNC00LfRltC90Ytf0LPQsNC00LfRltC9JyxcbiAgICAgICAgICAgICdkZCc6ICfQtNC30LXQvdGMX9C00L3Rll/QtNC30ZHQvScsXG4gICAgICAgICAgICAnTU0nOiAn0LzQtdGB0Y/Rhl/QvNC10YHRj9GG0Ytf0LzQtdGB0Y/RhtCw0Z4nLFxuICAgICAgICAgICAgJ3l5JzogJ9Cz0L7QtF/Qs9Cw0LTRi1/Qs9Cw0LTQvtGeJ1xuICAgICAgICB9O1xuICAgICAgICBpZiAoa2V5ID09PSAnbScpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9GF0LLRltC70ZbQvdCwJyA6ICfRhdCy0ZbQu9GW0L3Rgyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAnaCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9Cz0LDQtNC30ZbQvdCwJyA6ICfQs9Cw0LTQt9GW0L3Rgyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyAnICsgcGx1cmFsKGZvcm1hdFtrZXldLCArbnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JlJywge1xuICAgICAgICBtb250aHMgOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICfRgdGC0YPQtNC30LXQvdGPX9C70Y7RgtCw0LPQsF/RgdCw0LrQsNCy0ZbQutCwX9C60YDQsNGB0LDQstGW0LrQsF/RgtGA0LDRntC90Y9f0YfRjdGA0LLQtdC90Y9f0LvRltC/0LXQvdGPX9C20L3RltGe0L3Rj1/QstC10YDQsNGB0L3Rj1/QutCw0YHRgtGA0YvRh9C90ZbQutCwX9C70ZbRgdGC0LDQv9Cw0LTQsF/RgdC90LXQttC90Y8nLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBzdGFuZGFsb25lOiAn0YHRgtGD0LTQt9C10L3RjF/Qu9GO0YLRi1/RgdCw0LrQsNCy0ZbQul/QutGA0LDRgdCw0LLRltC6X9GC0YDQsNCy0LXQvdGMX9GH0Y3RgNCy0LXQvdGMX9C70ZbQv9C10L3RjF/QttC90ZbQstC10L3RjF/QstC10YDQsNGB0LXQvdGMX9C60LDRgdGC0YDRi9GH0L3RltC6X9C70ZbRgdGC0LDQv9Cw0LRf0YHQvdC10LbQsNC90YwnLnNwbGl0KCdfJylcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn0YHRgtGD0LRf0LvRjtGCX9GB0LDQul/QutGA0LDRgV/RgtGA0LDQsl/Rh9GN0YDQsl/Qu9GW0L9f0LbQvdGW0LJf0LLQtdGAX9C60LDRgdGCX9C70ZbRgdGCX9GB0L3QtdC2Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9C90Y/QtNC30LXQu9GOX9C/0LDQvdGP0LTQt9C10LvQsNC6X9Cw0Z7RgtC+0YDQsNC6X9GB0LXRgNCw0LTRg1/Rh9Cw0YbQstC10YBf0L/Rj9GC0L3RltGG0YNf0YHRg9Cx0L7RgtGDJy5zcGxpdCgnXycpLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ9C90Y/QtNC30LXQu9GPX9C/0LDQvdGP0LTQt9C10LvQsNC6X9Cw0Z7RgtC+0YDQsNC6X9GB0LXRgNCw0LTQsF/Rh9Cw0YbQstC10YBf0L/Rj9GC0L3RltGG0LBf0YHRg9Cx0L7RgtCwJy5zcGxpdCgnXycpLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9cXFsgP1vQo9GD0Z5dID8oPzrQvNGW0L3Rg9C70YPRjnzQvdCw0YHRgtGD0L/QvdGD0Y4pPyA/XFxdID9kZGRkL1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ9C90LRf0L/QvV/QsNGCX9GB0YBf0YfRhl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9C90LRf0L/QvV/QsNGCX9GB0YBf0YfRhl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWSDQsy4nLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZINCzLiwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSDQsy4sIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0KHRkdC90L3RjyDRnl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQl9Cw0Z7RgtGA0LAg0Z5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0KPRh9C+0YDQsCDRnl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1vQo10gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQoyDQvNGW0L3Rg9C70YPRjl0gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgI
33378HJldHVybiAnW9CjINC80ZbQvdGD0LvRi10gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn0L/RgNCw0LcgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDRgtCw0LzRgycsXG4gICAgICAgICAgICBzIDogJ9C90LXQutCw0LvRjNC60ZYg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG0gOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbW0gOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaCA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoaCA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkIDogJ9C00LfQtdC90YwnLFxuICAgICAgICAgICAgZGQgOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTSA6ICfQvNC10YHRj9GGJyxcbiAgICAgICAgICAgIE1NIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHkgOiAn0LPQvtC0JyxcbiAgICAgICAgICAgIHl5IDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0L3QvtGH0Yt80YDQsNC90ZbRhtGLfNC00L3Rj3zQstC10YfQsNGA0LAvLFxuICAgICAgICBpc1BNIDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o0LTQvdGPfNCy0LXRh9Cw0YDQsCkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C90L7Rh9GLJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRgNCw0L3RltGG0YsnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C00L3Rjyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LLQtdGH0LDRgNCwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjRlnzRi3zQs9CwKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG51bWJlciAlIDEwID09PSAyIHx8IG51bWJlciAlIDEwID09PSAzKSAmJiAobnVtYmVyICUgMTAwICE9PSAxMiAmJiBudW1iZXIgJSAxMDAgIT09IDEzKSA/IG51bWJlciArICct0ZYnIDogbnVtYmVyICsgJy3Riyc7XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCz0LAnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJlO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgYmcgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdiZycsIHtcbiAgICAgICAgbW9udGhzIDogJ9GP0L3Rg9Cw0YDQuF/RhNC10LLRgNGD0LDRgNC4X9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNC5X9GO0L3QuF/RjtC70Lhf0LDQstCz0YPRgdGCX9GB0LXQv9GC0LXQvNCy0YDQuF/QvtC60YLQvtC80LLRgNC4X9C90L7QtdC80LLRgNC4X9C00LXQutC10LzQstGA0LgnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ9GP0L3RgF/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0Y7QvdC4X9GO0LvQuF/QsNCy0LNf0YHQtdC/X9C+0LrRgl/QvdC+0LVf0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfQvdC10LTQtdC70Y9f0L/QvtC90LXQtNC10LvQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNGP0LTQsF/Rh9C10YLQstGK0YDRgtGK0Lpf0L/QtdGC0YrQul/RgdGK0LHQvtGC0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn0L3QtdC0X9C/0L7QvV/QstGC0L5f0YHRgNGPX9GH0LXRgl/Qv9C10YJf0YHRitCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgI
33378HNhbWVEYXkgOiAnW9CU0L3QtdGBINCyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vQo9GC0YDQtSDQsl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBb0LJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW9CS0YfQtdGA0LAg0LJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0LjQt9C80LjQvdCw0LvQsNGC0LBdIGRkZGQgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINC40LfQvNC40L3QsNC70LjRj10gZGRkZCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ9GB0LvQtdC0ICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAn0L/RgNC10LTQuCAlcycsXG4gICAgICAgICAgICBzIDogJ9C90Y/QutC+0LvQutC+INGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIHNzIDogJyVkINGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIG0gOiAn0LzQuNC90YPRgtCwJyxcbiAgICAgICAgICAgIG1tIDogJyVkINC80LjQvdGD0YLQuCcsXG4gICAgICAgICAgICBoIDogJ9GH0LDRgScsXG4gICAgICAgICAgICBoaCA6ICclZCDRh9Cw0YHQsCcsXG4gICAgICAgICAgICBkIDogJ9C00LXQvScsXG4gICAgICAgICAgICBkZCA6ICclZCDQtNC90LgnLFxuICAgICAgICAgICAgTSA6ICfQvNC10YHQtdGGJyxcbiAgICAgICAgICAgIE1NIDogJyVkINC80LXRgdC10YbQsCcsXG4gICAgICAgICAgICB5IDogJ9Cz0L7QtNC40L3QsCcsXG4gICAgICAgICAgICB5eSA6ICclZCDQs9C+0LTQuNC90LgnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0LXQsnzQtdC9fNGC0Lh80LLQuHzRgNC4fNC80LgpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBsYXN0RGlnaXQgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBsYXN0MkRpZ2l0cyA9IG51bWJlciAlIDEwMDtcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdCyJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdC9JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPiAxMCAmJiBsYXN0MkRpZ2l0cyA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCy0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgNC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSA3IHx8IGxhc3REaWdpdCA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC80LgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgtC4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmc7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBibSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JtJywge1xuICAgICAgICBtb250aHMgOiAnWmFud3V5ZWthbG9fRmV3dXJ1eWVrYWxvX01hcmlzaWthbG9fQXdpcmlsaWthbG9fTcmba2Fsb19adXfJm25rYWxvX1p1bHV5ZWthbG9fVXRpa2Fsb19TyZt0YW5idXJ1a2Fsb1/JlGt1dMmUYnVydWthbG9fTm93YW5idXJ1a2Fsb19EZXNhbmJ1cnVrYWxvJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdaYW5fRmV3X01hcl9Bd2lfTcmbX1p1d19adWxfVXRpX1PJm3RfyZRrdV9Ob3dfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdLYXJpX050yZtuyZtuX1RhcmF0YV9BcmFiYV9BbGFtaXNhX0p1bWFfU2liaXJpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ0thcl9OdMmbX1Rhcl9BcmFfQWxhX0p1bV9TaWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0thX050X1RhX0FyX0FsX0p1X1NpJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2zJm3LJm10gSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIE1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbMmbcsmbXSB
33378ISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tCaSBsyZtyyZtdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW1NpbmkgbMmbcsmbXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFtkb24gbMmbcsmbXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tLdW51IGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBbdMmbbcmbbmVuIGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVzIGvJlG7JlCcsXG4gICAgICAgICAgICBwYXN0IDogJ2EgYsmbICVzIGLJlCcsXG4gICAgICAgICAgICBzIDogJ3NhbmdhIGRhbWEgZGFtYScsXG4gICAgICAgICAgICBzcyA6ICdzZWtvbmRpICVkJyxcbiAgICAgICAgICAgIG0gOiAnbWluaXRpIGtlbGVuJyxcbiAgICAgICAgICAgIG1tIDogJ21pbml0aSAlZCcsXG4gICAgICAgICAgICBoIDogJ2zJm3LJmyBrZWxlbicsXG4gICAgICAgICAgICBoaCA6ICdsyZtyyZsgJWQnLFxuICAgICAgICAgICAgZCA6ICd0aWxlIGtlbGVuJyxcbiAgICAgICAgICAgIGRkIDogJ3RpbGUgJWQnLFxuICAgICAgICAgICAgTSA6ICdrYWxvIGtlbGVuJyxcbiAgICAgICAgICAgIE1NIDogJ2thbG8gJWQnLFxuICAgICAgICAgICAgeSA6ICdzYW4ga2VsZW4nLFxuICAgICAgICAgICAgeXkgOiAnc2FuICVkJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBibTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgJzEnOiAn4KenJyxcbiAgICAgICAgJzInOiAn4KeoJyxcbiAgICAgICAgJzMnOiAn4KepJyxcbiAgICAgICAgJzQnOiAn4KeqJyxcbiAgICAgICAgJzUnOiAn4KerJyxcbiAgICAgICAgJzYnOiAn4KesJyxcbiAgICAgICAgJzcnOiAn4KetJyxcbiAgICAgICAgJzgnOiAn4KeuJyxcbiAgICAgICAgJzknOiAn4KevJyxcbiAgICAgICAgJzAnOiAn4KemJ1xuICAgIH0sXG4gICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAn4KenJzogJzEnLFxuICAgICAgICAn4KeoJzogJzInLFxuICAgICAgICAn4KepJzogJzMnLFxuICAgICAgICAn4KeqJzogJzQnLFxuICAgICAgICAn4KerJzogJzUnLFxuICAgICAgICAn4KesJzogJzYnLFxuICAgICAgICAn4KetJzogJzcnLFxuICAgICAgICAn4KeuJzogJzgnLFxuICAgICAgICAn4KevJzogJzknLFxuICAgICAgICAn4KemJzogJzAnXG4gICAgfTtcblxuICAgIHZhciBibiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JuJywge1xuICAgICAgICBtb250aHMgOiAn4Kac4Ka+4Kao4KeB4Kef4Ka+4Kaw4KeAX+Cmq+Cnh+CmrOCnjeCmsOCngeCnn+CmvuCmsOCmv1/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp/gp4fgpq7gp43gpqzgprBf4KaF4KaV4KeN4Kaf4KeL4Kas4KawX+CmqOCmreCnh+CmruCnjeCmrOCmsF/gpqHgpr/gprjgp4fgpq7gp43gpqzgprAnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ+CmnOCmvuCmqOCngV/gpqvgp4fgpqxf4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsF/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsl/gpobgppdf4Ka44KeH4Kaq4KeN4KafX+CmheCmleCnjeCmn+Cni1/gpqjgpq3gp4df4Kah4Ka/4Ka44KeHJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfgprDgpqzgpr/gpqzgpr7gprBf4Ka44KeL4Kau4Kas4Ka+4KawX+CmruCmmeCnjeCml+CmsuCmrOCmvuCmsF/gpqzgp4Hgpqfgpqzgpr7gprBf4Kas4KeD4Ka54Ka44KeN4Kaq4Kak4Ka/4Kas4Ka+4KawX+CmtuCngeCmleCnjeCmsOCmrOCmvuCmsF/gprbgpqjgpr/gpqzgpr7gprAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv1/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfgprDgpqzgpr9f4Ka44KeL4KauX+CmruCmmeCnjeCml1/gpqzgp4Hgpqdf4Kas4KeD4Ka54KaDX+CmtuCngeCmleCnjeCmsF/gprbgpqjgpr8nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMVFMgOiAnQSBoOm1tOnNzIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58nXG4gICAgICAgI
33378H0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb4KaG4KacXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vgpobgppfgpr7gpq7gp4DgppXgpr7gprJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW+Cml+CmpOCmleCmvuCmsl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW+Cml+CmpF0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVzIOCmquCmsOCnhycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIOCmhuCml+CnhycsXG4gICAgICAgICAgICBzIDogJ+CmleCnn+Cnh+CmlSDgprjgp4fgppXgp4fgpqjgp43gpqEnLFxuICAgICAgICAgICAgc3MgOiAnJWQg4Ka44KeH4KaV4KeH4Kao4KeN4KahJyxcbiAgICAgICAgICAgIG0gOiAn4KaP4KaVIOCmruCmv+CmqOCmv+CmnycsXG4gICAgICAgICAgICBtbSA6ICclZCDgpq7gpr/gpqjgpr/gpp8nLFxuICAgICAgICAgICAgaCA6ICfgpo/gppUg4KaY4Kao4KeN4Kaf4Ka+JyxcbiAgICAgICAgICAgIGhoIDogJyVkIOCmmOCmqOCnjeCmn+CmvicsXG4gICAgICAgICAgICBkIDogJ+Cmj+CmlSDgpqbgpr/gpqgnLFxuICAgICAgICAgICAgZGQgOiAnJWQg4Kam4Ka/4KaoJyxcbiAgICAgICAgICAgIE0gOiAn4KaP4KaVIOCmruCmvuCmuCcsXG4gICAgICAgICAgICBNTSA6ICclZCDgpq7gpr7gprgnLFxuICAgICAgICAgICAgeSA6ICfgpo/gppUg4Kas4Kab4KawJyxcbiAgICAgICAgICAgIHl5IDogJyVkIOCmrOCmm+CmsCdcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cnp+CnqOCnqeCnquCnq+CnrOCnreCnruCnr+Cnpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CmsOCmvuCmpHzgprjgppXgpr7gprJ84Kam4KeB4Kaq4KeB4KawfOCmrOCmv+CmleCmvuCmsnzgprDgpr7gpqQvLFxuICAgICAgICBtZXJpZGllbUhvdXIgOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChtZXJpZGllbSA9PT0gJ+CmsOCmvuCmpCcgJiYgaG91ciA+PSA0KSB8fFxuICAgICAgICAgICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgpqbgp4Hgpqrgp4HgprAnICYmIGhvdXIgPCA1KSB8fFxuICAgICAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CmrOCmv+CmleCmvuCmsicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmsOCmvuCmpCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Ka44KaV4Ka+4KayJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpqbgp4Hgpqrgp4HgprAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmrOCmv+CmleCmvuCmsic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kaw4Ka+4KakJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICcxJzogJ+C8oScsXG4gICAgICAgICcyJzogJ+C8oicsXG4gICAgICAgICczJzogJ+C8oycsXG4gICAgICAgICc0JzogJ+C8pCcsXG4gICAgICAgICc1JzogJ+C8pScsXG4gICAgICAgICc2JzogJ+C8picsXG4gICAgICAgICc3JzogJ+C8pycsXG4gICAgICAgICc4JzogJ+C8qCcsXG4gICAgICAgICc5JzogJ+C8qScsXG4gICAgICAgICcwJzogJ+C8oCdcbiAgICB9LFxuICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ+C8oSc6ICcxJyxcbiAgICAgICAgJ+C8oic6ICcyJyxcbiAgICAgICAgJ+C8oyc6ICczJyxcbiAgICAgICAgJ+C8pCc6ICc0JyxcbiAgICAgICAgJ+C8pSc6ICc1JyxcbiAgICAgICAgJ+C8pic6ICc2JyxcbiAgICAgICAgJ+C8pyc6ICc3JyxcbiAgICAgICAgJ+C8qCc6ICc4JyxcbiAgICAgICAgJ+C8qSc6ICc5JyxcbiAgICAgICAgJ+C8oCc6ICcwJ1xuICAgIH07XG5cbiAgICB2YXIgYm8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdibycsIHtcbiAgICAgICAgbW9udGhzIDogJ+C9n+C+s+C8i+C9luC8i+C9keC9hOC8i+C9lOC9vF/gvZ/gvrPgvIvgvZbgvIvgvYLgvYngvbLgvabgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2C4L2m4L204L2Y4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9nuC9suC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvaPgvpTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2R4L6y4L204L2C4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9keC9tOC9k+C8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvaLgvpLgvrHgvZHgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2R4L2C4L204LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvYLgvYXgvbLgvYLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2C4L2J4L2y4L2m4LyL4L2UJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfgvZ/gvrPgvIvgvZbgvIvgvZHgvYTgvIvgvZTgvbxf4L2f4L6z4LyL4L2W4LyL4L2C4L2J4L2y4L2m4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9guC9puC9tOC9mOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZ7gvbLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2j4L6U4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC+suC9tOC9guC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZHgvbTgvZPgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2i4L6S4L6x4L2R4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC9guC9tOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2C4L2F4L2y4L2C4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9guC9ieC9suC9puC8i+C9lCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn4L2C4L2f4L2g4LyL4L2J4L2y4LyL4L2Y4LyLX+C9guC9n+C9oOC8i+C9n+C+s+C8i+C9luC8i1/gvYLgvZ/gvaDgvIvgvZjgvbLgvYLgvIvgvZHgvZjgvaLgvItf4L2C4L2f4L2g4LyL4L2j4L634L2C4LyL4L2U4LyLX+C9guC9n+C9oOC8i+C9leC9tOC9ouC8i+C9luC9tF/gvYLgvZ/gvaDgvIvgvZTgvIvgvabgvYTgvabgvItf4L2C4L2f4L2g4LyL4L2m4L6k4L264L2T4LyL4L2U4LyLJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ+C9ieC9suC8i+C9mOC8i1/gvZ/gvrPgvIvgvZbgvItf4L2Y4L2y4L2C4LyL4L2R4L2Y4L2i4LyLX+C9o+C+t+C9guC8i+C9lOC8i1/gvZXgvbTgvaLgvIvgvZbgvbRf4L2U4LyL4L2m4L2E4L2m4LyLX+C9puC+pOC9uuC9k+C8i+C9lOC8iycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn4L2J4L2y4LyL4L2Y4LyLX+C9n+C+s+C8i+C9luC8i1/gvZjgvbLgvYLgvIvgvZHgvZjgvaLgvItf4L2j4L634L2C4LyL4L2U4LyLX+C9leC9tOC9ouC8i+C9luC9tF/gvZTgvIvgvabgvYTgvabgvItf4L2m4L6k4L264L2T4LyL4L2U4LyLJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0EgaDptbScsXG4gICAgICAgICAgICBMVFMgOiAnQSBoOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVksIEEgaDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0nXG4gICAgICAgI
33378H0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb4L2R4L2y4LyL4L2i4L2y4L2EXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vgvabgvYTgvIvgvYngvbLgvZNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ1vgvZbgvZHgvbTgvZPgvIvgvZXgvrLgvYLgvIvgvaLgvpfgvbrgvabgvIvgvZhdLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vgvYHgvIvgvabgvYRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vgvZbgvZHgvbTgvZPgvIvgvZXgvrLgvYLgvIvgvZjgvZDgvaDgvIvgvZhdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyDgvaPgvIsnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDgvabgvpTgvZPgvIvgvaMnLFxuICAgICAgICAgICAgcyA6ICfgvaPgvZjgvIvgvabgvYQnLFxuICAgICAgICAgICAgc3MgOiAnJWQg4L2m4L6Q4L2i4LyL4L2G4LyNJyxcbiAgICAgICAgICAgIG0gOiAn4L2m4L6Q4L2i4LyL4L2Y4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIG1tIDogJyVkIOC9puC+kOC9ouC8i+C9mCcsXG4gICAgICAgICAgICBoIDogJ+C9huC9tOC8i+C9muC9vOC9keC8i+C9guC9heC9suC9gicsXG4gICAgICAgICAgICBoaCA6ICclZCDgvYbgvbTgvIvgvZrgvbzgvZEnLFxuICAgICAgICAgICAgZCA6ICfgvYngvbLgvZPgvIvgvYLgvYXgvbLgvYInLFxuICAgICAgICAgICAgZGQgOiAnJWQg4L2J4L2y4L2T4LyLJyxcbiAgICAgICAgICAgIE0gOiAn4L2f4L6z4LyL4L2W4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIE1NIDogJyVkIOC9n+C+s+C8i+C9licsXG4gICAgICAgICAgICB5IDogJ+C9o+C9vOC8i+C9guC9heC9suC9gicsXG4gICAgICAgICAgICB5eSA6ICclZCDgvaPgvbwnXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgvKHgvKLgvKPgvKTgvKXgvKbgvKfgvKjgvKngvKBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gvZjgvZrgvZPgvIvgvZjgvbx84L2e4L284L2C4L2m4LyL4L2A4L2mfOC9ieC9suC9k+C8i+C9guC9tOC9hHzgvZHgvYLgvbzgvYTgvIvgvZHgvYJ84L2Y4L2a4L2T4LyL4L2Y4L28LyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyIDogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgobWVyaWRpZW0gPT09ICfgvZjgvZrgvZPgvIvgvZjgvbwnICYmIGhvdXIgPj0gNCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKG1lcmlkaWVtID09PSAn4L2J4L2y4L2T4LyL4L2C4L204L2EJyAmJiBob3VyIDwgNSkgfHxcbiAgICAgICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgvZHgvYLgvbzgvYTgvIvgvZHgvYInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgvZjgvZrgvZPgvIvgvZjgvbwnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9nuC9vOC9guC9puC8i+C9gOC9pic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4L2J4L2y4L2T4LyL4L2C4L204L2EJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgvZHgvYLgvbzgvYTgvIvgvZHgvYInO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9mOC9muC9k+C8i+C9mOC9vCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDYgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJvO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoTXV0YXRpb24obnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgICdtbSc6ICdtdW51dGVubicsXG4gICAgICAgICAgICAnTU0nOiAnbWl6JyxcbiAgICAgICAgICAgICdkZCc6ICdkZXZlemgnXG4gICAgICAgI
33378H07XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBtdXRhdGlvbihmb3JtYXRba2V5XSwgbnVtYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3BlY2lhbE11dGF0aW9uRm9yWWVhcnMobnVtYmVyKSB7XG4gICAgICAgIHN3aXRjaCAobGFzdE51bWJlcihudW1iZXIpKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgYmxvYXonO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyB2bG9heic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbGFzdE51bWJlcihudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA+IDkpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0TnVtYmVyKG51bWJlciAlIDEwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtdXRhdGlvbih0ZXh0LCBudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIHNvZnRNdXRhdGlvbih0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc29mdE11dGF0aW9uKHRleHQpIHtcbiAgICAgICAgdmFyIG11dGF0aW9uVGFibGUgPSB7XG4gICAgICAgICAgICAnbSc6ICd2JyxcbiAgICAgICAgICAgICdiJzogJ3YnLFxuICAgICAgICAgICAgJ2QnOiAneidcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG11dGF0aW9uVGFibGVbdGV4dC5jaGFyQXQoMCldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtdXRhdGlvblRhYmxlW3RleHQuY2hhckF0KDApXSArIHRleHQuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIHZhciBiciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JyJywge1xuICAgICAgICBtb250aHMgOiAnR2VudmVyX0NcXCdod2V2cmVyX01ldXJ6aF9FYnJlbF9NYWVfTWV6aGV2ZW5fR291ZXJlX0Vvc3RfR3dlbmdvbG9fSGVyZV9EdV9LZXJ6dScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnR2VuX0NcXCdod2VfTWV1X0Vicl9NYWVfRXZlX0dvdV9Fb3NfR3dlX0hlcl9EdV9LZXInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ1N1bF9MdW5fTWV1cnpoX01lcmNcXCdoZXJfWWFvdV9Hd2VuZXJfU2Fkb3JuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1N1bF9MdW5fTWV1X01lcl9ZYW9fR3dlX1NhZCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU3VfTHVfTWVfTWVyX1lhX0d3X1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ2hbZV1tbSBBJyxcbiAgICAgICAgICAgIExUUyA6ICdoW2VdbW06c3MgQScsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBbYSB2aXpdIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBbYSB2aXpdIE1NTU0gWVlZWSBoW2VdbW0gQScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgW2Egdml6XSBNTU1NIFlZWVkgaFtlXW1tIEEnXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbSGl6aXYgZGFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW1dhcmNcXCdob2F6aCBkYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbZGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0RlY1xcJ2ggZGFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ2RkZGQgW3Bhc2V0IGRhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnYS1iZW5uICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgXFwnem8nLFxuICAgICAgICAgICAgcyA6ICd1biBuZWJldWQgc2Vnb25kZW5ub8O5JyxcbiAgICAgICAgICAgIHNzIDogJyVkIGVpbGVubicsXG4gICAgICAgICAgICBtIDogJ3VyIHZ1bnV0ZW5uJyxcbiAgICAgICAgICAgIG1tIDogcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uLFxuICAgICAgICAgICAgaCA6ICd1biBldXInLFxuICAgICAgICAgICAgaGggOiAnJWQgZXVyJyxcbiAgICAgICAgICAgIGQgOiAndW4gZGV2ZXpoJyxcbiAgICAgICAgICAgIGRkIDogcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uLFxuICAgICAgICAgICAgTSA6ICd1ciBtaXonLFxuICAgICAgICAgICAgTU0gOiByZWxhdGl2ZVRpbWVXaXRoTXV0YXRpb24sXG4gICAgICAgICAgICB5IDogJ3VyIGJsb2F6JyxcbiAgICAgICAgICAgIHl5IDogc3BlY2lhbE11dGF0aW9uRm9yWWVhcnNcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGHDsXx2ZXQpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAobnVtYmVyID09PSAxKSA/ICdhw7EnIDogJ3ZldCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBicjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgI
33378HZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnamVkbmEgbWludXRhJyA6ICdqZWRuZSBtaW51dGUnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRhJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2plZGFuIHNhdCcgOiAnamVkbm9nIHNhdGEnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXRhJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZGFuYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlYyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlY2EnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYnMnLCB7XG4gICAgICAgIG1vbnRocyA6ICdqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAnbmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnbmVfcG9fdXRfc3JfxI1lX3BlX3N1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbS
33378dcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5ICA6ICdbZGFuYXMgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSAgOiAnW3N1dHJhIHVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3Vib3R1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXkgIDogJ1tqdcSNZXIgdV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxpXSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0ICAgOiAncHJpamUgJXMnLFxuICAgICAgICAgICAgcyAgICAgIDogJ3BhciBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG0gICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGggICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQgICAgICA6ICdkYW4nLFxuICAgICAgICAgICAgZGQgICAgIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTSAgICAgIDogJ21qZXNlYycsXG4gICAgICAgICAgICBNTSAgICAgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5ICAgICAgOiAnZ29kaW51JyxcbiAgICAgICAgICAgIHl5ICAgICA6IHRyYW5zbGF0ZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgY2EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdjYScsIHtcbiAgICAgICAgbW9udGhzIDoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ2dlbmVyX2ZlYnJlcl9tYXLDp19hYnJpbF9tYWlnX2p1bnlfanVsaW9sX2Fnb3N0X3NldGVtYnJlX29jdHVicmVfbm92ZW1icmVfZGVzZW1icmUnLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBmb3JtYXQ6ICdkZSBnZW5lcl9kZSBmZWJyZXJfZGUgbWFyw6dfZFxcJ2FicmlsX2RlIG1haWdfZGUganVueV9kZSBqdWxpb2xfZFxcJ2Fnb3N0X2RlIHNldGVtYnJlX2RcXCdvY3R1YnJlX2RlIG5vdmVtYnJlX2RlIGRlc2VtYnJlJy5zcGxpdCgnXycpLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9EW29EXT8oXFxzKStNTU1NL1xuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydCA6ICdnZW4uX2ZlYnIuX21hcsOnX2Fici5fbWFpZ19qdW55X2p1bC5fYWcuX3NldC5fb2N0Ll9ub3YuX2Rlcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdkaXVtZW5nZV9kaWxsdW5zX2RpbWFydHNfZGltZWNyZXNfZGlqb3VzX2RpdmVuZHJlc19kaXNzYWJ0ZScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdkZy5fZGwuX2R0Ll9kYy5fZGouX2R2Ll9kcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ2RnX2RsX2R0X2RjX2RqX2R2X2RzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g
333786bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgbGwgOiAnRCBNTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0nLFxuICAgICAgICAgICAgbGxsIDogJ0QgTU1NIFlZWVksIEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tJyxcbiAgICAgICAgICAgIGxsbGwgOiAnZGRkIEQgTU1NIFlZWVksIEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1thdnVpIGEgJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dERheSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tkZW3DoCBhICcgKyAoKHRoaXMuaG91cnMoKSAhPT0gMSkgPyAnbGVzJyA6ICdsYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSAnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ2xlcycgOiAnbGEnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5IDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2FoaXIgYSAnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ2xlcycgOiAnbGEnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tlbF0gZGRkZCBbcGFzc2F0IGEgJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2RcXCdhcXXDrSAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2ZhICVzJyxcbiAgICAgICAgICAgIHMgOiAndW5zIHNlZ29ucycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWdvbnMnLFxuICAgICAgICAgICAgbSA6ICd1biBtaW51dCcsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dHMnLFxuICAgICAgICAgICAgaCA6ICd1bmEgaG9yYScsXG4gICAgICAgICAgICBoaCA6ICclZCBob3JlcycsXG4gICAgICAgICAgICBkIDogJ3VuIGRpYScsXG4gICAgICAgICAgICBkZCA6ICclZCBkaWVzJyxcbiAgICAgICAgICAgIE0gOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1lc29zJyxcbiAgICAgICAgICAgIHkgOiAndW4gYW55JyxcbiAgICAgICAgICAgIHl5IDogJyVkIGFueXMnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShyfG58dHzDqHxhKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAobnVtYmVyID09PSAxKSA/ICdyJyA6XG4gICAgICAgICAgICAgICAgKG51bWJlciA9PT0gMikgPyAnbicgOlxuICAgICAgICAgICAgICAgIChudW1iZXIgPT09IDMpID8gJ3InIDpcbiAgICAgICAgICAgICAgICAobnVtYmVyID09PSA0KSA/ICd0JyA6ICfDqCc7XG4gICAgICAgICAgICBpZiAocGVyaW9kID09PSAndycgfHwgcGVyaW9kID09PSAnVycpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAnYSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG1vbnRocyA9ICdsZWRlbl/Dum5vcl9ixZllemVuX2R1YmVuX2t2xJt0ZW5fxI1lcnZlbl/EjWVydmVuZWNfc3JwZW5fesOhxZnDrV/FmcOtamVuX2xpc3RvcGFkX3Byb3NpbmVjJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA9ICdsZWRfw7pub19ixZllX2R1Yl9rdsSbX8SNdm5fxI12Y19zcnBfesOhxZlfxZnDrWpfbGlzX3Bybycuc3BsaXQoJ18nKTtcblxuICAgIHZhciBtb250aHNQYXJzZSA9IFsvXmxlZC9pLCAvXsO6bm8vaSwgL15ixZllL2ksIC9eZHViL2ksIC9ea3bEmy9pLCAvXijEjXZufMSNZXJ2ZW4kfMSNZXJ2bmEpL2ksIC9eKMSNdmN8xI1lcnZlbmVjfMSNZXJ2ZW5jZSkvaSwgL15zcnAvaSwgL156w6HFmS9pLCAvXsWZw61qL2ksIC9ebGlzL2ksIC9ecHJvL2ldO1xuICAgIC8vIE5PVEU6ICfEjWVydmVuJyBpcyBzdWJzdHJpbmcgb2YgJ8SNZXJ2ZW5lYyc7IHRoZXJlZm9yZSAnxI1lcnZlbmVjJyBtdXN0IHByZWNlZGUgJ8SNZXJ2ZW4nIGluIHRoZSByZWdleCB0byBiZSBmdWxseSBtYXRjaGVkLlxuICAgIC8vIE90aGVyd2lzZSBwYXJzZXIgbWF0Y2hlcyAnMS4gxI1lcnZlbmVjJyBhcyAnMS4gxI1lcnZlbicgKyAnZWMnLlxuICAgIHZhciBtb250aHNSZWdleCA9IC9eKGxlZGVufMO6bm9yfGLFmWV6ZW58ZHViZW58a3bEm3RlbnzEjWVydmVuZWN8xI1lcnZlbmNlfMSNZXJ2ZW58xI1lcnZuYXxzcnBlbnx6w6HFmcOtfMWZw61qZW58bGlzdG9wYWR8cHJvc2luZWN8bGVkfMO6bm98YsWZZXxkdWJ8a3bEm3zEjXZufMSNdmN8c3JwfHrDocWZfMWZw61qfGxpc3xwcm8pL2k7XG5cbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICByZXR1cm4gKG4gPiAxKSAmJiAobiA8IDUpICYmICh+fihuIC8gMTApICE9PSAxKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2Y
33378XIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6ICAvLyBhIGZldyBzZWNvbmRzIC8gaW4gYSBmZXcgc2Vjb25kcyAvIGEgZmV3IHNlY29uZHMgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSA/ICdww6FyIHNla3VuZCcgOiAncMOhciBzZWt1bmRhbWknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOiAvLyA5IHNlY29uZHMgLyBpbiA5IHNlY29uZHMgLyA5IHNlY29uZHMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdzZWt1bmR5JyA6ICdzZWt1bmQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ3Nla3VuZGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbSc6ICAvLyBhIG1pbnV0ZSAvIGluIGEgbWludXRlIC8gYSBtaW51dGUgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnbWludXRhJyA6IChpc0Z1dHVyZSA/ICdtaW51dHUnIDogJ21pbnV0b3UnKTtcbiAgICAgICAgICAgIGNhc2UgJ21tJzogLy8gOSBtaW51dGVzIC8gaW4gOSBtaW51dGVzIC8gOSBtaW51dGVzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWludXR5JyA6ICdtaW51dCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbWludXRhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2gnOiAgLy8gYW4gaG91ciAvIGluIGFuIGhvdXIgLyBhbiBob3VyIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2hvZGluYScgOiAoaXNGdXR1cmUgPyAnaG9kaW51JyA6ICdob2Rpbm91Jyk7XG4gICAgICAgICAgICBjYXNlICdoaCc6IC8vIDkgaG91cnMgLyBpbiA5IGhvdXJzIC8gOSBob3VycyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2hvZGlueScgOiAnaG9kaW4nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2hvZGluYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkJzogIC8vIGEgZGF5IC8gaW4gYSBkYXkgLyBhIGRheSBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpID8gJ2RlbicgOiAnZG5lbSc7XG4gICAgICAgICAgICBjYXNlICdkZCc6IC8vIDkgZGF5cyAvIGluIDkgZGF5cyAvIDkgZGF5cyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2RueScgOiAnZG7DrScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZG55JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNJzogIC8vIGEgbW9udGggLyBpbiBhIG1vbnRoIC8gYSBtb250aCBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpID8gJ23Em3PDrWMnIDogJ23Em3PDrWNlbSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6IC8vIDkgbW9udGhzIC8gaW4gOSBtb250aHMgLyA5IG1vbnRocyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ23Em3PDrWNlJyA6ICdtxJtzw61jxa8nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23Em3PDrWNpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd5JzogIC8vIGEgeWVhciAvIGluIGEgeWVhciAvIGEgeWVhciBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpID8gJ3JvaycgOiAncm9rZW0nO1xuICAgICAgICAgICAgY2FzZSAneXknOiAvLyA5IHllYXJzIC8gaW4gOSB5ZWFycyAvIDkgeWVhcnMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdyb2t5JyA6ICdsZXQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2xldHknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2NzJywge1xuICAgICAgICBtb250aHMgOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0IDogbW9udGhzU2hvcnQsXG4gICAgICAgIG1vbnRoc1JlZ2V4IDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXggOiBtb250aHNSZWdleCxcbiAgICAgICAgLy8gTk9URTogJ8SNZXJ2ZW4nIGlzIHN1YnN0cmluZyBvZiAnxI1lcnZlbmVjJzsgdGhlcmVmb3JlICfEjWVydmVuZWMnIG11c3QgcHJlY2VkZSAnxI1lcnZlbicgaW4gdGhlIHJlZ2V4IHRvIGJlIGZ1bGx5IG1hdGNoZWQuXG4gICAgICAgIC8vIE90aGVyd2lzZSBwYXJzZXIgbWF0Y2hlcyAnMS4gxI1lcnZlbmVjJyBhcyAnMS4gxI1lcnZlbicgKyAnZWMnLlxuICAgICAgICBtb250aHNTdHJpY3RSZWdleCA6IC9eKGxlZGVufGxlZG5hfMO6bm9yYXzDum5vcnxixZllemVufGLFmWV6bmF8ZHViZW58ZHVibmF8a3bEm3RlbnxrdsSbdG5hfMSNZXJ2ZW5lY3zEjWVydmVuY2V8xI1lcnZlbnzEjWVydm5hfHNycGVufHNycG5hfHrDocWZw618xZnDrWplbnzFmcOtam5hfGxpc3RvcGFkdXxsaXN0b3BhZHxwcm9zaW5lY3xwcm9zaW5jZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleCA6IC9eKGxlZHzDum5vfGLFmWV8ZHVifGt2xJt8xI12bnzEjXZjfHNycHx6w6HFmXzFmcOtanxsaXN8cHJvKS9pLFxuICAgICAgICBtb250aHNQYXJzZSA6IG1vbn
33378Roc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2UgOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZSA6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5cyA6ICduZWTEm2xlX3BvbmTEm2zDrV/DunRlcsO9X3N0xZllZGFfxI10dnJ0ZWtfcMOhdGVrX3NvYm90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICduZV9wb1/DunRfc3RfxI10X3DDoV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnbmVfcG9fw7p0X3N0X8SNdF9ww6Ffc28nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBsIDogJ0QuIE0uIFlZWVknXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkbmVzIHZdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbesOtdHJhIHZdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgbmVkxJtsaSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gZGRkZCBbdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2ZSBzdMWZZWR1IHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdmUgxI10dnJ0ZWsgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHDDoXRlayB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc29ib3R1IHZdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1t2xI1lcmEgdl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWxvdSBuZWTEm2xpIHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMOpXSBkZGRkIFt2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsb3Ugc3TFmWVkdSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDvV0gZGRkZCBbdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bG91IHNvYm90dSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAncMWZZWQgJXMnLFxuICAgICAgICAgICAgcyA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5IDogdHJhbnNsYXRlXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2UgOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgY3YgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdjdicsIHtcbiAgICAgICAgbW9udGhzIDogJ9C605HRgNC70LDRh1/QvdCw0YDTkdGBX9C/0YPRiF/QsNC60LBf0LzQsNC5X9Kr05fRgNGC0LzQtV/Rg9GC05Ff0qvRg9GA0LvQsF/QsNCy05HQvV/RjtC/0LBf0YfTs9C6X9GA0LDRiNGC0LDQsicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn0LrTkdGAX9C90LDRgF/Qv9GD0Yhf0LDQutCwX9C80LDQuV/Sq9OX0YBf0YPRgtORX9Kr0YPRgF/QsNCy0L1f0Y7Qv9CwX9GH07PQul/RgNCw0YgnLnNwbGl0KCdfJyksXG4gICAgICAgI
33378HdlZWtkYXlzIDogJ9Cy0YvRgNGB0LDRgNC90LjQutGD0L1f0YLRg9C90YLQuNC60YPQvV/Ri9GC0LvQsNGA0LjQutGD0L1f0Y7QvdC60YPQvV/QutOX0qvQvdC10YDQvdC40LrRg9C9X9GN0YDQvdC10LrRg9C9X9GI05HQvNCw0YLQutGD0L0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn0LLRi9GAX9GC0YPQvV/Ri9GC0Ltf0Y7QvV/QutOX0qtf0Y3RgNC9X9GI05HQvCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn0LLRgF/RgtC9X9GL0YJf0Y7QvV/QutKrX9GN0YBf0YjQvCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC1NTS1ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ1lZWVkgW9Kr0YPQu9GF0LhdIE1NTU0gW9GD0LnTkdGF05fQvV0gRFst0LzTl9GI05ddJyxcbiAgICAgICAgICAgIExMTCA6ICdZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXSwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXSwgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQn9Cw0Y/QvV0gTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Cr0YDQsNC9XSBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb05bQvdC10YBdIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb0qrQuNGC0LXRgV0gZGRkZCBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9CY0YDRgtC905ddIGRkZGQgTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6IGZ1bmN0aW9uIChvdXRwdXQpIHtcbiAgICAgICAgICAgICAgICB2Y
33378XIgYWZmaXggPSAv0YHQtdGF0LXRgiQvaS5leGVjKG91dHB1dCkgPyAn0YDQtdC9JyA6IC/Sq9GD0LskL2kuZXhlYyhvdXRwdXQpID8gJ9GC0LDQvScgOiAn0YDQsNC9JztcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0ICsgYWZmaXg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFzdCA6ICclcyDQutCw0Y/Qu9C70LAnLFxuICAgICAgICAgICAgcyA6ICfQv9OX0YAt0LjQuiDSq9C10LrQutGD0L3RgicsXG4gICAgICAgICAgICBzcyA6ICclZCDSq9C10LrQutGD0L3RgicsXG4gICAgICAgICAgICBtIDogJ9C/05fRgCDQvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIG1tIDogJyVkINC80LjQvdGD0YInLFxuICAgICAgICAgICAgaCA6ICfQv9OX0YAg0YHQtdGF0LXRgicsXG4gICAgICAgICAgICBoaCA6ICclZCDRgdC10YXQtdGCJyxcbiAgICAgICAgICAgIGQgOiAn0L/Tl9GAINC60YPQvScsXG4gICAgICAgICAgICBkZCA6ICclZCDQutGD0L0nLFxuICAgICAgICAgICAgTSA6ICfQv9OX0YAg0YPQudOR0YUnLFxuICAgICAgICAgICAgTU0gOiAnJWQg0YPQudOR0YUnLFxuICAgICAgICAgICAgeSA6ICfQv9OX0YAg0qvRg9C7JyxcbiAgICAgICAgICAgIHl5IDogJyVkINKr0YPQuydcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LdC805fRiC8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQt0LzTl9GIJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3Y7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBjeSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2N5Jywge1xuICAgICAgICBtb250aHM6ICdJb25hd3JfQ2h3ZWZyb3JfTWF3cnRoX0VicmlsbF9NYWlfTWVoZWZpbl9Hb3JmZmVubmFmX0F3c3RfTWVkaV9IeWRyZWZfVGFjaHdlZGRfUmhhZ2Z5cicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdJb25fQ2h3ZV9NYXdfRWJyX01haV9NZWhfR29yX0F3c19NZWRfSHlkX1RhY2hfUmhhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdEeWRkIFN1bF9EeWRkIExsdW5fRHlkZCBNYXdydGhfRHlkZCBNZXJjaGVyX0R5ZGQgSWF1X0R5ZGQgR3dlbmVyX0R5ZGQgU2Fkd3JuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VsX0xsdW5fTWF3X01lcl9JYXVfR3dlX1NhZCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9MbF9NYV9NZV9JYV9Hd19TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgLy8gdGltZSBmb3JtYXRzIGFyZSB0aGUgc2FtZSBhcyBlbi1nYlxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hlZGRpdyBhbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tZZm9yeSBhbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tEZG9lIGFtXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rpd2V0aGFmIGFtXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnbWV3biAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgeW4gw7RsJyxcbiAgICAgICAgICAgIHM6ICd5Y2h5ZGlnIGVpbGlhZGF1JyxcbiAgICAgICAgICAgIHNzOiAnJWQgZWlsaWFkJyxcbiAgICAgICAgICAgIG06ICdtdW51ZCcsXG4gICAgICAgICAgICBtbTogJyVkIG11bnVkJyxcbiAgICAgICAgICAgIGg6ICdhd3InLFxuICAgICAgICAgICAgaGg6ICclZCBhd3InLFxuICAgICAgICAgICAgZDogJ2Rpd3Jub2QnLFxuICAgICAgICAgICAgZGQ6ICclZCBkaXdybm9kJyxcbiAgICAgICAgICAgIE06ICdtaXMnLFxuICAgICAgICAgICAgTU06ICclZCBtaXMnLFxuICAgICAgICAgICAgeTogJ2Jsd3lkZHluJyxcbiAgICAgICAgICAgIHl5OiAnJWQgZmx5bmVkZCdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGZlZHxhaW58YWZ8aWx8eWRkfGVkfGVnKS8sXG4gICAgICAgIC8vIHRyYWRpdGlvbmFsIG9yZGluYWwgbnVtYmVycyBhYm92ZSAzMSBhcmUgbm90IGNvbW1vbmx5IHVzZWQgaW4gY29sbG9xdWlhbCBXZWxzaFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2Y
33378XIgYiA9IG51bWJlcixcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBsb29rdXAgPSBbXG4gICAgICAgICAgICAgICAgICAgICcnLCAnYWYnLCAnaWwnLCAneWRkJywgJ3lkZCcsICdlZCcsICdlZCcsICdlZCcsICdmZWQnLCAnZmVkJywgJ2ZlZCcsIC8vIDFhZiB0byAxMGZlZFxuICAgICAgICAgICAgICAgICAgICAnZWcnLCAnZmVkJywgJ2VnJywgJ2VnJywgJ2ZlZCcsICdlZycsICdlZycsICdmZWQnLCAnZWcnLCAnZmVkJyAvLyAxMWVnIHRvIDIwZmVkXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChiID4gMjApIHtcbiAgICAgICAgICAgICAgICBpZiAoYiA9PT0gNDAgfHwgYiA9PT0gNTAgfHwgYiA9PT0gNjAgfHwgYiA9PT0gODAgfHwgYiA9PT0gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICdmZWQnOyAvLyBub3QgMzBhaW4sIDcwYWluIG9yIDkwYWluXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2Fpbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChiID4gMCkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IGxvb2t1cFtiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGN5O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgZGEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkYScsIHtcbiAgICAgICAgbW9udGhzIDogJ2phbnVhcl9mZWJydWFyX21hcnRzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnc8O4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO4cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdzw7huX21hbl90aXJfb25zX3Rvcl9mcmVfbMO4cicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnc8O4X21hX3RpX29uX3RvX2ZyX2zDuCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tpIGRhZyBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW2kgbW9yZ2VuIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAncMOlIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbaSBnw6VyIGtsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW2ldIGRkZGRbcyBrbC5dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIHNpZGVuJyxcbiAgICAgICAgICAgIHMgOiAnZsOlIHNla3VuZGVyJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNla3VuZGVyJyxcbiAgICAgICAgICAgIG0gOiAnZXQgbWludXQnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXR0ZXInLFxuICAgICAgICAgICAgaCA6ICdlbiB0aW1lJyxcbiAgICAgICAgICAgIGhoIDogJyVkIHRpbWVyJyxcbiAgICAgICAgICAgIGQgOiAnZW4gZGFnJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGRhZ2UnLFxuICAgICAgICAgICAgTSA6ICdlbiBtw6VuZWQnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbcOlbmVkZXInLFxuICAgICAgICAgICAgeSA6ICdldCDDpXInLFxuICAgICAgICAgICAgeXkgOiAnJWQgw6VyJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1
33378xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgJ20nOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgJ2gnOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgJ2QnOiBbJ2VpbiBUYWcnLCAnZWluZW0gVGFnJ10sXG4gICAgICAgICAgICAnZGQnOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgJ00nOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgJ01NJzogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICAneSc6IFsnZWluIEphaHInLCAnZWluZW0gSmFociddLFxuICAgICAgICAgICAgJ3l5JzogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGVBdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlLWF0Jywge1xuICAgICAgICBtb250aHMgOiAnSsOkbm5lcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKw6RuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ1NvX01vX0RpX01pX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaGV1dGUgdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnZXN0ZXJuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0nXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ3ZvciAlcycsXG4gICAgICAgICAgICBzIDogJ2VpbiBwYWFyIFNla3VuZGVuJyxcbiAgICAgICAgICAgIHNzIDogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG0gOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW0gOiAnJWQgTWludXRlbicsXG4gICAgICAgICAgICBoIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoIDogJyVkIFN0dW5kZW4nLFxuICAgICAgICAgICAgZCA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZCA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHkgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXkgOiBwcm9jZXNzUmVsYXRpdmVUaW1lXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVBdDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgICdtJzogW
33378ydlaW5lIE1pbnV0ZScsICdlaW5lciBNaW51dGUnXSxcbiAgICAgICAgICAgICdoJzogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgICAgICdkJzogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICAgICAgJ2RkJzogW251bWJlciArICcgVGFnZScsIG51bWJlciArICcgVGFnZW4nXSxcbiAgICAgICAgICAgICdNJzogWydlaW4gTW9uYXQnLCAnZWluZW0gTW9uYXQnXSxcbiAgICAgICAgICAgICdNTSc6IFtudW1iZXIgKyAnIE1vbmF0ZScsIG51bWJlciArICcgTW9uYXRlbiddLFxuICAgICAgICAgICAgJ3knOiBbJ2VpbiBKYWhyJywgJ2VpbmVtIEphaHInXSxcbiAgICAgICAgICAgICd5eSc6IFtudW1iZXIgKyAnIEphaHJlJywgbnVtYmVyICsgJyBKYWhyZW4nXVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGRlQ2ggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkZS1jaCcsIHtcbiAgICAgICAgbW9udGhzIDogJ0phbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKYW4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6Licuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ1Nvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1NvX01vX0RpX01pX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICd2b3IgJXMnLFxuICAgICAgICAgICAgcyA6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzcyA6ICclZCBTZWt1bmRlbicsXG4gICAgICAgICAgICBtIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tIDogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaCA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaCA6ICclZCBTdHVuZGVuJyxcbiAgICAgICAgICAgIGQgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5IDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5IDogcHJvY2Vzc1JlbGF0aXZlVGltZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlQ2g7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICAnbSc6IFsnZWluZSBNaW51dGUnLCAnZWluZXIgTWludXRlJ10sXG4gICAgICAgICAgICAnaCc6IFsnZWluZSBTdHVuZGUnLCAnZWluZXIgU3R1bmRlJ10sXG4gICAgICAgICAgICAnZCc6IFsnZWluIFRhZycsICdlaW5lbSBUYWcnXSxcbiAgICAgICAgICAgICdkZCc6IFtudW1iZXIgKyAnIFRhZ2UnLCBudW1iZXIgKyAnIFRhZ2VuJ10sXG4gICAgICAgICAgICAnTSc6IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgICAgICAnTU0nOiBbbnVtYmVyICsgJyBNb25hdGUnLCBudW1iZXIgKyAnIE1vbmF0ZW4nXSxcbiAgICAgICAgICAgICd5JzogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgICAgICAneXknOiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ11cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgI
33378HZhciBkZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlJywge1xuICAgICAgICBtb250aHMgOiAnSmFudWFyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ0phbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICd2b3IgJXMnLFxuICAgICAgICAgICAgcyA6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzcyA6ICclZCBTZWt1bmRlbicsXG4gICAgICAgICAgICBtIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tIDogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaCA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaCA6ICclZCBTdHVuZGVuJyxcbiAgICAgICAgICAgIGQgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5IDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5IDogcHJvY2Vzc1JlbGF0aXZlVGltZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAn3pberN6C3qreh96m3oPeqScsXG4gICAgICAgICfeit6s3oTesN6D3qreh96m3oPeqScsXG4gICAgICAgICfeid6n3oPeqN6X3qonLFxuICAgICAgICAn3oferd6V3rDeg96p3o3eqicsXG4gICAgICAgICfeid6tJyxcbiAgICAgICAgJ96W3qvegt6wJyxcbiAgICAgICAgJ96W3qrejd6m3ofeqCcsXG4gICAgICAgICfeh96v3o7ept6Q3rDek96qJyxcbiAgICAgICAgJ96Q3qzeld6w3pPerN6J3rDehN6m3oPeqicsXG4gICAgICAgICfeh96u3obesN6T3q/ehN6m3oPeqicsXG4gICAgICAgICfegt6u3ojerN6J3rDehN6m3oPeqicsXG4gICAgICAgICfekd6o3pDerN6J3rDehN6m3oPeqidcbiAgICBdLCB3ZWVrZGF5cyA9IFtcbiAgICAgICAgJ96H3qfei96o3ofesN6M3qYnLFxuICAgICAgICAn3oDer96J3qYnLFxuICAgICAgICAn3ofept6C3rDejt6n3oPepicsXG4gICAgICAgICfehN6q3ovepicsXG4gICAgICAgICfehN6q3oPep96Q3rDeit6m3ozeqCcsXG4gICAgICAgICfegN6q3obeqt6D3qonLFxuICAgICAgICAn3oDert6C3qjegN6o3oPeqidcbiAgICBdO1xuXG4gICAgdmFyIGR2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZHYnLCB7XG4gICAgICAgIG1vbnRocyA6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQgOiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzIDogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiB3ZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn3ofep96L3qhf3oDer96J3qZf3ofept6C3rBf3oTeqt6L3qZf3oTeqt6D3qdf3oDeqt6G3qpf3oDert6C3qgnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuXG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdEL00vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv3onehnzeid6KLyxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfeid6KJyA9PT0gaW5wdXQ7XG4gICAgICAgI
33378H0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn3onehic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn3oneiic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb3oneqN6H3qbei96qXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1veid6n3ovept6J3qddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb3ofeqN6H3rDelN6sXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb3orep96H3qjejN6q3ojeqF0gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn3ozerN6D3q3ejt6m3ofeqCAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ96G3qreg96o3oLesCAlcycsXG4gICAgICAgICAgICBzIDogJ96Q3qjeht6q3oLesN6M3qreht6u3oXerN6H3rAnLFxuICAgICAgICAgICAgc3MgOiAnZCUg3pDeqN6G3qregt6w3ozeqicsXG4gICAgICAgICAgICBtIDogJ96J3qjegt6o3pPerN6H3rAnLFxuICAgICAgICAgICAgbW0gOiAn3oneqN6C3qjek96qICVkJyxcbiAgICAgICAgICAgIGggOiAn3o7ept6R3qjeh96o3oPerN6H3rAnLFxuICAgICAgICAgICAgaGggOiAn3o7ept6R3qjeh96o3oPeqiAlZCcsXG4gICAgICAgICAgICBkIDogJ96L3qreiN6m3oDerN6H3rAnLFxuICAgICAgICAgICAgZGQgOiAn3oveqt6I3qbekN6wICVkJyxcbiAgICAgICAgICAgIE0gOiAn3onept6A3qzeh96wJyxcbiAgICAgICAgICAgIE1NIDogJ96J3qbekN6wICVkJyxcbiAgICAgICAgICAgIHkgOiAn3ofept6A3qbeg96s3ofesCcsXG4gICAgICAgICAgICB5eSA6ICfeh96m3oDept6D3qogJWQnXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDcsICAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDEyICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZHY7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4gICAgfVxuXG5cbiAgICB2YXIgZWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbCcsIHtcbiAgICAgICAgbW9udGhzTm9taW5hdGl2ZUVsIDogJ86ZzrHOvc6/z4XOrM+BzrnOv8+CX86mzrXOss+Bzr/Phc6sz4HOuc6/z4JfzpzOrM+Bz4TOuc6/z4JfzpHPgM+Bzq/Ou865zr/Pgl/OnM6szrnOv8+CX86Zzr/Pjc69zrnOv8+CX86Zzr/Pjc67zrnOv8+CX86Rz43Os86/z4XPg8+Ezr/Pgl/Oo861z4DPhM6tzrzOss+BzrnOv8+CX86fzrrPhM+OzrLPgc65zr/Pgl/Onc6/zq3OvM6yz4HOuc6/z4JfzpTOtc66zq3OvM6yz4HOuc6/z4InLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc0dlbml0aXZlRWwgOiAnzpnOsc69zr/Phc6xz4HOr86/z4VfzqbOtc6yz4HOv8+FzrHPgc6vzr/PhV/OnM6xz4HPhM6vzr/PhV/Okc+Az4HOuc67zq/Ov8+FX86czrHOkM6/z4VfzpnOv8+Fzr3Or86/z4VfzpnOv8+FzrvOr86/z4VfzpHPhc6zzr/Pjc+Dz4TOv8+FX86jzrXPgM+EzrXOvM6yz4HOr86/z4Vfzp/Ous+Ez4nOss+Bzq/Ov8+FX86dzr/Otc68zrLPgc6vzr/PhV/OlM61zrrOtc68zrLPgc6vzr/PhScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzIDogZnVuY3Rpb24gKG1vbWVudFRvRm9ybWF0LCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50VG9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJyAmJiAvRC8udGVzdChmb3JtYXQuc3Vic3RyaW5nKDAsIGZvcm1hdC5pbmRleE9mKCdNTU1NJykpKSkgeyAvLyBpZiB0aGVyZSBpcyBhIGRheSBudW1iZXIgYmVmb3JlICdNTU1NJ1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNHZW5pdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydCA6ICfOmc6xzr1fzqbOtc6yX86czrHPgV/Okc+Az4FfzpzOsc+KX86Zzr/Phc69X86Zzr/Phc67X86Rz4XOs1/Oo861z4Bfzp/Ous+EX86dzr/OtV/OlM61zronLnNwbGl0KCdfJyksXG4gICAgICAgI
33378HdlZWtkYXlzIDogJ86az4XPgc65zrHOus6uX86UzrXPhc+Ezq3Pgc6xX86kz4HOr8+EzrdfzqTOtc+EzqzPgc+EzrdfzqDOrc68z4DPhM63X86gzrHPgc6xz4POus61z4XOrl/Oo86szrLOss6xz4TOvycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfOms+Fz4FfzpTOtc+FX86kz4HOuV/OpM61z4RfzqDOtc68X86gzrHPgV/Oo86xzrInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ86az4VfzpTOtV/OpM+BX86kzrVfzqDOtV/OoM6xX86jzrEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ868zrwnIDogJ86czpwnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfPgM68JyA6ICfOoM6cJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICgoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKVswXSA9PT0gJ868Jyk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2UgOiAvW86gzpxdXFwuP86cP1xcLj8vaSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTIDogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJFbCA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW86jzq7OvM61z4HOsSB7fV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbzpHPjc+BzrnOvyB7fV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbe31dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW86nzrjOtc+CIHt9XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbz4TOvyDPgM+Bzr/Ot86zzr/Pjc68zrXOvc6/XSBkZGRkIFt7fV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbz4TOt869IM+Az4HOv863zrPOv8+NzrzOtc69zrddIGRkZGQgW3t9XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDogZnVuY3Rpb24gKGtleSwgbW9tKSB7XG4gICAgICAgICAgICB2Y
33378XIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJFbFtrZXldLFxuICAgICAgICAgICAgICAgIGhvdXJzID0gbW9tICYmIG1vbS5ob3VycygpO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ob3V0cHV0KSkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5hcHBseShtb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dC5yZXBsYWNlKCd7fScsIChob3VycyAlIDEyID09PSAxID8gJ8+Dz4TOtycgOiAnz4PPhM65z4InKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfPg861ICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgz4DPgc65zr0nLFxuICAgICAgICAgICAgcyA6ICfOu86vzrPOsSDOtM61z4XPhM61z4HPjM67zrXPgM+EzrEnLFxuICAgICAgICAgICAgc3MgOiAnJWQgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xJyxcbiAgICAgICAgICAgIG0gOiAnzq3Ovc6xIM67zrXPgM+Ez4wnLFxuICAgICAgICAgICAgbW0gOiAnJWQgzrvOtc+Az4TOrCcsXG4gICAgICAgICAgICBoIDogJ868zq/OsSDPjs+BzrEnLFxuICAgICAgICAgICAgaGggOiAnJWQgz47Pgc61z4InLFxuICAgICAgICAgICAgZCA6ICfOvM6vzrEgzrzOrc+BzrEnLFxuICAgICAgICAgICAgZGQgOiAnJWQgzrzOrc+BzrXPgicsXG4gICAgICAgICAgICBNIDogJ86tzr3Osc+CIM68zq7Ovc6xz4InLFxuICAgICAgICAgICAgTU0gOiAnJWQgzrzOrs69zrXPgicsXG4gICAgICAgICAgICB5IDogJ86tzr3Osc+CIM+Hz4HPjM69zr/PgicsXG4gICAgICAgICAgICB5eSA6ICclZCDPh8+Bz4zOvc65zrEnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfc63LyxcbiAgICAgICAgb3JkaW5hbDogJyVkzrcnLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0c3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGVuU0cgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1TRycsIHtcbiAgICAgICAgbW9udGhzIDogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIGFnbycsXG4gICAgICAgICAgICBzIDogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtIDogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaCA6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQgOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNIDogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHkgOiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5IDogJyVkIHllYXJzJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKH5+KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgICAgI
33378HJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuU0c7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBlbkF1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tYXUnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTIDogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHMgOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG0gOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoIDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGggOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZCA6ICdhIGRheScsXG4gICAgICAgICAgICBkZCA6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE0gOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTSA6ICclZCBtb250aHMnLFxuICAgICAgICAgICAgeSA6ICdhIHllYXInLFxuICAgICAgICAgICAgeXkgOiAnJWQgeWVhcnMnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAofn4obnVtYmVyICUgMTAwIC8gMTApID09PSAxKSA/ICd0aCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdzdCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAyKSA/ICduZCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAzKSA/ICdyZCcgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5BdTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGVuQ2EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1jYScsIHtcbiAgICAgICAgbW9udGhzIDogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgI
33378HdlZWtkYXlzTWluIDogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFMgOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEwgOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTCA6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBhZ28nLFxuICAgICAgICAgICAgcyA6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNlY29uZHMnLFxuICAgICAgICAgICAgbSA6ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGggOiAnYW4gaG91cicsXG4gICAgICAgICAgICBoaCA6ICclZCBob3VycycsXG4gICAgICAgICAgICBkIDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkIDogJyVkIGRheXMnLFxuICAgICAgICAgICAgTSA6ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5IDogJ2EgeWVhcicsXG4gICAgICAgICAgICB5eSA6ICclZCB5ZWFycydcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2Y
33378XIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh+fihudW1iZXIgJSAxMDAgLyAxMCkgPT09IDEpID8gJ3RoJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDEpID8gJ3N0JyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDIpID8gJ25kJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDMpID8gJ3JkJyA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5DYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGVuR2IgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1nYicsIHtcbiAgICAgICAgbW9udGhzIDogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIGFnbycsXG4gICAgICAgICAgICBzIDogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtIDogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaCA6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQgOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNIDogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHkgOiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5IDogJyVkIHllYXJzJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKH5+KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuR2I7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBlbkllID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4taWUnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyksXG4gICAgICAgI
33378HdlZWtkYXlzU2hvcnQgOiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIGFnbycsXG4gICAgICAgICAgICBzIDogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtIDogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaCA6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQgOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNIDogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHkgOiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5IDogJyVkIHllYXJzJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKH5+KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuSWU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBlbklsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4taWwnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBhZ28nLFxuICAgICAgICAgICAgcyA6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIG0gOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoIDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGggOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZCA6ICdhIGRheScsXG4gICAgICAgICAgICBkZCA6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE0gOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTSA6ICclZCBtb250aHMnLFxuICAgICAgICAgICAgeSA6ICdhIHllYXInLFxuICAgICAgICAgICAgeXkgOiAnJWQgeWVhcnMnXG4gICAgICAgI
33378H0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAofn4obnVtYmVyICUgMTAwIC8gMTApID09PSAxKSA/ICd0aCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdzdCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAyKSA/ICduZCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAzKSA/ICdyZCcgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuSWw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBlbk56ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tbnonLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTIDogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHMgOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG0gOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoIDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGggOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZCA6ICdhIGRheScsXG4gICAgICAgICAgICBkZCA6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE0gOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTSA6ICclZCBtb250aHMnLFxuICAgICAgICAgICAgeSA6ICdhIHllYXInLFxuICAgICAgICAgICAgeXkgOiAnJWQgeWVhcnMnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAofn4obnVtYmVyICUgMTAwIC8gMTApID09PSAxKSA/ICd0aCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdzdCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAyKSA/ICduZCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAzKSA/ICdyZCcgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5OejtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGVvID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW8nLCB7XG4gICAgICAgIG1vbnRocyA6ICdqYW51YXJvX2ZlYnJ1YXJvX21hcnRvX2Fwcmlsb19tYWpvX2p1bmlvX2p1bGlvX2HFrWd1c3RvX3NlcHRlbWJyb19va3RvYnJvX25vdmVtYnJvX2RlY2VtYnJvJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYcWtZ19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgI
33378HdlZWtkYXlzIDogJ2RpbWFuxIlvX2x1bmRvX21hcmRvX21lcmtyZWRvX8S1YcWtZG9fdmVuZHJlZG9fc2FiYXRvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ2RpbV9sdW5fbWFyZF9tZXJrX8S1YcWtX3Zlbl9zYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ2RpX2x1X21hX21lX8S1YV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMIDogJ0RbLWEgZGVdIE1NTU0sIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0RbLWEgZGVdIE1NTU0sIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBbbGFdIERbLWEgZGVdIE1NTU0sIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9bYXBdXFwudFxcLm0vaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgPT09ICdwJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncC50Lm0uJyA6ICdQLlQuTS4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdhLnQubS4nIDogJ0EuVC5NLic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbSG9kaWHFrSBqZV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbTW9yZ2HFrSBqZV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbamVdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0hpZXJhxa0gamVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1twYXNpbnRhXSBkZGRkIFtqZV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ3Bvc3QgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICdhbnRhxa0gJXMnLFxuICAgICAgICAgICAgcyA6ICdzZWt1bmRvaicsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWt1bmRvaicsXG4gICAgICAgICAgICBtIDogJ21pbnV0bycsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dG9qJyxcbiAgICAgICAgICAgIGggOiAnaG9ybycsXG4gICAgICAgICAgICBoaCA6ICclZCBob3JvaicsXG4gICAgICAgICAgICBkIDogJ3RhZ28nLC8vbmUgJ2RpdXJubycsIMSJYXIgZXN0YXMgdXppdGEgcG9yIHByb2tzaW11bW9cbiAgICAgICAgICAgIGRkIDogJyVkIHRhZ29qJyxcbiAgICAgICAgICAgIE0gOiAnbW9uYXRvJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1vbmF0b2onLFxuICAgICAgICAgICAgeSA6ICdqYXJvJyxcbiAgICAgICAgICAgIHl5IDogJyVkIGphcm9qJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1hLyxcbiAgICAgICAgb3JkaW5hbCA6ICclZGEnLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG1vbnRoc1Nob3J0RG90ID0gJ2VuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA9ICdlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYycuc3BsaXQoJ18nKTtcblxuICAgIHZhciBtb250aHNQYXJzZSA9IFsvXmVuZS9pLCAvXmZlYi9pLCAvXm1hci9pLCAvXmFici9pLCAvXm1heS9pLCAvXmp1bi9pLCAvXmp1bC9pLCAvXmFnby9pLCAvXnNlcC9pLCAvXm9jdC9pLCAvXm5vdi9pLCAvXmRpYy9pXTtcbiAgICB2YXIgbW9udGhzUmVnZXggPSAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pO1xuXG4gICAgdmFyIGVzRG8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlcy1kbycsIHtcbiAgICAgICAgbW9udGhzIDogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogZnVuY3Rpb24gKG
333780sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90O1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3RbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdkb19sdV9tYV9taV9qdV92aV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUyA6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEnXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3kgYSBsYScgKyAoKHRoaXMuaG91cnMoKSAhPT0gMSkgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dERheSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxYW5hIGEgbGEnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSBsYScgKyAoKHRoaXMuaG91cnMoKSAhPT0gMSkgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1theWVyIGEgbGEnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2VsXSBkZGRkIFtwYXNhZG8gYSBsYScgKyAoKHRoaXMuaG91cnMoKSAhPT0gMSkgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2VuICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnaGFjZSAlcycsXG4gICAgICAgICAgICBzIDogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICAgICAgbSA6ICd1biBtaW51dG8nLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoIDogJ3VuYSBob3JhJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQgOiAndW4gZMOtYScsXG4gICAgICAgICAgICBkZCA6ICclZCBkw61hcycsXG4gICAgICAgICAgICBNIDogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTSA6ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5IDogJ3VuIGHDsW8nLFxuICAgICAgICAgICAgeXkgOiAnJWQgYcOxb3MnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2UgOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWwgOiAnJWTCuicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVzRG87XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgI
33378HZhciBtb250aHNTaG9ydERvdCA9ICdlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyk7XG5cbiAgICB2YXIgbW9udGhzUGFyc2UgPSBbL15lbmUvaSwgL15mZWIvaSwgL15tYXIvaSwgL15hYnIvaSwgL15tYXkvaSwgL15qdW4vaSwgL15qdWwvaSwgL15hZ28vaSwgL15zZXAvaSwgL15vY3QvaSwgL15ub3YvaSwgL15kaWMvaV07XG4gICAgdmFyIG1vbnRoc1JlZ2V4ID0gL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuICAgIHZhciBlc1VzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXMtdXMnLCB7XG4gICAgICAgIG1vbnRocyA6ICdlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90W20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXMgOiAnZG9taW5nb19sdW5lc19tYXJ0ZXNfbWnDqXJjb2xlc19qdWV2ZXNfdmllcm5lc19zw6FiYWRvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFMgOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEwgOiAnTU0vREQvWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbaG95IGEgbGEnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXkgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbWHDsWFuYSBhIGxhJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgW2EgbGEnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXkgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbYXllciBhIGxhJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tlbF0gZGRkZCBbcGFzYWRvIGEgbGEnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdlbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2hhY2UgJXMnLFxuICAgICAgICAgICAgcyA6ICd1bm9zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG0gOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaCA6ICd1bmEgaG9yYScsXG4gICAgICAgICAgICBoaCA6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkIDogJ3VuIGTDrWEnLFxuICAgICAgICAgICAgZGQgOiAnJWQgZMOtYXMnLFxuICAgICAgICAgICAgTSA6ICd1biBtZXMnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeSA6ICd1biBhw7FvJyxcbiAgICAgICAgICAgI
33378Hl5IDogJyVkIGHDsW9zJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIDogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsIDogJyVkwronLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA2ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlc1VzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbW9udGhzU2hvcnREb3QgPSAnZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2VuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljJy5zcGxpdCgnXycpO1xuXG4gICAgdmFyIG1vbnRoc1BhcnNlID0gWy9eZW5lL2ksIC9eZmViL2ksIC9ebWFyL2ksIC9eYWJyL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYWdvL2ksIC9ec2VwL2ksIC9eb2N0L2ksIC9ebm92L2ksIC9eZGljL2ldO1xuICAgIHZhciBtb250aHNSZWdleCA9IC9eKG
33378VuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2k7XG5cbiAgICB2YXIgZXMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlcycsIHtcbiAgICAgICAgbW9udGhzIDogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90O1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3RbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzUmVnZXggOiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleCA6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleCA6IC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXggOiAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUGFyc2UgOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlIDogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2UgOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXMgOiAnZG9taW5nb19sdW5lc19tYXJ0ZXNfbWnDqXJjb2xlc19qdWV2ZXNfdmllcm5lc19zw6FiYWRvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbS
33378dcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2hveSBhIGxhJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5IDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW21hw7FhbmEgYSBsYScgKyAoKHRoaXMuaG91cnMoKSAhPT0gMSkgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWsgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFthIGxhJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5IDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2F5ZXIgYSBsYScgKyAoKHRoaXMuaG91cnMoKSAhPT0gMSkgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWsgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnZW4gJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICdoYWNlICVzJyxcbiAgICAgICAgICAgIHMgOiAndW5vcyBzZWd1bmRvcycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtIDogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGggOiAndW5hIGhvcmEnLFxuICAgICAgICAgICAgaGggOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZCA6ICd1biBkw61hJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGTDrWFzJyxcbiAgICAgICAgICAgIE0gOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHkgOiAndW4gYcOxbycsXG4gICAgICAgICAgICB5eSA6ICclZCBhw7FvcydcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZSA6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbCA6ICclZMK6JyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXM7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICAncycgOiBbJ23DtW5lIHNla3VuZGknLCAnbcO1bmkgc2VrdW5kJywgJ3BhYXIgc2VrdW5kaXQnXSxcbiAgICAgICAgICAgICdzcyc6IFtudW1iZXIgKyAnc2VrdW5kaScsIG51bWJlciArICdzZWt1bmRpdCddLFxuICAgICAgICAgICAgJ20nIDogWyfDvGhlIG1pbnV0aScsICfDvGtzIG1pbnV0J10sXG4gICAgICAgICAgICAnbW0nOiBbbnVtYmVyICsgJyBtaW51dGknLCBudW1iZXIgKyAnIG1pbnV0aXQnXSxcbiAgICAgICAgICAgICdoJyA6IFsnw7xoZSB0dW5uaScsICd0dW5kIGFlZ2EnLCAnw7xrcyB0dW5kJ10sXG4gICAgICAgICAgICAnaGgnOiBbbnVtYmVyICsgJyB0dW5uaScsIG51bWJlciArICcgdHVuZGknXSxcbiAgICAgICAgICAgICdkJyA6IFsnw7xoZSBww6RldmEnLCAnw7xrcyBww6RldiddLFxuICAgICAgICAgICAgJ00nIDogWydrdXUgYWphJywgJ2t1dSBhZWdhJywgJ8O8a3Mga3V1J10sXG4gICAgICAgICAgICAnTU0nOiBbbnVtYmVyICsgJyBrdXUnLCBudW1iZXIgKyAnIGt1dWQnXSxcbiAgICAgICAgICAgICd5JyA6IFsnw7xoZSBhYXN0YScsICdhYXN0YScsICfDvGtzIGFhc3RhJ10sXG4gICAgICAgICAgICAneXknOiBbbnVtYmVyICsgJyBhYXN0YScsIG51bWJlciArICcgYWFzdGF0J11cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRba2V5XVsyXSA/IGZvcm1hdFtrZXldWzJdIDogZm9ybWF0W2tleV1bMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdldCcsIHtcbiAgICAgICAgbW9udGhzICAgICAgICA6ICdqYWFudWFyX3ZlZWJydWFyX23DpHJ0c19hcHJpbGxfbWFpX2p1dW5pX2p1dWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b29iZXJfbm92ZW1iZXJfZGV0c2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCAgIDogJ2phYW5fdmVlYnJfbcOkcnRzX2Fwcl9tYWlfanV1bmlfanV1bGlfYXVnX3NlcHRfb2t0X25vdl9kZXRzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyAgICAgIDogJ3DDvGhhcMOkZXZfZXNtYXNww6Rldl90ZWlzaXDDpGV2X2tvbG1hcMOkZXZfbmVsamFww6Rldl9yZWVkZV9sYXVww6Rldicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdQX0VfVF9LX05fUl9MJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiAgIDogJ1BfRV9UX0tfTl9SX0wnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgICA6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgICAgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCAgIDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgIDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0nXG4gICAgICAgI
33378H0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSAgOiAnW1TDpG5hLF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSAgOiAnW0hvbW1lLF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnW0rDpHJnbWluZV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5ICA6ICdbRWlsZSxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1tFZWxtaW5lXSBkZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyBww6RyYXN0JyxcbiAgICAgICAgICAgIHBhc3QgICA6ICclcyB0YWdhc2knLFxuICAgICAgICAgICAgcyAgICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHNzICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtICAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW0gICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGggICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaCAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZCAgICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkICAgICA6ICclZCBww6RldmEnLFxuICAgICAgICAgICAgTSAgICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5ICAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXkgICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGV0O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgZXUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdldScsIHtcbiAgICAgICAgbW9udGhzIDogJ3VydGFycmlsYV9vdHNhaWxhX21hcnR4b2FfYXBpcmlsYV9tYWlhdHphX2VrYWluYV91enRhaWxhX2FidXp0dWFfaXJhaWxhX3VycmlhX2F6YXJvYV9hYmVuZHVhJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICd1cnQuX290cy5fbWFyLl9hcGkuX21haS5fZWthLl91enQuX2FidS5faXJhLl91cnIuX2F6YS5fYWJlLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ2lnYW5kZWFfYXN0ZWxlaGVuYV9hc3RlYXJ0ZWFfYXN0ZWF6a2VuYV9vc3RlZ3VuYV9vc3RpcmFsYV9sYXJ1bmJhdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnaWcuX2FsLl9hci5fYXouX29nLl9vbC5fbHIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdpZ19hbF9hcl9hel9vZ19vbF9scicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMIDogJ1lZWVlba29dIE1NTU1bcmVuXSBEW2FdJyxcbiAgICAgICAgICAgIExMTCA6ICdZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIFlZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tJyxcbiAgICAgICAgICAgIGwgOiAnWVlZWS1NLUQnLFxuICAgICAgICAgICAgbGwgOiAnWVlZWVtrb10gTU1NIERbYV0nLFxuICAgICAgICAgICAgbGxsIDogJ1lZWVlba29dIE1NTSBEW2FdIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGwgOiAnZGRkLCBZWVlZW2tvXSBNTU0gRFthXSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tnYXVyXSBMVFtldGFuXScsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tiaWhhcl0gTFRbZXRhbl0nLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBMVFtldGFuXScsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1thdHpvXSBMVFtldGFuXScsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbYXVycmVrb10gZGRkZCBMVFtldGFuXScsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMgYmFycnUnLFxuICAgICAgICAgICAgcGFzdCA6ICdkdWVsYSAlcycsXG4gICAgICAgICAgICBzIDogJ3NlZ3VuZG8gYmF0enVrJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNlZ3VuZG8nLFxuICAgICAgICAgICAgbSA6ICdtaW51dHUgYmF0JyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0dScsXG4gICAgICAgICAgICBoIDogJ29yZHUgYmF0JyxcbiAgICAgICAgICAgIGhoIDogJyVkIG9yZHUnLFxuICAgICAgICAgICAgZCA6ICdlZ3VuIGJhdCcsXG4gICAgICAgICAgICBkZCA6ICclZCBlZ3VuJyxcbiAgICAgICAgICAgIE0gOiAnaGlsYWJldGUgYmF0JyxcbiAgICAgICAgICAgIE1NIDogJyVkIGhpbGFiZXRlJyxcbiAgICAgICAgICAgI
33378HkgOiAndXJ0ZSBiYXQnLFxuICAgICAgICAgICAgeXkgOiAnJWQgdXJ0ZSdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbCA6ICclZC4nLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBldTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgJzEnOiAn27EnLFxuICAgICAgICAnMic6ICfbsicsXG4gICAgICAgICczJzogJ9uzJyxcbiAgICAgICAgJzQnOiAn27QnLFxuICAgICAgICAnNSc6ICfbtScsXG4gICAgICAgICc2JzogJ9u2JyxcbiAgICAgICAgJzcnOiAn27cnLFxuICAgICAgICAnOCc6ICfbuCcsXG4gICAgICAgICc5JzogJ9u5JyxcbiAgICAgICAgJzAnOiAn27AnXG4gICAgfSwgbnVtYmVyTWFwID0ge1xuICAgICAgICAn27EnOiAnMScsXG4gICAgICAgICfbsic6ICcyJyxcbiAgICAgICAgJ9uzJzogJzMnLFxuICAgICAgICAn27QnOiAnNCcsXG4gICAgICAgICfbtSc6ICc1JyxcbiAgICAgICAgJ9u2JzogJzYnLFxuICAgICAgICAn27cnOiAnNycsXG4gICAgICAgICfbuCc6ICc4JyxcbiAgICAgICAgJ9u5JzogJzknLFxuICAgICAgICAn27AnOiAnMCdcbiAgICB9O1xuXG4gICAgdmFyIGZhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZmEnLCB7XG4gICAgICAgIG1vbnRocyA6ICfamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfbjNqpXFx1MjAwY9i02YbYqNmHX9iv2YjYtNmG2KjZh1/Ys9mHXFx1MjAwY9i02YbYqNmHX9qG2YfYp9ix2LTZhtio2Ydf2b7ZhtisXFx1MjAwY9i02YbYqNmHX9is2YXYudmHX9i02YbYqNmHJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ9uM2qlcXHUyMDBj2LTZhtio2Ydf2K/ZiNi02YbYqNmHX9iz2YdcXHUyMDBj2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2KxcXHUyMDBj2LTZhtio2Ydf2KzZhdi52Ydf2LTZhtio2YcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9uMX9ivX9izX9qGX9m+X9isX9i0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/Zgtio2YQg2KfYsiDYuNmH2LF82KjYudivINin2LIg2LjZh9ixLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL9io2LnYryDYp9iyINi42YfYsS8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YLYqNmEINin2LIg2LjZh9ixJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYqNi52K8g2KfYsiDYuNmH2LEnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW9in2YXYsdmI2LIg2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW9mB2LHYr9inINiz2KfYudiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFvYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb2K/bjNix2YjYsiDYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBb2b7bjNi0XSBb2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfYr9ixICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg2b7bjNi0JyxcbiAgICAgICAgICAgIHMgOiAn2obZhtivINir2KfZhtuM2YcnLFxuICAgICAgICAgICAgc3MgOiAn2KvYp9mG24zZhyBkJScsXG4gICAgICAgICAgICBtIDogJ9uM2qkg2K/ZgtuM2YLZhycsXG4gICAgICAgICAgICBtbSA6ICclZCDYr9mC24zZgtmHJyxcbiAgICAgICAgICAgIGggOiAn24zaq
33378SDYs9in2LnYqicsXG4gICAgICAgICAgICBoaCA6ICclZCDYs9in2LnYqicsXG4gICAgICAgICAgICBkIDogJ9uM2qkg2LHZiNiyJyxcbiAgICAgICAgICAgIGRkIDogJyVkINix2YjYsicsXG4gICAgICAgICAgICBNIDogJ9uM2qkg2YXYp9mHJyxcbiAgICAgICAgICAgIE1NIDogJyVkINmF2KfZhycsXG4gICAgICAgICAgICB5IDogJ9uM2qkg2LPYp9mEJyxcbiAgICAgICAgICAgIHl5IDogJyVkINiz2KfZhCdcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW9uwLdu5XS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSkucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ92YUvLFxuICAgICAgICBvcmRpbmFsIDogJyVk2YUnLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDEyIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG51bWJlcnNQYXN0ID0gJ25vbGxhIHlrc2kga2Frc2kga29sbWUgbmVsasOkIHZpaXNpIGt1dXNpIHNlaXRzZW3DpG4ga2FoZGVrc2FuIHloZGVrc8Okbicuc3BsaXQoJyAnKSxcbiAgICAgICAgbnVtYmVyc0Z1dHVyZSA9IFtcbiAgICAgICAgICAgICdub2xsYScsICd5aGRlbicsICdrYWhkZW4nLCAna29sbWVuJywgJ25lbGrDpG4nLCAndmlpZGVuJywgJ2t1dWRlbicsXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs3XSwgbnVtYmVyc1Bhc3RbOF0sIG51bWJlcnNQYXN0WzldXG4gICAgICAgIF07XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2Y
33378XIgcmVzdWx0ID0gJyc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbXV1dGFtYW4gc2VrdW5uaW4nIDogJ211dXRhbWEgc2VrdW50aSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3Nla3VubmluJyA6ICdzZWt1bnRpYSc7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbWludXV0aW4nIDogJ21pbnV1dHRpJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdtaW51dXRpbicgOiAnbWludXV0dGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICd0dW5uaW4nIDogJ3R1bnRpJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd0dW5uaW4nIDogJ3R1bnRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6QnO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3DDpGl2w6RuJyA6ICdww6RpdsOkw6QnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ2t1dWthdWRlbicgOiAna3V1a2F1c2knO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ2t1dWthdWRlbicgOiAna3V1a2F1dHRhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICd2dW9kZW4nIDogJ3Z1b3NpJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd2dW9kZW4nIDogJ3Z1b3R0YSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gdmVyYmFsTnVtYmVyKG51bWJlciwgaXNGdXR1cmUpICsgJyAnICsgcmVzdWx0O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBmdW5jdGlvbiB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkge1xuICAgICAgICByZXR1cm4gbnVtYmVyIDwgMTAgPyAoaXNGdXR1cmUgPyBudW1iZXJzRnV0dXJlW251bWJlcl0gOiBudW1iZXJzUGFzdFtudW1iZXJdKSA6IG51bWJlcjtcbiAgICB9XG5cbiAgICB2YXIgZmkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmaScsIHtcbiAgICAgICAgbW9udGhzIDogJ3RhbW1pa3V1X2hlbG1pa3V1X21hYWxpc2t1dV9odWh0aWt1dV90b3Vrb2t1dV9rZXPDpGt1dV9oZWluw6RrdXVfZWxva3V1X3N5eXNrdXVfbG9rYWt1dV9tYXJyYXNrdXVfam91bHVrdXUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ3RhbW1pX2hlbG1pX21hYWxpc19odWh0aV90b3Vrb19rZXPDpF9oZWluw6RfZWxvX3N5eXNfbG9rYV9tYXJyYXNfam91bHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ3N1bm51bnRhaV9tYWFuYW50YWlfdGlpc3RhaV9rZXNraXZpaWtrb190b3JzdGFpX3BlcmphbnRhaV9sYXVhbnRhaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdzdV9tYV90aV9rZV90b19wZV9sYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnc3VfbWFfdGlfa2VfdG9fcGVfbGEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEbyBNTU1NW3RhXSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIERvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIGwgOiAnRC5NLllZWVknLFxuICAgICAgICAgICAgbGwgOiAnRG8gTU1NIFlZWVknLFxuICAgICAgICAgICAgbGxsIDogJ0RvIE1NTSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBsbGxsIDogJ2RkZCwgRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW3TDpG7DpMOkbl0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbaHVvbWVubmFdIFtrbG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW2tsb10gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbZWlsZW5dIFtrbG9dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1t2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVzIHDDpMOkc3TDpCcsXG4gICAgICAgICAgICBwYXN0IDogJyVzIHNpdHRlbicsXG4gICAgICAgICAgICBzIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3MgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGggOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5IDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXkgOiB0cmFuc2xhdGVcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbCA6ICclZC4nLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgI
33378H1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGZvID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZm8nLCB7XG4gICAgICAgIG1vbnRocyA6ICdqYW51YXJfZmVicnVhcl9tYXJzX2FwcsOtbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnamFuX2ZlYl9tYXJfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ3N1bm51ZGFndXJfbcOhbmFkYWd1cl90w71zZGFndXJfbWlrdWRhZ3VyX2jDs3NkYWd1cl9mcsOtZ2dqYWRhZ3VyX2xleWdhcmRhZ3VyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ3N1bl9tw6FuX3TDvXNfbWlrX2jDs3NfZnLDrV9sZXknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ3N1X23DoV90w71fbWlfaMOzX2ZyX2xlJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBELiBNTU1NLCBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW8ONIGRhZyBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW8ONIG1vcmdpbiBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbw40gZ2rDoXIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbc8Otw7BzdHVdIGRkZGQgW2tsXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAndW0gJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBzw63DsGFuaScsXG4gICAgICAgICAgICBzIDogJ2bDoSBzZWt1bmQnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2VrdW5kaXInLFxuICAgICAgICAgICAgbSA6ICdlaW4gbWludXR0dXInLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXR0aXInLFxuICAgICAgICAgICAgaCA6ICdlaW4gdMOtbWknLFxuICAgICAgICAgICAgaGggOiAnJWQgdMOtbWFyJyxcbiAgICAgICAgICAgIGQgOiAnZWluIGRhZ3VyJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGRhZ2FyJyxcbiAgICAgICAgICAgIE0gOiAnZWluIG3DoW5hw7B1cicsXG4gICAgICAgICAgICBNTSA6ICclZCBtw6FuYcOwaXInLFxuICAgICAgICAgICAgeSA6ICdlaXR0IMOhcicsXG4gICAgICAgICAgICB5eSA6ICclZCDDoXInXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm87XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBmckNhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZnItY2EnLCB7XG4gICAgICAgIG1vbnRocyA6ICdqYW52aWVyX2bDqXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb8O7dF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kw6ljZW1icmUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ2phbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAnZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ2RpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ2RpX2x1X21hX21lX2plX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tBdWpvdXJk4oCZaHVpIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tEZW1haW4gw6BdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW8OgXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tIaWVyIMOgXSB
33378MVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdkZGRkIFtkZXJuaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnZGFucyAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2lsIHkgYSAlcycsXG4gICAgICAgICAgICBzIDogJ3F1ZWxxdWVzIHNlY29uZGVzJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNlY29uZGVzJyxcbiAgICAgICAgICAgIG0gOiAndW5lIG1pbnV0ZScsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGggOiAndW5lIGhldXJlJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGhldXJlcycsXG4gICAgICAgICAgICBkIDogJ3VuIGpvdXInLFxuICAgICAgICAgICAgZGQgOiAnJWQgam91cnMnLFxuICAgICAgICAgICAgTSA6ICd1biBtb2lzJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1vaXMnLFxuICAgICAgICAgICAgeSA6ICd1biBhbicsXG4gICAgICAgICAgICB5eSA6ICclZCBhbnMnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShlcnxlKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBtYXNjdWxpbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBtb2lzLCB0cmltZXN0cmUsIGpvdXJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICdlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIGZlbWluaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogc2VtYWluZVxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdyZScgOiAnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnJDYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGZyQ2ggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmci1jaCcsIHtcbiAgICAgICAgbW9udGhzIDogJ2phbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnamFudi5fZsOpdnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb8O7dF9zZXB0Ll9vY3QuX25vdi5fZMOpYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnZGlfbHVfbWFfbWVfamVfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW0F1am91cmTigJlodWkgw6BdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW0RlbWFpbiDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0hpZXIgw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ2RkZGQgW2Rlcm5pZXIgw6BdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdkYW5zICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnaWwgeSBhICVzJyxcbiAgICAgICAgICAgIHMgOiAncXVlbHF1ZXMgc2Vjb25kZXMnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2Vjb25kZXMnLFxuICAgICAgICAgICAgbSA6ICd1bmUgbWludXRlJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaCA6ICd1bmUgaGV1cmUnLFxuICAgICAgICAgICAgaGggOiAnJWQgaGV1cmVzJyxcbiAgICAgICAgICAgIGQgOiAndW4gam91cicsXG4gICAgICAgICAgICBkZCA6ICclZCBqb3VycycsXG4gICAgICAgICAgICBNIDogJ3VuIG1vaXMnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbW9pcycsXG4gICAgICAgICAgICB5IDogJ3VuIGFuJyxcbiAgICAgICAgICAgI
33378Hl5IDogJyVkIGFucydcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGVyfGUpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIG1hc2N1bGluZSBncmFtbWF0aWNhbCBnZW5kZXI6IG1vaXMsIHRyaW1lc3RyZSwgam91clxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAnZXInIDogJ2UnKTtcblxuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggZmVtaW5pbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBzZW1haW5lXG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ3JlJyA6ICdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZyQ2g7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBmciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZyJywge1xuICAgICAgICBtb250aHMgOiAnamFudmllcl9mw6l2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW/Du3Rfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZMOpY2VtYnJlJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYW52Ll9mw6l2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2Fvw7t0X3NlcHQuX29jdC5fbm92Ll9kw6ljLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ2RpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdkaV9sdV9tYV9tZV9qZV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbQXVqb3VyZOKAmWh1aSDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbRGVtYWluIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFvDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbSGllciDDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBbZGVybmllciDDoF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2RhbnMgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICdpbCB5IGEgJXMnLFxuICAgICAgICAgICAgcyA6ICdxdWVscXVlcyBzZWNvbmRlcycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWNvbmRlcycsXG4gICAgICAgICAgICBtIDogJ3VuZSBtaW51dGUnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoIDogJ3VuZSBoZXVyZScsXG4gICAgICAgICAgICBoaCA6ICclZCBoZXVyZXMnLFxuICAgICAgICAgICAgZCA6ICd1biBqb3VyJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGpvdXJzJyxcbiAgICAgICAgICAgIE0gOiAndW4gbW9pcycsXG4gICAgICAgICAgICBNTSA6ICclZCBtb2lzJyxcbiAgICAgICAgICAgIHkgOiAndW4gYW4nLFxuICAgICAgICAgICAgeXkgOiAnJWQgYW5zJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZXJ8KS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogUmV0dXJuICdlJyB3aGVuIGRheSBvZiBtb250aCA+IDEuIE1vdmUgdGhpcyBjYXNlIGluc2lkZVxuICAgICAgICAgICAgICAgIC8vIGJsb2NrIGZvciBtYXNjdWxpbmUgd29yZHMgYmVsb3cuXG4gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8zMzc1XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgI
33378HJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICcnKTtcblxuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggbWFzY3VsaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogbW9pcywgdHJpbWVzdHJlLCBqb3VyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdlcicgOiAnZScpO1xuXG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBmZW1pbmluZSBncmFtbWF0aWNhbCBnZW5kZXI6IHNlbWFpbmVcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAncmUnIDogJ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBtb250aHNTaG9ydFdpdGhEb3RzID0gJ2phbi5fZmViLl9tcnQuX2Fwci5fbWFpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0V2l0aG91dERvdHMgPSAnamFuX2ZlYl9tcnRfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMnLnNwbGl0KCdfJyk7XG5cbiAgICB2YXIgZnkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmeScsIHtcbiAgICAgICAgbW9udGhzIDogJ2phbm5ld2FyaXNfZmVicmV3YXJpc19tYWFydF9hcHJpbF9tYWFpZV9qdW55X2p1bHlfYXVndXN0dXNfc2VwdGltYmVyX29rdG9iZXJfbm92aW1iZXJfZGVzaW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogZnVuY3Rpb24gKG
333780sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aG91dERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ3NuZWluX21vYW5kZWlfdGlpc2RlaV93b2Fuc2RlaV90b25nZXJzZGVpX2ZyZWVkX3NuZW9uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ3NpLl9tby5fdGkuX3dvLl90by5fZnIuX3NvLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU2lfTW9fVGlfV29fVG9fRnJfU28nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQtTU0tWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaGpvZWQgb21dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9hcm4gb21dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbanVzdGVyIG9tXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vDtGZyw7tuZV0gZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ29lciAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIGx5bicsXG4gICAgICAgICAgICBzIDogJ2luIHBlYXIgc2Vrb25kZW4nLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2Vrb25kZW4nLFxuICAgICAgICAgICAgbSA6ICdpZW4gbWluw7p0JyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0ZW4nLFxuICAgICAgICAgICAgaCA6ICdpZW4gb2VyZScsXG4gICAgICAgICAgICBoaCA6ICclZCBvZXJlbicsXG4gICAgICAgICAgICBkIDogJ2llbiBkZWknLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGFnZW4nLFxuICAgICAgICAgICAgTSA6ICdpZW4gbW9hbm5lJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1vYW5uZW4nLFxuICAgICAgICAgICAgeSA6ICdpZW4gamllcicsXG4gICAgICAgICAgICB5eSA6ICclZCBqaWVycmVuJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3RlfGRlKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCkgPyAnc3RlJyA6ICdkZScpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmeTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAnRWFuw6FpcicsICdGZWFiaHJhJywgJ03DoXJ0YScsICdBaWJyZcOhbicsICdCZWFsdGFpbmUnLCAnTcOpaXRoZWFtaCcsICdJw7ppbCcsICdMw7puYXNhJywgJ01lw6FuIEbDs21oYWlyJywgJ0RlYWlyZWFkaCBGw7NtaGFpcicsICdTYW1oYWluJywgJ05vbGxhaWcnXG4gICAgXTtcblxuICAgIHZhciBtb250aHNTaG9ydCA9IFsnRWFuw6EnLCAnRmVhYicsICdNw6FydCcsICdBaWJyJywgJ0JlYWwnLCAnTcOpaXQnLCAnScO6aWwnLCAnTMO6bmEnLCAnTWXDoW4nLCAnRGVhaScsICdTYW1oJywgJ05vbGwnXTtcblxuICAgIHZhciB3ZWVrZGF5cyA9IFsnRMOpIERvbWhuYWlnaCcsICdEw6kgTHVhaW4nLCAnRMOpIE3DoWlydCcsICdEw6kgQ8OpYWRhb2luJywgJ0TDqWFyZGFvaW4nLCAnRMOpIGhBb2luZScsICdEw6kgU2F0aGFybiddO1xuXG4gICAgdmFyIHdlZWtkYXlzU2hvcnQgPSBbJ0RvbScsICdMdWEnLCAnTcOhaScsICdDw6lhJywgJ0TDqWEnLCAnaEFvJywgJ1NhdCddO1xuXG4gICAgdmFyIHdlZWtkYXlzTWluID0gWydEbycsICdMdScsICdNw6EnLCAnQ2UnLCAnRMOpJywgJ2hBJywgJ1NhJ107XG5cbiAgICB2YXIgZ2EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdnYScsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHNTaG9ydCxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiB3ZWVrZGF5c1Nob3J0LFxuICAgICAgICB3ZWVrZGF5c01pbjogd2Vla2RheXNNaW4sXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tJbm5pdSBhZ10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBbcOhcmFjaCBhZ10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthZ10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJbm7DqSBhaWddIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbc2VvIGNhaXRlXSBbYWdd
33378IExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDDsyBzaGluJyxcbiAgICAgICAgICAgIHM6ICdjw7pwbGEgc29pY2luZCcsXG4gICAgICAgICAgICBzczogJyVkIHNvaWNpbmQnLFxuICAgICAgICAgICAgbTogJ27Ds2ltw6lhZCcsXG4gICAgICAgICAgICBtbTogJyVkIG7Ds2ltw6lhZCcsXG4gICAgICAgICAgICBoOiAndWFpciBhbiBjaGxvaWcnLFxuICAgICAgICAgICAgaGg6ICclZCB1YWlyIGFuIGNobG9pZycsXG4gICAgICAgICAgICBkOiAnbMOhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgbMOhJyxcbiAgICAgICAgICAgIE06ICdtw60nLFxuICAgICAgICAgICAgTU06ICclZCBtw60nLFxuICAgICAgICAgICAgeTogJ2JsaWFpbicsXG4gICAgICAgICAgICB5eTogJyVkIGJsaWFpbidcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGR8bmF8bWgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9IG51bWJlciA9PT0gMSA/ICdkJyA6IG51bWJlciAlIDEwID09PSAyID8gJ25hJyA6ICdtaCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBnYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG1vbnRocyA9IFtcbiAgICAgICAgJ0FtIEZhb2lsbGVhY2gnLCAnQW4gR2VhcnJhbicsICdBbSBNw6BydCcsICdBbiBHaWJsZWFuJywgJ0FuIEPDqGl0ZWFuJywgJ0FuIHQtw5JnbWhpb3MnLCAnQW4gdC1JdWNoYXInLCAnQW4gTMO5bmFzdGFsJywgJ0FuIHQtU3VsdGFpbicsICdBbiBEw6BtaGFpcicsICdBbiB0LVNhbWhhaW4nLCAnQW4gRMO5YmhsYWNoZCdcbiAgICBdO1xuXG4gICAgdmFyIG1vbnRoc1Nob3J0ID0gWydGYW9pJywgJ0dlYXInLCAnTcOgcnQnLCAnR2libCcsICdDw6hpdCcsICfDkmdtaCcsICdJdWNoJywgJ0zDuW4nLCAnU3VsdCcsICdEw6BtaCcsICdTYW1oJywgJ0TDuWJoJ107XG5cbiAgICB2YXIgd2Vla2RheXMgPSBbJ0RpZMOybWhuYWljaCcsICdEaWx1YWluJywgJ0RpbcOgaXJ0JywgJ0RpY2lhZGFpbicsICdEaWFyZGFvaW4nLCAnRGloYW9pbmUnLCAnRGlzYXRoYWlybmUnXTtcblxuICAgIHZhciB3ZWVrZGF5c1Nob3J0ID0gWydEaWQnLCAnRGlsJywgJ0RpbScsICdEaWMnLCAnRGlhJywgJ0RpaCcsICdEaXMnXTtcblxuICAgIHZhciB3ZWVrZGF5c01pbiA9IFsnRMOyJywgJ0x1JywgJ03DoCcsICdDaScsICdBcicsICdIYScsICdTYSddO1xuXG4gICAgdmFyIGdkID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ2QnLCB7XG4gICAgICAgIG1vbnRocyA6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQgOiBtb250aHNTaG9ydCxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiB3ZWVrZGF5c1Nob3J0LFxuICAgICAgICB3ZWVrZGF5c01pbiA6IHdlZWtkYXlzTWluLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbQW4tZGl1Z2ggYWlnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tBLW3DoGlyZWFjaCBhaWddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW2FpZ10gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbQW4tZMOoIGFpZ10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBbc2VvIGNoYWlkaF0gW2FpZ10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2FubiBhbiAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2JobyBjaGlvbm4gJXMnLFxuICAgICAgICAgICAgcyA6ICdiZWFnYW4gZGlvZ2FuJyxcbiAgICAgICAgICAgIHNzIDogJyVkIGRpb2dhbicsXG4gICAgICAgICAgICBtIDogJ21pb25haWQnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWlvbmFpZGVhbicsXG4gICAgICAgICAgICBoIDogJ3VhaXInLFxuICAgICAgICAgICAgaGggOiAnJWQgdWFpcmVhbicsXG4gICAgICAgICAgICBkIDogJ2xhdGhhJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGxhdGhhJyxcbiAgICAgICAgICAgIE0gOiAnbcOsb3MnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbcOsb3NhbicsXG4gICAgICAgICAgICB5IDogJ2JsaWFkaG5hJyxcbiAgICAgICAgICAgI
33378Hl5IDogJyVkIGJsaWFkaG5hJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIDogL1xcZHsxLDJ9KGR8bmF8bWgpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBudW1iZXIgPT09IDEgPyAnZCcgOiBudW1iZXIgJSAxMCA9PT0gMiA/ICduYScgOiAnbWgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ2Q7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBnbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2dsJywge1xuICAgICAgICBtb250aHMgOiAneGFuZWlyb19mZWJyZWlyb19tYXJ6b19hYnJpbF9tYWlvX3h1w7FvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlY2VtYnJvJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICd4YW4uX2ZlYi5fbWFyLl9hYnIuX21haS5feHXDsS5feHVsLl9hZ28uX3NldC5fb3V0Ll9ub3YuX2RlYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ2RvbWluZ29fbHVuc19tYXJ0ZXNfbcOpcmNvcmVzX3hvdmVzX3ZlbnJlc19zw6FiYWRvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ2RvbS5fbHVuLl9tYXIuX23DqXIuX3hvdi5fdmVuLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnZG9fbHVfbWFfbcOpX3hvX3ZlX3PDoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3hlICcgKyAoKHRoaXMuaG91cnMoKSAhPT0gMSkgPyAnw6FzJyA6ICfDoScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXkgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbWHDscOhICcgKyAoKHRoaXMuaG91cnMoKSAhPT0gMSkgPyAnw6FzJyA6ICfDoScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICfDoXMnIDogJ2EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5IDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW29udGUgJyArICgodGhpcy5ob3VycygpICE9PSAxKSA/ICfDoScgOiAnYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW29dIGRkZGQgW3Bhc2FkbyAnICsgKCh0aGlzLmhvdXJzKCkgIT09IDEpID8gJ8OhcycgOiAnYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RyLmluZGV4T2YoJ3VuJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICduJyArIHN0cjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlbiAnICsgc3RyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhc3QgOiAnaGFpICVzJyxcbiAgICAgICAgICAgIHMgOiAndW5zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG0gOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaCA6ICd1bmhhIGhvcmEnLFxuICAgICAgICAgICAgaGggOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZCA6ICd1biBkw61hJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGTDrWFzJyxcbiAgICAgICAgICAgIE0gOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHkgOiAndW4gYW5vJyxcbiAgICAgICAgICAgIHl5IDogJyVkIGFub3MnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2UgOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWwgOiAnJWTCuicsXG4gICAgICAgI
33378HdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgJ3MnOiBbJ3Rob2RkZSBzZWNvbmRhbmltJywgJ3Rob2RkZSBzZWNvbmQnXSxcbiAgICAgICAgICAgICdzcyc6IFtudW1iZXIgKyAnIHNlY29uZGFuaW0nLCBudW1iZXIgKyAnIHNlY29uZCddLFxuICAgICAgICAgICAgJ20nOiBbJ2VrYSBtaW50YW4nLCAnZWsgbWludXRlJ10sXG4gICAgICAgICAgICAnbW0nOiBbbnVtYmVyICsgJyBtaW50YW5pbScsIG51bWJlciArICcgbWludGFtJ10sXG4gICAgICAgICAgICAnaCc6IFsnZWthIHZvcmFuJywgJ2VrIHZvciddLFxuICAgICAgICAgICAgJ2hoJzogW251bWJlciArICcgdm9yYW5pbScsIG51bWJlciArICcgdm9yYW0nXSxcbiAgICAgICAgICAgICdkJzogWydla2EgZGlzYW4nLCAnZWsgZGlzJ10sXG4gICAgICAgICAgICAnZGQnOiBbbnVtYmVyICsgJyBkaXNhbmltJywgbnVtYmVyICsgJyBkaXMnXSxcbiAgICAgICAgICAgICdNJzogWydla2EgbWhvaW5lYW4nLCAnZWsgbWhvaW5vJ10sXG4gICAgICAgICAgICAnTU0nOiBbbnVtYmVyICsgJyBtaG9pbmVhbmltJywgbnVtYmVyICsgJyBtaG9pbmUnXSxcbiAgICAgICAgICAgICd5JzogWydla2Egdm9yc2FuJywgJ2VrIHZvcm9zJ10sXG4gICAgICAgICAgICAneXknOiBbbnVtYmVyICsgJyB2b3JzYW5pbScsIG51bWJlciArICcgdm9yc2FtJ11cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHZhciBnb21MYXRuID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ29tLWxhdG4nLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW5lcl9GZWJyZXJfTWFyc19BYnJpbF9NYWlfSnVuX0p1bGFpX0Fnb3N0X1NldGVtYnJfT3R1YnJfTm92ZW1icl9EZXplbWJyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKYW4uX0ZlYi5fTWFyc19BYnIuX01haV9KdW5fSnVsLl9BZ28uX1NldC5fT3R1Ll9Ob3YuX0Rlei4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdBaXRhcl9Tb21hcl9Nb25nbGxhcl9CdWR2YXJfQnJlc3Rhcl9TdWtyYXJfU29uXFwndmFyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ0FpdC5fU29tLl9Nb24uX0J1ZC5fQnJlLl9TdWsuX1Nvbi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0FpX1NtX01vX0J1X0JyX1N1X1NuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0EgaDptbSBbdmF6dGFdJyxcbiAgICAgICAgICAgIExUUyA6ICdBIGg6bW06c3MgW3ZhenRhXScsXG4gICAgICAgICAgICBMIDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEEgaDptbSBbdmF6dGFdJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgTU1NTVthY2hlYV0gRG8sIFlZWVksIEEgaDptbSBbdmF6dGFdJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbdmF6dGFdJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQWl6XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0ZhbGVhbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbSWV0YSB0b10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0thbF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbRmF0bG9dIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBhZGltJyxcbiAgICAgICAgICAgIHMgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3MgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5IDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgI
33378Hl5IDogcHJvY2Vzc1JlbGF0aXZlVGltZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIDogL1xcZHsxLDJ9KGVyKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhlIG9yZGluYWwgJ2VyJyBvbmx5IGFwcGxpZXMgdG8gZGF5IG9mIHRoZSBtb250aFxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ2VyJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3JhdGl8c29rYWxsaXxkb25wYXJhbXxzYW5qZS8sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdyYXRpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc29rYWxsaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdkb25wYXJhbScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+IDEyID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzYW5qZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmF0aSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc29rYWxsaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZG9ucGFyYW0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NhbmplJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyYXRpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdvbUxhdG47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAnMSc6ICfgq6cnLFxuICAgICAgICAgICAgJzInOiAn4KuoJyxcbiAgICAgICAgICAgICczJzogJ+CrqScsXG4gICAgICAgICAgICAnNCc6ICfgq6onLFxuICAgICAgICAgICAgJzUnOiAn4KurJyxcbiAgICAgICAgICAgICc2JzogJ+CrrCcsXG4gICAgICAgICAgICAnNyc6ICfgq60nLFxuICAgICAgICAgICAgJzgnOiAn4KuuJyxcbiAgICAgICAgICAgICc5JzogJ+CrrycsXG4gICAgICAgICAgICAnMCc6ICfgq6YnXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgq6cnOiAnMScsXG4gICAgICAgICAgICAn4KuoJzogJzInLFxuICAgICAgICAgICAgJ+CrqSc6ICczJyxcbiAgICAgICAgICAgICfgq6onOiAnNCcsXG4gICAgICAgICAgICAn4KurJzogJzUnLFxuICAgICAgICAgICAgJ+CrrCc6ICc2JyxcbiAgICAgICAgICAgICfgq60nOiAnNycsXG4gICAgICAgICAgICAn4KuuJzogJzgnLFxuICAgICAgICAgICAgJ+Crryc6ICc5JyxcbiAgICAgICAgICAgICfgq6YnOiAnMCdcbiAgICAgICAgfTtcblxuICAgIHZhciBndSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2d1Jywge1xuICAgICAgICBtb250aHM6ICfgqpzgqr7gqqjgq43gqq/gq4HgqobgqrDgq4Bf4Kqr4KuH4Kqs4KuN4Kqw4KuB4KqG4Kqw4KuAX+CqruCqvuCqsOCrjeCqml/gqo/gqqrgq43gqrDgqr/gqrJf4Kqu4KuHX+CqnOCrguCqqF/gqpzgq4HgqrLgqr7gqohf4KqR4KqX4Kq44KuN4KqfX+CquOCqquCrjeCqn+Crh+CqruCrjeCqrOCqsF/gqpHgqpXgq43gqp/gq43gqqzgqrBf4Kqo4Kq14KuH4Kqu4KuN4Kqs4KqwX+CqoeCqv+CquOCrh+CqruCrjeCqrOCqsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfgqpzgqr7gqqjgq43gqq/gq4EuX+Cqq+Crh+CqrOCrjeCqsOCrgS5f4Kqu4Kq+4Kqw4Ku
33378N4KqaX+Cqj+CqquCrjeCqsOCqvy5f4Kqu4KuHX+CqnOCrguCqqF/gqpzgq4HgqrLgqr4uX+CqkeCqly5f4Kq44Kqq4KuN4Kqf4KuHLl/gqpHgqpXgq43gqp/gq40uX+CqqOCqteCrhy5f4Kqh4Kq/4Kq44KuHLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgqrDgqrXgqr/gqrXgqr7gqrBf4Kq44KuL4Kqu4Kq14Kq+4KqwX+CqruCqguCql+Cqs+CqteCqvuCqsF/gqqzgq4Hgqqfgq43gqrXgqr7gqrBf4KqX4KuB4Kqw4KuB4Kq14Kq+4KqwX+CqtuCrgeCqleCrjeCqsOCqteCqvuCqsF/gqrbgqqjgqr/gqrXgqr7gqrAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgqrDgqrXgqr9f4Kq44KuL4KquX+CqruCqguCql+Cqs1/gqqzgq4Hgqqfgq41f4KqX4KuB4Kqw4KuBX+CqtuCrgeCqleCrjeCqsF/gqrbgqqjgqr8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KqwX+CquOCri1/gqq7gqoJf4Kqs4KuBX+Cql+CrgV/gqrbgq4Ff4Kq2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4Kq14Kq+4KqX4KuN4Kqv4KuHJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCqteCqvuCql+CrjeCqr+CrhycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4cnXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CqhuCqnF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgqpXgqr7gqrLgq4ddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgqpfgqofgqpXgqr7gqrLgq4ddIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CqquCqvuCqm+CqsuCqvl0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOCqruCqvicsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4Kqq4KuH4Kq54Kqy4Kq+JyxcbiAgICAgICAgICAgIHM6ICfgqoXgqq7gq4HgqpUg4Kqq4Kqz4KuLJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Kq44KuH4KqV4KqC4KqhJyxcbiAgICAgICAgICAgIG06ICfgqo/gqpUg4Kqu4Kq/4Kqo4Kq/4KqfJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4Kqu4Kq/4Kqo4Kq/4KqfJyxcbiAgICAgICAgICAgIGg6ICfgqo/gqpUg4KqV4Kqy4Kq+4KqVJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4KqV4Kqy4Kq+4KqVJyxcbiAgICAgICAgICAgIGQ6ICfgqo/gqpUg4Kqm4Kq/4Kq14Kq4JyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Kqm4Kq/4Kq14Kq4JyxcbiAgICAgICAgICAgIE06ICfgqo/gqpUg4Kqu4Kq54Kq/4Kqo4KuLJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4Kqu4Kq54Kq/4Kqo4KuLJyxcbiAgICAgICAgICAgIHk6ICfgqo/gqpUg4Kq14Kqw4KuN4Kq3JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Kq14Kqw4KuN4Kq3J1xuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Kun4Kuo4Kup4Kuq4Kur4Kus4Kut4Kuu4Kuv4KumXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBHdWphcmF0aSBub3RhdGlvbiBmb3IgbWVyaWRpZW1zIGFyZSBxdWl0ZSBmdXp6eSBpbiBwcmFjdGljZS4gV2hpbGUgdGhlcmUgZXhpc3RzXG4gICAgICAgIC8vIGEgcmlnaWQgbm90aW9uIG9mIGEgJ1BhaGFyJyBpdCBpcyBub3QgdXNlZCBhcyByaWdpZGx5IGluIG1vZGVybiBHdWphcmF0aS5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CqsOCqvuCqpHzgqqzgqqrgq4vgqrB84Kq44Kq14Kq+4KqwfOCquOCqvuCqguCqnC8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CqsOCqvuCqpCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CquOCqteCqvuCqsCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqqzgqqrgq4vgqrAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyB
33378ob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CquOCqvuCqguCqnCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrDgqr7gqqQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CquOCqteCqvuCqsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kqs4Kqq4KuL4KqwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrjgqr7gqoLgqpwnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CqsOCqvuCqpCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ3U7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBoZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2hlJywge1xuICAgICAgICBtb250aHMgOiAn15nXoNeV15DXqF/XpNeR16jXldeQ16hf157XqNelX9eQ16TXqNeZ15xf157XkNeZX9eZ15XXoNeZX9eZ15XXnNeZX9eQ15XXkteV16HXmF/Xodek15jXnteR16hf15DXlden15jXldeR16hf16DXldeR157XkdeoX9eT16bXnteR16gnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ9eZ16DXldezX9ek15HXqNezX9ee16jXpV/XkNek16jXs1/XnteQ15lf15nXldeg15lf15nXldec15lf15DXldeS17Nf16HXpNeY17Nf15DXlden17Nf16DXldeR17Nf15PXptee17MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ9eo15DXqdeV159f16nXoNeZX9ep15zXmdep15lf16jXkdeZ16LXmV/Xl9ee15nXqdeZX9ep15nXqdeZX9ep15HXqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfXkNezX9eR17Nf15LXs1/Xk9ezX9eU17Nf15XXs1/XqdezJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfXkF/XkV/Xkl/Xk1/XlF/XlV/XqScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgW9eRXU1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBb15FdTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBb15FdTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGwgOiAnRC9NL1lZWVknLFxuICAgICAgICAgICAgbGwgOiAnRCBNTU0gWVlZWScsXG4gICAgICAgICAgICBsbGwgOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsbGxsIDogJ2RkZCwgRCBNTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vXlNeZ15XXnSDXkda+XUxUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW9ee15fXqCDXkda+XUxUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW9eR16nXoteUXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vXkNeq157XldecINeR1r5dTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW9eR15nXldedXSBkZGRkIFvXlNeQ15fXqNeV158g15HXqdei15RdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfXkdei15XXkyAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ9ec16TXoNeZICVzJyxcbiAgICAgICAgICAgIHMgOiAn157Xodek16gg16nXoNeZ15XXqicsXG4gICAgICAgICAgICBzcyA6ICclZCDXqdeg15nXldeqJyxcbiAgICAgICAgICAgIG0gOiAn15PXp9eUJyxcbiAgICAgICAgICAgIG1tIDogJyVkINeT16fXldeqJyxcbiAgICAgICAgICAgIGggOiAn16nXoteUJyxcbiAgICAgICAgICAgIGhoIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXqdei16rXmdeZ150nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXqdei15XXqic7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZCA6ICfXmdeV150nLFxuICAgICAgICAgICAgZGQgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ9eZ15XXnteZ15nXnSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgI
33378HJldHVybiBudW1iZXIgKyAnINeZ157XmdedJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBNIDogJ9eX15XXk9epJyxcbiAgICAgICAgICAgIE1NIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXl9eV15PXqdeZ15nXnSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINeX15XXk9ep15nXnSc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeSA6ICfXqdeg15QnLFxuICAgICAgICAgICAgeXkgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ9ep16DXqteZ15nXnSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgJSAxMCA9PT0gMCAmJiBudW1iZXIgIT09IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINep16DXlCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINep16DXmdedJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9eQ15fXlFwi16Z815zXpNeg15RcItemfNeQ15fXqNeZINeU16bXlNeo15nXmdedfNec16TXoNeZINeU16bXlNeo15nXmdedfNec16TXoNeV16og15HXlden16h815HXkdeV16fXqHzXkdei16jXkS9pLFxuICAgICAgICBpc1BNIDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o15DXl9eUXCLXpnzXkNeX16jXmSDXlNem15TXqNeZ15nXnXzXkdei16jXkSkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9ec16TXoNeV16og15HXlden16gnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9eR15HXlden16gnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfXnNek16DXlFwi16YnIDogJ9ec16TXoNeZINeU16bXlNeo15nXmdedJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAn15DXl9eUXCLXpicgOiAn15DXl9eo15kg15TXpteU16jXmdeZ150nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9eR16LXqNeRJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhlO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAnMSc6ICfgpacnLFxuICAgICAgICAnMic6ICfgpagnLFxuICAgICAgICAnMyc6ICfgpaknLFxuICAgICAgICAnNCc6ICfgpaonLFxuICAgICAgICAnNSc6ICfgpasnLFxuICAgICAgICAnNic6ICfgpawnLFxuICAgICAgICAnNyc6ICfgpa0nLFxuICAgICAgICAnOCc6ICfgpa4nLFxuICAgICAgICAnOSc6ICfgpa8nLFxuICAgICAgICAnMCc6ICfgpaYnXG4gICAgfSxcbiAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICfgpacnOiAnMScsXG4gICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICfgpaknOiAnMycsXG4gICAgICAgICfgpaonOiAnNCcsXG4gICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICfgpawnOiAnNicsXG4gICAgICAgICfgpa0nOiAnNycsXG4gICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICfgpa8nOiAnOScsXG4gICAgICAgICfgpaYnOiAnMCdcbiAgICB9O1xuXG4gICAgdmFyIGhpID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaGknLCB7XG4gICAgICAgIG1vbnRocyA6ICfgpJzgpKjgpLXgpLDgpYBf4KSr4KS84KSw4KS14KSw4KWAX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpYjgpLJf4KSu4KSIX+CknOClguCkqF/gpJzgpYHgpLLgpL7gpIhf4KSF4KSX4KS44KWN4KSkX+CkuOCkv+CkpOCkruCljeCkrOCksF/gpIXgpJXgpY3gpJ/gpYLgpKzgpLBf4KSo4KS14KSu4KWN4KSs4KSwX+CkpuCkv+CkuOCkruCljeCkrOCksCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn4KSc4KSoLl/gpKvgpLzgpLAuX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpYguX+CkruCkiF/gpJzgpYLgpKhf4KSc4KWB4KSyLl/gpIXgpJcuX+CkuOCkv+CkpC5f4KSF4KSV4KWN4KSf4KWCLl/gpKjgpLUuX+CkpuCkv+CkuC4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ+CksOCkteCkv+CkteCkvuCksF/gpLjgpYvgpK7gpLXgpL7gpLBf4KSu4KSC4KSX4KSy4KS14KS+4KSwX+CkrOClgeCkp+CkteCkvuCksF/gpJfgpYHgpLDgpYLgpLXgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KS14KS+4KSwX+CktuCkqOCkv+CkteCkvuCksCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfgpLDgpLXgpL9f4KS44KWL4KSuX+CkruCkguCkl+Cksl/gpKzgpYHgpKdf4KSX4KWB4KSw4KWCX+CktuClgeCkleCljeCksF/gpLbgpKjgpL8nLnNwbGl0KCdfJyksXG4gICAgICAgI
33378HdlZWtkYXlzTWluIDogJ+CksF/gpLjgpYtf4KSu4KSCX+CkrOClgV/gpJfgpYFf4KS24KWBX+Ckticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdBIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIExUUyA6ICdBIGg6bW06c3Mg4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCkrOCknOClhydcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW+CkleCksl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb4KSV4KSyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb4KSq4KS/4KSb4KSy4KWHXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMg4KSu4KWH4KSCJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg4KSq4KS54KSy4KWHJyxcbiAgICAgICAgICAgIHMgOiAn4KSV4KWB4KSbIOCkueClgCDgpJXgpY3gpLfgpKMnLFxuICAgICAgICAgICAgc3MgOiAnJWQg4KS44KWH4KSV4KSC4KShJyxcbiAgICAgICAgICAgIG0gOiAn4KSP4KSVIOCkruCkv+CkqOCknycsXG4gICAgICAgICAgICBtbSA6ICclZCDgpK7gpL/gpKjgpJ8nLFxuICAgICAgICAgICAgaCA6ICfgpI/gpJUg4KSY4KSC4KSf4KS+JyxcbiAgICAgICAgICAgIGhoIDogJyVkIOCkmOCkguCkn+ClhycsXG4gICAgICAgICAgICBkIDogJ+Ckj+CklSDgpKbgpL/gpKgnLFxuICAgICAgICAgICAgZGQgOiAnJWQg4KSm4KS/4KSoJyxcbiAgICAgICAgICAgIE0gOiAn4KSP4KSVIOCkruCkueClgOCkqOClhycsXG4gICAgICAgICAgICBNTSA6ICclZCDgpK7gpLngpYDgpKjgpYcnLFxuICAgICAgICAgICAgeSA6ICfgpI/gpJUg4KS14KSw4KWN4KS3JyxcbiAgICAgICAgICAgIHl5IDogJyVkIOCkteCksOCljeCktydcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gSGluZGkgbm90YXRpb24gZm9yIG1lcmlkaWVtcyBhcmUgcXVpdGUgZnV6enkgaW4gcHJhY3RpY2UuIFdoaWxlIHRoZXJlIGV4aXN0c1xuICAgICAgICAvLyBhIHJpZ2lkIG5vdGlvbiBvZiBhICdQYWhhcicgaXQgaXMgbm90IHVzZWQgYXMgcmlnaWRseSBpbiBtb2Rlcm4gSGluZGkuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gpLDgpL7gpKR84KS44KWB4KSs4KS5fOCkpuCli+CkquCkueCksHzgpLbgpL7gpK4vLFxuICAgICAgICBtZXJpZGllbUhvdXIgOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4KSw4KS+4KSkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS44KWB4KSs4KS5Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkpuCli+CkquCkueCksCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS24KS+4KSuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOClgeCkrOCkuSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSm4KWL4KSq4KS54KSwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLbgpL7gpK4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDYgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhpO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1
33378xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdqZWRuYSBtaW51dGEnIDogJ2plZG5lIG1pbnV0ZSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0YSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0ZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnamVkYW4gc2F0JyA6ICdqZWRub2cgc2F0YSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0aSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2Rhbic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW5hJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWNpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5lJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaHIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdocicsIHtcbiAgICAgICAgbW9udGhzIDoge1xuICAgICAgICAgICAgZm9ybWF0OiAnc2lqZcSNbmphX3ZlbGphxI1lX2/FvnVqa2FfdHJhdm5qYV9zdmlibmphX2xpcG5qYV9zcnBuamFfa29sb3ZvemFfcnVqbmFfbGlzdG9wYWRhX3N0dWRlbm9nYV9wcm9zaW5jYScuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICdzaWplxI1hbmpfdmVsamHEjWFfb8W+dWpha190cmF2YW5qX3N2aWJhbmpfbGlwYW5qX3NycGFual9rb2xvdm96X3J1amFuX2xpc3RvcGFkX3N0dWRlbmlfcHJvc2luYWMnLnNwbGl0KCdfJylcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnc2lqLl92ZWxqLl9vxb51Ll90cmEuX3N2aS5fbGlwLl9zcnAuX2tvbC5fcnVqLl9saXMuX3N0dS5fcHJvLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAnbmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnbmVfcG9fdXRfc3JfxI1lX3BlX3N1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g
333786bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5ICA6ICdbZGFuYXMgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSAgOiAnW3N1dHJhIHVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3Vib3R1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXkgIDogJ1tqdcSNZXIgdV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxpXSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0ICAgOiAncHJpamUgJXMnLFxuICAgICAgICAgICAgcyAgICAgIDogJ3BhciBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG0gICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGggICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoICAgICA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQgICAgICA6ICdkYW4nLFxuICAgICAgICAgICAgZGQgICAgIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTSAgICAgIDogJ21qZXNlYycsXG4gICAgICAgICAgICBNTSAgICAgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5ICAgICAgOiAnZ29kaW51JyxcbiAgICAgICAgICAgIHl5ICAgICA6IHRyYW5zbGF0ZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhyO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgd2Vla0VuZGluZ3MgPSAndmFzw6FybmFwIGjDqXRmxZFuIGtlZGRlbiBzemVyZMOhbiBjc8O8dMO2cnTDtmvDtm4gcMOpbnRla2VuIHN6b21iYXRvbicuc3BsaXQoJyAnKTtcbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBudW0gPSBudW1iZXI7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXgpID8gJ27DqWjDoW55IG3DoXNvZHBlcmMnIDogJ27DqWjDoW55IG3DoXNvZHBlcmNlJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXgpID8gJyBtw6Fzb2RwZXJjJyA6ICcgbcOhc29kcGVyY2UnO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlZ3knICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIHBlcmMnIDogJyBwZXJjZScpO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgI
33378HJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgcGVyYycgOiAnIHBlcmNlJyk7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgw7NyYScgOiAnIMOzcsOhamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIMOzcmEnIDogJyDDs3LDoWphJyk7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgbmFwJyA6ICcgbmFwamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIG5hcCcgOiAnIG5hcGphJyk7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgaMOzbmFwJyA6ICcgaMOzbmFwamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIGjDs25hcCcgOiAnIGjDs25hcGphJyk7XG4gICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgw6l2JyA6ICcgw6l2ZScpO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgw6l2JyA6ICcgw6l2ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gd2Vlayhpc0Z1dHVyZSkge1xuICAgICAgICByZXR1cm4gKGlzRnV0dXJlID8gJycgOiAnW23Dumx0XSAnKSArICdbJyArIHdlZWtFbmRpbmdzW3RoaXMuZGF5KCldICsgJ10gTFRbLWtvcl0nO1xuICAgIH1cblxuICAgIHZhciBodSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2h1Jywge1xuICAgICAgICBtb250aHMgOiAnamFudcOhcl9mZWJydcOhcl9tw6FyY2l1c1/DoXByaWxpc19tw6FqdXNfasO6bml1c19qw7psaXVzX2F1Z3VzenR1c19zemVwdGVtYmVyX29rdMOzYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYW5fZmViX23DoXJjX8OhcHJfbcOhal9qw7puX2rDumxfYXVnX3N6ZXB0X29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICd2YXPDoXJuYXBfaMOpdGbFkV9rZWRkX3N6ZXJkYV9jc8O8dMO2cnTDtmtfcMOpbnRla19zem9tYmF0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ3Zhc19ow6l0X2tlZGRfc3plX2Nzw7x0X3DDqW5fc3pvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICd2X2hfa19zemVfY3NfcF9zem8nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ1lZWVkuTU0uREQuJyxcbiAgICAgICAgICAgIExMIDogJ1lZWVkuIE1NTU0gRC4nLFxuICAgICAgICAgICAgTExMIDogJ1lZWVkuIE1NTU0gRC4gSDptbScsXG4gICAgICAgICAgICBMTExMIDogJ1lZWVkuIE1NTU0gRC4sIGRkZGQgSDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2RlfGR1L2ksXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LmNoYXJBdCgxKS50b0xvd2VyQ2FzZSgpID09PSAndSc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID09PSB0cnVlID8gJ2RlJyA6ICdERSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID09PSB0cnVlID8gJ2R1JyA6ICdEVSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbbWFdIExUWy1rb3JdJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW2hvbG5hcF0gTFRbLWtvcl0nLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdlZWsuY2FsbCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1t0ZWduYXBdIExUWy1rb3JdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3ZWVrLmNhbGwodGhpcywgZmFsc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyBtw7psdmEnLFxuICAgICAgICAgICAgcGFzdCA6ICclcycsXG4gICAgICAgICAgICBzIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3MgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGggOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5IDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXkgOiB0cmFuc2xhdGVcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbCA6ICclZC4nLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgI
33378H1cbiAgICB9KTtcblxuICAgIHJldHVybiBodTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGh5QW0gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdoeS1hbScsIHtcbiAgICAgICAgbW9udGhzIDoge1xuICAgICAgICAgICAgZm9ybWF0OiAn1bDVuNaC1bbVvtWh1oDVq1/Wg9Wl1b/WgNW+1aHWgNWrX9W01aHWgNW/1atf1aHVutaA1avVrNWrX9W01aHVtdWr1b3Vq1/VsNW41oLVttWr1b3Vq1/VsNW41oLVrNWr1b3Vq1/WhdWj1bjVvdW/1bjVvdWrX9W91aXVutW/1aXVtNWi1aXWgNWrX9Ww1bjVr9W/1aXVtNWi1aXWgNWrX9W21bjVtdWl1bTVotWl1oDVq1/VpNWl1a/Vv9Wl1bTVotWl1oDVqycuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICfVsNW41oLVttW+1aHWgF/Wg9Wl1b/WgNW+1aHWgF/VtNWh1oDVv1/VodW61oDVq9WsX9W01aHVtdWr1b1f1bDVuNaC1bbVq9W9X9Ww1bjWgtWs1avVvV/WhdWj1bjVvdW/1bjVvV/VvdWl1brVv9Wl1bTVotWl1oBf1bDVuNWv1b/VpdW01aLVpdaAX9W21bjVtdWl1bTVotWl1oBf1aTVpdWv1b/VpdW01aLVpdaAJy5zcGxpdCgnXycpXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ9Ww1bbVvl/Wg9W/1oBf1bTWgNW/X9Wh1brWgF/VtNW11b1f1bDVttW9X9Ww1azVvV/WhdWj1b1f1b3VutW/X9Ww1a/Vv1/VttW01aJf1aTVr9W/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfVr9Wr1oDVodWv1atf1aXWgNWv1bjWgtW31aHVotWp1atf1aXWgNWl1oTVt9Wh1aLVqdWrX9W51bjWgNWl1oTVt9Wh1aLVqdWrX9Ww1avVttWj1bfVodWi1anVq1/VuNaC1oDVotWh1alf1bfVodWi1aHVqScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfVr9aA1a9f1aXWgNWvX9Wl1oDWhF/VudaA1oRf1bDVttWjX9W41oLWgNWiX9W31aLVqScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn1a/WgNWvX9Wl1oDVr1/VpdaA1oRf1bnWgNaEX9Ww1bbVo1/VuNaC1oDVol/Vt9Wi1aknLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWSDVqS4nLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZINWpLiwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSDVqS4sIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb1aHVtdW91oXWgF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vVvtWh1bLVqF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vVpdaA1aXVr10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgW9aF1oDVqCDVqtWh1bTVqF0gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdb1aHVttaB1aHVrl0gZGRkZCBb1oXWgNWoINWq1aHVtNWoXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMg1bDVpdW/1bgnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDVodW81aHVuycsXG4gICAgICAgICAgICBzIDogJ9W01asg1oTVodW21asg1b7VodW11oDVr9W11aHVticsXG4gICAgICAgICAgICBzcyA6ICclZCDVvtWh1bXWgNWv1bXVodW2JyxcbiAgICAgICAgICAgIG0gOiAn1oDVuNW61aUnLFxuICAgICAgICAgICAgbW0gOiAnJWQg1oDVuNW61aUnLFxuICAgICAgICAgICAgaCA6ICfVqtWh1bQnLFxuICAgICAgICAgICAgaGggOiAnJWQg1arVodW0JyxcbiAgICAgICAgICAgIGQgOiAn1oXWgCcsXG4gICAgICAgICAgICBkZCA6ICclZCDWhdaAJyxcbiAgICAgICAgICAgIE0gOiAn1aHVtNWr1b0nLFxuICAgICAgICAgICAgTU0gOiAnJWQg1aHVtNWr1b0nLFxuICAgICAgICAgICAgeSA6ICfVv9Wh1oDVqycsXG4gICAgICAgICAgICB5eSA6ICclZCDVv9Wh1oDVqydcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9Wj1avVt9Wl1oDVvtWhfNWh1bzVodW+1bjVv9W+1aF81oHVpdaA1aXVr9W+1aF81aXWgNWl1a/VuNW11aHVti8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9eKNaB1aXWgNWl1a/VvtWhfNWl1oDVpdWv1bjVtdWh1bYpJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn1aPVq9W31aXWgNW+1aEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Wh1bzVodW+1bjVv9W+1aEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9aB1aXWgNWl1a/VvtWhJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfVpdaA1aXVr9W41bXVodW2JztcbiAgICAgICAgICAgI
33378H1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9fFxcZHsxLDJ9LSjVq9W2fNaA1aQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREbyc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdWr1bYnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdaA1aQnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGh5QW07XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBpZCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2lkJywge1xuICAgICAgICBtb250aHMgOiAnSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ0phbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3RfU2VwX09rdF9Ob3ZfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdNaW5nZ3VfU2VuaW5fU2VsYXNhX1JhYnVfS2FtaXNfSnVtYXRfU2FidHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnTWluX1Nlbl9TZWxfUmFiX0thbV9KdW1fU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdNZ19Tbl9TbF9SYl9LbV9KbV9TYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISC5tbScsXG4gICAgICAgICAgICBMVFMgOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3BhZ2l8c2lhbmd8c29yZXxtYWxhbS8sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdwYWdpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3NpYW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzb3JlJyB8fCBtZXJpZGllbSA9PT0gJ21hbGFtJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncGFnaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NpYW5nJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc29yZSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbWFsYW0nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW0hhcmkgaW5pIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tCZXNvayBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0tlbWFyaW4gcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ2RkZGQgW2xhbHUgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdkYWxhbSAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIHlhbmcgbGFsdScsXG4gICAgICAgICAgICBzIDogJ2JlYmVyYXBhIGRldGlrJyxcbiAgICAgICAgICAgI
33378HNzIDogJyVkIGRldGlrJyxcbiAgICAgICAgICAgIG0gOiAnc2VtZW5pdCcsXG4gICAgICAgICAgICBtbSA6ICclZCBtZW5pdCcsXG4gICAgICAgICAgICBoIDogJ3NlamFtJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGphbScsXG4gICAgICAgICAgICBkIDogJ3NlaGFyaScsXG4gICAgICAgICAgICBkZCA6ICclZCBoYXJpJyxcbiAgICAgICAgICAgIE0gOiAnc2VidWxhbicsXG4gICAgICAgICAgICBNTSA6ICclZCBidWxhbicsXG4gICAgICAgICAgICB5IDogJ3NldGFodW4nLFxuICAgICAgICAgICAgeXkgOiAnJWQgdGFodW4nXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlkO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICBpZiAobiAlIDEwMCA9PT0gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG4gJSAxMCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdub2trcmFyIHNla8O6bmR1cicgOiAnbm9ra3J1bSBzZWvDum5kdW0nO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnc2Vrw7puZHVyJyA6ICdzZWvDum5kdW0nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdzZWvDum5kYSc7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtw61uw7p0YScgOiAnbcOtbsO6dHUnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbcOtbsO6dHVyJyA6ICdtw61uw7p0dW0nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw61uw7p0YSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbcOtbsO6dHUnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAna2x1a2t1c3R1bmRpcicgOiAna2x1a2t1c3R1bmR1bScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2tsdWtrdXN0dW5kJztcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGFndXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnZGFnJyA6ICdkZWdpJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICBpZiAocGx1cmFsKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZGFnYXInO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnZGFnYScgOiAnZMO2Z3VtJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZGFndXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKGlzRnV0dXJlID8gJ2RhZycgOiAnZGVnaScpO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdtw6FudcOwdXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbcOhbnXDsCcgOiAnbcOhbnXDsGknO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw6FudcOwaXInO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgI
33378HJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnbcOhbnXDsGknIDogJ23DoW51w7B1bScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23DoW51w7B1cic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnbcOhbnXDsCcgOiAnbcOhbnXDsGknKTtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ8OhcicgOiAnw6FyaSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICfDoXInIDogJ8OhcnVtJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICfDoXInIDogJ8OhcmknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2lzJywge1xuICAgICAgICBtb250aHMgOiAnamFuw7phcl9mZWJyw7phcl9tYXJzX2FwcsOtbF9tYcOtX2rDum7DrV9qw7psw61fw6Fnw7pzdF9zZXB0ZW1iZXJfb2t0w7NiZXJfbsOzdmVtYmVyX2Rlc2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYW5fZmViX21hcl9hcHJfbWHDrV9qw7puX2rDumxfw6Fnw7pfc2VwX29rdF9uw7N2X2Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnc3VubnVkYWd1cl9tw6FudWRhZ3VyX8O+cmnDsGp1ZGFndXJfbWnDsHZpa3VkYWd1cl9maW1tdHVkYWd1cl9mw7ZzdHVkYWd1cl9sYXVnYXJkYWd1cicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdzdW5fbcOhbl/DvnJpX21pw7BfZmltX2bDtnNfbGF1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdTdV9Nw6Ffw55yX01pX0ZpX0bDtl9MYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QuIE1NTU0gWVlZWSBba2wuXSBIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbw60gZGFnIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbw6EgbW9yZ3VuIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vDrSBnw6ZyIGtsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW3PDrcOwYXN0YV0gZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnZWZ0aXIgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICdmeXJpciAlcyBzw63DsGFuJyxcbiAgICAgICAgICAgIHMgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzcyA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGggOiAna2x1a2t1c3R1bmQnLFxuICAgICAgICAgICAgaGggOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5IDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXkgOiB0cmFuc2xhdGVcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbCA6ICclZC4nLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBpcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGl0Q2ggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdpdC1jaCcsIHtcbiAgICAgICAgbW9udGhzIDogJ2dlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ2RvbWVuaWNhX2x1bmVkw6xfbWFydGVkw6xfbWVyY29sZWTDrF9naW92ZWTDrF92ZW5lcmTDrF9zYWJhdG8nLnNwbGl0KCdfJyksXG4gICAgICAgI
33378HdlZWtkYXlzU2hvcnQgOiAnZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdkb19sdV9tYV9tZV9naV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPZ2dpIGFsbGVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRG9tYW5pIGFsbGVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYWxsZV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJZXJpIGFsbGVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW2xhIHNjb3JzYV0gZGRkZCBbYWxsZV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCgvXlswLTldLiskLykudGVzdChzKSA/ICd0cmEnIDogJ2luJykgKyAnICcgKyBzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgZmEnLFxuICAgICAgICAgICAgcyA6ICdhbGN1bmkgc2Vjb25kaScsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWNvbmRpJyxcbiAgICAgICAgICAgIG0gOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0aScsXG4gICAgICAgICAgICBoIDogJ3VuXFwnb3JhJyxcbiAgICAgICAgICAgIGhoIDogJyVkIG9yZScsXG4gICAgICAgICAgICBkIDogJ3VuIGdpb3JubycsXG4gICAgICAgICAgICBkZCA6ICclZCBnaW9ybmknLFxuICAgICAgICAgICAgTSA6ICd1biBtZXNlJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1lc2knLFxuICAgICAgICAgICAgeSA6ICd1biBhbm5vJyxcbiAgICAgICAgICAgIHl5IDogJyVkIGFubmknXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2UgOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRDaDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGl0ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaXQnLCB7XG4gICAgICAgIG1vbnRocyA6ICdnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ2dlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdkb21lbmljYV9sdW5lZMOsX21hcnRlZMOsX21lcmNvbGVkw6xfZ2lvdmVkw6xfdmVuZXJkw6xfc2FiYXRvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ2RvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnZG9fbHVfbWFfbWVfZ2lfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbT2dnaSBhbGxlXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0RvbWFuaSBhbGxlXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FsbGVdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSWVyaSBhbGxlXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tsYSBzY29yc2Fd
33378IGRkZGQgW2FsbGVdIExUJztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW2xvIHNjb3Jzb10gZGRkZCBbYWxsZV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgoL15bMC05XS4rJC8pLnRlc3QocykgPyAndHJhJyA6ICdpbicpICsgJyAnICsgcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXN0IDogJyVzIGZhJyxcbiAgICAgICAgICAgIHMgOiAnYWxjdW5pIHNlY29uZGknLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2Vjb25kaScsXG4gICAgICAgICAgICBtIDogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dGknLFxuICAgICAgICAgICAgaCA6ICd1blxcJ29yYScsXG4gICAgICAgICAgICBoaCA6ICclZCBvcmUnLFxuICAgICAgICAgICAgZCA6ICd1biBnaW9ybm8nLFxuICAgICAgICAgICAgZGQgOiAnJWQgZ2lvcm5pJyxcbiAgICAgICAgICAgIE0gOiAndW4gbWVzZScsXG4gICAgICAgICAgICBNTSA6ICclZCBtZXNpJyxcbiAgICAgICAgICAgIHkgOiAndW4gYW5ubycsXG4gICAgICAgICAgICB5eSA6ICclZCBhbm5pJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIDogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGl0O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgamEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdqYScsIHtcbiAgICAgICAgbW9udGhzIDogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn5pel5puc5pelX+aciOabnOaXpV/ngavmm5zml6Vf5rC05puc5pelX+acqOabnOaXpV/ph5Hmm5zml6Vf5Zyf5puc5pelJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ+aXpV/mnIhf54GrX+awtF/mnKhf6YeRX+Wcnycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn5pelX+aciF/ngatf5rC0X+acqF/ph5Ff5ZyfJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgTEwgOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTCA6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdZWVlZ5bm0TeaciETml6UgZGRkZCBISDptbScsXG4gICAgICAgICAgICBsIDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgbGwgOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbCA6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbCA6ICdZWVlZ5bm0TeaciETml6UoZGRkKSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+WNiOWJjXzljYjlvowvaSxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn5Y2I5b6MJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfljYjliY0nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+WNiOW+jCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb5LuK5pelXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vmmI7ml6VdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmIChub3cud2VlaygpIDwgdGhpcy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5p2l6YCxXWRkZGQgTFQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW+aYqOaXpV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMud2VlaygpIDwgbm93LndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vlhYjpgLFdZGRkZCBMVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZSA6IC9cXGR7MSwyfeaXpS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgI
33378HN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclc+W+jCcsXG4gICAgICAgICAgICBwYXN0IDogJyVz5YmNJyxcbiAgICAgICAgICAgIHMgOiAn5pWw56eSJyxcbiAgICAgICAgICAgIHNzIDogJyVk56eSJyxcbiAgICAgICAgICAgIG0gOiAnMeWIhicsXG4gICAgICAgICAgICBtbSA6ICclZOWIhicsXG4gICAgICAgICAgICBoIDogJzHmmYLplpMnLFxuICAgICAgICAgICAgaGggOiAnJWTmmYLplpMnLFxuICAgICAgICAgICAgZCA6ICcx5pelJyxcbiAgICAgICAgICAgIGRkIDogJyVk5pelJyxcbiAgICAgICAgICAgIE0gOiAnMeODtuaciCcsXG4gICAgICAgICAgICBNTSA6ICclZOODtuaciCcsXG4gICAgICAgICAgICB5IDogJzHlubQnLFxuICAgICAgICAgICAgeXkgOiAnJWTlubQnXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBqYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGp2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnanYnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3BlbWJlcl9EZXNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0Fnc19TZXBfT2t0X05vcF9EZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ01pbmdndV9TZW5lbl9TZWxvc29fUmVidV9LZW1pc19KZW11d2FoX1NlcHR1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ01pbl9TZW5fU2VsX1JlYl9LZW1fSmVtX1NlcCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnTWdfU25fU2xfUmJfS21fSm1fU3AnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9lbmppbmd8c2l5YW5nfHNvbnRlbnxuZGFsdS8sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdlbmppbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc2l5YW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzb250ZW4nIHx8IG1lcmlkaWVtID09PSAnbmRhbHUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlbmppbmcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzaXlhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzb250ZW4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ25kYWx1JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tEaW50ZW4gcHVuaWtvIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tNYmVuamFuZyBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0thbGEgd2luZ2kgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ2RkZGQgW2tlcGVuZ2tlciBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ3dvbnRlbiBpbmcgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBpbmdrYW5nIGtlcGVuZ2tlcicsXG4gICAgICAgICAgICBzIDogJ3Nhd2V0YXdpcyBkZXRpaycsXG4gICAgICAgICAgICBzcyA6ICclZCBkZXRpaycsXG4gICAgICAgICAgICBtIDogJ3NldHVuZ2dhbCBtZW5p
33378dCcsXG4gICAgICAgICAgICBtbSA6ICclZCBtZW5pdCcsXG4gICAgICAgICAgICBoIDogJ3NldHVuZ2dhbCBqYW0nLFxuICAgICAgICAgICAgaGggOiAnJWQgamFtJyxcbiAgICAgICAgICAgIGQgOiAnc2VkaW50ZW4nLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGludGVuJyxcbiAgICAgICAgICAgIE0gOiAnc2V3dWxhbicsXG4gICAgICAgICAgICBNTSA6ICclZCB3dWxhbicsXG4gICAgICAgICAgICB5IDogJ3NldGF1bicsXG4gICAgICAgICAgICB5eSA6ICclZCB0YXVuJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBqdjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIGthID0gbW9tZW50LmRlZmluZUxvY2FsZSgna2EnLCB7XG4gICAgICAgIG1vbnRocyA6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICfhg5jhg5Dhg5zhg5Xhg5Dhg6Dhg5hf4YOX4YOU4YOR4YOU4YOg4YOV4YOQ4YOa4YOYX+GDm+GDkOGDoOGDouGDmF/hg5Dhg57hg6Dhg5jhg5rhg5hf4YOb4YOQ4YOY4YOh4YOYX+GDmOGDleGDnOGDmOGDoeGDmF/hg5jhg5Xhg5rhg5jhg6Hhg5hf4YOQ4YOS4YOV4YOY4YOh4YOi4YOdX+GDoeGDlOGDpeGDouGDlOGDm+GDkeGDlOGDoOGDmF/hg53hg6Xhg6Lhg53hg5vhg5Hhg5Thg6Dhg5hf4YOc4YOd4YOU4YOb4YOR4YOU4YOg4YOYX+GDk+GDlOGDmeGDlOGDm+GDkeGDlOGDoOGDmCcuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgIGZvcm1hdDogJ+GDmOGDkOGDnOGDleGDkOGDoOGDoV/hg5fhg5Thg5Hhg5Thg6Dhg5Xhg5Dhg5rhg6Ff4YOb4YOQ4YOg4YOi4YOhX+GDkOGDnuGDoOGDmOGDmuGDmOGDoV/hg5vhg5Dhg5jhg6Hhg6Ff4YOY4YOV4YOc4YOY4YOh4YOhX+GDmOGDleGDmuGDmOGDoeGDoV/hg5Dhg5Lhg5Xhg5jhg6Hhg6Lhg6Ff4YOh4YOU4YOl4YOi4YOU4YOb4YOR4YOU4YOg4YOhX+GDneGDpeGDouGDneGDm+GDkeGDlOGDoOGDoV/hg5zhg53hg5Thg5vhg5Hhg5Thg6Dhg6Ff4YOT4YOU4YOZ4YOU4YOb4YOR4YOU4YOg4YOhJy5zcGxpdCgnXycpXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ+GDmOGDkOGDnF/hg5fhg5Thg5Ff4YOb4YOQ4YOgX+GDkOGDnuGDoF/hg5vhg5Dhg5hf4YOY4YOV4YOcX+GDmOGDleGDml/hg5Dhg5Lhg5Vf4YOh4YOU4YOlX+GDneGDpeGDol/hg5zhg53hg5Rf4YOT4YOU4YOZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICfhg5nhg5Xhg5jhg6Dhg5Bf4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDmF/hg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDmF/hg6jhg5Dhg5Hhg5Dhg5fhg5gnLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBmb3JtYXQ6ICfhg5nhg5Xhg5jhg6Dhg5Dhg6Ff4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDoV/hg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg6Ff4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDoV/hg6jhg5Dhg5Hhg5Dhg5fhg6EnLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBpc0Zvcm1hdDogLyjhg6zhg5jhg5zhg5B84YOo4YOU4YOb4YOT4YOU4YOSKS9cbiAgICAgICAgfSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfhg5nhg5Xhg5hf4YOd4YOg4YOoX+GDoeGDkOGDm1/hg53hg5fhg65f4YOu4YOj4YOXX+GDnuGDkOGDoF/hg6jhg5Dhg5EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ+GDmeGDlV/hg53hg6Bf4YOh4YOQX+GDneGDl1/hg67hg6Nf4YOe4YOQX+GDqOGDkCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTIDogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vhg5Phg6bhg5Thg6FdIExUWy3hg5bhg5RdJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW+GDruGDleGDkOGDml0gTFRbLeGDluGDlF0nLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb4YOS4YOj4YOo4YOY4YOcXSBMVFst4YOW4YOUXScsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdb4YOo4YOU4YOb4YOT4YOU4YOSXSBkZGRkIExUWy3hg5bhg5RdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vhg6zhg5jhg5zhg5BdIGRkZGQgTFQt4YOW4YOUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgvKOGDrOGDkOGDm+GDmHzhg6zhg6Phg5fhg5h84YOh4YOQ4YOQ4YOX4YOYfOGDrOGDlOGDmuGDmCkvKS50ZXN0KHMpID9cbiAgICAgICAgICAgICAgICAgICAgcy5yZXBsYWNlKC/hg5gkLywgJ+GDqOGDmCcpIDpcbiAgICAgICAgICAgICAgICAgICAgcyArICfhg6jhg5gnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgI
33378HBhc3QgOiBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICAgIGlmICgoLyjhg6zhg5Dhg5vhg5h84YOs4YOj4YOX4YOYfOGDoeGDkOGDkOGDl+GDmHzhg5Phg6bhg5R84YOX4YOV4YOUKS8pLnRlc3QocykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvKOGDmHzhg5QpJC8sICfhg5jhg6Eg4YOs4YOY4YOcJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoL+GDrOGDlOGDmuGDmC8pLnRlc3QocykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgv4YOs4YOU4YOa4YOYJC8sICfhg6zhg5rhg5jhg6Eg4YOs4YOY4YOcJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHMgOiAn4YOg4YOQ4YOb4YOT4YOU4YOc4YOY4YOb4YOUIOGDrOGDkOGDm+GDmCcsXG4gICAgICAgICAgICBzcyA6ICclZCDhg6zhg5Dhg5vhg5gnLFxuICAgICAgICAgICAgbSA6ICfhg6zhg6Phg5fhg5gnLFxuICAgICAgICAgICAgbW0gOiAnJWQg4YOs4YOj4YOX4YOYJyxcbiAgICAgICAgICAgIGggOiAn4YOh4YOQ4YOQ4YOX4YOYJyxcbiAgICAgICAgICAgIGhoIDogJyVkIOGDoeGDkOGDkOGDl+GDmCcsXG4gICAgICAgICAgICBkIDogJ+GDk+GDpuGDlCcsXG4gICAgICAgICAgICBkZCA6ICclZCDhg5Phg6bhg5QnLFxuICAgICAgICAgICAgTSA6ICfhg5fhg5Xhg5QnLFxuICAgICAgICAgICAgTU0gOiAnJWQg4YOX4YOV4YOUJyxcbiAgICAgICAgICAgIHkgOiAn4YOs4YOU4YOa4YOYJyxcbiAgICAgICAgICAgIHl5IDogJyVkIOGDrOGDlOGDmuGDmCdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogLzB8MS3hg5rhg5h84YOb4YOULVxcZHsxLDJ9fFxcZHsxLDJ9LeGDlC8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3hg5rhg5gnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChudW1iZXIgPCAyMCkgfHwgKG51bWJlciA8PSAxMDAgJiYgKG51bWJlciAlIDIwID09PSAwKSkgfHwgKG51bWJlciAlIDEwMCA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+GDm+GDlC0nICsgbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct4YOUJztcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsXG4gICAgICAgICAgICBkb3kgOiA3XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBrYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAwOiAnLdGI0ZYnLFxuICAgICAgICAxOiAnLdGI0ZYnLFxuICAgICAgICAyOiAnLdGI0ZYnLFxuICAgICAgICAzOiAnLdGI0ZYnLFxuICAgICAgICA0OiAnLdGI0ZYnLFxuICAgICAgICA1OiAnLdGI0ZYnLFxuICAgICAgICA2OiAnLdGI0YsnLFxuICAgICAgICA3OiAnLdGI0ZYnLFxuICAgICAgICA4OiAnLdGI0ZYnLFxuICAgICAgICA5OiAnLdGI0YsnLFxuICAgICAgICAxMDogJy3RiNGLJyxcbiAgICAgICAgMjA6ICct0YjRiycsXG4gICAgICAgIDMwOiAnLdGI0YsnLFxuICAgICAgICA0MDogJy3RiNGLJyxcbiAgICAgICAgNTA6ICct0YjRlicsXG4gICAgICAgIDYwOiAnLdGI0YsnLFxuICAgICAgICA3MDogJy3RiNGWJyxcbiAgICAgICAgODA6ICct0YjRlicsXG4gICAgICAgIDkwOiAnLdGI0YsnLFxuICAgICAgICAxMDA6ICct0YjRlidcbiAgICB9O1xuXG4gICAgdmFyIGtrID0gbW9tZW50LmRlZmluZUxvY2FsZSgna2snLCB7XG4gICAgICAgIG1vbnRocyA6ICfSm9Cw0qPRgtCw0YBf0LDSm9C/0LDQvV/QvdCw0YPRgNGL0Ldf0YHTmdGD0ZbRgF/QvNCw0LzRi9GAX9C80LDRg9GB0YvQvF/RiNGW0LvQtNC1X9GC0LDQvNGL0Ldf0pvRi9GA0LrSr9C50LXQul/Sm9Cw0LfQsNC9X9Kb0LDRgNCw0YjQsF/QttC10LvRgtC+0pvRgdCw0L0nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ9Kb0LDSo1/QsNKb0L9f0L3QsNGDX9GB05nRg1/QvNCw0Lxf0LzQsNGDX9GI0ZbQu1/RgtCw0Lxf0pvRi9GAX9Kb0LDQt1/Sm9Cw0YBf0LbQtdC7Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfQttC10LrRgdC10L3QsdGWX9C00q/QudGB0LXQvdCx0ZZf0YHQtdC50YHQtdC90LHRll/RgdOZ0YDRgdC10L3QsdGWX9Cx0LXQudGB0LXQvdCx0ZZf0LbSsdC80LBf0YHQtdC90LHRlicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfQttC10Lpf0LTSr9C5X9GB0LXQuV/RgdOZ0YBf0LHQtdC5X9C20rHQvF/RgdC10L0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9C20Lpf0LTQuV/RgdC5X9GB0YBf0LHQuV/QttC8X9GB0L0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vQkdKv0LPRltC9INGB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW9CV0YDRgtC10qMg0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBb0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb0JrQtdGI0LUg0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW9Oo0YLQutC10L0g0LDQv9GC0LDQvdGL0qNdIGRkZGQgW9GB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgI
33378HNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyDRltGI0ZbQvdC00LUnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDQsdKx0YDRi9C9JyxcbiAgICAgICAgICAgIHMgOiAn0LHRltGA0L3QtdGI0LUg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIHNzIDogJyVkINGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBtIDogJ9Cx0ZbRgCDQvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIG1tIDogJyVkINC80LjQvdGD0YInLFxuICAgICAgICAgICAgaCA6ICfQsdGW0YAg0YHQsNKT0LDRgicsXG4gICAgICAgICAgICBoaCA6ICclZCDRgdCw0pPQsNGCJyxcbiAgICAgICAgICAgIGQgOiAn0LHRltGAINC60q/QvScsXG4gICAgICAgICAgICBkZCA6ICclZCDQutKv0L0nLFxuICAgICAgICAgICAgTSA6ICfQsdGW0YAg0LDQuScsXG4gICAgICAgICAgICBNTSA6ICclZCDQsNC5JyxcbiAgICAgICAgICAgIHkgOiAn0LHRltGAINC20YvQuycsXG4gICAgICAgICAgICB5eSA6ICclZCDQttGL0LsnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YjRlnzRiNGLKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGIgPSBudW1iZXIgPj0gMTAwID8gMTAwIDogbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbbnVtYmVyXSB8fCBzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGtrO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAnMSc6ICfhn6EnLFxuICAgICAgICAnMic6ICfhn6InLFxuICAgICAgICAnMyc6ICfhn6MnLFxuICAgICAgICAnNCc6ICfhn6QnLFxuICAgICAgICAnNSc6ICfhn6UnLFxuICAgICAgICAnNic6ICfhn6YnLFxuICAgICAgICAnNyc6ICfhn6cnLFxuICAgICAgICAnOCc6ICfhn6gnLFxuICAgICAgICAnOSc6ICfhn6knLFxuICAgICAgICAnMCc6ICfhn6AnXG4gICAgfSwgbnVtYmVyTWFwID0ge1xuICAgICAgICAn4Z+hJzogJzEnLFxuICAgICAgICAn4Z+iJzogJzInLFxuICAgICAgICAn4Z+jJzogJzMnLFxuICAgICAgICAn4Z+kJzogJzQnLFxuICAgICAgICAn4Z+lJzogJzUnLFxuICAgICAgICAn4Z+mJzogJzYnLFxuICAgICAgICAn4Z+nJzogJzcnLFxuICAgICAgICAn4Z+oJzogJzgnLFxuICAgICAgICAn4Z+pJzogJzknLFxuICAgICAgICAn4Z+gJzogJzAnXG4gICAgfTtcblxuICAgIHZhciBrbSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ttJywge1xuICAgICAgICBtb250aHM6ICfhnpjhnoDhnprhnrZf4Z6A4Z674Z6Y4Z+S4Z6X4Z+IX+GemOGeuOGek+Getl/hnpjhn4Hhnp/hnrZf4Z6n4Z6f4Z6X4Z62X+GemOGet+GekOGeu+Gek+Getl/hnoDhnoDhn5LhnoDhnorhnrZf4Z6f4Z644Z6g4Z62X+GegOGeieGfkuGeieGetl/hno/hnrvhnpvhnrZf4Z6c4Z634Z6F4Z+S4Z6G4Z634Z6A4Z62X+GekuGfkuGek+GevCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfhnpjhnoDhnprhnrZf4Z6A4Z674Z6Y4Z+S4Z6X4Z+IX+GemOGeuOGek+Getl/hnpjhn4Hhnp/hnrZf4Z6n4Z6f4Z6X4Z62X+GemOGet+GekOGeu+Gek+Getl/hnoDhnoDhn5LhnoDhnorhnrZf4Z6f4Z644Z6g4Z62X+GegOGeieGfkuGeieGetl/hno/hnrvhnpvhnrZf4Z6c4Z634Z6F4Z+S4Z6G4Z634Z6A4Z62X+GekuGfkuGek+GevCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfhnqLhnrbhnpHhnrfhno/hn5Lhnplf4Z6F4Z+Q4Z6T4Z+S4Z6RX+GeouGehOGfkuGeguGetuGeml/hnpbhnrvhnpJf4Z6W4Z+S4Z6a4Z6g4Z6f4Z+S4Z6U4Z6P4Z634Z+NX+Gen+Geu+GegOGfkuGeml/hnp/hn4Xhnprhn40nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfhnqLhnrZf4Z6FX+Geol/hnpZf4Z6W4Z+S4Z6aX+Gen+Geu1/hnp8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4Z6i4Z62X+GehV/hnqJf4Z6WX+GeluGfkuGeml/hnp/hnrtf4Z6fJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4Z6W4Z+S4Z6a4Z654Z6AfOGem+GfkuGehOGetuGehS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4Z6b4Z+S4Z6E4Z624Z6FJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+GeluGfkuGemuGeueGegCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgI
33378HJldHVybiAn4Z6b4Z+S4Z6E4Z624Z6FJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4Z6Q4Z+S4Z6E4Z+D4Z6T4Z+B4Z+HIOGemOGfieGfhOGehF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vhnp/hn5LhnqLhn4LhnoAg4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW+GemOGfieGfhOGehF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vhnpjhn5Lhnp/hnrfhnpvhnpjhnrfhnokg4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW+Gen+GelOGfkuGej+GetuGeoOGfjeGemOGeu+Gek10gW+GemOGfieGfhOGehF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz4Z6R4Z+A4Z6PJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+GemOGeu+GekycsXG4gICAgICAgICAgICBzOiAn4Z6U4Z+J4Z674Z6T4Z+S4Z6Y4Z624Z6T4Z6c4Z634Z6T4Z624Z6R4Z64JyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Z6c4Z634Z6T4Z624Z6R4Z64JyxcbiAgICAgICAgICAgIG06ICfhnpjhnr3hnpnhnpPhnrbhnpHhnrgnLFxuICAgICAgICAgICAgbW06ICclZCDhnpPhnrbhnpHhnrgnLFxuICAgICAgICAgICAgaDogJ+GemOGeveGemeGemOGfieGfhOGehCcsXG4gICAgICAgICAgICBoaDogJyVkIOGemOGfieGfhOGehCcsXG4gICAgICAgICAgICBkOiAn4Z6Y4Z694Z6Z4Z6Q4Z+S4Z6E4Z+DJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Z6Q4Z+S4Z6E4Z+DJyxcbiAgICAgICAgICAgIE06ICfhnpjhnr3hnpnhnoHhn4InLFxuICAgICAgICAgICAgTU06ICclZCDhnoHhn4InLFxuICAgICAgICAgICAgeTogJ+GemOGeveGemeGehuGfkuGek+GetuGfhicsXG4gICAgICAgICAgICB5eTogJyVkIOGehuGfkuGek+GetuGfhidcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZSA6IC/hnpHhnrhcXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWwgOiAn4Z6R4Z64JWQnLFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Z+h4Z+i4Z+j4Z+k4Z+l4Z+m4Z+n4Z+o4Z+p4Z+gXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0IC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGttO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAnMSc6ICfgs6cnLFxuICAgICAgICAnMic6ICfgs6gnLFxuICAgICAgICAnMyc6ICfgs6knLFxuICAgICAgICAnNCc6ICfgs6onLFxuICAgICAgICAnNSc6ICfgs6snLFxuICAgICAgICAnNic6ICfgs6wnLFxuICAgICAgICAnNyc6ICfgs60nLFxuICAgICAgICAnOCc6ICfgs64nLFxuICAgICAgICAnOSc6ICfgs68nLFxuICAgICAgICAnMCc6ICfgs6YnXG4gICAgfSxcbiAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICfgs6cnOiAnMScsXG4gICAgICAgICfgs6gnOiAnMicsXG4gICAgICAgICfgs6knOiAnMycsXG4gICAgICAgICfgs6onOiAnNCcsXG4gICAgICAgICfgs6snOiAnNScsXG4gICAgICAgICfgs6wnOiAnNicsXG4gICAgICAgICfgs60nOiAnNycsXG4gICAgICAgICfgs64nOiAnOCcsXG4gICAgICAgICfgs68nOiAnOScsXG4gICAgICAgICfgs6YnOiAnMCdcbiAgICB9O1xuXG4gICAgdmFyIGtuID0gbW9tZW50LmRlZmluZUxvY2FsZSgna24nLCB7XG4gICAgICAgIG1vbnRocyA6ICfgspzgsqjgsrXgsrDgsr9f4LKr4LOG4LKs4LON4LKw4LK14LKw4LK/X+CyruCyvuCysOCzjeCymuCzjV/gso/gsqrgs43gsrDgsr/gsrLgs41f4LKu4LOG4LOVX+CynOCzguCyqOCzjV/gspzgs4HgsrLgs4bgs5Zf4LKG4LKX4LK44LON4LKf4LONX+CyuOCzhuCyquCzjeCyn+CzhuCyguCyrOCysOCzjV/gsoXgspXgs43gsp/gs4bgs4Lgs5XgsqzgsrDgs41f4LKo4LK14LOG4LKC4LKs4LKw4LONX+CyoeCyv+CyuOCzhuCyguCyrOCysOCzjScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn4LKc4LKoX+Cyq+CzhuCyrOCzjeCysF/gsq7gsr7gsrDgs43gsprgs41f4LKP4LKq4LON4LKw4LK/4LKy4LONX+CyruCzhuCzlV/gspzgs4Lgsqjgs41f4LKc4LOB4LKy4LOG4LOWX+CyhuCyl+CyuOCzjeCyn+CzjV/gsrjgs4bgsqrgs43gsp/gs4bgsoJf4LKF4LKV4LON4LKf4LOG4LOC4LOVX+CyqOCyteCzhuCygl/gsqHgsr/gsrjgs4bgsoInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgI
33378HdlZWtkYXlzIDogJ+CyreCyvuCyqOCzgeCyteCyvuCysF/gsrjgs4bgs4Lgs5Xgsq7gsrXgsr7gsrBf4LKu4LKC4LKX4LKz4LK14LK+4LKwX+CyrOCzgeCyp+CyteCyvuCysF/gspfgs4HgsrDgs4HgsrXgsr7gsrBf4LK24LOB4LKV4LON4LKw4LK14LK+4LKwX+CytuCyqOCyv+CyteCyvuCysCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfgsq3gsr7gsqjgs4Ff4LK44LOG4LOC4LOV4LKuX+CyruCyguCyl+Cys1/gsqzgs4Hgsqdf4LKX4LOB4LKw4LOBX+CytuCzgeCyleCzjeCysF/gsrbgsqjgsr8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ+CyreCyvl/gsrjgs4bgs4Lgs5Vf4LKu4LKCX+CyrOCzgV/gspfgs4Ff4LK24LOBX+Cyticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdBIGg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW+Cyh+CyguCypuCzgV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb4LKo4LK+4LKz4LOGXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vgsqjgsr/gsqjgs43gsqjgs4ZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vgspXgs4bgs4Lgsqjgs4bgsq9dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyDgsqjgsoLgsqTgsrAnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDgsrngsr/gsoLgsqbgs4YnLFxuICAgICAgICAgICAgcyA6ICfgspXgs4bgsrLgsrXgs4Eg4LKV4LON4LK34LKj4LKX4LKz4LOBJyxcbiAgICAgICAgICAgIHNzIDogJyVkIOCyuOCzhuCyleCzhuCyguCyoeCzgeCyl+Cys+CzgScsXG4gICAgICAgICAgICBtIDogJ+CykuCyguCypuCzgSDgsqjgsr/gsq7gsr/gsrcnLFxuICAgICAgICAgICAgbW0gOiAnJWQg4LKo4LK/4LKu4LK/4LK3JyxcbiAgICAgICAgICAgIGggOiAn4LKS4LKC4LKm4LOBIOCyl+CyguCyn+CzhicsXG4gICAgICAgICAgICBoaCA6ICclZCDgspfgsoLgsp/gs4YnLFxuICAgICAgICAgICAgZCA6ICfgspLgsoLgsqbgs4Eg4LKm4LK/4LKoJyxcbiAgICAgICAgICAgIGRkIDogJyVkIOCypuCyv+CyqCcsXG4gICAgICAgICAgICBNIDogJ+CykuCyguCypuCzgSDgsqTgsr/gsoLgspfgsrPgs4EnLFxuICAgICAgICAgICAgTU0gOiAnJWQg4LKk4LK/4LKC4LKX4LKz4LOBJyxcbiAgICAgICAgICAgIHkgOiAn4LKS4LKC4LKm4LOBIOCyteCysOCzjeCytycsXG4gICAgICAgICAgICB5eSA6ICclZCDgsrXgsrDgs43gsrcnXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgs6fgs6jgs6ngs6rgs6vgs6zgs63gs67gs6/gs6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gsrDgsr7gsqTgs43gsrDgsr984LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGfOCyruCyp+CzjeCyr+CyvuCyueCzjeCyqHzgsrjgsoLgspzgs4YvLFxuICAgICAgICBtZXJpZGllbUhvdXIgOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4LKw4LK+4LKk4LON4LKw4LK/Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CyruCyp+CzjeCyr+CyvuCyueCzjeCyqCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LK44LKC4LKc4LOGJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsrDgsr7gsqTgs43gsrDgsr8nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CyrOCzhuCys+Cyv+Cyl+CzjeCyl+Czhic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LKu4LKn4LON4LKv4LK+4LK54LON4LKoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsrjgsoLgspzgs4YnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CysOCyvuCypOCzjeCysOCyvyc7XG4gICAgICAgICAgICB9XG4gICAgICAgI
33378H0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjgsqjgs4bgs5UpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn4LKo4LOG4LOVJztcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ga247XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBrbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2tvJywge1xuICAgICAgICBtb250aHMgOiAnMeyblF8y7JuUXzPsm5RfNOyblF817JuUXzbsm5RfN+yblF847JuUXznsm5RfMTDsm5RfMTHsm5RfMTLsm5QnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJzHsm5RfMuyblF8z7JuUXzTsm5RfNeyblF827JuUXzfsm5RfOOyblF857JuUXzEw7JuUXzEx7JuUXzEy7JuUJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfsnbzsmpTsnbxf7JuU7JqU7J28X+2ZlOyalOydvF/siJjsmpTsnbxf66qp7JqU7J28X+q4iOyalOydvF/thqDsmpTsnbwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn7J28X+yblF/tmZRf7IiYX+uqqV/quIhf7YagJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfsnbxf7JuUX+2ZlF/siJhf66qpX+q4iF/thqAnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdBIGg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdZWVlZLk1NLkRELicsXG4gICAgICAgICAgICBMTCA6ICdZWVlZ64WEIE1NTU0gROydvCcsXG4gICAgICAgICAgICBMTEwgOiAnWVlZWeuFhCBNTU1NIETsnbwgQSBoOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnWVlZWeuFhCBNTU1NIETsnbwgZGRkZCBBIGg6bW0nLFxuICAgICAgICAgICAgbCA6ICdZWVlZLk1NLkRELicsXG4gICAgICAgICAgICBsbCA6ICdZWVlZ64WEIE1NTU0gROydvCcsXG4gICAgICAgICAgICBsbGwgOiAnWVlZWeuFhCBNTU1NIETsnbwgQSBoOm1tJyxcbiAgICAgICAgICAgIGxsbGwgOiAnWVlZWeuFhCBNTU1NIETsnbwgZGRkZCBBIGg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICfsmKTripggTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICfrgrTsnbwgTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ+yWtOygnCBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICfsp4Drgpzso7wgZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMg7ZuEJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg7KCEJyxcbiAgICAgICAgICAgIHMgOiAn66qHIOy0iCcsXG4gICAgICAgICAgICBzcyA6ICclZOy0iCcsXG4gICAgICAgICAgICBtIDogJzHrtoQnLFxuICAgICAgICAgICAgbW0gOiAnJWTrtoQnLFxuICAgICAgICAgICAgaCA6ICftlZwg7Iuc6rCEJyxcbiAgICAgICAgICAgIGhoIDogJyVk7Iuc6rCEJyxcbiAgICAgICAgICAgIGQgOiAn7ZWY66OoJyxcbiAgICAgICAgICAgIGRkIDogJyVk7J28JyxcbiAgICAgICAgICAgIE0gOiAn7ZWcIOuLrCcsXG4gICAgICAgICAgICBNTSA6ICclZOuLrCcsXG4gICAgICAgICAgICB5IDogJ+ydvCDrhYQnLFxuICAgICAgICAgICAgeXkgOiAnJWTrhYQnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2UgOiAvXFxkezEsMn0o7J28fOyblHzso7wpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+ydvCc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn7JuUJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfso7wnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2UgOiAv7Jik7KCEfOyYpO2bhC8sXG4gICAgICAgIGlzUE0gOiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbiA9PT0gJ+yYpO2bhCc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCAxMiA/ICfsmKTsoIQnIDogJ+yYpO2bhCc7XG4gICAgICAgI
33378H1cbiAgICB9KTtcblxuICAgIHJldHVybiBrbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgJzEnOiAn2aEnLFxuICAgICAgICAnMic6ICfZoicsXG4gICAgICAgICczJzogJ9mjJyxcbiAgICAgICAgJzQnOiAn2aQnLFxuICAgICAgICAnNSc6ICfZpScsXG4gICAgICAgICc2JzogJ9mmJyxcbiAgICAgICAgJzcnOiAn2acnLFxuICAgICAgICAnOCc6ICfZqCcsXG4gICAgICAgICc5JzogJ9mpJyxcbiAgICAgICAgJzAnOiAn2aAnXG4gICAgfSwgbnVtYmVyTWFwID0ge1xuICAgICAgICAn2aEnOiAnMScsXG4gICAgICAgICfZoic6ICcyJyxcbiAgICAgICAgJ9mjJzogJzMnLFxuICAgICAgICAn2aQnOiAnNCcsXG4gICAgICAgICfZpSc6ICc1JyxcbiAgICAgICAgJ9mmJzogJzYnLFxuICAgICAgICAn2acnOiAnNycsXG4gICAgICAgICfZqCc6ICc4JyxcbiAgICAgICAgJ9mpJzogJzknLFxuICAgICAgICAn2aAnOiAnMCdcbiAgICB9LFxuICAgIG1vbnRocyA9IFtcbiAgICAgICAgJ9qp2KfZhtmI2YbbjCDYr9mI2YjbldmFJyxcbiAgICAgICAgJ9i02YjYqNin2KonLFxuICAgICAgICAn2KbYp9iy2KfYsScsXG4gICAgICAgICfZhtuM2LPYp9mGJyxcbiAgICAgICAgJ9im2KfbjNin2LEnLFxuICAgICAgICAn2K3ZiNiy25XbjNix2KfZhicsXG4gICAgICAgICfYqtuV2YXZhdmI2LInLFxuICAgICAgICAn2KbYp9ioJyxcbiAgICAgICAgJ9im25XbjNmE2YjZiNmEJyxcbiAgICAgICAgJ9iq2LTYsduM2YbbjCDbjNuV2YPbldmFJyxcbiAgICAgICAgJ9iq2LTYsduM2YbbjCDYr9mI2YjbldmFJyxcbiAgICAgICAgJ9mD2KfZhtmI2YbbjCDbjNuV2qnbldmFJ1xuICAgIF07XG5cblxuICAgIHZhciBrdSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2t1Jywge1xuICAgICAgICBtb250aHMgOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0IDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5cyA6ICfbjNmH4oCM2YPYtNmH4oCM2YXZhdmH4oCMX9iv2YjZiNi02YfigIzZhdmF2YfigIxf2LPbjti02YfigIzZhdmF2YfigIxf2obZiNin2LHYtNmH4oCM2YXZhdmH4oCMX9m+247Zhtis2LTZh+KAjNmF2YXZh+KAjF/Zh9mH4oCM24zZhtuMX9i02YfigIzZhdmF2YfigIwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn24zZh+KAjNmD2LTZh+KAjNmFX9iv2YjZiNi02YfigIzZhV/Ys9uO2LTZh+KAjNmFX9qG2YjYp9ix2LTZh+KAjNmFX9m+247Zhtis2LTZh+KAjNmFX9mH2YfigIzbjNmG24xf2LTZh+KAjNmF2YXZh+KAjCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn24xf2K9f2LNf2oZf2b5f2Ydf2LQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9im247ZiNin2LHZh+KAjHzYqNmH4oCM24zYp9mG24wvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAv2KbbjtmI2KfYsdmH4oCMLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYqNmH4oCM24zYp9mG24wnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9im247ZiNin2LHZh+KAjCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb2KbZh+KAjNmF2LHbhiDZg9in2KramNmF247YsV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb2KjZh+KAjNuM2KfZhtuMINmD2KfYqtqY2YXbjtixXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFvZg9in2KramNmF247YsV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb2K/ZiNuO2YbbjiDZg9in2KramNmF247YsV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBb2YPYp9iq2pjZhduO2LFdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfZhNmH4oCMICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMnLFxuICAgICAgICAgICAgcyA6ICfahtmH4oCM2YbYryDahtix2YPZh+KAjNuM2YfigIzZgycsXG4gICAgICAgICAgICBzcyA6ICfahtix2YPZh+KAjCAlZCcsXG4gICAgICAgICAgICBtIDogJ9uM2YfigIzZgyDYrtmI2YTZh+KAjNmDJyxcbiAgICAgICAgICAgIG1tIDogJyVkINiu2YjZhNmH4oCM2YMnLFxuICAgICAgICAgICAgaCA6ICfbjNmH4oCM2YMg2YPYp9iq2pjZhduO2LEnLFxuICAgICAgICAgICAgaGggOiAnJWQg2YPYp9iq2pjZhduO2LEnLFxuICAgICAgICAgICAgZCA6ICfbjNmH4oCM2YMg2pXbhtqYJyxcbiAgICAgICAgICAgIGRkIDogJyVkINqV24bamCcsXG4gICAgICAgICAgICBNIDogJ9uM2YfigIzZgyDZhdin2YbarycsXG4gICAgICAgICAgICBNTSA6ICclZCDZhdin2YbarycsXG4gICAgICAgICAgICB5IDogJ9uM2YfigIzZgyDYs9in2rUnLFxuICAgICAgICAgICAgeXkgOiAnJWQg2LPYp9q1J1xuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b2aHZotmj2aTZpdmm2afZqNmp2aBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgI
33378HJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSkucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KS5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDEyIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBrdTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAwOiAnLdGH0q8nLFxuICAgICAgICAxOiAnLdGH0LgnLFxuICAgICAgICAyOiAnLdGH0LgnLFxuICAgICAgICAzOiAnLdGH0q8nLFxuICAgICAgICA0OiAnLdGH0q8nLFxuICAgICAgICA1OiAnLdGH0LgnLFxuICAgICAgICA2OiAnLdGH0YsnLFxuICAgICAgICA3OiAnLdGH0LgnLFxuICAgICAgICA4OiAnLdGH0LgnLFxuICAgICAgICA5OiAnLdGH0YMnLFxuICAgICAgICAxMDogJy3Rh9GDJyxcbiAgICAgICAgMjA6ICct0YfRiycsXG4gICAgICAgIDMwOiAnLdGH0YMnLFxuICAgICAgICA0MDogJy3Rh9GLJyxcbiAgICAgICAgNTA6ICct0YfSrycsXG4gICAgICAgIDYwOiAnLdGH0YsnLFxuICAgICAgICA3MDogJy3Rh9C4JyxcbiAgICAgICAgODA6ICct0YfQuCcsXG4gICAgICAgIDkwOiAnLdGH0YMnLFxuICAgICAgICAxMDA6ICct0YfSrydcbiAgICB9O1xuXG4gICAgdmFyIGt5ID0gbW9tZW50LmRlZmluZUxvY2FsZSgna3knLCB7XG4gICAgICAgIG1vbnRocyA6ICfRj9C90LLQsNGA0Yxf0YTQtdCy0YDQsNC70Yxf0LzQsNGA0YJf0LDQv9GA0LXQu9GMX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YDRjF/QvtC60YLRj9Cx0YDRjF/QvdC+0Y/QsdGA0Yxf0LTQtdC60LDQsdGA0YwnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ9GP0L3Qsl/RhNC10LJf0LzQsNGA0YJf0LDQv9GAX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfQltC10LrRiNC10LzQsdC4X9CU0q/QudGI06nQvNCx0q9f0KjQtdC50YjQtdC80LHQuF/QqNCw0YDRiNC10LzQsdC4X9CR0LXQudGI0LXQvNCx0Lhf0JbRg9C80LBf0JjRiNC10LzQsdC4Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ9CW0LXQul/QlNKv0Llf0KjQtdC5X9Co0LDRgF/QkdC10Llf0JbRg9C8X9CY0YjQtScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn0JbQul/QlNC5X9Co0Llf0KjRgF/QkdC5X9CW0Lxf0JjRiCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW9CR0q/Qs9Kv0L0g0YHQsNCw0YJdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW9Ct0YDRgtC10qMg0YHQsNCw0YJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW9GB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vQmtC10YfRjdGNINGB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb06jRgtC606nQvSDQsNC/0YLQsNC90YvQvV0gZGRkZCBb0LrSr9C90q9dIFvRgdCw0LDRgl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVzINC40YfQuNC90LTQtScsXG4gICAgICAgICAgICBwYXN0IDogJyVzINC80YPRgNGD0L0nLFxuICAgICAgICAgICAgcyA6ICfQsdC40YDQvdC10YfQtSDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgc3MgOiAnJWQg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG0gOiAn0LHQuNGAINC80q/QvdOp0YInLFxuICAgICAgICAgICAgbW0gOiAnJWQg0LzSr9C906nRgicsXG4gICAgICAgICAgICBoIDogJ9Cx0LjRgCDRgdCw0LDRgicsXG4gICAgICAgICAgICBoaCA6ICclZCDRgdCw0LDRgicsXG4gICAgICAgICAgICBkIDogJ9Cx0LjRgCDQutKv0L0nLFxuICAgICAgICAgICAgZGQgOiAnJWQg0LrSr9C9JyxcbiAgICAgICAgICAgIE0gOiAn0LHQuNGAINCw0LknLFxuICAgICAgICAgICAgTU0gOiAnJWQg0LDQuScsXG4gICAgICAgICAgICB5IDogJ9Cx0LjRgCDQttGL0LsnLFxuICAgICAgICAgICAgeXkgOiAnJWQg0LbRi9C7J1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNGH0Lh80YfRi3zRh9KvfNGH0YMpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgI
33378HZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgYiA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1tudW1iZXJdIHx8IHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ga3k7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICAnbSc6IFsnZW5nIE1pbnV0dCcsICdlbmdlciBNaW51dHQnXSxcbiAgICAgICAgICAgICdoJzogWydlbmcgU3Rvbm4nLCAnZW5nZXIgU3Rvbm4nXSxcbiAgICAgICAgICAgICdkJzogWydlZW4gRGFnJywgJ2VuZ2VtIERhZyddLFxuICAgICAgICAgICAgJ00nOiBbJ2VlIE1vdW50JywgJ2VuZ2VtIE1vdW50J10sXG4gICAgICAgICAgICAneSc6IFsnZWUgSm9lcicsICdlbmdlbSBKb2VyJ11cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzRnV0dXJlVGltZShzdHJpbmcpIHtcbiAgICAgICAgdmFyIG51bWJlciA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YoJyAnKSk7XG4gICAgICAgIGlmIChlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuICdhICcgKyBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdhbiAnICsgc3RyaW5nO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzUGFzdFRpbWUoc3RyaW5nKSB7XG4gICAgICAgIHZhciBudW1iZXIgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKCcgJykpO1xuICAgICAgICBpZiAoZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiAndmlydSAnICsgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAndmlydW4gJyArIHN0cmluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB3b3JkIGJlZm9yZSB0aGUgZ2l2ZW4gbnVtYmVyIGxvc2VzIHRoZSAnLW4nIGVuZGluZy5cbiAgICAgKiBlLmcuICdhbiAxMCBEZWVnJyBidXQgJ2EgNSBEZWVnJ1xuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7aW50ZWdlcn1cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKSB7XG4gICAgICAgIG51bWJlciA9IHBhcnNlSW50KG51bWJlciwgMTApO1xuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyBOZWdhdGl2ZSBOdW1iZXIgLS0+IGFsd2F5cyB0cnVlXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCAxMCkge1xuICAgICAgICAgICAgLy8gT25seSAxIGRpZ2l0XG4gICAgICAgICAgICBpZiAoNCA8PSBudW1iZXIgJiYgbnVtYmVyIDw9IDcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCAxMDApIHtcbiAgICAgICAgICAgIC8vIDIgZGlnaXRzXG4gICAgICAgICAgICB2Y
33378XIgbGFzdERpZ2l0ID0gbnVtYmVyICUgMTAsIGZpcnN0RGlnaXQgPSBudW1iZXIgLyAxMDtcbiAgICAgICAgICAgIGlmIChsYXN0RGlnaXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKGZpcnN0RGlnaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihsYXN0RGlnaXQpO1xuICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDEwMDAwKSB7XG4gICAgICAgICAgICAvLyAzIG9yIDQgZGlnaXRzIC0tPiByZWN1cnNpdmVseSBjaGVjayBmaXJzdCBkaWdpdFxuICAgICAgICAgICAgd2hpbGUgKG51bWJlciA+PSAxMCkge1xuICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlciAvIDEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQW55dGhpbmcgbGFyZ2VyIHRoYW4gNCBkaWdpdHM6IHJlY3Vyc2l2ZWx5IGNoZWNrIGZpcnN0IG4tMyBkaWdpdHNcbiAgICAgICAgICAgIG51bWJlciA9IG51bWJlciAvIDEwMDA7XG4gICAgICAgICAgICByZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsYicsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyX0ZlYnJ1YXJfTcOkZXJ6X0FicsOrbGxfTWVlX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuLl9GZWJyLl9NcnouX0Fici5fTWVlX0p1bi5fSnVsLl9BdWcuX1NlcHQuX09rdC5fTm92Ll9EZXouJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdTb25uZGVnX03DqWluZGVnX0TDq25zY2hkZWdfTcOrdHR3b2NoX0Rvbm5lc2NoZGVnX0ZyZWlkZWdfU2Ftc2NoZGVnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU28uX03DqS5fRMOrLl9Nw6suX0RvLl9Gci5fU2EuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NvX03DqV9Ew6tfTcOrX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tIFtBdWVyXScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzIFtBdWVyXScsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGF1dCB1bV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTXVlciB1bV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt1bV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tHw6tzY2h0ZXIgdW1dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gRGlmZmVyZW50IGRhdGUgc3RyaW5nIGZvciAnRMOrbnNjaGRlZycgKFR1ZXNkYXkpIGFuZCAnRG9ubmVzY2hkZWcnIChUaHVyc2RheSkgZHVlIHRvIHBob25vbG9naWNhbCBydWxlXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbTGVzY2h0ZW5dIGRkZGQgW3VtXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tMZXNjaHRlXSBkZGRkIFt1bV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogcHJvY2Vzc0Z1dHVyZVRpbWUsXG4gICAgICAgICAgICBwYXN0IDogcHJvY2Vzc1Bhc3RUaW1lLFxuICAgICAgICAgICAgcyA6ICdlIHB1ZXIgU2Vrb25uZW4nLFxuICAgICAgICAgICAgc3MgOiAnJWQgU2Vrb25uZW4nLFxuICAgICAgICAgICAgbSA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbSA6ICclZCBNaW51dHRlbicsXG4gICAgICAgICAgICBoIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoIDogJyVkIFN0b25uZW4nLFxuICAgICAgICAgICAgZCA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZCA6ICclZCBEZWVnJyxcbiAgICAgICAgICAgIE0gOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU0gOiAnJWQgTcOpaW50JyxcbiAgICAgICAgICAgIHkgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXkgOiAnJWQgSm9lcidcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxiO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1
33378xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbG8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsbycsIHtcbiAgICAgICAgbW9udGhzIDogJ+C6oeC6seC6h+C6geC6reC6mV/guoHgurjguqHgup7gurJf4Lqh4Lq14LqZ4LqyX+C7gOC6oeC6quC6sl/gup7gurbgupTguqrgurDgup7gurJf4Lqh4Lq04LqW4Lq44LqZ4LqyX+C6geC7jeC6peC6sOC6geC6u+C6lF/guqrgurTguofguqvgurJf4LqB4Lqx4LqZ4LqN4LqyX+C6leC6uOC6peC6sl/gup7gurDguojgurTguoFf4LqX4Lqx4LqZ4Lqn4LqyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfguqHgurHguofguoHguq3guplf4LqB4Lq44Lqh4Lqe4LqyX+C6oeC6teC6meC6sl/gu4DguqHguqrgurJf4Lqe4Lq24LqU4Lqq4Lqw4Lqe4LqyX+C6oeC6tOC6luC6uOC6meC6sl/guoHgu43guqXgurDguoHgurvgupRf4Lqq4Lq04LqH4Lqr4LqyX+C6geC6seC6meC6jeC6sl/gupXgurjguqXgurJf4Lqe4Lqw4LqI4Lq04LqBX+C6l+C6seC6meC6p+C6sicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn4Lqt4Lqy4LqX4Lq04LqUX+C6iOC6seC6mV/guq3gurHguofguoTgurLguplf4Lqe4Lq44LqUX+C6nuC6sOC6q+C6seC6lF/guqrgurjguoFf4LuA4Lqq4Lq74LqyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ+C6l+C6tOC6lF/guojgurHguplf4Lqt4Lqx4LqH4LqE4Lqy4LqZX+C6nuC6uOC6lF/gup7gurDguqvgurHgupRf4Lqq4Lq44LqBX+C7gOC6quC6u+C6sicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn4LqXX+C6iF/guq3guoRf4LqeX+C6nuC6q1/guqrguoFf4LqqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAn4Lqn4Lqx4LqZZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+C6leC6reC6meC7gOC6iuC6u+C7ieC6snzgupXguq3gupngu4HguqXguocvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+C6leC6reC6meC7geC6peC6hyc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LqV4Lqt4LqZ4LuA4LqK4Lq74LuJ4LqyJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgupXguq3gupngu4HguqXguocnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW+C6oeC6t+C7ieC6meC6teC7ieC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb4Lqh4Lq34LuJ4Lqt4Lq34LuI4LqZ4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdb4Lqn4Lqx4LqZXWRkZGRb4Luc4LuJ4Lqy4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vguqHgurfgu4nguqfgurLgupngupngurXgu4ngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vguqfgurHgupldZGRkZFvgu4HguqXgu4nguqfgupngurXgu4ngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfguq3gurXguoEgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclc+C6nOC7iOC6suC6meC6oeC6sicsXG4gICAgICAgICAgICBzIDogJ+C6muC7jeC7iOC7gOC6l+C6u+C7iOC6suC7g+C6lOC6p+C6tOC6meC6suC6l+C6tScsXG4gICAgICAgICAgICBzcyA6ICclZCDguqfgurTgupngurLgupfgurUnICxcbiAgICAgICAgICAgIG0gOiAnMSDgupngurLgupfgurUnLFxuICAgICAgICAgICAgbW0gOiAnJWQg4LqZ4Lqy4LqX4Lq1JyxcbiAgICAgICAgICAgIGggOiAnMSDguorgurvgu4jguqfgu4LguqHguocnLFxuICAgICAgICAgICAgaGggOiAnJWQg4LqK4Lq74LuI4Lqn4LuC4Lqh4LqHJyxcbiAgICAgICAgICAgIGQgOiAnMSDguqHgurfgu4knLFxuICAgICAgICAgICAgZGQgOiAnJWQg4Lqh4Lq34LuJJyxcbiAgICAgICAgICAgIE0gOiAnMSDgu4DgupTgurfguq3gupknLFxuICAgICAgICAgICAgTU0gOiAnJWQg4LuA4LqU4Lq34Lqt4LqZJyxcbiAgICAgICAgICAgIHkgOiAnMSDgupvgurUnLFxuICAgICAgICAgICAgeXkgOiAnJWQg4Lqb4Lq1J1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvKOC6l+C6teC7iClcXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+C6l+C6teC7iCcgKyBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHVuaXRzID0ge1xuICAgICAgICAnc3MnIDogJ3Nla3VuZMSXX3Nla3VuZMW+acWzX3Nla3VuZGVzJyxcbiAgICAgICAgJ20nIDogJ21pbnV0xJdfbWludXTEl3NfbWludXTEmScsXG4gICAgICAgICdtbSc6ICdtaW51dMSXc19taW51xI1pxbNfbWludXRlcycsXG4gICAgICAgICdoJyA6ICd2YWxhbmRhX3ZhbGFuZG9zX3ZhbGFuZMSFJyxcbiAgICAgICAgJ2hoJzogJ3ZhbGFuZG9zX3ZhbGFuZMWzX3ZhbGFuZGFzJyxcbiAgICAgICAgJ2QnIDogJ2RpZW5hX2RpZW5vc19kaWVuxIUnLFxuICAgICAgICAnZGQnOiAnZGllbm9zX2RpZW7Fs19kaWVuYXMnLFxuICAgICAgICAnTScgOiAnbcSXbnVvX23El25lc2lvX23El25lc8SvJyxcbiAgICAgICAgJ01NJzogJ23El25lc2lhaV9txJduZXN
33378pxbNfbcSXbmVzaXVzJyxcbiAgICAgICAgJ3knIDogJ21ldGFpX21ldMWzX21ldHVzJyxcbiAgICAgICAgJ3l5JzogJ21ldGFpX21ldMWzX21ldHVzJ1xuICAgIH07XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlU2Vjb25kcyhudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiAna2VsaW9zIHNla3VuZMSXcyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAna2VsacWzIHNla3VuZMW+acWzJyA6ICdrZWxpYXMgc2VrdW5kZXMnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZVNpbmd1bGFyKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1zKGtleSlbMF0gOiAoaXNGdXR1cmUgPyBmb3JtcyhrZXkpWzFdIDogZm9ybXMoa2V5KVsyXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNwZWNpYWwobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgJSAxMCA9PT0gMCB8fCAobnVtYmVyID4gMTAgJiYgbnVtYmVyIDwgMjApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmb3JtcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuIHVuaXRzW2tleV0uc3BsaXQoJ18nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgdHJhbnNsYXRlU2luZ3VsYXIobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXlbMF0sIGlzRnV0dXJlKTtcbiAgICAgICAgfSBlbHNlIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHNwZWNpYWwobnVtYmVyKSA/IGZvcm1zKGtleSlbMV0gOiBmb3JtcyhrZXkpWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBmb3JtcyhrZXkpWzFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHNwZWNpYWwobnVtYmVyKSA/IGZvcm1zKGtleSlbMV0gOiBmb3JtcyhrZXkpWzJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgbHQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsdCcsIHtcbiAgICAgICAgbW9udGhzIDoge1xuICAgICAgICAgICAgZm9ybWF0OiAnc2F1c2lvX3Zhc2FyaW9fa292b19iYWxhbmTFvmlvX2dlZ3XFvsSXc19iaXLFvmVsaW9fbGllcG9zX3J1Z3BqxavEjWlvX3J1Z3PEl2pvX3NwYWxpb19sYXBrcmnEjWlvX2dydW9kxb5pbycuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICdzYXVzaXNfdmFzYXJpc19rb3Zhc19iYWxhbmRpc19nZWd1xb7El19iaXLFvmVsaXNfbGllcGFfcnVncGrFq3Rpc19ydWdzxJdqaXNfc3BhbGlzX2xhcGtyaXRpc19ncnVvZGlzJy5zcGxpdCgnXycpLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/fE1NTU0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStEW29EXT8vXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ3NhdV92YXNfa292X2JhbF9nZWdfYmlyX2xpZV9yZ3BfcmdzX3NwYV9sYXBfZ3JkJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ3Nla21hZGllbsSvX3Bpcm1hZGllbsSvX2FudHJhZGllbsSvX3RyZcSNaWFkaWVuxK9fa2V0dmlydGFkaWVuxK9fcGVua3RhZGllbsSvX8WhZcWhdGFkaWVuxK8nLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBzdGFuZGFsb25lOiAnc2VrbWFkaWVuaXNfcGlybWFkaWVuaXNfYW50cmFkaWVuaXNfdHJlxI1pYWRpZW5pc19rZXR2aXJ0YWRpZW5pc19wZW5rdGFkaWVuaXNfxaFlxaF0YWRpZW5pcycuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvZGRkZCBISDptbS9cbiAgICAgICAgfSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdTZWtfUGlyX0FudF9UcmVfS2V0X1Blbl/FoGXFoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU19QX0FfVF9LX1BuX8WgJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEwgOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dJyxcbiAgICAgICAgICAgIExMTCA6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXScsXG4gICAgICAgICAgICBMTExMIDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkZCwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgICAgIGwgOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBsbCA6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0nLFxuICAgICAgICAgICAgbGxsIDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgICAgIGxsbGwgOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGQsIEhIOm1tIFt2YWwuXSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vFoGlhbmRpZW5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW1J5dG9qXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW1Zha2FyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbUHJhxJdqdXPEr10gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAncG8gJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICdwcmllxaEgJXMnLFxuICAgICAgICAgICAgcyA6IHRyYW5zbGF0ZVNlY29uZHMsXG4gICAgICAgICAgICBzcyA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG0gOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIG1tIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaCA6IHRyYW5zbGF0ZVNpbmd1bGFyLFxuICAgICAgICAgICAgaGggOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkIDogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgICAgICBkZCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE0gOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIE1NIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeSA6IHRyYW5zbGF0ZVNpbmd1bGFyLFxuICAgICAgICAgICAgeXkgOiB0cmFuc2xhdGVcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LW9qaS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy1vamknO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgI
33378H1cbiAgICB9KTtcblxuICAgIHJldHVybiBsdDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHVuaXRzID0ge1xuICAgICAgICAnc3MnOiAnc2VrdW5kZXNfc2VrdW5kxJNtX3Nla3VuZGVfc2VrdW5kZXMnLnNwbGl0KCdfJyksXG4gICAgICAgICdtJzogJ21pbsWrdGVzX21pbsWrdMSTbV9taW7Fq3RlX21pbsWrdGVzJy5zcGxpdCgnXycpLFxuICAgICAgICAnbW0nOiAnbWluxat0ZXNfbWluxat0xJNtX21pbsWrdGVfbWluxat0ZXMnLnNwbGl0KCdfJyksXG4gICAgICAgICdoJzogJ3N0dW5kYXNfc3R1bmTEgW1fc3R1bmRhX3N0dW5kYXMnLnNwbGl0KCdfJyksXG4gICAgICAgICdoaCc6ICdzdHVuZGFzX3N0dW5kxIFtX3N0dW5kYV9zdHVuZGFzJy5zcGxpdCgnXycpLFxuICAgICAgICAnZCc6ICdkaWVuYXNfZGllbsSBbV9kaWVuYV9kaWVuYXMnLnNwbGl0KCdfJyksXG4gICAgICAgICdkZCc6ICdkaWVuYXNfZGllbsSBbV9kaWVuYV9kaWVuYXMnLnNwbGl0KCdfJyksXG4gICAgICAgICdNJzogJ23Ek25lxaFhX23Ek25lxaFpZW1fbcSTbmVzaXNfbcSTbmXFoWknLnNwbGl0KCdfJyksXG4gICAgICAgICdNTSc6ICdtxJNuZcWhYV9txJNuZcWhaWVtX23Ek25lc2lzX23Ek25lxaFpJy5zcGxpdCgnXycpLFxuICAgICAgICAneSc6ICdnYWRhX2dhZGllbV9nYWRzX2dhZGknLnNwbGl0KCdfJyksXG4gICAgICAgICd5eSc6ICdnYWRhX2dhZGllbV9nYWRzX2dhZGknLnNwbGl0KCdfJylcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB3aXRob3V0U3VmZml4IGJvb2xlYW4gdHJ1ZSA9IGEgbGVuZ3RoIG9mIHRpbWU7IGZhbHNlID0gYmVmb3JlL2FmdGVyIGEgcGVyaW9kIG9mIHRpbWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9ybWF0KGZvcm1zLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIC8vIEUuZy4gXCIyMSBtaW7Fq3RlXCIsIFwiMyBtaW7Fq3Rlc1wiLlxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAxICYmIG51bWJlciAlIDEwMCAhPT0gMTEgPyBmb3Jtc1syXSA6IGZvcm1zWzNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRS5nLiBcIjIxIG1pbsWrdGVzXCIgYXMgaW4gXCJwxJNjIDIxIG1pbsWrdGVzXCIuXG4gICAgICAgICAgICAvLyBFLmcuIFwiMyBtaW7Fq3TEk21cIiBhcyBpbiBcInDEk2MgMyBtaW7Fq3TEk21cIi5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgJSAxMCA9PT0gMSAmJiBudW1iZXIgJSAxMDAgIT09IDExID8gZm9ybXNbMF0gOiBmb3Jtc1sxXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBmb3JtYXQodW5pdHNba2V5XSwgbnVtYmVyLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodW5pdHNba2V5XSwgbnVtYmVyLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVTZWNvbmRzKG51bWJlciwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdkYcW+YXMgc2VrdW5kZXMnIDogJ2Rhxb7EgW0gc2VrdW5kxJNtJztcbiAgICB9XG5cbiAgICB2YXIgbHYgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsdicsIHtcbiAgICAgICAgbW9udGhzIDogJ2phbnbEgXJpc19mZWJydcSBcmlzX21hcnRzX2FwcsSrbGlzX21haWpzX2rFq25panNfasWrbGlqc19hdWd1c3RzX3NlcHRlbWJyaXNfb2t0b2JyaXNfbm92ZW1icmlzX2RlY2VtYnJpcycuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnamFuX2ZlYl9tYXJfYXByX21haV9qxatuX2rFq2xfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnc3bEk3RkaWVuYV9waXJtZGllbmFfb3RyZGllbmFfdHJlxaFkaWVuYV9jZXR1cnRkaWVuYV9waWVrdGRpZW5hX3Nlc3RkaWVuYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdTdl9QX09fVF9DX1BrX1MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ1N2X1BfT19UX0NfUGtfUycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZLicsXG4gICAgICAgICAgICBMTCA6ICdZWVlZLiBbZ2FkYV0gRC4gTU1NTScsXG4gICAgICAgICAgICBMTEwgOiAnWVlZWS4gW2dhZGFdIEQuIE1NTU0sIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnWVlZWS4gW2dhZGFdIEQuIE1NTU0sIGRkZGQsIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW8Wgb2RpZW4gcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW1LEq3QgcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW3B1bGtzdGVuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tWYWthciBwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW1BhZ8SBanXFocSBXSBkZGRkIFtwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW
333781lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ3DEk2MgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICdwaXJtcyAlcycsXG4gICAgICAgICAgICBzIDogcmVsYXRpdmVTZWNvbmRzLFxuICAgICAgICAgICAgc3MgOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbSA6IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIG1tIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGggOiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsXG4gICAgICAgICAgICBoaCA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkIDogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgZGQgOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTSA6IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIE1NIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHkgOiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsXG4gICAgICAgICAgICB5eSA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbCA6ICclZC4nLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsdjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHRyYW5zbGF0b3IgPSB7XG4gICAgICAgIHdvcmRzOiB7IC8vRGlmZmVyZW50IGdyYW1tYXRpY2FsIGNhc2VzXG4gICAgICAgICAgICBzczogWydzZWt1bmQnLCAnc2VrdW5kYScsICdzZWt1bmRpJ10sXG4gICAgICAgICAgICBtOiBbJ2plZGFuIG1pbnV0JywgJ2plZG5vZyBtaW51dGEnXSxcbiAgICAgICAgICAgIG1tOiBbJ21pbnV0JywgJ21pbnV0YScsICdtaW51dGEnXSxcbiAgICAgICAgICAgIGg6IFsnamVkYW4gc2F0JywgJ2plZG5vZyBzYXRhJ10sXG4gICAgICAgICAgICBoaDogWydzYXQnLCAnc2F0YScsICdzYXRpJ10sXG4gICAgICAgICAgICBkZDogWydkYW4nLCAnZGFuYScsICdkYW5hJ10sXG4gICAgICAgICAgICBNTTogWydtamVzZWMnLCAnbWplc2VjYScsICdtamVzZWNpJ10sXG4gICAgICAgICAgICB5eTogWydnb2RpbmEnLCAnZ29kaW5lJywgJ2dvZGluYSddXG4gICAgICAgIH0sXG4gICAgICAgIGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6IGZ1bmN0aW9uIChudW1iZXIsIHdvcmRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgPT09IDEgPyB3b3JkS2V5WzBdIDogKG51bWJlciA+PSAyICYmIG51bWJlciA8PSA0ID8gd29yZEtleVsxXSA6IHdvcmRLZXlbMl0pO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICAgICAgdmFyIHdvcmRLZXkgPSB0cmFuc2xhdG9yLndvcmRzW2tleV07XG4gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gd29yZEtleVswXSA6IHdvcmRLZXlbMV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyB0cmFuc2xhdG9yLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UobnVtYmVyLCB3b3JkS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgbWUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtZScsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkYW5hcyB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3NqdXRyYSB1XSBMVCcsXG5cbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgI
33378HJldHVybiAnW3VdIFtuZWRqZWxqdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3NyaWplZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzdWJvdHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheSAgOiAnW2p1xI1lIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW25lZGplbGplXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbcG9uZWRqZWxqa2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFt1dG9ya2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3NyaWplZGVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFvEjWV0dnJ0a2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFtwZXRrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFdlZWtEYXlzW3RoaXMuZGF5KCldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0ICAgOiAncHJpamUgJXMnLFxuICAgICAgICAgICAgcyAgICAgIDogJ25la29saWtvIHNla3VuZGknLFxuICAgICAgICAgICAgc3MgICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtICAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaCAgICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoaCAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQgICAgICA6ICdkYW4nLFxuICAgICAgICAgICAgZGQgICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNICAgICAgOiAnbWplc2VjJyxcbiAgICAgICAgICAgIE1NICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeSAgICAgIDogJ2dvZGludScsXG4gICAgICAgICAgICB5eSAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbWkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtaScsIHtcbiAgICAgICAgbW9udGhzOiAnS29oaS10xIF0ZV9IdWktdGFuZ3VydV9Qb3V0xastdGUtcmFuZ2lfUGFlbmdhLXdoxIF3aMSBX0hhcmF0dWFfUGlwaXJpX0jFjW5nb2luZ29pX0hlcmUtdHVyaS1rxY1rxIFfTWFodXJ1X1doaXJpbmdhLcSBLW51a3VfV2hpcmluZ2EtxIEtcmFuZ2lfSGFraWhlYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdLb2hpX0h1aV9Qb3VfUGFlX0hhcmFfUGlwaV9IxY1uZ29pX0hlcmVfTWFodV9XaGktbnVfV2hpLXJhX0hha2knLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1JlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IC8oPzpbJ2EtelxcdTAxMDFcXHUwMTREXFx1MDE2Ql0rXFwtPyl7MSwzfS9pLFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogLyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDJ9L2ksXG4gICAgICAgIHdlZWtkYXlzOiAnUsSBdGFwdV9NYW5lX1TFq3JlaV9XZW5lcmVpX1TEgWl0ZV9QYXJhaXJlX0jEgXRhcmVpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnVGFfTWFfVMWrX1dlX1TEgWlfUGFfSMSBJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1RhX01hX1TFq19XZV9UxIFpX1BhX0jEgScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBbaV0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIFtpXSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgI
33378HNhbWVEYXk6ICdbaSB0ZWllIG1haGFuYSwgaV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1thcG9wbyBpXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2ldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbaW5hbmFoaSBpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3doYWthbXV0dW5nYSBpXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaSByb3RvIGkgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGkgbXVhJyxcbiAgICAgICAgICAgIHM6ICd0ZSBoxJNrb25hIHJ1YXJ1YScsXG4gICAgICAgICAgICBzczogJyVkIGjEk2tvbmEnLFxuICAgICAgICAgICAgbTogJ2hlIG1lbmV0aScsXG4gICAgICAgICAgICBtbTogJyVkIG1lbmV0aScsXG4gICAgICAgICAgICBoOiAndGUgaGFvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBoYW9yYScsXG4gICAgICAgICAgICBkOiAnaGUgcmEnLFxuICAgICAgICAgICAgZGQ6ICclZCByYScsXG4gICAgICAgICAgICBNOiAnaGUgbWFyYW1hJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWFyYW1hJyxcbiAgICAgICAgICAgIHk6ICdoZSB0YXUnLFxuICAgICAgICAgICAgeXk6ICclZCB0YXUnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtaTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG1rID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbWsnLCB7XG4gICAgICAgIG1vbnRocyA6ICfRmNCw0L3Rg9Cw0YDQuF/RhNC10LLRgNGD0LDRgNC4X9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNGYX9GY0YPQvdC4X9GY0YPQu9C4X9Cw0LLQs9GD0YHRgl/RgdC10L/RgtC10LzQstGA0Lhf0L7QutGC0L7QvNCy0YDQuF/QvdC+0LXQvNCy0YDQuF/QtNC10LrQtdC80LLRgNC4Jy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfRmNCw0L1f0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCzX9GB0LXQv1/QvtC60YJf0L3QvtC1X9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn0L3QtdC00LXQu9CwX9C/0L7QvdC10LTQtdC70L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00LBf0YfQtdGC0LLRgNGC0L7Qul/Qv9C10YLQvtC6X9GB0LDQsdC+0YLQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfQvdC10LRf0L/QvtC9X9Cy0YLQvl/RgdGA0LVf0YfQtdGCX9C/0LXRgl/RgdCw0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9C9ZV/Qv29f0LLRgl/RgdGAX9GH0LVf0L/QtV/RgWEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0QuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb0JTQtdC90LXRgSDQstC+XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vQo9GC0YDQtSDQstC+XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdb0JLQvl0gZGRkZCBb0LLQvl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb0JLRh9C10YDQsCDQstC+XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CY0LfQvNC40L3QsNGC0LDRgtCwXSBkZGRkIFvQstC+XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CY0LfQvNC40L3QsNGC0LjQvtGCXSBkZGRkIFvQstC+XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfQv9C+0YHQu9C1ICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAn0L/RgNC10LQgJXMnLFxuICAgICAgICAgICAgcyA6ICfQvdC10LrQvtC70LrRgyDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBzcyA6ICclZCDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBtIDogJ9C80LjQvdGD0YLQsCcsXG4gICAgICAgICAgICBtbSA6ICclZCDQvNC40L3Rg9GC0LgnLFxuICAgICAgICAgICAgaCA6ICfRh9Cw0YEnLFxuICAgICAgICAgICAgaGggOiAnJWQg0YfQsNGB0LAnLFxuICAgICAgICAgICAgZCA6ICfQtNC10L0nLFxuICAgICAgICAgICAgZGQgOiAnJWQg0LTQtdC90LAnLFxuICAgICAgICAgICAgTSA6ICfQvNC10YHQtdGGJyxcbiAgICAgICAgICAgIE1NIDogJyVkINC80LXRgdC10YbQuCcsXG4gICAgICAgICAgICB5IDogJ9Cz0L7QtNC40L3QsCcsXG4gICAgICAgICAgICB5eSA6ICclZCDQs9C+0LTQuNC90LgnXG4gICAgICAgI
33378H0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0LXQsnzQtdC9fNGC0Lh80LLQuHzRgNC4fNC80LgpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBsYXN0RGlnaXQgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBsYXN0MkRpZ2l0cyA9IG51bWJlciAlIDEwMDtcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdCyJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdC9JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPiAxMCAmJiBsYXN0MkRpZ2l0cyA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCy0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgNC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSA3IHx8IGxhc3REaWdpdCA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC80LgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgtC4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWs7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBtbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21sJywge1xuICAgICAgICBtb250aHMgOiAn4LSc4LSo4LWB4LS14LSw4LS/X+C0q+C1huC0rOC1jeC0sOC1geC0teC0sOC0v1/gtK7gtL7gtbzgtJrgtY3gtJrgtY1f4LSP4LSq4LWN4LSw4LS/4LW9X+C0ruC1h+C0r+C1jV/gtJzgtYLgtbpf4LSc4LWC4LSy4LWIX+C0k+C0l+C0uOC1jeC0seC1jeC0seC1jV/gtLjgtYbgtKrgtY3gtLHgtY3gtLHgtILgtKzgtbxf4LSS4LSV4LWN4LSf4LWL4LSs4LW8X+C0qOC0teC0guC0rOC1vF/gtKHgtL/gtLjgtILgtKzgtbwnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ+C0nOC0qOC1gS5f4LSr4LWG4LSs4LWN4LSw4LWBLl/gtK7gtL7gtbwuX+C0j+C0quC1jeC0sOC0vy5f4LSu4LWH4LSv4LWNX+C0nOC1guC1ul/gtJzgtYLgtLLgtYguX+C0k+C0ly5f4LS44LWG4LSq4LWN4LSx4LWN4LSxLl/gtJLgtJXgtY3gtJ/gtYsuX+C0qOC0teC0gi5f4LSh4LS/4LS44LSCLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ+C0nuC0vuC0r+C0seC0vuC0tOC1jeC0ml/gtKTgtL/gtJngtY3gtJXgtLPgtL7gtLTgtY3gtJpf4LSa4LWK4LS14LWN4LS14LS+4LS04LWN4LSaX+C0rOC1geC0p+C0qOC0vuC0tOC1jeC0ml/gtLXgtY3gtK/gtL7gtLTgtL7gtLTgtY3gtJpf4LS14LWG4LSz4LWN4LSz4LS/4LSv4LS+4LS04LWN4LSaX+C0tuC0qOC0v+C0r+C0vuC0tOC1jeC0micuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfgtJ7gtL7gtK/gtbxf4LSk4LS/4LSZ4LWN4LSV4LW+X+C0muC1iuC0teC1jeC0tV/gtKzgtYHgtKfgtbtf4LS14LWN4LSv4LS+4LS04LSCX+C0teC1huC0s+C1jeC0s+C0v1/gtLbgtKjgtL8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ+C0nuC0vl/gtKTgtL9f4LSa4LWKX+C0rOC1gV/gtLXgtY3gtK/gtL5f4LS14LWGX+C0ticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdBIGg6bW0gLeC0qOC1gScsXG4gICAgICAgICAgICBMVFMgOiAnQSBoOm1tOnNzIC3gtKjgtYEnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIC3gtKjgtYEnLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIC3gtKjgtYEnXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb4LSH4LSo4LWN4LSo4LWNXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vgtKjgtL7gtLPgtYZdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW+C0h+C0qOC1jeC0qOC0suC1hl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW+C0leC0tOC0v+C0nuC1jeC0nl0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVzIOC0leC0tOC0v+C0nuC1jeC0nuC1jScsXG4gICAgICAgICAgICBwYXN0IDogJyVzIOC0ruC1geC1u+C0quC1jScsXG4gICAgICAgICAgICBzIDogJ+C0heC1veC0qiDgtKjgtL/gtK7gtL/gtLfgtJngtY3gtJngtb4nLFxuICAgICAgICAgICAgc3MgOiAnJWQg4LS44LWG4LSV4LWN4LSV4LW74LSh4LWNJyxcbiAgICAgICAgICAgIG0gOiAn4LSS4LSw4LWBIOC0ruC0v+C0qOC0v+C0seC1jeC0seC1jScsXG4gICAgICAgICAgICBtbSA6ICclZCDgtK7gtL/gtKjgtL/gtLHgtY3gtLHgtY0nLFxuICAgICAgICAgICAgaCA6ICfgtJLgtLDgtYEg4LSu4LSj4LS/4LSV4LWN4LSV4LWC4LW8JyxcbiAgICAgICAgICAgIGhoIDogJyVkIOC0ruC0o+C0v+C0leC1jeC0leC1guC1vCcsXG4gICAgICAgICAgICBkIDogJ+C0kuC0sOC1gSDgtKbgtL/gtLXgtLjgtIInLFxuICAgICAgICAgICAgZGQgOiAnJWQg4LSm4LS/4LS14LS44LSCJyxcbiAgICAgICAgICAgIE0gOiAn4LSS4LSw4LWBIOC0ruC0vuC0uOC0gicsXG4gICAgICAgICAgICBNTSA6ICclZCDgtK7gtL7gtLjgtIInLFxuICAgICAgICAgICAgeSA6ICfgtJLgtLDgtYEg4LS14LW84LS34LSCJyxcbiAgICAgICAgICAgI
33378Hl5IDogJyVkIOC0teC1vOC0t+C0gidcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+C0sOC0vuC0pOC1jeC0sOC0v3zgtLDgtL7gtLXgtL/gtLLgtYZ84LSJ4LSa4LWN4LSaIOC0leC0tOC0v+C0nuC1jeC0nuC1jXzgtLXgtYjgtJXgtYHgtKjgtY3gtKjgtYfgtLDgtIJ84LSw4LS+4LSk4LWN4LSw4LS/L2ksXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKG1lcmlkaWVtID09PSAn4LSw4LS+4LSk4LWN4LSw4LS/JyAmJiBob3VyID49IDQpIHx8XG4gICAgICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4LSJ4LSa4LWN4LSaIOC0leC0tOC0v+C0nuC1jeC0nuC1jScgfHxcbiAgICAgICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgtLXgtYjgtJXgtYHgtKjgtY3gtKjgtYfgtLDgtIInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtLDgtL7gtKTgtY3gtLDgtL8nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0sOC0vuC0teC0v+C0suC1hic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LSJ4LSa4LWN4LSaIOC0leC0tOC0v+C0nuC1jeC0nuC1jSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LS14LWI4LSV4LWB4LSo4LWN4LSo4LWH4LSw4LSCJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtLDgtL7gtKTgtY3gtLDgtL8nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9GF0Y3QtNGF0Y3QvSDRgdC10LrRg9C90LQnIDogJ9GF0Y3QtNGF0Y3QvSDRgdC10LrRg9C90LTRi9C9JztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINGB0LXQutGD0L3QtCcgOiAnINGB0LXQutGD0L3QtNGL0L0nKTtcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0LzQuNC90YPRgicgOiAnINC80LjQvdGD0YLRi9C9Jyk7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINGG0LDQsycgOiAnINGG0LDQs9C40LnQvScpO1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDTqdC006nRgCcgOiAnINOp0LTRgNC40LnQvScpO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDRgdCw0YAnIDogJyDRgdCw0YDRi9C9Jyk7XG4gICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINC20LjQuycgOiAnINC20LjQu9C40LnQvScpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1uID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbW4nLCB7XG4gICAgICAgIG1vbnRocyA6ICfQndGN0LPQtNKv0LPRjdGN0YAg0YHQsNGAX9Cl0L7RkdGA0LTRg9Cz0LDQsNGAINGB0LDRgF/Qk9GD0YDQsNCy0LTRg9Cz0LDQsNGAINGB0LDRgF/QlNOp0YDTqdCy0LTSr9Cz0Y3RjdGAINGB0LDRgF/QotCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CX0YPRgNCz0LDQtNGD0LPQsNCw0YAg0YHQsNGAX9CU0L7Qu9C00YPQs9Cw0LDRgCDRgdCw0YBf0J3QsNC50LzQtNGD0LPQsNCw0YAg0YHQsNGAX9CV0YHQtNKv0LPRjdGN0YAg0YHQsNGAX9CQ0YDQsNCy0LTRg9Cz0LDQsNGAINGB0LDRgF/QkNGA0LLQsNC9INC90Y3Qs9C00q/Qs9GN0Y3RgCDRgdCw0YBf0JDRgNCy0LDQvSDRhdC+0ZHRgNC00YPQs9Cw0LDRgCDRgdCw0YAnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJzEg0YHQsNGAXzIg0YHQsNGAXzMg0YHQsNGAXzQg0YHQsNGAXzUg0YHQsNGAXzYg0YHQsNGAXzcg0YHQsNGAXzgg0YHQsNGAXzkg0YHQsNGAXzEwINGB0LDRgF8xMSDRgdCw0YBfMTIg0YHQsNGAJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAn0J3Rj9C8X9CU0LDQstCw0LBf0JzRj9Cz0LzQsNGAX9Cb0YXQsNCz0LLQsF/Qn9Kv0YDRjdCyX9CR0LDQsNGB0LDQvV/QkdGP0LzQsdCwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ9Cd0Y/QvF/QlNCw0LJf0JzRj9CzX9Cb0YXQsF/Qn9Kv0YBf0JHQsNCwX9CR0Y/QvCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn0J3Rj1/QlNCwX9Cc0Y9f0JvRhV/Qn9KvX9CR0LBf0JHRjycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMIDogJ1lZWVkg0L7QvdGLIE1NTU3Ri9C9IEQnLFxuICAgICAgICAgICAgTExMIDogJ1lZWVkg0L7QvdGLIE1NTU3Ri9C9IEQgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBZWVlZINC+0L3RiyBNTU1N0YvQvSBEIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0q7TqHzSrtClL2ksXG4gICAgICAgIGlzUE0gOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgI
33378HJldHVybiBpbnB1dCA9PT0gJ9Ku0KUnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Ku06gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Ku0KUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW9Oo0L3TqdOp0LTTqdGAXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vQnNCw0YDQs9Cw0LDRiF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnW9CY0YDRjdGFXSBkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW9Oo0YfQuNCz0LTTqdGAXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb06jQvdCz06nRgNGB06nQvV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMg0LTQsNGA0LDQsCcsXG4gICAgICAgICAgICBwYXN0IDogJyVzINOp0LzQvdOpJyxcbiAgICAgICAgICAgIHMgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzcyA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGggOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHkgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eSA6IHRyYW5zbGF0ZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0g06nQtNOp0YAvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINOp0LTTqdGAJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbW47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICcxJzogJ+ClpycsXG4gICAgICAgICcyJzogJ+ClqCcsXG4gICAgICAgICczJzogJ+ClqScsXG4gICAgICAgICc0JzogJ+ClqicsXG4gICAgICAgICc1JzogJ+ClqycsXG4gICAgICAgICc2JzogJ+ClrCcsXG4gICAgICAgICc3JzogJ+ClrScsXG4gICAgICAgICc4JzogJ+ClricsXG4gICAgICAgICc5JzogJ+ClrycsXG4gICAgICAgICcwJzogJ+ClpidcbiAgICB9LFxuICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ+Clpyc6ICcxJyxcbiAgICAgICAgJ+ClqCc6ICcyJyxcbiAgICAgICAgJ+ClqSc6ICczJyxcbiAgICAgICAgJ+Clqic6ICc0JyxcbiAgICAgICAgJ+Clqyc6ICc1JyxcbiAgICAgICAgJ+ClrCc6ICc2JyxcbiAgICAgICAgJ+ClrSc6ICc3JyxcbiAgICAgICAgJ+Clric6ICc4JyxcbiAgICAgICAgJ+Clryc6ICc5JyxcbiAgICAgICAgJ+Clpic6ICcwJ1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVNcihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpXG4gICAge1xuICAgICAgICB2Y
33378XIgb3V0cHV0ID0gJyc7XG4gICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHN0cmluZykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3MnOiBvdXRwdXQgPSAn4KSV4KS+4KS54KWAIOCkuOClh+CkleCkguCkpic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NzJzogb3V0cHV0ID0gJyVkIOCkuOClh+CkleCkguCkpic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ20nOiBvdXRwdXQgPSAn4KSP4KSVIOCkruCkv+CkqOCkv+Cknyc7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ21tJzogb3V0cHV0ID0gJyVkIOCkruCkv+CkqOCkv+Ckn+Clhyc7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2gnOiBvdXRwdXQgPSAn4KSP4KSVIOCkpOCkvuCkuCc7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hoJzogb3V0cHV0ID0gJyVkIOCkpOCkvuCkuCc7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOiBvdXRwdXQgPSAn4KSP4KSVIOCkpuCkv+CkteCkuCc7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RkJzogb3V0cHV0ID0gJyVkIOCkpuCkv+CkteCkuCc7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOiBvdXRwdXQgPSAn4KSP4KSVIOCkruCkueCkv+CkqOCkvic7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ01NJzogb3V0cHV0ID0gJyVkIOCkruCkueCkv+CkqOClhyc7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3knOiBvdXRwdXQgPSAn4KSP4KSVIOCkteCksOCljeCktyc7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3l5Jzogb3V0cHV0ID0gJyVkIOCkteCksOCljeCkt+Clhyc7IGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoIChzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzJzogb3V0cHV0ID0gJ+CkleCkvuCkueClgCDgpLjgpYfgpJXgpILgpKbgpL7gpIInOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzcyc6IG91dHB1dCA9ICclZCDgpLjgpYfgpJXgpILgpKbgpL7gpIInOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtJzogb3V0cHV0ID0gJ+Ckj+CkleCkviDgpK7gpL/gpKjgpL/gpJ/gpL4nOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtbSc6IG91dHB1dCA9ICclZCDgpK7gpL/gpKjgpL/gpJ/gpL7gpIInOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdoJzogb3V0cHV0ID0gJ+Ckj+CkleCkviDgpKTgpL7gpLjgpL4nOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdoaCc6IG91dHB1dCA9ICclZCDgpKTgpL7gpLjgpL7gpIInOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkJzogb3V0cHV0ID0gJ+Ckj+CkleCkviDgpKbgpL/gpLXgpLjgpL4nOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkZCc6IG9
333781dHB1dCA9ICclZCDgpKbgpL/gpLXgpLjgpL7gpIInOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzogb3V0cHV0ID0gJ+Ckj+CkleCkviDgpK7gpLngpL/gpKjgpY3gpK/gpL4nOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNTSc6IG91dHB1dCA9ICclZCDgpK7gpLngpL/gpKjgpY3gpK/gpL7gpIInOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd5Jzogb3V0cHV0ID0gJ+Ckj+CkleCkviDgpLXgpLDgpY3gpLfgpL4nOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd5eSc6IG91dHB1dCA9ICclZCDgpLXgpLDgpY3gpLfgpL7gpIInOyBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgdmFyIG1yID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXInLCB7XG4gICAgICAgIG1vbnRocyA6ICfgpJzgpL7gpKjgpYfgpLXgpL7gpLDgpYBf4KSr4KWH4KSs4KWN4KSw4KWB4KS14KS+4KSw4KWAX+CkruCkvuCksOCljeCkml/gpI/gpKrgpY3gpLDgpL/gpLJf4KSu4KWHX+CknOClguCkqF/gpJzgpYHgpLLgpYhf4KSR4KSX4KS44KWN4KSfX+CkuOCkquCljeCkn+Clh+CkguCkrOCksF/gpJHgpJXgpY3gpJ/gpYvgpKzgpLBf4KSo4KWL4KS14KWN4KS54KWH4KSC4KSs4KSwX+CkoeCkv+CkuOClh+CkguCkrOCksCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfgpJzgpL7gpKjgpYcuX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaLl/gpI/gpKrgpY3gpLDgpL8uX+CkruClhy5f4KSc4KWC4KSoLl/gpJzgpYHgpLLgpYguX+CkkeCkly5f4KS44KSq4KWN4KSf4KWH4KSCLl/gpJHgpJXgpY3gpJ/gpYsuX+CkqOCli+CkteCljeCkueClh+Ckgi5f4KSh4KS/4KS44KWH4KSCLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ+CksOCkteCkv+CkteCkvuCksF/gpLjgpYvgpK7gpLXgpL7gpLBf4KSu4KSC4KSX4KSz4KS14KS+4KSwX+CkrOClgeCkp+CkteCkvuCksF/gpJfgpYHgpLDgpYLgpLXgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KS14KS+4KSwX+CktuCkqOCkv+CkteCkvuCksCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfgpLDgpLXgpL9f4KS44KWL4KSuX+CkruCkguCkl+Cks1/gpKzgpYHgpKdf4KSX4KWB4KSw4KWCX+CktuClgeCkleCljeCksF/gpLbgpKjgpL8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ+CksF/gpLjgpYtf4KSu4KSCX+CkrOClgV/gpJfgpYFf4KS24KWBX+Ckticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdBIGg6bW0g4KS14KS+4KSc4KSk4KS+JyxcbiAgICAgICAgICAgIExUUyA6ICdBIGg6bW06c3Mg4KS14KS+4KSc4KSk4KS+JyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCkteCkvuCknOCkpOCkvidcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW+CkieCkpuCljeCkr+Ckvl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb4KSV4KS+4KSyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgpK7gpL7gpJfgpYDgpLJdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz4KSu4KSn4KWN4KSv4KWHJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+CkquClguCksOCljeCkteClgCcsXG4gICAgICAgICAgICBzOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIHNzOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIG06IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgaDogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBoaDogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBkOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIE06IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgeTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICB5eTogcmVsYXRpdmVUaW1lTXJcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CksOCkvuCkpOCljeCksOClgHzgpLjgpJXgpL7gpLPgpYB84KSm4KWB4KSq4KS+4KSw4KWAfOCkuOCkvuCkr+CkguCkleCkvuCks+ClgC8sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgpLDgpL7gpKTgpY3gpLDgpYAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgI
33378H0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpJXgpL7gpLPgpYAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KSm4KWB4KSq4KS+4KSw4KWAJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpL7gpK/gpILgpJXgpL7gpLPgpYAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KWN4KSw4KWAJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpJXgpL7gpLPgpYAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkpuClgeCkquCkvuCksOClgCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS44KS+4KSv4KSC4KSV4KS+4KSz4KWAJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpY3gpLDgpYAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA2ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtcjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG1zTXkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtcy1teScsIHtcbiAgICAgICAgbW9udGhzIDogJ0phbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ0FoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0FoX0lzX1NsX1JiX0ttX0ptX1NiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAncGFnaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICd0ZW5nYWhhcmknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3BldGFuZycgfHwgbWVyaWRpZW0gPT09ICdtYWxhbScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BhZ2knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZW5nYWhhcmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwZXRhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21hbGFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tIYXJpIGluaSBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbRXNvayBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0tlbG1hcmluIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdkZGRkIFtsZXBhcyBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW
333781lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2RhbGFtICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgeWFuZyBsZXBhcycsXG4gICAgICAgICAgICBzIDogJ2JlYmVyYXBhIHNhYXQnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2FhdCcsXG4gICAgICAgICAgICBtIDogJ3NlbWluaXQnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWluaXQnLFxuICAgICAgICAgICAgaCA6ICdzZWphbScsXG4gICAgICAgICAgICBoaCA6ICclZCBqYW0nLFxuICAgICAgICAgICAgZCA6ICdzZWhhcmknLFxuICAgICAgICAgICAgZGQgOiAnJWQgaGFyaScsXG4gICAgICAgICAgICBNIDogJ3NlYnVsYW4nLFxuICAgICAgICAgICAgTU0gOiAnJWQgYnVsYW4nLFxuICAgICAgICAgICAgeSA6ICdzZXRhaHVuJyxcbiAgICAgICAgICAgIHl5IDogJyVkIHRhaHVuJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtc015O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbXMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtcycsIHtcbiAgICAgICAgbW9udGhzIDogJ0phbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ0FoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0FoX0lzX1NsX1JiX0ttX0ptX1NiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAncGFnaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICd0ZW5nYWhhcmknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3BldGFuZycgfHwgbWVyaWRpZW0gPT09ICdtYWxhbScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BhZ2knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZW5nYWhhcmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwZXRhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21hbGFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tIYXJpIGluaSBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbRXNvayBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0tlbG1hcmluIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdkZGRkIFtsZXBhcyBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2RhbGFtICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgeWFuZyBsZXBhcycsXG4gICAgICAgICAgICBzIDogJ2JlYmVyYXBhIHNhYXQnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2FhdCcsXG4gICAgICAgICAgICBtIDogJ3NlbWluaXQnLFxuICAgICAgICAgICAgbW0gOiAnJWQgbWluaXQnLFxuICAgICAgICAgICAgaCA6ICdzZWphbScsXG4gICAgICAgICAgICBoaCA6ICclZCBqYW0nLFxuICAgICAgICAgICAgZCA6ICdzZWhhcmknLFxuICAgICAgICAgICAgZGQgOiAnJWQgaGFyaScsXG4gICAgICAgICAgICBNIDogJ3NlYnVsYW4nLFxuICAgICAgICAgICAgTU0gOiAnJWQgYnVsYW4nLFxuICAgICAgICAgICAgeSA6ICdzZXRhaHVuJyxcbiAgICAgICAgICAgI
33378Hl5IDogJyVkIHRhaHVuJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG10ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXQnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW5uYXJfRnJhcl9NYXJ6dV9BcHJpbF9NZWpqdV/EoHVuanVfTHVsanVfQXd3aXNzdV9TZXR0ZW1icnVfT3R0dWJydV9Ob3ZlbWJydV9EacSLZW1icnUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ0phbl9GcmFfTWFyX0Fwcl9NZWpfxKB1bl9MdWxfQXd3X1NldF9PdHRfTm92X0RpxIsnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ0lsLcSmYWRkX0l0LVRuZWpuX0l0LVRsaWV0YV9MLUVyYmfEp2FfSWwtxKZhbWlzX0lsLcSgaW1nxKdhX0lzLVNpYnQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnxKZhZF9UbmVfVGxpX0VyYl/EpmFtX8SgaW1fU2liJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfEpmFfVG5fVGxfRXJfxKZhX8SgaV9TaScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW0lsbHVtIGZpbC1dTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbR8SnYWRhIGZpbC1dTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbZmlsLV1MVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tJbC1iaWVyYcSnIGZpbC1dTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBbbGkgZ8SnYWRkYV0gW2ZpbC1dTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ2bigJkgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBpbHUnLFxuICAgICAgICAgICAgcyA6ICdmdGl0IHNla29uZGknLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2Vrb25kaScsXG4gICAgICAgICAgICBtIDogJ21pbnV0YScsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dGknLFxuICAgICAgICAgICAgaCA6ICdzaWVnxKdhJyxcbiAgICAgICAgICAgIGhoIDogJyVkIHNpZWfEp2F0JyxcbiAgICAgICAgICAgIGQgOiAnxKF1cm5hdGEnLFxuICAgICAgICAgICAgZGQgOiAnJWQgxKFyYW5ldCcsXG4gICAgICAgICAgICBNIDogJ3hhaGFyJyxcbiAgICAgICAgICAgIE1NIDogJyVkIHhodXInLFxuICAgICAgICAgICAgeSA6ICdzZW5hJyxcbiAgICAgICAgICAgIHl5IDogJyVkIHNuaSdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZSA6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtdDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgJzEnOiAn4YGBJyxcbiAgICAgICAgJzInOiAn4YGCJyxcbiAgICAgICAgJzMnOiAn4YGDJyxcbiAgICAgICAgJzQnOiAn4YGEJyxcbiAgICAgICAgJzUnOiAn4YGFJyxcbiAgICAgICAgJzYnOiAn4YGGJyxcbiAgICAgICAgJzcnOiAn4YGHJyxcbiAgICAgICAgJzgnOiAn4YGIJyxcbiAgICAgICAgJzknOiAn4YGJJyxcbiAgICAgICAgJzAnOiAn4YGAJ1xuICAgIH0sIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ+GBgSc6ICcxJyxcbiAgICAgICAgJ+GBgic6ICcyJyxcbiAgICAgICAgJ+GBgyc6ICczJyxcbiAgICAgICAgJ+GBhCc6ICc0JyxcbiAgICAgICAgJ+GBhSc6ICc1JyxcbiAgICAgICAgJ+GBhic6ICc2JyxcbiAgICAgICAgJ+GBhyc6ICc3JyxcbiAgICAgICAgJ+GBiCc6ICc4JyxcbiAgICAgICAgJ+GBiSc6ICc5JyxcbiAgICAgICAgJ+GBgCc6ICcwJ1xuICAgIH07XG5cbiAgICB2YXIgbXkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdteScsIHtcbiAgICAgICAgbW9udGhzOiAn4YCH4YCU4YC64YCU4YCd4YCr4YCb4Y
33378CuX+GAluGAseGAluGAseGArOGAuuGAneGAq+GAm+GArl/hgJnhgJDhgLpf4YCn4YCV4YC84YCuX+GAmeGAsV/hgIfhgL3hgJThgLpf4YCH4YCw4YCc4YCt4YCv4YCE4YC6X+GAnuGAvOGAguGAr+GAkOGAul/hgIXhgIDhgLrhgJDhgIThgLrhgJjhgKxf4YCh4YCx4YCs4YCA4YC64YCQ4YCt4YCv4YCY4YCsX+GAlOGAreGAr+GAneGAhOGAuuGAmOGArF/hgJLhgK7hgIfhgIThgLrhgJjhgKwnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4YCH4YCU4YC6X+GAluGAsV/hgJnhgJDhgLpf4YCV4YC84YCuX+GAmeGAsV/hgIfhgL3hgJThgLpf4YCc4YCt4YCv4YCE4YC6X+GAnuGAvF/hgIXhgIDhgLpf4YCh4YCx4YCs4YCA4YC6X+GAlOGAreGAr1/hgJLhgK4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn4YCQ4YCU4YCE4YC64YC54YCC4YCU4YC94YCxX+GAkOGAlOGAhOGAuuGAueGAnOGArF/hgKHhgIThgLrhgLnhgILhgKtf4YCX4YCv4YCS4YC54YCT4YCf4YCw4YC4X+GAgOGAvOGArOGAnuGAleGAkOGAseGAuF/hgJ7hgLHhgKzhgIDhgLzhgKxf4YCF4YCU4YCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4YCU4YC94YCxX+GAnOGArF/hgILhgKtf4YCf4YCw4YC4X+GAgOGAvOGArF/hgJ7hgLHhgKxf4YCU4YCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+GAlOGAveGAsV/hgJzhgKxf4YCC4YCrX+GAn+GAsOGAuF/hgIDhgLzhgKxf4YCe4YCx4YCsX+GAlOGAsScuc3BsaXQoJ18nKSxcblxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vhgJrhgJThgLEuXSBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+GAmeGAlOGAgOGAuuGAluGAvOGAlOGAul0gTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4YCZ4YCU4YCxLuGAgF0gTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4YCV4YC84YCu4YC44YCB4YCy4YC34YCe4YCx4YCsXSBkZGRkIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfhgJzhgKzhgJnhgIrhgLrhgLcgJXMg4YCZ4YC+4YCsJyxcbiAgICAgICAgICAgIHBhc3Q6ICfhgJzhgL3hgJThgLrhgIHhgLLhgLfhgJ7hgLHhgKwgJXMg4YCAJyxcbiAgICAgICAgICAgIHM6ICfhgIXhgIDhgLnhgIDhgJThgLou4YCh4YCU4YCK4YC64YC44YCE4YCa4YC6JyxcbiAgICAgICAgICAgIHNzIDogJyVkIOGAheGAgOGAueGAgOGAlOGAt+GAuicsXG4gICAgICAgICAgICBtOiAn4YCQ4YCF4YC64YCZ4YCt4YCU4YCF4YC6JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4YCZ4YCt4YCU4YCF4YC6JyxcbiAgICAgICAgICAgIGg6ICfhgJDhgIXhgLrhgJThgKzhgJvhgK4nLFxuICAgICAgICAgICAgaGg6ICclZCDhgJThgKzhgJvhgK4nLFxuICAgICAgICAgICAgZDogJ+GAkOGAheGAuuGAm+GAgOGAuicsXG4gICAgICAgICAgICBkZDogJyVkIOGAm+GAgOGAuicsXG4gICAgICAgICAgICBNOiAn4YCQ4YCF4YC64YCcJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4YCcJyxcbiAgICAgICAgICAgIHk6ICfhgJDhgIXhgLrhgJThgL7hgIXhgLonLFxuICAgICAgICAgICAgeXk6ICclZCDhgJThgL7hgIXhgLonXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vhgYHhgYLhgYPhgYThgYXhgYbhgYfhgYjhgYnhgYBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbXk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBuYiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25iJywge1xuICAgICAgICBtb250aHMgOiAnamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnamFuLl9mZWIuX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICdzw7huZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sw7hyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ3PDuC5fbWEuX3RpLl9vbi5fdG8uX2ZyLl9sw7guJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdzw7hfbWFfdGlfb25fdG9fZnJfbMO4Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2kgZGFnIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tpIG1vcmdlbiBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2kgZ8OlciBrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2ZvcnJpZ2VdIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBzaWRlbicsXG4gICAgICAgICAgICBzIDogJ25vZW4gc2VrdW5kZXInLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbSA6ICdldHQgbWludXR0JyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0dGVyJyxcbiAgICAgICAgICAgIGggOiAnZW4gdGltZScsXG4gICAgICAgICAgICBoaCA6ICclZCB0aW1lcicsXG4gICAgICAgICAgICBkIDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZCA6ICclZCBkYWdlcicsXG4gICAgICAgICAgICBNIDogJ2VuIG3DpW5lZCcsXG4gICAgICAgICAgICBNTSA6ICclZCBtw6VuZWRlcicsXG4gICAgICAgICAgICB5IDogJ2V0dCDDpXInLFxuICAgICAgICAgICAgeXkgOiAnJWQgw6VyJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgI
33378HdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5iO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAnMSc6ICfgpacnLFxuICAgICAgICAnMic6ICfgpagnLFxuICAgICAgICAnMyc6ICfgpaknLFxuICAgICAgICAnNCc6ICfgpaonLFxuICAgICAgICAnNSc6ICfgpasnLFxuICAgICAgICAnNic6ICfgpawnLFxuICAgICAgICAnNyc6ICfgpa0nLFxuICAgICAgICAnOCc6ICfgpa4nLFxuICAgICAgICAnOSc6ICfgpa8nLFxuICAgICAgICAnMCc6ICfgpaYnXG4gICAgfSxcbiAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICfgpacnOiAnMScsXG4gICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICfgpaknOiAnMycsXG4gICAgICAgICfgpaonOiAnNCcsXG4gICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICfgpawnOiAnNicsXG4gICAgICAgICfgpa0nOiAnNycsXG4gICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICfgpa8nOiAnOScsXG4gICAgICAgICfgpaYnOiAnMCdcbiAgICB9O1xuXG4gICAgdmFyIG5lID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbmUnLCB7XG4gICAgICAgIG1vbnRocyA6ICfgpJzgpKjgpLXgpLDgpYBf4KSr4KWH4KSs4KWN4KSw4KWB4KS14KSw4KWAX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL/gpLJf4KSu4KSIX+CknOClgeCkqF/gpJzgpYHgpLLgpL7gpIhf4KSF4KSX4KS34KWN4KSfX+CkuOClh+CkquCljeCkn+Clh+CkruCljeCkrOCksF/gpIXgpJXgpY3gpJ/gpYvgpKzgpLBf4KSo4KWL4KSt4KWH4KSu4KWN4KSs4KSwX+CkoeCkv+CkuOClh+CkruCljeCkrOCksCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn4KSc4KSoLl/gpKvgpYfgpKzgpY3gpLDgpYEuX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL8uX+CkruCkiF/gpJzgpYHgpKhf4KSc4KWB4KSy4KS+4KSILl/gpIXgpJcuX+CkuOClh+CkquCljeCkny5f4KSF4KSV4KWN4KSf4KWLLl/gpKjgpYvgpK3gpYcuX+CkoeCkv+CkuOClhy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICfgpIbgpIfgpKTgpKzgpL7gpLBf4KS44KWL4KSu4KSs4KS+4KSwX+CkruCkmeCljeCkl+CksuCkrOCkvuCksF/gpKzgpYHgpKfgpKzgpL7gpLBf4KSs4KS/4KS54KS/4KSs4KS+4KSwX+CktuClgeCkleCljeCksOCkrOCkvuCksF/gpLbgpKjgpL/gpKzgpL7gpLAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn4KSG4KSH4KSkLl/gpLjgpYvgpK4uX+CkruCkmeCljeCkl+Cksi5f4KSs4KWB4KSnLl/gpKzgpL/gpLngpL8uX+CktuClgeCkleCljeCksC5f4KS24KSo4KS/Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn4KSGLl/gpLjgpYsuX+CkruCkgi5f4KSs4KWBLl/gpKzgpL8uX+CktuClgS5f4KS2Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdB4KSV4KWLIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIExUUyA6ICdB4KSV4KWLIGg6bW06c3Mg4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQeCkleCliyBoOm1tIOCkrOCknOClhydcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CksOCkvuCkpOCkv3zgpKzgpL/gpLngpL7gpKh84KSm4KS/4KSJ4KSB4KS44KWLfOCkuOCkvuCkgeCknS8sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgpLDgpL7gpKTgpL8nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpKzgpL/gpLngpL7gpKgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KSm4KS/4KSJ4KSB4KS44KWLJykge1xuICAgICAgICAgICAgICAgI
33378HJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpL7gpIHgpJ0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOCkvyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSs4KS/4KS54KS+4KSoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpKbgpL/gpIngpIHgpLjgpYsnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOCkvuCkgeCknSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KS/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW+CkreCli+CksuCkv10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnW+CkhuCkieCkgeCkpuCli10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vgpLngpL/gpJzgpYtdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vgpJfgpI/gpJXgpYtdIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVz4KSu4KS+JyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg4KSF4KSX4KS+4KSh4KS/JyxcbiAgICAgICAgICAgIHMgOiAn4KSV4KWH4KS54KWAIOCkleCljeCkt+CkoycsXG4gICAgICAgICAgICBzcyA6ICclZCDgpLjgpYfgpJXgpYfgpKPgpY3gpKEnLFxuICAgICAgICAgICAgbSA6ICfgpI/gpJUg4KSu4KS/4KSo4KWH4KSfJyxcbiAgICAgICAgICAgIG1tIDogJyVkIOCkruCkv+CkqOClh+CknycsXG4gICAgICAgICAgICBoIDogJ+Ckj+CklSDgpJjgpKPgpY3gpJ/gpL4nLFxuICAgICAgICAgICAgaGggOiAnJWQg4KSY4KSj4KWN4KSf4KS+JyxcbiAgICAgICAgICAgIGQgOiAn4KSP4KSVIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBkZCA6ICclZCDgpKbgpL/gpKgnLFxuICAgICAgICAgICAgTSA6ICfgpI/gpJUg4KSu4KS54KS/4KSo4KS+JyxcbiAgICAgICAgICAgIE1NIDogJyVkIOCkruCkueCkv+CkqOCkvicsXG4gICAgICAgICAgICB5IDogJ+Ckj+CklSDgpKzgpLDgpY3gpLcnLFxuICAgICAgICAgICAgeXkgOiAnJWQg4KSs4KSw4KWN4KS3J1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA2ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBuZTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIG1vbnRoc1Nob3J0V2l0aERvdHMgPSAnamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnRXaXRob3V0RG90cyA9ICdqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKTtcblxuICAgIHZhciBtb250aHNQYXJzZSA9IFsvXmphbi9pLCAvXmZlYi9pLCAvXm1hYXJ0fG1ydC4/JC9pLCAvXmFwci9pLCAvXm1laSQvaSwgL15qdW5baS5dPyQvaSwgL15qdWxbaS5dPyQvaSwgL15hdWcvaSwgL15zZXAvaSwgL15va3QvaSwgL15ub3YvaSwgL15kZWMvaV07XG4gICAgdmFyIG1vbnRoc1JlZ2V4ID0gL14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fGp1W25sXVxcLj98YXVnXFwuP3xzZXBcXC4/fG9rdFxcLj98bm92XFwuP3xkZWNcXC4/KS9pO1xuXG4gICAgdmFyIG5sQmUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdubC1iZScsIHtcbiAgICAgICAgbW9udGhzIDogJ2phbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRob3V0RG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvXihqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fG1laXxqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaSxcblxuICAgICAgICBtb250aHNQYXJzZSA6IG1vbn
33378Roc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2UgOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZSA6IG1vbnRoc1BhcnNlLFxuXG4gICAgICAgIHdlZWtkYXlzIDogJ3pvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICd6b19tYV9kaV93b19kb192cl96YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t2YW5kYWFnIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnaXN0ZXJlbiBvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnb3ZlciAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIGdlbGVkZW4nLFxuICAgICAgICAgICAgcyA6ICdlZW4gcGFhciBzZWNvbmRlbicsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWNvbmRlbicsXG4gICAgICAgICAgICBtIDogJ8Opw6luIG1pbnV1dCcsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dGVuJyxcbiAgICAgICAgICAgIGggOiAnw6nDqW4gdXVyJyxcbiAgICAgICAgICAgIGhoIDogJyVkIHV1cicsXG4gICAgICAgICAgICBkIDogJ8Opw6luIGRhZycsXG4gICAgICAgICAgICBkZCA6ICclZCBkYWdlbicsXG4gICAgICAgICAgICBNIDogJ8Opw6luIG1hYW5kJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG1hYW5kZW4nLFxuICAgICAgICAgICAgeSA6ICfDqcOpbiBqYWFyJyxcbiAgICAgICAgICAgIHl5IDogJyVkIGphYXInXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdGV8ZGUpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoKG51bWJlciA9PT0gMSB8fCBudW1iZXIgPT09IDggfHwgbnVtYmVyID49IDIwKSA/ICdzdGUnIDogJ2RlJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5sQmU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBtb250aHNTaG9ydFdpdGhEb3RzID0gJ2phbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0V2l0aG91dERvdHMgPSAnamFuX2ZlYl9tcnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyk7XG5cbiAgICB2YXIgbW9udGhzUGFyc2UgPSBbL15qYW4vaSwgL15mZWIvaSwgL15tYWFydHxtcnQuPyQvaSwgL15hcHIvaSwgL15tZWkkL2ksIC9eanVuW2kuXT8kL2ksIC9eanVsW2kuXT8kL2ksIC9eYXVnL2ksIC9ec2VwL2ksIC9eb2t0L2ksIC9ebm92L2ksIC9eZGVjL2ldO1xuICAgIHZhciBtb250aHNSZWdleCA9IC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaTtcblxuICAgIHZhciBubCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25sJywge1xuICAgICAgICBtb250aHMgOiAnamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhvdXREb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgI
33378HJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC9eKGphblxcLj98ZmViXFwuP3xtcnRcXC4/fGFwclxcLj98bWVpfGp1W25sXVxcLj98YXVnXFwuP3xzZXBcXC4/fG9rdFxcLj98bm92XFwuP3xkZWNcXC4/KS9pLFxuXG4gICAgICAgIG1vbnRoc1BhcnNlIDogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZSA6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlIDogbW9udGhzUGFyc2UsXG5cbiAgICAgICAgd2Vla2RheXMgOiAnem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICd6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ3pvX21hX2RpX3dvX2RvX3ZyX3phJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW3ZhbmRhYWcgb21dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2dpc3RlcmVuIG9tXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1thZmdlbG9wZW5dIGRkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdvdmVyICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgZ2VsZWRlbicsXG4gICAgICAgICAgICBzIDogJ2VlbiBwYWFyIHNlY29uZGVuJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNlY29uZGVuJyxcbiAgICAgICAgICAgIG0gOiAnw6nDqW4gbWludXV0JyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0ZW4nLFxuICAgICAgICAgICAgaCA6ICfDqcOpbiB1dXInLFxuICAgICAgICAgICAgaGggOiAnJWQgdXVyJyxcbiAgICAgICAgICAgIGQgOiAnw6nDqW4gZGFnJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGRhZ2VuJyxcbiAgICAgICAgICAgIE0gOiAnw6nDqW4gbWFhbmQnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbWFhbmRlbicsXG4gICAgICAgICAgICB5IDogJ8Opw6luIGphYXInLFxuICAgICAgICAgICAgeXkgOiAnJWQgamFhcidcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0ZXxkZSkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICgobnVtYmVyID09PSAxIHx8IG51bWJlciA9PT0gOCB8fCBudW1iZXIgPj0gMjApID8gJ3N0ZScgOiAnZGUnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBubiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25uJywge1xuICAgICAgICBtb250aHMgOiAnamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnamFuX2ZlYl9tYXJfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ3N1bmRhZ19tw6VuZGFnX3R5c2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbGF1cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdzdW5fbcOlbl90eXNfb25zX3Rvcl9mcmVfbGF1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdzdV9tw6VfdHlfb25fdG9fZnJfbMO4Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdELiBNTU1NIFlZWVkgW2tsLl0gSDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgI
33378HNhbWVEYXk6ICdbSSBkYWcga2xva2thXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0kgbW9yZ29uIGtsb2trYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSSBnw6VyIGtsb2trYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbRsO4cmVnw6VhbmRlXSBkZGRkIFtrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ29tICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgc2lkYW4nLFxuICAgICAgICAgICAgcyA6ICdub2tyZSBzZWt1bmQnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2VrdW5kJyxcbiAgICAgICAgICAgIG0gOiAnZWl0IG1pbnV0dCcsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dHQnLFxuICAgICAgICAgICAgaCA6ICdlaW4gdGltZScsXG4gICAgICAgICAgICBoaCA6ICclZCB0aW1hcicsXG4gICAgICAgICAgICBkIDogJ2VpbiBkYWcnLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGFnYXInLFxuICAgICAgICAgICAgTSA6ICdlaW4gbcOlbmFkJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG3DpW5hZGVyJyxcbiAgICAgICAgICAgIHkgOiAnZWl0IMOlcicsXG4gICAgICAgICAgICB5eSA6ICclZCDDpXInXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICcxJzogJ+CppycsXG4gICAgICAgICcyJzogJ+CpqCcsXG4gICAgICAgICczJzogJ+CpqScsXG4gICAgICAgICc0JzogJ+CpqicsXG4gICAgICAgICc1JzogJ+CpqycsXG4gICAgICAgICc2JzogJ+CprCcsXG4gICAgICAgICc3JzogJ+CprScsXG4gICAgICAgICc4JzogJ+CpricsXG4gICAgICAgICc5JzogJ+CprycsXG4gICAgICAgICcwJzogJ+CppidcbiAgICB9LFxuICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ+Cppyc6ICcxJyxcbiAgICAgICAgJ+CpqCc6ICcyJyxcbiAgICAgICAgJ+CpqSc6ICczJyxcbiAgICAgICAgJ+Cpqic6ICc0JyxcbiAgICAgICAgJ+Cpqyc6ICc1JyxcbiAgICAgICAgJ+CprCc6ICc2JyxcbiAgICAgICAgJ+CprSc6ICc3JyxcbiAgICAgICAgJ+Cpric6ICc4JyxcbiAgICAgICAgJ+Cpryc6ICc5JyxcbiAgICAgICAgJ+Cppic6ICcwJ1xuICAgIH07XG5cbiAgICB2YXIgcGFJbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3BhLWluJywge1xuICAgICAgICAvLyBUaGVyZSBhcmUgbW9udGhzIG5hbWUgYXMgcGVyIE5hbmFrc2hhaGkgQ2FsZW5kYXIgYnV0IHRoZXkgYXJlIG5vdCB1c2VkIGFzIHJpZ2lkbHkgaW4gbW9kZXJuIFB1bmphYmkuXG4gICAgICAgIG1vbnRocyA6ICfgqJzgqKjgqLXgqLDgqYBf4Kir4Ki84Kiw4Ki14Kiw4KmAX+CoruCovuCosOComl/gqIXgqKrgqY3gqLDgqYjgqLJf4Kiu4KiIX+ConOCpguCoqF/gqJzgqYHgqLLgqL7gqIhf4KiF4KiX4Ki44KikX+CouOCopOCpsOCorOCosF/gqIXgqJXgqKTgqYLgqKzgqLBf4Kio4Ki14Kmw4Kis4KiwX+CopuCouOCpsOCorOCosCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn4Kic4Kio4Ki14Kiw4KmAX+Coq+CovOCosOCoteCosOCpgF/gqK7gqL7gqLDgqJpf4KiF4Kiq4KmN4Kiw4KmI4KiyX+CoruCoiF/gqJzgqYLgqKhf4Kic4KmB4Kiy4Ki+4KiIX+CoheCol+CouOCopF/gqLjgqKTgqbDgqKzgqLBf4KiF4KiV4Kik4KmC4Kis4KiwX+CoqOCoteCpsOCorOCosF/gqKbgqLjgqbDgqKzgqLAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ+CokOCopOCoteCovuCosF/gqLjgqYvgqK7gqLXgqL7gqLBf4Kiu4Kmw4KiX4Kiy4Ki14Ki+4KiwX+CorOCpgeCop+CoteCovuCosF/gqLXgqYDgqLDgqLXgqL7gqLBf4Ki44Ki84KmB4Kmx4KiV4Kiw4Ki14Ki+4KiwX+CouOCovOCoqOCpgOComuCosOCoteCovuCosCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfgqJDgqKRf4Ki44KmL4KiuX+CoruCpsOCol+Cosl/gqKzgqYHgqKdf4Ki14KmA4KiwX+CouOCovOCpgeColeCosF/gqLjgqLzgqKjgqYAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ+CokOCopF/gqLjgqYvgqK5f4Kiu4Kmw4KiX4KiyX+CorOCpgeCop1/gqLXgqYDgqLBf4Ki44Ki84KmB4KiV4KiwX+CouOCovOCoqOCpgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdBIGg6bW0g4Ki14Kic4KmHJyxcbiAgICAgICAgICAgIExUUyA6ICdBIGg6bW06c3Mg4Ki14Kic4KmHJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgqLXgqJzgqYcnLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCoteConOCphydcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vgqIXgqJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW+ColeCosl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnW+CoheCol+CosuCovl0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb4KiV4KiyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb4Kiq4Ki/4Kib4Kiy4KmHXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMg4Ki14Ki/4Kmx4KiaJyxcbiAgICAgICAgICAgI
33378HBhc3QgOiAnJXMg4Kiq4Ki/4Kib4Kiy4KmHJyxcbiAgICAgICAgICAgIHMgOiAn4KiV4KmB4KidIOCouOColeCov+CpsOConycsXG4gICAgICAgICAgICBzcyA6ICclZCDgqLjgqJXgqL/gqbDgqJ8nLFxuICAgICAgICAgICAgbSA6ICfgqIfgqJUg4Kiu4Ki/4Kmw4KifJyxcbiAgICAgICAgICAgIG1tIDogJyVkIOCoruCov+CpsOConycsXG4gICAgICAgICAgICBoIDogJ+Coh+CpseColSDgqJjgqbDgqJ/gqL4nLFxuICAgICAgICAgICAgaGggOiAnJWQg4KiY4Kmw4Kif4KmHJyxcbiAgICAgICAgICAgIGQgOiAn4KiH4Kmx4KiVIOCopuCov+CoqCcsXG4gICAgICAgICAgICBkZCA6ICclZCDgqKbgqL/gqKgnLFxuICAgICAgICAgICAgTSA6ICfgqIfgqbHgqJUg4Kiu4Ki54KmA4Kio4Ki+JyxcbiAgICAgICAgICAgIE1NIDogJyVkIOCoruCoueCpgOCoqOCphycsXG4gICAgICAgICAgICB5IDogJ+Coh+CpseColSDgqLjgqL7gqLInLFxuICAgICAgICAgICAgeXkgOiAnJWQg4Ki44Ki+4KiyJ1xuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Kmn4Kmo4Kmp4Kmq4Kmr4Kms4Kmt4Kmu4Kmv4KmmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBQdW5qYWJpIG5vdGF0aW9uIGZvciBtZXJpZGllbXMgYXJlIHF1aXRlIGZ1enp5IGluIHByYWN0aWNlLiBXaGlsZSB0aGVyZSBleGlzdHNcbiAgICAgICAgLy8gYSByaWdpZCBub3Rpb24gb2YgYSAnUGFoYXInIGl0IGlzIG5vdCB1c2VkIGFzIHJpZ2lkbHkgaW4gbW9kZXJuIFB1bmphYmkuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gqLDgqL7gqKR84Ki44Ki14KmH4KiwfOCopuCpgeCoquCoueCov+CosHzgqLjgqLzgqL7gqK4vLFxuICAgICAgICBtZXJpZGllbUhvdXIgOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4Kiw4Ki+4KikJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Ki44Ki14KmH4KiwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CopuCpgeCoquCoueCov+CosCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Ki44Ki84Ki+4KiuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLDgqL7gqKQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CouOCoteCph+CosCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kim4KmB4Kiq4Ki54Ki/4KiwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLjgqLzgqL7gqK4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CosOCovuCopCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDYgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhSW47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBtb250aHNOb21pbmF0aXZlID0gJ3N0eWN6ZcWEX2x1dHlfbWFyemVjX2t3aWVjaWXFhF9tYWpfY3plcndpZWNfbGlwaWVjX3NpZXJwaWXFhF93cnplc2llxYRfcGHFumR6aWVybmlrX2xpc3RvcGFkX2dydWR6aWXFhCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU3ViamVjdGl2ZSA9ICdzdHljem5pYV9sdXRlZ29fbWFyY2Ffa3dpZXRuaWFfbWFqYV9jemVyd2NhX2xpcGNhX3NpZXJwbmlhX3dyemXFm25pYV9wYcW6ZHppZXJuaWthX2xpc3RvcGFkYV9ncnVkbmlhJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgICAgIHJldHVybiAobiAlIDEwIDwgNSkgJiYgKG4gJSAxMCA+IDEpICYmICgofn4obiAvIDEwKSAlIDEwKSAhPT0gMSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2Y
33378XIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnc2VrdW5keScgOiAnc2VrdW5kJyk7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtaW51dGEnIDogJ21pbnV0xJknO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWludXR5JyA6ICdtaW51dCcpO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggID8gJ2dvZHppbmEnICA6ICdnb2R6aW7EmSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdnb2R6aW55JyA6ICdnb2R6aW4nKTtcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21pZXNpxIVjZScgOiAnbWllc2nEmWN5Jyk7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdsYXRhJyA6ICdsYXQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3BsJywge1xuICAgICAgICBtb250aHMgOiBmdW5jdGlvbiAobW9tZW50VG9Gb3JtYXQsIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRUb0Zvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNOb21pbmF0aXZlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgLy8gSGFjazogaWYgZm9ybWF0IGVtcHR5IHdlIGtub3cgdGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlXG4gICAgICAgICAgICAgICAgLy8gUmVnRXhwIGJ5IG1vbWVudC4gR2l2ZSB0aGVuIGJhY2sgYm90aCB2YWxpZCBmb3JtcyBvZiBtb250aHNcbiAgICAgICAgICAgICAgICAvLyBpbiBSZWdFeHAgcmVhZHkgZm9ybWF0LlxuICAgICAgICAgICAgICAgIHJldHVybiAnKCcgKyBtb250aHNTdWJqZWN0aXZlW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldICsgJ3wnICsgbW9udGhzTm9taW5hdGl2ZVttb21lbnRUb0Zvcm1hdC5tb250aCgpXSArICcpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL0QgTU1NTS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1N1YmplY3RpdmVbbW9tZW50VG9Gb3JtYXQubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNOb21pbmF0aXZlW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydCA6ICdzdHlfbHV0X21hcl9rd2lfbWFqX2N6ZV9saXBfc2llX3dyel9wYcW6X2xpc19ncnUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ25pZWR6aWVsYV9wb25pZWR6aWHFgmVrX3d0b3Jla1/Fm3JvZGFfY3p3YXJ0ZWtfcGnEhXRla19zb2JvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnbmR6X3Bvbl93dF/Fm3JfY3p3X3B0X3NvYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnTmRfUG5fV3RfxZpyX0N6X1B0X1NvJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tEemnFmyBvXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0p1dHJvIG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgbmllZHppZWzEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbV2Ugd3RvcmVrIG9dIExUJztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIMWbcm9kxJkgb10gTFQnO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgc29ib3TEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1ddIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1tXY3pvcmFqIG9dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCxIUgbmllZHppZWzEmSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCxIUgxZtyb2TEmSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCxIUgc29ib3TEmSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIHplc3rFgnldIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyB0ZW11JyxcbiAgICAgICAgICAgI
33378HMgOiAna2lsa2Egc2VrdW5kJyxcbiAgICAgICAgICAgIHNzIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZCA6ICcxIGR6aWXFhCcsXG4gICAgICAgICAgICBkZCA6ICclZCBkbmknLFxuICAgICAgICAgICAgTSA6ICdtaWVzacSFYycsXG4gICAgICAgICAgICBNTSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHkgOiAncm9rJyxcbiAgICAgICAgICAgIHl5IDogdHJhbnNsYXRlXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBwdEJyID0gbW9tZW50LmRlZmluZUxvY2FsZSgncHQtYnInLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW5laXJvX0ZldmVyZWlyb19NYXLDp29fQWJyaWxfTWFpb19KdW5ob19KdWxob19BZ29zdG9fU2V0ZW1icm9fT3V0dWJyb19Ob3ZlbWJyb19EZXplbWJybycuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ0RvbWluZ29fU2VndW5kYS1mZWlyYV9UZXLDp2EtZmVpcmFfUXVhcnRhLWZlaXJhX1F1aW50YS1mZWlyYV9TZXh0YS1mZWlyYV9Tw6FiYWRvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ0RvbV9TZWdfVGVyX1F1YV9RdWlfU2V4X1PDoWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0RvXzLCql8zwqpfNMKqXzXCql82wqpfU8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW8Ogc10gSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW8Ogc10gSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIb2plIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBbWFuaMOjIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbT250ZW0gw6BzXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5kYXkoKSA9PT0gMCB8fCB0aGlzLmRheSgpID09PSA2KSA/XG4gICAgICAgICAgICAgICAgICAgICdbw5psdGltb10gZGRkZCBbw6BzXSBMVCcgOiAvLyBTYXR1cmRheSArIFN1bmRheVxuICAgICAgICAgICAgICAgICAgICAnW8OabHRpbWFdIGRkZGQgW8Ogc10gTFQnOyAvLyBNb25kYXkgLSBGcmlkYXlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdlbSAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2jDoSAlcycsXG4gICAgICAgICAgICBzIDogJ3BvdWNvcyBzZWd1bmRvcycsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtIDogJ3VtIG1pbnV0bycsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGggOiAndW1hIGhvcmEnLFxuICAgICAgICAgICAgaGggOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZCA6ICd1bSBkaWEnLFxuICAgICAgICAgICAgZGQgOiAnJWQgZGlhcycsXG4gICAgICAgICAgICBNIDogJ3VtIG3DqnMnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeSA6ICd1bSBhbm8nLFxuICAgICAgICAgICAgeXkgOiAnJWQgYW5vcydcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsIDogJyVkwronXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHRCcjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHB0ID0gbW9tZW50LmRlZmluZUxvY2FsZSgncHQnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW5laXJvX0ZldmVyZWlyb19NYXLDp29fQWJyaWxfTWFpb19KdW5ob19KdWxob19BZ29zdG9fU2V0ZW1icm9fT3V0dWJyb19Ob3ZlbWJyb19EZXplbWJybycuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXonLnNwbGl0KCdfJyksXG4gICAgICAgI
33378HdlZWtkYXlzIDogJ0RvbWluZ29fU2VndW5kYS1mZWlyYV9UZXLDp2EtZmVpcmFfUXVhcnRhLWZlaXJhX1F1aW50YS1mZWlyYV9TZXh0YS1mZWlyYV9Tw6FiYWRvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ0RvbV9TZWdfVGVyX1F1YV9RdWlfU2V4X1PDoWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0RvXzLCql8zwqpfNMKqXzXCql82wqpfU8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIb2plIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBbWFuaMOjIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbT250ZW0gw6BzXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5kYXkoKSA9PT0gMCB8fCB0aGlzLmRheSgpID09PSA2KSA/XG4gICAgICAgICAgICAgICAgICAgICdbw5psdGltb10gZGRkZCBbw6BzXSBMVCcgOiAvLyBTYXR1cmRheSArIFN1bmRheVxuICAgICAgICAgICAgICAgICAgICAnW8OabHRpbWFdIGRkZGQgW8Ogc10gTFQnOyAvLyBNb25kYXkgLSBGcmlkYXlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdlbSAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2jDoSAlcycsXG4gICAgICAgICAgICBzIDogJ3NlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG0gOiAndW0gbWludXRvJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaCA6ICd1bWEgaG9yYScsXG4gICAgICAgICAgICBoaCA6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkIDogJ3VtIGRpYScsXG4gICAgICAgICAgICBkZCA6ICclZCBkaWFzJyxcbiAgICAgICAgICAgIE0gOiAndW0gbcOqcycsXG4gICAgICAgICAgICBNTSA6ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5IDogJ3VtIGFubycsXG4gICAgICAgICAgICB5eSA6ICclZCBhbm9zJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWwgOiAnJWTCuicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHB0O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICAgICAgJ3NzJzogJ3NlY3VuZGUnLFxuICAgICAgICAgICAgICAgICdtbSc6ICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdoaCc6ICdvcmUnLFxuICAgICAgICAgICAgICAgICdkZCc6ICd6aWxlJyxcbiAgICAgICAgICAgICAgICAnTU0nOiAnbHVuaScsXG4gICAgICAgICAgICAgICAgJ3l5JzogJ2FuaSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXBhcmF0b3IgPSAnICc7XG4gICAgICAgIGlmIChudW1iZXIgJSAxMDAgPj0gMjAgfHwgKG51bWJlciA+PSAxMDAgJiYgbnVtYmVyICUgMTAwID09PSAwKSkge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gJyBkZSAnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBzZXBhcmF0b3IgKyBmb3JtYXRba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgcm8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdybycsIHtcbiAgICAgICAgbW9udGhzIDogJ2lhbnVhcmllX2ZlYnJ1YXJpZV9tYXJ0aWVfYXByaWxpZV9tYWlfaXVuaWVfaXVsaWVfYXVndXN0X3NlcHRlbWJyaWVfb2N0b21icmllX25vaWVtYnJpZV9kZWNlbWJyaWUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ2lhbi5fZmVici5fbWFydC5fYXByLl9tYWlfaXVuLl9pdWwuX2F1Zy5fc2VwdC5fb2N0Ll9ub3YuX2RlYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ2R1bWluaWPEg19sdW5pX21hcsibaV9taWVyY3VyaV9qb2lfdmluZXJpX3PDom1ixIN0xIMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnRHVtX0x1bl9NYXJfTWllX0
33378pvaV9WaW5fU8OibScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnRHVfTHVfTWFfTWlfSm9fVmlfU8OiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2F6aSBsYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttw6JpbmUgbGFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbbGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbaWVyaSBsYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbZm9zdGFdIGRkZGQgW2xhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdwZXN0ZSAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIMOubiB1cm3EgycsXG4gICAgICAgICAgICBzIDogJ2PDonRldmEgc2VjdW5kZScsXG4gICAgICAgICAgICBzcyA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtIDogJ3VuIG1pbnV0JyxcbiAgICAgICAgICAgIG1tIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGggOiAnbyBvcsSDJyxcbiAgICAgICAgICAgIGhoIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGQgOiAnbyB6aScsXG4gICAgICAgICAgICBkZCA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBNIDogJ28gbHVuxIMnLFxuICAgICAgICAgICAgTU0gOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeSA6ICd1biBhbicsXG4gICAgICAgICAgICB5eSA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWxcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm87XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIGZ1bmN0aW9uIHBsdXJhbCh3b3JkLCBudW0pIHtcbiAgICAgICAgdmFyIGZvcm1zID0gd29yZC5zcGxpdCgnXycpO1xuICAgICAgICByZXR1cm4gbnVtICUgMTAgPT09IDEgJiYgbnVtICUgMTAwICE9PSAxMSA/IGZvcm1zWzBdIDogKG51bSAlIDEwID49IDIgJiYgbnVtICUgMTAgPD0gNCAmJiAobnVtICUgMTAwIDwgMTAgfHwgbnVtICUgMTAwID49IDIwKSA/IGZvcm1zWzFdIDogZm9ybXNbMl0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICAnc3MnOiB3aXRob3V0U3VmZml4ID8gJ9GB0LXQutGD0L3QtNCwX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCcgOiAn0YHQtdC60YPQvdC00YNf0YHQtdC60YPQvdC00Ytf0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgICdtbSc6IHdpdGhvdXRTdWZmaXggPyAn0LzQuNC90YPRgtCwX9C80LjQvdGD0YLRi1/QvNC40L3Rg9GCJyA6ICfQvNC40L3Rg9GC0YNf0LzQuNC90YPRgtGLX9C80LjQvdGD0YInLFxuICAgICAgICAgICAgJ2hoJzogJ9GH0LDRgV/Rh9Cw0YHQsF/Rh9Cw0YHQvtCyJyxcbiAgICAgICAgICAgICdkZCc6ICfQtNC10L3RjF/QtNC90Y9f0LTQvdC10LknLFxuICAgICAgICAgICAgJ01NJzogJ9C80LXRgdGP0YZf0LzQtdGB0Y/RhtCwX9C80LXRgdGP0YbQtdCyJyxcbiAgICAgICAgICAgICd5eSc6ICfQs9C+0LRf0LPQvtC00LBf0LvQtdGCJ1xuICAgICAgICB9O1xuICAgICAgICBpZiAoa2V5ID09PSAnbScpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9C80LjQvdGD0YLQsCcgOiAn0LzQuNC90YPRgtGDJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBwbHVyYWwoZm9ybWF0W2tleV0sICtudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBtb250aHNQYXJzZSA9IFsvXtGP0L3Qsi9pLCAvXtGE0LXQsi9pLCAvXtC80LDRgC9pLCAvXtCw0L/RgC9pLCAvXtC80LBb0LnRj10vaSwgL17QuNGO0L0vaSwgL17QuNGO0LsvaSwgL17QsNCy0LMvaSwgL17RgdC10L0vaSwgL17QvtC60YIvaSwgL17QvdC+0Y8vaSwgL17QtNC10LovaV07XG5cbiAgICAvLyBodHRwOi8vbmV3LmdyYW1vdGEucnUvc3ByYXZrYS9ydWxlcy8xMzktcHJvcCA6IMKnIDEwM1xuICAgIC8vINCh0L7QutGA0LDRidC10L3QuNGPINC80LXRgdGP0YbQtdCyOiBodHRwOi8vbmV3LmdyYW1vdGEucnUvc3ByYXZrYS9idXJvL3NlYXJjaC1hbnN3ZXI/cz0yNDI2MzdcbiAgICAvLyBDTERSIGRhdGE6ICAgICAgICAgIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvY2xkci9jaGFydHMvMjgvc3VtbWFyeS9ydS5odG1sIzE3NTNcbiAgICB2YXIgcnUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdydScsIHtcbiAgICAgICAgbW9udGhzIDoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0Y/QvdCy0LDRgNGPX9GE0LXQstGA0LDQu9GPX9C80LDRgNGC0LBf0LDQv9GA0LXQu9GPX9C80LDRj1/QuNGO0L3Rj1/QuNGO0LvRj1/QsNCy0LPRg9GB0YLQsF/RgdC10L3RgtGP0LHRgNGPX9C+0LrRgtGP0LHRgNGPX9C90L7Rj9Cx0YDRj1/QtNC10LrQsNCx0YDRjycuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgI
33378HN0YW5kYWxvbmU6ICfRj9C90LLQsNGA0Yxf0YTQtdCy0YDQsNC70Yxf0LzQsNGA0YJf0LDQv9GA0LXQu9GMX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YDRjF/QvtC60YLRj9Cx0YDRjF/QvdC+0Y/QsdGA0Yxf0LTQtdC60LDQsdGA0YwnLnNwbGl0KCdfJylcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiB7XG4gICAgICAgICAgICAvLyDQv9C+IENMRFIg0LjQvNC10L3QvdC+IFwi0LjRjtC7LlwiINC4IFwi0LjRjtC9LlwiLCDQvdC+INC60LDQutC+0Lkg0YHQvNGL0YHQuyDQvNC10L3Rj9GC0Ywg0LHRg9C60LLRgyDQvdCwINGC0L7Rh9C60YMgP1xuICAgICAgICAgICAgZm9ybWF0OiAn0Y/QvdCyLl/RhNC10LLRgC5f0LzQsNGALl/QsNC/0YAuX9C80LDRj1/QuNGO0L3Rj1/QuNGO0LvRj1/QsNCy0LMuX9GB0LXQvdGCLl/QvtC60YIuX9C90L7Rj9CxLl/QtNC10LouJy5zcGxpdCgnXycpLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ9GP0L3Qsi5f0YTQtdCy0YAuX9C80LDRgNGCX9Cw0L/RgC5f0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQsy5f0YHQtdC90YIuX9C+0LrRgi5f0L3QvtGP0LEuX9C00LXQui4nLnNwbGl0KCdfJylcbiAgICAgICAgfSxcbiAgICAgICAgd2Vla2RheXMgOiB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOiAn0LLQvtGB0LrRgNC10YHQtdC90YzQtV/Qv9C+0L3QtdC00LXQu9GM0L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00LBf0YfQtdGC0LLQtdGA0LNf0L/Rj9GC0L3QuNGG0LBf0YHRg9Cx0LHQvtGC0LAnLnNwbGl0KCdfJyksXG4gICAgICAgICAgICBmb3JtYXQ6ICfQstC+0YHQutGA0LXRgdC10L3RjNC1X9C/0L7QvdC10LTQtdC70YzQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTRg1/Rh9C10YLQstC10YDQs1/Qv9GP0YLQvdC40YbRg1/RgdGD0LHQsdC+0YLRgycuc3BsaXQoJ18nKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvXFxbID9b0JLQsl0gPyg/OtC/0YDQvtGI0LvRg9GOfNGB0LvQtdC00YPRjtGJ0YPRjnzRjdGC0YMpPyA/XFxdID9kZGRkL1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ9Cy0YFf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9Cy0YFf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlIDogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZSA6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlIDogbW9udGhzUGFyc2UsXG5cbiAgICAgICAgLy8g0L/QvtC70L3Ri9C1INC90LDQt9Cy0LDQvdC40Y8g0YEg0L/QsNC00LXQttCw0LzQuCwg0L/QviDRgtGA0Lgg0LHRg9C60LLRiywg0LTQu9GPINC90LXQutC+0YLQvtGA0YvRhSwg0L/QviA0INCx0YPQutCy0YssINGB0L7QutGA0LDRidC10L3QuNGPINGBINGC0L7Rh9C60L7QuSDQuCDQsdC10Lcg0YLQvtGH0LrQuFxuICAgICAgICBtb250aHNSZWdleDogL14o0Y/QvdCy0LDRgFvRjNGPXXzRj9C90LJcXC4/fNGE0LXQstGA0LDQu1vRjNGPXXzRhNC10LLRgD9cXC4/fNC80LDRgNGC0LA/fNC80LDRgFxcLj980LDQv9GA0LXQu1vRjNGPXXzQsNC/0YBcXC4/fNC80LBb0LnRj1180LjRjtC9W9GM0Y9dfNC40Y7QvVxcLj980LjRjtC7W9GM0Y9dfNC40Y7Qu1xcLj980LDQstCz0YPRgdGC0LA/fNCw0LLQs1xcLj980YHQtdC90YLRj9Cx0YBb0YzRj1180YHQtdC90YI/XFwuP3zQvtC60YLRj9Cx0YBb0YzRj1180L7QutGCXFwuP3zQvdC+0Y/QsdGAW9GM0Y9dfNC90L7Rj9CxP1xcLj980LTQtdC60LDQsdGAW9GM0Y9dfNC00LXQulxcLj8pL2ksXG5cbiAgICAgICAgLy8g0LrQvtC/0LjRjyDQv9GA0LXQtNGL0LTRg9GJ0LXQs9C+XG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IC9eKNGP0L3QstCw0YBb0YzRj1180Y/QvdCyXFwuP3zRhNC10LLRgNCw0Ltb0YzRj1180YTQtdCy0YA/XFwuP3zQvNCw0YDRgtCwP3zQvNCw0YBcXC4/fNCw0L/RgNC10Ltb0YzRj1180LDQv9GAXFwuP3zQvNCwW9C50Y9dfNC40Y7QvVvRjNGPXXzQuNGO0L1cXC4/fNC40Y7Qu1vRjNGPXXzQuNGO0LtcXC4/fNCw0LLQs9GD0YHRgtCwP3zQsNCy0LNcXC4/fNGB0LXQvdGC0Y/QsdGAW9GM0Y9dfNGB0LXQvdGCP1xcLj980L7QutGC0Y/QsdGAW9GM0Y9dfNC+0LrRglxcLj980L3QvtGP0LHRgFvRjNGPXXzQvdC+0Y/QsT9cXC4/fNC00LXQutCw0LHRgFvRjNGPXXzQtNC10LpcXC4/KS9pLFxuXG4gICAgICAgIC8vINC/0L7Qu9C90YvQtSDQvdCw0LfQstCw0L3QuNGPINGBINC/0LDQtNC10LbQsNC80LhcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKNGP0L3QstCw0YBb0Y/RjF180YTQtdCy0YDQsNC7W9GP0YxdfNC80LDRgNGC0LA/fNCw0L/RgNC10Ltb0Y/RjF180LzQsFvRj9C5XXzQuNGO0L1b0Y/RjF180LjRjtC7W9GP0YxdfNCw0LLQs9GD0YHRgtCwP3zRgdC10L3RgtGP0LHRgFvRj9GMXXzQvtC60YLRj9Cx0YBb0Y/RjF180L3QvtGP0LHRgFvRj9GMXXzQtNC10LrQsNCx0YBb0Y/RjF0pL2ksXG5cbiAgICAgICAgLy8g0JLRi9GA0LDQttC10L3QuNC1LCDQutC+0YLQvtGA0L7QtSDRgdC+0L7RgtCy0LXRgdGC0LLRg9C10YIg0YLQvtC70YzQutC+INGB0L7QutGA0LDRidGR0L3QvdGL0Lwg0YTQvtGA0LzQsNC8XG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC9eKNGP0L3QslxcLnzRhNC10LLRgD9cXC580LzQsNGAW9GCLl180LDQv9GAXFwufNC80LBb0Y/QuV180LjRjtC9W9GM0Y8uXXzQuNGO0Ltb0YzRjy5dfNCw0LLQs1xcLnzRgdC10L3Rgj9cXC580L7QutGCXFwufNC90L7Rj9CxP1xcLnzQtNC10LpcXC4pL2ksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVkg0LMuJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSDQsy4sIEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSDQsy4sIEg6bW0nXG4gICAgICAgI
33378H0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQodC10LPQvtC00L3Rjywg0LJdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0JfQsNCy0YLRgNCwLCDQsl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vQktGH0LXRgNCwLCDQsl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgICAgICBpZiAobm93LndlZWsoKSAhPT0gdGhpcy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0YHQu9C10LTRg9GO0YnQtdC1XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDRgdC70LXQtNGD0Y7RidC40LldIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINGB0LvQtdC00YPRjtGJ0YPRjl0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXkoKSA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JLQvl0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkl0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgICAgICBpZiAobm93LndlZWsoKSAhPT0gdGhpcy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0L/RgNC+0YjQu9C+0LVdIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINC/0YDQvtGI0LvRi9C5XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDQv9GA0L7RiNC70YPRjl0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXkoKSA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JLQvl0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkl0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn0YfQtdGA0LXQtyAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzINC90LDQt9Cw0LQnLFxuICAgICAgICAgICAgcyA6ICfQvdC10YHQutC+0LvRjNC60L4g0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIHNzIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG0gOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbW0gOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaCA6ICfRh9Cw0YEnLFxuICAgICAgICAgICAgaGggOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZCA6ICfQtNC10L3RjCcsXG4gICAgICAgICAgICBkZCA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBNIDogJ9C80LXRgdGP0YYnLFxuICAgICAgICAgICAgTU0gOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeSA6ICfQs9C+0LQnLFxuICAgICAgICAgICAgeXkgOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/QvdC+0YfQuHzRg9GC0YDQsHzQtNC90Y980LLQtdGH0LXRgNCwL2ksXG4gICAgICAgIGlzUE0gOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijQtNC90Y980LLQtdGH0LXRgNCwKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0L3QvtGH0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GD0YLRgNCwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQtNC90Y8nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Cy0LXRh9C10YDQsCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0Ll80LPQvnzRjykvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgI
33378HN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LknO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3Qs9C+JztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0Y8nO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJ1O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAn2KzZhtmI2LHZiicsXG4gICAgICAgICfZgdmK2KjYsdmI2LHZiicsXG4gICAgICAgICfZhdin2LHahicsXG4gICAgICAgICfYp9m+2LHZitmEJyxcbiAgICAgICAgJ9mF2KbZiicsXG4gICAgICAgICfYrNmI2YYnLFxuICAgICAgICAn2KzZiNmE2KfYodmQJyxcbiAgICAgICAgJ9ii2q/Ys9m9JyxcbiAgICAgICAgJ9iz2YrZvtm92YXYqNixJyxcbiAgICAgICAgJ9ii2qrZvdmI2KjYsScsXG4gICAgICAgICfZhtmI2YXYqNixJyxcbiAgICAgICAgJ9qK2LPZhdio2LEnXG4gICAgXTtcbiAgICB2YXIgZGF5cyA9IFtcbiAgICAgICAgJ9ii2obYsScsXG4gICAgICAgICfYs9mI2YXYsScsXG4gICAgICAgICfYp9qx2KfYsdmIJyxcbiAgICAgICAgJ9in2LHYqNi5JyxcbiAgICAgICAgJ9iu2YXZitizJyxcbiAgICAgICAgJ9is2YXYuScsXG4gICAgICAgICfah9mG2ofYsSdcbiAgICBdO1xuXG4gICAgdmFyIHNkID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc2QnLCB7XG4gICAgICAgIG1vbnRocyA6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQgOiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzIDogZGF5cyxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6IGRheXMsXG4gICAgICAgIHdlZWtkYXlzTWluIDogZGF5cyxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGTYjCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i12KjYrXzYtNin2YUvLFxuICAgICAgICBpc1BNIDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9i02KfZhScgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i12KjYrSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ9i02KfZhSc7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdb2KfahF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb2LPagNin2rvZil0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBb2Kfas9mK2YYg2YfZgdiq2Yog2KrZil0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb2qrYp9mE2YfZh10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW9qv2LLYsdmK2YQg2YfZgdiq2YpdIGRkZGQgW9iq2YpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyDZvtmI2KEnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDYp9qzJyxcbiAgICAgICAgICAgIHMgOiAn2obZhtivINiz2YraqtmG2oonLFxuICAgICAgICAgICAgc3MgOiAnJWQg2LPZitqq2YbaiicsXG4gICAgICAgICAgICBtIDogJ9mH2qog2YXZhtm9JyxcbiAgICAgICAgICAgIG1tIDogJyVkINmF2YbZvScsXG4gICAgICAgICAgICBoIDogJ9mH2qog2qrZhNin2qonLFxuICAgICAgICAgICAgaGggOiAnJWQg2qrZhNin2qonLFxuICAgICAgICAgICAgZCA6ICfZh9qqINqP2YrZhtmH2YYnLFxuICAgICAgICAgICAgZGQgOiAnJWQg2o/ZitmG2YfZhicsXG4gICAgICAgICAgICBNIDogJ9mH2qog2YXZh9mK2YbZiCcsXG4gICAgICAgICAgICBNTSA6ICclZCDZhdmH2YrZhtinJyxcbiAgICAgICAgICAgIHkgOiAn2YfaqiDYs9in2YQnLFxuICAgICAgICAgICAgeXkgOiAnJWQg2LPYp9mEJ1xuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgI
33378H0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNkO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc2UgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzZScsIHtcbiAgICAgICAgbW9udGhzIDogJ2/EkcSRYWphZ2Vtw6FubnVfZ3VvdnZhbcOhbm51X25qdWvEjWFtw6FubnVfY3VvxYtvbcOhbm51X21pZXNzZW3DoW5udV9nZWFzc2Vtw6FubnVfc3VvaWRuZW3DoW5udV9ib3JnZW3DoW5udV/EjWFrxI1hbcOhbm51X2dvbGdnb3Rtw6FubnVfc2vDoWJtYW3DoW5udV9qdW92bGFtw6FubnUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ2/EkcSRal9ndW92X25qdWtfY3VvX21pZXNfZ2Vhc19zdW9pX2JvcmdfxI1ha8SNX2dvbGdfc2vDoWJfanVvdicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnc290bmFiZWFpdmlfdnVvc3PDoXJnYV9tYcWLxYtlYsOhcmdhX2dhc2thdmFoa2t1X2R1b3Jhc3RhdF9iZWFyamFkYXRfbMOhdnZhcmRhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdzb3RuX3Z1b3NfbWHFi19nYXNrX2R1b3JfYmVhcl9sw6F2Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdzX3ZfbV9nX2RfYl9MJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnTU1NTSBELiBbYi5dIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ01NTU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tvdG5lIHRpXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2lodHRpbiB0aV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt0aV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpa3RlIHRpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tvdmRkaXRdIGRkZGQgW3RpXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyBnZWHFvmVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnbWHFi2l0ICVzJyxcbiAgICAgICAgICAgIHMgOiAnbW9hZGRlIHNla3VuZGRhdCcsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGRhdCcsXG4gICAgICAgICAgICBtIDogJ29rdGEgbWludWh0YScsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51aHRhdCcsXG4gICAgICAgICAgICBoIDogJ29rdGEgZGlpbW11JyxcbiAgICAgICAgICAgIGhoIDogJyVkIGRpaW1tdXQnLFxuICAgICAgICAgICAgZCA6ICdva3RhIGJlYWl2aScsXG4gICAgICAgICAgICBkZCA6ICclZCBiZWFpdnZpdCcsXG4gICAgICAgICAgICBNIDogJ29rdGEgbcOhbm51JyxcbiAgICAgICAgICAgIE1NIDogJyVkIG3DoW51dCcsXG4gICAgICAgICAgICB5IDogJ29rdGEgamFoa2knLFxuICAgICAgICAgICAgeXkgOiAnJWQgamFnaXQnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2U7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIC8qanNoaW50IC1XMTAwKi9cbiAgICB2YXIgc2kgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzaScsIHtcbiAgICAgICAgbW9udGhzIDogJ+C2ouC2seC3gOC3j+C2u+C3kl/gtrTgt5ngtrbgtrvgt4Dgt4/gtrvgt5Jf4La44LeP4La74LeK4Lat4LeUX+C2heC2tOC3iuKAjeC2u+C3muC2veC3il/gtrjgt5Dgtrrgt5Jf4Lai4LeW4Lax4LeSX+C2ouC3luC2veC3kl/gtoXgtpzgt53gt4Pgt4rgtq3gt5Rf4LeD4LeQ4La04LeK4Lat4LeQ4La44LeK4La24La74LeKX+C2lOC2muC3iuC2reC3neC2tuC2u+C3il/gtrHgt5zgt4Dgt5Dgtrjgt4rgtrbgtrvgt4pf4Lav4LeZ4LeD4LeQ4La44LeK4La24La74LeKJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfgtqLgtrFf4La04LeZ4La2X+C2uOC3j+C2u+C3il/gtoXgtrTgt4pf4La44LeQ4La64LeSX+C2ouC3luC2seC3kl/gtqLgt5bgtr3gt5Jf4LaF4Lac4LedX+C3g+C3kOC2tOC3il/gtpTgtprgt4pf4Lax4Lec4LeA4LeQX+C2r+C3meC3g+C3kCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn4LaJ4La74Le
33378S4Lav4LePX+C3g+C2s+C3lOC2r+C3j1/gtoXgtp/gt4Tgtrvgt5Tgt4Dgt4/gtq/gt49f4La24Lav4LeP4Lav4LePX+C2tuC3iuKAjeC2u+C3hOC3g+C3iuC2tOC2reC3kuC2seC3iuC2r+C3j1/gt4Pgt5Lgtprgt5Tgtrvgt4/gtq/gt49f4LeD4LeZ4Lax4LeD4LeU4La74LeP4Lav4LePJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ+C2ieC2u+C3kl/gt4PgtrPgt5Rf4LaF4LafX+C2tuC2r+C3j1/gtrbgt4rigI3gtrvgt4Rf4LeD4LeS4Laa4LeUX+C3g+C3meC2sScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn4LaJX+C3g1/gtoVf4La2X+C2tuC3iuKAjeC2u1/gt4Pgt5Jf4LeD4LeZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ2EgaDptbScsXG4gICAgICAgICAgICBMVFMgOiAnYSBoOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTCA6ICdZWVlZIE1NTU0gRCcsXG4gICAgICAgICAgICBMTEwgOiAnWVlZWSBNTU1NIEQsIGEgaDptbScsXG4gICAgICAgICAgICBMTExMIDogJ1lZWVkgTU1NTSBEIFvgt4Dgt5DgtrHgt5JdIGRkZGQsIGEgaDptbTpzcydcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vgtoXgtq9dIExUW+C2p10nLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb4LeE4LeZ4LanXSBMVFvgtqddJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgTFRb4LanXScsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vgtorgtrrgt5pdIExUW+C2p10nLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW+C2tOC3g+C3lOC2nOC3kuC2ul0gZGRkZCBMVFvgtqddJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclc+C2muC3kuC2seC3iicsXG4gICAgICAgICAgICBwYXN0IDogJyVz4Laa4LanIOC2tOC3meC2uycsXG4gICAgICAgICAgICBzIDogJ+C2reC2reC3iuC2tOC2uyDgtprgt5Lgt4Tgt5LgtrTgtronLFxuICAgICAgICAgICAgc3MgOiAn4Lat4Lat4LeK4La04La7ICVkJyxcbiAgICAgICAgICAgIG0gOiAn4La44LeS4Lax4LeS4Lat4LeK4Lat4LeU4LeAJyxcbiAgICAgICAgICAgIG1tIDogJ+C2uOC3kuC2seC3kuC2reC3iuC2reC3lCAlZCcsXG4gICAgICAgICAgICBoIDogJ+C2tOC3kOC2uicsXG4gICAgICAgICAgICBoaCA6ICfgtrTgt5DgtrogJWQnLFxuICAgICAgICAgICAgZCA6ICfgtq/gt5LgtrHgtronLFxuICAgICAgICAgICAgZGQgOiAn4Lav4LeS4LaxICVkJyxcbiAgICAgICAgICAgIE0gOiAn4La44LeP4LeD4La6JyxcbiAgICAgICAgICAgIE1NIDogJ+C2uOC3j+C3gyAlZCcsXG4gICAgICAgICAgICB5IDogJ+C3gOC3g+C2uycsXG4gICAgICAgICAgICB5eSA6ICfgt4Dgt4PgtrsgJWQnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSDgt4Dgt5DgtrHgt5IvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg4LeA4LeQ4Lax4LeSJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZSA6IC/gtrTgt5ngtrsg4LeA4La74LeUfOC2tOC3g+C3iiDgt4Dgtrvgt5R84La04LeZLuC3gHzgtrQu4LeALi8sXG4gICAgICAgIGlzUE0gOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+C2tC7gt4AuJyB8fCBpbnB1dCA9PT0gJ+C2tOC3g+C3iiDgt4Dgtrvgt5QnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfgtrQu4LeALicgOiAn4La04LeD4LeKIOC3gOC2u+C3lCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ+C2tOC3mS7gt4AuJyA6ICfgtrTgt5ngtrsg4LeA4La74LeUJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbW9udGhzID0gJ2phbnXDoXJfZmVicnXDoXJfbWFyZWNfYXByw61sX23DoWpfasO6bl9qw7psX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0w7NiZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2phbl9mZWJfbWFyX2Fwcl9tw6FqX2rDum5fasO6bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgICAgIHJldHVybiAobiA+IDEpICYmIChuIDwgNSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOiAgLy8gYSBmZXcgc2Vjb25kcyAvIGluIGEgZmV3IHNlY29uZHMgLyBhIGZldyBzZWNvbmRzIGFnb1xuICAgICAgICAgICAgICAgI
33378HJldHVybiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkgPyAncMOhciBzZWvDum5kJyA6ICdww6FyIHNla3VuZGFtaSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6IC8vIDkgc2Vjb25kcyAvIGluIDkgc2Vjb25kcyAvIDkgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Nla3VuZHknIDogJ3Nla8O6bmQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ3Nla3VuZGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbSc6ICAvLyBhIG1pbnV0ZSAvIGluIGEgbWludXRlIC8gYSBtaW51dGUgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnbWluw7p0YScgOiAoaXNGdXR1cmUgPyAnbWluw7p0dScgOiAnbWluw7p0b3UnKTtcbiAgICAgICAgICAgIGNhc2UgJ21tJzogLy8gOSBtaW51dGVzIC8gaW4gOSBtaW51dGVzIC8gOSBtaW51dGVzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWluw7p0eScgOiAnbWluw7p0Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtaW7DunRhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2gnOiAgLy8gYW4gaG91ciAvIGluIGFuIGhvdXIgLyBhbiBob3VyIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2hvZGluYScgOiAoaXNGdXR1cmUgPyAnaG9kaW51JyA6ICdob2Rpbm91Jyk7XG4gICAgICAgICAgICBjYXNlICdoaCc6IC8vIDkgaG91cnMgLyBpbiA5IGhvdXJzIC8gOSBob3VycyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2hvZGlueScgOiAnaG9kw61uJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdob2RpbmFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZCc6ICAvLyBhIGRheSAvIGluIGEgZGF5IC8gYSBkYXkgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSA/ICdkZcWIJyA6ICdkxYhvbSc7XG4gICAgICAgICAgICBjYXNlICdkZCc6IC8vIDkgZGF5cyAvIGluIDkgZGF5cyAvIDkgZGF5cyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2RuaScgOiAnZG7DrScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZMWIYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNJzogIC8vIGEgbW9udGggLyBpbiBhIG1vbnRoIC8gYSBtb250aCBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpID8gJ21lc2lhYycgOiAnbWVzaWFjb20nO1xuICAgICAgICAgICAgY2FzZSAnTU0nOiAvLyA5IG1vbnRocyAvIGluIDkgbW9udGhzIC8gOSBtb250aHMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtZXNpYWNlJyA6ICdtZXNpYWNvdicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbWVzaWFjbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3knOiAgLy8gYSB5ZWFyIC8gaW4gYSB5ZWFyIC8gYSB5ZWFyIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkgPyAncm9rJyA6ICdyb2tvbSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6IC8vIDkgeWVhcnMgLyBpbiA5IHllYXJzIC8gOSB5ZWFycyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Jva3knIDogJ3Jva292Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdyb2ttaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNrID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc2snLCB7XG4gICAgICAgIG1vbnRocyA6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQgOiBtb250aHNTaG9ydCxcbiAgICAgICAgd2Vla2RheXMgOiAnbmVkZcS+YV9wb25kZWxva191dG9yb2tfc3RyZWRhX8WhdHZydG9rX3BpYXRva19zb2JvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnbmVfcG9fdXRfc3RfxaF0X3BpX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICduZV9wb191dF9zdF/FoXRfcGlfc28nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBELiBNTU1NIFlZWVkgSDptbS
33378dcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RuZXMgb10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t6YWp0cmEgb10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBuZWRlxL51IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc3RyZWR1IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdm8gxaF0dnJ0b2sgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHBpYXRvayBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc29ib3R1IG9dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1t2xI1lcmEgb10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDuiBuZWRlxL51IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO9XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw7ogc3RyZWR1IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO9XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw7ogc29ib3R1IG9dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICdwcmVkICVzJyxcbiAgICAgICAgICAgIHMgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzcyA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGggOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZCA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE0gOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHkgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eSA6IHRyYW5zbGF0ZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNrO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2Y
33378XIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbmVrYWogc2VrdW5kJyA6ICduZWthaiBzZWt1bmRhbWknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggPyAnc2VrdW5kbycgOiAnc2VrdW5kaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnc2VrdW5kaScgOiAnc2VrdW5kYWgnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdzZWt1bmRlJyA6ICdzZWt1bmRhaCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnZW5hIG1pbnV0YScgOiAnZW5vIG1pbnV0byc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCA/ICdtaW51dGEnIDogJ21pbnV0byc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWludXRpJyA6ICdtaW51dGFtYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21pbnV0ZScgOiAnbWludXRhbWknO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21pbnV0JyA6ICdtaW51dGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdlbmEgdXJhJyA6ICdlbm8gdXJvJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4ID8gJ3VyYScgOiAndXJvJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICd1cmknIDogJ3VyYW1hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAndXJlJyA6ICd1cmFtaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAndXInIDogJ3VyYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2VuIGRhbicgOiAnZW5pbSBkbmVtJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RhbicgOiAnZG5lbSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZG5pJyA6ICdkbmV2b21hJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkbmknIDogJ2RuZXZpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2VuIG1lc2VjJyA6ICdlbmltIG1lc2VjZW0nO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWMnIDogJ21lc2VjZW0nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21lc2VjYScgOiAnbWVzZWNlbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlY2UnIDogJ21lc2VjaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWNldicgOiAnbWVzZWNpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgI
33378HJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2VubyBsZXRvJyA6ICdlbmltIGxldG9tJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldG8nIDogJ2xldG9tJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXRpJyA6ICdsZXRvbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXRhJyA6ICdsZXRpJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXQnIDogJ2xldGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc2wnLCB7XG4gICAgICAgIG1vbnRocyA6ICdqYW51YXJfZmVicnVhcl9tYXJlY19hcHJpbF9tYWpfanVuaWpfanVsaWpfYXZndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAnbmVkZWxqYV9wb25lZGVsamVrX3RvcmVrX3NyZWRhX8SNZXRydGVrX3BldGVrX3NvYm90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICduZWQuX3Bvbi5fdG9yLl9zcmUuX8SNZXQuX3BldC5fc29iLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnbmVfcG9fdG9fc3JfxI1lX3BlX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbS
33378dcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5ICA6ICdbZGFuZXMgb2JdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgIDogJ1tqdXRyaSBvYl0gTFQnLFxuXG4gICAgICAgICAgICBuZXh0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gW25lZGVsam9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBbc3JlZG9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBbc29ib3RvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gZGRkZCBbb2JdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheSAgOiAnW3bEjWVyYWogb2JdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcmVqxaFuam9dIFtuZWRlbGpvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJlasWhbmpvXSBbc3JlZG9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcmVqxaFuam9dIFtzb2JvdG9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcmVqxaFuamldIGRkZGQgW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfEjWV6ICVzJyxcbiAgICAgICAgICAgIHBhc3QgICA6ICdwcmVkICVzJyxcbiAgICAgICAgICAgIHMgICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBzcyAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbSAgICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoICAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGggICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQgICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZCAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTSAgICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NICAgICA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5ICAgICAgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXkgICAgIDogcHJvY2Vzc1JlbGF0aXZlVGltZVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsIDogJyVkLicsXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgc3EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzcScsIHtcbiAgICAgICAgbW9udGhzIDogJ0phbmFyX1Noa3VydF9NYXJzX1ByaWxsX01hal9RZXJzaG9yX0tvcnJpa19HdXNodF9TaHRhdG9yX1RldG9yX07Dq250b3JfRGhqZXRvcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX1Noa19NYXJfUHJpX01hal9RZXJfS29yX0d1c19TaHRfVGV0X07Dq25fRGhqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdFIERpZWxfRSBIw6tuw6tfRSBNYXJ0w6tfRSBNw6tya3Vyw6tfRSBFbmp0ZV9FIFByZW10ZV9FIFNodHVuw6snLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnRGllX0jDq25fTWFyX03Dq3JfRW5qX1ByZV9TaHQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0RfSF9NYV9Nw6tfRV9QX1NoJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvUER8TUQvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgI
33378HJldHVybiBpbnB1dC5jaGFyQXQoMCkgPT09ICdNJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VycyA8IDEyID8gJ1BEJyA6ICdNRCc7XG4gICAgICAgIH0sXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tTb3QgbsOrXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tOZXPDq3IgbsOrXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFtuw6tdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0RqZSBuw6tdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ2RkZGQgW2Uga2FsdWFyIG7Dq10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ27DqyAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzIG3DqyBwYXLDqycsXG4gICAgICAgICAgICBzIDogJ2Rpc2Egc2Vrb25kYScsXG4gICAgICAgICAgICBzcyA6ICclZCBzZWtvbmRhJyxcbiAgICAgICAgICAgIG0gOiAnbmrDqyBtaW51dMOrJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnV0YScsXG4gICAgICAgICAgICBoIDogJ25qw6sgb3LDqycsXG4gICAgICAgICAgICBoaCA6ICclZCBvcsOrJyxcbiAgICAgICAgICAgIGQgOiAnbmrDqyBkaXTDqycsXG4gICAgICAgICAgICBkZCA6ICclZCBkaXTDqycsXG4gICAgICAgICAgICBNIDogJ25qw6sgbXVhaicsXG4gICAgICAgICAgICBNTSA6ICclZCBtdWFqJyxcbiAgICAgICAgICAgIHkgOiAnbmrDqyB2aXQnLFxuICAgICAgICAgICAgeXkgOiAnJWQgdml0ZSdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbCA6ICclZC4nLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzcTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHRyYW5zbGF0b3IgPSB7XG4gICAgICAgIHdvcmRzOiB7IC8vRGlmZmVyZW50IGdyYW1tYXRpY2FsIGNhc2VzXG4gICAgICAgICAgICBzczogWyfRgdC10LrRg9C90LTQsCcsICfRgdC10LrRg9C90LTQtScsICfRgdC10LrRg9C90LTQuCddLFxuICAgICAgICAgICAgbTogWyfRmNC10LTQsNC9INC80LjQvdGD0YInLCAn0ZjQtdC00L3QtSDQvNC40L3Rg9GC0LUnXSxcbiAgICAgICAgICAgIG1tOiBbJ9C80LjQvdGD0YInLCAn0LzQuNC90YPRgtC1JywgJ9C80LjQvdGD0YLQsCddLFxuICAgICAgICAgICAgaDogWyfRmNC10LTQsNC9INGB0LDRgicsICfRmNC10LTQvdC+0LMg0YHQsNGC0LAnXSxcbiAgICAgICAgICAgIGhoOiBbJ9GB0LDRgicsICfRgdCw0YLQsCcsICfRgdCw0YLQuCddLFxuICAgICAgICAgICAgZGQ6IFsn0LTQsNC9JywgJ9C00LDQvdCwJywgJ9C00LDQvdCwJ10sXG4gICAgICAgICAgICBNTTogWyfQvNC10YHQtdGGJywgJ9C80LXRgdC10YbQsCcsICfQvNC10YHQtdGG0LgnXSxcbiAgICAgICAgICAgIHl5OiBbJ9Cz0L7QtNC40L3QsCcsICfQs9C+0LTQuNC90LUnLCAn0LPQvtC00LjQvdCwJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTogZnVuY3Rpb24gKG51bWJlciwgd29yZEtleSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciA9PT0gMSA/IHdvcmRLZXlbMF0gOiAobnVtYmVyID49IDIgJiYgbnVtYmVyIDw9IDQgPyB3b3JkS2V5WzFdIDogd29yZEtleVsyXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgICAgICB2Y
33378XIgd29yZEtleSA9IHRyYW5zbGF0b3Iud29yZHNba2V5XTtcbiAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyB3b3JkS2V5WzBdIDogd29yZEtleVsxXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIHRyYW5zbGF0b3IuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShudW1iZXIsIHdvcmRLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBzckN5cmwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzci1jeXJsJywge1xuICAgICAgICBtb250aHM6ICfRmNCw0L3Rg9Cw0YBf0YTQtdCx0YDRg9Cw0YBf0LzQsNGA0YJf0LDQv9GA0LjQu1/QvNCw0Zhf0ZjRg9C9X9GY0YPQu1/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LHQsNGAX9C+0LrRgtC+0LHQsNGAX9C90L7QstC10LzQsdCw0YBf0LTQtdGG0LXQvNCx0LDRgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRmNCw0L0uX9GE0LXQsS5f0LzQsNGALl/QsNC/0YAuX9C80LDRmF/RmNGD0L1f0ZjRg9C7X9Cw0LLQsy5f0YHQtdC/Ll/QvtC60YIuX9C90L7Qsi5f0LTQtdGGLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfQvdC10LTQtdGZ0LBf0L/QvtC90LXQtNC10ZnQsNC6X9GD0YLQvtGA0LDQul/RgdGA0LXQtNCwX9GH0LXRgtCy0YDRgtCw0Lpf0L/QtdGC0LDQul/RgdGD0LHQvtGC0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQvdC10LQuX9C/0L7QvS5f0YPRgtC+Ll/RgdGA0LUuX9GH0LXRgi5f0L/QtdGCLl/RgdGD0LEuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9C90LVf0L/Qvl/Rg9GCX9GB0YBf0YfQtV/Qv9C1X9GB0YMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQtNCw0L3QsNGBINGDXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9GB0YPRgtGA0LAg0YNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9GDXSBb0L3QtdC00LXRmdGDXSBb0YNdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0YNdIFvRgdGA0LXQtNGDXSBb0YNdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0YNdIFvRgdGD0LHQvtGC0YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gZGRkZCBb0YNdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheSAgOiAnW9GY0YPRh9C1INGDXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2Y
33378XIgbGFzdFdlZWtEYXlzID0gW1xuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQtV0gW9C90LXQtNC10ZnQtV0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvQv9C+0L3QtdC00LXRmdC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQvtCzXSBb0YPRgtC+0YDQutCwXSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70LVdIFvRgdGA0LXQtNC1XSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70L7Qs10gW9GH0LXRgtCy0YDRgtC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQvtCzXSBb0L/QtdGC0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C1XSBb0YHRg9Cx0L7RgtC1XSBb0YNdIExUJ1xuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RXZWVrRGF5c1t0aGlzLmRheSgpXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn0LfQsCAlcycsXG4gICAgICAgICAgICBwYXN0ICAgOiAn0L/RgNC1ICVzJyxcbiAgICAgICAgICAgIHMgICAgICA6ICfQvdC10LrQvtC70LjQutC+INGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIHNzICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbSAgICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtbSAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGggICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaGggICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkICAgICAgOiAn0LTQsNC9JyxcbiAgICAgICAgICAgIGRkICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgTSAgICAgIDogJ9C80LXRgdC10YYnLFxuICAgICAgICAgICAgTU0gICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICB5ICAgICAgOiAn0LPQvtC00LjQvdGDJyxcbiAgICAgICAgICAgIHl5ICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3JDeXJsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgdHJhbnNsYXRvciA9IHtcbiAgICAgICAgd29yZHM6IHsgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgICAgIHNzOiBbJ3Nla3VuZGEnLCAnc2VrdW5kZScsICdzZWt1bmRpJ10sXG4gICAgICAgICAgICBtOiBbJ2plZGFuIG1pbnV0JywgJ2plZG5lIG1pbnV0ZSddLFxuICAgICAgICAgICAgbW06IFsnbWludXQnLCAnbWludXRlJywgJ21pbnV0YSddLFxuICAgICAgICAgICAgaDogWydqZWRhbiBzYXQnLCAnamVkbm9nIHNhdGEnXSxcbiAgICAgICAgICAgIGhoOiBbJ3NhdCcsICdzYXRhJywgJ3NhdGknXSxcbiAgICAgICAgICAgIGRkOiBbJ2RhbicsICdkYW5hJywgJ2RhbmEnXSxcbiAgICAgICAgICAgIE1NOiBbJ21lc2VjJywgJ21lc2VjYScsICdtZXNlY2knXSxcbiAgICAgICAgICAgIHl5OiBbJ2dvZGluYScsICdnb2RpbmUnLCAnZ29kaW5hJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTogZnVuY3Rpb24gKG51bWJlciwgd29yZEtleSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciA9PT0gMSA/IHdvcmRLZXlbMF0gOiAobnVtYmVyID49IDIgJiYgbnVtYmVyIDw9IDQgPyB3b3JkS2V5WzFdIDogd29yZEtleVsyXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgICAgICB2Y
33378XIgd29yZEtleSA9IHRyYW5zbGF0b3Iud29yZHNba2V5XTtcbiAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyB3b3JkS2V5WzBdIDogd29yZEtleVsxXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIHRyYW5zbGF0b3IuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShudW1iZXIsIHdvcmRLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBzciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NyJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICduZWRlbGphX3BvbmVkZWxqYWtfdXRvcmFrX3NyZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmUuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkYW5hcyB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3N1dHJhIHVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtuZWRlbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JlZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzdWJvdHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheSAgOiAnW2p1xI1lIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW25lZGVsamVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFtwb25lZGVsamthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbdXRvcmthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzcmVkZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW8SNZXR2cnRrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BldGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCdcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0V2Vla0RheXNbdGhpcy5kYXkoKV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3QgICA6ICdwcmUgJXMnLFxuICAgICAgICAgICAgcyAgICAgIDogJ25la29saWtvIHNla3VuZGknLFxuICAgICAgICAgICAgc3MgICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtICAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaCAgICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoaCAgICAgOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQgICAgICA6ICdkYW4nLFxuICAgICAgICAgICAgZGQgICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNICAgICAgOiAnbWVzZWMnLFxuICAgICAgICAgICAgTU0gICAgIDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICB5ICAgICAgOiAnZ29kaW51JyxcbiAgICAgICAgICAgIHl5ICAgICA6IHRyYW5zbGF0b3IudHJhbnNsYXRlXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3I7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eX
33378Blb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBzcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NzJywge1xuICAgICAgICBtb250aHMgOiBcIkJoaW1iaWR2d2FuZV9JbmRsb3ZhbmFfSW5kbG92J2xlbmtodWx1X01hYmFzYV9Jbmtod2VraHdldGlfSW5obGFiYV9LaG9sd2FuZV9JbmdjaV9JbnlvbmlfSW1waGFsYV9Md2V0aV9JbmdvbmdvbmlcIi5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdCaGlfSW5hX0ludV9NYWJfSW5rX0luaF9LaG9fSWdjX0lueV9JbXBfTHdlX0lnbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnTGlzb250Zm9fVW1zb21idWx1a29fTGVzaWJpbGlfTGVzaXRzYXRmdV9MZXNpbmVfTGVzaWhsYW51X1VtZ2NpYmVsbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdMaXNfVW1iX0xzYl9MZXNfTHNpX0xzaF9VbWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0xpX1VzX0xiX0x0X0xzX0xoX1VnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFMgOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW05hbXVobGEgbmdhXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1tLdXNhc2EgbmdhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFtuZ2FdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW0l0b2xvIG5nYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBbbGVsaXBoZWxpbGVdIFtuZ2FdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICduZ2EgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICd3ZW50ZWthIG5nYSAlcycsXG4gICAgICAgICAgICBzIDogJ2VtaXp1endhbmEgbG9tY2FuZScsXG4gICAgICAgICAgICBzcyA6ICclZCBtenV6d2FuYScsXG4gICAgICAgICAgICBtIDogJ3VtenV6dScsXG4gICAgICAgICAgICBtbSA6ICclZCBlbWl6dXp1JyxcbiAgICAgICAgICAgIGggOiAnbGlob3JhJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGVtYWhvcmEnLFxuICAgICAgICAgICAgZCA6ICdsaWxhbmdhJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGVtYWxhbmdhJyxcbiAgICAgICAgICAgIE0gOiAnaW55YW5nYScsXG4gICAgICAgICAgICBNTSA6ICclZCB0aW55YW5nYScsXG4gICAgICAgICAgICB5IDogJ3Vtbnlha2EnLFxuICAgICAgICAgICAgeXkgOiAnJWQgaW1pbnlha2EnXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9la3VzZW5pfGVtaW5pfGVudHNhbWJhbWF8ZWJ1c3VrdS8sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZWt1c2VuaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VtaW5pJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZW50c2FtYmFtYSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZWJ1c3VrdSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdla3VzZW5pJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ2VtaW5pJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdlbnRzYW1iYW1hJyB8fCBtZXJpZGllbSA9PT0gJ2VidXN1a3UnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQnLFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3YnLCB7XG4gICAgICAgIG1vbnRocyA6ICdqYW51YXJpX2ZlYnJ1YXJpX21hcnNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3RpX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnc8O2bmRhZ19tw6VuZGFnX3Rpc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO2cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdzw7ZuX23DpW5fdGlzX29uc190b3JfZnJlX2zDtnInLnNwbGl0KCdfJyksXG4gICAgICAgI
33378HdlZWtkYXlzTWluIDogJ3PDtl9tw6VfdGlfb25fdG9fZnJfbMO2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBsbGwgOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsbGxsIDogJ2RkZCBEIE1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSWRhZ10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tJbW9yZ29uXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0lnw6VyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1tQw6VdIGRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbSV0gZGRkZFtzXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2bDtnIgJXMgc2VkYW4nLFxuICAgICAgICAgICAgcyA6ICduw6VncmEgc2VrdW5kZXInLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbSA6ICdlbiBtaW51dCcsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dGVyJyxcbiAgICAgICAgICAgIGggOiAnZW4gdGltbWUnLFxuICAgICAgICAgICAgaGggOiAnJWQgdGltbWFyJyxcbiAgICAgICAgICAgIGQgOiAnZW4gZGFnJyxcbiAgICAgICAgICAgIGRkIDogJyVkIGRhZ2FyJyxcbiAgICAgICAgICAgIE0gOiAnZW4gbcOlbmFkJyxcbiAgICAgICAgICAgIE1NIDogJyVkIG3DpW5hZGVyJyxcbiAgICAgICAgICAgIHkgOiAnZXR0IMOlcicsXG4gICAgICAgICAgICB5eSA6ICclZCDDpXInXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShlfGEpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKH5+KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAnZScgOlxuICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdhJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDIpID8gJ2EnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAnZScgOiAnZSc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN3ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3cnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW51YXJpX0ZlYnJ1YXJpX01hY2hpX0FwcmlsaV9NZWlfSnVuaV9KdWxhaV9BZ29zdGlfU2VwdGVtYmFfT2t0b2JhX05vdmVtYmFfRGVzZW1iYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX0Fnb19TZXBfT2t0X05vdl9EZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ0p1bWFwaWxpX0p1bWF0YXR1X0p1bWFubmVfSnVtYXRhbm9fQWxoYW1pc2lfSWp1bWFhX0p1bWFtb3NpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ0pwbF9KdGF0X0pubmVfSnRhbl9BbGhfSWptX0ptb3MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0oyX0ozX0o0X0o1X0FsX0lqX0oxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbbGVvIHNhYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdba2VzaG8gc2FhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdbd2lraSBpamF5b10gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbamFuYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW3dpa2kgaWxpeW9waXRhXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMgYmFhZGF5ZScsXG4gICAgICAgICAgICBwYXN0IDogJ3Rva2VhICVzJyxcbiAgICAgICAgICAgI
33378HMgOiAnaGl2aSBwdW5kZScsXG4gICAgICAgICAgICBzcyA6ICdzZWt1bmRlICVkJyxcbiAgICAgICAgICAgIG0gOiAnZGFraWthIG1vamEnLFxuICAgICAgICAgICAgbW0gOiAnZGFraWthICVkJyxcbiAgICAgICAgICAgIGggOiAnc2FhIGxpbW9qYScsXG4gICAgICAgICAgICBoaCA6ICdtYXNhYSAlZCcsXG4gICAgICAgICAgICBkIDogJ3Npa3UgbW9qYScsXG4gICAgICAgICAgICBkZCA6ICdtYXNpa3UgJWQnLFxuICAgICAgICAgICAgTSA6ICdtd2V6aSBtbW9qYScsXG4gICAgICAgICAgICBNTSA6ICdtaWV6aSAlZCcsXG4gICAgICAgICAgICB5IDogJ213YWthIG1tb2phJyxcbiAgICAgICAgICAgIHl5IDogJ21pYWthICVkJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA3ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgJzEnOiAn4K+nJyxcbiAgICAgICAgJzInOiAn4K+oJyxcbiAgICAgICAgJzMnOiAn4K+pJyxcbiAgICAgICAgJzQnOiAn4K+qJyxcbiAgICAgICAgJzUnOiAn4K+rJyxcbiAgICAgICAgJzYnOiAn4K+sJyxcbiAgICAgICAgJzcnOiAn4K+tJyxcbiAgICAgICAgJzgnOiAn4K+uJyxcbiAgICAgICAgJzknOiAn4K+vJyxcbiAgICAgICAgJzAnOiAn4K+mJ1xuICAgIH0sIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ+Cvpyc6ICcxJyxcbiAgICAgICAgJ+CvqCc6ICcyJyxcbiAgICAgICAgJ+CvqSc6ICczJyxcbiAgICAgICAgJ+Cvqic6ICc0JyxcbiAgICAgICAgJ+Cvqyc6ICc1JyxcbiAgICAgICAgJ+CvrCc6ICc2JyxcbiAgICAgICAgJ+CvrSc6ICc3JyxcbiAgICAgICAgJ+Cvric6ICc4JyxcbiAgICAgICAgJ+Cvryc6ICc5JyxcbiAgICAgICAgJ+Cvpic6ICcwJ1xuICAgIH07XG5cbiAgICB2YXIgdGEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0YScsIHtcbiAgICAgICAgbW9udGhzIDogJ+CunOCuqeCuteCusOCuv1/grqrgrr/grqrgr43grrDgrrXgrrDgrr9f4K6u4K6+4K6w4K+N4K6a4K+NX+Cuj+CuquCvjeCusOCusuCvjV/grq7gr4df4K6c4K+C4K6p4K+NX+CunOCvguCusuCviF/grobgrpXgrrjgr43grp/gr41f4K6a4K+G4K6q4K+N4K6f4K+G4K6u4K+N4K6q4K6w4K+NX+CuheCuleCvjeCun+Cvh+CuvuCuquCusOCvjV/grqjgrrXgrq7gr43grqrgrrDgr41f4K6f4K6/4K6a4K6u4K+N4K6q4K6w4K+NJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICfgrpzgrqngrrXgrrDgrr9f4K6q4K6/4K6q4K+N4K6w4K614K6w4K6/X+CuruCuvuCusOCvjeCumuCvjV/gro/grqrgr43grrDgrrLgr41f4K6u4K+HX+CunOCvguCuqeCvjV/grpzgr4LgrrLgr4hf4K6G4K6V4K644K+N4K6f4K+NX+CumuCvhuCuquCvjeCun+CvhuCuruCvjeCuquCusOCvjV/groXgrpXgr43grp/gr4fgrr7grqrgrrDgr41f4K6o4K614K6u4K+N4K6q4K6w4K+NX+Cun+Cuv+CumuCuruCvjeCuquCusOCvjScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn4K6e4K6+4K6v4K6/4K6x4K+N4K6x4K+B4K6V4K+N4K6V4K6/4K604K6u4K+IX+CupOCuv+CumeCvjeCuleCun+CvjeCuleCuv+CutOCuruCviF/grprgr4bgrrXgr43grrXgrr7grq/gr43grpXgrr/grrTgrq7gr4hf4K6q4K+B4K6k4K6p4K+N4K6V4K6/4K604K6u4K+IX+CuteCuv+Cur+CuvuCutOCuleCvjeCuleCuv+CutOCuruCviF/grrXgr4bgrrPgr43grrPgrr/grpXgr43grpXgrr/grrTgrq7gr4hf4K6a4K6p4K6/4K6V4K+N4K6V4K6/4K604K6u4K+IJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ+CunuCuvuCur+Cuv+CuseCvgV/grqTgrr/grpngr43grpXgrrPgr41f4K6a4K+G4K614K+N4K614K6+4K6v4K+NX+CuquCvgeCupOCuqeCvjV/grrXgrr/grq/grr7grrTgrqngr41f4K614K+G4K6z4K+N4K6z4K6/X+CumuCuqeCuvycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn4K6e4K6+X+CupOCuv1/grprgr4Zf4K6q4K+BX+CuteCuv1/grrXgr4Zf4K6aJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZLCBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vgrofgrqngr43grrHgr4FdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW+CuqOCuvuCus+CviF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb4K6o4K+H4K6x4K+N4K6x4K+BXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb4K6V4K6f4K6o4K+N4K6kIOCuteCuvuCusOCuruCvjV0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW
333781lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVzIOCuh+CusuCvjScsXG4gICAgICAgICAgICBwYXN0IDogJyVzIOCuruCvgeCuqeCvjScsXG4gICAgICAgICAgICBzIDogJ+CukuCusOCvgSDgrprgrr/grrIg4K614K6/4K6o4K6+4K6f4K6/4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIHNzIDogJyVkIOCuteCuv+CuqOCuvuCun+Cuv+CuleCus+CvjScsXG4gICAgICAgICAgICBtIDogJ+CukuCusOCvgSDgrqjgrr/grq7grr/grp/grq7gr40nLFxuICAgICAgICAgICAgbW0gOiAnJWQg4K6o4K6/4K6u4K6/4K6f4K6Z4K+N4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIGggOiAn4K6S4K6w4K+BIOCuruCuo+CuvyDgrqjgr4fgrrDgrq7gr40nLFxuICAgICAgICAgICAgaGggOiAnJWQg4K6u4K6j4K6/IOCuqOCvh+CusOCuruCvjScsXG4gICAgICAgICAgICBkIDogJ+CukuCusOCvgSDgrqjgrr7grrPgr40nLFxuICAgICAgICAgICAgZGQgOiAnJWQg4K6o4K6+4K6f4K+N4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIE0gOiAn4K6S4K6w4K+BIOCuruCuvuCupOCuruCvjScsXG4gICAgICAgICAgICBNTSA6ICclZCDgrq7grr7grqTgrpngr43grpXgrrPgr40nLFxuICAgICAgICAgICAgeSA6ICfgrpLgrrDgr4Eg4K614K6w4K+B4K6f4K6u4K+NJyxcbiAgICAgICAgICAgIHl5IDogJyVkIOCuhuCuo+CvjeCun+CvgeCuleCus+CvjSdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ94K614K6k4K+BLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn4K614K6k4K+BJztcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cvp+CvqOCvqeCvquCvq+CvrOCvreCvruCvr+Cvpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcmVmZXIgaHR0cDovL3RhLndpa2lwZWRpYS5vcmcvcy8xZXIxXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/grq/grr7grq7grq7gr4184K614K+I4K6V4K6x4K+IfOCuleCuvuCusuCviHzgrqjgrqPgr43grqrgrpXgrrLgr4184K6O4K6x4K+N4K6q4K6+4K6f4K+BfOCuruCuvuCusuCviC8sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6v4K6+4K6u4K6u4K+NJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrrXgr4jgrpXgrrHgr4gnOyAgLy8g4K614K+I4K6V4K6x4K+IXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCuleCuvuCusuCviCc7IC8vIOCuleCuvuCusuCviFxuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrqjgrqPgr43grqrgrpXgrrLgr40nOyAvLyDgrqjgrqPgr43grqrgrpXgrrLgr41cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6O4K6x4K+N4K6q4K6+4K6f4K+BJzsgLy8g4K6O4K6x4K+N4K6q4K6+4K6f4K+BXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCuruCuvuCusuCviCc7IC8vIOCuruCuvuCusuCviFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrq/grr7grq7grq7gr40nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbUhvdXIgOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4K6v4K6+4K6u4K6u4K+NJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgMiA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4K614K+I4K6V4K6x4K+IJyB8fCBtZXJpZGllbSA9PT0gJ+CuleCuvuCusuCviCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgrqjgrqPgr43grqrgrpXgrrLgr40nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyB
33378ob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA2ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0YTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGUnLCB7XG4gICAgICAgIG1vbnRocyA6ICfgsJzgsKjgsLXgsLDgsL9f4LCr4LC/4LCs4LGN4LCw4LC14LCw4LC/X+CwruCwvuCwsOCxjeCwmuCwv1/gsI/gsKrgsY3gsLDgsL/gsLLgsY1f4LCu4LGHX+CwnOCxguCwqOCxjV/gsJzgsYHgsLLgsYhf4LCG4LCX4LC44LGN4LCf4LGBX+CwuOCxhuCwquCxjeCwn+CxhuCwguCwrOCwsOCxjV/gsIXgsJXgsY3gsJ/gsYvgsKzgsLDgsY1f4LCo4LC14LCC4LCs4LCw4LGNX+CwoeCwv+CwuOCxhuCwguCwrOCwsOCxjScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn4LCc4LCoLl/gsKvgsL/gsKzgsY3gsLAuX+CwruCwvuCwsOCxjeCwmuCwv1/gsI/gsKrgsY3gsLDgsL8uX+CwruCxh1/gsJzgsYLgsKjgsY1f4LCc4LGB4LCy4LGIX+CwhuCwly5f4LC44LGG4LCq4LGNLl/gsIXgsJXgsY3gsJ/gsYsuX+CwqOCwtS5f4LCh4LC/4LC44LGGLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ+CwhuCwpuCwv+CwteCwvuCwsOCwgl/gsLjgsYvgsK7gsLXgsL7gsLDgsIJf4LCu4LCC4LCX4LCz4LC14LC+4LCw4LCCX+CwrOCxgeCwp+CwteCwvuCwsOCwgl/gsJfgsYHgsLDgsYHgsLXgsL7gsLDgsIJf4LC24LGB4LCV4LGN4LCw4LC14LC+4LCw4LCCX+CwtuCwqOCwv+CwteCwvuCwsOCwgicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfgsIbgsKbgsL9f4LC44LGL4LCuX+CwruCwguCwl+Cws1/gsKzgsYHgsKdf4LCX4LGB4LCw4LGBX+CwtuCxgeCwleCxjeCwsF/gsLbgsKjgsL8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ+Cwhl/gsLjgsYtf4LCu4LCCX+CwrOCxgV/gsJfgsYFf4LC24LGBX+Cwticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdBIGg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW+CwqOCxh+CwoeCxgV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb4LCw4LGH4LCq4LGBXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vgsKjgsL/gsKjgsY3gsKhdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vgsJfgsKRdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclcyDgsLLgsYsnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDgsJXgsY3gsLDgsL/gsKTgsIInLFxuICAgICAgICAgICAgcyA6ICfgsJXgsYrgsKjgsY3gsKjgsL8g4LCV4LGN4LC34LCj4LC+4LCy4LGBJyxcbiAgICAgICAgICAgIHNzIDogJyVkIOCwuOCxhuCwleCwqOCxjeCwsuCxgScsXG4gICAgICAgICAgICBtIDogJ+CwkuCwlSDgsKjgsL/gsK7gsL/gsLfgsIInLFxuICAgICAgICAgICAgbW0gOiAnJWQg4LCo4LC/4LCu4LC/4LC34LC+4LCy4LGBJyxcbiAgICAgICAgICAgIGggOiAn4LCS4LCVIOCwl+CwguCwnycsXG4gICAgICAgICAgICBoaCA6ICclZCDgsJfgsILgsJ/gsLLgsYEnLFxuICAgICAgICAgICAgZCA6ICfgsJLgsJUg4LCw4LGL4LCc4LGBJyxcbiAgICAgICAgICAgIGRkIDogJyVkIOCwsOCxi+CwnOCxgeCwsuCxgScsXG4gICAgICAgICAgICBNIDogJ+CwkuCwlSDgsKjgsYbgsLInLFxuICAgICAgICAgICAgTU0gOiAnJWQg4LCo4LGG4LCy4LCy4LGBJyxcbiAgICAgICAgICAgIHkgOiAn4LCS4LCVIOCwuOCwguCwteCwpOCxjeCwuOCwsOCwgicsXG4gICAgICAgICAgICB5eSA6ICclZCDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsL7gsLLgsYEnXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2UgOiAvXFxkezEsMn3gsLUvLFxuICAgICAgICBvcmRpbmFsIDogJyVk4LC1JyxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CwsOCwvuCwpOCxjeCwsOCwv3zgsIngsKbgsK/gsIJ84LCu4LCn4LGN4LCv4LC+4LC54LGN4LCo4LCCfOCwuOCwvuCwr+CwguCwpOCxjeCwsOCwgi8sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgsLDgsL7gsKTgsY3gsLDgsL8nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgI
33378H0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgsIngsKbgsK/gsIInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LCu4LCn4LGN4LCv4LC+4LC54LGN4LCo4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgsLjgsL7gsK/gsILgsKTgsY3gsLDgsIInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwsOCwvuCwpOCxjeCwsOCwvyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCJ4LCm4LCv4LCCJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwuOCwvuCwr+CwguCwpOCxjeCwsOCwgic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCw4LC+4LCk4LGN4LCw4LC/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciB0ZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0ZXQnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW5laXJ1X0ZldmVyZWlydV9NYXJzdV9BYnJpbF9NYWl1X0p1w7F1X0p1bGx1X0FndXN0dV9TZXRlbWJydV9PdXR1YnJ1X05vdmVtYnJ1X0RlemVtYnJ1Jy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKYW5fRmV2X01hcl9BYnJfTWFpX0p1bl9KdWxfQWdvX1NldF9PdXRfTm92X0Rleicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnRG9tX1NlZ19UZXJzX0t1YV9LaW50X1Nlc3RfU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdEb19TZWdfVGVfS3VfS2lfU2VzX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPaGluIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBYmFuIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtpaGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSG9yaXNlaWsgaWhhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbWFuYSBrb3R1a10gW2loYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnaWhhICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgbGl1YmEnLFxuICAgICAgICAgICAgcyA6ICdtaW51dHUgYmFsdW4nLFxuICAgICAgICAgICAgc3MgOiAnbWludXR1ICVkJyxcbiAgICAgICAgICAgIG0gOiAnbWludXR1IGlkYScsXG4gICAgICAgICAgICBtbSA6ICdtaW51dHUgJWQnLFxuICAgICAgICAgICAgaCA6ICdvcmFzIGlkYScsXG4gICAgICAgICAgICBoaCA6ICdvcmFzICVkJyxcbiAgICAgICAgICAgIGQgOiAnbG9yb24gaWRhJyxcbiAgICAgICAgICAgIGRkIDogJ2xvcm9uICVkJyxcbiAgICAgICAgICAgIE0gOiAnZnVsYW4gaWRhJyxcbiAgICAgICAgICAgIE1NIDogJ2Z1bGFuICVkJyxcbiAgICAgICAgICAgIHkgOiAndGluYW4gaWRhJyxcbiAgICAgICAgICAgIHl5IDogJ3RpbmFuICVkJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKH5+KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgICAgI
33378HJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRldDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAwOiAnLdGD0LwnLFxuICAgICAgICAxOiAnLdGD0LwnLFxuICAgICAgICAyOiAnLdGO0LwnLFxuICAgICAgICAzOiAnLdGO0LwnLFxuICAgICAgICA0OiAnLdGD0LwnLFxuICAgICAgICA1OiAnLdGD0LwnLFxuICAgICAgICA2OiAnLdGD0LwnLFxuICAgICAgICA3OiAnLdGD0LwnLFxuICAgICAgICA4OiAnLdGD0LwnLFxuICAgICAgICA5OiAnLdGD0LwnLFxuICAgICAgICAxMDogJy3Rg9C8JyxcbiAgICAgICAgMTI6ICct0YPQvCcsXG4gICAgICAgIDEzOiAnLdGD0LwnLFxuICAgICAgICAyMDogJy3Rg9C8JyxcbiAgICAgICAgMzA6ICct0Y7QvCcsXG4gICAgICAgIDQwOiAnLdGD0LwnLFxuICAgICAgICA1MDogJy3Rg9C8JyxcbiAgICAgICAgNjA6ICct0YPQvCcsXG4gICAgICAgIDcwOiAnLdGD0LwnLFxuICAgICAgICA4MDogJy3Rg9C8JyxcbiAgICAgICAgOTA6ICct0YPQvCcsXG4gICAgICAgIDEwMDogJy3Rg9C8J1xuICAgIH07XG5cbiAgICB2YXIgdGcgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0ZycsIHtcbiAgICAgICAgbW9udGhzIDogJ9GP0L3QstCw0YBf0YTQtdCy0YDQsNC7X9C80LDRgNGCX9Cw0L/RgNC10Ltf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGAX9C+0LrRgtGP0LHRgF/QvdC+0Y/QsdGAX9C00LXQutCw0LHRgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn0Y/QvdCyX9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs1/RgdC10L1f0L7QutGCX9C90L7Rj1/QtNC10LonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ9GP0LrRiNCw0L3QsdC1X9C00YPRiNCw0L3QsdC1X9GB0LXRiNCw0L3QsdC1X9GH0L7RgNGI0LDQvdCx0LVf0L/QsNC90rfRiNCw0L3QsdC1X9K30YPQvNGK0LBf0YjQsNC90LHQtScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfRj9GI0LFf0LTRiNCxX9GB0YjQsV/Rh9GI0LFf0L/RiNCxX9K30YPQvF/RiNC90LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9GP0Yhf0LTRiF/RgdGIX9GH0Yhf0L/RiF/St9C8X9GI0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vQmNC80YDTr9C3INGB0L7QsNGC0LhdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW9Cf0LDQs9C+0rMg0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb0JTQuNGA06/QtyDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkW9C4XSBb0rPQsNGE0YLQsNC4INC+0Y/QvdC00LAg0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZFvQuF0gW9Kz0LDRhNGC0LDQuCDQs9GD0LfQsNGI0YLQsCDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn0LHQsNGK0LTQuCAlcycsXG4gICAgICAgICAgICBwYXN0IDogJyVzINC/0LXRiCcsXG4gICAgICAgICAgICBzIDogJ9GP0LrRh9Cw0L3QtCDRgdC+0L3QuNGPJyxcbiAgICAgICAgICAgIG0gOiAn0Y/QuiDQtNCw0pvQuNKb0LAnLFxuICAgICAgICAgICAgbW0gOiAnJWQg0LTQsNKb0LjSm9CwJyxcbiAgICAgICAgICAgIGggOiAn0Y/QuiDRgdC+0LDRgicsXG4gICAgICAgICAgICBoaCA6ICclZCDRgdC+0LDRgicsXG4gICAgICAgICAgICBkIDogJ9GP0Log0YDTr9C3JyxcbiAgICAgICAgICAgIGRkIDogJyVkINGA06/QtycsXG4gICAgICAgICAgICBNIDogJ9GP0Log0LzQvtKzJyxcbiAgICAgICAgICAgIE1NIDogJyVkINC80L7SsycsXG4gICAgICAgICAgICB5IDogJ9GP0Log0YHQvtC7JyxcbiAgICAgICAgICAgIHl5IDogJyVkINGB0L7QuydcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9GI0LDQsXzRgdGD0LHSs3zRgNOv0Ld80LHQtdCz0L7Ssy8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ9GI0LDQsScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9GB0YPQsdKzJykge1xuICAgICAgICAgICAgICAgI
33378HJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9GA06/QtycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn0LHQtdCz0L7SsycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRiNCw0LEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GB0YPQsdKzJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRgNOv0LcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Cx0LXQs9C+0rMnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GI0LDQsSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YPQvHzRjtC8KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgYiA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1tudW1iZXJdIHx8IHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGc7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciB0aCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RoJywge1xuICAgICAgICBtb250aHMgOiAn4Lih4LiB4Lij4Liy4LiE4LihX+C4geC4uOC4oeC4oOC4suC4nuC4seC4meC4mOC5jF/guKHguLXguJnguLLguITguKFf4LmA4Lih4Lip4Liy4Lii4LiZX+C4nuC4pOC4qeC4oOC4suC4hOC4oV/guKHguLTguJbguLjguJnguLLguKLguJlf4LiB4Lij4LiB4LiO4Liy4LiE4LihX+C4quC4tOC4h+C4q+C4suC4hOC4oV/guIHguLHguJnguKLguLLguKLguJlf4LiV4Li44Lil4Liy4LiE4LihX+C4nuC4pOC4qOC4iOC4tOC4geC4suC4ouC4mV/guJjguLHguJnguKfguLLguITguKEnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ+C4oS7guIQuX+C4gS7guJ4uX+C4oeC4tS7guIQuX+C5gOC4oS7guKIuX+C4ni7guIQuX+C4oeC4tC7guKIuX+C4gS7guIQuX+C4qi7guIQuX+C4gS7guKIuX+C4lS7guIQuX+C4ni7guKIuX+C4mC7guIQuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5cyA6ICfguK3guLLguJfguLTguJXguKLguYxf4LiI4Lix4LiZ4LiX4Lij4LmMX+C4reC4seC4h+C4hOC4suC4o1/guJ7guLjguJhf4Lie4Lik4Lir4Lix4Liq4Lia4LiU4Li1X+C4qOC4uOC4geC4o+C5jF/guYDguKrguLLguKPguYwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn4Lit4Liy4LiX4Li04LiV4Lii4LmMX+C4iOC4seC4meC4l+C4o+C5jF/guK3guLHguIfguITguLLguKNf4Lie4Li44LiYX+C4nuC4pOC4q+C4seC4ql/guKjguLjguIHguKPguYxf4LmA4Liq4Liy4Lij4LmMJy5zcGxpdCgnXycpLCAvLyB5ZXMsIHRocmVlIGNoYXJhY3RlcnMgZGlmZmVyZW5jZVxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfguK3guLIuX+C4iC5f4LitLl/guJ4uX+C4nuC4pC5f4LioLl/guKouJy5z
33378cGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSDguYDguKfguKXguLIgSDptbScsXG4gICAgICAgICAgICBMTExMIDogJ+C4p+C4seC4mWRkZGTguJfguLXguYggRCBNTU1NIFlZWVkg4LmA4Lin4Lil4LiyIEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/guIHguYjguK3guJnguYDguJfguLXguYjguKLguId84Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfguKvguKXguLHguIfguYDguJfguLXguYjguKLguIcnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C4geC5iOC4reC4meC5gOC4l+C4teC5iOC4ouC4hyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vguKfguLHguJnguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vguJ7guKPguLjguYjguIfguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkW+C4q+C4meC5ieC4siDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW+C5gOC4oeC4t+C5iOC4reC4p+C4suC4meC4meC4teC5iSDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vguKfguLHguJldZGRkZFvguJfguLXguYjguYHguKXguYnguKcg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAn4Lit4Li14LiBICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXPguJfguLXguYjguYHguKXguYnguKcnLFxuICAgICAgICAgICAgcyA6ICfguYTguKHguYjguIHguLXguYjguKfguLTguJnguLLguJfguLUnLFxuICAgICAgICAgICAgc3MgOiAnJWQg4Lin4Li04LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgICAgIG0gOiAnMSDguJnguLLguJfguLUnLFxuICAgICAgICAgICAgbW0gOiAnJWQg4LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgICAgIGggOiAnMSDguIrguLHguYjguKfguYLguKHguIcnLFxuICAgICAgICAgICAgaGggOiAnJWQg4LiK4Lix4LmI4Lin4LmC4Lih4LiHJyxcbiAgICAgICAgICAgIGQgOiAnMSDguKfguLHguJknLFxuICAgICAgICAgICAgZGQgOiAnJWQg4Lin4Lix4LiZJyxcbiAgICAgICAgICAgIE0gOiAnMSDguYDguJTguLfguK3guJknLFxuICAgICAgICAgICAgTU0gOiAnJWQg4LmA4LiU4Li34Lit4LiZJyxcbiAgICAgICAgICAgIHkgOiAnMSDguJvguLUnLFxuICAgICAgICAgICAgeXkgOiAnJWQg4Lib4Li1J1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGg7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciB0bFBoID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGwtcGgnLCB7XG4gICAgICAgIG1vbnRocyA6ICdFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ0VuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdMaV9MdV9NYV9NaV9IdV9CaV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnTU0vRC9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnTU1NTSBELCBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnTFQgW25nYXlvbmcgYXJhd10nLFxuICAgICAgICAgICAgbmV4dERheTogJ1tCdWthcyBuZ10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnTFQgW2thaGFwb25dJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgI
33378H0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICdzYSBsb29iIG5nICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgYW5nIG5ha2FsaXBhcycsXG4gICAgICAgICAgICBzIDogJ2lsYW5nIHNlZ3VuZG8nLFxuICAgICAgICAgICAgc3MgOiAnJWQgc2VndW5kbycsXG4gICAgICAgICAgICBtIDogJ2lzYW5nIG1pbnV0bycsXG4gICAgICAgICAgICBtbSA6ICclZCBtaW51dG8nLFxuICAgICAgICAgICAgaCA6ICdpc2FuZyBvcmFzJyxcbiAgICAgICAgICAgIGhoIDogJyVkIG9yYXMnLFxuICAgICAgICAgICAgZCA6ICdpc2FuZyBhcmF3JyxcbiAgICAgICAgICAgIGRkIDogJyVkIGFyYXcnLFxuICAgICAgICAgICAgTSA6ICdpc2FuZyBidXdhbicsXG4gICAgICAgICAgICBNTSA6ICclZCBidXdhbicsXG4gICAgICAgICAgICB5IDogJ2lzYW5nIHRhb24nLFxuICAgICAgICAgICAgeXkgOiAnJWQgdGFvbidcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRsUGg7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciBudW1iZXJzTm91bnMgPSAncGFnaF93YeKAmV9jaGHigJlfd2VqX2xvU192YWdoX2phdl9Tb2NoX2Nob3JnaF9IdXQnLnNwbGl0KCdfJyk7XG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGVGdXR1cmUob3V0cHV0KSB7XG4gICAgICAgIHZhciB0aW1lID0gb3V0cHV0O1xuICAgICAgICB0aW1lID0gKG91dHB1dC5pbmRleE9mKCdqYWonKSAhPT0gLTEpID9cbiAgICAgICAgdGltZS5zbGljZSgwLCAtMykgKyAnbGVTJyA6XG4gICAgICAgIChvdXRwdXQuaW5kZXhPZignamFyJykgIT09IC0xKSA/XG4gICAgICAgIHRpbWUuc2xpY2UoMCwgLTMpICsgJ3dhUScgOlxuICAgICAgICAob3V0cHV0LmluZGV4T2YoJ0RJUycpICE9PSAtMSkgP1xuICAgICAgICB0aW1lLnNsaWNlKDAsIC0zKSArICduZW0nIDpcbiAgICAgICAgdGltZSArICcgcElxJztcbiAgICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlUGFzdChvdXRwdXQpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBvdXRwdXQ7XG4gICAgICAgIHRpbWUgPSAob3V0cHV0LmluZGV4T2YoJ2phaicpICE9PSAtMSkgP1xuICAgICAgICB0aW1lLnNsaWNlKDAsIC0zKSArICdIdeKAmScgOlxuICAgICAgICAob3V0cHV0LmluZGV4T2YoJ2phcicpICE9PSAtMSkgP1xuICAgICAgICB0aW1lLnNsaWNlKDAsIC0zKSArICd3ZW4nIDpcbiAgICAgICAgKG91dHB1dC5pbmRleE9mKCdESVMnKSAhPT0gLTEpID9cbiAgICAgICAgdGltZS5zbGljZSgwLCAtMykgKyAnYmVuJyA6XG4gICAgICAgIHRpbWUgKyAnIHJldCc7XG4gICAgICAgIHJldHVybiB0aW1lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG51bWJlck5vdW4gPSBudW1iZXJBc05vdW4obnVtYmVyKTtcbiAgICAgICAgc3dpdGNoIChzdHJpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgbHVwJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgdHVwJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgcmVwJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgamFqJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgamFyJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgRElTJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG51bWJlckFzTm91bihudW1iZXIpIHtcbiAgICAgICAgdmFyIGh1bmRy
33378ZWQgPSBNYXRoLmZsb29yKChudW1iZXIgJSAxMDAwKSAvIDEwMCksXG4gICAgICAgIHRlbiA9IE1hdGguZmxvb3IoKG51bWJlciAlIDEwMCkgLyAxMCksXG4gICAgICAgIG9uZSA9IG51bWJlciAlIDEwLFxuICAgICAgICB3b3JkID0gJyc7XG4gICAgICAgIGlmIChodW5kcmVkID4gMCkge1xuICAgICAgICAgICAgd29yZCArPSBudW1iZXJzTm91bnNbaHVuZHJlZF0gKyAndmF0bGgnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZW4gPiAwKSB7XG4gICAgICAgICAgICB3b3JkICs9ICgod29yZCAhPT0gJycpID8gJyAnIDogJycpICsgbnVtYmVyc05vdW5zW3Rlbl0gKyAnbWFIJztcbiAgICAgICAgfVxuICAgICAgICBpZiAob25lID4gMCkge1xuICAgICAgICAgICAgd29yZCArPSAoKHdvcmQgIT09ICcnKSA/ICcgJyA6ICcnKSArIG51bWJlcnNOb3Vuc1tvbmVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAod29yZCA9PT0gJycpID8gJ3BhZ2gnIDogd29yZDtcbiAgICB9XG5cbiAgICB2YXIgdGxoID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGxoJywge1xuICAgICAgICBtb250aHMgOiAndGVyYeKAmSBqYXIgd2HigJlfdGVyYeKAmSBqYXIgY2hh4oCZX3RlcmHigJkgamFyIHdlal90ZXJh4oCZIGphciBsb1NfdGVyYeKAmSBqYXIgdmFnaF90ZXJh4oCZIGphciBqYXZfdGVyYeKAmSBqYXIgU29jaF90ZXJh4oCZIGphciBjaG9yZ2hfdGVyYeKAmSBqYXIgSHV0X3RlcmHigJkgamFyIHdh4oCZbWFIX3RlcmHigJkgamFyIHdh4oCZbWFIIHdh4oCZX3RlcmHigJkgamFyIHdh4oCZbWFIIGNoYeKAmScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnamFyIHdh4oCZX2phciBjaGHigJlfamFyIHdlal9qYXIgbG9TX2phciB2YWdoX2phciBqYXZfamFyIFNvY2hfamFyIGNob3JnaF9qYXIgSHV0X2phciB3YeKAmW1hSF9qYXIgd2HigJltYUggd2HigJlfamFyIHdh4oCZbWFIIGNoYeKAmScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdCA6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzIDogJ2xvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ2xvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQgOiB7XG4gICAgICAgICAgICBMVCA6ICdISDptbScsXG4gICAgICAgICAgICBMVFMgOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbRGFIamFqXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3dh4oCZbGVTXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ0xMTCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW3dh4oCZSHXigJldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnTExMJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogdHJhbnNsYXRlRnV0dXJlLFxuICAgICAgICAgICAgcGFzdCA6IHRyYW5zbGF0ZVBhc3QsXG4gICAgICAgICAgICBzIDogJ3B1UyBsdXAnLFxuICAgICAgICAgICAgc3MgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtIDogJ3dh4oCZIHR1cCcsXG4gICAgICAgICAgICBtbSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGggOiAnd2HigJkgcmVwJyxcbiAgICAgICAgICAgIGhoIDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZCA6ICd3YeKAmSBqYWonLFxuICAgICAgICAgICAgZGQgOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNIDogJ3dh4oCZIGphcicsXG4gICAgICAgICAgICBNTSA6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHkgOiAnd2HigJkgRElTJyxcbiAgICAgICAgICAgIHl5IDogdHJhbnNsYXRlXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGxoO1xuXG59KSkpO1xuIiwiXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAxOiAnXFwnaW5jaScsXG4gICAgICAgIDU6ICdcXCdpbmNpJyxcbiAgICAgICAgODogJ1xcJ2luY2knLFxuICAgICAgICA3MDogJ1xcJ2luY2knLFxuICAgICAgICA4MDogJ1xcJ2luY2knLFxuICAgICAgICAyOiAnXFwnbmNpJyxcbiAgICAgICAgNzogJ1xcJ25jaScsXG4gICAgICAgIDIwOiAnXFwnbmNpJyxcbiAgICAgICAgNTA6ICdcXCduY2knLFxuICAgICAgICAzOiAnXFwnw7xuY8O8JyxcbiAgICAgICAgNDogJ1xcJ8O8bmPDvCcsXG4gICAgICAgIDEwMDogJ1xcJ8O8bmPDvCcsXG4gICAgICAgIDY6ICdcXCduY8SxJyxcbiAgICAgICAgOTogJ1xcJ3VuY3UnLFxuICAgICAgICAxMDogJ1xcJ3VuY3UnLFxuICAgICAgICAzMDogJ1xcJ3VuY3UnLFxuICAgICAgICA2MDogJ1xcJ8SxbmPEsScsXG4gICAgICAgIDkwOiAnXFwnxLFuY8SxJ1xuICAgIH07XG5cbiAgICB2YXIgdHIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0cicsIHtcbiAgICAgICAgbW9udGhzIDogJ09jYWtfxZ51YmF0X01hcnRfTmlzYW5fTWF5xLFzX0hhemlyYW5fVGVtbXV6X0HEn3VzdG9zX0V5bMO8bF9Fa2ltX0thc8SxbV9BcmFsxLFrJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdPY2FfxZ51Yl9NYXJfTmlzX01heV9IYXpfVGVtX0HEn3VfRXlsX0VraV9LYXNfQXJhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICdQYXphcl9QYXphcnRlc2lfU2FsxLFfw4dhcsWfYW1iYV9QZXLFn2VtYmVfQ3VtYV9DdW1hcnRlc2knLnNwbGl0KCdfJyksXG4gICAgICAgI
33378HdlZWtkYXlzU2hvcnQgOiAnUGF6X1B0c19TYWxfw4dhcl9QZXJfQ3VtX0N0cycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnUHpfUHRfU2Ffw4dhX1BlX0N1X0N0Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbYnVnw7xuIHNhYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW3lhcsSxbiBzYWF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdbZ2VsZWNla10gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbZMO8bl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW2dlw6dlbl0gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVzIHNvbnJhJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMgw7ZuY2UnLFxuICAgICAgICAgICAgcyA6ICdiaXJrYcOnIHNhbml5ZScsXG4gICAgICAgICAgICBzcyA6ICclZCBzYW5peWUnLFxuICAgICAgICAgICAgbSA6ICdiaXIgZGFraWthJyxcbiAgICAgICAgICAgIG1tIDogJyVkIGRha2lrYScsXG4gICAgICAgICAgICBoIDogJ2JpciBzYWF0JyxcbiAgICAgICAgICAgIGhoIDogJyVkIHNhYXQnLFxuICAgICAgICAgICAgZCA6ICdiaXIgZ8O8bicsXG4gICAgICAgICAgICBkZCA6ICclZCBnw7xuJyxcbiAgICAgICAgICAgIE0gOiAnYmlyIGF5JyxcbiAgICAgICAgICAgIE1NIDogJyVkIGF5JyxcbiAgICAgICAgICAgIHkgOiAnYmlyIHnEsWwnLFxuICAgICAgICAgICAgeXkgOiAnJWQgecSxbCdcbiAgICAgICAgfSxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RvJzpcbiAgICAgICAgICAgICAgICBjYXNlICdERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkgeyAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ1xcJ8SxbmPEsSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBudW1iZXIgJSAxMDAgLSBhLFxuICAgICAgICAgICAgICAgICAgICAgICAgYyA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdIHx8IHN1ZmZpeGVzW2NdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIC8vIEFmdGVyIHRoZSB5ZWFyIHRoZXJlIHNob3VsZCBiZSBhIHNsYXNoIGFuZCB0aGUgYW1vdW50IG9mIHllYXJzIHNpbmNlIERlY2VtYmVyIDI2LCAxOTc5IGluIFJvbWFuIG51bWVyYWxzLlxuICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IHRvbyBkaWZmaWN1bHQgKG1heWJlIGV2ZW4gaW1wb3NzaWJsZSkgdG8gYWRkLlxuICAgIHZhciB0emwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0emwnLCB7XG4gICAgICAgIG1vbnRocyA6ICdKYW51YXJfRmV2cmFnbGhfTWFyw6dfQXZyw691X01haV9Hw7xuX0p1bGlhX0d1c2NodF9TZXRlbXZhcl9MaXN0b3DDpHRzX05vZW12YXJfWmVjZW12YXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ0phbl9GZXZfTWFyX0F2cl9NYWlfR8O8bl9KdWxfR3VzX1NldF9MaXNfTm9lX1plYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnU8O6bGFkaV9Mw7puZcOnaV9NYWl0emlfTcOhcmN1cmlfWGjDumFkaV9WacOpbmVyw6dpX1PDoXR1cmknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAnU8O6bF9Mw7puX01haV9Nw6FyX1how7pfVmnDqV9Tw6F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdTw7pfTMO6X01hX03DoV9YaF9WaV9Tw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdELiBNTU1NIFtkYWxsYXNdIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQsIFtsaV0gRC4gTU1NTSBbZGFsbGFzXSBZWVlZIEhILm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZFxcJ298ZFxcJ2EvaSxcbiAgICAgICAgaXNQTSA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICdkXFwnbycgPT09IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgI
33378H0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2RcXCdvJyA6ICdEXFwnTyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2RcXCdhJyA6ICdEXFwnQSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbb3hoaSDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbZGVtw6Agw6BdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW8OgXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tpZWlyaSDDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW3PDvHIgZWxdIGRkZGQgW2xhc3RldSDDoF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ29zcHJlaSAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ2phJXMnLFxuICAgICAgICAgICAgcyA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBzcyA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGggOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGggOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZCA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZCA6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NIDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHkgOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXkgOiBwcm9jZXNzUmVsYXRpdmVUaW1lXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWwgOiAnJWQuJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2Y
33378XIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgJ3MnOiBbJ3ZpZW5zYXMgc2VjdW5kcycsICdcXCdpZW5zYXMgc2VjdW5kcyddLFxuICAgICAgICAgICAgJ3NzJzogW251bWJlciArICcgc2VjdW5kcycsICcnICsgbnVtYmVyICsgJyBzZWN1bmRzJ10sXG4gICAgICAgICAgICAnbSc6IFsnXFwnbiBtw611dCcsICdcXCdpZW5zIG3DrXV0J10sXG4gICAgICAgICAgICAnbW0nOiBbbnVtYmVyICsgJyBtw611dHMnLCAnJyArIG51bWJlciArICcgbcOtdXRzJ10sXG4gICAgICAgICAgICAnaCc6IFsnXFwnbiDDvm9yYScsICdcXCdpZW5zYSDDvm9yYSddLFxuICAgICAgICAgICAgJ2hoJzogW251bWJlciArICcgw75vcmFzJywgJycgKyBudW1iZXIgKyAnIMO+b3JhcyddLFxuICAgICAgICAgICAgJ2QnOiBbJ1xcJ24geml1YScsICdcXCdpZW5zYSB6aXVhJ10sXG4gICAgICAgICAgICAnZGQnOiBbbnVtYmVyICsgJyB6aXVhcycsICcnICsgbnVtYmVyICsgJyB6aXVhcyddLFxuICAgICAgICAgICAgJ00nOiBbJ1xcJ24gbWVzJywgJ1xcJ2llbnMgbWVzJ10sXG4gICAgICAgICAgICAnTU0nOiBbbnVtYmVyICsgJyBtZXNlbicsICcnICsgbnVtYmVyICsgJyBtZXNlbiddLFxuICAgICAgICAgICAgJ3knOiBbJ1xcJ24gYXInLCAnXFwnaWVucyBhciddLFxuICAgICAgICAgICAgJ3l5JzogW251bWJlciArICcgYXJzJywgJycgKyBudW1iZXIgKyAnIGFycyddXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBpc0Z1dHVyZSA/IGZvcm1hdFtrZXldWzBdIDogKHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHpsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgdHptTGF0biA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3R6bS1sYXRuJywge1xuICAgICAgICBtb250aHMgOiAnaW5uYXlyX2Jyy6RheXLLpF9tYXLLpHPLpF9pYnJpcl9tYXl5d195d255d195d2x5d3pfyaN3xaF0X8Whd3RhbmJpcl9rdMukd2Jyy6Rfbnd3YW5iaXJfZHdqbmJpcicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnaW5uYXlyX2Jyy6RheXLLpF9tYXLLpHPLpF9pYnJpcl9tYXl5d195d255d195d2x5d3pfyaN3xaF0X8Whd3RhbmJpcl9rdMukd2Jyy6Rfbnd3YW5iaXJfZHdqbmJpcicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaeG4jXlhcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2FzZGtoIGddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbYXNrYSBnXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2ddIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbYXNzYW50IGddIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbZ10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnZGFka2ggcyB5YW4gJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICd5YW4gJXMnLFxuICAgICAgICAgICAgcyA6ICdpbWlrJyxcbiAgICAgICAgICAgIHNzIDogJyVkIGltaWsnLFxuICAgICAgICAgICAgbSA6ICdtaW514biNJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1pbnXhuI0nLFxuICAgICAgICAgICAgaCA6ICdzYcmbYScsXG4gICAgICAgICAgICBoaCA6ICclZCB0YXNzYcmbaW4nLFxuICAgICAgICAgICAgZCA6ICdhc3MnLFxuICAgICAgICAgICAgZGQgOiAnJWQgb3NzYW4nLFxuICAgICAgICAgICAgTSA6ICdheW93cicsXG4gICAgICAgICAgICBNTSA6ICclZCBpeXlpcm4nLFxuICAgICAgICAgICAgeSA6ICdhc2dhcycsXG4gICAgICAgICAgICB5eSA6ICclZCBpc2dhc24nXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogMTIgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0em1MYXRuO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1
33378xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgdHptID0gbW9tZW50LmRlZmluZUxvY2FsZSgndHptJywge1xuICAgICAgICBtb250aHMgOiAn4rWJ4rWP4rWP4rSw4rWi4rWUX+K0seK1leK0sOK1ouK1lV/itY7itLDitZXitZpf4rWJ4rSx4rWU4rWJ4rWUX+K1juK0sOK1ouK1ouK1k1/itaLitZPitY/itaLitZNf4rWi4rWT4rWN4rWi4rWT4rWjX+K1luK1k+K1m+K1nF/itZvitZPitZzitLDitY/itLHitYnitZRf4rS94rWf4rWT4rSx4rWVX+K1j+K1k+K1oeK0sOK1j+K0seK1ieK1lF/itLfitZPitYritY/itLHitYnitZQnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ+K1ieK1j+K1j+K0sOK1ouK1lF/itLHitZXitLDitaLitZVf4rWO4rSw4rWV4rWaX+K1ieK0seK1lOK1ieK1lF/itY7itLDitaLitaLitZNf4rWi4rWT4rWP4rWi4rWTX+K1ouK1k+K1jeK1ouK1k+K1o1/itZbitZPitZvitZxf4rWb4rWT4rWc4rSw4rWP4rSx4rWJ4rWUX+K0veK1n+K1k+K0seK1lV/itY/itZPitaHitLDitY/itLHitYnitZRf4rS34rWT4rWK4rWP4rSx4rWJ4rWUJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn4rSw4rWZ4rSw4rWO4rSw4rWZX+K0sOK1ouK1j+K0sOK1mV/itLDitZnitYnitY/itLDitZlf4rSw4rS94rWU4rSw4rWZX+K0sOK0veK1oeK0sOK1mV/itLDitZnitYnitY7itaHitLDitZlf4rSw4rWZ4rWJ4rS54rWi4rSw4rWZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZknLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vitLDitZnitLfitYUg4rS0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+K0sOK1meK0veK0sCDitLRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb4rS0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+K0sOK1muK0sOK1j+K1nCDitLRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb4rS0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfitLfitLDitLfitYUg4rWZIOK1ouK0sOK1jyAlcycsXG4gICAgICAgICAgICBwYXN0IDogJ+K1ouK0sOK1jyAlcycsXG4gICAgICAgICAgICBzIDogJ+K1ieK1juK1ieK0vScsXG4gICAgICAgICAgICBzcyA6ICclZCDitYnitY7itYnitL0nLFxuICAgICAgICAgICAgbSA6ICfitY7itYnitY/itZPitLonLFxuICAgICAgICAgICAgbW0gOiAnJWQg4rWO4rWJ4rWP4rWT4rS6JyxcbiAgICAgICAgICAgIGggOiAn4rWZ4rSw4rWE4rSwJyxcbiAgICAgICAgICAgIGhoIDogJyVkIOK1nOK0sOK1meK1meK0sOK1hOK1ieK1jycsXG4gICAgICAgICAgICBkIDogJ+K0sOK1meK1mScsXG4gICAgICAgICAgICBkZCA6ICclZCBv4rWZ4rWZ4rSw4rWPJyxcbiAgICAgICAgICAgIE0gOiAn4rSw4rWib+K1k+K1lCcsXG4gICAgICAgICAgICBNTSA6ICclZCDitYnitaLitaLitYnitZTitY8nLFxuICAgICAgICAgICAgeSA6ICfitLDitZnitLPitLDitZknLFxuICAgICAgICAgICAgeXkgOiAnJWQg4rWJ4rWZ4rSz4rSw4rWZ4rWPJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDEyICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHptO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsYW5ndWFnZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciB1Z0NuID0gbW9tZW50LmRlZmluZUxvY2FsZSgndWctY24nLCB7XG4gICAgICAgIG1vbnRoczogJ9mK2KfZhtuL2KfYsV/ZgduQ24vYsdin2YRf2YXYp9ix2Kpf2KbYp9m+2LHbkNmEX9mF2KfZil/YptmJ2Yrbh9mGX9im2YnZituH2YRf2KbYp9uL2Lrbh9iz2Kpf2LPbkNmG2Krbldio2YnYsV/YptuG2YPYqtuV2KjZidixX9mG2YjZitin2KjZidixX9iv25DZg9in2KjZidixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ9mK2KfZhtuL2KfYsV/ZgduQ24vYsdin2YRf2YXYp9ix2Kpf2KbYp9m+2LHbkNmEX9mF2KfZil/YptmJ2Yrbh9mGX9im2YnZituH2YRf2KbYp9uL2Lrbh9iz2Kpf2LPbkNmG2Krbldio2YnYsV/YptuG2YPYqtuV2KjZidixX9mG2YjZitin2KjZidixX9iv25DZg9in2KjZidixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ9mK25XZg9i025XZhtio25Vf2K/biNi025XZhtio25Vf2LPbldmK2LTbldmG2KjblV/ahtin2LHYtNuV2YbYqNuVX9m+25XZiti025XZhtio25Vf2KzbiNmF25Vf2LTbldmG2KjblScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9mK25Vf2K/biF/Ys9uVX9qG2Kdf2b7blV/YrNuIX9i025UnLnNwbGl0KCdfJyksXG4gICAgICAgI
33378HdlZWtkYXlzTWluOiAn2YrblV/Yr9uIX9iz25Vf2obYp1/ZvtuVX9is24hf2LTblScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVkt2YrZidmE2YlNLdim2KfZitmG2YnarUQt2YPbiNmG2YnYjCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZNiMIFlZWVkt2YrZidmE2YlNLdim2KfZitmG2YnarUQt2YPbiNmG2YnYjCBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9mK25DYsdmJ2YUg2YPbkNqG25V82LPbldq+25XYsXzahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhnzahtuI2LR82obbiNi02KrZidmGINmD25DZitmJ2YZ82YPbldqGLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn2YrbkNix2YnZhSDZg9uQ2obblScgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ9iz25XavtuV2LEnIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9qG24jYtNiq2YnZhiDZg9uQ2YrZidmGJyB8fCBtZXJpZGllbSA9PT0gJ9mD25XahicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2Y
33378XIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZituQ2LHZidmFINmD25DahtuVJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9iz25XavtuV2LEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDExMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9qG24jYtNiq2YnZhiDYqNuH2LHbh9mGJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfahtuI2LQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9qG24jYtNiq2YnZhiDZg9uQ2YrZidmGJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZg9uV2oYnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYqNuI2q/biNmGINiz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2Kbbldiq25Ug2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb2YPbkNmE25XYsdmD2YldIGRkZGQgW9iz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KrbhtmG24jar9uI2YZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9im2KfZhNiv2YnZhtmC2YldIGRkZGQgW9iz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDZg9uQ2YrZidmGJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDYqNuH2LHbh9mGJyxcbiAgICAgICAgICAgIHM6ICfZhtuV2obahtuVINiz25DZg9mI2YbYqicsXG4gICAgICAgICAgICBzczogJyVkINiz25DZg9mI2YbYqicsXG4gICAgICAgICAgICBtOiAn2KjZidixINmF2YnZhtuH2KonLFxuICAgICAgICAgICAgbW06ICclZCDZhdmJ2Ybbh9iqJyxcbiAgICAgICAgICAgIGg6ICfYqNmJ2LEg2LPYp9im25XYqicsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYptuV2KonLFxuICAgICAgICAgICAgZDogJ9io2YnYsSDZg9uI2YYnLFxuICAgICAgICAgICAgZGQ6ICclZCDZg9uI2YYnLFxuICAgICAgICAgICAgTTogJ9io2YnYsSDYptin2YonLFxuICAgICAgICAgICAgTU06ICclZCDYptin2YonLFxuICAgICAgICAgICAgeTogJ9io2YnYsSDZitmJ2YQnLFxuICAgICAgICAgICAgeXk6ICclZCDZitmJ2YQnXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KC3Zg9uI2YbZiXwt2KbYp9mKfC3avtuV2b7YqtuVKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3Zg9uI2YbZiSc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdq+25XZvtiq25UnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgLy8gR0IvVCA3NDA4LTE5OTTjgIrmlbDmja7lhYPlkozkuqTmjaLmoLzlvI/Ct+S/oeaBr+S6pOaNosK35pel5pyf5ZKM5pe26Ze06KGo56S65rOV44CL5LiOSVNPIDg2MDE6MTk4OOetieaViFxuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNyAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB1Z0NuO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwod29yZCwgbnVtKSB7XG4gICAgICAgIHZhciBmb3JtcyA9IHdvcmQuc3BsaXQoJ18nKTtcbiAgICAgICAgcmV0dXJuIG51bSAlIDEwID09PSAxICYmIG51bSAlIDEwMCAhPT0gMTEgPyBmb3Jtc1swXSA6IChudW0gJSAxMCA+PSAyICYmIG51bSAlIDEwIDw9IDQgJiYgKG51bSAlIDEwMCA8IDEwIHx8IG51bSAlIDEwMCA+PSAyMCkgPyBmb3Jtc1sxXSA6IGZvcm1zWzJdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2Y
33378XIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgJ3NzJzogd2l0aG91dFN1ZmZpeCA/ICfRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTQuF/RgdC10LrRg9C90LQnIDogJ9GB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNC4X9GB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICAnbW0nOiB3aXRob3V0U3VmZml4ID8gJ9GF0LLQuNC70LjQvdCwX9GF0LLQuNC70LjQvdC4X9GF0LLQuNC70LjQvScgOiAn0YXQstC40LvQuNC90YNf0YXQstC40LvQuNC90Lhf0YXQstC40LvQuNC9JyxcbiAgICAgICAgICAgICdoaCc6IHdpdGhvdXRTdWZmaXggPyAn0LPQvtC00LjQvdCwX9Cz0L7QtNC40L3QuF/Qs9C+0LTQuNC9JyA6ICfQs9C+0LTQuNC90YNf0LPQvtC00LjQvdC4X9Cz0L7QtNC40L0nLFxuICAgICAgICAgICAgJ2RkJzogJ9C00LXQvdGMX9C00L3Rll/QtNC90ZbQsicsXG4gICAgICAgICAgICAnTU0nOiAn0LzRltGB0Y/RhtGMX9C80ZbRgdGP0YbRll/QvNGW0YHRj9GG0ZbQsicsXG4gICAgICAgICAgICAneXknOiAn0YDRltC6X9GA0L7QutC4X9GA0L7QutGW0LInXG4gICAgICAgIH07XG4gICAgICAgIGlmIChrZXkgPT09ICdtJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0YXQstC40LvQuNC90LAnIDogJ9GF0LLQuNC70LjQvdGDJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdoJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0LPQvtC00LjQvdCwJyA6ICfQs9C+0LTQuNC90YMnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIHBsdXJhbChmb3JtYXRba2V5XSwgK251bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gd2Vla2RheXNDYXNlUmVwbGFjZShtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIHdlZWtkYXlzID0ge1xuICAgICAgICAgICAgJ25vbWluYXRpdmUnOiAn0L3QtdC00ZbQu9GPX9C/0L7QvdC10LTRltC70L7Qul/QstGW0LLRgtC+0YDQvtC6X9GB0LXRgNC10LTQsF/Rh9C10YLQstC10YBf0L/igJnRj9GC0L3QuNGG0Y9f0YHRg9Cx0L7RgtCwJy5zcGxpdCgnXycpLFxuICAgICAgICAgICAgJ2FjY3VzYXRpdmUnOiAn0L3QtdC00ZbQu9GOX9C/0L7QvdC10LTRltC70L7Qul/QstGW0LLRgtC+0YDQvtC6X9GB0LXRgNC10LTRg1/Rh9C10YLQstC10YBf0L/igJnRj9GC0L3QuNGG0Y5f0YHRg9Cx0L7RgtGDJy5zcGxpdCgnXycpLFxuICAgICAgICAgICAgJ2dlbml0aXZlJzogJ9C90LXQtNGW0LvRll/Qv9C+0L3QtdC00ZbQu9C60LBf0LLRltCy0YLQvtGA0LrQsF/RgdC10YDQtdC00Lhf0YfQtdGC0LLQtdGA0LPQsF/Qv+KAmdGP0YLQvdC40YbRll/RgdGD0LHQvtGC0LgnLnNwbGl0KCdfJylcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXlzWydub21pbmF0aXZlJ10uc2xpY2UoMSwgNykuY29uY2F0KHdlZWtkYXlzWydub21pbmF0aXZlJ10uc2xpY2UoMCwgMSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXlzWydub21pbmF0aXZlJ107XG4gICAgICAgIH1cblxuICAgICAgICB2Y
33378XIgbm91bkNhc2UgPSAoLyhcXFtb0JLQstCj0YNdXFxdKSA/ZGRkZC8pLnRlc3QoZm9ybWF0KSA/XG4gICAgICAgICAgICAnYWNjdXNhdGl2ZScgOlxuICAgICAgICAgICAgKCgvXFxbPyg/OtC80LjQvdGD0LvQvtGXfNC90LDRgdGC0YPQv9C90L7Rlyk/ID9cXF0gP2RkZGQvKS50ZXN0KGZvcm1hdCkgP1xuICAgICAgICAgICAgICAgICdnZW5pdGl2ZScgOlxuICAgICAgICAgICAgICAgICdub21pbmF0aXZlJyk7XG4gICAgICAgIHJldHVybiB3ZWVrZGF5c1tub3VuQ2FzZV1bbS5kYXkoKV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKHN0cikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0ciArICfQvicgKyAodGhpcy5ob3VycygpID09PSAxMSA/ICfQsScgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIHVrID0gbW9tZW50LmRlZmluZUxvY2FsZSgndWsnLCB7XG4gICAgICAgIG1vbnRocyA6IHtcbiAgICAgICAgICAgICdmb3JtYXQnOiAn0YHRltGH0L3Rj1/Qu9GO0YLQvtCz0L5f0LHQtdGA0LXQt9C90Y9f0LrQstGW0YLQvdGPX9GC0YDQsNCy0L3Rj1/Rh9C10YDQstC90Y9f0LvQuNC/0L3Rj1/RgdC10YDQv9C90Y9f0LLQtdGA0LXRgdC90Y9f0LbQvtCy0YLQvdGPX9C70LjRgdGC0L7Qv9Cw0LTQsF/Qs9GA0YPQtNC90Y8nLnNwbGl0KCdfJyksXG4gICAgICAgICAgICAnc3RhbmRhbG9uZSc6ICfRgdGW0YfQtdC90Yxf0LvRjtGC0LjQuV/QsdC10YDQtdC30LXQvdGMX9C60LLRltGC0LXQvdGMX9GC0YDQsNCy0LXQvdGMX9GH0LXRgNCy0LXQvdGMX9C70LjQv9C10L3RjF/RgdC10YDQv9C10L3RjF/QstC10YDQtdGB0LXQvdGMX9C20L7QstGC0LXQvdGMX9C70LjRgdGC0L7Qv9Cw0LRf0LPRgNGD0LTQtdC90YwnLnNwbGl0KCdfJylcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAn0YHRltGHX9C70Y7Rgl/QsdC10YBf0LrQstGW0YJf0YLRgNCw0LJf0YfQtdGA0LJf0LvQuNC/X9GB0LXRgNC/X9Cy0LXRgF/QttC+0LLRgl/Qu9C40YHRgl/Qs9GA0YPQtCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiB3ZWVrZGF5c0Nhc2VSZXBsYWNlLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ9C90LRf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9C90LRf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWSDRgC4nLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZINGALiwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSDRgC4sIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0KHRjNC+0LPQvtC00L3RliAnKSxcbiAgICAgICAgICAgIG5leHREYXk6IHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JfQsNCy0YLRgNCwICcpLFxuICAgICAgICAgICAgbGFzdERheTogcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQktGH0L7RgNCwICcpLFxuICAgICAgICAgICAgbmV4dFdlZWs6IHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0KNdIGRkZGQgWycpLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JzQuNC90YPQu9C+0ZddIGRkZGQgWycpLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQnNC40L3Rg9C70L7Qs9C+XSBkZGRkIFsnKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfQt9CwICVzJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXMg0YLQvtC80YMnLFxuICAgICAgICAgICAgcyA6ICfQtNC10LrRltC70YzQutCwINGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBzcyA6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG1tIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGggOiAn0LPQvtC00LjQvdGDJyxcbiAgICAgICAgICAgIGhoIDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGQgOiAn0LTQtdC90YwnLFxuICAgICAgICAgICAgZGQgOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTSA6ICfQvNGW0YHRj9GG0YwnLFxuICAgICAgICAgICAgTU0gOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeSA6ICfRgNGW0LonLFxuICAgICAgICAgICAgeXkgOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIE0uIEUuOiB0aG9zZSB0d28gYXJlIHZpcnR1YWxseSB1bnVzZWQgYnV0IGEgdXNlciBtaWdodCB3YW50IHRvIGltcGxlbWVudCB0aGVtIGZvciBoaXMvaGVyIHdlYnNpdGUgZm9yIHNvbWUgcmVhc29uXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/QvdC+0YfRlnzRgNCw0L3QutGDfNC00L3Rj3zQstC10YfQvtGA0LAvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgI
33378HJldHVybiAvXijQtNC90Y980LLQtdGH0L7RgNCwKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0L3QvtGH0ZYnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GA0LDQvdC60YMnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C00L3Rjyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LLQtdGH0L7RgNCwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjQuXzQs9C+KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QuSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCz0L4nO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVrO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAn2KzZhtmI2LHbjCcsXG4gICAgICAgICfZgdix2YjYsduMJyxcbiAgICAgICAgJ9mF2KfYsdqGJyxcbiAgICAgICAgJ9in2b7YsduM2YQnLFxuICAgICAgICAn2YXYptuMJyxcbiAgICAgICAgJ9is2YjZhicsXG4gICAgICAgICfYrNmI2YTYp9im24wnLFxuICAgICAgICAn2Kfar9iz2KonLFxuICAgICAgICAn2LPYqtmF2KjYsScsXG4gICAgICAgICfYp9qp2KrZiNio2LEnLFxuICAgICAgICAn2YbZiNmF2KjYsScsXG4gICAgICAgICfYr9iz2YXYqNixJ1xuICAgIF07XG4gICAgdmFyIGRheXMgPSBbXG4gICAgICAgICfYp9iq2YjYp9ixJyxcbiAgICAgICAgJ9m+24zYsScsXG4gICAgICAgICfZhdmG2q/ZhCcsXG4gICAgICAgICfYqNiv2r4nLFxuICAgICAgICAn2KzZhdi52LHYp9iqJyxcbiAgICAgICAgJ9is2YXYuduBJyxcbiAgICAgICAgJ9uB2YHYqtuBJ1xuICAgIF07XG5cbiAgICB2YXIgdXIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1cicsIHtcbiAgICAgICAgbW9udGhzIDogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydCA6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXMgOiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW4gOiBkYXlzLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMIDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEwgOiAnZGRkZNiMIEQgTU1NTSBZWVlZIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LXYqNitfNi02KfZhS8sXG4gICAgICAgIGlzUE0gOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2LTYp9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LXYqNitJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAn2LTYp9mFJztcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vYotisINio2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5IDogJ1vaqdmEINio2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFvYqNmI2YLYql0gTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb2q/YsNi02KrbgSDYsdmI2LIg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1var9iw2LTYqtuBXSBkZGRkIFvYqNmI2YLYql0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVzINio2LnYrycsXG4gICAgICAgICAgICBwYXN0IDogJyVzINmC2KjZhCcsXG4gICAgICAgICAgICBzIDogJ9qG2YbYryDYs9uM2qnZhtqIJyxcbiAgICAgICAgICAgI
33378HNzIDogJyVkINiz24zaqdmG2ognLFxuICAgICAgICAgICAgbSA6ICfYp9uM2qkg2YXZhtm5JyxcbiAgICAgICAgICAgIG1tIDogJyVkINmF2YbZuScsXG4gICAgICAgICAgICBoIDogJ9in24zaqSDar9q+2YbZuduBJyxcbiAgICAgICAgICAgIGhoIDogJyVkINqv2r7Zhtm525InLFxuICAgICAgICAgICAgZCA6ICfYp9uM2qkg2K/ZhicsXG4gICAgICAgICAgICBkZCA6ICclZCDYr9mGJyxcbiAgICAgICAgICAgIE0gOiAn2KfbjNqpINmF2KfbgScsXG4gICAgICAgICAgICBNTSA6ICclZCDZhdin24EnLFxuICAgICAgICAgICAgeSA6ICfYp9uM2qkg2LPYp9mEJyxcbiAgICAgICAgICAgIHl5IDogJyVkINiz2KfZhCdcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB1cjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHV6TGF0biA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3V6LWxhdG4nLCB7XG4gICAgICAgIG1vbnRocyA6ICdZYW52YXJfRmV2cmFsX01hcnRfQXByZWxfTWF5X0l5dW5fSXl1bF9Bdmd1c3RfU2VudGFicl9Pa3RhYnJfTm95YWJyX0Rla2Ficicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQgOiAnWWFuX0Zldl9NYXJfQXByX01heV9JeXVuX0l5dWxfQXZnX1Nlbl9Pa3RfTm95X0Rlaycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAnWWFrc2hhbmJhX0R1c2hhbmJhX1Nlc2hhbmJhX0Nob3JzaGFuYmFfUGF5c2hhbmJhX0p1bWFfU2hhbmJhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ1lha19EdXNoX1Nlc2hfQ2hvcl9QYXlfSnVtX1NoYW4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ1lhX0R1X1NlX0Nob19QYV9KdV9TaGEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdEIE1NTU0gWVlZWSwgZGRkZCBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tCdWd1biBzb2F0XSBMVCBbZGFdJyxcbiAgICAgICAgICAgIG5leHREYXkgOiAnW0VydGFnYV0gTFQgW2RhXScsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV0nLFxuICAgICAgICAgICAgbGFzdERheSA6ICdbS2VjaGEgc29hdF0gTFQgW2RhXScsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdbT1xcJ3RnYW5dIGRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXScsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnWWFxaW4gJXMgaWNoaWRhJyxcbiAgICAgICAgICAgIHBhc3QgOiAnQmlyIG5lY2hhICVzIG9sZGluJyxcbiAgICAgICAgICAgIHMgOiAnc29uaXlhJyxcbiAgICAgICAgICAgIHNzIDogJyVkIHNvbml5YScsXG4gICAgICAgICAgICBtIDogJ2JpciBkYXFpcWEnLFxuICAgICAgICAgICAgbW0gOiAnJWQgZGFxaXFhJyxcbiAgICAgICAgICAgIGggOiAnYmlyIHNvYXQnLFxuICAgICAgICAgICAgaGggOiAnJWQgc29hdCcsXG4gICAgICAgICAgICBkIDogJ2JpciBrdW4nLFxuICAgICAgICAgICAgZGQgOiAnJWQga3VuJyxcbiAgICAgICAgICAgIE0gOiAnYmlyIG95JyxcbiAgICAgICAgICAgIE1NIDogJyVkIG95JyxcbiAgICAgICAgICAgIHkgOiAnYmlyIHlpbCcsXG4gICAgICAgICAgICB5eSA6ICclZCB5aWwnXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDcgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHV6TGF0bjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHV6ID0gbW9tZW50LmRlZmluZUxvY2FsZSgndXonLCB7XG4gICAgICAgIG1vbnRocyA6ICfRj9C90LLQsNGAX9GE0LXQstGA0LDQu1/QvNCw0YDRgl/QsNC/0YDQtdC7X9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs9GD0YHRgl/RgdC10L3RgtGP0LHRgF/QvtC60YLRj9Cx0YBf0L3QvtGP0LHRgF/QtNC10LrQsNCx0YAnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ9GP0L3Qsl/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfQr9C60YjQsNC90LHQsF/QlNGD0YjQsNC90LHQsF/QodC10YjQsNC90LHQsF/Qp9C+0YDRiNCw0L3QsdCwX9Cf0LDQudGI0LDQvdCx0LBf0JbRg9C80LBf0KjQsNC90LHQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICfQr9C60Yhf0JTRg9GIX9Ch0LXRiF/Qp9C+0YBf0J/QsNC5X9CW
333780YPQvF/QqNCw0L0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ9Cv0Lpf0JTRg1/QodC1X9Cn0L5f0J/QsF/QltGDX9Co0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdEIE1NTU0gWVlZWSwgZGRkZCBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vQkdGD0LPRg9C9INGB0L7QsNGCXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb0K3RgNGC0LDQs9CwXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBb0LrRg9C90Lgg0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1vQmtC10YfQsCDRgdC+0LDRgl0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrIDogJ1vQo9GC0LPQsNC9XSBkZGRkIFvQutGD0L3QuCDRgdC+0LDRgl0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICfQr9C60LjQvSAlcyDQuNGH0LjQtNCwJyxcbiAgICAgICAgICAgIHBhc3QgOiAn0JHQuNGAINC90LXRh9CwICVzINC+0LvQtNC40L0nLFxuICAgICAgICAgICAgcyA6ICfRhNGD0YDRgdCw0YInLFxuICAgICAgICAgICAgc3MgOiAnJWQg0YTRg9GA0YHQsNGCJyxcbiAgICAgICAgICAgIG0gOiAn0LHQuNGAINC00LDQutC40LrQsCcsXG4gICAgICAgICAgICBtbSA6ICclZCDQtNCw0LrQuNC60LAnLFxuICAgICAgICAgICAgaCA6ICfQsdC40YAg0YHQvtCw0YInLFxuICAgICAgICAgICAgaGggOiAnJWQg0YHQvtCw0YInLFxuICAgICAgICAgICAgZCA6ICfQsdC40YAg0LrRg9C9JyxcbiAgICAgICAgICAgIGRkIDogJyVkINC60YPQvScsXG4gICAgICAgICAgICBNIDogJ9Cx0LjRgCDQvtC5JyxcbiAgICAgICAgICAgIE1NIDogJyVkINC+0LknLFxuICAgICAgICAgICAgeSA6ICfQsdC40YAg0LnQuNC7JyxcbiAgICAgICAgICAgIHl5IDogJyVkINC50LjQuydcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNyAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXo7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cblxuICAgIHZhciB2aSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3ZpJywge1xuICAgICAgICBtb250aHMgOiAndGjDoW5nIDFfdGjDoW5nIDJfdGjDoW5nIDNfdGjDoW5nIDRfdGjDoW5nIDVfdGjDoW5nIDZfdGjDoW5nIDdfdGjDoW5nIDhfdGjDoW5nIDlfdGjDoW5nIDEwX3Row6FuZyAxMV90aMOhbmcgMTInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJ1RoMDFfVGgwMl9UaDAzX1RoMDRfVGgwNV9UaDA2X1RoMDdfVGgwOF9UaDA5X1RoMTBfVGgxMV9UaDEyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAnY2jhu6cgbmjhuq10X3Ro4bupIGhhaV90aOG7qSBiYV90aOG7qSB0xrBfdGjhu6kgbsSDbV90aOG7qSBzw6F1X3Ro4bupIGLhuqN5Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ0NOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICdDTl9UMl9UM19UNF9UNV9UNl9UNycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3NhfGNoL2ksXG4gICAgICAgIGlzUE0gOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXmNoJC9pLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbSA6IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdzYScgOiAnU0EnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdjaCcgOiAnQ0gnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEwgOiAnRCBNTU1NIFtuxINtXSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gW27Eg21dIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gW27Eg21dIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbCA6ICdERC9NL1lZWVknLFxuICAgICAgICAgICAgbGwgOiAnRCBNTU0gWVlZWScsXG4gICAgICAgICAgICBsbGwgOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsbGxsIDogJ2RkZCwgRCBNTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0jDtG0gbmF5IGzDumNdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTmfDoHkgbWFpIGzDumNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdHXhuqduIHThu5tpIGzDumNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSMO0bSBxdWEgbMO6Y10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFt0deG6p24gcuG7k2kgbMO6Y10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXMgdOG7m2knLFxuICAgICAgICAgICAgcGFzdCA6ICclcyB0csaw4bubYycsXG4gICAgICAgICAgICBzIDogJ3bDoGkgZ2nDonknLFxuICAgICAgICAgICAgc3MgOiAnJWQgZ2nDonknICxcbiAgICAgICAgICAgIG0gOiAnbeG7mXQgcGjDunQnLFxuICAgICAgICAgICAgbW0gOiAnJWQgcGjDunQnLFxuICAgICAgICAgICAgaCA6ICdt4buZdCBnaeG7nScsXG4gICAgICAgICAgICBoaCA6ICclZCBnaeG7nScsXG4gICAgICAgICAgICBkIDogJ23hu5l0IG5nw6B5JyxcbiAgICAgICAgICAgIGRkIDogJyVkIG5nw6B5JyxcbiAgICAgICAgICAgIE0gOiAnbeG7mXQgdGjDoW5nJyxcbiAgICAgICAgICAgIE1NIDogJyVkIHRow6FuZycsXG4gICAgICAgICAgICB5IDogJ23hu5l0IG7Eg20nLFxuICAgICAgICAgICAgeXkgOiAnJWQgbsSDbSdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgI
33378HJldHVybiBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWsgOiB7XG4gICAgICAgICAgICBkb3cgOiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveSA6IDQgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZpO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgeFBzZXVkbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3gtcHNldWRvJywge1xuICAgICAgICBtb250aHMgOiAnSn7DocOxw7rDoX5yw71fRn7DqWJyw7p+w6Fyw71ffk3DoXJjfmhfw4FwfnLDrWxffk3DocO9X35Kw7rDscOpfl9Kw7psfsO9X8OBw7p+Z8O6c3R+X1PDqXB+dMOpbWJ+w6lyX8OTfmN0w7NifsOpcl/DkX7Ds3bDqW1+YsOpcl9+RMOpY8Opfm1iw6lyJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdKfsOhw7FffkbDqWJffk3DoXJffsOBcHJffk3DocO9X35Kw7rDsV9+SsO6bF9+w4HDumdfflPDqXBffsOTY3RffsORw7N2X35Ew6ljJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0IDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXMgOiAnU37DusOxZMOhfsO9X03Ds37DsWTDocO9fl9Uw7rDqX5zZMOhw71+X1fDqWR+w7HDqXNkfsOhw71fVH5ow7pyc35kw6HDvV9+RnLDrWR+w6HDvV9TfsOhdMO6cn5kw6HDvScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdTfsO6w7Fffk3Ds8OxX35Uw7rDqV9+V8OpZF9+VGjDul9+RnLDrV9+U8OhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAnU37Dul9Nw7N+X1TDul9+V8OpX1R+aF9Gcn5fU8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3QgOiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIEwgOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTCA6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEwgOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbSdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1tUfsOzZMOhfsO9IMOhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdbVH7Ds23Ds35ycsOzfncgw6F0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFvDoXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW8OdfsOpc3R+w6lyZMOhfsO9IMOhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnW0x+w6FzdF0gZGRkZCBbw6F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnw61+w7EgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyDDoX5nw7MnLFxuICAgICAgICAgICAgcyA6ICfDoSB+ZsOpdyB+c8OpY8OzfsOxZHMnLFxuICAgICAgICAgICAgc3MgOiAnJWQgc37DqWPDs8OxfmRzJyxcbiAgICAgICAgICAgIG0gOiAnw6Egfm3DrcOxfsO6dMOpJyxcbiAgICAgICAgICAgIG1tIDogJyVkIG1+w63DscO6fnTDqXMnLFxuICAgICAgICAgICAgaCA6ICfDoX7DsSBow7N+w7pyJyxcbiAgICAgICAgICAgIGhoIDogJyVkIGh+w7PDunJzJyxcbiAgICAgICAgICAgIGQgOiAnw6EgfmTDocO9JyxcbiAgICAgICAgICAgIGRkIDogJyVkIGR+w6HDvXMnLFxuICAgICAgICAgICAgTSA6ICfDoSB+bcOzw7F+dGgnLFxuICAgICAgICAgICAgTU0gOiAnJWQgbX7Ds8OxdH5ocycsXG4gICAgICAgICAgICB5IDogJ8OhIH7DvcOpw6FyJyxcbiAgICAgICAgICAgIHl5IDogJyVkIMO9fsOpw6FycydcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHRofHN0fG5kfHJkKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2Y
33378XIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh+fihudW1iZXIgJSAxMDAgLyAxMCkgPT09IDEpID8gJ3RoJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDEpID8gJ3N0JyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDIpID8gJ25kJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDMpID8gJ3JkJyA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrIDoge1xuICAgICAgICAgICAgZG93IDogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3kgOiA0ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB4UHNldWRvO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgeW8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd5bycsIHtcbiAgICAgICAgbW9udGhzIDogJ1PhurnMgXLhurnMgV9FzIByZcyAbGXMgF/hurhy4bq5zIBuYcyAX0nMgGdiZcyBX0XMgGJpYmlfT8yAa3XMgGR1X0Fn4bq5bW9fT8yAZ3XMgW5fT3dld2Vf4buMzIB3YcyAcmHMgF9CZcyBbHXMgV/hu4zMgHDhurnMgMyAJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICdT4bq5zIFyX0XMgHJsX+G6uHJuX0nMgGdiX0XMgGJpX0/MgGt1zIBfQWfhurlfT8yAZ3XMgV9Pd2Vf4buMzIB3YcyAX0JlzIFsX+G7jMyAcOG6ucyAzIAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzIDogJ0HMgGnMgGt1zIFfQWplzIFfScyAc+G6ucyBZ3VuX+G7jGrhu43MgXJ1zIFf4buMauG7jcyBYuG7jV/hurh0acyAX0HMgGJhzIFt4bq5zIF0YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydCA6ICdBzIBpzIBrX0FqZcyBX0nMgHPhurnMgV/hu4xqcl/hu4xqYl/hurh0acyAX0HMgGJhzIEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluIDogJ0HMgGnMgF9Bal9JzIBzX+G7jHJf4buMYl/hurh0X0HMgGInLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUyA6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTCA6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMIDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTCA6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTCA6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyIDoge1xuICAgICAgICAgICAgc2FtZURheSA6ICdbT8yAbmnMgCBuaV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb4buMzIBsYSBuaV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBb4buMc+G6ucyAIHRvzIFuXFwnYuG7jV0gW25pXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5IDogJ1tBzIBuYSBuaV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWsgOiAnZGRkZCBb4buMc+G6ucyAIHRvzIFs4buNzIFdIFtuaV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJ25pzIEgJXMnLFxuICAgICAgICAgICAgcGFzdCA6ICclcyBr4buNamHMgScsXG4gICAgICAgICAgICBzIDogJ2nMgHPhurlqdcyBIGFheWHMgSBkaWUnLFxuICAgICAgICAgICAgc3MgOidhYXlhzIEgJWQnLFxuICAgICAgICAgICAgbSA6ICdpzIBz4bq5anXMgSBrYW4nLFxuICAgICAgICAgICAgbW0gOiAnacyAc+G6uWp1zIEgJWQnLFxuICAgICAgICAgICAgaCA6ICd3YcyBa2F0aSBrYW4nLFxuICAgICAgICAgICAgaGggOiAnd2HMgWthdGkgJWQnLFxuICAgICAgICAgICAgZCA6ICfhu41q4buNzIEga2FuJyxcbiAgICAgICAgICAgIGRkIDogJ+G7jWrhu43MgSAlZCcsXG4gICAgICAgICAgICBNIDogJ29zdcyAIGthbicsXG4gICAgICAgICAgICBNTSA6ICdvc3XMgCAlZCcsXG4gICAgICAgICAgICB5IDogJ+G7jWR1zIFuIGthbicsXG4gICAgICAgICAgICB5eSA6ICfhu41kdcyBbiAlZCdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZSA6IC/hu41q4buNzIFcXHNcXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWwgOiAn4buNauG7jcyBICVkJyxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB5bztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHpoQ24gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd6aC1jbicsIHtcbiAgICAgICAgbW9udGhzIDogJ+S4gOaciF/kuozmn
33378Ihf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ+WRqOaXpV/lkajkuIBf5ZGo5LqMX+WRqOS4iV/lkajlm5tf5ZGo5LqUX+WRqOWFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgTEwgOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTCA6ICdZWVlZ5bm0TeaciETml6VBaOeCuW1t5YiGJyxcbiAgICAgICAgICAgIExMTEwgOiAnWVlZWeW5tE3mnIhE5pelZGRkZEFo54K5bW3liIYnLFxuICAgICAgICAgICAgbCA6ICdZWVlZL00vRCcsXG4gICAgICAgICAgICBsbCA6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsIDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsIDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8XG4gICAgICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gJ+S4reWNiCdcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTEzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuK3ljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4i+WNiCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pma5LiKJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vku4rlpKldTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb5piO5aSpXUxUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ1vkuItdZGRkZExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW+aYqOWkqV1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb5LiKXWRkZGRMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o5pelfOaciHzlkagpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pyIJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICflkagnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZSA6IHtcbiAgICAgICAgICAgIGZ1dHVyZSA6ICclc+WGhScsXG4gICAgICAgICAgICBwYXN0IDogJyVz5YmNJyxcbiAgICAgICAgICAgIHMgOiAn5Yeg56eSJyxcbiAgICAgICAgICAgIHNzIDogJyVkIOenkicsXG4gICAgICAgICAgICBtIDogJzEg5YiG6ZKfJyxcbiAgICAgICAgICAgIG1tIDogJyVkIOWIhumSnycsXG4gICAgICAgICAgICBoIDogJzEg5bCP5pe2JyxcbiAgICAgICAgICAgIGhoIDogJyVkIOWwj+aXticsXG4gICAgICAgICAgICBkIDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkIDogJyVkIOWkqScsXG4gICAgICAgICAgICBNIDogJzEg5Liq5pyIJyxcbiAgICAgICAgICAgIE1NIDogJyVkIOS4quaciCcsXG4gICAgICAgICAgICB5IDogJzEg5bm0JyxcbiAgICAgICAgICAgI
33378Hl5IDogJyVkIOW5tCdcbiAgICAgICAgfSxcbiAgICAgICAgd2VlayA6IHtcbiAgICAgICAgICAgIC8vIEdCL1QgNzQwOC0xOTk044CK5pWw5o2u5YWD5ZKM5Lqk5o2i5qC85byPwrfkv6Hmga/kuqTmjaLCt+aXpeacn+WSjOaXtumXtOihqOekuuazleOAi+S4jklTTyA4NjAxOjE5ODjnrYnmlYhcbiAgICAgICAgICAgIGRvdyA6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95IDogNCAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gemhDbjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuXG4gICAgdmFyIHpoSGsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd6aC1oaycsIHtcbiAgICAgICAgbW9udGhzIDogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNTaG9ydCA6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXMgOiAn5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0IDogJ+mAseaXpV/pgLHkuIBf6YCx5LqMX+mAseS4iV/pgLHlm5tf6YCx5LqUX+mAseWFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW4gOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdCA6IHtcbiAgICAgICAgICAgIExUIDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUyA6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMIDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgTEwgOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTCA6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgTExMTCA6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgICAgIGwgOiAnWVlZWS9NL0QnLFxuICAgICAgICAgICAgbGwgOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbCA6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbCA6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJ1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLFxuICAgICAgICBtZXJpZGllbUhvdXIgOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn5YeM5pmoJyB8fCBtZXJpZGllbSA9PT0gJ+aXqeS4iicgfHwgbWVyaWRpZW0gPT09ICfkuIrljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5Lit5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuIvljYgnIHx8IG1lcmlkaWVtID09PSAn5pma5LiKJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtIDogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTEzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuK3ljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4i+WNiCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pma5LiKJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXIgOiB7XG4gICAgICAgICAgICBzYW1lRGF5IDogJ1vku4rlpKldTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb5piO5aSpXUxUJyxcbiAgICAgICAgICAgIG5leHRXZWVrIDogJ1vkuItdZGRkZExUJyxcbiAgICAgICAgICAgIGxhc3REYXkgOiAnW+aYqOWkqV1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb5LiKXWRkZGRMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o5pelfOaciHzpgLEpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJyA6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCcgOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCcgOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTScgOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndycgOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnIDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfpgLEnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQgOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWUgOiB7XG4gICAgICAgICAgICBmdXR1cmUgOiAnJXPlhacnLFxuICAgICAgICAgICAgcGFzdCA6ICclc+WJjScsXG4gICAgICAgICAgICBzIDogJ+W5vuenkicsXG4gICAgICAgICAgICBzcyA6ICclZCDnp5InLFxuICAgICAgICAgICAgbSA6ICcxIOWIhumQmCcsXG4gICAgICAgICAgICBtbSA6ICclZCDliIbpkJgnLFxuICAgICAgICAgICAgaCA6ICcxIOWwj+aZgicsXG4gICAgICAgICAgICBoaCA6ICclZCDlsI/mmYInLFxuICAgICAgICAgICAgZCA6ICcxIOWkqScsXG4gICAgICAgICAgICBkZCA6ICclZCDlpKknLFxuICAgICAgICAgICAgTSA6ICcxIOWAi+aciCcsXG4gICAgICAgICAgICBNTSA6ICclZCDlgIvmnIgnLFxuICAgICAgICAgICAgeSA6ICcxIOW5tCcsXG4gICAgICAgICAgICB5eSA6ICclZCDlubQnXG4gICAgICAgI
33378H1cbiAgICB9KTtcblxuICAgIHJldHVybiB6aEhrO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICB2YXIgemhUdyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLXR3Jywge1xuICAgICAgICBtb250aHMgOiAn5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0IDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5cyA6ICfmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgOiAn6YCx5pelX+mAseS4gF/pgLHkuoxf6YCx5LiJX+mAseWbm1/pgLHkupRf6YCx5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbiA6ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0IDoge1xuICAgICAgICAgICAgTFQgOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTIDogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEwgOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTCA6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMIDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBMTExMIDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICAgICAgbCA6ICdZWVlZL00vRCcsXG4gICAgICAgICAgICBsbCA6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsIDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsIDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91ciA6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICflh4zmmagnIHx8IG1lcmlkaWVtID09PSAn5pep5LiKJyB8fCBtZXJpZGllbSA9PT0gJ+S4iuWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuK3ljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW0gOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2Y
33378XIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhciA6IHtcbiAgICAgICAgICAgIHNhbWVEYXkgOiAnW+S7iuWkqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheSA6ICdb5piO5aSpXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlayA6ICdb5LiLXWRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheSA6ICdb5pio5aSpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlayA6ICdb5LiKXWRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOaXpXzmnIh86YCxKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCcgOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnIDpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnIDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nIDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfmnIgnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnIDpcbiAgICAgICAgICAgICAgICBjYXNlICdXJyA6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn6YCxJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0IDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lIDoge1xuICAgICAgICAgICAgZnV0dXJlIDogJyVz5YWnJyxcbiAgICAgICAgICAgIHBhc3QgOiAnJXPliY0nLFxuICAgICAgICAgICAgcyA6ICflub7np5
33378InLFxuICAgICAgICAgICAgc3MgOiAnJWQg56eSJyxcbiAgICAgICAgICAgIG0gOiAnMSDliIbpkJgnLFxuICAgICAgICAgICAgbW0gOiAnJWQg5YiG6ZCYJyxcbiAgICAgICAgICAgIGggOiAnMSDlsI/mmYInLFxuICAgICAgICAgICAgaGggOiAnJWQg5bCP5pmCJyxcbiAgICAgICAgICAgIGQgOiAnMSDlpKknLFxuICAgICAgICAgICAgZGQgOiAnJWQg5aSpJyxcbiAgICAgICAgICAgIE0gOiAnMSDlgIvmnIgnLFxuICAgICAgICAgICAgTU0gOiAnJWQg5YCL5pyIJyxcbiAgICAgICAgICAgIHkgOiAnMSDlubQnLFxuICAgICAgICAgICAgeXkgOiAnJWQg5bm0J1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gemhUdztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MgKCkge1xuICAgICAgICByZXR1cm4gaG9va0NhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBkb25lIHRvIHJlZ2lzdGVyIHRoZSBtZXRob2QgY2FsbGVkIHdpdGggbW9tZW50KClcbiAgICAvLyB3aXRob3V0IGNyZWF0aW5nIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICBmdW5jdGlvbiBzZXRIb29rQ2FsbGJhY2sgKGNhbGxiYWNrKSB7XG4gICAgICAgIGhvb2tDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0IGluc3RhbmNlb2YgQXJyYXkgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgICAgICAvLyBJRTggd2lsbCB0cmVhdCB1bmRlZmluZWQgYW5kIG51bGwgYXMgb2JqZWN0IGlmIGl0IHdhc24ndCBmb3JcbiAgICAgICAgLy8gaW5wdXQgIT0gbnVsbFxuICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBPYmplY3RdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgICAgIHJldHVybiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICBmb3IgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09IHZvaWQgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RhdGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwKGFyciwgZm4pIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdLCBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc093blByb3AoYSwgYikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyAoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIHRydWUpLnV0YygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmF1bHRQYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZGVlcCBjbG9uZSB0aGlzIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtcHR5ICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zICAgIDogW10sXG4gICAgICAgICAgICB1bnVzZWRJbnB1dCAgICAgOiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93ICAgICAgICA6IC0yLFxuICAgICAgICAgICAgY2hhcnNMZWZ0T3ZlciAgIDogMCxcbiAgICAgICAgICAgIG51bGxJbnB1dCAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZE1vbnRoICAgIDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQgICA6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkIDogZmFsc2UsXG4gICAgICAgICAgICBpc28gICAgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgI
33378HBhcnNlZERhdGVQYXJ0cyA6IFtdLFxuICAgICAgICAgICAgbWVyaWRpZW0gICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIHJmYzI4MjIgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgd2Vla2RheU1pc21hdGNoIDogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzaW5nRmxhZ3MobSkge1xuICAgICAgICBpZiAobS5fcGYgPT0gbnVsbCkge1xuICAgICAgICAgICAgbS5fcGYgPSBkZWZhdWx0UGFyc2luZ0ZsYWdzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX3BmO1xuICAgIH1cblxuICAgIHZhciBzb21lO1xuICAgIGlmIChBcnJheS5wcm90b3R5cGUuc29tZSkge1xuICAgICAgICBzb21lID0gQXJyYXkucHJvdG90eXBlLnNvbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc29tZSA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICAgICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpO1xuICAgICAgICAgICAgdmFyIGxlbiA9IHQubGVuZ3RoID4+PiAwO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgaW4gdCAmJiBmdW4uY2FsbCh0aGlzLCB0W2ldLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkKG0pIHtcbiAgICAgICAgaWYgKG0uX2lzVmFsaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGZsYWdzID0gZ2V0UGFyc2luZ0ZsYWdzKG0pO1xuICAgICAgICAgICAgdmFyIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2Y
33378XIgaXNOb3dWYWxpZCA9ICFpc05hTihtLl9kLmdldFRpbWUoKSkgJiZcbiAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZE1vbnRoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRXZWVrZGF5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLndlZWtkYXlNaXNtYXRjaCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5udWxsSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy51c2VySW52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAoIWZsYWdzLm1lcmlkaWVtIHx8IChmbGFncy5tZXJpZGllbSAmJiBwYXJzZWRQYXJ0cykpO1xuXG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9IGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbiA9PSBudWxsIHx8ICFPYmplY3QuaXNGcm96ZW4obSkpIHtcbiAgICAgICAgICAgICAgICBtLl9pc1ZhbGlkID0gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc05vd1ZhbGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQgKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gaG9va3MubW9tZW50UHJvcGVydGllcyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gY29weUNvbmZpZyh0bywgZnJvbSkge1xuICAgICAgICB2Y
33378XIgaSwgcHJvcCwgdmFsO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbW9tZW50UHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHByb3AgPSBtb21lbnRQcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgICAgIHZhbCA9IGZyb21bcHJvcF07XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG5cbiAgICB2YXIgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50IChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE1vbWVudCB8fCAob2JqICE9IG51bGwgJiYgb2JqLl9pc0FNb21lbnRPYmplY3QgIT0gbnVsbCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IgKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgLy8gLTAgLT4gMFxuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpIHx8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JbnQoYXJndW1lbnRGb3JDb2VyY2lvbikge1xuICAgICAgICB2Y
33378XIgY29lcmNlZE51bWJlciA9ICthcmd1bWVudEZvckNvZXJjaW9uLFxuICAgICAgICAgICAgdmFsdWUgPSAwO1xuXG4gICAgICAgIGlmIChjb2VyY2VkTnVtYmVyICE9PSAwICYmIGlzRmluaXRlKGNvZXJjZWROdW1iZXIpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGFic0Zsb29yKGNvZXJjZWROdW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSkpIHtcbiAgICAgICAgICAgICAgICBkaWZmcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWZmcyArIGxlbmd0aERpZmY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Fybihtc2cpIHtcbiAgICAgICAgaWYgKGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIGNvbnNvbGUgIT09ICAndW5kZWZpbmVkJykgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0aW9uIHdhcm5pbmc6ICcgKyBtc2cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlKG1zZywgZm4pIHtcbiAgICAgICAgdmFyIGZpcnN0VGltZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobnVsbCwgbXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgICAgICAgICB2Y
33378XIgYXJncyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBhcmc7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnRzW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9ICdcXG5bJyArIGkgKyAnXSAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSBrZXkgKyAnOiAnICsgYXJndW1lbnRzWzBdW2tleV0gKyAnLCAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDAsIC0yKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFuZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXJuKG1zZyArICdcXG5Bcmd1bWVudHM6ICcgKyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKS5qb2luKCcnKSArICdcXG4nICsgKG5ldyBFcnJvcigpKS5zdGFjayk7XG4gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgZm4pO1xuICAgIH1cblxuICAgIHZhciBkZXByZWNhdGlvbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCBtc2cpIHtcbiAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobmFtZSwgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZhbHNlO1xuICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0IChjb25maWcpIHtcbiAgICAgICAgdmFyIHByb3AsIGk7XG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwcm9wKSkge1xuICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBwcm9wO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzWydfJyArIGldID0gcHJvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0b1xuICAgICAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZSB8fCB0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSArXG4gICAgICAgICAgICAgICAgJ3wnICsgKC9cXGR7MSwyfS8pLnNvdXJjZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSwgcHJvcDtcbiAgICAgICAgZm9yIChwcm9wIGluIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKSAmJiBpc09iamVjdChjaGlsZENvbmZpZ1twcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3Byb3BdID0ge307XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuZChyZXNbcHJvcF0sIHBhcmVudENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuZChyZXNbcHJvcF0sIGNoaWxkQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkQ29uZmlnW3Byb3BdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gY2hpbGRDb25maWdbcHJvcF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlc1twcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChwcm9wIGluIHBhcmVudENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AocGFyZW50Q29uZmlnLCBwcm9wKSAmJlxuICAgICAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBjaGFuZ2VzIHRvIHByb3BlcnRpZXMgZG9uJ3QgbW9kaWZ5IHBhcmVudCBjb25maWdcbiAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBleHRlbmQoe30sIHJlc1twcm9wXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgI
33378H1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBMb2NhbGUoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZXQoY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKSB7XG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cztcbiAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgdmFyIGksIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5IDogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5IDogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICBuZXh0V2VlayA6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5IDogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWsgOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgIHNhbWVFbHNlIDogJ0wnXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyIChrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQgPSB7XG4gICAgICAgIExUUyAgOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQgICA6ICdoOm1tIEEnLFxuICAgICAgICBMICAgIDogJ01NL0REL1lZWVknLFxuICAgICAgICBMTCAgIDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgIExMTCAgOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEwgOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSdcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQgKGtleSkge1xuICAgICAgICB2Y
33378XIgZm9ybWF0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSxcbiAgICAgICAgICAgIGZvcm1hdFVwcGVyID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5LnRvVXBwZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChmb3JtYXQgfHwgIWZvcm1hdFVwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSA9IGZvcm1hdFVwcGVyLnJlcGxhY2UoL01NTU18TU18RER8ZGRkZC9nLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLnNsaWNlKDEpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdEludmFsaWREYXRlID0gJ0ludmFsaWQgZGF0ZSc7XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkRGF0ZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZhbGlkRGF0ZTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdE9yZGluYWwgPSAnJWQnO1xuICAgIHZhciBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSA9IC9cXGR7MSwyfS87XG5cbiAgICBmdW5jdGlvbiBvcmRpbmFsIChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmUgOiAnaW4gJXMnLFxuICAgICAgICBwYXN0ICAgOiAnJXMgYWdvJyxcbiAgICAgICAgcyAgOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzIDogJyVkIHNlY29uZHMnLFxuICAgICAgICBtICA6ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tIDogJyVkIG1pbnV0ZXMnLFxuICAgICAgICBoICA6ICdhbiBob3VyJyxcbiAgICAgICAgaGggOiAnJWQgaG91cnMnLFxuICAgICAgICBkICA6ICdhIGRheScsXG4gICAgICAgIGRkIDogJyVkIGRheXMnLFxuICAgICAgICBNICA6ICdhIG1vbnRoJyxcbiAgICAgICAgTU0gOiAnJWQgbW9udGhzJyxcbiAgICAgICAgeSAgOiAnYSB5ZWFyJyxcbiAgICAgICAgeXkgOiAnJWQgeWVhcnMnXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZSAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbc3RyaW5nXTtcbiAgICAgICAgcmV0dXJuIChpc0Z1bmN0aW9uKG91dHB1dCkpID9cbiAgICAgICAgICAgIG91dHB1dChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIDpcbiAgICAgICAgICAgIG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhc3RGdXR1cmUgKGRpZmYsIG91dHB1dCkge1xuICAgICAgICB2Y
33378XIgZm9ybWF0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW2RpZmYgPiAwID8gJ2Z1dHVyZScgOiAncGFzdCddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihmb3JtYXQpID8gZm9ybWF0KG91dHB1dCkgOiBmb3JtYXQucmVwbGFjZSgvJXMvaSwgb3V0cHV0KTtcbiAgICB9XG5cbiAgICB2YXIgYWxpYXNlcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkVW5pdEFsaWFzICh1bml0LCBzaG9ydGhhbmQpIHtcbiAgICAgICAgdmFyIGxvd2VyQ2FzZSA9IHVuaXQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgYWxpYXNlc1tsb3dlckNhc2VdID0gYWxpYXNlc1tsb3dlckNhc2UgKyAncyddID0gYWxpYXNlc1tzaG9ydGhhbmRdID0gdW5pdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVVbml0cyh1bml0cykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHVuaXRzID09PSAnc3RyaW5nJyA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplT2JqZWN0VW5pdHMoaW5wdXRPYmplY3QpIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IHt9LFxuICAgICAgICAgICAgbm9ybWFsaXplZFByb3AsXG4gICAgICAgICAgICBwcm9wO1xuXG4gICAgICAgIGZvciAocHJvcCBpbiBpbnB1dE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoaW5wdXRPYmplY3QsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFByb3AgPSBub3JtYWxpemVVbml0cyhwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZElucHV0W25vcm1hbGl6ZWRQcm9wXSA9IGlucHV0T2JqZWN0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub3JtYWxpemVkSW5wdXQ7XG4gICAgfVxuXG4gICAgdmFyIHByaW9yaXRpZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRQcmlvcml0eSh1bml0LCBwcmlvcml0eSkge1xuICAgICAgICBwcmlvcml0aWVzW3VuaXRdID0gcHJpb3JpdHk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2Y
33378XIgdW5pdHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgdSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgdW5pdHMucHVzaCh7dW5pdDogdSwgcHJpb3JpdHk6IHByaW9yaXRpZXNbdV19KTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdW5pdHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gemVyb0ZpbGwobnVtYmVyLCB0YXJnZXRMZW5ndGgsIGZvcmNlU2lnbikge1xuICAgICAgICB2YXIgYWJzTnVtYmVyID0gJycgKyBNYXRoLmFicyhudW1iZXIpLFxuICAgICAgICAgICAgemVyb3NUb0ZpbGwgPSB0YXJnZXRMZW5ndGggLSBhYnNOdW1iZXIubGVuZ3RoLFxuICAgICAgICAgICAgc2lnbiA9IG51bWJlciA+PSAwO1xuICAgICAgICByZXR1cm4gKHNpZ24gPyAoZm9yY2VTaWduID8gJysnIDogJycpIDogJy0nKSArXG4gICAgICAgICAgICBNYXRoLnBvdygxMCwgTWF0aC5tYXgoMCwgemVyb3NUb0ZpbGwpKS50b1N0cmluZygpLnN1YnN0cigxKSArIGFic051bWJlcjtcbiAgICB9XG5cbiAgICB2YXIgZm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98WVlZWVlZfFlZWVlZfFlZWVl8WVl8Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2c7XG5cbiAgICB2YXIgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZztcblxuICAgIHZhciBmb3JtYXRGdW5jdGlvbnMgPSB7fTtcblxuICAgIHZhciBmb3JtYXRUb2tlbkZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgLy8gdG9rZW46ICAgICdNJ1xuICAgIC8vIHBhZGRlZDogICBbJ01NJywgMl1cbiAgICAvLyBvcmRpbmFsOiAgJ01vJ1xuICAgIC8vIGNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7IHRoaXMubW9udGgoKSArIDEgfVxuICAgIGZ1bmN0aW9uIGFkZEZvcm1hdFRva2VuICh0b2tlbiwgcGFkZGVkLCBvcmRpbmFsLCBjYWxsYmFjaykge1xuICAgICAgICB2Y
33378XIgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tjYWxsYmFja10oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWRkZWQpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3BhZGRlZFswXV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHplcm9GaWxsKGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgcGFkZGVkWzFdLCBwYWRkZWRbMl0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JkaW5hbCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbb3JkaW5hbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0b2tlbik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQubWF0Y2goL1xcW1tcXHNcXFNdLykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIHZhciBhcnJheSA9IGZvcm1hdC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSwgaSwgbGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhhcnJheVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG1vbSkge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9ICcnLCBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdCkgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPSBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSB8fCBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KTtcblxuICAgICAgICByZXR1cm4gZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0obSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbG9jYWxlKSB7XG4gICAgICAgIHZhciBpID0gNTtcblxuICAgICAgICBmdW5jdGlvbiByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubG9uZ0RhdGVGb3JtYXQoaW5wdXQpIHx8IGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChpID49IDAgJiYgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UobG9jYWxGb3JtYXR0aW5nVG9rZW5zLCByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMpO1xuICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBpIC09IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH1cblxuICAgIHZhciBtYXRjaDEgICAgICAgICA9IC9cXGQvOyAgICAgICAgICAgIC8vICAgICAgIDAgLSA5XG4gICAgdmFyIG1hdGNoMiAgICAgICAgID0gL1xcZFxcZC87ICAgICAgICAgIC8vICAgICAgMDAgLSA5OVxuICAgIHZhciBtYXRjaDMgICAgICAgICA9IC9cXGR7M30vOyAgICAgICAgIC8vICAgICAwMDAgLSA5OTlcbiAgICB2YXIgbWF0Y2g0ICAgICAgICAgPSAvXFxkezR9LzsgICAgICAgICAvLyAgICAwMDAwIC0gOTk5OVxuICAgIHZhciBtYXRjaDYgICAgICAgICA9IC9bKy1dP1xcZHs2fS87ICAgIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICB2YXIgbWF0Y2gxdG8yICAgICAgPSAvXFxkXFxkPy87ICAgICAgICAgLy8gICAgICAgMCAtIDk5XG4gICAgdmFyIG1hdGNoM3RvNCAgICAgID0gL1xcZFxcZFxcZFxcZD8vOyAgICAgLy8gICAgIDk5OSAtIDk5OTlcbiAgICB2YXIgbWF0Y2g1dG82ICAgICAgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy87IC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICB2YXIgbWF0Y2gxdG8zICAgICAgPSAvXFxkezEsM30vOyAgICAgICAvLyAgICAgICAwIC0gOTk5XG4gICAgdmFyIG1hdGNoMXRvNCAgICAgID0gL1xcZHsxLDR9LzsgICAgICAgLy8gICAgICAgMCAtIDk5OTlcbiAgICB2YXIgbWF0Y2gxdG82ICAgICAgPSAvWystXT9cXGR7MSw2fS87ICAvLyAtOTk5OTk5IC0gOTk5OTk5XG5cbiAgICB2YXIgbWF0Y2hVbnNpZ25lZCAgPSAvXFxkKy87ICAgICAgICAgICAvLyAgICAgICAwIC0gaW5mXG4gICAgdmFyIG1hdGNoU2lnbmVkICAgID0gL1srLV0/XFxkKy87ICAgICAgLy8gICAgLWluZiAtIGluZlxuXG4gICAgdmFyIG1hdGNoT2Zmc2V0ICAgID0gL1p8WystXVxcZFxcZDo
33378/XFxkXFxkL2dpOyAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICB2YXIgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpOyAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuXG4gICAgdmFyIG1hdGNoVGltZXN0YW1wID0gL1srLV0/XFxkKyhcXC5cXGR7MSwzfSk/LzsgLy8gMTIzNDU2Nzg5IDEyMzQ1Njc4OS4xMjNcblxuICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgIC8vIGluY2x1ZGVzIHNjb3R0aXNoIGdhZWxpYyB0d28gd29yZCBhbmQgaHlwaGVuYXRlZCBtb250aHNcbiAgICB2YXIgbWF0Y2hXb3JkID0gL1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2k7XG5cbiAgICB2YXIgcmVnZXhlcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUmVnZXhUb2tlbiAodG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpID8gcmVnZXggOiBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZURhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiAoaXNTdHJpY3QgJiYgc3RyaWN0UmVnZXgpID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4gKHRva2VuLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHJlZ2V4ZXMsIHRva2VuKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodW5lc2NhcGVGb3JtYXQodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWdleGVzW3Rva2VuXShjb25maWcuX3N0cmljdCwgY29uZmlnLl9sb2NhbGUpO1xuICAgIH1cblxuICAgIC8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjE0OTMvaXMtdGhlcmUtYS1yZWdleHAtZXNjYXBlLWZ1bmN0aW9uLWluLWphdmFzY3JpcHRcbiAgICBmdW5jdGlvbiB1bmVzY2FwZUZvcm1hdChzKSB7XG4gICAgICAgIHJldHVybiByZWdleEVzY2FwZShzLnJlcGxhY2UoJ1xcXFwnLCAnJykucmVwbGFjZSgvXFxcXChcXFspfFxcXFwoXFxdKXxcXFsoW15cXF1cXFtdKilcXF18XFxcXCguKS9nLCBmdW5jdGlvbiAobWF0Y2hlZCwgcDEsIHAyLCBwMywgcDQpIHtcbiAgICAgICAgICAgIHJldHVybiBwMSB8fCBwMiB8fCBwMyB8fCBwNDtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbiAodG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBpLCBmdW5jID0gY2FsbGJhY2s7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0b2tlbiA9IFt0b2tlbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTnVtYmVyKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBhcnJheVtjYWxsYmFja10gPSB0b0ludChpbnB1dCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuW2ldXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrUGFyc2VUb2tlbiAodG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIGNvbmZpZy5fdyA9IGNvbmZpZy5fdyB8fCB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGlucHV0LCBjb25maWcuX3csIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgaW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBoYXNPd25Qcm9wKHRva2VucywgdG9rZW4pKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5dKGlucHV0LCBjb25maWcuX2EsIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwO1xuICAgIHZhciBNT05USCA9IDE7XG4gICAgdmFyIERBVEUgPSAyO1xuICAgIHZhciBIT1VSID0gMztcbiAgICB2YXIgTUlOVVRFID0gNDtcbiAgICB2YXIgU0VDT05EID0gNTtcbiAgICB2YXIgTUlMTElTRUNPTkQgPSA2O1xuICAgIHZhciBXRUVLID0gNztcbiAgICB2YXIgV0VFS0RBWSA9IDg7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/ICcnICsgeSA6ICcrJyArIHk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZJywgICA0XSwgICAgICAgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgIDVdLCAgICAgICAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3llYXInLCAneScpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd5ZWFyJywgMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdZJywgICAgICBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCAgICAgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVknLCAgIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsICBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ1lZWVlZJywgJ1lZWVlZWSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgI
33378HJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0b0ludChpbnB1dCkgKyAodG9JbnQoaW5wdXQpID4gNjggPyAxOTAwIDogMjAwMCk7XG4gICAgfTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRZZWFyID0gbWFrZUdldFNldCgnRnVsbFllYXInLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGdldElzTGVhcFllYXIgKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCAodW5pdCwga2VlcFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzZXQkMSh0aGlzLCB1bml0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIGtlZXBUaW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQgKG1vbSwgdW5pdCkge1xuICAgICAgICByZXR1cm4gbW9tLmlzVmFsaWQoKSA/XG4gICAgICAgICAgICBtb20uX2RbJ2dldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0oKSA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMSAobW9tLCB1bml0LCB2YWx1ZSkge1xuICAgICAgICBpZiAobW9tLmlzVmFsaWQoKSAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodW5pdCA9PT0gJ0Z1bGxZZWFyJyAmJiBpc0xlYXBZZWFyKG1vbS55ZWFyKCkpICYmIG1vbS5tb250aCgpID09PSAxICYmIG1vbS5kYXRlKCkgPT09IDI5KSB7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKHZhbHVlLCBtb20ubW9udGgoKSwgZGF5c0luTW9udGgodmFsdWUsIG1vbS5tb250aCgpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0ICh1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCAodW5pdHMsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdW5pdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIHZhciBwcmlvcml0aXplZCA9IGdldFByaW9yaXRpemVkVW5pdHModW5pdHMpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmlvcml0aXplZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXNbcHJpb3JpdGl6ZWRbaV0udW5pdF0odW5pdHNbcHJpb3JpdGl6ZWRbaV0udW5pdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vZChuLCB4KSB7XG4gICAgICAgIHJldHVybiAoKG4gJSB4KSArIHgpICUgeDtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXhPZjtcblxuICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xuICAgICAgICBpbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXhPZiA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAvLyBJIGtub3dcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tpXSA9PT0gbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgICAgaWYgKGlzTmFOKHllYXIpIHx8IGlzTmFOKG1vbnRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2Y
33378XIgbW9kTW9udGggPSBtb2QobW9udGgsIDEyKTtcbiAgICAgICAgeWVhciArPSAobW9udGggLSBtb2RNb250aCkgLyAxMjtcbiAgICAgICAgcmV0dXJuIG1vZE1vbnRoID09PSAxID8gKGlzTGVhcFllYXIoeWVhcikgPyAyOSA6IDI4KSA6ICgzMSAtIG1vZE1vbnRoICUgNyAlIDIpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNJywgWydNTScsIDJdLCAnTW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoKCkgKyAxO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtb250aCcsICdNJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdtb250aCcsIDgpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignTScsICAgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU0nLCAgIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCAgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTScsICdNTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9IHRvSW50KGlucHV0KSAtIDE7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTU1NJywgJ01NTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2Y
33378XIgbW9udGggPSBjb25maWcuX2xvY2FsZS5tb250aHNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgYSBtb250aCBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWQuXG4gICAgICAgIGlmIChtb250aCAhPSBudWxsKSB7XG4gICAgICAgICAgICBhcnJheVtNT05USF0gPSBtb250aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRNb250aCA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICB2YXIgTU9OVEhTX0lOX0ZPUk1BVCA9IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/LztcbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRocyA9ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRocyAobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKSA/IHRoaXMuX21vbnRocyA6XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzWydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKSA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldIDpcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0IHx8IE1PTlRIU19JTl9GT1JNQVQpLnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQgPSAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzU2hvcnQgKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KSA/IHRoaXMuX21vbnRoc1Nob3J0IDpcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KSA/IHRoaXMuX21vbnRoc1Nob3J0W20ubW9udGgoKV0gOlxuICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRbTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ11bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBpaSwgbW9tLCBsbGMgPSBtb250aE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZFxuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHNTaG9ydChtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1BhcnNlIChtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UuY2FsbCh0aGlzLCBtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgI
33378HRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IGFkZCBzb3J0aW5nXG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXJcbiAgICAgICAgLy8gc2VlIHNvcnRpbmcgaW4gY29tcHV0ZU1vbnRoc1BhcnNlXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLCAnaScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJywgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGZvcm1hdCA9PT0gJ01NTU0nICYmIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGZvcm1hdCA9PT0gJ01NTScgJiYgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoIChtb20sIHZhbHVlKSB7XG4gICAgICAgIHZhciBkYXlPZk1vbnRoO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQW5vdGhlciBzaWxlbnQgZmFpbHVyZT9cbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRheU9mTW9udGggPSBNYXRoLm1pbihtb20uZGF0ZSgpLCBkYXlzSW5Nb250aChtb20ueWVhcigpLCB2YWx1ZSkpO1xuICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgJ01vbnRoJ10odmFsdWUsIGRheU9mTW9udGgpO1xuICAgICAgICByZXR1cm4gbW9tO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldE1vbnRoICh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGggKCkge1xuICAgICAgICByZXR1cm4gZGF5c0luTW9udGgodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkO1xuICAgIGZ1bmN0aW9uIG1vbnRoc1Nob3J0UmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA6IHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgI
33378H1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdE1vbnRoc1JlZ2V4ID0gbWF0Y2hXb3JkO1xuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4IChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBkZWZhdWx0TW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3QgP1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4IDogdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlTW9udGhzUGFyc2UgKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2Y
33378XIgc2hvcnRQaWVjZXMgPSBbXSwgbG9uZ1BpZWNlcyA9IFtdLCBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSwgbW9tO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2godGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXNbaV0gPSByZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShtaXhlZFBpZWNlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURhdGUgKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlICh5KSB7XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgRGF0ZS5VVEMgZnVuY3Rpb24gcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSB5ICsgNDAwO1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3MpKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0LW9mLWZpcnN0LXdlZWsgLSBzdGFydC1vZi15ZWFyXG4gICAgZnVuY3Rpb24gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciAvLyBmaXJzdC13ZWVrIGRheSAtLSB3aGljaCBqYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayAoNCBmb3IgaXNvLCAxIGZvciBvdGhlcilcbiAgICAgICAgICAgIGZ3ZCA9IDcgKyBkb3cgLSBkb3ksXG4gICAgICAgICAgICAvLyBmaXJzdC13ZWVrIGRheSBsb2NhbCB3ZWVrZGF5IC0tIHdoaWNoIGxvY2FsIHdlZWtkYXkgaXMgZndkXG4gICAgICAgICAgICBmd2RsdyA9ICg3ICsgY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCBmd2QpLmdldFVUQ0RheSgpIC0gZG93KSAlIDc7XG5cbiAgICAgICAgcmV0dXJuIC1md2RsdyArIGZ3ZCAtIDE7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZSNDYWxjdWxhdGluZ19hX2RhdGVfZ2l2ZW5fdGhlX3llYXIuMkNfd2Vla19udW1iZXJfYW5kX3dlZWtkYXlcbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla3MoeWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGxvY2FsV2Vla2RheSA9ICg3ICsgd2Vla2RheSAtIGRvdykgJSA3LFxuICAgICAgICAgICAgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXlPZlllYXIgPSAxICsgNyAqICh3ZWVrIC0gMSkgKyBsb2NhbFdlZWtkYXkgKyB3ZWVrT2Zmc2V0LFxuICAgICAgICAgICAgcmVzWWVhciwgcmVzRGF5T2ZZZWFyO1xuXG4gICAgICAgIGlmIChkYXlPZlllYXIgPD0gMCkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgLSAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5c0luWWVhcihyZXNZZWFyKSArIGRheU9mWWVhcjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlPZlllYXIgPiBkYXlzSW5ZZWFyK
33378HllYXIpKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciArIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXIgLSBkYXlzSW5ZZWFyKHllYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXI7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgICAgIGRheU9mWWVhcjogcmVzRGF5T2ZZZWFyXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLCByZXNZZWFyO1xuXG4gICAgICAgIGlmICh3ZWVrIDwgMSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgLSAxO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgKyB3ZWVrc0luWWVhcihyZXNZZWFyLCBkb3csIGRveSk7XG4gICAgICAgIH0gZWxzZSBpZiAod2VlayA+IHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KSkge1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgLSB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSk7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdlZWs6IHJlc1dlZWssXG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla3NJblllYXIoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2Vla09mZnNldE5leHQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciArIDEsIGRvdywgZG95KTtcbiAgICAgICAgcmV0dXJuIChkYXlzSW5ZZWFyKHllYXIpIC0gd2Vla09mZnNldCArIHdlZWtPZmZzZXROZXh0KSAvIDc7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3cnLCBbJ3d3JywgMl0sICd3bycsICd3ZWVrJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ1cnLCBbJ1dXJywgMl0sICdXbycsICdpc29XZWVrJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3dlZWsnLCAndycpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2VlaycsICdXJyk7XG5cbiAgICAvLyBQUklPUklUSUVTXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWsnLCA1KTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWsnLCA1KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCd3dycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdXJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignV1cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ3cnLCAnd3cnLCAnVycsICdXVyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2VlayAobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93IDogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveSA6IDYgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZldlZWsgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2VlayAoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB0aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2VlayAoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgI
33378HJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5JywgJ2QnKTtcbiAgICBhZGRVbml0QWxpYXMoJ3dlZWtkYXknLCAnZScpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2Vla2RheScsICdFJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF5JywgMTEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnd2Vla2RheScsIDExKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWtkYXknLCAxMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdkJywgICAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdlJywgICAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdFJywgICAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdkZCcsICAgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCAgIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGRkJywgICBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkZCcsICdkZGQnLCAnZGRkZCddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIHdlZWtkYXkgPSBjb25maWcuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgd2Vla2RheSBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWRcbiAgICAgICAgaWYgKHdlZWtkYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2Vlay5kID0gd2Vla2RheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRXZWVrZGF5ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZCcsICdlJywgJ0UnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0ID0gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VJc29XZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCkgJSA3IHx8IDc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTmFOKGlucHV0KSA/IG51bGwgOiBpbnB1dDtcbiAgICB9XG5cbiAgICAvLyBMT0NBTEVTXG4gICAgZnVuY3Rpb24gc2hpZnRXZWVrZGF5cyAod3MsIG4pIHtcbiAgICAgICAgcmV0dXJuIHdzLnNsaWNlKG4sIDcpLmNvbmNhdCh3cy5zbGljZSgwLCBuKSk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5cyA9ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5cyAobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpID8gdGhpcy5fd2Vla2RheXMgOlxuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNbKG0gJiYgbSAhPT0gdHJ1ZSAmJiB0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGZvcm1hdCkpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSddO1xuICAgICAgICByZXR1cm4gKG0gPT09IHRydWUpID8gc2hpZnRXZWVrZGF5cyh3ZWVrZGF5cywgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IChtKSA/IHdlZWtkYXlzW20uZGF5KCldIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0ID0gJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1Nob3J0IChtKSB7XG4gICAgICAgIHJldHVybiAobSA9PT0gdHJ1ZSkgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzU2hvcnQsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiAobSkgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluID0gJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzTWluIChtKSB7XG4gICAgICAgIHJldHVybiAobSA9PT0gdHJ1ZSkgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzTWluLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogKG0pID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV0gOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2Y
33378XIgaSwgaWksIG1vbSwgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1BhcnNlICh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlJDEuY2FsbCh0aGlzLCB3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcblxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLCAnaScpO1xuICAgICAgICAgICAgICAgI
33378HRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPSAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSArICd8XicgKyB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdkZGRkJyAmJiB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnZGRkJyAmJiB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGZvcm1hdCA9PT0gJ2RkJyAmJiB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fd2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZXZWVrIChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheSA9IHRoaXMuX2lzVVRDID8gdGhpcy5fZC5nZXRVVENEYXkoKSA6IHRoaXMuX2QuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHBhcnNlV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGlucHV0IC0gZGF5LCAnZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRheTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldExvY2FsZURheU9mV2VlayAoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gKHRoaXMuZGF5KCkgKyA3IC0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSAlIDc7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2Vla2RheSA6IHRoaXMuYWRkKGlucHV0IC0gd2Vla2RheSwgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09EYXlPZldlZWsgKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2Y
33378XIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQ7XG4gICAgZnVuY3Rpb24gd2Vla2RheXNSZWdleCAoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBkZWZhdWx0V2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0ID9cbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4IDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkO1xuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleCAoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0ID9cbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggOiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFdlZWtkYXlzTWluUmVnZXggPSBtYXRjaFdvcmQ7XG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleCAoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzTWluUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSBkZWZhdWx0V2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0ID9cbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4IDogdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZVdlZWtkYXlzUGFyc2UgKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2Y
33378XIgbWluUGllY2VzID0gW10sIHNob3J0UGllY2VzID0gW10sIGxvbmdQaWVjZXMgPSBbXSwgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksIG1vbSwgbWlucCwgc2hvcnRwLCBsb25ncDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBtaW5wID0gdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgIGxvbmdwID0gdGhpcy53ZWVrZGF5cyhtb20sICcnKTtcbiAgICAgICAgICAgIG1pblBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIHdlZWtkYXkgKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBtaW5QaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIHNob3J0UGllY2VzW2ldID0gcmVnZXhFc2NhcGUoc2hvcnRQaWVjZXNbaV0pO1xuICAgICAgICAgICAgbG9uZ1BpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKGxvbmdQaWVjZXNbaV0pO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShtaXhlZFBpZWNlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1pblBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgdGhpcy5ob3VycygpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyB0aGlzLmhvdXJzKCkgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW0gKHRva2VuLCBsb3dlcmNhc2UpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksIHRoaXMubWludXRlcygpLCBsb3dlcmNhc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBtZXJpZGllbSgnYScsIHRydWUpO1xuICAgIG1lcmlkaWVtKCdBJywgZmFsc2UpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdob3VyJywgJ2gnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdob3VyJywgMTMpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgZnVuY3Rpb24gbWF0Y2hNZXJpZGllbSAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCAgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignQScsICBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdIJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2snLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdISCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdo
33378aCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdraycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignaG1tc3MnLCBtYXRjaDV0bzYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tc3MnLCBtYXRjaDV0bzYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0gnLCAnSEgnXSwgSE9VUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2snLCAna2snXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBrSW5wdXQgPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGFycmF5W0hPVVJdID0ga0lucHV0ID09PSAyNCA/IDAgOiBrSW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2EnLCAnQSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9pc1BtID0gY29uZmlnLl9sb2NhbGUuaXNQTShpbnB1dCk7XG4gICAgICAgIGNvbmZpZy5fbWVyaWRpZW0gPSBpbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaCcsICdoaCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2Y
33378XIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNDtcbiAgICAgICAgdmFyIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2Y
33378XIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQ7XG4gICAgICAgIHZhciBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVJc1BNIChpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKChpbnB1dCArICcnKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSA9PT0gJ3AnKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UgPSAvW2FwXVxcLj9tP1xcLj8vaTtcbiAgICBmdW5jdGlvbiBsb2NhbGVNZXJpZGllbSAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3BtJyA6ICdQTSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdhbScgOiAnQU0nO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICAvLyBTZXR0aW5nIHRoZSBob3VyIHNob3VsZCBrZWVwIHRoZSB0aW1lLCBiZWNhdXNlIHRoZSB1c2VyIGV4cGxpY2l0bHlcbiAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgIC8vIGEgbmV3IHRpbWV6b25lKSBtYWtlcyBzZW5zZS4gQWRkaW5nL3N1YnRyYWN0aW5nIGhvdXJzIGRvZXMgbm90IGZvbGxvd1xuICAgIC8vIHRoaXMgcnVsZS5cbiAgICB2YXIgZ2V0U2V0SG91ciA9IG1ha2VHZXRTZXQoJ0hvdXJzJywgdHJ1ZSk7XG5cbiAgICB2YXIgYmFzZUNvbmZpZyA9IHtcbiAgICAgICAgY2FsZW5kYXI6IGRlZmF1bHRDYWxlbmRhcixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IGRlZmF1bHRMb25nRGF0ZUZvcm1hdCxcbiAgICAgICAgaW52YWxpZERhdGU6IGRlZmF1bHRJbnZhbGlkRGF0ZSxcbiAgICAgICAgb3JkaW5hbDogZGVmYXVsdE9yZGluYWwsXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlLFxuICAgICAgICByZWxhdGl2ZVRpbWU6IGRlZmF1bHRSZWxhdGl2ZVRpbWUsXG5cbiAgICAgICAgbW9udGhzOiBkZWZhdWx0TG9jYWxlTW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LFxuXG4gICAgICAgIHdlZWs6IGRlZmF1bHRMb2NhbGVXZWVrLFxuXG4gICAgICAgIHdlZWtkYXlzOiBkZWZhdWx0TG9jYWxlV2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LFxuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9O1xuICAgIHZhciBsb2NhbGVGYW1pbGllcyA9IHt9O1xuICAgIHZhciBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVMb2NhbGUoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgPyBrZXkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdfJywgJy0nKSA6IGtleTtcbiAgICB9XG5cbiAgICAvLyBwaWNrIHRoZSBsb2NhbGUgZnJvbSB0aGUgYXJyYXlcbiAgICAvLyB0cnkgWydlbi1hdScsICdlbi1nYiddIGFzICdlbi1hdScsICdlbi1nYicsICdlbicsIGFzIGluIG1vdmUgdGhyb3VnaCB0aGUgbGlzdCB0cnlpbmcgZWFjaFxuICAgIC8vIHN1YnN0cmluZyBmcm9tIG1vc3Qgc3BlY2lmaWMgdG8gbGVhc3QsIGJ1dCBtb3ZlIHRvIHRoZSBuZXh0IGFycmF5IGl0ZW0gaWYgaXQncyBhIG1vcmUgc3BlY2lmaWMgdmFyaWFudCB0aGFuIHRoZSBjdXJyZW50IHJvb3RcbiAgICBmdW5jdGlvbiBjaG9vc2VMb2NhbGUobmFtZXMpIHtcbiAgICAgICAgdmFyIGkgPSAwLCBqLCBuZXh0LCBsb2NhbGUsIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobmV4dCAmJiBuZXh0Lmxlbmd0aCA+PSBqICYmIGNvbXBhcmVBcnJheXMoc3BsaXQsIG5leHQsIHRydWUpID49IGogLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRMb2NhbGUobmFtZSkge1xuICAgICAgICB2Y
33378XIgb2xkTG9jYWxlID0gbnVsbDtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKCFsb2NhbGVzW25hbWVdICYmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykgJiZcbiAgICAgICAgICAgICAgICBtb2R1bGUgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIHZhciBhbGlhc2VkUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUoJy4vbG9jYWxlLycgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUob2xkTG9jYWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGxvYWQgbG9jYWxlIGFuZCB0aGVuIHNldCB0aGUgZ2xvYmFsIGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIGZ1bmN0aW9uIGdldFNldEdsb2JhbExvY2FsZSAoa2V5LCB2YWx1ZXMpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIGNvbnNvbGUgIT09ICAndW5kZWZpbmVkJykgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vd2FybiB1c2VyIGlmIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGJ1dCB0aGUgbG9jYWxlIGNvdWxkIG5vdCBiZSBzZXRcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdMb2NhbGUgJyArIGtleSArICAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmluZUxvY2FsZSAobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKCdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAndXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uJyk7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tuYW1lXS5fY29uZmlnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0uX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGNvbmZpZy5wYXJlbnRMb2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgI
33378H0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG5cbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXNlZnVsIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsIHRtcExvY2FsZSwgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIC8vIE1FUkdFXG4gICAgICAgICAgICB0bXBMb2NhbGUgPSBsb2FkTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gdG1wTG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgbG9jYWxlLnBhcmVudExvY2FsZSA9IGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlO1xuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHBhc3MgbnVsbCBmb3IgY29uZmlnIHRvIHVudXBkYXRlLCB1c2VmdWwgZm9yIHRlc3RzXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxvY2FsZSBkYXRhXG4gICAgZnVuY3Rpb24gZ2V0TG9jYWxlIChrZXkpIHtcbiAgICAgICAgdmFyIGxvY2FsZTtcblxuICAgICAgICBpZiAoa2V5ICYmIGtleS5fbG9jYWxlICYmIGtleS5fbG9jYWxlLl9hYmJyKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIC8vc2hvcnQtY2lyY3VpdCBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5ID0gW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hvb3NlTG9jYWxlKGtleSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdExvY2FsZXMoKSB7XG4gICAgICAgIHJldHVybiBrZXlzKGxvY2FsZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3cgKG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93O1xuICAgICAgICB2Y
33378XIgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdICAgICAgIDwgMCB8fCBhW01PTlRIXSAgICAgICA+IDExICA/IE1PTlRIIDpcbiAgICAgICAgICAgICAgICBhW0RBVEVdICAgICAgICA8IDEgfHwgYVtEQVRFXSAgICAgICAgPiBkYXlzSW5Nb250aChhW1lFQVJdLCBhW01PTlRIXSkgPyBEQVRFIDpcbiAgICAgICAgICAgICAgICBhW0hPVVJdICAgICAgICA8IDAgfHwgYVtIT1VSXSAgICAgICAgPiAyNCB8fCAoYVtIT1VSXSA9PT0gMjQgJiYgKGFbTUlOVVRFXSAhPT0gMCB8fCBhW1NFQ09ORF0gIT09IDAgfHwgYVtNSUxMSVNFQ09ORF0gIT09IDApKSA/IEhPVVIgOlxuICAgICAgICAgICAgICAgIGFbTUlOVVRFXSAgICAgIDwgMCB8fCBhW01JTlVURV0gICAgICA+IDU5ICA/IE1JTlVURSA6XG4gICAgICAgICAgICAgICAgYVtTRUNPTkRdICAgICAgPCAwIHx8IGFbU0VDT05EXSAgICAgID4gNTkgID8gU0VDT05EIDpcbiAgICAgICAgICAgICAgICBhW01JTExJU0VDT05EXSA8IDAgfHwgYVtNSUxMSVNFQ09ORF0gPiA5OTkgPyBNSUxMSVNFQ09ORCA6XG4gICAgICAgICAgICAgICAgLTE7XG5cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93RGF5T2ZZZWFyICYmIChvdmVyZmxvdyA8IFlFQVIgfHwgb3ZlcmZsb3cgPiBEQVRFKSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2Y
33378XIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLCBub3dWYWx1ZS5nZXRVVENNb250aCgpLCBub3dWYWx1ZS5nZXRVVENEYXRlKCldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbbm93VmFsdWUuZ2V0RnVsbFllYXIoKSwgbm93VmFsdWUuZ2V0TW9udGgoKSwgbm93VmFsdWUuZ2V0RGF0ZSgpXTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFuIGFycmF5IHRvIGEgZGF0ZS5cbiAgICAvLyB0aGUgYXJyYXkgc2hvdWxkIG1pcnJvciB0aGUgcGFyYW1ldGVycyBiZWxvd1xuICAgIC8vIG5vdGU6IGFsbCB2YWx1ZXMgcGFzdCB0aGUgeWVhciBhcmUgb3B0aW9uYWwgYW5kIHdpbGwgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHBvc3NpYmxlIHZhbHVlLlxuICAgIC8vIFt5ZWFyLCBtb250aCwgZGF5ICwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXVxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21BcnJheSAoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLCBkYXRlLCBpbnB1dCA9IFtdLCBjdXJyZW50RGF0ZSwgZXhwZWN0ZWRXZWVrZGF5LCB5ZWFyVG9Vc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZyk7XG5cbiAgICAgICAgLy9jb21wdXRlIGRheSBvZiB0aGUgeWVhciBmcm9tIHdlZWtzIGFuZCB3ZWVrZGF5c1xuICAgICAgICBpZiAoY29uZmlnLl93ICYmIGNvbmZpZy5fYVtEQVRFXSA9PSBudWxsICYmIGNvbmZpZy5fYVtNT05USF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHRoZSBkYXkgb2YgdGhlIHllYXIgaXMgc2V0LCBmaWd1cmUgb3V0IHdoYXQgaXQgaXNcbiAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHllYXJUb1VzZSA9IGRlZmF1bHRzKGNvbmZpZy5fYVtZRUFSXSwgY3VycmVudERhdGVbWUVBUl0pO1xuXG4gICAgICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXJUb1VzZSkgfHwgY29uZmlnLl9kYXlPZlllYXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IChjb25maWcuX2FbaV0gPT0gbnVsbCkgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKGNvbmZpZy5fYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbTUlOVVRFXSA9PT0gMCAmJlxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW01JTExJU0VDT05EXSA9PT0gMCkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkobnVsbCwgaW5wdXQpO1xuICAgICAgICBleHBlY3RlZFdlZWtkYXkgPSBjb25maWcuX3VzZVVUQyA/IGNvbmZpZy5fZC5nZXRVVENEYXkoKSA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKGNvbmZpZy5fdyAmJiB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmIGNvbmZpZy5fdy5kICE9PSBleHBlY3RlZFdlZWtkYXkpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYX
33378RjaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKSB7XG4gICAgICAgIHZhciB3LCB3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3ksIHRlbXAsIHdlZWtkYXlPdmVyZmxvdztcblxuICAgICAgICB3ID0gY29uZmlnLl93O1xuICAgICAgICBpZiAody5HRyAhPSBudWxsIHx8IHcuVyAhPSBudWxsIHx8IHcuRSAhPSBudWxsKSB7XG4gICAgICAgICAgICBkb3cgPSAxO1xuICAgICAgICAgICAgZG95ID0gNDtcblxuICAgICAgICAgICAgLy8gVE9ETzogV2UgbmVlZCB0byB0YWtlIHRoZSBjdXJyZW50IGlzb1dlZWtZZWFyLCBidXQgdGhhdCBkZXBlbmRzIG9uXG4gICAgICAgICAgICAvLyBob3cgd2UgaW50ZXJwcmV0IG5vdyAobG9jYWwsIHV0YywgZml4ZWQgb2Zmc2V0KS4gU28gY3JlYXRlXG4gICAgICAgICAgICAvLyBhIG5vdyB2ZXJzaW9uIG9mIGN1cnJlbnQgY29uZmlnICh0YWtlIGxvY2FsL3V0Yy9vZmZzZXQgZmxhZ3MsIGFuZFxuICAgICAgICAgICAgLy8gY3JlYXRlIG5vdykuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKHcuR0csIGNvbmZpZy5fYVtZRUFSXSwgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyKTtcbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LlcsIDEpO1xuICAgICAgICAgICAgd2Vla2RheSA9IGRlZmF1bHRzKHcuRSwgMSk7XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IDEgfHwgd2Vla2RheSA+IDcpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG93ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG93O1xuICAgICAgICAgICAgZG95ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG95O1xuXG4gICAgICAgICAgICB2Y
33378XIgY3VyV2VlayA9IHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgZG93LCBkb3kpO1xuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKHcuZ2csIGNvbmZpZy5fYVtZRUFSXSwgY3VyV2Vlay55ZWFyKTtcblxuICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IHdlZWsuXG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody53LCBjdXJXZWVrLndlZWspO1xuXG4gICAgICAgICAgICBpZiAody5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZWVrZGF5IC0tIGxvdyBkYXkgbnVtYmVycyBhcmUgY29uc2lkZXJlZCBuZXh0IHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5kO1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMCB8fCB3ZWVrZGF5ID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAody5lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBsb2NhbCB3ZWVrZGF5IC0tIGNvdW50aW5nIHN0YXJ0cyBmcm9tIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZSArIGRvdztcbiAgICAgICAgICAgICAgICBpZiAody5lIDwgMCB8fCB3LmUgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRvIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IGRvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2VlayA8IDEgfHwgd2VlayA+IHdlZWtzSW5ZZWFyKHdlZWtZZWFyLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrZGF5T3ZlcmZsb3cgIT0gbnVsbCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla2RheSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSB0ZW1wLnllYXI7XG4gICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRlbXAuZGF5T2ZZZWFyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaXNvIDg2MDEgcmVnZXhcbiAgICAvLyAwMDAwLTAwLTAwIDAwMDAtVzAwIG9yIDAwMDAtVzAwLTAgKyBUICsgMDAgb3IgMDA6MDAgb3IgMDA6MDA6MDAgb3IgMDA6MDA6MDAuMDAwICsgKzAwOjAwIG9yICswMDAwIG9yICswMClcbiAgICB2YXIgZXh0ZW5kZWRJc29SZWdleCA9IC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFtcXCtcXC1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLztcbiAgICB2YXIgYmFzaWNJc29SZWdleCA9IC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OlxcZFxcZCg/OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbXFwrXFwtXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC87XG5cbiAgICB2YXIgdHpSZWdleCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/LztcblxuICAgIHZhciBpc29EYXRlcyA9IFtcbiAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgIFsnWVlZWS1NTS1ERCcsIC9cXGR7NH0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cXGR7NH0tV1xcZFxcZC1cXGQvXSxcbiAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICBbJ1lZWVktREREJywgL1xcZHs0fS1cXGR7M30vXSxcbiAgICAgICAgWydZWVlZLU1NJywgL1xcZHs0fS1cXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICBbJ1lZWVlNTUREJywgL1xcZHs4fS9dLFxuICAgICAgICAvLyBZWVlZTU0gaXMgTk9UIGFsbG93ZWQgYnkgdGhlIHN0YW5kYXJkXG4gICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgIFsnR0dHR1tXXVdXJywgL1xcZHs0fVdcXGR7Mn0vLCBmYWxzZV0sXG4gICAgICAgIFsnWVlZWURERCcsIC9cXGR7N30vXVxuICAgIF07XG5cbiAgICAvLyBpc28gdGltZSBmb3JtYXRzIGFuZCByZWdleGVzXG4gICAgdmFyIGlzb1RpbWVzID0gW1xuICAgICAgICBbJ0hIOm1tOnNzLlNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgIFsnSEg6bW06c3MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgWydISDptbScsIC9cXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICBbJ0hIbW1zcyxTU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZCxcXGQrL10sXG4gICAgICAgIFsnSEhtbXNzJywgL1xcZFxcZFxcZFxcZFxcZFxcZC9dLFxuICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgIFsnSEgnLCAvXFxkXFxkL11cbiAgICBdO1xuXG4gICAgdmFyIGFzcE5ldEpzb25SZWdleCA9IC9eXFwvP0RhdGVcXCgoXFwtP1xcZCspL2k7XG5cbiAgICAvLyBkYXRlIGZyb20gaXNvIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JU08oY29uZmlnKSB7XG4gICAgICAgIHZhciBpLCBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSwgZGF0ZUZvcm1hdCwgdGltZUZvcm1hdCwgdHpGb3JtYXQ7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pc28gPSB0cnVlO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvRGF0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzb0RhdGVzW2ldWzFdLmV4ZWMobWF0Y2hbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQgPSBpc29EYXRlc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dUaW1lID0gaXNvRGF0ZXNbaV1bMl0gIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb1RpbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgI
33378HRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJGQyAyODIyIHJlZ2V4OiBGb3IgZGV0YWlscyBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4MjIjc2VjdGlvbi0zLjNcbiAgICB2YXIgcmZjMjgyMiA9IC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC87XG5cbiAgICBmdW5jdGlvbiBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMClcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoc2Vjb25kU3RyKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZUludChzZWNvbmRTdHIsIDEwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpIHtcbiAgICAgICAgdmFyIHllYXIgPSBwYXJzZUludCh5ZWFyU3RyLCAxMCk7XG4gICAgICAgIGlmICh5ZWFyIDw9IDQ5KSB7XG4gICAgICAgICAgICByZXR1cm4gMjAwMCArIHllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoeWVhciA8PSA5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiAxOTAwICsgeWVhcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7XG4gICAgICAgIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1xcKFteKV0qXFwpfFtcXG5cXHRdL2csICcgJykucmVwbGFjZSgvKFxcc1xccyspL2csICcgJykucmVwbGFjZSgvXlxcc1xccyovLCAnJykucmVwbGFjZSgvXFxzXFxzKiQvLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tXZWVrZGF5KHdlZWtkYXlTdHIsIHBhcnNlZElucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFJlcGxhY2UgdGhlIHZhbmlsbGEgSlMgRGF0ZSBvYmplY3Qgd2l0aCBhbiBpbmRlcGVudGVudCBkYXktb2Ytd2VlayBjaGVjay5cbiAgICAgICAgICAgIHZhciB3ZWVrZGF5UHJvdmlkZWQgPSBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydC5pbmRleE9mKHdlZWtkYXlTdHIpLFxuICAgICAgICAgICAgICAgIHdlZWtkYXlBY3R1YWwgPSBuZXcgRGF0ZShwYXJzZWRJbnB1dFswXSwgcGFyc2VkSW5wdXRbMV0sIHBhcnNlZElucHV0WzJdKS5nZXREYXkoKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5UHJvdmlkZWQgIT09I
33378HdlZWtkYXlBY3R1YWwpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgb2JzT2Zmc2V0cyA9IHtcbiAgICAgICAgVVQ6IDAsXG4gICAgICAgIEdNVDogMCxcbiAgICAgICAgRURUOiAtNCAqIDYwLFxuICAgICAgICBFU1Q6IC01ICogNjAsXG4gICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgQ1NUOiAtNiAqIDYwLFxuICAgICAgICBNRFQ6IC02ICogNjAsXG4gICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgUERUOiAtNyAqIDYwLFxuICAgICAgICBQU1Q6IC04ICogNjBcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlT2Zmc2V0KG9ic09mZnNldCwgbWlsaXRhcnlPZmZzZXQsIG51bU9mZnNldCkge1xuICAgICAgICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbGl0YXJ5T2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyB0aGUgb25seSBhbGxvd2VkIG1pbGl0YXJ5IHR6IGlzIFpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGhtID0gcGFyc2VJbnQobnVtT2Zmc2V0LCAxMCk7XG4gICAgICAgICAgICB2Y
33378XIgbSA9IGhtICUgMTAwLCBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHZhciBwYXJzZWRBcnJheSA9IGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MobWF0Y2hbNF0sIG1hdGNoWzNdLCBtYXRjaFsyXSwgbWF0Y2hbNV0sIG1hdGNoWzZdLCBtYXRjaFs3XSk7XG4gICAgICAgICAgICBpZiAoIWNoZWNrV2Vla2RheShtYXRjaFsxXSwgcGFyc2VkQXJyYXksIGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IHBhcnNlZEFycmF5O1xuICAgICAgICAgICAgY29uZmlnLl90em0gPSBjYWxjdWxhdGVPZmZzZXQobWF0Y2hbOF0sIG1hdGNoWzldLCBtYXRjaFsxMF0pO1xuXG4gICAgICAgICAgICBjb25maWcuX2QgPSBjcmVhdGVVVENEYXRlLmFwcGx5KG51bGwsIGNvbmZpZy5fYSk7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5yZmMyODIyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXQgb3IgZmFsbGJhY2tcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nKGNvbmZpZykge1xuICAgICAgICB2Y
33378XIgbWF0Y2hlZCA9IGFzcE5ldEpzb25SZWdleC5leGVjKGNvbmZpZy5faSk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAnd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSAnICtcbiAgICAgICAgJ2Rpc2NvdXJhZ2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYW4gdXBjb21pbmcgbWFqb3IgcmVsZWFzZS4gUGxlYXNlIHJlZmVyIHRvICcgK1xuICAgICAgICAnaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLicsXG4gICAgICAgIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5faSArIChjb25maWcuX3VzZVVUQyA/ICcgVVRDJyA6ICcnKSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIElTTyBzdGFuZGFyZFxuICAgIGhvb2tzLklTT184NjAxID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgUkZDIDI4MjIgZm9ybVxuICAgIGhvb2tzLlJGQ18yODIyID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBmb3JtYXQgc3RyaW5nXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgY3JlYXRpb24gZmxvdyB0byBwcmV2ZW50IGNpcmN1bGFyIGRlcHNcbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuSVNPXzg2MDEpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5SRkNfMjgyMikge1xuICAgICAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maWcuX2EgPSBbXTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIFRoaXMgYXJyYXkgaXMgdXNlZCB0byBtYWtlIGEgRGF0ZSwgZWl0aGVyIHdpdGggYG5ldyBEYXRlYCBvciBgRGF0ZS5VVENgXG4gICAgICAgIHZhciBzdHJpbmcgPSAnJyArIGNvbmZpZy5faSxcbiAgICAgICAgICAgIGksIHBhcnNlZElucHV0LCB0b2tlbnMsIHRva2VuLCBza2lwcGVkLFxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggPSAwO1xuXG4gICAgICAgIHRva2VucyA9IGV4cGFuZEZvcm1hdChjb25maWcuX2YsIGNvbmZpZy5fbG9jYWxlKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSB8fCBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8IFtdKVswXTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd0b2tlbicsIHRva2VuLCAncGFyc2VkSW5wdXQnLCBwYXJzZWRJbnB1dCxcbiAgICAgICAgICAgIC8vICAgICAgICAgJ3JlZ2V4JywgZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNraXBwZWQgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSk7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHNraXBwZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2Uoc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIHBhcnNlZElucHV0LCBjb25maWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID0gc3RyaW5nTGVuZ3RoIC0gdG90YWxQYXJzZWRJbnB1dExlbmd0aDtcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHN0cmluZyk7XG4gICAgICAgI
33378H1cblxuICAgICAgICAvLyBjbGVhciBfMTJoIGZsYWcgaWYgaG91ciBpcyA8PSAxMlxuICAgICAgICBpZiAoY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucGFyc2VkRGF0ZVBhcnRzID0gY29uZmlnLl9hLnNsaWNlKDApO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5tZXJpZGllbSA9IGNvbmZpZy5fbWVyaWRpZW07XG4gICAgICAgIC8vIGhhbmRsZSBtZXJpZGllbVxuICAgICAgICBjb25maWcuX2FbSE9VUl0gPSBtZXJpZGllbUZpeFdyYXAoY29uZmlnLl9sb2NhbGUsIGNvbmZpZy5fYVtIT1VSXSwgY29uZmlnLl9tZXJpZGllbSk7XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIGNoZWNrT3ZlcmZsb3coY29uZmlnKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcCAobG9jYWxlLCBob3VyLCBtZXJpZGllbSkge1xuICAgICAgICB2YXIgaXNQbTtcblxuICAgICAgICBpZiAobWVyaWRpZW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsZS5tZXJpZGllbUhvdXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5tZXJpZGllbUhvdXIoaG91ciwgbWVyaWRpZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZS5pc1BNICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgICAgICBpc1BtID0gbG9jYWxlLmlzUE0obWVyaWRpZW0pO1xuICAgICAgICAgICAgaWYgKGlzUG0gJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQbSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW5cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgYXJyYXkgb2YgZm9ybWF0IHN0cmluZ3NcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciB0ZW1wQ29uZmlnLFxuICAgICAgICAgICAgYmVzdE1vbWVudCxcblxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2YubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlnLl9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgPSAwO1xuICAgICAgICAgICAgdGVtcENvbmZpZyA9IGNvcHlDb25maWcoe30sIGNvbmZpZyk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRlbXBDb25maWcuX3VzZVVUQyA9IGNvbmZpZy5fdXNlVVRDO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENvbmZpZy5fZiA9IGNvbmZpZy5fZltpXTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQodGVtcENvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmICghaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKHNjb3JlVG9CZWF0ID09IG51bGwgfHwgY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQpIHtcbiAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dGVuZChjb25maWcsIGJlc3RNb21lbnQgfHwgdGVtcENvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbU9iamVjdChjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSBub3JtYWxpemVPYmplY3RVbml0cyhjb25maWcuX2kpO1xuICAgICAgICBjb25maWcuX2EgPSBtYXAoW2kueWVhciwgaS5tb250aCwgaS5kYXkgfHwgaS5kYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZyb21Db25maWcgKGNvbmZpZykge1xuICAgICAgICB2Y
33378XIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyAoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGNvbmZpZy5fZjtcblxuICAgICAgICBjb25maWcuX2xvY2FsZSA9IGNvbmZpZy5fbG9jYWxlIHx8IGdldExvY2FsZShjb25maWcuX2wpO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCAoZm9ybWF0ID09PSB1bmRlZmluZWQgJiYgaW5wdXQgPT09ICcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoe251bGxJbnB1dDogdHJ1ZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faSA9IGlucHV0ID0gY29uZmlnLl9sb2NhbGUucHJlcGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTW9tZW50KGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhpbnB1dCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGlucHV0O1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZm9ybWF0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gIGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2Y
33378XIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyAoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGlzVVRDKSB7XG4gICAgICAgIHZhciBjID0ge307XG5cbiAgICAgICAgaWYgKGxvY2FsZSA9PT0gdHJ1ZSB8fCBsb2NhbGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBsb2NhbGU7XG4gICAgICAgICAgICBsb2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgICAgICAoaXNBcnJheShpbnB1dCkgJiYgaW5wdXQubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsIChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHZhciBwcm90b3R5cGVNaW4gPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyIDwgdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB2YXIgcHJvdG90eXBlTWF4ID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2Y
33378XIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUGljayBhIG1vbWVudCBtIGZyb20gbW9tZW50cyBzbyB0aGF0IG1bZm5dKG90aGVyKSBpcyB0cnVlIGZvciBhbGxcbiAgICAvLyBvdGhlci4gVGhpcyByZWxpZXMgb24gdGhlIGZ1bmN0aW9uIGZuIHRvIGJlIHRyYW5zaXRpdmUuXG4gICAgLy9cbiAgICAvLyBtb21lbnRzIHNob3VsZCBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMgb3IgYW4gYXJyYXksIHdob3NlXG4gICAgLy8gZmlyc3QgZWxlbWVudCBpcyBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cy5cbiAgICBmdW5jdGlvbiBwaWNrQnkoZm4sIG1vbWVudHMpIHtcbiAgICAgICAgdmFyIHJlcywgaTtcbiAgICAgICAgaWYgKG1vbWVudHMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkobW9tZW50c1swXSkpIHtcbiAgICAgICAgICAgIG1vbWVudHMgPSBtb21lbnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IG1vbWVudHNbMF07XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBtb21lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoIW1vbWVudHNbaV0uaXNWYWxpZCgpIHx8IG1vbWVudHNbaV1bZm5dKHJlcykpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBtb21lbnRzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIFtdLnNvcnQgaW5zdGVhZD9cbiAgICBmdW5jdGlvbiBtaW4gKCkge1xuICAgICAgICB2Y
33378XIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0JlZm9yZScsIGFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1heCAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogKyhuZXcgRGF0ZSgpKTtcbiAgICB9O1xuXG4gICAgdmFyIG9yZGVyaW5nID0gWyd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJywgJ21pbGxpc2Vjb25kJ107XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKCEoaW5kZXhPZi5jYWxsKG9yZGVyaW5nLCBrZXkpICE9PSAtMSAmJiAobVtrZXldID09IG51bGwgfHwgIWlzTmFOKG1ba2V5XSkpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB1bml0SGFzRGVjaW1hbCA9IGZhbHNlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyaW5nLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uIChkdXJhdGlvbikge1xuICAgICAgICB2Y
33378XIgbm9ybWFsaXplZElucHV0ID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoZHVyYXRpb24pLFxuICAgICAgICAgICAgeWVhcnMgPSBub3JtYWxpemVkSW5wdXQueWVhciB8fCAwLFxuICAgICAgICAgICAgcXVhcnRlcnMgPSBub3JtYWxpemVkSW5wdXQucXVhcnRlciB8fCAwLFxuICAgICAgICAgICAgbW9udGhzID0gbm9ybWFsaXplZElucHV0Lm1vbnRoIHx8IDAsXG4gICAgICAgICAgICB3ZWVrcyA9IG5vcm1hbGl6ZWRJbnB1dC53ZWVrIHx8IG5vcm1hbGl6ZWRJbnB1dC5pc29XZWVrIHx8IDAsXG4gICAgICAgICAgICBkYXlzID0gbm9ybWFsaXplZElucHV0LmRheSB8fCAwLFxuICAgICAgICAgICAgaG91cnMgPSBub3JtYWxpemVkSW5wdXQuaG91ciB8fCAwLFxuICAgICAgICAgICAgbWludXRlcyA9IG5vcm1hbGl6ZWRJbnB1dC5taW51dGUgfHwgMCxcbiAgICAgICAgICAgIHNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQuc2Vjb25kIHx8IDAsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQubWlsbGlzZWNvbmQgfHwgMDtcblxuICAgICAgICB0aGlzLl9pc1ZhbGlkID0gaXNEdXJhdGlvblZhbGlkKG5vcm1hbGl6ZWRJbnB1dCk7XG5cbiAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIGRhdGVBZGRSZW1vdmVcbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArXG4gICAgICAgICAgICB3ZWVrcyAqIDc7XG4gICAgICAgIC8vIEl0IGlzIGltcG9zc2libGUgdG8gdHJhbnNsYXRlIG1vbnRocyBpbnRvIGRheXMgd2l0aG91dCBrbm93aW5nXG4gICAgICAgIC8vIHdoaWNoIG1vbnRocyB5b3UgYXJlIGFyZSB0YWxraW5nIGFib3V0LCBzbyB3ZSBoYXZlIHRvIHN0b3JlXG4gICAgICAgIC8vIGl0IHNlcGFyYXRlbHkuXG4gICAgICAgIHRoaXMuX21vbnRocyA9ICttb250aHMgK1xuICAgICAgICAgICAgcXVhcnRlcnMgKiAzICtcbiAgICAgICAgICAgIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzUm91bmQgKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoLTEgKiBudW1iZXIpICogLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0ICh0b2tlbiwgc2VwYXJhdG9yKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2Y
33378XIgb2Zmc2V0ID0gdGhpcy51dGNPZmZzZXQoKTtcbiAgICAgICAgICAgIHZhciBzaWduID0gJysnO1xuICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHNpZ24gPSAnLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2lnbiArIHplcm9GaWxsKH5+KG9mZnNldCAvIDYwKSwgMikgKyBzZXBhcmF0b3IgKyB6ZXJvRmlsbCh+fihvZmZzZXQpICUgNjAsIDIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1paJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ1onLCAnWlonXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fdXNlVVRDID0gdHJ1ZTtcbiAgICAgICAgY29uZmlnLl90em0gPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIHRpbWV6b25lIGNodW5rZXJcbiAgICAvLyAnKzEwOjAwJyA+IFsnMTAnLCAgJzAwJ11cbiAgICAvLyAnLTE1MzAnICA+IFsnLTE1JywgJzMwJ11cbiAgICB2YXIgY2h1bmtPZmZzZXQgPSAvKFtcXCtcXC1dfFxcZFxcZCkvZ2k7XG5cbiAgICBmdW5jdGlvbiBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoZXIsIHN0cmluZykge1xuICAgICAgICB2Y
33378XIgbWF0Y2hlcyA9IChzdHJpbmcgfHwgJycpLm1hdGNoKG1hdGNoZXIpO1xuXG4gICAgICAgIGlmIChtYXRjaGVzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaHVuayAgID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdIHx8IFtdO1xuICAgICAgICB2YXIgcGFydHMgICA9IChjaHVuayArICcnKS5tYXRjaChjaHVua09mZnNldCkgfHwgWyctJywgMCwgMF07XG4gICAgICAgIHZhciBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/XG4gICAgICAgICAgMCA6XG4gICAgICAgICAgcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBtb21lbnQgZnJvbSBpbnB1dCwgdGhhdCBpcyBsb2NhbC91dGMvem9uZSBlcXVpdmFsZW50IHRvIG1vZGVsLlxuICAgIGZ1bmN0aW9uIGNsb25lV2l0aE9mZnNldChpbnB1dCwgbW9kZWwpIHtcbiAgICAgICAgdmFyIHJlcywgZGlmZjtcbiAgICAgICAgaWYgKG1vZGVsLl9pc1VUQykge1xuICAgICAgICAgICAgcmVzID0gbW9kZWwuY2xvbmUoKTtcbiAgICAgICAgICAgIGRpZmYgPSAoaXNNb21lbnQoaW5wdXQpIHx8IGlzRGF0ZShpbnB1dCkgPyBpbnB1dC52YWx1ZU9mKCkgOiBjcmVhdGVMb2NhbChpbnB1dCkudmFsdWVPZigpKSAtIHJlcy52YWx1ZU9mKCk7XG4gICAgICAgICAgICAvLyBVc2UgbG93LWxldmVsIGFwaSwgYmVjYXVzZSB0aGlzIGZuIGlzIGxvdy1sZXZlbCBhcGkuXG4gICAgICAgICAgICByZXMuX2Quc2V0VGltZShyZXMuX2QudmFsdWVPZigpICsgZGlmZik7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQocmVzLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0KS5sb2NhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF0ZU9mZnNldCAobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDE1KSAqIDE1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbW9tZW50IGlzIG11dGF0ZWQuXG4gICAgLy8gSXQgaXMgaW50ZW5kZWQgdG8ga2VlcCB0aGUgb2Zmc2V0IGluIHN5bmMgd2l0aCB0aGUgdGltZXpvbmUuXG4gICAgaG9va3MudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICAvLyBrZWVwTG9jYWxUaW1lID0gdHJ1ZSBtZWFucyBvbmx5IGNoYW5nZSB0aGUgdGltZXpvbmUsIHdpdGhvdXRcbiAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bdXRjT2Zmc2V0KDIsIHRydWUpXS0tPlxuICAgIC8vIDU6MzE6MjYgKzAyMDAgSXQgaXMgcG9zc2libGUgdGhhdCA1OjMxOjI2IGRvZXNuJ3QgZXhpc3Qgd2l0aCBvZmZzZXRcbiAgICAvLyArMDIwMCwgc28gd2UgYWRqdXN0IHRoZSB0aW1lIGFzIG5lZWRlZCwgdG8gYmUgdmFsaWQuXG4gICAgLy9cbiAgICAvLyBLZWVwaW5nIHRoZSB0aW1lIGFjdHVhbGx5IGFkZHMvc3VidHJhY3RzIChvbmUgaG91cilcbiAgICAvLyBmcm9tIHRoZSBhY3R1YWwgcmVwcmVzZW50ZWQgdGltZS4gVGhhdCBpcyB3aHkgd2UgY2FsbCB1cGRhdGVPZmZzZXRcbiAgICAvLyBhIHNlY29uZCB0aW1lLiBJbiBjYXNlIGl0IHdhbnRzIHVzIHRvIGNoYW5nZSB0aGUgb2Zmc2V0IGFnYWluXG4gICAgLy8gX2NoYW5nZUluUHJvZ3Jlc3MgPT0gdHJ1ZSBjYXNlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0LCBiZWNhdXNlXG4gICAgLy8gdGhlcmUgaXMgbm8gc3VjaCB0aW1lIGluIHRoZSBnaXZlbiB0aW1lem9uZS5cbiAgICBmdW5jdGlvbiBnZXRTZXRPZmZzZXQgKGlucHV0LCBrZWVwTG9jYWxUaW1lLCBrZWVwTWludXRlcykge1xuICAgICAgICB2Y
33378XIgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0IHx8IDAsXG4gICAgICAgICAgICBsb2NhbEFkanVzdDtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoaW5wdXQpIDwgMTYgJiYgIWtlZXBNaW51dGVzKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dCAqIDYwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1VUQyAmJiBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxBZGp1c3QgPSBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gaW5wdXQ7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IHRydWU7XG4gICAgICAgICAgICBpZiAobG9jYWxBZGp1c3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGxvY2FsQWRqdXN0LCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtlZXBMb2NhbFRpbWUgfHwgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBjcmVhdGVEdXJhdGlvbihpbnB1dCAtIG9mZnNldCwgJ20nKSwgMSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyBvZmZzZXQgOiBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0Wm9uZSAoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9Mb2NhbCAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAodGhpcy5faXNVVEMpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnRyYWN0KGdldERhdGVPZmZzZXQodGhpcyksICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQgKCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc0FsaWduZWRIb3VyT2Zmc2V0IChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQgPSBpbnB1dCA/IGNyZWF0ZUxvY2FsKGlucHV0KS51dGNPZmZzZXQoKSA6IDA7XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLnV0Y09mZnNldCgpIC0gaW5wdXQpICUgNjAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWUgKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCAoKSB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5faXNEU1RTaGlmdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgI
33378HZhciBjID0ge307XG5cbiAgICAgICAgY29weUNvbmZpZyhjLCB0aGlzKTtcbiAgICAgICAgYyA9IHByZXBhcmVDb25maWcoYyk7XG5cbiAgICAgICAgaWYgKGMuX2EpIHtcbiAgICAgICAgICAgIHZhciBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgICAgIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/ICF0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjT2Zmc2V0ICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0YyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKFxcLXxcXCspPyg/OihcXGQqKVsuIF0pPyhcXGQrKVxcOihcXGQrKSg/OlxcOihcXGQrKShcXC5cXGQqKT8pPyQvO1xuXG4gICAgLy8gZnJvbSBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vZ2l0L2Nsb3N1cmVfZ29vZ19kYXRlX2RhdGUuanMuc291cmNlLmh0bWxcbiAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgLy8gYW5kIGZ1cnRoZXIgbW9kaWZpZWQgdG8gYWxsb3cgZm9yIHN0cmluZ3MgY29udGFpbmluZyBib3RoIHdlZWsgYW5kIGRheVxuICAgIHZhciBpc29SZWdleCA9IC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEdXJhdGlvbiAoaW5wdXQsIGtleSkge1xuICAgICAgICB2Y
33378XIgZHVyYXRpb24gPSBpbnB1dCxcbiAgICAgICAgICAgIC8vIG1hdGNoaW5nIGFnYWluc3QgcmVnZXhwIGlzIGV4cGVuc2l2ZSwgZG8gaXQgb24gZGVtYW5kXG4gICAgICAgICAgICBtYXRjaCA9IG51bGwsXG4gICAgICAgICAgICBzaWduLFxuICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAgZGlmZlJlcztcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIG1zIDogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkICA6IGlucHV0Ll9kYXlzLFxuICAgICAgICAgICAgICAgIE0gIDogaW5wdXQuX21vbnRoc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9IGlucHV0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5taWxsaXNlY29uZHMgPSBpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghIShtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IChtYXRjaFsxXSA9PT0gJy0nKSA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHkgIDogMCxcbiAgICAgICAgICAgICAgICBkICA6IHRvSW50KG1hdGNoW0RBVEVdKSAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaCAgOiB0b0ludChtYXRjaFtIT1VSXSkgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaWduLFxuICAgICAgICAgICAgICAgIG0gIDogdG9JbnQobWF0Y2hbTUlOVVRFXSkgICAgICAgICAgICAgICAgICAgICAgICogc2lnbixcbiAgICAgICAgICAgICAgICBzICA6IHRvSW50KG1hdGNoW1NFQ09ORF0pICAgICAgICAgICAgICAgICAgICAgICAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbXMgOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduIC8vIHRoZSBtaWxsaXNlY29uZCBkZWNpbWFsIHBvaW50IGlzIGluY2x1ZGVkIGluIHRoZSBtYXRjaFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICghIShtYXRjaCA9IGlzb1JlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IChtYXRjaFsxXSA9PT0gJy0nKSA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHkgOiBwYXJzZUlzbyhtYXRjaFsyXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgTSA6IHBhcnNlSXNvKG1hdGNoWzNdLCBzaWduKSxcbiAgICAgICAgICAgICAgICB3IDogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQgOiBwYXJzZUlzbyhtYXRjaFs1XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgaCA6IHBhcnNlSXNvKG1hdGNoWzZdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBtIDogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHMgOiBwYXJzZUlzbyhtYXRjaFs4XSwgc2lnbilcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkgey8vIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGR1cmF0aW9uID09PSAnb2JqZWN0JyAmJiAoJ2Zyb20nIGluIGR1cmF0aW9uIHx8ICd0bycgaW4gZHVyYXRpb24pKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLnRvKSk7XG5cbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBkdXJhdGlvbi5tcyA9IGRpZmZSZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgZHVyYXRpb24uTSA9IGRpZmZSZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0ID0gbmV3IER1cmF0aW9uKGR1cmF0aW9uKTtcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19sb2NhbGUnKSkge1xuICAgICAgICAgICAgcmV0Ll9sb2NhbGUgPSBpbnB1dC5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBjcmVhdGVEdXJhdGlvbi5mbiA9IER1cmF0aW9uLnByb3RvdHlwZTtcbiAgICBjcmVhdGVEdXJhdGlvbi5pbnZhbGlkID0gY3JlYXRlSW52YWxpZCQxO1xuXG4gICAgZnVuY3Rpb24gcGFyc2VJc28gKGlucCwgc2lnbikge1xuICAgICAgICAvLyBXZSdkIG5vcm1hbGx5IHVzZSB+fmlucCBmb3IgdGhpcywgYnV0IHVuZm9ydHVuYXRlbHkgaXQgYWxzb1xuICAgICAgICAvLyBjb252ZXJ0cyBmbG9hdHMgdG8gaW50cy5cbiAgICAgICAgLy8gaW5wIG1heSBiZSB1bmRlZmluZWQsIHNvIGNhcmVmdWwgY2FsbGluZyByZXBsYWNlIG9uIGl0LlxuICAgICAgICB2Y
33378XIgcmVzID0gaW5wICYmIHBhcnNlRmxvYXQoaW5wLnJlcGxhY2UoJywnLCAnLicpKTtcbiAgICAgICAgLy8gYXBwbHkgc2lnbiB3aGlsZSB3ZSdyZSBhdCBpdFxuICAgICAgICByZXR1cm4gKGlzTmFOKHJlcykgPyAwIDogcmVzKSAqIHNpZ247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzID0ge307XG5cbiAgICAgICAgcmVzLm1vbnRocyA9IG90aGVyLm1vbnRoKCkgLSBiYXNlLm1vbnRoKCkgK1xuICAgICAgICAgICAgKG90aGVyLnllYXIoKSAtIGJhc2UueWVhcigpKSAqIDEyO1xuICAgICAgICBpZiAoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpLmlzQWZ0ZXIob3RoZXIpKSB7XG4gICAgICAgICAgICAtLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gK290aGVyIC0gKyhiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgaWYgKCEoYmFzZS5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHttaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMH07XG4gICAgICAgIH1cblxuICAgICAgICBvdGhlciA9IGNsb25lV2l0aE9mZnNldChvdGhlciwgYmFzZSk7XG4gICAgICAgIGlmIChiYXNlLmlzQmVmb3JlKG90aGVyKSkge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKG90aGVyLCBiYXNlKTtcbiAgICAgICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSAtcmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIHJlcy5tb250aHMgPSAtcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogcmVtb3ZlICduYW1lJyBhcmcgYWZ0ZXIgZGVwcmVjYXRpb24gaXMgcmVtb3ZlZFxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFkZGVyKGRpcmVjdGlvbiwgbmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2Y
33378XIgZHVyLCB0bXA7XG4gICAgICAgICAgICAvL2ludmVydCB0aGUgYXJndW1lbnRzLCBidXQgY29tcGxhaW4gYWJvdXQgaXRcbiAgICAgICAgICAgIGlmIChwZXJpb2QgIT09IG51bGwgJiYgIWlzTmFOKCtwZXJpb2QpKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKG5hbWUsICdtb21lbnQoKS4nICsgbmFtZSAgKyAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgKyBuYW1lICsgJyhudW1iZXIsIHBlcmlvZCkuICcgK1xuICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uJyk7XG4gICAgICAgICAgICAgICAgdG1wID0gdmFsOyB2YWwgPSBwZXJpb2Q7IHBlcmlvZCA9IHRtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsID0gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyArdmFsIDogdmFsO1xuICAgICAgICAgICAgZHVyID0gY3JlYXRlRHVyYXRpb24odmFsLCBwZXJpb2QpO1xuICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgZHVyLCBkaXJlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QgKG1vbSwgZHVyYXRpb24sIGlzQWRkaW5nLCB1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gYWJzUm91bmQoZHVyYXRpb24uX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzUm91bmQoZHVyYXRpb24uX21vbnRocyk7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0ID09IG51bGwgPyB0cnVlIDogdXBkYXRlT2Zmc2V0O1xuXG4gICAgICAgIGlmIChtb250aHMpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKG1vbSwgZ2V0KG1vbSwgJ01vbnRoJykgKyBtb250aHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRheXMpIHtcbiAgICAgICAgICAgIHNldCQxKG1vbSwgJ0RhdGUnLCBnZXQobW9tLCAnRGF0ZScpICsgZGF5cyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgICBtb20uX2Quc2V0VGltZShtb20uX2QudmFsdWVPZigpICsgbWlsbGlzZWNvbmRzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChtb20sIGRheXMgfHwgbW9udGhzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBhZGQgICAgICA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKTtcbiAgICB2YXIgc3VidHJhY3QgPSBjcmVhdGVBZGRlcigtMSwgJ3N1YnRyYWN0Jyk7XG5cbiAgICBmdW5jdGlvbiBnZXRDYWxlbmRhckZvcm1hdChteU1vbWVudCwgbm93KSB7XG4gICAgICAgIHZhciBkaWZmID0gbXlNb21lbnQuZGlmZihub3csICdkYXlzJywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBkaWZmIDwgLTYgPyAnc2FtZUVsc2UnIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgLTEgPyAnbGFzdFdlZWsnIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgMCA/ICdsYXN0RGF5JyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IDEgPyAnc2FtZURheScgOlxuICAgICAgICAgICAgICAgIGRpZmYgPCAyID8gJ25leHREYXknIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgNyA/ICduZXh0V2VlaycgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEgKHRpbWUsIGZvcm1hdHMpIHtcbiAgICAgICAgLy8gV2Ugd2FudCB0byBjb21wYXJlIHRoZSBzdGFydCBvZiB0b2RheSwgdnMgdGhpcy5cbiAgICAgICAgLy8gR2V0dGluZyBzdGFydC1vZi10b2RheSBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgbG9jYWwvdXRjL29mZnNldCBvciBub3QuXG4gICAgICAgIHZhciBub3cgPSB0aW1lIHx8IGNyZWF0ZUxvY2FsKCksXG4gICAgICAgICAgICBzb2QgPSBjbG9uZVdpdGhPZmZzZXQobm93LCB0aGlzKS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGhvb2tzLmNhbGVuZGFyRm9ybWF0KHRoaXMsIHNvZCkgfHwgJ3NhbWVFbHNlJztcblxuICAgICAgICB2Y
33378XIgb3V0cHV0ID0gZm9ybWF0cyAmJiAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KSA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KG91dHB1dCB8fCB0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihmb3JtYXQsIHRoaXMsIGNyZWF0ZUxvY2FsKG5vdykpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9tZW50KHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWZ0ZXIgKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA+IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsSW5wdXQudmFsdWVPZigpIDwgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmVmb3JlIChpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuIChmcm9tLCB0bywgdW5pdHMsIGluY2x1c2l2aXR5KSB7XG4gICAgICAgIHZhciBsb2NhbEZyb20gPSBpc01vbWVudChmcm9tKSA/IGZyb20gOiBjcmVhdGVMb2NhbChmcm9tKSxcbiAgICAgICAgICAgIGxvY2FsVG8gPSBpc01vbWVudCh0bykgPyB0byA6IGNyZWF0ZUxvY2FsKHRvKTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxGcm9tLmlzVmFsaWQoKSAmJiBsb2NhbFRvLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbmNsdXNpdml0eSA9IGluY2x1c2l2aXR5IHx8ICcoKSc7XG4gICAgICAgIHJldHVybiAoaW5jbHVzaXZpdHlbMF0gPT09ICcoJyA/IHRoaXMuaXNBZnRlcihsb2NhbEZyb20sIHVuaXRzKSA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKScgPyB0aGlzLmlzQmVmb3JlKGxvY2FsVG8sIHVuaXRzKSA6ICF0aGlzLmlzQWZ0ZXIobG9jYWxUbywgdW5pdHMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUgKGlucHV0LCB1bml0cykge1xuICAgICAgICB2Y
33378XIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpLFxuICAgICAgICAgICAgaW5wdXRNcztcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRNcyA9IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJiBpbnB1dE1zIDw9IHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JBZnRlciAoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNBZnRlcihpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQmVmb3JlIChpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYgKGlucHV0LCB1bml0cywgYXNGbG9hdCkge1xuICAgICAgICB2Y
33378XIgdGhhdCxcbiAgICAgICAgICAgIHpvbmVEZWx0YSxcbiAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6IG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDEyOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzogb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOiBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAzOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6IG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAxZTM7IGJyZWFrOyAvLyAxMDAwXG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOiBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0OyBicmVhazsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBjYXNlICdob3VyJzogb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDM2ZTU7IGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5Jzogb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDg2NGU1OyBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCwgbmVnYXRlIGRzdFxuICAgICAgICAgICAgY2FzZSAnd2Vlayc6IG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7IGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0ICogNywgbmVnYXRlIGRzdFxuICAgICAgICAgICAgZGVmYXVsdDogb3V0cHV0ID0gdGhpcyAtIHRoYXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXNGbG9hdCA/IG91dHB1dCA6IGFic0Zsb29yKG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhEaWZmIChhLCBiKSB7XG4gICAgICAgIC8vIGRpZmZlcmVuY2UgaW4gbW9udGhzXG4gICAgICAgIHZhciB3aG9sZU1vbnRoRGlmZiA9ICgoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMikgKyAoYi5tb250aCgpIC0gYS5tb250aCgpKSxcbiAgICAgICAgICAgIC8vIGIgaXMgaW4gKGFuY2hvciAtIDEgbW9udGgsIGFuY2hvciArIDEgbW9udGgpXG4gICAgICAgICAgICBhbmNob3IgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmLCAnbW9udGhzJyksXG4gICAgICAgICAgICBhbmNob3IyLCBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCdlbicpLmZvcm1hdCgnZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWlonKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyhrZWVwT2Zmc2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1dGMgPSBrZWVwT2Zmc2V0ICE9PSB0cnVlO1xuICAgICAgICB2Y
33378XIgbSA9IHV0YyA/IHRoaXMuY2xvbmUoKS51dGMoKSA6IHRoaXM7XG4gICAgICAgIGlmIChtLnllYXIoKSA8IDAgfHwgbS55ZWFyKCkgPiA5OTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KG0sIHV0YyA/ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nIDogJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKCdaJywgZm9ybWF0TW9tZW50KG0sICdaJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQobSwgdXRjID8gJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nIDogJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ21vbWVudC5pbnZhbGlkKC8qICcgKyB0aGlzLl9pICsgJyAqLyknO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmdW5jID0gJ21vbWVudCc7XG4gICAgICAgIHZhciB6b25lID0gJyc7XG4gICAgICAgIGlmICghdGhpcy5pc0xvY2FsKCkpIHtcbiAgICAgICAgICAgIGZ1bmMgPSB0aGlzLnV0Y09mZnNldCgpID09PSAwID8gJ21vbWVudC51dGMnIDogJ21vbWVudC5wYXJzZVpvbmUnO1xuICAgICAgICAgICAgem9uZSA9ICdaJztcbiAgICAgICAgfVxuICAgICAgICB2Y
33378XIgcHJlZml4ID0gJ1snICsgZnVuYyArICcoXCJdJztcbiAgICAgICAgdmFyIHllYXIgPSAoMCA8PSB0aGlzLnllYXIoKSAmJiB0aGlzLnllYXIoKSA8PSA5OTk5KSA/ICdZWVlZJyA6ICdZWVlZWVknO1xuICAgICAgICB2YXIgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgdmFyIHN1ZmZpeCA9IHpvbmUgKyAnW1wiKV0nO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChwcmVmaXggKyB5ZWFyICsgZGF0ZXRpbWUgKyBzdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdCAoaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgaWYgKCFpbnB1dFN0cmluZykge1xuICAgICAgICAgICAgaW5wdXRTdHJpbmcgPSB0aGlzLmlzVXRjKCkgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjIDogaG9va3MuZGVmYXVsdEZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3V0cHV0ID0gZm9ybWF0TW9tZW50KHRoaXMsIGlucHV0U3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tICh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8XG4gICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7dG86IHRoaXMsIGZyb206IHRpbWV9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tTm93ICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb20oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG8gKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHxcbiAgICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHtmcm9tOiB0aGlzLCB0bzogdGltZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvTm93ICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZSAoa2V5KSB7XG4gICAgICAgIHZhciBuZXdMb2NhbGVEYXRhO1xuXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xvY2FsZURhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChuZXdMb2NhbGVEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2NhbGUgPSBuZXdMb2NhbGVEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuJyxcbiAgICAgICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVEYXRhICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICB2YXIgTVNfUEVSX1NFQ09ORCA9IDEwMDA7XG4gICAgdmFyIE1TX1BFUl9NSU5VVEUgPSA2MCAqIE1TX1BFUl9TRUNPTkQ7XG4gICAgdmFyIE1TX1BFUl9IT1VSID0gNjAgKiBNU19QRVJfTUlOVVRFO1xuICAgIHZhciBNU19QRVJfNDAwX1lFQVJTID0gKDM2NSAqIDQwMCArIDk3KSAqIDI0ICogTVNfUEVSX0hPVVI7XG5cbiAgICAvLyBhY3R1YWwgbW9kdWxvIC0gaGFuZGxlcyBuZWdhdGl2ZSBudW1iZXJzIChmb3IgZGF0ZXMgYmVmb3JlIDE5NzApOlxuICAgIGZ1bmN0aW9uIG1vZCQxKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gICAgICAgIHJldHVybiAoZGl2aWRlbmQgJSBkaXZpc29yICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgI
33378HJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZiAodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpIC0gdGhpcy5tb250aCgpICUgMywgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSwgTVNfUEVSX0hPVVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kT2YgKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSArIDEsIDAsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpIC0gdGhpcy5tb250aCgpICUgMyArIDMsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSArIDEsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgNykgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSkgKyA3KSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgI
33378HRpbWUgKz0gTVNfUEVSX0hPVVIgLSBtb2QkMSh0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSwgTVNfUEVSX0hPVVIpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX01JTlVURSAtIG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX1NFQ09ORCAtIG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWx1ZU9mICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKCh0aGlzLl9vZmZzZXQgfHwgMCkgKiA2MDAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5peCAoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0FycmF5ICgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gW20ueWVhcigpLCBtLm1vbnRoKCksIG0uZGF0ZSgpLCBtLmhvdXIoKSwgbS5taW51dGUoKSwgbS5zZWNvbmQoKSwgbS5taWxsaXNlY29uZCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b09iamVjdCAoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXJzOiBtLnllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoczogbS5tb250aCgpLFxuICAgICAgICAgICAgZGF0ZTogbS5kYXRlKCksXG4gICAgICAgICAgICBob3VyczogbS5ob3VycygpLFxuICAgICAgICAgICAgbWludXRlczogbS5taW51dGVzKCksXG4gICAgICAgICAgICBzZWNvbmRzOiBtLnNlY29uZHMoKSxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogbS5taWxsaXNlY29uZHMoKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gICAgICAgIC8vIG5ldyBEYXRlKE5hTikudG9KU09OKCkgPT09IG51bGxcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy50b0lTT1N0cmluZygpIDogbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDIgKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MgKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBnZXRQYXJzaW5nRmxhZ3ModGhpcykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludmFsaWRBdCAoKSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJzaW5nRmxhZ3ModGhpcykub3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRpb25EYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5wdXQ6IHRoaXMuX2ksXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMuX2YsXG4gICAgICAgICAgICBsb2NhbGU6IHRoaXMuX2xvY2FsZSxcbiAgICAgICAgICAgIGlzVVRDOiB0aGlzLl9pc1VUQyxcbiAgICAgICAgICAgIHN0cmljdDogdGhpcy5fc3RyaWN0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4gKHRva2VuLCBnZXR0ZXIpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4oMCwgW3Rva2VuLCB0b2tlbi5sZW5ndGhdLCAwLCBnZXR0ZXIpO1xuICAgIH1cblxuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2cnLCAgICAgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZ2cnLCAgICAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHJywgICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3dlZWtZZWFyJywgJ2dnJyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrWWVhcicsICdHRycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnd2Vla1llYXInLCAxKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWtZZWFyJywgMSk7XG5cblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0cnLCAgICAgIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdnJywgICAgICBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCAgICAgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnJywgICAgIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHJywgICBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZycsICAgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnZycsICBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnZ2cnLCAnZ2dnZ2cnLCAnR0dHRycsICdHR0dHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQo
33378aW5wdXQpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZycsICdHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhciAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwodGhpcyxcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXkoKSxcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrWWVhciAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwodGhpcyxcbiAgICAgICAgICAgICAgICBpbnB1dCwgdGhpcy5pc29XZWVrKCksIHRoaXMuaXNvV2Vla2RheSgpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhciAoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJblllYXIgKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXJI
33378ZWxwZXIoaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrc1RhcmdldDtcbiAgICAgICAgaWYgKGlucHV0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKHRoaXMsIGRvdywgZG95KS55ZWFyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2Vla3NUYXJnZXQgPSB3ZWVrc0luWWVhcihpbnB1dCwgZG93LCBkb3kpO1xuICAgICAgICAgICAgaWYgKHdlZWsgPiB3ZWVrc1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHdlZWsgPSB3ZWVrc1RhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXRXZWVrQWxsLmNhbGwodGhpcywgaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFdlZWtBbGwod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXJEYXRhID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZShkYXlPZlllYXJEYXRhLnllYXIsIDAsIGRheU9mWWVhckRhdGEuZGF5T2ZZZWFyKTtcblxuICAgICAgICB0aGlzLnllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpKTtcbiAgICAgICAgdGhpcy5tb250aChkYXRlLmdldFVUQ01vbnRoKCkpO1xuICAgICAgICB0aGlzLmRhdGUoZGF0ZS5nZXRVVENEYXRlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUScsIDAsICdRbycsICdxdWFydGVyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3F1YXJ0ZXInLCAnUScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgncXVhcnRlcicsIDcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIgKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpIDogdGhpcy5tb250aCgoaW5wdXQgLSAxKSAqIDMgKyB0aGlzLm1vbnRoKCkgJSAzKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF0ZScsICdEJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF0ZScsIDkpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRCcsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgP1xuICAgICAgICAgIChsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2UgfHwgbG9jYWxlLl9vcmRpbmFsUGFyc2UpIDpcbiAgICAgICAgICBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50O1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0QnLCAnREQnXSwgREFURSk7XG4gICAgYWRkUGFyc2VUb2tlbignRG8nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W0RBVEVdID0gdG9JbnQoaW5wdXQubWF0Y2gobWF0Y2gxdG8yKVswXSk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0RGF5T2ZNb250aCA9IG1ha2VHZXRTZXQoJ0RhdGUnLCB0cnVlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEREQnLCBbJ0REREQnLCAzXSwgJ0RERG8nLCAnZGF5T2ZZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RheU9mWWVhcicsICdEREQnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXlPZlllYXInLCA0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsICBtYXRjaDF0bzMpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REREQnLCBtYXRjaDMpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIgKGlucHV0KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXIgPSBNYXRoLnJvdW5kKCh0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykgLSB0aGlzLmNsb25lKCkuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1KSArIDE7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gZGF5T2ZZZWFyIDogdGhpcy5hZGQoKGlucHV0IC0gZGF5T2ZZZWFyKSwgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignbScsIFsnbW0nLCAyXSwgMCwgJ21pbnV0ZScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaW51dGUnLCAnbScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWludXRlJywgMTQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignbScsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ21tJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydtJywgJ21tJ10sIE1JTlVURSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0TWludXRlID0gbWFrZUdldFNldCgnTWludXRlcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdzJywgWydzcycsIDJdLCAwLCAnc2Vjb25kJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3NlY29uZCcsICdzJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdzZWNvbmQnLCAxNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdzJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgI
33378HZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaWxsaXNlY29uZCcsICdtcycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWlsbGlzZWNvbmQnLCAxNik7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgICAgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgICBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbjtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbGxpc2Vjb25kID0gbWFrZUdldFNldCgnTWlsbGlzZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3onLCAgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJiciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUnIDogJyc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvID0gTW9tZW50LnByb3RvdHlwZTtcblxuICAgIHByb3RvLmFkZCAgICAgICAgICAgICAgID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyICAgICAgICAgID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSAgICAgICAgICAgICA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgICAgICAgICAgICAgID0gZGlmZjtcbiAgICBwcm90by5lbmRPZiAgICAgICAgICAgICA9IGVuZE9mO1xuICAgIHByb3RvLmZvcm1hdCAgICAgICAgICAgID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gICAgICAgICAgICAgID0gZnJvbTtcbiAgICBwcm90by5mcm9tTm93ICAgICAgICAgICA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gICAgICAgICAgICAgICAgPSB0bztcbiAgICBwcm90by50b05vdyAgICAgICAgICAgICA9IHRvTm93O1xuICAgIHByb3RvLmdldCAgICAgICAgICAgICAgID0gc3RyaW5nR2V0O1xuICAgIHByb3RvLmludmFsaWRBdCAgICAgICAgID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgICAgICAgICAgID0gaXNBZnRlcjtcbiAgICBwcm90by5pc0JlZm9yZSAgICAgICAgICA9IGlzQmVmb3JlO1xuICAgIHByb3RvLmlzQmV0d2VlbiAgICAgICAgID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSAgICAgICAgICAgID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgICAgID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSAgICA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgICAgICAgICAgID0gaXNWYWxpZCQyO1xuICAgIHByb3RvLmxhbmcgICAgICAgICAgICAgID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgICAgICAgICAgICA9IGxvY2FsZTtcbiAgICBwcm90by5sb2NhbGVEYXRhICAgICAgICA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ICAgICAgICAgICAgICAgPSBwcm90b3R5cGVNYXg7XG4gICAgcHJvdG8ubWluICAgICAgICAgICAgICAgPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzICAgICAgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ICAgICAgICAgICAgICAgPSBzdHJpbmdTZXQ7XG4gICAgcHJvdG8uc3RhcnRPZiAgICAgICAgICAgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ICAgICAgICAgID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSAgICAgICAgICAgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ICAgICAgICAgID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlICAgICAgICAgICAgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgICAgICAgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ICAgICAgICAgICA9IGluc3BlY3Q7XG4gICAgcHJvdG8udG9KU09OICAgICAgICAgICAgPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgICAgICAgICAgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ICAgICAgICAgICAgICA9IHVuaXg7XG4gICAgcHJvdG8udmFsdWVPZiAgICAgICAgICAgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSAgICAgID0gY3JlYXRpb25EYXRhO1xuICAgIHByb3RvLnllYXIgICAgICAgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyICAgID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoICAgICAgID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrICAgICAgICAgICA9IHByb3RvLndlZWtzICAgICAgICA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayAgICAgICAgPSBwcm90by5pc29XZWVrcyAgICAgPSBnZXRTZXRJU09XZWVrO1xuICAgIHByb3RvLndlZWtzSW5ZZWFyICAgID0gZ2V0V2Vla3NJblllYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5kYXRlICAgICAgID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgICAgICAgID0gcHJvdG8uZGF5cyAgICAgICAgICAgICA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ICAgID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyICA9IGdldFNldERheU9mWWVhcjtcbiAgICBwcm90by5ob3VyID0gcHJvdG8uaG91cnMgPSBnZXRTZXRIb3VyO1xuICAgIHByb3RvLm1pbnV0ZSA9IHByb3RvLm1pbnV0ZXMgPSBnZXRTZXRNaW51dGU7XG4gICAgcHJvdG8uc2Vjb25kID0gcHJvdG8uc2Vjb25kcyA9IGdldFNldFNlY29uZDtcbiAgICBwcm90by5taWxsaXNlY29uZCA9IHByb3RvLm1pbGxpc2Vjb25kcyA9IGdldFNldE1pbGxpc2Vjb25kO1xuICAgIHByb3RvLnV0Y09mZnNldCAgICAgICAgICAgID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyAgICAgICAgICAgICAgICAgID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgICAgICAgICAgICAgICAgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSAgICAgICAgICAgID0gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQ7XG4gICAgcHJvdG8uaGFzQWxpZ25lZEhvdXJPZmZzZXQgPSBoYXNBbGlnbmVkSG91ck9mZnNldDtcbiAgICBwcm90by5pc0RTVCAgICAgICAgICAgICAgICA9IGlzRGF5bGlnaHRTYXZpbmdUaW1lO1xuICAgIHByb3RvLmlzTG9jYWwgICAgICAgICAgICAgID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCAgICAgICAgICA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjICAgICAgICAgICAgICAgID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgICAgICAgICAgICAgICAgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgID0gZGVwcmVjYXRlKCdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsIGdldFNldERheU9mTW9udGgpO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZSgnbW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkJywgZ2V0U2V0TW9udGgpO1xuICAgIHByb3RvLnllYXJzICA9IGRlcHJlY2F0ZSgneWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCcsIGdldFNldFllYXIpO1xuICAgIHByb3RvLnpvbmUgICA9IGRlcHJlY2F0ZSgnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLCBnZXRTZXRab25lKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoJ2lzRFNUU2hpZnRlZCBpcyBkZXByZWNhdGVkLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kc3Qtc2hpZnRlZC8gZm9yIG1vcmUgaW5mb3JtYXRpb24nLCBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQpO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlVW5peCAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lICgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0IChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8kMSA9IExvY2FsZS5wcm90b3R5cGU7XG5cbiAgICBwcm90byQxLmNhbGVuZGFyICAgICAgICA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSAgICAgPSBpbnZhbGlkRGF0ZTtcbiAgICBwcm90byQxLm9yZGluYWwgICAgICAgICA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSAgICAgICAgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5wb3N0Zm9ybWF0ICAgICAgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgICAgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlICAgICAgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ICAgICAgICAgICAgID0gc2V0O1xuXG4gICAgcHJvdG8kMS5tb250aHMgICAgICAgICAgICA9ICAgICAgICBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCAgICAgICA9ICAgICAgICBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlICAgICAgID0gICAgICAgIGxvY2FsZU1vbnRoc1BhcnNlO1xuICAgIHByb3RvJDEubW9udGhzUmVnZXggICAgICAgPSBtb250aHNSZWdleDtcbiAgICBwcm90byQxLm1vbnRoc1Nob3J0UmVnZXggID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzICAgICAgID0gICAgICAgIGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gICAgPSAgICAgICAgbG9jYWxlV2Vla2RheXNNaW47XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0ICA9ICAgICAgICBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSAgPSAgICAgICAgbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgI
33378HByb3RvJDEud2Vla2RheXNSZWdleCAgICAgICA9ICAgICAgICB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ICA9ICAgICAgICB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ICAgID0gICAgICAgIHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxIChmb3JtYXQsIGluZGV4LCBmaWVsZCwgc2V0dGVyKSB7XG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKTtcbiAgICAgICAgdmFyIHV0YyA9IGNyZWF0ZVVUQygpLnNldChzZXR0ZXIsIGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGxvY2FsZVtmaWVsZF0odXRjLCBmb3JtYXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNJbXBsIChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaTtcbiAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbCAobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDA7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB2Y
33378XIgaTtcbiAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMgKGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzU2hvcnQgKGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyAobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQgKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c1Nob3J0Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzTWluIChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRvSW50KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuICAgIGhvb2tzLmxhbmcgPSBkZXByZWNhdGUoJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJywgZ2V0U2V0R2xvYmFsTG9jYWxlKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZSgnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsIGdldExvY2FsZSk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzICgpIHtcbiAgICAgICAgdmFyIGRhdGEgICAgICAgICAgID0gdGhpcy5fZGF0YTtcblxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPSBtYXRoQWJzKHRoaXMuX21pbGxpc2Vjb25kcyk7XG4gICAgICAgIHRoaXMuX2RheXMgICAgICAgICA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyAgICAgICA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyAgPSBtYXRoQWJzKGRhdGEubWlsbGlzZWNvbmRzKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzICAgICAgID0gbWF0aEFicyhkYXRhLnNlY29uZHMpO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgICAgICAgPSBtYXRoQWJzKGRhdGEubWludXRlcyk7XG4gICAgICAgIGRhdGEuaG91cnMgICAgICAgICA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzICAgICAgICA9IG1hdGhBYnMoZGF0YS5tb250aHMpO1xuICAgICAgICBkYXRhLnllYXJzICAgICAgICAgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEgKGR1cmF0aW9uLCBpbnB1dCwgdmFsdWUsIGRpcmVjdGlvbikge1xuICAgICAgICB2Y
33378XIgb3RoZXIgPSBjcmVhdGVEdXJhdGlvbihpbnB1dCwgdmFsdWUpO1xuXG4gICAgICAgIGR1cmF0aW9uLl9taWxsaXNlY29uZHMgKz0gZGlyZWN0aW9uICogb3RoZXIuX21pbGxpc2Vjb25kcztcbiAgICAgICAgZHVyYXRpb24uX2RheXMgICAgICAgICArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyAgICAgICArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxIChpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAxKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBzdWJ0cmFjdCgxLCAncycpIG9yIHN1YnRyYWN0KGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIHN1YnRyYWN0JDEgKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsIChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUgKCkge1xuICAgICAgICB2Y
33378XIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuICAgICAgICB2YXIgZGF5cyAgICAgICAgID0gdGhpcy5fZGF5cztcbiAgICAgICAgdmFyIG1vbnRocyAgICAgICA9IHRoaXMuX21vbnRocztcbiAgICAgICAgdmFyIGRhdGEgICAgICAgICA9IHRoaXMuX2RhdGE7XG4gICAgICAgIHZhciBzZWNvbmRzLCBtaW51dGVzLCBob3VycywgeWVhcnMsIG1vbnRoc0Zyb21EYXlzO1xuXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBtaXggb2YgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcywgYnViYmxlIGRvd24gZmlyc3RcbiAgICAgICAgLy8gY2hlY2s6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yMTY2XG4gICAgICAgIGlmICghKChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMCkpKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgICAgICAgICAgID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyAgICAgID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgICAgICAgICAgID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzICAgICAgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgICAgICAgICAgICAgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzICAgICAgICA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyAgID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzIChkYXlzKSB7XG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDE0NjA5NyBkYXlzICh0YWtpbmcgaW50byBhY2NvdW50IGxlYXAgeWVhciBydWxlcylcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTIgbW9udGhzID09PSA0ODAwXG4gICAgICAgIHJldHVybiBkYXlzICogNDgwMCAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMgKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIG1vbnRocyAqIDE0NjA5NyAvIDQ4MDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXMgKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXM7XG4gICAgICAgIHZhciBtb250aHM7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6ICAgcmV0dXJuIG1vbnRocztcbiAgICAgICAgICAgICAgICBjYXNlICdxdWFydGVyJzogcmV0dXJuIG1vbnRocyAvIDM7XG4gICAgICAgICAgICAgICAgY2FzZSAneWVhcic6ICAgIHJldHVybiBtb250aHMgLyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBtaWxsaXNlY29uZHMgc2VwYXJhdGVseSBiZWNhdXNlIG9mIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIChpc3N1ZSAjMTg2NylcbiAgICAgICAgICAgIGRheXMgP
33378SB0aGlzLl9kYXlzICsgTWF0aC5yb3VuZChtb250aHNUb0RheXModGhpcy5fbW9udGhzKSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnd2VlaycgICA6IHJldHVybiBkYXlzIC8gNyAgICAgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JyAgICA6IHJldHVybiBkYXlzICAgICAgICAgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJyAgIDogcmV0dXJuIGRheXMgKiAyNCAgICArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJyA6IHJldHVybiBkYXlzICogMTQ0MCAgKyBtaWxsaXNlY29uZHMgLyA2ZTQ7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2Vjb25kJyA6IHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzogcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIHRoaXMuYXMoJ21zJyk/XG4gICAgZnVuY3Rpb24gdmFsdWVPZiQxICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHRoaXMuX2RheXMgKiA4NjRlNSArXG4gICAgICAgICAgICAodGhpcy5fbW9udGhzICUgMTIpICogMjU5MmU2ICtcbiAgICAgICAgICAgIHRvSW50KHRoaXMuX21vbnRocyAvIDEyKSAqIDMxNTM2ZTZcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlQXMgKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpO1xuICAgIHZhciBhc1NlY29uZHMgICAgICA9IG1ha2VBcygncycpO1xuICAgIHZhciBhc01pbnV0ZXMgICAgICA9IG1ha2VBcygnbScpO1xuICAgIHZhciBhc0hvdXJzICAgICAgICA9IG1ha2VBcygnaCcpO1xuICAgIHZhciBhc0RheXMgICAgICAgICA9IG1ha2VBcygnZCcpO1xuICAgIHZhciBhc1dlZWtzICAgICAgICA9IG1ha2VBcygndycpO1xuICAgIHZhciBhc01vbnRocyAgICAgICA9IG1ha2VBcygnTScpO1xuICAgIHZhciBhc1F1YXJ0ZXJzICAgICA9IG1ha2VBcygnUScpO1xuICAgIHZhciBhc1llYXJzICAgICAgICA9IG1ha2VBcygneScpO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSAoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQkMiAodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXNbdW5pdHMgKyAncyddKCkgOiBOYU47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldHRlcihuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9kYXRhW25hbWVdIDogTmFOO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBtaWxsaXNlY29uZHMgPSBtYWtlR2V0dGVyKCdtaWxsaXNlY29uZHMnKTtcbiAgICB2YXIgc2Vjb25kcyAgICAgID0gbWFrZUdldHRlcignc2Vjb25kcycpO1xuICAgIHZhciBtaW51dGVzICAgICAgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyk7XG4gICAgdmFyIGhvdXJzICAgICAgICA9IG1ha2VHZXR0ZXIoJ2hvdXJzJyk7XG4gICAgdmFyIGRheXMgICAgICAgICA9IG1ha2VHZXR0ZXIoJ2RheXMnKTtcbiAgICB2YXIgbW9udGhzICAgICAgID0gbWFrZUdldHRlcignbW9udGhzJyk7XG4gICAgdmFyIHllYXJzICAgICAgICA9IG1ha2VHZXR0ZXIoJ3llYXJzJyk7XG5cbiAgICBmdW5jdGlvbiB3ZWVrcyAoKSB7XG4gICAgICAgIHJldHVybiBhYnNGbG9vcih0aGlzLmRheXMoKSAvIDcpO1xuICAgIH1cblxuICAgIHZhciByb3VuZCA9IE1hdGgucm91bmQ7XG4gICAgdmFyIHRocmVzaG9sZHMgPSB7XG4gICAgICAgIHNzOiA0NCwgICAgICAgICAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgcyA6IDQ1LCAgICAgICAgIC8vIHNlY29uZHMgdG8gbWludXRlXG4gICAgICAgIG0gOiA0NSwgICAgICAgICAvLyBtaW51dGVzIHRvIGhvdXJcbiAgICAgICAgaCA6IDIyLCAgICAgICAgIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICBkIDogMjYsICAgICAgICAgLy8gZGF5cyB0byBtb250aFxuICAgICAgICBNIDogMTEgICAgICAgICAgLy8gbW9udGhzIHRvIHllYXJcbiAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMSAocG9zTmVnRHVyYXRpb24sIHdpdGhvdXRTdWZmaXgsIGxvY2FsZSkge1xuICAgICAgICB2Y
33378XIgZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCk7XG4gICAgICAgIHZhciBzZWNvbmRzICA9IHJvdW5kKGR1cmF0aW9uLmFzKCdzJykpO1xuICAgICAgICB2YXIgbWludXRlcyAgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKTtcbiAgICAgICAgdmFyIGhvdXJzICAgID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSk7XG4gICAgICAgIHZhciBkYXlzICAgICA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpO1xuICAgICAgICB2YXIgbW9udGhzICAgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKTtcbiAgICAgICAgdmFyIHllYXJzICAgID0gcm91bmQoZHVyYXRpb24uYXMoJ3knKSk7XG5cbiAgICAgICAgdmFyIGEgPSBzZWNvbmRzIDw9IHRocmVzaG9sZHMuc3MgJiYgWydzJywgc2Vjb25kc10gIHx8XG4gICAgICAgICAgICAgICAgc2Vjb25kcyA8IHRocmVzaG9sZHMucyAgICYmIFsnc3MnLCBzZWNvbmRzXSB8fFxuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPD0gMSAgICAgICAgICAgICAmJiBbJ20nXSAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICBtaW51dGVzIDwgdGhyZXNob2xkcy5tICAgJiYgWydtbScsIG1pbnV0ZXNdIHx8XG4gICAgICAgICAgICAgICAgaG91cnMgICA8PSAxICAgICAgICAgICAgICYmIFsnaCddICAgICAgICAgICB8fFxuICAgICAgICAgICAgICAgIGhvdXJzICAgPCB0aHJlc2hvbGRzLmggICAmJiBbJ2hoJywgaG91cnNdICAgfHxcbiAgICAgICAgICAgICAgICBkYXlzICAgIDw9IDEgICAgICAgICAgICAgJiYgWydkJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgZGF5cyAgICA8IHRocmVzaG9sZHMuZCAgICYmIFsnZGQnLCBkYXlzXSAgICB8fFxuICAgICAgICAgICAgICAgIG1vbnRocyAgPD0gMSAgICAgICAgICAgICAmJiBbJ00nXSAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICBtb250aHMgIDwgdGhyZXNob2xkcy5NICAgJiYgWydNTScsIG1vbnRoc10gIHx8XG4gICAgICAgICAgICAgICAgeWVhcnMgICA8PSAxICAgICAgICAgICAgICYmIFsneSddICAgICAgICAgICB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyAocm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICBpZiAocm91bmRpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZihyb3VuZGluZ0Z1bmN0aW9uKSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcm91bmQgPSByb3VuZGluZ0Z1bmN0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgYSB0aHJlc2hvbGQgZm9yIHJlbGF0aXZlIHRpbWUgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCAodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplICh3aXRoU3VmZml4KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICB2Y
33378XIgb3V0cHV0ID0gcmVsYXRpdmVUaW1lJDEodGhpcywgIXdpdGhTdWZmaXgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICgoeCA+IDApIC0gKHggPCAwKSkgfHwgK3g7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmckMSgpIHtcbiAgICAgICAgLy8gZm9yIElTTyBzdHJpbmdzIHdlIGRvIG5vdCB1c2UgdGhlIG5vcm1hbCBidWJibGluZyBydWxlczpcbiAgICAgICAgLy8gICogbWlsbGlzZWNvbmRzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSBob3Vyc1xuICAgICAgICAvLyAgKiBkYXlzIGRvIG5vdCBidWJibGUgYXQgYWxsXG4gICAgICAgIC8vICAqIG1vbnRocyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgeWVhcnNcbiAgICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHRoZXJlIGlzIG5vIGNvbnRleHQtZnJlZSBjb252ZXJzaW9uIGJldHdlZW4gaG91cnMgYW5kIGRheXNcbiAgICAgICAgLy8gKHRoaW5rIG9mIGNsb2NrIGNoYW5nZXMpXG4gICAgICAgIC8vIGFuZCBhbHNvIG5vdCBiZXR3ZWVuIGRheXMgYW5kIG1vbnRocyAoMjgtMzEgZGF5cyBwZXIgbW9udGgpXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlY29uZHMgPSBhYnMkMSh0aGlzLl9taWxsaXNlY29uZHMpIC8gMTAwMDtcbiAgICAgICAgdmFyIGRheXMgICAgICAgICA9IGFicyQxKHRoaXMuX2RheXMpO1xuICAgICAgICB2Y
33378XIgbW9udGhzICAgICAgID0gYWJzJDEodGhpcy5fbW9udGhzKTtcbiAgICAgICAgdmFyIG1pbnV0ZXMsIGhvdXJzLCB5ZWFycztcblxuICAgICAgICAvLyAzNjAwIHNlY29uZHMgLT4gNjAgbWludXRlcyAtPiAxIGhvdXJcbiAgICAgICAgbWludXRlcyAgICAgICAgICAgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBob3VycyAgICAgICAgICAgICA9IGFic0Zsb29yKG1pbnV0ZXMgLyA2MCk7XG4gICAgICAgIHNlY29uZHMgJT0gNjA7XG4gICAgICAgIG1pbnV0ZXMgJT0gNjA7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyAgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuXG4gICAgICAgIC8vIGluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9kb3JkaWxsZS9tb21lbnQtaXNvZHVyYXRpb24vYmxvYi9tYXN0ZXIvbW9tZW50Lmlzb2R1cmF0aW9uLmpzXG4gICAgICAgIHZhciBZID0geWVhcnM7XG4gICAgICAgIHZhciBNID0gbW9udGhzO1xuICAgICAgICB2YXIgRCA9IGRheXM7XG4gICAgICAgIHZhciBoID0gaG91cnM7XG4gICAgICAgIHZhciBtID0gbWludXRlcztcbiAgICAgICAgdmFyIHMgPSBzZWNvbmRzID8gc2Vjb25kcy50b0ZpeGVkKDMpLnJlcGxhY2UoL1xcLj8wKyQvLCAnJykgOiAnJztcbiAgICAgICAgdmFyIHRvdGFsID0gdGhpcy5hc1NlY29uZHMoKTtcblxuICAgICAgICBpZiAoIXRvdGFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIEMjJ3MgKE5vZGEpIGFuZCBweXRob24gKGlzb2RhdGUpLi4uXG4gICAgICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXG4gICAgICAgICAgICByZXR1cm4gJ1AwRCc7XG4gICAgICAgIH1cblxuICAgICAgICB2Y
33378XIgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHZhciB5bVNpZ24gPSBzaWduKHRoaXMuX21vbnRocykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIHZhciBkYXlzU2lnbiA9IHNpZ24odGhpcy5fZGF5cykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIHZhciBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiB0b3RhbFNpZ24gKyAnUCcgK1xuICAgICAgICAgICAgKFkgPyB5bVNpZ24gKyBZICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChNID8geW1TaWduICsgTSArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoRCA/IGRheXNTaWduICsgRCArICdEJyA6ICcnKSArXG4gICAgICAgICAgICAoKGggfHwgbSB8fCBzKSA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaCA/IGhtc1NpZ24gKyBoICsgJ0gnIDogJycpICtcbiAgICAgICAgICAgIChtID8gaG1zU2lnbiArIG0gKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKHMgPyBobXNTaWduICsgcyArICdTJyA6ICcnKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8kMiA9IER1cmF0aW9uLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDIuaXNWYWxpZCAgICAgICAgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgICAgICAgICAgICA9IGFicztcbiAgICBwcm90byQyLmFkZCAgICAgICAgICAgID0gYWRkJDE7XG4gICAgcHJvdG8kMi5zdWJ0cmFjdCAgICAgICA9IHN1YnRyYWN0JDE7XG4gICAgcHJvdG8kMi5hcyAgICAgICAgICAgICA9IGFzO1xuICAgIHByb3RvJDIuYXNNaWxsaXNlY29uZHMgPSBhc01pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLmFzU2Vjb25kcyAgICAgID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzICAgICAgPSBhc01pbnV0ZXM7XG4gICAgcHJvdG8kMi5hc0hvdXJzICAgICAgICA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgICAgICAgICA9IGFzRGF5cztcbiAgICBwcm90byQyLmFzV2Vla3MgICAgICAgID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzICAgICAgID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzICAgICA9IGFzUXVhcnRlcnM7XG4gICAgcHJvdG8kMi5hc1llYXJzICAgICAgICA9IGFzWWVhcnM7XG4gICAgcHJvdG8kMi52YWx1ZU9mICAgICAgICA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgICAgICAgID0gYnViYmxlO1xuICAgIHByb3RvJDIuY2xvbmUgICAgICAgICAgPSBjbG9uZSQxO1xuICAgIHByb3RvJDIuZ2V0ICAgICAgICAgICAgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyAgID0gbWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuc2Vjb25kcyAgICAgICAgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyAgICAgICAgPSBtaW51dGVzO1xuICAgIHByb3RvJDIuaG91cnMgICAgICAgICAgPSBob3VycztcbiAgICBwcm90byQyLmRheXMgICAgICAgICAgID0gZGF5cztcbiAgICBwcm90byQyLndlZWtzICAgICAgICAgID0gd2Vla3M7XG4gICAgcHJvdG8kMi5tb250aHMgICAgICAgICA9IG1vbnRocztcbiAgICBwcm90byQyLnllYXJzICAgICAgICAgID0geWVhcnM7XG4gICAgcHJvdG8kMi5odW1hbml6ZSAgICAgICA9IGh1bWFuaXplO1xuICAgIHByb3RvJDIudG9JU09TdHJpbmcgICAgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9TdHJpbmcgICAgICAgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9KU09OICAgICAgICAgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlICAgICAgICAgPSBsb2NhbGU7XG4gICAgcHJvdG8kMi5sb2NhbGVEYXRhICAgICA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKCd0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmc
33378oKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKScsIHRvSVNPU3RyaW5nJDEpO1xuICAgIHByb3RvJDIubGFuZyA9IGxhbmc7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWCcsIDAsIDAsICd1bml4Jyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3gnLCAwLCAwLCAndmFsdWVPZicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigneCcsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdYJywgbWF0Y2hUaW1lc3RhbXApO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUocGFyc2VGbG9hdChpbnB1dCwgMTApICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG5cbiAgICBob29rcy52ZXJzaW9uID0gJzIuMjQuMCc7XG5cbiAgICBzZXRIb29rQ2FsbGJhY2soY3JlYXRlTG9jYWwpO1xuXG4gICAgaG9va3MuZm4gICAgICAgICAgICAgICAgICAgID0gcHJvdG87XG4gICAgaG9va3MubWluICAgICAgICAgICAgICAgICAgID0gbWluO1xuICAgIGhvb2tzLm1heCAgICAgICAgICAgICAgICAgICA9IG1heDtcbiAgICBob29rcy5ub3cgICAgICAgICAgICAgICAgICAgPSBub3c7XG4gICAgaG9va3MudXRjICAgICAgICAgICAgICAgICAgID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggICAgICAgICAgICAgICAgICA9IGNyZWF0ZVVuaXg7XG4gICAgaG9va3MubW9udGhzICAgICAgICAgICAgICAgID0gbGlzdE1vbnRocztcbiAgICBob29rcy5pc0RhdGUgICAgICAgICAgICAgICAgPSBpc0RhdGU7XG4gICAgaG9va3MubG9jYWxlICAgICAgICAgICAgICAgID0gZ2V0U2V0R2xvYmFsTG9jYWxlO1xuICAgIGhvb2tzLmludmFsaWQgICAgICAgICAgICAgICA9IGNyZWF0ZUludmFsaWQ7XG4gICAgaG9va3MuZHVyYXRpb24gICAgICAgICAgICAgID0gY3JlYXRlRHVyYXRpb247XG4gICAgaG9va3MuaXNNb21lbnQgICAgICAgICAgICAgID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgICAgICAgICAgICAgID0gbGlzdFdlZWtkYXlzO1xuICAgIGhvb2tzLnBhcnNlWm9uZSAgICAgICAgICAgICA9IGNyZWF0ZUluWm9uZTtcbiAgICBob29rcy5sb2NhbGVEYXRhICAgICAgICAgICAgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiAgICAgICAgICAgID0gaXNEdXJhdGlvbjtcbiAgICBob29rcy5tb250aHNTaG9ydCAgICAgICAgICAgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gICAgICAgICAgID0gbGlzdFdlZWtkYXlzTWluO1xuICAgIGhvb2tzLmRlZmluZUxvY2FsZSAgICAgICAgICA9IGRlZmluZUxvY2FsZTtcbiAgICBob29rcy51cGRhdGVMb2NhbGUgICAgICAgICAgPSB1cGRhdGVMb2NhbGU7XG4gICAgaG9va3MubG9jYWxlcyAgICAgICAgICAgICAgID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCAgICAgICAgID0gbGlzdFdlZWtkYXlzU2hvcnQ7XG4gICAgaG9va3Mubm9ybWFsaXplVW5pdHMgICAgICAgID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgID0gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmc7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkO1xuICAgIGhvb2tzLmNhbGVuZGFyRm9ybWF0ICAgICAgICA9IGdldENhbGVuZGFyRm9ybWF0O1xuICAgIGhvb2tzLnByb3RvdHlwZSAgICAgICAgICAgICA9IHByb3RvO1xuXG4gICAgLy8gY3VycmVudGx5IEhUTUw1IGlucHV0IHR5cGUgb25seSBzdXBwb3J0cyAyNC1ob3VyIGZvcm1hdHNcbiAgICBob29rcy5IVE1MNV9GTVQgPSB7XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMOiAnWVlZWS1NTS1ERFRISDptbScsICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiAnWVlZWS1NTS1ERFRISDptbTpzcycsICAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgICAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgREFURTogJ1lZWVktTU0tREQnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBUSU1FX01TOiAnSEg6bW06c3MuU1NTJywgICAgICAgICAgICAgICAgICAgICAgICAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8aW5wdXQgdHlwZT1cIndlZWtcIiAvPlxuICAgICAgICBNT05USDogJ1lZWVktTU0nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8aW5wdXQgdHlwZT1cIm1vbnRoXCIgLz5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGhvb2tzO1xuXG59KSkpO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2h
33378pY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgI
33378HJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJ
33378yYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxudmFyIHJ1bnRpbWUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBleHBvcnRzLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gI
33378H1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBleHBvcnRzLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2Y
33378XIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIC8vIElmIGEgcmVqZWN0ZWQgUHJvbWlzZSB3YXMgeWllbGRlZCwgdGhyb3cgdGhlIHJlamVjdGlvbiBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSBoYW5kbGVkIHRoZXJlLlxuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCBlcnJvciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgI
33378HJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2Y
33378XIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAvLyBOb3RlOiBbXCJyZXR1cm5cIl0gbXVzdCBiZSB1c2VkIGZvciBFUzMgcGFyc2luZyBjb21wYXRpYmlsaXR5LlxuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFy
33378ZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgI
33378HZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBleHBvcnRz
vendor: 7,904 bytes, line 33378
33378LnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xu
33378XG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGVcbiAgLy8gb3Igbm90LCByZXR1cm4gdGhlIHJ1bnRpbWUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGRlY2xhcmUgdGhlIHZhcmlhYmxlXG4gIC8vIHJlZ2VuZXJhdG9yUnVudGltZSBpbiB0aGUgb3V0ZXIgc2NvcGUsIHdoaWNoIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZVxuICAvLyBpbmplY3RlZCBlYXNpbHkgYnkgYGJpbi9yZWdlbmVyYXRvciAtLWluY2x1ZGUtcnVudGltZSBzY3JpcHQuanNgLlxuICByZXR1cm4gZXhwb3J0cztcblxufShcbiAgLy8gSWYgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlLCB1c2UgbW9kdWxlLmV4cG9ydHNcbiAgLy8gYXMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBuYW1lc3BhY2UuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgZW1wdHlcbiAgLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuICAvLyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIHZhcmlhYmxlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLlxuICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiID8gbW9kdWxlLmV4cG9ydHMgOiB7fVxuKSk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xufVxuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgcmVnaXN0ZXJJbW1lZGlhdGU7XG5cbiAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2spIHtcbiAgICAgIC8vIENhbGxiYWNrIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gbmV3IEZ1bmN0aW9uKFwiXCIgKyBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAvLyBDb3B5IGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBhbmQgcmVnaXN0ZXIgdGhlIHRhc2tcbiAgICAgIHZhciB0YXNrID0geyBjYWxsYmFjazogY2FsbGJhY2ssIGFyZ3M6IGFyZ3MgfTtcbiAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSB0YXNrO1xuICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSk7XG4gICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGhhbmRsZSkge1xuICAgICAgICBkZWxldGUgdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bih0YXNrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gICAgICAgIHZhciBhcmdzID0gdGFzay5hcmdzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bklmUHJlc2VudChoYW5kbGUpIHtcbiAgICAgICAgLy8gRnJvbSB0aGUgc3BlYzogXCJXYWl0IHVudGlsIGFueSBpbnZvY2F0aW9ucyBvZiB0aGlzIGFsZ29yaXRobSBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIGNvbXBsZXRlZC5cIlxuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAoY3VycmVudGx5UnVubmluZ0FUYXNrKSB7XG4gICAgICAgICAgICAvLyBEZWxheSBieSBkb2luZyBhIHNldFRpbWVvdXQuIHNldEltbWVkaWF0ZSB3YXMgdHJpZWQgaW5zdGVhZCwgYnV0IGluIEZpcmVmb3ggNyBpdCBnZW5lcmF0ZWQgYVxuICAgICAgICAgICAgLy8gXCJ0b28gbXVjaCByZWN1cnNpb25cIiBlcnJvci5cbiAgICAgICAgICAgI
33378HNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKHRhc2spO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJ1bklmUHJlc2VudChoYW5kbGUpOyB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2Y
33378XIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufSh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IHR5cGVvZiBnbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogZ2xvYmFsIDogc2VsZikpO1xuIiwidmFyIHNjb3BlID0gKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYpIHx8XG4gICAgICAgICAgICB3aW5kb3c7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkge1xuICBpZiAodGltZW91dCkge1xuICAgIHRpbWVvdXQuY2xvc2UoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbChzY29wZSwgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgP
33378SAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIHNldGltbWVkaWF0ZSBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlIGdsb2JhbCBvYmplY3RcbnJlcXVpcmUoXCJzZXRpbW1lZGlhdGVcIik7XG4vLyBPbiBzb21lIGV4b3RpYyBlbnZpcm9ubWVudHMsIGl0J3Mgbm90IGNsZWFyIHdoaWNoIG9iamVjdCBgc2V0aW1tZWRpYXRlYCB3YXNcbi8vIGFibGUgdG8gaW5zdGFsbCBvbnRvLiAgU2VhcmNoIGVhY2ggcG9zc2liaWxpdHkgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4vLyBgc2V0aW1tZWRpYXRlYCBsaWJyYXJ5LlxuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuc2V0SW1tZWRpYXRlKTtcbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5jbGVhckltbWVkaWF0ZSk7XG4iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwib3BlbmluZy1ob3VyXCIgfSwgW1xuICAgIF92bS5vcGVuaW5nSG91ci5zdGF0dXMgPT0gXCJjbG9zZWRcIlxuICAgICAgPyBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJ0aW1lIGNsb3NlZFwiIH0sIFtcbiAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5EcnVwYWwudChcIkNsb3NlZFwiKSkpXG4gICAgICAgIF0pXG4gICAgICA6IF92bS5vcGVuaW5nSG91ci5zdGF0dXMgPT09IFwib3BlbnNfc29vblwiXG4gICAgICA/IF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcInRpbWUgb3BlbnMtc29vblwiIH0sIFtcbiAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5EcnVwYWwudChcIk9wZW5zIHNvb25cIikpKVxuICAgICAgICBdKVxuICAgICAgOiBfdm0ub3BlbmluZ0hvdXIuc3RhdHVzID09PSBcImNsb3Nlc19zb29uXCJcbiAgICAgID8gX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwidGltZSBjbG9zZXMtc29vblwiIH0sIFtcbiAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5EcnVwYWwudChcIkNsb3NlcyBzb29uXCIpKSlcbiAgICAgICAgXSlcbiAgICAgIDogX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwidGltZSBvcGVuXCIgfSwgW1xuICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgIF92bS5fcyhfdm0ub3BlbmluZ0hvdXIuc3RhcnQpICsgXCIgLSBcIiArIF92bS5fcyhfdm0ub3BlbmluZ0hvdXIuZW5kKVxuICAgICAgICAgIClcbiAgICAgICAgXSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ub3BlbmluZ0hvdXIubGFiZWxcbiAgICAgID8gX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwibGFiZWxcIiB9LCBbXG4gICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ub3BlbmluZ0hvdXIubGFiZWwpKVxuICAgICAgICBdKVxuICAgICAgOiBfdm0uX2UoKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJvcGVuaW5nLWhvdXJzLXdyYXBwZXJcIiB9LCBbXG4gICAgX3ZtLm9wZW5pbmdIb3VycyAmJiBPYmplY3Qua2V5cyhfdm0ub3BlbmluZ0hvdXJzKS5sZW5ndGggPiAwXG4gICAgICA/IF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJvcGVuaW5nLWhvdXJzXCIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm9wZW5pbmctaG91cnMtdG9wXCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd1ByZX
33378Zpb3VzLFxuICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd1ByZXZpb3VzXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm5leHQtcHJldmlvdXNcIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGRpc2FibGVkOiAhX3ZtLnNob3dQcmV2aW91cyB9LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaHJlZjogXCIjXCIgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgIF92bS5zaG93UHJldmlvdXMgPyBfdm0ucHJldmlvdXMoKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZmFzIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJ2aXN1YWxseS1oaWRkZW5cIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLkRydXBhbC50KFwiR28gdG8gdGhlIHByZXZpb3VzIHdlZWtcIikpKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwicFwiLCB7IHN0YXRpY0NsYXNzOiBcIm9wZW5pbmctaG91cnMtdG9wX190aXRsZVwiIH0sIFtcbiAgICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZmFzIGZhLWNsb2NrXCIsXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIgKyBfdm0uX3MoX3ZtLkRydXBhbC50KFwiT3BlbmluZyBob3VycyBmcm9tXCIpKSArIFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcInN0cm9uZ1wiLCBbX3ZtLl92KF92bS5fcyhfdm0uZnJvbSkpXSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiICsgX3ZtLl9zKF92bS5EcnVwYWwudChcInRvXCIpKSArIFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcInN0cm9uZ1wiLCBbX3ZtLl92KF92bS5fcyhfdm0udG8pKV0pXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJuZXh0LXByZXZpb3VzXCIsXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBocmVmOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5uZXh0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZmFzIGZhLWNoZXZyb24tY2lyY2xlLXJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIgfVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwidmlzdWFsbHktaGlkZGVuXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5EcnVwYWwudChcIkdvIHRvIHRoZSBuZXh0IHdlZWtcIikpKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5fbChfdm0ub3BlbmluZ0hvdXJzLCBmdW5jdGlvbihkYXksIGxhYmVsLCBpbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJkYXlcIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgICAgIHRvZGF5OiBsYWJlbCA9PT0gX3ZtLm1vbWVudFRvZGF5LmZvcm1hdChcIllZWVktTU0tRERcIilcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZGF5LWxhYmVsXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5fZihcImxvbmdEYXRlXCIpKGxhYmVsKSkpXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJkYXktb3BlbmluZy1ob3Vyc1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIF92bS5fbChkYXksIGZ1bmN0aW9uKG9wZW5pbmdIb3VyLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgI
33378HJldHVybiBfYyhcIm9wZW5pbmctaG91clwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgXCJvcGVuaW5nLWhvdXJcIjogb3BlbmluZ0hvdXIgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0sXG4gICAgICAgICAgMlxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIsIC8qIHNlcnZlciBvbmx5ICovXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChyZW5kZXIpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zXG4gICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlXG4gIH1cblxuICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkXG4gIH1cblxuICB2YXIgaG9va1xuICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkgeyBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCB0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx
333785IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG4iLCIvKiFcbiAqIFZ1ZS5qcyB2Mi42LjExXG4gKiAoYykgMjAxNC0yMDE5IEV2YW4gWW91XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cbi8qICAqL1xuXG52YXIgZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplKHt9KTtcblxuLy8gVGhlc2UgaGVscGVycyBwcm9kdWNlIGJldHRlciBWTSBjb2RlIGluIEpTIGVuZ2luZXMgZHVlIHRvIHRoZWlyXG4vLyBleHBsaWNpdG5lc3MgYW5kIGZ1bmN0aW9uIGlubGluaW5nLlxuZnVuY3Rpb24gaXNVbmRlZiAodikge1xuICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNEZWYgKHYpIHtcbiAgcmV0dXJuIHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsXG59XG5cbmZ1bmN0aW9uIGlzVHJ1ZSAodikge1xuICByZXR1cm4gdiA9PT0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpc0ZhbHNlICh2KSB7XG4gIHJldHVybiB2ID09PSBmYWxzZVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIHByaW1pdGl2ZS5cbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmUgKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbidcbiAgKVxufVxuXG4vKipcbiAqIFF1aWNrIG9iamVjdCBjaGVjayAtIHRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgdG8gdGVsbFxuICogT2JqZWN0cyBmcm9tIHByaW1pdGl2ZSB2YWx1ZXMgd2hlbiB3ZSBrbm93IHRoZSB2YWx1ZVxuICogaXMgYSBKU09OLWNvbXBsaWFudCB0eXBlLlxuICovXG5mdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHJhdyB0eXBlIHN0cmluZyBvZiBhIHZhbHVlLCBlLmcuLCBbb2JqZWN0IE9iamVjdF0uXG4gKi9cbnZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5mdW5jdGlvbiB0b1Jhd1R5cGUgKHZhbHVlKSB7XG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpXG59XG5cbi8qKlxuICogU3RyaWN0IG9iamVjdCB0eXBlIGNoZWNrLiBPbmx5IHJldHVybnMgdHJ1ZVxuICogZm9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCAob2JqKSB7XG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJ1xufVxuXG5mdW5jdGlvbiBpc1JlZ0V4cCAodikge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsIGlzIGEgdmFsaWQgYXJyYXkgaW5kZXguXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRBcnJheUluZGV4ICh2YWwpIHtcbiAgdmFyIG4gPSBwYXJzZUZsb2F0KFN0cmluZyh2YWwpKTtcbiAgcmV0dXJuIG4gPj0gMCAmJiBNYXRoLmZsb29yKG4pID09PSBuICYmIGlzRmluaXRlKHZhbClcbn1cblxuZnVuY3Rpb24gaXNQcm9taXNlICh2YWwpIHtcbiAgcmV0dXJuIChcbiAgICBpc0RlZih2YWwpICYmXG4gICAgdHlwZW9mIHZhbC50aGVuID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHZhbC5jYXRjaCA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIHRvIGEgc3RyaW5nIHRoYXQgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nICh2YWwpIHtcbiAgcmV0dXJuIHZhbCA9PSBudWxsXG4gICAgPyAnJ1xuICAgIDogQXJyYXkuaXNBcnJheSh2YWwpIHx8IChpc1BsYWluT2JqZWN0KHZhbCkgJiYgdmFsLnRvU3RyaW5nID09PSBfdG9TdHJpbmcpXG4gICAgICA/IEpTT04uc3RyaW5naWZ5KHZhbCwgbnVsbCwgMilcbiAgICAgIDogU3RyaW5nKHZhbClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGlucHV0IHZhbHVlIHRvIGEgbnVtYmVyIGZvciBwZXJzaXN0ZW5jZS5cbiAqIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCByZXR1cm4gb3JpZ2luYWwgc3RyaW5nLlxuICovXG5mdW5jdGlvbiB0b051bWJlciAodmFsKSB7XG4gIHZhciBuID0gcGFyc2VGbG9hdCh2YWwpO1xuICByZXR1cm4gaXNOYU4obikgPyB2YWwgOiBuXG59XG5cbi8qKlxuICogTWFrZSBhIG1hcCBhbmQgcmV0dXJuIGEgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGEga2V5XG4gKiBpcyBpbiB0aGF0IG1hcC5cbiAqL1xuZnVuY3Rpb24gbWFrZU1hcCAoXG4gIHN0cixcbiAgZXhwZWN0c0xvd2VyQ2FzZVxuKSB7XG4gIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgbGlzdCA9IHN0ci5zcGxpdCgnLCcpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBtYXBbbGlzdFtpXV0gPSB0cnVlO1xuICB9XG4gI
33378HJldHVybiBleHBlY3RzTG93ZXJDYXNlXG4gICAgPyBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsLnRvTG93ZXJDYXNlKCldOyB9XG4gICAgOiBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsXTsgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgdGFnIGlzIGEgYnVpbHQtaW4gdGFnLlxuICovXG52YXIgaXNCdWlsdEluVGFnID0gbWFrZU1hcCgnc2xvdCxjb21wb25lbnQnLCB0cnVlKTtcblxuLyoqXG4gKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4gKi9cbnZhciBpc1Jlc2VydmVkQXR0cmlidXRlID0gbWFrZU1hcCgna2V5LHJlZixzbG90LHNsb3Qtc2NvcGUsaXMnKTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaXRlbSBmcm9tIGFuIGFycmF5LlxuICovXG5mdW5jdGlvbiByZW1vdmUgKGFyciwgaXRlbSkge1xuICBpZiAoYXJyLmxlbmd0aCkge1xuICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gYXJyLnNwbGljZShpbmRleCwgMSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGFuIG9iamVjdCBoYXMgdGhlIHByb3BlcnR5LlxuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gaGFzT3duIChvYmosIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSlcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBjYWNoZWQgdmVyc2lvbiBvZiBhIHB1cmUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNhY2hlZCAoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIChmdW5jdGlvbiBjYWNoZWRGbiAoc3RyKSB7XG4gICAgdmFyIGhpdCA9IGNhY2hlW3N0cl07XG4gICAgcmV0dXJuIGhpdCB8fCAoY2FjaGVbc3RyXSA9IGZuKHN0cikpXG4gIH0pXG59XG5cbi8qKlxuICogQ2FtZWxpemUgYSBoeXBoZW4tZGVsaW1pdGVkIHN0cmluZy5cbiAqL1xudmFyIGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XG52YXIgY2FtZWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoY2FtZWxpemVSRSwgZnVuY3Rpb24gKF8sIGMpIHsgcmV0dXJuIGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJzsgfSlcbn0pO1xuXG4vKipcbiAqIENhcGl0YWxpemUgYSBzdHJpbmcuXG4gKi9cbnZhciBjYXBpdGFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKVxufSk7XG5cbi8qKlxuICogSHlwaGVuYXRlIGEgY2FtZWxDYXNlIHN0cmluZy5cbiAqL1xudmFyIGh5cGhlbmF0ZVJFID0gL1xcQihbQS1aXSkvZztcbnZhciBoeXBoZW5hdGUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUkUsICctJDEnKS50b0xvd2VyQ2FzZSgpXG59KTtcblxuLyoqXG4gKiBTaW1wbGUgYmluZCBwb2x5ZmlsbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IHN1cHBvcnQgaXQsXG4gKiBlLmcuLCBQaGFudG9tSlMgMS54LiBUZWNobmljYWxseSwgd2UgZG9uJ3QgbmVlZCB0aGlzIGFueW1vcmVcbiAqIHNpbmNlIG5hdGl2ZSBiaW5kIGlzIG5vdyBwZXJmb3JtYW50IGVub3VnaCBpbiBtb3N0IGJyb3dzZXJzLlxuICogQnV0IHJlbW92aW5nIGl0IHdvdWxkIG1lYW4gYnJlYWtpbmcgY29kZSB0aGF0IHdhcyBhYmxlIHRvIHJ1biBpblxuICogUGhhbnRvbUpTIDEueCwgc28gdGhpcyBtdXN0IGJlIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKi9cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIHBvbHlmaWxsQmluZCAoZm4sIGN0eCkge1xuICBmdW5jdGlvbiBib3VuZEZuIChhKSB7XG4gICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHJldHVybiBsXG4gICAgICA/IGwgPiAxXG4gICAgICAgID8gZm4uYXBwbHkoY3R4LCBhcmd1bWVudHMpXG4gICAgICAgIDogZm4uY2FsbChjdHgsIGEpXG4gICAgICA6IGZuLmNhbGwoY3R4KVxuICB9XG5cbiAgYm91bmRGbi5fbGVuZ3RoID0gZm4ubGVuZ3RoO1xuICByZXR1cm4gYm91bmRGblxufVxuXG5mdW5jdGlvbiBuYXRpdmVCaW5kIChmbiwgY3R4KSB7XG4gIHJldHVybiBmbi5iaW5kKGN0eClcbn1cblxudmFyIGJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuICA/IG5hdGl2ZUJpbmRcbiAgOiBwb2x5ZmlsbEJpbmQ7XG5cbi8qKlxuICogQ29udmVydCBhbiBBcnJheS1saWtlIG9iamVjdCB0byBhIHJlYWwgQXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkgKGxpc3QsIHN0YXJ0KSB7XG4gIHN0YXJ0ID0gc3RhcnQgfHwgMDtcbiAgdmFyIGkgPSBsaXN0Lmxlbmd0aCAtIHN0YXJ0O1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgcmV0W2ldID0gbGlzdFtpICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXRcbn1cblxuLyoqXG4gKiBNaXggcHJvcGVydGllcyBpbnRvIHRhcmdldCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZCAodG8sIF9mcm9tKSB7XG4gIGZvciAodmFyIGtleSBpbiBfZnJvbSkge1xuICAgIHRvW2tleV0gPSBfZnJvbVtrZXldO1xuICB9XG4gIHJldHVybiB0b1xufVxuXG4vKipcbiAqIE1lcmdlIGFuIEFycmF5IG9mIE9iamVjdHMgaW50byBhIHNpbmdsZSBPYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHRvT2JqZWN0IChhcnIpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnJbaV0pIHtcbiAgICAgIGV4dGVuZChyZXMsIGFycltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuLyoqXG4gKiBQZXJmb3JtIG5vIG9wZXJhdGlvbi5cbiAqIFN0dWJiaW5nIGFyZ3MgdG8gbWFrZSBGbG93IGhhcHB5IHdpdGhvdXQgbGVhdmluZyB1c2VsZXNzIHRyYW5zcGlsZWQgY29kZVxuICogd2l0aCAuLi
333785yZXN0IChodHRwczovL2Zsb3cub3JnL2Jsb2cvMjAxNy8wNS8wNy9TdHJpY3QtRnVuY3Rpb24tQ2FsbC1Bcml0eS8pLlxuICovXG5mdW5jdGlvbiBub29wIChhLCBiLCBjKSB7fVxuXG4vKipcbiAqIEFsd2F5cyByZXR1cm4gZmFsc2UuXG4gKi9cbnZhciBubyA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBmYWxzZTsgfTtcblxuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4vKipcbiAqIFJldHVybiB0aGUgc2FtZSB2YWx1ZS5cbiAqL1xudmFyIGlkZW50aXR5ID0gZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF87IH07XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzdHJpbmcgY29udGFpbmluZyBzdGF0aWMga2V5cyBmcm9tIGNvbXBpbGVyIG1vZHVsZXMuXG4gKi9cbmZ1bmN0aW9uIGdlblN0YXRpY0tleXMgKG1vZHVsZXMpIHtcbiAgcmV0dXJuIG1vZHVsZXMucmVkdWNlKGZ1bmN0aW9uIChrZXlzLCBtKSB7XG4gICAgcmV0dXJuIGtleXMuY29uY2F0KG0uc3RhdGljS2V5cyB8fCBbXSlcbiAgfSwgW10pLmpvaW4oJywnKVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIGxvb3NlbHkgZXF1YWwgLSB0aGF0IGlzLFxuICogaWYgdGhleSBhcmUgcGxhaW4gb2JqZWN0cywgZG8gdGhleSBoYXZlIHRoZSBzYW1lIHNoYXBlP1xuICovXG5mdW5jdGlvbiBsb29zZUVxdWFsIChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGlzT2JqZWN0QSA9IGlzT2JqZWN0KGEpO1xuICB2YXIgaXNPYmplY3RCID0gaXNPYmplY3QoYik7XG4gIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBpc0FycmF5QSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gICAgICB2Y
33378XIgaXNBcnJheUIgPSBBcnJheS5pc0FycmF5KGIpO1xuICAgICAgaWYgKGlzQXJyYXlBICYmIGlzQXJyYXlCKSB7XG4gICAgICAgIHJldHVybiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeShmdW5jdGlvbiAoZSwgaSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGUsIGJbaV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKClcbiAgICAgIH0gZWxzZSBpZiAoIWlzQXJyYXlBICYmICFpc0FycmF5Qikge1xuICAgICAgICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMoYik7XG4gICAgICAgIHJldHVybiBrZXlzQS5sZW5ndGggPT09IGtleXNCLmxlbmd0aCAmJiBrZXlzQS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoYVtrZXldLCBiW2tleV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9IGVsc2UgaWYgKCFpc09iamVjdEEgJiYgIWlzT2JqZWN0Qikge1xuICAgIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBmaXJzdCBpbmRleCBhdCB3aGljaCBhIGxvb3NlbHkgZXF1YWwgdmFsdWUgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgYXJyYXkgKGlmIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGUgYXJyYXkgbXVzdFxuICogY29udGFpbiBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgc2hhcGUpLCBvciAtMSBpZiBpdCBpcyBub3QgcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbG9vc2VJbmRleE9mIChhcnIsIHZhbCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChsb29zZUVxdWFsKGFycltpXSwgdmFsKSkgeyByZXR1cm4gaSB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbi8qKlxuICogRW5zdXJlIGEgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZS5cbiAqL1xuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFNTUl9BVFRSID0gJ2RhdGEtc2VydmVyLXJlbmRlcmVkJztcblxudmFyIEFTU0VUX1RZUEVTID0gW1xuICAnY29tcG9uZW50JyxcbiAgJ2RpcmVjdGl2ZScsXG4gICdmaWx0ZXInXG5dO1xuXG52YXIgTElGRUNZQ0xFX0hPT0tTID0gW1xuICAnYmVmb3JlQ3JlYXRlJyxcbiAgJ2NyZWF0ZWQnLFxuICAnYmVmb3JlTW91bnQnLFxuICAnbW91bnRlZCcsXG4gICdiZWZvcmVVcGRhdGUnLFxuICAndXBkYXRlZCcsXG4gICdiZWZvcmVEZXN0cm95JyxcbiAgJ2Rlc3Ryb3llZCcsXG4gICdhY3RpdmF0ZWQnLFxuICAnZGVhY3RpdmF0ZWQnLFxuICAnZXJyb3JDYXB0dXJlZCcsXG4gICdzZXJ2ZXJQcmVmZXRjaCdcbl07XG5cbi8qICAqL1xuXG5cblxudmFyIGNvbmZpZyA9ICh7XG4gIC8qKlxuICAgKiBPcHRpb24gbWVyZ2Ugc3RyYXRlZ2llcyAodXNlZCBpbiBjb3JlL3V0aWwvb3B0aW9ucylcbiAgICovXG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBvcHRpb25NZXJnZVN0cmF0ZWdpZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc3VwcHJlc3Mgd2FybmluZ3MuXG4gICAqL1xuICBzaWxlbnQ6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBTaG93IHByb2R1Y3Rpb24gbW9kZSB0aXAgbWVzc2FnZSBvbiBib290P1xuICAgKi9cbiAgcHJvZHVjdGlvblRpcDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgZGV2dG9vbHNcbiAgICovXG4gIGRldnRvb2xzOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlY29yZCBwZXJmXG4gICAqL1xuICBwZXJmb3JtYW5jZTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEVycm9yIGhhbmRsZXIgZm9yIHdhdGNoZXIgZXJyb3JzXG4gICAqL1xuICBlcnJvckhhbmRsZXI6IG51bGwsXG5cbiAgLyoqXG4gICAqIFdhcm4gaGFuZGxlciBmb3Igd2F0Y2hlciB3YXJuc1xuICAgKi9cbiAgd2FybkhhbmRsZXI6IG51bGwsXG5cbiAgLyoqXG4gICAqIElnbm9yZSBjZXJ0YWluIGN1c3RvbSBlbGVtZW50c1xuICAgKi9cbiAgaWdub3JlZEVsZW1lbnRzOiBbXSxcblxuICAvKipcbiAgICogQ3VzdG9tIHVzZXIga2V5IGFsaWFzZXMgZm9yIHYtb25cbiAgICovXG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBrZXlDb2RlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgcmVnaXN0ZXJlZCBhcyBhXG4gICAqIGNvbXBvbmVudC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGlzUmVzZXJ2ZWRUYWc6IG5vLFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbXBvbmVudFxuICAgKiBwcm9wLiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92ZXJ3cml0dGVuLlxuICAgKi9cbiAgaXNSZXNlcnZlZEF0dHI6IG5vLFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHRhZyBpcyBhbiB1bmtub3duIGVsZW1lbnQuXG4gICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICovXG4gIGlzVW5rbm93bkVsZW1lbnQ6IG5vLFxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5hbWVzcGFjZSBvZiBhbiBlbGVtZW50XG4gICAqL1xuICBnZXRUYWdOYW1lc3BhY2U6IG5vb3AsXG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSByZWFsIHRhZyBuYW1lIGZvciB0aGUgc3BlY2lmaWMgcGxhdGZvcm0uXG4gICAqL1xuICBwYXJzZVBsYXRmb3JtVGFnTmFtZTogaWRlbnRpdHksXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIGJvdW5kIHVzaW5nIHByb3BlcnR5LCBlLmcuIHZhbHVlXG4gICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICovXG4gIG11c3RVc2VQcm9wOiBubyxcblxuICAvKipcbiAgICogUG
33378VyZm9ybSB1cGRhdGVzIGFzeW5jaHJvbm91c2x5LiBJbnRlbmRlZCB0byBiZSB1c2VkIGJ5IFZ1ZSBUZXN0IFV0aWxzXG4gICAqIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHJlZHVjZSBwZXJmb3JtYW5jZSBpZiBzZXQgdG8gZmFsc2UuXG4gICAqL1xuICBhc3luYzogdHJ1ZSxcblxuICAvKipcbiAgICogRXhwb3NlZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgICovXG4gIF9saWZlY3ljbGVIb29rczogTElGRUNZQ0xFX0hPT0tTXG59KTtcblxuLyogICovXG5cbi8qKlxuICogdW5pY29kZSBsZXR0ZXJzIHVzZWQgZm9yIHBhcnNpbmcgaHRtbCB0YWdzLCBjb21wb25lbnQgbmFtZXMgYW5kIHByb3BlcnR5IHBhdGhzLlxuICogdXNpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1My9zZW1hbnRpY3Mtc2NyaXB0aW5nLmh0bWwjcG90ZW50aWFsY3VzdG9tZWxlbWVudG5hbWVcbiAqIHNraXBwaW5nIFxcdTEwMDAwLVxcdUVGRkZGIGR1ZSB0byBpdCBmcmVlemluZyB1cCBQaGFudG9tSlNcbiAqL1xudmFyIHVuaWNvZGVSZWdFeHAgPSAvYS16QS1aXFx1MDBCN1xcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwM0YtXFx1MjA0MFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRC87XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzdHJpbmcgc3RhcnRzIHdpdGggJCBvciBfXG4gKi9cbmZ1bmN0aW9uIGlzUmVzZXJ2ZWQgKHN0cikge1xuICB2YXIgYyA9IChzdHIgKyAnJykuY2hhckNvZGVBdCgwKTtcbiAgcmV0dXJuIGMgPT09IDB4MjQgfHwgYyA9PT0gMHg1RlxufVxuXG4vKipcbiAqIERlZmluZSBhIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBkZWYgKG9iaiwga2V5LCB2YWwsIGVudW1lcmFibGUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgdmFsdWU6IHZhbCxcbiAgICBlbnVtZXJhYmxlOiAhIWVudW1lcmFibGUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG4vKipcbiAqIFBhcnNlIHNpbXBsZSBwYXRoLlxuICovXG52YXIgYmFpbFJFID0gbmV3IFJlZ0V4cCgoXCJbXlwiICsgKHVuaWNvZGVSZWdFeHAuc291cmNlKSArIFwiLiRfXFxcXGRdXCIpKTtcbmZ1bmN0aW9uIHBhcnNlUGF0aCAocGF0aCkge1xuICBpZiAoYmFpbFJFLnRlc3QocGF0aCkpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFvYmopIHsgcmV0dXJuIH1cbiAgICAgIG9iaiA9IG9ialtzZWdtZW50c1tpXV07XG4gICAgfVxuICAgIHJldHVybiBvYmpcbiAgfVxufVxuXG4vKiAgKi9cblxuLy8gY2FuIHdlIHVzZSBfX3Byb3RvX18/XG52YXIgaGFzUHJvdG8gPSAnX19wcm90b19fJyBpbiB7fTtcblxuLy8gQnJvd3NlciBlbnZpcm9ubWVudCBzbmlmZmluZ1xudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xudmFyIGluV2VleCA9IHR5cGVvZiBXWEVudmlyb25tZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhIVdYRW52aXJvbm1lbnQucGxhdGZvcm07XG52YXIgd2VleFBsYXRmb3JtID0gaW5XZWV4ICYmIFdYRW52aXJvbm1lbnQucGxhdGZvcm0udG9Mb3dlckNhc2UoKTtcbnZhciBVQSA9IGluQnJvd3NlciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xudmFyIGlzSUUgPSBVQSAmJiAvbXNpZXx0cmlkZW50Ly50ZXN0KFVBKTtcbnZhciBpc0lFOSA9IFVBICYmIFVBLmluZGV4T2YoJ21zaWUgOS4wJykgPiAwO1xudmFyIGlzRWRnZSA9IFVBICYmIFVBLmluZGV4T2YoJ2VkZ2UvJykgPiAwO1xudmFyIGlzQW5kcm9pZCA9IChVQSAmJiBVQS5pbmRleE9mKCdhbmRyb2lkJykgPiAwKSB8fCAod2VleFBsYXRmb3JtID09PSAnYW5kcm9pZCcpO1xudmFyIGlzSU9TID0gKFVBICYmIC9pcGhvbmV8aXBhZHxpcG9kfGlvcy8udGVzdChVQSkpIHx8ICh3ZWV4UGxhdGZvcm0gPT09ICdpb3MnKTtcbnZhciBpc0Nocm9tZSA9IFVBICYmIC9jaHJvbWVcXC9cXGQrLy50ZXN0KFVBKSAmJiAhaXNFZGdlO1xudmFyIGlzUGhhbnRvbUpTID0gVUEgJiYgL3BoYW50b21qcy8udGVzdChVQSk7XG52YXIgaXNGRiA9IFVBICYmIFVBLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLyk7XG5cbi8vIEZpcmVmb3ggaGFzIGEgXCJ3YXRjaFwiIGZ1bmN0aW9uIG9uIE9iamVjdC5wcm90b3R5cGUuLi5cbnZhciBuYXRpdmVXYXRjaCA9ICh7fSkud2F0Y2g7XG5cbnZhciBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcbmlmIChpbkJyb3dzZXIpIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0cyA9IHt9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRzLCAncGFzc2l2ZScsICh7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSkpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjg1XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QtcGFzc2l2ZScsIG51bGwsIG9wdHMpO1xuICB9IGNhdGNoIChlKSB7fVxufVxuXG4vLyB0aGlzIG5lZWRzIHRvIGJlIGxhenktZXZhbGVkIGJlY2F1c2UgdnVlIG1heSBiZSByZXF1aXJlZCBiZWZvcmVcbi8vIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgY2FuIHNldCBWVUVfRU5WXG52YXIgX2lzU2VydmVyO1xudmFyIGlzU2VydmVyUmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICBpZiAoX2lzU2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWluQnJvd3NlciAmJiAhaW5XZWV4ICYmIHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBkZXRlY3QgcHJlc2VuY2Ugb2YgdnVlLXNlcnZlci1yZW5kZXJlciBhbmQgYXZvaWRcbiAgICAgIC8vIFdlYnBhY2sgc2hpbW1pbmcgdGhlIHByb2Nlc3NcbiAgICAgIF9pc1NlcnZlciA9IGdsb2JhbFsncHJvY2VzcyddICYmIGdsb2JhbFsncHJvY2VzcyddLmVudi5WVUVfRU5WID09PSAnc2VydmVyJztcbiAgICB9IGVsc2Uge1xuICAgICAgX2lzU2VydmVyID0gZmFsc2U7XG4gICAgfVxuICB9XG4gI
33378HJldHVybiBfaXNTZXJ2ZXJcbn07XG5cbi8vIGRldGVjdCBkZXZ0b29sc1xudmFyIGRldnRvb2xzID0gaW5Ccm93c2VyICYmIHdpbmRvdy5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gaXNOYXRpdmUgKEN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSAnZnVuY3Rpb24nICYmIC9uYXRpdmUgY29kZS8udGVzdChDdG9yLnRvU3RyaW5nKCkpXG59XG5cbnZhciBoYXNTeW1ib2wgPVxuICB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTeW1ib2wpICYmXG4gIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShSZWZsZWN0Lm93bktleXMpO1xuXG52YXIgX1NldDtcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLyAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbmlmICh0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTZXQpKSB7XG4gIC8vIHVzZSBuYXRpdmUgU2V0IHdoZW4gYXZhaWxhYmxlLlxuICBfU2V0ID0gU2V0O1xufSBlbHNlIHtcbiAgLy8gYSBub24tc3RhbmRhcmQgU2V0IHBvbHlmaWxsIHRoYXQgb25seSB3b3JrcyB3aXRoIHByaW1pdGl2ZSBrZXlzLlxuICBfU2V0ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2V0ICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gICAgU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBoYXMgKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0W2tleV0gPT09IHRydWVcbiAgICB9O1xuICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChrZXkpIHtcbiAgICAgIHRoaXMuc2V0W2tleV0gPSB0cnVlO1xuICAgIH07XG4gICAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFNldDtcbiAgfSgpKTtcbn1cblxuLyogICovXG5cbnZhciB3YXJuID0gbm9vcDtcbnZhciB0aXAgPSBub29wO1xudmFyIGdlbmVyYXRlQ29tcG9uZW50VHJhY2UgPSAobm9vcCk7IC8vIHdvcmsgYXJvdW5kIGZsb3cgY2hlY2tcbnZhciBmb3JtYXRDb21wb25lbnROYW1lID0gKG5vb3ApO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgaGFzQ29uc29sZSA9IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJztcbiAgdmFyIGNsYXNzaWZ5UkUgPSAvKD86XnxbLV9dKShcXHcpL2c7XG4gIHZhciBjbGFzc2lmeSA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlKGNsYXNzaWZ5UkUsIGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRvVXBwZXJDYXNlKCk7IH0pXG4gICAgLnJlcGxhY2UoL1stX10vZywgJycpOyB9O1xuXG4gIHdhcm4gPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIHZhciB0cmFjZSA9IHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJztcblxuICAgIGlmIChjb25maWcud2FybkhhbmRsZXIpIHtcbiAgICAgIGNvbmZpZy53YXJuSGFuZGxlci5jYWxsKG51bGwsIG1zZywgdm0sIHRyYWNlKTtcbiAgICB9IGVsc2UgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbVnVlIHdhcm5dOiBcIiArIG1zZyArIH
33378RyYWNlKSk7XG4gICAgfVxuICB9O1xuXG4gIHRpcCA9IGZ1bmN0aW9uIChtc2csIHZtKSB7XG4gICAgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS53YXJuKFwiW1Z1ZSB0aXBdOiBcIiArIG1zZyArIChcbiAgICAgICAgdm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnXG4gICAgICApKTtcbiAgICB9XG4gIH07XG5cbiAgZm9ybWF0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uICh2bSwgaW5jbHVkZUZpbGUpIHtcbiAgICBpZiAodm0uJHJvb3QgPT09IHZtKSB7XG4gICAgICByZXR1cm4gJzxSb290PidcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygdm0gPT09ICdmdW5jdGlvbicgJiYgdm0uY2lkICE9IG51bGxcbiAgICAgID8gdm0ub3B0aW9uc1xuICAgICAgOiB2bS5faXNWdWVcbiAgICAgICAgPyB2bS4kb3B0aW9ucyB8fCB2bS5jb25zdHJ1Y3Rvci5vcHRpb25zXG4gICAgICAgIDogdm07XG4gICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgfHwgb3B0aW9ucy5fY29tcG9uZW50VGFnO1xuICAgIHZhciBmaWxlID0gb3B0aW9ucy5fX2ZpbGU7XG4gICAgaWYgKCFuYW1lICYmIGZpbGUpIHtcbiAgICAgIHZhciBtYXRjaCA9IGZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwudnVlJC8pO1xuICAgICAgbmFtZSA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAobmFtZSA/IChcIjxcIiArIChjbGFzc2lmeShuYW1lKSkgKyBcIj5cIikgOiBcIjxBbm9ueW1vdXM+XCIpICtcbiAgICAgIChmaWxlICYmIGluY2x1ZGVGaWxlICE9PSBmYWxzZSA/IChcIiBhdCBcIiArIGZpbGUpIDogJycpXG4gICAgKVxuICB9O1xuXG4gIHZhciByZXBlYXQgPSBmdW5jdGlvbiAoc3RyLCBuKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIHdoaWxlIChuKSB7XG4gICAgICBpZiAobiAlIDIgPT09IDEpIHsgcmVzICs9IHN0cjsgfVxuICAgICAgaWYgKG4gPiAxKSB7IHN0ciArPSBzdHI7IH1cbiAgICAgIG4gPj49IDE7XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfTtcblxuICBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gZnVuY3Rpb24gKHZtKSB7XG4gICAgaWYgKHZtLl9pc1Z1ZSAmJiB2bS4kcGFyZW50KSB7XG4gICAgICB2Y
33378XIgdHJlZSA9IFtdO1xuICAgICAgdmFyIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICB3aGlsZSAodm0pIHtcbiAgICAgICAgaWYgKHRyZWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciBsYXN0ID0gdHJlZVt0cmVlLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0LmNvbnN0cnVjdG9yID09PSB2bS5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlKys7XG4gICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID4gMCkge1xuICAgICAgICAgICAgdHJlZVt0cmVlLmxlbmd0aCAtIDFdID0gW2xhc3QsIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZV07XG4gICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cmVlLnB1c2godm0pO1xuICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcblxcbmZvdW5kIGluXFxuXFxuJyArIHRyZWVcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodm0sIGkpIHsgcmV0dXJuIChcIlwiICsgKGkgPT09IDAgPyAnLS0tPiAnIDogcmVwZWF0KCcgJywgNSArIGkgKiAyKSkgKyAoQXJyYXkuaXNBcnJheSh2bSlcbiAgICAgICAgICAgID8gKChmb3JtYXRDb21wb25lbnROYW1lKHZtWzBdKSkgKyBcIi4uLiAoXCIgKyAodm1bMV0pICsgXCIgcmVjdXJzaXZlIGNhbGxzKVwiKVxuICAgICAgICAgICAgOiBmb3JtYXRDb21wb25lbnROYW1lKHZtKSkpOyB9KVxuICAgICAgICAuam9pbignXFxuJylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcIlxcblxcbihmb3VuZCBpbiBcIiArIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIilcIilcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgdWlkID0gMDtcblxuLyoqXG4gKiBBIGRlcCBpcyBhbiBvYnNlcnZhYmxlIHRoYXQgY2FuIGhhdmUgbXVsdGlwbGVcbiAqIGRpcmVjdGl2ZXMgc3Vic2NyaWJpbmcgdG8gaXQuXG4gKi9cbnZhciBEZXAgPSBmdW5jdGlvbiBEZXAgKCkge1xuICB0aGlzLmlkID0gdWlkKys7XG4gIHRoaXMuc3VicyA9IFtdO1xufTtcblxuRGVwLnByb3RvdHlwZS5hZGRTdWIgPSBmdW5jdGlvbiBhZGRTdWIgKHN1Yikge1xuICB0aGlzLnN1YnMucHVzaChzdWIpO1xufTtcblxuRGVwLnByb3RvdHlwZS5yZW1vdmVTdWIgPSBmdW5jdGlvbiByZW1vdmVTdWIgKHN1Yikge1xuICByZW1vdmUodGhpcy5zdWJzLCBzdWIpO1xufTtcblxuRGVwLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICBpZiAoRGVwLnRhcmdldCkge1xuICAgIERlcC50YXJnZXQuYWRkRGVwKHRoaXMpO1xuICB9XG59O1xuXG5EZXAucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSAoKSB7XG4gIC8vIHN0YWJpbGl6ZSB0aGUgc3Vic2NyaWJlciBsaXN0IGZpcnN0XG4gIHZhciBzdWJzID0gdGhpcy5zdWJzLnNsaWNlKCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjb25maWcuYXN5bmMpIHtcbiAgICAvLyBzdWJzIGFyZW4ndCBzb3J0ZWQgaW4gc2NoZWR1bGVyIGlmIG5vdCBydW5uaW5nIGFzeW5jXG4gICAgLy8gd2UgbmVlZCB0byBzb3J0IHRoZW0gbm93IHRvIG1ha2Ugc3VyZSB0aGV5IGZpcmUgaW4gY29ycmVjdFxuICAgIC8vIG9yZGVyXG4gICAgc3Vicy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmlkIC0gYi5pZDsgfSk7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdWJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHN1YnNbaV0udXBkYXRlKCk7XG4gIH1cbn07XG5cbi8vIFRoZSBjdXJyZW50IHRhcmdldCB3YXRjaGVyIGJlaW5nIGV2YWx1YXRlZC5cbi8vIFRoaXMgaXMgZ2xvYmFsbHkgdW5pcXVlIGJlY2F1c2Ugb25seSBvbmUgd2F0Y2hlclxuLy8gY2FuIGJlIGV2YWx1YXRlZCBhdCBhIHRpbWUuXG5EZXAudGFyZ2V0ID0gbnVsbDtcbnZhciB0YXJnZXRTdGFjayA9IFtdO1xuXG5mdW5jdGlvbiBwdXNoVGFyZ2V0ICh0YXJnZXQpIHtcbiAgdGFyZ2V0U3RhY2sucHVzaCh0YXJnZXQpO1xuICBEZXAudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBwb3BUYXJnZXQgKCkge1xuICB0YXJnZXRTdGFjay5wb3AoKTtcbiAgRGVwLnRhcmdldCA9IHRhcmdldFN0YWNrW3RhcmdldFN0YWNrLmxlbmd0aCAtIDFdO1xufVxuXG4vKiAgKi9cblxudmFyIFZOb2RlID0gZnVuY3Rpb24gVk5vZGUgKFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICB0ZXh0LFxuICBlbG0sXG4gIGNvbnRleHQsXG4gIGNvbXBvbmVudE9wdGlvbnMsXG4gIGFzeW5jRmFjdG9yeVxuKSB7XG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIHRoaXMudGV4dCA9IHRleHQ7XG4gIHRoaXMuZWxtID0gZWxtO1xuICB0aGlzLm5zID0gdW5kZWZpbmVkO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLmZuQ29udGV4dCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5mbk9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIHRoaXMuZm5TY29wZUlkID0gdW5kZWZpbmVkO1xuICB0aGlzLmtleSA9IGRhdGEgJiYgZGF0YS5rZXk7XG4gIHRoaXMuY29tcG9uZW50T3B0aW9ucyA9IGNvbXBvbmVudE9wdGlvbnM7XG4gIHRoaXMuY29tcG9uZW50SW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xuICB0aGlzLnJhdyA9IGZhbHNlO1xuICB0aGlzLmlzU3RhdGljID0gZmFsc2U7XG4gIHRoaXMuaXNSb290SW5zZXJ0ID0gdHJ1ZTtcbiAgdGhpcy5pc0NvbW1lbnQgPSBmYWxzZTtcbiAgdGhpcy5pc0Nsb25lZCA9IGZhbHNlO1xuICB0aGlzLmlzT25jZSA9IGZhbHNlO1xuICB0aGlzLmFzeW5jRmFjdG9yeSA9IGFzeW5jRmFjdG9yeTtcbiAgdGhpcy5hc3luY01ldGEgPSB1bmRlZmluZWQ7XG4gIHRoaXMuaXNBc3luY1BsYWNlaG9sZGVyID0gZmFsc2U7XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBjaGlsZDogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG4vLyBERVBSRUNBVEVEOiBhbGlhcyBmb3IgY29tcG9uZW50SW5zdGFuY2UgZm9yIGJhY2t3YXJkcyBjb21wYXQuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xucHJvdG90eXBlQWNjZXNzb3JzLmNoaWxkLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2Vcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBWTm9kZS5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG52YXIgY3JlYXRlRW1wdHlWTm9kZSA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gIGlmICggdGV4dCA9PT0gdm9pZCAwICkgdGV4dCA9ICcnO1xuXG4gIHZhciBub2RlID0gbmV3IFZOb2RlKCk7XG4gIG5vZGUudGV4dCA9IHRleHQ7XG4gIG5vZGUuaXNDb21tZW50ID0gdHJ1ZTtcbiAgcmV0dXJuIG5vZGVcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVRleHRWTm9kZSAodmFsKSB7XG4gIHJldHVybi
33378BuZXcgVk5vZGUodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgU3RyaW5nKHZhbCkpXG59XG5cbi8vIG9wdGltaXplZCBzaGFsbG93IGNsb25lXG4vLyB1c2VkIGZvciBzdGF0aWMgbm9kZXMgYW5kIHNsb3Qgbm9kZXMgYmVjYXVzZSB0aGV5IG1heSBiZSByZXVzZWQgYWNyb3NzXG4vLyBtdWx0aXBsZSByZW5kZXJzLCBjbG9uaW5nIHRoZW0gYXZvaWRzIGVycm9ycyB3aGVuIERPTSBtYW5pcHVsYXRpb25zIHJlbHlcbi8vIG9uIHRoZWlyIGVsbSByZWZlcmVuY2UuXG5mdW5jdGlvbiBjbG9uZVZOb2RlICh2bm9kZSkge1xuICB2YXIgY2xvbmVkID0gbmV3IFZOb2RlKFxuICAgIHZub2RlLnRhZyxcbiAgICB2bm9kZS5kYXRhLFxuICAgIC8vICM3OTc1XG4gICAgLy8gY2xvbmUgY2hpbGRyZW4gYXJyYXkgdG8gYXZvaWQgbXV0YXRpbmcgb3JpZ2luYWwgaW4gY2FzZSBvZiBjbG9uaW5nXG4gICAgLy8gYSBjaGlsZC5cbiAgICB2bm9kZS5jaGlsZHJlbiAmJiB2bm9kZS5jaGlsZHJlbi5zbGljZSgpLFxuICAgIHZub2RlLnRleHQsXG4gICAgdm5vZGUuZWxtLFxuICAgIHZub2RlLmNvbnRleHQsXG4gICAgdm5vZGUuY29tcG9uZW50T3B0aW9ucyxcbiAgICB2bm9kZS5hc3luY0ZhY3RvcnlcbiAgKTtcbiAgY2xvbmVkLm5zID0gdm5vZGUubnM7XG4gIGNsb25lZC5pc1N0YXRpYyA9IHZub2RlLmlzU3RhdGljO1xuICBjbG9uZWQua2V5ID0gdm5vZGUua2V5O1xuICBjbG9uZWQuaXNDb21tZW50ID0gdm5vZGUuaXNDb21tZW50O1xuICBjbG9uZWQuZm5Db250ZXh0ID0gdm5vZGUuZm5Db250ZXh0O1xuICBjbG9uZWQuZm5PcHRpb25zID0gdm5vZGUuZm5PcHRpb25zO1xuICBjbG9uZWQuZm5TY29wZUlkID0gdm5vZGUuZm5TY29wZUlkO1xuICBjbG9uZWQuYXN5bmNNZXRhID0gdm5vZGUuYXN5bmNNZXRhO1xuICBjbG9uZWQuaXNDbG9uZWQgPSB0cnVlO1xuICByZXR1cm4gY2xvbmVkXG59XG5cbi8qXG4gKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGhcbiAqIGR5bmFtaWNhbGx5IGFjY2Vzc2luZyBtZXRob2RzIG9uIEFycmF5IHByb3RvdHlwZVxuICovXG5cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xudmFyIGFycmF5TWV0aG9kcyA9IE9iamVjdC5jcmVhdGUoYXJyYXlQcm90byk7XG5cbnZhciBtZXRob2RzVG9QYXRjaCA9IFtcbiAgJ3B1c2gnLFxuICAncG9wJyxcbiAgJ3NoaWZ0JyxcbiAgJ3Vuc2hpZnQnLFxuICAnc3BsaWNlJyxcbiAgJ3NvcnQnLFxuICAncmV2ZXJzZSdcbl07XG5cbi8qKlxuICogSW50ZXJjZXB0IG11dGF0aW5nIG1ldGhvZHMgYW5kIGVtaXQgZXZlbnRzXG4gKi9cbm1ldGhvZHNUb1BhdGNoLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAvLyBjYWNoZSBvcmlnaW5hbCBtZXRob2RcbiAgdmFyIG9yaWdpbmFsID0gYXJyYXlQcm90b1ttZXRob2RdO1xuICBkZWYoYXJyYXlNZXRob2RzLCBtZXRob2QsIGZ1bmN0aW9uIG11dGF0b3IgKCkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIHZhciByZXN1bHQgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB2YXIgb2IgPSB0aGlzLl9fb2JfXztcbiAgICB2YXIgaW5zZXJ0ZWQ7XG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgY2FzZSAndW5zaGlmdCc6XG4gICAgICAgIGluc2VydGVkID0gYXJncztcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3NwbGljZSc6XG4gICAgICAgIGluc2VydGVkID0gYXJncy5zbGljZSgyKTtcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gICAgaWYgKGluc2VydGVkKSB7IG9iLm9ic2VydmVBcnJheShpbnNlcnRlZCk7IH1cbiAgICAvLyBub3RpZnkgY2hhbmdlXG4gICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgIHJldHVybiByZXN1bHRcbiAgfSk7XG59KTtcblxuLyogICovXG5cbnZhciBhcnJheUtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhcnJheU1ldGhvZHMpO1xuXG4vKipcbiAqIEluIHNvbWUgY2FzZXMgd2UgbWF5IHdhbnQgdG8gZGlzYWJsZSBvYnNlcnZhdGlvbiBpbnNpZGUgYSBjb21wb25lbnQnc1xuICogdXBkYXRlIGNvbXB1dGF0aW9uLlxuICovXG52YXIgc2hvdWxkT2JzZXJ2ZSA9IHRydWU7XG5cbmZ1bmN0aW9uIHRvZ2dsZU9ic2VydmluZyAodmFsdWUpIHtcbiAgc2hvdWxkT2JzZXJ2ZSA9IHZhbHVlO1xufVxuXG4vKipcbiAqIE9ic2VydmVyIGNsYXNzIHRoYXQgaXMgYXR0YWNoZWQgdG8gZWFjaCBvYnNlcnZlZFxuICogb2JqZWN0LiBPbmNlIGF0dGFjaGVkLCB0aGUgb2JzZXJ2ZXIgY29udmVydHMgdGhlIHRhcmdldFxuICogb2JqZWN0J3MgcHJvcGVydHkga2V5cyBpbnRvIGdldHRlci9zZXR0ZXJzIHRoYXRcbiAqIGNvbGxlY3QgZGVwZW5kZW5jaWVzIGFuZCBkaXNwYXRjaCB1cGRhdGVzLlxuICovXG52YXIgT2JzZXJ2ZXIgPSBmdW5jdGlvbiBPYnNlcnZlciAodmFsdWUpIHtcbiAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB0aGlzLmRlcCA9IG5ldyBEZXAoKTtcbiAgdGhpcy52bUNvdW50ID0gMDtcbiAgZGVmKHZhbHVlLCAnX19vYl9fJywgdGhpcyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmIChoYXNQcm90bykge1xuICAgICAgcHJvdG9BdWdtZW50KHZhbHVlLCBhcnJheU1ldGhvZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb3B5QXVnbWVudCh2YWx1ZSwgYXJyYXlNZXRob2RzLCBhcnJheUtleXMpO1xuICAgIH1cbiAgICB0aGlzLm9ic2VydmVBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy53YWxrKHZhbHVlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBXYWxrIHRocm91Z2ggYWxsIHByb3BlcnRpZXMgYW5kIGNvbnZlcnQgdGhlbSBpbnRvXG4gKiBnZXR0ZXIvc2V0dGVycy4gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW5cbiAqIHZhbHVlIHR5cGUgaXMgT2JqZWN0LlxuICovXG5PYnNlcnZlci5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIHdhbGsgKG9iaikge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKG9iaiwga2V5c1tpXSk7XG4gIH1cbn07XG5cbi8qKlxuICogT2JzZXJ2ZSBhIGxpc3Qgb2YgQXJyYXkgaXRlbXMuXG4gKi9cbk9ic2VydmVyLnByb3RvdHlwZS5vYnNlcnZlQXJyYXkgPSBmdW5jdGlvbiBvYnNlcnZlQXJyYXkgKGl0ZW1zKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgb2JzZXJ2ZShpdGVtc1tpXSk7XG4gIH1cbn07XG5cbi8vIGhlbHBlcnNcblxuLyoqXG4gKiBBdWdtZW50IGEgdGFyZ2V0IE9iamVjdCBvciBBcnJheSBieSBpbnRlcmNlcHRpbmdcbiAqIHRoZSBwcm90b3R5cGUgY2hhaW4gdXNpbmcgX19wcm90b19fXG4gKi9cbmZ1bmN0aW9uIHByb3RvQXVnbWVudCAodGFyZ2V0LCBzcmMpIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbiAgdGFyZ2V0Ll9fcHJvdG9fXyA9IHNyYztcbiAgLyogZXNsaW50LWVuYWJsZSBuby1wcm90byAqL1xufVxuXG4vKipcbiAqIEF1Z21lbnQgYSB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGRlZmluaW5nXG4gKiBoaWRkZW4gcHJvcGVydGllcy5cbiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGNvcHlBdWdtZW50ICh0YXJnZXQsIHNyYywga2V5cykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgZGVmKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZSBmb3IgYSB2YWx1ZSxcbiAqIHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBpZiBzdWNjZXNzZnVsbHkgb2JzZXJ2ZWQsXG4gKiBvciB0aGUgZXhpc3Rpbmcgb2JzZXJ2ZXIgaWYgdGhlIHZhbHVlIGFscmVhZHkgaGFzIG9uZS5cbiAqL1xuZnVuY3Rpb24gb2JzZXJ2ZSAodmFsdWUsIGFzUm9vdERhdGEpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgdmFsdWUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVyblxuICB9XG4gI
33378HZhciBvYjtcbiAgaWYgKGhhc093bih2YWx1ZSwgJ19fb2JfXycpICYmIHZhbHVlLl9fb2JfXyBpbnN0YW5jZW9mIE9ic2VydmVyKSB7XG4gICAgb2IgPSB2YWx1ZS5fX29iX187XG4gIH0gZWxzZSBpZiAoXG4gICAgc2hvdWxkT2JzZXJ2ZSAmJlxuICAgICFpc1NlcnZlclJlbmRlcmluZygpICYmXG4gICAgKEFycmF5LmlzQXJyYXkodmFsdWUpIHx8IGlzUGxhaW5PYmplY3QodmFsdWUpKSAmJlxuICAgIE9iamVjdC5pc0V4dGVuc2libGUodmFsdWUpICYmXG4gICAgIXZhbHVlLl9pc1Z1ZVxuICApIHtcbiAgICBvYiA9IG5ldyBPYnNlcnZlcih2YWx1ZSk7XG4gIH1cbiAgaWYgKGFzUm9vdERhdGEgJiYgb2IpIHtcbiAgICBvYi52bUNvdW50Kys7XG4gIH1cbiAgcmV0dXJuIG9iXG59XG5cbi8qKlxuICogRGVmaW5lIGEgcmVhY3RpdmUgcHJvcGVydHkgb24gYW4gT2JqZWN0LlxuICovXG5mdW5jdGlvbiBkZWZpbmVSZWFjdGl2ZSQkMSAoXG4gIG9iaixcbiAga2V5LFxuICB2YWwsXG4gIGN1c3RvbVNldHRlcixcbiAgc2hhbGxvd1xuKSB7XG4gIHZhciBkZXAgPSBuZXcgRGVwKCk7XG5cbiAgdmFyIHByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7XG4gIGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5jb25maWd1cmFibGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBjYXRlciBmb3IgcHJlLWRlZmluZWQgZ2V0dGVyL3NldHRlcnNcbiAgdmFyIGdldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LmdldDtcbiAgdmFyIHNldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LnNldDtcbiAgaWYgKCghZ2V0dGVyIHx8IHNldHRlcikgJiYgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIHZhbCA9IG9ialtrZXldO1xuICB9XG5cbiAgdmFyIGNoaWxkT2IgPSAhc2hhbGxvdyAmJiBvYnNlcnZlKHZhbCk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gcmVhY3RpdmVHZXR0ZXIgKCkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgIGRlcC5kZXBlbmQoKTtcbiAgICAgICAgaWYgKGNoaWxkT2IpIHtcbiAgICAgICAgICBjaGlsZE9iLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRlcGVuZEFycmF5KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiByZWFjdGl2ZVNldHRlciAobmV3VmFsKSB7XG4gICAgICB2Y
33378XIgdmFsdWUgPSBnZXR0ZXIgPyBnZXR0ZXIuY2FsbChvYmopIDogdmFsO1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICBpZiAobmV3VmFsID09PSB2YWx1ZSB8fCAobmV3VmFsICE9PSBuZXdWYWwgJiYgdmFsdWUgIT09IHZhbHVlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjdXN0b21TZXR0ZXIpIHtcbiAgICAgICAgY3VzdG9tU2V0dGVyKCk7XG4gICAgICB9XG4gICAgICAvLyAjNzk4MTogZm9yIGFjY2Vzc29yIHByb3BlcnRpZXMgd2l0aG91dCBzZXR0ZXJcbiAgICAgIGlmIChnZXR0ZXIgJiYgIXNldHRlcikgeyByZXR1cm4gfVxuICAgICAgaWYgKHNldHRlcikge1xuICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBuZXdWYWw7XG4gICAgICB9XG4gICAgICBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZShuZXdWYWwpO1xuICAgICAgZGVwLm5vdGlmeSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgb24gYW4gb2JqZWN0LiBBZGRzIHRoZSBuZXcgcHJvcGVydHkgYW5kXG4gKiB0cmlnZ2VycyBjaGFuZ2Ugbm90aWZpY2F0aW9uIGlmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0XG4gKiBhbHJlYWR5IGV4aXN0LlxuICovXG5mdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWwpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpXG4gICkge1xuICAgIHdhcm4oKFwiQ2Fubm90IHNldCByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIgKyAoKHRhcmdldCkpKSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSk7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGlmIChrZXkgaW4gdGFyZ2V0ICYmICEoa2V5IGluIE9iamVjdC5wcm90b3R5cGUpKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ0F2b2lkIGFkZGluZyByZWFjdGl2ZSBwcm9wZXJ0aWVzIHRvIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgJ2F0IHJ1bnRpbWUgLSBkZWNsYXJlIGl0IHVwZnJvbnQgaW4gdGhlIGRhdGEgb3B0aW9uLidcbiAgICApO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBpZiAoIW9iKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGRlZmluZVJlYWN0aXZlJCQxKG9iLnZhbHVlLCBrZXksIHZhbCk7XG4gIG9iLmRlcC5ub3RpZnkoKTtcbiAgcmV0dXJuIHZhbFxufVxuXG4vKipcbiAqIERlbGV0ZSBhIHByb3BlcnR5IGFuZCB0cmlnZ2VyIGNoYW5nZSBpZiBuZWNlc3NhcnkuXG4gKi9cbmZ1bmN0aW9uIGRlbCAodGFyZ2V0LCBrZXkpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpXG4gICkge1xuICAgIHdhcm4oKFwiQ2Fubm90IGRlbGV0ZSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIgKyAoKHRhcmdldCkpKSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEpO1xuICAgIHJldHVyblxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ0F2b2lkIGRlbGV0aW5nIHByb3BlcnRpZXMgb24gYSBWdWUgaW5zdGFuY2Ugb3IgaXRzIHJvb3QgJGRhdGEgJyArXG4gICAgICAnLSBqdXN0IHNldCBpdCB0byBudWxsLidcbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIGlmICghaGFzT3duKHRhcmdldCwga2V5KSkge1xuICAgIHJldHVyblxuICB9XG4gIGRlbGV0ZSB0YXJnZXRba2V5XTtcbiAgaWYgKCFvYikge1xuICAgIHJldHVyblxuICB9XG4gIG9iLmRlcC5ub3RpZnkoKTtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGRlcGVuZGVuY2llcyBvbiBhcnJheSBlbGVtZW50cyB3aGVuIHRoZSBhcnJheSBpcyB0b3VjaGVkLCBzaW5jZVxuICogd2UgY2Fubm90IGludGVyY2VwdCBhcnJheSBlbGVtZW50IGFjY2VzcyBsaWtlIHByb3BlcnR5IGdldHRlcnMuXG4gKi9cbmZ1bmN0aW9uIGRlcGVuZEFycmF5ICh2YWx1ZSkge1xuICBmb3IgKHZhciBlID0gKHZvaWQgMCksIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZSA9IHZhbHVlW2ldO1xuICAgIGUgJiYgZS5fX29iX18gJiYgZS5fX29iX18uZGVwLmRlcGVuZCgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICBkZXBlbmRBcnJheShlKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogT3B0aW9uIG92ZXJ3cml0aW5nIHN0cmF0ZWdpZXMgYXJlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZVxuICogaG93IHRvIG1lcmdlIGEgcGFyZW50IG9wdGlvbiB2YWx1ZSBhbmQgYSBjaGlsZCBvcHRpb25cbiAqIHZhbHVlIGludG8gdGhlIGZpbmFsIHZhbHVlLlxuICovXG52YXIgc3RyYXRzID0gY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcblxuLyoqXG4gKiBPcHRpb25zIHdpdGggcmVzdHJpY3Rpb25zXG4gKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHN0cmF0cy5lbCA9IHN0cmF0cy5wcm9wc0RhdGEgPSBmdW5jdGlvbiAocGFyZW50LCBjaGlsZCwgdm0sIGtleSkge1xuICAgIGlmICghdm0pIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwib3B0aW9uIFxcXCJcIiArIGtleSArIFwiXFxcIiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnN0YW5jZSBcIiArXG4gICAgICAgICdjcmVhdGlvbiB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybi
33378BkZWZhdWx0U3RyYXQocGFyZW50LCBjaGlsZClcbiAgfTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgdGhhdCByZWN1cnNpdmVseSBtZXJnZXMgdHdvIGRhdGEgb2JqZWN0cyB0b2dldGhlci5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhICh0bywgZnJvbSkge1xuICBpZiAoIWZyb20pIHsgcmV0dXJuIHRvIH1cbiAgdmFyIGtleSwgdG9WYWwsIGZyb21WYWw7XG5cbiAgdmFyIGtleXMgPSBoYXNTeW1ib2xcbiAgICA/IFJlZmxlY3Qub3duS2V5cyhmcm9tKVxuICAgIDogT2JqZWN0LmtleXMoZnJvbSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICAvLyBpbiBjYXNlIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBvYnNlcnZlZC4uLlxuICAgIGlmIChrZXkgPT09ICdfX29iX18nKSB7IGNvbnRpbnVlIH1cbiAgICB0b1ZhbCA9IHRvW2tleV07XG4gICAgZnJvbVZhbCA9IGZyb21ba2V5XTtcbiAgICBpZiAoIWhhc093bih0bywga2V5KSkge1xuICAgICAgc2V0KHRvLCBrZXksIGZyb21WYWwpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0b1ZhbCAhPT0gZnJvbVZhbCAmJlxuICAgICAgaXNQbGFpbk9iamVjdCh0b1ZhbCkgJiZcbiAgICAgIGlzUGxhaW5PYmplY3QoZnJvbVZhbClcbiAgICApIHtcbiAgICAgIG1lcmdlRGF0YSh0b1ZhbCwgZnJvbVZhbCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG4vKipcbiAqIERhdGFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhT3JGbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIC8vIGluIGEgVnVlLmV4dGVuZCBtZXJnZSwgYm90aCBzaG91bGQgYmUgZnVuY3Rpb25zXG4gICAgaWYgKCFjaGlsZFZhbCkge1xuICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgIH1cbiAgICBpZiAoIXBhcmVudFZhbCkge1xuICAgICAgcmV0dXJuIGNoaWxkVmFsXG4gICAgfVxuICAgIC8vIHdoZW4gcGFyZW50VmFsICYgY2hpbGRWYWwgYXJlIGJvdGggcHJlc2VudCxcbiAgICAvLyB3ZSBuZWVkIHRvIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgICAvLyBtZXJnZWQgcmVzdWx0IG9mIGJvdGggZnVuY3Rpb25zLi4uIG5vIG5lZWQgdG9cbiAgICAvLyBjaGVjayBpZiBwYXJlbnRWYWwgaXMgYSBmdW5jdGlvbiBoZXJlIGJlY2F1c2VcbiAgICAvLyBpdCBoYXMgdG8gYmUgYSBmdW5jdGlvbiB0byBwYXNzIHByZXZpb3VzIG1lcmdlcy5cbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkRGF0YUZuICgpIHtcbiAgICAgIHJldHVybiBtZXJnZURhdGEoXG4gICAgICAgIHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkVmFsLmNhbGwodGhpcywgdGh
33378pcykgOiBjaGlsZFZhbCxcbiAgICAgICAgdHlwZW9mIHBhcmVudFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IHBhcmVudFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogcGFyZW50VmFsXG4gICAgICApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZWRJbnN0YW5jZURhdGFGbiAoKSB7XG4gICAgICAvLyBpbnN0YW5jZSBtZXJnZVxuICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGNoaWxkVmFsLmNhbGwodm0sIHZtKVxuICAgICAgICA6IGNoaWxkVmFsO1xuICAgICAgdmFyIGRlZmF1bHREYXRhID0gdHlwZW9mIHBhcmVudFZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHBhcmVudFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgOiBwYXJlbnRWYWw7XG4gICAgICBpZiAoaW5zdGFuY2VEYXRhKSB7XG4gICAgICAgIHJldHVybiBtZXJnZURhdGEoaW5zdGFuY2VEYXRhLCBkZWZhdWx0RGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0RGF0YVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5zdHJhdHMuZGF0YSA9IGZ1bmN0aW9uIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm1cbikge1xuICBpZiAoIXZtKSB7XG4gICAgaWYgKGNoaWxkVmFsICYmIHR5cGVvZiBjaGlsZFZhbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnVGhlIFwiZGF0YVwiIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiAnICtcbiAgICAgICAgJ3RoYXQgcmV0dXJucyBhIHBlci1pbnN0YW5jZSB2YWx1ZSBpbiBjb21wb25lbnQgJyArXG4gICAgICAgICdkZWZpbml0aW9ucy4nLFxuICAgICAgICB2bVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsKVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pXG59O1xuXG4vKipcbiAqIEhvb2tzIGFuZCBwcm9wcyBhcmUgbWVyZ2VkIGFzIGFycmF5cy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VIb29rIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbFxuKSB7XG4gIHZhciByZXMgPSBjaGlsZFZhbFxuICAgID8gcGFyZW50VmFsXG4gICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRWYWwpXG4gICAgICAgID8gY2hpbGRWYWxcbiAgICAgICAgOiBbY2hpbGRWYWxdXG4gICAgOiBwYXJlbnRWYWw7XG4gIHJldHVybiByZXNcbiAgICA/IGRlZHVwZUhvb2tzKHJlcylcbiAgICA6IHJlc1xufVxuXG5mdW5jdGlvbiBkZWR1cGVIb29rcyAoaG9va3MpIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHJlcy5pbmRleE9mKGhvb2tzW2ldKSA9PT0gLTEpIHtcbiAgICAgIHJlcy5wdXNoKGhvb2tzW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5MSUZFQ1lDTEVfSE9PS1MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICBzdHJhdHNbaG9va10gPSBtZXJnZUhvb2s7XG59KTtcblxuLyoqXG4gKiBBc3NldHNcbiAqXG4gKiBXaGVuIGEgdm0gaXMgcHJlc2VudCAoaW5zdGFuY2UgY3JlYXRpb24pLCB3ZSBuZWVkIHRvIGRvXG4gKiBhIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIGNvbnN0cnVjdG9yIG9wdGlvbnMsIGluc3RhbmNlXG4gKiBvcHRpb25zIGFuZCBwYXJlbnQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VBc3NldHMgKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpO1xuICBpZiAoY2hpbGRWYWwpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIHJldHVybiBleHRlbmQocmVzLCBjaGlsZFZhbClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cbn1cblxuQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbn0pO1xuXG4vKipcbiAqIFdhdGNoZXJzLlxuICpcbiAqIFdhdGNoZXJzIGhhc2hlcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBvbmVcbiAqIGFub3RoZXIsIHNvIHdlIG1lcmdlIHRoZW0gYXMgYXJyYXlzLlxuICovXG5zdHJhdHMud2F0Y2ggPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4uLlxuICBpZiAocGFyZW50VmFsID09PSBuYXRpdmVXYXRjaCkgeyBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgaWYgKGNoaWxkVmFsID09PSBuYXRpdmVXYXRjaCkgeyBjaGlsZFZhbCA9IHVuZGVmaW5lZDsgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjaGlsZFZhbCkgeyByZXR1cm4gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCkgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICB9XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybiBjaGlsZFZhbCB9XG4gIHZhciByZXQgPSB7fTtcbiAgZXh0ZW5kKHJldCwgcGFyZW50VmFsKTtcbiAgZm9yICh2YXIga2V5JDEgaW4gY2hpbGRWYWwpIHtcbiAgICB2YXIgcGFyZW50ID0gcmV0W2tleSQxXTtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZFZhbFtrZXkkMV07XG4gICAgaWYgKHBhcmVudCAmJiAhQXJyYXkuaXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBwYXJlbnQgPSBbcGFyZW50XTtcbiAgICB9XG4gICAgcmV0W2tleSQxXSA9IHBhcmVudFxuICAgICAgPyBwYXJlbnQuY29uY2F0KGNoaWxkKVxuICAgICAgOiBBcnJheS5pc0FycmF
333785KGNoaWxkKSA/IGNoaWxkIDogW2NoaWxkXTtcbiAgfVxuICByZXR1cm4gcmV0XG59O1xuXG4vKipcbiAqIE90aGVyIG9iamVjdCBoYXNoZXMuXG4gKi9cbnN0cmF0cy5wcm9wcyA9XG5zdHJhdHMubWV0aG9kcyA9XG5zdHJhdHMuaW5qZWN0ID1cbnN0cmF0cy5jb21wdXRlZCA9IGZ1bmN0aW9uIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm0sXG4gIGtleVxuKSB7XG4gIGlmIChjaGlsZFZhbCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gIH1cbiAgaWYgKCFwYXJlbnRWYWwpIHsgcmV0dXJuIGNoaWxkVmFsIH1cbiAgdmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGlmIChjaGlsZFZhbCkgeyBleHRlbmQocmV0LCBjaGlsZFZhbCk7IH1cbiAgcmV0dXJuIHJldFxufTtcbnN0cmF0cy5wcm92aWRlID0gbWVyZ2VEYXRhT3JGbjtcblxuLyoqXG4gKiBEZWZhdWx0IHN0cmF0ZWd5LlxuICovXG52YXIgZGVmYXVsdFN0cmF0ID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgcmV0dXJuIGNoaWxkVmFsID09PSB1bmRlZmluZWRcbiAgICA/IHBhcmVudFZhbFxuICAgIDogY2hpbGRWYWxcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgY29tcG9uZW50IG5hbWVzXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ29tcG9uZW50cyAob3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5jb21wb25lbnRzKSB7XG4gICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDb21wb25lbnROYW1lIChuYW1lKSB7XG4gIGlmICghbmV3IFJlZ0V4cCgoXCJeW2EtekEtWl1bXFxcXC1cXFxcLjAtOV9cIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIl0qJFwiKSkudGVzdChuYW1lKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBjb21wb25lbnQgbmFtZTogXCInICsgbmFtZSArICdcIi4gQ29tcG9uZW50IG5hbWVzICcgK1xuICAgICAgJ3Nob3VsZCBjb25mb3JtIHRvIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWUgaW4gaHRtbDUgc3BlY2lmaWNhdGlvbi4nXG4gICAgKTtcbiAgfVxuICBpZiAoaXNCdWlsdEluVGFnKG5hbWUpIHx8IGNvbmZpZy5pc1Jlc2VydmVkVGFnKG5hbWUpKSB7XG4gICAgd2FybihcbiAgICAgICdEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwgZWxlbWVudHMgYXMgY29tcG9uZW50ICcgK1xuICAgICAgJ2lkOiAnICsgbmFtZVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAqIE9iamVjdC1iYXNlZCBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzIChvcHRpb25zLCB2bSkge1xuICB2YXIgcHJvcHMgPSBvcHRpb25zLnByb3BzO1xuICBpZiAoIXByb3BzKSB7IHJldHVybiB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGksIHZhbCwgbmFtZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YWwgPSBwcm9wc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICBuYW1lID0gY2FtZWxpemUodmFsKTtcbiAgICAgICAgcmVzW25hbWVdID0geyB0eXBlOiBudWxsIH07XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybigncHJvcHMgbXVzdCBiZSBzdHJpbmdzIHdoZW4gdXNpbmcgYXJyYXkgc3ludGF4LicpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHByb3BzKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFsID0gcHJvcHNba2V5XTtcbiAgICAgIG5hbWUgPSBjYW1lbGl6ZShrZXkpO1xuICAgICAgcmVzW25hbWVdID0gaXNQbGFpbk9iamVjdCh2YWwpXG4gICAgICAgID8gdmFsXG4gICAgICAgIDogeyB0eXBlOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwicHJvcHNcXFwiOiBleHBlY3RlZCBhbiBBcnJheSBvciBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUocHJvcHMpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG4gIG9wdGlvbnMucHJvcHMgPSByZXM7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGludG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJbmplY3QgKG9wdGlvbnMsIHZtKSB7XG4gIHZhciBpbmplY3QgPSBvcHRpb25zLmluamVjdDtcbiAgaWYgKCFpbmplY3QpIHsgcmV0dXJuIH1cbiAgdmFyIG5vcm1hbGl6ZWQgPSBvcHRpb25zLmluamVjdCA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShpbmplY3QpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vcm1hbGl6ZWRbaW5qZWN0W2ldXSA9IHsgZnJvbTogaW5qZWN0W2ldIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGtleSBpbiBpbmplY3QpIHtcbiAgICAgIHZhciB2YWwgPSBpbmplY3Rba2V5XTtcbiAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICA/IGV4dGVuZCh7IGZyb206IGtleSB9LCB2YWwpXG4gICAgICAgIDogeyBmcm9tOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiaW5qZWN0XFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKGluamVjdCkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgcmF3IGZ1bmN0aW9uIGRpcmVjdGl2ZXMgaW50byBvYmplY3QgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpem
33378VEaXJlY3RpdmVzIChvcHRpb25zKSB7XG4gIHZhciBkaXJzID0gb3B0aW9ucy5kaXJlY3RpdmVzO1xuICBpZiAoZGlycykge1xuICAgIGZvciAodmFyIGtleSBpbiBkaXJzKSB7XG4gICAgICB2YXIgZGVmJCQxID0gZGlyc1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGlyc1trZXldID0geyBiaW5kOiBkZWYkJDEsIHVwZGF0ZTogZGVmJCQxIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydE9iamVjdFR5cGUgKG5hbWUsIHZhbHVlLCB2bSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgd2FybihcbiAgICAgIFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJcIiArIG5hbWUgKyBcIlxcXCI6IGV4cGVjdGVkIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZSh2YWx1ZSkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZSB0d28gb3B0aW9uIG9iamVjdHMgaW50byBhIG5ldyBvbmUuXG4gKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICovXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMgKFxuICBwYXJlbnQsXG4gIGNoaWxkLFxuICB2bVxuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2hlY2tDb21wb25lbnRzKGNoaWxkKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjaGlsZCA9IGNoaWxkLm9wdGlvbnM7XG4gIH1cblxuICBub3JtYWxpemVQcm9wcyhjaGlsZCwgdm0pO1xuICBub3JtYWxpemVJbmplY3QoY2hpbGQsIHZtKTtcbiAgbm9ybWFsaXplRGlyZWN0aXZlcyhjaGlsZCk7XG5cbiAgLy8gQXBwbHkgZXh0ZW5kcyBhbmQgbWl4aW5zIG9uIHRoZSBjaGlsZCBvcHRpb25zLFxuICAvLyBidXQgb25seSBpZiBpdCBpcyBhIHJhdyBvcHRpb25zIG9iamVjdCB0aGF0IGlzbid0XG4gIC8vIHRoZSByZXN1bHQgb2YgYW5vdGhlciBtZXJnZU9wdGlvbnMgY2FsbC5cbiAgLy8gT25seSBtZXJnZWQgb3B0aW9ucyBoYXMgdGhlIF9iYXNlIHByb3BlcnR5LlxuICBpZiAoIWNoaWxkLl9iYXNlKSB7XG4gICAgaWYgKGNoaWxkLmV4dGVuZHMpIHtcbiAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLmV4dGVuZHMsIHZtKTtcbiAgICB9XG4gICAgaWYgKGNoaWxkLm1peGlucykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZC5taXhpbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLm1peGluc1tpXSwgdm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBvcHRpb25zID0ge307XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIHBhcmVudCkge1xuICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgfVxuICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgIGlmICghaGFzT3duKHBhcmVudCwga2V5KSkge1xuICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBtZXJnZUZpZWxkIChrZXkpIHtcbiAgICB2YXIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQ7XG4gICAgb3B0aW9uc1trZXldID0gc3RyYXQocGFyZW50W2tleV0sIGNoaWxkW2tleV0sIHZtLCBrZXkpO1xuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbiBhc3NldC5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBiZWNhdXNlIGNoaWxkIGluc3RhbmNlcyBuZWVkIGFjY2Vzc1xuICogdG8gYXNzZXRzIGRlZmluZWQgaW4gaXRzIGFuY2VzdG9yIGNoYWluLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQXNzZXQgKFxuICBvcHRpb25zLFxuICB0eXBlLFxuICBpZCxcbiAgd2Fybk1pc3Npbmdcbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgYXNzZXRzID0gb3B0aW9uc1t0eXBlXTtcbiAgLy8gY2hlY2sgbG9jYWwgcmVnaXN0cmF0aW9uIHZhcmlhdGlvbnMgZmlyc3RcbiAgaWYgKGhhc093bihhc3NldHMsIGlkKSkgeyByZXR1cm4gYXNzZXRzW2lkXSB9XG4gIHZhciBjYW1lbGl6ZWRJZCA9IGNhbWVsaXplKGlkKTtcbiAgaWYgKGhhc093bihhc3NldHMsIGNhbWVsaXplZElkKSkgeyByZXR1cm4gYXNzZXRzW2NhbWVsaXplZElkXSB9XG4gI
33378HZhciBQYXNjYWxDYXNlSWQgPSBjYXBpdGFsaXplKGNhbWVsaXplZElkKTtcbiAgaWYgKGhhc093bihhc3NldHMsIFBhc2NhbENhc2VJZCkpIHsgcmV0dXJuIGFzc2V0c1tQYXNjYWxDYXNlSWRdIH1cbiAgLy8gZmFsbGJhY2sgdG8gcHJvdG90eXBlIGNoYWluXG4gIHZhciByZXMgPSBhc3NldHNbaWRdIHx8IGFzc2V0c1tjYW1lbGl6ZWRJZF0gfHwgYXNzZXRzW1Bhc2NhbENhc2VJZF07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5NaXNzaW5nICYmICFyZXMpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ZhaWxlZCB0byByZXNvbHZlICcgKyB0eXBlLnNsaWNlKDAsIC0xKSArICc6ICcgKyBpZCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3AgKFxuICBrZXksXG4gIHByb3BPcHRpb25zLFxuICBwcm9wc0RhdGEsXG4gIHZtXG4pIHtcbiAgdmFyIHByb3AgPSBwcm9wT3B0aW9uc1trZXldO1xuICB2YXIgYWJzZW50ID0gIWhhc093bihwcm9wc0RhdGEsIGtleSk7XG4gIHZhciB2YWx1ZSA9IHByb3BzRGF0YVtrZXldO1xuICAvLyBib29sZWFuIGNhc3RpbmdcbiAgdmFyIGJvb2xlYW5JbmRleCA9IGdldFR5cGVJbmRleChCb29sZWFuLCBwcm9wLnR5cGUpO1xuICBpZiAoYm9vbGVhbkluZGV4ID4gLTEpIHtcbiAgICBpZiAoYWJzZW50ICYmICFoYXNPd24ocHJvcCwgJ2RlZmF1bHQnKSkge1xuICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gaHlwaGVuYXRlKGtleSkpIHtcbiAgICAgIC8vIG9ubHkgY2FzdCBlbXB0eSBzdHJpbmcgLyBzYW1lIG5hbWUgdG8gYm9vbGVhbiBpZlxuICAgICAgLy8gYm9vbGVhbiBoYXMgaGlnaGVyIHByaW9yaXR5XG4gICAgICB2Y
33378XIgc3RyaW5nSW5kZXggPSBnZXRUeXBlSW5kZXgoU3RyaW5nLCBwcm9wLnR5cGUpO1xuICAgICAgaWYgKHN0cmluZ0luZGV4IDwgMCB8fCBib29sZWFuSW5kZXggPCBzdHJpbmdJbmRleCkge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGNoZWNrIGRlZmF1bHQgdmFsdWVcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9IGdldFByb3BEZWZhdWx0VmFsdWUodm0sIHByb3AsIGtleSk7XG4gICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBmcmVzaCBjb3B5LFxuICAgIC8vIG1ha2Ugc3VyZSB0byBvYnNlcnZlIGl0LlxuICAgIHZhciBwcmV2U2hvdWxkT2JzZXJ2ZSA9IHNob3VsZE9ic2VydmU7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIG9ic2VydmUodmFsdWUpO1xuICAgIHRvZ2dsZU9ic2VydmluZyhwcmV2U2hvdWxkT2JzZXJ2ZSk7XG4gIH1cbiAgaWYgKFxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAvLyBza2lwIHZhbGlkYXRpb24gZm9yIHdlZXggcmVjeWNsZS1saXN0IGNoaWxkIGNvbXBvbmVudCBwcm9wc1xuICAgICEoZmFsc2UpXG4gICkge1xuICAgIGFzc2VydFByb3AocHJvcCwga2V5LCB2YWx1ZSwgdm0sIGFic2VudCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgcHJvcC5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSAodm0sIHByb3AsIGtleSkge1xuICAvLyBubyBkZWZhdWx0LCByZXR1cm4gdW5kZWZpbmVkXG4gIGlmICghaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgdmFyIGRlZiA9IHByb3AuZGVmYXVsdDtcbiAgLy8gd2FybiBhZ2FpbnN0IG5vbi1mYWN0b3J5IGRlZmF1bHRzIGZvciBPYmplY3QgJiBBcnJheVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc09iamVjdChkZWYpKSB7XG4gICAgd2FybihcbiAgICAgICdJbnZhbGlkIGRlZmF1bHQgdmFsdWUgZm9yIHByb3AgXCInICsga2V5ICsgJ1wiOiAnICtcbiAgICAgICdQcm9wcyB3aXRoIHR5cGUgT2JqZWN0L0FycmF5IG11c3QgdXNlIGEgZmFjdG9yeSBmdW5jdGlvbiAnICtcbiAgICAgICd0byByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyB0aGUgcmF3IHByb3AgdmFsdWUgd2FzIGFsc28gdW5kZWZpbmVkIGZyb20gcHJldmlvdXMgcmVuZGVyLFxuICAvLyByZXR1cm4gcHJldmlvdXMgZGVmYXVsdCB2YWx1ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3YXRjaGVyIHRyaWdnZXJcbiAgaWYgKHZtICYmIHZtLiRvcHRpb25zLnByb3BzRGF0YSAmJlxuICAgIHZtLiRvcHRpb25zLnByb3BzRGF0YVtrZXldID09PSB1bmRlZmluZWQgJiZcbiAgICB2bS5fcHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiB2bS5fcHJvcHNba2V5XVxuICB9XG4gIC8vIGNhbGwgZmFjdG9yeSBmdW5jdGlvbiBmb3Igbm9uLUZ1bmN0aW9uIHR5cGVzXG4gIC8vIGEgdmFsdWUgaXMgRnVuY3Rpb24gaWYgaXRzIHByb3RvdHlwZSBpcyBmdW5jdGlvbiBldmVuIGFjcm9zcyBkaWZmZXJlbnQgZXhlY3V0aW9uIGNvbnRleHRcbiAgcmV0dXJuIHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicgJiYgZ2V0VHlwZShwcm9wLnR5cGUpICE9PSAnRnVuY3Rpb24nXG4gICAgPyBkZWYuY2FsbCh2bSlcbiAgICA6IGRlZlxufVxuXG4vKipcbiAqIEFzc2VydCB3aGV0aGVyIGEgcHJvcCBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UHJvcCAoXG4gIHByb3AsXG4gIG5hbWUsXG4gIHZhbHVlLFxuICB2bSxcbiAgYWJzZW50XG4pIHtcbiAgaWYgKHByb3AucmVxdWlyZWQgJiYgYWJzZW50KSB7XG4gICAgd2FybihcbiAgICAgICdNaXNzaW5nIHJlcXVpcmVkIHByb3A6IFwiJyArIG5hbWUgKyAnXCInLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsICYmICFwcm9wLnJlcXVpcmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHR5cGUgPSBwcm9wLnR5cGU7XG4gIHZhciB2YWxpZCA9ICF0eXBlIHx8IHR5cGUgPT09IHRydWU7XG4gIHZhciBleHBlY3RlZFR5cGVzID0gW107XG4gIGlmICh0eXBlKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlID0gW3R5cGVdO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGUubGVuZ3RoICYmICF2YWxpZDsgaSsrKSB7XG4gICAgICB2Y
33378XIgYXNzZXJ0ZWRUeXBlID0gYXNzZXJ0VHlwZSh2YWx1ZSwgdHlwZVtpXSk7XG4gICAgICBleHBlY3RlZFR5cGVzLnB1c2goYXNzZXJ0ZWRUeXBlLmV4cGVjdGVkVHlwZSB8fCAnJyk7XG4gICAgICB2YWxpZCA9IGFzc2VydGVkVHlwZS52YWxpZDtcbiAgICB9XG4gIH1cblxuICBpZiAoIXZhbGlkKSB7XG4gICAgd2FybihcbiAgICAgIGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcyksXG4gICAgICB2bVxuICAgICk7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHZhbGlkYXRvciA9IHByb3AudmFsaWRhdG9yO1xuICBpZiAodmFsaWRhdG9yKSB7XG4gICAgaWYgKCF2YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIicgKyBuYW1lICsgJ1wiLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgc2ltcGxlQ2hlY2tSRSA9IC9eKFN0cmluZ3xOdW1iZXJ8Qm9vbGVhbnxGdW5jdGlvbnxTeW1ib2wpJC87XG5cbmZ1bmN0aW9uIGFzc2VydFR5cGUgKHZhbHVlLCB0eXBlKSB7XG4gIHZhciB2YWxpZDtcbiAgdmFyIGV4cGVjdGVkVHlwZSA9IGdldFR5cGUodHlwZSk7XG4gIGlmIChzaW1wbGVDaGVja1JFLnRlc3QoZXhwZWN0ZWRUeXBlKSkge1xuICAgIHZhciB0ID0gdHlwZW9mIHZhbHVlO1xuICAgIHZhbGlkID0gdCA9PT0gZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgLy8gZm9yIHByaW1pdGl2ZSB3cmFwcGVyIG9iamVjdHNcbiAgICBpZiAoIXZhbGlkICYmIHQgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnT2JqZWN0Jykge1xuICAgIHZhbGlkID0gaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnQXJyYXknKSB7XG4gICAgdmFsaWQgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHZhbGlkOiB2YWxpZCxcbiAgICBleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZVxuICB9XG59XG5cbi8qKlxuICogVXNlIGZ1bmN0aW9uIHN0cmluZyBuYW1lIHRvIGNoZWNrIGJ1aWx0LWluIHR5cGVzLFxuICogYmVjYXVzZSBhIHNpbXBsZSBlcXVhbGl0eSBjaGVjayB3aWxsIGZhaWwgd2hlbiBydW5uaW5nXG4gKiBhY3Jvc3MgZGlmZmVyZW50IHZtcyAvIGlmcmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFR5cGUgKGZuKSB7XG4gIHZhciBtYXRjaCA9IGZuICYmIGZuLnRvU3RyaW5nKCkubWF0Y2goL15cXHMqZnVuY3Rpb24gKFxcdyspLyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJydcbn1cblxuZnVuY3Rpb24gaXNTYW1lVHlwZSAoYSwgYikge1xuICByZXR1cm4gZ2V0VHlwZShhKSA9PT0gZ2V0VHlwZShiKVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlSW5kZXggKHR5cGUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVHlwZXMpKSB7XG4gICAgcmV0dXJuIGlzU2FtZVR5cGUoZXhwZWN0ZWRUeXBlcywgdHlwZSkgPyAwIDogLTFcbiAgfVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXNbaV0sIHR5cGUpKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuICByZXR1cm4gLTFcbn1cblxuZnVuY3Rpb24gZ2V0SW52YWxpZFR5cGVNZXNzYWdlIChuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcykge1xuICB2YXIgbWVzc2FnZSA9IFwiSW52YWxpZCBwcm9wOiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcXFwiXCIgKyBuYW1lICsgXCJcXFwiLlwiICtcbiAgICBcIiBFeHBlY3RlZCBcIiArIChleHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKCcsICcpKTtcbiAgdmFyIGV4cGVjdGVkVHlwZSA9IGV4cGVjdGVkVHlwZXNbMF07XG4gIHZhciByZWNlaXZlZFR5cGUgPSB0b1Jhd1R5cGUodmFsdWUpO1xuICB2YXIgZXhwZWN0ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIGV4cGVjdGVkVHlwZSk7XG4gIHZhciByZWNlaXZlZFZhbHVlID0gc3R5bGVWYWx1ZSh2YWx1ZSwgcmVjZWl2ZWRUeXBlKTtcbiAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IGV4cGVjdGVkIHZhbHVlXG4gIGlmIChleHBlY3RlZFR5cGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgaXNFeHBsaWNhYmxlKGV4cGVjdGVkVHlwZSkgJiZcbiAgICAgICFpc0Jvb2xlYW4oZXhwZWN0ZWRUeXBlLCByZWNlaXZlZFR5cGUpKSB7XG4gICAgbWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlIFwiICsgZXhwZWN0ZWRWYWx1ZTtcbiAgfVxuICBtZXNzYWdlICs9IFwiLCBnb3QgXCIgKyByZWNlaXZlZFR5cGUgKyBcIiBcIjtcbiAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IHJlY2VpdmVkIHZhbHVlXG4gIGlmIChpc0V4cGxpY2FibGUocmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gXCJ3aXRoIHZhbHVlIFwiICsgcmVjZWl2ZWRWYWx1ZSArIFwiLlwiO1xuICB9XG4gIHJldHVybiBtZXNzYWdlXG59XG5cbmZ1bmN0aW9uIHN0eWxlVmFsdWUgKHZhbHVlLCB0eXBlKSB7XG4gIGlmICh0eXBlID09PSAnU3RyaW5nJykge1xuICAgIHJldHVybiAoXCJcXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdOdW1iZXInKSB7XG4gICAgcmV0dXJuIChcIlwiICsgKE51bWJlcih2YWx1ZSkpKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAoXCJcIiArIHZhbHVlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXhwbGljYWJsZSAodmFsdWUpIHtcbiAgdmFyIGV4cGxpY2l0VHlwZXMgPSBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddO1xuICByZXR1cm4gZXhwbGljaXRUeXBlcy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBlbGVtOyB9KVxufVxuXG5mdW5jdGlvbiBpc0Jvb2xlYW4gKCkge1xuICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gIHJldHVybi
33378BhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuIGVsZW0udG9Mb3dlckNhc2UoKSA9PT0gJ2Jvb2xlYW4nOyB9KVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgLy8gRGVhY3RpdmF0ZSBkZXBzIHRyYWNraW5nIHdoaWxlIHByb2Nlc3NpbmcgZXJyb3IgaGFuZGxlciB0byBhdm9pZCBwb3NzaWJsZSBpbmZpbml0ZSByZW5kZXJpbmcuXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZXgvaXNzdWVzLzE1MDVcbiAgcHVzaFRhcmdldCgpO1xuICB0cnkge1xuICAgIGlmICh2bSkge1xuICAgICAgdmFyIGN1ciA9IHZtO1xuICAgICAgd2hpbGUgKChjdXIgPSBjdXIuJHBhcmVudCkpIHtcbiAgICAgICAgdmFyIGhvb2tzID0gY3VyLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7XG4gICAgICAgIGlmIChob29rcykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBjYXB0dXJlID0gaG9va3NbaV0uY2FsbChjdXIsIGVyciwgdm0sIGluZm8pID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHsgcmV0dXJuIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgZ2xvYmFsSGFuZGxlRXJyb3IoZSwgY3VyLCAnZXJyb3JDYXB0dXJlZCBob29rJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGdsb2JhbEhhbmRsZUVycm9yKGVyciwgdm0sIGluZm8pO1xuICB9IGZpbmFsbHkge1xuICAgIHBvcFRhcmdldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZVdpdGhFcnJvckhhbmRsaW5nIChcbiAgaGFuZGxlcixcbiAgY29udGV4dCxcbiAgYXJncyxcbiAgdm0sXG4gIGluZm9cbikge1xuICB2YXIgcmVzO1xuICB0cnkge1xuICAgIHJlcyA9IGFyZ3MgPyBoYW5kbGVyLmFwcGx5KGNvbnRleHQsIGFyZ3MpIDogaGFuZGxlci5jYWxsKGNvbnRleHQpO1xuICAgIGlmIChyZXMgJiYgIXJlcy5faXNWdWUgJiYgaXNQcm9taXNlKHJlcykgJiYgIXJlcy5faGFuZGxlZCkge1xuICAgICAgcmVzLmNhdGNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyArIFwiIChQcm9taXNlL2FzeW5jKVwiKTsgfSk7XG4gICAgICAvLyBpc3N1ZSAjOTUxMVxuICAgICAgLy8gYXZvaWQgY2F0Y2ggdHJpZ2dlcmluZyBtdWx0aXBsZSB0aW1lcyB3aGVuIG5lc3RlZCBjYWxsc1xuICAgICAgcmVzLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyk7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBnbG9iYWxIYW5kbGVFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICBpZiAoY29uZmlnLmVycm9ySGFuZGxlcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY29uZmlnLmVycm9ySGFuZGxlci5jYWxsKG51bGwsIGVyciwgdm0sIGluZm8pXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWYgdGhlIHVzZXIgaW50ZW50aW9uYWxseSB0aHJvd3MgdGhlIG9yaWdpbmFsIGVycm9yIGluIHRoZSBoYW5kbGVyLFxuICAgICAgLy8gZG8gbm90IGxvZyBpdCB0d2ljZVxuICAgICAgaWYgKGUgIT09IGVycikge1xuICAgICAgICBsb2dFcnJvcihlLCBudWxsLCAnY29uZmlnLmVycm9ySGFuZGxlcicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2dFcnJvcihlcnIsIHZtLCBpbmZvKTtcbn1cblxuZnVuY3Rpb24gbG9nRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKChcIkVycm9yIGluIFwiICsgaW5mbyArIFwiOiBcXFwiXCIgKyAoZXJyLnRvU3RyaW5nKCkpICsgXCJcXFwiXCIpLCB2bSk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKChpbkJyb3dzZXIgfHwgaW5XZWV4KSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBpc1VzaW5nTWljcm9UYXNrID0gZmFsc2U7XG5cbnZhciBjYWxsYmFja3MgPSBbXTtcbnZhciBwZW5kaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsdXNoQ2FsbGJhY2tzICgpIHtcbiAgcGVuZGluZyA9IGZhbHNlO1xuICB2YXIgY29waWVzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xuICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3BpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb3BpZXNbaV0oKTtcbiAgfVxufVxuXG4vLyBIZXJlIHdlIGhhdmUgYXN5bmMgZGVmZXJyaW5nIHdyYXBwZXJzIHVzaW5nIG1pY3JvdGFza3MuXG4vLyBJbiAyLjUgd2UgdXNlZCAobWFjcm8pIHRhc2tzIChpbiBjb21iaW5hdGlvbiB3aXRoIG1pY3JvdGFza3MpLlxuLy8gSG93ZXZlciwgaXQgaGFzIHN1YnRsZSBwcm9ibGVtcyB3aGVuIHN0YXRlIGlzIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHJlcGFpbnRcbi8vIChlLmcuICM2ODEzLCBvdXQtaW4gdHJhbnNpdGlvbnMpLlxuLy8gQWxzbywgdXNpbmcgKG1hY3JvKSB0YXNrcyBpbiBldmVudCBoYW5kbGVyIHdvdWxkIGNhdXNlIHNvbWUgd2VpcmQgYmVoYXZpb3JzXG4vLyB0aGF0IGNhbm5vdCBiZSBjaXJjdW12ZW50ZWQgKGUuZy4gIzcxMDksICM3MTUzLCAjNzU0NiwgIzc4MzQsICM4MTA5KS5cbi8vIFNvIHdlIG5vdyB1c2UgbWljcm90YXNrcyBldmVyeXdoZXJlLCBhZ2Fpbi5cbi8vIEEgbWFqb3IgZHJhd2JhY2sgb2YgdGhpcyB0cmFkZW9mZiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHNjZW5hcmlvc1xuLy8gd2hlcmUgbWljcm90YXNrcyBoYXZlIHRvbyBoaWdoIGEgcHJpb3JpdHkgYW5kIGZpcmUgaW4gYmV0d2VlbiBzdXBwb3NlZGx5XG4vLyBzZXF1ZW50aWFsIGV2ZW50cyAoZS5nLiAjNDUyMSwgIzY2OTAsIHdoaWNoIGhhdmUgd29ya2Fyb3VuZHMpXG4vLyBvciBldmVuIGJldHdlZW4gYnViYmxpbmcgb2YgdGhlIHNhbWUgZXZlbnQgKCM2NTY2KS5cbnZhciB0aW1lckZ1bmM7XG5cbi8vIFRoZSBuZXh0VGljayBiZWhhdmlvciBsZXZlcmFnZXMgdGhlIG1pY3JvdGFzayBxdW
33378V1ZSwgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkXG4vLyB2aWEgZWl0aGVyIG5hdGl2ZSBQcm9taXNlLnRoZW4gb3IgTXV0YXRpb25PYnNlcnZlci5cbi8vIE11dGF0aW9uT2JzZXJ2ZXIgaGFzIHdpZGVyIHN1cHBvcnQsIGhvd2V2ZXIgaXQgaXMgc2VyaW91c2x5IGJ1Z2dlZCBpblxuLy8gVUlXZWJWaWV3IGluIGlPUyA+PSA5LjMuMyB3aGVuIHRyaWdnZXJlZCBpbiB0b3VjaCBldmVudCBoYW5kbGVycy4gSXRcbi8vIGNvbXBsZXRlbHkgc3RvcHMgd29ya2luZyBhZnRlciB0cmlnZ2VyaW5nIGEgZmV3IHRpbWVzLi4uIHNvLCBpZiBuYXRpdmVcbi8vIFByb21pc2UgaXMgYXZhaWxhYmxlLCB3ZSB3aWxsIHVzZSBpdDpcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0LCAkZmxvdy1kaXNhYmxlLWxpbmUgKi9cbmlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJvbWlzZSkpIHtcbiAgdmFyIHAgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHAudGhlbihmbHVzaENhbGxiYWNrcyk7XG4gICAgLy8gSW4gcHJvYmxlbWF0aWMgVUlXZWJWaWV3cywgUHJvbWlzZS50aGVuIGRvZXNuJ3QgY29tcGxldGVseSBicmVhaywgYnV0XG4gICAgLy8gaXQgY2FuIGdldCBzdHVjayBpbiBhIHdlaXJkIHN0YXRlIHdoZXJlIGNhbGxiYWNrcyBhcmUgcHVzaGVkIGludG8gdGhlXG4gICAgLy8gbWljcm90YXNrIHF1ZXVlIGJ1dCB0aGUgcXVldWUgaXNuJ3QgYmVpbmcgZmx1c2hlZCwgdW50aWwgdGhlIGJyb3dzZXJcbiAgICAvLyBuZWVkcyB0byBkbyBzb21lIG90aGVyIHdvcmssIGUuZy4gaGFuZGxlIGEgdGltZXIuIFRoZXJlZm9yZSB3ZSBjYW5cbiAgICAvLyBcImZvcmNlXCIgdGhlIG1pY3JvdGFzayBxdWV1ZSB0byBiZSBmbHVzaGVkIGJ5IGFkZGluZyBhbiBlbXB0eSB0aW1lci5cbiAgICBpZiAoaXNJT1MpIHsgc2V0VGltZW91dChub29wKTsgfVxuICB9O1xuICBpc1VzaW5nTWljcm9UYXNrID0gdHJ1ZTtcbn0gZWxzZSBpZiAoIWlzSUUgJiYgdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnICYmIChcbiAgaXNOYXRpdmUoTXV0YXRpb25PYnNlcnZlcikgfHxcbiAgLy8gUGhhbnRvbUpTIGFuZCBpT1MgNy54XG4gIE11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXSdcbikpIHtcbiAgLy8gVXNlIE11dGF0aW9uT2JzZXJ2ZXIgd2hlcmUgbmF0aXZlIFByb21pc2UgaXMgbm90IGF2YWlsYWJsZSxcbiAgLy8gZS5nLiBQaGFudG9tSlMsIGlPUzcsIEFuZHJvaWQgNC40XG4gIC8vICgjNjQ2NiBNdXRhdGlvbk9ic2VydmVyIGlzIHVucmVsaWFibGUgaW4gSUUxMSlcbiAgdmFyIGNvdW50ZXIgPSAxO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaENhbGxiYWNrcyk7XG4gIHZhciB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZyhjb3VudGVyKSk7XG4gIG9ic2VydmVyLm9ic2VydmUodGV4dE5vZGUsIHtcbiAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gIH0pO1xuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgY291bnRlciA9IChjb3VudGVyICsgMSkgJSAyO1xuICAgIHRleHROb2RlLmRhdGEgPSBTdHJpbmcoY291bnRlcik7XG4gIH07XG4gIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShzZXRJbW1lZGlhdGUpKSB7XG4gIC8vIEZhbGxiYWNrIHRvIHNldEltbWVkaWF0ZS5cbiAgLy8gVGVjaG5pY2FsbHkgaXQgbGV2ZXJhZ2VzIHRoZSAobWFjcm8pIHRhc2sgcXVldWUsXG4gIC8vIGJ1dCBpdCBpcyBzdGlsbCBhIGJldHRlciBjaG9pY2UgdGhhbiBzZXRUaW1lb3V0LlxuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2V0SW1tZWRpYXRlKGZsdXNoQ2FsbGJhY2tzKTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIEZhbGxiYWNrIHRvIHNldFRpbWVvdXQuXG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZXRUaW1lb3V0KGZsdXNoQ2FsbGJhY2tzLCAwKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbmV4dFRpY2sgKGNiLCBjdHgpIHtcbiAgdmFyIF9yZXNvbHZlO1xuICBjYWxsYmFja3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjYi5jYWxsKGN0eCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGUsIGN0eCwgJ25leHRUaWNrJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfcmVzb2x2ZSkge1xuICAgICAgX3Jlc29sdmUoY3R4KTtcbiAgICB9XG4gIH0pO1xuICBpZiAoIXBlbmRpbmcpIHtcbiAgICBwZW5kaW5nID0gdHJ1ZTtcbiAgICB0aW1lckZ1bmMoKTtcbiAgfVxuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgaWYgKCFjYiAmJiB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgbWFyaztcbnZhciBtZWFzdXJlO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcGVyZiA9IGluQnJvd3NlciAmJiB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoXG4gICAgcGVyZiAmJlxuICAgI
33378HBlcmYubWFyayAmJlxuICAgIHBlcmYubWVhc3VyZSAmJlxuICAgIHBlcmYuY2xlYXJNYXJrcyAmJlxuICAgIHBlcmYuY2xlYXJNZWFzdXJlc1xuICApIHtcbiAgICBtYXJrID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gcGVyZi5tYXJrKHRhZyk7IH07XG4gICAgbWVhc3VyZSA9IGZ1bmN0aW9uIChuYW1lLCBzdGFydFRhZywgZW5kVGFnKSB7XG4gICAgICBwZXJmLm1lYXN1cmUobmFtZSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICBwZXJmLmNsZWFyTWFya3Moc3RhcnRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtzKGVuZFRhZyk7XG4gICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICB9O1xuICB9XG59XG5cbi8qIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBQcm94eSAqL1xuXG52YXIgaW5pdFByb3h5O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgYWxsb3dlZEdsb2JhbHMgPSBtYWtlTWFwKFxuICAgICdJbmZpbml0eSx1bmRlZmluZWQsTmFOLGlzRmluaXRlLGlzTmFOLCcgK1xuICAgICdwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCwnICtcbiAgICAnTWF0aCxOdW1iZXIsRGF0ZSxBcnJheSxPYmplY3QsQm9vbGVhbixTdHJpbmcsUmVnRXhwLE1hcCxTZXQsSlNPTixJbnRsLCcgK1xuICAgICdyZXF1aXJlJyAvLyBmb3IgV2VicGFjay9Ccm93c2VyaWZ5XG4gICk7XG5cbiAgdmFyIHdhcm5Ob25QcmVzZW50ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgd2FybihcbiAgICAgIFwiUHJvcGVydHkgb3IgbWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBub3QgZGVmaW5lZCBvbiB0aGUgaW5zdGFuY2UgYnV0IFwiICtcbiAgICAgICdyZWZlcmVuY2VkIGR1cmluZyByZW5kZXIuIE1ha2Ugc3VyZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgcmVhY3RpdmUsICcgK1xuICAgICAgJ2VpdGhlciBpbiB0aGUgZGF0YSBvcHRpb24sIG9yIGZvciBjbGFzcy1iYXNlZCBjb21wb25lbnRzLCBieSAnICtcbiAgICAgICdpbml0aWFsaXppbmcgdGhlIHByb3BlcnR5LiAnICtcbiAgICAgICdTZWU6IGh0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL3JlYWN0aXZpdHkuaHRtbCNEZWNsYXJpbmctUmVhY3RpdmUtUHJvcGVydGllcy4nLFxuICAgICAgdGFyZ2V0XG4gICAgKTtcbiAgfTtcblxuICB2YXIgd2FyblJlc2VydmVkUHJlZml4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgd2FybihcbiAgICAgIFwiUHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIG11c3QgYmUgYWNjZXNzZWQgd2l0aCBcXFwiJGRhdGEuXCIgKyBrZXkgKyBcIlxcXCIgYmVjYXVzZSBcIiArXG4gICAgICAncHJvcGVydGllcyBzdGFydGluZyB3aXRoIFwiJFwiIG9yIFwiX1wiIGFyZSBub3QgcHJveGllZCBpbiB0aGUgVnVlIGluc3RhbmNlIHRvICcgK1xuICAgICAgJ3ByZXZlbnQgY29uZmxpY3RzIHdpdGggVnVlIGludGVybmFscy4gJyArXG4gICAgICAnU2VlOiBodHRwczovL3Z1ZWpzLm9yZy92Mi9hcGkvI2RhdGEnLFxuICAgICAgdGFyZ2V0XG4gICAgKTtcbiAgfTtcblxuICB2YXIgaGFzUHJveHkgPVxuICAgIHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJveHkpO1xuXG4gIGlmIChoYXNQcm94eSkge1xuICAgIHZhciBpc0J1aWx0SW5Nb2RpZmllciA9IG1ha2VNYXAoJ3N0b3AscHJldmVudCxzZWxmLGN0cmwsc2hpZnQsYWx0LG1ldGEsZXhhY3QnKTtcbiAgICBjb25maWcua2V5Q29kZXMgPSBuZXcgUHJveHkoY29uZmlnLmtleUNvZGVzLCB7XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCAodGFyZ2V0LCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChpc0J1aWx0SW5Nb2RpZmllcihrZXkpKSB7XG4gICAgICAgICAgd2FybigoXCJBdm9pZCBvdmVyd3JpdGluZyBidWlsdC1pbiBtb2RpZmllciBpbiBjb25maWcua2V5Q29kZXM6IC5cIiArIGtleSkpO1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIGhhc0hhbmRsZXIgPSB7XG4gICAgaGFzOiBmdW5jdGlvbiBoYXMgKHRhcmdldCwga2V5KSB7XG4gICAgICB2Y
33378XIgaGFzID0ga2V5IGluIHRhcmdldDtcbiAgICAgIHZhciBpc0FsbG93ZWQgPSBhbGxvd2VkR2xvYmFscyhrZXkpIHx8XG4gICAgICAgICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkuY2hhckF0KDApID09PSAnXycgJiYgIShrZXkgaW4gdGFyZ2V0LiRkYXRhKSk7XG4gICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKSB7IHdhcm5SZXNlcnZlZFByZWZpeCh0YXJnZXQsIGtleSk7IH1cbiAgICAgICAgZWxzZSB7IHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhcyB8fCAhaXNBbGxvd2VkXG4gICAgfVxuICB9O1xuXG4gIHZhciBnZXRIYW5kbGVyID0ge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICh0YXJnZXQsIGtleSkge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmICEoa2V5IGluIHRhcmdldCkpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQuJGRhdGEpIHsgd2FyblJlc2VydmVkUHJlZml4KHRhcmdldCwga2V5KTsgfVxuICAgICAgICBlbHNlIHsgd2Fybk5vblByZXNlbnQodGFyZ2V0LCBrZXkpOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0W2tleV1cbiAgICB9XG4gIH07XG5cbiAgaW5pdFByb3h5ID0gZnVuY3Rpb24gaW5pdFByb3h5ICh2bSkge1xuICAgIGlmIChoYXNQcm94eSkge1xuICAgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIHByb3h5IGhhbmRsZXIgdG8gdXNlXG4gICAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgICAgdmFyIGhhbmRsZXJzID0gb3B0aW9ucy5yZW5kZXIgJiYgb3B0aW9ucy5yZW5kZXIuX3dpdGhTdHJpcHBlZFxuICAgICAgICA/IGdldEhhbmRsZXJcbiAgICAgICAgOiBoYXNIYW5kbGVyO1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gbmV3IFByb3h5KHZtLCBoYW5kbGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IHZtO1xuICAgIH1cbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBzZWVuT2JqZWN0cyA9IG5ldyBfU2V0KCk7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IHRvIGV2b2tlIGFsbCBjb252ZXJ0ZWRcbiAqIGdldHRlcnMsIHNvIHRoYXQgZXZlcnkgbmVzdGVkIHByb3BlcnR5IGluc2lkZSB0aGUgb2JqZWN0XG4gKiBpcyBjb2xsZWN0ZWQgYXMgYSBcImRlZXBcIiBkZXBlbmRlbmN5LlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZSAodmFsKSB7XG4gIF90cmF2ZXJzZSh2YWwsIHNlZW5PYmplY3RzKTtcbiAgc2Vlbk9iamVjdHMuY2xlYXIoKTtcbn1cblxuZnVuY3Rpb24gX3RyYXZlcnNlICh2YWwsIHNlZW4pIHtcbiAgdmFyIGksIGtleXM7XG4gIHZhciBpc0EgPSBBcnJheS5pc0FycmF5KHZhbCk7XG4gIGlmICgoIWlzQSAmJiAhaXNPYmplY3QodmFsKSkgfHwgT2JqZWN0LmlzRnJvemVuKHZhbCkgfHwgdmFsIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsLl9fb2JfXykge1xuICAgIHZhciBkZXBJZCA9IHZhbC5fX29iX18uZGVwLmlkO1xuICAgIGlmIChzZWVuLmhhcyhkZXBJZCkpIHtcbiAgICAgIHJldHVyblxuICAgI
33378H1cbiAgICBzZWVuLmFkZChkZXBJZCk7XG4gIH1cbiAgaWYgKGlzQSkge1xuICAgIGkgPSB2YWwubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtpXSwgc2Vlbik7IH1cbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICBpID0ga2V5cy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2tleXNbaV1dLCBzZWVuKTsgfVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgbm9ybWFsaXplRXZlbnQgPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIHBhc3NpdmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyYnO1xuICBuYW1lID0gcGFzc2l2ZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICB2YXIgb25jZSQkMSA9IG5hbWUuY2hhckF0KDApID09PSAnfic7IC8vIFByZWZpeGVkIGxhc3QsIGNoZWNrZWQgZmlyc3RcbiAgbmFtZSA9IG9uY2UkJDEgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgdmFyIGNhcHR1cmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyEnO1xuICBuYW1lID0gY2FwdHVyZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgb25jZTogb25jZSQkMSxcbiAgICBjYXB0dXJlOiBjYXB0dXJlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZuSW52b2tlciAoZm5zLCB2bSkge1xuICBmdW5jdGlvbiBpbnZva2VyICgpIHtcbiAgICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAgICB2YXIgZm5zID0gaW52b2tlci5mbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zKSkge1xuICAgICAgdmFyIGNsb25lZCA9IGZucy5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbG9uZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMkMSwgdm0sIFwidi1vbiBoYW5kbGVyXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZucywgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIilcbiAgICB9XG4gIH1cbiAgaW52b2tlci5mbnMgPSBmbnM7XG4gIHJldHVybiBpbnZva2VyXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpc3RlbmVycyAoXG4gIG9uLFxuICBvbGRPbixcbiAgYWRkLFxuICByZW1vdmUkJDEsXG4gIGNyZWF0ZU9uY2VIYW5kbGVyLFxuICB2bVxuKSB7XG4gIHZhciBuYW1lLCBkZWYkJDEsIGN1ciwgb2xkLCBldmVudDtcbiAgZm9yIChuYW1lIGluIG9uKSB7XG4gICAgZGVmJCQxID0gY3VyID0gb25bbmFtZV07XG4gICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcbiAgICBpZiAoaXNVbmRlZihjdXIpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIgKyAoZXZlbnQubmFtZSkgKyBcIlxcXCI6IGdvdCBcIiArIFN0cmluZyhjdXIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkKSkge1xuICAgICAgaWYgKGlzVW5kZWYoY3VyLmZucykpIHtcbiAgICAgICAgY3VyID0gb25bbmFtZV0gPSBjcmVhdGVGbkludm9rZXIoY3VyLCB2bSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNUcnVlKGV2ZW50Lm9uY2UpKSB7XG4gICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlT25jZUhhbmRsZXIoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlKTtcbiAgICAgIH1cbiAgICAgIGFkZChldmVudC5uYW1lLCBjdXIsIGV2ZW50LmNhcHR1cmUsIGV2ZW50LnBhc3NpdmUsIGV2ZW50LnBhcmFtcyk7XG4gICAgfSBlbHNlIGlmIChjdXIgIT09IG9sZCkge1xuICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgIG9uW25hbWVdID0gb2xkO1xuICAgIH1cbiAgfVxuICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICBpZiAoaXNVbmRlZihvbltuYW1lXSkpIHtcbiAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICByZW1vdmUkJDEoZXZlbnQubmFtZSwgb2xkT25bbmFtZV0sIGV2ZW50LmNhcHR1cmUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2sgKGRlZiwgaG9va0tleSwgaG9vaykge1xuICBpZiAoZGVmIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICBkZWYgPSBkZWYuZGF0YS5ob29rIHx8IChkZWYuZGF0YS5ob29rID0ge30pO1xuICB9XG4gIHZhciBpbnZva2VyO1xuICB2YXIgb2xkSG9vayA9IGRlZltob29rS2V5XTtcblxuICBmdW5jdGlvbiB3cmFwcGVkSG9vayAoKSB7XG4gICAgaG9vay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIC8vIGltcG9ydGFudDogcmVtb3ZlIG1lcmdlZCBob29rIHRvIGVuc3VyZSBpdCdzIGNhbGxlZCBvbmx5IG9uY2VcbiAgICAvLyBhbmQgcHJldmVudCBtZW1vcnkgbGVha1xuICAgIHJlbW92ZShpbnZva2VyLmZucywgd3JhcHBlZEhvb2spO1xuICB9XG5cbiAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAvLyBubyBleGlzdGluZyBob29rXG4gICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbd3JhcHBlZEhvb2tdKTtcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob2xkSG9vay5mbnMpICYmIGlzVHJ1ZShvbGRIb29rLm1lcmdlZCkpIHtcbiAgICAgIC8vIGFscmVhZHkgYSBtZXJnZWQgaW52b2tlclxuICAgICAgaW52b2tlciA9IG9sZEhvb2s7XG4gICAgICBpbnZva2VyLmZucy5wdXNoKHdyYXBwZWRIb29rKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhpc3RpbmcgcGxhaW4gaG9va1xuICAgICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbb2xkSG9vaywgd3JhcHBlZEhvb2tdKTtcbiAgICB9XG4gIH1cblxuICBpbnZva2VyLm1lcmdlZCA9IHRydWU7XG4gIGRlZltob29rS2V5XSA9IGludm9rZXI7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIChcbiAgZGF0YSxcbiAgQ3RvcixcbiAgdGFnXG4pIHtcbiAgLy8gd2UgYXJlIG9ubHkgZXh0cmFjdGluZyByYXcgdmFsdWVzIGhlcmUuXG4gIC8vIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgdmFsdWVzIGFyZSBoYW5kbGVkIGluIHRoZSBjaGlsZFxuICAvLyBjb21wb25lbnQgaXRzZWxmLlxuICB2YXIgcHJvcE9wdGlvbnMgPSBDdG9yLm9wdGlvbnMucHJvcHM7XG4gIGlmIChpc1VuZGVmKHByb3BPcHRpb25zKSkge1xuICAgIHJldHVyblxuICB9XG4gI
33378HZhciByZXMgPSB7fTtcbiAgdmFyIGF0dHJzID0gZGF0YS5hdHRycztcbiAgdmFyIHByb3BzID0gZGF0YS5wcm9wcztcbiAgaWYgKGlzRGVmKGF0dHJzKSB8fCBpc0RlZihwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHZhciBhbHRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJlxuICAgICAgICAgIGF0dHJzICYmIGhhc093bihhdHRycywga2V5SW5Mb3dlckNhc2UpXG4gICAgICAgICkge1xuICAgICAgICAgIHRpcChcbiAgICAgICAgICAgIFwiUHJvcCBcXFwiXCIgKyBrZXlJbkxvd2VyQ2FzZSArIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBkZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICBcIiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgY2FtZWxDYXNlZCBcIiArXG4gICAgICAgICAgICBcInByb3BzIG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1ET00gXCIgK1xuICAgICAgICAgICAgXCJ0ZW1wbGF0ZXMuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIGFsdEtleSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGtleSArIFwiXFxcIi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoZWNrUHJvcChyZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcbiAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcCAoXG4gIHJlcyxcbiAgaGFzaCxcbiAga2V5LFxuICBhbHRLZXksXG4gIHByZXNlcnZlXG4pIHtcbiAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2FsdEtleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuXG4vLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBtYXkgcmV0dXJuIGFuIEFycmF5IGluc3RlYWQgb2YgYSBzaW5nbGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBqdXN0IGEgc2ltcGxlXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbi8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuLy8gYmVjYXVzZSBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYWxyZWFkeSBub3JtYWxpemUgdGhlaXIgb3duIGNoaWxkcmVuLlxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbi8vIDIuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbnN0cnVjdHMgdGhhdCBhbHdheXMgZ2VuZXJhdGVkIG5lc3RlZCBBcnJheXMsXG4vLyBlLmcuIDx0ZW1wbGF0ZT4sIDxzbG90Piwgdi1mb3IsIG9yIHdoZW4gdGhlIGNoaWxkcmVuIGlzIHByb3ZpZGVkIGJ5IHVzZXJcbi8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbi8vIGlzIG5lZWRlZCB0byBjYXRlciB0byBhbGwgcG9zc2libGUgdHlwZXMgb2YgY2hpbGRyZW4gdmFsdWVzLlxuZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICA/IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXVxuICAgIDogQXJyYXkuaXNBcnJheShjaGlsZHJlbilcbiAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJuIGlzRGVmKG5vZGUpICYmIGlzRGVmKG5vZGUudGV4dCkgJiYgaXNGYWxzZShub2RlLmlzQ29tbWVudClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcbiAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgYyA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChpc1VuZGVmKGMpIHx8IHR5cGVvZiBjID09PSAnYm9vbGVhbicpIHsgY29udGludWUgfVxuICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgIGxhc3QgPSByZXNbbGFzdEluZGV4XTtcbiAgICAvLyAgbmVzdGVkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgKChuZXN0ZWRJbmRleCB8fCAnJykgKyBcIl9cIiArIGkpKTtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgKGNbMF0pLnRleHQpO1xuICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUoYykpIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAvLyBlc3NlbnRpYWxseSBtZXJnZWQgd2hlbiByZW5kZXJlZCB0byBIVE1MIHN0cmluZ3NcbiAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICB9IGVsc2UgaWYgKGMgIT09ICcnKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIH
33378RvIHZub2RlXG4gICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjLnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBrZXkgZm9yIG5lc3RlZCBhcnJheSBjaGlsZHJlbiAobGlrZWx5IGdlbmVyYXRlZCBieSB2LWZvcilcbiAgICAgICAgaWYgKGlzVHJ1ZShjaGlsZHJlbi5faXNWTGlzdCkgJiZcbiAgICAgICAgICBpc0RlZihjLnRhZykgJiZcbiAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgIGlzRGVmKG5lc3RlZEluZGV4KSkge1xuICAgICAgICAgIGMua2V5ID0gXCJfX3ZsaXN0XCIgKyBuZXN0ZWRJbmRleCArIFwiX1wiICsgaSArIFwiX19cIjtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gIHZhciBwcm92aWRlID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcbiAgaWYgKHByb3ZpZGUpIHtcbiAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm92aWRlLmNhbGwodm0pXG4gICAgICA6IHByb3ZpZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnMgKHZtKSB7XG4gIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICBpZiAocmVzdWx0KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwcm92aWRlZCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJpbmplY3Rpb24gYmVpbmcgbXV0YXRlZDogXFxcIlwiICsga2V5ICsgXCJcXFwiXCIsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlSW5qZWN0IChpbmplY3QsIHZtKSB7XG4gIGlmIChpbmplY3QpIHtcbiAgICAvLyBpbmplY3QgaXMgOmFueSBiZWNhdXNlIGZsb3cgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgb3V0IGNhY2hlZFxuICAgIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgICA/IFJlZmxlY3Qub3duS2V5cyhpbmplY3QpXG4gICAgICA6IE9iamVjdC5rZXlzKGluamVjdCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgLy8gIzY1NzQgaW4gY2FzZSB0aGUgaW5qZWN0IG9iamVjdCBpcyBvYnNlcnZlZC4uLlxuICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpIHsgY29udGludWUgfVxuICAgICAgdmFyIHByb3ZpZGVLZXkgPSBpbmplY3Rba2V5XS5mcm9tO1xuICAgICAgdmFyIHNvdXJjZSA9IHZtO1xuICAgICAgd2hpbGUgKHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLl9wcm92aWRlZCAmJiBoYXNPd24oc291cmNlLl9wcm92aWRlZCwgcHJvdmlkZUtleSkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHNvdXJjZS5fcHJvdmlkZWRbcHJvdmlkZUtleV07XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2UgPSBzb3VyY2UuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIGlmICgnZGVmYXVsdCcgaW4gaW5qZWN0W2tleV0pIHtcbiAgICAgICAgICB2Y
33378XIgcHJvdmlkZURlZmF1bHQgPSBpbmplY3Rba2V5XS5kZWZhdWx0O1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdHlwZW9mIHByb3ZpZGVEZWZhdWx0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHByb3ZpZGVEZWZhdWx0LmNhbGwodm0pXG4gICAgICAgICAgICA6IHByb3ZpZGVEZWZhdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKChcIkluamVjdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbi8qICAqL1xuXG5cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2xvdHMgKFxuICBjaGlsZHJlbixcbiAgY29udGV4dFxuKSB7XG4gIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgIHJldHVybiB7fVxuICB9XG4gIHZhciBzbG90cyA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIHZhciBkYXRhID0gY2hpbGQuZGF0YTtcbiAgICAvLyByZW1vdmUgc2xvdCBhdHRyaWJ1dGUgaWYgdGhlIG5vZGUgaXMgcmVzb2x2ZWQgYXMgYSBWdWUgc2xvdCBub2RlXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnNsb3QpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmF0dHJzLnNsb3Q7XG4gICAgfVxuICAgIC8vIG5hbWVkIHNsb3RzIHNob3VsZCBvbmx5IGJlIHJlc3BlY3RlZCBpZiB0aGUgdm5vZGUgd2FzIHJlbmRlcmVkIGluIHRoZVxuICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICBpZiAoKGNoaWxkLmNvbnRleHQgPT09IGNvbnRleHQgfHwgY2hpbGQuZm5Db250ZXh0ID09PSBjb250ZXh0KSAmJlxuICAgICAgZGF0YSAmJiBkYXRhLnNsb3QgIT0gbnVsbFxuICAgICkge1xuICAgICAgdmFyIG5hbWUgPSBkYXRhLnNsb3Q7XG4gICAgICB2Y
33378XIgc2xvdCA9IChzbG90c1tuYW1lXSB8fCAoc2xvdHNbbmFtZV0gPSBbXSkpO1xuICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICBzbG90LnB1c2guYXBwbHkoc2xvdCwgY2hpbGQuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgKHNsb3RzLmRlZmF1bHQgfHwgKHNsb3RzLmRlZmF1bHQgPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfVxuICAvLyBpZ25vcmUgc2xvdHMgdGhhdCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VcbiAgZm9yICh2YXIgbmFtZSQxIGluIHNsb3RzKSB7XG4gICAgaWYgKHNsb3RzW25hbWUkMV0uZXZlcnkoaXNXaGl0ZXNwYWNlKSkge1xuICAgICAgZGVsZXRlIHNsb3RzW25hbWUkMV07XG4gICAgfVxuICB9XG4gIHJldHVybiBzbG90c1xufVxuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UgKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLmlzQ29tbWVudCAmJiAhbm9kZS5hc3luY0ZhY3RvcnkpIHx8IG5vZGUudGV4dCA9PT0gJyAnXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90cyAoXG4gIHNsb3RzLFxuICBub3JtYWxTbG90cyxcbiAgcHJldlNsb3RzXG4pIHtcbiAgdmFyIHJlcztcbiAgdmFyIGhhc05vcm1hbFNsb3RzID0gT2JqZWN0LmtleXMobm9ybWFsU2xvdHMpLmxlbmd0aCA+IDA7XG4gIHZhciBpc1N0YWJsZSA9IHNsb3RzID8gISFzbG90cy4kc3RhYmxlIDogIWhhc05vcm1hbFNsb3RzO1xuICB2YXIga2V5ID0gc2xvdHMgJiYgc2xvdHMuJGtleTtcbiAgaWYgKCFzbG90cykge1xuICAgIHJlcyA9IHt9O1xuICB9IGVsc2UgaWYgKHNsb3RzLl9ub3JtYWxpemVkKSB7XG4gICAgLy8gZmFzdCBwYXRoIDE6IGNoaWxkIGNvbXBvbmVudCByZS1yZW5kZXIgb25seSwgcGFyZW50IGRpZCBub3QgY2hhbmdlXG4gICAgcmV0dXJuIHNsb3RzLl9ub3JtYWxpemVkXG4gIH0gZWxzZSBpZiAoXG4gICAgaXNTdGFibGUgJiZcbiAgICBwcmV2U2xvdHMgJiZcbiAgICBwcmV2U2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmXG4gICAga2V5ID09PSBwcmV2U2xvdHMuJGtleSAmJlxuICAgICFoYXNOb3JtYWxTbG90cyAmJlxuICAgICFwcmV2U2xvdHMuJGhhc05vcm1hbFxuICApIHtcbiAgICAvLyBmYXN0IHBhdGggMjogc3RhYmxlIHNjb3BlZCBzbG90cyB3LyBubyBub3JtYWwgc2xvdHMgdG8gcHJveHksXG4gICAgLy8gb25seSBuZWVkIHRvIG5vcm1hbGl6ZSBvbmNlXG4gICAgcmV0dXJuIHByZXZTbG90c1xuICB9IGVsc2Uge1xuICAgIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSQxIGluIHNsb3RzKSB7XG4gICAgICBpZiAoc2xvdHNba2V5JDFdICYmIGtleSQxWzBdICE9PSAnJCcpIHtcbiAgICAgICAgcmVzW2tleSQxXSA9IG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSQxLCBzbG90c1trZXkkMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBleHBvc2Ugbm9ybWFsIHNsb3RzIG9uIHNjb3BlZFNsb3RzXG4gIGZvciAodmFyIGtleSQyIGluIG5vcm1hbFNsb3RzKSB7XG4gICAgaWYgKCEoa2V5JDIgaW4gcmVzKSkge1xuICAgICAgcmVzW2tleSQyXSA9IHByb3h5Tm9ybWFsU2xvdChub3JtYWxTbG90cywga2V5JDIpO1xuICAgIH1cbiAgfVxuICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XG4gIC8vIGFuZCB3aGVuIHRoYXQgaXMgcGFzc2VkIGRvd24gdGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvclxuICBpZiAoc2xvdHMgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShzbG90cykpIHtcbiAgICAoc2xvdHMpLl9ub3JtYWxpemVkID0gcmVzO1xuICB9XG4gIGRlZihyZXMsICckc3RhYmxlJywgaXNTdGFibGUpO1xuICBkZWYocmVzLCAnJGtleScsIGtleSk7XG4gIGRlZihyZXMsICckaGFzTm9ybWFsJywgaGFzTm9ybWFsU2xvdHMpO1xuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSwgZm4pIHtcbiAgdmFyIG5vcm1hbGl6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlcyA9IGFyZ3VtZW50cy5sZW5ndGggPyBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpIDogZm4oe30pO1xuICAgIHJlcyA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShyZXMpXG4gICAgICA/IFtyZXNdIC8vIHNpbmdsZSB2bm9kZVxuICAgICAgOiBub3JtYWxpemVDaGlsZHJlbihyZXMpO1xuICAgIHJldHVybiByZXMgJiYgKFxuICAgICAgcmVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgKHJlcy5sZW5ndGggPT09IDEgJiYgcmVzWzBdLmlzQ29tbWVudCkgLy8gIzk2NThcbiAgICApID8gdW5kZWZpbmVkXG4gICAgICA6IHJlc1xuICB9O1xuICAvLyB0aGlzIGlzIGEgc2xvdCB1c2luZyB0aGUgbmV3IHYtc2xvdCBzeW50YXggd2l0aG91dCBzY29wZS4gYWx0aG91Z2ggaXQgaXNcbiAgLy8gY29tcGlsZWQgYXMgYSBzY29wZWQgc2xvdCwgcmVuZGVyIGZuIHVzZXJzIHdvdWxkIGV4cGVjdCBpdCB0byBiZSBwcmVzZW50XG4gIC8vIG9uIHRoaXMuJHNsb3RzIGJlY2F1c2UgdGhlIHVzYWdlIGlzIHNlbWFudGljYWxseSBhIG5vcm1hbCBzbG90LlxuICBpZiAoZm4ucHJveHkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9ybWFsU2xvdHMsIGtleSwge1xuICAgICAgZ2V0OiBub3JtYWxpemVkLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbmZ1bmN0aW9uIHByb3h5Tm9ybWFsU2xvdChzbG90cywga2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbG90c1trZXldOyB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckxpc3QgKFxuICB2YWwsXG4gIHJlbmRlclxuKSB7XG4gIHZhciByZXQsIGksIGwsIGtleXMsIGtleTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHJldCA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtpXSwgaSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgcmV0ID0gbmV3IEFycmF5KHZhbCk7XG4gICAgZm9yIChpID0gMDsgaSA8IHZhbDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXIoaSArIDEsIGkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgaWYgKGhhc1N5bWJvbCAmJiB2YWxbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgcmV0ID0gW107XG4gICAgICB2Y
33378XIgaXRlcmF0b3IgPSB2YWxbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIHdoaWxlICghcmVzdWx0LmRvbmUpIHtcbiAgICAgICAgcmV0LnB1c2gocmVuZGVyKHJlc3VsdC52YWx1ZSwgcmV0Lmxlbmd0aCkpO1xuICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgcmV0ID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgICAgIGZvciAoaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2tleV0sIGtleSwgaSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaXNEZWYocmV0KSkge1xuICAgIHJldCA9IFtdO1xuICB9XG4gIChyZXQpLl9pc1ZMaXN0ID0gdHJ1ZTtcbiAgcmV0dXJuIHJldFxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIDxzbG90PlxuICovXG5mdW5jdGlvbiByZW5kZXJTbG90IChcbiAgbmFtZSxcbiAgZmFsbGJhY2ssXG4gIHByb3BzLFxuICBiaW5kT2JqZWN0XG4pIHtcbiAgdmFyIHNjb3BlZFNsb3RGbiA9IHRoaXMuJHNjb3BlZFNsb3RzW25hbWVdO1xuICB2YXIgbm9kZXM7XG4gIGlmIChzY29wZWRTbG90Rm4pIHsgLy8gc2NvcGVkIHNsb3RcbiAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgIGlmIChiaW5kT2JqZWN0KSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhaXNPYmplY3QoYmluZE9iamVjdCkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnc2xvdCB2LWJpbmQgd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCcsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcHJvcHMgPSBleHRlbmQoZXh0ZW5kKHt9LCBiaW5kT2JqZWN0KSwgcHJvcHMpO1xuICAgIH1cbiAgICBub2RlcyA9IHNjb3BlZFNsb3RGbihwcm9wcykgfHwgZmFsbGJhY2s7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMgPSB0aGlzLiRzbG90c1tuYW1lXSB8fCBmYWxsYmFjaztcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSBwcm9wcyAmJiBwcm9wcy5zbG90O1xuICBpZiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJywgeyBzbG90OiB0YXJnZXQgfSwgbm9kZXMpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGVzXG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyBmaWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGaWx0ZXIgKGlkKSB7XG4gIHJldHVybiByZXNvbHZlQXNzZXQodGhpcy4kb3B0aW9ucywgJ2ZpbHRlcnMnLCBpZCwgdHJ1ZSkgfHwgaWRlbnRpdHlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzS2V5Tm90TWF0Y2ggKGV4cGVjdCwgYWN0dWFsKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdCkpIHtcbiAgICByZXR1cm4gZXhwZWN0LmluZGV4T2YoYWN0dWFsKSA9PT0gLTFcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZXhwZWN0ICE9PSBhY3R1YWxcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBjaGVja2luZyBrZXlDb2RlcyBmcm9tIGNvbmZpZy5cbiAqIGV4cG9zZWQgYXMgVnVlLnByb3RvdHlwZS5fa1xuICogcGFzc2luZyBpbiBldmVudEtleU5hbWUgYXMgbGFzdCBhcmd1bWVudCBzZXBhcmF0ZWx5IGZvciBiYWNrd2FyZHMgY29tcGF0XG4gKi9cbmZ1bmN0aW9uIGNoZWNrS2V5Q29kZXMgKFxuICBldmVudEtleUNvZGUsXG4gIGtleSxcbiAgYnVpbHRJbktleUNvZGUsXG4gIGV2ZW50S2V5TmFtZSxcbiAgYnVpbHRJbktleU5hbWVcbikge1xuICB2YXIgbWFwcGVkS2V5Q29kZSA9IGNvbmZpZy5rZXlDb2Rlc1trZXldIHx8IGJ1aWx0SW5LZXlDb2RlO1xuICBpZiAoYnVpbHRJbktleU5hbWUgJiYgZXZlbnRLZXlOYW1lICYmICFjb25maWcua2V5Q29kZXNba2V5XSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKGJ1aWx0SW5LZXlOYW1lLCBldmVudEtleU5hbWUpXG4gIH0gZWxzZSBpZiAobWFwcGVkS2V5Q29kZSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKG1hcHBlZEtleUNvZGUsIGV2ZW50S2V5Q29kZSlcbiAgfSBlbHNlIGlmIChldmVudEtleU5hbWUpIHtcbiAgICByZXR1cm4gaHlwaGVuYXRlKGV2ZW50S2V5TmFtZSkgIT09IGtleVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIHYtYmluZD1cIm9iamVjdFwiIGludG8gYSBWTm9kZSdzIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGJpbmRPYmplY3RQcm9wcyAoXG4gIGRhdGEsXG4gIHRhZyxcbiAgdmFsdWUsXG4gIGFzUHJvcCxcbiAgaXNTeW5jXG4pIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ3YtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IG9yIEFycmF5IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFyIGhhc2g7XG4gICAgICB2Y
33378XIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ID09PSAnY2xhc3MnIHx8XG4gICAgICAgICAga2V5ID09PSAnc3R5bGUnIHx8XG4gICAgICAgICAgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIGhhc2ggPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0eXBlID0gZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnR5cGU7XG4gICAgICAgICAgaGFzaCA9IGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgIDogZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgaWYgKCEoY2FtZWxpemVkS2V5IGluIGhhc2gpICYmICEoaHlwaGVuYXRlZEtleSBpbiBoYXNoKSkge1xuICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAgICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gIGluZGV4LFxuICBpc0luRm9yXG4pIHtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX3N0YXRpY1RyZWVzIHx8ICh0aGlzLl9zdGF0aWNUcmVlcyA9IFtdKTtcbiAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAvLyBpZiBoYXMgYWxyZWFkeS1yZW5kZXJlZCBzdGF0aWMgdHJlZSBhbmQgbm90IGluc2lkZSB2LWZvcixcbiAgLy8gd2UgY2FuIHJldXNlIHRoZSBzYW1lIHRyZWUuXG4gIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gIHRyZWUgPSBjYWNoZWRbaW5kZXhdID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbaW5kZXhdLmNhbGwoXG4gICAgdGhpcy5fcmVuZGVyUHJveHksXG4gICAgbnVsbCxcbiAgICB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICk7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19zdGF0aWNfX1wiICsgaW5kZXgpLCBmYWxzZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3RhdGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSAoXG4gIHRyZWUsXG4gIGluZGV4LFxuICBrZXlcbikge1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9fb25jZV9fXCIgKyBpbmRleCArIChrZXkgPyAoXCJfXCIgKyBrZXkpIDogXCJcIikpLCB0cnVlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpYyAoXG4gIHRyZWUsXG4gIGtleSxcbiAgaXNPbmNlXG4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHJlZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlW2ldLCAoa2V5ICsgXCJfXCIgKyBpKSwgaXNPbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWFya1N0YXRpY05vZGUodHJlZSwga2V5LCBpc09uY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNOb2RlIChub2RlLCBrZXksIGlzT25jZSkge1xuICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgbm9kZS5rZXkgPSBrZXk7XG4gIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyAoZGF0YSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1vbiB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9uID0gZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge307XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gb25ba2V5XTtcbiAgICAgICAgdmFyIG91cnMgPSB2YWx1ZVtrZXldO1xuICAgICAgICBvbltrZXldID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3R
33378pbmcsIG91cnMpIDogb3VycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVTY29wZWRTbG90cyAoXG4gIGZucywgLy8gc2VlIGZsb3cvdm5vZGVcbiAgcmVzLFxuICAvLyB0aGUgZm9sbG93aW5nIGFyZSBhZGRlZCBpbiAyLjZcbiAgaGFzRHluYW1pY0tleXMsXG4gIGNvbnRlbnRIYXNoS2V5XG4pIHtcbiAgcmVzID0gcmVzIHx8IHsgJHN0YWJsZTogIWhhc0R5bmFtaWNLZXlzIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNsb3QgPSBmbnNbaV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2xvdCkpIHtcbiAgICAgIHJlc29sdmVTY29wZWRTbG90cyhzbG90LCByZXMsIGhhc0R5bmFtaWNLZXlzKTtcbiAgICB9IGVsc2UgaWYgKHNsb3QpIHtcbiAgICAgIC8vIG1hcmtlciBmb3IgcmV2ZXJzZSBwcm94eWluZyB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICAgICAgaWYgKHNsb3QucHJveHkpIHtcbiAgICAgICAgc2xvdC5mbi5wcm94eSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXNbc2xvdC5rZXldID0gc2xvdC5mbjtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbnRlbnRIYXNoS2V5KSB7XG4gICAgKHJlcykuJGtleSA9IGNvbnRlbnRIYXNoS2V5O1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGJpbmREeW5hbWljS2V5cyAoYmFzZU9iaiwgdmFsdWVzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGtleSA9IHZhbHVlc1tpXTtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5KSB7XG4gICAgICBiYXNlT2JqW3ZhbHVlc1tpXV0gPSB2YWx1ZXNbaSArIDFdO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgIT09ICcnICYmIGtleSAhPT0gbnVsbCkge1xuICAgICAgLy8gbnVsbCBpcyBhIHNwZWNpYWwgdmFsdWUgZm9yIGV4cGxpY2l0bHkgcmVtb3ZpbmcgYSBiaW5kaW5nXG4gICAgICB3YXJuKFxuICAgICAgICAoXCJJbnZhbGlkIHZhbHVlIGZvciBkeW5hbWljIGRpcmVjdGl2ZSBhcmd1bWVudCAoZXhwZWN0ZWQgc3RyaW5nIG9yIG51bGwpOiBcIiArIGtleSksXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBiYXNlT2JqXG59XG5cbi8vIGhlbHBlciB0byBkeW5hbWljYWxseSBhcHBlbmQgbW9kaWZpZXIgcnVudGltZSBtYXJrZXJzIHRvIGV2ZW50IG5hbWVzLlxuLy8gZW5zdXJlIG9ubHkgYXBwZW5kIHdoZW4gdmFsdWUgaXMgYWxyZWFkeSBzdHJpbmcsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNhc3Rcbi8vIHRvIHN0cmluZyBhbmQgY2F1c2UgdGhlIHR5cGUgY2hlY2sgdG8gbWlzcy5cbmZ1bmN0aW9uIHByZXBlbmRNb2RpZmllciAodmFsdWUsIHN5bWJvbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHN5bWJvbCArIHZhbHVlIDogdmFsdWVcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluc3RhbGxSZW5kZXJIZWxwZXJzICh0YXJnZXQpIHtcbiAgdGFyZ2V0Ll9vID0gbWFya09uY2U7XG4gIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICB0YXJnZXQuX3MgPSB0b1N0cmluZztcbiAgdGFyZ2V0Ll9sID0gcmVuZGVyTGlzdDtcbiAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgdGFyZ2V0Ll9xID0gbG9vc2VFcXVhbDtcbiAgdGFyZ2V0Ll9pID0gbG9vc2VJbmRleE9mO1xuICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gIHRhcmdldC5fZiA9IHJlc29sdmVGaWx0ZXI7XG4gIHRhcmdldC5fayA9IGNoZWNrS2V5Q29kZXM7XG4gIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgdGFyZ2V0Ll92ID0gY3JlYXRlVGV4dFZOb2RlO1xuICB0YXJnZXQuX2UgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gIHRhcmdldC5fZyA9IGJpbmRPYmplY3RMaXN0ZW5lcnM7XG4gIHRhcmdldC5fZCA9IGJpbmREeW5hbWljS2V5cztcbiAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgKFxuICBkYXRhLFxuICBwcm9wcyxcbiAgY2hpbGRyZW4sXG4gIHBhcmVudCxcbiAgQ3RvclxuKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAvLyBlbnN1cmUgdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gaW4gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gIC8vIGdldHMgYSB1bmlxdWUgY29udGV4dCAtIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0IG5hbWVkIHNsb3QgY2hlY2tcbiAgdmFyIGNvbnRleHRWbTtcbiAgaWYgKGhhc093bihwYXJlbnQsICdfdWlkJykpIHtcbiAgICBjb250ZXh0Vm0gPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgY29udGV4dFZtLl9vcmlnaW5hbCA9IHBhcmVudDtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY29udGV4dCB2bSBwYXNzZWQgaW4gaXMgYSBmdW5jdGlvbmFsIGNvbnRleHQgYXMgd2VsbC5cbiAgICAvLyBpbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlIGFibGUgdG8gZ2V0IGEgaG9sZCB0byB0aGVcbiAgICAvLyByZWFsIGNvbnRleHQgaW5zdGFuY2UuXG4gICAgY29udGV4dFZtID0gcGFyZW50O1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHBhcmVudCA9IHBhcmVudC5fb3JpZ2luYWw7XG4gIH1cbiAgdmFyIGlzQ29tcGlsZWQgPSBpc1RydWUob3B0aW9ucy5fY29tcGlsZWQpO1xuICB2YXIgbmVlZE5vcm1hbGl6YXRpb24gPSAhaXNDb21waWxlZDtcblxuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMubGlzdGVuZXJzID0gZGF0YS5vbiB8fCBlbXB0eU9iamVjdDtcbiAgdGhpcy5pbmplY3Rpb25zID0gcmVzb2x2ZUluamVjdChvcHRpb25zLmluamVjdCwgcGFyZW50KTtcbiAgdGhpcy5zbG90cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMkMS4kc2xvdHMpIHtcbiAgICAgIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBkYXRhLnNjb3BlZFNsb3RzLFxuICAgICAgICB0aGlzJDEuJHNsb3RzID0gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBwYXJlbnQpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcyQxLiRzbG90c1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2NvcGVkU2xvdHMnLCAoe1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuc2xvdHMoKSlcbiAgICB9XG4gI
33378H0pKTtcblxuICAvLyBzdXBwb3J0IGZvciBjb21waWxlZCBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChpc0NvbXBpbGVkKSB7XG4gICAgLy8gZXhwb3NpbmcgJG9wdGlvbnMgZm9yIHJlbmRlclN0YXRpYygpXG4gICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgLy8gcHJlLXJlc29sdmUgc2xvdHMgZm9yIHJlbmRlclNsb3QoKVxuICAgIHRoaXMuJHNsb3RzID0gdGhpcy5zbG90cygpO1xuICAgIHRoaXMuJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMoZGF0YS5zY29wZWRTbG90cywgdGhpcy4kc2xvdHMpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuX3Njb3BlSWQpIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICBpZiAodm5vZGUgJiYgIUFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHZub2RlLmZuU2NvcGVJZCA9IG9wdGlvbnMuX3Njb3BlSWQ7XG4gICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bm9kZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KGNvbnRleHRWbSwgYSwgYiwgYywgZCwgbmVlZE5vcm1hbGl6YXRpb24pOyB9O1xuICB9XG59XG5cbmluc3RhbGxSZW5kZXJIZWxwZXJzKEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0LnByb3RvdHlwZSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQgKFxuICBDdG9yLFxuICBwcm9wc0RhdGEsXG4gIGRhdGEsXG4gIGNvbnRleHRWbSxcbiAgY2hpbGRyZW5cbikge1xuICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBwcm9wT3B0aW9ucyA9IG9wdGlvbnMucHJvcHM7XG4gIGlmIChpc0RlZihwcm9wT3B0aW9ucykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhIHx8IGVtcHR5T2JqZWN0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEuYXR0cnMpOyB9XG4gICAgaWYgKGlzRGVmKGRhdGEucHJvcHMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEucHJvcHMpOyB9XG4gIH1cblxuICB2YXIgcmVuZGVyQ29udGV4dCA9IG5ldyBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dChcbiAgICBkYXRhLFxuICAgIHByb3BzLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRleHRWbSxcbiAgICBDdG9yXG4gICk7XG5cbiAgdmFyIHZub2RlID0gb3B0aW9ucy5yZW5kZXIuY2FsbChudWxsLCByZW5kZXJDb250ZXh0Ll9jLCByZW5kZXJDb250ZXh0KTtcblxuICBpZiAodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVybiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dClcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgIHZhciB2bm9kZXMgPSBub3JtYWxpemVDaGlsZHJlbih2bm9kZSkgfHwgW107XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzW2ldID0gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCh2bm9kZXNbaV0sIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQgKHZub2RlLCBkYXRhLCBjb250ZXh0Vm0sIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpIHtcbiAgLy8gIzc4MTcgY2xvbmUgbm9kZSBiZWZvcmUgc2V0dGluZyBmbkNvbnRleHQsIG90aGVyd2lzZSBpZiB0aGUgbm9kZSBpcyByZXVzZWRcbiAgLy8gKGUuZy4gaXQgd2FzIGZyb20gYSBjYWNoZWQgbm9ybWFsIHNsb3QpIHRoZSBmbkNvbnRleHQgY2F1c2VzIG5hbWVkIHNsb3RzXG4gIC8vIHRoYXQgc2hvdWxkIG5vdCBiZSBtYXRjaGVkIHRvIG1hdGNoLlxuICB2YXIgY2xvbmUgPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgY2xvbmUuZm5Db250ZXh0ID0gY29udGV4dFZtO1xuICBjbG9uZS5mbk9wdGlvbnMgPSBvcHRpb25zO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIChjbG9uZS5kZXZ0b29sc01ldGEgPSBjbG9uZS5kZXZ0b29sc01ldGEgfHwge30pLnJlbmRlckNvbnRleHQgPSByZW5kZXJDb250ZXh0O1xuICB9XG4gIGlmIChkYXRhLnNsb3QpIHtcbiAgICAoY2xvbmUuZGF0YSB8fCAoY2xvbmUuZGF0YSA9IHt9KSkuc2xvdCA9IGRhdGEuc2xvdDtcbiAgfVxuICByZXR1cm4gY2xvbmVcbn1cblxuZnVuY3Rpb24gbWVyZ2VQcm9wcyAodG8sIGZyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICB0b1tjYW1lbGl6ZShrZXkpXSA9IGZyb21ba2V5XTtcbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLy8gaW5saW5lIGhvb2tzIHRvIGJlIGludm9rZWQgb24gY29tcG9uZW50IFZOb2RlcyBkdXJpbmcgcGF0Y2hcbnZhciBjb21wb25lbnRWTm9kZUhvb2tzID0ge1xuICBpbml0OiBmdW5jdGlvbiBpbml0ICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgaWYgKFxuICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICF2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQgJiZcbiAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlXG4gICAgKSB7XG4gICAgICAvLyBrZXB0LWFsaXZlIGNvbXBvbmVudHMsIHRyZWF0IGFzIGEgcGF0Y2hcbiAgICAgIHZhciBtb3VudGVkTm9kZSA9IHZub2RlOyAvLyB3b3JrIGFyb3VuZCBmbG93XG4gICAgICBjb21wb25lbnRWTm9kZUhvb2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZShcbiAgICAgICAgdm5vZGUsXG4gICAgICAgIGFjdGl2ZUluc3RhbmNlXG4gICAgICApO1xuICAgICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2Rl
33378LmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0aW5nKTtcbiAgICB9XG4gIH0sXG5cbiAgcHJlcGF0Y2g6IGZ1bmN0aW9uIHByZXBhdGNoIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgdmFyIGNoaWxkID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB1cGRhdGVDaGlsZENvbXBvbmVudChcbiAgICAgIGNoaWxkLFxuICAgICAgb3B0aW9ucy5wcm9wc0RhdGEsIC8vIHVwZGF0ZWQgcHJvcHNcbiAgICAgIG9wdGlvbnMubGlzdGVuZXJzLCAvLyB1cGRhdGVkIGxpc3RlbmVyc1xuICAgICAgdm5vZGUsIC8vIG5ldyBwYXJlbnQgdm5vZGVcbiAgICAgIG9wdGlvbnMuY2hpbGRyZW4gLy8gbmV3IGNoaWxkcmVuXG4gICAgKTtcbiAgfSxcblxuICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydCAodm5vZGUpIHtcbiAgICB2YXIgY29udGV4dCA9IHZub2RlLmNvbnRleHQ7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICBjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIGNhbGxIb29rKGNvbXBvbmVudEluc3RhbmNlLCAnbW91bnRlZCcpO1xuICAgIH1cbiAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgIGlmIChjb250ZXh0Ll9pc01vdW50ZWQpIHtcbiAgICAgICAgLy8gdnVlLXJvdXRlciMxMjEyXG4gICAgICAgIC8vIER1cmluZyB1cGRhdGVzLCBhIGtlcHQtYWxpdmUgY29tcG9uZW50J3MgY2hpbGQgY29tcG9uZW50cyBtYXlcbiAgICAgICAgLy8gY2hhbmdlLCBzbyBkaXJlY3RseSB3YWxraW5nIHRoZSB0cmVlIGhlcmUgbWF5IGNhbGwgYWN0aXZhdGVkIGhvb2tzXG4gICAgICAgIC8vIG9uIGluY29ycmVjdCBjaGlsZHJlbi4gSW5zdGVhZCB3ZSBwdXNoIHRoZW0gaW50byBhIHF1ZXVlIHdoaWNoIHdpbGxcbiAgICAgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSB3aG9sZSBwYXRjaCBwcm9jZXNzIGVuZGVkLlxuICAgICAgICBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3kgKHZub2RlKSB7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGlmICghdm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxudmFyIGhvb2tzVG9NZXJnZSA9IE9iamVjdC5rZXlzKGNvbXBvbmVudFZOb2RlSG9va3MpO1xuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnQgKFxuICBDdG9yLFxuICBkYXRhLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgdGFnXG4pIHtcbiAgaWYgKGlzVW5kZWYoQ3RvcikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBiYXNlQ3RvciA9IGNvbnRleHQuJG9wdGlvbnMuX2Jhc2U7XG5cbiAgLy8gcGxhaW4gb3B0aW9ucyBvYmplY3Q6IHR1cm4gaXQgaW50byBhIGNvbnN0cnVjdG9yXG4gIGlmIChpc09iamVjdChDdG9yKSkge1xuICAgIEN0b3IgPSBiYXNlQ3Rvci5leHRlbmQoQ3Rvcik7XG4gIH1cblxuICAvLyBpZiBhdCB0aGlzIHN0YWdlIGl0J3Mgbm90IGEgY29uc3RydWN0b3Igb3IgYW4gYXN5bmMgY29tcG9uZW50IGZhY3RvcnksXG4gIC8vIHJlamVjdC5cbiAgaWYgKHR5cGVvZiBDdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIgKyAoU3RyaW5nKEN0b3IpKSksIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGFzeW5jIGNvbXBvbmVudFxuICB2YXIgYXN5bmNGYWN0b3J5O1xuICBpZiAoaXNVbmRlZihDdG9yLmNpZCkpIHtcbiAgICBhc3luY0ZhY3RvcnkgPSBDdG9yO1xuICAgIEN0b3IgPSByZXNvbHZlQXN5bmNDb21wb25lbnQoYXN5bmNGYWN0b3J5LCBiYXNlQ3Rvcik7XG4gICAgaWYgKEN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgbm9kZSBmb3IgYXN5bmMgY29tcG9uZW50LCB3aGljaCBpcyByZW5kZXJlZFxuICAgICAgLy8gYXMgYSBjb21tZW50IG5vZGUgYnV0IHByZXNlcnZlcyBhbGwgdGhlIHJhdyBpbmZvcm1hdGlvbiBmb3IgdGhlIG5vZGUuXG4gICAgICAvLyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciBhc3luYyBzZXJ2ZXItcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gY3JlYXRlQXN5bmNQbGFjZWhvbGRlcihcbiAgICAgICAgYXN5bmNGYWN0b3J5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgdGFnXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZGF0YSA9IGRhdGEgfHwge307XG5cbiAgLy8gcmVzb2x2ZSBjb25zdHJ1Y3RvciBvcHRpb25zIGluIGNhc2UgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZCBhZnRlclxuICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IgY3JlYXRpb25cbiAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKTtcblxuICAvLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgZGF0YSBpbnRvIHByb3BzICYgZXZlbnRzXG4gIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgIHRyYW5zZm9ybU1vZGVsKEN0b3Iub3B0aW9ucywgZGF0YSk7XG4gIH1cblxuICAvLyBleHRyYWN0IHByb3BzXG4gIHZhciBwcm9wc0RhdGEgPSBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhKGRhdGEsIEN0b3IsIHRhZyk7XG5cbiAgLy8gZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuZnVuY3Rpb25hbCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKVxuICB9XG5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgLy8gY2hpbGQgY29tcG9uZW50IGxpc3RlbmVycyBpbnN0ZWFkIG9mIERPTSBsaXN0ZW5lcnNcbiAgdmFyIGxpc3RlbmVycyA9IGRhdGEub247XG4gIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gIC8vIHNvIGl0IGdldHMgcHJvY2Vzc2VkIGR1cmluZyBwYXJlbnQgY29tcG9uZW50IHBhdGNoLlxuICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcblxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5hYnN0cmFjdCkpIHtcbiAgICAvLyBhYnN0cmFjdCBjb21wb25lbnRzIGRvIG5vdCBrZWVwIGFueXRoaW5nXG4gICAgLy8gb3RoZXIgdGhhbiBwcm9wcyAmIGxpc3RlbmVycyAmIHNsb3RcblxuICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICB2YXIgc2xvdCA9IGRhdGEuc2xvdDtcbiAgICBkYXRhID0ge307XG4gICAgaWYgKHNsb3QpIHtcbiAgICAgIGRhdGEuc2xvdCA9IHNsb3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5zdGFsbCBjb21wb25lbnQgbWFuYWdlbWVudCBob29rcyBvbnRvIHRoZSBwbGFjZWhvbGRlciBub2RlXG4gIGluc3RhbGxDb21wb25lbnRIb29rcyhkYXRhKTtcblxuICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciB2bm9kZVxuICB2YXIgbmFtZSA9IEN0b3Iub3B0aW9ucy5uYW1lIHx8IHRhZztcbiAgdmFyIHZub2RlID0gbmV3IFZOb2RlKFxuICAgIChcInZ1ZS1jb21wb25lbnQtXCIgKyAoQ3Rvci5jaWQpICsgKG5hbWUgPyAoXCItXCIgKyBuYW1lKSA6ICcnKSksXG4gICAgZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCxcbiAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LFxuICAgIGFzeW5jRmFjdG9yeVxuICApO1xuXG4gIHJldHVybi
33378B2bm9kZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIChcbiAgdm5vZGUsIC8vIHdlIGtub3cgaXQncyBNb3VudGVkQ29tcG9uZW50Vk5vZGUgYnV0IGZsb3cgZG9lc24ndFxuICBwYXJlbnQgLy8gYWN0aXZlSW5zdGFuY2UgaW4gbGlmZWN5Y2xlIHN0YXRlXG4pIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgX2lzQ29tcG9uZW50OiB0cnVlLFxuICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXG4gICAgcGFyZW50OiBwYXJlbnRcbiAgfTtcbiAgLy8gY2hlY2sgaW5saW5lLXRlbXBsYXRlIHJlbmRlciBmdW5jdGlvbnNcbiAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcbiAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgIG9wdGlvbnMucmVuZGVyID0gaW5saW5lVGVtcGxhdGUucmVuZGVyO1xuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gaW5saW5lVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zO1xuICB9XG4gIHJldHVybiBuZXcgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRIb29rcyAoZGF0YSkge1xuICB2YXIgaG9va3MgPSBkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rc1RvTWVyZ2UubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgIHZhciBleGlzdGluZyA9IGhvb2tzW2tleV07XG4gICAgdmFyIHRvTWVyZ2UgPSBjb21wb25lbnRWTm9kZUhvb2tzW2tleV07XG4gICAgaWYgKGV4aXN0aW5nICE9PSB0b01lcmdlICYmICEoZXhpc3RpbmcgJiYgZXhpc3RpbmcuX21lcmdlZCkpIHtcbiAgICAgIGhvb2tzW2tleV0gPSBleGlzdGluZyA/IG1lcmdlSG9vayQxKHRvTWVyZ2UsIGV4aXN0aW5nKSA6IHRvTWVyZ2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlSG9vayQxIChmMSwgZjIpIHtcbiAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgLy8gZmxvdyBjb21wbGFpbnMgYWJvdXQgZXh0cmEgYXJncyB3aGljaCBpcyB3aHkgd2UgdXNlIGFueVxuICAgIGYxKGEsIGIpO1xuICAgIGYyKGEsIGIpO1xuICB9O1xuICBtZXJnZWQuX21lcmdlZCA9IHRydWU7XG4gIHJldHVybiBtZXJnZWRcbn1cblxuLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGluZm8gKHZhbHVlIGFuZCBjYWxsYmFjaykgaW50b1xuLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Nb2RlbCAob3B0aW9ucywgZGF0YSkge1xuICB2YXIgcHJvcCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwucHJvcCkgfHwgJ3ZhbHVlJztcbiAgdmFyIGV2ZW50ID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0J1xuICA7KGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgdmFyIGV4aXN0aW5nID0gb25bZXZlbnRdO1xuICB2YXIgY2FsbGJhY2sgPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xuICBpZiAoaXNEZWYoZXhpc3RpbmcpKSB7XG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheShleGlzdGluZylcbiAgICAgICAgPyBleGlzdGluZy5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTFcbiAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIG9uW2V2ZW50XSA9IFtjYWxsYmFja10uY29uY2F0KGV4aXN0aW5nKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb25bZXZlbnRdID0gY2FsbGJhY2s7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBTSU1QTEVfTk9STUFMSVpFID0gMTtcbnZhciBBTFdBWVNfTk9STUFMSVpFID0gMjtcblxuLy8gd3JhcHBlciBmdW5jdGlvbiBmb3IgcHJvdmlkaW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2Vcbi8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlLFxuICBhbHdheXNOb3JtYWxpemVcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgIG5vcm1hbGl6YXRpb25UeXBlID0gY2hpbGRyZW47XG4gICAgY2hpbGRyZW4gPSBkYXRhO1xuICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGlzVHJ1ZShhbHdheXNOb3JtYWxpemUpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpFO1xuICB9XG4gIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSlcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUVsZW1lbnQgKFxuICBjb250ZXh0LFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICBub3JtYWxpemF0aW9uVHlwZVxuKSB7XG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoZGF0YSkuX19vYl9fKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiQXZvaWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIgKyAoSlNPTi5zdHJpbmdpZnkoZGF0YSkpICsgXCJcXG5cIiArXG4gICAgICAnQWx3YXlzIGNyZWF0ZSBmcmVzaCB2bm9kZSBkYXRhIG9iamVjdHMgaW4gZWFjaCByZW5kZXIhJyxcbiAgICAgIGNvbnRleHRcbiAgICApO1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyBvYmplY3Qgc3ludGF4IGluIHYtYmluZFxuICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcbiAgICB0YWcgPSBkYXRhLmlzO1xuICB9XG4gIGlmICghdGFnKSB7XG4gICAgLy8gaW4gY2FzZSBvZiBjb21wb25lbnQgOmlzIHNldCB0byBmYWxzeSB2YWx1ZVxuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyB3YXJuIGFnYWluc3Qgbm9uLXByaW1pdGl2ZSBrZXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICBpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmtleSkgJiYgIWlzUHJpbWl0aXZlKGRhdGEua2V5KVxuICApIHtcbiAgICB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgdXNpbmcgbm9uLXByaW1pdGl2ZSB2YWx1ZSBhcyBrZXksICcgK1xuICAgICAgICAndXNlIHN0cmluZy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBzdXBwb3J0IHNpbmdsZSBmdW5jdGlvbiBjaGlsZHJlbiBhcyBkZWZhdWx0IHNjb3BlZCBzbG90XG4gIGlmIChBcnJheS5pc0FycmF
333785KGNoaWxkcmVuKSAmJlxuICAgIHR5cGVvZiBjaGlsZHJlblswXSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICBkYXRhLnNjb3BlZFNsb3RzID0geyBkZWZhdWx0OiBjaGlsZHJlblswXSB9O1xuICAgIGNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIH1cbiAgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBBTFdBWVNfTk9STUFMSVpFKSB7XG4gICAgY2hpbGRyZW4gPSBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XG4gIH0gZWxzZSBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IFNJTVBMRV9OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgdm5vZGUsIG5zO1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgQ3RvcjtcbiAgICBucyA9IChjb250ZXh0LiR2bm9kZSAmJiBjb250ZXh0LiR2bm9kZS5ucykgfHwgY29uZmlnLmdldFRhZ05hbWVzcGFjZSh0YWcpO1xuICAgIGlmIChjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAvLyBwbGF0Zm9ybSBidWlsdC1pbiBlbGVtZW50c1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5uYXRpdmVPbikpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJUaGUgLm5hdGl2ZSBtb2RpZmllciBmb3Igdi1vbiBpcyBvbmx5IHZhbGlkIG9uIGNvbXBvbmVudHMgYnV0IGl0IHdhcyB1c2VkIG9uIDxcIiArIHRhZyArIFwiPi5cIiksXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgICAgIGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICgoIWRhdGEgfHwgIWRhdGEucHJlKSAmJiBpc0RlZihDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMsICdjb21wb25lbnRzJywgdGFnKSkpIHtcbiAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQoQ3RvciwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVua25vd24gb3IgdW5saXN0ZWQgbmFtZXNwYWNlZCBlbGVtZW50c1xuICAgICAgLy8gY2hlY2sgYXQgcnVudGltZSBiZWNhdXNlIGl0IG1heSBnZXQgYXNzaWduZWQgYSBuYW1lc3BhY2Ugd2hlbiBpdHNcbiAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgdGFnLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGRpcmVjdCBjb21wb25lbnQgb3B0aW9ucyAvIGNvbnN0cnVjdG9yXG4gICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQodGFnLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbik7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH0gZWxzZSBpZiAoaXNEZWYodm5vZGUpKSB7XG4gICAgaWYgKGlzRGVmKG5zKSkgeyBhcHBseU5TKHZub2RlLCBucyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHsgcmVnaXN0ZXJEZWVwQmluZGluZ3MoZGF0YSk7IH1cbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlOUyAodm5vZGUsIG5zLCBmb3JjZSkge1xuICB2bm9kZS5ucyA9IG5zO1xuICBpZiAodm5vZGUudGFnID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyB1c2UgZGVmYXVsdCBuYW1lc3BhY2UgaW5zaWRlIGZvcmVpZ25PYmplY3RcbiAgICBucyA9IHVuZGVmaW5lZDtcbiAgICBmb3JjZSA9IHRydWU7XG4gIH1cbiAgaWYgKGlzRGVmKHZub2RlLmNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2Y
33378XIgY2hpbGQgPSB2bm9kZS5jaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjaGlsZC50YWcpICYmIChcbiAgICAgICAgaXNVbmRlZihjaGlsZC5ucykgfHwgKGlzVHJ1ZShmb3JjZSkgJiYgY2hpbGQudGFnICE9PSAnc3ZnJykpKSB7XG4gICAgICAgIGFwcGx5TlMoY2hpbGQsIG5zLCBmb3JjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIHJlZiAjNTMxOFxuLy8gbmVjZXNzYXJ5IHRvIGVuc3VyZSBwYXJlbnQgcmUtcmVuZGVyIHdoZW4gZGVlcCBiaW5kaW5ncyBsaWtlIDpzdHlsZSBhbmRcbi8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXG5mdW5jdGlvbiByZWdpc3RlckRlZXBCaW5kaW5ncyAoZGF0YSkge1xuICBpZiAoaXNPYmplY3QoZGF0YS5zdHlsZSkpIHtcbiAgICB0cmF2ZXJzZShkYXRhLnN0eWxlKTtcbiAgfVxuICBpZiAoaXNPYmplY3QoZGF0YS5jbGFzcykpIHtcbiAgICB0cmF2ZXJzZShkYXRhLmNsYXNzKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFJlbmRlciAodm0pIHtcbiAgdm0uX3Zub2RlID0gbnVsbDsgLy8gdGhlIHJvb3Qgb2YgdGhlIGNoaWxkIHRyZWVcbiAgdm0uX3N0YXRpY1RyZWVzID0gbnVsbDsgLy8gdi1vbmNlIGNhY2hlZCB0cmVlc1xuICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICB2YXIgcGFyZW50Vm5vZGUgPSB2bS4kdm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTsgLy8gdGhlIHBsYWNlaG9sZGVyIG5vZGUgaW4gcGFyZW50IHRyZWVcbiAgdmFyIHJlbmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICB2bS4kc2NvcGVkU2xvdHMgPSBlbXB0eU9iamVjdDtcbiAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXG4gIC8vIGFyZ3Mgb3JkZXI6IHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlLCBhbHdheXNOb3JtYWxpemVcbiAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgdm0uX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAvLyBub3JtYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGZvciB0aGUgcHVibGljIHZlcnNpb24sIHVzZWQgaW5cbiAgLy8gdXNlci13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMuXG4gIHZtLiRjcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodm0sIGEsIGIsIGMsIGQsIHRydWUpOyB9O1xuXG4gIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXG4gIC8vIHRoZXkgbmVlZCB0byBiZSByZWFjdGl2ZSBzbyB0aGF0IEhPQ3MgdXNpbmcgdGhlbSBhcmUgYWx3YXlzIHVwZGF0ZWRcbiAgdmFyIHBhcmVudERhdGEgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5kYXRhO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckYXR0cnMnLCBwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybihcIiRhdHRycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGF0dHJzJywgcGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0LCBudWxsLCB0cnVlKTtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICB9XG59XG5cbnZhciBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuXG5mdW5jdGlvbiByZW5kZXJNaXhpbiAoVnVlKSB7XG4gIC8vIGluc3RhbGwgcnVudGltZSBjb252ZW5pZW5jZSBoZWxwZXJzXG4gIGluc3RhbGxSZW5kZXJIZWxwZXJzKFZ1ZS5wcm90b3R5cGUpO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIG5leHRUaWNrKGZuLCB0aGlzKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIHZhciByZWYgPSB2bS4kb3B0aW9ucztcbiAgICB2YXIgcmVuZGVyID0gcmVmLnJlbmRlcjtcbiAgICB2YXIgX3BhcmVudFZub2RlID0gcmVmLl9wYXJlbnRWbm9kZTtcblxuICAgIGlmIChfcGFyZW50Vm5vZGUpIHtcbiAgICAgIHZtLiRzY29wZWRTbG90cyA9IG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBfcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cyxcbiAgICAgICAgdm0uJHNsb3RzLFxuICAgICAgICB2bS4kc2NvcGVkU2xvdHNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHBhcmVudCB2bm9kZS4gdGhpcyBhbGxvd3MgcmVuZGVyIGZ1bmN0aW9ucyB0byBoYXZlIGFjY2Vzc1xuICAgIC8vIHRvIHRoZSBkYXRhIG9uIHRoZSBwbGFjZWhvbGRlciBub2RlLlxuICAgIHZtLiR2bm9kZSA9IF9wYXJlbnRWbm9kZTtcbiAgICAvLyByZW5kZXIgc2VsZlxuICAgIHZhciB2bm9kZTtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIG1haW50YWluIGEgc3RhY2sgYmVjYXVzZSBhbGwgcmVuZGVyIGZucyBhcmUgY2FsbGVkXG4gICAgICAvLyBzZXBhcmF0ZWx5IGZyb20gb25lIGFub3RoZXIuIE5lc3RlZCBjb21wb25lbnQncyByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgIC8vIHdoZW4gcGFyZW50IGNvbXBvbmVudCBpcyBwYXRjaGVkLlxuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gdm07XG4gICAgICB2bm9kZSA9IHJlbmRlci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlclwiKTtcbiAgICAgIC8vIHJldHVybi
33378BlcnJvciByZW5kZXIgcmVzdWx0LFxuICAgICAgLy8gb3IgcHJldmlvdXMgdm5vZGUgdG8gcHJldmVudCByZW5kZXIgZXJyb3IgY2F1c2luZyBibGFuayBjb21wb25lbnRcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZub2RlID0gdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50LCBlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlckVycm9yXCIpO1xuICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkgJiYgdm5vZGUubGVuZ3RoID09PSAxKSB7XG4gICAgICB2bm9kZSA9IHZub2RlWzBdO1xuICAgIH1cbiAgICAvLyByZXR1cm4gZW1wdHkgdm5vZGUgaW4gY2FzZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGVycm9yZWQgb3V0XG4gICAgaWYgKCEodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ011bHRpcGxlIHJvb3Qgbm9kZXMgcmV0dXJuZWQgZnJvbSByZW5kZXIgZnVuY3Rpb24uIFJlbmRlciBmdW5jdGlvbiAnICtcbiAgICAgICAgICAnc2hvdWxkIHJldHVybiBhIHNpbmdsZSByb290IG5vZGUuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdm5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgfVxuICAgIC8vIHNldCBwYXJlbnRcbiAgICB2bm9kZS5wYXJlbnQgPSBfcGFyZW50Vm5vZGU7XG4gICAgcmV0dXJuIHZub2RlXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBlbnN1cmVDdG9yIChjb21wLCBiYXNlKSB7XG4gIGlmIChcbiAgICBjb21wLl9fZXNNb2R1bGUgfHxcbiAgICAoaGFzU3ltYm9sICYmIGNvbXBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpXG4gICkge1xuICAgIGNvbXAgPSBjb21wLmRlZmF1bHQ7XG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0KGNvbXApXG4gICAgPyBiYXNlLmV4dGVuZChjb21wKVxuICAgIDogY29tcFxufVxuXG5mdW5jdGlvbiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyIChcbiAgZmFjdG9yeSxcbiAgZGF0YSxcbiAgY29udGV4dCxcbiAgY2hpbGRyZW4sXG4gIHRhZ1xuKSB7XG4gIHZhciBub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICBub2RlLmFzeW5jRmFjdG9yeSA9IGZhY3Rvcnk7XG4gIG5vZGUuYXN5bmNNZXRhID0geyBkYXRhOiBkYXRhLCBjb250ZXh0OiBjb250ZXh0LCBjaGlsZHJlbjogY2hpbGRyZW4sIHRhZzogdGFnIH07XG4gIHJldHVybiBub2RlXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVBc3luY0NvbXBvbmVudCAoXG4gIGZhY3RvcnksXG4gIGJhc2VDdG9yXG4pIHtcbiAgaWYgKGlzVHJ1ZShmYWN0b3J5LmVycm9yKSAmJiBpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5lcnJvckNvbXBcbiAgfVxuXG4gIGlmIChpc0RlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgIHJldHVybiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cblxuICB2YXIgb3duZXIgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U7XG4gIGlmIChvd25lciAmJiBpc0RlZihmYWN0b3J5Lm93bmVycykgJiYgZmFjdG9yeS5vd25lcnMuaW5kZXhPZihvd25lcikgPT09IC0xKSB7XG4gICAgLy8gYWxyZWFkeSBwZW5kaW5nXG4gICAgZmFjdG9yeS5vd25lcnMucHVzaChvd25lcik7XG4gIH1cblxuICBpZiAoaXNUcnVlKGZhY3RvcnkubG9hZGluZykgJiYgaXNEZWYoZmFjdG9yeS5sb2FkaW5nQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICB9XG5cbiAgaWYgKG93bmVyICYmICFpc0RlZihmYWN0b3J5Lm93bmVycykpIHtcbiAgICB2YXIgb3duZXJzID0gZmFjdG9yeS5vd25lcnMgPSBbb3duZXJdO1xuICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICB2YXIgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICB2YXIgdGltZXJUaW1lb3V0ID0gbnVsbFxuXG4gICAgOyhvd25lcikuJG9uKCdob29rOmRlc3Ryb3llZCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZShvd25lcnMsIG93bmVyKTsgfSk7XG5cbiAgICB2YXIgZm9yY2VSZW5kZXIgPSBmdW5jdGlvbiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG93bmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgKG93bmVyc1tpXSkuJGZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIGlmICh0aW1lckxvYWRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJMb2FkaW5nKTtcbiAgICAgICAgICB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lclRpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJUaW1lb3V0KTtcbiAgICAgICAgICB0aW1lclRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciByZXNvbHZlID0gb25jZShmdW5jdGlvbiAocmVzKSB7XG4gICAgICAvLyBjYWNoZSByZXNvbHZlZFxuICAgICAgZmFjdG9yeS5yZXNvbHZlZCA9IGVuc3VyZUN0b3IocmVzLCBiYXNlQ3Rvcik7XG4gICAgICAvLyBpbnZva2UgY2FsbGJhY2tzIG9ubHkgaWYgdGhpcyBpcyBub3QgYSBzeW5jaHJvbm91cyByZXNvbHZlXG4gICAgICAvLyAoYXN5bmMgcmVzb2x2ZXMgYXJlIHNoaW1tZWQgYXMgc3luY2hyb25vdXMgZHVyaW5nIFNTUilcbiAgICAgIGlmICghc3luYykge1xuICAgICAgICBmb3JjZVJlbmRlcih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG93bmVycy5sZW5ndGggPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlamVjdCA9IG9uY2UoZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIkZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbXBvbmVudDogXCIgKyAoU3RyaW5nKGZhY3RvcnkpKSArXG4gICAgICAgIChyZWFzb24gPyAoXCJcXG5SZWFzb246IFwiICsgcmVhc29uKSA6ICcnKVxuICAgICAgKTtcbiAgICAgIGlmIChpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICAgICAgZmFjdG9yeS5lcnJvciA9IHRydWU7XG4gICAgICAgIGZvcmNlUmVuZGVyKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlcyA9IGZhY3RvcnkocmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgIGlmIChpc09iamVjdChyZXMpKSB7XG4gICAgICBpZiAoaXNQcm9taXNlKHJlcykpIHtcbiAgICAgICAgLy8gKCkgPT4gUHJvbWlzZVxuICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgI
33378HJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKHJlcy5jb21wb25lbnQpKSB7XG4gICAgICAgIHJlcy5jb21wb25lbnQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgIGlmIChpc0RlZihyZXMuZXJyb3IpKSB7XG4gICAgICAgICAgZmFjdG9yeS5lcnJvckNvbXAgPSBlbnN1cmVDdG9yKHJlcy5lcnJvciwgYmFzZUN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5sb2FkaW5nKSkge1xuICAgICAgICAgIGZhY3RvcnkubG9hZGluZ0NvbXAgPSBlbnN1cmVDdG9yKHJlcy5sb2FkaW5nLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgaWYgKHJlcy5kZWxheSA9PT0gMCkge1xuICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHRpbWVyTG9hZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpICYmIGlzVW5kZWYoZmFjdG9yeS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgcmVzLmRlbGF5IHx8IDIwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy50aW1lb3V0KSkge1xuICAgICAgICAgIHRpbWVyVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGltZXJUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgICAgICAgICAgICA/IChcInRpbWVvdXQgKFwiICsgKHJlcy50aW1lb3V0KSArIFwibXMpXCIpXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCByZXMudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzeW5jID0gZmFsc2U7XG4gICAgLy8gcmV0dXJuIGluIGNhc2UgcmVzb2x2ZWQgc3luY2hyb25vdXNseVxuICAgIHJldHVybiBmYWN0b3J5LmxvYWRpbmdcbiAgICAgID8gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICAgICAgOiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzQXN5bmNQbGFjZWhvbGRlciAobm9kZSkge1xuICByZXR1cm4gbm9kZS5pc0NvbW1lbnQgJiYgbm9kZS5hc3luY0ZhY3Rvcnlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGdldEZpcnN0Q29tcG9uZW50Q2hpbGQgKGNoaWxkcmVuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoaXNEZWYoYykgJiYgKGlzRGVmKGMuY29tcG9uZW50T3B0aW9ucykgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpKSkge1xuICAgICAgICByZXR1cm4gY1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRFdmVudHMgKHZtKSB7XG4gIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2bS5faGFzSG9va0V2ZW50ID0gZmFsc2U7XG4gIC8vIGluaXQgcGFyZW50IGF0dGFjaGVkIGV2ZW50c1xuICB2YXIgbGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgaWYgKGxpc3RlbmVycykge1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0O1xuXG5mdW5jdGlvbiBhZGQgKGV2ZW50LCBmbikge1xuICB0YXJnZXQuJG9uKGV2ZW50LCBmbik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSQxIChldmVudCwgZm4pIHtcbiAgdGFyZ2V0LiRvZmYoZXZlbnQsIGZuKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT25jZUhhbmRsZXIgKGV2ZW50LCBmbikge1xuICB2YXIgX3RhcmdldCA9IHRhcmdldDtcbiAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyICgpIHtcbiAgICB2YXIgcmVzID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICBfdGFyZ2V0LiRvZmYoZXZlbnQsIG9uY2VIYW5kbGVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzIChcbiAgdm0sXG4gIGxpc3RlbmVycyxcbiAgb2xkTGlzdGVuZXJzXG4pIHtcbiAgdGFyZ2V0ID0gdm07XG4gIHVwZGF0ZUxpc3RlbmVycyhsaXN0ZW5lcnMsIG9sZExpc3RlbmVycyB8fCB7fSwgYWRkLCByZW1vdmUkMSwgY3JlYXRlT25jZUhhbmRsZXIsIHZtKTtcbiAgdGFyZ2V0ID0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBldmVudHNNaXhpbiAoVnVlKSB7XG4gIHZhciBob29rUkUgPSAvXmhvb2s6LztcbiAgVnVlLnByb3RvdHlwZS4kb24gPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZtLiRvbihldmVudFtpXSwgZm4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAodm0uX2V2ZW50c1tldmVudF0gfHwgKHZtLl9ldmVudHNbZXZlbnRdID0gW10pKS5wdXNoKGZuKTtcbiAgICAgIC8vIG9wdGltaXplIGhvb2s6ZXZlbnQgY29zdCBieSB1c2luZyBhIGJvb2xlYW4gZmxhZyBtYXJrZWQgYXQgcmVnaXN0cmF0aW9uXG4gICAgICAvLyBpbnN0ZWFkIG9mIGEgaGFzaCBsb29rdXBcbiAgICAgIGlmIChob29rUkUudGVzdChldmVudCkpIHtcbiAgICAgICAgdm0uX2hhc0hvb2tFdmVudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybi
33378B2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBmdW5jdGlvbiBvbiAoKSB7XG4gICAgICB2bS4kb2ZmKGV2ZW50LCBvbik7XG4gICAgICBmbi5hcHBseSh2bSwgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgb24uZm4gPSBmbjtcbiAgICB2bS4kb24oZXZlbnQsIG9uKTtcbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRvZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhbGxcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIC8vIGFycmF5IG9mIGV2ZW50c1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yICh2YXIgaSQxID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaSQxIDwgbDsgaSQxKyspIHtcbiAgICAgICAgdm0uJG9mZihldmVudFtpJDFdLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgZXZlbnRcbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKCFjYnMpIHtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICBpZiAoIWZuKSB7XG4gICAgICB2bS5fZXZlbnRzW2V2ZW50XSA9IG51bGw7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgaGFuZGxlclxuICAgIHZhciBjYjtcbiAgICB2YXIgaSA9IGNicy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY2IgPSBjYnNbaV07XG4gICAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICBjYnMuc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRlbWl0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGxvd2VyQ2FzZUV2ZW50ID0gZXZlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChsb3dlckNhc2VFdmVudCAhPT0gZXZlbnQgJiYgdm0uX2V2ZW50c1tsb3dlckNhc2VFdmVudF0pIHtcbiAgICAgICAgdGlwKFxuICAgICAgICAgIFwiRXZlbnQgXFxcIlwiICsgbG93ZXJDYXNlRXZlbnQgKyBcIlxcXCIgaXMgZW1pdHRlZCBpbiBjb21wb25lbnQgXCIgK1xuICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIiBidXQgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIFwiICtcbiAgICAgICAgICBcInYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBcIiArXG4gICAgICAgICAgXCJZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIgKyAoaHlwaGVuYXRlKGV2ZW50KSkgKyBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIgKyBldmVudCArIFwiXFxcIi5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKGNicykge1xuICAgICAgY2JzID0gY2JzLmxlbmd0aCA+IDEgPyB0b0FycmF5KGNicykgOiBjYnM7XG4gICAgICB2Y
33378XIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBpbmZvID0gXCJldmVudCBoYW5kbGVyIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIlwiO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNic1tpXSwgdm0sIGFyZ3MsIHZtLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzZXRBY3RpdmVJbnN0YW5jZSh2bSkge1xuICB2YXIgcHJldkFjdGl2ZUluc3RhbmNlID0gYWN0aXZlSW5zdGFuY2U7XG4gIGFjdGl2ZUluc3RhbmNlID0gdm07XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgYWN0aXZlSW5zdGFuY2UgPSBwcmV2QWN0aXZlSW5zdGFuY2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdExpZmVjeWNsZSAodm0pIHtcbiAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcblxuICAvLyBsb2NhdGUgZmlyc3Qgbm9uLWFic3RyYWN0IHBhcmVudFxuICB2YXIgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIGlmIChwYXJlbnQgJiYgIW9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICB3aGlsZSAocGFyZW50LiRvcHRpb25zLmFic3RyYWN0ICYmIHBhcmVudC4kcGFyZW50KSB7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICB9XG4gICAgcGFyZW50LiRjaGlsZHJlbi5wdXNoKHZtKTtcbiAgfVxuXG4gIHZtLiRwYXJlbnQgPSBwYXJlbnQ7XG4gIHZtLiRyb290ID0gcGFyZW50ID8gcGFyZW50LiRyb290IDogdm07XG5cbiAgdm0uJGNoaWxkcmVuID0gW107XG4gIHZtLiRyZWZzID0ge307XG5cbiAgdm0uX3dhdGNoZXIgPSBudWxsO1xuICB2bS5faW5hY3RpdmUgPSBudWxsO1xuICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgdm0uX2lzTW91bnRlZCA9IGZhbHNlO1xuICB2bS5faXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGlmZWN5Y2xlTWl4aW4gKFZ1ZSkge1xuICBWdWUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgdmFyIHByZXZFbCA9IHZtLiRlbDtcbiAgICB2YXIgcHJldlZub2RlID0gdm0uX3Zub2RlO1xuICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh2bSk7XG4gICAgdm0uX3Zub2RlID0gdm5vZGU7XG4gICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gaXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgLy8gYmFzZWQgb24gdGhlIHJlbmRlcmluZyBiYWNrZW5kIHVzZWQuXG4gICAgaWYgKCFwcmV2Vm5vZGUpIHtcbiAgICAgIC8vIGluaXRpYWwgcmVuZGVyXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18odm0uJGVsLCB2bm9kZSwgaHlkcmF0aW5nLCBmYWxzZSAvKiByZW1vdmVPbmx5ICovKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlc1xuICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHByZXZWbm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAvLyB1cGRhdGUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAocHJldkVsKSB7XG4gICAgICBwcmV2RWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIGlmICh2bS4kZWwpIHtcbiAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgfVxuICAgIC8vIGlmIHBhcmVudCBpcyBhbiBIT0MsIHVwZGF0ZSBpdHMgJGVsIGFzIHdlbGxcbiAgICBpZiAodm0uJHZub2RlICYmIHZtLiRwYXJlbnQgJiYgdm0uJHZub2RlID09PSB2bS4kcGFyZW50Ll92bm9kZSkge1xuICAgICAgdm0uJHBhcmVudC4kZWwgPSB2bS4kZWw7XG4gICAgfVxuICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcbiAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci51cGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlRGVzdHJveScpO1xuICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSB2bS4kcGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHJlbW92ZShwYXJlbnQuJGNoaWxkcmVuLCB2bSk7XG4gICAgfVxuICAgIC8vIHRlYXJkb3duIHdhdGNoZXJzXG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci50ZWFyZG93bigpO1xuICAgIH1cbiAgICB2YXIgaSA9IHZtLl93YXRjaGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdm0uX3dhdGNoZXJzW2ldLnRlYXJkb3duKCk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgZnJvbSBkYXRhIG9iXG4gICAgLy8gZnJvemVuIG9iamVjdCBtYXkgbm90IGhhdmUgb2JzZXJ2ZXIuXG4gICAgaWYgKHZtLl9kYXRhLl9fb2JfXykge1xuICAgICAgdm0uX2RhdGEuX19vYl9fLnZtQ291bnQtLTtcbiAgICB9XG4gICAgLy8gY2FsbCB0aGUgbGFzdCBob29rLi4uXG4gICAgdm0uX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyBpbnZva2UgZGVzdHJveSBob29rcyBvbiBjdXJyZW50IHJlbmRlcmVkIHRyZWVcbiAgICB2bS5fX3BhdGNoX18odm0uX3Zub2RlLCBudWxsKTtcbiAgICAvLyBmaXJlIGRlc3Ryb3llZCBob29rXG4gICAgY2FsbEhvb2sodm0sICdk
33378ZXN0cm95ZWQnKTtcbiAgICAvLyB0dXJuIG9mZiBhbGwgaW5zdGFuY2UgbGlzdGVuZXJzLlxuICAgIHZtLiRvZmYoKTtcbiAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAodm0uJGVsKSB7XG4gICAgICB2bS4kZWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIC8vIHJlbGVhc2UgY2lyY3VsYXIgcmVmZXJlbmNlICgjNjc1OSlcbiAgICBpZiAodm0uJHZub2RlKSB7XG4gICAgICB2bS4kdm5vZGUucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50IChcbiAgdm0sXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICB2bS4kZWwgPSBlbDtcbiAgaWYgKCF2bS4kb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2bS4kb3B0aW9ucy5yZW5kZXIgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICgodm0uJG9wdGlvbnMudGVtcGxhdGUgJiYgdm0uJG9wdGlvbnMudGVtcGxhdGUuY2hhckF0KDApICE9PSAnIycpIHx8XG4gICAgICAgIHZtLiRvcHRpb25zLmVsIHx8IGVsKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICdjb21waWxlciBpcyBub3QgYXZhaWxhYmxlLiBFaXRoZXIgcHJlLWNvbXBpbGUgdGhlIHRlbXBsYXRlcyBpbnRvICcgK1xuICAgICAgICAgICdyZW5kZXIgZnVuY3Rpb25zLCBvciB1c2UgdGhlIGNvbXBpbGVyLWluY2x1ZGVkIGJ1aWxkLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0ZhaWxlZCB0byBtb3VudCBjb21wb25lbnQ6IHRlbXBsYXRlIG9yIHJlbmRlciBmdW5jdGlvbiBub3QgZGVmaW5lZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbGxIb29rKHZtLCAnYmVmb3JlTW91bnQnKTtcblxuICB2YXIgdXBkYXRlQ29tcG9uZW50O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2Y
33378XIgbmFtZSA9IHZtLl9uYW1lO1xuICAgICAgdmFyIGlkID0gdm0uX3VpZDtcbiAgICAgIHZhciBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIgKyBpZDtcbiAgICAgIHZhciBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIiArIGlkO1xuXG4gICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgIHZhciB2bm9kZSA9IHZtLl9yZW5kZXIoKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHJlbmRlclwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG5cbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgdm0uX3VwZGF0ZSh2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZtLl91cGRhdGUodm0uX3JlbmRlcigpLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH1cblxuICAvLyB3ZSBzZXQgdGhpcyB0byB2bS5fd2F0Y2hlciBpbnNpZGUgdGhlIHdhdGNoZXIncyBjb25zdHJ1Y3RvclxuICAvLyBzaW5jZSB0aGUgd2F0Y2hlcidzIGluaXRpYWwgcGF0Y2ggbWF5IGNhbGwgJGZvcmNlVXBkYXRlIChlLmcuIGluc2lkZSBjaGlsZFxuICAvLyBjb21wb25lbnQncyBtb3VudGVkIGhvb2spLCB3aGljaCByZWxpZXMgb24gdm0uX3dhdGNoZXIgYmVpbmcgYWxyZWFkeSBkZWZpbmVkXG4gIG5ldyBXYXRjaGVyKHZtLCB1cGRhdGVDb21wb25lbnQsIG5vb3AsIHtcbiAgICBiZWZvcmU6IGZ1bmN0aW9uIGJlZm9yZSAoKSB7XG4gICAgICBpZiAodm0uX2lzTW91bnRlZCAmJiAhdm0uX2lzRGVzdHJveWVkKSB7XG4gICAgICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlVXBkYXRlJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB0cnVlIC8qIGlzUmVuZGVyV2F0Y2hlciAqLyk7XG4gIGh5ZHJhdGluZyA9IGZhbHNlO1xuXG4gIC8vIG1hbnVhbGx5IG1vdW50ZWQgaW5zdGFuY2UsIGNhbGwgbW91bnRlZCBvbiBzZWxmXG4gIC8vIG1vdW50ZWQgaXMgY2FsbGVkIGZvciByZW5kZXItY3JlYXRlZCBjaGlsZCBjb21wb25lbnRzIGluIGl0cyBpbnNlcnRlZCBob29rXG4gIGlmICh2bS4kdm5vZGUgPT0gbnVsbCkge1xuICAgIHZtLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgIGNhbGxIb29rKHZtLCAnbW91bnRlZCcpO1xuICB9XG4gIHJldHVybiB2bVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDaGlsZENvbXBvbmVudCAoXG4gIHZtLFxuICBwcm9wc0RhdGEsXG4gIGxpc3RlbmVycyxcbiAgcGFyZW50Vm5vZGUsXG4gIHJlbmRlckNoaWxkcmVuXG4pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSB0cnVlO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgY29tcG9uZW50IGhhcyBzbG90IGNoaWxkcmVuXG4gIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgb3ZlcndyaXRpbmcgJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLlxuXG4gIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBkeW5hbWljIHNjb3BlZFNsb3RzIChoYW5kLXdyaXR0ZW4gb3IgY29tcGlsZWQgYnV0IHdpdGhcbiAgLy8gZHluYW1pYyBzbG90IG5hbWVzKS4gU3RhdGljIHNjb3BlZCBzbG90cyBjb21waWxlZCBmcm9tIHRlbXBsYXRlIGhhcyB0aGVcbiAgLy8gXCIkc3RhYmxlXCIgbWFya2VyLlxuICB2YXIgbmV3U2NvcGVkU2xvdHMgPSBwYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzO1xuICB2YXIgb2xkU2NvcGVkU2xvdHMgPSB2bS4kc2NvcGVkU2xvdHM7XG4gIHZhciBoYXNEeW5hbWljU2NvcGVkU2xvdCA9ICEhKFxuICAgIChuZXdTY29wZWRTbG90cyAmJiAhbmV3U2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAob2xkU2NvcGVkU2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmICFvbGRTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgIChuZXdTY29wZWRTbG90cyAmJiB2bS4kc2NvcGVkU2xvdHMuJGtleSAhPT0gbmV3U2NvcGVkU2xvdHMuJGtleSlcbiAgKTtcblxuICAvLyBBbnkgc3RhdGljIHNsb3QgY2hpbGRyZW4gZnJvbSB0aGUgcGFyZW50IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHBhcmVudCdzXG4gIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAvLyB1cGRhdGUgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cbiAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSAhIShcbiAgICByZW5kZXJDaGlsZHJlbiB8fCAgICAgICAgICAgICAgIC8vIGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8ICAvLyBoYXMgb2xkIHN0YXRpYyBzbG90c1xuICAgIGhhc0R5bmFtaWNTY29wZWRTbG90XG4gICk7XG5cbiAgdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAvLyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG5cbiAgaWYgKHZtLl92bm9kZSkgeyAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgIHZtLl92bm9kZS5wYXJlbnQgPSBwYXJlbnRWbm9kZTtcbiAgfVxuICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gPSByZW5kZXJDaGlsZHJlbjtcblxuICAvLyB1cGRhdGUgJGF0dHJzIGFuZCAkbGlzdGVuZXJzIGhhc2hcbiAgLy8gdGhlc2UgYXJlIGFsc28gcmVhY3RpdmUgc28gdGhleSBtYXkgdHJpZ2dlciBjaGlsZCB1cGRhdGUgaWYgdGhlIGNoaWxkXG4gIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gIHZtLiRhdHRycyA9IHBhcmVudFZub2RlLmRhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3Q7XG4gIHZtLiRsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3Q7XG5cbiAgLy8gdXBkYXRlIHByb3BzXG4gIGlmIChwcm9wc0RhdGEgJiYgdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICB2YXIgcHJvcEtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHByb3BLZXlzW2ldO1xuICAgICAgdmFyIHByb3BPcHRpb25zID0gdm0uJG9wdGlvbnMucHJvcHM7IC8vIHd0ZiBmbG93P1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJv
33378cChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICB9XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIC8vIGtlZXAgYSBjb3B5IG9mIHJhdyBwcm9wc0RhdGFcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gIH1cblxuICAvLyB1cGRhdGUgbGlzdGVuZXJzXG4gIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgdmFyIG9sZExpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpO1xuXG4gIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXG4gIGlmIChuZWVkc0ZvcmNlVXBkYXRlKSB7XG4gICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICB2bS4kZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbkluYWN0aXZlVHJlZSAodm0pIHtcbiAgd2hpbGUgKHZtICYmICh2bSA9IHZtLiRwYXJlbnQpKSB7XG4gICAgaWYgKHZtLl9pbmFjdGl2ZSkgeyByZXR1cm4gdHJ1ZSB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHZtLl9kaXJlY3RJbmFjdGl2ZSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2bS5faW5hY3RpdmUgfHwgdm0uX2luYWN0aXZlID09PSBudWxsKSB7XG4gICAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdhY3RpdmF0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cbiAgaWYgKCF2bS5faW5hY3RpdmUpIHtcbiAgICB2bS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdkZWFjdGl2YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rICh2bSwgaG9vaykge1xuICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgbGlmZWN5Y2xlIGhvb2tzXG4gIHB1c2hUYXJnZXQoKTtcbiAgdmFyIGhhbmRsZXJzID0gdm0uJG9wdGlvbnNbaG9va107XG4gIHZhciBpbmZvID0gaG9vayArIFwiIGhvb2tcIjtcbiAgaWYgKGhhbmRsZXJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGhhbmRsZXJzW2ldLCB2bSwgbnVsbCwgdm0sIGluZm8pO1xuICAgIH1cbiAgfVxuICBpZiAodm0uX2hhc0hvb2tFdmVudCkge1xuICAgIHZtLiRlbWl0KCdob29rOicgKyBob29rKTtcbiAgfVxuICBwb3BUYXJnZXQoKTtcbn1cblxuLyogICovXG5cbnZhciBNQVhfVVBEQVRFX0NPVU5UID0gMTAwO1xuXG52YXIgcXVldWUgPSBbXTtcbnZhciBhY3RpdmF0ZWRDaGlsZHJlbiA9IFtdO1xudmFyIGhhcyA9IHt9O1xudmFyIGNpcmN1bGFyID0ge307XG52YXIgd2FpdGluZyA9IGZhbHNlO1xudmFyIGZsdXNoaW5nID0gZmFsc2U7XG52YXIgaW5kZXggPSAwO1xuXG4vKipcbiAqIFJlc2V0IHRoZSBzY2hlZHVsZXIncyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gcmVzZXRTY2hlZHVsZXJTdGF0ZSAoKSB7XG4gIGluZGV4ID0gcXVldWUubGVuZ3RoID0gYWN0aXZhdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgaGFzID0ge307XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2lyY3VsYXIgPSB7fTtcbiAgfVxuICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcbn1cblxuLy8gQXN5bmMgZWRnZSBjYXNlICM2NTY2IHJlcXVpcmVzIHNhdmluZyB0aGUgdGltZXN0YW1wIHdoZW4gZXZlbnQgbGlzdGVuZXJzIGFyZVxuLy8gYXR0YWNoZWQuIEhvd2V2ZXIsIGNhbGxpbmcgcGVyZm9ybWFuY2Uubm93KCkgaGFzIGEgcGVyZiBvdmVyaGVhZCBlc3BlY2lhbGx5XG4vLyBpZiB0aGUgcGFnZSBoYXMgdGhvdXNhbmRzIG9mIGV2ZW50IGxpc3RlbmVycy4gSW5zdGVhZCwgd2UgdGFrZSBhIHRpbWVzdGFtcFxuLy8gZXZlcnkgdGltZSB0aGUgc2NoZWR1bGVyIGZsdXNoZXMgYW5kIHVzZSB0aGF0IGZvciBhbGwgZXZlbnQgbGlzdGVuZXJzXG4vLyBhdHRhY2hlZCBkdXJpbmcgdGhhdCBmbHVzaC5cbnZhciBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSAwO1xuXG4vLyBBc3luYyBlZGdlIGNhc2UgZml4IHJlcXVpcmVzIHN0b3JpbmcgYW4gZXZlbnQgbGlzdGVuZXIncyBhdHRhY2ggdGltZXN0YW1wLlxudmFyIGdldE5vdyA9IERhdGUubm93O1xuXG4vLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxuLy8gdGltZXN0YW1wIGNhbiBlaXRoZXIgYmUgaGktcmVzIChyZWxhdGl2ZSB0byBwYWdlIGxvYWQpIG9yIGxvdy1yZXNcbi8vIChyZWxhdGl2ZSB0byBVTklYIGVwb2NoKSwgc28gaW4gb3JkZXIgdG8gY29tcGFyZSB0aW1lIHdlIGhhdmUgdG8gdXNlIHRoZVxuLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxuLy8gQWxsIElFIHZlcnNpb25zIHVzZSBsb3ctcmVzIGV2ZW50IHRpbWVzdGFtcHMsIGFuZCBoYXZlIHByb2JsZW1hdGljIGNsb2NrXG4vLyBpbXBsZW1lbnRhdGlvbnMgKCM5NjMyKVxuaWYgKGluQnJvd3NlciAmJiAhaXNJRSkge1xuICB2YXIgcGVyZm9ybWFuY2UgPSB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIGlmIChcbiAgICBwZXJmb3JtYW5jZSAmJlxuICAgI
33378HR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbicgJiZcbiAgICBnZXROb3coKSA+IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpLnRpbWVTdGFtcFxuICApIHtcbiAgICAvLyBpZiB0aGUgZXZlbnQgdGltZXN0YW1wLCBhbHRob3VnaCBldmFsdWF0ZWQgQUZURVIgdGhlIERhdGUubm93KCksIGlzXG4gICAgLy8gc21hbGxlciB0aGFuIGl0LCBpdCBtZWFucyB0aGUgZXZlbnQgaXMgdXNpbmcgYSBoaS1yZXMgdGltZXN0YW1wLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgaGktcmVzIHZlcnNpb24gZm9yIGV2ZW50IGxpc3RlbmVyIHRpbWVzdGFtcHMgYXNcbiAgICAvLyB3ZWxsLlxuICAgIGdldE5vdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpOyB9O1xuICB9XG59XG5cbi8qKlxuICogRmx1c2ggYm90aCBxdWV1ZXMgYW5kIHJ1biB0aGUgd2F0Y2hlcnMuXG4gKi9cbmZ1bmN0aW9uIGZsdXNoU2NoZWR1bGVyUXVldWUgKCkge1xuICBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSBnZXROb3coKTtcbiAgZmx1c2hpbmcgPSB0cnVlO1xuICB2YXIgd2F0Y2hlciwgaWQ7XG5cbiAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0OlxuICAvLyAxLiBDb21wb25lbnRzIGFyZSB1cGRhdGVkIGZyb20gcGFyZW50IHRvIGNoaWxkLiAoYmVjYXVzZSBwYXJlbnQgaXMgYWx3YXlzXG4gIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcbiAgLy8gMi4gQSBjb21wb25lbnQncyB1c2VyIHdhdGNoZXJzIGFyZSBydW4gYmVmb3JlIGl0cyByZW5kZXIgd2F0Y2hlciAoYmVjYXVzZVxuICAvLyAgICB1c2VyIHdhdGNoZXJzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgcmVuZGVyIHdhdGNoZXIpXG4gIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29tcG9uZW50J3Mgd2F0Y2hlciBydW4sXG4gIC8vICAgIGl0cyB3YXRjaGVycyBjYW4gYmUgc2tpcHBlZC5cbiAgcXVldWUuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuXG4gIC8vIGRvIG5vdCBjYWNoZSBsZW5ndGggYmVjYXVzZSBtb3JlIHdhdGNoZXJzIG1pZ2h0IGJlIHB1c2hlZFxuICAvLyBhcyB3ZSBydW4gZXhpc3Rpbmcgd2F0Y2hlcnNcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcXVldWUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgd2F0Y2hlciA9IHF1ZXVlW2luZGV4XTtcbiAgICBpZiAod2F0Y2hlci5iZWZvcmUpIHtcbiAgICAgIHdhdGNoZXIuYmVmb3JlKCk7XG4gICAgfVxuICAgIGlkID0gd2F0Y2hlci5pZDtcbiAgICBoYXNbaWRdID0gbnVsbDtcbiAgICB3YXRjaGVyLnJ1bigpO1xuICAgIC8vIGluIGRldiBidWlsZCwgY2hlY2sgYW5kIHN0b3AgY2lyY3VsYXIgdXBkYXRlcy5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBoYXNbaWRdICE9IG51bGwpIHtcbiAgICAgIGNpcmN1bGFyW2lkXSA9IChjaXJjdWxhcltpZF0gfHwgMCkgKyAxO1xuICAgICAgaWYgKGNpcmN1bGFyW2lkXSA+IE1BWF9VUERBVEVfQ09VTlQpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnWW91IG1heSBoYXZlIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wICcgKyAoXG4gICAgICAgICAgICB3YXRjaGVyLnVzZXJcbiAgICAgICAgICAgICAgPyAoXCJpbiB3YXRjaGVyIHdpdGggZXhwcmVzc2lvbiBcXFwiXCIgKyAod2F0Y2hlci5leHByZXNzaW9uKSArIFwiXFxcIlwiKVxuICAgICAgICAgICAgICA6IFwiaW4gYSBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9uLlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3YXRjaGVyLnZtXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8ga2VlcCBjb3BpZXMgb2YgcG9zdCBxdWV1ZXMgYmVmb3JlIHJlc2V0dGluZyBzdGF0ZVxuICB2YXIgYWN0aXZhdGVkUXVldWUgPSBhY3RpdmF0ZWRDaGlsZHJlbi5zbGljZSgpO1xuICB2YXIgdXBkYXRlZFF1ZXVlID0gcXVldWUuc2xpY2UoKTtcblxuICByZXNldFNjaGVkdWxlclN0YXRlKCk7XG5cbiAgLy8gY2FsbCBjb21wb25lbnQgdXBkYXRlZCBhbmQgYWN0aXZhdGVkIGhvb2tzXG4gIGNhbGxBY3RpdmF0ZWRIb29rcyhhY3RpdmF0ZWRRdWV1ZSk7XG4gIGNhbGxVcGRhdGVkSG9va3ModXBkYXRlZFF1ZXVlKTtcblxuICAvLyBkZXZ0b29sIGhvb2tcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChkZXZ0b29scyAmJiBjb25maWcuZGV2dG9vbHMpIHtcbiAgICBkZXZ0b29scy5lbWl0KCdmbHVzaCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxVcGRhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIHZhciBpID0gcXVldWUubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIHdhdGNoZXIgPSBxdWV1ZVtpXTtcbiAgICB2YXIgdm0gPSB3YXRjaGVyLnZtO1xuICAgIGlmICh2bS5fd2F0Y2hlciA9PT0gd2F0Y2hlciAmJiB2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGNhbGxIb29rKHZtLCAndXBkYXRlZCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBwYXRjaC5cbiAqIFRoZSBxdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gcGF0Y2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25lbnQgKHZtKSB7XG4gIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBhIHJlbmRlciBmdW5jdGlvbiBjYW5cbiAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgaW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xufVxuXG5mdW5jdGlvbiBjYWxsQWN0aXZhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQocXVldWVbaV0sIHRydWUgLyogdHJ1ZSAqLyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQdXNoIGEgd2F0Y2hlciBpbnRvIHRoZSB3YXRjaGVyIHF1ZXVlLlxuICogSm9icyB3aXRoIGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXG4gKiBwdXNoZWQgd2hlbiB0aGUgcXVldWUgaXMgYmVpbmcgZmx1c2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVXYXRjaGVyICh3YXRjaGVyKSB7XG4gIHZhciBpZCA9IHdhdGNoZXIuaWQ7XG4gIGlmIChoYXNbaWRdID09IG51bGwpIHtcbiAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICBpZiAoIWZsdXNoaW5nKSB7XG4gICAgICBxdWV1ZS5wdXNoKHdhdGNoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBhbHJlYWR5IGZsdXNoaW5nLCBzcGxpY2UgdGhlIHdhdGNoZXIgYmFzZWQgb24gaXRzIGlkXG4gICAgICAvLyBpZiBhbHJlYWR5IHBhc3QgaXRzIGlkLCBpdCB3aWxsIGJlIHJ1biBuZXh0IGltbWVkaWF0ZWx5LlxuICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkgPiBpbmRleCAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgaS0tO1xuICAgICAgfVxuICAgICAgcXVldWUuc3BsaWNlKGkgKyAxLCAwLCB3YXRjaGVyKTtcbiAgICB9XG4gICAgLy8gcXVldWUgdGhlIGZsdXNoXG4gICAgaWYgKCF3YWl
333780aW5nKSB7XG4gICAgICB3YWl0aW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmZpZy5hc3luYykge1xuICAgICAgICBmbHVzaFNjaGVkdWxlclF1ZXVlKCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbmV4dFRpY2soZmx1c2hTY2hlZHVsZXJRdWV1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5cblxudmFyIHVpZCQyID0gMDtcblxuLyoqXG4gKiBBIHdhdGNoZXIgcGFyc2VzIGFuIGV4cHJlc3Npb24sIGNvbGxlY3RzIGRlcGVuZGVuY2llcyxcbiAqIGFuZCBmaXJlcyBjYWxsYmFjayB3aGVuIHRoZSBleHByZXNzaW9uIHZhbHVlIGNoYW5nZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAqL1xudmFyIFdhdGNoZXIgPSBmdW5jdGlvbiBXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGNiLFxuICBvcHRpb25zLFxuICBpc1JlbmRlcldhdGNoZXJcbikge1xuICB0aGlzLnZtID0gdm07XG4gIGlmIChpc1JlbmRlcldhdGNoZXIpIHtcbiAgICB2bS5fd2F0Y2hlciA9IHRoaXM7XG4gIH1cbiAgdm0uX3dhdGNoZXJzLnB1c2godGhpcyk7XG4gIC8vIG9wdGlvbnNcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZXAgPSAhIW9wdGlvbnMuZGVlcDtcbiAgICB0aGlzLnVzZXIgPSAhIW9wdGlvbnMudXNlcjtcbiAgICB0aGlzLmxhenkgPSAhIW9wdGlvbnMubGF6eTtcbiAgICB0aGlzLnN5bmMgPSAhIW9wdGlvbnMuc3luYztcbiAgICB0aGlzLmJlZm9yZSA9IG9wdGlvbnMuYmVmb3JlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZGVlcCA9IHRoaXMudXNlciA9IHRoaXMubGF6eSA9IHRoaXMuc3luYyA9IGZhbHNlO1xuICB9XG4gIHRoaXMuY2IgPSBjYjtcbiAgdGhpcy5pZCA9ICsrdWlkJDI7IC8vIHVpZCBmb3IgYmF0Y2hpbmdcbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICB0aGlzLmRlcHMgPSBbXTtcbiAgdGhpcy5uZXdEZXBzID0gW107XG4gIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5uZXdEZXBJZHMgPSBuZXcgX1NldCgpO1xuICB0aGlzLmV4cHJlc3Npb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgPyBleHBPckZuLnRvU3RyaW5nKClcbiAgICA6ICcnO1xuICAvLyBwYXJzZSBleHByZXNzaW9uIGZvciBnZXR0ZXJcbiAgaWYgKHR5cGVvZiBleHBPckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBleHBPckZuO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZ2V0dGVyID0gcGFyc2VQYXRoKGV4cE9yRm4pO1xuICAgIGlmICghdGhpcy5nZXR0ZXIpIHtcbiAgICAgIHRoaXMuZ2V0dGVyID0gbm9vcDtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJGYWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiICsgZXhwT3JGbiArIFwiXFxcIiBcIiArXG4gICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXG4gICAgICAgICdGb3IgZnVsbCBjb250cm9sLCB1c2UgYSBmdW5jdGlvbiBpbnN0ZWFkLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxuICB0aGlzLnZhbHVlID0gdGhpcy5sYXp5XG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHRoaXMuZ2V0KCk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSBnZXR0ZXIsIGFuZCByZS1jb2xsZWN0IGRlcGVuZGVuY2llcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0ICgpIHtcbiAgcHVzaFRhcmdldCh0aGlzKTtcbiAgdmFyIHZhbHVlO1xuICB2YXIgdm0gPSB0aGlzLnZtO1xuICB0cnkge1xuICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImdldHRlciBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gXCJ0b3VjaFwiIGV2ZXJ5IHByb3BlcnR5IHNvIHRoZXkgYXJlIGFsbCB0cmFja2VkIGFzXG4gICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgaWYgKHRoaXMuZGVlcCkge1xuICAgICAgdHJhdmVyc2UodmFsdWUpO1xuICAgIH1cbiAgICBwb3BUYXJnZXQoKTtcbiAgICB0aGlzLmNsZWFudXBEZXBzKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59O1xuXG4vKipcbiAqIEFkZCBhIGRlcGVuZGVuY3kgdG8gdGhpcyBkaXJlY3RpdmUuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmFkZERlcCA9IGZ1bmN0aW9uIGFkZERlcCAoZGVwKSB7XG4gIHZhciBpZCA9IGRlcC5pZDtcbiAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoaWQpKSB7XG4gICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICB0aGlzLm5ld0RlcHMucHVzaChkZXApO1xuICAgIGlmICghdGhpcy5kZXBJZHMuaGFzKGlkKSkge1xuICAgICAgZGVwLmFkZFN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYW4gdXAgZm9yIGRlcGVuZGVuY3kgY29sbGVjdGlvbi5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuY2xlYW51cERlcHMgPSBmdW5jdGlvbiBjbGVhbnVwRGVwcyAoKSB7XG4gIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBkZXAgPSB0aGlzLmRlcHNbaV07XG4gICAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoZGVwLmlkKSkge1xuICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbiAgdmFyIHRtcCA9IHRoaXMuZGVwSWRzO1xuICB0aGlzLmRlcElkcyA9IHRoaXMubmV3RGVwSWRzO1xuICB0aGlzLm5ld0RlcElkcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBJZHMuY2xlYXIoKTtcbiAgdG1wID0gdGhpcy5kZXBzO1xuICB0aGlzLmRlcHMgPSB0aGlzLm5ld0RlcHM7XG4gIHRoaXMubmV3RGVwcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZXIgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlcGVuZGVuY3kgY2hhbmdlcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRoaXMubGF6eSkge1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHRoaXMuc3luYykge1xuICAgIHRoaXMucnVuKCk7XG4gIH0gZWxzZSB7XG4gICAgcXVldWVXYXRjaGVyKHRoaXMpO1xuICB9XG59O1xuXG4vKipcbiAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlI
33378HNjaGVkdWxlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gcnVuICgpIHtcbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoKTtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSAhPT0gdGhpcy52YWx1ZSB8fFxuICAgICAgLy8gRGVlcCB3YXRjaGVycyBhbmQgd2F0Y2hlcnMgb24gT2JqZWN0L0FycmF5cyBzaG91bGQgZmlyZSBldmVuXG4gICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAvLyBoYXZlIG11dGF0ZWQuXG4gICAgICBpc09iamVjdCh2YWx1ZSkgfHxcbiAgICAgIHRoaXMuZGVlcFxuICAgICkge1xuICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHRoaXMudm0sIChcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlci5cbiAqIFRoaXMgb25seSBnZXRzIGNhbGxlZCBmb3IgbGF6eSB3YXRjaGVycy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZSAoKSB7XG4gIHRoaXMudmFsdWUgPSB0aGlzLmdldCgpO1xuICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlcGVuZCBvbiBhbGwgZGVwcyBjb2xsZWN0ZWQgYnkgdGhpcyB3YXRjaGVyLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB0aGlzLmRlcHNbaV0uZGVwZW5kKCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlIHNlbGYgZnJvbSBhbGwgZGVwZW5kZW5jaWVzJyBzdWJzY3JpYmVyIGxpc3QuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24gdGVhcmRvd24gKCkge1xuICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHZtJ3Mgd2F0Y2hlciBsaXN0XG4gICAgLy8gdGhpcyBpcyBhIHNvbWV3aGF0IGV4cGVuc2l2ZSBvcGVyYXRpb24gc28gd2Ugc2tpcCBpdFxuICAgIC8vIGlmIHRoZSB2bSBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgaWYgKCF0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICByZW1vdmUodGhpcy52bS5fd2F0Y2hlcnMsIHRoaXMpO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5kZXBzW2ldLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxufTtcblxuLyogICovXG5cbnZhciBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBub29wLFxuICBzZXQ6IG5vb3Bcbn07XG5cbmZ1bmN0aW9uIHByb3h5ICh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBmdW5jdGlvbiBwcm94eUdldHRlciAoKSB7XG4gICAgcmV0dXJuIHRoaXNbc291cmNlS2V5XVtrZXldXG4gIH07XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlciAodmFsKSB7XG4gICAgdGhpc1tzb3VyY2VLZXldW2tleV0gPSB2YWw7XG4gIH07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gaW5pdFN0YXRlICh2bSkge1xuICB2bS5fd2F0Y2hlcnMgPSBbXTtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztcbiAgaWYgKG9wdHMucHJvcHMpIHsgaW5pdFByb3BzKHZtLCBvcHRzLnByb3BzKTsgfVxuICBpZiAob3B0cy5tZXRob2RzKSB7IGluaXRNZXRob2RzKHZtLCBvcHRzLm1ldGhvZHMpOyB9XG4gIGlmIChvcHRzLmRhdGEpIHtcbiAgICBpbml0RGF0YSh2bSk7XG4gIH0gZWxzZSB7XG4gICAgb2JzZXJ2ZSh2bS5fZGF0YSA9IHt9LCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xuICB9XG4gIGlmIChvcHRzLmNvbXB1dGVkKSB7IGluaXRDb21wdXRlZCh2bSwgb3B0cy5jb21wdXRlZCk7IH1cbiAgaWYgKG9wdHMud2F0Y2ggJiYgb3B0cy53YXRjaCAhPT0gbmF0aXZlV2F0Y2gpIHtcbiAgICBpbml0V2F0Y2godm0sIG9wdHMud2F0Y2gpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyAodm0sIHByb3BzT3B0aW9ucykge1xuICB2YXIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICB2YXIgcHJvcHMgPSB2bS5fcHJvcHMgP
33378SB7fTtcbiAgLy8gY2FjaGUgcHJvcCBrZXlzIHNvIHRoYXQgZnV0dXJlIHByb3BzIHVwZGF0ZXMgY2FuIGl0ZXJhdGUgdXNpbmcgQXJyYXlcbiAgLy8gaW5zdGVhZCBvZiBkeW5hbWljIG9iamVjdCBrZXkgZW51bWVyYXRpb24uXG4gIHZhciBrZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzID0gW107XG4gIHZhciBpc1Jvb3QgPSAhdm0uJHBhcmVudDtcbiAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gIGlmICghaXNSb290KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgfVxuICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgIGtleXMucHVzaChrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BzT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChpc1Jlc2VydmVkQXR0cmlidXRlKGh5cGhlbmF0ZWRLZXkpIHx8XG4gICAgICAgICAgY29uZmlnLmlzUmVzZXJ2ZWRBdHRyKGh5cGhlbmF0ZWRLZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiXFxcIlwiICsgaHlwaGVuYXRlZEtleSArIFwiXFxcIiBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZSBhbmQgY2Fubm90IGJlIHVzZWQgYXMgY29tcG9uZW50IHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWZpbmVSZWFjdGl2ZSQkMShwcm9wcywga2V5LCB2YWx1ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWlzUm9vdCAmJiAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50KSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYSBwcm9wIGRpcmVjdGx5IHNpbmNlIHRoZSB2YWx1ZSB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHBhcmVudCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJJbnN0ZWFkLCB1c2UgYSBkYXRhIG9yIGNvbXB1dGVkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwcm9wJ3MgXCIgK1xuICAgICAgICAgICAgXCJ2YWx1ZS4gUHJvcCBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHByb3BzLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgLy8gc3RhdGljIHByb3BzIGFyZSBhbHJlYWR5IHByb3hpZWQgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZVxuICAgIC8vIGR1cmluZyBWdWUuZXh0ZW5kKCkuIFdlIG9ubHkgbmVlZCB0byBwcm94eSBwcm9wcyBkZWZpbmVkIGF0XG4gICAgLy8gaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSBsb29wKCBrZXkgKTtcbiAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xufVxuXG5mdW5jdGlvbiBpbml0RGF0YSAodm0pIHtcbiAgdmFyIGRhdGEgPSB2bS4kb3B0aW9ucy5kYXRhO1xuICBkYXRhID0gdm0uX2RhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZ2V0RGF0YShkYXRhLCB2bSlcbiAgICA6IGRhdGEgfHwge307XG4gIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgIGRhdGEgPSB7fTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAnZGF0YSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBhbiBvYmplY3Q6XFxuJyArXG4gICAgICAnaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvY29tcG9uZW50cy5odG1sI2RhdGEtTXVzdC1CZS1hLUZ1bmN0aW9uJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIGRhdGEgcHJvcGVydHkuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJUaGUgZGF0YSBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWNsYXJlZCBhcyBhIHByb3AuIFwiICtcbiAgICAgICAgXCJVc2UgcHJvcCBkZWZhdWx0IHZhbHVlIGluc3RlYWQuXCIsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgcHJveHkodm0sIFwiX2RhdGFcIiwga2V5KTtcbiAgICB9XG4gIH1cbiAgLy8gb2JzZXJ2ZSBkYXRhXG4gIG9ic2VydmUoZGF0YSwgdHJ1ZSAvKiBhc1Jvb3REYXRhICovKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YSAoZGF0YSwgdm0pIHtcbiAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGRhdGEgZ2V0dGVyc1xuICBwdXNoVGFyZ2V0KCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRhdGEuY2FsbCh2bSwgdm0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJkYXRhKClcIik7XG4gICAgcmV0dXJuIHt9XG4gIH0gZmluYWxseSB7XG4gICAgcG9wVGFyZ2V0KCk7XG4gIH1cbn1cblxudmFyIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnMgPSB7IGxhenk6IHRydWUgfTtcblxuZnVuY3Rpb24gaW5pdENvbXB1dGVkICh2bSwgY29tcHV0ZWQpIHtcbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gI
33378HZhciB3YXRjaGVycyA9IHZtLl9jb21wdXRlZFdhdGNoZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gY29tcHV0ZWQgcHJvcGVydGllcyBhcmUganVzdCBnZXR0ZXJzIGR1cmluZyBTU1JcbiAgdmFyIGlzU1NSID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICB2YXIgdXNlckRlZiA9IGNvbXB1dGVkW2tleV07XG4gICAgdmFyIGdldHRlciA9IHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nID8gdXNlckRlZiA6IHVzZXJEZWYuZ2V0O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGdldHRlciA9PSBudWxsKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJHZXR0ZXIgaXMgbWlzc2luZyBmb3IgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiLlwiKSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1NTUikge1xuICAgICAgLy8gY3JlYXRlIGludGVybmFsIHdhdGNoZXIgZm9yIHRoZSBjb21wdXRlZCBwcm9wZXJ0eS5cbiAgICAgIHdhdGNoZXJzW2tleV0gPSBuZXcgV2F0Y2hlcihcbiAgICAgICAgdm0sXG4gICAgICAgIGdldHRlciB8fCBub29wLFxuICAgICAgICBub29wLFxuICAgICAgICBjb21wdXRlZFdhdGNoZXJPcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNvbXBvbmVudC1kZWZpbmVkIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGVcbiAgICAvLyBjb21wb25lbnQgcHJvdG90eXBlLiBXZSBvbmx5IG5lZWQgdG8gZGVmaW5lIGNvbXB1dGVkIHByb3BlcnRpZXMgZGVmaW5lZFxuICAgIC8vIGF0IGluc3RhbnRpYXRpb24gaGVyZS5cbiAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICBkZWZpbmVDb21wdXRlZCh2bSwga2V5LCB1c2VyRGVmKTtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChrZXkgaW4gdm0uJGRhdGEpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBkYXRhLlwiKSwgdm0pO1xuICAgICAgfSBlbHNlIGlmICh2bS4kb3B0aW9ucy5wcm9wcyAmJiBrZXkgaW4gdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIHByb3AuXCIpLCB2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZUNvbXB1dGVkIChcbiAgdGFyZ2V0LFxuICBrZXksXG4gIHVzZXJEZWZcbikge1xuICB2YXIgc2hvdWxkQ2FjaGUgPSAhaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcbiAgaWYgKHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHNob3VsZENhY2hlXG4gICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmKTtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gbm9vcDtcbiAgfSBlbHNlIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gdXNlckRlZi5nZXRcbiAgICAgID8gc2hvdWxkQ2FjaGUgJiYgdXNlckRlZi5jYWNoZSAhPT0gZmFsc2VcbiAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmLmdldClcbiAgICAgIDogbm9vcDtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gdXNlckRlZi5zZXQgfHwgbm9vcDtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9PT0gbm9vcCkge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJDb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIGFzc2lnbmVkIHRvIGJ1dCBpdCBoYXMgbm8gc2V0dGVyLlwiKSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIgKGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgIHZhciB3YXRjaGVyID0gdGhpcy5fY29tcHV0ZWRXYXRjaGVycyAmJiB0aGlzLl9jb21wdXRlZFdhdGNoZXJzW2tleV07XG4gICAgaWYgKHdhdGNoZXIpIHtcbiAgICAgIGlmICh3YXRjaGVyLmRpcnR5KSB7XG4gICAgICAgIHdhdGNoZXIuZXZhbHVhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVHZXR0ZXJJbnZva2VyKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlciAoKSB7XG4gICAgcmV0dXJuIGZuLmNhbGwodGhpcywgdGh
33378pcylcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0TWV0aG9kcyAodm0sIG1ldGhvZHMpIHtcbiAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBtZXRob2RzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyB0eXBlIFxcXCJcIiArICh0eXBlb2YgbWV0aG9kc1trZXldKSArIFwiXFxcIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIFwiICtcbiAgICAgICAgICBcIkRpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/XCIsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoKGtleSBpbiB2bSkgJiYgaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiICtcbiAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdm1ba2V5XSA9IHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicgPyBub29wIDogYmluZChtZXRob2RzW2tleV0sIHZtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0V2F0Y2ggKHZtLCB3YXRjaCkge1xuICBmb3IgKHZhciBrZXkgaW4gd2F0Y2gpIHtcbiAgICB2YXIgaGFuZGxlciA9IHdhdGNoW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXJbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGhhbmRsZXIsXG4gIG9wdGlvbnNcbikge1xuICBpZiAoaXNQbGFpbk9iamVjdChoYW5kbGVyKSkge1xuICAgIG9wdGlvbnMgPSBoYW5kbGVyO1xuICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJykge1xuICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgfVxuICByZXR1cm4gdm0uJHdhdGNoKGV4cE9yRm4sIGhhbmRsZXIsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIHN0YXRlTWl4aW4gKFZ1ZSkge1xuICAvLyBmbG93IHNvbWVob3cgaGFzIHByb2JsZW1zIHdpdGggZGlyZWN0bHkgZGVjbGFyZWQgZGVmaW5pdGlvbiBvYmplY3RcbiAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gIC8vIHRoZSBvYmplY3QgaGVyZS5cbiAgdmFyIGRhdGFEZWYgPSB7fTtcbiAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhIH07XG4gIHZhciBwcm9wc0RlZiA9IHt9O1xuICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wcm9wcyB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGRhdGFEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIHJlcGxhY2luZyBpbnN0YW5jZSByb290ICRkYXRhLiAnICtcbiAgICAgICAgJ1VzZSBuZXN0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICAgIHByb3BzRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXCIkcHJvcHMgaXMgcmVhZG9ubHkuXCIsIHRoaXMpO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckZGF0YScsIGRhdGFEZWYpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRwcm9wcycsIHByb3BzRGVmKTtcblxuICBWdWUucHJvdG90eXBlLiRzZXQgPSBzZXQ7XG4gIFZ1ZS5wcm90b3R5cGUuJGRlbGV0ZSA9IGRlbDtcblxuICBWdWUucHJvdG90eXBlLiR3YXRjaCA9IGZ1bmN0aW9uIChcbiAgICBleHBPckZuLFxuICAgIGNiLFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoaXNQbGFpbk9iamVjdChjYikpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucylcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy51c2VyID0gdHJ1ZTtcbiAgICB2YXIgd2F0Y2hlciA9IG5ldyBXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMuaW1tZWRpYXRlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjYi5jYWxsKHZtLCB3YXRjaGVyLnZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCB2bSwgKFwiY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVud2F0Y2hGbiAoKSB7XG4gICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCQzID0gMDtcblxuZnVuY3Rpb24gaW5pdE1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhIHVpZFxuICAgIHZtLl91aWQgPSB1aWQkMysrO1xuXG4gICAgdmFyIHN0YXJ0VGFnLCBlbmRUYWc7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArICh2bS5fdWlkKTtcbiAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgKHZtLl91
33378aWQpO1xuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgfVxuXG4gICAgLy8gYSBmbGFnIHRvIGF2b2lkIHRoaXMgYmVpbmcgb2JzZXJ2ZWRcbiAgICB2bS5faXNWdWUgPSB0cnVlO1xuICAgIC8vIG1lcmdlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgLy8gb3B0aW1pemUgaW50ZXJuYWwgY29tcG9uZW50IGluc3RhbnRpYXRpb25cbiAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBhbmQgbm9uZSBvZiB0aGVcbiAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgaW5pdEludGVybmFsQ29tcG9uZW50KHZtLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnModm0uY29uc3RydWN0b3IpLFxuICAgICAgICBvcHRpb25zIHx8IHt9LFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW5pdFByb3h5KHZtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgfVxuICAgIC8vIGV4cG9zZSByZWFsIHNlbGZcbiAgICB2bS5fc2VsZiA9IHZtO1xuICAgIGluaXRMaWZlY3ljbGUodm0pO1xuICAgIGluaXRFdmVudHModm0pO1xuICAgIGluaXRSZW5kZXIodm0pO1xuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlQ3JlYXRlJyk7XG4gICAgaW5pdEluamVjdGlvbnModm0pOyAvLyByZXNvbHZlIGluamVjdGlvbnMgYmVmb3JlIGRhdGEvcHJvcHNcbiAgICBpbml0U3RhdGUodm0pO1xuICAgIGluaXRQcm92aWRlKHZtKTsgLy8gcmVzb2x2ZSBwcm92aWRlIGFmdGVyIGRhdGEvcHJvcHNcbiAgICBjYWxsSG9vayh2bSwgJ2NyZWF0ZWQnKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICB2bS5fbmFtZSA9IGZvcm1hdENvbXBvbmVudE5hbWUodm0sIGZhbHNlKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmU
33378oKFwidnVlIFwiICsgKHZtLl9uYW1lKSArIFwiIGluaXRcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgIH1cblxuICAgIGlmICh2bS4kb3B0aW9ucy5lbCkge1xuICAgICAgdm0uJG1vdW50KHZtLiRvcHRpb25zLmVsKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRJbnRlcm5hbENvbXBvbmVudCAodm0sIG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucyk7XG4gIC8vIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuIGR5bmFtaWMgZW51bWVyYXRpb24uXG4gIHZhciBwYXJlbnRWbm9kZSA9IG9wdGlvbnMuX3BhcmVudFZub2RlO1xuICBvcHRzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICBvcHRzLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuXG4gIHZhciB2bm9kZUNvbXBvbmVudE9wdGlvbnMgPSBwYXJlbnRWbm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBvcHRzLnByb3BzRGF0YSA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGE7XG4gIG9wdHMuX3BhcmVudExpc3RlbmVycyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5saXN0ZW5lcnM7XG4gIG9wdHMuX3JlbmRlckNoaWxkcmVuID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmNoaWxkcmVuO1xuICBvcHRzLl9jb21wb25lbnRUYWcgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMudGFnO1xuXG4gIGlmIChvcHRpb25zLnJlbmRlcikge1xuICAgIG9wdHMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XG4gICAgb3B0cy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZucztcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zIChDdG9yKSB7XG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICBpZiAoQ3Rvci5zdXBlcikge1xuICAgIHZhciBzdXBlck9wdGlvbnMgPSByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3Iuc3VwZXIpO1xuICAgIHZhciBjYWNoZWRTdXBlck9wdGlvbnMgPSBDdG9yLnN1cGVyT3B0aW9ucztcbiAgICBpZiAoc3VwZXJPcHRpb25zICE9PSBjYWNoZWRTdXBlck9wdGlvbnMpIHtcbiAgICAgIC8vIHN1cGVyIG9wdGlvbiBjaGFuZ2VkLFxuICAgICAgLy8gbmVlZCB0byByZXNvbHZlIG5ldyBvcHRpb25zLlxuICAgICAgQ3Rvci5zdXBlck9wdGlvbnMgPSBzdXBlck9wdGlvbnM7XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGxhdGUtbW9kaWZpZWQvYXR0YWNoZWQgb3B0aW9ucyAoIzQ5NzYpXG4gICAgICB2Y
33378XIgbW9kaWZpZWRPcHRpb25zID0gcmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyhDdG9yKTtcbiAgICAgIC8vIHVwZGF0ZSBiYXNlIGV4dGVuZCBvcHRpb25zXG4gICAgICBpZiAobW9kaWZpZWRPcHRpb25zKSB7XG4gICAgICAgIGV4dGVuZChDdG9yLmV4dGVuZE9wdGlvbnMsIG1vZGlmaWVkT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBvcHRpb25zID0gQ3Rvci5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHN1cGVyT3B0aW9ucywgQ3Rvci5leHRlbmRPcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5jb21wb25lbnRzW29wdGlvbnMubmFtZV0gPSBDdG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTW9kaWZpZWRPcHRpb25zIChDdG9yKSB7XG4gIHZhciBtb2RpZmllZDtcbiAgdmFyIGxhdGVzdCA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHNlYWxlZCA9IEN0b3Iuc2VhbGVkT3B0aW9ucztcbiAgZm9yICh2YXIga2V5IGluIGxhdGVzdCkge1xuICAgIGlmIChsYXRlc3Rba2V5XSAhPT0gc2VhbGVkW2tleV0pIHtcbiAgICAgIGlmICghbW9kaWZpZWQpIHsgbW9kaWZpZWQgPSB7fTsgfVxuICAgICAgbW9kaWZpZWRba2V5XSA9IGxhdGVzdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbW9kaWZpZWRcbn1cblxuZnVuY3Rpb24gVnVlIChvcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgISh0aGlzIGluc3RhbmNlb2YgVnVlKVxuICApIHtcbiAgICB3YXJuKCdWdWUgaXMgYSBjb25zdHJ1Y3RvciBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkJyk7XG4gIH1cbiAgdGhpcy5faW5pdChvcHRpb25zKTtcbn1cblxuaW5pdE1peGluKFZ1ZSk7XG5zdGF0ZU1peGluKFZ1ZSk7XG5ldmVudHNNaXhpbihWdWUpO1xubGlmZWN5Y2xlTWl4aW4oVnVlKTtcbnJlbmRlck1peGluKFZ1ZSk7XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0VXNlIChWdWUpIHtcbiAgVnVlLnVzZSA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICB2YXIgaW5zdGFsbGVkUGx1Z2lucyA9ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zIHx8ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zID0gW10pKTtcbiAgICBpZiAoaW5zdGFsbGVkUGx1Z2lucy5pbmRleE9mKHBsdWdpbikgPiAtMSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaW5zdGFsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGx1Z2luLmluc3RhbGwuYXBwbHkocGx1Z2luLCBhcmdzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBsdWdpbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG4gICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgcmV0dXJuIHRoaXNcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRNaXhpbiQxIChWdWUpIHtcbiAgVnVlLm1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgdGhpcy5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucywgbWl4aW4pO1xuICAgIHJldHVybiB0aGlzXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0RXh0ZW5kIChWdWUpIHtcbiAgLyoqXG4gICAqIEVhY2ggaW5zdGFuY2UgY29uc3RydWN0b3IsIGluY2x1ZGluZyBWdWUsIGhhcyBhIHVuaXF1ZVxuICAgKiBjaWQuIFRoaXMgZW5hYmxlcyB1cyB0byBjcmVhdGUgd3JhcHBlZCBcImNoaWxkXG4gICAqIGNvbnN0cnVjdG9yc1wiIGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlIGFuZCBjYWNoZSB0aGVtLlxuICAgKi9cbiAgVnVlLmNpZCA9IDA7XG4gIHZhciBjaWQgPSAxO1xuXG4gIC8qKlxuICAgKiBDbGFzcyBpbmhlcml0YW5jZVxuICAgKi9cbiAgVnVlLmV4dGVuZCA9IGZ1bmN0aW9uIChleHRlbmRPcHRpb25zKSB7XG4gICAgZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnMgfHwge307XG4gICAgdmFyIFN1cGVyID0gdGhpcztcbiAgICB2YXIgU3VwZXJJZCA9IFN1cGVyLmNpZDtcbiAgICB2YXIgY2FjaGVkQ3RvcnMgPSBleHRlbmRPcHRpb25zLl9DdG9yIHx8IChleHRlbmRPcHRpb25zLl9DdG9yID0ge30pO1xuICAgIGlmIChjYWNoZWRDdG9yc1tTdXBlcklkXSkge1xuICAgICAgcmV0dXJuIGNhY2hlZEN0b3JzW1N1cGVySWRdXG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBleHRlbmRPcHRpb25zLm5hbWUgfHwgU3VwZXIub3B0aW9ucy5uYW1lO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG5hbWUpIHtcbiAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgU3ViID0gZnVuY3Rpb24gVnVlQ29tcG9uZW50IChvcHRpb25zKSB7XG4gICAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xuICAgIH07XG4gICAgU3ViLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTtcbiAgICBTdWIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViO1xuICAgIFN1Yi5jaWQgPSBjaWQrKztcbiAgICBTdWIub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhcbiAgICAgIFN1cGVyLm9wdGlvbnMsXG4gICAgICBleHRlbmRPcHRpb25zXG4gICAgKTtcbiAgICBTdWJbJ3N1cGVyJ10gPSBTdXBlcjtcblxuICAgIC8vIEZvciBwcm9wcyBhbmQgY29tcHV0ZWQgcHJvcGVydGllcywgd2UgZGVmaW5lIHRoZSBwcm94eSBnZXR0ZXJzIG9uXG4gICAgLy8gdGhlIFZ1ZSBpbnN0YW5jZXMgYXQgZXh0ZW5zaW9uIHRpbWUsIG9uIHRoZSBleHRlbmRlZCBwcm90b3R5cGUuIFRoaXNcbiAgICAvLyBhdm9pZHMgT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxzIGZvciBlYWNoIGluc3RhbmNlIGNyZWF0ZWQuXG4gICAgaWYgKFN1Yi5vcHRpb25zLnByb3BzKSB7XG4gICAgICBpbml0UHJvcHMkMShTdWIpO1xuICAgIH1cbiAgICBpZiAoU3ViLm9wdGlvbnMuY29tcHV0ZWQpIHtcbiAgICAgIGluaXRDb21wdXRlZCQxKFN1Yik7XG4gICAgfVxuXG4gICAgLy8gYWxsb3cgZnVydGhlciBleHRlbnNpb24vbWl4aW4vcGx1Z2luIHVzYWdlXG4gICAgU3ViLmV4dGVuZCA9IFN1cGVyLmV4dGVuZDtcbiAgICBTdWIubWl4aW4gPSBTdXBlci5taXhpbjtcbiAgICBTdWIudXNlID0gU3VwZXIudXNlO1xuXG4gICAgLy8gY3JlYXRlIGFzc2V0IHJlZ2lzdGVycywgc28gZXh0ZW5kZWQgY2xhc3Nlc1xuICAgIC8vIGNhbiBoYXZlIHRoZWlyIHByaXZhdGUgYXNzZXRzIHRvby5cbiAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBTdWJbdHlwZV0gPSBTdXBlclt0eXBlXTtcbiAgICB9KTtcbiAgICAvLyBlbmFibGUgcmVjdXJzaXZlIHNlbGYtbG9va3VwXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIFN1Yi5vcHRpb25zLmNvbXBvbmVudHNbbmFtZV0gPSBTdWI7XG4gICAgfVxuXG4gICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgc3VwZXIgb3B0aW9ucyBhdCBleHRlbnNpb24gdGltZS5cbiAgICAvLyBsYXRlciBhdCBpbnN0YW50aWF0aW9uIHdlIGNhbiBjaGVjayBpZiBTdXBlcidzIG9wdGlvbnMgaGF2ZVxuICAgIC8vIGJlZW4gdXBkYXRlZC5cbiAgICBTdWIuc3VwZXJPcHRpb25zID0gU3VwZXIub3B0aW9ucztcbiAgICBTdWIuZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnM7XG4gICAgU3ViLnNlYWxlZE9wdGlvbnMgPSBleHRlbmQoe30sIFN1Yi5vcHRpb25zKTtcblxuICAgIC8vIGNhY2hlIGNvbnN0cnVjdG9yXG4gICAgY2FjaGVkQ3RvcnNbU3VwZXJJZF0gPSBTdWI7XG4gICAgcmV0dXJuIFN1YlxuICB9O1xufVxuXG5mdW5jdGlvbiBpbml0UHJvcHMkMSAoQ29tcCkge1xuICB2YXIgcHJvcHMgP
33378SBDb21wLm9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIHByb3h5KENvbXAucHJvdG90eXBlLCBcIl9wcm9wc1wiLCBrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRDb21wdXRlZCQxIChDb21wKSB7XG4gIHZhciBjb21wdXRlZCA9IENvbXAub3B0aW9ucy5jb21wdXRlZDtcbiAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkKSB7XG4gICAgZGVmaW5lQ29tcHV0ZWQoQ29tcC5wcm90b3R5cGUsIGtleSwgY29tcHV0ZWRba2V5XSk7XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRBc3NldFJlZ2lzdGVycyAoVnVlKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYXNzZXQgcmVnaXN0cmF0aW9uIG1ldGhvZHMuXG4gICAqL1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlW3R5cGVdID0gZnVuY3Rpb24gKFxuICAgICAgaWQsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKSB7XG4gICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtpZF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnICYmIGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBkZWZpbml0aW9uLm5hbWUgfHwgaWQ7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdkaXJlY3RpdmUnICYmIHR5cGVvZiBkZWZpbml0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXSA9IGRlZmluaXRpb247XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSAob3B0cykge1xuICByZXR1cm4gb3B0cyAmJiAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRzLnRhZylcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyAocGF0dGVybiwgbmFtZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLmluZGV4T2YobmFtZSkgPiAtMVxuICB9IGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXR0ZXJuLnNwbGl0KCcsJykuaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGUgKGtlZXBBbGl2ZUluc3RhbmNlLCBmaWx0ZXIpIHtcbiAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGU7XG4gIHZhciBrZXlzID0ga2VlcEFsaXZlSW5zdGFuY2Uua2V5cztcbiAgdmFyIF92bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLl92bm9kZTtcbiAgZm9yICh2YXIga2V5IGluIGNhY2hlKSB7XG4gICAgdmFyIGNhY2hlZE5vZGUgPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWROb2RlKSB7XG4gICAgICB2Y
33378XIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY2FjaGVkTm9kZS5jb21wb25lbnRPcHRpb25zKTtcbiAgICAgIGlmIChuYW1lICYmICFmaWx0ZXIobmFtZSkpIHtcbiAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeSAoXG4gIGNhY2hlLFxuICBrZXksXG4gIGtleXMsXG4gIGN1cnJlbnRcbikge1xuICB2YXIgY2FjaGVkJCQxID0gY2FjaGVba2V5XTtcbiAgaWYgKGNhY2hlZCQkMSAmJiAoIWN1cnJlbnQgfHwgY2FjaGVkJCQxLnRhZyAhPT0gY3VycmVudC50YWcpKSB7XG4gICAgY2FjaGVkJCQxLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gIH1cbiAgY2FjaGVba2V5XSA9IG51bGw7XG4gIHJlbW92ZShrZXlzLCBrZXkpO1xufVxuXG52YXIgcGF0dGVyblR5cGVzID0gW1N0cmluZywgUmVnRXhwLCBBcnJheV07XG5cbnZhciBLZWVwQWxpdmUgPSB7XG4gIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgZXhjbHVkZTogcGF0dGVyblR5cGVzLFxuICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQgKCkge1xuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMua2V5cyA9IFtdO1xuICB9LFxuXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgcHJ1bmVDYWNoZUVudHJ5KHRoaXMuY2FjaGUsIGtleSwgdGhpcy5rZXlzKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLiR3YXRjaCgnaW5jbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgICB0aGlzLiR3YXRjaCgnZXhjbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gIW1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKCkge1xuICAgIHZhciBzbG90ID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICB2YXIgdm5vZGUgPSBnZXRGaXJzdENvbXBvbmVudENoaWxkKHNsb3QpO1xuICAgIHZhciBjb21wb25lbnRPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoY29tcG9uZW50T3B0aW9ucykge1xuICAgICAgLy8gY2hlY2sgcGF0dGVyblxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICB2Y
33378XIgaW5jbHVkZSA9IHJlZi5pbmNsdWRlO1xuICAgICAgdmFyIGV4Y2x1ZGUgPSByZWYuZXhjbHVkZTtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm90IGluY2x1ZGVkXG4gICAgICAgIChpbmNsdWRlICYmICghbmFtZSB8fCAhbWF0Y2hlcyhpbmNsdWRlLCBuYW1lKSkpIHx8XG4gICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgIChleGNsdWRlICYmIG5hbWUgJiYgbWF0Y2hlcyhleGNsdWRlLCBuYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdm5vZGVcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiQxID0gdGhpcztcbiAgICAgIHZhciBjYWNoZSA9IHJlZiQxLmNhY2hlO1xuICAgICAgdmFyIGtleXMgPSByZWYkMS5rZXlzO1xuICAgICAgdmFyIGtleSA9IHZub2RlLmtleSA9PSBudWxsXG4gICAgICAgIC8vIHNhbWUgY29uc3RydWN0b3IgbWF5IGdldCByZWdpc3RlcmVkIGFzIGRpZmZlcmVudCBsb2NhbCBjb21wb25lbnRzXG4gICAgICAgIC8vIHNvIGNpZCBhbG9uZSBpcyBub3QgZW5vdWdoICgjMzI2OSlcbiAgICAgICAgPyBjb21wb25lbnRPcHRpb25zLkN0b3IuY2lkICsgKGNvbXBvbmVudE9wdGlvbnMudGFnID8gKFwiOjpcIiArIChjb21wb25lbnRPcHRpb25zLnRhZykpIDogJycpXG4gICAgICAgIDogdm5vZGUua2V5O1xuICAgICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjYWNoZVtrZXldLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgIHJlbW92ZShrZXlzLCBrZXkpO1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlW2tleV0gPSB2bm9kZTtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICBpZiAodGhpcy5tYXggJiYga2V5cy5sZW5ndGggPiBwYXJzZUludCh0aGlzLm1heCkpIHtcbiAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleXNbMF0sIGtleXMsIHRoaXMuX3Zub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2bm9kZSB8fCAoc2xvdCAmJiBzbG90WzBdKVxuICB9XG59O1xuXG52YXIgYnVpbHRJbkNvbXBvbmVudHMgPSB7XG4gIEtlZXBBbGl2ZTogS2VlcEFsaXZlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSSAoVnVlKSB7XG4gIC8vIGNvbmZpZ1xuICB2YXIgY29uZmlnRGVmID0ge307XG4gIGNvbmZpZ0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25maWc7IH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uZmlnRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdEbyBub3QgcmVwbGFjZSB0aGUgVnVlLmNvbmZpZyBvYmplY3QsIHNldCBpbmRpdmlkdWFsIGZpZWxkcyBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnY29uZmlnJywgY29uZmlnRGVmKTtcblxuICAvLyBleHBvc2VkIHV0aWwgbWV0aG9kcy5cbiAgLy8gTk9URTogdGhlc2UgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgLSBhdm9pZCByZWx5aW5nIG9uXG4gIC8vIHRoZW0gdW5sZXNzIHlvdSBhcmUgYXdhcmUgb2YgdGhlIHJpc2suXG4gIFZ1ZS51dGlsID0ge1xuICAgIHdhcm46IHdhcm4sXG4gICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnMsXG4gICAgZGVmaW5lUmVhY3RpdmU6IGRlZmluZVJlYWN0aXZlJCQxXG4gIH07XG5cbiAgVnVlLnNldCA9IHNldDtcbiAgVnVlLmRlbGV0ZSA9IGRlbDtcbiAgVnVlLm5leHRUaWNrID0gbmV4dFRpY2s7XG5cbiAgLy8gMi42IGV4cGxpY2l0IG9ic2VydmFibGUgQVBJXG4gIFZ1ZS5vYnNlcnZhYmxlID0gZnVuY3Rpb24gKG9iaikge1xuICAgIG9ic2VydmUob2JqKTtcbiAgICByZXR1cm4gb2JqXG4gIH07XG5cbiAgVnVlLm9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlLm9wdGlvbnNbdHlwZSArICdzJ10gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9KTtcblxuICAvLyB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFwiYmFzZVwiIGNvbnN0cnVjdG9yIHRvIGV4dGVuZCBhbGwgcGxhaW4tb2JqZWN0XG4gIC8vIGNvbXBvbmVudHMgd2l0aCBpbiBXZWV4J3MgbXVsdGktaW5zdGFuY2Ugc2NlbmFyaW9zLlxuICBWdWUub3B0aW9ucy5fYmFzZSA9IFZ1ZTtcblxuICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNvbXBvbmVudHMpO1xuXG4gIGluaXRVc2UoVnVlKTtcbiAgaW5pdE1peGluJDEoVnVlKTtcbiAgaW5pdEV4dGVuZChWdWUpO1xuICBpbml0QXNzZXRSZWdpc3RlcnMoVnVlKTtcbn1cblxuaW5pdEdsb2JhbEFQSShWdWUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRpc1NlcnZlcicsIHtcbiAgZ2V0OiBpc1NlcnZlclJlbmRlcmluZ1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHNzckNvbnRleHQnLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0XG4gIH1cbn0pO1xuXG4vLyBleHBvc2UgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgZm9yIHNzciBydW50aW1lIGhlbHBlciBpbnN0YWxsYXRpb25cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCcsIHtcbiAgdmFsdWU6IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XG59KTtcblxuVnVlLnZlcnNpb24gPSAnMi42LjExJztcblxuLyogICovXG5cbi8vIHRoZXNlIGFyZSByZXNlcnZlZCBmb3Igd2ViIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgY29tcGlsZWQgYXdheVxuLy8gZHVyaW5nIHRlbXBsYXRlIGNvbXBpbGF0aW9uXG52YXIgaXNSZXNlcnZlZEF0dHIgPSBtYWtlTWFwKCdzdHlsZSxjbGFzcycpO1xuXG4vLyBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIHVzaW5nIHByb3BzIGZvciBiaW5kaW5nXG52YXIgYWNjZXB0VmFsdWUgPSBtYWtlTWFwKCdpbnB1dCx0ZXh0YXJlYSxvcHRpb24sc2VsZWN0LHByb2dyZXNzJyk7XG52YXIgbXVzdFVzZVByb3AgPSBmdW5jdGlvbiAodGFnLCB0eXBlLCBhdHRyKSB7XG4gIHJldHVybiAoXG4gICAgKGF0dHIgPT09ICd2YWx1ZScgJiYgYWNjZXB0VmFsdWUodGFnKSkgJiYgdHlwZSAhPT0gJ2J1dHRvbicgfHxcbiAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0YWcgPT09ICdvcHRpb24nKSB8fFxuICAgIChhdHRyID09PSAnY2hlY2tlZCcgJiYgdGFnID09PSAnaW5wdXQnKSB8fFxuICAgIChhdHRyID09PSAnbXV0ZWQnICYmIHRhZyA9PT0gJ3ZpZGVvJylcbiAgKVxufTtcblxudmFyIGlzRW51bWVyYXRlZEF0dHIgPSBtYWtlTWFwKCdjb250ZW50ZWRpdGFibGUsZHJhZ2dhYmxlLHNwZWxsY2hlY2snKTtcblxudmFyIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSA9IG1ha2VNYXAoJ2V2ZW50cyxjYXJldCx0eXBpbmcscGxhaW50ZXh0LW9ubHknKTtcblxudmFyIGNvbnZlcnRFbnVtZXJhdGVkVmFsdWUgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkgfHwgdmFsdWUgPT09ICdmYWxzZSdcbiAgICA/ICdmYWxzZSdcbiAgICAvLyBhbGxvdyBhcmJpdHJhcnkgc3RyaW5nIHZhbHVlIGZvciBjb250ZW50ZWRpdGFibGVcbiAgICA6IGtleSA9PT0gJ2Nvbn
33378RlbnRlZGl0YWJsZScgJiYgaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlKHZhbHVlKVxuICAgICAgPyB2YWx1ZVxuICAgICAgOiAndHJ1ZSdcbn07XG5cbnZhciBpc0Jvb2xlYW5BdHRyID0gbWFrZU1hcChcbiAgJ2FsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsJyArXG4gICdkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsJyArXG4gICdlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLCcgK1xuICAnbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSwnICtcbiAgJ3JlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cmFuc2xhdGUsJyArXG4gICd0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlJ1xuKTtcblxudmFyIHhsaW5rTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG5cbnZhciBpc1hsaW5rID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuY2hhckF0KDUpID09PSAnOicgJiYgbmFtZS5zbGljZSgwLCA1KSA9PT0gJ3hsaW5rJ1xufTtcblxudmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBpc1hsaW5rKG5hbWUpID8gbmFtZS5zbGljZSg2LCBuYW1lLmxlbmd0aCkgOiAnJ1xufTtcblxudmFyIGlzRmFsc3lBdHRyVmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCB2YWwgPT09IGZhbHNlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2VuQ2xhc3NGb3JWbm9kZSAodm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gIHdoaWxlIChpc0RlZihjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICBpZiAoY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoY2hpbGROb2RlLmRhdGEsIGRhdGEpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoaXNEZWYocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZGF0YSkge1xuICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGRhdGEsIHBhcmVudE5vZGUuZGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZW5kZXJDbGFzcyhkYXRhLnN0YXRpY0NsYXNzLCBkYXRhLmNsYXNzKVxufVxuXG5mdW5jdGlvbiBtZXJnZUNsYXNzRGF0YSAoY2hpbGQsIHBhcmVudCkge1xuICByZXR1cm4ge1xuICAgIHN0YXRpY0NsYXNzOiBjb25jYXQoY2hpbGQuc3RhdGljQ2xhc3MsIHBhcmVudC5zdGF0aWNDbGFzcyksXG4gICAgY2xhc3M6IGlzRGVmKGNoaWxkLmNsYXNzKVxuICAgICAgPyBbY2hpbGQuY2xhc3MsIHBhcmVudC5jbGFzc11cbiAgICAgIDogcGFyZW50LmNsYXNzXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ2xhc3MgKFxuICBzdGF0aWNDbGFzcyxcbiAgZHluYW1pY0NsYXNzXG4pIHtcbiAgaWYgKGlzRGVmKHN0YXRpY0NsYXNzKSB8fCBpc0RlZihkeW5hbWljQ2xhc3MpKSB7XG4gICAgcmV0dXJuIGNvbmNhdChzdGF0aWNDbGFzcywgc3RyaW5naWZ5Q2xhc3MoZHluYW1pY0NsYXNzKSlcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gY29uY2F0IChhLCBiKSB7XG4gIHJldHVybiBhID8gYiA/IChhICsgJyAnICsgYikgOiBhIDogKGIgfHwgJycpXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUNsYXNzICh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QXJyYXkodmFsdWUpXG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlPYmplY3QodmFsdWUpXG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXkgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIHN0cmluZ2lmaWVkO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChpc0RlZihzdHJpbmdpZmllZCA9IHN0cmluZ2lmeUNsYXNzKHZhbHVlW2ldKSkgJiYgc3RyaW5naWZpZWQgIT09ICcnKSB7XG4gICAgICBpZiAocmVzKSB7IHJlcyArPSAnICc7IH1cbiAgICAgIHJlcyArPSBzdHJpbmdpZmllZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlPYmplY3QgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlW2tleV0pIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsgfVxuICAgICAgcmVzICs9IGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIG5hbWVzcGFjZU1hcCA9IHtcbiAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICBtYXRoOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCdcbn07XG5cbnZhciBpc0hUTUxUYWcgPSBtYWtlTWFwKFxuICAnaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsJyArXG4gICdhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sJyArXG4gICdkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCwnICtcbiAgJ2EsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSwnICtcbiAgJ3Msc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLCcgK1xuICAnZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsJyArXG4gICdjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0ciwnICtcbiAgJ2J1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sJyArXG4gICdvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLCcgK1xuICAnZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LCcgK1xuICAnY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCdcbik7XG5cbi8vIHRoaXMgbWFwIGlzIGludGVudGlvbmFsbHkgc2VsZWN0aXZlLCBvbmx5IGNvdmVyaW5nIFNWRyBlbGVtZW50cyB0aGF0IG1heVxuLy8gY29udGFpbiBjaGlsZCBlbGVtZW50cy5cbnZhciBpc1NWRyA9IG1ha2VNYXAoXG4gICdzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsJyArXG4gICdmb3JlaWduT2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybiwnICtcbiAgJ3BvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXcnLFxuICB0cnVlXG4pO
333781xuXG52YXIgaXNQcmVUYWcgPSBmdW5jdGlvbiAodGFnKSB7IHJldHVybiB0YWcgPT09ICdwcmUnOyB9O1xuXG52YXIgaXNSZXNlcnZlZFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgcmV0dXJuIGlzSFRNTFRhZyh0YWcpIHx8IGlzU1ZHKHRhZylcbn07XG5cbmZ1bmN0aW9uIGdldFRhZ05hbWVzcGFjZSAodGFnKSB7XG4gIGlmIChpc1NWRyh0YWcpKSB7XG4gICAgcmV0dXJuICdzdmcnXG4gIH1cbiAgLy8gYmFzaWMgc3VwcG9ydCBmb3IgTWF0aE1MXG4gIC8vIG5vdGUgaXQgZG9lc24ndCBzdXBwb3J0IG90aGVyIE1hdGhNTCBlbGVtZW50cyBiZWluZyBjb21wb25lbnQgcm9vdHNcbiAgaWYgKHRhZyA9PT0gJ21hdGgnKSB7XG4gICAgcmV0dXJuICdtYXRoJ1xuICB9XG59XG5cbnZhciB1bmtub3duRWxlbWVudENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQgKHRhZykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFpbkJyb3dzZXIpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChpc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB0YWcgPSB0YWcudG9Mb3dlckNhc2UoKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gIT0gbnVsbCkge1xuICAgIHJldHVybiB1bmtub3duRWxlbWVudENhY2hlW3RhZ11cbiAgfVxuICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gIGlmICh0YWcuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODIxMDM2NC8xMDcwMjQ0XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAoXG4gICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxVbmtub3duRWxlbWVudCB8fFxuICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MRWxlbWVudFxuICAgICkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAvSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KGVsLnRvU3RyaW5nKCkpKVxuICB9XG59XG5cbnZhciBpc1RleHRJbnB1dFR5cGUgPSBtYWtlTWFwKCd0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybCcpO1xuXG4vKiAgKi9cblxuLyoqXG4gKiBRdWVyeSBhbiBlbGVtZW50IHNlbGVjdG9yIGlmIGl0J3Mgbm90IGFuIGVsZW1lbnQgYWxyZWFkeS5cbiAqL1xuZnVuY3Rpb24gcXVlcnkgKGVsKSB7XG4gIGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHNlbGVjdGVkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCk7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbFxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50JDEgKHRhZ05hbWUsIHZub2RlKSB7XG4gIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICByZXR1cm4gZWxtXG4gIH1cbiAgLy8gZmFsc2Ugb3IgbnVsbCB3aWxsIHJlbW92ZSB0aGUgYXR0cmlidXRlIGJ1dCB1bmRlZmluZWQgd2lsbCBub3RcbiAgaWYgKHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS5hdHRycyAmJiB2bm9kZS5kYXRhLmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbG0uc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xuICB9XG4gIHJldHVybiBlbG1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TIChuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSwgdGFnTmFtZSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dClcbn1cblxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZCAobm9kZSwgY2hpbGQpIHtcbiAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkIChub2RlLCBjaGlsZCkge1xuICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gcGFyZW50Tm9kZSAobm9kZSkge1xuICByZXR1cm4gbm9kZS5wYXJlbnROb2RlXG59XG5cbmZ1bmN0aW9uIG5leHRTaWJsaW5nIChub2RlKSB7XG4gIHJldHVybiBub2RlLm5leHRTaWJsaW5nXG59XG5cbmZ1bmN0aW9uIHRhZ05hbWUgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZVxufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudCAobm9kZSwgdGV4dCkge1xuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn1cblxuZnVuY3Rpb24gc2V0U3R5bGVTY29wZSAobm9kZSwgc2NvcGVJZCkge1xuICBub2RlLnNldEF0dHJpYnV0ZShzY29wZUlkLCAnJyk7XG59XG5cbnZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50JDEsXG4gIGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gIGNyZWF0ZUNvbW1lbnQ6IGNyZWF0ZUNvbW1lbnQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gIGFwcGVuZENoaWxkOiBhcHBlbmRDaGlsZCxcbiAgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcbiAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICB0YWdOYW1lOiB0YWdOYW1lLFxuICBzZXRUZX
33378h0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG4gIHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbn0pO1xuXG4vKiAgKi9cblxudmFyIHJlZiA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUgKF8sIHZub2RlKSB7XG4gICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyUmVmICh2bm9kZSwgaXNSZW1vdmFsKSB7XG4gIHZhciBrZXkgPSB2bm9kZS5kYXRhLnJlZjtcbiAgaWYgKCFpc0RlZihrZXkpKSB7IHJldHVybiB9XG5cbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgdmFyIHJlZiA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmVsbTtcbiAgdmFyIHJlZnMgPSB2bS4kcmVmcztcbiAgaWYgKGlzUmVtb3ZhbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgIHJlbW92ZShyZWZzW2tleV0sIHJlZik7XG4gICAgfSBlbHNlIGlmIChyZWZzW2tleV0gPT09IHJlZikge1xuICAgICAgcmVmc1trZXldID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodm5vZGUuZGF0YS5yZWZJbkZvcikge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgICAgcmVmc1trZXldID0gW3JlZl07XG4gICAgICB9IGVsc2UgaWYgKHJlZnNba2V5XS5pbmRleE9mKHJlZikgPCAwKSB7XG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICByZWZzW2tleV0ucHVzaChyZWYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWZzW2tleV0gPSByZWY7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmlydHVhbCBET00gcGF0Y2hpbmcgYWxnb3JpdGhtIGJhc2VkIG9uIFNuYWJiZG9tIGJ5XG4gKiBTaW1vbiBGcmlpcyBWaW5kdW0gKEBwYWxkZXBpbmQpXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxkZXBpbmQvc25hYmJkb20vYmxvYi9tYXN0ZXIvTElDRU5TRVxuICpcbiAqIG1vZGlmaWVkIGJ5IEV2YW4gWW91IChAeXl4OTkwODAzKVxuICpcbiAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSB0aGlzIGZpbGUgaXMgcGVyZi1jcml0aWNhbCBhbmQgdGhlIGNvc3RcbiAqIG9mIG1ha2luZyBmbG93IHVuZGVyc3RhbmQgaXQgaXMgbm90IHdvcnRoIGl0LlxuICovXG5cbnZhciBlbXB0eU5vZGUgPSBuZXcgVk5vZGUoJycsIHt9LCBbXSk7XG5cbnZhciBob29rcyA9IFsnY3JlYXRlJywgJ2FjdGl2YXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveSddO1xuXG5mdW5jdGlvbiBzYW1lVm5vZGUgKGEsIGIpIHtcbiAgcmV0dXJuIChcbiAgICBhLmtleSA9PT0gYi5rZXkgJiYgKFxuICAgICAgKFxuICAgICAgICBhLnRhZyA9PT0gYi50YWcgJiZcbiAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgIGlzRGVmKGEuZGF0YSkgPT09IGlzRGVmKGIuZGF0YSkgJiZcbiAgICAgICAgc2FtZUlucHV0VHlwZShhLCBiKVxuICAgICAgKSB8fCAoXG4gICAgICAgIGlzVHJ1ZShhLmlzQXN5bmNQbGFjZWhvbGRlcikgJiZcbiAgICAgICAgYS5hc3luY0ZhY3RvcnkgPT09IGIuYXN5bmNGYWN0b3J5ICYmXG4gICAgICAgIGlzVW5kZWYoYi5hc3luY0ZhY3RvcnkuZXJyb3IpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHNhbWVJbnB1dFR5cGUgKGEsIGIpIHtcbiAgaWYgKGEudGFnICE9PSAnaW5wdXQnKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGk7XG4gIHZhciB0eXBlQSA9IGlzRGVmKGkgPSBhLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHZhciB0eXBlQiA9IGlzRGVmKGkgPSBiLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHJldHVybiB0eXBlQSA9PT0gdHlwZUIgfHwgaXNUZXh0SW5wdXRUeXBlKHR5cGVBKSAmJiBpc1RleHRJbnB1dFR5cGUodHlwZUIpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleVRvT2xkSWR4IChjaGlsZHJlbiwgYmVnaW5JZHgsIGVuZElkeCkge1xuICB2YXIgaSwga2V5O1xuICB2YXIgbWFwID0ge307XG4gIGZvciAoaSA9IGJlZ2luSWR4OyBpIDw9IGVuZElkeDsgKytpKSB7XG4gICAga2V5ID0gY2hpbGRyZW5baV0ua2V5O1xuICAgIGlmIChpc0RlZihrZXkpKSB7IG1hcFtrZXldID0gaTsgfVxuICB9XG4gIHJldHVybiBtYXBcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGF0Y2hGdW5jdGlvbiAoYmFja2VuZCkge1xuICB2YXIgaSwgajtcbiAgdmFyIGNicyA9IHt9O1xuXG4gIHZhciBtb2R1bGVzID0gYmFja2VuZC5tb2R1bGVzO1xuICB2YXIgbm9kZU9wcyA9IGJhY2tlbmQubm9kZU9wcztcblxuICBmb3IgKGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyArK2kpIHtcbiAgICBjYnNbaG9va3NbaV1dID0gW107XG4gICAgZm9yIChqID0gMDsgaiA8IG1vZHVsZXMubGVuZ3RoOyArK2opIHtcbiAgICAgIGlmIChpc0RlZihtb2R1bGVzW2pdW2hvb2tzW2ldXSkpIHtcbiAgICAgICAgY2JzW2hvb2tzW2ldXS5wdXNoKG1vZHVsZXNbal1baG9va3NbaV1dKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbXB0eU5vZGVBdCAoZWxtKSB7XG4gICAgcmV0dXJuIG5ldyBWTm9kZShub2RlT3BzLnRhZ05hbWUoZWxtKS50b0xvd2VyQ2FzZSgpLCB7fSwgW10sIHVuZGVmaW5lZCwgZWxtKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUm1DYiAoY2hpbGRFbG0sIGxpc3RlbmVycykge1xuICAgIGZ1bmN0aW9uIHJlbW92ZSQkMSAoKSB7XG4gICAgICBpZiAoLS1yZW1vdmUkJDEubGlzdGVuZXJzID09PSAwKSB7XG4gICAgICAgI
33378HJlbW92ZU5vZGUoY2hpbGRFbG0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZW1vdmUkJDEubGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHJldHVybiByZW1vdmUkJDFcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU5vZGUgKGVsKSB7XG4gICAgdmFyIHBhcmVudCA9IG5vZGVPcHMucGFyZW50Tm9kZShlbCk7XG4gICAgLy8gZWxlbWVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBkdWUgdG8gdi1odG1sIC8gdi10ZXh0XG4gICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgIG5vZGVPcHMucmVtb3ZlQ2hpbGQocGFyZW50LCBlbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCQkMSAodm5vZGUsIGluVlByZSkge1xuICAgIHJldHVybiAoXG4gICAgICAhaW5WUHJlICYmXG4gICAgICAhdm5vZGUubnMgJiZcbiAgICAgICEoXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMuc29tZShmdW5jdGlvbiAoaWdub3JlKSB7XG4gICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKGlnbm9yZSlcbiAgICAgICAgICAgID8gaWdub3JlLnRlc3Qodm5vZGUudGFnKVxuICAgICAgICAgICAgOiBpZ25vcmUgPT09IHZub2RlLnRhZ1xuICAgICAgICB9KVxuICAgICAgKSAmJlxuICAgICAgY29uZmlnLmlzVW5rbm93bkVsZW1lbnQodm5vZGUudGFnKVxuICAgIClcbiAgfVxuXG4gIHZhciBjcmVhdGluZ0VsbUluVlByZSA9IDA7XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxtIChcbiAgICB2bm9kZSxcbiAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgcGFyZW50RWxtLFxuICAgIHJlZkVsbSxcbiAgICBuZXN0ZWQsXG4gICAgb3duZXJBcnJheSxcbiAgICBpbmRleFxuICApIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgLy8gVGhpcyB2bm9kZSB3YXMgdXNlZCBpbiBhIHByZXZpb3VzIHJlbmRlciFcbiAgICAgIC8vIG5vdyBpdCdzIHVzZWQgYXMgYSBuZXcgbm9kZSwgb3ZlcndyaXRpbmcgaXRzIGVsbSB3b3VsZCBjYXVzZVxuICAgICAgLy8gcG90ZW50aWFsIHBhdGNoIGVycm9ycyBkb3duIHRoZSByb2FkIHdoZW4gaXQncyB1c2VkIGFzIGFuIGluc2VydGlvblxuICAgICAgLy8gcmVmZXJlbmNlIG5vZGUuIEluc3RlYWQsIHdlIGNsb25lIHRoZSBub2RlIG9uLWRlbWFuZCBiZWZvcmUgY3JlYXRpbmdcbiAgICAgIC8vIGFzc29jaWF0ZWQgRE9NIGVsZW1lbnQgZm9yIGl0LlxuICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIH1cblxuICAgIHZub2RlLmlzUm9vdEluc2VydCA9ICFuZXN0ZWQ7IC8vIGZvciB0cmFuc2l0aW9uIGVudGVyIGNoZWNrXG4gICAgaWYgKGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkpIHtcbiAgICAgIHJldHVyblxuICAgI
33378H1cblxuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnByZSkge1xuICAgICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVW5rbm93bkVsZW1lbnQkJDEodm5vZGUsIGNyZWF0aW5nRWxtSW5WUHJlKSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAnVW5rbm93biBjdXN0b20gZWxlbWVudDogPCcgKyB0YWcgKyAnPiAtIGRpZCB5b3UgJyArXG4gICAgICAgICAgICAncmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBjb3JyZWN0bHk/IEZvciByZWN1cnNpdmUgY29tcG9uZW50cywgJyArXG4gICAgICAgICAgICAnbWFrZSBzdXJlIHRvIHByb3ZpZGUgdGhlIFwibmFtZVwiIG9wdGlvbi4nLFxuICAgICAgICAgICAgdm5vZGUuY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdm5vZGUuZWxtID0gdm5vZGUubnNcbiAgICAgICAgPyBub2RlT3BzLmNyZWF0ZUVsZW1lbnROUyh2bm9kZS5ucywgdGFnKVxuICAgICAgICA6IG5vZGVPcHMuY3JlYXRlRWxlbWVudCh0YWcsIHZub2RlKTtcbiAgICAgIHNldFNjb3BlKHZub2RlKTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICB7XG4gICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVDb21tZW50KHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICB2Y
33378XIgaXNSZWFjdGl2YXRlZCA9IGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpLmtlZXBBbGl2ZTtcbiAgICAgIGlmIChpc0RlZihpID0gaS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkge1xuICAgICAgICBpKHZub2RlLCBmYWxzZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgfVxuICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGUgaW5pdCBob29rLCBpZiB0aGUgdm5vZGUgaXMgYSBjaGlsZCBjb21wb25lbnRcbiAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5kIG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgLy8gY29tcG9uZW50IGFsc28gaGFzIHNldCB0aGUgcGxhY2Vob2xkZXIgdm5vZGUncyBlbG0uXG4gICAgICAvLyBpbiB0aGF0IGNhc2Ugd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IGFuZCBiZSBkb25lLlxuICAgICAgaWYgKGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgIGlmIChpc1RydWUoaXNSZWFjdGl2YXRlZCkpIHtcbiAgICAgICAgICByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRDb21wb25lbnQgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSkge1xuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2guYXBwbHkoaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpO1xuICAgICAgdm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgdm5vZGUuZWxtID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuJGVsO1xuICAgIGlmIChpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlbXB0eSBjb21wb25lbnQgcm9vdC5cbiAgICAgIC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1NSlcbiAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICAgIC8vIG1ha2Ugc3VyZSB0byBpbnZva2UgdGhlIGluc2VydCBob29rXG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaTtcbiAgICAvLyBoYWNrIGZvciAjNDMzOTogYSByZWFjdGl2YXRlZCBjb21wb25lbnQgd2l0aCBpbm5lciB0cmFuc2l0aW9uXG4gICAgLy8gZG9lcyBub3QgdHJpZ2dlciBiZWNhdXNlIHRoZSBpbm5lciBub2RlJ3MgY3JlYXRlZCBob29rcyBhcmUgbm90IGNhbGxlZFxuICAgIC8vIGFnYWluLiBJdCdzIG5vdCBpZGVhbCB0byBpbnZvbHZlIG1vZHVsZS1zcGVjaWZpYyBsb2dpYyBpbiBoZXJlIGJ1dFxuICAgIC8vIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGJldHRlciB3YXkgdG8gZG8gaXQuXG4gICAgdmFyIGlubmVyTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGlubmVyTm9kZSA9IGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoaXNEZWYoaSA9IGlubmVyTm9kZS5kYXRhKSAmJiBpc0RlZihpID0gaS50cmFuc2l0aW9uKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmFjdGl2YXRlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2JzLmFjdGl2YXRlW2ldKGVtcHR5Tm9kZSwgaW5uZXJOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaChpbm5lck5vZGUpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB1bmxpa2UgYSBuZXdseSBjcmVhdGVkIGNvbXBvbmVudCxcbiAgICAvLyBhIHJlYWN0aXZhdGVkIGtlZXAtYWxpdmUgY29tcG9uZW50IGRvZXNuJ3QgaW5zZXJ0IGl0c2VsZlxuICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydCAocGFyZW50LCBlbG0sIHJlZiQkMSkge1xuICAgIGlmIChpc0RlZihwYXJlbnQpKSB7XG4gICAgICBpZiAoaXNEZWYocmVmJCQxKSkge1xuICAgICAgICBpZiAobm9kZU9wcy5wYXJlbnROb2RlKHJlZiQkMSkgPT09IHBhcmVudCkge1xuICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxtLCByZWYkJDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHBhcmVudCwgZWxtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbiAodm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaGlsZHJlbik7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNyZWF0ZUVsbShjaGlsZHJlbltpXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5lbG0sIG51bGwsIHRydWUsIGNoaWxkcmVuLCBpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzUHJpbWl0aXZlKHZub2RlLnRleHQpKSB7XG4gICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHZub2RlLmVsbSwgbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcodm5vZGUudGV4dCkpKTtcbiAgICB9XG4gI
33378H1cblxuICBmdW5jdGlvbiBpc1BhdGNoYWJsZSAodm5vZGUpIHtcbiAgICB3aGlsZSAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIHZub2RlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgIH1cbiAgICByZXR1cm4gaXNEZWYodm5vZGUudGFnKVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlQ3JlYXRlSG9va3MgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgIGNicy5jcmVhdGVbaSQxXShlbXB0eU5vZGUsIHZub2RlKTtcbiAgICB9XG4gICAgaSA9IHZub2RlLmRhdGEuaG9vazsgLy8gUmV1c2UgdmFyaWFibGVcbiAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIGlmIChpc0RlZihpLmNyZWF0ZSkpIHsgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7IH1cbiAgICAgIGlmIChpc0RlZihpLmluc2VydCkpIHsgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2godm5vZGUpOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IHNjb3BlIGlkIGF0dHJpYnV0ZSBmb3Igc2NvcGVkIENTUy5cbiAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIHNwZWNpYWwgY2FzZSB0byBhdm9pZCB0aGUgb3ZlcmhlYWRcbiAgLy8gb2YgZ29pbmcgdGhyb3VnaCB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBwYXRjaGluZyBwcm9jZXNzLlxuICBmdW5jdGlvbiBzZXRTY29wZSAodm5vZGUpIHtcbiAgICB2YXIgaTtcbiAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmZuU2NvcGVJZCkpIHtcbiAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2Y
33378XIgYW5jZXN0b3IgPSB2bm9kZTtcbiAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICBpZiAoaXNEZWYoaSA9IGFuY2VzdG9yLmNvbnRleHQpICYmIGlzRGVmKGkgPSBpLiRvcHRpb25zLl9zY29wZUlkKSkge1xuICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgICAgICB9XG4gICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBmb3Igc2xvdCBjb250ZW50IHRoZXkgc2hvdWxkIGFsc28gZ2V0IHRoZSBzY29wZUlkIGZyb20gdGhlIGhvc3QgaW5zdGFuY2UuXG4gICAgaWYgKGlzRGVmKGkgPSBhY3RpdmVJbnN0YW5jZSkgJiZcbiAgICAgIGkgIT09IHZub2RlLmNvbnRleHQgJiZcbiAgICAgIGkgIT09IHZub2RlLmZuQ29udGV4dCAmJlxuICAgICAgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpXG4gICAgKSB7XG4gICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhZGRWbm9kZXMgKHBhcmVudEVsbSwgcmVmRWxtLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgIGNyZWF0ZUVsbSh2bm9kZXNbc3RhcnRJZHhdLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtLCBmYWxzZSwgdm5vZGVzLCBzdGFydElkeCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRGVzdHJveUhvb2sgKHZub2RlKSB7XG4gICAgdmFyIGksIGo7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLmRlc3Ryb3kpKSB7IGkodm5vZGUpOyB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmRlc3Ryb3kubGVuZ3RoOyArK2kpIHsgY2JzLmRlc3Ryb3lbaV0odm5vZGUpOyB9XG4gICAgfVxuICAgIGlmIChpc0RlZihpID0gdm5vZGUuY2hpbGRyZW4pKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgaW52b2tlRGVzdHJveUhvb2sodm5vZGUuY2hpbGRyZW5bal0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVZub2RlcyAodm5vZGVzLCBzdGFydElkeCwgZW5kSWR4KSB7XG4gICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgdmFyIGNoID0gdm5vZGVzW3N0YXJ0SWR4XTtcbiAgICAgIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKGlzRGVmKGNoLnRhZykpIHtcbiAgICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGNoKTtcbiAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhjaCk7XG4gICAgICAgIH0gZWxzZSB7IC8vIFRleHQgbm9kZVxuICAgICAgICAgIHJlbW92ZU5vZGUoY2guZWxtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2sgKHZub2Rl
33378LCBybSkge1xuICAgIGlmIChpc0RlZihybSkgfHwgaXNEZWYodm5vZGUuZGF0YSkpIHtcbiAgICAgIHZhciBpO1xuICAgICAgdmFyIGxpc3RlbmVycyA9IGNicy5yZW1vdmUubGVuZ3RoICsgMTtcbiAgICAgIGlmIChpc0RlZihybSkpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSBhIHJlY3Vyc2l2ZWx5IHBhc3NlZCBkb3duIHJtIGNhbGxiYWNrXG4gICAgICAgIC8vIGluY3JlYXNlIHRoZSBsaXN0ZW5lcnMgY291bnRcbiAgICAgICAgcm0ubGlzdGVuZXJzICs9IGxpc3RlbmVycztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRpcmVjdGx5IHJlbW92aW5nXG4gICAgICAgIHJtID0gY3JlYXRlUm1DYih2bm9kZS5lbG0sIGxpc3RlbmVycyk7XG4gICAgICB9XG4gICAgICAvLyByZWN1cnNpdmVseSBpbnZva2UgaG9va3Mgb24gY2hpbGQgY29tcG9uZW50IHJvb3Qgbm9kZVxuICAgICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkgJiYgaXNEZWYoaSA9IGkuX3Zub2RlKSAmJiBpc0RlZihpLmRhdGEpKSB7XG4gICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soaSwgcm0pO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5yZW1vdmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY2JzLnJlbW92ZVtpXSh2bm9kZSwgcm0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5kYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnJlbW92ZSkpIHtcbiAgICAgICAgaSh2bm9kZSwgcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm0oKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlTm9kZSh2bm9kZS5lbG0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuIChwYXJlbnRFbG0sIG9sZENoLCBuZXdDaCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KSB7XG4gICAgdmFyIG9sZFN0YXJ0SWR4ID0gMDtcbiAgICB2YXIgbmV3U3RhcnRJZHggPSAwO1xuICAgIHZhciBvbGRFbmRJZHggPSBvbGRDaC5sZW5ndGggLSAxO1xuICAgIHZhciBvbGRTdGFydFZub2RlID0gb2xkQ2hbMF07XG4gICAgdmFyIG9sZEVuZFZub2RlID0gb2xkQ2hbb2xkRW5kSWR4XTtcbiAgICB2YXIgbmV3RW5kSWR4ID0gbmV3Q2gubGVuZ3RoIC0gMTtcbiAgICB2YXIgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWzBdO1xuICAgIHZhciBuZXdFbmRWbm9kZSA9IG5ld0NoW25ld0VuZElkeF07XG4gICAgdmFyIG9sZEtleVRvSWR4LCBpZHhJbk9sZCwgdm5vZGVUb01vdmUsIHJlZkVsbTtcblxuICAgIC8vIHJlbW92ZU9ubHkgaXMgYSBzcGVjaWFsIGZsYWcgdXNlZCBvbmx5IGJ5IDx0cmFuc2l0aW9uLWdyb3VwPlxuICAgIC8vIHRvIGVuc3VyZSByZW1vdmVkIGVsZW1lbnRzIHN0YXkgaW4gY29ycmVjdCByZWxhdGl2ZSBwb3NpdGlvbnNcbiAgICAvLyBkdXJpbmcgbGVhdmluZyB0cmFuc2l0aW9uc1xuICAgIHZhciBjYW5Nb3ZlID0gIXJlbW92ZU9ubHk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKG5ld0NoKTtcbiAgICB9XG5cbiAgICB3aGlsZSAob2xkU3RhcnRJZHggPD0gb2xkRW5kSWR4ICYmIG5ld1N0YXJ0SWR4IDw9IG5ld0VuZElkeCkge1xuICAgICAgaWYgKGlzVW5kZWYob2xkU3RhcnRWbm9kZSkpIHtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdOyAvLyBWbm9kZSBoYXMgYmVlbiBtb3ZlZCBsZWZ0XG4gICAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkRW5kVm5vZGUpKSB7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlKSkge1xuICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3RW5kSWR4KTtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIHJpZ2h0XG4gICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld0VuZElkeCk7XG4gICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbmRWbm9kZS5lbG0pKTtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICBuZXdFbmRWbm9kZSA9IG5ld0NoWy0tbmV3RW5kSWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlKSkgeyAvLyBWbm9kZSBtb3ZlZCBsZWZ0XG4gICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZEVuZFZub2RlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzVW5kZWYob2xkS2V5VG9JZHgpKSB7IG9sZEtleVRvSWR4ID0gY3JlYXRlS2V5VG9PbGRJZHgob2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpOyB9XG4gICAgICAgIGl
33378keEluT2xkID0gaXNEZWYobmV3U3RhcnRWbm9kZS5rZXkpXG4gICAgICAgICAgPyBvbGRLZXlUb0lkeFtuZXdTdGFydFZub2RlLmtleV1cbiAgICAgICAgICA6IGZpbmRJZHhJbk9sZChuZXdTdGFydFZub2RlLCBvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICAgIGlmIChpc1VuZGVmKGlkeEluT2xkKSkgeyAvLyBOZXcgZWxlbWVudFxuICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZub2RlVG9Nb3ZlID0gb2xkQ2hbaWR4SW5PbGRdO1xuICAgICAgICAgIGlmIChzYW1lVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICBwYXRjaFZub2RlKHZub2RlVG9Nb3ZlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgICBvbGRDaFtpZHhJbk9sZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgdm5vZGVUb01vdmUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNhbWUga2V5IGJ1dCBkaWZmZXJlbnQgZWxlbWVudC4gdHJlYXQgYXMgbmV3IGVsZW1lbnRcbiAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbGRTdGFydElkeCA+IG9sZEVuZElkeCkge1xuICAgICAgcmVmRWxtID0gaXNVbmRlZihuZXdDaFtuZXdFbmRJZHggKyAxXSkgPyBudWxsIDogbmV3Q2hbbmV3RW5kSWR4ICsgMV0uZWxtO1xuICAgICAgYWRkVm5vZGVzKHBhcmVudEVsbSwgcmVmRWxtLCBuZXdDaCwgbmV3U3RhcnRJZHgsIG5ld0VuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICB9IGVsc2UgaWYgKG5ld1N0YXJ0SWR4ID4gbmV3RW5kSWR4KSB7XG4gICAgICByZW1vdmVWbm9kZXMob2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRHVwbGljYXRlS2V5cyAoY2hpbGRyZW4pIHtcbiAgICB2YXIgc2VlbktleXMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2Y
33378XIgdm5vZGUgPSBjaGlsZHJlbltpXTtcbiAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXk7XG4gICAgICBpZiAoaXNEZWYoa2V5KSkge1xuICAgICAgICBpZiAoc2VlbktleXNba2V5XSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAoXCJEdXBsaWNhdGUga2V5cyBkZXRlY3RlZDogJ1wiICsga2V5ICsgXCInLiBUaGlzIG1heSBjYXVzZSBhbiB1cGRhdGUgZXJyb3IuXCIpLFxuICAgICAgICAgICAgdm5vZGUuY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VlbktleXNba2V5XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kSWR4SW5PbGQgKG5vZGUsIG9sZENoLCBzdGFydCwgZW5kKSB7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHZhciBjID0gb2xkQ2hbaV07XG4gICAgICBpZiAoaXNEZWYoYykgJiYgc2FtZVZub2RlKG5vZGUsIGMpKSB7IHJldHVybiBpIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXRjaFZub2RlIChcbiAgICBvbGRWbm9kZSxcbiAgICB2bm9kZSxcbiAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgb3duZXJBcnJheSxcbiAgICBpbmRleCxcbiAgICByZW1vdmVPbmx5XG4gICkge1xuICAgIGlmIChvbGRWbm9kZSA9PT0gdm5vZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc0RlZih2bm9kZS5lbG0pICYmIGlzRGVmKG93bmVyQXJyYXkpKSB7XG4gICAgICAvLyBjbG9uZSByZXVzZWQgdm5vZGVcbiAgICAgIHZub2RlID0gb3duZXJBcnJheVtpbmRleF0gPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgICB9XG5cbiAgICB2YXIgZWxtID0gdm5vZGUuZWxtID0gb2xkVm5vZGUuZWxtO1xuXG4gICAgaWYgKGlzVHJ1ZShvbGRWbm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIpKSB7XG4gICAgICBpZiAoaXNEZWYodm5vZGUuYXN5bmNGYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICBoeWRyYXRlKG9sZFZub2RlLmVsbSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gcmV1c2UgZWxlbWVudCBmb3Igc3RhdGljIHRyZWVzLlxuICAgIC8vIG5vdGUgd2Ugb25seSBkbyB0aGlzIGlmIHRoZSB2bm9kZSBpcyBjbG9uZWQgLVxuICAgIC8vIGlmIHRoZSBuZXcgbm9kZSBpcyBub3QgY2xvbmVkIGl0IG1lYW5zIHRoZSByZW5kZXIgZnVuY3Rpb25zIGhhdmUgYmVlblxuICAgIC8vIHJlc2V0IGJ5IHRoZSBob3QtcmVsb2FkLWFwaSBhbmQgd2UgbmVlZCB0byBkbyBhIHByb3BlciByZS1yZW5kZXIuXG4gICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc1N0YXRpYykgJiZcbiAgICAgIGlzVHJ1ZShvbGRWbm9kZS5pc1N0YXRpYykgJiZcbiAgICAgIHZub2RlLmtleSA9PT0gb2xkVm5vZGUua2V5ICYmXG4gICAgICAoaXNUcnVlKHZub2RlLmlzQ2xvbmVkKSB8fCBpc1RydWUodm5vZGUuaXNPbmNlKSlcbiAgICApIHtcbiAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnByZXBhdGNoKSkge1xuICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgIH1cblxuICAgIHZhciBvbGRDaCA9IG9sZFZub2RlLmNoaWxkcmVuO1xuICAgIHZhciBjaCA9IHZub2RlLmNoaWxkcmVuO1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMudXBkYXRlLmxlbmd0aDsgKytpKSB7IGNicy51cGRhdGVbaV0ob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnVwZGF0ZSkpIHsgaShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgfVxuICAgIGlmIChpc1VuZGVmKHZub2RlLnRleHQpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkQ2gpICYmIGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAob2xkQ2ggIT09IGNoKSB7IHVwZGF0ZUNoaWxkcmVuKGVsbSwgb2xkQ2gsIGNoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpOyB9XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7IG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7IH1cbiAgICAgICAgYWRkVm5vZGVzKGVsbSwgbnVsbCwgY2gsIDAsIGNoLmxlbmd0aCAtIDEsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZENoKSkge1xuICAgICAgICByZW1vdmVWbm9kZXMob2xkQ2gsIDAsIG9sZENoLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkge1xuICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob2xkVm5vZGUudGV4dCAhPT0gdm5vZGUudGV4dCkge1xuICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sIHZub2Rl
33378LnRleHQpO1xuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wb3N0cGF0Y2gpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sgKHZub2RlLCBxdWV1ZSwgaW5pdGlhbCkge1xuICAgIC8vIGRlbGF5IGluc2VydCBob29rcyBmb3IgY29tcG9uZW50IHJvb3Qgbm9kZXMsIGludm9rZSB0aGVtIGFmdGVyIHRoZVxuICAgIC8vIGVsZW1lbnQgaXMgcmVhbGx5IGluc2VydGVkXG4gICAgaWYgKGlzVHJ1ZShpbml0aWFsKSAmJiBpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICB2bm9kZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gcXVldWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcXVldWVbaV0uZGF0YS5ob29rLmluc2VydChxdWV1ZVtpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGh5ZHJhdGlvbkJhaWxlZCA9IGZhbHNlO1xuICAvLyBsaXN0IG9mIG1vZHVsZXMgdGhhdCBjYW4gc2tpcCBjcmVhdGUgaG9vayBkdXJpbmcgaHlkcmF0aW9uIGJlY2F1c2UgdGhleVxuICAvLyBhcmUgYWxyZWFkeSByZW5kZXJlZCBvbiB0aGUgY2xpZW50IG9yIGhhcyBubyBuZWVkIGZvciBpbml0aWFsaXphdGlvblxuICAvLyBOb3RlOiBzdHlsZSBpcyBleGNsdWRlZCBiZWNhdXNlIGl0IHJlbGllcyBvbiBpbml0aWFsIGNsb25lIGZvciBmdXR1cmVcbiAgLy8gZGVlcCB1cGRhdGVzICgjNzA2MykuXG4gIHZhciBpc1JlbmRlcmVkTW9kdWxlID0gbWFrZU1hcCgnYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Jyk7XG5cbiAgLy8gTm90ZTogdGhpcyBpcyBhIGJyb3dzZXItb25seSBmdW5jdGlvbiBzbyB3ZSBjYW4gYXNzdW1lIGVsbXMgYXJlIERPTSBub2Rlcy5cbiAgZnVuY3Rpb24gaHlkcmF0ZSAoZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpblZQcmUgPSBpblZQcmUgfHwgKGRhdGEgJiYgZGF0YS5wcmUpO1xuICAgIHZub2RlLmVsbSA9IGVsbTtcblxuICAgIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSAmJiBpc0RlZih2bm9kZS5hc3luY0ZhY3RvcnkpKSB7XG4gICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgLy8gYXNzZXJ0IG5vZGUgbWF0Y2hcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCFhc3NlcnROb2RlTWF0Y2goZWxtLCB2bm9kZSwgaW5WUHJlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuaW5pdCkpIHsgaSh2bm9kZSwgdHJ1ZSAvKiBoeWRyYXRpbmcgKi8pOyB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICAvLyBjaGlsZCBjb21wb25lbnQuIGl0IHNob3VsZCBoYXZlIGh5ZHJhdGVkIGl0cyBvd24gdHJlZS5cbiAgICAgICAgaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgIGlmIChpc0RlZihjaGlsZHJlbikpIHtcbiAgICAgICAgLy8gZW1wdHkgZWxlbWVudCwgYWxsb3cgY2xpZW50IHRvIHBpY2sgdXAgYW5kIHBvcHVsYXRlIGNoaWxkcmVuXG4gICAgICAgIGlmICghZWxtLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB2LWh0bWwgYW5kIGRvbVByb3BzOiBpbm5lckhUTUxcbiAgICAgICAgICBpZiAoaXNEZWYoaSA9IGRhdGEpICYmIGlzRGVmKGkgPSBpLmRvbVByb3BzKSAmJiBpc0RlZihpID0gaS5pbm5lckhUTUwpKSB7XG4gICAgICAgICAgICBpZiAoaSAhPT0gZWxtLmlubmVySFRNTCkge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzZXJ2ZXIgaW5uZXJIVE1MOiAnLCBpKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2NsaWVudCBpbm5lckhUTUw6ICcsIGVsbS5pbm5lckhUTUwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpdGVyYXRlIGFuZCBjb21wYXJlIGNoaWxkcmVuIGxpc3RzXG4gICAgICAgICAgICB2Y
33378XIgY2hpbGRyZW5NYXRjaCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gZWxtLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgICAgICAgIGlmICghY2hpbGROb2RlIHx8ICFoeWRyYXRlKGNoaWxkTm9kZSwgY2hpbGRyZW5baSQxXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY2hpbGROb2RlIGlzIG5vdCBudWxsLCBpdCBtZWFucyB0aGUgYWN0dWFsIGNoaWxkTm9kZXMgbGlzdCBpc1xuICAgICAgICAgICAgLy8gbG9uZ2VyIHRoYW4gdGhlIHZpcnR1YWwgY2hpbGRyZW4gbGlzdC5cbiAgICAgICAgICAgIGlmICghY2hpbGRyZW5NYXRjaCB8fCBjaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTWlzbWF0Y2hpbmcgY2hpbGROb2RlcyB2cy4gVk5vZGVzOiAnLCBlbG0uY2hpbGROb2RlcywgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIHZhciBmdWxsSW52b2tlID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgaWYgKCFpc1JlbmRlcmVkTW9kdWxlKGtleSkpIHtcbiAgICAgICAgICAgIGZ1bGxJbnZva2UgPSB0cnVlO1xuICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZ1bGxJbnZva2UgJiYgZGF0YVsnY2xhc3MnXSkge1xuICAgICAgICAgIC8vIGVuc3VyZSBjb2xsZWN0aW5nIGRlcHMgZm9yIGRlZXAgY2xhc3MgYmluZGluZ3MgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgICAgICAgdHJhdmVyc2UoZGF0YVsnY2xhc3MnXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnROb2RlTWF0Y2ggKG5vZGUsIHZub2RlLCBpblZQcmUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUudGFnKSkge1xuICAgICAgcmV0dXJuIHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHwgKFxuICAgICAgICAhaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgaW5WUHJlKSAmJlxuICAgICAgICB2bm9kZS50YWcudG9Mb3dlckNhc2UoKSA9PT0gKG5vZGUudGFnTmFtZSAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09ICh2bm9kZS5pc0NvbW1lbnQgPyA4IDogMylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gcGF0Y2ggKG9sZFZub2RlLCB2bm9kZSwgaHlkcmF0aW5nLCByZW1vdmVPbmx5KSB7XG4gICAgaWYgKGlzVW5kZWYodm5vZGUpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkVm5vZGUpKSB7IGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTsgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGlzSW5pdGlhbFBhdGNoID0gZmFsc2U7XG4gICAgdmFyIGluc2VydGVkVm5vZGVRdWV1ZSA9IFtdO1xuXG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAvLyBlbXB0eSBtb3VudCAobGlrZWx5IGFzIGNvbXBvbmVudCksIGNyZWF0ZSBuZXcgcm9vdCBlbGVtZW50XG4gICAgICBpc0luaXRpYWxQYXRjaCA9IHRydWU7XG4gICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1JlYWxFbGVtZW50ID0gaXNEZWYob2xkVm5vZGUubm9kZVR5cGUpO1xuICAgICAgaWYgKCFpc1JlYWxFbGVtZW50ICYmIHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgIC8vIHBhdGNoIGV4aXN0aW5nIHJvb3Qgbm9kZVxuICAgICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBudWxsLCBudWxsLCByZW1vdmVPbmx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1JlYWxFbGVtZW50KSB7XG4gICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSByZWFsIGVsZW1lbnRcbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJlZCBjb250ZW50IGFuZCBpZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgIC8vIGEgc3VjY2Vzc2Z1bCBoeWRyYXRpb24uXG4gICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9sZFZub2RlLmhhc0F0dHJpYnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNUcnVlKGh5ZHJhdGluZykpIHtcbiAgICAgICAgICAgIGlmIChoeWRyYXRlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSkge1xuICAgICAgICAgICAgICBpbnZva2VJbnNlcnRIb29rKHZub2Rl
33378LCBpbnNlcnRlZFZub2RlUXVldWUsIHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICdUaGUgY2xpZW50LXNpZGUgcmVuZGVyZWQgdmlydHVhbCBET00gdHJlZSBpcyBub3QgbWF0Y2hpbmcgJyArXG4gICAgICAgICAgICAgICAgJ3NlcnZlci1yZW5kZXJlZCBjb250ZW50LiBUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgaW5jb3JyZWN0ICcgK1xuICAgICAgICAgICAgICAgICdIVE1MIG1hcmt1cCwgZm9yIGV4YW1wbGUgbmVzdGluZyBibG9jay1sZXZlbCBlbGVtZW50cyBpbnNpZGUgJyArXG4gICAgICAgICAgICAgICAgJzxwPiwgb3IgbWlzc2luZyA8dGJvZHk+LiBCYWlsaW5nIGh5ZHJhdGlvbiBhbmQgcGVyZm9ybWluZyAnICtcbiAgICAgICAgICAgICAgICAnZnVsbCBjbGllbnQtc2lkZSByZW5kZXIuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlaXRoZXIgbm90IHNlcnZlci1yZW5kZXJlZCwgb3IgaHlkcmF0aW9uIGZhaWxlZC5cbiAgICAgICAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbm9kZSBhbmQgcmVwbGFjZSBpdFxuICAgICAgICAgIG9sZFZub2RlID0gZW1wdHlOb2RlQXQob2xkVm5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVwbGFjaW5nIGV4aXN0aW5nIGVsZW1lbnRcbiAgICAgICAgdmFyIG9sZEVsbSA9IG9sZFZub2RlLmVsbTtcbiAgICAgICAgdmFyIHBhcmVudEVsbSA9IG5vZGVPcHMucGFyZW50Tm9kZShvbGRFbG0pO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgbm9kZVxuICAgICAgICBjcmVhdGVFbG0oXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAgICAgICAgIC8vIGV4dHJlbWVseSByYXJlIGVkZ2UgY2FzZTogZG8gbm90IGluc2VydCBpZiBvbGQgZWxlbWVudCBpcyBpbiBhXG4gICAgICAgICAgLy8gbGVhdmluZyB0cmFuc2l0aW9uLiBPbmx5IGhhcHBlbnMgd2hlbiBjb21iaW5pbmcgdHJhbnNpdGlvbiArXG4gICAgICAgICAgLy8ga2VlcC1hbGl2ZSArIEhPQ3MuICgjNDU5MClcbiAgICAgICAgICBvbGRFbG0uX2xlYXZlQ2IgPyBudWxsIDogcGFyZW50RWxtLFxuICAgICAgICAgIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRWxtKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBwYXJlbnQgcGxhY2Vob2xkZXIgbm9kZSBlbGVtZW50LCByZWN1cnNpdmVseVxuICAgICAgICBpZiAoaXNEZWYodm5vZGUucGFyZW50KSkge1xuICAgICAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlLnBhcmVudDtcbiAgICAgICAgICB2Y
33378XIgcGF0Y2hhYmxlID0gaXNQYXRjaGFibGUodm5vZGUpO1xuICAgICAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBjYnMuZGVzdHJveVtpXShhbmNlc3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3Rvci5lbG0gPSB2bm9kZS5lbG07XG4gICAgICAgICAgICBpZiAocGF0Y2hhYmxlKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICAgICAgICAgIGNicy5jcmVhdGVbaSQxXShlbXB0eU5vZGUsIGFuY2VzdG9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyAjNjUxM1xuICAgICAgICAgICAgICAvLyBpbnZva2UgaW5zZXJ0IGhvb2tzIHRoYXQgbWF5IGhhdmUgYmVlbiBtZXJnZWQgYnkgY3JlYXRlIGhvb2tzLlxuICAgICAgICAgICAgICAvLyBlLmcuIGZvciBkaXJlY3RpdmVzIHRoYXQgdXNlcyB0aGUgXCJpbnNlcnRlZFwiIGhvb2suXG4gICAgICAgICAgICAgIHZhciBpbnNlcnQgPSBhbmNlc3Rvci5kYXRhLmhvb2suaW5zZXJ0O1xuICAgICAgICAgICAgICBpZiAoaW5zZXJ0Lm1lcmdlZCkge1xuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGF0IGluZGV4IDEgdG8gYXZvaWQgcmUtaW52b2tpbmcgY29tcG9uZW50IG1vdW50ZWQgaG9va1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkkMiA9IDE7IGkkMiA8IGluc2VydC5mbnMubGVuZ3RoOyBpJDIrKykge1xuICAgICAgICAgICAgICAgICAgaW5zZXJ0LmZuc1tpJDJdKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWdpc3RlclJlZihhbmNlc3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZXN0cm95IG9sZCBub2RlXG4gICAgICAgIGlmIChpc0RlZihwYXJlbnRFbG0pKSB7XG4gICAgICAgICAgcmVtb3ZlVm5vZGVzKFtvbGRWbm9kZV0sIDAsIDApO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRhZykpIHtcbiAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhvbGRWbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIGlzSW5pdGlhbFBhdGNoKTtcbiAgICByZXR1cm4gdm5vZGUuZWxtXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBkaXJlY3RpdmVzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gIHVwZGF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcbiAgZGVzdHJveTogZnVuY3Rpb24gdW5iaW5kRGlyZWN0aXZlcyAodm5vZGUpIHtcbiAgICB1cGRhdGVEaXJlY3RpdmVzKHZub2RlLCBlbXB0eU5vZGUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiB1cGRhdGVEaXJlY3RpdmVzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgaWYgKG9sZFZub2RlLmRhdGEuZGlyZWN0aXZlcyB8fCB2bm9kZS5kYXRhLmRpcmVjdGl2ZXMpIHtcbiAgICBfdXBkYXRlKG9sZFZub2RlLCB2bm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3VwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBpc0NyZWF0ZSA9IG9sZFZub2RlID09PSBlbXB0eU5vZGU7XG4gIHZhciBpc0Rlc3Ryb3kgPSB2bm9kZSA9PT0gZW1wdHlOb2RlO1xuICB2YXIgb2xkRGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXMkMShvbGRWbm9kZS5kYXRhLmRpcmVjdGl2ZXMsIG9sZFZub2RlLmNvbnRleHQpO1xuICB2YXIgbmV3RGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSh2bm9kZS5kYXRhLmRpcmVjdGl2ZXMsIHZub2Rl
33378LmNvbnRleHQpO1xuXG4gIHZhciBkaXJzV2l0aEluc2VydCA9IFtdO1xuICB2YXIgZGlyc1dpdGhQb3N0cGF0Y2ggPSBbXTtcblxuICB2YXIga2V5LCBvbGREaXIsIGRpcjtcbiAgZm9yIChrZXkgaW4gbmV3RGlycykge1xuICAgIG9sZERpciA9IG9sZERpcnNba2V5XTtcbiAgICBkaXIgPSBuZXdEaXJzW2tleV07XG4gICAgaWYgKCFvbGREaXIpIHtcbiAgICAgIC8vIG5ldyBkaXJlY3RpdmUsIGJpbmRcbiAgICAgIGNhbGxIb29rJDEoZGlyLCAnYmluZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmluc2VydGVkKSB7XG4gICAgICAgIGRpcnNXaXRoSW5zZXJ0LnB1c2goZGlyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhpc3RpbmcgZGlyZWN0aXZlLCB1cGRhdGVcbiAgICAgIGRpci5vbGRWYWx1ZSA9IG9sZERpci52YWx1ZTtcbiAgICAgIGRpci5vbGRBcmcgPSBvbGREaXIuYXJnO1xuICAgICAgY2FsbEhvb2skMShkaXIsICd1cGRhdGUnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgaWYgKGRpci5kZWYgJiYgZGlyLmRlZi5jb21wb25lbnRVcGRhdGVkKSB7XG4gICAgICAgIGRpcnNXaXRoUG9zdHBhdGNoLnB1c2goZGlyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZGlyc1dpdGhJbnNlcnQubGVuZ3RoKSB7XG4gICAgdmFyIGNhbGxJbnNlcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxIb29rJDEoZGlyc1dpdGhJbnNlcnRbaV0sICdpbnNlcnRlZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoaXNDcmVhdGUpIHtcbiAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAnaW5zZXJ0JywgY2FsbEluc2VydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxJbnNlcnQoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoKSB7XG4gICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdwb3N0cGF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxIb29rJDEoZGlyc1dpdGhQb3N0cGF0Y2hbaV0sICdjb21wb25lbnRVcGRhdGVkJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmICghaXNDcmVhdGUpIHtcbiAgICBmb3IgKGtleSBpbiBvbGREaXJzKSB7XG4gICAgICBpZiAoIW5ld0RpcnNba2V5XSkge1xuICAgICAgICAvLyBubyBsb25nZXIgcHJlc2VudCwgdW5iaW5kXG4gICAgICAgIGNhbGxIb29rJDEob2xkRGlyc1trZXldLCAndW5iaW5kJywgb2xkVm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZW1wdHlNb2RpZmllcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVEaXJlY3RpdmVzJDEgKFxuICBkaXJzLFxuICB2bVxuKSB7XG4gIHZhciByZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoIWRpcnMpIHtcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICByZXR1cm4gcmVzXG4gIH1cbiAgdmFyIGksIGRpcjtcbiAgZm9yIChpID0gMDsgaSA8IGRpcnMubGVuZ3RoOyBpKyspIHtcbiAgICBkaXIgPSBkaXJzW2ldO1xuICAgIGlmICghZGlyLm1vZGlmaWVycykge1xuICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICBkaXIubW9kaWZpZXJzID0gZW1wdHlNb2RpZmllcnM7XG4gICAgfVxuICAgIHJlc1tnZXRSYXdEaXJOYW1lKGRpcildID0gZGlyO1xuICAgIGRpci5kZWYgPSByZXNvbHZlQXNzZXQodm0uJG9wdGlvbnMsICdkaXJlY3RpdmVzJywgZGlyLm5hbWUsIHRydWUpO1xuICB9XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGdldFJhd0Rpck5hbWUgKGRpcikge1xuICByZXR1cm4gZGlyLnJhd05hbWUgfHwgKChkaXIubmFtZSkgKyBcIi5cIiArIChPYmplY3Qua2V5cyhkaXIubW9kaWZpZXJzIHx8IHt9KS5qb2luKCcuJykpKVxufVxuXG5mdW5jdGlvbiBjYWxsSG9vayQxIChkaXIsIGhvb2ssIHZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KSB7XG4gIHZhciBmbiA9IGRpci5kZWYgJiYgZGlyLmRlZltob29rXTtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZuKHZub2RlLmVsbSwgZGlyLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm5vZGUuY29udGV4dCwgKFwiZGlyZWN0aXZlIFwiICsgKGRpci5uYW1lKSArIFwiIFwiICsgaG9vayArIFwiIGhvb2tcIikpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgYmFzZU1vZHVsZXMgPSBbXG4gIHJlZixcbiAgZGlyZWN0aXZlc1xuXTtcblxuLyogICovXG5cbmZ1bmN0aW9uIHVwZGF0ZUF0dHJzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIG9wdHMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBpZiAoaXNEZWYob3B0cykgJiYgb3B0cy5DdG9yLm9wdGlvbnMuaW5oZXJpdEF0dHJzID09PSBmYWxzZSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEuYXR0cnMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5hdHRycykpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIga2V5LCBjdXIsIG9sZDtcbiAgdmFyIGVsbSA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZEF0dHJzID0gb2xkVm5vZGUuZGF0YS5hdHRycyB8fCB7fTtcbiAgdmFyIGF0dHJzID0gdm5vZGUuZGF0YS5hdHRycyB8fCB7fTtcbiAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XG4gIGlmIChpc0RlZihhdHRycy5fX29iX18pKSB7XG4gICAgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzID0gZXh0ZW5kKHt9LCBhdHRycyk7XG4gIH1cblxuICBmb3IgKGtleSBpbiBhdHRycykge1xuICAgIGN1ciA9IGF0dHJzW2tleV07XG4gICAgb2xkID0gb2xkQXR0cnNba2V5XTtcbiAgICBpZiAob2xkICE9PSBjdXIpIHtcbiAgICAgIHNldEF0dHIoZWxtLCBrZXksIGN1cik7XG4gICAgfVxuICB9XG4gIC8vICM0MzkxOiBpbiBJRTksIHNldHRpbmcgdHlwZSBjYW4gcmVzZXQgdmFsdWUgZm9yIGlucHV0W3R5cGU9cmFkaW9dXG4gIC8vICM2NjY2OiBJRS9FZGdlIGZvcmNlcyBwcm9ncmVzcyB2YWx1ZSBkb3duIHRvIDEgYmVmb3JlIHNldHRpbmcgYSBtYXhcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICgoaXNJRSB8fCBpc0VkZ2UpICYmIGF0dHJzLnZhbHVlICE9PSBvbGRBdHRycy52YWx1ZSkge1xuICAgIHNldEF0dHIoZWxtLCAn
33378dmFsdWUnLCBhdHRycy52YWx1ZSk7XG4gIH1cbiAgZm9yIChrZXkgaW4gb2xkQXR0cnMpIHtcbiAgICBpZiAoaXNVbmRlZihhdHRyc1trZXldKSkge1xuICAgICAgaWYgKGlzWGxpbmsoa2V5KSkge1xuICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xuICAgICAgfSBlbHNlIGlmICghaXNFbnVtZXJhdGVkQXR0cihrZXkpKSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0QXR0ciAoZWwsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGVsLnRhZ05hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuQXR0cihrZXkpKSB7XG4gICAgLy8gc2V0IGF0dHJpYnV0ZSBmb3IgYmxhbmsgdmFsdWVcbiAgICAvLyBlLmcuIDxvcHRpb24gZGlzYWJsZWQ+U2VsZWN0IG9uZTwvb3B0aW9uPlxuICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRlY2huaWNhbGx5IGFsbG93ZnVsbHNjcmVlbiBpcyBhIGJvb2xlYW4gYXR0cmlidXRlIGZvciA8aWZyYW1lPixcbiAgICAgIC8vIGJ1dCBGbGFzaCBleHBlY3RzIGEgdmFsdWUgb2YgXCJ0cnVlXCIgd2hlbiB1c2VkIG9uIDxlbWJlZD4gdGFnXG4gICAgICB2YWx1ZSA9IGtleSA9PT0gJ2FsbG93ZnVsbHNjcmVlbicgJiYgZWwudGFnTmFtZSA9PT0gJ0VNQkVEJ1xuICAgICAgICA/ICd0cnVlJ1xuICAgICAgICA6IGtleTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNFbnVtZXJhdGVkQXR0cihrZXkpKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKGtleSwgY29udmVydEVudW1lcmF0ZWRWYWx1ZShrZXksIHZhbHVlKSk7XG4gIH0gZWxzZSBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2
33378V5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZU5TKHhsaW5rTlMsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZVNldEF0dHIgKGVsLCBrZXksIHZhbHVlKSB7XG4gIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICB9IGVsc2Uge1xuICAgIC8vICM3MTM4OiBJRTEwICYgMTEgZmlyZXMgaW5wdXQgZXZlbnQgd2hlbiBzZXR0aW5nIHBsYWNlaG9sZGVyIG9uXG4gICAgLy8gPHRleHRhcmVhPi4uLiBibG9jayB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYW5kIHJlbW92ZSB0aGUgYmxvY2tlclxuICAgIC8vIGltbWVkaWF0ZWx5LlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChcbiAgICAgIGlzSUUgJiYgIWlzSUU5ICYmXG4gICAgICBlbC50YWdOYW1lID09PSAnVEVYVEFSRUEnICYmXG4gICAgICBrZXkgPT09ICdwbGFjZWhvbGRlcicgJiYgdmFsdWUgIT09ICcnICYmICFlbC5fX2llcGhcbiAgICApIHtcbiAgICAgIHZhciBibG9ja2VyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyKTtcbiAgICAgIH07XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGJsb2NrZXIpO1xuICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICBlbC5fX2llcGggPSB0cnVlOyAvKiBJRSBwbGFjZWhvbGRlciBwYXRjaGVkICovXG4gICAgfVxuICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgfVxufVxuXG52YXIgYXR0cnMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlQXR0cnMsXG4gIHVwZGF0ZTogdXBkYXRlQXR0cnNcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB1cGRhdGVDbGFzcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgb2xkRGF0YSA9IG9sZFZub2RlLmRhdGE7XG4gIGlmIChcbiAgICBpc1VuZGVmKGRhdGEuc3RhdGljQ2xhc3MpICYmXG4gICAgaXNVbmRlZihkYXRhLmNsYXNzKSAmJiAoXG4gICAgICBpc1VuZGVmKG9sZERhdGEpIHx8IChcbiAgICAgICAgaXNVbmRlZihvbGREYXRhLnN0YXRpY0NsYXNzKSAmJlxuICAgICAgICBpc1VuZGVmKG9sZERhdGEuY2xhc3MpXG4gICAgICApXG4gICAgKVxuICApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjbHMgPSBnZW5DbGFzc0ZvclZub2RlKHZub2RlKTtcblxuICAvLyBoYW5kbGUgdHJhbnNpdGlvbiBjbGFzc2VzXG4gIHZhciB0cmFuc2l0aW9uQ2xhc3MgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXM7XG4gIGlmIChpc0RlZih0cmFuc2l0aW9uQ2xhc3MpKSB7XG4gICAgY2xzID0gY29uY2F0KGNscywgc3RyaW5naWZ5Q2xhc3ModHJhbnNpdGlvbkNsYXNzKSk7XG4gIH1cblxuICAvLyBzZXQgdGhlIGNsYXNzXG4gIGlmIChjbHMgIT09IGVsLl9wcmV2Q2xhc3MpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY2xzKTtcbiAgICBlbC5fcHJldkNsYXNzID0gY2xzO1xuICB9XG59XG5cbnZhciBrbGFzcyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVDbGFzcyxcbiAgdXBkYXRlOiB1cGRhdGVDbGFzc1xufTtcblxuLyogICovXG5cbnZhciB2YWxpZERpdmlzaW9uQ2hhclJFID0gL1tcXHcpLitcXC1fJFxcXV0vO1xuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnMgKGV4cCkge1xuICB2YXIgaW5TaW5nbGUgPSBmYWxzZTtcbiAgdmFyIGluRG91YmxlID0gZmFsc2U7XG4gIHZhciBpblRlbXBsYXRlU3RyaW5nID0gZmFsc2U7XG4gIHZhciBpblJlZ2V4ID0gZmFsc2U7XG4gIHZhciBjdXJseSA9IDA7XG4gIHZhciBzcXVhcmUgPSAwO1xuICB2YXIgcGFyZW4gPSAwO1xuICB2YXIgbGFzdEZpbHRlckluZGV4ID0gMDtcbiAgdmFyIGMsIHByZXYsIGksIGV4cHJlc3Npb24sIGZpbHRlcnM7XG5cbiAgZm9yIChpID0gMDsgaSA8IGV4cC5sZW5ndGg7IGkrKykge1xuICAgIHByZXYgPSBjO1xuICAgIGMgPSBleHAuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoaW5TaW5nbGUpIHtcbiAgICAgIGlmIChjID09PSAweDI3ICYmIHByZXYgIT09IDB4NUMpIHsgaW5TaW5nbGUgPSBmYWxzZTsgfVxuICAgIH0gZWxzZSBpZiAoaW5Eb3VibGUpIHtcbiAgICAgIGlmIChjID09PSAweDIyICYmIHByZXYgIT09IDB4NUMpIHsgaW5Eb3VibGUgPSBmYWxzZTsgfVxuICAgIH0gZWxzZSBpZiAoaW5UZW1wbGF0ZVN0cmluZykge1xuICAgICAgaWYgKGMgPT09IDB4NjAgJiYgcHJldiAhPT0gMHg1QykgeyBpblRlbXBsYXRlU3RyaW5nID0gZmFsc2U7IH1cbiAgICB9IGVsc2UgaWYgKGluUmVnZXgpIHtcbiAgICAgIGlmIChjID09PSAweDJmICYmIHByZXYgIT09IDB4NUMpIHsgaW5SZWdleCA9IGZhbHNlOyB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGMgPT09IDB4N0MgJiYgLy8gcGlwZVxuICAgICAgZXhwLmNoYXJDb2RlQXQoaSArIDEpICE9PSAweDdDICYmXG4gICAgICBleHAuY2hhckNvZGVBdChpIC0gMSkgIT09IDB4N0MgJiZcbiAgICAgICFjdXJseSAmJiAhc3F1YXJlICYmICFwYXJlblxuICAgICkge1xuICAgICAgaWYgKGV4cHJlc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBmaXJzdCBmaWx0ZXIsIGVuZCBvZiBleHByZXNzaW9uXG4gICAgICAgIGxhc3RGaWx0ZXJJbmRleCA9IGkgKyAxO1xuICAgICAgICBleHByZXNzaW9uID0gZXhwLnNsaWNlKDAsIGkpLnRyaW0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHB1c2hGaWx0ZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgMHgyMjogaW5Eb3VibGUgPSB0cnVlOyBicmVhayAgICAgICAgIC8vIFwiXG4gICAgICAgIGNhc2UgMHgyNzogaW5TaW5nbGUgPSB0cnVlOyBicmVhayAgICAgICAgIC8vICdcbiAgICAgICAgY2FzZSAweDYwOiBpblRlbXBsYXRlU3RyaW5nID0gdHJ1ZTsgYnJlYWsgLy8gYFxuICAgICAgICBjYXNlIDB4Mjg6IHBhcmVuKys7IGJyZWFrICAgICAgICAgICAgICAgICAvLyAoXG4gICAgICAgIGNhc2UgMHgyOTogcGFyZW4tLTsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIClcbiAgICAgICAgY2FzZSAweDVCOiBzcXVhcmUrKzsgYnJlYWsgICAgICAgICAgICAgICAgLy8gW1xuICAgICAgICBjYXNlIDB4NUQ6IHNxdWFyZS0tOyBicmVhayAgICAgICAgICAgICAgICAvLyBdXG4gICAgICAgIGNhc2UgMHg3QjogY3VybHkrKzsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgY2FzZSAweDdEOiBjdXJseS0tOyBicmVhayAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgfVxuICAgICAgaWYgKGMgPT09IDB4MmYpIHsgLy8gL1xuICAgICAgICB2Y
33378XIgaiA9IGkgLSAxO1xuICAgICAgICB2YXIgcCA9ICh2b2lkIDApO1xuICAgICAgICAvLyBmaW5kIGZpcnN0IG5vbi13aGl0ZXNwYWNlIHByZXYgY2hhclxuICAgICAgICBmb3IgKDsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICBwID0gZXhwLmNoYXJBdChqKTtcbiAgICAgICAgICBpZiAocCAhPT0gJyAnKSB7IGJyZWFrIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXAgfHwgIXZhbGlkRGl2aXNpb25DaGFyUkUudGVzdChwKSkge1xuICAgICAgICAgIGluUmVnZXggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4cHJlc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgIGV4cHJlc3Npb24gPSBleHAuc2xpY2UoMCwgaSkudHJpbSgpO1xuICB9IGVsc2UgaWYgKGxhc3RGaWx0ZXJJbmRleCAhPT0gMCkge1xuICAgIHB1c2hGaWx0ZXIoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2hGaWx0ZXIgKCkge1xuICAgIChmaWx0ZXJzIHx8IChmaWx0ZXJzID0gW10pKS5wdXNoKGV4cC5zbGljZShsYXN0RmlsdGVySW5kZXgsIGkpLnRyaW0oKSk7XG4gICAgbGFzdEZpbHRlckluZGV4ID0gaSArIDE7XG4gIH1cblxuICBpZiAoZmlsdGVycykge1xuICAgIGZvciAoaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBleHByZXNzaW9uID0gd3JhcEZpbHRlcihleHByZXNzaW9uLCBmaWx0ZXJzW2ldKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwcmVzc2lvblxufVxuXG5mdW5jdGlvbiB3cmFwRmlsdGVyIChleHAsIGZpbHRlcikge1xuICB2YXIgaSA9IGZpbHRlci5pbmRleE9mKCcoJyk7XG4gIGlmIChpIDwgMCkge1xuICAgIC8vIF9mOiByZXNvbHZlRmlsdGVyXG4gICAgcmV0dXJuIChcIl9mKFxcXCJcIiArIGZpbHRlciArIFwiXFxcIikoXCIgKyBleHAgKyBcIilcIilcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmFtZSA9IGZpbHRlci5zbGljZSgwLCBpKTtcbiAgICB2YXIgYXJncyA9IGZpbHRlci5zbGljZShpICsgMSk7XG4gICAgcmV0dXJuIChcIl9mKFxcXCJcIiArIG5hbWUgKyBcIlxcXCIpKFwiICsgZXhwICsgKGFyZ3MgIT09ICcpJyA/ICcsJyArIGFyZ3MgOiBhcmdzKSlcbiAgfVxufVxuXG4vKiAgKi9cblxuXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5mdW5jdGlvbiBiYXNlV2FybiAobXNnLCByYW5nZSkge1xuICBjb25zb2xlLmVycm9yKChcIltWdWUgY29tcGlsZXJdOiBcIiArIG1zZykpO1xufVxuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG5mdW5jdGlvbiBwbHVja01vZHVsZUZ1bmN0aW9uIChcbiAgbW9kdWxlcyxcbiAga2V5XG4pIHtcbiAgcmV0dXJuIG1vZHVsZXNcbiAgICA/IG1vZHVsZXMubWFwKGZ1bmN0aW9uIChtKSB7IHJldHVybiBtW2tleV07IH0pLmZpbHRlcihmdW5jdGlvbiAoXykgeyByZXR1cm4gXzsgfSlcbiAgICA6IFtdXG59XG5cbmZ1bmN0aW9uIGFkZFByb3AgKGVsLCBuYW1lLCB2YWx1ZSwgcmFuZ2UsIGR5bmFtaWMpIHtcbiAgKGVsLnByb3BzIHx8IChlbC5wcm9wcyA9IFtdKSkucHVzaChyYW5nZVNldEl0ZW0oeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUsIGR5bmFtaWM6IGR5bmFtaWMgfSwgcmFuZ2UpKTtcbiAgZWwucGxhaW4gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gYWRkQXR0ciAoZWwsIG5hbWUsIHZhbHVlLCByYW5nZSwgZHluYW1pYykge1xuICB2YXIgYXR0cnMgPSBkeW5hbWljXG4gICAgPyAoZWwuZHluYW1pY0F0dHJzIHx8IChlbC5keW5hbWljQXR0cnMgPSBbXSkpXG4gICAgOiAoZWwuYXR0cnMgfHwgKGVsLmF0dHJzID0gW10pKTtcbiAgYXR0cnMucHVzaChyYW5nZVNldEl0ZW0oeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUsIGR5bmFtaWM6IGR5bmFtaWMgfSwgcmFuZ2UpKTtcbiAgZWwucGxhaW4gPSBmYWxzZTtcbn1cblxuLy8gYWRkIGEgcmF3IGF0dHIgKHVzZSB0aGlzIGluIHByZVRyYW5zZm9ybXMpXG5mdW5jdGlvbiBhZGRSYXdBdHRyIChlbCwgbmFtZSwgdmFsdWUsIHJhbmdlKSB7XG4gIGVsLmF0dHJzTWFwW25hbWVdID0gdmFsdWU7XG4gIGVsLmF0dHJzTGlzdC5wdXNoKHJhbmdlU2V0SXRlbSh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSB9LCByYW5nZSkpO1xufVxuXG5mdW5jdGlvbiBhZGREaXJlY3RpdmUgKFxuICBlbCxcbiAgbmFtZSxcbiAgcmF3TmFtZSxcbiAgdmFsdWUsXG4gIGFyZyxcbiAgaXNEeW5hbWljQXJnLFxuICBtb2RpZmllcnMsXG4gIHJhbmdlXG4pIHtcbiAgKGVsLmRpcmVjdGl2ZXMgfHwgKGVsLmRpcmVjdGl2ZXMgPSBbXSkpLnB1c2gocmFuZ2VTZXRJdGVtKHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHJhd05hbWU6IHJhd05hbWUsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGFyZzogYXJnLFxuICAgIGlzRHluYW1pY0FyZzogaXNEeW5hbWljQXJnLFxuICAgIG1vZGlmaWVyczogbW9kaWZpZXJzXG4gI
33378H0sIHJhbmdlKSk7XG4gIGVsLnBsYWluID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHByZXBlbmRNb2RpZmllck1hcmtlciAoc3ltYm9sLCBuYW1lLCBkeW5hbWljKSB7XG4gIHJldHVybiBkeW5hbWljXG4gICAgPyAoXCJfcChcIiArIG5hbWUgKyBcIixcXFwiXCIgKyBzeW1ib2wgKyBcIlxcXCIpXCIpXG4gICAgOiBzeW1ib2wgKyBuYW1lIC8vIG1hcmsgdGhlIGV2ZW50IGFzIGNhcHR1cmVkXG59XG5cbmZ1bmN0aW9uIGFkZEhhbmRsZXIgKFxuICBlbCxcbiAgbmFtZSxcbiAgdmFsdWUsXG4gIG1vZGlmaWVycyxcbiAgaW1wb3J0YW50LFxuICB3YXJuLFxuICByYW5nZSxcbiAgZHluYW1pY1xuKSB7XG4gIG1vZGlmaWVycyA9IG1vZGlmaWVycyB8fCBlbXB0eU9iamVjdDtcbiAgLy8gd2FybiBwcmV2ZW50IGFuZCBwYXNzaXZlIG1vZGlmaWVyXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuICYmXG4gICAgbW9kaWZpZXJzLnByZXZlbnQgJiYgbW9kaWZpZXJzLnBhc3NpdmVcbiAgKSB7XG4gICAgd2FybihcbiAgICAgICdwYXNzaXZlIGFuZCBwcmV2ZW50IGNhblxcJ3QgYmUgdXNlZCB0b2dldGhlci4gJyArXG4gICAgICAnUGFzc2l2ZSBoYW5kbGVyIGNhblxcJ3QgcHJldmVudCBkZWZhdWx0IGV2ZW50LicsXG4gICAgICByYW5nZVxuICAgICk7XG4gIH1cblxuICAvLyBub3JtYWxpemUgY2xpY2sucmlnaHQgYW5kIGNsaWNrLm1pZGRsZSBzaW5jZSB0aGV5IGRvbid0IGFjdHVhbGx5IGZpcmVcbiAgLy8gdGhpcyBpcyB0ZWNobmljYWxseSBicm93c2VyLXNwZWNpZmljLCBidXQgYXQgbGVhc3QgZm9yIG5vdyBicm93c2VycyBhcmVcbiAgLy8gdGhlIG9ubHkgdGFyZ2V0IGVudnMgdGhhdCBoYXZlIHJpZ2h0L21pZGRsZSBjbGlja3MuXG4gIGlmIChtb2RpZmllcnMucmlnaHQpIHtcbiAgICBpZiAoZHluYW1pYykge1xuICAgICAgbmFtZSA9IFwiKFwiICsgbmFtZSArIFwiKT09PSdjbGljayc/J2NvbnRleHRtZW51JzooXCIgKyBuYW1lICsgXCIpXCI7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnY2xpY2snKSB7XG4gICAgICBuYW1lID0gJ2NvbnRleHRtZW51JztcbiAgICAgIGRlbGV0ZSBtb2RpZmllcnMucmlnaHQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKG1vZGlmaWVycy5taWRkbGUpIHtcbiAgICBpZiAoZHluYW1pYykge1xuICAgICAgbmFtZSA9IFwiKFwiICsgbmFtZSArIFwiKT09PSdjbGljayc/J21vdXNldXAnOihcIiArIG5hbWUgKyBcIilcIjtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdjbGljaycpIHtcbiAgICAgIG5hbWUgPSAnbW91c2V1cCc7XG4gICAgfVxuICB9XG5cbiAgLy8gY2hlY2sgY2FwdHVyZSBtb2RpZmllclxuICBpZiAobW9kaWZpZXJzLmNhcHR1cmUpIHtcbiAgICBkZWxldGUgbW9kaWZpZXJzLmNhcHR1cmU7XG4gICAgbmFtZSA9IHByZXBlbmRNb2RpZmllck1hcmtlcignIScsIG5hbWUsIGR5bmFtaWMpO1xuICB9XG4gIGlmIChtb2RpZmllcnMub25jZSkge1xuICAgIGRlbGV0ZSBtb2RpZmllcnMub25jZTtcbiAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCd+JywgbmFtZSwgZHluYW1pYyk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChtb2RpZmllcnMucGFzc2l2ZSkge1xuICAgIGRlbGV0ZSBtb2RpZmllcnMucGFzc2l2ZTtcbiAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCcmJywgbmFtZSwgZHluYW1pYyk7XG4gIH1cblxuICB2YXIgZXZlbnRzO1xuICBpZiAobW9kaWZpZXJzLm5hdGl2ZSkge1xuICAgIGRlbGV0ZSBtb2RpZmllcnMubmF0aXZlO1xuICAgIGV2ZW50cyA9IGVsLm5hdGl2ZUV2ZW50cyB8fCAoZWwubmF0aXZlRXZlbnRzID0ge30pO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50cyA9IGVsLmV2ZW50cyB8fCAoZWwuZXZlbnRzID0ge30pO1xuICB9XG5cbiAgdmFyIG5ld0hhbmRsZXIgPSByYW5nZVNldEl0ZW0oeyB2YWx1ZTogdmFsdWUudHJpbSgpLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKTtcbiAgaWYgKG1vZGlmaWVycyAhPT0gZW1wdHlPYmplY3QpIHtcbiAgICBuZXdIYW5kbGVyLm1vZGlmaWVycyA9IG1vZGlmaWVycztcbiAgfVxuXG4gIHZhciBoYW5kbGVycyA9IGV2ZW50c1tuYW1lXTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXJzKSkge1xuICAgIGltcG9ydGFudCA/IGhhbmRsZXJzLnVuc2hpZnQobmV3SGFuZGxlcikgOiBoYW5kbGVycy5wdXNoKG5ld0hhbmRsZXIpO1xuICB9IGVsc2UgaWYgKGhhbmRsZXJzKSB7XG4gICAgZXZlbnRzW25hbWVdID0gaW1wb3J0YW50ID8gW25ld0hhbmRsZXIsIGhhbmRsZXJzXSA6IFtoYW5kbGVycywgbmV3SGFuZGxlcl07XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRzW25hbWVdID0gbmV3SGFuZGxlcjtcbiAgfVxuXG4gIGVsLnBsYWluID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFJhd0JpbmRpbmdBdHRyIChcbiAgZWwsXG4gIG5hbWVcbikge1xuICByZXR1cm4gZWwucmF3QXR0cnNNYXBbJzonICsgbmFtZV0gfHxcbiAgICBlbC5yYXdBdHRyc01hcFsndi1iaW5kOicgKyBuYW1lXSB8fFxuICAgIGVsLnJhd0F0dHJzTWFwW25hbWVdXG59XG5cbmZ1bmN0aW9uIGdldEJpbmRpbmdBdHRyIChcbiAgZWwsXG4gIG5hbWUsXG4gIGdldFN0YXRpY1xuKSB7XG4gIHZhciBkeW5hbWljVmFsdWUgPVxuICAgIGdldEFuZFJlbW92ZUF0dHIoZWwsICc6JyArIG5hbWUpIHx8XG4gICAgZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtYmluZDonICsgbmFtZSk7XG4gIGlmIChkeW5hbWljVmFsdWUgIT0gbnVsbCkge1xuICAgIHJldHVybiBwYXJzZUZpbHRlcnMoZHluYW1pY1ZhbHVlKVxuICB9IGVsc2UgaWYgKGdldFN0YXRpYyAhPT0gZmFsc2UpIHtcbiAgICB2YXIgc3RhdGljVmFsdWUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCBuYW1lKTtcbiAgICBpZiAoc3RhdGljVmFsdWUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHN0YXRpY1ZhbHVlKVxuICAgIH1cbiAgfVxufVxuXG4vLyBub3RlOiB0aGlzIG9ubHkgcmVtb3ZlcyB0aGUgYXR0ciBmcm9tIHRoZSBBcnJheSAoYXR0cnNMaXN0KSBzbyB0aGF0IGl0XG4vLyBkb2Vzbid0IGdldCBwcm9jZXNzZWQgYnkgcHJvY2Vzc0F0dHJzLlxuLy8gQnkgZGVmYXVsdCBpdCBkb2VzIE5PVCByZW1vdmUgaXQgZnJvbSB0aGUgbWFwIChhdHRyc01hcCkgYmVjYXVzZSB0aGUgbWFwIGlzXG4vLyBuZWVkZWQgZHVyaW5nIGNvZGVnZW4uXG5mdW5jdGlvbiBnZXRBbmRSZW1vdmVBdHRyIChcbiAgZWwsXG4gIG5hbWUsXG4gIHJlbW92ZUZyb21NYXBcbikge1xuICB2YXIgdmFsO1xuICBpZiAoKHZhbCA9IGVsLmF0dHJzTWFwW25hbWVdKSAhPSBudWxsKSB7XG4gICAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGxpc3RbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gI
33378H1cbiAgaWYgKHJlbW92ZUZyb21NYXApIHtcbiAgICBkZWxldGUgZWwuYXR0cnNNYXBbbmFtZV07XG4gIH1cbiAgcmV0dXJuIHZhbFxufVxuXG5mdW5jdGlvbiBnZXRBbmRSZW1vdmVBdHRyQnlSZWdleCAoXG4gIGVsLFxuICBuYW1lXG4pIHtcbiAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgYXR0ciA9IGxpc3RbaV07XG4gICAgaWYgKG5hbWUudGVzdChhdHRyLm5hbWUpKSB7XG4gICAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICAgIHJldHVybiBhdHRyXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJhbmdlU2V0SXRlbSAoXG4gIGl0ZW0sXG4gIHJhbmdlXG4pIHtcbiAgaWYgKHJhbmdlKSB7XG4gICAgaWYgKHJhbmdlLnN0YXJ0ICE9IG51bGwpIHtcbiAgICAgIGl0ZW0uc3RhcnQgPSByYW5nZS5zdGFydDtcbiAgICB9XG4gICAgaWYgKHJhbmdlLmVuZCAhPSBudWxsKSB7XG4gICAgICBpdGVtLmVuZCA9IHJhbmdlLmVuZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGl0ZW1cbn1cblxuLyogICovXG5cbi8qKlxuICogQ3Jvc3MtcGxhdGZvcm0gY29kZSBnZW5lcmF0aW9uIGZvciBjb21wb25lbnQgdi1tb2RlbFxuICovXG5mdW5jdGlvbiBnZW5Db21wb25lbnRNb2RlbCAoXG4gIGVsLFxuICB2YWx1ZSxcbiAgbW9kaWZpZXJzXG4pIHtcbiAgdmFyIHJlZiA9IG1vZGlmaWVycyB8fCB7fTtcbiAgdmFyIG51bWJlciA9IHJlZi5udW1iZXI7XG4gIHZhciB0cmltID0gcmVmLnRyaW07XG5cbiAgdmFyIGJhc2VWYWx1ZUV4cHJlc3Npb24gPSAnJCR2JztcbiAgdmFyIHZhbHVlRXhwcmVzc2lvbiA9IGJhc2VWYWx1ZUV4cHJlc3Npb247XG4gIGlmICh0cmltKSB7XG4gICAgdmFsdWVFeHByZXNzaW9uID1cbiAgICAgIFwiKHR5cGVvZiBcIiArIGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBcIiA9PT0gJ3N0cmluZydcIiArXG4gICAgICBcIj8gXCIgKyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIudHJpbSgpXCIgK1xuICAgICAgXCI6IFwiICsgYmFzZVZhbHVlRXhwcmVzc2lvbiArIFwiKVwiO1xuICB9XG4gIGlmIChudW1iZXIpIHtcbiAgICB2YWx1ZUV4cHJlc3Npb24gPSBcIl9uKFwiICsgdmFsdWVFeHByZXNzaW9uICsgXCIpXCI7XG4gIH1cbiAgdmFyIGFzc2lnbm1lbnQgPSBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgdmFsdWVFeHByZXNzaW9uKTtcblxuICBlbC5tb2RlbCA9IHtcbiAgICB2YWx1ZTogKFwiKFwiICsgdmFsdWUgKyBcIilcIiksXG4gICAgZXhwcmVzc2lvbjogSlNPTi5zdHJpbmdpZnkodmFsdWUpLFxuICAgIGNhbGxiYWNrOiAoXCJmdW5jdGlvbiAoXCIgKyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIpIHtcIiArIGFzc2lnbm1lbnQgKyBcIn1cIilcbiAgfTtcbn1cblxuLyoqXG4gKiBDcm9zcy1wbGF0Zm9ybSBjb2RlZ2VuIGhlbHBlciBmb3IgZ2VuZXJhdGluZyB2LW1vZGVsIHZhbHVlIGFzc2lnbm1lbnQgY29kZS5cbiAqL1xuZnVuY3Rpb24gZ2VuQXNzaWdubWVudENvZGUgKFxuICB2YWx1ZSxcbiAgYXNzaWdubWVudFxuKSB7XG4gIHZhciByZXMgPSBwYXJzZU1vZGVsKHZhbHVlKTtcbiAgaWYgKHJlcy5rZXkgPT09IG51bGwpIHtcbiAgICByZXR1cm4gKHZhbHVlICsgXCI9XCIgKyBhc3NpZ25tZW50KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAoXCIkc2V0KFwiICsgKHJlcy5leHApICsgXCIsIFwiICsgKHJlcy5rZXkpICsgXCIsIFwiICsgYXNzaWdubWVudCArIFwiKVwiKVxuICB9XG59XG5cbi8qKlxuICogUGFyc2UgYSB2LW1vZGVsIGV4cHJlc3Npb24gaW50byBhIGJhc2UgcGF0aCBhbmQgYSBmaW5hbCBrZXkgc2VnbWVudC5cbiAqIEhhbmRsZXMgYm90aCBkb3QtcGF0aCBhbmQgcG9zc2libGUgc3F1YXJlIGJyYWNrZXRzLlxuICpcbiAqIFBvc3NpYmxlIGNhc2VzOlxuICpcbiAqIC0gdGVzdFxuICogLSB0ZXN0W2tleV1cbiAqIC0gdGVzdFt0ZXN0MVtrZXldXVxuICogLSB0ZXN0W1wiYVwiXVtrZXldXG4gKiAtIHh4eC50ZXN0W2FbYV0udGVzdDFba2V5XV1cbiAqIC0gdGVzdC54eHguYVtcImFzYVwiXVt0ZXN0MVtrZXldXVxuICpcbiAqL1xuXG52YXIgbGVuLCBzdHIsIGNociwgaW5kZXgkMSwgZXhwcmVzc2lvblBvcywgZXhwcmVzc2lvbkVuZFBvcztcblxuXG5cbmZ1bmN0aW9uIHBhcnNlTW9kZWwgKHZhbCkge1xuICAvLyBGaXggaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9wdWxsLzc3MzBcbiAgLy8gYWxsb3cgdi1tb2RlbD1cIm9iai52YWwgXCIgKHRyYWlsaW5nIHdoaXRlc3BhY2UpXG4gIHZhbCA9IHZhbC50cmltKCk7XG4gIGxlbiA9IHZhbC5sZW5ndGg7XG5cbiAgaWYgKHZhbC5pbmRleE9mKCdbJykgPCAwIHx8IHZhbC5sYXN0SW5kZXhPZignXScpIDwgbGVuIC0gMSkge1xuICAgIGluZGV4JDEgPSB2YWwubGFzdEluZGV4T2YoJy4nKTtcbiAgICBpZiAoaW5kZXgkMSA+IC0xKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHA6IHZhbC5zbGljZSgwLCBpbmRleCQxKSxcbiAgICAgICAga2V5OiAnXCInICsgdmFsLnNsaWNlKGluZGV4JDEgKyAxKSArICdcIidcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhwOiB2YWwsXG4gICAgICAgIGtleTogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0ciA9IHZhbDtcbiAgaW5kZXgkMSA9IGV4cHJlc3Npb25Qb3MgPSBleHByZXNzaW9uRW5kUG9zID0gMDtcblxuICB3aGlsZSAoIWVvZigpKSB7XG4gICAgY2hyID0gbmV4dCgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc1N0cmluZ1N0YXJ0KGNocikpIHtcbiAgICAgIHBhcnNlU3RyaW5nKGNocik7XG4gICAgfSBlbHNlIGlmIChjaHIgPT09IDB4NUIpIHtcbiAgICAgIHBhcnNlQnJhY2tldChjaHIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwOiB2YWwuc2xpY2UoMCwgZXhwcmVzc2lvblBvcyksXG4gICAga2V5OiB2YWwuc2xpY2UoZXhwcmVzc2lvblBvcyArIDEsIGV4cHJlc3Npb25FbmRQb3MpXG4gIH1cbn1cblxuZnVuY3Rpb24gbmV4dCAoKSB7XG4gIHJldHVybiBzdHIuY2hhckNvZGVBdCgrK2luZGV4JDEpXG59XG5cbmZ1bmN0aW9uIGVvZiAoKSB7XG4gIHJldHVybi
33378BpbmRleCQxID49IGxlblxufVxuXG5mdW5jdGlvbiBpc1N0cmluZ1N0YXJ0IChjaHIpIHtcbiAgcmV0dXJuIGNociA9PT0gMHgyMiB8fCBjaHIgPT09IDB4Mjdcbn1cblxuZnVuY3Rpb24gcGFyc2VCcmFja2V0IChjaHIpIHtcbiAgdmFyIGluQnJhY2tldCA9IDE7XG4gIGV4cHJlc3Npb25Qb3MgPSBpbmRleCQxO1xuICB3aGlsZSAoIWVvZigpKSB7XG4gICAgY2hyID0gbmV4dCgpO1xuICAgIGlmIChpc1N0cmluZ1N0YXJ0KGNocikpIHtcbiAgICAgIHBhcnNlU3RyaW5nKGNocik7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoY2hyID09PSAweDVCKSB7IGluQnJhY2tldCsrOyB9XG4gICAgaWYgKGNociA9PT0gMHg1RCkgeyBpbkJyYWNrZXQtLTsgfVxuICAgIGlmIChpbkJyYWNrZXQgPT09IDApIHtcbiAgICAgIGV4cHJlc3Npb25FbmRQb3MgPSBpbmRleCQxO1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VTdHJpbmcgKGNocikge1xuICB2YXIgc3RyaW5nUXVvdGUgPSBjaHI7XG4gIHdoaWxlICghZW9mKCkpIHtcbiAgICBjaHIgPSBuZXh0KCk7XG4gICAgaWYgKGNociA9PT0gc3RyaW5nUXVvdGUpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgd2FybiQxO1xuXG4vLyBpbiBzb21lIGNhc2VzLCB0aGUgZXZlbnQgdXNlZCBoYXMgdG8gYmUgZGV0ZXJtaW5lZCBhdCBydW50aW1lXG4vLyBzbyB3ZSB1c2VkIHNvbWUgcmVzZXJ2ZWQgdG9rZW5zIGR1cmluZyBjb21waWxlLlxudmFyIFJBTkdFX1RPS0VOID0gJ19fcic7XG52YXIgQ0hFQ0tCT1hfUkFESU9fVE9LRU4gPSAnX19jJztcblxuZnVuY3Rpb24gbW9kZWwgKFxuICBlbCxcbiAgZGlyLFxuICBfd2FyblxuKSB7XG4gIHdhcm4kMSA9IF93YXJuO1xuICB2YXIgdmFsdWUgPSBkaXIudmFsdWU7XG4gIHZhciBtb2RpZmllcnMgPSBkaXIubW9kaWZpZXJzO1xuICB2YXIgdGFnID0gZWwudGFnO1xuICB2YXIgdHlwZSA9IGVsLmF0dHJzTWFwLnR5cGU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBpbnB1dHMgd2l0aCB0eXBlPVwiZmlsZVwiIGFyZSByZWFkIG9ubHkgYW5kIHNldHRpbmcgdGhlIGlucHV0J3NcbiAgICAvLyB2YWx1ZSB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgdHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICB3YXJuJDEoXG4gICAgICAgIFwiPFwiICsgKGVsLnRhZykgKyBcIiB2LW1vZGVsPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiIHR5cGU9XFxcImZpbGVcXFwiPjpcXG5cIiArXG4gICAgICAgIFwiRmlsZSBpbnB1dHMgYXJlIHJlYWQgb25seS4gVXNlIGEgdi1vbjpjaGFuZ2UgbGlzdGVuZXIgaW5zdGVhZC5cIixcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtbW9kZWwnXVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZWwuY29tcG9uZW50KSB7XG4gICAgZ2VuQ29tcG9uZW50TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgIC8vIGNvbXBvbmVudCB2LW1vZGVsIGRvZXNuJ3QgbmVlZCBleHRyYSBydW50aW1lXG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAodGFnID09PSAnc2VsZWN0Jykge1xuICAgIGdlblNlbGVjdChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICBnZW5DaGVja2JveE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgdHlwZSA9PT0gJ3JhZGlvJykge1xuICAgIGdlblJhZGlvTW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYScpIHtcbiAgICBnZW5EZWZhdWx0TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICB9IGVsc2UgaWYgKCFjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgZ2VuQ29tcG9uZW50TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgIC8vIGNvbXBvbmVudCB2LW1vZGVsIGRvZXNuJ3QgbmVlZCBleHRyYSBydW50aW1lXG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4kMShcbiAgICAgIFwiPFwiICsgKGVsLnRhZykgKyBcIiB2LW1vZGVsPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiPjogXCIgK1xuICAgICAgXCJ2LW1vZGVsIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBlbGVtZW50IHR5cGUuIFwiICtcbiAgICAgICdJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBjb250ZW50ZWRpdGFibGUsIGl0XFwncyByZWNvbW1lbmRlZCB0byAnICtcbiAgICAgICd3cmFwIGEgbGlicmFyeSBkZWRpY2F0ZWQgZm9yIHRoYXQgcHVycG9zZSBpbnNpZGUgYSBjdXN0b20gY29tcG9uZW50LicsXG4gICAgICBlbC5yYXdBdHRyc01hcFsndi1tb2RlbCddXG4gICAgKTtcbiAgfVxuXG4gIC8vIGVuc3VyZSBydW50aW1lIGRpcmVjdGl2ZSBtZXRhZGF0YVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBnZW5DaGVja2JveE1vZGVsIChcbiAgZWwsXG4gIHZhbHVlLFxuICBtb2RpZmllcnNcbikge1xuICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gIHZhciB2YWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3ZhbHVlJykgfHwgJ251bGwnO1xuICB2YXIgdHJ1ZVZhbHVlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndHJ1ZS12YWx1ZScpIHx8ICd0cnVlJztcbiAgdmFyIGZhbHNlVmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdmYWxzZS12YWx1ZScpIHx8ICdmYWxzZSc7XG4gIGFkZFByb3AoZWwsICdjaGVja2VkJyxcbiAgICBcIkFycmF5LmlzQXJyYXkoXCIgKyB2YWx1ZSArIFwiKVwiICtcbiAgICBcIj9faShcIiArIHZhbHVlICsgXCIsXCIgKyB2YWx1ZUJpbmRpbmcgKyBcIik+LTFcIiArIChcbiAgICAgIHRydWVWYWx1ZUJpbmRpbmcgPT09ICd0cnVlJ1xuICAgICAgICA/IChcIjooXCIgKyB2YWx1ZSArIFwiKVwiKVxuICAgICAgICA6IChcIjpfcShcIiArIHZhbHVlICsgXCIsXCIgKyB0cnVlVmFsdWVCaW5kaW5nICsgXCIpXCIpXG4gICAgKVxuICApO1xuICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJyxcbiAgICBcInZhciAkJGE9XCIgKyB2YWx1ZSArIFwiLFwiICtcbiAgICAgICAgJyQkZWw9JGV2ZW50LnRhcmdldCwnICtcbiAgICAgICAgXCIkJGM9JCRlbC5jaGVja2VkPyhcIiArIHRydWVWYWx1ZUJpbmRpbmcgKyBcIik6KFwiICsgZmFsc2VWYWx1ZUJpbmRpbmcgKyBcIik7XCIgK1xuICAgICdpZihBcnJheS5pc0FycmF
333785KCQkYSkpeycgK1xuICAgICAgXCJ2YXIgJCR2PVwiICsgKG51bWJlciA/ICdfbignICsgdmFsdWVCaW5kaW5nICsgJyknIDogdmFsdWVCaW5kaW5nKSArIFwiLFwiICtcbiAgICAgICAgICAnJCRpPV9pKCQkYSwkJHYpOycgK1xuICAgICAgXCJpZigkJGVsLmNoZWNrZWQpeyQkaTwwJiYoXCIgKyAoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsICckJGEuY29uY2F0KFskJHZdKScpKSArIFwiKX1cIiArXG4gICAgICBcImVsc2V7JCRpPi0xJiYoXCIgKyAoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsICckJGEuc2xpY2UoMCwkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpKzEpKScpKSArIFwiKX1cIiArXG4gICAgXCJ9ZWxzZXtcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYycpKSArIFwifVwiLFxuICAgIG51bGwsIHRydWVcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2VuUmFkaW9Nb2RlbCAoXG4gIGVsLFxuICB2YWx1ZSxcbiAgbW9kaWZpZXJzXG4pIHtcbiAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMubnVtYmVyO1xuICB2YXIgdmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd2YWx1ZScpIHx8ICdudWxsJztcbiAgdmFsdWVCaW5kaW5nID0gbnVtYmVyID8gKFwiX24oXCIgKyB2YWx1ZUJpbmRpbmcgKyBcIilcIikgOiB2YWx1ZUJpbmRpbmc7XG4gIGFkZFByb3AoZWwsICdjaGVja2VkJywgKFwiX3EoXCIgKyB2YWx1ZSArIFwiLFwiICsgdmFsdWVCaW5kaW5nICsgXCIpXCIpKTtcbiAgYWRkSGFuZGxlcihlbCwgJ2NoYW5nZScsIGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCB2YWx1ZUJpbmRpbmcpLCBudWxsLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZ2VuU2VsZWN0IChcbiAgZWwsXG4gIHZhbHVlLFxuICBtb2RpZmllcnNcbikge1xuICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gIHZhciBzZWxlY3RlZFZhbCA9IFwiQXJyYXkucHJvdG90eXBlLmZpbHRlclwiICtcbiAgICBcIi5jYWxsKCRldmVudC50YXJnZXQub3B0aW9ucyxmdW5jdGlvbihvKXtyZXR1cm4gby5zZWxlY3RlZH0pXCIgK1xuICAgIFwiLm1hcChmdW5jdGlvbihvKXt2YXIgdmFsID0gXFxcIl92YWx1ZVxcXCIgaW4gbyA/IG8uX3ZhbHVlIDogby52YWx1ZTtcIiArXG4gICAgXCJyZXR1cm4gXCIgKyAobnVtYmVyID8gJ19uKHZhbCknIDogJ3ZhbCcpICsgXCJ9KVwiO1xuXG4gIHZhciBhc3NpZ25tZW50ID0gJyRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXSc7XG4gIHZhciBjb2RlID0gXCJ2YXIgJCRzZWxlY3RlZFZhbCA9IFwiICsgc2VsZWN0ZWRWYWwgKyBcIjtcIjtcbiAgY29kZSA9IGNvZGUgKyBcIiBcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgYXNzaWdubWVudCkpO1xuICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgY29kZSwgbnVsbCwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGdlbkRlZmF1bHRNb2RlbCAoXG4gIGVsLFxuICB2YWx1ZSxcbiAgbW9kaWZpZXJzXG4pIHtcbiAgdmFyIHR5cGUgPSBlbC5hdHRyc01hcC50eXBlO1xuXG4gIC8vIHdhcm4gaWYgdi1iaW5kOnZhbHVlIGNvbmZsaWN0cyB3aXRoIHYtbW9kZWxcbiAgLy8gZXhjZXB0IGZvciBpbnB1dHMgd2l0aCB2LWJpbmQ6dHlwZVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciB2YWx1ZSQxID0gZWwuYXR0cnNNYXBbJ3YtYmluZDp2YWx1ZSddIHx8IGVsLmF0dHJzTWFwWyc6dmFsdWUnXTtcbiAgICB2YXIgdHlwZUJpbmRpbmcgPSBlbC5hdHRyc01hcFsndi1iaW5kOnR5cGUnXSB8fCBlbC5hdHRyc01hcFsnOnR5cGUnXTtcbiAgICBpZiAodmFsdWUkMSAmJiAhdHlwZUJpbmRpbmcpIHtcbiAgICAgIHZhciBiaW5kaW5nID0gZWwuYXR0cnNNYXBbJ3YtYmluZDp2YWx1ZSddID8gJ3YtYmluZDp2YWx1ZScgOiAnOnZhbHVlJztcbiAgICAgIHdhcm4kMShcbiAgICAgICAgYmluZGluZyArIFwiPVxcXCJcIiArIHZhbHVlJDEgKyBcIlxcXCIgY29uZmxpY3RzIHdpdGggdi1tb2RlbCBvbiB0aGUgc2FtZSBlbGVtZW50IFwiICtcbiAgICAgICAgJ2JlY2F1c2UgdGhlIGxhdHRlciBhbHJlYWR5IGV4cGFuZHMgdG8gYSB2YWx1ZSBiaW5kaW5nIGludGVybmFsbHknLFxuICAgICAgICBlbC5yYXdBdHRyc01hcFtiaW5kaW5nXVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcmVmID0gbW9kaWZpZXJzIHx8IHt9O1xuICB2YXIgbGF6eSA9IHJlZi5sYXp5O1xuICB2YXIgbnVtYmVyID0gcmVmLm51bWJlcjtcbiAgdmFyIHRyaW0gPSByZWYudHJpbTtcbiAgdmFyIG5lZWRDb21wb3NpdGlvbkd1YXJkID0gIWxhenkgJiYgdHlwZSAhPT0gJ3JhbmdlJztcbiAgdmFyIGV2ZW50ID0gbGF6eVxuICAgID8gJ2NoYW5nZSdcbiAgICA6IHR5cGUgPT09ICdyYW5nZSdcbiAgICAgID8gUkFOR0VfVE9LRU5cbiAgICAgIDogJ2lucHV0JztcblxuICB2YXIgdmFsdWVFeHByZXNzaW9uID0gJyRldmVudC50YXJnZXQudmFsdWUnO1xuICBpZiAodHJpbSkge1xuICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiJGV2ZW50LnRhcmdldC52YWx1ZS50cmltKClcIjtcbiAgfVxuICBpZiAobnVtYmVyKSB7XG4gICAgdmFsdWVFeHByZXNzaW9uID0gXCJfbihcIiArIHZhbHVlRXhwcmVzc2lvbiArIFwiKVwiO1xuICB9XG5cbiAgdmFyIGNvZGUgPSBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgdmFsdWVFeHByZXNzaW9uKTtcbiAgaWYgKG5lZWRDb21wb3NpdGlvbkd1YXJkKSB7XG4gICAgY29kZSA9IFwiaWYoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpcmV0dXJuO1wiICsgY29kZTtcbiAgfVxuXG4gIGFkZFByb3AoZWwsICd2YWx1ZScsIChcIihcIiArIHZhbHVlICsgXCIpXCIpKTtcbiAgYWRkSGFuZGxlcihlbCwgZXZlbnQsIGNvZGUsIG51bGwsIHRydWUpO1xuICBpZiAodHJpbSB8fCBudW1iZXIpIHtcbiAgICBhZGRIYW5kbGVyKGVsLCAnYmx1cicsICckZm9yY2VVcGRhdGUoKScpO1xuICB9XG59XG5cbi8qICAqL1xuXG4vLyBub3JtYWxpemUgdi1tb2RlbCBldmVudCB0b2tlbnMgdGhhdCBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUuXG4vLyBpdCdzIGltcG9ydGFudCB0byBwbGFjZSB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGluIHRoZSBhcnJheSBiZWNhdXNlXG4vLyB0aGUgd2hvbGUgcG9pbnQgaXMgZW5zdXJpbmcgdGhlIHYtbW9kZWwgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYmVmb3JlXG4vLyB1c2VyLWF0dGFjaGVkIGhhbmRsZXJzLlxuZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzIChvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW1JBTkdFX1RPS0VOXSkpIHtcbiAgICAvLyBJRSBpbnB1dFt0eXBlPXJhbmdlXSBvbmx5IHN1cHBvcnRzIGBjaGFuZ2VgIGV2ZW50XG4gICAgdmFyIGV2ZW50ID0gaXNJRSA/ICdjaGFuZ2UnIDogJ2lucHV0JztcbiAgICBvbltldmVudF0gPSBbXS5jb25jYXQob25bUkFOR0VfVE9LRU5dLCBvbltldmVudF0gfHwgW10pO1xuICAgIGRlbGV0ZSBvbltSQU5HRV9UT0tFTl07XG4gIH1cbiAgLy8gVGhpcyB3YXMgb3JpZ2luYWxseSBpbnRlbmRlZCB0byBmaXggIzQ1MjEgYnV0IG5vIGxvbmdlciBuZWNlc3NhcnlcbiAgLy8gYWZ0ZXIgMi41LiBLZWVwaW5nIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0IHdpdGggZ2VuZXJhdGVkIGNvZGUgZnJvbSA8ID
33378IuNFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXSkpIHtcbiAgICBvbi5jaGFuZ2UgPSBbXS5jb25jYXQob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dLCBvbi5jaGFuZ2UgfHwgW10pO1xuICAgIGRlbGV0ZSBvbltDSEVDS0JPWF9SQURJT19UT0tFTl07XG4gIH1cbn1cblxudmFyIHRhcmdldCQxO1xuXG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciQxIChldmVudCwgaGFuZGxlciwgY2FwdHVyZSkge1xuICB2YXIgX3RhcmdldCA9IHRhcmdldCQxOyAvLyBzYXZlIGN1cnJlbnQgdGFyZ2V0IGVsZW1lbnQgaW4gY2xvc3VyZVxuICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIgKCkge1xuICAgIHZhciByZXMgPSBoYW5kbGVyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHJlcyAhPT0gbnVsbCkge1xuICAgICAgcmVtb3ZlJDIoZXZlbnQsIG9uY2VIYW5kbGVyLCBjYXB0dXJlLCBfdGFyZ2V0KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gIzk0NDY6IEZpcmVmb3ggPD0gNTMgKGluIHBhcnRpY3VsYXIsIEVTUiA1MikgaGFzIGluY29ycmVjdCBFdmVudC50aW1lU3RhbXBcbi8vIGltcGxlbWVudGF0aW9uIGFuZCBkb2VzIG5vdCBmaXJlIG1pY3JvdGFza3MgaW4gYmV0d2VlbiBldmVudCBwcm9wYWdhdGlvbiwgc29cbi8vIHNhZmUgdG8gZXhjbHVkZS5cbnZhciB1c2VNaWNyb3Rhc2tGaXggPSBpc1VzaW5nTWljcm9UYXNrICYmICEoaXNGRiAmJiBOdW1iZXIoaXNGRlsxXSkgPD0gNTMpO1xuXG5mdW5jdGlvbiBhZGQkMSAoXG4gIG5hbWUsXG4gIGhhbmRsZXIsXG4gIGNhcHR1cmUsXG4gIHBhc3NpdmVcbikge1xuICAvLyBhc3luYyBlZGdlIGNhc2UgIzY1NjY6IGlubmVyIGNsaWNrIGV2ZW50IHRyaWdnZXJzIHBhdGNoLCBldmVudCBoYW5kbGVyXG4gIC8vIGF0dGFjaGVkIHRvIG91dGVyIGVsZW1lbnQgZHVyaW5nIHBhdGNoLCBhbmQgdHJpZ2dlcmVkIGFnYWluLiBUaGlzXG4gIC8vIGhhcHBlbnMgYmVjYXVzZSBicm93c2VycyBmaXJlIG1pY3JvdGFzayB0aWNrcyBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLlxuICAvLyB0aGUgc29sdXRpb24gaXMgc2ltcGxlOiB3ZSBzYXZlIHRoZSB0aW1lc3RhbXAgd2hlbiBhIGhhbmRsZXIgaXMgYXR0YWNoZWQsXG4gIC8vIGFuZCB0aGUgaGFuZGxlciB3b3VsZCBvbmx5IGZpcmUgaWYgdGhlIGV2ZW50IHBhc3NlZCB0byBpdCB3YXMgZmlyZWRcbiAgLy8gQUZURVIgaXQgd2FzIGF0dGFjaGVkLlxuICBpZiAodXNlTWljcm90YXNrRml4KSB7XG4gICAgdmFyIGF0dGFjaGVkVGltZXN0YW1wID0gY3VycmVudEZsdXNoVGltZXN0YW1wO1xuICAgIHZhciBvcmlnaW5hbCA9IGhhbmRsZXI7XG4gICAgaGFuZGxlciA9IG9yaWdpbmFsLl93cmFwcGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm8gYnViYmxpbmcsIHNob3VsZCBhbHdheXMgZmlyZS5cbiAgICAgICAgLy8gdGhpcyBpcyBqdXN0IGEgc2FmZXR5IG5ldCBpbiBjYXNlIGV2ZW50LnRpbWVTdGFtcCBpcyB1bnJlbGlhYmxlIGluXG4gICAgICAgIC8vIGNlcnRhaW4gd2VpcmQgZW52aXJvbm1lbnRzLi4uXG4gICAgICAgIGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQgfHxcbiAgICAgICAgLy8gZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgaGFuZGxlciBhdHRhY2htZW50XG4gICAgICAgIGUudGltZVN0YW1wID49IGF0dGFjaGVkVGltZXN0YW1wIHx8XG4gICAgICAgIC8vIGJhaWwgZm9yIGVudmlyb25tZW50cyB0aGF0IGhhdmUgYnVnZ3kgZXZlbnQudGltZVN0YW1wIGltcGxlbWVudGF0aW9uc1xuICAgICAgICAvLyAjOTQ2MiBpT1MgOSBidWc6IGV2ZW50LnRpbWVTdGFtcCBpcyAwIGFmdGVyIGhpc3RvcnkucHVzaFN0YXRlXG4gICAgICAgIC8vICM5NjgxIFF0V2ViRW5naW5lIGV2ZW50LnRpbWVTdGFtcCBpcyBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICBlLnRpbWVTdGFtcCA8PSAwIHx8XG4gICAgICAgIC8vICM5NDQ4IGJhaWwgaWYgZXZlbnQgaXMgZmlyZWQgaW4gYW5vdGhlciBkb2N1bWVudCBpbiBhIG11bHRpLXBhZ2VcbiAgICAgICAgLy8gZWxlY3Ryb24vbncuanMgYXBwLCBzaW5jZSBldmVudC50aW1lU3RhbXAgd2lsbCBiZSB1c2luZyBhIGRpZmZlcmVudFxuICAgICAgICAvLyBzdGFydGluZyByZWZlcmVuY2VcbiAgICAgICAgZS50YXJnZXQub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgdGFyZ2V0JDEuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIsXG4gICAgc3VwcG9ydHNQYXNzaXZlXG4gICAgICA/IHsgY2FwdHVyZTogY2FwdHVyZSwgcGFzc2l2ZTogcGFzc2l2ZSB9XG4gICAgICA6IGNhcHR1cmVcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlJDIgKFxuICBuYW1lLFxuICBoYW5kbGVyLFxuICBjYXB0dXJlLFxuICBfdGFyZ2V0XG4pIHtcbiAgKF90YXJnZXQgfHwgdGFyZ2V0JDEpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgbmFtZSxcbiAgICBoYW5kbGVyLl93cmFwcGVyIHx8IGhhbmRsZXIsXG4gICAgY2FwdHVyZVxuICApO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVET01MaXN0ZW5lcnMgKG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLm9uKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEub24pKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG9uID0gdm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdmFyIG9sZE9uID0gb2xkVm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdGFyZ2V0JDEgPSB2bm9kZS5lbG07XG4gIG5vcm1hbGl6ZUV2ZW50cyhvbik7XG4gIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCQxLCByZW1vdmUkMiwgY3JlYXRlT25jZUhhbmRsZXIkMSwgdm5vZGUuY29udGV4dCk7XG4gIHRhcmdldCQxID0gdW5kZWZpbmVkO1xufVxuXG52YXIgZXZlbnRzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURPTUxpc3RlbmVycyxcbiAgdXBkYXRlOiB1cGRhdGVET01MaXN0ZW5lcnNcbn07XG5cbi8qICAqL1xuXG52YXIgc3ZnQ29udGFpbmVyO1xuXG5mdW5jdGlvbiB1cGRhdGVET01Qcm9wcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChpc1VuZGVmKG9sZFZub2Rl
33378LmRhdGEuZG9tUHJvcHMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5kb21Qcm9wcykpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIga2V5LCBjdXI7XG4gIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gIHZhciBvbGRQcm9wcyA9IG9sZFZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gIHZhciBwcm9wcyA9IHZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICBpZiAoaXNEZWYocHJvcHMuX19vYl9fKSkge1xuICAgIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyA9IGV4dGVuZCh7fSwgcHJvcHMpO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICBpZiAoIShrZXkgaW4gcHJvcHMpKSB7XG4gICAgICBlbG1ba2V5XSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoa2V5IGluIHByb3BzKSB7XG4gICAgY3VyID0gcHJvcHNba2V5XTtcbiAgICAvLyBpZ25vcmUgY2hpbGRyZW4gaWYgdGhlIG5vZGUgaGFzIHRleHRDb250ZW50IG9yIGlubmVySFRNTCxcbiAgICAvLyBhcyB0aGVzZSB3aWxsIHRocm93IGF3YXkgZXhpc3RpbmcgRE9NIG5vZGVzIGFuZCBjYXVzZSByZW1vdmFsIGVycm9yc1xuICAgIC8vIG9uIHN1YnNlcXVlbnQgcGF0Y2hlcyAoIzMzNjApXG4gICAgaWYgKGtleSA9PT0gJ3RleHRDb250ZW50JyB8fCBrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBpZiAodm5vZGUuY2hpbGRyZW4pIHsgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoID0gMDsgfVxuICAgICAgaWYgKGN1ciA9PT0gb2xkUHJvcHNba2V5XSkgeyBjb250aW51ZSB9XG4gICAgICAvLyAjNjYwMSB3b3JrIGFyb3VuZCBDaHJvbWUgdmVyc2lvbiA8PSA1NSBidWcgd2hlcmUgc2luZ2xlIHRleHROb2RlXG4gICAgICAvLyByZXBsYWNlZCBieSBpbm5lckhUTUwvdGV4dENvbnRlbnQgcmV0YWlucyBpdHMgcGFyZW50Tm9kZSBwcm9wZXJ0eVxuICAgICAgaWYgKGVsbS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICd2YWx1ZScgJiYgZWxtLnRhZ05hbWUgIT09ICdQUk9HUkVTUycpIHtcbiAgICAgIC8vIHN0b3JlIHZhbHVlIGFzIF92YWx1ZSBhcyB3ZWxsIHNpbmNlXG4gICAgICAvLyBub24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIHN0cmluZ2lmaWVkXG4gICAgICBlbG0uX3ZhbHVlID0gY3VyO1xuICAgICAgLy8gYXZvaWQgcmVzZXR0aW5nIGN1cnNvciBwb3NpdGlvbiB3aGVuIHZhbHVlIGlzIHRoZSBzYW1lXG4gICAgICB2Y
33378XIgc3RyQ3VyID0gaXNVbmRlZihjdXIpID8gJycgOiBTdHJpbmcoY3VyKTtcbiAgICAgIGlmIChzaG91bGRVcGRhdGVWYWx1ZShlbG0sIHN0ckN1cikpIHtcbiAgICAgICAgZWxtLnZhbHVlID0gc3RyQ3VyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJyAmJiBpc1NWRyhlbG0udGFnTmFtZSkgJiYgaXNVbmRlZihlbG0uaW5uZXJIVE1MKSkge1xuICAgICAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGlubmVySFRNTCBmb3IgU1ZHIGVsZW1lbnRzXG4gICAgICBzdmdDb250YWluZXIgPSBzdmdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBzdmdDb250YWluZXIuaW5uZXJIVE1MID0gXCI8c3ZnPlwiICsgY3VyICsgXCI8L3N2Zz5cIjtcbiAgICAgIHZhciBzdmcgPSBzdmdDb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgIHdoaWxlIChlbG0uZmlyc3RDaGlsZCkge1xuICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHN2Zy5maXJzdENoaWxkKSB7XG4gICAgICAgIGVsbS5hcHBlbmRDaGlsZChzdmcuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIC8vIHNraXAgdGhlIHVwZGF0ZSBpZiBvbGQgYW5kIG5ldyBWRE9NIHN0YXRlIGlzIHRoZSBzYW1lLlxuICAgICAgLy8gYHZhbHVlYCBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgYmVjYXVzZSB0aGUgRE9NIHZhbHVlIG1heSBiZSB0ZW1wb3JhcmlseVxuICAgICAgLy8gb3V0IG9mIHN5bmMgd2l0aCBWRE9NIHN0YXRlIGR1ZSB0byBmb2N1cywgY29tcG9zaXRpb24gYW5kIG1vZGlmaWVycy5cbiAgICAgIC8vIFRoaXMgICM0NTIxIGJ5IHNraXBwaW5nIHRoZSB1bm5lY2VzYXJyeSBgY2hlY2tlZGAgdXBkYXRlLlxuICAgICAgY3VyICE9PSBvbGRQcm9wc1trZXldXG4gICAgKSB7XG4gICAgICAvLyBzb21lIHByb3BlcnR5IHVwZGF0ZXMgY2FuIHRocm93XG4gICAgICAvLyBlLmcuIGB2YWx1ZWAgb24gPHByb2dyZXNzPiB3LyBub24tZmluaXRlIHZhbHVlXG4gICAgICB0cnkge1xuICAgICAgICBlbG1ba2V5XSA9IGN1cjtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICB9XG59XG5cbi8vIGNoZWNrIHBsYXRmb3Jtcy93ZWIvdXRpbC9hdHRycy5qcyBhY2NlcHRWYWx1ZVxuXG5cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZVZhbHVlIChlbG0sIGNoZWNrVmFsKSB7XG4gIHJldHVybiAoIWVsbS5jb21wb3NpbmcgJiYgKFxuICAgIGVsbS50YWdOYW1lID09PSAnT1BUSU9OJyB8fFxuICAgIGlzTm90SW5Gb2N1c0FuZERpcnR5KGVsbSwgY2hlY2tWYWwpIHx8XG4gICAgaXNEaXJ0eVdpdGhNb2RpZmllcnMoZWxtLCBjaGVja1ZhbClcbiAgKSlcbn1cblxuZnVuY3Rpb24gaXNOb3RJbkZvY3VzQW5kRGlydHkgKGVsbSwgY2hlY2tWYWwpIHtcbiAgLy8gcmV0dXJuIHRydWUgd2hlbiB0ZXh0Ym94ICgubnVtYmVyIGFuZCAudHJpbSkgbG9zZXMgZm9jdXMgYW5kIGl0cyB2YWx1ZSBpc1xuICAvLyBub3QgZXF1YWwgdG8gdGhlIHVwZGF0ZWQgdmFsdWVcbiAgdmFyIG5vdEluRm9jdXMgPSB0cnVlO1xuICAvLyAjNjE1N1xuICAvLyB3b3JrIGFyb3VuZCBJRSBidWcgd2hlbiBhY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbiBhbiBpZnJhbWVcbiAgdHJ5IHsgbm90SW5Gb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVsbTsgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIG5vdEluRm9jdXMgJiYgZWxtLnZhbHVlICE9PSBjaGVja1ZhbFxufVxuXG5mdW5jdGlvbiBpc0RpcnR5V2l0aE1vZGlmaWVycyAoZWxtLCBuZXdWYWwpIHtcbiAgdmFyIHZhbHVlID0gZWxtLnZhbHVlO1xuICB2YXIgbW9kaWZpZXJzID0gZWxtLl92TW9kaWZpZXJzOyAvLyBpbmplY3RlZCBieSB2LW1vZGVsIHJ1bnRpbWVcbiAgaWYgKGlzRGVmKG1vZGlmaWVycykpIHtcbiAgICBpZiAobW9kaWZpZXJzLm51bWJlcikge1xuICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKSAhPT0gdG9OdW1iZXIobmV3VmFsKVxuICAgIH1cbiAgICBpZiAobW9kaWZpZXJzLnRyaW0pIHtcbiAgICAgIHJldHVybiB2YWx1ZS50cmltKCkgIT09IG5ld1ZhbC50cmltKClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlICE9PSBuZXdWYWxcbn1cblxudmFyIGRvbVByb3BzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURPTVByb3BzLFxuICB1cGRhdGU6IHVwZGF0ZURPTVByb3BzXG59O1xuXG4vKiAgKi9cblxudmFyIHBhcnNlU3R5bGVUZXh0ID0gY2FjaGVkKGZ1bmN0aW9uIChjc3NUZXh0KSB7XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGxpc3REZWxpbWl0ZXIgPSAvOyg/IVteKF0qXFwpKS9nO1xuICB2YXIgcHJvcGVydHlEZWxpbWl0ZXIgPSAvOiguKykvO1xuICBjc3NUZXh0LnNwbGl0KGxpc3REZWxpbWl0ZXIpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgdmFyIHRtcCA9IGl0ZW0uc3BsaXQocHJvcGVydHlEZWxpbWl0ZXIpO1xuICAgICAgdG1wLmxlbmd0aCA+IDEgJiYgKHJlc1t0bXBbMF0udHJpbSgpXSA9IHRtcFsxXS50cmltKCkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vLyBtZXJnZSBzdGF0aWMgYW5kIGR5bmFtaWMgc3R5bGUgZGF0YSBvbiB0aGUgc2FtZSB2bm9kZVxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVEYXRhIChkYXRhKSB7XG4gIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyhkYXRhLnN0eWxlKTtcbiAgLy8gc3RhdGljIHN0eWxlIGlzIHByZS1wcm9jZXNzZWQgaW50byBhbiBvYmplY3QgZHVyaW5nIGNvbXBpbGF0aW9uXG4gIC8vIGFuZCBpcyBhbHdheXMgYSBmcmVzaCBvYmplY3QsIHNvIGl0J3Mgc2FmZSB0byBtZXJnZSBpbnRvIGl0XG4gIHJldHVybiBkYXRhLnN0YXRpY1N0eWxlXG4gICAgPyBleHRlbmQoZGF0YS5zdGF0aWNTdHlsZSwgc3R5bGUpXG4gICAgOiBzdHlsZVxufVxuXG4vLyBub3JtYWxpemUgcG9zc2libGUgYXJyYXkgLyBzdHJpbmcgdmFsdWVzIGludG8gT2JqZWN0XG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZUJpbmRpbmcgKGJpbmRpbmdTdHlsZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShiaW5kaW5nU3R5bGUpKSB7XG4gICAgcmV0dXJuIHRvT2JqZWN0KGJpbmRpbmdTdHlsZSlcbiAgfVxuICBpZiAodHlwZW9mIGJpbmRpbmdTdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGFyc2VTdHlsZVRleHQoYmluZGluZ1N0eWxlKVxuICB9XG4gI
33378HJldHVybiBiaW5kaW5nU3R5bGVcbn1cblxuLyoqXG4gKiBwYXJlbnQgY29tcG9uZW50IHN0eWxlIHNob3VsZCBiZSBhZnRlciBjaGlsZCdzXG4gKiBzbyB0aGF0IHBhcmVudCBjb21wb25lbnQncyBzdHlsZSBjb3VsZCBvdmVycmlkZSBpdFxuICovXG5mdW5jdGlvbiBnZXRTdHlsZSAodm5vZGUsIGNoZWNrQ2hpbGQpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgc3R5bGVEYXRhO1xuXG4gIGlmIChjaGVja0NoaWxkKSB7XG4gICAgdmFyIGNoaWxkTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkTm9kZSAmJiBjaGlsZE5vZGUuZGF0YSAmJlxuICAgICAgICAoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKGNoaWxkTm9kZS5kYXRhKSlcbiAgICAgICkge1xuICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICgoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKHZub2RlLmRhdGEpKSkge1xuICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gIH1cblxuICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB3aGlsZSAoKHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudCkpIHtcbiAgICBpZiAocGFyZW50Tm9kZS5kYXRhICYmIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEocGFyZW50Tm9kZS5kYXRhKSkpIHtcbiAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbnZhciBjc3NWYXJSRSA9IC9eLS0vO1xudmFyIGltcG9ydGFudFJFID0gL1xccyohaW1wb3J0YW50JC87XG52YXIgc2V0UHJvcCA9IGZ1bmN0aW9uIChlbCwgbmFtZSwgdmFsKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoY3NzVmFyUkUudGVzdChuYW1lKSkge1xuICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbCk7XG4gIH0gZWxzZSBpZiAoaW1wb3J0YW50UkUudGVzdCh2YWwpKSB7XG4gICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoaHlwaGVuYXRlKG5hbWUpLCB2YWwucmVwbGFjZShpbXBvcnRhbnRSRSwgJycpLCAnaW1wb3J0YW50Jyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIC8vIFN1cHBvcnQgdmFsdWVzIGFycmF5IGNyZWF0ZWQgYnkgYXV0b3ByZWZpeGVyLCBlLmcuXG4gICAgICAvLyB7ZGlzcGxheTogW1wiLXdlYmtpdC1ib3hcIiwgXCItbXMtZmxleGJveFwiLCBcImZsZXhcIl19XG4gICAgICAvLyBTZXQgdGhlbSBvbmUgYnkgb25lLCBhbmQgdGhlIGJyb3dzZXIgd2lsbCBvbmx5IHNldCB0aG9zZSBpdCBjYW4gcmVjb2duaXplXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGVsLnN0eWxlW25vcm1hbGl6ZWROYW1lXSA9IHZhbFtpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHZlbmRvck5hbWVzID0gWydXZWJraXQnLCAnTW96JywgJ21zJ107XG5cbnZhciBlbXB0eVN0eWxlO1xudmFyIG5vcm1hbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAocHJvcCkge1xuICBlbXB0eVN0eWxlID0gZW1wdHlTdHlsZSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTtcbiAgcHJvcCA9IGNhbWVsaXplKHByb3ApO1xuICBpZiAocHJvcCAhPT0gJ2ZpbHRlcicgJiYgKHByb3AgaW4gZW1wdHlTdHlsZSkpIHtcbiAgICByZXR1cm4gcHJvcFxuICB9XG4gIHZhciBjYXBOYW1lID0gcHJvcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3Auc2xpY2UoMSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmVuZG9yTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbmFtZSA9IHZlbmRvck5hbWVzW2ldICsgY2FwTmFtZTtcbiAgICBpZiAobmFtZSBpbiBlbXB0eVN0eWxlKSB7XG4gICAgICByZXR1cm4gbmFtZVxuICAgIH1cbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgb2xkRGF0YSA9IG9sZFZub2RlLmRhdGE7XG5cbiAgaWYgKGlzVW5kZWYoZGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihkYXRhLnN0eWxlKSAmJlxuICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihvbGREYXRhLnN0eWxlKVxuICApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjdXIsIG5hbWU7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZFN0YXRpY1N0eWxlID0gb2xkRGF0YS5zdGF0aWNTdHlsZTtcbiAgdmFyIG9sZFN0eWxlQmluZGluZyA9IG9sZERhdGEubm9ybWFsaXplZFN0eWxlIHx8IG9sZERhdGEuc3R5bGUgfHwge307XG5cbiAgLy8gaWYgc3RhdGljIHN0eWxlIGV4aXN0cywgc3R5bGViaW5kaW5nIGFscmVhZHkgbWVyZ2VkIGludG8gaXQgd2hlbiBkb2luZyBub3JtYWxpemVTdHlsZURhdGFcbiAgdmFyIG9sZFN0eWxlID0gb2xkU3RhdGljU3R5bGUgfHwgb2xkU3R5bGVCaW5kaW5nO1xuXG4gIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyh2bm9kZS5kYXRhLnN0eWxlKSB8fCB7fTtcblxuICAvLyBzdG9yZSBub3JtYWxpemVkIHN0eWxlIHVuZGVyIGEgZGlmZmVyZW50IGtleSBmb3IgbmV4dCBkaWZmXG4gIC8vIG1ha2Ugc3VyZSB0byBjbG9uZSBpdCBpZiBpdCdzIHJlYWN0aXZlLCBzaW5jZSB0aGUgdXNlciBsaWtlbHkgd2FudHNcbiAgLy8gdG8gbXV0YXRlIGl0LlxuICB2bm9kZS5kYXRhLm5vcm1hbGl6ZWRTdHlsZSA9IGlzRGVmKHN0eWxlLl9fb2JfXylcbiAgICA/IGV4dGVuZCh7fSwgc3R5bGUpXG4gICAgOiBzdHlsZTtcblxuICB2YXIgbmV3U3R5bGUgPSBnZXRTdHlsZSh2bm9kZSwgdHJ1ZSk7XG5cbiAgZm9yIChuYW1lIGluIG9sZFN0eWxlKSB7XG4gICAgaWYgKGlzVW5kZWYobmV3U3R5bGVbbmFtZV0pKSB7XG4gICAgICBzZXRQcm9wKGVsLCBuYW1lLCAnJyk7XG4gICAgfVxuICB9XG4gIGZvciAobmFtZSBpbiBuZXdTdHlsZSkge1xuICAgIGN1ciA9IG5ld1N0eWxlW25hbWVdO1xuICAgIGlmIChjdXIgIT09IG9sZFN0eWxlW25hbWVdKSB7XG4gICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBubyBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xuICAgICAgc2V0UHJvcChlbCwgbmFtZSwgY3VyID09IG51bGwgPyAnJyA6IGN1cik7XG4gICAgfVxuICB9XG59XG5cbnZhciBzdHlsZSA9IHtcbiAgY3JlYXRlOiB1cGRhdGVTdHlsZSxcbiAgdXBkYXRlOiB1cGRhdGVTdHlsZVxufTtcblxuLyogICovXG5cbnZhciB3aGl0ZXNwYWNlUkUgPSAvXFxzKy87XG5cbi8qKlxuICogQWRkIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gYWRkQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybi
33378BlbC5jbGFzc0xpc3QuYWRkKGMpOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VyID0gXCIgXCIgKyAoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiO1xuICAgIGlmIChjdXIuaW5kZXhPZignICcgKyBjbHMgKyAnICcpIDwgMCkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIChjdXIgKyBjbHMpLnRyaW0oKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QucmVtb3ZlKGMpOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgIH1cbiAgICBpZiAoIWVsLmNsYXNzTGlzdC5sZW5ndGgpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1ciA9IFwiIFwiICsgKGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyBcIiBcIjtcbiAgICB2YXIgdGFyID0gJyAnICsgY2xzICsgJyAnO1xuICAgIHdoaWxlIChjdXIuaW5kZXhPZih0YXIpID49IDApIHtcbiAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKHRhciwgJyAnKTtcbiAgICB9XG4gICAgY3VyID0gY3VyLnRyaW0oKTtcbiAgICBpZiAoY3VyKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY3VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVRyYW5zaXRpb24gKGRlZiQkMSkge1xuICBpZiAoIWRlZiQkMSkge1xuICAgIHJldHVyblxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0eXBlb2YgZGVmJCQxID09PSAnb2JqZWN0Jykge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBpZiAoZGVmJCQxLmNzcyAhPT0gZmFsc2UpIHtcbiAgICAgIGV4dGVuZChyZXMsIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZiQkMS5uYW1lIHx8ICd2JykpO1xuICAgIH1cbiAgICBleHRlbmQocmVzLCBkZWYkJDEpO1xuICAgIHJldHVybiByZXNcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmJCQxID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBhdXRvQ3NzVHJhbnNpdGlvbihkZWYkJDEpXG4gIH1cbn1cblxudmFyIGF1dG9Dc3NUcmFuc2l0aW9uID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiB7XG4gICAgZW50ZXJDbGFzczogKG5hbWUgKyBcIi1lbnRlclwiKSxcbiAgICBlbnRlclRvQ2xhc3M6IChuYW1lICsgXCItZW50ZXItdG9cIiksXG4gICAgZW50ZXJBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1lbnRlci1hY3RpdmVcIiksXG4gICAgbGVhdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2ZVwiKSxcbiAgICBsZWF2ZVRvQ2xhc3M6IChuYW1lICsgXCItbGVhdmUtdG9cIiksXG4gICAgbGVhdmVBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2ZS1hY3RpdmVcIilcbiAgfVxufSk7XG5cbnZhciBoYXNUcmFuc2l0aW9uID0gaW5Ccm93c2VyICYmICFpc0lFOTtcbnZhciBUUkFOU0lUSU9OID0gJ3RyYW5zaXRpb24nO1xudmFyIEFOSU1BVElPTiA9ICdhbmltYXRpb24nO1xuXG4vLyBUcmFuc2l0aW9uIHByb3BlcnR5L2V2ZW50IHNuaWZmaW5nXG52YXIgdHJhbnNpdGlvblByb3AgPSAndHJhbnNpdGlvbic7XG52YXIgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3RyYW5zaXRpb25lbmQnO1xudmFyIGFuaW1hdGlvblByb3AgPSAnYW5pbWF0aW9uJztcbnZhciBhbmltYXRpb25FbmRFdmVudCA9ICdhbmltYXRpb25lbmQnO1xuaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh3aW5kb3cub250cmFuc2l0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICB3aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgdHJhbnNpdGlvblByb3AgPSAnV2Via2l0VHJhbnNpdGlvbic7XG4gICAgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICB9XG4gIGlmICh3aW5kb3cub25hbmltYXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgI
33378HdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIGFuaW1hdGlvblByb3AgPSAnV2Via2l0QW5pbWF0aW9uJztcbiAgICBhbmltYXRpb25FbmRFdmVudCA9ICd3ZWJraXRBbmltYXRpb25FbmQnO1xuICB9XG59XG5cbi8vIGJpbmRpbmcgdG8gd2luZG93IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGhvdCByZWxvYWQgd29yayBpbiBJRSBpbiBzdHJpY3QgbW9kZVxudmFyIHJhZiA9IGluQnJvd3NlclxuICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpXG4gICAgOiBzZXRUaW1lb3V0XG4gIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gKGZuKSB7IHJldHVybiBmbigpOyB9O1xuXG5mdW5jdGlvbiBuZXh0RnJhbWUgKGZuKSB7XG4gIHJhZihmdW5jdGlvbiAoKSB7XG4gICAgcmFmKGZuKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZFRyYW5zaXRpb25DbGFzcyAoZWwsIGNscykge1xuICB2YXIgdHJhbnNpdGlvbkNsYXNzZXMgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXMgfHwgKGVsLl90cmFuc2l0aW9uQ2xhc3NlcyA9IFtdKTtcbiAgaWYgKHRyYW5zaXRpb25DbGFzc2VzLmluZGV4T2YoY2xzKSA8IDApIHtcbiAgICB0cmFuc2l0aW9uQ2xhc3Nlcy5wdXNoKGNscyk7XG4gICAgYWRkQ2xhc3MoZWwsIGNscyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbkNsYXNzIChlbCwgY2xzKSB7XG4gIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICByZW1vdmUoZWwuX3RyYW5zaXRpb25DbGFzc2VzLCBjbHMpO1xuICB9XG4gIHJlbW92ZUNsYXNzKGVsLCBjbHMpO1xufVxuXG5mdW5jdGlvbiB3aGVuVHJhbnNpdGlvbkVuZHMgKFxuICBlbCxcbiAgZXhwZWN0ZWRUeXBlLFxuICBjYlxuKSB7XG4gIHZhciByZWYgPSBnZXRUcmFuc2l0aW9uSW5mbyhlbCwgZXhwZWN0ZWRUeXBlKTtcbiAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgdmFyIHRpbWVvdXQgPSByZWYudGltZW91dDtcbiAgdmFyIHByb3BDb3VudCA9IHJlZi5wcm9wQ291bnQ7XG4gIGlmICghdHlwZSkgeyByZXR1cm4gY2IoKSB9XG4gIHZhciBldmVudCA9IHR5cGUgPT09IFRSQU5TSVRJT04gPyB0cmFuc2l0aW9uRW5kRXZlbnQgOiBhbmltYXRpb25FbmRFdmVudDtcbiAgdmFyIGVuZGVkID0gMDtcbiAgdmFyIGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG4gICAgY2IoKTtcbiAgfTtcbiAgdmFyIG9uRW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZS50YXJnZXQgPT09IGVsKSB7XG4gICAgICBpZiAoKytlbmRlZCA+PSBwcm9wQ291bnQpIHtcbiAgICAgICAgZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZW5kZWQgPCBwcm9wQ291bnQpIHtcbiAgICAgIGVuZCgpO1xuICAgIH1cbiAgfSwgdGltZW91dCArIDEpO1xuICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG59XG5cbnZhciB0cmFuc2Zvcm1SRSA9IC9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87XG5cbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25JbmZvIChlbCwgZXhwZWN0ZWRUeXBlKSB7XG4gIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gIC8vIEpTRE9NIG1heSByZXR1cm4gdW5kZWZpbmVkIGZvciB0cmFuc2l0aW9uIHByb3BlcnRpZXNcbiAgdmFyIHRyYW5zaXRpb25EZWxheXMgP
33378SAoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0RlbGF5J10gfHwgJycpLnNwbGl0KCcsICcpO1xuICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRHVyYXRpb24nXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciB0cmFuc2l0aW9uVGltZW91dCA9IGdldFRpbWVvdXQodHJhbnNpdGlvbkRlbGF5cywgdHJhbnNpdGlvbkR1cmF0aW9ucyk7XG4gIHZhciBhbmltYXRpb25EZWxheXMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciBhbmltYXRpb25EdXJhdGlvbnMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRHVyYXRpb24nXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciBhbmltYXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dChhbmltYXRpb25EZWxheXMsIGFuaW1hdGlvbkR1cmF0aW9ucyk7XG5cbiAgdmFyIHR5cGU7XG4gIHZhciB0aW1lb3V0ID0gMDtcbiAgdmFyIHByb3BDb3VudCA9IDA7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZXhwZWN0ZWRUeXBlID09PSBUUkFOU0lUSU9OKSB7XG4gICAgaWYgKHRyYW5zaXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IFRSQU5TSVRJT047XG4gICAgICB0aW1lb3V0ID0gdHJhbnNpdGlvblRpbWVvdXQ7XG4gICAgICBwcm9wQ291bnQgPSB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSBBTklNQVRJT04pIHtcbiAgICBpZiAoYW5pbWF0aW9uVGltZW91dCA+IDApIHtcbiAgICAgIHR5cGUgPSBBTklNQVRJT047XG4gICAgICB0aW1lb3V0ID0gYW5pbWF0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRpbWVvdXQgPSBNYXRoLm1heCh0cmFuc2l0aW9uVGltZW91dCwgYW5pbWF0aW9uVGltZW91dCk7XG4gICAgdHlwZSA9IHRpbWVvdXQgPiAwXG4gICAgICA/IHRyYW5zaXRpb25UaW1lb3V0ID4gYW5pbWF0aW9uVGltZW91dFxuICAgICAgICA/IFRSQU5TSVRJT05cbiAgICAgICAgOiBBTklNQVRJT05cbiAgICAgIDogbnVsbDtcbiAgICBwcm9wQ291bnQgPSB0eXBlXG4gICAgICA/IHR5cGUgPT09IFRSQU5TSVRJT05cbiAgICAgICAgPyB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgICA6IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgIDogMDtcbiAgfVxuICB2YXIgaGFzVHJhbnNmb3JtID1cbiAgICB0eXBlID09PSBUUkFOU0lUSU9OICYmXG4gICAgdHJhbnNmb3JtUkUudGVzdChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnUHJvcGVydHknXSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogdHlwZSxcbiAgICB0aW1lb3V0OiB0aW1lb3V0LFxuICAgIHByb3BDb3VudDogcHJvcENvdW50LFxuICAgIGhhc1RyYW5zZm9ybTogaGFzVHJhbnNmb3JtXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGltZW91dCAoZGVsYXlzLCBkdXJhdGlvbnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgd2hpbGUgKGRlbGF5cy5sZW5ndGggPCBkdXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgZGVsYXlzID0gZGVsYXlzLmNvbmNhdChkZWxheXMpO1xuICB9XG5cbiAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGR1cmF0aW9ucy5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICByZXR1cm4gdG9NcyhkKSArIHRvTXMoZGVsYXlzW2ldKVxuICB9KSlcbn1cblxuLy8gT2xkIHZlcnNpb25zIG9mIENocm9taXVtIChiZWxvdyA2MS4wLjMxNjMuMTAwKSBmb3JtYXRzIGZsb2F0aW5nIHBvaW50ZXIgbnVtYmVyc1xuLy8gaW4gYSBsb2NhbGUtZGVwZW5kZW50IHdheSwgdXNpbmcgYSBjb21tYSBpbnN0ZWFkIG9mIGEgZG90LlxuLy8gSWYgY29tbWEgaXMgbm90IHJlcGxhY2VkIHdpdGggYSBkb3QsIHRoZSBpbnB1dCB3aWxsIGJlIHJvdW5kZWQgZG93biAoaS5lLiBhY3Rpbmdcbi8vIGFzIGEgZmxvb3IgZnVuY3Rpb24pIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvcnNcbmZ1bmN0aW9uIHRvTXMgKHMpIHtcbiAgcmV0dXJuIE51bWJlcihzLnNsaWNlKDAsIC0xKS5yZXBsYWNlKCcsJywgJy4nKSkgKiAxMDAwXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBlbnRlciAodm5vZGUsIHRvZ2dsZURpc3BsYXkpIHtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuXG4gIC8vIGNhbGwgbGVhdmUgY2FsbGJhY2sgbm93XG4gIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICBlbC5fbGVhdmVDYi5jYW5jZWxsZWQgPSB0cnVlO1xuICAgIGVsLl9sZWF2ZUNiKCk7XG4gIH1cblxuICB2YXIgZGF0YSA9IHJlc29sdmVUcmFuc2l0aW9uKHZub2RlLmRhdGEudHJhbnNpdGlvbik7XG4gIGlmIChpc1VuZGVmKGRhdGEpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNzcyA9IGRhdGEuY3NzO1xuICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgdmFyIGVudGVyQ2xhc3MgPSBkYXRhLmVudGVyQ2xhc3M7XG4gIHZhciBlbnRlclRvQ2xhc3MgPSBkYXRhLmVudGVyVG9DbGFzcztcbiAgdmFyIGVudGVyQWN0aXZlQ2xhc3MgPSBkYXRhLmVudGVyQWN0aXZlQ2xhc3M7XG4gIHZhciBhcHBlYXJDbGFzcyA9IGRhdGEuYXBwZWFyQ2xhc3M7XG4gIHZhciBhcHBlYXJUb0NsYXNzID0gZGF0YS5hcHBlYXJUb0NsYXNzO1xuICB2YXIgYXBwZWFyQWN0aXZlQ2xhc3MgPSBkYXRhLmFwcGVhckFjdGl2ZUNsYXNzO1xuICB2YXIgYmVmb3JlRW50ZXIgPSBkYXRhLmJlZm9yZUVudGVyO1xuICB2YXIgZW50ZXIgPSBkYXRhLmVudGVyO1xuICB2YXIgYWZ0ZXJFbnRlciA9IGRhdGEuYWZ0ZXJFbnRlcjtcbiAgdmFyIGVudGVyQ2FuY2VsbGVkID0gZGF0YS5lbnRlckNhbmNlbGxlZDtcbiAgdmFyIGJlZm9yZUFwcGVhciA9IGRhdGEuYmVmb3JlQXBwZWFyO1xuICB2YXIgYXBwZWFyID0gZGF0YS5hcHBlYXI7XG4gIHZhciBhZnRlckFwcGVhciA9IGRhdGEuYWZ0ZXJBcHBlYXI7XG4gIHZhciBhcHBlYXJDYW5jZWxsZWQgPSBkYXRhLmFwcGVhckNhbmNlbGxlZDtcbiAgdmFyIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcblxuICAvLyBhY3RpdmVJbnN0YW5jZSB3aWxsIGFsd2F5cyBiZSB0aGUgPHRyYW5zaXRpb24+IGNvbXBvbmVudCBtYW5hZ2luZyB0aGlzXG4gIC8vIHRyYW5zaXRpb24uIE9uZSBlZGdlIGNhc2UgdG8gY2hlY2sgaXMgd2hlbiB0aGUgPHRyYW5zaXRpb24+IGlzIHBsYWNlZFxuICAvLyBhcyB0aGUgcm9vdCBub2RlIG9mIGEgY2hpbGQgY29tcG9uZW50LiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBjaGVja1xuICAvLyA8dHJhbnNpdGlvbj4ncyBwYXJlbnQgZm9yIGFwcGVhciBjaGVjay5cbiAgdmFyIGNvbnRleHQgPSBhY3RpdmVJbnN0YW5jZTtcbiAgdmFyIHRyYW5zaXRpb25Ob2RlID0gYWN0aXZlSW5zdGFuY2UuJHZub2RlO1xuICB3aGlsZSAodHJhbnNpdGlvbk5vZGUgJiYgdHJhbnNpdGlvbk5vZGUucGFyZW50KSB7XG4gICAgY29udGV4dCA9IHRyYW5zaXRpb25Ob2RlLmNvbnRleHQ7XG4gICAgdHJhbnNpdGlvbk5vZGUgPSB0cmFuc2l0aW9uTm9kZS5wYXJlbnQ7XG4gIH1cblxuICB2Y
33378XIgaXNBcHBlYXIgPSAhY29udGV4dC5faXNNb3VudGVkIHx8ICF2bm9kZS5pc1Jvb3RJbnNlcnQ7XG5cbiAgaWYgKGlzQXBwZWFyICYmICFhcHBlYXIgJiYgYXBwZWFyICE9PSAnJykge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIHN0YXJ0Q2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJDbGFzc1xuICAgID8gYXBwZWFyQ2xhc3NcbiAgICA6IGVudGVyQ2xhc3M7XG4gIHZhciBhY3RpdmVDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckFjdGl2ZUNsYXNzXG4gICAgPyBhcHBlYXJBY3RpdmVDbGFzc1xuICAgIDogZW50ZXJBY3RpdmVDbGFzcztcbiAgdmFyIHRvQ2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJUb0NsYXNzXG4gICAgPyBhcHBlYXJUb0NsYXNzXG4gICAgOiBlbnRlclRvQ2xhc3M7XG5cbiAgdmFyIGJlZm9yZUVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYmVmb3JlQXBwZWFyIHx8IGJlZm9yZUVudGVyKVxuICAgIDogYmVmb3JlRW50ZXI7XG4gIHZhciBlbnRlckhvb2sgPSBpc0FwcGVhclxuICAgID8gKHR5cGVvZiBhcHBlYXIgPT09ICdmdW5jdGlvbicgPyBhcHBlYXIgOiBlbnRlcilcbiAgICA6IGVudGVyO1xuICB2YXIgYWZ0ZXJFbnRlckhvb2sgPSBpc0FwcGVhclxuICAgID8gKGFmdGVyQXBwZWFyIHx8IGFmdGVyRW50ZXIpXG4gICAgOiBhZnRlckVudGVyO1xuICB2YXIgZW50ZXJDYW5jZWxsZWRIb29rID0gaXNBcHBlYXJcbiAgICA/IChhcHBlYXJDYW5jZWxsZWQgfHwgZW50ZXJDYW5jZWxsZWQpXG4gICAgOiBlbnRlckNhbmNlbGxlZDtcblxuICB2YXIgZXhwbGljaXRFbnRlckR1cmF0aW9uID0gdG9OdW1iZXIoXG4gICAgaXNPYmplY3QoZHVyYXRpb24pXG4gICAgICA/IGR1cmF0aW9uLmVudGVyXG4gICAgICA6IGR1cmF0aW9uXG4gICk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZXhwbGljaXRFbnRlckR1cmF0aW9uICE9IG51bGwpIHtcbiAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbiwgJ2VudGVyJywgdm5vZGUpO1xuICB9XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGVudGVySG9vayk7XG5cbiAgdmFyIGNiID0gZWwuX2VudGVyQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgYWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgICAgfVxuICAgICAgZW50ZXJDYW5jZWxsZWRIb29rICYmIGVudGVyQ2FuY2VsbGVkSG9vayhlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyRW50ZXJIb29rICYmIGFmdGVyRW50ZXJIb29rKGVsKTtcbiAgICB9XG4gICAgZWwuX2VudGVyQ2IgPSBudWxsO1xuICB9KTtcblxuICBpZiAoIXZub2RlLmRhdGEuc2hvdykge1xuICAgIC8vIHJlbW92ZSBwZW5kaW5nIGxlYXZlIGVsZW1lbnQgb24gZW50ZXIgYnkgaW5qZWN0aW5nIGFuIGluc2VydCBob29rXG4gICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2Y
33378XIgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcbiAgICAgIHZhciBwZW5kaW5nTm9kZSA9IHBhcmVudCAmJiBwYXJlbnQuX3BlbmRpbmcgJiYgcGFyZW50Ll9wZW5kaW5nW3Zub2RlLmtleV07XG4gICAgICBpZiAocGVuZGluZ05vZGUgJiZcbiAgICAgICAgcGVuZGluZ05vZGUudGFnID09PSB2bm9kZS50YWcgJiZcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiXG4gICAgICApIHtcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiKCk7XG4gICAgICB9XG4gICAgICBlbnRlckhvb2sgJiYgZW50ZXJIb29rKGVsLCBjYik7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzdGFydCBlbnRlciB0cmFuc2l0aW9uXG4gIGJlZm9yZUVudGVySG9vayAmJiBiZWZvcmVFbnRlckhvb2soZWwpO1xuICBpZiAoZXhwZWN0c0NTUykge1xuICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbikpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0RW50ZXJEdXJhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHZub2RlLmRhdGEuc2hvdykge1xuICAgIHRvZ2dsZURpc3BsYXkgJiYgdG9nZ2xlRGlzcGxheSgpO1xuICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgfVxuXG4gIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgIGNiKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVhdmUgKHZub2Rl
33378LCBybSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBlbnRlciBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSkge1xuICAgIGVsLl9lbnRlckNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2VudGVyQ2IoKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYgKGlzVW5kZWYoZGF0YSkgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gcm0oKVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjc3MgPSBkYXRhLmNzcztcbiAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gIHZhciBsZWF2ZUNsYXNzID0gZGF0YS5sZWF2ZUNsYXNzO1xuICB2YXIgbGVhdmVUb0NsYXNzID0gZGF0YS5sZWF2ZVRvQ2xhc3M7XG4gIHZhciBsZWF2ZUFjdGl2ZUNsYXNzID0gZGF0YS5sZWF2ZUFjdGl2ZUNsYXNzO1xuICB2YXIgYmVmb3JlTGVhdmUgPSBkYXRhLmJlZm9yZUxlYXZlO1xuICB2YXIgbGVhdmUgPSBkYXRhLmxlYXZlO1xuICB2YXIgYWZ0ZXJMZWF2ZSA9IGRhdGEuYWZ0ZXJMZWF2ZTtcbiAgdmFyIGxlYXZlQ2FuY2VsbGVkID0gZGF0YS5sZWF2ZUNhbmNlbGxlZDtcbiAgdmFyIGRlbGF5TGVhdmUgPSBkYXRhLmRlbGF5TGVhdmU7XG4gIHZhciBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGxlYXZlKTtcblxuICB2YXIgZXhwbGljaXRMZWF2ZUR1cmF0aW9uID0gdG9OdW1iZXIoXG4gICAgaXNPYmplY3QoZHVyYXRpb24pXG4gICAgICA/IGR1cmF0aW9uLmxlYXZlXG4gICAgICA6IGR1cmF0aW9uXG4gICk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNEZWYoZXhwbGljaXRMZWF2ZUR1cmF0aW9uKSkge1xuICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRMZWF2ZUR1cmF0aW9uLCAnbGVhdmUnLCB2bm9kZSk7XG4gIH1cblxuICB2YXIgY2IgPSBlbC5fbGVhdmVDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChlbC5wYXJlbnROb2RlICYmIGVsLnBhcmVudE5vZGUuX3BlbmRpbmcpIHtcbiAgICAgIGVsLnBhcmVudE5vZGUuX3BlbmRpbmdbdm5vZGUua2V5XSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgfVxuICAgICAgbGVhdmVDYW5jZWxsZWQgJiYgbGVhdmVDYW5jZWxsZWQoZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBybSgpO1xuICAgICAgYWZ0ZXJMZWF2ZSAmJiBhZnRlckxlYXZlKGVsKTtcbiAgICB9XG4gICAgZWwuX2xlYXZlQ2IgPSBudWxsO1xuICB9KTtcblxuICBpZiAoZGVsYXlMZWF2ZSkge1xuICAgIGRlbGF5TGVhdmUocGVyZm9ybUxlYXZlKTtcbiAgfSBlbHNlIHtcbiAgICBwZXJmb3JtTGVhdmUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcmZvcm1MZWF2ZSAoKSB7XG4gICAgLy8gdGhlIGRlbGF5ZWQgbGVhdmUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNhbmNlbGxlZFxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgI
33378H1cbiAgICAvLyByZWNvcmQgbGVhdmluZyBlbGVtZW50XG4gICAgaWYgKCF2bm9kZS5kYXRhLnNob3cgJiYgZWwucGFyZW50Tm9kZSkge1xuICAgICAgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgfHwgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgPSB7fSkpWyh2bm9kZS5rZXkpXSA9IHZub2RlO1xuICAgIH1cbiAgICBiZWZvcmVMZWF2ZSAmJiBiZWZvcmVMZWF2ZShlbCk7XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgICAgaWYgKCFjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICAgICAgaWYgKCF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRMZWF2ZUR1cmF0aW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxlYXZlICYmIGxlYXZlKGVsLCBjYik7XG4gICAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICBjYigpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBvbmx5IHVzZWQgaW4gZGV2IG1vZGVcbmZ1bmN0aW9uIGNoZWNrRHVyYXRpb24gKHZhbCwgbmFtZSwgdm5vZGUpIHtcbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInKSB7XG4gICAgd2FybihcbiAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIFwiICtcbiAgICAgIFwiZ290IFwiICsgKEpTT04uc3RyaW5naWZ5KHZhbCkpICsgXCIuXCIsXG4gICAgICB2bm9kZS5jb250ZXh0XG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc05hTih2YWwpKSB7XG4gICAgd2FybihcbiAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIE5hTiAtIFwiICtcbiAgICAgICd0aGUgZHVyYXRpb24gZXhwcmVzc2lvbiBtaWdodCBiZSBpbmNvcnJlY3QuJyxcbiAgICAgIHZub2RlLmNvbnRleHRcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREdXJhdGlvbiAodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHRyYW5zaXRpb24gaG9vaydzIGFyZ3VtZW50IGxlbmd0aC4gVGhlIGhvb2sgbWF5IGJlOlxuICogLSBhIG1lcmdlZCBob29rIChpbnZva2VyKSB3aXRoIHRoZSBvcmlnaW5hbCBpbiAuZm5zXG4gKiAtIGEgd3JhcHBlZCBjb21wb25lbnQgbWV0aG9kIChjaGVjayAuX2xlbmd0aClcbiAqIC0gYSBwbGFpbiBmdW5jdGlvbiAoLmxlbmd0aClcbiAqL1xuZnVuY3Rpb24gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aCAoZm4pIHtcbiAgaWYgKGlzVW5kZWYoZm4pKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdmFyIGludm9rZXJGbnMgPSBmbi5mbnM7XG4gIGlmIChpc0RlZihpbnZva2VyRm5zKSkge1xuICAgIC8vIGludm9rZXJcbiAgICByZXR1cm4gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChcbiAgICAgIEFycmF5LmlzQXJyYXkoaW52b2tlckZucylcbiAgICAgICAgPyBpbnZva2VyRm5zWzBdXG4gICAgICAgIDogaW52b2tlckZuc1xuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKGZuLl9sZW5ndGggfHwgZm4ubGVuZ3RoKSA+IDFcbiAgfVxufVxuXG5mdW5jdGlvbiBfZW50ZXIgKF8sIHZub2RlKSB7XG4gIGlmICh2bm9kZS5kYXRhLnNob3cgIT09IHRydWUpIHtcbiAgICBlbnRlcih2bm9kZSk7XG4gIH1cbn1cblxudmFyIHRyYW5zaXRpb24gPSBpbkJyb3dzZXIgPyB7XG4gIGNyZWF0ZTogX2VudGVyLFxuICBhY3RpdmF0ZTogX2VudGVyLFxuICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSQkMSAodm5vZGUsIHJtKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgICBsZWF2ZSh2bm9kZSwgcm0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBybSgpO1xuICAgIH1cbiAgfVxufSA6IHt9O1xuXG52YXIgcGxhdGZvcm1Nb2R1bGVzID0gW1xuICBhdHRycyxcbiAga2xhc3MsXG4gIGV2ZW50cyxcbiAgZG9tUHJvcHMsXG4gIHN0eWxlLFxuICB0cmFuc2l0aW9uXG5dO1xuXG4vKiAgKi9cblxuLy8gdGhlIGRpcmVjdGl2ZSBtb2R1bGUgc2hvdWxkIGJlIGFwcGxpZWQgbGFzdCwgYWZ0ZXIgYWxsXG4vLyBidWlsdC1pbiBtb2R1bGVzIGhhdmUgYmVlbiBhcHBsaWVkLlxudmFyIG1vZHVsZXMgPSBwbGF0Zm9ybU1vZHVsZXMuY29uY2F0KGJhc2VNb2R1bGVzKTtcblxudmFyIHBhdGNoID0gY3JlYXRlUGF0Y2hGdW5jdGlvbih7IG5vZGVPcHM6IG5vZGVPcHMsIG1vZHVsZXM6IG1vZHVsZXMgfSk7XG5cbi8qKlxuICogTm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IGxpa2UgYXR0YWNoaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIEVsZW1lbnRzLlxuICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKGlzSUU5KSB7XG4gIC8vIGh0dHA6Ly93d3cubWF0dHM0MTEuY29tL3Bvc3QvaW50ZXJuZXQtZXhwbG9yZXItOS1vbmlucHV0L1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25jaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAoZWwgJiYgZWwudm1vZGVsKSB7XG4gICAgICB0cmlnZ2VyKGVsLCAnaW5wdXQnKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgZGlyZWN0aXZlID0ge1xuICBpbnNlcnRlZDogZnVuY3Rpb24gaW5zZXJ0ZWQgKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpIHtcbiAgICBpZiAodm5vZGUudGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgLy8gIzY5MDNcbiAgICAgIGlmIChvbGRWbm9kZS5lbG0gJiYgIW9sZFZub2Rl
33378LmVsbS5fdk9wdGlvbnMpIHtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdwb3N0cGF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlyZWN0aXZlLmNvbXBvbmVudFVwZGF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICB9XG4gICAgICBlbC5fdk9wdGlvbnMgPSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh2bm9kZS50YWcgPT09ICd0ZXh0YXJlYScgfHwgaXNUZXh0SW5wdXRUeXBlKGVsLnR5cGUpKSB7XG4gICAgICBlbC5fdk1vZGlmaWVycyA9IGJpbmRpbmcubW9kaWZpZXJzO1xuICAgICAgaWYgKCFiaW5kaW5nLm1vZGlmaWVycy5sYXp5KSB7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCBvbkNvbXBvc2l0aW9uU3RhcnQpO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbmVuZCcsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICAvLyBTYWZhcmkgPCAxMC4yICYgVUlXZWJWaWV3IGRvZXNuJ3QgZmlyZSBjb21wb3NpdGlvbmVuZCB3aGVuXG4gICAgICAgIC8vIHN3aXRjaGluZyBmb2N1cyBiZWZvcmUgY29uZmlybWluZyBjb21wb3NpdGlvbiBjaG9pY2VcbiAgICAgICAgLy8gdGhpcyBhbHNvIGZpeGVzIHRoZSBpc3N1ZSB3aGVyZSBzb21lIGJyb3dzZXJzIGUuZy4gaU9TIENocm9tZVxuICAgICAgICAvLyBmaXJlcyBcImNoYW5nZVwiIGluc3RlYWQgb2YgXCJpbnB1dFwiIG9uIGF1dG9jb21wbGV0ZS5cbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXNJRTkpIHtcbiAgICAgICAgICBlbC52bW9kZWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudFVwZGF0ZWQ6IGZ1bmN0aW9uIGNvbXBvbmVudFVwZGF0ZWQgKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICAvLyBpbiBjYXNlIHRoZSBvcHRpb25zIHJlbmRlcmVkIGJ5IHYtZm9yIGhhdmUgY2hhbmdlZCxcbiAgICAgIC8vIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgdmFsdWUgaXMgb3V0LW9mLXN5bmMgd2l0aCB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAgICAgIC8vIGRldGVjdCBzdWNoIGNhc2VzIGFuZCBmaWx0ZXIgb3V0IHZhbHVlcyB0aGF0IG5vIGxvbmdlciBoYXMgYSBtYXRjaGluZ1xuICAgICAgLy8gb3B0aW9uIGluIHRoZSBET00uXG4gICAgICB2Y
33378XIgcHJldk9wdGlvbnMgPSBlbC5fdk9wdGlvbnM7XG4gICAgICB2YXIgY3VyT3B0aW9ucyA9IGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKTtcbiAgICAgIGlmIChjdXJPcHRpb25zLnNvbWUoZnVuY3Rpb24gKG8sIGkpIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHByZXZPcHRpb25zW2ldKTsgfSkpIHtcbiAgICAgICAgLy8gdHJpZ2dlciBjaGFuZ2UgZXZlbnQgaWZcbiAgICAgICAgLy8gbm8gbWF0Y2hpbmcgb3B0aW9uIGZvdW5kIGZvciBhdCBsZWFzdCBvbmUgdmFsdWVcbiAgICAgICAgdmFyIG5lZWRSZXNldCA9IGVsLm11bHRpcGxlXG4gICAgICAgICAgPyBiaW5kaW5nLnZhbHVlLnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGhhc05vTWF0Y2hpbmdPcHRpb24odiwgY3VyT3B0aW9ucyk7IH0pXG4gICAgICAgICAgOiBiaW5kaW5nLnZhbHVlICE9PSBiaW5kaW5nLm9sZFZhbHVlICYmIGhhc05vTWF0Y2hpbmdPcHRpb24oYmluZGluZy52YWx1ZSwgY3VyT3B0aW9ucyk7XG4gICAgICAgIGlmIChuZWVkUmVzZXQpIHtcbiAgICAgICAgICB0cmlnZ2VyKGVsLCAnY2hhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNldFNlbGVjdGVkIChlbCwgYmluZGluZywgdm0pIHtcbiAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzSUUgfHwgaXNFZGdlKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSk7XG4gICAgfSwgMCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWN0dWFsbHlTZXRTZWxlY3RlZCAoZWwsIGJpbmRpbmcsIHZtKSB7XG4gIHZhciB2YWx1ZSA9IGJpbmRpbmcudmFsdWU7XG4gIHZhciBpc011bHRpcGxlID0gZWwubXVsdGlwbGU7XG4gIGlmIChpc011bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiPHNlbGVjdCBtdWx0aXBsZSB2LW1vZGVsPVxcXCJcIiArIChiaW5kaW5nLmV4cHJlc3Npb24pICsgXCJcXFwiPiBcIiArXG4gICAgICBcImV4cGVjdHMgYW4gQXJyYXkgdmFsdWUgZm9yIGl0cyBiaW5kaW5nLCBidXQgZ290IFwiICsgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpKSxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgc2VsZWN0ZWQsIG9wdGlvbjtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBlbC5vcHRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9wdGlvbiA9IGVsLm9wdGlvbnNbaV07XG4gICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgIHNlbGVjdGVkID0gbG9vc2VJbmRleE9mKHZhbHVlLCBnZXRWYWx1ZShvcHRpb24pKSA+IC0xO1xuICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChsb29zZUVxdWFsKGdldFZhbHVlKG9wdGlvbiksIHZhbHVlKSkge1xuICAgICAgICBpZiAoZWwuc2VsZWN0ZWRJbmRleCAhPT0gaSkge1xuICAgICAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICBlbC5zZWxlY3RlZEluZGV4ID0gLTE7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzTm9NYXRjaGluZ09wdGlvbiAodmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZXZlcnkoZnVuY3Rpb24gKG8pIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHZhbHVlKTsgfSlcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWUgKG9wdGlvbikge1xuICByZXR1cm4gJ192YWx1ZScgaW4gb3B0aW9uXG4gICAgPyBvcHRpb24uX3ZhbHVlXG4gICAgOiBvcHRpb24udmFsdWVcbn1cblxuZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0IChlKSB7XG4gIGUudGFyZ2V0LmNvbXBvc2luZyA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25FbmQgKGUpIHtcbiAgLy8gcHJldmVudCB0cmlnZ2VyaW5nIGFuIGlucHV0IGV2ZW50IGZvciBubyByZWFzb25cbiAgaWYgKCFlLnRhcmdldC5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgZS50YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XG4gIHRyaWdnZXIoZS50YXJnZXQsICdpbnB1dCcpO1xufVxuXG5mdW5jdGlvbiB0cmlnZ2VyIChlbCwgdHlwZSkge1xuICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJyk7XG4gIGUuaW5pdEV2ZW50KHR5cGUsIHRydWUsIHRydWUpO1xuICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xufVxuXG4vKiAgKi9cblxuLy8gcmVjdXJzaXZlbHkgc2VhcmNoIGZvciBwb3NzaWJsZSB0cmFuc2l0aW9uIGRlZmluZWQgaW5zaWRlIHRoZSBjb21wb25lbnQgcm9vdFxuZnVuY3Rpb24gbG9jYXRlTm9kZSAodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmICghdm5vZGUuZGF0YSB8fCAhdm5vZGUuZGF0YS50cmFuc2l0aW9uKVxuICAgID8gbG9jYXRlTm9kZSh2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpXG4gICAgOiB2bm9kZVxufVxuXG52YXIgc2hvdyA9IHtcbiAgYmluZDogZnVuY3Rpb24gYmluZCAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICB2YXIgdmFsdWUgPSByZWYudmFsdWU7XG5cbiAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgIHZhciB0cmFuc2l0aW9uJCQxID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgdmFyIG9yaWdpbmFsRGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheSA9XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnJyA6IGVsLnN0eWxlLmRpc3BsYXk7XG4gICAgaWYgKHZhbHVlICYmIHRyYW5zaXRpb24kJDEpIHtcbiAgICAgIHZub2RlLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gb3JpZ2luYWxEaXNwbGF5O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IG9yaWdpbmFsRGlzcGxheSA6ICdub25lJztcbiAgICB9XG4gI
33378H0sXG5cbiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUgKGVsLCByZWYsIHZub2RlKSB7XG4gICAgdmFyIHZhbHVlID0gcmVmLnZhbHVlO1xuICAgIHZhciBvbGRWYWx1ZSA9IHJlZi5vbGRWYWx1ZTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdmFsdWUgPT09ICFvbGRWYWx1ZSkgeyByZXR1cm4gfVxuICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgdmFyIHRyYW5zaXRpb24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICBpZiAodHJhbnNpdGlvbiQkMSkge1xuICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVhdmUodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gZWwuX192T3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgIH1cbiAgfSxcblxuICB1bmJpbmQ6IGZ1bmN0aW9uIHVuYmluZCAoXG4gICAgZWwsXG4gICAgYmluZGluZyxcbiAgICB2bm9kZSxcbiAgICBvbGRWbm9kZSxcbiAgICBpc0Rlc3Ryb3lcbiAgKSB7XG4gICAgaWYgKCFpc0Rlc3Ryb3kpIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgcGxhdGZvcm1EaXJlY3RpdmVzID0ge1xuICBtb2RlbDogZGlyZWN0aXZlLFxuICBzaG93OiBzaG93XG59O1xuXG4vKiAgKi9cblxudmFyIHRyYW5zaXRpb25Qcm9wcyA9IHtcbiAgbmFtZTogU3RyaW5nLFxuICBhcHBlYXI6IEJvb2xlYW4sXG4gIGNzczogQm9vbGVhbixcbiAgbW9kZTogU3RyaW5nLFxuICB0eXBlOiBTdHJpbmcsXG4gIGVudGVyQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVDbGFzczogU3RyaW5nLFxuICBlbnRlclRvQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVUb0NsYXNzOiBTdHJpbmcsXG4gIGVudGVyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVBY3RpdmVDbGFzczogU3RyaW5nLFxuICBhcHBlYXJDbGFzczogU3RyaW5nLFxuICBhcHBlYXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICBhcHBlYXJUb0NsYXNzOiBTdHJpbmcsXG4gIGR1cmF0aW9uOiBbTnVtYmVyLCBTdHJpbmcsIE9iamVjdF1cbn07XG5cbi8vIGluIGNhc2UgdGhlIGNoaWxkIGlzIGFsc28gYW4gYWJzdHJhY3QgY29tcG9uZW50LCBlLmcuIDxrZWVwLWFsaXZlPlxuLy8gd2Ugd2FudCB0byByZWN1cnNpdmVseSByZXRyaWV2ZSB0aGUgcmVhbCBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWRcbmZ1bmN0aW9uIGdldFJlYWxDaGlsZCAodm5vZGUpIHtcbiAgdmFyIGNvbXBPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgaWYgKGNvbXBPcHRpb25zICYmIGNvbXBPcHRpb25zLkN0b3Iub3B0aW9ucy5hYnN0cmFjdCkge1xuICAgIHJldHVybiBnZXRSZWFsQ2hpbGQoZ2V0Rmlyc3RDb21wb25lbnRDaGlsZChjb21wT3B0aW9ucy5jaGlsZHJlbikpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdFRyYW5zaXRpb25EYXRhIChjb21wKSB7XG4gIHZhciBkYXRhID0ge307XG4gIHZhciBvcHRpb25zID0gY29tcC4kb3B0aW9ucztcbiAgLy8gcHJvcHNcbiAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMucHJvcHNEYXRhKSB7XG4gICAgZGF0YVtrZXldID0gY29tcFtrZXldO1xuICB9XG4gIC8vIGV2ZW50cy5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMgYW5kIHBhc3MgdGhlbSBkaXJlY3RseSB0byB0aGUgdHJhbnNpdGlvbiBtZXRob2RzXG4gIHZhciBsaXN0ZW5lcnMgPSBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIGZvciAodmFyIGtleSQxIGluIGxpc3RlbmVycykge1xuICAgIGRhdGFbY2FtZWxpemUoa2V5JDEpXSA9IGxpc3RlbmVyc1trZXkkMV07XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuZnVuY3Rpb24gcGxhY2Vob2xkZXIgKGgsIHJhd0NoaWxkKSB7XG4gIGlmICgvXFxkLWtlZXAtYWxpdmUkLy50ZXN0KHJhd0NoaWxkLnRhZykpIHtcbiAgICByZXR1cm4gaCgna2VlcC1hbGl2ZScsIHtcbiAgICAgIHByb3BzOiByYXdDaGlsZC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzUGFyZW50VHJhbnNpdGlvbiAodm5vZGUpIHtcbiAgd2hpbGUgKCh2bm9kZSA9IHZub2RlLnBhcmVudCkpIHtcbiAgICBpZiAodm5vZGUuZGF0YS50cmFuc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1NhbWVDaGlsZCAoY2hpbGQsIG9sZENoaWxkKSB7XG4gIHJldHVybiBvbGRDaGlsZC5rZXkgPT09IGNoaWxkLmtleSAmJiBvbGRDaGlsZC50YWcgPT09IGNoaWxkLnRhZ1xufVxuXG52YXIgaXNOb3RUZXh0Tm9kZSA9IGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRhZyB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYyk7IH07XG5cbnZhciBpc1ZTaG93RGlyZWN0aXZlID0gZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQubmFtZSA9PT0gJ3Nob3cnOyB9O1xuXG52YXIgVHJhbnNpdGlvbiA9IHtcbiAgbmFtZTogJ3RyYW5zaXRpb24nLFxuICBwcm9wczogdHJhbnNpdGlvblByb3BzLFxuICBhYnN0cmFjdDogdHJ1ZSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHRleHQgbm9kZXMgKHBvc3NpYmxlIHdoaXRlc3BhY2VzKVxuICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKGlzTm90VGV4dE5vZGUpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB3YXJuIG11bHRpcGxlIGVsZW1lbnRzXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgd2FybihcbiAgICAgICAgJzx0cmFuc2l0aW9uPiBjYW4gb25seSBiZSB1c2VkIG9uIGEgc2luZ2xlIGVsZW1lbnQuIFVzZSAnICtcbiAgICAgICAgJzx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJyxcbiAgICAgICAgdGhpcy4kcGFyZW50XG4gICAgICApO1xuICAgIH1cblxuICAgI
33378HZhciBtb2RlID0gdGhpcy5tb2RlO1xuXG4gICAgLy8gd2FybiBpbnZhbGlkIG1vZGVcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgbW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJ1xuICAgICkge1xuICAgICAgd2FybihcbiAgICAgICAgJ2ludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICcgKyBtb2RlLFxuICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHJhd0NoaWxkID0gY2hpbGRyZW5bMF07XG5cbiAgICAvLyBpZiB0aGlzIGlzIGEgY29tcG9uZW50IHJvb3Qgbm9kZSBhbmQgdGhlIGNvbXBvbmVudCdzXG4gICAgLy8gcGFyZW50IGNvbnRhaW5lciBub2RlIGFsc28gaGFzIHRyYW5zaXRpb24sIHNraXAuXG4gICAgaWYgKGhhc1BhcmVudFRyYW5zaXRpb24odGhpcy4kdm5vZGUpKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0cmFuc2l0aW9uIGRhdGEgdG8gY2hpbGRcbiAgICAvLyB1c2UgZ2V0UmVhbENoaWxkKCkgdG8gaWdub3JlIGFic3RyYWN0IGNvbXBvbmVudHMgZS5nLiBrZWVwLWFsaXZlXG4gICAgdmFyIGNoaWxkID0gZ2V0UmVhbENoaWxkKHJhd0NoaWxkKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNoaWxkKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGVhdmluZykge1xuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgIH1cblxuICAgIC8vIGVuc3VyZSBhIGtleSB0aGF0IGlzIHVuaXF1ZSB0byB0aGUgdm5vZGUgdHlwZSBhbmQgdG8gdGhpcyB0cmFuc2l0aW9uXG4gICAgLy8gY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gcmVtb3ZlIHBlbmRpbmcgbGVhdmluZyBub2Rlc1xuICAgIC8vIGR1cmluZyBlbnRlcmluZy5cbiAgICB2YXIgaWQgPSBcIl9fdHJhbnNpdGlvbi1cIiArICh0aGlzLl91aWQpICsgXCItXCI7XG4gICAgY2hpbGQua2V5ID0gY2hpbGQua2V5ID09IG51bGxcbiAgICAgID8gY2hpbGQuaXNDb21tZW50XG4gICAgICAgID8gaWQgKyAnY29tbWVudCdcbiAgICAgICAgOiBpZCArIGNoaWxkLnRhZ1xuICAgICAgOiBpc1ByaW1pdGl2ZShjaGlsZC5rZXkpXG4gICAgICAgID8gKFN0cmluZyhjaGlsZC5rZXkpLmluZGV4T2YoaWQpID09PSAwID8gY2hpbGQua2V5IDogaWQgKyBjaGlsZC5rZXkpXG4gICAgICAgIDogY2hpbGQua2V5O1xuXG4gICAgdmFyIGRhdGEgPSAoY2hpbGQuZGF0YSB8fCAoY2hpbGQuZGF0YSA9IHt9KSkudHJhbnNpdGlvbiA9IGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKTtcbiAgICB2YXIgb2xkUmF3Q2hpbGQgPSB0aGlzLl92bm9kZTtcbiAgICB2YXIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xuXG4gICAgLy8gbWFyayB2LXNob3dcbiAgICAvLyBzbyB0aGF0IHRoZSB0cmFuc2l0aW9uIG1vZHVsZSBjYW4gaGFuZCBvdmVyIHRoZSBjb250cm9sIHRvIHRoZSBkaXJlY3RpdmVcbiAgICBpZiAoY2hpbGQuZGF0YS5kaXJlY3RpdmVzICYmIGNoaWxkLmRhdGEuZGlyZWN0aXZlcy5zb21lKGlzVlNob3dEaXJlY3RpdmUpKSB7XG4gICAgICBjaGlsZC5kYXRhLnNob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9sZENoaWxkICYmXG4gICAgICBvbGRDaGlsZC5kYXRhICYmXG4gICAgICAhaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxuICAgICAgIWlzQXN5bmNQbGFjZWhvbGRlcihvbGRDaGlsZCkgJiZcbiAgICAgIC8vICM2Njg3IGNvbXBvbmVudCByb290IGlzIGEgY29tbWVudCBub2RlXG4gICAgICAhKG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlICYmIG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpXG4gICAgKSB7XG4gICAgICAvLyByZXBsYWNlIG9sZCBjaGlsZCB0cmFuc2l0aW9uIGRhdGEgd2l0aCBmcmVzaCBvbmVcbiAgICAgIC8vIGltcG9ydGFudCBmb3IgZHluYW1pYyB0cmFuc2l0aW9ucyFcbiAgICAgIHZhciBvbGREYXRhID0gb2xkQ2hpbGQuZGF0YS50cmFuc2l0aW9uID0gZXh0ZW5kKHt9LCBkYXRhKTtcbiAgICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIG1vZGVcbiAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xuICAgICAgICAvLyByZXR1cm4gcGxhY2Vob2xkZXIgbm9kZSBhbmQgcXVldWUgdXBkYXRlIHdoZW4gbGVhdmUgZmluaXNoZXNcbiAgICAgICAgdGhpcy5fbGVhdmluZyA9IHRydWU7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMkMS5fbGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMkMS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZClcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2luLW91dCcpIHtcbiAgICAgICAgaWYgKGlzQXN5bmNQbGFjZWhvbGRlcihjaGlsZCkpIHtcbiAgICAgICAgICByZXR1cm4gb2xkUmF3Q2hpbGRcbiAgICAgICAgfVxuICAgICAgICB2Y
33378XIgZGVsYXllZExlYXZlO1xuICAgICAgICB2YXIgcGVyZm9ybUxlYXZlID0gZnVuY3Rpb24gKCkgeyBkZWxheWVkTGVhdmUoKTsgfTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2FmdGVyRW50ZXInLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnZGVsYXlMZWF2ZScsIGZ1bmN0aW9uIChsZWF2ZSkgeyBkZWxheWVkTGVhdmUgPSBsZWF2ZTsgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhd0NoaWxkXG4gIH1cbn07XG5cbi8qICAqL1xuXG52YXIgcHJvcHMgPSBleHRlbmQoe1xuICB0YWc6IFN0cmluZyxcbiAgbW92ZUNsYXNzOiBTdHJpbmdcbn0sIHRyYW5zaXRpb25Qcm9wcyk7XG5cbmRlbGV0ZSBwcm9wcy5tb2RlO1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0ge1xuICBwcm9wczogcHJvcHMsXG5cbiAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50ICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciB1cGRhdGUgPSB0aGlzLl91cGRhdGU7XG4gICAgdGhpcy5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh0aGlzJDEpO1xuICAgICAgLy8gZm9yY2UgcmVtb3ZpbmcgcGFzc1xuICAgICAgdGhpcyQxLl9fcGF0Y2hfXyhcbiAgICAgICAgdGhpcyQxLl92bm9kZSxcbiAgICAgICAgdGhpcyQxLmtlcHQsXG4gICAgICAgIGZhbHNlLCAvLyBoeWRyYXRpbmdcbiAgICAgICAgdHJ1ZSAvLyByZW1vdmVPbmx5ICghaW1wb3J0YW50LCBhdm9pZHMgdW5uZWNlc3NhcnkgbW92ZXMpXG4gICAgICApO1xuICAgICAgdGhpcyQxLl92bm9kZSA9IHRoaXMkMS5rZXB0O1xuICAgICAgcmVzdG9yZUFjdGl2ZUluc3RhbmNlKCk7XG4gICAgICB1cGRhdGUuY2FsbCh0aGlzJDEsIHZub2RlLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGFnID0gdGhpcy50YWcgfHwgdGhpcy4kdm5vZGUuZGF0YS50YWcgfHwgJ3NwYW4nO1xuICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgdmFyIHJhd0NoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdmFyIHRyYW5zaXRpb25EYXRhID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSByYXdDaGlsZHJlbltpXTtcbiAgICAgIGlmIChjLnRhZykge1xuICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2goYyk7XG4gICAgICAgICAgbWFwW2Mua2V5XSA9IGNcbiAgICAgICAgICA7KGMuZGF0YSB8fCAoYy5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHZhciBvcHRzID0gYy5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICAgIHZhciBuYW1lID0gb3B0cyA/IChvcHRzLkN0b3Iub3B0aW9ucy5uYW1lIHx8IG9wdHMudGFnIHx8ICcnKSA6IGMudGFnO1xuICAgICAgICAgIHdhcm4oKFwiPHRyYW5zaXRpb24tZ3JvdXA+IGNoaWxkcmVuIG11c3QgYmUga2V5ZWQ6IDxcIiArIG5hbWUgKyBcIj5cIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZXZDaGlsZHJlbikge1xuICAgICAgdmFyIGtlcHQgPSBbXTtcbiAgICAgIHZhciByZW1vdmVkID0gW107XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBwcmV2Q2hpbGRyZW4ubGVuZ3RoOyBpJDErKykge1xuICAgICAgICB2Y
33378XIgYyQxID0gcHJldkNoaWxkcmVuW2kkMV07XG4gICAgICAgIGMkMS5kYXRhLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uRGF0YTtcbiAgICAgICAgYyQxLmRhdGEucG9zID0gYyQxLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKG1hcFtjJDEua2V5XSkge1xuICAgICAgICAgIGtlcHQucHVzaChjJDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZWQucHVzaChjJDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmtlcHQgPSBoKHRhZywgbnVsbCwga2VwdCk7XG4gICAgICB0aGlzLnJlbW92ZWQgPSByZW1vdmVkO1xuICAgIH1cblxuICAgIHJldHVybiBoKHRhZywgbnVsbCwgY2hpbGRyZW4pXG4gIH0sXG5cbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCAoKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcmV2Q2hpbGRyZW47XG4gICAgdmFyIG1vdmVDbGFzcyA9IHRoaXMubW92ZUNsYXNzIHx8ICgodGhpcy5uYW1lIHx8ICd2JykgKyAnLW1vdmUnKTtcbiAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5oYXNNb3ZlKGNoaWxkcmVuWzBdLmVsbSwgbW92ZUNsYXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gd2UgZGl2aWRlIHRoZSB3b3JrIGludG8gdGhyZWUgbG9vcHMgdG8gYXZvaWQgbWl4aW5nIERPTSByZWFkcyBhbmQgd3JpdGVzXG4gICAgLy8gaW4gZWFjaCBpdGVyYXRpb24gLSB3aGljaCBoZWxwcyBwcmV2ZW50IGxheW91dCB0aHJhc2hpbmcuXG4gICAgY2hpbGRyZW4uZm9yRWFjaChjYWxsUGVuZGluZ0Nicyk7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChyZWNvcmRQb3NpdGlvbik7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChhcHBseVRyYW5zbGF0aW9uKTtcblxuICAgIC8vIGZvcmNlIHJlZmxvdyB0byBwdXQgZXZlcnl0aGluZyBpbiBwb3NpdGlvblxuICAgIC8vIGFzc2lnbiB0byB0aGlzIHRvIGF2b2lkIGJlaW5nIHJlbW92ZWQgaW4gdHJlZS1zaGFraW5nXG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdGhpcy5fcmVmbG93ID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7XG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICBpZiAoYy5kYXRhLm1vdmVkKSB7XG4gICAgICAgIHZhciBlbCA9IGMuZWxtO1xuICAgICAgICB2Y
33378XIgcyA9IGVsLnN0eWxlO1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcnO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgZWwuX21vdmVDYiA9IGZ1bmN0aW9uIGNiIChlKSB7XG4gICAgICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IGVsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFlIHx8IC90cmFuc2Zvcm0kLy50ZXN0KGUucHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kRXZlbnQsIGNiKTtcbiAgICAgICAgICAgIGVsLl9tb3ZlQ2IgPSBudWxsO1xuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBtb3ZlQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc01vdmU6IGZ1bmN0aW9uIGhhc01vdmUgKGVsLCBtb3ZlQ2xhc3MpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFoYXNUcmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAodGhpcy5faGFzTW92ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzTW92ZVxuICAgICAgfVxuICAgICAgLy8gRGV0ZWN0IHdoZXRoZXIgYW4gZWxlbWVudCB3aXRoIHRoZSBtb3ZlIGNsYXNzIGFwcGxpZWQgaGFzXG4gICAgICAvLyBDU1MgdHJhbnNpdGlvbnMuIFNpbmNlIHRoZSBlbGVtZW50IG1heSBiZSBpbnNpZGUgYW4gZW50ZXJpbmdcbiAgICAgIC8vIHRyYW5zaXRpb24gYXQgdGhpcyB2ZXJ5IG1vbWVudCwgd2UgbWFrZSBhIGNsb25lIG9mIGl0IGFuZCByZW1vdmVcbiAgICAgIC8vIGFsbCBvdGhlciB0cmFuc2l0aW9uIGNsYXNzZXMgYXBwbGllZCB0byBlbnN1cmUgb25seSB0aGUgbW92ZSBjbGFzc1xuICAgICAgLy8gaXMgYXBwbGllZC5cbiAgICAgIHZhciBjbG9uZSA9IGVsLmNsb25lTm9kZSgpO1xuICAgICAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgICAgICBlbC5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7IHJlbW92ZUNsYXNzKGNsb25lLCBjbHMpOyB9KTtcbiAgICAgIH1cbiAgICAgIGFkZENsYXNzKGNsb25lLCBtb3ZlQ2xhc3MpO1xuICAgICAgY2xvbmUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuJGVsLmFwcGVuZENoaWxkKGNsb25lKTtcbiAgICAgIHZhciBpbmZvID0gZ2V0VHJhbnNpdGlvbkluZm8oY2xvbmUpO1xuICAgICAgdGhpcy4kZWwucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICAgICAgcmV0dXJuICh0aGlzLl9oYXNNb3ZlID0gaW5mby5oYXNUcmFuc2Zvcm0pXG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBjYWxsUGVuZGluZ0NicyAoYykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMuZWxtLl9tb3ZlQ2IpIHtcbiAgICBjLmVsbS5fbW92ZUNiKCk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjLmVsbS5fZW50ZXJDYikge1xuICAgIGMuZWxtLl9lbnRlckNiKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24gKGMpIHtcbiAgYy5kYXRhLm5ld1BvcyA9IGMuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xufVxuXG5mdW5jdGlvbiBhcHBseVRyYW5zbGF0aW9uIChjKSB7XG4gIHZhciBvbGRQb3MgPSBjLmRhdGEucG9zO1xuICB2YXIgbmV3UG9zID0gYy5kYXRhLm5ld1BvcztcbiAgdmFyIGR4ID0gb2xkUG9zLmxlZnQgLSBuZXdQb3MubGVmdDtcbiAgdmFyIGR5ID0gb2xkUG9zLnRvcCAtIG5ld1Bvcy50b3A7XG4gIGlmIChkeCB8fCBkeSkge1xuICAgIGMuZGF0YS5tb3ZlZCA9IHRydWU7XG4gICAgdmFyIHMgPSBjLmVsbS5zdHlsZTtcbiAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoXCIgKyBkeCArIFwicHgsXCIgKyBkeSArIFwicHgpXCI7XG4gICAgcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xuICB9XG59XG5cbnZhciBwbGF0Zm9ybUNvbXBvbmVudHMgPSB7XG4gIFRyYW5zaXRpb246IFRyYW5zaXRpb24sXG4gIFRyYW5zaXRpb25Hcm91cDogVHJhbnNpdGlvbkdyb3VwXG59O1xuXG4vKiAgKi9cblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBzcGVjaWZpYyB1dGlsc1xuVnVlLmNvbmZpZy5tdXN0VXNlUHJvcCA9IG11c3RVc2VQcm9wO1xuVnVlLmNvbmZpZy5pc1Jlc2VydmVkVGFnID0gaXNSZXNlcnZlZFRhZztcblZ1ZS5jb25maWcuaXNSZXNlcnZlZEF0dHIgPSBpc1Jlc2VydmVkQXR0cjtcblZ1ZS5jb25maWcuZ2V0VGFnTmFtZXNwYWNlID0gZ2V0VGFnTmFtZXNwYWNlO1xuVnVlLmNvbmZpZy5pc1Vua25vd25FbGVtZW50ID0gaXNVbmtub3duRWxlbWVudDtcblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBydW50aW1lIGRpcmVjdGl2ZXMgJiBjb21wb25lbnRzXG5leHRlbmQoVnVlLm9wdGlvbnMuZGlyZWN0aXZlcywgcGxhdGZvcm1EaXJlY3RpdmVzKTtcbmV4dGVuZChWdWUub3B0aW9ucy5jb21wb25lbnRzLCBwbGF0Zm9ybUNvbXBvbmVudHMpO1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHBhdGNoIGZ1bmN0aW9uXG5WdWUucHJvdG90eXBlLl9fcGF0Y2hfXyA9IGluQnJvd3NlciA/IHBhdGNoIDogbm9vcDtcblxuLy8gcHVibGljIG1vdW50IG1ldGhvZFxuVnVlLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICBlbCA9IGVsICYmIGluQnJvd3NlciA/IHF1ZXJ5KGVsKSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG1vdW50Q29tcG9uZW50KHRoaXMsIGVsLCBoeWRyYXRpbmcpXG59O1xuXG4vLyBkZXZ0b29scyBnbG9iYWwgaG9va1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpbkJyb3dzZXIpIHtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbmZpZy5kZXZ0b29scykge1xuICAgICAgaWYgKGRldnRvb2xzKSB7XG4gICAgICAgIGRldnRvb2xzLmVtaXQoJ2luaXQnLCBWdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICAgICAgJ0Rvd25sb2FkIHRoZSBWdWUgRGV2dG9vbHMgZXh0ZW5zaW9uIGZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOlxcbicgK1xuICAgICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLWRldnRvb2xzJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJlxuICAgICAgY29uZmlnLnByb2R1Y3Rpb25UaXAgIT09IGZhbHNlICYmXG4gICAgICB0eX
33378Blb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICApIHtcbiAgICAgIGNvbnNvbGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKFxuICAgICAgICBcIllvdSBhcmUgcnVubmluZyBWdWUgaW4gZGV2ZWxvcG1lbnQgbW9kZS5cXG5cIiArXG4gICAgICAgIFwiTWFrZSBzdXJlIHRvIHR1cm4gb24gcHJvZHVjdGlvbiBtb2RlIHdoZW4gZGVwbG95aW5nIGZvciBwcm9kdWN0aW9uLlxcblwiICtcbiAgICAgICAgXCJTZWUgbW9yZSB0aXBzIGF0IGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2RlcGxveW1lbnQuaHRtbFwiXG4gICAgICApO1xuICAgIH1cbiAgfSwgMCk7XG59XG5cbi8qICAqL1xuXG52YXIgZGVmYXVsdFRhZ1JFID0gL1xce1xceygoPzoufFxccj9cXG4pKz8pXFx9XFx9L2c7XG52YXIgcmVnZXhFc2NhcGVSRSA9IC9bLS4qKz9eJHt9KCl8W1xcXVxcL1xcXFxdL2c7XG5cbnZhciBidWlsZFJlZ2V4ID0gY2FjaGVkKGZ1bmN0aW9uIChkZWxpbWl0ZXJzKSB7XG4gIHZhciBvcGVuID0gZGVsaW1pdGVyc1swXS5yZXBsYWNlKHJlZ2V4RXNjYXBlUkUsICdcXFxcJCYnKTtcbiAgdmFyIGNsb3NlID0gZGVsaW1pdGVyc1sxXS5yZXBsYWNlKHJlZ2V4RXNjYXBlUkUsICdcXFxcJCYnKTtcbiAgcmV0dXJuIG5ldyBSZWdFeHAob3BlbiArICcoKD86LnxcXFxcbikrPyknICsgY2xvc2UsICdnJylcbn0pO1xuXG5cblxuZnVuY3Rpb24gcGFyc2VUZXh0IChcbiAgdGV4dCxcbiAgZGVsaW1pdGVyc1xuKSB7XG4gIHZhciB0YWdSRSA9IGRlbGltaXRlcnMgPyBidWlsZFJlZ2V4KGRlbGltaXRlcnMpIDogZGVmYXVsdFRhZ1JFO1xuICBpZiAoIXRhZ1JFLnRlc3QodGV4dCkpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgdG9rZW5zID0gW107XG4gIHZhciByYXdUb2tlbnMgPSBbXTtcbiAgdmFyIGxhc3RJbmRleCA9IHRhZ1JFLmxhc3RJbmRleCA9IDA7XG4gIHZhciBtYXRjaCwgaW5kZXgsIHRva2VuVmFsdWU7XG4gIHdoaWxlICgobWF0Y2ggPSB0YWdSRS5leGVjKHRleHQpKSkge1xuICAgIGluZGV4ID0gbWF0Y2guaW5kZXg7XG4gICAgLy8gcHVzaCB0ZXh0IHRva2VuXG4gICAgaWYgKGluZGV4ID4gbGFzdEluZGV4KSB7XG4gICAgICByYXdUb2tlbnMucHVzaCh0b2tlblZhbHVlID0gdGV4dC5zbGljZShsYXN0SW5kZXgsIGluZGV4KSk7XG4gICAgICB0b2tlbnMucHVzaChKU09OLnN0cmluZ2lmeSh0b2tlblZhbHVlKSk7XG4gICAgfVxuICAgIC8vIHRhZyB0b2tlblxuICAgIHZhciBleHAgPSBwYXJzZUZpbHRlcnMobWF0Y2hbMV0udHJpbSgpKTtcbiAgICB0b2tlbnMucHVzaCgoXCJfcyhcIiArIGV4cCArIFwiKVwiKSk7XG4gICAgcmF3VG9rZW5zLnB1c2goeyAnQGJpbmRpbmcnOiBleHAgfSk7XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1cbiAgaWYgKGxhc3RJbmRleCA8IHRleHQubGVuZ3RoKSB7XG4gICAgcmF3VG9rZW5zLnB1c2godG9rZW5WYWx1ZSA9IHRleHQuc2xpY2UobGFzdEluZGV4KSk7XG4gICAgdG9rZW5zLnB1c2goSlNPTi5zdHJpbmdpZnkodG9rZW5WYWx1ZSkpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhwcmVzc2lvbjogdG9rZW5zLmpvaW4oJysnKSxcbiAgICB0b2tlbnM6IHJhd1Rva2Vuc1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Ob2RlIChlbCwgb3B0aW9ucykge1xuICB2YXIgd2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcbiAgdmFyIHN0YXRpY0NsYXNzID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ2NsYXNzJyk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0YXRpY0NsYXNzKSB7XG4gICAgdmFyIHJlcyA9IHBhcnNlVGV4dChzdGF0aWNDbGFzcywgb3B0aW9ucy5kZWxpbWl0ZXJzKTtcbiAgICBpZiAocmVzKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcImNsYXNzPVxcXCJcIiArIHN0YXRpY0NsYXNzICsgXCJcXFwiOiBcIiArXG4gICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBjbGFzcz1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOmNsYXNzPVwidmFsXCI+LicsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwWydjbGFzcyddXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoc3RhdGljQ2xhc3MpIHtcbiAgICBlbC5zdGF0aWNDbGFzcyA9IEpTT04uc3RyaW5naWZ5KHN0YXRpY0NsYXNzKTtcbiAgfVxuICB2YXIgY2xhc3NCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdjbGFzcycsIGZhbHNlIC8qIGdldFN0YXRpYyAqLyk7XG4gIGlmIChjbGFzc0JpbmRpbmcpIHtcbiAgICBlbC5jbGFzc0JpbmRpbmcgPSBjbGFzc0JpbmRpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuRGF0YSAoZWwpIHtcbiAgdmFyIGRhdGEgPSAnJztcbiAgaWYgKGVsLnN0YXRpY0NsYXNzKSB7XG4gICAgZGF0YSArPSBcInN0YXRpY0NsYXNzOlwiICsgKGVsLnN0YXRpY0NsYXNzKSArIFwiLFwiO1xuICB9XG4gIGlmIChlbC5jbGFzc0JpbmRpbmcpIHtcbiAgICBkYXRhICs9IFwiY2xhc3M6XCIgKyAoZWwuY2xhc3NCaW5kaW5nKSArIFwiLFwiO1xuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbnZhciBrbGFzcyQxID0ge1xuICBzdGF0aWNLZXlzOiBbJ3N0YXRpY0NsYXNzJ10sXG4gIHRyYW5zZm9ybU5vZGU6IHRyYW5zZm9ybU5vZGUsXG4gIGdlbkRhdGE6IGdlbkRhdGFcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Ob2RlJDEgKGVsLCBvcHRpb25zKSB7XG4gIHZhciB3YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICB2YXIgc3RhdGljU3R5bGUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc3R5bGUnKTtcbiAgaWYgKHN0YXRpY1N0eWxlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciByZXMgPSBwYXJzZVRleHQoc3RhdGljU3R5bGUsIG9wdGlvbnMuZGVsaW1pdGVycyk7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgI
33378Hdhcm4oXG4gICAgICAgICAgXCJzdHlsZT1cXFwiXCIgKyBzdGF0aWNTdHlsZSArIFwiXFxcIjogXCIgK1xuICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICdVc2Ugdi1iaW5kIG9yIHRoZSBjb2xvbiBzaG9ydGhhbmQgaW5zdGVhZC4gRm9yIGV4YW1wbGUsICcgK1xuICAgICAgICAgICdpbnN0ZWFkIG9mIDxkaXYgc3R5bGU9XCJ7eyB2YWwgfX1cIj4sIHVzZSA8ZGl2IDpzdHlsZT1cInZhbFwiPi4nLFxuICAgICAgICAgIGVsLnJhd0F0dHJzTWFwWydzdHlsZSddXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsLnN0YXRpY1N0eWxlID0gSlNPTi5zdHJpbmdpZnkocGFyc2VTdHlsZVRleHQoc3RhdGljU3R5bGUpKTtcbiAgfVxuXG4gIHZhciBzdHlsZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3N0eWxlJywgZmFsc2UgLyogZ2V0U3RhdGljICovKTtcbiAgaWYgKHN0eWxlQmluZGluZykge1xuICAgIGVsLnN0eWxlQmluZGluZyA9IHN0eWxlQmluZGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5EYXRhJDEgKGVsKSB7XG4gIHZhciBkYXRhID0gJyc7XG4gIGlmIChlbC5zdGF0aWNTdHlsZSkge1xuICAgIGRhdGEgKz0gXCJzdGF0aWNTdHlsZTpcIiArIChlbC5zdGF0aWNTdHlsZSkgKyBcIixcIjtcbiAgfVxuICBpZiAoZWwuc3R5bGVCaW5kaW5nKSB7XG4gICAgZGF0YSArPSBcInN0eWxlOihcIiArIChlbC5zdHlsZUJpbmRpbmcpICsgXCIpLFwiO1xuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbnZhciBzdHlsZSQxID0ge1xuICBzdGF0aWNLZXlzOiBbJ3N0YXRpY1N0eWxlJ10sXG4gIHRyYW5zZm9ybU5vZGU6IHRyYW5zZm9ybU5vZGUkMSxcbiAgZ2VuRGF0YTogZ2VuRGF0YSQxXG59O1xuXG4vKiAgKi9cblxudmFyIGRlY29kZXI7XG5cbnZhciBoZSA9IHtcbiAgZGVjb2RlOiBmdW5jdGlvbiBkZWNvZGUgKGh0bWwpIHtcbiAgICBkZWNvZGVyID0gZGVjb2RlciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkZWNvZGVyLmlubmVySFRNTCA9IGh0bWw7XG4gICAgcmV0dXJuIGRlY29kZXIudGV4dENvbnRlbnRcbiAgfVxufTtcblxuLyogICovXG5cbnZhciBpc1VuYXJ5VGFnID0gbWFrZU1hcChcbiAgJ2FyZWEsYmFzZSxicixjb2wsZW1iZWQsZnJhbWUsaHIsaW1nLGlucHV0LGlzaW5kZXgsa2V5Z2VuLCcgK1xuICAnbGluayxtZXRhLHBhcmFtLHNvdXJjZSx0cmFjayx3YnInXG4pO1xuXG4vLyBFbGVtZW50cyB0aGF0IHlvdSBjYW4sIGludGVudGlvbmFsbHksIGxlYXZlIG9wZW5cbi8vIChhbmQgd2hpY2ggY2xvc2UgdGhlbXNlbHZlcylcbnZhciBjYW5CZUxlZnRPcGVuVGFnID0gbWFrZU1hcChcbiAgJ2NvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0cixzb3VyY2UnXG4pO1xuXG4vLyBIVE1MNSB0YWdzIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZGljZXMuaHRtbCNlbGVtZW50cy0zXG4vLyBQaHJhc2luZyBDb250ZW50IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RvbS5odG1sI3BocmFzaW5nLWNvbnRlbnRcbnZhciBpc05vblBocmFzaW5nVGFnID0gbWFrZU1hcChcbiAgJ2FkZHJlc3MsYXJ0aWNsZSxhc2lkZSxiYXNlLGJsb2NrcXVvdGUsYm9keSxjYXB0aW9uLGNvbCxjb2xncm91cCxkZCwnICtcbiAgJ2RldGFpbHMsZGlhbG9nLGRpdixkbCxkdCxmaWVsZHNldCxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsZm9ybSwnICtcbiAgJ2gxLGgyLGgzLGg0LGg1LGg2LGhlYWQsaGVhZGVyLGhncm91cCxocixodG1sLGxlZ2VuZCxsaSxtZW51aXRlbSxtZXRhLCcgK1xuICAnb3B0Z3JvdXAsb3B0aW9uLHBhcmFtLHJwLHJ0LHNvdXJjZSxzdHlsZSxzdW1tYXJ5LHRib2R5LHRkLHRmb290LHRoLHRoZWFkLCcgK1xuICAndGl0bGUsdHIsdHJhY2snXG4pO1xuXG4vKipcbiAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGl0J3MgbW9zdGx5IHZlbmRvciBjb2RlLlxuICovXG5cbi8vIFJlZ3VsYXIgRXhwcmVzc2lvbnMgZm9yIHBhcnNpbmcgdGFncyBhbmQgYXR0cmlidXRlc1xudmFyIGF0dHJpYnV0ZSA9IC9eXFxzKihbXlxcc1wiJzw+XFwvPV0rKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vO1xudmFyIGR5bmFtaWNBcmdBdHRyaWJ1dGUgPSAvXlxccyooKD86di1bXFx3LV0rOnxAfDp8IylcXFtbXj1dK1xcXVteXFxzXCInPD5cXC89XSopKD86XFxzKig9KVxccyooPzpcIihbXlwiXSopXCIrfCcoW14nXSopJyt8KFteXFxzXCInPTw+YF0rKSkpPy87XG52YXIgbmNuYW1lID0gXCJbYS16QS1aX11bXFxcXC1cXFxcLjAtOV9hLXpBLVpcIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIl0qXCI7XG52YXIgcW5hbWVDYXB0dXJlID0gXCIoKD86XCIgKyBuY25hbWUgKyBcIlxcXFw6KT9cIiArIG5jbmFtZSArIFwiKVwiO1xudmFyIHN0YXJ0VGFnT3BlbiA9IG5ldyBSZWdFeHAoKFwiXjxcIiArIHFuYW1lQ2FwdHVyZSkpO1xudmFyIHN0YXJ0VGFnQ2xvc2UgPSAvXlxccyooXFwvPyk+LztcbnZhciBlbmRUYWcgPSBuZXcgUmVnRXhwKChcIl48XFxcXC9cIiArIHFuYW1lQ2FwdHVyZSArIFwiW14+XSo+XCIpKTtcbnZhciBkb2N0eXBlID0gL148IURPQ1RZUEUgW14+XSs+L2k7XG4vLyAjNzI5ODogZXNjYXBlIC0gdG8gYXZvaWQgYmVpbmcgcGFzc2VkIGFzIEhUTUwgY29tbWVudCB3aGVuIGlubGluZWQgaW4gcGFnZVxudmFyIGNvbW1lbnQgPSAvXjwhXFwtLS87XG52YXIgY29uZGl0aW9uYWxDb21tZW50ID0gL148IVxcWy87XG5cbi8vIFNwZWNpYWwgRWxlbWVudHMgKGNhbiBjb250YWluIGFueXRoaW5nKVxudmFyIGlzUGxhaW5UZXh0RWxlbWVudCA9IG1ha2VNYXAoJ3NjcmlwdCxzdHlsZSx0ZXh0YXJlYScsIHRydWUpO1xudmFyIHJlQ2FjaGUgPSB7fTtcblxudmFyIGRlY29kaW5nTWFwID0ge1xuICAnJmx0Oyc6ICc8JyxcbiAgJyZndDsnOiAnPicsXG4gICcmcXVvdDsnOiAnXCInLFxuICAnJmFtcDsnOiAnJicsXG4gICcmIzEwOyc6ICdcXG4nLFxuICAnJiM5Oyc6ICdcXHQnLFxuICAnJiMzOTsnOiBcIidcIlxufTtcbnZhciBlbmNvZGVkQXR0ciA9IC8mKD86bHR8Z3R8cXVvdHxhbXB8IzM5KTsvZztcbnZhciBlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyA9IC8mKD86bHR8Z3R8cXVvdHxhbXB8IzM5fCMxMHwjOSk
333787L2c7XG5cbi8vICM1OTkyXG52YXIgaXNJZ25vcmVOZXdsaW5lVGFnID0gbWFrZU1hcCgncHJlLHRleHRhcmVhJywgdHJ1ZSk7XG52YXIgc2hvdWxkSWdub3JlRmlyc3ROZXdsaW5lID0gZnVuY3Rpb24gKHRhZywgaHRtbCkgeyByZXR1cm4gdGFnICYmIGlzSWdub3JlTmV3bGluZVRhZyh0YWcpICYmIGh0bWxbMF0gPT09ICdcXG4nOyB9O1xuXG5mdW5jdGlvbiBkZWNvZGVBdHRyICh2YWx1ZSwgc2hvdWxkRGVjb2RlTmV3bGluZXMpIHtcbiAgdmFyIHJlID0gc2hvdWxkRGVjb2RlTmV3bGluZXMgPyBlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyA6IGVuY29kZWRBdHRyO1xuICByZXR1cm4gdmFsdWUucmVwbGFjZShyZSwgZnVuY3Rpb24gKG1hdGNoKSB7IHJldHVybiBkZWNvZGluZ01hcFttYXRjaF07IH0pXG59XG5cbmZ1bmN0aW9uIHBhcnNlSFRNTCAoaHRtbCwgb3B0aW9ucykge1xuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIGV4cGVjdEhUTUwgPSBvcHRpb25zLmV4cGVjdEhUTUw7XG4gIHZhciBpc1VuYXJ5VGFnJCQxID0gb3B0aW9ucy5pc1VuYXJ5VGFnIHx8IG5vO1xuICB2YXIgY2FuQmVMZWZ0T3BlblRhZyQkMSA9IG9wdGlvbnMuY2FuQmVMZWZ0T3BlblRhZyB8fCBubztcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxhc3QsIGxhc3RUYWc7XG4gIHdoaWxlIChodG1sKSB7XG4gICAgbGFzdCA9IGh0bWw7XG4gICAgLy8gTWFrZSBzdXJlIHdlJ3JlIG5vdCBpbiBhIHBsYWludGV4dCBjb250ZW50IGVsZW1lbnQgbGlrZSBzY3JpcHQvc3R5bGVcbiAgICBpZiAoIWxhc3RUYWcgfHwgIWlzUGxhaW5UZXh0RWxlbWVudChsYXN0VGFnKSkge1xuICAgICAgdmFyIHRleHRFbmQgPSBodG1sLmluZGV4T2YoJzwnKTtcbiAgICAgIGlmICh0ZXh0RW5kID09PSAwKSB7XG4gICAgICAgIC8vIENvbW1lbnQ6XG4gICAgICAgIGlmIChjb21tZW50LnRlc3QoaHRtbCkpIHtcbiAgICAgICAgICB2Y
33378XIgY29tbWVudEVuZCA9IGh0bWwuaW5kZXhPZignLS0+Jyk7XG5cbiAgICAgICAgICBpZiAoY29tbWVudEVuZCA+PSAwKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zaG91bGRLZWVwQ29tbWVudCkge1xuICAgICAgICAgICAgICBvcHRpb25zLmNvbW1lbnQoaHRtbC5zdWJzdHJpbmcoNCwgY29tbWVudEVuZCksIGluZGV4LCBpbmRleCArIGNvbW1lbnRFbmQgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkdmFuY2UoY29tbWVudEVuZCArIDMpO1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbmRpdGlvbmFsX2NvbW1lbnQjRG93bmxldmVsLXJldmVhbGVkX2NvbmRpdGlvbmFsX2NvbW1lbnRcbiAgICAgICAgaWYgKGNvbmRpdGlvbmFsQ29tbWVudC50ZXN0KGh0bWwpKSB7XG4gICAgICAgICAgdmFyIGNvbmRpdGlvbmFsRW5kID0gaHRtbC5pbmRleE9mKCddPicpO1xuXG4gICAgICAgICAgaWYgKGNvbmRpdGlvbmFsRW5kID49IDApIHtcbiAgICAgICAgICAgIGFkdmFuY2UoY29uZGl0aW9uYWxFbmQgKyAyKTtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG9jdHlwZTpcbiAgICAgICAgdmFyIGRvY3R5cGVNYXRjaCA9IGh0bWwubWF0Y2goZG9jdHlwZSk7XG4gICAgICAgIGlmIChkb2N0eXBlTWF0Y2gpIHtcbiAgICAgICAgICBhZHZhbmNlKGRvY3R5cGVNYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbmQgdGFnOlxuICAgICAgICB2Y
33378XIgZW5kVGFnTWF0Y2ggPSBodG1sLm1hdGNoKGVuZFRhZyk7XG4gICAgICAgIGlmIChlbmRUYWdNYXRjaCkge1xuICAgICAgICAgIHZhciBjdXJJbmRleCA9IGluZGV4O1xuICAgICAgICAgIGFkdmFuY2UoZW5kVGFnTWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICBwYXJzZUVuZFRhZyhlbmRUYWdNYXRjaFsxXSwgY3VySW5kZXgsIGluZGV4KTtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhcnQgdGFnOlxuICAgICAgICB2YXIgc3RhcnRUYWdNYXRjaCA9IHBhcnNlU3RhcnRUYWcoKTtcbiAgICAgICAgaWYgKHN0YXJ0VGFnTWF0Y2gpIHtcbiAgICAgICAgICBoYW5kbGVTdGFydFRhZyhzdGFydFRhZ01hdGNoKTtcbiAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlRmlyc3ROZXdsaW5lKHN0YXJ0VGFnTWF0Y2gudGFnTmFtZSwgaHRtbCkpIHtcbiAgICAgICAgICAgIGFkdmFuY2UoMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHRleHQgPSAodm9pZCAwKSwgcmVzdCA9ICh2b2lkIDApLCBuZXh0ID0gKHZvaWQgMCk7XG4gICAgICBpZiAodGV4dEVuZCA+PSAwKSB7XG4gICAgICAgIHJlc3QgPSBodG1sLnNsaWNlKHRleHRFbmQpO1xuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgIWVuZFRhZy50ZXN0KHJlc3QpICYmXG4gICAgICAgICAgIXN0YXJ0VGFnT3Blbi50ZXN0KHJlc3QpICYmXG4gICAgICAgICAgIWNvbW1lbnQudGVzdChyZXN0KSAmJlxuICAgICAgICAgICFjb25kaXRpb25hbENvbW1lbnQudGVzdChyZXN0KVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyA8IGluIHBsYWluIHRleHQsIGJlIGZvcmdpdmluZyBhbmQgdHJlYXQgaXQgYXMgdGV4dFxuICAgICAgICAgIG5leHQgPSByZXN0LmluZGV4T2YoJzwnLCAxKTtcbiAgICAgICAgICBpZiAobmV4dCA8IDApIHsgYnJlYWsgfVxuICAgICAgICAgIHRleHRFbmQgKz0gbmV4dDtcbiAgICAgICAgICByZXN0ID0gaHRtbC5zbGljZSh0ZXh0RW5kKTtcbiAgICAgICAgfVxuICAgICAgICB0ZXh0ID0gaHRtbC5zdWJzdHJpbmcoMCwgdGV4dEVuZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXh0RW5kIDwgMCkge1xuICAgICAgICB0ZXh0ID0gaHRtbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgYWR2YW5jZSh0ZXh0Lmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNoYXJzICYmIHRleHQpIHtcbiAgICAgICAgb3B0aW9ucy5jaGFycyh0ZXh0LCBpbmRleCAtIHRleHQubGVuZ3RoLCBpbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlbmRUYWdMZW5ndGggPSAwO1xuICAgICAgdmFyIHN0YWNrZWRUYWcgPSBsYXN0VGFnLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2Y
33378XIgcmVTdGFja2VkVGFnID0gcmVDYWNoZVtzdGFja2VkVGFnXSB8fCAocmVDYWNoZVtzdGFja2VkVGFnXSA9IG5ldyBSZWdFeHAoJyhbXFxcXHNcXFxcU10qPykoPC8nICsgc3RhY2tlZFRhZyArICdbXj5dKj4pJywgJ2knKSk7XG4gICAgICB2YXIgcmVzdCQxID0gaHRtbC5yZXBsYWNlKHJlU3RhY2tlZFRhZywgZnVuY3Rpb24gKGFsbCwgdGV4dCwgZW5kVGFnKSB7XG4gICAgICAgIGVuZFRhZ0xlbmd0aCA9IGVuZFRhZy5sZW5ndGg7XG4gICAgICAgIGlmICghaXNQbGFpblRleHRFbGVtZW50KHN0YWNrZWRUYWcpICYmIHN0YWNrZWRUYWcgIT09ICdub3NjcmlwdCcpIHtcbiAgICAgICAgICB0ZXh0ID0gdGV4dFxuICAgICAgICAgICAgLnJlcGxhY2UoLzwhXFwtLShbXFxzXFxTXSo/KS0tPi9nLCAnJDEnKSAvLyAjNzI5OFxuICAgICAgICAgICAgLnJlcGxhY2UoLzwhXFxbQ0RBVEFcXFsoW1xcc1xcU10qPyldXT4vZywgJyQxJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFja2VkVGFnLCB0ZXh0KSkge1xuICAgICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmNoYXJzKSB7XG4gICAgICAgICAgb3B0aW9ucy5jaGFycyh0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJydcbiAgICAgIH0pO1xuICAgICAgaW5kZXggKz0gaHRtbC5sZW5ndGggLSByZXN0JDEubGVuZ3RoO1xuICAgICAgaHRtbCA9IHJlc3QkMTtcbiAgICAgIHBhcnNlRW5kVGFnKHN0YWNrZWRUYWcsIGluZGV4IC0gZW5kVGFnTGVuZ3RoLCBpbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKGh0bWwgPT09IGxhc3QpIHtcbiAgICAgIG9wdGlvbnMuY2hhcnMgJiYgb3B0aW9ucy5jaGFycyhodG1sKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFzdGFjay5sZW5ndGggJiYgb3B0aW9ucy53YXJuKSB7XG4gICAgICAgIG9wdGlvbnMud2FybigoXCJNYWwtZm9ybWF0dGVkIHRhZyBhdCBlbmQgb2YgdGVtcGxhdGU6IFxcXCJcIiArIGh0bWwgKyBcIlxcXCJcIiksIHsgc3RhcnQ6IGluZGV4ICsgaHRtbC5sZW5ndGggfSk7XG4gICAgICB9XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIENsZWFuIHVwIGFueSByZW1haW5pbmcgdGFnc1xuICBwYXJzZUVuZFRhZygpO1xuXG4gIGZ1bmN0aW9uIGFkdmFuY2UgKG4pIHtcbiAgICBpbmRleCArPSBuO1xuICAgIGh0bWwgPSBodG1sLnN1YnN0cmluZyhuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU3RhcnRUYWcgKCkge1xuICAgIHZhciBzdGFydCA9IGh0bWwubWF0Y2goc3RhcnRUYWdPcGVuKTtcbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIHZhciBtYXRjaCA9IHtcbiAgICAgICAgdGFnTmFtZTogc3RhcnRbMV0sXG4gICAgICAgIGF0dHJzOiBbXSxcbiAgICAgICAgc3RhcnQ6IGluZGV4XG4gICAgICB9O1xuICAgICAgYWR2YW5jZShzdGFydFswXS5sZW5ndGgpO1xuICAgICAgdmFyIGVuZCwgYXR0cjtcbiAgICAgIHdoaWxlICghKGVuZCA9IGh0bWwubWF0Y2goc3RhcnRUYWdDbG9zZSkpICYmIChhdHRyID0gaHRtbC5tYXRjaChkeW5hbWljQXJnQXR0cmlidXRlKSB8fCBodG1sLm1hdGNoKGF0dHJpYnV0ZSkpKSB7XG4gICAgICAgIGF0dHIuc3RhcnQgPSBpbmRleDtcbiAgICAgICAgYWR2YW5jZShhdHRyWzBdLmxlbmd0aCk7XG4gICAgICAgIGF0dHIuZW5kID0gaW5kZXg7XG4gICAgICAgIG1hdGNoLmF0dHJzLnB1c2goYXR0cik7XG4gICAgICB9XG4gICAgICBpZiAoZW5kKSB7XG4gICAgICAgIG1hdGNoLnVuYXJ5U2xhc2ggPSBlbmRbMV07XG4gICAgICAgIGFkdmFuY2UoZW5kWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoLmVuZCA9IGluZGV4O1xuICAgICAgICByZXR1cm4gbWF0Y2hcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVTdGFydFRhZyAobWF0Y2gpIHtcbiAgICB2YXIgdGFnTmFtZSA9IG1hdGNoLnRhZ05hbWU7XG4gICAgdmFyIHVuYXJ5U2xhc2ggPSBtYXRjaC51bmFyeVNsYXNoO1xuXG4gICAgaWYgKGV4cGVjdEhUTUwpIHtcbiAgICAgIGlmIChsYXN0VGFnID09PSAncCcgJiYgaXNOb25QaHJhc2luZ1RhZyh0YWdOYW1lKSkge1xuICAgICAgICBwYXJzZUVuZFRhZyhsYXN0VGFnKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYW5CZUxlZnRPcGVuVGFnJCQxKHRhZ05hbWUpICYmIGxhc3RUYWcgPT09IHRhZ05hbWUpIHtcbiAgICAgICAgcGFyc2VFbmRUYWcodGFnTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVuYXJ5ID0gaXNVbmFyeVRhZyQkMSh0YWdOYW1lKSB8fCAhIXVuYXJ5U2xhc2g7XG5cbiAgICB2YXIgbCA9IG1hdGNoLmF0dHJzLmxlbmd0aDtcbiAgICB2YXIgYXR0cnMgPSBuZXcgQXJyYXkobCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhcmdzID0gbWF0Y2guYXR0cnNbaV07XG4gICAgICB2Y
33378XIgdmFsdWUgPSBhcmdzWzNdIHx8IGFyZ3NbNF0gfHwgYXJnc1s1XSB8fCAnJztcbiAgICAgIHZhciBzaG91bGREZWNvZGVOZXdsaW5lcyA9IHRhZ05hbWUgPT09ICdhJyAmJiBhcmdzWzFdID09PSAnaHJlZidcbiAgICAgICAgPyBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZlxuICAgICAgICA6IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXM7XG4gICAgICBhdHRyc1tpXSA9IHtcbiAgICAgICAgbmFtZTogYXJnc1sxXSxcbiAgICAgICAgdmFsdWU6IGRlY29kZUF0dHIodmFsdWUsIHNob3VsZERlY29kZU5ld2xpbmVzKVxuICAgICAgfTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgYXR0cnNbaV0uc3RhcnQgPSBhcmdzLnN0YXJ0ICsgYXJnc1swXS5tYXRjaCgvXlxccyovKS5sZW5ndGg7XG4gICAgICAgIGF0dHJzW2ldLmVuZCA9IGFyZ3MuZW5kO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdW5hcnkpIHtcbiAgICAgIHN0YWNrLnB1c2goeyB0YWc6IHRhZ05hbWUsIGxvd2VyQ2FzZWRUYWc6IHRhZ05hbWUudG9Mb3dlckNhc2UoKSwgYXR0cnM6IGF0dHJzLCBzdGFydDogbWF0Y2guc3RhcnQsIGVuZDogbWF0Y2guZW5kIH0pO1xuICAgICAgbGFzdFRhZyA9IHRhZ05hbWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgIG9wdGlvbnMuc3RhcnQodGFnTmFtZSwgYXR0cnMsIHVuYXJ5LCBtYXRjaC5zdGFydCwgbWF0Y2guZW5kKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUVuZFRhZyAodGFnTmFtZSwgc3RhcnQsIGVuZCkge1xuICAgIHZhciBwb3MsIGxvd2VyQ2FzZWRUYWdOYW1lO1xuICAgIGlmIChzdGFydCA9PSBudWxsKSB7IHN0YXJ0ID0gaW5kZXg7IH1cbiAgICBpZiAoZW5kID09IG51bGwpIHsgZW5kID0gaW5kZXg7IH1cblxuICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3Qgb3BlbmVkIHRhZyBvZiB0aGUgc2FtZSB0eXBlXG4gICAgaWYgKHRhZ05hbWUpIHtcbiAgICAgIGxvd2VyQ2FzZWRUYWdOYW1lID0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgZm9yIChwb3MgPSBzdGFjay5sZW5ndGggLSAxOyBwb3MgPj0gMDsgcG9zLS0pIHtcbiAgICAgICAgaWYgKHN0YWNrW3Bvc10ubG93ZXJDYXNlZFRhZyA9PT0gbG93ZXJDYXNlZFRhZ05hbWUpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIHRhZyBuYW1lIGlzIHByb3ZpZGVkLCBjbGVhbiBzaG9wXG4gICAgICBwb3MgPSAwO1xuICAgIH1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgLy8gQ2xvc2UgYWxsIHRoZSBvcGVuIGVsZW1lbnRzLCB1cCB0aGUgc3RhY2tcbiAgICAgIGZvciAodmFyIGkgPSBzdGFjay5sZW5ndGggLSAxOyBpID49IHBvczsgaS0tKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgKGkgPiBwb3MgfHwgIXRhZ05hbWUpICYmXG4gICAgICAgICAgb3B0aW9ucy53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgIG9wdGlvbnMud2FybihcbiAgICAgICAgICAgIChcInRhZyA8XCIgKyAoc3RhY2tbaV0udGFnKSArIFwiPiBoYXMgbm8gbWF0Y2hpbmcgZW5kIHRhZy5cIiksXG4gICAgICAgICAgICB7IHN0YXJ0OiBzdGFja1tpXS5zdGFydCwgZW5kOiBzdGFja1tpXS5lbmQgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5kKSB7XG4gICAgICAgICAgb3B0aW9ucy5lbmQoc3RhY2tbaV0udGFnLCBzdGFydCwgZW5kKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgdGhlIG9wZW4gZWxlbWVudHMgZnJvbSB0aGUgc3RhY2tcbiAgICAgIHN0YWNrLmxlbmd0aCA9IHBvcztcbiAgICAgIGxhc3RUYWcgPSBwb3MgJiYgc3RhY2tbcG9zIC0gMV0udGFnO1xuICAgIH0gZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdicicpIHtcbiAgICAgIGlmIChvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgIG9wdGlvbnMuc3RhcnQodGFnTmFtZSwgW10sIHRydWUsIHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdwJykge1xuICAgICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBbXSwgZmFsc2UsIHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuZW5kKSB7XG4gICAgICAgIG9wdGlvbnMuZW5kKHRhZ05hbWUsIHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIG9uUkUgPSAvXkB8XnYtb246LztcbnZhciBkaXJSRSA9IC9edi18XkB8Xjp8XiMvO1xudmFyIGZvckFsaWFzUkUgPSAvKFtcXHNcXFNdKj8pXFxzKyg/OmlufG9mKVxccysoW1xcc1xcU10qKS87XG52YXIgZm9ySXRlcmF0b3JSRSA9IC8sKFteLFxcfVxcXV0qKSg/OiwoW14sXFx9XFxdXSopKT8kLztcbnZhciBzdHJpcFBhcmVuc1JFID0gL15cXCh8XFwpJC9nO1xudmFyIGR5bmFtaWNBcmdSRSA9IC9eXFxbLipcXF0kLztcblxudmFyIGFyZ1JFID0gLzooLiopJC87XG52YXIgYmluZFJFID0gL146fF5cXC58XnYtYmluZDovO1xudmFyIG1vZGlmaWVyUkUgPSAvXFwuW14uXFxdXSsoPz1bXlxcXV0qJCkvZztcblxudmFyIHNsb3RSRSA9IC9edi1zbG90KDp8JCl8XiMvO1xuXG52YXIgbGluZUJyZWFrUkUgPSAvW1xcclxcbl0vO1xudmFyIHdoaXRlc3BhY2VSRSQxID0gL1xccysvZztcblxudmFyIGludmFsaWRBdHRyaWJ1dGVSRSA9IC9bXFxzXCInPD5cXC89XS87XG5cbnZhciBkZWNvZGVIVE1MQ2FjaGVkID0gY2FjaGVkKGhlLmRlY29kZSk7XG5cbnZhciBlbXB0eVNsb3RTY29wZVRva2VuID0gXCJfZW1wdHlfXCI7XG5cbi8vIGNvbmZpZ3VyYWJsZSBzdGF0ZVxudmFyIHdhcm4kMjtcbnZhciBkZWxpbWl0ZXJzO1xudmFyIHRyYW5zZm9ybXM7XG52YXIgcHJlVHJhbnNmb3JtcztcbnZhciBwb3N0VHJhbnNmb3JtcztcbnZhciBwbGF0Zm9ybUlzUHJlVGFnO1xudmFyIHBsYXRmb3JtTXVzdFVzZVByb3A7XG52YXIgcGxhdGZvcm1HZXRUYWdOYW1lc3BhY2U7XG52YXIgbWF5YmVDb21wb25lbnQ7XG5cbmZ1bmN0aW9uIGNyZWF0ZUFTVEVsZW1lbnQgKFxuICB0YWcsXG4gIGF0dHJzLFxuICBwYXJlbnRcbikge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IDEsXG4gICAgdGFnOiB0YWcsXG4gICAgYXR0cnNMaXN0OiBhdHRycyxcbiAgICBhdHRyc01hcDogbWFrZUF0dHJzTWFwKGF0dHJzKSxcbiAgICByYXdBdHRyc01hcDoge30sXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgY2hpbGRyZW46IFtdXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IEhUTUwgc3RyaW5nIHRvIEFTVC5cbiAqL1xuZnVuY3Rpb24gcGFyc2UgKFxuICB0ZW1wbGF0ZSxcbiAgb3B0aW9uc1xuKSB7XG4gIHdhcm4kMiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcblxuICBwbGF0Zm9ybUlzUHJlVGFnID0gb3B0aW9ucy5pc1ByZVRhZyB8fCBubztcbiAgcGxhdGZvcm1NdXN0VXNlUHJvcCA9IG9wdGlvbnMubXVzdFVzZVByb3AgfHwgbm87XG4gIHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlID0gb3B0aW9ucy5nZXRUYWdOYW1lc3BhY2UgfHwgbm87XG4gIHZhciBpc1Jlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICBtYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gISFlbC5jb21wb25lbnQgfHwgIWlzUmVzZXJ2ZWRUYWcoZWwudGFnKTsgfTtcblxuICB0cmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICd0cmFuc2Zvcm1Ob2RlJyk7XG4gIHByZVRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3ByZVRyYW5zZm9ybU5vZGUnKTtcbiAgcG9zdFRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3Bvc3RUcmFuc2Zvcm1Ob2RlJyk7XG5cbiAgZGVsaW1pdGVycyA9IG9wdGlvbnMuZGVsaW1pdGVycztcblxuICB2Y
33378XIgc3RhY2sgPSBbXTtcbiAgdmFyIHByZXNlcnZlV2hpdGVzcGFjZSA9IG9wdGlvbnMucHJlc2VydmVXaGl0ZXNwYWNlICE9PSBmYWxzZTtcbiAgdmFyIHdoaXRlc3BhY2VPcHRpb24gPSBvcHRpb25zLndoaXRlc3BhY2U7XG4gIHZhciByb290O1xuICB2YXIgY3VycmVudFBhcmVudDtcbiAgdmFyIGluVlByZSA9IGZhbHNlO1xuICB2YXIgaW5QcmUgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHdhcm5PbmNlIChtc2csIHJhbmdlKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgICB3YXJuJDIobXNnLCByYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VFbGVtZW50IChlbGVtZW50KSB7XG4gICAgdHJpbUVuZGluZ1doaXRlc3BhY2UoZWxlbWVudCk7XG4gICAgaWYgKCFpblZQcmUgJiYgIWVsZW1lbnQucHJvY2Vzc2VkKSB7XG4gICAgICBlbGVtZW50ID0gcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIHRyZWUgbWFuYWdlbWVudFxuICAgIGlmICghc3RhY2subGVuZ3RoICYmIGVsZW1lbnQgIT09IHJvb3QpIHtcbiAgICAgIC8vIGFsbG93IHJvb3QgZWxlbWVudHMgd2l0aCB2LWlmLCB2LWVsc2UtaWYgYW5kIHYtZWxzZVxuICAgICAgaWYgKHJvb3QuaWYgJiYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjaGVja1Jvb3RDb25zdHJhaW50cyhlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRJZkNvbmRpdGlvbihyb290LCB7XG4gICAgICAgICAgZXhwOiBlbGVtZW50LmVsc2VpZixcbiAgICAgICAgICBibG9jazogZWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICBcIkNvbXBvbmVudCB0ZW1wbGF0ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9uZSByb290IGVsZW1lbnQuIFwiICtcbiAgICAgICAgICBcIklmIHlvdSBhcmUgdXNpbmcgdi1pZiBvbiBtdWx0aXBsZSBlbGVtZW50cywgXCIgK1xuICAgICAgICAgIFwidXNlIHYtZWxzZS1pZiB0byBjaGFpbiB0aGVtIGluc3RlYWQuXCIsXG4gICAgICAgICAgeyBzdGFydDogZWxlbWVudC5zdGFydCB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjdXJyZW50UGFyZW50ICYmICFlbGVtZW50LmZvcmJpZGRlbikge1xuICAgICAgaWYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkge1xuICAgICAgICBwcm9jZXNzSWZDb25kaXRpb25zKGVsZW1lbnQsIGN1cnJlbnRQYXJlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuc2xvdFNjb3BlKSB7XG4gICAgICAgICAgLy8gc2NvcGVkIHNsb3RcbiAgICAgICAgICAvLyBrZWVwIGl0IGluIHRoZSBjaGlsZHJlbiBsaXN0IHNvIHRoYXQgdi1lbHNlKC1pZikgY29uZGl0aW9ucyBjYW5cbiAgICAgICAgICAvLyBmaW5kIGl0IGFzIHRoZSBwcmV2IG5vZGUuXG4gICAgICAgICAgdmFyIG5hbWUgPSBlbGVtZW50LnNsb3RUYXJnZXQgfHwgJ1wiZGVmYXVsdFwiJ1xuICAgICAgICAgIDsoY3VycmVudFBhcmVudC5zY29wZWRTbG90cyB8fCAoY3VycmVudFBhcmVudC5zY29wZWRTbG90cyA9IHt9KSlbbmFtZV0gPSBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRQYXJlbnQuY2hpbGRyZW4ucHVzaChlbGVtZW50KTtcbiAgICAgICAgZWxlbWVudC5wYXJlbnQgPSBjdXJyZW50UGFyZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZpbmFsIGNoaWxkcmVuIGNsZWFudXBcbiAgICAvLyBmaWx0ZXIgb3V0IHNjb3BlZCBzbG90c1xuICAgIGVsZW1lbnQuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykgeyByZXR1cm4gIShjKS5zbG90U2NvcGU7IH0pO1xuICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIG5vZGUgYWdhaW5cbiAgICB0cmltRW5kaW5nV2hpdGVzcGFjZShlbGVtZW50KTtcblxuICAgIC8vIGNoZWNrIHByZSBzdGF0ZVxuICAgIGlmIChlbGVtZW50LnByZSkge1xuICAgICAgaW5WUHJlID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwbGF0Zm9ybUlzUHJlVGFnKGVsZW1lbnQudGFnKSkge1xuICAgICAgaW5QcmUgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gYXBwbHkgcG9zdC10cmFuc2Zvcm1zXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3N0VHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgcG9zdFRyYW5zZm9ybXNbaV0oZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJpbUVuZGluZ1doaXRlc3BhY2UgKGVsKSB7XG4gICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugbm9kZVxuICAgIGlmICghaW5QcmUpIHtcbiAgICAgIHZhciBsYXN0Tm9kZTtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgKGxhc3ROb2RlID0gZWwuY2hpbGRyZW5bZWwuY2hpbGRyZW4ubGVuZ3RoIC0gMV0pICYmXG4gICAgICAgIGxhc3ROb2RlLnR5cGUgPT09IDMgJiZcbiAgICAgICAgbGFzdE5vZGUudGV4dCA9PT0gJyAnXG4gICAgICApIHtcbiAgICAgICAgZWwuY2hpbGRyZW4ucG9wKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tSb290Q29uc3RyYWludHMgKGVsKSB7XG4gICAgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnIHx8IGVsLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgd2Fybk9uY2UoXG4gICAgICAgIFwiQ2Fubm90IHVzZSA8XCIgKyAoZWwudGFnKSArIFwiPiBhcyBjb21wb25lbnQgcm9vdCBlbGVtZW50IGJlY2F1c2UgaXQgbWF5IFwiICtcbiAgICAgICAgJ2NvbnRhaW4gbXVsdGlwbGUgbm9kZXMuJyxcbiAgICAgICAgeyBzdGFydDogZWwuc3RhcnQgfVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGVsLmF0dHJzTWFwLmhhc093blByb3BlcnR5KCd2LWZvcicpKSB7XG4gICAgICB3YXJuT25jZShcbiAgICAgICAgJ0Nhbm5vdCB1c2Ugdi1mb3Igb24gc3RhdGVmdWwgY29tcG9uZW50IHJvb3QgZWxlbWVudCBiZWNhdXNlICcgK1xuICAgICAgICAnaXQgcmVuZGVycyBtdWx0aXBsZSBlbGVtZW50cy4nLFxuICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1mb3InXVxuICAgICAgKTtcbiAgICB9XG4gI
33378H1cblxuICBwYXJzZUhUTUwodGVtcGxhdGUsIHtcbiAgICB3YXJuOiB3YXJuJDIsXG4gICAgZXhwZWN0SFRNTDogb3B0aW9ucy5leHBlY3RIVE1MLFxuICAgIGlzVW5hcnlUYWc6IG9wdGlvbnMuaXNVbmFyeVRhZyxcbiAgICBjYW5CZUxlZnRPcGVuVGFnOiBvcHRpb25zLmNhbkJlTGVmdE9wZW5UYWcsXG4gICAgc2hvdWxkRGVjb2RlTmV3bGluZXM6IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXMsXG4gICAgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixcbiAgICBzaG91bGRLZWVwQ29tbWVudDogb3B0aW9ucy5jb21tZW50cyxcbiAgICBvdXRwdXRTb3VyY2VSYW5nZTogb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSxcbiAgICBzdGFydDogZnVuY3Rpb24gc3RhcnQgKHRhZywgYXR0cnMsIHVuYXJ5LCBzdGFydCQxLCBlbmQpIHtcbiAgICAgIC8vIGNoZWNrIG5hbWVzcGFjZS5cbiAgICAgIC8vIGluaGVyaXQgcGFyZW50IG5zIGlmIHRoZXJlIGlzIG9uZVxuICAgICAgdmFyIG5zID0gKGN1cnJlbnRQYXJlbnQgJiYgY3VycmVudFBhcmVudC5ucykgfHwgcGxhdGZvcm1HZXRUYWdOYW1lc3BhY2UodGFnKTtcblxuICAgICAgLy8gaGFuZGxlIElFIHN2ZyBidWdcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGlzSUUgJiYgbnMgPT09ICdzdmcnKSB7XG4gICAgICAgIGF0dHJzID0gZ3VhcmRJRVNWR0J1ZyhhdHRycyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbGVtZW50ID0gY3JlYXRlQVNURWxlbWVudCh0YWcsIGF0dHJzLCBjdXJyZW50UGFyZW50KTtcbiAgICAgIGlmIChucykge1xuICAgICAgICBlbGVtZW50Lm5zID0gbnM7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgZWxlbWVudC5zdGFydCA9IHN0YXJ0JDE7XG4gICAgICAgICAgZWxlbWVudC5lbmQgPSBlbmQ7XG4gICAgICAgICAgZWxlbWVudC5yYXdBdHRyc01hcCA9IGVsZW1lbnQuYXR0cnNMaXN0LnJlZHVjZShmdW5jdGlvbiAoY3VtdWxhdGVkLCBhdHRyKSB7XG4gICAgICAgICAgICBjdW11bGF0ZWRbYXR0ci5uYW1lXSA9IGF0dHI7XG4gICAgICAgICAgICByZXR1cm4gY3VtdWxhdGVkXG4gICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIGF0dHJzLmZvckVhY2goZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgICBpZiAoaW52YWxpZEF0dHJpYnV0ZVJFLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICBcIkludmFsaWQgZHluYW1pYyBhcmd1bWVudCBleHByZXNzaW9uOiBhdHRyaWJ1dGUgbmFtZXMgY2Fubm90IGNvbnRhaW4gXCIgK1xuICAgICAgICAgICAgICBcInNwYWNlcywgcXVvdGVzLCA8LCA+LCAvIG9yID0uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydDogYXR0ci5zdGFydCArIGF0dHIubmFtZS5pbmRleE9mKFwiW1wiKSxcbiAgICAgICAgICAgICAgICBlbmQ6IGF0dHIuc3RhcnQgKyBhdHRyLm5hbWUubGVuZ3RoXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRm9yYmlkZGVuVGFnKGVsZW1lbnQpICYmICFpc1NlcnZlclJlbmRlcmluZygpKSB7XG4gICAgICAgIGVsZW1lbnQuZm9yYmlkZGVuID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuJDIoXG4gICAgICAgICAgJ1RlbXBsYXRlcyBzaG91bGQgb25seSBiZSByZXNwb25zaWJsZSBmb3IgbWFwcGluZyB0aGUgc3RhdGUgdG8gdGhlICcgK1xuICAgICAgICAgICdVSS4gQXZvaWQgcGxhY2luZyB0YWdzIHdpdGggc2lkZS1lZmZlY3RzIGluIHlvdXIgdGVtcGxhdGVzLCBzdWNoIGFzICcgK1xuICAgICAgICAgIFwiPFwiICsgdGFnICsgXCI+XCIgKyAnLCBhcyB0aGV5IHdpbGwgbm90IGJlIHBhcnNlZC4nLFxuICAgICAgICAgIHsgc3RhcnQ6IGVsZW1lbnQuc3RhcnQgfVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBhcHBseSBwcmUtdHJhbnNmb3Jtc1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVUcmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsZW1lbnQgPSBwcmVUcmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpIHx8IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghaW5WUHJlKSB7XG4gICAgICAgIHByb2Nlc3NQcmUoZWxlbWVudCk7XG4gICAgICAgIGlmIChlbGVtZW50LnByZSkge1xuICAgICAgICAgIGluVlByZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwbGF0Zm9ybUlzUHJlVGFnKGVsZW1lbnQudGFnKSkge1xuICAgICAgICBpblByZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaW5WUHJlKSB7XG4gICAgICAgIHByb2Nlc3NSYXdBdHRycyhlbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoIWVsZW1lbnQucHJvY2Vzc2VkKSB7XG4gICAgICAgIC8vIHN0cnVjdHVyYWwgZGlyZWN0aXZlc1xuICAgICAgICBwcm9jZXNzRm9yKGVsZW1lbnQpO1xuICAgICAgICBwcm9jZXNzSWYoZWxlbWVudCk7XG4gICAgICAgIHByb2Nlc3NPbmNlKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJvb3QpIHtcbiAgICAgICAgcm9vdCA9IGVsZW1lbnQ7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY2hlY2tSb290Q29uc3RyYWludHMocm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1bmFyeSkge1xuICAgICAgICBjdXJyZW50UGFyZW50ID0gZWxlbWVudDtcbiAgICAgICAgc3RhY2sucHVzaChlbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsb3NlRWxlbWVudChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW5kOiBmdW5jdGlvbiBlbmQgKHRhZywgc3RhcnQsIGVuZCQxKSB7XG4gICAgICB2Y
33378XIgZWxlbWVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgLy8gcG9wIHN0YWNrXG4gICAgICBzdGFjay5sZW5ndGggLT0gMTtcbiAgICAgIGN1cnJlbnRQYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgZWxlbWVudC5lbmQgPSBlbmQkMTtcbiAgICAgIH1cbiAgICAgIGNsb3NlRWxlbWVudChlbGVtZW50KTtcbiAgICB9LFxuXG4gICAgY2hhcnM6IGZ1bmN0aW9uIGNoYXJzICh0ZXh0LCBzdGFydCwgZW5kKSB7XG4gICAgICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBpZiAodGV4dCA9PT0gdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAnQ29tcG9uZW50IHRlbXBsYXRlIHJlcXVpcmVzIGEgcm9vdCBlbGVtZW50LCByYXRoZXIgdGhhbiBqdXN0IHRleHQuJyxcbiAgICAgICAgICAgICAgeyBzdGFydDogc3RhcnQgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCh0ZXh0ID0gdGV4dC50cmltKCkpKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgICAgKFwidGV4dCBcXFwiXCIgKyB0ZXh0ICsgXCJcXFwiIG91dHNpZGUgcm9vdCBlbGVtZW50IHdpbGwgYmUgaWdub3JlZC5cIiksXG4gICAgICAgICAgICAgIHsgc3RhcnQ6IHN0YXJ0IH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gSUUgdGV4dGFyZWEgcGxhY2Vob2xkZXIgYnVnXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpc0lFICYmXG4gICAgICAgIGN1cnJlbnRQYXJlbnQudGFnID09PSAndGV4dGFyZWEnICYmXG4gICAgICAgIGN1cnJlbnRQYXJlbnQuYXR0cnNNYXAucGxhY2Vob2xkZXIgPT09IHRleHRcbiAgICAgICkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHZhciBjaGlsZHJlbiA9IGN1cnJlbnRQYXJlbnQuY2hpbGRyZW47XG4gICAgICBpZiAoaW5QcmUgfHwgdGV4dC50cmltKCkpIHtcbiAgICAgICAgdGV4dCA9IGlzVGV4dFRhZyhjdXJyZW50UGFyZW50KSA/IHRleHQgOiBkZWNvZGVIVE1MQ2FjaGVkKHRleHQpO1xuICAgICAgfSBlbHNlIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgd2hpdGVzcGFjZS1vbmx5IG5vZGUgcmlnaHQgYWZ0ZXIgYW4gb3BlbmluZyB0YWdcbiAgICAgICAgdGV4dCA9ICcnO1xuICAgICAgfSBlbHNlIGlmICh3aGl0ZXNwYWNlT3B0aW9uKSB7XG4gICAgICAgIGlmICh3aGl0ZXNwYWNlT3B0aW9uID09PSAnY29uZGVuc2UnKSB7XG4gICAgICAgICAgLy8gaW4gY29uZGVuc2UgbW9kZSwgcmVtb3ZlIHRoZSB3aGl0ZXNwYWNlIG5vZGUgaWYgaXQgY29udGFpbnNcbiAgICAgICAgICAvLyBsaW5lIGJyZWFrLCBvdGhlcndpc2UgY29uZGVuc2UgdG8gYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgICB0ZXh0ID0gbGluZUJyZWFrUkUudGVzdCh0ZXh0KSA/ICcnIDogJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHQgPSAnICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgPSBwcmVzZXJ2ZVdoaXRlc3BhY2UgPyAnICcgOiAnJztcbiAgICAgIH1cbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGlmICghaW5QcmUgJiYgd2hpdGVzcGFjZU9wdGlvbiA9PT0gJ2NvbmRlbnNlJykge1xuICAgICAgICAgIC8vIGNvbmRlbnNlIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2VzIGludG8gc2luZ2xlIHNwYWNlXG4gICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSh3aGl0ZXNwYWNlUkUkMSwgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB2Y
33378XIgcmVzO1xuICAgICAgICB2YXIgY2hpbGQ7XG4gICAgICAgIGlmICghaW5WUHJlICYmIHRleHQgIT09ICcgJyAmJiAocmVzID0gcGFyc2VUZXh0KHRleHQsIGRlbGltaXRlcnMpKSkge1xuICAgICAgICAgIGNoaWxkID0ge1xuICAgICAgICAgICAgdHlwZTogMixcbiAgICAgICAgICAgIGV4cHJlc3Npb246IHJlcy5leHByZXNzaW9uLFxuICAgICAgICAgICAgdG9rZW5zOiByZXMudG9rZW5zLFxuICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAodGV4dCAhPT0gJyAnIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udGV4dCAhPT0gJyAnKSB7XG4gICAgICAgICAgY2hpbGQgPSB7XG4gICAgICAgICAgICB0eXBlOiAzLFxuICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgY2hpbGQuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgIGNoaWxkLmVuZCA9IGVuZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbW1lbnQ6IGZ1bmN0aW9uIGNvbW1lbnQgKHRleHQsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIC8vIGFkZGluZyBhbnl0aW5nIGFzIGEgc2libGluZyB0byB0aGUgcm9vdCBub2RlIGlzIGZvcmJpZGRlblxuICAgICAgLy8gY29tbWVudHMgc2hvdWxkIHN0aWxsIGJlIGFsbG93ZWQsIGJ1dCBpZ25vcmVkXG4gICAgICBpZiAoY3VycmVudFBhcmVudCkge1xuICAgICAgICB2Y
33378XIgY2hpbGQgPSB7XG4gICAgICAgICAgdHlwZTogMyxcbiAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIGlzQ29tbWVudDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgY2hpbGQuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICBjaGlsZC5lbmQgPSBlbmQ7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudFBhcmVudC5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcm9vdFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzUHJlIChlbCkge1xuICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtcHJlJykgIT0gbnVsbCkge1xuICAgIGVsLnByZSA9IHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1Jhd0F0dHJzIChlbCkge1xuICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgdmFyIGxlbiA9IGxpc3QubGVuZ3RoO1xuICBpZiAobGVuKSB7XG4gICAgdmFyIGF0dHJzID0gZWwuYXR0cnMgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhdHRyc1tpXSA9IHtcbiAgICAgICAgbmFtZTogbGlzdFtpXS5uYW1lLFxuICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkobGlzdFtpXS52YWx1ZSlcbiAgICAgIH07XG4gICAgICBpZiAobGlzdFtpXS5zdGFydCAhPSBudWxsKSB7XG4gICAgICAgIGF0dHJzW2ldLnN0YXJ0ID0gbGlzdFtpXS5zdGFydDtcbiAgICAgICAgYXR0cnNbaV0uZW5kID0gbGlzdFtpXS5lbmQ7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKCFlbC5wcmUpIHtcbiAgICAvLyBub24gcm9vdCBub2RlIGluIHByZSBibG9ja3Mgd2l0aCBubyBhdHRyaWJ1dGVzXG4gICAgZWwucGxhaW4gPSB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NFbGVtZW50IChcbiAgZWxlbWVudCxcbiAgb3B0aW9uc1xuKSB7XG4gIHByb2Nlc3NLZXkoZWxlbWVudCk7XG5cbiAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIHBsYWluIGVsZW1lbnQgYWZ0ZXJcbiAgLy8gcmVtb3Zpbmcgc3RydWN0dXJhbCBhdHRyaWJ1dGVzXG4gIGVsZW1lbnQucGxhaW4gPSAoXG4gICAgIWVsZW1lbnQua2V5ICYmXG4gICAgIWVsZW1lbnQuc2NvcGVkU2xvdHMgJiZcbiAgICAhZWxlbWVudC5hdHRyc0xpc3QubGVuZ3RoXG4gICk7XG5cbiAgcHJvY2Vzc1JlZihlbGVtZW50KTtcbiAgcHJvY2Vzc1Nsb3RDb250ZW50KGVsZW1lbnQpO1xuICBwcm9jZXNzU2xvdE91dGxldChlbGVtZW50KTtcbiAgcHJvY2Vzc0NvbXBvbmVudChlbGVtZW50KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgZWxlbWVudCA9IHRyYW5zZm9ybXNbaV0oZWxlbWVudCwgb3B0aW9ucykgfHwgZWxlbWVudDtcbiAgfVxuICBwcm9jZXNzQXR0cnMoZWxlbWVudCk7XG4gIHJldHVybiBlbGVtZW50XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NLZXkgKGVsKSB7XG4gIHZhciBleHAgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2tleScpO1xuICBpZiAoZXhwKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgd2FybiQyKFxuICAgICAgICAgIFwiPHRlbXBsYXRlPiBjYW5ub3QgYmUga2V5ZWQuIFBsYWNlIHRoZSBrZXkgb24gcmVhbCBlbGVtZW50cyBpbnN0ZWFkLlwiLFxuICAgICAgICAgIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAna2V5JylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbC5mb3IpIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gZWwuaXRlcmF0b3IyIHx8IGVsLml0ZXJhdG9yMTtcbiAgICAgICAgdmFyIHBhcmVudCA9IGVsLnBhcmVudDtcbiAgICAgICAgaWYgKGl0ZXJhdG9yICYmIGl0ZXJhdG9yID09PSBleHAgJiYgcGFyZW50ICYmIHBhcmVudC50YWcgPT09ICd0cmFuc2l0aW9uLWdyb3VwJykge1xuICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgIFwiRG8gbm90IHVzZSB2LWZvciBpbmRleCBhcyBrZXkgb24gPHRyYW5zaXRpb24tZ3JvdXA+IGNoaWxkcmVuLCBcIiArXG4gICAgICAgICAgICBcInRoaXMgaXMgdGhlIHNhbWUgYXMgbm90IHVzaW5nIGtleXMuXCIsXG4gICAgICAgICAgICBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpLFxuICAgICAgICAgICAgdHJ1ZSAvKiB0aXAgKi9cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsLmtleSA9IGV4cDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzUmVmIChlbCkge1xuICB2YXIgcmVmID0gZ2V0QmluZGluZ0F0dHIoZWwsICdyZWYnKTtcbiAgaWYgKHJlZikge1xuICAgIGVsLnJlZiA9IHJlZjtcbiAgICBlbC5yZWZJbkZvciA9IGNoZWNrSW5Gb3IoZWwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NGb3IgKGVsKSB7XG4gIHZhciBleHA7XG4gIGlmICgoZXhwID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZm9yJykpKSB7XG4gICAgdmFyIHJlcyA9IHBhcnNlRm9yKGV4cCk7XG4gICAgaWYgKHJlcykge1xuICAgICAgZXh0ZW5kKGVsLCByZXMpO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybiQyKFxuICAgICAgICAoXCJJbnZhbGlkIHYtZm9yIGV4cHJlc3Npb246IFwiICsgZXhwKSxcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ11cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cblxuXG5mdW5jdGlvbiBwYXJzZUZvciAoZXhwKSB7XG4gIHZhciBpbk1hdGNoID0gZXhwLm1hdGNoKGZvckFsaWFzUkUpO1xuICBpZiAoIWluTWF0Y2gpIHsgcmV0dXJuIH1cbiAgdmFyIHJlcyA9IHt9O1xuICByZXMuZm9yID0gaW5NYXRjaFsyXS50cmltKCk7XG4gIHZhciBhbGlhcyA9IGluTWF0Y2hbMV0udHJpbSgpLnJlcGxhY2Uoc3RyaXBQYXJlbnNSRSwgJycpO1xuICB2YXIgaXRlcmF0b3JNYXRjaCA9IGFsaWFzLm1hdGNoKGZvckl0ZXJhdG9yUkUpO1xuICBpZiAoaXRlcmF0b3JNYXRjaCkge1xuICAgIHJlcy5hbGlhcyA9IGFsaWFzLnJlcGxhY2UoZm9ySXRlcmF0b3JSRSwgJycpLnRyaW0oKTtcbiAgICByZXMuaXRlcmF0b3IxID0gaXRlcmF0b3JNYXRjaFsxXS50cmltKCk7XG4gICAgaWYgKGl0ZXJhdG9yTWF0Y2hbMl0pIHtcbiAgICAgIHJlcy5pdGVyYXRvcjIgPSBpdGVyYXRvck1hdGNoWzJdLnRyaW0oKTtcbiAgICB9XG4gI
33378H0gZWxzZSB7XG4gICAgcmVzLmFsaWFzID0gYWxpYXM7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzSWYgKGVsKSB7XG4gIHZhciBleHAgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicpO1xuICBpZiAoZXhwKSB7XG4gICAgZWwuaWYgPSBleHA7XG4gICAgYWRkSWZDb25kaXRpb24oZWwsIHtcbiAgICAgIGV4cDogZXhwLFxuICAgICAgYmxvY2s6IGVsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWVsc2UnKSAhPSBudWxsKSB7XG4gICAgICBlbC5lbHNlID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGVsc2VpZiA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWVsc2UtaWYnKTtcbiAgICBpZiAoZWxzZWlmKSB7XG4gICAgICBlbC5lbHNlaWYgPSBlbHNlaWY7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NJZkNvbmRpdGlvbnMgKGVsLCBwYXJlbnQpIHtcbiAgdmFyIHByZXYgPSBmaW5kUHJldkVsZW1lbnQocGFyZW50LmNoaWxkcmVuKTtcbiAgaWYgKHByZXYgJiYgcHJldi5pZikge1xuICAgIGFkZElmQ29uZGl0aW9uKHByZXYsIHtcbiAgICAgIGV4cDogZWwuZWxzZWlmLFxuICAgICAgYmxvY2s6IGVsXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4kMihcbiAgICAgIFwidi1cIiArIChlbC5lbHNlaWYgPyAoJ2Vsc2UtaWY9XCInICsgZWwuZWxzZWlmICsgJ1wiJykgOiAnZWxzZScpICsgXCIgXCIgK1xuICAgICAgXCJ1c2VkIG9uIGVsZW1lbnQgPFwiICsgKGVsLnRhZykgKyBcIj4gd2l0aG91dCBjb3JyZXNwb25kaW5nIHYtaWYuXCIsXG4gICAgICBlbC5yYXdBdHRyc01hcFtlbC5lbHNlaWYgPyAndi1lbHNlLWlmJyA6ICd2LWVsc2UnXVxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZFByZXZFbGVtZW50IChjaGlsZHJlbikge1xuICB2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIGlmIChjaGlsZHJlbltpXS50eXBlID09PSAxKSB7XG4gICAgICByZXR1cm4gY2hpbGRyZW5baV1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY2hpbGRyZW5baV0udGV4dCAhPT0gJyAnKSB7XG4gICAgICAgIHdhcm4kMihcbiAgICAgICAgICBcInRleHQgXFxcIlwiICsgKGNoaWxkcmVuW2ldLnRleHQudHJpbSgpKSArIFwiXFxcIiBiZXR3ZWVuIHYtaWYgYW5kIHYtZWxzZSgtaWYpIFwiICtcbiAgICAgICAgICBcIndpbGwgYmUgaWdub3JlZC5cIixcbiAgICAgICAgICBjaGlsZHJlbltpXVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2hpbGRyZW4ucG9wKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZElmQ29uZGl0aW9uIChlbCwgY29uZGl0aW9uKSB7XG4gIGlmICghZWwuaWZDb25kaXRpb25zKSB7XG4gICAgZWwuaWZDb25kaXRpb25zID0gW107XG4gIH1cbiAgZWwuaWZDb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc09uY2UgKGVsKSB7XG4gIHZhciBvbmNlJCQxID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Ytb25jZScpO1xuICBpZiAob25jZSQkMSAhPSBudWxsKSB7XG4gICAgZWwub25jZSA9IHRydWU7XG4gIH1cbn1cblxuLy8gaGFuZGxlIGNvbnRlbnQgYmVpbmcgcGFzc2VkIHRvIGEgY29tcG9uZW50IGFzIHNsb3QsXG4vLyBlLmcuIDx0ZW1wbGF0ZSBzbG90PVwieHh4XCI+LCA8ZGl2IHNsb3Qtc2NvcGU9XCJ4eHhcIj5cbmZ1bmN0aW9uIHByb2Nlc3NTbG90Q29udGVudCAoZWwpIHtcbiAgdmFyIHNsb3RTY29wZTtcbiAgaWYgKGVsLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgIHNsb3RTY29wZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzY29wZScpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHNsb3RTY29wZSkge1xuICAgICAgd2FybiQyKFxuICAgICAgICBcInRoZSBcXFwic2NvcGVcXFwiIGF0dHJpYnV0ZSBmb3Igc2NvcGVkIHNsb3RzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFuZCBcIiArXG4gICAgICAgIFwicmVwbGFjZWQgYnkgXFxcInNsb3Qtc2NvcGVcXFwiIHNpbmNlIDIuNS4gVGhlIG5ldyBcXFwic2xvdC1zY29wZVxcXCIgYXR0cmlidXRlIFwiICtcbiAgICAgICAgXCJjYW4gYWxzbyBiZSB1c2VkIG9uIHBsYWluIGVsZW1lbnRzIGluIGFkZGl0aW9uIHRvIDx0ZW1wbGF0ZT4gdG8gXCIgK1xuICAgICAgICBcImRlbm90ZSBzY29wZWQgc2xvdHMuXCIsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwWydzY29wZSddLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgICBlbC5zbG90U2NvcGUgPSBzbG90U2NvcGUgfHwgZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Nsb3Qtc2NvcGUnKTtcbiAgfSBlbHNlIGlmICgoc2xvdFNjb3BlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Nsb3Qtc2NvcGUnKSkpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBlbC5hdHRyc01hcFsndi1mb3InXSkge1xuICAgICAgd2FybiQyKFxuICAgICAgICBcIkFtYmlndW91cyBjb21iaW5lZCB1c2FnZSBvZiBzbG90LXNjb3BlIGFuZCB2LWZvciBvbiA8XCIgKyAoZWwudGFnKSArIFwiPiBcIiArXG4gICAgICAgIFwiKHYtZm9yIHRha2VzIGhpZ2hlciBwcmlvcml0eSkuIFVzZSBhIHdyYXBwZXIgPHRlbXBsYXRlPiBmb3IgdGhlIFwiICtcbiAgICAgICAgXCJzY29wZWQgc2xvdCB0byBtYWtlIGl0IGNsZWFyZXIuXCIsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwWydzbG90LXNjb3BlJ10sXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICAgIGVsLnNsb3RTY29wZSA9IHNsb3RTY29wZTtcbiAgfVxuXG4gIC8vIHNsb3Q9XCJ4eHhcIlxuICB2YXIgc2xvdFRhcmdldCA9IGdldEJpbmRpbmdBdHRyKGVsLCAnc2xvdCcpO1xuICBpZiAoc2xvdFRhcmdldCkge1xuICAgIGVsLnNsb3RUYXJnZXQgPSBzbG90VGFyZ2V0ID09PSAnXCJcIicgPyAnXCJkZWZhdWx0XCInIDogc2xvdFRhcmdldDtcbiAgICBlbC5zbG90VGFyZ2V0RHluYW1pYyA9ICEhKGVsLmF0dHJzTWFwWyc6c2xvdCddIHx8IGVsLmF0dHJzTWFwWyd2LWJpbmQ6c2xvdCddKTtcbiAgICAvLyBwcmVzZXJ2ZSBzbG90IGFzIGFuIGF0dHJpYnV0ZSBmb3IgbmF0aXZlIHNoYWRvdyBET00gY29tcGF0XG4gICAgLy8gb25seSBmb3Igbm9uLXNjb3BlZCBzbG90cy5cbiAgICBpZiAoZWwudGFnICE9PSAndGVtcGxhdGUnICYmICFlbC5zbG90U2NvcGUpIHtcbiAgICAgIGFkZEF0dHIoZWwsICdzbG90Jywgc2xvdFRhcmdldCwgZ2V0UmF3QmluZGluZ0F0dHIoZWwsICdzbG90JykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIDIuNiB2LXNsb3Qgc3ludGF4XG4gIHtcbiAgICBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAvLyB2LXNsb3Qgb24gPHRlbXBsYXRlPlxuICAgICAgdmFyIHNsb3RCaW5kaW5nID0gZ2V0QW5kUmVtb3ZlQXR0ckJ5UmVnZXgoZWwsIHNsb3RSRSk7XG4gICAgICBpZiAoc2xvdEJpbmRpbmcpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBpZiAoZWwuc2xvdFRhcmdldCB8fCBlbC5zbG90U2NvcGUpIHtcbiAgICAgICAgICAgI
33378Hdhcm4kMihcbiAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIG1peGVkIHVzYWdlIG9mIGRpZmZlcmVudCBzbG90IHN5bnRheGVzLlwiLFxuICAgICAgICAgICAgICBlbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVsLnBhcmVudCAmJiAhbWF5YmVDb21wb25lbnQoZWwucGFyZW50KSkge1xuICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICBcIjx0ZW1wbGF0ZSB2LXNsb3Q+IGNhbiBvbmx5IGFwcGVhciBhdCB0aGUgcm9vdCBsZXZlbCBpbnNpZGUgXCIgK1xuICAgICAgICAgICAgICBcInRoZSByZWNlaXZpbmcgY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgIGVsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVmID0gZ2V0U2xvdE5hbWUoc2xvdEJpbmRpbmcpO1xuICAgICAgICB2YXIgbmFtZSA9IHJlZi5uYW1lO1xuICAgICAgICB2YXIgZHluYW1pYyA9IHJlZi5keW5hbWljO1xuICAgICAgICBlbC5zbG90VGFyZ2V0ID0gbmFtZTtcbiAgICAgICAgZWwuc2xvdFRhcmdldER5bmFtaWMgPSBkeW5hbWljO1xuICAgICAgICBlbC5zbG90U2NvcGUgPSBzbG90QmluZGluZy52YWx1ZSB8fCBlbXB0eVNsb3RTY29wZVRva2VuOyAvLyBmb3JjZSBpdCBpbnRvIGEgc2NvcGVkIHNsb3QgZm9yIHBlcmZcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdi1zbG90IG9uIGNvbXBvbmVudCwgZGVub3RlcyBkZWZhdWx0IHNsb3RcbiAgICAgIHZhciBzbG90QmluZGluZyQxID0gZ2V0QW5kUmVtb3ZlQXR0ckJ5UmVnZXgoZWwsIHNsb3RSRSk7XG4gICAgICBpZiAoc2xvdEJpbmRpbmckMSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGlmICghbWF5YmVDb21wb25lbnQoZWwpKSB7XG4gICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgIFwidi1zbG90IGNhbiBvbmx5IGJlIHVzZWQgb24gY29tcG9uZW50cyBvciA8dGVtcGxhdGU+LlwiLFxuICAgICAgICAgICAgICBzbG90QmluZGluZyQxXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWwuc2xvdFNjb3BlIHx8IGVsLnNsb3RUYXJnZXQpIHtcbiAgICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIG1peGVkIHVzYWdlIG9mIGRpZmZlcmVudCBzbG90IHN5bnRheGVzLlwiLFxuICAgICAgICAgICAgICBlbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVsLnNjb3BlZFNsb3RzKSB7XG4gICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgIFwiVG8gYXZvaWQgc2NvcGUgYW1iaWd1aXR5LCB0aGUgZGVmYXVsdCBzbG90IHNob3VsZCBhbHNvIHVzZSBcIiArXG4gICAgICAgICAgICAgIFwiPHRlbXBsYXRlPiBzeW50YXggd2hlbiB0aGVyZSBhcmUgb3RoZXIgbmFtZWQgc2xvdHMuXCIsXG4gICAgICAgICAgICAgIHNsb3RCaW5kaW5nJDFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCB0aGUgY29tcG9uZW50J3MgY2hpbGRyZW4gdG8gaXRzIGRlZmF1bHQgc2xvdFxuICAgICAgICB2Y
33378XIgc2xvdHMgPSBlbC5zY29wZWRTbG90cyB8fCAoZWwuc2NvcGVkU2xvdHMgPSB7fSk7XG4gICAgICAgIHZhciByZWYkMSA9IGdldFNsb3ROYW1lKHNsb3RCaW5kaW5nJDEpO1xuICAgICAgICB2YXIgbmFtZSQxID0gcmVmJDEubmFtZTtcbiAgICAgICAgdmFyIGR5bmFtaWMkMSA9IHJlZiQxLmR5bmFtaWM7XG4gICAgICAgIHZhciBzbG90Q29udGFpbmVyID0gc2xvdHNbbmFtZSQxXSA9IGNyZWF0ZUFTVEVsZW1lbnQoJ3RlbXBsYXRlJywgW10sIGVsKTtcbiAgICAgICAgc2xvdENvbnRhaW5lci5zbG90VGFyZ2V0ID0gbmFtZSQxO1xuICAgICAgICBzbG90Q29udGFpbmVyLnNsb3RUYXJnZXREeW5hbWljID0gZHluYW1pYyQxO1xuICAgICAgICBzbG90Q29udGFpbmVyLmNoaWxkcmVuID0gZWwuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgaWYgKCFjLnNsb3RTY29wZSkge1xuICAgICAgICAgICAgYy5wYXJlbnQgPSBzbG90Q29udGFpbmVyO1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzbG90Q29udGFpbmVyLnNsb3RTY29wZSA9IHNsb3RCaW5kaW5nJDEudmFsdWUgfHwgZW1wdHlTbG90U2NvcGVUb2tlbjtcbiAgICAgICAgLy8gcmVtb3ZlIGNoaWxkcmVuIGFzIHRoZXkgYXJlIHJldHVybmVkIGZyb20gc2NvcGVkU2xvdHMgbm93XG4gICAgICAgIGVsLmNoaWxkcmVuID0gW107XG4gICAgICAgIC8vIG1hcmsgZWwgbm9uLXBsYWluIHNvIGRhdGEgZ2V0cyBnZW5lcmF0ZWRcbiAgICAgICAgZWwucGxhaW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U2xvdE5hbWUgKGJpbmRpbmcpIHtcbiAgdmFyIG5hbWUgPSBiaW5kaW5nLm5hbWUucmVwbGFjZShzbG90UkUsICcnKTtcbiAgaWYgKCFuYW1lKSB7XG4gICAgaWYgKGJpbmRpbmcubmFtZVswXSAhPT0gJyMnKSB7XG4gICAgICBuYW1lID0gJ2RlZmF1bHQnO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybiQyKFxuICAgICAgICBcInYtc2xvdCBzaG9ydGhhbmQgc3ludGF4IHJlcXVpcmVzIGEgc2xvdCBuYW1lLlwiLFxuICAgICAgICBiaW5kaW5nXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZHluYW1pY0FyZ1JFLnRlc3QobmFtZSlcbiAgICAvLyBkeW5hbWljIFtuYW1lXVxuICAgID8geyBuYW1lOiBuYW1lLnNsaWNlKDEsIC0xKSwgZHluYW1pYzogdHJ1ZSB9XG4gICAgLy8gc3RhdGljIG5hbWVcbiAgICA6IHsgbmFtZTogKFwiXFxcIlwiICsgbmFtZSArIFwiXFxcIlwiKSwgZHluYW1pYzogZmFsc2UgfVxufVxuXG4vLyBoYW5kbGUgPHNsb3QvPiBvdXRsZXRzXG5mdW5jdGlvbiBwcm9jZXNzU2xvdE91dGxldCAoZWwpIHtcbiAgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnKSB7XG4gICAgZWwuc2xvdE5hbWUgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ25hbWUnKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBlbC5rZXkpIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAgXCJga2V5YCBkb2VzIG5vdCB3b3JrIG9uIDxzbG90PiBiZWNhdXNlIHNsb3RzIGFyZSBhYnN0cmFjdCBvdXRsZXRzIFwiICtcbiAgICAgICAgXCJhbmQgY2FuIHBvc3NpYmx5IGV4cGFuZCBpbnRvIG11bHRpcGxlIGVsZW1lbnRzLiBcIiArXG4gICAgICAgIFwiVXNlIHRoZSBrZXkgb24gYSB3cmFwcGluZyBlbGVtZW50IGluc3RlYWQuXCIsXG4gICAgICAgIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAna2V5JylcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NDb21wb25lbnQgKGVsKSB7XG4gIHZhciBiaW5kaW5nO1xuICBpZiAoKGJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2lzJykpKSB7XG4gICAgZWwuY29tcG9uZW50ID0gYmluZGluZztcbiAgfVxuICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ2lubGluZS10ZW1wbGF0ZScpICE9IG51bGwpIHtcbiAgICBlbC5pbmxpbmVUZW1wbGF0ZSA9IHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0F0dHJzIChlbCkge1xuICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgdmFyIGksIGwsIG5hbWUsIHJhd05hbWUsIHZhbHVlLCBtb2RpZmllcnMsIHN5bmNHZW4sIGlzRHluYW1pYztcbiAgZm9yIChpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbmFtZSA9IHJhd05hbWUgPSBsaXN0W2ldLm5hbWU7XG4gICAgdmFsdWUgPSBsaXN0W2ldLnZhbHVlO1xuICAgIGlmIChkaXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAvLyBtYXJrIGVsZW1lbnQgYXMgZHluYW1pY1xuICAgICAgZWwuaGFzQmluZGluZ3MgPSB0cnVlO1xuICAgICAgLy8gbW9kaWZpZXJzXG4gICAgICBtb2RpZmllcnMgPSBwYXJzZU1vZGlmaWVycyhuYW1lLnJlcGxhY2UoZGlyUkUsICcnKSk7XG4gICAgICAvLyBzdXBwb3J0IC5mb28gc2hvcnRoYW5kIHN5bnRheCBmb3IgdGhlIC5wcm9wIG1vZGlmaWVyXG4gICAgICBpZiAobW9kaWZpZXJzKSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UobW9kaWZpZXJSRSwgJycpO1xuICAgICAgfVxuICAgICAgaWYgKGJpbmRSRS50ZXN0KG5hbWUpKSB7IC8vIHYtYmluZFxuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKGJpbmRSRSwgJycpO1xuICAgICAgICB2YWx1ZSA9IHBhcnNlRmlsdGVycyh2YWx1ZSk7XG4gICAgICAgIGlzRHluYW1pYyA9IGR5bmFtaWNBcmdSRS50ZXN0KG5hbWUpO1xuICAgICAgICBpZiAoaXNEeW5hbWljKSB7XG4gICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgdmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAoXCJUaGUgdmFsdWUgZm9yIGEgdi1iaW5kIGV4cHJlc3Npb24gY2Fubm90IGJlIGVtcHR5LiBGb3VuZCBpbiBcXFwidi1iaW5kOlwiICsgbmFtZSArIFwiXFxcIlwiKVxuICAgICAgICAgICk7XG4gICAgICAgI
33378H1cbiAgICAgICAgaWYgKG1vZGlmaWVycykge1xuICAgICAgICAgIGlmIChtb2RpZmllcnMucHJvcCAmJiAhaXNEeW5hbWljKSB7XG4gICAgICAgICAgICBuYW1lID0gY2FtZWxpemUobmFtZSk7XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2lubmVySHRtbCcpIHsgbmFtZSA9ICdpbm5lckhUTUwnOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtb2RpZmllcnMuY2FtZWwgJiYgIWlzRHluYW1pYykge1xuICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobW9kaWZpZXJzLnN5bmMpIHtcbiAgICAgICAgICAgIHN5bmNHZW4gPSBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgXCIkZXZlbnRcIik7XG4gICAgICAgICAgICBpZiAoIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICBhZGRIYW5kbGVyKFxuICAgICAgICAgICAgICAgIGVsLFxuICAgICAgICAgICAgICAgIChcInVwZGF0ZTpcIiArIChjYW1lbGl6ZShuYW1lKSkpLFxuICAgICAgICAgICAgICAgIHN5bmNHZW4sXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICB3YXJuJDIsXG4gICAgICAgICAgICAgICAgbGlzdFtpXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoaHlwaGVuYXRlKG5hbWUpICE9PSBjYW1lbGl6ZShuYW1lKSkge1xuICAgICAgICAgICAgICAgIGFkZEhhbmRsZXIoXG4gICAgICAgICAgICAgICAgICBlbCxcbiAgICAgICAgICAgICAgICAgIChcInVwZGF0ZTpcIiArIChoeXBoZW5hdGUobmFtZSkpKSxcbiAgICAgICAgICAgICAgICAgIHN5bmNHZW4sXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICB3YXJuJDIsXG4gICAgICAgICAgICAgICAgICBsaXN0W2ldXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gaGFuZGxlciB3LyBkeW5hbWljIGV2ZW50IG5hbWVcbiAgICAgICAgICAgICAgYWRkSGFuZGxlcihcbiAgICAgICAgICAgICAgICBlbCxcbiAgICAgICAgICAgICAgICAoXCJcXFwidXBkYXRlOlxcXCIrKFwiICsgbmFtZSArIFwiKVwiKSxcbiAgICAgICAgICAgICAgICBzeW5jR2VuLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgd2FybiQyLFxuICAgICAgICAgICAgICAgIGxpc3RbaV0sXG4gICAgICAgICAgICAgICAgdHJ1ZSAvLyBkeW5hbWljXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgobW9kaWZpZXJzICYmIG1vZGlmaWVycy5wcm9wKSB8fCAoXG4gICAgICAgICAgIWVsLmNvbXBvbmVudCAmJiBwbGF0Zm9ybU11c3RVc2VQcm9wKGVsLnRhZywgZWwuYXR0cnNNYXAudHlwZSwgbmFtZSlcbiAgICAgICAgKSkge1xuICAgICAgICAgIGFkZFByb3AoZWwsIG5hbWUsIHZhbHVlLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZEF0dHIoZWwsIG5hbWUsIHZhbHVlLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9uUkUudGVzdChuYW1lKSkgeyAvLyB2LW9uXG4gICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2Uob25SRSwgJycpO1xuICAgICAgICBpc0R5bmFtaWMgPSBkeW5hbWljQXJnUkUudGVzdChuYW1lKTtcbiAgICAgICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRIYW5kbGVyKGVsLCBuYW1lLCB2YWx1ZSwgbW9kaWZpZXJzLCBmYWxzZSwgd2FybiQyLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgfSBlbHNlIHsgLy8gbm9ybWFsIGRpcmVjdGl2ZXNcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShkaXJSRSwgJycpO1xuICAgICAgICAvLyBwYXJzZSBhcmdcbiAgICAgICAgdmFyIGFyZ01hdGNoID0gbmFtZS5tYXRjaChhcmdSRSk7XG4gICAgICAgIHZhciBhcmcgPSBhcmdNYXRjaCAmJiBhcmdNYXRjaFsxXTtcbiAgICAgICAgaXNEeW5hbWljID0gZmFsc2U7XG4gICAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgwLCAtKGFyZy5sZW5ndGggKyAxKSk7XG4gICAgICAgICAgaWYgKGR5bmFtaWNBcmdSRS50ZXN0KGFyZykpIHtcbiAgICAgICAgICAgIGFyZyA9IGFyZy5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgICBpc0R5bmFtaWMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhZGREaXJlY3RpdmUoZWwsIG5hbWUsIHJhd05hbWUsIHZhbHVlLCBhcmcsIGlzRHluYW1pYywgbW9kaWZpZXJzLCBsaXN0W2ldKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbmFtZSA9PT0gJ21vZGVsJykge1xuICAgICAgICAgIGNoZWNrRm9yQWxpYXNNb2RlbChlbCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGxpdGVyYWwgYXR0cmlidXRlXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2Y
33378XIgcmVzID0gcGFyc2VUZXh0KHZhbHVlLCBkZWxpbWl0ZXJzKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgIG5hbWUgKyBcIj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIjogXCIgK1xuICAgICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAgICAgICAgICAgICdpbnN0ZWFkIG9mIDxkaXYgaWQ9XCJ7eyB2YWwgfX1cIj4sIHVzZSA8ZGl2IDppZD1cInZhbFwiPi4nLFxuICAgICAgICAgICAgbGlzdFtpXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFkZEF0dHIoZWwsIG5hbWUsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgbGlzdFtpXSk7XG4gICAgICAvLyAjNjg4NyBmaXJlZm94IGRvZXNuJ3QgdXBkYXRlIG11dGVkIHN0YXRlIGlmIHNldCB2aWEgYXR0cmlidXRlXG4gICAgICAvLyBldmVuIGltbWVkaWF0ZWx5IGFmdGVyIGVsZW1lbnQgY3JlYXRpb25cbiAgICAgIGlmICghZWwuY29tcG9uZW50ICYmXG4gICAgICAgICAgbmFtZSA9PT0gJ211dGVkJyAmJlxuICAgICAgICAgIHBsYXRmb3JtTXVzdFVzZVByb3AoZWwudGFnLCBlbC5hdHRyc01hcC50eXBlLCBuYW1lKSkge1xuICAgICAgICBhZGRQcm9wKGVsLCBuYW1lLCAndHJ1ZScsIGxpc3RbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0luRm9yIChlbCkge1xuICB2YXIgcGFyZW50ID0gZWw7XG4gIHdoaWxlIChwYXJlbnQpIHtcbiAgICBpZiAocGFyZW50LmZvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBwYXJzZU1vZGlmaWVycyAobmFtZSkge1xuICB2YXIgbWF0Y2ggPSBuYW1lLm1hdGNoKG1vZGlmaWVyUkUpO1xuICBpZiAobWF0Y2gpIHtcbiAgICB2YXIgcmV0ID0ge307XG4gICAgbWF0Y2guZm9yRWFjaChmdW5jdGlvbiAobSkgeyByZXRbbS5zbGljZSgxKV0gPSB0cnVlOyB9KTtcbiAgICByZXR1cm4gcmV0XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZUF0dHJzTWFwIChhdHRycykge1xuICB2YXIgbWFwID0ge307XG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXR0cnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgbWFwW2F0dHJzW2ldLm5hbWVdICYmICFpc0lFICYmICFpc0VkZ2VcbiAgICApIHtcbiAgICAgIHdhcm4kMignZHVwbGljYXRlIGF0dHJpYnV0ZTogJyArIGF0dHJzW2ldLm5hbWUsIGF0dHJzW2ldKTtcbiAgICB9XG4gICAgbWFwW2F0dHJzW2ldLm5hbWVdID0gYXR0cnNbaV0udmFsdWU7XG4gIH1cbiAgcmV0dXJuIG1hcFxufVxuXG4vLyBmb3Igc2NyaXB0IChlLmcuIHR5cGU9XCJ4L3RlbXBsYXRlXCIpIG9yIHN0eWxlLCBkbyBub3QgZGVjb2RlIGNvbnRlbnRcbmZ1bmN0aW9uIGlzVGV4dFRhZyAoZWwpIHtcbiAgcmV0dXJuIGVsLnRhZyA9PT0gJ3NjcmlwdCcgfHwgZWwudGFnID09PSAnc3R5bGUnXG59XG5cbmZ1bmN0aW9uIGlzRm9yYmlkZGVuVGFnIChlbCkge1xuICByZXR1cm4gKFxuICAgIGVsLnRhZyA9PT0gJ3N0eWxlJyB8fFxuICAgIChlbC50YWcgPT09ICdzY3JpcHQnICYmIChcbiAgICAgICFlbC5hdHRyc01hcC50eXBlIHx8XG4gICAgICBlbC5hdHRyc01hcC50eXBlID09PSAndGV4dC9qYXZhc2NyaXB0J1xuICAgICkpXG4gIClcbn1cblxudmFyIGllTlNCdWcgPSAvXnhtbG5zOk5TXFxkKy87XG52YXIgaWVOU1ByZWZpeCA9IC9eTlNcXGQrOi87XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBndWFyZElFU1ZHQnVnIChhdHRycykge1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYXR0ciA9IGF0dHJzW2ldO1xuICAgIGlmICghaWVOU0J1Zy50ZXN0KGF0dHIubmFtZSkpIHtcbiAgICAgIGF0dHIubmFtZSA9IGF0dHIubmFtZS5yZXBsYWNlKGllTlNQcmVmaXgsICcnKTtcbiAgICAgIHJlcy5wdXNoKGF0dHIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrRm9yQWxpYXNNb2RlbCAoZWwsIHZhbHVlKSB7XG4gIHZhciBfZWwgPSBlbDtcbiAgd2hpbGUgKF9lbCkge1xuICAgIGlmIChfZWwuZm9yICYmIF9lbC5hbGlhcyA9PT0gdmFsdWUpIHtcbiAgICAgIHdhcm4kMihcbiAgICAgICAgXCI8XCIgKyAoZWwudGFnKSArIFwiIHYtbW9kZWw9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCI+OiBcIiArXG4gICAgICAgIFwiWW91IGFyZSBiaW5kaW5nIHYtbW9kZWwgZGlyZWN0bHkgdG8gYSB2LWZvciBpdGVyYXRpb24gYWxpYXMuIFwiICtcbiAgICAgICAgXCJUaGlzIHdpbGwgbm90IGJlIGFibGUgdG8gbW9kaWZ5IHRoZSB2LWZvciBzb3VyY2UgYXJyYXkgYmVjYXVzZSBcIiArXG4gICAgICAgIFwid3JpdGluZyB0byB0aGUgYWxpYXMgaXMgbGlrZSBtb2RpZnlpbmcgYSBmdW5jdGlvbiBsb2NhbCB2YXJpYWJsZS4gXCIgK1xuICAgICAgICBcIkNvbnNpZGVyIHVzaW5nIGFuIGFycmF5IG9mIG9iamVjdHMgYW5kIHVzZSB2LW1vZGVsIG9uIGFuIG9iamVjdCBwcm9wZXJ0eSBpbnN0ZWFkLlwiLFxuICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1tb2RlbCddXG4gICAgICApO1xuICAgIH1cbiAgICBfZWwgPSBfZWwucGFyZW50O1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBwcmVUcmFuc2Zvcm1Ob2RlIChlbCwgb3B0aW9ucykge1xuICBpZiAoZWwudGFnID09PSAnaW5wdXQnKSB7XG4gICAgdmFyIG1hcCA9IGVsLmF0dHJzTWFwO1xuICAgIGlmICghbWFwWyd2LW1vZGVsJ10pIHtcbiAgICAgIHJldHVyblxuICAgI
33378H1cblxuICAgIHZhciB0eXBlQmluZGluZztcbiAgICBpZiAobWFwWyc6dHlwZSddIHx8IG1hcFsndi1iaW5kOnR5cGUnXSkge1xuICAgICAgdHlwZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3R5cGUnKTtcbiAgICB9XG4gICAgaWYgKCFtYXAudHlwZSAmJiAhdHlwZUJpbmRpbmcgJiYgbWFwWyd2LWJpbmQnXSkge1xuICAgICAgdHlwZUJpbmRpbmcgPSBcIihcIiArIChtYXBbJ3YtYmluZCddKSArIFwiKS50eXBlXCI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVCaW5kaW5nKSB7XG4gICAgICB2YXIgaWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicsIHRydWUpO1xuICAgICAgdmFyIGlmQ29uZGl0aW9uRXh0cmEgPSBpZkNvbmRpdGlvbiA/IChcIiYmKFwiICsgaWZDb25kaXRpb24gKyBcIilcIikgOiBcIlwiO1xuICAgICAgdmFyIGhhc0Vsc2UgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlJywgdHJ1ZSkgIT0gbnVsbDtcbiAgICAgIHZhciBlbHNlSWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJywgdHJ1ZSk7XG4gICAgICAvLyAxLiBjaGVja2JveFxuICAgICAgdmFyIGJyYW5jaDAgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgLy8gcHJvY2VzcyBmb3Igb24gdGhlIG1haW4gbm9kZVxuICAgICAgcHJvY2Vzc0ZvcihicmFuY2gwKTtcbiAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMCwgJ3R5cGUnLCAnY2hlY2tib3gnKTtcbiAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDAsIG9wdGlvbnMpO1xuICAgICAgYnJhbmNoMC5wcm9jZXNzZWQgPSB0cnVlOyAvLyBwcmV2ZW50IGl0IGZyb20gZG91YmxlLXByb2Nlc3NlZFxuICAgICAgYnJhbmNoMC5pZiA9IFwiKFwiICsgdHlwZUJpbmRpbmcgKyBcIik9PT0nY2hlY2tib3gnXCIgKyBpZkNvbmRpdGlvbkV4dHJhO1xuICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICBleHA6IGJyYW5jaDAuaWYsXG4gICAgICAgIGJsb2NrOiBicmFuY2gwXG4gICAgICB9KTtcbiAgICAgIC8vIDIuIGFkZCByYWRpbyBlbHNlLWlmIGNvbmRpdGlvblxuICAgICAgdmFyIGJyYW5jaDEgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gxLCAndi1mb3InLCB0cnVlKTtcbiAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMSwgJ3R5cGUnLCAncmFkaW8nKTtcbiAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDEsIG9wdGlvbnMpO1xuICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICBleHA6IFwiKFwiICsgdHlwZUJpbmRpbmcgKyBcIik9PT0ncmFkaW8nXCIgKyBpZkNvbmRpdGlvbkV4dHJhLFxuICAgICAgICBibG9jazogYnJhbmNoMVxuICAgICAgfSk7XG4gICAgICAvLyAzLiBvdGhlclxuICAgICAgdmFyIGJyYW5jaDIgPSBjbG9uZUFTVEVsZW1lbnQoZWwpO1xuICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gyLCAndi1mb3InLCB0cnVlKTtcbiAgICAgIGFkZFJhd0F0dHIoYnJhbmNoMiwgJzp0eXBlJywgdHlwZUJpbmRpbmcpO1xuICAgICAgcHJvY2Vzc0VsZW1lbnQoYnJhbmNoMiwgb3B0aW9ucyk7XG4gICAgICBhZGRJZkNvbmRpdGlvbihicmFuY2gwLCB7XG4gICAgICAgIGV4cDogaWZDb25kaXRpb24sXG4gICAgICAgIGJsb2NrOiBicmFuY2gyXG4gICAgICB9KTtcblxuICAgICAgaWYgKGhhc0Vsc2UpIHtcbiAgICAgICAgYnJhbmNoMC5lbHNlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoZWxzZUlmQ29uZGl0aW9uKSB7XG4gICAgICAgIGJyYW5jaDAuZWxzZWlmID0gZWxzZUlmQ29uZGl0aW9uO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnJhbmNoMFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9uZUFTVEVsZW1lbnQgKGVsKSB7XG4gIHJldHVybiBjcmVhdGVBU1RFbGVtZW50KGVsLnRhZywgZWwuYXR0cnNMaXN0LnNsaWNlKCksIGVsLnBhcmVudClcbn1cblxudmFyIG1vZGVsJDEgPSB7XG4gIHByZVRyYW5zZm9ybU5vZGU6IHByZVRyYW5zZm9ybU5vZGVcbn07XG5cbnZhciBtb2R1bGVzJDEgPSBbXG4gIGtsYXNzJDEsXG4gIHN0eWxlJDEsXG4gIG1vZGVsJDFcbl07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB0ZXh0IChlbCwgZGlyKSB7XG4gIGlmIChkaXIudmFsdWUpIHtcbiAgICBhZGRQcm9wKGVsLCAndGV4dENvbnRlbnQnLCAoXCJfcyhcIiArIChkaXIudmFsdWUpICsgXCIpXCIpLCBkaXIpO1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBodG1sIChlbCwgZGlyKSB7XG4gIGlmIChkaXIudmFsdWUpIHtcbiAgICBhZGRQcm9wKGVsLCAnaW5uZXJIVE1MJywgKFwiX3MoXCIgKyAoZGlyLnZhbHVlKSArIFwiKVwiKSwgZGlyKTtcbiAgfVxufVxuXG52YXIgZGlyZWN0aXZlcyQxID0ge1xuICBtb2RlbDogbW9kZWwsXG4gIHRleHQ6IHRleHQsXG4gIGh0bWw6IGh0bWxcbn07XG5cbi8qICAqL1xuXG52YXIgYmFzZU9wdGlvbnMgPSB7XG4gIGV4cGVjdEhUTUw6IHRydWUsXG4gIG1vZHVsZXM6IG1vZHVsZXMkMSxcbiAgZGlyZWN0aXZlczogZGlyZWN0aXZlcyQxLFxuICBpc1ByZVRhZzogaXNQcmVUYWcsXG4gIGlzVW5hcnlUYWc6IGlzVW5hcnlUYWcsXG4gIG11c3RVc2VQcm9wOiBtdXN0VXNlUHJvcCxcbiAgY2FuQmVMZWZ0T3BlblRhZzogY2FuQmVMZWZ0T3BlblRhZyxcbiAgaXNSZXNlcnZlZFRhZzogaXNSZXNlcnZlZFRhZyxcbiAgZ2V0VGFnTmFtZXNwYWNlOiBnZXRUYWdOYW1lc3BhY2UsXG4gIHN0YXRpY0tleXM6IGdlblN0YXRpY0tleXMobW9kdWxlcyQxKVxufTtcblxuLyogICovXG5cbnZhciBpc1N0YXRpY0tleTtcbnZhciBpc1BsYXRmb3JtUmVzZXJ2ZWRUYWc7XG5cbnZhciBnZW5TdGF0aWNLZXlzQ2FjaGVkID0gY2FjaGVkKGdlblN0YXRpY0tleXMkMSk7XG5cbi8qKlxuICogR29hbCBvZiB0aGUgb3B0aW1pemVyOiB3YWxrIHRoZSBnZW5lcmF0ZWQgdGVtcGxhdGUgQVNUIHRyZWVcbiAqIGFuZCBkZXRlY3Qgc3ViLXRyZWVzIHRoYXQgYXJlIHB1cmVseSBzdGF0aWMsIGkuZS4gcGFydHMgb2ZcbiAqIHRoZSBET00gdGhhdCBuZXZlciBuZWVkcyB0byBjaGFuZ2UuXG4gKlxuICogT25jZSB3ZSBkZXRlY3QgdGhlc2Ugc3ViLXRyZWVzLCB3ZSBjYW46XG4gKlxuICogMS4gSG9pc3QgdGhlbSBpbnRvIGNvbnN0YW50cywgc28gdGhhdCB3ZSBubyBsb25nZXIgbmVlZCB0b1xuICogICAgY3JlYXRlIGZyZXNoIG5vZGVzIGZvciB0aGVtIG9uIGVhY2ggcmUtcmVuZGVyO1xuICogMi4gQ29tcGxldGVseSBza2lwIHRoZW0gaW4gdGhlIHBhdGNoaW5nIHByb2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIG9wdGltaXplIChyb290LCBvcHRpb25zKSB7XG4gIGlmICghcm9vdCkgeyByZXR1cm4gfVxuICBpc1N0YXRpY0tleSA9IGdlblN0YXRpY0tleXNDYWNoZWQob3B0aW9ucy5zdGF0aWNLZXlzIHx8ICcnKTtcbiAgaXNQbGF0Zm9ybVJlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICAvLyBmaXJzdCBwYXNzOiBtYXJrIGFsbCBub24tc3RhdGljIG5vZGVzLlxuICBtYXJrU3RhdGljJDEocm9vdCk7XG4gIC8vIHNlY29uZCBwYXNzOiBtYXJrIHN0YXRpYyByb290cy5cbiAgbWFya1N0YXRpY1Jvb3RzKHJvb3QsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gZ2VuU3RhdGljS2V5cyQxIChrZXlzKSB7XG4gIHJldHVybi
33378BtYWtlTWFwKFxuICAgICd0eXBlLHRhZyxhdHRyc0xpc3QsYXR0cnNNYXAscGxhaW4scGFyZW50LGNoaWxkcmVuLGF0dHJzLHN0YXJ0LGVuZCxyYXdBdHRyc01hcCcgK1xuICAgIChrZXlzID8gJywnICsga2V5cyA6ICcnKVxuICApXG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWMkMSAobm9kZSkge1xuICBub2RlLnN0YXRpYyA9IGlzU3RhdGljKG5vZGUpO1xuICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgLy8gZG8gbm90IG1ha2UgY29tcG9uZW50IHNsb3QgY29udGVudCBzdGF0aWMuIHRoaXMgYXZvaWRzXG4gICAgLy8gMS4gY29tcG9uZW50cyBub3QgYWJsZSB0byBtdXRhdGUgc2xvdCBub2Rlc1xuICAgIC8vIDIuIHN0YXRpYyBzbG90IGNvbnRlbnQgZmFpbHMgZm9yIGhvdC1yZWxvYWRpbmdcbiAgICBpZiAoXG4gICAgICAhaXNQbGF0Zm9ybVJlc2VydmVkVGFnKG5vZGUudGFnKSAmJlxuICAgICAgbm9kZS50YWcgIT09ICdzbG90JyAmJlxuICAgICAgbm9kZS5hdHRyc01hcFsnaW5saW5lLXRlbXBsYXRlJ10gPT0gbnVsbFxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV07XG4gICAgICBtYXJrU3RhdGljJDEoY2hpbGQpO1xuICAgICAgaWYgKCFjaGlsZC5zdGF0aWMpIHtcbiAgICAgICAgbm9kZS5zdGF0aWMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGUuaWZDb25kaXRpb25zKSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAxLCBsJDEgPSBub2RlLmlmQ29uZGl0aW9ucy5sZW5ndGg7IGkkMSA8IGwkMTsgaSQxKyspIHtcbiAgICAgICAgdmFyIGJsb2NrID0gbm9kZS5pZkNvbmRpdGlvbnNbaSQxXS5ibG9jaztcbiAgICAgICAgbWFya1N0YXRpYyQxKGJsb2NrKTtcbiAgICAgICAgaWYgKCFibG9jay5zdGF0aWMpIHtcbiAgICAgICAgICBub2RlLnN0YXRpYyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNSb290cyAobm9kZSwgaXNJbkZvcikge1xuICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgaWYgKG5vZGUuc3RhdGljIHx8IG5vZGUub25jZSkge1xuICAgICAgbm9kZS5zdGF0aWNJbkZvciA9IGlzSW5Gb3I7XG4gICAgfVxuICAgIC8vIEZvciBhIG5vZGUgdG8gcXVhbGlmeSBhcyBhIHN0YXRpYyByb290LCBpdCBzaG91bGQgaGF2ZSBjaGlsZHJlbiB0aGF0XG4gICAgLy8gYXJlIG5vdCBqdXN0IHN0YXRpYyB0ZXh0LiBPdGhlcndpc2UgdGhlIGNvc3Qgb2YgaG9pc3Rpbmcgb3V0IHdpbGxcbiAgICAvLyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgYW5kIGl0J3MgYmV0dGVyIG9mZiB0byBqdXN0IGFsd2F5cyByZW5kZXIgaXQgZnJlc2guXG4gICAgaWYgKG5vZGUuc3RhdGljICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYmICEoXG4gICAgICBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgbm9kZS5jaGlsZHJlblswXS50eXBlID09PSAzXG4gICAgKSkge1xuICAgICAgbm9kZS5zdGF0aWNSb290ID0gdHJ1ZTtcbiAgICAgIHJldHVyblxuICAgI
33378H0gZWxzZSB7XG4gICAgICBub2RlLnN0YXRpY1Jvb3QgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgbWFya1N0YXRpY1Jvb3RzKG5vZGUuY2hpbGRyZW5baV0sIGlzSW5Gb3IgfHwgISFub2RlLmZvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlLmlmQ29uZGl0aW9ucykge1xuICAgICAgZm9yICh2YXIgaSQxID0gMSwgbCQxID0gbm9kZS5pZkNvbmRpdGlvbnMubGVuZ3RoOyBpJDEgPCBsJDE7IGkkMSsrKSB7XG4gICAgICAgIG1hcmtTdGF0aWNSb290cyhub2RlLmlmQ29uZGl0aW9uc1tpJDFdLmJsb2NrLCBpc0luRm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTdGF0aWMgKG5vZGUpIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gMikgeyAvLyBleHByZXNzaW9uXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PT0gMykgeyAvLyB0ZXh0XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gISEobm9kZS5wcmUgfHwgKFxuICAgICFub2RlLmhhc0JpbmRpbmdzICYmIC8vIG5vIGR5bmFtaWMgYmluZGluZ3NcbiAgICAhbm9kZS5pZiAmJiAhbm9kZS5mb3IgJiYgLy8gbm90IHYtaWYgb3Igdi1mb3Igb3Igdi1lbHNlXG4gICAgIWlzQnVpbHRJblRhZyhub2RlLnRhZykgJiYgLy8gbm90IGEgYnVpbHQtaW5cbiAgICBpc1BsYXRmb3JtUmVzZXJ2ZWRUYWcobm9kZS50YWcpICYmIC8vIG5vdCBhIGNvbXBvbmVudFxuICAgICFpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSAmJlxuICAgIE9iamVjdC5rZXlzKG5vZGUpLmV2ZXJ5KGlzU3RhdGljS2V5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvciAobm9kZSkge1xuICB3aGlsZSAobm9kZS5wYXJlbnQpIHtcbiAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG4gICAgaWYgKG5vZGUudGFnICE9PSAndGVtcGxhdGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKG5vZGUuZm9yKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbnZhciBmbkV4cFJFID0gL14oW1xcdyRfXSt8XFwoW14pXSo/XFwpKVxccyo9PnxeZnVuY3Rpb24oPzpcXHMrW1xcdyRdKyk/XFxzKlxcKC87XG52YXIgZm5JbnZva2VSRSA9IC9cXChbXildKj9cXCk7KiQvO1xudmFyIHNpbXBsZVBhdGhSRSA9IC9eW0EtWmEtel8kXVtcXHckXSooPzpcXC5bQS1aYS16XyRdW1xcdyRdKnxcXFsnW14nXSo/J118XFxbXCJbXlwiXSo/XCJdfFxcW1xcZCtdfFxcW1tBLVphLXpfJF1bXFx3JF0qXSkqJC87XG5cbi8vIEtleWJvYXJkRXZlbnQua2V5Q29kZSBhbGlhc2VzXG52YXIga2V5Q29kZXMgPSB7XG4gIGVzYzogMjcsXG4gIHRhYjogOSxcbiAgZW50ZXI6IDEzLFxuICBzcGFjZTogMzIsXG4gIHVwOiAzOC
33378xcbiAgbGVmdDogMzcsXG4gIHJpZ2h0OiAzOSxcbiAgZG93bjogNDAsXG4gICdkZWxldGUnOiBbOCwgNDZdXG59O1xuXG4vLyBLZXlib2FyZEV2ZW50LmtleSBhbGlhc2VzXG52YXIga2V5TmFtZXMgPSB7XG4gIC8vICM3ODgwOiBJRTExIGFuZCBFZGdlIHVzZSBgRXNjYCBmb3IgRXNjYXBlIGtleSBuYW1lLlxuICBlc2M6IFsnRXNjJywgJ0VzY2FwZSddLFxuICB0YWI6ICdUYWInLFxuICBlbnRlcjogJ0VudGVyJyxcbiAgLy8gIzkxMTI6IElFMTEgdXNlcyBgU3BhY2ViYXJgIGZvciBTcGFjZSBrZXkgbmFtZS5cbiAgc3BhY2U6IFsnICcsICdTcGFjZWJhciddLFxuICAvLyAjNzgwNjogSUUxMSB1c2VzIGtleSBuYW1lcyB3aXRob3V0IGBBcnJvd2AgcHJlZml4IGZvciBhcnJvdyBrZXlzLlxuICB1cDogWydVcCcsICdBcnJvd1VwJ10sXG4gIGxlZnQ6IFsnTGVmdCcsICdBcnJvd0xlZnQnXSxcbiAgcmlnaHQ6IFsnUmlnaHQnLCAnQXJyb3dSaWdodCddLFxuICBkb3duOiBbJ0Rvd24nLCAnQXJyb3dEb3duJ10sXG4gIC8vICM5MTEyOiBJRTExIHVzZXMgYERlbGAgZm9yIERlbGV0ZSBrZXkgbmFtZS5cbiAgJ2RlbGV0ZSc6IFsnQmFja3NwYWNlJywgJ0RlbGV0ZScsICdEZWwnXVxufTtcblxuLy8gIzQ4Njg6IG1vZGlmaWVycyB0aGF0IHByZXZlbnQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbGlzdGVuZXJcbi8vIG5lZWQgdG8gZXhwbGljaXRseSByZXR1cm4gbnVsbCBzbyB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgd2hldGhlciB0byByZW1vdmVcbi8vIHRoZSBsaXN0ZW5lciBmb3IgLm9uY2VcbnZhciBnZW5HdWFyZCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHsgcmV0dXJuIChcImlmKFwiICsgY29uZGl0aW9uICsgXCIpcmV0dXJuIG51bGw7XCIpOyB9O1xuXG52YXIgbW9kaWZpZXJDb2RlID0ge1xuICBzdG9wOiAnJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOycsXG4gIHByZXZlbnQ6ICckZXZlbnQucHJldmVudERlZmF1bHQoKTsnLFxuICBzZWxmOiBnZW5HdWFyZChcIiRldmVudC50YXJnZXQgIT09ICRldmVudC5jdXJyZW50VGFyZ2V0XCIpLFxuICBjdHJsOiBnZW5HdWFyZChcIiEkZXZlbnQuY3RybEtleVwiKSxcbiAgc2hpZnQ6IGdlbkd1YXJkKFwiISRldmVudC5zaGlmdEtleVwiKSxcbiAgYWx0OiBnZW5HdWFyZChcIiEkZXZlbnQuYWx0S2V5XCIpLFxuICBtZXRhOiBnZW5HdWFyZChcIiEkZXZlbnQubWV0YUtleVwiKSxcbiAgbGVmdDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxcbiAgbWlkZGxlOiBnZW5HdWFyZChcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAxXCIpLFxuICByaWdodDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMlwiKVxufTtcblxuZnVuY3Rpb24gZ2VuSGFuZGxlcnMgKFxuICBldmVudHMsXG4gIGlzTmF0aXZlXG4pIHtcbiAgdmFyIHByZWZpeCA9IGlzTmF0aXZlID8gJ25hdGl2ZU9uOicgOiAnb246JztcbiAgdmFyIHN0YXRpY0hhbmRsZXJzID0gXCJcIjtcbiAgdmFyIGR5bmFtaWNIYW5kbGVycyA9IFwiXCI7XG4gIGZvciAodmFyIG5hbWUgaW4gZXZlbnRzKSB7XG4gICAgdmFyIGhhbmRsZXJDb2RlID0gZ2VuSGFuZGxlcihldmVudHNbbmFtZV0pO1xuICAgIGlmIChldmVudHNbbmFtZV0gJiYgZXZlbnRzW25hbWVdLmR5bmFtaWMpIHtcbiAgICAgIGR5bmFtaWNIYW5kbGVycyArPSBuYW1lICsgXCIsXCIgKyBoYW5kbGVyQ29kZSArIFwiLFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aWNIYW5kbGVycyArPSBcIlxcXCJcIiArIG5hbWUgKyBcIlxcXCI6XCIgKyBoYW5kbGVyQ29kZSArIFwiLFwiO1xuICAgIH1cbiAgfVxuICBzdGF0aWNIYW5kbGVycyA9IFwie1wiICsgKHN0YXRpY0hhbmRsZXJzLnNsaWNlKDAsIC0xKSkgKyBcIn1cIjtcbiAgaWYgKGR5bmFtaWNIYW5kbGVycykge1xuICAgIHJldHVybiBwcmVmaXggKyBcIl9kKFwiICsgc3RhdGljSGFuZGxlcnMgKyBcIixbXCIgKyAoZHluYW1pY0hhbmRsZXJzLnNsaWNlKDAsIC0xKSkgKyBcIl0pXCJcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJlZml4ICsgc3RhdGljSGFuZGxlcnNcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5IYW5kbGVyIChoYW5kbGVyKSB7XG4gIGlmICghaGFuZGxlcikge1xuICAgIHJldHVybiAnZnVuY3Rpb24oKXt9J1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICByZXR1cm4gKFwiW1wiICsgKGhhbmRsZXIubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiBnZW5IYW5kbGVyKGhhbmRsZXIpOyB9KS5qb2luKCcsJykpICsgXCJdXCIpXG4gIH1cblxuICB2YXIgaXNNZXRob2RQYXRoID0gc2ltcGxlUGF0aFJFLnRlc3QoaGFuZGxlci52YWx1ZSk7XG4gIHZhciBpc0Z1bmN0aW9uRXhwcmVzc2lvbiA9IGZuRXhwUkUudGVzdChoYW5kbGVyLnZhbHVlKTtcbiAgdmFyIGlzRnVuY3Rpb25JbnZvY2F0aW9uID0gc2ltcGxlUGF0aFJFLnRlc3QoaGFuZGxlci52YWx1ZS5yZXBsYWNlKGZuSW52b2tlUkUsICcnKSk7XG5cbiAgaWYgKCFoYW5kbGVyLm1vZGlmaWVycykge1xuICAgIGlmIChpc01ldGhvZFBhdGggfHwgaXNGdW5jdGlvbkV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVlXG4gICAgfVxuICAgIHJldHVybiAoXCJmdW5jdGlvbigkZXZlbnQpe1wiICsgKGlzRnVuY3Rpb25JbnZvY2F0aW9uID8gKFwicmV0dXJuIFwiICsgKGhhbmRsZXIudmFsdWUpKSA6IGhhbmRsZXIudmFsdWUpICsgXCJ9XCIpIC8vIGlubGluZSBzdGF0ZW1lbnRcbiAgfSBlbHNlIHtcbiAgICB2YXIgY29kZSA9ICcnO1xuICAgIHZhciBnZW5Nb2RpZmllckNvZGUgPSAnJztcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBoYW5kbGVyLm1vZGlmaWVycykge1xuICAgICAgaWYgKG1vZGlmaWVyQ29kZVtrZXldKSB7XG4gICAgICAgIGdlbk1vZGlmaWVyQ29kZSArPSBtb2RpZmllckNvZGVba2V5XTtcbiAgICAgICAgLy8gbGVmdC9yaWdodFxuICAgICAgICBpZiAoa2V5Q29kZXNba2V5XSkge1xuICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2V4YWN0Jykge1xuICAgICAgICB2Y
33378XIgbW9kaWZpZXJzID0gKGhhbmRsZXIubW9kaWZpZXJzKTtcbiAgICAgICAgZ2VuTW9kaWZpZXJDb2RlICs9IGdlbkd1YXJkKFxuICAgICAgICAgIFsnY3RybCcsICdzaGlmdCcsICdhbHQnLCAnbWV0YSddXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXlNb2RpZmllcikgeyByZXR1cm4gIW1vZGlmaWVyc1trZXlNb2RpZmllcl07IH0pXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXlNb2RpZmllcikgeyByZXR1cm4gKFwiJGV2ZW50LlwiICsga2V5TW9kaWZpZXIgKyBcIktleVwiKTsgfSlcbiAgICAgICAgICAgIC5qb2luKCd8fCcpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICBjb2RlICs9IGdlbktleUZpbHRlcihrZXlzKTtcbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIG1vZGlmaWVycyBsaWtlIHByZXZlbnQgYW5kIHN0b3AgZ2V0IGV4ZWN1dGVkIGFmdGVyIGtleSBmaWx0ZXJpbmdcbiAgICBpZiAoZ2VuTW9kaWZpZXJDb2RlKSB7XG4gICAgICBjb2RlICs9IGdlbk1vZGlmaWVyQ29kZTtcbiAgICB9XG4gICAgdmFyIGhhbmRsZXJDb2RlID0gaXNNZXRob2RQYXRoXG4gICAgICA/IChcInJldHVybiBcIiArIChoYW5kbGVyLnZhbHVlKSArIFwiKCRldmVudClcIilcbiAgICAgIDogaXNGdW5jdGlvbkV4cHJlc3Npb25cbiAgICAgICAgPyAoXCJyZXR1cm4gKFwiICsgKGhhbmRsZXIudmFsdWUpICsgXCIpKCRldmVudClcIilcbiAgICAgICAgOiBpc0Z1bmN0aW9uSW52b2NhdGlvblxuICAgICAgICAgID8gKFwicmV0dXJuIFwiICsgKGhhbmRsZXIudmFsdWUpKVxuICAgICAgICAgIDogaGFuZGxlci52YWx1ZTtcbiAgICByZXR1cm4gKFwiZnVuY3Rpb24oJGV2ZW50KXtcIiArIGNvZGUgKyBoYW5kbGVyQ29kZSArIFwifVwiKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbktleUZpbHRlciAoa2V5cykge1xuICByZXR1cm4gKFxuICAgIC8vIG1ha2Ugc3VyZSB0aGUga2V5IGZpbHRlcnMgb25seSBhcHBseSB0byBLZXlib2FyZEV2ZW50c1xuICAgIC8vICM5NDQxOiBjYW4ndCB1c2UgJ2tleUNvZGUnIGluICRldmVudCBiZWNhdXNlIENocm9tZSBhdXRvZmlsbCBmaXJlcyBmYWtlXG4gICAgLy8ga2V5IGV2ZW50cyB0aGF0IGRvIG5vdCBoYXZlIGtleUNvZGUgcHJvcGVydHkuLi5cbiAgICBcImlmKCEkZXZlbnQudHlwZS5pbmRleE9mKCdrZXknKSYmXCIgK1xuICAgIChrZXlzLm1hcChnZW5GaWx0ZXJDb2RlKS5qb2luKCcmJicpKSArIFwiKXJldHVybiBudWxsO1wiXG4gIClcbn1cblxuZnVuY3Rpb24gZ2VuRmlsdGVyQ29kZSAoa2V5KSB7XG4gIHZhciBrZXlWYWwgPSBwYXJzZUludChrZXksIDEwKTtcbiAgaWYgKGtleVZhbCkge1xuICAgIHJldHVybiAoXCIkZXZlbnQua2V5Q29kZSE9PVwiICsga2V5VmFsKVxuICB9XG4gIHZhciBrZXlDb2RlID0ga2V5Q29kZXNba2V5XTtcbiAgdmFyIGtleU5hbWUgPSBrZXlOYW1lc1trZXldO1xuICByZXR1cm4gKFxuICAgIFwiX2soJGV2ZW50LmtleUNvZGUsXCIgK1xuICAgIChKU09OLnN0cmluZ2lmeShrZXkpKSArIFwiLFwiICtcbiAgICAoSlNPTi5zdHJpbmdpZnkoa2V5Q29kZSkpICsgXCIsXCIgK1xuICAgIFwiJGV2ZW50LmtleSxcIiArXG4gICAgXCJcIiArIChKU09OLnN0cmluZ2lmeShrZXlOYW1lKSkgK1xuICAgIFwiKVwiXG4gIClcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIG9uIChlbCwgZGlyKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRpci5tb2RpZmllcnMpIHtcbiAgICB3YXJuKFwidi1vbiB3aXRob3V0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgbW9kaWZpZXJzLlwiKTtcbiAgfVxuICBlbC53cmFwTGlzdGVuZXJzID0gZnVuY3Rpb24gKGNvZGUpIHsgcmV0dXJuIChcIl9nKFwiICsgY29kZSArIFwiLFwiICsgKGRpci52YWx1ZSkgKyBcIilcIik7IH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBiaW5kJDEgKGVsLCBkaXIpIHtcbiAgZWwud3JhcERhdGEgPSBmdW5jdGlvbiAoY29kZSkge1xuICAgIHJldHVybiAoXCJfYihcIiArIGNvZGUgKyBcIiwnXCIgKyAoZWwudGFnKSArIFwiJyxcIiArIChkaXIudmFsdWUpICsgXCIsXCIgKyAoZGlyLm1vZGlmaWVycyAmJiBkaXIubW9kaWZpZXJzLnByb3AgPyAndHJ1ZScgOiAnZmFsc2UnKSArIChkaXIubW9kaWZpZXJzICYmIGRpci5tb2RpZmllcnMuc3luYyA/ICcsdHJ1ZScgOiAnJykgKyBcIilcIilcbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBiYXNlRGlyZWN0aXZlcyA9IHtcbiAgb246IG9uLFxuICBiaW5kOiBiaW5kJDEsXG4gIGNsb2FrOiBub29wXG59O1xuXG4vKiAgKi9cblxuXG5cblxuXG52YXIgQ29kZWdlblN0YXRlID0gZnVuY3Rpb24gQ29kZWdlblN0YXRlIChvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIHRoaXMud2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcbiAgdGhpcy50cmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICd0cmFuc2Zvcm1Db2RlJyk7XG4gIHRoaXMuZGF0YUdlbkZucyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAnZ2VuRGF0YScpO1xuICB0aGlzLmRpcmVjdGl2ZXMgPSBleHRlbmQoZXh0ZW5kKHt9LCBiYXNlRGlyZWN0aXZlcyksIG9wdGlvbnMuZGlyZWN0aXZlcyk7XG4gIHZhciBpc1Jlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICB0aGlzLm1heWJlQ29tcG9uZW50ID0gZnVuY3Rpb24gKGVsKSB7IHJldHVybiAhIWVsLmNvbXBvbmVudCB8fCAhaXNSZXNlcnZlZFRhZyhlbC50YWcpOyB9O1xuICB0aGlzLm9uY2VJZCA9IDA7XG4gIHRoaXMuc3RhdGljUmVuZGVyRm5zID0gW107XG4gIHRoaXMucHJlID0gZmFsc2U7XG59O1xuXG5cblxuZnVuY3Rpb24gZ2VuZXJhdGUgKFxuICBhc3QsXG4gIG9wdGlvbnNcbikge1xuICB2YXIgc3RhdGUgPSBuZXcgQ29kZWdlblN0YXRlKG9wdGlvbnMpO1xuICB2YXIgY29kZSA9IGFzdCA/IGdlbkVsZW1lbnQoYXN0LCBzdGF0ZSkgOiAnX2MoXCJkaXZcIiknO1xuICByZXR1cm4ge1xuICAgIHJlbmRlcjogKFwid2l0aCh0aGlzKXtyZXR1cm4gXCIgKyBjb2RlICsgXCJ9XCIpLFxuICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGUuc3RhdGljUmVuZGVyRm5zXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuRWxlbWVudCAoZWwsIHN0YXRl
33378KSB7XG4gIGlmIChlbC5wYXJlbnQpIHtcbiAgICBlbC5wcmUgPSBlbC5wcmUgfHwgZWwucGFyZW50LnByZTtcbiAgfVxuXG4gIGlmIChlbC5zdGF0aWNSb290ICYmICFlbC5zdGF0aWNQcm9jZXNzZWQpIHtcbiAgICByZXR1cm4gZ2VuU3RhdGljKGVsLCBzdGF0ZSlcbiAgfSBlbHNlIGlmIChlbC5vbmNlICYmICFlbC5vbmNlUHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIGdlbk9uY2UoZWwsIHN0YXRlKVxuICB9IGVsc2UgaWYgKGVsLmZvciAmJiAhZWwuZm9yUHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIGdlbkZvcihlbCwgc3RhdGUpXG4gIH0gZWxzZSBpZiAoZWwuaWYgJiYgIWVsLmlmUHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIGdlbklmKGVsLCBzdGF0ZSlcbiAgfSBlbHNlIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScgJiYgIWVsLnNsb3RUYXJnZXQgJiYgIXN0YXRlLnByZSkge1xuICAgIHJldHVybiBnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd2b2lkIDAnXG4gIH0gZWxzZSBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICByZXR1cm4gZ2VuU2xvdChlbCwgc3RhdGUpXG4gIH0gZWxzZSB7XG4gICAgLy8gY29tcG9uZW50IG9yIGVsZW1lbnRcbiAgICB2YXIgY29kZTtcbiAgICBpZiAoZWwuY29tcG9uZW50KSB7XG4gICAgICBjb2RlID0gZ2VuQ29tcG9uZW50KGVsLmNvbXBvbmVudCwgZWwsIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGRhdGE7XG4gICAgICBpZiAoIWVsLnBsYWluIHx8IChlbC5wcmUgJiYgc3RhdGUubWF5YmVDb21wb25lbnQoZWwpKSkge1xuICAgICAgICBkYXRhID0gZ2VuRGF0YSQyKGVsLCBzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gICAgICBjb2RlID0gXCJfYygnXCIgKyAoZWwudGFnKSArIFwiJ1wiICsgKGRhdGEgPyAoXCIsXCIgKyBkYXRhKSA6ICcnKSArIChjaGlsZHJlbiA/IChcIixcIiArIGNoaWxkcmVuKSA6ICcnKSArIFwiKVwiO1xuICAgIH1cbiAgICAvLyBtb2R1bGUgdHJhbnNmb3Jtc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUudHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29kZSA9IHN0YXRlLnRyYW5zZm9ybXNbaV0oZWwsIGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gY29kZVxuICB9XG59XG5cbi8vIGhvaXN0IHN0YXRpYyBzdWItdHJlZXMgb3V0XG5mdW5jdGlvbiBnZW5TdGF0aWMgKGVsLCBzdGF0ZSkge1xuICBlbC5zdGF0aWNQcm9jZXNzZWQgPSB0cnVlO1xuICAvLyBTb21lIGVsZW1lbnRzICh0ZW1wbGF0ZXMpIG5lZWQgdG8gYmVoYXZlIGRpZmZlcmVudGx5IGluc2lkZSBvZiBhIHYtcHJlXG4gIC8vIG5vZGUuICBBbGwgcHJlIG5vZGVzIGFyZSBzdGF0aWMgcm9vdHMsIHNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIGxvY2F0aW9uIHRvXG4gIC8vIHdyYXAgYSBzdGF0ZSBjaGFuZ2UgYW5kIHJlc2V0IGl0IHVwb24gZXhpdGluZyB0aGUgcHJlIG5vZGUuXG4gIHZhciBvcmlnaW5hbFByZVN0YXRlID0gc3RhdGUucHJlO1xuICBpZiAoZWwucHJlKSB7XG4gICAgc3RhdGUucHJlID0gZWwucHJlO1xuICB9XG4gIHN0YXRlLnN0YXRpY1JlbmRlckZucy5wdXNoKChcIndpdGgodGhpcyl7cmV0dXJuIFwiICsgKGdlbkVsZW1lbnQoZWwsIHN0YXRlKSkgKyBcIn1cIikpO1xuICBzdGF0ZS5wcmUgPSBvcmlnaW5hbFByZVN0YXRlO1xuICByZXR1cm4gKFwiX20oXCIgKyAoc3RhdGUuc3RhdGljUmVuZGVyRm5zLmxlbmd0aCAtIDEpICsgKGVsLnN0YXRpY0luRm9yID8gJyx0cnVlJyA6ICcnKSArIFwiKVwiKVxufVxuXG4vLyB2LW9uY2VcbmZ1bmN0aW9uIGdlbk9uY2UgKGVsLCBzdGF0ZSkge1xuICBlbC5vbmNlUHJvY2Vzc2VkID0gdHJ1ZTtcbiAgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xuICAgIHJldHVybiBnZW5JZihlbCwgc3RhdGUpXG4gIH0gZWxzZSBpZiAoZWwuc3RhdGljSW5Gb3IpIHtcbiAgICB2YXIga2V5ID0gJyc7XG4gICAgdmFyIHBhcmVudCA9IGVsLnBhcmVudDtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICBpZiAocGFyZW50LmZvcikge1xuICAgICAgICBrZXkgPSBwYXJlbnQua2V5O1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICB9XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc3RhdGUud2FybihcbiAgICAgICAgXCJ2LW9uY2UgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgdi1mb3IgdGhhdCBpcyBrZXllZC4gXCIsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwWyd2LW9uY2UnXVxuICAgICAgKTtcbiAgICAgIHJldHVybiBnZW5FbGVtZW50KGVsLCBzdGF0ZSlcbiAgICB9XG4gICAgcmV0dXJuIChcIl9vKFwiICsgKGdlbkVsZW1lbnQoZWwsIHN0YXRlKSkgKyBcIixcIiArIChzdGF0ZS5vbmNlSWQrKykgKyBcIixcIiArIGtleSArIFwiKVwiKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZW5TdGF0aWMoZWwsIHN0YXRlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbklmIChcbiAgZWwsXG4gIHN0YXRlLFxuICBhbHRHZW4sXG4gIGFsdEVtcHR5XG4pIHtcbiAgZWwuaWZQcm9jZXNzZWQgPSB0cnVlOyAvLyBhdm9pZCByZWN1cnNpb25cbiAgcmV0dXJuIGdlbklmQ29uZGl0aW9ucyhlbC5pZkNvbmRpdGlvbnMuc2xpY2UoKSwgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpXG59XG5cbmZ1bmN0aW9uIGdlbklmQ29uZGl0aW9ucyAoXG4gIGNvbmRpdGlvbnMsXG4gIHN0YXRlLFxuICBhbHRHZW4sXG4gIGFsdEVtcHR5XG4pIHtcbiAgaWYgKCFjb25kaXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBhbHRFbXB0eSB8fCAnX2UoKSdcbiAgfVxuXG4gIHZhciBjb25kaXRpb24gPSBjb25kaXRpb25zLnNoaWZ0KCk7XG4gIGlmIChjb25kaXRpb24uZXhwKSB7XG4gICAgcmV0dXJuIChcIihcIiArIChjb25kaXRpb24uZXhwKSArIFwiKT9cIiArIChnZW5UZXJuYXJ5RXhwKGNvbmRpdGlvbi5ibG9jaykpICsgXCI6XCIgKyAoZ2VuSWZDb25kaXRpb25zKGNvbmRpdGlvbnMsIHN0YXRlLCBhbHRHZW4sIGFsdEVtcHR5KSkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcIlwiICsgKGdlblRlcm5hcnlFeHAoY29uZGl0
33378aW9uLmJsb2NrKSkpXG4gIH1cblxuICAvLyB2LWlmIHdpdGggdi1vbmNlIHNob3VsZCBnZW5lcmF0ZSBjb2RlIGxpa2UgKGEpP19tKDApOl9tKDEpXG4gIGZ1bmN0aW9uIGdlblRlcm5hcnlFeHAgKGVsKSB7XG4gICAgcmV0dXJuIGFsdEdlblxuICAgICAgPyBhbHRHZW4oZWwsIHN0YXRlKVxuICAgICAgOiBlbC5vbmNlXG4gICAgICAgID8gZ2VuT25jZShlbCwgc3RhdGUpXG4gICAgICAgIDogZ2VuRWxlbWVudChlbCwgc3RhdGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuRm9yIChcbiAgZWwsXG4gIHN0YXRlLFxuICBhbHRHZW4sXG4gIGFsdEhlbHBlclxuKSB7XG4gIHZhciBleHAgPSBlbC5mb3I7XG4gIHZhciBhbGlhcyA9IGVsLmFsaWFzO1xuICB2YXIgaXRlcmF0b3IxID0gZWwuaXRlcmF0b3IxID8gKFwiLFwiICsgKGVsLml0ZXJhdG9yMSkpIDogJyc7XG4gIHZhciBpdGVyYXRvcjIgPSBlbC5pdGVyYXRvcjIgPyAoXCIsXCIgKyAoZWwuaXRlcmF0b3IyKSkgOiAnJztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIHN0YXRlLm1heWJlQ29tcG9uZW50KGVsKSAmJlxuICAgIGVsLnRhZyAhPT0gJ3Nsb3QnICYmXG4gICAgZWwudGFnICE9PSAndGVtcGxhdGUnICYmXG4gICAgIWVsLmtleVxuICApIHtcbiAgICBzdGF0ZS53YXJuKFxuICAgICAgXCI8XCIgKyAoZWwudGFnKSArIFwiIHYtZm9yPVxcXCJcIiArIGFsaWFzICsgXCIgaW4gXCIgKyBleHAgKyBcIlxcXCI+OiBjb21wb25lbnQgbGlzdHMgcmVuZGVyZWQgd2l0aCBcIiArXG4gICAgICBcInYtZm9yIHNob3VsZCBoYXZlIGV4cGxpY2l0IGtleXMuIFwiICtcbiAgICAgIFwiU2VlIGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2xpc3QuaHRtbCNrZXkgZm9yIG1vcmUgaW5mby5cIixcbiAgICAgIGVsLnJhd0F0dHJzTWFwWyd2LWZvciddLFxuICAgICAgdHJ1ZSAvKiB0aXAgKi9cbiAgICApO1xuICB9XG5cbiAgZWwuZm9yUHJvY2Vzc2VkID0gdHJ1ZTsgLy8gYXZvaWQgcmVjdXJzaW9uXG4gIHJldHVybiAoYWx0SGVscGVyIHx8ICdfbCcpICsgXCIoKFwiICsgZXhwICsgXCIpLFwiICtcbiAgICBcImZ1bmN0aW9uKFwiICsgYWxpYXMgKyBpdGVyYXRvcjEgKyBpdGVyYXRvcjIgKyBcIil7XCIgK1xuICAgICAgXCJyZXR1cm4gXCIgKyAoKGFsdEdlbiB8fCBnZW5FbGVtZW50KShlbCwgc3RhdGUpKSArXG4gICAgJ30pJ1xufVxuXG5mdW5jdGlvbiBnZW5EYXRhJDIgKGVsLCBzdGF0ZSkge1xuICB2YXIgZGF0YSA9ICd7JztcblxuICAvLyBkaXJlY3RpdmVzIGZpcnN0LlxuICAvLyBkaXJlY3RpdmVzIG1heSBtdXRhdGUgdGhlIGVsJ3Mgb3RoZXIgcHJvcGVydGllcyBiZWZvcmUgdGhleSBhcmUgZ2VuZXJhdGVkLlxuICB2YXIgZGlycyA9IGdlbkRpcmVjdGl2ZXMoZWwsIHN0YXRlKTtcbiAgaWYgKGRpcnMpIHsgZGF0YSArPSBkaXJzICsgJywnOyB9XG5cbiAgLy8ga2V5XG4gIGlmIChlbC5rZXkpIHtcbiAgICBkYXRhICs9IFwia2V5OlwiICsgKGVsLmtleSkgKyBcIixcIjtcbiAgfVxuICAvLyByZWZcbiAgaWYgKGVsLnJlZikge1xuICAgIGRhdGEgKz0gXCJyZWY6XCIgKyAoZWwucmVmKSArIFwiLFwiO1xuICB9XG4gIGlmIChlbC5yZWZJbkZvcikge1xuICAgIGRhdGEgKz0gXCJyZWZJbkZvcjp0cnVlLFwiO1xuICB9XG4gIC8vIHByZVxuICBpZiAoZWwucHJlKSB7XG4gICAgZGF0YSArPSBcInByZTp0cnVlLFwiO1xuICB9XG4gIC8vIHJlY29yZCBvcmlnaW5hbCB0YWcgbmFtZSBmb3IgY29tcG9uZW50cyB1c2luZyBcImlzXCIgYXR0cmlidXRlXG4gIGlmIChlbC5jb21wb25lbnQpIHtcbiAgICBkYXRhICs9IFwidGFnOlxcXCJcIiArIChlbC50YWcpICsgXCJcXFwiLFwiO1xuICB9XG4gIC8vIG1vZHVsZSBkYXRhIGdlbmVyYXRpb24gZnVuY3Rpb25zXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuZGF0YUdlbkZucy5sZW5ndGg7IGkrKykge1xuICAgIGRhdGEgKz0gc3RhdGUuZGF0YUdlbkZuc1tpXShlbCk7XG4gIH1cbiAgLy8gYXR0cmlidXRlc1xuICBpZiAoZWwuYXR0cnMpIHtcbiAgICBkYXRhICs9IFwiYXR0cnM6XCIgKyAoZ2VuUHJvcHMoZWwuYXR0cnMpKSArIFwiLFwiO1xuICB9XG4gIC8vIERPTSBwcm9wc1xuICBpZiAoZWwucHJvcHMpIHtcbiAgICBkYXRhICs9IFwiZG9tUHJvcHM6XCIgKyAoZ2VuUHJvcHMoZWwucHJvcHMpKSArIFwiLFwiO1xuICB9XG4gIC8vIGV2ZW50IGhhbmRsZXJzXG4gIGlmIChlbC5ldmVudHMpIHtcbiAgICBkYXRhICs9IChnZW5IYW5kbGVycyhlbC5ldmVudHMsIGZhbHNlKSkgKyBcIixcIjtcbiAgfVxuICBpZiAoZWwubmF0aXZlRXZlbnRzKSB7XG4gICAgZGF0YSArPSAoZ2VuSGFuZGxlcnMoZWwubmF0aXZlRXZlbnRzLCB0cnVlKSkgKyBcIixcIjtcbiAgfVxuICAvLyBzbG90IHRhcmdldFxuICAvLyBvbmx5IGZvciBub24tc2NvcGVkIHNsb3RzXG4gIGlmIChlbC5zbG90VGFyZ2V0ICYmICFlbC5zbG90U2NvcGUpIHtcbiAgICBkYXRhICs9IFwic2xvdDpcIiArIChlbC5zbG90VGFyZ2V0KSArIFwiLFwiO1xuICB9XG4gIC8vIHNjb3BlZCBzbG90c1xuICBpZiAoZWwuc2NvcGVkU2xvdHMpIHtcbiAgICBkYXRhICs9IChnZW5TY29wZWRTbG90cyhlbCwgZWwuc2NvcGVkU2xvdHMsIHN0YXRlKSkgKyBcIixcIjtcbiAgfVxuICAvLyBjb21wb25lbnQgdi1tb2RlbFxuICBpZiAoZWwubW9kZWwpIHtcbiAgICBkYXRhICs9IFwibW9kZWw6e3ZhbHVlOlwiICsgKGVsLm1vZGVsLnZhbHVlKSArIFwiLGNhbGxiYWNrOlwiICsgKGVsLm1vZGVsLmNhbGxiYWNrKSArIFwiLGV4cHJlc3Npb246XCIgKyAoZWwubW9kZWwuZXhwcmVzc2lvbikgKyBcIn0sXCI7XG4gIH1cbiAgLy8gaW5saW5lLXRlbXBsYXRlXG4gIGlmIChlbC5pbmxpbmVUZW1wbGF0ZSkge1xuICAgIHZhciBpbmxpbmVUZW1wbGF0ZSA9IGdlbklubGluZVRlbXBsYXRlKGVsLCBzdGF0ZSk7XG4gICAgaWYgKGlubGluZVRlbXBsYXRlKSB7XG4gICAgICBkYXRhICs9IGlubGluZVRlbXBsYXRlICsgXCIsXCI7XG4gICAgfVxuICB9XG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoLywkLywgJycpICsgJ30nO1xuICAvLyB2LWJpbmQgZHluYW1pYyBhcmd1bWVudCB3cmFwXG4gIC8vIHYtYmluZCB3aXRoIGR5bmFtaWMgYXJndW1lbnRzIG11c3QgYmUgYXBwbGllZCB1c2luZyB0aGUgc2FtZSB2LWJpbmQgb2JqZWN0XG4gIC8vIG1lcmdlIGhlbHBlciBzbyB0aGF0IGNsYXNzL3N0eWxlL211c3RVc2VQcm9wIGF0dHJzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cbiAgaWYgKGVsLmR5bmFtaWNBdHRycykge1xuICAgIGRhdGEgPSBcIl9iKFwiICsgZGF0YSArIFwiLFxcXCJcIiArIChlbC50YWcpICsgXCJcXFwiLFwiICsgKGdlblByb3BzKGVsLmR5bmFtaWNBdHRycykpICsgXCIpXCI7XG4gIH1cbiAgLy8gdi1iaW5kIGRhdGEgd3JhcFxuICBpZiAoZWwud3JhcERhdGEpIHtcbiAgICBkYXRhID0gZWwud3JhcERhdGEoZGF0YSk7XG4gIH1cbiAgLy8gdi1vbiBkYXRhIHdyYXBcbiAgaWYgKGVsLndyYXBMaXN0ZW5lcnMpIHtcbiAgICBkYXRhID0gZWwud3JhcExpc3RlbmVycyhkYXRhKTtcbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBnZW5EaXJlY3RpdmVzIChlbCwgc3Rh
33378dGUpIHtcbiAgdmFyIGRpcnMgPSBlbC5kaXJlY3RpdmVzO1xuICBpZiAoIWRpcnMpIHsgcmV0dXJuIH1cbiAgdmFyIHJlcyA9ICdkaXJlY3RpdmVzOlsnO1xuICB2YXIgaGFzUnVudGltZSA9IGZhbHNlO1xuICB2YXIgaSwgbCwgZGlyLCBuZWVkUnVudGltZTtcbiAgZm9yIChpID0gMCwgbCA9IGRpcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZGlyID0gZGlyc1tpXTtcbiAgICBuZWVkUnVudGltZSA9IHRydWU7XG4gICAgdmFyIGdlbiA9IHN0YXRlLmRpcmVjdGl2ZXNbZGlyLm5hbWVdO1xuICAgIGlmIChnZW4pIHtcbiAgICAgIC8vIGNvbXBpbGUtdGltZSBkaXJlY3RpdmUgdGhhdCBtYW5pcHVsYXRlcyBBU1QuXG4gICAgICAvLyByZXR1cm5zIHRydWUgaWYgaXQgYWxzbyBuZWVkcyBhIHJ1bnRpbWUgY291bnRlcnBhcnQuXG4gICAgICBuZWVkUnVudGltZSA9ICEhZ2VuKGVsLCBkaXIsIHN0YXRlLndhcm4pO1xuICAgIH1cbiAgICBpZiAobmVlZFJ1bnRpbWUpIHtcbiAgICAgIGhhc1J1bnRpbWUgPSB0cnVlO1xuICAgICAgcmVzICs9IFwie25hbWU6XFxcIlwiICsgKGRpci5uYW1lKSArIFwiXFxcIixyYXdOYW1lOlxcXCJcIiArIChkaXIucmF3TmFtZSkgKyBcIlxcXCJcIiArIChkaXIudmFsdWUgPyAoXCIsdmFsdWU6KFwiICsgKGRpci52YWx1ZSkgKyBcIiksZXhwcmVzc2lvbjpcIiArIChKU09OLnN0cmluZ2lmeShkaXIudmFsdWUpKSkgOiAnJykgKyAoZGlyLmFyZyA/IChcIixhcmc6XCIgKyAoZGlyLmlzRHluYW1pY0FyZyA/IGRpci5hcmcgOiAoXCJcXFwiXCIgKyAoZGlyLmFyZykgKyBcIlxcXCJcIikpKSA6ICcnKSArIChkaXIubW9kaWZpZXJzID8gKFwiLG1vZGlmaWVyczpcIiArIChKU09OLnN0cmluZ2lmeShkaXIubW9kaWZpZXJzKSkpIDogJycpICsgXCJ9LFwiO1xuICAgIH1cbiAgfVxuICBpZiAoaGFzUnVudGltZSkge1xuICAgIHJldHVybiByZXMuc2xpY2UoMCwgLTEpICsgJ10nXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuSW5saW5lVGVtcGxhdGUgKGVsLCBzdGF0ZSkge1xuICB2YXIgYXN0ID0gZWwuY2hpbGRyZW5bMF07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIChcbiAgICBlbC5jaGlsZHJlbi5sZW5ndGggIT09IDEgfHwgYXN0LnR5cGUgIT09IDFcbiAgKSkge1xuICAgIHN0YXRlLndhcm4oXG4gICAgICAnSW5saW5lLXRlbXBsYXRlIGNvbXBvbmVudHMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIGNoaWxkIGVsZW1lbnQuJyxcbiAgICAgIHsgc3RhcnQ6IGVsLnN0YXJ0IH1cbiAgICApO1xuICB9XG4gIGlmIChhc3QgJiYgYXN0LnR5cGUgPT09IDEpIHtcbiAgICB2YXIgaW5saW5lUmVuZGVyRm5zID0gZ2VuZXJhdGUoYXN0LCBzdGF0ZS5vcHRpb25zKTtcbiAgICByZXR1cm4gKFwiaW5saW5lVGVtcGxhdGU6e3JlbmRlcjpmdW5jdGlvbigpe1wiICsgKGlubGluZVJlbmRlckZucy5yZW5kZXIpICsgXCJ9LHN0YXRpY1JlbmRlckZuczpbXCIgKyAoaW5saW5lUmVuZGVyRm5zLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24gKGNvZGUpIHsgcmV0dXJuIChcImZ1bmN0aW9uKCl7XCIgKyBjb2RlICsgXCJ9XCIpOyB9KS5qb2luKCcsJykpICsgXCJdfVwiKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlblNjb3BlZFNsb3RzIChcbiAgZWwsXG4gIHNsb3RzLFxuICBzdGF0ZVxuKSB7XG4gIC8vIGJ5IGRlZmF1bHQgc2NvcGVkIHNsb3RzIGFyZSBjb25zaWRlcmVkIFwic3RhYmxlXCIsIHRoaXMgYWxsb3dzIGNoaWxkXG4gIC8vIGNvbXBvbmVudHMgd2l0aCBvbmx5IHNjb3BlZCBzbG90cyB0byBza2lwIGZvcmNlZCB1cGRhdGVzIGZyb20gcGFyZW50LlxuICAvLyBidXQgaW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGJhaWwtb3V0IG9mIHRoaXMgb3B0aW1pemF0aW9uXG4gIC8vIGZvciBleGFtcGxlIGlmIHRoZSBzbG90IGNvbnRhaW5zIGR5bmFtaWMgbmFtZXMsIGhhcyB2LWlmIG9yIHYtZm9yIG9uIHRoZW0uLi5cbiAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSBlbC5mb3IgfHwgT2JqZWN0LmtleXMoc2xvdHMpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzbG90ID0gc2xvdHNba2V5XTtcbiAgICByZXR1cm4gKFxuICAgICAgc2xvdC5zbG90VGFyZ2V0RHluYW1pYyB8fFxuICAgICAgc2xvdC5pZiB8fFxuICAgICAgc2xvdC5mb3IgfHxcbiAgICAgIGNvbnRhaW5zU2xvdENoaWxkKHNsb3QpIC8vIGlzIHBhc3NpbmcgZG93biBzbG90IGZyb20gcGFyZW50IHdoaWNoIG1heSBiZSBkeW5hbWljXG4gICAgKVxuICB9KTtcblxuICAvLyAjOTUzNDogaWYgYSBjb21wb25lbnQgd2l0aCBzY29wZWQgc2xvdHMgaXMgaW5zaWRlIGEgY29uZGl0aW9uYWwgYnJhbmNoLFxuICAvLyBpdCdzIHBvc3NpYmxlIGZvciB0aGUgc2FtZSBjb21wb25lbnQgdG8gYmUgcmV1c2VkIGJ1dCB3aXRoIGRpZmZlcmVudFxuICAvLyBjb21waWxlZCBzbG90IGNvbnRlbnQuIFRvIGF2b2lkIHRoYXQsIHdlIGdlbmVyYXRlIGEgdW5pcXVlIGtleSBiYXNlZCBvblxuICAvLyB0aGUgZ2VuZXJhdGVkIGNvZGUgb2YgYWxsIHRoZSBzbG90IGNvbnRlbnRzLlxuICB2YXIgbmVlZHNLZXkgPSAhIWVsLmlmO1xuXG4gIC8vIE9SIHdoZW4gaXQgaXMgaW5zaWRlIGFub3RoZXIgc2NvcGVkIHNsb3Qgb3Igdi1mb3IgKHRoZSByZWFjdGl2aXR5IG1heSBiZVxuICAvLyBkaXNjb25uZWN0ZWQgZHVlIHRvIHRoZSBpbnRlcm1lZGlhdGUgc2NvcGUgdmFyaWFibGUpXG4gIC8vICM5NDM4LCAjOTUwNlxuICAvLyBUT0RPOiB0aGlzIGNhbiBiZSBmdXJ0aGVyIG9wdGltaXplZCBieSBwcm9wZXJseSBhbmFseXppbmcgaW4tc2NvcGUgYmluZGluZ3NcbiAgLy8gYW5kIHNraXAgZm9yY2UgdXBkYXRpbmcgb25lcyB0aGF0IGRvIG5vdCBhY3R1YWxseSB1c2Ugc2NvcGUgdmFyaWFibGVzLlxuICBpZiAoIW5lZWRzRm9yY2VVcGRhdGUpIHtcbiAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50O1xuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKHBhcmVudC5zbG90U2NvcGUgJiYgcGFyZW50LnNsb3RTY29wZSAhPT0gZW1wdHlTbG90U2NvcGVUb2tlbikgfHxcbiAgICAgICAgcGFyZW50LmZvclxuICAgICAgKSB7XG4gICAgICAgIG5lZWRzRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudC5pZikge1xuICAgICAgICBuZWVkc0tleSA9IHRydWU7XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH1cbiAgfVxuXG4gIHZhciBnZW5lcmF0ZWRTbG90cyA9IE9iamVjdC5rZXlzKHNsb3RzKVxuICAgIC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZ2VuU2NvcGVkU2xvdChzbG90c1trZXldLCBzdGF0ZSk7IH0pXG4gICAgLmpvaW4oJywnKTtcblxuICByZXR1cm4gKFwic2NvcGVkU2xvdHM6X3UoW1wiICsgZ2VuZXJhdGVkU2xvdHMgKyBcIl1cIiArIChuZWVkc0ZvcmNlVXBkYXRlID8gXCIsbnVsbCx0cnVlXCIgOiBcIlwiKSArICghbmVlZHNGb3JjZVVwZGF0ZSAmJiBuZWVkc0tleSA/IChcIixudWxsLGZhbHNlLFwiICsgKGhhc2goZ2VuZXJhdGVkU2xvdHMpKSkgOiBcIlwiKSArIFwiKVwiKVxufVxuXG5mdW5jdGlvbiBoYXNoKHN0cikge1xuICB2YXIgaGFzaCA9IDUzODE7XG4gIHZhciBpID0gc3RyLmxlbmd0aDtcbiAgd2hpbGUoaSkge1xuICAgIGhhc2ggPSAoaGFzaCAqIDMzKSBeIHN0ci5jaGFyQ29kZUF0KC0taSk7XG4gIH1cbiAgcmV0dXJuIGhhc2ggPj4+IDBcbn1cblxuZnVuY3Rpb24gY29udGFpbnNTbG90Q2hpbGQgKGVsKSB7XG4gIGlmIChlbC50eXBlID09PSAxKSB7XG4gICAgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZWwuY2hpbGRyZW4uc29tZShjb250YWluc1Nsb3RDaGlsZClcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gZ2VuU2NvcGVkU2xvdCAoXG4gIGVsLFxuICBzdGF0ZVxuKSB7XG4gIHZhciBpc0xlZ2FjeVN5bnRheCA9IGVsLmF0dHJzTWFwWydzbG90LXNjb3BlJ107XG4gIGlmIChlbC5pZiAmJiAhZWwuaWZQcm9jZXNzZWQgJiYgIWlzTGVnYWN5U3ludGF4KSB7XG4gICAgcmV0dXJuIGdlbklmKGVsLCBzdGF0ZSwgZ2VuU2NvcGVkU2xvdCwgXCJudWxsXCIpXG4gIH1cbiAgaWYgKGVsLmZvciAmJiAhZWwuZm9yUHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIGdlbkZvcihlbCwgc3Rh
33378dGUsIGdlblNjb3BlZFNsb3QpXG4gIH1cbiAgdmFyIHNsb3RTY29wZSA9IGVsLnNsb3RTY29wZSA9PT0gZW1wdHlTbG90U2NvcGVUb2tlblxuICAgID8gXCJcIlxuICAgIDogU3RyaW5nKGVsLnNsb3RTY29wZSk7XG4gIHZhciBmbiA9IFwiZnVuY3Rpb24oXCIgKyBzbG90U2NvcGUgKyBcIil7XCIgK1xuICAgIFwicmV0dXJuIFwiICsgKGVsLnRhZyA9PT0gJ3RlbXBsYXRlJ1xuICAgICAgPyBlbC5pZiAmJiBpc0xlZ2FjeVN5bnRheFxuICAgICAgICA/IChcIihcIiArIChlbC5pZikgKyBcIik/XCIgKyAoZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndW5kZWZpbmVkJykgKyBcIjp1bmRlZmluZWRcIilcbiAgICAgICAgOiBnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd1bmRlZmluZWQnXG4gICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKSkgKyBcIn1cIjtcbiAgLy8gcmV2ZXJzZSBwcm94eSB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICB2YXIgcmV2ZXJzZVByb3h5ID0gc2xvdFNjb3BlID8gXCJcIiA6IFwiLHByb3h5OnRydWVcIjtcbiAgcmV0dXJuIChcIntrZXk6XCIgKyAoZWwuc2xvdFRhcmdldCB8fCBcIlxcXCJkZWZhdWx0XFxcIlwiKSArIFwiLGZuOlwiICsgZm4gKyByZXZlcnNlUHJveHkgKyBcIn1cIilcbn1cblxuZnVuY3Rpb24gZ2VuQ2hpbGRyZW4gKFxuICBlbCxcbiAgc3RhdGUsXG4gIGNoZWNrU2tpcCxcbiAgYWx0R2VuRWxlbWVudCxcbiAgYWx0R2VuTm9kZVxuKSB7XG4gIHZhciBjaGlsZHJlbiA9IGVsLmNoaWxkcmVuO1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgdmFyIGVsJDEgPSBjaGlsZHJlblswXTtcbiAgICAvLyBvcHRpbWl6ZSBzaW5nbGUgdi1mb3JcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmXG4gICAgICBlbCQxLmZvciAmJlxuICAgICAgZWwkMS50YWcgIT09ICd0ZW1wbGF0ZScgJiZcbiAgICAgIGVsJDEudGFnICE9PSAnc2xvdCdcbiAgICApIHtcbiAgICAgIHZhciBub3JtYWxpemF0aW9uVHlwZSA9IGNoZWNrU2tpcFxuICAgICAgICA/IHN0YXRlLm1heWJlQ29tcG9uZW50KGVsJDEpID8gXCIsMVwiIDogXCIsMFwiXG4gICAgICAgIDogXCJcIjtcbiAgICAgIHJldHVybiAoXCJcIiArICgoYWx0R2VuRWxlbWVudCB8fCBnZW5FbGVtZW50KShlbCQxLCBzdGF0ZSkpICsgbm9ybWFsaXphdGlvblR5cGUpXG4gICAgfVxuICAgIHZhciBub3JtYWxpemF0aW9uVHlwZSQxID0gY2hlY2tTa2lwXG4gICAgICA/IGdldE5vcm1hbGl6YXRpb25UeXBlKGNoaWxkcmVuLCBzdGF0ZS5tYXliZUNvbXBvbmVudClcbiAgICAgIDogMDtcbiAgICB2YXIgZ2VuID0gYWx0R2VuTm9kZSB8fCBnZW5Ob2RlO1xuICAgIHJldHVybiAoXCJbXCIgKyAoY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBnZW4oYywgc3RhdGUpOyB9KS5qb2luKCcsJykpICsgXCJdXCIgKyAobm9ybWFsaXphdGlvblR5cGUkMSA/IChcIixcIiArIG5vcm1hbGl6YXRpb25UeXBlJDEpIDogJycpKVxuICB9XG59XG5cbi8vIGRldGVybWluZSB0aGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgZm9yIHRoZSBjaGlsZHJlbiBhcnJheS5cbi8vIDA6IG5vIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4vLyAxOiBzaW1wbGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgKHBvc3NpYmxlIDEtbGV2ZWwgZGVlcCBuZXN0ZWQgYXJyYXkpXG4vLyAyOiBmdWxsIG5vcm1hbGl6YXRpb24gbmVlZGVkXG5mdW5jdGlvbiBnZXROb3JtYWxpemF0aW9uVHlwZSAoXG4gIGNoaWxkcmVuLFxuICBtYXliZUNvbXBvbmVudFxuKSB7XG4gIHZhciByZXMgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsID0gY2hpbGRyZW5baV07XG4gICAgaWYgKGVsLnR5cGUgIT09IDEpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChuZWVkc05vcm1hbGl6YXRpb24oZWwpIHx8XG4gICAgICAgIChlbC5pZkNvbmRpdGlvbnMgJiYgZWwuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG5lZWRzTm9ybWFsaXphdGlvbihjLmJsb2NrKTsgfSkpKSB7XG4gICAgICByZXMgPSAyO1xuICAgICAgYnJlYWtcbiAgICB9XG4gICAgaWYgKG1heWJlQ29tcG9uZW50KGVsKSB8fFxuICAgICAgICAoZWwuaWZDb25kaXRpb25zICYmIGVsLmlmQ29uZGl0aW9ucy5zb21lKGZ1bmN0aW9uIChjKSB7IHJldHVybiBtYXliZUNvbXBvbmVudChjLmJsb2NrKTsgfSkpKSB7XG4gICAgICByZXMgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIG5lZWRzTm9ybWFsaXphdGlvbiAoZWwpIHtcbiAgcmV0dXJuIGVsLmZvciAhPT0gdW5kZWZpbmVkIHx8IGVsLnRhZyA9PT0gJ3RlbXBsYXRlJyB8fCBlbC50YWcgPT09ICdzbG90J1xufVxuXG5mdW5jdGlvbiBnZW5Ob2RlIChub2RlLCBzdGF0ZSkge1xuICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgcmV0dXJuIGdlbkVsZW1lbnQobm9kZSwgc3RhdGUpXG4gIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAzICYmIG5vZGUuaXNDb21tZW50KSB7XG4gICAgcmV0dXJuIGdlbkNvbW1lbnQobm9kZSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2VuVGV4dChub2RlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlblRleHQgKHRleHQpIHtcbiAgcmV0dXJuIChcIl92KFwiICsgKHRleHQudHlwZSA9PT0gMlxuICAgID8gdGV4dC5leHByZXNzaW9uIC8vIG5vIG5lZWQgZm9yICgpIGJlY2F1c2UgYWxyZWFkeSB3cmFwcGVkIGluIF9zKClcbiAgICA6IHRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyhKU09OLnN0cmluZ2lmeSh0ZXh0LnRleHQpKSkgKyBcIilcIilcbn1cblxuZnVuY3Rpb24gZ2VuQ29tbWVudCAoY29tbWVudCkge1xuICByZXR1cm4gKFwiX2UoXCIgKyAoSlNPTi5zdHJpbmdpZnkoY29tbWVudC50ZXh0KSkgKyBcIilcIilcbn1cblxuZnVuY3Rpb24gZ2VuU2xvdCAoZWwsIHN0YXRlKSB7XG4gIHZhciBzbG90TmFtZSA9IGVsLnNsb3ROYW1lIHx8ICdcImRlZmF1bHRcIic7XG4gIHZhciBjaGlsZHJlbiA9IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSk7XG4gIHZhciByZXMgPSBcIl90KFwiICsgc2xvdE5hbWUgKyAoY2hpbGRyZW4gPyAoXCIsXCIgKyBjaGlsZHJlbikgOiAnJyk7XG4gIHZhciBhdHRycyA9IGVsLmF0dHJzIHx8IGVsLmR5bmFtaWNBdHRyc1xuICAgID8gZ2VuUHJvcHMoKGVsLmF0dHJzIHx8IFtdKS5jb25jYXQoZWwuZHluYW1pY0F0dHJzIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGF0dHIpIHsgcmV0dXJuICh7XG4gICAgICAgIC8vIHNsb3QgcHJvcHMgYXJlIGNhbWVsaXplZFxuICAgICAgICBuYW1lOiBjYW1lbGl6ZShhdHRyLm5hbWUpLFxuICAgICAgICB2YWx1ZTogYXR0ci52YWx1ZSxcbiAgICAgICAgZHluYW1pYzogYXR0ci5keW5hbWljXG4gICAgICB9KTsgfSkpXG4gICAgOiBudWxsO1xuICB2YXIgYmluZCQkMSA9IGVsLmF0dHJzTWFwWyd2LWJpbmQnXTtcbiAgaWYgKChhdHRycyB8fCBiaW5kJCQxKSAmJiAhY2hpbGRyZW4pIHtcbiAgICByZXMgKz0gXCIsbnVsbFwiO1xuICB9XG4gIGlmIChhdHRycykge1xuICAgIHJlcyArPSBcIixcIiArIGF0dHJzO1xuICB9XG4gIGlmIChiaW5kJCQxKSB7XG4gICAgcmVzICs9IChhdHRycyA/ICcnIDogJyxudWxsJykgKyBcIixcIiArIGJpbmQkJDE7XG4gIH1cbiAgcmV0dXJuIHJlcyArICcpJ1xufVxuXG4vLyBjb21wb25lbnROYW1lIGlzIGVsLmNvbXBvbmVudCwgdGFrZSBpdCBhcyBhcmd1bWVudCB0byBzaHVuIGZsb3cncyBwZXNzaW1pc3RpYyByZWZpbmVtZW50XG5mdW5jdGlvbiBnZW5Db21wb25lbnQgKFxuICBjb21wb25lbnROYW1lLFxuICBlbCxcbiAgc3RhdGVcbikge1xuICB2YXIgY2hpbGRyZW4gPSBlbC5pbmxpbmVUZW1wbGF0ZSA/IG51bGwgOiBnZW5DaGlsZHJlbihlbCwgc3Rh
33378dGUsIHRydWUpO1xuICByZXR1cm4gKFwiX2MoXCIgKyBjb21wb25lbnROYW1lICsgXCIsXCIgKyAoZ2VuRGF0YSQyKGVsLCBzdGF0ZSkpICsgKGNoaWxkcmVuID8gKFwiLFwiICsgY2hpbGRyZW4pIDogJycpICsgXCIpXCIpXG59XG5cbmZ1bmN0aW9uIGdlblByb3BzIChwcm9wcykge1xuICB2YXIgc3RhdGljUHJvcHMgPSBcIlwiO1xuICB2YXIgZHluYW1pY1Byb3BzID0gXCJcIjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwcm9wID0gcHJvcHNbaV07XG4gICAgdmFyIHZhbHVlID0gdHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzKHByb3AudmFsdWUpO1xuICAgIGlmIChwcm9wLmR5bmFtaWMpIHtcbiAgICAgIGR5bmFtaWNQcm9wcyArPSAocHJvcC5uYW1lKSArIFwiLFwiICsgdmFsdWUgKyBcIixcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGljUHJvcHMgKz0gXCJcXFwiXCIgKyAocHJvcC5uYW1lKSArIFwiXFxcIjpcIiArIHZhbHVlICsgXCIsXCI7XG4gICAgfVxuICB9XG4gIHN0YXRpY1Byb3BzID0gXCJ7XCIgKyAoc3RhdGljUHJvcHMuc2xpY2UoMCwgLTEpKSArIFwifVwiO1xuICBpZiAoZHluYW1pY1Byb3BzKSB7XG4gICAgcmV0dXJuIChcIl9kKFwiICsgc3RhdGljUHJvcHMgKyBcIixbXCIgKyAoZHluYW1pY1Byb3BzLnNsaWNlKDAsIC0xKSkgKyBcIl0pXCIpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YXRpY1Byb3BzXG4gIH1cbn1cblxuLy8gIzM4OTUsICM0MjY4XG5mdW5jdGlvbiB0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMgKHRleHQpIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvXFx1MjAyOC9nLCAnXFxcXHUyMDI4JylcbiAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCAnXFxcXHUyMDI5Jylcbn1cblxuLyogICovXG5cblxuXG4vLyB0aGVzZSBrZXl3b3JkcyBzaG91bGQgbm90IGFwcGVhciBpbnNpZGUgZXhwcmVzc2lvbnMsIGJ1dCBvcGVyYXRvcnMgbGlrZVxuLy8gdHlwZW9mLCBpbnN0YW5jZW9mIGFuZCBpbiBhcmUgYWxsb3dlZFxudmFyIHByb2hpYml0ZWRLZXl3b3JkUkUgPSBuZXcgUmVnRXhwKCdcXFxcYicgKyAoXG4gICdkbyxpZixmb3IsbGV0LG5ldyx0cnksdmFyLGNhc2UsZWxzZSx3aXRoLGF3YWl0LGJyZWFrLGNhdGNoLGNsYXNzLGNvbnN0LCcgK1xuICAnc3VwZXIsdGhyb3csd2hpbGUseWllbGQsZGVsZXRlLGV4cG9ydCxpbXBvcnQscmV0dXJuLHN3aXRjaCxkZWZhdWx0LCcgK1xuICAnZXh0ZW5kcyxmaW5hbGx5LGNvbnRpbnVlLGRlYnVnZ2VyLGZ1bmN0aW9uLGFyZ3VtZW50cydcbikuc3BsaXQoJywnKS5qb2luKCdcXFxcYnxcXFxcYicpICsgJ1xcXFxiJyk7XG5cbi8vIHRoZXNlIHVuYXJ5IG9wZXJhdG9ycyBzaG91bGQgbm90IGJlIHVzZWQgYXMgcHJvcGVydHkvbWV0aG9kIG5hbWVzXG52YXIgdW5hcnlPcGVyYXRvcnNSRSA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArIChcbiAgJ2RlbGV0ZSx0eXBlb2Ysdm9pZCdcbikuc3BsaXQoJywnKS5qb2luKCdcXFxccypcXFxcKFteXFxcXCldKlxcXFwpfFxcXFxiJykgKyAnXFxcXHMqXFxcXChbXlxcXFwpXSpcXFxcKScpO1xuXG4vLyBzdHJpcCBzdHJpbmdzIGluIGV4cHJlc3Npb25zXG52YXIgc3RyaXBTdHJpbmdSRSA9IC8nKD86W14nXFxcXF18XFxcXC4pKid8XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwifGAoPzpbXmBcXFxcXXxcXFxcLikqXFwkXFx7fFxcfSg/OlteYFxcXFxdfFxcXFwuKSpgfGAoPzpbXmBcXFxcXXxcXFxcLikqYC9nO1xuXG4vLyBkZXRlY3QgcHJvYmxlbWF0aWMgZXhwcmVzc2lvbnMgaW4gYSB0ZW1wbGF0ZVxuZnVuY3Rpb24gZGV0ZWN0RXJyb3JzIChhc3QsIHdhcm4pIHtcbiAgaWYgKGFzdCkge1xuICAgIGNoZWNrTm9kZShhc3QsIHdhcm4pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrTm9kZSAobm9kZSwgd2Fybikge1xuICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiBub2RlLmF0dHJzTWFwKSB7XG4gICAgICBpZiAoZGlyUkUudGVzdChuYW1lKSkge1xuICAgICAgICB2Y
33378XIgdmFsdWUgPSBub2RlLmF0dHJzTWFwW25hbWVdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB2YXIgcmFuZ2UgPSBub2RlLnJhd0F0dHJzTWFwW25hbWVdO1xuICAgICAgICAgIGlmIChuYW1lID09PSAndi1mb3InKSB7XG4gICAgICAgICAgICBjaGVja0Zvcihub2RlLCAoXCJ2LWZvcj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3Ytc2xvdCcgfHwgbmFtZVswXSA9PT0gJyMnKSB7XG4gICAgICAgICAgICBjaGVja0Z1bmN0aW9uUGFyYW1ldGVyRXhwcmVzc2lvbih2YWx1ZSwgKG5hbWUgKyBcIj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob25SRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICBjaGVja0V2ZW50KHZhbHVlLCAobmFtZSArIFwiPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoZWNrRXhwcmVzc2lvbih2YWx1ZSwgKG5hbWUgKyBcIj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNoZWNrTm9kZShub2RlLmNoaWxkcmVuW2ldLCB3YXJuKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAyKSB7XG4gICAgY2hlY2tFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbiwgbm9kZS50ZXh0LCB3YXJuLCBub2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0V2ZW50IChleHAsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gIHZhciBzdHJpcHBlZCA9IGV4cC5yZXBsYWNlKHN0cmlwU3RyaW5nUkUsICcnKTtcbiAgdmFyIGtleXdvcmRNYXRjaCA9IHN0cmlwcGVkLm1hdGNoKHVuYXJ5T3BlcmF0b3JzUkUpO1xuICBpZiAoa2V5d29yZE1hdGNoICYmIHN0cmlwcGVkLmNoYXJBdChrZXl3b3JkTWF0Y2guaW5kZXggLSAxKSAhPT0gJyQnKSB7XG4gICAgd2FybihcbiAgICAgIFwiYXZvaWQgdXNpbmcgSmF2YVNjcmlwdCB1bmFyeSBvcGVyYXRvciBhcyBwcm9wZXJ0eSBuYW1lOiBcIiArXG4gICAgICBcIlxcXCJcIiArIChrZXl3b3JkTWF0Y2hbMF0pICsgXCJcXFwiIGluIGV4cHJlc3Npb24gXCIgKyAodGV4dC50cmltKCkpLFxuICAgICAgcmFuZ2VcbiAgICApO1xuICB9XG4gIGNoZWNrRXhwcmVzc2lvbihleHAsIHRleHQsIHdhcm4sIHJhbmdlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tGb3IgKG5vZGUsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gIGNoZWNrRXhwcmVzc2lvbihub2RlLmZvciB8fCAnJywgdGV4dCwgd2FybiwgcmFuZ2UpO1xuICBjaGVja0lkZW50aWZpZXIobm9kZS5hbGlhcywgJ3YtZm9yIGFsaWFzJywgdGV4dCwgd2FybiwgcmFuZ2UpO1xuICBjaGVja0lkZW50aWZpZXIobm9kZS5pdGVyYXRvcjEsICd2LWZvciBpdGVyYXRvcicsIHRleHQsIHdhcm4sIHJhbmdlKTtcbiAgY2hlY2tJZGVudGlmaWVyKG5vZGUuaXRlcmF0b3IyLCAndi1mb3IgaXRlcmF0b3InLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrSWRlbnRpZmllciAoXG4gIGlkZW50LFxuICB0eXBlLFxuICB0ZXh0LFxuICB3YXJuLFxuICByYW5nZVxuKSB7XG4gIGlmICh0eXBlb2YgaWRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBGdW5jdGlvbigoXCJ2YXIgXCIgKyBpZGVudCArIFwiPV9cIikpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHdhcm4oKFwiaW52YWxpZCBcIiArIHR5cGUgKyBcIiBcXFwiXCIgKyBpZGVudCArIFwiXFxcIiBpbiBleHByZXNzaW9uOiBcIiArICh0ZXh0LnRyaW0oKSkpLCByYW5nZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrRXhwcmVzc2lvbiAoZXhwLCB0ZXh0LCB3YXJuLCByYW5nZSkge1xuICB0cnkge1xuICAgIG5ldyBGdW5jdGlvbigoXCJyZXR1cm4gXCIgKyBleHApKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciBrZXl3b3JkTWF0Y2ggPSBleHAucmVwbGFjZShzdHJpcFN0cmluZ1JFLCAnJykubWF0Y2gocHJvaGliaXRlZEtleXdvcmRSRSk7XG4gICAgaWYgKGtleXdvcmRNYXRjaCkge1xuICAgICAgd2FybihcbiAgICAgICAgXCJhdm9pZCB1c2luZyBKYXZhU2NyaXB0IGtleXdvcmQgYXMgcHJvcGVydHkgbmFtZTogXCIgK1xuICAgICAgICBcIlxcXCJcIiArIChrZXl3b3JkTWF0Y2hbMF0pICsgXCJcXFwiXFxuICBSYXcgZXhwcmVzc2lvbjogXCIgKyAodGV4dC50cmltKCkpLFxuICAgICAgICByYW5nZVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2FybihcbiAgICAgICAgXCJpbnZhbGlkIGV4cHJlc3Npb246IFwiICsgKGUubWVzc2FnZSkgKyBcIiBpblxcblxcblwiICtcbiAgICAgICAgXCIgICAgXCIgKyBleHAgKyBcIlxcblxcblwiICtcbiAgICAgICAgXCIgIFJhdyBleHByZXNzaW9uOiBcIiArICh0ZXh0LnRyaW0oKSkgKyBcIlxcblwiLFxuICAgICAgICByYW5nZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tGdW5jdGlvblBhcmFtZXRlckV4cHJlc3Npb24gKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgdHJ5IHtcbiAgICBuZXcgRnVuY3Rpb24oZXhwLCAnJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB3YXJuKFxuICAgICAgXCJpbnZhbGlkIGZ1bmN0aW9uIHBhcmFtZXRlciBleHByZXNzaW9uOiBcIiArIChlLm1lc3NhZ2UpICsgXCIgaW5cXG5cXG5cIiArXG4gICAgICBcIiAgICBcIiArIGV4cCArIFwiXFxuXFxuXCIgK1xuICAgICAgXCIgIFJhdyBleHByZXNzaW9uOiBcIiArICh0ZXh0LnRyaW0oKSkgKyBcIlxcblwiLFxuICAgICAgcmFuZ2VcbiAgICApO1xuICB9XG59XG5cbi8qICAqL1xuXG52YXIgcmFuZ2UgPSAyO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZUNvZGVGcmFtZSAoXG4gIHNvdXJjZSxcbiAgc3RhcnQsXG4gIGVuZFxuKSB7XG4gIGlmICggc3RhcnQgPT09IHZvaWQgMCApIHN0YXJ0ID0gMDtcbiAgaWYgKCBlbmQgPT09IHZvaWQgMCApIGVuZCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KC9cXHI/XFxuLyk7XG4gIHZhciBjb3VudCA9IDA7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIGNvdW50ICs9IGxpbmVzW2ldLmxlbmd0aCArIDE7XG4gICAgaWYgKGNvdW50ID49IHN0YXJ0KSB7XG4gICAgICBmb3IgKHZhciBqID0gaSAtIHJhbmdlOyBqIDw9IGkgKyByYW5nZSB8fCBlbmQgPiBjb3VudDsgaisrKSB7XG4gICAgICAgIGlmIChqIDwgMCB8fCBqID49IGxpbmVzLmxlbmd0aCkgeyBjb250aW51ZSB9XG4gICAgICAgI
33378HJlcy5wdXNoKChcIlwiICsgKGogKyAxKSArIChyZXBlYXQkMShcIiBcIiwgMyAtIFN0cmluZyhqICsgMSkubGVuZ3RoKSkgKyBcInwgIFwiICsgKGxpbmVzW2pdKSkpO1xuICAgICAgICB2YXIgbGluZUxlbmd0aCA9IGxpbmVzW2pdLmxlbmd0aDtcbiAgICAgICAgaWYgKGogPT09IGkpIHtcbiAgICAgICAgICAvLyBwdXNoIHVuZGVybGluZVxuICAgICAgICAgIHZhciBwYWQgPSBzdGFydCAtIChjb3VudCAtIGxpbmVMZW5ndGgpICsgMTtcbiAgICAgICAgICB2YXIgbGVuZ3RoID0gZW5kID4gY291bnQgPyBsaW5lTGVuZ3RoIC0gcGFkIDogZW5kIC0gc3RhcnQ7XG4gICAgICAgICAgcmVzLnB1c2goXCIgICB8ICBcIiArIHJlcGVhdCQxKFwiIFwiLCBwYWQpICsgcmVwZWF0JDEoXCJeXCIsIGxlbmd0aCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGogPiBpKSB7XG4gICAgICAgICAgaWYgKGVuZCA+IGNvdW50KSB7XG4gICAgICAgICAgICB2YXIgbGVuZ3RoJDEgPSBNYXRoLm1pbihlbmQgLSBjb3VudCwgbGluZUxlbmd0aCk7XG4gICAgICAgICAgICByZXMucHVzaChcIiAgIHwgIFwiICsgcmVwZWF0JDEoXCJeXCIsIGxlbmd0aCQxKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvdW50ICs9IGxpbmVMZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzLmpvaW4oJ1xcbicpXG59XG5cbmZ1bmN0aW9uIHJlcGVhdCQxIChzdHIsIG4pIHtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAobiA+IDApIHtcbiAgICB3aGlsZSAodHJ1ZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICBpZiAobiAmIDEpIHsgcmVzdWx0ICs9IHN0cjsgfVxuICAgICAgbiA+Pj49IDE7XG4gICAgICBpZiAobiA8PSAwKSB7IGJyZWFrIH1cbiAgICAgIHN0ciArPSBzdHI7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuLyogICovXG5cblxuXG5mdW5jdGlvbiBjcmVhdGVGdW5jdGlvbiAoY29kZSwgZXJyb3JzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbihjb2RlKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvcnMucHVzaCh7IGVycjogZXJyLCBjb2RlOiBjb2RlIH0pO1xuICAgIHJldHVybiBub29wXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcGlsZVRvRnVuY3Rpb25GbiAoY29tcGlsZSkge1xuICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBjb21waWxlVG9GdW5jdGlvbnMgKFxuICAgIHRlbXBsYXRlLFxuICAgIG9wdGlvbnMsXG4gICAgdm1cbiAgKSB7XG4gICAgb3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucyk7XG4gICAgdmFyIHdhcm4kJDEgPSBvcHRpb25zLndhcm4gfHwgd2FybjtcbiAgICBkZWxldGUgb3B0aW9ucy53YXJuO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIC8vIGRldGVjdCBwb3NzaWJsZSBDU1AgcmVzdHJpY3Rpb25cbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBGdW5jdGlvbigncmV0dXJuIDEnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUudG9TdHJpbmcoKS5tYXRjaCgvdW5zYWZlLWV2YWx8Q1NQLykpIHtcbiAgICAgICAgICB3YXJuJCQxKFxuICAgICAgICAgICAgJ0l0IHNlZW1zIHlvdSBhcmUgdXNpbmcgdGhlIHN0YW5kYWxvbmUgYnVpbGQgb2YgVnVlLmpzIGluIGFuICcgK1xuICAgICAgICAgICAgJ2Vudmlyb25tZW50IHdpdGggQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdGhhdCBwcm9oaWJpdHMgdW5zYWZlLWV2YWwuICcgK1xuICAgICAgICAgICAgJ1RoZSB0ZW1wbGF0ZSBjb21waWxlciBjYW5ub3Qgd29yayBpbiB0aGlzIGVudmlyb25tZW50LiBDb25zaWRlciAnICtcbiAgICAgICAgICAgICdyZWxheGluZyB0aGUgcG9saWN5IHRvIGFsbG93IHVuc2FmZS1ldmFsIG9yIHByZS1jb21waWxpbmcgeW91ciAnICtcbiAgICAgICAgICAgICd0ZW1wbGF0ZXMgaW50byByZW5kZXIgZnVuY3Rpb25zLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgY2FjaGVcbiAgICB2YXIga2V5ID0gb3B0aW9ucy5kZWxpbWl0ZXJzXG4gICAgICA/IFN0cmluZyhvcHRpb25zLmRlbGltaXRlcnMpICsgdGVtcGxhdGVcbiAgICAgIDogdGVtcGxhdGU7XG4gICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgIHJldHVybiBjYWNoZVtrZXldXG4gICAgfVxuXG4gICAgLy8gY29tcGlsZVxuICAgIHZhciBjb21waWxlZCA9IGNvbXBpbGUodGVtcGxhdGUsIG9wdGlvbnMpO1xuXG4gICAgLy8gY2hlY2sgY29tcGlsYXRpb24gZXJyb3JzL3RpcHNcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGNvbXBpbGVkLmVycm9ycyAmJiBjb21waWxlZC5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgY29tcGlsZWQuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHdhcm4kJDEoXG4gICAgICAgICAgICAgIFwiRXJyb3IgY29tcGlsaW5nIHRlbXBsYXRlOlxcblxcblwiICsgKGUubXNnKSArIFwiXFxuXFxuXCIgK1xuICAgICAgICAgICAgICBnZW5lcmF0ZUNvZGVGcmFtZSh0ZW1wbGF0ZSwgZS5zdGFydCwgZS5lbmQpLFxuICAgICAgICAgICAgICB2bVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YXJuJCQxKFxuICAgICAgICAgICAgXCJFcnJvciBjb21waWxpbmcgdGVtcGxhdGU6XFxuXFxuXCIgKyB0ZW1wbGF0ZSArIFwiXFxuXFxuXCIgK1xuICAgICAgICAgICAgY29tcGlsZWQuZXJyb3JzLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4gKFwiLSBcIiArIGUpOyB9KS5qb2luKCdcXG4nKSArICdcXG4nLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY29tcGlsZWQudGlwcyAmJiBjb21waWxlZC50aXBzLmxlbmd0aCkge1xuICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgIGNvbXBpbGVkLnRpcHMuZm9yRWFjaChmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGlwKGUubXNnLCB2bSk7IH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbXBpbGVkLnRpcHMuZm9yRWFjaChmdW5jdGlvbiAobXNnKSB7IHJldHVybi
33378B0aXAobXNnLCB2bSk7IH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHVybiBjb2RlIGludG8gZnVuY3Rpb25zXG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBmbkdlbkVycm9ycyA9IFtdO1xuICAgIHJlcy5yZW5kZXIgPSBjcmVhdGVGdW5jdGlvbihjb21waWxlZC5yZW5kZXIsIGZuR2VuRXJyb3JzKTtcbiAgICByZXMuc3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWQuc3RhdGljUmVuZGVyRm5zLm1hcChmdW5jdGlvbiAoY29kZSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUZ1bmN0aW9uKGNvZGUsIGZuR2VuRXJyb3JzKVxuICAgIH0pO1xuXG4gICAgLy8gY2hlY2sgZnVuY3Rpb24gZ2VuZXJhdGlvbiBlcnJvcnMuXG4gICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlcmUgaXMgYSBidWcgaW4gdGhlIGNvbXBpbGVyIGl0c2VsZi5cbiAgICAvLyBtb3N0bHkgZm9yIGNvZGVnZW4gZGV2ZWxvcG1lbnQgdXNlXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICgoIWNvbXBpbGVkLmVycm9ycyB8fCAhY29tcGlsZWQuZXJyb3JzLmxlbmd0aCkgJiYgZm5HZW5FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIHdhcm4kJDEoXG4gICAgICAgICAgXCJGYWlsZWQgdG8gZ2VuZXJhdGUgcmVuZGVyIGZ1bmN0aW9uOlxcblxcblwiICtcbiAgICAgICAgICBmbkdlbkVycm9ycy5tYXAoZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgdmFyIGVyciA9IHJlZi5lcnI7XG4gICAgICAgICAgICB2Y
33378XIgY29kZSA9IHJlZi5jb2RlO1xuXG4gICAgICAgICAgICByZXR1cm4gKChlcnIudG9TdHJpbmcoKSkgKyBcIiBpblxcblxcblwiICsgY29kZSArIFwiXFxuXCIpO1xuICAgICAgICB9KS5qb2luKCdcXG4nKSxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoY2FjaGVba2V5XSA9IHJlcylcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gY3JlYXRlQ29tcGlsZXJDcmVhdG9yIChiYXNlQ29tcGlsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlQ29tcGlsZXIgKGJhc2VPcHRpb25zKSB7XG4gICAgZnVuY3Rpb24gY29tcGlsZSAoXG4gICAgICB0ZW1wbGF0ZSxcbiAgICAgIG9wdGlvbnNcbiAgICApIHtcbiAgICAgIHZhciBmaW5hbE9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKGJhc2VPcHRpb25zKTtcbiAgICAgIHZhciBlcnJvcnMgPSBbXTtcbiAgICAgIHZhciB0aXBzID0gW107XG5cbiAgICAgIHZhciB3YXJuID0gZnVuY3Rpb24gKG1zZywgcmFuZ2UsIHRpcCkge1xuICAgICAgICAodGlwID8gdGlwcyA6IGVycm9ycykucHVzaChtc2cpO1xuICAgICAgfTtcblxuICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICAgIHZhciBsZWFkaW5nU3BhY2VMZW5ndGggPSB0ZW1wbGF0ZS5tYXRjaCgvXlxccyovKVswXS5sZW5ndGg7XG5cbiAgICAgICAgICB3YXJuID0gZnVuY3Rpb24gKG1zZywgcmFuZ2UsIHRpcCkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB7IG1zZzogbXNnIH07XG4gICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnN0YXJ0ID0gcmFuZ2Uuc3RhcnQgKyBsZWFkaW5nU3BhY2VMZW5ndGg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJhbmdlLmVuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5lbmQgPSByYW5nZS5lbmQgKyBsZWFkaW5nU3BhY2VMZW5ndGg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICh0aXAgPyB0aXBzIDogZXJyb3JzKS5wdXNoKGRhdGEpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWVyZ2UgY3VzdG9tIG1vZHVsZXNcbiAgICAgICAgaWYgKG9wdGlvbnMubW9kdWxlcykge1xuICAgICAgICAgIGZpbmFsT3B0aW9ucy5tb2R1bGVzID1cbiAgICAgICAgICAgIChiYXNlT3B0aW9ucy5tb2R1bGVzIHx8IFtdKS5jb25jYXQob3B0aW9ucy5tb2R1bGVzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtZXJnZSBjdXN0b20gZGlyZWN0aXZlc1xuICAgICAgICBpZiAob3B0aW9ucy5kaXJlY3RpdmVzKSB7XG4gICAgICAgICAgZmluYWxPcHRpb25zLmRpcmVjdGl2ZXMgPSBleHRlbmQoXG4gICAgICAgICAgICBPYmplY3QuY3JlYXRlKGJhc2VPcHRpb25zLmRpcmVjdGl2ZXMgfHwgbnVsbCksXG4gICAgICAgICAgICBvcHRpb25zLmRpcmVjdGl2ZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvcHkgb3RoZXIgb3B0aW9uc1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgICAgIGlmIChrZXkgIT09ICdtb2R1bGVzJyAmJiBrZXkgIT09ICdkaXJlY3RpdmVzJykge1xuICAgICAgICAgICAgZmluYWxPcHRpb25zW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZpbmFsT3B0aW9ucy53YXJuID0gd2FybjtcblxuICAgICAgdmFyIGNvbXBpbGVkID0gYmFzZUNvbXBpbGUodGVtcGxhdGUudHJpbSgpLCBmaW5hbE9wdGlvbnMpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgZGV0ZWN0RXJyb3JzKGNvbXBpbGVkLmFzdCwgd2Fybik7XG4gICAgICB9XG4gICAgICBjb21waWxlZC5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICBjb21waWxlZC50aXBzID0gdGlwcztcbiAgICAgIHJldHVybiBjb21waWxlZFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb21waWxlOiBjb21waWxlLFxuICAgICAgY29tcGlsZVRvRnVuY3Rpb25zOiBjcmVhdGVDb21waWxlVG9GdW5jdGlvbkZuKGNvbXBpbGUpXG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vLyBgY3JlYXRlQ29tcGlsZXJDcmVhdG9yYCBhbGxvd3MgY3JlYXRpbmcgY29tcGlsZXJzIHRoYXQgdXNlIGFsdGVybmF0aXZlXG4vLyBwYXJzZXIvb3B0aW1pemVyL2NvZGVnZW4sIGUuZyB0aGUgU1NSIG9wdGltaXppbmcgY29tcGlsZXIuXG4vLyBIZXJlIHdlIGp1c3QgZXhwb3J0IGEgZGVmYXVsdCBjb21waWxlciB1c2luZyB0aGUgZGVmYXVsdCBwYXJ0cy5cbnZhciBjcmVhdGVDb21waWxlciA9IGNyZWF0ZUNvbXBpbGVyQ3JlYXRvcihmdW5jdGlvbiBiYXNlQ29tcGlsZSAoXG4gIHRlbXBsYXRlLFxuICBvcHRpb25zXG4pIHtcbiAgdmFyIGFzdCA9IHBhcnNlKHRlbXBsYXRlLnRyaW0oKSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLm9wdGltaXplICE9PSBmYWxzZSkge1xuICAgIG9wdGltaXplKGFzdCwgb3B0aW9ucyk7XG4gIH1cbiAgdmFyIGNvZGUgPSBnZW5lcmF0ZShhc3QsIG9wdGlvbnMpO1xuICByZXR1cm4ge1xuICAgIGFzdDogYXN0LFxuICAgIHJlbmRlcjogY29kZS5yZW5kZXIsXG4gICAgc3RhdGljUmVuZGVyRm5zOiBjb2RlLnN0YXRpY1JlbmRlckZuc1xuICB9XG59KTtcblxuLyogICovXG5cbnZhciByZWYkMSA9IGNyZWF0ZUNvbXBpbGVyKGJhc2VPcHRpb25zKTtcbnZhciBjb21waWxlID0gcmVmJDEuY29tcGlsZTtcbnZhciBjb21waWxlVG9GdW5jdGlvbnMgPSByZWYkMS5jb21waWxlVG9GdW5jdGlvbnM7XG5cbi8qICAqL1xuXG4vLyBjaGVjayB3aGV0aGVyIGN1cnJlbnQgYnJvd3NlciBlbmNvZGVzIGEgY2hhciBpbnNpZGUgYXR0cmlidXRlIHZhbHVlc1xudmFyIGRpdjtcbmZ1bmN0aW9uIGdldFNob3VsZERlY29kZSAoaHJlZikge1xuICBkaXYgPSBkaXYgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGRpdi5pbm5lckhUTUwgPSBocmVmID8gXCI8YSBocmVmPVxcXCJcXG5cXFwiLz5cIiA6IFwiPGRpdiBhPVxcXCJcXG5cXFwiLz5cIjtcbiAgcmV0dXJuIGRpdi5pbm5lckhUTUwuaW5kZXhPZignJiMxMDsnKSA+IDBcbn1cblxuLy8gIzM2NjM6IElFIGVuY29kZXMgbmV3bGluZXMgaW5zaWRlIGF0dHJpYnV0ZSB2YWx1ZXMgd2hpbGUgb3RoZXIgYnJvd3NlcnMgZG9uJ3RcbnZhciBzaG91bGREZWNvZGVOZXdsaW5lcyA9IGluQnJvd3NlciA/IGdldFNob3VsZERlY29kZShmYWxzZSkgOiBmYWxzZTtcbi8vICM2ODI4OiBjaHJvbWUgZW5jb2RlcyBjb250ZW50IGluIGFbaHJlZl1cbnZhciBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYgPSBpbkJyb3dzZXIgPyBnZXRTaG91bGREZWNvZGUodHJ1ZSkgOiBmYWxzZTtcblxuLyogICovXG5cbnZhciBpZFRvVGVtcGxhdGUgPSBjYWNoZWQoZnVuY3Rpb24gKGlkKSB7XG4gIHZhciBlbCA9IHF1ZXJ5KGlkKTtcbiAgcmV0dXJuIGVsICYmIGVsLmlubmVySFRNTFxufSk7XG5cbnZhciBtb3VudCA9IFZ1ZS5wcm90b3R5cGUuJG1vdW50O1xuVnVlLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICBlbCA9IGVsICYmIHF1ZXJ5KGVsKTtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGVsID09PSBkb2N1bWVudC5ib2R5IHx8IGVsID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICBcIkRvIG5vdCBtb3VudCBWdWUgdG8gPGh0bWw+IG9yIDxib2R5PiAtIG1vdW50IHRvIG5vcm1hbCBlbGVtZW50cyBpbnN0ZWFkLlwiXG4gICAgKTtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zO1xuICAvLyByZXNvbHZlIHRlbXBsYXRlL2VsIGFuZCBjb252ZXJ0IHRvIHJlbmRlciBmdW5jdGlvblxuICBpZiAoIW9wdGlvbnMucmVuZGVyKSB7XG4gICAgdmFyIHRlbXBsYXRlID0gb3B0aW9ucy50ZW1wbGF0ZTtcbiAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgIGlmICh0eXBlb2YgdGVtcGxhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0ZW1wbGF0ZS5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgI
33378HRlbXBsYXRlID0gaWRUb1RlbXBsYXRlKHRlbXBsYXRlKTtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgIChcIlRlbXBsYXRlIGVsZW1lbnQgbm90IGZvdW5kIG9yIGlzIGVtcHR5OiBcIiArIChvcHRpb25zLnRlbXBsYXRlKSksXG4gICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRlbXBsYXRlLm5vZGVUeXBlKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuaW5uZXJIVE1MO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKCdpbnZhbGlkIHRlbXBsYXRlIG9wdGlvbjonICsgdGVtcGxhdGUsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbCkge1xuICAgICAgdGVtcGxhdGUgPSBnZXRPdXRlckhUTUwoZWwpO1xuICAgIH1cbiAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgbWFyaygnY29tcGlsZScpO1xuICAgICAgfVxuXG4gICAgICB2Y
33378XIgcmVmID0gY29tcGlsZVRvRnVuY3Rpb25zKHRlbXBsYXRlLCB7XG4gICAgICAgIG91dHB1dFNvdXJjZVJhbmdlOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxuICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lczogc2hvdWxkRGVjb2RlTmV3bGluZXMsXG4gICAgICAgIHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjogc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmLFxuICAgICAgICBkZWxpbWl0ZXJzOiBvcHRpb25zLmRlbGltaXRlcnMsXG4gICAgICAgIGNvbW1lbnRzOiBvcHRpb25zLmNvbW1lbnRzXG4gICAgICB9LCB0aGlzKTtcbiAgICAgIHZhciByZW5kZXIgPSByZWYucmVuZGVyO1xuICAgICAgdmFyIHN0YXRpY1JlbmRlckZucyA9IHJlZi5zdGF0aWNSZW5kZXJGbnM7XG4gICAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlcjtcbiAgICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICAgIG1hcmsoJ2NvbXBpbGUgZW5kJyk7XG4gICAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgKHRoaXMuX25hbWUpICsgXCIgY29tcGlsZVwiKSwgJ2NvbXBpbGUnLCAnY29tcGlsZSBlbmQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1vdW50LmNhbGwodGhpcywgZWwsIGh5ZHJhdGluZylcbn07XG5cbi8qKlxuICogR2V0IG91dGVySFRNTCBvZiBlbGVtZW50cywgdGFraW5nIGNhcmVcbiAqIG9mIFNWRyBlbGVtZW50cyBpbiBJRSBhcyB3ZWxsLlxuICovXG5mdW5jdGlvbiBnZXRPdXRlckhUTUwgKGVsKSB7XG4gIGlmIChlbC5vdXRlckhUTUwpIHtcbiAgICByZXR1cm4gZWwub3V0ZXJIVE1MXG4gIH0gZWxzZSB7XG4gICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgIHJldHVybiBjb250YWluZXIuaW5uZXJIVE1MXG4gIH1cbn1cblxuVnVlLmNvbXBpbGUgPSBjb21waWxlVG9GdW5jdGlvbnM7XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdGlmICghbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcblx0fVxuXHRyZXR1cm4gbW9kdWxlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.