vendor: 5,446 bytes, line 1
1!function(C){var n={};function l(g){if(n[g])return n[g].exports;var I=n[g]={i:g,l:!1,exports:{}};return C[g].call(I.exports,I,I.exports,l),I.l=!0,I.exports}l.m=C,l.c=n,l.d=function(g,I,C){l.o(g,I)||Object.defineProperty(g,I,{enumerable:!0,get:C})},l.r=function(g){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(g,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(g,"__esModule",{value:!0})},l.t=function(I,g){if(1&g&&(I=l(I)),8&g)return I;if(4&g&&"object"==typeof I&&I&&I.__esModule)return I;var C=Object.create(null);if(l.r(C),Object.defineProperty(C,"default",{enumerable:!0,value:I}),2&g&&"string"!=typeof I)for(var n in I)l.d(C,n,function(g){return I[g]}.bind(null,n));return C},l.n=function(g){var I=g&&g.__esModule?function(){return g.default}:function(){return g};return l.d(I,"a",I),I},l.o=function(g,I){return Object.prototype.hasOwnProperty.call(g,I)},l.p="",l(l.s=2)}([function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(process) {// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function () {\n var resolvedPath = '',\n resolvedAbsolute = false;\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function (p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function (path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function (p) {\n return !!p;\n }), !isAbsolute).join('/');\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function (path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function () {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function (p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n// path.relative(from, to)\n// posix version\nexports.relative = function (from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n if (start > end) return [];
1\n return arr.slice(start, end - start + 1);\n }\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n};\nexports.sep = '/';\nexports.delimiter = ':';\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n return path.slice(0, end);\n};\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n if (end === -1) return '';\n return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n var f = basename(path);\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n};\nfunction filter(xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) {\n return str.substr(start, len);\n} : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n};\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanM/ZGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAuZGlybmFtZSwgLmJhc2VuYW1lLCBhbmQgLmV4dG5hbWUgbWV0aG9kcyBhcmUgZXh0cmFjdGVkIGZyb20gTm9kZS5qcyB2OC4xMS4xLFxuLy8gYmFja3BvcnRlZCBhbmQgdHJhbnNwbGl0ZWQgd2l0aCBCYWJlbCwgd2l0aCBiYWNrd2FyZHMtY29tcGF0IGZpeGVzXG5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHR
1oaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlI
1HRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHBhdGggPSBwYXRoICsgJyc7XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcuJztcbiAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoMCk7XG4gIHZhciBoYXNSb290ID0gY29kZSA9PT0gNDcgLyovKi87XG4gIHZhciBlbmQgPSAtMTtcbiAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIGZvciAodmFyIGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMTsgLS1pKSB7XG4gICAgY29
1kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3JcbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlbmQgPT09IC0xKSByZXR1cm4gaGFzUm9vdCA/ICcvJyA6ICcuJztcbiAgaWYgKGhhc1Jvb3QgJiYgZW5kID09PSAxKSB7XG4gICAgLy8gcmV0dXJuICcvLyc7XG4gICAgLy8gQmFja3dhcmRzLWNvbXBhdCBmaXg6XG4gICAgcmV0dXJuICcvJztcbiAgfVxuICByZXR1cm4gcGF0aC5zbGljZSgwLCBlbmQpO1xufTtcblxuZnVuY3Rpb24gYmFzZW5hbWUocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aCArICcnO1xuXG4gIHZhciBzdGFydCA9IDA7XG4gIHZhciBlbmQgPSAtMTtcbiAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIHZhciBpO1xuXG4gIGZvciAoaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICBpZiAocGF0aC5jaGFyQ29kZUF0KGkpID09PSA0NyAvKi8qLykge1xuICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgIC8vIHBhdGggY29tcG9uZW50XG4gICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgIGVuZCA9IGkgKyAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlbmQgPT09IC0xKSByZXR1cm4gJyc7XG4gIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpO1xufVxuXG4vLyBVc2VzIGEgbWl4ZWQgYXBwcm9hY2ggZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LCBhcyBleHQgYmVoYXZpb3IgY2hhbmdlZFxuLy8gaW4gbmV3IE5vZGUuanMgdmVyc2lvbnMsIHNvIG9ubHkgYmFzZW5hbWUoKSBhYm92ZSBpcyBiYWNrcG9ydGVkIGhlcmVcbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbiAocGF0aCwgZXh0KSB7XG4gIHZhciBmID0gYmFzZW5hbWUocGF0aCk7XG4gIGlmIChleHQgJiYgZi5zdWJzdHIoLTEgKiBleHQubGVuZ3RoKSA9PT0gZXh0KSB7XG4gICAgZiA9IGYuc3Vic3RyKDAsIGYubGVuZ3RoIC0gZXh0Lmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIGY7XG59O1xuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbiAocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aCArICcnO1xuICB2YXIgc3RhcnREb3QgPSAtMTtcbiAgdmFyIHN0YXJ0UGFydCA9IDA7XG4gIHZhciBlbmQgPSAtMTtcbiAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgdmFyIHByZURvdFN0YXRlID0gMDtcbiAgZm9yICh2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICBlbmQgPSBpICsgMTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDQ2IC8qLiovKSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgb3VyIGZpcnN0IGRvdCwgbWFyayBpdCBhcyB0aGUgc3RhcnQgb2Ygb3VyIGV4dGVuc2lvblxuICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKVxuICAgICAgICAgIHN0YXJ0RG90ID0gaTtcbiAgICAgICAgZWxzZSBpZiAocHJlRG90U3RhdGUgIT09IDEpXG4gICAgICAgICAgcHJlRG90U3RhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXJ0RG90ID09PSAtMSB8fCBlbmQgPT09IC0xIHx8XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAgIC8vIFRoZSAocmlnaHQtbW9zdCkgdHJpbW1lZCBwYXRoIGNvbXBvbmVudCBpcyBleGFjdGx5ICcuLidcbiAgICAgIHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gI
1HJldHVybiBwYXRoLnNsaWNlKHN0YXJ0RG90LCBlbmQpO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///0\n")},function(module,exports){eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // 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\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // 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.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;
1\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\nfunction noop() {}\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\nprocess.listeners = function (name) {\n return [];\n};\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\nprocess.cwd = function () {\n return '/';\n};\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function () {\n return 0;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanM/ZjI4YyJdLCJzb3VyY2VzQ29udGVudCI6Wy
vendor: 7,471 bytes, line 1
1IvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuI
1l0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1\n")},function(module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./modules/InfrastructureClass.js\nlet {\n googletag,\n console\n} = window;\nclass InfrastructureClass {\n //InfrastructureClass contain global function , this.Site - create key to each page\n constructor() {\n this.Site;\n this.adsElements = [];\n }\n Log(str) {\n if (location.host.includes("local") || location.host.includes("qa")) {}\n }\n SlotRenderEnd(callback) {\n //handle all events after slot rendered\n googletag.cmd.push(function () {\n googletag.pubads().addEventListener("slotRenderEnded", function (event) {\n if (callback != null && callback != undefined) {\n callback(event);\n }\n });\n });\n }\n findDivAds_func() {\n let divResult = new Promise((resolve, reject) => {\n document.addEventListener("DOMContentLoaded", function () {\n const elems = document.querySelectorAll("div[id^=ads]");\n if (elems) {\n resolve(elems);\n } else {\n reject("element not found");\n }\n }, false);\n });\n return divResult.then(function (elems) {\n this.adsElements = elems;\n }.bind(this)).catch(err => {\n console.log(err);\n });\n }\n onRender(event, id) {\n //onRender function remove the hight of the slot, it call a few times from all function of defineSlots it\'s get the event slotRenderEnded\n if (document.getElementById(id) != undefined && document.getElementById(id) != null && document.getElementById(id) != "null") {\n document.getElementById(id).style.height = "";\n }\n }\n} //end class InfrastructureClass\n/* harmony default export */ var modules_InfrastructureClass = (new InfrastructureClass());\n// CONCATENATED MODULE: ./modules/AdunitDcPathClass.js\nclass AdunitDcPathClass {\n constructor() {\n //nothing here to init Class just ones per Page.\n }\n get(dcPath) {\n this.dcPath = dcPath;\n this.dcPath;\n if (((dcPath || \'\').match(/-[\\d]+/g) || []).length >= 1) {\n var test = dcPath.split(\'-\');\n if ((window.dcSite == "ynet" || window.dcSite == "ynt") && ((dcPath || \'\').match(/-[\\d]+/g) || []).length == 2) {\n this.dcPath = this.dcPath.replace(test[1].replace(/[\\d]+/g, \'\').substring(1), test[1].replace(/[\\d]+/g, \'\').substring(1).replace(/\\./g, \'#dot#\'));\n this.dcPath = this.dcPath.replace(test[2].replace(/[\\d]+/g, \'\').substring(1), test[2].replace(/[\\d]+/g, \'\').substring(1).replace(/\\./g, \'#dot#\'));\n } else {\n this.dcPath = this.dcPath.replace(this.dcPath.split(\'-\').pop().replace(/[\\d]+/g, \'\').substring(1), test.pop().replace(/[\\d]+/g, \'\').substring(1).replace(/\\./g, \'#dot#\'));\n }\n }\n this.splitted = this.dcPath.toLowerCase().replace(/[\\d]+/, \'\').replace(/-[\\d]+/g, \'\').split(".");
1\n this.splitted = this.splitted.filter(Boolean);\n this.levels = this.splitted.length;\n this.buildHierarchy();\n //this.englishHierarchy();\n //this.vestyHierarchy();\n this.combineLevels();\n this.hotFixes();\n return this.adunit;\n }\n hotFixes() {\n this.adunit = this.adunit.replace(/#dot#/g, \'.\');\n this.adunit = this.adunit.replace(\'..\', \'.\');\n if (this.adunit.endsWith(\'.\')) {\n this.adunit = this.adunit.slice(0, -1);\n }\n if (this.adunit.startsWith(\'/\')) {\n this.adunit = this.adunit.substring(1);\n }\n }\n combineLevels() {\n let adunit = this.adunit.split(\'/\');\n if (adunit.length > 3) {\n let lastLevel = adunit.pop();\n adunit = adunit.join(\'/\');\n this.adunit = "".concat(adunit, "-").concat(lastLevel);\n }\n }\n\n // vestyHierarchy() {\n // if (this.adunit.startsWith(\'/vesti\')) {\n // this.adunit = this.adunit.substring(1);\n // let adunit = this.adunit.split(\'/\');\n // adunit.shift();\n // adunit.forEach((level, depth) => {\n // level.startsWith(\'v\') ? adunit[depth] = level.substring(1) : adunit[depth] = level;\n // }, this);\n // if (adunit[adunit.length - 1] == \'home\') {adunit[adunit.length - 1] = \'central\';}\n\n // this.adunit = adunit.join(\'/\');\n // if(this.adunit.endsWith(\'/\')) {\n // this.adunit = this.adunit.slice(0, -1);\n // }\n // }\n // return this;\n // }\n\n // englishHierarchy() {\n // if (window.location.origin.includes(\'ynetnews.com\')) {\n // let adunit = this.adunit.split(\'/\');\n // adunit.forEach((level, depth) => {\n // level.startsWith(\'e\') && depth == 1 ? adunit[depth] = level.substring(1) : adunit[depth] = level;\n // }, this);\n // this.adunit = adunit.join(\'/\');\n // if(this.adunit.endsWith(\'/\')) {\n // this.adunit = this.adunit.slice(0, -1);\n // }\n // }\n // return this;\n // }\n\n shiftLevel(innerLevel, substring) {\n let level = innerLevel.split(\'-\');\n level.forEach((l, i) => {\n l.startsWith(substring) ? level[i] = l.substring(1) : level[i] = l;\n });\n return level.join(\'-\');\n }\n buildHierarchy() {\n this.adunit = \'\';\n this.splitted.forEach((level, depth) => {\n if (/\\-$/.test(level)) {\n this.adunit += level.replace(/-/g, \'/\');\n } else {\n if (this.adunit.endsWith("/")) {\n this.adunit = this.adunit;\n } else {\n this.adunit += "/".concat(level);\n }\n }\n }, this);\n }\n}\n/* harmony default export */ var modules_AdunitDcPathClass = (new AdunitDcPathClass());\n// CONCATENATED MODULE: ./modules/AdUnitPropertiesClass.js\nclass AdUnitPropertiesClass {\n constructor() {\n this.Ver = \'22-07-26\';\n this.Define_slot_browsi = [];\n this.Define_slots_1 = [];\n this.Define_slots_2 = [];\n this.Define_slots_3 = [];\n this.Define_slots_4 = [];\n this.Define_slots_5 = [];\n this.Define_slots_6 = [];\n this.Define_slots_7 = [];\n this.Define_slots_8 = [];\n this.Define_slots_article_1 = [];\n this.Define_slots_article_2 = [];\n this.Define_slots_article_3 = [];\n this.Define_slots = [];\n this.Define_slots_native = [];\n //this.Define_nonHeaderBiddingSlots = [];\n this.Define_ozen = [];\n this.Slots = [];\n this.Trans = false;\n this.Double_Jumbo = false;\n this.refreshAdOzen = 7 * 60 * 1000;\n this.set_Targets = [];\n this.Get_day = new Date();\n this.refreshAdTime_func();\n }\n set DCview(newDCview) {\n if (newDCview) {\n this._DCview = newDCview;\n }\n }\n get DCview() {\n return this._DCview;\n }\n set Expo(newExpo) {\n if (newExpo) {\n this._Expo = newExpo;\n }\n }\n get Expo() {\n return this._Expo;\n }\n refreshAdTime_func() {\n if (window.dcCG) {\n if (window.dcCG == "home" || window.dcPath == "2775.Knesset-33113.adipeeri" || window.dcPath == "2775.Knesset-1.Home") {\n return 7 * 60 * 1000;\n } else if (window.dcCG == "main") {\n return 7 * 60 * 1000;\n } else if (window.dcCG == "article") {\n return 14 * 60 * 1000;\n } else {\n return 7 * 60 * 1000;\n }\n } else {\n return 7 * 60 * 1000;\n }\n }\n}\n/* harmony default export */ var modules_AdUnitPropertiesClass = (new AdUnitPropertiesClass());\n// CONCATENATED MODULE: ./modules/AdUnitAdditionalStylesClass.js\n\n\n\nconst {\n Log\n}
1 = modules_InfrastructureClass;\nconst {\n console: AdUnitAdditionalStylesClass_console\n} = window;\nwindow.CloseSargel = function () {\n document.getElementById("ads.sargel").innerHTML = "";\n};\nclass AdUnitAdditionalStylesClass_AdUnitAdditionalStylesClass {\n constructor() {\n this.innerWidth = window.innerWidth;\n }\n promo_class_func() {\n var style_css = document.createElement(\'style\');\n style_css.id = "promo_style";\n style_css.innerHTML = "\\n div[id=\'ads.top.promo\'] { \\n padding:15px 0px 0px 0px;\\n margin:0 auto;\\n display:flex;\\n justify-content:center;\\n display:-webkit-box;\\n -webkit-box-pack:center;\\n display:-ms-flexbox;\\n -ms-flex-pack:center;\\n text-align:center;\\n }\\n ";\n document.head.appendChild(style_css);\n\n // if (document.getElementById("ads.top.promo")) {\n // promo_div.setAttribute("style", "padding:15px 0px 0px 0px; margin:0 auto; display:flex; justify-content:center; display:-webkit-box; -webkit-box-pack:center; display:-ms-flexbox; -ms-flex-pack:center; text-align:center;"); \n // if (document.getElementById("ads.top.promo").getElementsByTagName("div")[0] != undefined) {\n // document.getElementById("ads.top.promo").getElementsByTagName("div")[0].style.textAlign = "center";\n // document.getElementById("ads.top.promo").getElementsByTagName("div")[0].style.margin = "0 auto";\n // }\n // } \n }\n styleNewspaper_func() {\n Log("styleNewspaper_func");\n let newspaper = window.newMedia == \'True\' && window.dcSite == "ynt" ? "ads.top.promo" : "ads.newspaper";\n modules_AdUnitFunctionsClass.findAllDiv_func();\n if (modules_AdUnitPropertiesClass.Slots[newspaper] != undefined) {\n if (document.querySelector(".grid1280") != null || document.querySelector(".grid1280") != undefined || document.querySelector(".grid1280_2") != null || document.querySelector(".grid1280_2") != undefined) {\n document.getElementById(newspaper).setAttribute("style", "padding:15px 0px 0px 0px; margin:0 auto; display:flex; justify-content:center; display:-webkit-box; -webkit-box-pack:center; display:-ms-flexbox; -ms-flex-pack:center; text-align:center;");\n setTimeout(function () {\n if (document.getElementById(newspaper).getElementsByTagName("div")[0] != undefined) {\n document.getElementById(newspaper).getElementsByTagName("div")[0].style.textAlign = "center";\n document.getElementById(newspaper).getElementsByTagName("div")[0].style.margin = "0 auto";\n }\n }, 1500);\n } else {\n modules_AdUnitPropertiesClass.Slots[newspaper].setAttribute("style", "padding:15px 0px 0px 0px; margin:0 auto; text-align:center;");\n }\n if (modules_AdUnitPropertiesClass.Slots[newspaper].getElementsByTagName("iframe")[0] != undefined) {\n modules_AdUnitPropertiesClass.Slots[newspaper].getElementsByTagName("iframe")[0].setAttribute("style", \'padding:5px 5px 5px 5px; background-image:url("//totalmedia2.ynet.co.il/pic/970x125_newspaper.gif");background-repeat:no-repeat;\');\n }\n }\n }\n ozen_func() {\n Log("ozen_func");\n modules_AdUnitFunctionsClass.findAllDiv_func();
1\n let container_width = window.GridWidth == 1240 ? 1240 : 980;\n window.addEventListener(\'resize\', () => {\n this.displaySkyscraperRight_func(container_width);\n });\n window.addEventListener(\'resize\', () => {\n this.displaySkyscraperLeft_func(container_width);\n });\n if (modules_AdUnitPropertiesClass.Slots["ads.ozen.right"] != undefined) {\n window.addEventListener(\'resize\', () => {\n this.displayOzenRight_func(container_width);\n });\n }\n if (modules_AdUnitPropertiesClass.Slots["ads.ozen"] != undefined) {\n const adsOzenWidth = modules_AdUnitPropertiesClass.Slots["ads.ozen"].offsetWidth;\n this.displayOzen_func(adsOzenWidth);\n }\n if (modules_AdUnitPropertiesClass.Slots["ads.ozen_right"] != undefined) {\n const adsOzenRightWidth = modules_AdUnitPropertiesClass.Slots["ads.ozen_right"].offsetWidth;\n this.displayOzenRight_Mynet_func(adsOzenRightWidth);\n }\n if (modules_AdUnitPropertiesClass.Slots["ads.ozen_left"] != undefined) {\n window.addEventListener(\'resize\', () => {\n this.displayOzenLeft_Mynet_func(container_width);\n });\n }\n if (modules_AdUnitPropertiesClass.Slots["ads.ozen.left"] != undefined) {\n const adsOzenLeftWidth = modules_AdUnitPropertiesClass.Slots["ads.ozen.left"].offsetWidth;\n this.displayOzenLeft_func(adsOzenLeftWidth);\n }\n }\n displaySkyscraperRight_func(container_width) {\n Log("displaySkyscraperRight_func");\n let ozen_right_width = 0;\n if (document.querySelector(\'iframe[id*="skyscraper"]\') != undefined || document.querySelector(\'iframe[id*="skyscraper"]\') != null) {\n ozen_right_width = document.querySelector(\'iframe[id*="skyscraper"]\').width;\n let l = (window.innerWidth - container_width) / 2 - 10;\n if (ozen_right_width >= l || ozen_right_width == 0) {\n document.getElementById("ads.skyscraper").style.display = "none";\n } else {\n document.getElementById("ads.skyscraper").style.display = "block";\n }\n }\n }\n displaySkyscraperLeft_func(container_width) {\n Log("displaySkyscraperLeft_func");\n let ozen_left_width = 0;\n if (document.querySelector(\'iframe[id*="skyscraper.left"]\') != undefined || document.querySelector(\'iframe[id*="skyscraper.left"]\') != null) {\n ozen_left_width = document.querySelector(\'iframe[id*="skyscraper.left"]\').width;\n let l = (window.innerWidth - container_width) / 2 - 10;\n if (ozen_left_width >= l || ozen_left_width == 0) {\n document.getElementById("ads.skyscraper.left").style.display = "none";\n } else {\n document.getElementById("ads.skyscraper.left").style.display = "block";\n }\n }\n }\n displayOzenRight_func(container_width) {\n Log("displayOzenRight_func");\n let ozen_right_width = 0;\n if (document.querySelector(\'iframe[id*="ozen.right"]\') != undefined || document.querySelector(\'iframe[id*="ozen.right"]\') != null) {\n ozen_right_width = document.querySelector(\'iframe[id*="ozen.right"]\').width;\n }\n let l = (window.innerWidth - container_width) / 2 - 10;\n if (ozen_right_width >= l || ozen_right_width == 0) {\n document.getElementById("ads.ozen.right").style.display = "none";\n } else {\n document.getElementById("ads.ozen.right").style.display = "block";\n }\n }\n displayOzenLeft_func(adsOzenLeftWidth) {\n Log("displayOzenLeft_func");\n let l = (this.innerWidth - 980) / 2 - 10;\n if (adsOzenLeftWidth >= l || adsOzenLeftWidth == 0) {\n document.getElementById("ads.ozen.left").style.display = "none";\n } else {\n document.getElementById("ads.ozen.left").style.display = "block";\n }\n }\n displayOzen_func(adsOzenWidth) {\n Log("displayOzen_func");\n let l = (this.innerWidth - 980) / 2 - 10;\n if (adsOzenWidth >= l || adsOzenWidth == 0) {\n document.getElementById("ads.ozen").style.display = "none";\n } else {\n document.getElementById("ads.ozen").style.display = "block";\n }\n }\n resizeOzen_func() {\n Log("resizeOzen_func");\n let middle_width = 1440;\n let small_width = 1230;\n let big_width = 1660;\n if (window.GridWidth == 1240) {\n small_width = 1520;\n middle_width = 1600;\n big_width = 1885;\n }\n if (this.innerWidth > small_width) {\n if (this.innerWidth > middle_width) {\n if (this.innerWidth > big_width) {\n return [[300, 600], [300, 601], [1, 1]];\n } else {\n return [[160, 600], [160, 601], [1, 1]];\n }\n } else {\n return [[120, 600], [120, 601], [1, 1]];\n }\n } else {\n return [1, 1];\n }\n }\n resizeOzen800_func() {\n Log("resizeOzen800_func");\n if (window.dcVideo != true) {\n if (this.innerWidth > 1230) {\n if (this.innerWidth > 1440) {\n if (this.innerWidth >
1 1660) {\n return [[300, 600], [300, 601]];\n } else {\n return [[160, 600], [160, 601]];\n }\n } else {\n return [[120, 600], [120, 601]];\n }\n }\n } else {\n return [120, 600];\n }\n }\n top_func() {\n Log("top_func");\n modules_AdUnitFunctionsClass.findAllDiv_func();\n //if (AdUnitPropertiesClassObj.Slots["ads.top"] != undefined) {\n //if ($(AdUnitPropertiesClassObj.Slots[\'ads.top\']).children(\'div\').children(\'iframe\') != "") {\n //$(AdUnitPropertiesClassObj.Slots[\'ads.top\']).children(\'div\').first().css(\'border\', \'5px solid #e9e9e9\');\n if (modules_AdUnitPropertiesClass.Slots["ads.top"].getElementsByTagName("div")[0] != undefined && modules_AdUnitPropertiesClass.Slots["ads.top"].getElementsByTagName("div")[0].getElementsByTagName("iframe") != "") {\n modules_AdUnitPropertiesClass.Slots["ads.top"].getElementsByTagName("div")[0].style.border = "5px solid #e9e9e9";\n }\n //}\n //if (AdUnitPropertiesClassObj.Slots[\'ads.top\'].getElementsByTagName(\'div\') != "") alert(1);\n }\n styleSticky_func() {\n Log("styleSticky_func");\n let stickySlot = modules_AdUnitFunctionsClass.sticky;\n if (window.dcPath.includes("Weather") || window.dcPath.includes("weather")) {\n sticky_unit = "weather";\n }\n modules_InfrastructureClass.SlotRenderEnd(function (event) {\n let TopLoaded = false;\n if (event.slot == modules_AdUnitPropertiesClass.Define_slots[stickySlot]) {\n if (!TopLoaded) {\n if (!event.isEmpty) {\n try {\n modules_AdUnitFunctionsClass.findAllDiv_func();\n let banner_width;\n if (document.querySelector(\'iframe[id*="sticky"]\') != null || document.querySelector(\'iframe[id*="sticky"]\') != undefined) {\n banner_width = document.querySelector(\'iframe[id*="sticky"]\').width;\n }\n let sticky_slot = modules_AdUnitPropertiesClass.Slots[stickySlot];\n if (window.dcPath.includes("PnaiPlus")) {\n sticky_slot.setAttribute("style", "position:fixed;bottom:0px;left:0px;display:flex;justify-content:center;display:-webkit-box;-webkit-box-pack:center;display:-ms-flexbox;-ms-flex-pack:center;text-align:center;width:100%;z-index:9998;margin:0 auto;background-color:#fff");\n } else {\n sticky_slot.setAttribute("style", "position:fixed;bottom:0px;left:0px;display:flex;justify-content:center;display:-webkit-box;-webkit-box-pack:center;display:-ms-flexbox;-ms-flex-pack:center;text-align:center;width:100%;z-index:999;margin:0 auto;background-color:#fff");\n }\n sticky_slot.getElementsByTagName("div")[0].setAttribute("style", "width:" + banner_width + "px;margin: auto auto auto auto;");\n } catch (ex) {\n AdUnitAdditionalStylesClass_console.error(ex);\n }\n }\n TopLoaded = true;\n }\n }\n });\n }\n livebox_func() {\n // FOR XNET\n modules_AdUnitFunctionsClass.findAllDiv_func();\n modules_InfrastructureClass.SlotRenderEnd(function (event) {\n let TopLoaded = false;\n if (event.slot == modules_AdUnitPropertiesClass.Define_slots["ads.livebox"]) {\n if (!TopLoaded) {\n if (!event.isEmpty) {\n window.CloseBox = function () {\n document.getElementById(\'ads.livebox\').innerHTML = "";\n };\n setTimeout(function () {\n const buttom_width = 30;\n const buttom_height = 30;\n const buttom_URL = "//totalmedia2.ynet.co.il/pic/30-30.gif";\n let buttonclose = \'<img style="cursor: pointer" onclick="javascript:CloseBox();" src="\' + buttom_URL + \'" width="\' + buttom_width + \'px" height="\' + buttom_height + \'px" />\';\n const butoonDiv = document.createElement(\'div\');\n butoonDiv.id = \'LiveBox_Close_button\';\n butoonDiv.innerHTML = buttonclose;\n const adsdiv3 = parent.document.getElementById("ads.livebox");\n adsdiv3.appendChild(butoonDiv);\n let butoonid = parent.document.getElementById(butoonDiv.id);\n butoonid.style.position = "absolute";\n butoonid.style.top = 0 + "px";\n butoonid.style.right = 0 + "px";\n butoonid.style.width = "30px";\n butoonid.style.height = "30px";\n butoonid.style.zIndex = 1;\n }, 1000);\n }\n TopLoaded = true;\n }\n }\n });\n window.addEventListener(\'message\', function (event) {\n if (event.data.eventName === \'inboardclsoed\') {\n document.getElementById("LiveBox_Close_button").style = "display: none";\n }\n }, false);\n let livebox_slot = modules_AdUnitPropertiesClass.Slots["ads.livebox"];\n if (livebox_slot != undefined) {\n if (window.dcCG == \'article\') {\n livebox_slot.setAttribute("style", "margin-top: 115px; margin-bottom: -65px; position: relative;");\n }\n if (window.dcCG == \'main\' || window.dcCG == \'sub\') {\n livebox_slot.setAttribute("style", "margin-top: 115px; margin-bottom: -65px; position: relative;");\n }\n }\n }\n Ynet_livebox_func() {\n let livebox_slot = "";\n if (window.ynet_responsive_sites) {\n livebox_slot = "ads.inboard";\n } else {\n if (modules_AdUnitFunctionsClass.getDevice_func() == "Android") {\n livebox_slot = "ads.ynet_mobileweb_android_livebox";\n } else if (modules_AdUnitFunctionsClass.getDevice_func() == "iPhone") {\n livebox_slot = "ads.ynet_mobileweb_iphone_livebox";\n }\n }\n modules_AdUnitFunctionsClass.findAllDiv_func();
1\n modules_InfrastructureClass.SlotRenderEnd(function (event) {\n let livebox_loaded = false;\n if (event.slot == modules_AdUnitPropertiesClass.Define_slots[livebox_slot]) {\n if (!livebox_loaded) {\n if (!event.isEmpty) {\n window.CloseBox = function () {\n document.getElementById(livebox_slot).innerHTML = "";\n };\n setTimeout(function () {\n const buttom_width = 30;\n const buttom_height = 30;\n const buttom_URL = "//totalmedia2.ynet.co.il/pic/30-30.gif";\n const buttonclose = \'<img style="cursor: pointer" onclick="javascript:CloseBox();" src="\' + buttom_URL + \'" width="\' + buttom_width + \'px" height="\' + buttom_height + \'px" />\';\n const butoonDiv = document.createElement(\'div\');\n butoonDiv.id = \'LiveBox_Close_button\';\n butoonDiv.innerHTML = buttonclose;\n const adsdiv3 = parent.document.getElementById(livebox_slot);\n adsdiv3.appendChild(butoonDiv);\n let butoonid = parent.document.getElementById(butoonDiv.id);\n butoonid.style.position = "absolute";\n butoonid.style.top = 0 + "px";\n butoonid.style.right = 0 + "px";\n butoonid.style.width = "30px";\n butoonid.style.height = "30px";\n butoonid.style.zIndex = 1;\n }, 1000);\n } else {}\n livebox_loaded = true;\n }\n } else {}\n });\n window.addEventListener(\'message\', function (event) {\n if (event.data.eventName === \'inboardclsoed\') {\n document.getElementById("LiveBox_Close_button").style = "display: none";\n }\n }, false);\n let biglivebox_slot = document.getElementById(livebox_slot);\n if (biglivebox_slot != undefined) {\n biglivebox_slot.setAttribute("style", "margin:0 auto; position: relative; display:flex; justify-content:center; display:-webkit-box; -webkit-box-pack:center; display:-ms-flexbox; -ms-flex-pack:center; text-align:center; width:100%;");\n }\n }\n Ynet_biglivebox_func() {\n modules_AdUnitFunctionsClass.findAllDiv_func();\n let bigliveboxSlot = "";\n if (window.ynet_responsive_sites) {\n bigliveboxSlot = "ads.biglivebox";\n } else {\n if (modules_AdUnitFunctionsClass.getDevice_func() == "Android") {\n bigliveboxSlot = "ads.ynet_mobileweb_android_pnimi_bigliveBox";\n } else if (modules_AdUnitFunctionsClass.getDevice_func() == "iPhone") {\n bigliveboxSlot = "ads.ynet_mobileweb_iphone_pnimi_bigliveBox";\n }\n }\n modules_InfrastructureClass.SlotRenderEnd(function (event) {\n let TopLoaded = false;\n if (event.slot == modules_AdUnitPropertiesClass.Define_slots[bigliveboxSlot]) {\n if (!TopLoaded) {\n if (!event.isEmpty) {\n window.CloseBox = function () {\n document.getElementById(bigliveboxSlot).innerHTML = "";\n modules_AdUnitFunctionsClass.Ynet_renderSmallInbord();\n };\n setTimeout(function () {\n const buttom_width = 30;\n const buttom_height = 30;\n const buttom_URL = "//totalmedia2.ynet.co.il/pic/30-30.gif";\n const buttonclose = \'<img style="cursor: pointer" onclick="javascript:CloseBox();" src="\' + buttom_URL + \'" width="\' + buttom_width + \'px" height="\' + buttom_height + \'px" />\';\n const butoonDiv = document.createElement(\'div\');\n butoonDiv.id = \'Biglivebox_Close_button\';\n butoonDiv.innerHTML = buttonclose;\n const adsdiv3 = parent.document.getElementById(bigliveboxSlot);\n adsdiv3.appendChild(butoonDiv);\n let butoonid = parent.document.getElementById(butoonDiv.id);\n butoonid.style.position = "absolute";\n butoonid.style.top = 0 + "px";\n butoonid.style.right = 0 + "px";\n butoonid.style.width = "30px";\n butoonid.style.height = "30px";\n butoonid.style.zIndex = 1;\n }, 1000);\n }\n TopLoaded = true;\n }\n }\n });\n window.addEventListener(\'message\', function (event) {\n if (event.data.eventName === \'inboardclsoed\') {\n document.getElementById("Biglivebox_Close_button").style = "display: none";\n modules_AdUnitFunctionsClass.Ynet_renderSmallInbord();\n }\n }, false);\n let biglivebox_slot = document.getElementById(bigliveboxSlot);\n if (biglivebox_slot != undefined) {\n biglivebox_slot.setAttribute("style", "margin:0 auto; position: relative;display:flex;justify-content:center;display:-webkit-box;-webkit-box-pack:center;display:-ms-flexbox;-ms-flex-pack:center;text-align:center;width:100%;");\n }\n }\n Interstitial_responsive_func() {\n modules_AdUnitFunctionsClass.findAllDiv_func();
1\n modules_InfrastructureClass.SlotRenderEnd(function (event) {\n let livebox_loaded = false;\n if (event.slot == modules_AdUnitPropertiesClass.Define_slots["ads.interstitial.inner"]) {\n if (!livebox_loaded) {\n if (!event.isEmpty) {\n //if (window.document.getElementById("dcMaavaronDiv") == null || window.document.getElementById("dcMaavaronDiv") == undefined) {\n window.Close = function () {\n document.getElementById("ads.interstitial.inner").style.display = "none";\n };\n setTimeout(function () {\n const buttom_width = 10;\n const buttom_URL = "https://images1.ynet.co.il/PicServer3/2013/12/17/5044137/320x.png";\n const buttonclose = \'<img id="Close_btn" style="cursor: pointer; position: fixed; width: 10%; top: 0; right: 0; z-index: 2147483648;" onclick="javascript:Close();" src="\' + buttom_URL + \'" width="\' + buttom_width + \'%" />\';\n const butoonDiv = document.createElement(\'div\');\n butoonDiv.id = \'Close_button\';\n butoonDiv.innerHTML = buttonclose;\n const adsdiv3 = parent.document.getElementById("ads.interstitial.inner");\n adsdiv3.appendChild(butoonDiv);\n let butoonid = parent.document.getElementById(butoonDiv.id);\n butoonid.style.position = "fixed";\n butoonid.style.top = 0 + "px";\n butoonid.style.right = 0 + "px";\n butoonid.style.width = "10%";\n butoonid.style.zIndex = 2147483648;\n }, 1000);\n //}\n } else {}\n livebox_loaded = true;\n }\n }\n });\n }\n pplus_strips() {\n modules_AdUnitFunctionsClass.findAllDiv_func();\n let strips_pplus = document.querySelectorAll(\'div[id^="ads.strip.marketing"]\');\n strips_pplus.forEach(function (userItem) {\n let unit_strip = userItem.id;\n modules_InfrastructureClass.SlotRenderEnd(function (event) {\n let StripPplus = false;\n if (event.slot == modules_AdUnitPropertiesClass.Define_slots[unit_strip]) {\n let container_strips = document.querySelector(".slotContentDiv");\n if (!StripPplus) {\n if (!event.isEmpty) {\n setTimeout(function () {\n let stripSize = document.getElementById(unit_strip).offsetHeight;\n if (stripSize < 226) {\n container_strips.style.height = parseInt(container_strips.offsetHeight - (226 - stripSize)) + \'px\';\n }\n }, 3000);\n } else {\n container_strips.style.height = parseInt(container_strips.offsetHeight - 226) + \'px\';\n }\n StripPplus = true;\n }\n }\n });\n });\n }\n hp_boxes_class(box) {\n modules_AdUnitFunctionsClass.findAllDiv_func();\n let min_height = "";\n if (box.includes("box.menta")) {\n min_height = "min-height: 218px !important";\n } else if (box.includes("box.nadlan")) {\n min_height = "min-height: 178px !important";\n } else if (box.includes("box.laisha")) {\n min_height = "min-height: 287px !important";\n } else if (box.includes("box.content")) {\n min_height = "min-height: 210px !important";\n }\n\n //let menta_banners = document.querySelectorAll(`div[id^="${box}"]`);\n let banner_box = document.querySelector("div[id^=\\"".concat(box, "\\"]"));\n //menta_banners.forEach(function(userItem) {\n\n if (banner_box != undefined) {\n let unit = banner_box.id;\n let current = banner_box;\n let style_div = document.createElement("style");\n if (box.includes("ads.hotbox.native")) {\n style_div.innerHTML = "div[id=\'".concat(unit, "\'], div[id=\'").concat(unit, "\'] iframe {\\n width: 190px !important;\\n height: 208px !important; \\n }");\n } else {\n style_div.innerHTML = "div[id=\'".concat(unit, "\'], div[id=\'").concat(unit, "\'] iframe { ").concat(min_height, "; }");\n }\n current.parentNode.insertBefore(style_div, current.nextSibling);\n }\n //});\n }\n general_banners_styles() {\n if (document.querySelector(".TitleTab")) {\n let container_banner = document.querySelectorAll(".TitleTab");\n for (let i = 0; i < container_banner.length;
1 i++) {\n if (container_banner[i].innerHTML.indexOf("פרסומת") !== -1) {\n container_banner[i].setAttribute("style", "visibility:hidden;");\n }\n }\n }\n }\n style_per_banner(banner) {\n let style_divs = document.createElement("style");\n let my_banner = document.getElementById(banner);\n let banner_width = my_banner.closest(".extended-banner").clientWidth;\n let banner_height = my_banner.closest(".extended-banner").clientHeight;\n if (banner.includes("ads.gray.box")) {\n let my_banner_extended = my_banner.closest(".extended-banner").querySelector(".Extended_banner");\n my_banner_extended.setAttribute("style", "background-color:#eeeeef; padding:45px 37px 45px 37px; height: 250px; display:flex;");\n\n // if (my_banner_extended) { \n // let container_div = document.createElement("div");\n // container_div.setAttribute("class", "gray_box");\n // my_banner_extended.appendChild(container_div); \n // container_div.appendChild(my_banner_extended); \n // }\n\n style_divs.innerHTML = "div[id=\'".concat(banner, "\'] {\\n width: 300px;\\n height: 250px !important;\\n display:flex;\\n margin: 0 auto;\\n justify-content: center;\\n align-items:center;\\n background: #eeeeef; \\n }\\n div[id=\'").concat(banner, "\'] > div {\\n display:flex !important;\\n margin: 0 auto;\\n justify-content: center;\\n }\\n div[id=\'").concat(banner, "\'] iframe {\\n width: 300px;\\n height: 250px !important;\\n display:flex;\\n margin: 0 auto;\\n justify-content: center;\\n align-items:center; \\n }");\n } else if (banner == "ads.rightbox_native.1" || banner == "ads.rightbox_native.2") {\n style_divs.innerHTML = "div[id=\'".concat(banner, "\'] {\\n width: ").concat(banner_width, "px;\\n height: ").concat(banner_height, "px !important;\\n object-fit: contain;\\n box-shadow: 0 1px 3px 0 rgba(218, 218, 221, 0.8);\\n background-color: #fff;\\n }\\n div[id=\'").concat(banner, "\'] iframe {\\n width: ").concat(banner_width, "px;\\n height: ").concat(banner_height, "px !important;\\n min-height: 232px !important; \\n }");\n } else if (banner == "ads.gray.big.strip.1") {\n document.getElementById("ads.gray.big.strip.1").setAttribute("style", "background-color:#eeeeef; padding:35px 24px; margin:0 auto; text-align:center; display: flex; justify-content: center;");\n } else {\n style_divs.innerHTML = "div[id=\'".concat(banner, "\'], div[id=\'").concat(banner, "\'] iframe {\\n width: ").concat(banner_width, "px;\\n height: ").concat(banner_height, "px !important; \\n }");\n }\n my_banner.parentNode.insertBefore(style_divs, my_banner.nextSibling);\n }\n} //end AdUnitAdditionalStylesClass\n/* harmony default export */ var modules_AdUnitAdditionalStylesClass = (new AdUnitAdditionalStylesClass_AdUnitAdditionalStylesClass());\n// CONCATENATED MODULE: ./modules/AdUnitStylesClass.js\n\n\n// STYLES PER UNIT\nclass AdUnitStylesClass_AdUnitStylesClass {\n constructor() {}\n "ads.skyscraper"() {\n modules_AdUnitAdditionalStylesClass.ozen_func();\n }\n "ads.skyscraper.left"() {\n modules_AdUnitAdditionalStylesClass.ozen_func();\n }\n "ads.ozen.right"() {\n modules_AdUnitAdditionalStylesClass.ozen_func();\n }\n "ads.ozen.left"() {\n modules_AdUnitAdditionalStylesClass.ozen_func();\n }\n "ads.newspaper"() {\n modules_AdUnitAdditionalStylesClass.styleNewspaper_func();\n }\n "ads.ozen"() {\n modules_AdUnitAdditionalStylesClass.ozen_func();\n }\n "ads.top"() {\n modules_AdUnitAdditionalStylesClass.top_func();\n }\n "ads.sticky"() {\n modules_AdUnitAdditionalStylesClass.styleSticky_func();\n }\n "ads.top.2"() {\n modules_AdUnitAdditionalStylesClass.styleNewspaper_func();\n }\n "ads.livebox"() {\n modules_AdUnitAdditionalStylesClass.livebox_func();\n }\n "Ynet_livebox"() {\n modules_AdUnitAdditionalStylesClass.Ynet_livebox_func();\n }\n "Ynet_biglivebox"() {\n modules_AdUnitAdditionalStylesClass.Ynet_biglivebox_func();\n }\n "Interstitial_responsive"() {\n modules_AdUnitAdditionalStylesClass.Interstitial_responsive_func();\n }\n "promo_class"() {\n modules_AdUnitAdditionalStylesClass.promo_class_func();\n }\n "ads.gray.box.1"() {\n modules_AdUnitAdditionalStylesClass.gray_box_func();\n }\n "pplus_strips"() {\n modules_AdUnitAdditionalStylesClass.pplus_strips();\n }\n}\n/* harmony default export */ var modules_AdUnitStylesClass = (new AdUnitStylesClass_AdUnitStylesClass());\n// CONCATENATED MODULE: ./modules/CoockiesFunctionClass.js\n\nconst {\n Log: CoockiesFunctionClass_Log\n}
1 = modules_InfrastructureClass;\nclass CoockiesFunctionClass_CoockiesFunctionClass {\n constructor() {\n this.dcPath = window.dcPath;\n this.dccg = window.dcCG;\n this.AdUnit_data = this.ResolveAdUnitData_func(modules_InfrastructureClass.Site);\n }\n ResolveAdUnitData_func(site) {\n //ResolveAdUnitData_func create AdUnit_data object\n switch (site) {\n case "is_xnet":\n return {\n views: {\n xnt: {\n ".main": 5,\n standard: 5\n },\n standard: {\n standard: 5\n }\n }\n };\n case "is_800":\n return {\n views: {\n ynt: {\n ".good": 5,\n ".food": 5,\n ".go": 5,\n ".menta": 5,\n ".vacation": 5,\n ".entertaiment": 5,\n ".magazine": 5,\n ".index": 5,\n ".encl": 5,\n ".astrology": 5,\n ".health": 5,\n ".opinion": 5,\n ".parents": 5,\n ".ecology": 5,\n ".news": 5,\n ".judais": 5,\n ".dating": 5,\n ".economy": 5,\n ".comput": 5,\n ".activisim": 5,\n ".sport": 5,\n ".movies": 5,\n ".consumer": 5,\n ".forums": 5,\n ".auto": 5,\n ".gossip": 5,\n ".travel": 5,\n ".enter": 5,\n ".Central": 6,\n standard: "5"\n },\n standard: {\n standard: 5\n }\n }\n };\n default:\n return {\n views: {\n ynt: {\n ".good": 5,\n ".food": 5,\n ".go": 5,\n ".menta": 5,\n ".vacation": 5,\n ".entertaiment": 5,\n ".magazine": 5,\n ".index": 5,\n ".encl": 5,\n ".astrology": 5,\n ".health": 5,\n ".opinion": 5,\n ".parents": 5,\n ".ecology": 5,\n ".news": 5,\n ".judais": 5,\n ".dating": 5,\n ".economy": 5,\n ".comput": 5,\n ".activisim": 5,\n ".sport": 5,\n ".movies": 5,\n ".consumer": 5,\n ".forums": 5,\n ".auto": 5,\n ".gossip": 5,\n ".travel": 5,\n ".enter": 5,\n ".Central": 6,\n standard: "5"\n },\n standard: {\n standard: 5\n }\n }\n };\n }\n }\n createCookie_func(name, value, days) {\n CoockiesFunctionClass_Log("createCookie_func");\n let expires = "";\n if (days) {\n let date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = "; expires=" + date.toGMTString();\n } else expires = "";\n document.cookie = name + "=" + value + expires + "; path=/";\n }\n readCookie_func(name) {\n CoockiesFunctionClass_Log("readCookie_func");\n const nameEQ = name + "=";\n const ca = document.cookie.split(";");\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) == " ") c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n }\n getCookie1_func(name, index_x) {\n CoockiesFunctionClass_Log("getCookie1_func");\n const s = window.dcSite;\n const vd = this.AdUnit_data.views;\n let index_y = "";\n let cunt_i = 0;\n for (let i in vd[s]) index_y = index_y + i + ";";\n const ca = index_y.split(";");\n for (let i = 0; i < ca.length; i++) {\n if (ca[i] == name) break;\n cunt_i = cunt_i + 1;\n }\n let mcookie = this.readCookie_func(index_x);\n return mcookie.substring(cunt_i, cunt_i + 1);\n }\n writeCookie1_func(name, value, days, index_x) {\n CoockiesFunctionClass_Log("writeCookie1_func");\n let expires = "";\n if (days) {\n let date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = "; expires=" + date.toGMTString();\n } else expires = "";\n const s = window.dcSite;\n let vd = this.AdUnit_data.views;\n let index_y = "";\n for (let i in vd[s]) index_y = index_y + i + ";";
1\n let ca = index_y.split(";");\n let cunt_i = 0;\n for (let i = 0; i < ca.length; i++) {\n if (ca[i] == name) break;\n cunt_i = cunt_i + 1;\n }\n let mcookie = this.readCookie_func(index_x);\n let B4 = mcookie.substring(-1, cunt_i);\n let R2 = mcookie.substring(cunt_i + 1, mcookie.length);\n let ncookie = index_x + "=" + B4 + value + R2 + expires + "; path=/";\n document.cookie = ncookie;\n }\n setViewCookies_func() {\n CoockiesFunctionClass_Log("setViewCookies_func");\n const dcPath1 = this.dcPath;\n this._dcPath = dcPath1.split("-");\n let c = this._dcPath[0].toLowerCase();\n let s = this.dcSite;\n let vd_list = this.AdUnit_data.views;\n const index_x = "tmc" + s;\n const sync = this.readCookie_func("dcsync" + s);\n const Lcoockie = this.readCookie_func(index_x);\n let view; // OLD VERSION OF VIEW\n var cunt_i = "";\n if (!sync || Lcoockie == null) {\n this.createCookie_func("dcsync" + s, "true", 360);\n cunt_i = "";\n if (!vd_list[s]) {\n s = "standard";\n }\n for (let i in vd_list[s]) i + "";\n cunt_i = cunt_i + "1";\n this.createCookie_func(index_x, cunt_i, 360);\n } else {\n if (!vd_list[s]) {\n s = "standard";\n }\n if (!vd_list[s][c]) {\n c = "standard";\n }\n view = this.getCookie1_func(c, index_x);\n const t = vd_list[s][c];\n if (t) {\n view = view % t + 1;\n let str = "view1";\n for (let i = 2; i <= view; i++) {\n str = str + ",view" + i;\n }\n }\n this.writeCookie1_func(c, view, 360, index_x);\n }\n }\n viewCoockies_func() {\n //viewCoockies_func function get the page dcPath and return key for the dcview (from localstorage the value of view)\n //The dcPath have 5 values: home_channel, news_channel, woman_channel, man_channel, other_channel\n if (modules_InfrastructureClass.Site == "is_800") {\n return this.dcPath;\n } else {\n const channel_path = this.dcPath;\n const path_array = channel_path.split("-");\n const num_channel = path_array[0].substr(0, path_array[0].indexOf("."));\n if (this.dccg == "home" || window.dcPath == "2775.Knesset-33113.adipeeri") {\n return "home_channel";\n } else if (num_channel == "2") {\n return "news_channel";\n } else if (num_channel == "975" || num_channel == "1209" || num_channel == "1208" || num_channel == "1069" || num_channel == "3925" || num_channel == "538" || num_channel == "5363" || num_channel == "11211" || num_channel == "3052") {\n return "woman_channel";\n } else if (num_channel == "550" || num_channel == "3" || num_channel == "544" || num_channel == "598" || num_channel == "6" || num_channel == "4880") {\n return "man_channel";\n } else {\n return "other_channel";\n }\n }\n }\n} //end class CoockiesFunctionClass\n/* harmony default export */ var modules_CoockiesFunctionClass = (new CoockiesFunctionClass_CoockiesFunctionClass());\n// CONCATENATED MODULE: ./modules/MainFunctionClass.js\n\n\n\n\nconst {\n Log: MainFunctionClass_Log\n} = modules_InfrastructureClass;\nlet {\n googletag: MainFunctionClass_googletag,\n Templates\n} = window;\nclass MainFunctionClass_MainFunctionClass {\n constructor() {\n this.innerWidth = window.innerWidth;\n this.Dfp_refresh_adTimeXnet = 7 * 60 * 1000;\n }\n getStyleTop_func(event) {\n MainFunctionClass_Log("getStyleTop_func");\n let event_size = event.size + "";\n let event_w = event_size.split(",");\n if (event.size == "970,90") {\n const top_temp = document.getElementById("ads.top");\n top_temp.style.cssText = "height: 90px;padding: 5px; background-color: rgb(233, 233, 233); box-sizing: border-box; margin: 0 auto; width: 980px;min-height: auto !important;clear:both;height: 90px !important;";\n } else {\n let width_top = event_w[0] == "1" || event_size == "fluid" ? document.getElementById("ads.top").offsetWidth : parseInt(event_w[0], 10);\n document.getElementById("ads.top").setAttribute("style", "clear: both; min-height: auto !important; text-align:center; padding: 0 !important; width: " + parseInt(width_top + 10) + "px !important;" + "margin: 0px auto; border: 5px solid rgb(233, 233, 233); box-sizing: border-box;");\n }\n }\n videoOff_func() {\n MainFunctionClass_Log("videoOff_func");\n const video_data = "";\n let video_on = document.getElementsByClassName("video-container-flp6");\n for (let i = 0; i < video_on.length;
1 i++) {\n let iframe_video = video_on[i].children[0];\n const video_data = iframe_video.getAttribute("data-myurl");\n iframe_video.src = video_data;\n }\n return video_data;\n } // end of videoOff_func\n refreshAll800_func() {\n MainFunctionClass_Log("refreshAll800_func");\n let that = this;\n let jsonObj_dict = modules_AdUnitFunctionsClass.jsonObj;\n modules_AdUnitFunctionsClass.getKeyValues_func();\n MainFunctionClass_googletag.cmd.push(function () {\n for (let key of Object.keys(jsonObj_dict)) {\n MainFunctionClass_googletag.pubads().setTargeting(key, jsonObj_dict[key]);\n }\n MainFunctionClass_googletag.pubads().refresh();\n //googletag.pubads().enableSingleRequest();\n MainFunctionClass_googletag.enableServices();\n });\n setTimeout(that.refreshAll800_func, modules_AdUnitPropertiesClass.refreshAdTime_func());\n }\n refreshAll_func() {\n MainFunctionClass_Log("refreshAll_func");\n try {\n window.Templates.CloseCreatives();\n } catch (ex) {\n MainFunctionClass_Log("Templates.CloseCreatives:" + ex);\n }\n MainFunctionClass_googletag.cmd.push(function () {\n //googletag.pubads().setTargeting("dcunigpt", new_view);\n MainFunctionClass_googletag.pubads().updateCorrelator();\n MainFunctionClass_googletag.pubads().refresh();\n //googletag.destroySlots();\n //googletag.enableServices();\n });\n\n // AdUnitPropertiesClassObj.Define_slots = [];\n // AdUnitPropertiesClassObj.Define_ozen = [];\n\n // AdUnitFunctionsClassObj.Collect_all_banners_ids();\n // AdUnitFunctionsClassObj.getKeyValues_func();\n // AdUnitFunctionsClassObj.defineUnits_func();\n\n // POC lazyload \n // switch(window.group_str) {\n\n // case(window.test_group_str.Lazy_render):\n // // Enable without lazy rendering.\n // console.log("enableLazyLoad + enableSingleRequest");\n // googletag.pubads().enableLazyLoad({fetchMarginPercent: -1});\n // googletag.pubads().enableSingleRequest();\n // break;\n\n // case(window.test_group_str.Lazy_load):\n // // To enable with defaults use googletag.pubads().enableLazyLoad();\n // // Enable lazy loading with...\n // console.log("enableLazyLoad");\n // googletag.pubads().enableLazyLoad({\n // // Fetch slots within 5 viewports.\n // fetchMarginPercent: 500,\n // // Render slots within 2 viewports.\n // renderMarginPercent: 200,\n // // Double the above values on mobile, where viewports are smaller\n // // and users tend to scroll faster.\n // mobileScaling: 2.0\n // });\n // break;\n\n // default:\n // console.log("SRA")\n // googletag.pubads().enableSingleRequest();\n // break;\n // }\n // googletag.enableServices();\n // end of POC lazyload\n\n setTimeout(this.refreshAll_func, modules_AdUnitPropertiesClass.refreshAdTime_func());\n }\n refreshOzen_func() {\n let that = this;\n MainFunctionClass_Log("refreshOzen_func");\n let ozen = window.dcSite == "ynt" ? modules_AdUnitFunctionsClass.Ozen_right : "ads.ozen.right";\n MainFunctionClass_googletag.cmd.push(function () {\n MainFunctionClass_googletag.pubads().refresh([modules_AdUnitPropertiesClass.Define_slots[ozen]]);\n MainFunctionClass_googletag.enableServices();\n });\n setTimeout(that.refreshOzen_func, modules_AdUnitPropertiesClass.refreshAdOzen);\n }\n refreshSticky_func() {\n let that = this;\n MainFunctionClass_Log("refreshSticky_func");\n MainFunctionClass_googletag.cmd.push(function () {\n MainFunctionClass_googletag.pubads().refresh([modules_AdUnitPropertiesClass.Define_slots[modules_AdUnitFunctionsClass.sticky]]);\n MainFunctionClass_googletag.enableServices();\n });\n setTimeout(that.refreshSticky_func, modules_AdUnitPropertiesClass.refreshSticky);\n }\n RenameSticky() {\n let sticky_slot = "ads.banner";\n if (window.newMedia == "False") {\n if (window.dcPath.includes("Weather") || window.dcPath.includes("weather")) {\n sticky_slot = modules_AdUnitFunctionsClass.getDevice_func() == "Android" ? "ads.ynet_mobileweb_banners_android_weather_sticky" : "ads.ynet_mobileweb_banners_iphone_weather_sticky";\n } else {\n sticky_slot = modules_AdUnitFunctionsClass.getDevice_func() == "Android" ? "ads.ynet_mobileweb_banners_android_magazine_sticky" : "ads.ynet_mobileweb_banners_iphone_magazine_sticky";\n }\n }\n const element = document.getElementById("ads.sticky");\n const ca = element.children;\n for (let i = 0; i < ca.length;
1 i++) {\n ca[i].parentNode.removeChild(ca[i]);\n }\n element.id = sticky_slot;\n element.setAttribute("style", "position:fixed;bottom:0px;left:0px;display:flex;justify-content:center;display:-webkit-box;-webkit-box-pack:center;display:-ms-flexbox;-ms-flex-pack:center;text-align:center;width:100%;z-index:9999;margin:0 auto;background-color:#fff");\n if (element.classList.contains("remove_sticky")) {\n element.classList.remove(\'remove_sticky\');\n }\n modules_AdUnitFunctionsClass.findAllDiv_func();\n setTimeout(this.DefineSticky_func(sticky_slot), 1500);\n }\n DefineSticky_func(id) {\n MainFunctionClass_Log("DefineSticky_func");\n modules_AdUnitFunctionsClass.defineSlots_func(id, [[320, 50], [360, 50]]);\n MainFunctionClass_googletag.cmd.push(function () {\n MainFunctionClass_googletag.display(id);\n });\n modules_AdUnitStylesClass["ads.sticky"]("ads.sticky");\n }\n refreshInreads_func() {\n const visible_boxes = document.querySelectorAll(\'div.articleBodyInread.visible\');\n visible_boxes.forEach(bx => {\n bx.classList.remove(\'visible\');\n });\n MainFunctionClass_googletag.cmd.push(function () {\n const boxes = document.querySelectorAll(\'div.articleBodyInread:not(.visible)\');\n document.addEventListener(\'scroll\', function () {\n for (const box of boxes) {\n if (!box.classList.contains("visible") && box.getBoundingClientRect().top >= window.innerHeight && box.getBoundingClientRect().top > 0) {\n if (box.id == "ads.inread.1") {\n MainFunctionClass_googletag.pubads().refresh([window.AdUnitPropertiesClassObj.Define_slots_article_2[box.id]]);\n MainFunctionClass_googletag.pubads().clear([window.AdUnitPropertiesClassObj.Define_slots_article_2[box.id]]);\n }\n if (box.id == "ads.inread.2" || box.id == "ads.inread.3") {\n MainFunctionClass_googletag.pubads().refresh([window.AdUnitPropertiesClassObj.Define_slots_article_3[box.id]]);\n MainFunctionClass_googletag.pubads().clear([window.AdUnitPropertiesClassObj.Define_slots_article_3[box.id]]);\n }\n let closest_div = box.closest(".articleBodyInreadWrapper");\n let box_height = box.clientHeight;\n if (box_height < 1) {\n closest_div.setAttribute("style", "min-height: 0; height: 0; transition: min-height 0.5s");\n } else {\n closest_div.setAttribute("style", "min-height:" + box_height + "px; transition: min-height 0.5s");\n }\n box.classList.add(\'visible\');\n }\n }\n // document.removeEventListener("scroll", makeBackgroundYellow, false);\n }, {\n passive: true\n });\n });\n setTimeout(window.refresh_inreads, window.articleBodyAdsRefreshRate * 1000);\n }\n} // end class MainFunctionClass\nconst _MainFunctionClass = new MainFunctionClass_MainFunctionClass();\n/* harmony default export */ var modules_MainFunctionClass = (_MainFunctionClass);\nwindow.video_off = _MainFunctionClass.videoOff_func.bind(_MainFunctionClass);\n// CONCATENATED MODULE: ./modules/AdUnitFunctionsClass.js\n\n\n\n\n\n\n\n\nconst {\n Log: AdUnitFunctionsClass_Log\n} = modules_InfrastructureClass;\nlet {\n googletag: AdUnitFunctionsClass_googletag,\n general_banners,\n all_banners_array,\n console: AdUnitFunctionsClass_console\n} = window;\nclass AdUnitFunctionsClass_AdUnitFunctionsClass {\n constructor() {\n if (window.dcPath.includes("PnaiPlus") || window.dcPath.includes("laisha") || window.dcPath.includes("architecture") || window.dcPath.includes("menta") || window.dcPath.includes("fashion")) {\n this.ynet_sites = true;\n } else {\n this.ynet_sites = false;\n }\n this.newMedia = window.newMedia;\n this.Ozen_800 = window.newMedia == \'True\' ? "ads.skyscraper" : "ads.ozen";\n this.Ozen_right = window.newMedia == \'True\' ? "ads.skyscraper" : "ads.ozen.right";\n this.Ozen_left = window.newMedia == \'True\' ? "ads.skyscraper.left" : "ads.ozen_left";\n this.Maavaron_slot = window.newMedia == \'True\' ? "ads.interstitial" : "ads.maavaron";\n this.newspaper = window.newMedia == \'True\' ? "ads.top.promo" : "ads.newsp
1aper";\n this.Ozen = window.newMedia == \'True\' ? "ads.skyscraper" : "ads.ozen";\n this.sticky = window.newMedia == \'True\' ? "ads.banner" : "ads.sticky";\n this.parent_category = window.ParentCategory;\n this.platform_path = "/desktop/";\n this.dccg = window.dcCG;\n this.maxdcpath_level = 2;\n this.new_dcPath = "";\n this.dcPath = window.dcPath;\n this.dcSite = window.dcSite;\n this.video = window.video;\n this.NetworkNumber = "6870";\n this.dcTags = window.dcTags;\n this.innerWidth = window.innerWidth;\n this.newGrid = window.GridWidth;\n this._EP = "";\n this.jsonObj = {};\n window.all_banners = "";\n let all_banners_array = window.global_banners;\n function isJSON(all_banners_array) {\n try {\n if (all_banners_array && (typeof all_banners_array !== "string" || all_banners_array == 0)) {\n return false;\n }\n let jsonall_banners = JSON.parse(JSON.stringify(all_banners_array));\n window.all_banners = JSON.parse(jsonall_banners); // WRITE DEFAULT IF ITS NOT VALID JSON\n return JSON.parse(jsonall_banners) && !!all_banners_array;\n } catch (e) {\n return false;\n }\n }\n function json_Run() {\n let is_valid = isJSON(all_banners_array);\n if (is_valid == false) {\n // default values if json invalid\n const article_banners = "[[{ \\"id\\": \\"ads.top\\", \\"sizes\\": [[1, 1], [1, 2], [970, 90], [970, 250], [1000, 200], [970, 130], [970, 350], [970, 100], [1192, 250], [1192, 350], [1192, 90], [1192, 100], [1192, 130]], \\"banner\\": \\"global\\" }],\\n [{ \\"id\\": \\"ads.skyscraper\\", \\"sizes\\": [[300, 600], [300, 601], [1, 1]], \\"banner\\": \\"global\\" }], [{ \\"id\\": \\"ads.interstitial\\", \\"sizes\\": [[1, 1], [2, 1], [970, 250]], \\"banner\\": \\"global\\" }]]";\n const hp_banners = "[[{ \\"id\\": \\"ads.top\\", \\"sizes\\": [[1, 1], [1, 2], [970, 90], [970, 250], [1000, 200], [970, 130], [970, 350], [970, 100], [1192, 250], [1192, 350], [1192, 90], [1192, 100], [1192, 130]], \\"banner\\": \\"global\\" }],\\n [{ \\"id\\": \\"ads.skyscraper\\", \\"sizes\\": [[300, 600], [300, 601], [1, 1]], \\"banner\\": \\"global\\" }],\\n [{ \\"id\\": \\"ads.hotbox.native.1\\", \\"sizes\\": [[190, 208], [\\"fluid\\"]], \\"banner\\": \\"native_reactrender\\" }],\\n [{ \\"id\\": \\"ads.hotbox.native.2\\", \\"sizes\\": [[190, 208], [\\"fluid\\"]], \\"banner\\": \\"native_reactrender\\" }],\\n [{ \\"id\\": \\"ads.box.nadlan.1\\", \\"sizes\\": [[190, 188], [\\"fluid\\"]], \\"banner\\": \\"native\\" }],\\n [{ \\"id\\": \\"ads.box.nadlan.2\\", \\"sizes\\": [[190, 188], [\\"fluid\\"]], \\"banner\\": \\"native\\" }],\\n [{ \\"id\\": \\"ads.box.nadlan.3\\", \\"sizes\\": [[190, 188], [\\"fluid\\"]], \\"banner\\": \\"native\\" }],\\n [{ \\"id\\": \\"ads.box.content.1\\", \\"sizes\\": [[190, 210], [\\"fluid\\"]], \\"banner\\": \\"native_reactrender\\" }],\\n [{ \\"id\\": \\"ads.box.content.2\\", \\"sizes\\": [[190, 210], [\\"fluid\\"]], \\"banner\\": \\"native_reactrender\\" }],\\n [{ \\"id\\": \\"ads.box.content.3\\", \\"sizes\\": [[190, 210], [\\"fluid\\"]], \\"banner\\": \\"native_reactrender\\" }],\\n [{ \\"id\\": \\"ads.box.laisha.1\\", \\"sizes\\": [[268, 305], [\\"fluid\\"]], \\"banner\\": \\"native_reactrender\\" }],\\n [{ \\"id\\": \\"ads.box.laisha.2\\", \\"sizes\\": [[268, 305], [\\"fluid\\"]], \\"banner\\": \\"native_reactrender\\" }],\\n [{ \\"id\\": \\"ads.box.content.4\\", \\"sizes\\": [[190, 210], [\\"fluid\\"]], \\"banner\\": \\"native_reactrender\\" }],\\n [{ \\"id\\": \\"ads.box.content.5\\", \\"sizes\\": [[190, 210], [\\"fluid\\"]], \\"banner\\": \\"native_reactrender\\" }],\\n [{ \\"id\\": \\"ads.box.content.6\\", \\"sizes\\": [[190, 210], [\\"fluid\\"]], \\"banner\\": \\"native_reactrender\\" }]]";\n const category_banners = "[[{ \\"id\\": \\"ads.top\\", \\"sizes\\": [[1, 1], [1, 2], [970, 90], [970, 250], [1000, 200], [970, 130], [970, 350], [970, 100], [1192, 250], [1192, 350], [1192, 90], [1192, 100], [1192, 130]], \\"fluid\\": false, \\"onesize\\": true }],\\n [{ \\"id\\": \\"ads.top.promo\\", \\"sizes\\": [1920, 90], \\"fluid\\": false, \\"onesize\\": true }],\\n [{ \\"id\\": \\"ads.sargel\\", \\"sizes\\": [1920, 90], \\"fluid\\": false, \\"onesize\\": true }],\\n [{ \\"id\\": \\"ads.skyscraper\\", \\"sizes\\": [[300, 600], [300, 601]], \\"fluid\\": false, \\"onesize\\": true }],\\n [{ \\"id\\": \\"ads.interstitial\\", \\"sizes\\": [[1, 1], [2, 1], [970, 250]], \\"banner\\": \\"global\\" }],\\n [{ \\"id\\": \\"ads.strip.channel.1\\", \\"sizes\\": [[190, 208], [\\"fluid\\"]], \\"banner\\": \\"native_channel\\" }]]";\n let default_banners = window.dcCG == "home" || window.dcPath == "2775.Knesset-64852.sidehompage" || window.dcPath == "2775.Knesset-1.Home" || window.dcPath == "2775.Knesset-33113.adipeeri" ? hp_banners : window.dcCG == "article" ? article_banners : category_banners;\n //let default_banners = hp_banners; // change it after fast gpt will be also on category and article pages\n let json_default_banners = JSON.parse(JSON.stringify(default_banners));\n window.all_banners = JSON.parse(json_default_banners);\n }\n }\n json_Run();\n\n // try {\n // let jsonall_banners = JSON.parse(JSON.stringify(all_banners_array));\n // if (JSON.parse(jsonall_banners) && !!all_banners_array) {\n // this.all_banners = JSON.parse(jsonall_banners);\n // }\n // } catch (e) {\n\n // }\n\n this.general_banners = window.general_banners;\n let jsonall_gb_banners = JSON.parse(JSON.stringify(general_banners));\n this.all_gb_banners = JSON.parse(jsonall_gb_banners);\n window.all_banners_ids = [];\n //this.all_gb_banners_ids = [];\n } //end constructor\n Get_banners_obj(banners_json) {\n Object.keys(banners_json).forEac
1h(key => {\n window.all_banners_ids.push(banners_json[key][0].id);\n });\n }\n Collect_all_banners_ids() {\n this.Get_banners_obj(window.all_banners);\n this.Get_banners_obj(this.all_gb_banners);\n }\n Change_promo_place() {\n let banner_ids = window.all_banners_ids;\n banner_ids.forEach(function (banner_id) {\n if (window.isMobile1 == false && banner_id == "ads.top.promo" && window.GridWidth == 1240) {\n if (banner_ids.filter(x => x.includes("ads.top"))) modules_AdUnitStylesClass["promo_class"]("promo_class");\n }\n });\n }\n AddDivs() {\n let banners = {\n "ads.doublestripon_desktop.1": "ads.doublestripon.1",\n "ads.ivory_desktop.1": "ads.ivory.1",\n "ads.586x88.1": "ads.strip.channel.1",\n "ads.490x88.1": "ads.strip.1",\n "ads.300x600.1": "ads.bigbox.1",\n "ads.300x250.1": "ads.box.1",\n "ads.300x250.2": "ads.box.2",\n "ads.300x250.3": "ads.box.3",\n "ads.300x250.4": "ads.box.4",\n "ads.980x90.1": "ads.bottombanner.1",\n "ads.topstripon_desktop.1": "ads.topstripon.1",\n "ads.bottomstripon_desktop.1": "ads.bottomstripon.1",\n "ads.rightstripon_desktop.1": "ads.rightstripon.1"\n };\n function insertAfter(referenceNode, newNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n }\n for (let k in banners) {\n if (banners.hasOwnProperty(k)) {\n if (document.getElementById(k) != null || document.getElementById(k) != undefined) {\n let div = document.getElementById(k);\n let el = document.createElement("div");\n el.id = banners[k];\n el.setAttribute("class", "general_banner_ad");\n el.setAttribute("data-adunit", banners[k]);\n el.setAttribute("data-old", div.id);\n el.style.padding = div.style.padding;\n insertAfter(div, el);\n div.remove();\n }\n }\n continue;\n }\n }\n getKeyValues_func() {\n //getKeyValues_func function create key value Object.\n //This object c
1ontain all keys that has been used in DFP in aim to display gpt\n //This function is used from all main scripts that start with \'gpt_scipt_...\'\n let _DY = "";\n let stage = "";\n\n //POC lazyload\n this.jsonObj["test"] = "lazyload";\n if (window.gpt_group_name != undefined) this.jsonObj["GPT_group"] = window.gpt_group_name;\n // end of POC lazyload\n\n if (window.dcSite == "ynt" && window.matchMedia && window.matchMedia(\'only screen and (max-width:768px ) and (orientation: portrait), only screen and (max-width: 900px) and (orientation: landscape)\').matches) {\n if (window.matchMedia(\'(prefers-color-scheme: dark)\').matches) {\n this.jsonObj["Dark_Mode"] = "on";\n } else {\n this.jsonObj["Dark_Mode"] = "off";\n }\n }\n if ("undefined" != typeof window.dcForumID && window.dcForumID != null) {\n this.jsonObj["ynfi"] = window.dcForumID;\n } else {\n this.jsonObj["ynfi"] = "0";\n }\n if ("undefined" != typeof window.dcKeyword && window.dcKeyword != null) {\n this.jsonObj["dckw"] = window.dcKeyword;\n } else {\n this.jsonObj["dckw"] = "0";\n }\n if ("undefined" != typeof window.dcCategory && window.dcCategory != null) {\n this.jsonObj["ngch"] = window.dcCategory;\n } else {\n this.jsonObj["ngch"] = "0";\n }\n if ("undefined" != typeof window.dcCategoryID && window.dcCategoryID != null) {\n this.jsonObj["yrca"] = window.dcCategoryID;\n } else {\n this.jsonObj["yrca"] = "0";\n }\n if ("undefined" != typeof window.dcTags && window.dcTags != null) {\n this.jsonObj["dcTag"] = window.dcTags;\n } else {\n this.jsonObj["dcTag"] = "0";\n }\n if ("undefined" != typeof this.dcPath && this.dcPath != null) {\n this.jsonObj["ynch"] = this.dcPath;\n } else {\n this.jsonObj["ynch"] = "0";\n }\n if ("undefined" != typeof this.dcPath && this.dcPath != null) {\n this.jsonObj["dcPath"] = this.dcPath;\n } else {\n this.jsonObj["dcPath"] = "0";\n }\n if ("undefined" != typeof window.dcCG && window.dcCG != null) {\n this.jsonObj["dccg"] = window.dcCG;\n } else {\n this.jsonObj["dccg"] = "0";\n }\n if ("undefined" != typeof window.dcVideo && window.dcVideo != null) {\n this.jsonObj["ynvc"] = window.dcVideo;\n } else {\n this.jsonObj["ynvc"] = "0";\n }\n if ("undefined" != typeof window.dcContentID && window.dcContentID != null) {\n this.jsonObj["yncd"] = window.dcContentID;\n } else {\n this.jsonObj["yd"] = "0";\n }\n this.jsonObj["callType"] = "GPT";\n stage = this.getUrlVars_func("dcStage");\n if (stage) this.jsonObj["ynst"] = stage;\n if (stage) this.jsonObj["dcStage"] = stage;\n //this.readDY_func(); //RUN DY FUNCTION\n _DY = localStorage._dy; //GET DATA FROM DY STORED IN LOCALSTORAGE\n if (_DY) {\n _DY = _DY.split("*")[0];\n if (_DY.length > 0) {\n _DY = _DY.split(".");\n this.jsonObj["DYA"] = _DY;\n }\n }\n let _EP = this.readExposebox_func();\n if (_EP) {\n _EP = _EP.split("*")[0];\n if (_EP.length > 0) {\n _EP = _EP.split(".");\n this.jsonObj["Exposebox"] = _EP;\n }\n }\n _EP = modules_CoockiesFunctionClass.readCookie_func("TM_DCCGroup");\n if (_EP) {\n _EP = _EP.split("*")[0];\n if (_EP.length > 0) {\n _EP = _EP.split(".");\n this.jsonObj["DCCGroup"] = _EP;\n }\n }\n this.jsonObj["dcsch"] = "null";\n this.jsonObj["dccw"] = "" + "high_res" + "";\n this.jsonObj["dcsw"] = "" + screen.width + "";\n modules_CoockiesFunctionClass.setViewCookies_func(); // old\n this.dcGetNextView_func(modules_CoockiesFunctionClass.viewCoockies_func()); // new\n\n if (modules_InfrastructureClass.Site == "is_800") {\n if ("undefined" != typeof modules_AdUnitPropertiesClass.DCview && modules_AdUnitPropertiesClass.DCview != null) {\n if (modules_AdUnitPropertiesClass.DCview <= 5) {\n this.jsonObj["dcunigpt"] = "view" + modules_AdUnitPropertiesClass.DCview;\n } else {\n this.jsonObj["dcunigpt"] = "view";\n }\n }\n } else {\n if ("undefined" != typeof modules_AdUnitPropertiesClass.DCview && modules_AdUnitPropertiesClass.DCview != null) {\n if (window.dcCG == "home" || window.dcPath == "2775.Knesset-64852.sidehompage" || window.dcPath == "2775.Knesset-1.Home" || window.dcPath == "2775.Knesset-33113.adipeeri" || window.dcPath == "1.CentralDesk-1.Home") {\n if (modules_AdUnitPropertiesClass.DCview <= 5) {\n this.jsonObj["dcunigpt"] = "view" + modules_AdUnitPropertiesClass.DCview;\n } else {\n this.jsonObj["dcunigpt"] = "view";\n }\n } else {\n if (modules_AdUnitPropertiesClass.DCview <= 5) {\n this.jsonObj["dcunigpt"] = "view" + modules_AdUnitPropertiesClass.DCview;\n } else {\n this.jsonObj["dcunigpt"] = "view";\n }\n }\n }\n }\n this.jsonObj["charset"] = "UTF-8";\n } // end of getKeyValues_func\n\n readExposebox_func() {\n //readExposebox_func call from function getKeyValues_func()\n //The EXPOSEBOX server uses our function that preserves the submission time of categories from their server.\n AdUnitFunctionsClass_Log("readExposebox_func");\n let time_now = +new Date();\n if (localStorage._Exposebox_expire != null || localStorage._Exposebox_expire != undefined) {\n if (time_now > +localStorage._Exposebox_expire) {\n localStorage._expo = "";\n }\n }\n if (localStorage._expo != null && localStorage._expo != undefined && localStorage._expo != "") {\n modules_AdUnitPropertiesClass.Expo = localStorage._expo;\n return modules_AdUnitPropertiesClass.Expo;\n }\n }
1\n // DELETE IT ?\n findAllDiv_func() {\n //findAllDiv_func function use many times in all scripts it get all alement for the gpt, it need to run only after the html build.. therefor there is\n //another function in InfrastructureClass that using await to get all element\n var elems = modules_InfrastructureClass.adsElements;\n for (let i = 0; i < elems.length; i++) {\n modules_AdUnitPropertiesClass.Slots[elems[i].id] = elems[i];\n }\n }\n dcGetNextView_func(key) {\n //dcGetNextView_func function get key from the viewCoockies_func and use it to set the DCview (the view)\n //console.log(\'dcGetNextView_func\')\n let dcDate = new Date(new Date().getTime() + 10 * 60 * 60 * 1000).getUTCDate();\n let views = {};\n try {\n views = JSON.parse(localStorage._dcViews);\n } catch (e) {\n views = {};\n localStorage.removeItem("_dcViews");\n localStorage.removeItem("_dcDate");\n }\n if (dcDate != localStorage._dcDate) {\n localStorage._dcDate = dcDate;\n views = {};\n }\n views[key] == undefined ? views[key] = 1 : views[key]++;\n localStorage._dcViews = JSON.stringify(views);\n modules_AdUnitPropertiesClass.DCview = views[key];\n if (modules_AdUnitPropertiesClass.DCview > 5) {\n modules_AdUnitPropertiesClass.DCview = undefined;\n }\n return modules_AdUnitPropertiesClass.DCview;\n }\n getDcPath_func(dc_path) {\n // get windows dcPath and return\n AdUnitFunctionsClass_Log("getDcPath_func");\n let this_path = dc_path;\n let patch_array = this_path.split("-");\n let temp_path = patch_array[0].indexOf(".");\n let new_dcPath = patch_array[0].substring(temp_path);\n return new_dcPath;\n }
1\n getUrlVars_func(dcStage_string) {\n AdUnitFunctionsClass_Log("getUrlVars_func");\n const vars_list = [];\n let hash_list = [];\n let hashes = window.location.href.slice(window.location.href.indexOf("?") + 1).split("&");\n let hashesLen = hashes.length;\n for (let i = 0; i < hashesLen; i++) {\n hash_list = hashes[i].split("=");\n vars_list.push(hash_list[0]);\n vars_list[hash_list[0]] = hash_list[1];\n }\n if (dcStage_string) {\n return vars_list[dcStage_string];\n } else {\n return vars_list;\n }\n }\n adUnitCall_func(AddAds) {\n //adUnitCallXnet_func call from defineSlots_func\n //The function create adUnitPath for googletag.defineSlot\n const site = window.dcPath.includes("PnaiPlus") ? "pplus" : "ynet";\n let ad_unit_path = "/";\n let path = __webpack_require__(0);\n //const dcPatchArray = this.dcPath.split("-");\n //const len = dcPatchArray.length < this.maxdcpath_level ? dcPatchArray.length : this.maxdcpath_level;\n const au = AddAds.substring(4);\n let mobile_path = this.getDevice_func() == "Android" ? "/mobileweb_android/" : "/mobileweb_iphone/";\n if (window.innerWidth <= "767" && window.dcPath.includes("PnaiPlus")) {\n if (au == "interstitial.inner" && window.dcPath == \'11211.PnaiPlus-1.Home\' && (window.performance && window.performance.navigation.type == window.performance.navigation.TYPE_BACK_FORWARD || localStorage.getItem(\'BACK_HOME_CLICKED\'))) {\n ad_unit_path = path.join(ad_unit_path, this.NetworkNumber, site + mobile_path + "interstitial.backhome/central");\n } else {\n ad_unit_path = path.join(ad_unit_path, this.NetworkNumber, site + mobile_path + au + "/" + modules_AdunitDcPathClass.get(this.dcPath));\n }\n return ad_unit_path;\n } else if (this.newMedia == \'True\') {\n if (window.innerWidth >= "767") {\n if (this.dccg == "home" || window.dcPath == "2775.Knesset-1.Home" || window.dcPath == "2775.Knesset-33113.adipeeri" || window.dcPath == "1.CentralDesk-1.Home" || window.dcPath.includes("8.Central")) {\n let groupstr = window.gpt_group_name && window.gpt_group_name != "" ? "/" + window.gpt_group_name : "";\n ad_unit_path = path.join(ad_unit_path, this.NetworkNumber, site + this.platform_path + au + "/central" + groupstr);\n return ad_unit_path;\n // use this for not home channels test - for testing coockies str and if group_str exist - CENTRAL UNIT TEST ONLY\n } else {\n if (window.dcPath.includes("weather") || window.dcPath.includes("Weather")) {\n ad_unit_path = path.join(ad_unit_path, this.NetworkNumber, site + this.platform_path + au + "/weather");\n } else {\n ad_unit_path = path.join(ad_unit_path, this.NetworkNumber, site + this.platform_path + au + "/" + modules_AdunitDcPathClass.get(this.dcPath));\n }\n return ad_unit_path;\n }\n }\n if (window.innerWidth <= "767") {\n if (window.dcPath.includes("weather") || window.dcPath.includes("Weather")) {\n ad_unit_path = path.join(ad_unit_path, this.NetworkNumber, site + mobile_path + au + "/weather");\n return ad_unit_path;\n } else {\n if (window.ynet_responsive_sites && au == "interstitial.inner" && window.dcPath.includes("-1.Home") && window.dcCG != "article" && (window.performance && window.performance.navigation.type == window.performance.navigation.TYPE_BACK_FORWARD || localStorage.getItem(\'BACK_HOME_CLICKED\'))) {\n ad_unit_path = path.join(ad_unit_path, this.NetworkNumber, site + mobile_path + "interstitial.backhome" + "/" + modules_AdunitDcPathClass.get(this.dcPath));\n } else {\n ad_unit_path = path.join(ad_unit_path, this.NetworkNumber, site + mobile_path + au + "/" + modules_AdunitDcPathClass.get(this.dcPath));\n }\n return ad_unit_path;\n }\n }\n } else {\n //The function create adUnitPath for googletag.defineSlot\n const dcPatchArray = this.dcPath.split("-");\n const len = dcPatchArray.length < this.maxdcpath_level ? dcPatchArray.length : this.maxdcpath_level;\n let temp = dcPatchArray[0].indexOf(".");\n const new_dcPath = dcPatchArray[0].substring(temp);\n if (this.innerWidth <= "767") {\n if (window.dcPath.includes("weather") || window.dcPath.includes("Weather")) {\n let new_path = "";\n const mobile_path = "/ynet_mobile/";\n new_path = ad_unit_path + this.NetworkNumber + mobile_path + au;\n return new_path;\n } else {\n let new_path = "";\n let device_path = this.getDevice_func() == "Android" ? "mobileweb_android" : "mobileweb_iphone";
1\n new_path = ad_unit_path + this.NetworkNumber + "/" + site + "/" + device_path + "/" + au + "/" + this.parent_category.toLowerCase();\n return new_path;\n }\n } else {\n if (this.dccg == "main" || this.dccg == "article" || this.dccg == "sub") {\n ad_unit_path = path.join(ad_unit_path, this.NetworkNumber, this.dcSite + "." + au);\n for (let i = 0; i < len; i++) {\n temp = dcPatchArray[i].indexOf(".");\n ad_unit_path = path.join(ad_unit_path, this.dcSite + "." + au + dcPatchArray[i].substring(temp));\n }\n return ad_unit_path;\n } else {\n ad_unit_path = path.join(ad_unit_path, this.NetworkNumber, this.dcSite + "." + au + new_dcPath);\n return ad_unit_path;\n }\n }\n }\n }\n destroyMaavaron_func() {\n AdUnitFunctionsClass_Log("destroyMaavaron_func");\n const MAAVRON = window.newMedia == "True" ? "ads.interstitial" : "ads.maavaron";\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n AdUnitFunctionsClass_googletag.destroySlots([modules_AdUnitPropertiesClass.Define_slots[MAAV
1RON]]);\n AdUnitFunctionsClass_googletag.enableServices();\n });\n document.getElementById("maavaron_overlay").style.display = "none";\n } //end of destroyMaavaron_func\n setTargeting_function(a) {\n for (let i in a) {\n AdUnitFunctionsClass_googletag.pubads().setTargeting(i, a[i]);\n }\n }\n // MOVE TO DIFERENT FILE\n defineUnits800_func() {\n AdUnitFunctionsClass_Log("defineUnits800_func");\n let jsonObj_dict = this.jsonObj;\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n for (let key of Object.keys(jsonObj_dict)) {\n AdUnitFunctionsClass_googletag.pubads().setTargeting(key, jsonObj_dict[key]);\n }\n });\n this.defineSlots800_func("ads.top", [728, 90]);\n if (modules_AdUnitPropertiesClass.Slots[this.Ozen_800]) {\n this.defineSlots800_func(this.Ozen_800, modules_AdUnitAdditionalStylesClass.resizeOzen800_func());\n modules_AdUnitStylesClass[this.Ozen_800](this.Ozen_800);\n }\n }\n defineUnits_func() {\n //defineUnits_func function all from gpt_script_ynet and create all Slots for the GPT\n let that = this;\n let general_banners_obj = this.all_gb_banners;\n let all_banners_obj = window.all_banners; // open it when ads admin is ready\n let jsonObj_dict = this.jsonObj;\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n for (let key of Object.keys(jsonObj_dict)) {\n let myKey = key !== "" ? key : "noKey";\n AdUnitFunctionsClass_googletag.pubads().setTargeting(myKey, jsonObj_dict[key]);\n }\n });\n if (window.innerWidth <= "767") {\n window.ynet_responsive_sites = window.dcSite == "ynt" && window.matchMedia && window.matchMedia(\'only screen and (max-width:768px ) and (orientation: portrait), only screen and (max-width: 900px) and (orientation: landscape)\').matches ? true : false;\n window.ynet_responsive_special = window.dcSite == "ynt" && (window.dcPath.includes("201.Weather") || window.dcPath.includes("7755") && window.dcPath.includes("Topics")) ? true : false;\n this.findAllDiv_func();\n if (window.ynet_responsive_sites && window.dcCG == "article") {\n if (document.getElementById("ads.box") && document.getElementById("ads.box").classList.contains("CommentsBox")) {\n document.getElementById("ads.box").setAttribute("style", "display: flex !important;");\n this.defineSlots_func("ads.box", [[300, 250], [\'fluid\']]);\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n AdUnitFunctionsClass_googletag.display("ads.box");\n });\n // document.getElementById("ads.box").setAttribute("style", "display: flex !important; margin: 10.625vw auto; justify-content: center; text-align:center;"); \n modules_InfrastructureClass.SlotRenderEnd(function (event) {\n let BoxLoaded = false;\n if (event.slot.getSlotElementId() == "ads.box") {\n if (!BoxLoaded) {\n if (!event.isEmpty) {\n document.getElementById("ads.box").setAttribute("style", "display: flex !important; margin: 10.625vw auto; justify-content: center; text-align:center;");\n }\n BoxLoaded = true;\n }\n }\n });\n }\n }\n if (window.ynet_responsive_sites && window.ynet_responsive_special == false) {\n this.defineSlots_func("ads.banner", [[320, 50], [360, 50]]);\n modules_AdUnitStylesClass["ads.sticky"]("ads.sticky");\n if (modules_AdUnitPropertiesClass.Slots["ads.strip.content.1"]) {\n this.defineSlots_func("ads.strip.content.1", [\'fluid\']);\n document.getElementById("ads.strip.content.1").setAttribute("style", "width:100%; height:auto;");\n }\n if (modules_AdUnitPropertiesClass.Slots["ads.strip.content.2"]) {\n this.defineSlots_func("ads.strip.content.2", [\'fluid\']);\n document.getElementById("ads.strip.content.2").setAttribute("style", "width:100%; height:auto;");\n }\n if (modules_AdUnitPropertiesClass.Slots["ads.box.content.1"]) {\n this.defineSlots_func("ads.box.content.1", [\'fluid\']);\n document.getElementById("ads.box.content.1").setAttribute("style", "width:100%; height:auto;");\n }\n }\n if (window.ynet_responsive_special) {\n let transition_mobile = "ads.interstitial.inner";\n if (this.getDevice_func() == "Android" && this.newMedia == "False") {\n transition_mobile = "ads.ynet_mobileweb_transitions_general_android_main_ip";\n } else if (this.getDevice_func() == "iPhone" && this.newMedia == "False") {\n transition_mobile = "ads.ynet_mobileweb_transitions_general_iphone_main_ip";\n }\n let maavaron_weather = document.createElement(\'div\');\n maavaron_weather.setAttribute(\'id\', transition_mobile);\n document.body.insertBefore(maavaron_weather, document.body.firstChild);\n this.defineSlots_func(transition_mobile, [[1, 1], [1, 2]]);
1\n modules_InfrastructureClass.SlotRenderEnd(function (event) {\n let InterstitialMobileLoaded = false;\n if (event.slot == modules_AdUnitPropertiesClass.Define_slots[transition_mobile]) {\n if (!InterstitialMobileLoaded) {\n if (!event.isEmpty) {\n modules_AdUnitStylesClass["Interstitial_responsive"]("Interstitial_responsive");\n }\n InterstitialMobileLoaded = true;\n }\n }\n });\n }\n if (window.ynet_responsive_sites && window.ynet_responsive_special == false) {\n this.findAllDiv_func();\n let biglivebox_slot = "";\n let livebox_slot = "";\n let maavaron_mobile = "";\n if (this.newMedia == "True" || window.ynet_responsive_sites) {\n biglivebox_slot = "ads.biglivebox";\n livebox_slot = "ads.inboard";\n maavaron_mobile = "ads.interstitial.inner";\n } else {\n if (this.getDevice_func() == "Android") {\n biglivebox_slot = "ads.ynet_mobileweb_android_pnimi_bigliveBox";\n livebox_slot = "ads.ynet_mobileweb_android_livebox";\n maavaron_mobile = "ads.ynet_mobileweb_transitions_general_android_main_ip";\n } else if (this.getDevice_func() == "iPhone") {\n biglivebox_slot = "ads.ynet_mobileweb_iphone_pnimi_bigliveBox";\n livebox_slot = "ads.ynet_mobileweb_iphone_livebox";\n maavaron_mobile = "ads.ynet_mobileweb_transitions_general_iphone_main_ip";\n }\n }\n let maavaron = document.createElement(\'div\');\n maavaron.setAttribute(\'id\', maavaron_mobile);\n document.body.insertBefore(maavaron, document.body.firstChild);\n let header = ".article-header-magazine";\n if (window.ynet_responsive_sites) {\n header = \'.laisha-header\';\n if (document.querySelector(header) == undefined || document.querySelector(header) == null) {\n header = ".article-header-magazine";\n }\n if (window.dcPath.includes("PnaiPlus")) {\n header = ".pplus-header";\n }\n }\n if (document.querySelector(header)) {\n let header_comp = document.querySelector(header);\n let inbord_big_div = document.createElement(\'div\');\n inbord_big_div.setAttribute(\'id\', biglivebox_slot);\n header_comp.parentNode.insertBefore(inbord_big_div, header_comp.nextSibling);\n let inbord_small_div = document.createElement(\'div\');\n inbord_small_div.setAttribute(\'id\', livebox_slot);\n header_comp.parentNode.insertBefore(inbord_small_div, header_comp.nextSibling);\n }\n let hasVisited = sessionStorage.getItem(\'Site_visited\');\n let show_biglivebox = false;\n if (document.referrer == "" && !hasVisited) {\n this.RenderBiglivebox();\n show_biglivebox = true;\n sessionStorage.setItem(\'Site_visited\', true);\n }\n if (show_biglivebox == false && sessionStorage.getItem(\'ynet_mobileweb_interstitial_adx_displayed\')) {\n localStorage.removeItem(\'maavaronAdx\');\n sessionStorage.removeItem(\'ynet_mobileweb_interstitial_adx_displayed\');\n this.RenderSmallInbord();\n } else {\n if (show_biglivebox == false || show_biglivebox == false && window.dcCG == \'article\' || window.dcPath.includes("-1.Home") && hasVisited && show_biglivebox == false && (window.performance && window.performance.navigation.type == window.performance.navigation.TYPE_BACK_FORWARD || localStorage.getItem(\'BACK_HOME_CLICKED\'))) {\n this.defineSlots_func("ads.interstitial.inner", [[1, 1], [1, 2]]);\n let Interstitial_not_empty = true;\n let InterstitialMobileLoaded = false;\n modules_InfrastructureClass.SlotRenderEnd(function (event) {\n if (event.slot == modules_AdUnitPropertiesClass.Define_slots["ads.interstitial.inner"]) {\n if (!InterstitialMobileLoaded) {\n if (!event.isEmpty) {\n if (document.getElementById("closeButton")) {\n document.getElementById("closeButton").remove();\n }\n if (document.getElementById("b1142532")) {\n document.getElementById("b1142532").remove();\n }\n window.closeTransitions = function () {\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n AdUnitFunctionsClass_googletag.destroySlots([modules_AdUnitPropertiesClass.Define_slots["ads.interstitial.inner"]]);\n });\n let transition = document.getElementById("ads.interstitial.inner");\n if (transition) {\n transition.style.height = \'0px\';\n }\n try {\n document.getElementById("Close_btn_interstitial").style.display = \'none\';\n } catch (e) {}\n };\n window.Close = function () {\n //googletag.cmd.push(function() { googletag.destroySlots([AdUnitPropertiesClassObj.Define_slots["ads.interstitial.inner"]]); }); \n try {\n document.querySelector(\'#dcMaavaronDiv\').remove();\n } catch (e) {}\n document.getElementById("ads.interstitial.inner").style.height = \'0px\';\n document.getElementById("ads.interstitial.inner").style.display = \'none\';\n try {\n document.getElementById("Close_btn_interstitial").style.display = \'none\';\n } catch (e) {}\n };\n setTimeout(function () {\n const div_interstitial = parent.document.getElementById("ads.interstitial.inner");\n let img_interstitial = document.createElement("img");\n img_interstitial.id = "Close_btn_interstitial";\n img_interstitial.src = "https://totalmedia2.ynet.co.il/new_gpt/ynet_mutam/close.png";\n img_interstitial.setAttribute("onClick", "window.Close();");\n img_interstitial.setAttribute("style", "cursor: pointer; position: fixed; top: 14px; left: 14px; z-index: 9999999999;");\n div_interstitial.appendChild(img_interstitial);\n }, 300);\n } else {\n AdUnitFunctionsClassObj.RenderSmallInbord();\n Interstitial_not_empty = false;\n }\n InterstitialMobileLoaded = true;\n }\n }\n });\n if (Interstitial_not_empty) {\n this.RenderSmallInbord();\n }\n }\n }\n }\n } else {\n // define all banners from admin ads - run this func when admin ads is ready\n Object.keys(all_banners_obj).forEac
1h(key => {\n // run this func when admin ads is ready \n let banner_id = all_banners_obj[key][0].id;\n if (banner_id == "ads.interstitial") {\n if (window.dcCG != "home" && banner_id == "ads.interstitial" && window.dcPath != "2775.Knesset-33113.adipeeri") {\n // if number less than 4, get parameter dcunigpt = view(number), if more than 4 then don\'t get parameter\n if (document.getElementById("maavaronstyle") != null) {\n document.getElementById("maavaronstyle").innerHTML = "";\n }\n this.Double_Jumbo = true;\n if (!this.Double_Jumbo) {\n document.getElementById("ads.interstitial").innerHTML = "";\n }\n\n //this.defineSlots_func(banner_id, all_banners_obj[key][0].sizes,"",""); \n\n // define Maavaron\n if (window.frequencyLogic && localStorage.frequencyLogic != undefined && frequencyLogic.displayedlast.includes("adx") && frequencyLogic.add == "loaded") {\n localStorage.removeItem(\'frequencyLogic\');\n } else {\n this.defineSlots_func(banner_id, all_banners_obj[key][0].sizes, "", "gpt_maavaron");\n }\n let MaavaronLoaded = false;\n let video_on = "";\n let cont_wh = document.getElementById("content-w");\n let content_wh = cont_wh !== null;\n modules_InfrastructureClass.SlotRenderEnd(function (event) {\n let video_data = "";\n if (event.slot.getSlotElementId() == "ads.interstitial") {\n if (!MaavaronLoaded) {\n if (!event.isEmpty) {\n if (document.getElementById(\'blanket\') != undefined || document.getElementById(\'blanket\') != null) {\n document.getElementById(\'blanket\').style.display = \'none\';\n }\n document.getElementsByTagName(\'body\')[0].style.setProperty(\'overflow\', \'visible\', \'important\');\n that.is_maavaron = true;\n if (content_wh) {\n cont_wh.style.display = "none";\n }\n try {\n video_on = document.getElementsByClassName("video-container-flp6");\n for (let i = 0; i < video_on.length; i++) {\n let iframe_video = video_on[i].children[0];\n iframe_video.src = "";\n }\n } catch (ex) {\n AdUnitFunctionsClass_console.log(ex);\n }\n } else {\n document.getElementsByTagName(\'body\')[0].style.setProperty(\'overflow\', \'visible\', \'important\');\n if (document.getElementById(\'blanket\') != undefined || document.getElementById(\'blanket\') != null) {\n document.getElementById(\'blanket\').style.display = \'none\';\n }\n video_data = modules_MainFunctionClass.videoOff_func();\n }\n MaavaronLoaded = true;\n if (video_data != "") {\n video_on.src = video_data;\n }\n }\n }\n });\n } else {\n if (banner_id == "ads.top") {\n if (this.GridWidth == 1240 || window.dcPath.includes("PnaiPlus")) {\n this.defineSlots_func(banner_id, all_banners_obj[key][0].sizes, "", "");\n } else {\n this.defineSlots_func("ads.top", [[1, 1], [1, 2], [970, 90], [970, 250], [1000, 200], [970, 130], [970, 350], [970, 100]], "", "");\n }\n }\n }\n } else if (banner_id == "ads.skyscraper" || banner_id == "ads.skyscraper.left") {\n if (window.innerWidth > 1520) {\n this.defineSlots_func(this.Ozen_right, modules_AdUnitAdditionalStylesClass.resizeOzen_func());\n modules_AdUnitStylesClass[this.Ozen_right](this.Ozen_right);\n }\n if (window.isAbroad == true) {\n this.defineSlots_func(this.Ozen_left, modules_AdUnitAdditionalStylesClass.resizeOzen_func());\n modules_AdUnitStylesClass[this.Ozen_left](this.Ozen_left);\n }\n } else {\n // if (all_banners_obj[key][0].banner == "native_reactrender" && (window.group_str == "" || window.group_str && window.group_str != window.test_group_str.exp2_SRA_batch)) {\n if (all_banners_obj[key][0].banner == "native_reactrender" && window.gpt_group_name != undefined) {\n window["YITSiteWidgetsCallbacks"] = window["YITSiteWidgetsCallbacks"] || [];\n window["YITSiteWidgetsCallbacks"].push(() =>
1 {\n if (window.gpt_group_name == window.test_group_str.exp4_sra_batch) {\n const interval = setInterval(() => {\n if (AdUnitFunctionsClass_googletag.pubads != undefined) {\n clearInterval(interval); // time is up\n AdUnitFunctionsClassObj.defineSlots_func(banner_id, all_banners_obj[key][0].sizes, "native_banner");\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n AdUnitFunctionsClass_googletag.display(banner_id);\n });\n //if (googletag.pubads().isInitialLoadDisabled()) {\n AdUnitFunctionsClass_googletag.pubads().refresh([banner_id]);\n // }\n }\n }, 100);\n } else {\n AdUnitFunctionsClassObj.defineSlots_func(banner_id, all_banners_obj[key][0].sizes);\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n AdUnitFunctionsClass_googletag.display(banner_id);\n });\n }\n });\n // window["YITSiteWidgetsCallbacks"] = window["YITSiteWidgetsCallbacks"] || [];\n // window["YITSiteWidgetsCallbacks"].push(()=> {\n // this.defineSlots_func(banner_id, all_banners_obj[key][0].sizes);\n // googletag.cmd.push(function() {googletag.display(banner_id);});\n // });\n } else {\n this.defineSlots_func(banner_id, all_banners_obj[key][0].sizes);\n }\n if (all_banners_obj[key][0].banner == "native" || all_banners_obj[key][0].banner == "native_reactrender") {\n if (window.GridWidth == 1240) {\n setTimeout(function () {\n modules_AdUnitAdditionalStylesClass.hp_boxes_class(banner_id);\n }, 3000);\n }\n }\n }\n });\n\n // // IF THIS SHOULD BE IN THE ARRAY?\n // // render each slot\n // let banner_loaded = false;\n // googletag.cmd.push(function() {\n // googletag.pubads().addEventListener("slotRenderEnded", function(event) {\n // if (event.slot == AdUnitPropertiesClassObj.Define_slots["ads.top"]) {} \n // if (event.slot == AdUnitPropertiesClassObj.Define_slots["ads.box.1"]) {}\n // });\n // }); \n\n // define all general banners from componentas\n Object.keys(general_banners_obj).forEach(key => {\n let gb_sizes = general_banners_obj[key][0].sizes;\n let banner_id = general_banners_obj[key][0].id;\n if (gb_sizes[0] == null) {\n this.defineSlots_func(banner_id, [0, 0]);\n } else {\n let gb_many_sizes = gb_sizes[0][0] != undefined ? true : false;\n let fluid = general_banners_obj[key][0].fluid;\n let onesize = general_banners_obj[key][0].onesize;\n if (fluid === true && onesize === true) {\n if (gb_many_sizes) {\n this.defineSlots_func(banner_id, [[\'fluid\'], [1, 1], ...gb_sizes]);\n } else {\n this.defineSlots_func(banner_id, [gb_sizes, [\'fluid\'], [1, 1]]);\n }\n } else if (onesize === true) {\n if (gb_many_sizes) {\n this.defineSlots_func(banner_id, [[1, 1], ...gb_sizes]);\n } else {\n this.defineSlots_func(banner_id, [gb_sizes, [1, 1]]);\n }\n } else if (fluid === true) {\n if (gb_many_sizes) {\n this.defineSlots_func(banner_id, [[\'fluid\'], ...gb_sizes]);\n } else {\n this.defineSlots_func(banner_id, [gb_sizes, [\'fluid\']]);\n }\n } else {\n this.defineSlots_func(banner_id, gb_sizes);\n }\n }\n if (banner_id != "ads.sargel" && gb_sizes[0] != null && banner_id != "ads.top.promo") {\n if (!banner_id.includes("inread")) {\n document.addEventListener("DOMContentLoaded", function () {\n modules_AdUnitAdditionalStylesClass.general_banners_styles();\n modules_AdUnitAdditionalStylesClass.style_per_banner(banner_id);\n });\n }\n //setTimeout(function() { AdUnitAdditionalStylesClassObj.general_banners_styles();}, 3000);\n //if (general_banners_obj[key][0].id == "ads.gray.box.1") adUnitStylesClassObj["ads.gray.box.1"]("ads.gray.box.1");\n //setTimeout(function() { AdUnitAdditionalStylesClassObj.style_per_banner(general_banners_obj[key][0].id); }, 3000); \n }\n });\n\n // NOT RELEVANT IN HP - if ads.spot.1 ,ads.inread, ads.abovecomments exist - check in the array, when admin ads is ready\n if (this.dccg == "article") {\n\n //this.defineSlots_func("ads.inread.1", [[\'fluid\'], [1, 1], [300, 250], [300, 300], [336, 280], [468, 60], [728, 90]]);\n //this.defineSlots_func("ads.inread.2", [[\'fluid\'], [1, 1], [300, 250], [300, 300], [336, 280], [468, 60], [728, 90]]);\n // this.defineSlots_func("ads.inread.3", [[\'fluid\'], [1, 1], [300, 250], [300, 300], [336, 280], [468, 60], [728, 90]]); \n\n // let show_spot_1 = 1;\n // for (let i = 0; i < this.dcTags.length;
1 i++) {\n // if (this.dcTags[i] == "תוכן שיווקי" || this.dcTags[i] == "תוכן פרסומי") {\n // if (document.getElementById("ads.spot.1") != null || document.getElementById("ads.spot.1") != undefined) {\n // document.getElementById("ads.spot.1").style.display=\'none\';\n // } \n // show_spot_1 = 0;\n // } \n // }\n // if (show_spot_1 == 1) {\n // that.defineSlots_func("ads.spot.1", [300, 250], "", "");\n // }\n }\n //Mivzakim firma banners - NOT RELEVANT In HP - OPEN IT in CATEGORY PAGE - should be in admin array GP !!!!\n // if (document.querySelector(".flash-ad-true")) { \n // if (document.querySelector(".AccordionSection")) { \n // let banner_sizes = [[\'fluid\'], [728, 90]];\n // const flash_elements = document.querySelectorAll(".AccordionSection");\n // let element_array = Array.from(flash_elements);\n // for (let i = 1; i < 5; i++) {\n // let banner = document.createElement(\'div\');\n // banner.setAttribute(\'id\', \'ads.flash.banner.\' + i); \n // banner.setAttribute(\'style\',\'margin:10px 29px 25px 0;\'); \n // if (element_array.length >= 5*i && element_array[6*i] != undefined) {\n // element_array[(6*i)-1].parentNode.insertBefore(banner, element_array[(6*i)-1].nextSibling);\n // this.defineSlots_func(banner.id, banner_sizes); \n // } \n // }\n // } \n // }\n\n // define promo - NOT RELEVANT in HP - - OPEN IT in CATEGORY PAGE - should be in admin array GP !!!!\n // if (document.getElementById("ads.promo.magazines")) {\n // let promo_slot = "ads.promo.magazines";\n // let promo_banner = document.getElementById(promo_slot);\n // let promo_size = promo_banner.getAttribute("data-ad-sizes");\n // let promo_size_obj;\n // if (promo_size == undefined || promo_size == null || promo_size == [null,null] || promo_size.includes(null)) {\n // promo_size_obj = [[1192, 100], [970, 125]];\n // } else {\n // promo_size_obj = JSON.parse(promo_size);\n // }\n\n // let promo_fluid = promo_banner.getAttribute("data-fluid-checked");\n // if (promo_fluid == "true" || promo_fluid == true) {\n // let new_promo_sizes_obj;\n // if (promo_size_obj[1][0] == undefined) {\n // new_promo_sizes_obj = [promo_size_obj, [\'fluid\']];\n // } else {\n // new_promo_sizes_obj = [...promo_size_obj, [\'fluid\']];\n // }\n // this.defineSlots_func(promo_slot, new_promo_sizes_obj); \n // } else {\n // this.defineSlots_func(promo_slot, promo_size_obj);\n // }\n // document.getElementById(promo_slot).setAttribute("style", "background-color: #ffffff; margin:0 auto 15px auto; text-align:center; display: flex; justify-content: center;");\n // }\n\n // NOT HP - NOT RELEVANT in HP - OPEN IT in CATEGORY PAGE - should be in admin array GP + add specific style - "banner": "native_channel" !!!!\n // if (this.newGrid == 1240) {\n // if (AdUnitPropertiesClassObj.Slots["ads.strip.channel.1"]) {\n // this.defineSlots_func("ads.strip.channel.1", [[\'fluid\'], [300, 256]]); \n // let StripBannerLoaded = false;\n // InfrasructureClassObj.SlotRenderEnd(function(event) {\n // if (event.slot == AdUnitPropertiesClassObj.Define_slots["ads.strip.channel.1"]) {\n // if (!StripBannerLoaded) {\n // if (!event.isEmpty) {\n // let Stripstyle_banner = document.createElement("style");\n // Stripstyle_banner.innerHTML = `div[id=\'ads.strip.channel.1\'] {\n // width:300px !important;\n // height: 280px !important; \n // border-bottom: 5px solid #1417ac; \n // }\n // div[id=\'ads.strip.channel.1\'] iframe {\n // width:300px !important;\n // height: 280px !important;\n // }`;\n // let strip_banner = document.getElementById("ads.strip.channel.1");\n // //strip_banner.appendChild(Stripstyle_banner);
1 \n // strip_banner.parentNode.insertBefore(Stripstyle_banner, strip_banner.nextSibling); \n // }\n // StripBannerLoaded = true;\n // }\n // }\n // });\n // }\n // }\n\n // MAGAZINES - not relevant yet - NOT RELEVANT in HP - \n // OPEN IT in CATEGORY PAGE - should be in admin array GP + add specific style - "banner": "strip.content" !!!!\n // Need specific style for adding it from gpt file, need to thinking how it will be?\n // if (this.ynet_sites) {\n // if (AdUnitPropertiesClassObj.Slots["ads.strip.content.1"]) {\n // this.defineSlots_func("ads.strip.content.1", [[\'fluid\'], [344, 100]]);\n // let stripcontent_banner_1 = document.createElement("style");\n // stripcontent_banner_1.innerHTML = `div[id=\'ads.strip.content.1\']{min-height: 100px !important;}\n // div[id=\'ads.strip.content.1\'] iframe {min-height: 100px !important;}`;\n // let strip_banner_1 = document.getElementById("ads.strip.content.1");\n // strip_banner_1.parentNode.insertBefore(stripcontent_banner_1, strip_banner_1.nextSibling); \n // }\n // if (AdUnitPropertiesClassObj.Slots["ads.strip.content.2"]) {\n // this.defineSlots_func("ads.strip.content.2", [[\'fluid\'], [344, 100]]);\n // let stripcontent_banner_2 = document.createElement("style");\n // stripcontent_banner_2.innerHTML = `div[id=\'ads.strip.content.2\']{min-height: 100px !important;}\n // div[id=\'ads.strip.content.2\'] iframe {min-height: 100px !important;}`;\n // let strip_banner_2 = document.getElementById("ads.strip.content.2");\n // strip_banner_2.parentNode.insertBefore(stripcontent_banner_2, strip_banner_2.nextSibling); \n // }\n\n // if (AdUnitPropertiesClassObj.Slots["ads.box.content.1"]) {\n // this.defineSlots_func("ads.box.content.1", [\'fluid\']);\n // }\n\n // }\n\n // if ads.strip.marketing exist - check in the array, when admin is ready -NOT RELEVANT - OPEN IT AFTER TESTING GENERAL BANNERS FIRST !!!!\n // if (document.querySelector(".article-headlines-auto-pplus")) {\
1n // if (document.querySelector(".PplusArticleHeadlinesAuto.show-ad-true")) { \n // let banner_sizes = [[\'fluid\'], [900, 200]];\n // const flash_elements = document.querySelectorAll(".PplusArticleHeadlinesAuto .slotView");\n // let element_array = Array.from(flash_elements);\n // for (let i = 1; i < 5; i++) {\n // let banner = document.createElement(\'div\');\n // banner.setAttribute(\'id\', \'ads.strip.marketing.\' + i); \n // banner.setAttribute(\'style\',\'display: flex; justify-content: center;\'); \n // if (element_array.length >= 4*i && element_array[4*i] != undefined) {\n // element_array[(4*i)-1].parentNode.insertBefore(banner, element_array[(4*i)-1].nextSibling);\n // this.defineSlots_func(banner.id, banner_sizes); \n\n // } \n // } \n\n // adUnitStylesClassObj["pplus_strips"]("pplus_strips"); \n // } \n // }\n\n // if ads.strip.marketing.1 exist - check in the array, when admin is ready - NOT RELEVANT - OPEN IT AFTER TESTING GENERAL BANNERS FIRST !!!!\n // if (this.ynet_sites && document.querySelector(".show-ad-true")) { \n // let strip = document.createElement(\'div\');\n // strip.setAttribute(\'id\', "ads.strip.marketing.1");\n // if (document.querySelector(".LaishaArticleHeadlines")) {\n // const strip_element = document.querySelectorAll(".LaishaArticleHeadlines .slotView")[3];\n // strip_element.parentNode.insertBefore(strip, strip_element.nextSibling);\n // strip.style.textAlign = "center"; \n // strip.style.marginBottom = "30px"; \n // this.defineSlots_func("ads.strip.marketing.1", [[\'fluid\'], [850, 180]]);\n // } \n // }\n\n // BROWSI \n if (window.dcCG == "article" && window.all_banners_ids.includes("ads.inread.1")) {\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n AdUnitFunctionsClass_googletag.pubads().disableInitialLoad();\n AdUnitFunctionsClass_googletag.pubads().enableSingleRequest();\n // handlers to track GPT events (debugging mostly)\n AdUnitFunctionsClass_googletag.pubads().addEventListener("slotRequested", event => {\n updateSlotStatus(event.slot.getSlotElementId(), "fetched");\n });\n AdUnitFunctionsClass_googletag.pubads().addEventListener("slotOnload", event => {\n updateSlotStatus(event.slot.getSlotElementId(), "rendered");\n });\n\n // set up lazy loading\n AdUnitFunctionsClass_googletag.pubads().enableLazyLoad({\n // Fetch slots within 2 viewports.\n fetchMarginPercent: 200,\n // Render slots within 1 viewports.\n renderMarginPercent: 100,\n // Double the above values on mobile, where viewports are smaller\n // and users tend to scroll faster.\n mobileScaling: 2.0\n });\n AdUnitFunctionsClass_googletag.enableServices();\n\n // refresh group slots\n // Load first batch of ad slots\n AdUnitFunctionsClass_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_article_1));\n AdUnitFunctionsClass_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_article_2));\n AdUnitFunctionsClass_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_article_3));\n\n // event handler for ad slots state changes\n function updateSlotStatus(slotId, state) {\n const elem = document.getElementById(slotId + "-" + state);\n AdUnitFunctionsClass_console.log("[" + slotId + "] " + state);\n }\n });\n } else if ((window.dcCG == "home" || window.dcPath == "2775.Knesset-1.Home" || window.dcPath == "2775.Knesset-1.Home") && window.browsi_on_gpt === "True") {\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n AdUnitFunctionsClass_googletag.pubads().disableInitialLoad();\n AdUnitFunctionsClass_googletag.pubads().enableSingleRequest();\n AdUnitFunctionsClass_googletag.enableServices();\n\n // refresh all slots (without browsi)\n AdUnitFunctionsClass_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots), {\n changeCorrelator: false\n });\n const HB_TIMEOUT = 3000;\n const slot = window.AdUnitPropertiesClassObj.Define_slot_browsi["ads.box.3"];\n window.browsitag = window.browsitag || {\n cmd: []\n };\n let hbPromise = new Promise(resolve => {\n window.browsitag.cmd.push(async () => {\n let hbCompleted = false;\n if (typeof window.browsitag.processHB === "function") {\n try {\n await window.browsitag.processHB(slot);\n hbCompleted = true;\n } catch (e) {\n AdUnitFunctionsClass_console.log("Browsi HB error:", e);\n }\n } else {\n AdUnitFunctionsClass_console.log("Browsi processHB not available");\n }\n AdUnitFunctionsClass_console.log(hbCompleted ? "HB completed" : "HB n
1ot completed");\n resolve();\n });\n });\n Promise.race([hbPromise, new Promise(resolve => setTimeout(resolve, HB_TIMEOUT))]).finally(() => {\n AdUnitFunctionsClass_console.log("HB finished or timeout → refresh Browsi slot");\n if (AdUnitFunctionsClass_googletag.pubads().isInitialLoadDisabled()) {\n AdUnitFunctionsClass_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slot_browsi), {\n changeCorrelator: false\n });\n }\n });\n });\n } else {\n // LAZY LOAD \n AdUnitFunctionsClass_googletag.cmd.push(function () {\n if (window.gpt_group_name != undefined && (window.dcCG == "home" || window.dcPath == "2775.Knesset-64852.sidehompage" || window.dcPath == "2775.Knesset-33113.adipeeri" || window.dcPath == "1.CentralDesk-1.Home")) {\n switch (window.gpt_group_name) {\n case window.test_group_str.exp4_sra_batch:\n AdUnitFunctionsClass_googletag.pubads().disableInitialLoad();\n AdUnitFunctionsClass_googletag.pubads().enableSingleRequest();\n\n // handlers to track GPT events (debugging mostly)\n AdUnitFunctionsClass_googletag.pubads().addEventListener("slotRequested", event => {\n updateSlotStatus(event.slot.getSlotElementId(), "fetched");\n });\n AdUnitFunctionsClass_googletag.pubads().addEventListener("slotOnload", event => {\n updateSlotStatus(event.slot.getSlotElementId(), "rendered");\n });\n\n // set up lazy loading\n AdUnitFunctionsClass_googletag.pubads().enableLazyLoad({\n // Fetch slots within 2 viewports.\n fetchMarginPercent: 200,\n // old parameter - 200\n // Render slots within 1 viewports.\n renderMarginPercent: 100,\n // Double the above values on mobile, where viewports are smaller\n // and users tend to scroll faster.\n mobileScaling: 2.0\n });\n AdUnitFunctionsClass_googletag.enableServices();\n\n // refresh group slots\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n // Load first batch of ad slots\n AdUnitFunctionsClass_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_1));\n //googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_2));\n AdUnitFunctionsClass_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_3));\n //googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_4));\n AdUnitFunctionsClass_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_5));\n //googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_6));\n //googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_7));\n AdUnitFunctionsClass_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_8));\n });\n\n // event handler for ad slots state changes\n function updateSlotStatus(slotId, state) {\n const elem = document.getElementById(slotId + "-" + state);\n AdUnitFunctionsClass_console.log("[" + slotId + "] " + state);\n }\n break;\n default:\n AdUnitFunctionsClass_googletag.pubads().enableSingleRequest();\n AdUnitFunctionsClass_googletag.enableServices();\n break;\n }\n } else {\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n AdUnitFunctionsClass_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassobj.Define_slots_native));\n });\n AdUnitFunctionsClass_googletag.pubads().enableSingleRequest();\n AdUnitFunctionsClass_googletag.enableServices();\n }\n });\n }\n\n // render each slot\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n AdUnitFunctionsClass_googletag.pubads().addEventListener("slotRenderEnded", function (event) {\n let banner_loaded = false;\n let slot_id = event.slot.getSlotElementId();\n let boxes_banners = [];\n for (let bnadlan_i = 1; bnadlan_i < 4; bnadlan_i++) boxes_banners.push("ads.box.nadlan." + bnadlan_i);\n for (let bhotbox_i = 1; bhotbox_i < 3; bhotbox_i++) boxes_banners.push("ads.box.hotbox.native." + bhotbox_i);\n for (let blaisha_i = 1; blaisha_i < 3; blaisha_i++) boxes_banners.push("ads.box.laisha." + blaisha_i);\n for (let bcontent_i = 1; bcontent_i < 7; bcontent_i++) boxes_banners.push("ads.box.content." + bcontent_i);\n let box_banner = boxes_banners.filter(x => x.includes(slot_id)) == slot_id ? slot_id : false;\n // TOP\n if (slot_id == "ads.top") {\n if (!banner_loaded) {\n if (!event.isEmpty) {\n let event_size = event.size + "";\n let event_w = event_size.split(",");\n let premium_div = document.getElementById("ads.premium");\n if (!premium_div || premium_div && premium_div.childNodes.length == 0) {\n if (event_w[1] > "1" && event_size != "fluid") {\n if (event_w[0] == "1192") {\n document.getElementById("ads.top").setAttribute("style", "background-color: rgb(233, 233, 233); clear: both; min-height: auto !important; text-align:center; padding: 0; width: 1202px; margin: 0px auto; border: 5px solid rgb(233, 233, 233); box-sizing: border-box;");\n } else {\n let width_top = event_w[0] == "1" || event_size == "fluid" ? document.getElementById("ads.top").offsetWidth : parseInt(event_w[0], 10);\n if (document.getElementById("yboximg")) {\n width_top = document.getElementById("yboximg").offsetWidth;\n }\n document.getElementById("ads.top").setAttribute("style", "clear: both; min-height: auto !important; text-align:center; padding: 0 !important; width: " + parseInt(width_top + 10) + "px !important;" + "margin: 0px auto; border: 5px solid rgb(233, 233, 233); box-sizing: border-box;");\n }\n if (event.size == "970,130" || event.size == "970,90" || event.size == "980,100" || event.size == "1192,90" || event.size == "1192,130" || event.size == "1005,124") {\n AdUnitFunctionsClassObj.findAllDiv_func();\n modules_MainFunctionClass.getStyleTop_func(event);\n }\n }\n }\n }\n banner_loaded = true;\n }\n }\n // BOXES: MENTA, NADLAN, LAISHA, CONTENT - HP\n if (slot_id == "ads.box.menta.1" || box_banner && slot_id == [box_banner] || slot_id == "ads.rightbox_native.1") {\n if (!banner_loaded) {\n if (!event.isEmpty) {\n let splited_id = slot_id.split("ads.");\n if (document.querySelector(\'iframe[id*=\' + \'"\' + splited_id[1] + \'"\' + \']\')) {\n let banner_style = document.querySelector(\'iframe[id*=\' + \'"\' + splited_id[1] + \'"\' + \']\').style;\n if (event.slot.getSlotElementId().includes("ads.box.menta")) banner_style.minHeight = "218px";\n if (event.slot.getSlotElementId().includes("ads.box.nadlan")) banner_style.minHeight = "178px";\n if (event.slot.getSlotElementId().includes("ads.box.laisha")) banner_style.minHeight = "287px";\n if (event.slot.getSlotElementId().includes("ads.box.content")) banner_style.minHeight = "210px";\n if (event.slot.getSlotElementId().includes("ads.hotbox.native")) banner_style.maxHeight = "218px";\n if (event.slot.getSlotElementId().includes("ads.rightbox_native.1")) banner_style.minHeight = "232px";\n }\n }\n banner_loaded = true;\n }\n }
1\n if (slot_id == "ads.gray.big.strip.1") {\n //let width_strip = document.getElementById("ads.gray.big.strip.1").clientWidth; \n let strip_size = event.size + "";\n let strip_w = strip_size.split(",");\n // if (strip_w[0] == "970") {\n // width_strip = 970;\n // }\n let style_strip = document.createElement("style");\n // id strip_w[1] don\'t match, then take clientHeight of container\n style_strip.innerHTML = "div[id=\'ads.gray.big.strip.1\'], div[id=\'ads.gray.big.strip.1\'] iframe {\\n width:".concat(strip_w[0], "px !important;\\n height: ").concat(strip_w[1], "px !important; \\n }");\n let strip = document.getElementById("ads.gray.big.strip.1");\n strip.parentNode.insertBefore(style_strip, strip.nextSibling);\n }\n });\n });\n }\n }\n RenderSmallInbord() {\n this.counter_livebox++;\n AdUnitFunctionsClass_Log(\'RENDERED SMALL INBOARD \' + this.counter_livebox);\n if (this.counter_livebox > 2) {\n return false;\n }\n let livebox_sizes = this.getDevice_func() == "Android" ? [[350, 197], [320, 450], \'fluid\', [310, 175]] : [[360, 180], \'fluid\', [320, 180], [350, 197], [320, 450]];\n if (window.dcPath.includes("PnaiPlus")) {\n livebox_sizes = [\'fluid\', [320, 180], [350, 197], [320, 450]];\n if (this.getDevice_func() == "Android") {\n livebox_sizes = [[350, 197], [320, 450], [320, 180], \'fluid\'];\n }\n }\n this.defineSlots_func("ads.inboard", livebox_sizes);\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n AdUnitFunctionsClass_googletag.display("ads.inboard");\n });\n modules_InfrastructureClass.SlotRenderEnd(function (event) {\n if (event.slot == modules_AdUnitPropertiesClass.Define_slots["ads.inboard"]) {\n let liveboxLoaded = false;\n if (!liveboxLoaded) {\n if (!event.isEmpty) {\n let livebox_slot = document.getElementById("ads.inboard");\n if (window.dcCG == "article" && window.dcPath.includes("PnaiPlus")) {\n livebox_slot.setAttribute("style", "position: relative; display:flex; justify-content:center; -webkit-box-pack:center; display:-ms-flexbox; -ms-flex-pack:center; text-align:center; margin:0 -3.90625vw; width: calc(100% + 7.8125vw) !important;");\n } else {\n livebox_slot.setAttribute("style", "position: relative; display:flex; justify-content:center; -webkit-box-pack:center; display:-ms-flexbox; -ms-flex-pack:center; text-align:center; margin:0 auto; width: 100%;");\n }\n if (livebox_slot.children[0]) {\n livebox_slot.children[0].style.display = \'flex\';\n }\n if (event.lineItemId != null) {\n window.CloseLivebox = function () {\n document.getElementById("ads.inboard").innerHTML = "";\n try {\n document.getElementById("LiveBox_Close_button").style.display = \'none\';\n } catch (e) {}\n };\n setTimeout(function () {\n let img_livebox = document.createElement("img");\n img_livebox.id = "LiveBox_Close_button";\n img_livebox.src = "https://totalmedia2.ynet.co.il/new_gpt/ynet_mutam/close.png";\n img_livebox.setAttribute("onClick", "window.CloseLivebox();");\n img_livebox.setAttribute("style", "cursor: pointer; position: absolute; top: 14px; left: 14px; z-index: 999;");\n livebox_slot.appendChild(img_livebox);\n }, 1000);\n window.addEventListener(\'message\', function (event) {\n if (event.data.eventName === \'inboardclsoed\') {\n try {\n document.getElementById("LiveBox_Close_button").style.display = \'none\';\n } catch (e) {}\n }\n }, false);\n }\n }\n liveboxLoaded = true;\n }\n }\n });\n }\n RenderBiglivebox() {\n this.counter_biglivebox++;\n AdUnitFunctionsClass_Log(\'RENDERED BIGLIVEBOX\' + this.counter_biglivebox);\n if (this.counter_biglivebox > 2) {\n return false;\n }\n this.defineSlots_func("ads.biglivebox", [[320, 450], \'fluid\']);\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n AdUnitFunctionsClass_googletag.display("ads.biglivebox");\n });
1\n modules_InfrastructureClass.SlotRenderEnd(function (event) {\n let BigliveboxLoaded = false;\n if (event.slot == modules_AdUnitPropertiesClass.Define_slots["ads.biglivebox"]) {\n if (!BigliveboxLoaded) {\n if (!event.isEmpty) {\n let div_biglivebox = document.getElementById("ads.biglivebox");\n div_biglivebox.setAttribute("style", "margin:0 auto; position: relative;display:flex;justify-content:center; -webkit-box-pack:center;display:-ms-flexbox;-ms-flex-pack:center;text-align:center;width:100%;");\n if (event.lineItemId != null) {\n window.CloseBox = function () {\n try {\n document.getElementById("ads.biglivebox").style.display = \'none\';\n } catch (e) {}\n try {\n document.getElementById("Close_btn_biglivebox").style.display = \'none\';\n } catch (e) {}\n AdUnitFunctionsClassObj.RenderSmallInbord();\n };\n setTimeout(function () {\n let img_biglivebox = document.createElement("img");\n img_biglivebox.id = "Close_btn_biglivebox";\n img_biglivebox.src = "https://totalmedia2.ynet.co.il/new_gpt/ynet_mutam/close.png";\n img_biglivebox.setAttribute("onClick", "window.CloseBox();");\n img_biglivebox.setAttribute("style", "cursor: pointer; position: absolute; top: 14px; left: 14px; z-index: 999;");\n div_biglivebox.appendChild(img_biglivebox);\n }, 1000);\n window.addEventListener(\'message\', function (event) {\n if (event.data.eventName === \'inboardclsoed\') {\n try {\n document.getElementById("Close_btn_biglivebox").style.display = \'none\';\n } catch (e) {}\n AdUnitFunctionsClassObj.RenderSmallInbord();\n }\n }, false);\n }\n window.addEventListener(\'message\', function (event) {\n if (event.data.eventName === \'inboardclsoed\') {\n AdUnitFunctionsClassObj.RenderSmallInbord();\n }\n }, false);\n } else {\n AdUnitFunctionsClassObj.RenderSmallInbord();\n }\n BigliveboxLoaded = true;\n }\n }\n });\n }\n renderAd(id, sizes) {\n // For dynamic banners\n let jsonObj_dict = this.jsonObj;\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n for (let key of Object.keys(jsonObj_dict)) {\n AdUnitFunctionsClass_googletag.pubads().setTargeting(key, jsonObj_dict[key]);\n }\n });\n const element_id = document.getElementById(id);\n if (element_id && window.dcSite.includes("ynt") && this.innerWidth <= "767") this.defineSlots_func(id, sizes);\n }\n defineSlots800_func(id, size) {\n AdUnitFunctionsClass_Log("defineSlots800_func");\n let that = this;\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n modules_AdUnitPropertiesClass.Define_slots[id] = AdUnitFunctionsClass_googletag.defineSlot(that.adUnitCall_func(id), size, id).addService(AdUnitFunctionsClass_googletag.pubads()).setCollapseEmptyDiv(true);\n //googletag.pubads().enableSingleRequest();\n AdUnitFunctionsClass_googletag.pubads().addEventListener("slotRenderEnded", event => {\n modules_InfrastructureClass.onRender(event, id);\n });\n //googletag.enableServices();\n });\n }\n defineSlots_func(id, size_arry) {\n let target_1 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";\n let target_2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";\n //defineSlots_func functon call from defineUnits_func and create slots all data for each slot save at Define_slots Object\n let ad_unit_path = this.adUnitCall_func(id);\n AdUnitFunctionsClass_googletag.cmd.push(function () {\n let define_slot = AdUnitFunctionsClass_googletag.defineSlot(ad_unit_path, size_arry, id).addService(AdUnitFunctionsClass_googletag.pubads()).setCollapseEmptyDiv(true);\n if (arguments.length > 2 && target_1 != "" && target_2 != "") {\n define_slot = AdUnitFunctionsClass_googletag.defineSlot(ad_unit_path, size_arry, id).addService(AdUnitFunctionsClass_googletag.pubads().setTargeting(target_1, target_2)).setCollapseEmptyDiv(true);\n }\n if ((window.dcCG == "home" || window.dcPath == "2775.Knesset-1.Home" || window.dcPath == "2775.Knesset-1.Home") && window.browsi_on_gpt === "True" && id == "ads.box.3") {\n modules_AdUnitPropertiesClass.Define_slot_browsi[id] = define_slot;\n } else if (window.dcCG == "article" && window.all_banners_ids.includes("ads.inread.1")) {\n let slots_1 = [];\n let slots_2 = [];\n let slots_3 = [];\n const ads_1 = ["ads.interstitial", "ads.top", "ads.skyscraper", "ads.skyscraper.left", "ads.sargel", "ads.box.1"];\n const ads_2 = ["ads.inread.1", "ads.box.2", "ads.box.3"];\n const ads_3 = ["ads.inread.2", "ads.inread.3"];\n if (ads_1.includes(id)) slots_1.push(id);\n if (ads_2.includes(id)) slots_2.push(id);\n if (ads_3.includes(id)) slots_3.push(id);\n if (slots_1.includes(id)) {\n modules_AdUnitPropertiesClass.Define_slots_article_1[id] = define_slot;\n } else if (slots_2.includes(id)) {\n modules_AdUnitPropertiesClass.Define_slots_article_2[id] = define_slot;\n } else if (slots_3.includes(id)) {\n modules_AdUnitPropertiesClass.Define_slots_article_3[id] = define_slot;\n } else {\n modules_AdUnitPropertiesClass.Define_slots[id] = define_slot;\n }\n } else if (window.gpt_group_name != undefined && (window.dcCG == "home" || window.dcPath == "2775.Knesset-64852.sidehompage" || window.dcPath == "2775.Knesset-1.Home" || window.dcPath == "2775.Knesset-33113.adipeeri" || window.dcPath == "1.CentralDesk-1.Home")) {\n //let define_slot = googletag.defineSlot(ad_unit_path, size_arry, id).addService(googletag.pubads()).setCollapseEmptyDiv(true);\n switch (window.gpt_group_name) {\n case window.test_group_str.exp4_sra_batch:\n // function define_native(exp, id) {\n // window["YITSiteWidgetsCallbacks"] = window["YITSiteWidgetsCallbacks"] || [];\n // window["YITSiteWidgetsCallbacks"].push(()=> {\n // const interval = setInterval(() =>
1 {\n // if (googletag.pubads != undefined) {\n // clearInterval(interval); // time is up\n // exp = define_slot; \n // googletag.display(id); \n // }\n // }, 100); \n // });\n // }\n let slots_1 = ["ads.top", "ads.skyscraper", "ads.skyscraper.left", "ads.sargel", "ads.top.promo", "ads.box.1", "ads.skyscraper.inner.1", "ads.rightbox_native.1"];\n let slots_2 = ["ads.hotbox.native.1"];\n let slots_3 = ["ads.doublestripon.1", "ads.box.2", "ads.box.3"];\n let slots_4 = ["ads.hotbox.native.2"];\n let slots_5 = ["ads.kavoa.1", "ads.box.games.1", "ads.box.nadlan.1", "ads.box.nadlan.2", "ads.box.nadlan.3"];\n let slots_6 = ["ads.box.content.1", "ads.box.content.2", "ads.box.content.3", "ads.box.laisha.1", "ads.box.laisha.2"];\n let slots_7 = ["ads.box.content.4", "ads.box.content.5", "ads.box.content.6"];\n let slots_8 = ["ads.gray.box.1", "ads.gray.box.2"];\n if (slots_1.includes(id)) {\n modules_AdUnitPropertiesClass.Define_slots_1[id] = define_slot;\n } else if (slots_2.includes(id)) {\n //define_native(AdUnitPropertiesClassObj.Define_slots_2[id], id);\n modules_AdUnitPropertiesClass.Define_slots_2[id] = define_slot;\n } else if (slots_3.includes(id)) {\n modules_AdUnitPropertiesClass.Define_slots_3[id] = define_slot;\n } else if (slots_4.includes(id)) {\n modules_AdUnitPropertiesClass.Define_slots_4[id] = define_slot;\n //define_native(AdUnitPropertiesClassObj.Define_slots_4[id], id); \n } else if (slots_5.includes(id)) {\n modules_AdUnitPropertiesClass.Define_slots_5[id] = define_slot;\n } else if (slots_6.includes(id)) {\n modules_AdUnitPropertiesClass.Define_slots_6[id] = define_slot;\n //define_native(AdUnitPropertiesClassObj.Define_slots_6[id], id); \n } else if (slots_7.includes(id)) {\n modules_AdUnitPropertiesClass.Define_slots_7[id] = define_slot;\n //define_native(AdUnitPropertiesClassObj.Define_slots_7[id],id); \n } else if (slots_8.includes(id)) {\n modules_AdUnitPropertiesClass.Define_slots_8[id] = define_slot;\n } else {\n modules_AdUnitPropertiesClass.Define_slots[id] = define_slot;\n }\n break;\n default:\n modules_AdUnitPropertiesClass.Define_slots[id] = define_slot;\n break;\n }\n } else if (target_1 == "native_banner") {\n modules_AdUnitPropertiesClass.Define_slots_native[id] = define_slot;\n } else {\n modules_AdUnitPropertiesClass.Define_slots[id] = define_slot;\n }\n });\n } //end defineSlots_func\n getDevice_func() {\n let {\n navigator\n } = window;\n if (navigator.userAgent.match(/Android/i)) {\n return "Android";\n } else if (navigator.userAgent.match(/Android/i)) {\n return "Android";\n } else if (navigator.userAgent.match(/BlackBerry/i)) {\n return "BlackBerry";\n } else if (navigator.userAgent.match(/iPhone/i)) {\n return "iPhone";\n } else if (navigator.userAgent.match(/iPad/i)) {\n return "iPad";\n } else if (navigator.userAgent.match(/iPod/i)) {\n return "iPod";\n } else if (navigator.userAgent.match(/IEMobile/i)) {\n return "IEMobile";\n } else if (navigator.userAgent.match(/Macintosh/i)) {\n return "Macintosh";\n } else {\n return "PC";\n }\n }\n}\nconst _AdUnitFunctionsClass = new AdUnitFunctionsClass_AdUnitFunctionsClass();\n/* harmony default export */ var modules_AdUnitFunctionsClass = (_AdUnitFunctionsClass);\nwindow.AdUnit_properties = _AdUnitFunctionsClass;\nwindow.renderAd = _AdUnitFunctionsClass.renderAd.bind(_AdUnitFunctionsClass);\nwindow.closeTransitions = _AdUnitFunctionsClass.defineUnits_func.bind(_AdUnitFunctionsClass);\nwindow.AdUnitPropertiesClassObj = modules_AdUnitPropertiesClass;\n// CONCATENATED MODULE: ./src/gpt_script_ynet.js\n// This script run gpt on ynet pages\n// https://www.ynet.co.il/home/0,7340,L-8,00.html\n// To activated the new system use sql:\n// UPDATE General_Param_Values\n// SET Param_Value = 1,\n/
1/ WHERE Param_Name = \'is_new_gpt\' AND Content_Id = \'Ynet\' ;\n// The key in the code for only ynet is \'is_ynet\'\n// the use is if (InfrasructureClassObj.Site == \'is_ynet\' )\n// import \'babel-polyfill\';\n// import "@babel/polyfill";\nlet {\n dcLoadAds,\n googletag: gpt_script_ynet_googletag,\n gpt_group_name,\n console: gpt_script_ynet_console\n} = window;\n\nmodules_InfrastructureClass.Site = "is_ynet";\n\n\n\nwindow.RefreshAll = modules_MainFunctionClass.refreshAll_func.bind(modules_MainFunctionClass);\nwindow.RefreshAll = modules_MainFunctionClass.refreshAll_func;\nwindow.refresh_inreads = modules_MainFunctionClass.refreshInreads_func.bind(modules_MainFunctionClass);\nwindow.refresh_inreads = modules_MainFunctionClass.refreshInreads_func;\n\n//if dcLoadAds = 0 than the gpt is off\n\nif (window.dataLayer[0].articleClasses != "magazine" && dcLoadAds != 0) {\n // When chanching mode - change KV Dark_Mode and refresh specific ads\n if (window.matchMedia && window.matchMedia(\'only screen and (max-width:768px ) and (orientation: portrait), only screen and (max-width: 900px) and (orientation: landscape)\').matches) {\n window.matchMedia(\'(prefers-color-scheme: dark)\').addEventListener(\'change\', e => {\n const newColorScheme = e.matches ? "on" : "off";\n gpt_script_ynet_googletag.cmd.push(function () {\n gpt_script_ynet_googletag.pubads().setTargeting("Dark_Mode", newColorScheme);\n let slots = [window.AdUnitPropertiesClassObj.Define_slots["ads.strip.content.1"], window.AdUnitPropertiesClassObj.Define_slots["ads.strip.content.2"], window.AdUnitPropertiesClassObj.Define_slots["ads.strip.ordering.1"], window.AdUnitPropertiesClassObj.Define_slots["ads.strip.ordering.2"], window.AdUnitPropertiesClassObj.Define_slots["ads.strip.ordering.3"], window.AdUnitPropertiesClassObj.Define_slots["ads.inbox.1"], window.AdUnitPropertiesClassObj.Define_slots["ads.inbox.2"]];\n gpt_script_ynet_googletag.pubads().refresh(slots);\n gpt_script_ynet_googletag.enableServices();\n });\n });\n }\n modules_AdUnitFunctionsClass.Collect_all_banners_ids();\n modules_AdUnitFunctionsClass.getKeyValues_func();\n modules_AdUnitFunctionsClass.defineUnits_func();\n if (window.dcCG == "home" || window.dcPath == "2775.Knesset-33113.adipeeri" || window.dcPath == "2775.Knesset-1.Home") {\n window["YITSiteWidgetsCallbacks"] = window["YITSiteWidgetsCallbacks"] || [];\n window["YITSiteWidgetsCallbacks"].push(() => {\n // batch\n if (window.gpt_group_name && window.gpt_group_name == window.test_group_str.exp4_sra_batch) {\n const interval = setInterval(() => {\n if (gpt_script_ynet_googletag.pubads != undefined) {\n clearInterval(interval); // time is up \n if (gpt_script_ynet_googletag.pubads().isInitialLoadDisabled()) {\n gpt_script_ynet_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_2));\n gpt_script_ynet_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_4));\n gpt_script_ynet_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_6));\n gpt_script_ynet_googletag.pubads().refresh(Object.values(window.AdUnitPropertiesClassObj.Define_slots_7));\n //googletag.pubads().refresh([id]);\n }\n }\n }, 100);\n }\n });\n }\n\n // Vertical video ads\n setTimeout(function () {\n // Vertical video ads\n let vertical_video = document.querySelector(".ynet-video-vertical-1280");\n if (vertical_video && (window.show_adsense == undefined || window.show_adsense == false)) {\n let ads_ids = [];\n let defined_ads = [];\n window.ads_array = [];\n vertical_video.addEventListener(\'click\', e => {\n if (document.querySelector(\'.ads_vertical_video\')) {\n document.querySelectorAll(\'.ads_vertical_video\').forEach((y, index) => {\n let ad_id = y.id;\n let num_ad = ad_id.substr(ad_id.length - 1);\n if (defined_ads.indexOf(ad_id) < 0) {\n gpt_script_ynet_googletag.cmd.push(() =>
1 {\n window.ads_array[num_ad] = gpt_script_ynet_googletag.defineSlot(modules_AdUnitFunctionsClass.adUnitCall_func(ad_id), [[360, 666], ["fluid"]], ad_id).addService(gpt_script_ynet_googletag.pubads());\n gpt_script_ynet_googletag.enableServices();\n defined_ads.push(ad_id);\n });\n }\n });\n }\n document.querySelectorAll(\'.ynet-video-vertical-1280 .slick-slide\').forEach((i, index) => {\n var observer = new MutationObserver(function () {\n if (i.classList.contains("slick-active")) {\n if (i.querySelector(\'.ads_vertical_video\') !== null) {\n let banner_id = i.querySelector(\'.ads_vertical_video\').id;\n if (ads_ids.indexOf(banner_id) < 0) {\n gpt_script_ynet_googletag.cmd.push(() => {\n gpt_script_ynet_googletag.display(banner_id);\n });\n ads_ids.push(banner_id);\n } else {\n if (i.querySelector(\'.ads_vertical_video\').innerHTML == "") {\n let nm_ad = banner_id.substr(banner_id.length - 1);\n gpt_script_ynet_googletag.pubads().refresh([window.ads_array[nm_ad]]);\n }\n }\n }\n }\n });\n observer.observe(i, {\n attributes: true,\n childList: true\n });\n });\n });\n }\n }, 3000);\n if (window.innerWidth <= 767) {\n if (window.dcCG != \'article\' && window.dcPath.includes("-1.Home") && window.performance.navigation.type == window.performance.navigation.TYPE_BACK_FORWARD) {\n localStorage.setItem(\'BACK_HOME_CLICKED\', 1);\n } else {\n if (!window.dcPath.includes("-1.Home")) {\n localStorage.removeItem(\'BACK_HOME_CLICKED\');\n }\n }\n\n // adx interstitial magazines and pplus\n\n if (window.adx_interstitial_mobile == \'True\') {\n function getDevice() {\n let {\n navigator\n } = window;\n if (navigator.userAgent.match(/Android/i)) {\n return "Android";\n } else if (navigator.userAgent.match(/Android/i)) {\n return "Android";\n } else if (navigator.userAgent.match(/iPhone/i)) {\n return "iPhone";\n } else if (navigator.userAgent.match(/iPad/i)) {\n return "iPad";\n } else {\n return "PC";\n }\n }\n let adx_site = "ynet";\n if (window.dcPath.includes("laisha")) {\n adx_site = "laisha";\n } else if (window.dcPath.includes("architecture")) {\n adx_site = "architecture";\n } else if (window.dcPath.includes("menta")) {\n adx_site = "menta";\n } else if (window.dcPath.includes("fashion")) {\n adx_site = "fashion";\n }\n let device = getDevice() == "Android" ? "mobileweb_android" : "mobileweb_iphone";\n let adx_path = window.dcPath.includes("PnaiPlus") ? "/6870/pplus/".concat(device, "/interstitial.adx") : "/6870/ynet/".concat(device, "/interstitial.adx/").concat(adx_site);\n try {\n window.googletag = window.googletag || {\n cmd: []\n };\n window.maavaronAdx = JSON.parse(localStorage.getItem("maavaronAdx")) !== null ? JSON.parse(localStorage.getItem("maavaronAdx")) : {\n datetime: Date.now(),\n displayedlast: \'\'\n };\n gpt_script_ynet_googletag.cmd.push(function () {\n var interstitialSlot = gpt_script_ynet_googletag.defineOutOfPageSlot(adx_path, gpt_script_ynet_googletag.enums.OutOfPageFormat.INTERSTITIAL);\n if (interstitialSlot) {\n interstitialSlot.addService(gpt_script_ynet_googletag.pubads());\n gpt_script_ynet_googletag.pubads().addEventListener(\'slotOnload\', function (event) {\n if (interstitialSlot === event.slot) {\n //console.log(\'Interstitial is loaded.\');\n maavaronAdx.add = "loaded";\n maavaronAdx.datetime = Date.now();\n maavaronAdx.displayedlast = adx_path;\n localStorage.setItem(\'maavaronAdx\', JSON.stringify(maavaronAdx));\n }\n });\n gpt_script_ynet_googletag.pubads().addEventListener(\'slotVisibilityChanged\', function (event) {\n let slot = event.slot;\n //console.log(\'Visibility of slot\', slot.getSlotElementId(), \'changed.\');\n if (slot === interstitialSlot) {\n if (event.inViewPercentage == 100) {\n sessionStorage.setItem(\'ynet_mobileweb_interstitial_adx_displayed\', 1);\n window.adx_displayed = true;\n //console.log(\'Visible area:\', event.inViewPercentage + \'%\'); \n }\n document.getElementsByTagName("body")[0].style.overflow = "hidden";\n }\n });\n }\n //googletag.enableServices();\n gpt_script_ynet_googletag.display(interstitialSlot);\n });\n } catch (e) {\n gpt_script_ynet_console.log(e);\n } finally {}\n }\n let maavaronMobile = "ads.interstitial.inner";\n if ((window.dcPath.includes("Weather") || window.dcPath.includes("weather")) && window.newMedia == \'False\') {\n maavaronMobile = modules_AdUnitFunctionsClass.getDevice_func() == "Android" ? "ads.ynet_mobileweb_transitions_general_android_main_ip" : "ads.ynet_mobileweb_transitions_general_iphone_main_ip";\n }\n window.closeTransitions = function () {\n document.getElementById(maavaronMobile).style.display = "none";\n };\n if (window.ynet_responsive_sites) {\n if (window.ynet_responsive_special) {\n modules_MainFunctionClass.RenameSticky();\n } else {\n if (document.getElementById("ads.sticky")) {\n const element = document.getElementById("ads.sticky");\n const ca = element.children;\n for (let i = 0; i < ca.length;
1 i++) {\n ca[i].parentNode.removeChild(ca[i]);\n }\n element.id = "ads.banner";\n if (window.dcPath.includes("PnaiPlus")) {\n element.setAttribute("style", "position:fixed;bottom:0px;left:0px;display:flex;justify-content:center;display:-webkit-box;-webkit-box-pack:center;display:-ms-flexbox;-ms-flex-pack:center;text-align:center;width:100%;z-index:9998;margin:0 auto;background-color:#fff");\n } else {\n element.setAttribute("style", "position:fixed;bottom:0px;left:0px;display:flex;justify-content:center;display:-webkit-box;-webkit-box-pack:center;display:-ms-flexbox;-ms-flex-pack:center;text-align:center;width:100%;z-index:9999;margin:0 auto;background-color:#fff");\n }\n if (element.classList.contains("remove_sticky")) {\n element.classList.remove(\'remove_sticky\');\n }\n }\n if (document.getElementById("ads.banner")) {\n let banner_sticky = document.getElementById("ads.banner");\n if (window.dcPath.includes("PnaiPlus")) {\n banner_sticky.setAttribute("style", "position:fixed;bottom:0px;left:0px;display:flex;justify-content:center;display:-webkit-box;-webkit-box-pack:center;display:-ms-flexbox;-ms-flex-pack:center;text-align:center;width:100%;z-index:9998;margin:0 auto;background-color:#fff");\n } else {\n banner_sticky.setAttribute("style", "position:fixed;bottom:0px;left:0px;display:flex;justify-content:center;display:-webkit-box;-webkit-box-pack:center;display:-ms-flexbox;-ms-flex-pack:center;text-align:center;width:100%;z-index:9999;margin:0 auto;background-color:#fff");\n }\n if (banner_sticky.classList.contains("remove_sticky")) {\n banner_sticky.classList.remove(\'remove_sticky\');\n }\n }\n }\n }\n }\n if (window.innerWidth >= 767 && (window.dcCG == \'home\' || window.dcPath == "1.CentralDesk-1.Home" || window.dcPath == "2775.Knesset-44132.knesset.david")) modules_AdUnitFunctionsClass.Change_promo_place();\n if (window.newMedia == \'True\' && window.innerWidth >= 767) modules_AdUnitFunctionsClass.AddDivs();\n if (window.innerWidth >= 767) {\n setTimeout(modules_MainFunctionClass.refreshAll_func, modules_AdUnitPropertiesClass.refreshAdTime_func());\n if (modules_AdUnitFunctionsClass.getDcPath_func(window.dcPath) == ".News" && window.dcCG == "article") {\n setTimeout(modules_MainFunctionClass.refreshOzen_func, modules_AdUnitPropertiesClass.refreshAdOzen);\n }\n if (window.dcCG == "article" && window.all_banners_ids.includes("ads.inread.1")) {\n document.addEventListener("DOMContentLoaded", function () {\n if (window.articleBodyAdsRefreshRate > 0) setTimeout(modules_MainFunctionClass.refreshInreads_func, window.articleBodyAdsRefreshRate * 1000);\n });\n }\n }\n} else {\n gpt_script_ynet_console.log("GPT is off for ynet");\n //return console.log("GPT is off for ynet");\n}\nwindow.AdUnitFunctionsClassObj = modules_AdUnitFunctionsClass;\n//window.AdUnitPropertiesClassObj = AdUnitPropertiesClassObj;\nwindow.AdUnitPropertiesClassObj = modules_AdUnitPropertiesClass;\n//});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL21vZHVsZXMvSW5mcmFzdHJ1Y3R1cmVDbGFzcy5qcz82YjNkIiwid2VicGFjazovLy8uL21vZHVsZXMvQWR1bml0RGNQYXRoQ2xhc3MuanM/ZGI4MyIsIndlYnBhY2s6Ly8vLi9tb2R1bGVzL0FkVW5pdFByb3BlcnRpZXNDbGFzcy5qcz8wMGM1Iiwid2VicGFjazovLy8uL21vZHVsZXMvQWRVbml0QWRkaXRpb25hbFN0eWxlc0NsYXNzLmpzPzkyMTgiLCJ3ZWJwYWNrOi8vLy4vbW9kdWxlcy9BZFVuaXRTdHlsZXNDbGFzcy5qcz82YzE0Iiwid2VicGFjazovLy8uL21vZHVsZXMvQ29vY2tpZXNGdW5jdGlvbkNsYXNzLmpzP2IwZTMiLCJ3ZWJwYWNrOi8vLy4vbW9kdWxlcy9NYWluRnVuY3Rpb25DbGFzcy5qcz9iMTVjIiwid2VicGFjazovLy8uL21vZHVsZXMvQWRVbml0RnVuY3Rpb25zQ2xhc3MuanM/NzE2MSIsIndlYnBhY2s6Ly8vLi9zcmMvZ3B0X3NjcmlwdF95bmV0LmpzP2E0N2QiXSwic291cmNlc0NvbnRlbnQiOlsibGV0IHsgZ29vZ2xldGFnLCBjb25zb2xlIH0gPSB3aW5kb3c7XHJcbmNsYXNzIEluZnJhc3RydWN0dXJlQ2xhc3Mge1xyXG4gIC8vSW5mcmFzdHJ1Y3R1cmVDbGFzcyBjb250YWluIGdsb2JhbCBmdW5jdGlvbiAsIHRoaXMuU2l0ZSAtIGNyZWF0ZSBrZXkgdG8gZWFjaCBwYWdlXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLlNpdGU7XHJcbiAgICB0aGlzLmFkc0VsZW1lbnRzID0gW107XHJcbiAgfVxyXG4gIExvZyhzdHIpIHtcclxuICAgIGlmIChsb2NhdGlvbi5ob3N0LmluY2x1ZGVzKFwibG9jYWxcIikgfHwgbG9jYXRpb24uaG9zdC5pbmNsdWRlcyhcInFhXCIpKSB7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFNsb3RSZW5kZXJFbmQoY2FsbGJhY2spIHtcclxuICAgIC8vaGFuZGxlIGFsbCBldmVudHMgYWZ0ZXIgc2xvdCByZW5kZXJlZFxyXG4gICAgZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICBnb29nbGV0YWcucHViYWRzKCkuYWRkRXZlbnRMaXN0ZW5lcihcInNsb3RSZW5kZXJFbmRlZFwiLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIGNhbGxiYWNrICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgI
1H0gXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGZpbmREaXZBZHNfZnVuYygpIHtcclxuICAgIGxldCBkaXZSZXN1bHQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgXCJET01Db250ZW50TG9hZGVkXCIsXHJcbiAgICAgICAgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJkaXZbaWRePWFkc11cIik7XHJcbiAgICAgICAgICBpZiAoZWxlbXMpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShlbGVtcyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZWplY3QoXCJlbGVtZW50IG5vdCBmb3VuZFwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGZhbHNlXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkaXZSZXN1bHRcclxuICAgICAgLnRoZW4oXHJcbiAgICAgICAgZnVuY3Rpb24oZWxlbXMpIHtcclxuICAgICAgICAgIHRoaXMuYWRzRWxlbWVudHMgPSBlbGVtcztcclxuICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgKVxyXG4gICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgb25SZW5kZXIoZXZlbnQsIGlkKSB7XHJcbiAgICAvL29uUmVuZGVyIGZ1bmN0aW9uIHJlbW92ZSB0aGUgaGlnaHQgb2YgdGhlIHNsb3QsIGl0IGNhbGwgYSBmZXcgdGltZXMgZnJvbSBhbGwgZnVuY3Rpb24gb2YgZGVmaW5lU2xvdHMgaXQncyBnZXQgdGhlIGV2ZW50IHNsb3RSZW5kZXJFbmRlZFxyXG4gICAgaWYgKFxyXG4gICAgICBkb2
1N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSAhPSBudWxsICYmXHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSAhPSBcIm51bGxcIlxyXG4gICAgKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5oZWlnaHQgPSBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxufSAvL2VuZCBjbGFzcyBJbmZyYXN0cnVjdHVyZUNsYXNzXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBJbmZyYXN0cnVjdHVyZUNsYXNzKCk7XHJcbiIsImNsYXNzIEFkdW5pdERjUGF0aENsYXNzIHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIC8vbm90aGluZyBoZXJlIHRvIGluaXQgQ2xhc3MganVzdCBvbmVzIHBlciBQYWdlLlxyXG59XHJcblxyXG5nZXQoZGNQYXRoKSB7XHJcbiAgICB0aGlzLmRjUGF0aCA9IGRjUGF0aDtcclxuICAgIHRoaXMuZGNQYXRoICAgIFxyXG4gICAgaWYoICgoZGNQYXRoIHx8ICcnKS5tYXRjaCgvLVtcXGRdKy9nKSB8fCBbXSkubGVuZ3RoID49IDEpIHtcclxuICAgICAgdmFyIHRlc3QgPSBkY1BhdGguc3BsaXQoJy0nKTtcclxuICAgICAgaWYgKCh3aW5kb3cuZGNTaXRlID09IFwieW5ldFwiIHx8IHdpbmRvdy5kY1NpdGUgPT0gXCJ5bnRcIikgJiYgKChkY1BhdGggfHwgJycpLm1hdGNoKC8tW1xcZF0rL2cpIHx8IFtdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgIHRoaXMuZGNQYXRoID0gdGhpcy5kY1BhdGgucmVwbGFjZShcclxuICAgICAgICAgIHRlc3RbMV0ucmVwbGFjZSgvW1xcZF0rL2csICcnKS5zdWJzdHJpbmcoMSksXHJcbiAgICAgICAgICB0ZXN0WzFdLnJlcGxhY2UoL1tcXGRdKy9nLCAnJykuc3Vic3RyaW5nKDEpLnJlcGxhY2UoL1xcLi9nLCcjZG90IycpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIHRoaXMuZGNQYXRoID0gdGhpcy5kY1BhdGgucmVwbGFjZShcclxuICAgICAgICAgIHRlc3RbMl0ucmVwbGFjZSgvW1xcZF0rL2csICcnKS5zdWJzdHJpbmcoMSksXHJcbiAgICAgICAgICB0ZXN0WzJdLnJlcGxhY2UoL1tcXGRdKy9nLCAnJykuc3Vic3RyaW5nKDEpLnJlcGxhY2UoL1xcLi9nLCcjZG90IycpXHJcbiAgICAgICAgKSAgICAgICAgXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kY1BhdGggPSB0aGlzLmRjUGF0aC5yZXBsYWNlKFxyXG4gICAgICAgICAgdGhpcy5kY1BhdGguc3BsaXQoJy0nKS5wb3AoKS5yZXBsYWNlKC9bXFxkXSsvZywgJycpLnN1YnN0cmluZygxKSxcclxuICAgICAgICAgIHRlc3QucG9wKCkucmVwbGFjZSgvW1xcZF0rL2csICcnKS5zdWJzdHJpbmcoMSkucmVwbGFjZSgvXFwuL2csJyNkb3QjJylcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc3BsaXR0ZWQgPSB0aGlzLmRjUGF0aC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1tcXGRdKy8sICcnKS5yZXBsYWNlKC8tW1xcZF0rL2csICcnKS5zcGxpdChcIi5cIik7XHJcbiAgICB0aGlzLnNwbGl0dGVkID0gdGhpcy5zcGxpdHRlZC5maWx0ZXIoQm9vbGVhbik7IFxyXG4gICAgdGhpcy5sZXZlbHMgPSB0aGlzLnNwbGl0dGVkLmxlbmd0aDsgXHJcbiAgICB0aGlzLmJ1aWxkSGllcmFyY2h5KCk7XHJcbiAgICAvL3RoaXMuZW5nbGlzaEhpZXJhcmNoeSgpO1xyXG4gICAgLy90aGlzLnZlc3R5SGllcmFyY2h5KCk7XHJcbiAgICB0aGlzLmNvbWJpbmVMZXZlbHMoKTtcclxuICAgIHRoaXMuaG90Rml4ZXMoKTtcclxuICAgIHJldHVybiB0aGlzLmFkdW5pdDtcclxufVxyXG5cclxuaG90Rml4ZXMoKSB7XHJcbiAgdGhpcy5hZHVuaXQgPSB0aGlzLmFkdW5pdC5yZXBsYWNlKC8jZG90Iy9nLCAnLicpO1xyXG4gIHRoaXMuYWR1bml0ID0gdGhpcy5hZHVuaXQucmVwbGFjZSgnLi4nLCAnLicpO1xyXG4gIGlmKHRoaXMuYWR1bml0LmVuZHNXaXRoKCcuJykpIHtcclxuICAgIHRoaXMuYWR1bml0ID0gdGhpcy5hZHVuaXQuc2xpY2UoMCwgLTEpO1xyXG4gIH1cclxuICBpZih0aGlzLmFkdW5pdC5zdGFydHNXaXRoKCcvJykpIHtcclxuICAgIHRoaXMuYWR1bml0ID0gdGhpcy5hZHVuaXQuc3Vic3RyaW5nKDEpO1xyXG4gIH0gIFxyXG59XHJcblxyXG5jb21iaW5lTGV2ZWxzKCkge1xyXG4gICAgbGV0IGFkdW5pdCA9IHRoaXMuYWR1bml0LnNwbGl0KCcvJyk7XHJcbiAgICBpZiAoYWR1bml0Lmxlbmd0aCA+IDMpIHtcclxuICAgICAgICBsZXQgbGFzdExldmVsID0gYWR1bml0LnBvcCgpO1xyXG4gICAgICAgIGFkdW5pdCA9IGFkdW5pdC5qb2luKCcvJyk7XHJcbiAgICAgICAgdGhpcy5hZHVuaXQgPSBgJHthZHVuaXR9LSR7bGFzdExldmVsfWA7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIHZlc3R5SGllcmFyY2h5KCkge1xyXG4vLyAgICAgaWYgKHRoaXMuYWR1bml0LnN0YXJ0c1dpdGgoJy92ZXN0aScpKSB7XHJcbi8vICAgICAgICAgdGhpcy5hZHVuaXQgPSB0aGlzLmFkdW5pdC5zdWJzdHJpbmcoMSk7XHJcbi8vICAgICAgICAgbGV0IGFkdW5pdCA9IHRoaXMuYWR1bml0LnNwbGl0KCcvJyk7XHJcbi8vICAgICAgICAgYWR1bml0LnNoaWZ0KCk7XHJcbi8vICAgICAgICAgYWR1bml0LmZvckVhY2goKGxldmVsLCBkZXB0aCkgPT4ge1xyXG4vLyAgICAgICAgICAgICBsZXZlbC5zdGFydHNXaXRoKCd2JykgPyBhZHVuaXRbZGVwdGhdID0gbGV2ZWwuc3Vic3RyaW5nKDEpIDogYWR1bml0W2RlcHRoXSA9IGxldmVsO1xyXG4vLyAgICAgICAgIH0sIHRoaXMpO1xyXG4vLyAgICAgICAgIGlmIChhZHVuaXRbYWR1bml0Lmxlbmd0aCAtIDFdID09ICdob21lJykge2FkdW5pdFthZHVuaXQubGVuZ3RoIC0gMV0gPSAnY2VudHJhbCc7fVxyXG5cclxuLy8gICAgICAgICB0aGlzLmFkdW5pdCA9IGFkdW5pdC5qb2luKCcvJyk7XHJcbi8vICAgICAgICAgaWYodGhpcy5hZHVuaXQuZW5kc1dpdGgoJy8nKSkge1xyXG4vLyAgICAgICAgICAgdGhpcy5hZHVuaXQgPSB0aGlzLmFkdW5pdC5zbGljZSgwLCAtMSk7XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgfVxyXG4vLyAgICAgcmV0dXJuIHRoaXM7XHJcbi8vIH1cclxuXHJcbi8vIGVuZ2xpc2hIaWVyYXJjaHkoKSB7XHJcbi8vICAgICBpZiAod2luZG93LmxvY2F0aW9uLm9yaWdpbi5pbmNsdWRlcygneW5ldG5ld3MuY29tJykpIHtcclxuLy8gICAgICAgICBsZXQgYWR1bml0ID0gdGh
1pcy5hZHVuaXQuc3BsaXQoJy8nKTtcclxuLy8gICAgICAgICBhZHVuaXQuZm9yRWFjaCgobGV2ZWwsIGRlcHRoKSA9PiB7XHJcbi8vICAgICAgICAgICAgIGxldmVsLnN0YXJ0c1dpdGgoJ2UnKSAmJiBkZXB0aCA9PSAxID8gYWR1bml0W2RlcHRoXSA9IGxldmVsLnN1YnN0cmluZygxKSA6IGFkdW5pdFtkZXB0aF0gPSBsZXZlbDtcclxuLy8gICAgICAgICB9LCB0aGlzKTtcclxuLy8gICAgICAgICB0aGlzLmFkdW5pdCA9IGFkdW5pdC5qb2luKCcvJyk7XHJcbi8vICAgICAgICAgaWYodGhpcy5hZHVuaXQuZW5kc1dpdGgoJy8nKSkge1xyXG4vLyAgICAgICAgICAgdGhpcy5hZHVuaXQgPSB0aGlzLmFkdW5pdC5zbGljZSgwLCAtMSk7XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgfVxyXG4vLyAgICAgcmV0dXJuIHRoaXM7XHJcbi8vIH1cclxuXHJcbnNoaWZ0TGV2ZWwoaW5uZXJMZXZlbCwgc3Vic3RyaW5nKSB7XHJcbiAgICBsZXQgbGV2ZWwgPSBpbm5lckxldmVsLnNwbGl0KCctJyk7XHJcbiAgICBsZXZlbC5mb3JFYWNoKChsLCBpKSA9PiB7XHJcbiAgICAgICAgbC5zdGFydHNXaXRoKHN1YnN0cmluZykgPyBsZXZlbFtpXSA9IGwuc3Vic3RyaW5nKDEpIDogbGV2ZWxbaV0gPSBsO1xyXG4gICAgfSlcclxuICAgIHJldHVybiBsZXZlbC5qb2luKCctJyk7XHJcbn1cclxuXHJcbmJ1aWxkSGllcmFyY2h5KCkge1xyXG4gICAgdGhpcy5hZHVuaXQgPSAnJztcclxuICAgIHRoaXMuc3BsaXR0ZWQuZm9yRWFjaCgobGV2ZWwsIGRlcHRoKSA9PiB7XHJcbiAgICAgIGlmKC9cXC0kLy50ZXN0KGxldmVsKSl7XHJcbiAgICAgICAgdGhpcy5hZHVuaXQgKz0gbGV2ZWwucmVwbGFjZSgvLS9nLCAnLycpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYodGhpcy5hZHVuaXQuZW5kc1dpdGgoXCIvXCIpKXtcclxuICAgICAgICAgICB0aGlzLmFkdW5pdCA9IHRoaXMuYWR1bml0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWR1bml0ICs9IGAvJHtsZXZlbH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgdGhpcylcclxufVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBBZHVuaXREY1BhdGhDbGFzcygpO1xyXG4iLCJjbGFzcyBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3Mge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5WZXIgPSAnMjItMDctMjYnO1xyXG4gICAgIHRoaXMuRGVmaW5lX3Nsb3RfYnJvd3NpID0gW107XHJcbiAgICB0aGlzLkRlZmluZV9zbG90c18xID0gW107XHJcbiAgICB0aGlzLkRlZmluZV9zbG90c18yID0gW107XHJcbiAgICB0aGlzLkRlZmluZV9zbG90c18zID0gW107XHJcbiAgICB0aGlzLkRlZmluZV9zbG90c180ID0gW107XHJcbiAgICB0aGlzLkRlZmluZV9zbG90c181ID0gW107XHJcbiAgICB0aGlzLkRlZmluZV9zbG90c182ID0gW107XHJcbiAgICB0aGlzLkRlZmluZV9zbG90c183ID0gW107XHJcbiAgICB0aGlzLkRlZmluZV9zbG90c184ID0gW107XHJcbiAgICB0aGlzLkRlZmluZV9zbG90c19hcnRpY2xlXzEgPSBbXTtcclxuICAgIHRoaXMuRGVmaW5lX3Nsb3RzX2FydGljbGVfMiA9IFtdO1xyXG4gICAgdGhpcy5EZWZpbmVfc2xvdHNfYXJ0aWNsZV8zID0gW107XHJcbiAgICB0aGlzLkRlZmluZV9zbG90cyA9IFtdO1xyXG4gICAgdGhpcy5EZWZpbmVfc2xvdHNfbmF0aXZlID0gW107XHJcbiAgICAvL3RoaXMuRGVmaW5lX25vbkhlYWRlckJpZGRpbmdTbG90cyA9IFtdO1xyXG4gICAgdGhpcy5EZWZpbmVfb3plbiA9IFtdO1xyXG4gICAgdGhpcy5TbG90cyA9IFtdO1xyXG4gICAgdGhpcy5UcmFucyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Eb3VibGVfSnVtYm8gPSBmYWxzZTtcclxuICAgIHRoaXMucmVmcmVzaEFkT3plbiA9IDcgKiA2MCAqIDEwMDA7XHJcbiAgICB0aGlzLnNldF9UYXJnZXRzID0gW107XHJcbiAgICB0aGlzLkdldF9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgdGhpcy5yZWZyZXNoQWRUaW1lX2Z1bmMoKTtcclxuICB9XHJcblxyXG4gIHNldCBEQ3ZpZXcobmV3REN2aWV3KSB7XHJcbiAgICBpZiAobmV3REN2aWV3KSB7XHJcbiAgICAgIHRoaXMuX0RDdmlldyA9IG5ld0RDdmlldztcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IERDdmlldygpIHtcclxuICAgIHJldHVybiB0aGlzLl9EQ3ZpZXc7XHJcbiAgfVxyXG4gIHNldCBFeHBvKG5ld0V4cG8pIHtcclxuICAgIGlmIChuZXdFeHBvKSB7XHJcbiAgICAgIHRoaXMuX0V4cG8gPSBuZXdFeHBvO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgRXhwbygpIHtcclxuICAgIHJldHVybiB0aGlzLl9FeHBvO1xyXG4gIH1cclxuICByZWZyZXNoQWRUaW1lX2Z1bmMoKSB7XHJcbiAgICBpZiAod2luZG93LmRjQ0cpIHtcclxuICAgICAgaWYgKHdpbmRvdy5kY0NHID09IFwiaG9tZVwiIHx8IHdpbmRvdy5kY1BhdGggPT0gXCIyNzc1LktuZXNzZXQtMzMxMTMuYWRpcGVlcmlcIiB8fCB3aW5kb3cuZGNQYXRoID09IFwiMjc3NS5LbmVzc2V0LTEuSG9tZVwiKSB7XHJcbiAgICAgICAgcmV0dXJuIDcgKiA2MCAqIDEwMDA7XHJcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LmRjQ0cgPT0gXCJtYWluXCIpIHtcclxuICAgICAgICByZXR1cm4gNyAqIDYwICogMTAwMDtcclxuICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZGNDRyA9PSBcImFydGljbGVcIikge1xyXG4gICAgICAgIHJldHVybiAxNCAqIDYwICogMTAwMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gNyAqIDYwICogMTAwMDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDcgKiA2MCAqIDEwMDA7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3MoKTtcclxuIiwiaW1wb3J0IEFkVW5pdFByb3BlcnRpZXNDbGFzc09iaiBmcm9tIFwiLi9BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NcIjtcclxuaW1wb3J0IEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqIGZyb20gXCIuL0FkVW5pdEZ1bmN0aW9uc0NsYXNzXCI7XHJcbmltcG9ydCBJbmZyYXNydWN0dXJlQ2xhc3NPYmogZnJvbSBcIi4vSW5mcmFzdHJ1Y3R1cmVDbGFzc1wiO1xyXG5jb25zdCB7IExvZyB9ID0gSW5mcmFzcnVjdHVyZUNsYXNzT2JqO1xyXG5jb25zdCB7IGNvbnNvbGUgfSA9IHdpbmRvdztcclxud2luZG93LkNsb3NlU2FyZ2VsID0gZnVuY3Rpb24oKSB7XHJcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuc2FyZ2VsXCIpLmlubmVySFRNTCA9IFwiXCI7XHJcbn07XHJcbmNsYXNzIEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzcyB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmlubmVyV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICB9XHJcbiAgcHJvbW9fY2xhc3NfZnVuYygpIHtcclxuICAgIHZhciBzdHlsZV9jc3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG4gICAgc3R5bGVfY3NzLmlkID0gXCJwcm9tb19zdHlsZVwiO1xyXG4gICAgc3R5bGVfY3NzLmlubmVySFRNTCA9IGBcclxuICAgIGRpdltpZD0nYWRzLnRvcC5wcm9tbyddIHsgXHJcbiAgICAgIHBhZGRpbmc6MTVweCAwcHggMHB4IDBweDtcclxuICAgICAgbWFyZ2luOjAgYXV0bztcclxuICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO1xyXG4gICAgICBkaXNwbGF5Oi13ZWJraXQtYm94O1xyXG4gICAgICAtd2Via2l0LWJveC1wYWNrOmNlbnRlcjtcclxuICAgICAgZGlzcGxheTotbXMtZmxleGJveDtcclxuICAgICAgLW1zLWZsZXgtcGFjazpjZW50ZXI7X
1HJcbiAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xyXG4gICAgfVxyXG4gICAgYDtcclxuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVfY3NzKTtcclxuXHJcbiAgICAvLyBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMudG9wLnByb21vXCIpKSB7XHJcbiAgICAvLyAgIHByb21vX2Rpdi5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcInBhZGRpbmc6MTVweCAwcHggMHB4IDBweDsgbWFyZ2luOjAgYXV0bzsgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBkaXNwbGF5Oi13ZWJraXQtYm94OyAtd2Via2l0LWJveC1wYWNrOmNlbnRlcjsgZGlzcGxheTotbXMtZmxleGJveDsgLW1zLWZsZXgtcGFjazpjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyO1wiKTsgICAgIFxyXG4gICAgLy8gICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMudG9wLnByb21vXCIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGl2XCIpWzBdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLnRvcC5wcm9tb1wiKS5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKVswXS5zdHlsZS50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xyXG4gICAgLy8gICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLnRvcC5wcm9tb1wiKS5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKVswXS5zdHlsZS5tYXJnaW4gPSBcIjAgYXV0b1wiO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9ICBcclxuICB9XHJcbiAgc3R5bGVOZXdzcGFwZXJfZnVuYygpIHtcclxuICAgIExvZyhcInN0eWxlTmV3c3BhcGVyX2Z1bmNcIik7XHJcbiAgICBsZXQgbmV3c3BhcGVyID0gKHdpbmRvdy5uZXdNZWRpYSA9PSAnVHJ1ZScgJiYgd2luZG93LmRjU2l0ZSA9PSBcInludFwiKSA/IFwiYWRzLnRvcC5wcm9tb1wiIDogXCJhZHMubmV3c3BhcGVyXCI7XHJcbiAgICBBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5maW5kQWxsRGl2X2Z1bmMoKTtcclxuICAgICAgaWYgKEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1tuZXdzcGFwZXJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICgoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5ncmlkMTI4MFwiKSAhPSBudWxsIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZ3JpZDEyODBcIikgIT0gdW5kZWZpbmVkKSB8fCAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5ncmlkMTI4MF8yXCIpICE9IG51bGwgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5ncmlkMTI4MF8yXCIpICE9IHVuZGVmaW5lZCkgKSB7XHJcbiAgICAgICAgICBkb2
1N1bWVudC5nZXRFbGVtZW50QnlJZChuZXdzcGFwZXIpLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwicGFkZGluZzoxNXB4IDBweCAwcHggMHB4OyBtYXJnaW46MCBhdXRvOyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGRpc3BsYXk6LXdlYmtpdC1ib3g7IC13ZWJraXQtYm94LXBhY2s6Y2VudGVyOyBkaXNwbGF5Oi1tcy1mbGV4Ym94OyAtbXMtZmxleC1wYWNrOmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7XCIpO1xyXG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgXHJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmV3c3BhcGVyKS5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKVswXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmV3c3BhcGVyKS5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKVswXS5zdHlsZS50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuZXdzcGFwZXIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGl2XCIpWzBdLnN0eWxlLm1hcmdpbiA9IFwiMCBhdXRvXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAgfSwgMTUwMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1tuZXdzcGFwZXJdLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwicGFkZGluZzoxNXB4IDBweCAwcHggMHB4OyBtYXJnaW46MCBhdXRvOyB0ZXh0LWFsaWduOmNlbnRlcjtcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouU2xvdHNbbmV3c3BhcGVyXS5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlmcmFtZVwiKVswXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1tuZXdzcGFwZXJdLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaWZyYW1lXCIpWzBdLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsICdwYWRkaW5nOjVweCA1cHggNXB4IDVweDsgYmFja2dyb3VuZC1pbWFnZTp1cmwoXCIvL3RvdGFsbWVkaWEyLnluZXQuY28uaWwvcGljLzk3MHgxMjVfbmV3c3BhcGVyLmdpZlwiKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBcclxuICB9XHJcbiAgXHJcbiAgb3plbl9mdW5jKCkge1xyXG4gICAgTG9nKFwib3plbl9mdW5jXCIpO1xyXG4gICAgQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouZmluZEFsbERpdl9mdW5jKCk7XHJcbiAgICBsZXQgY29udGFpbmVyX3dpZHRoID0gICh3aW5kb3cuR3JpZFdpZHRoID09IDEyNDApID8gMTI0MCA6IDk4MDsgICAgICAgIFxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgIHRoaXMuZGlzcGxheVNreXNjcmFwZXJSaWdodF9mdW5jKGNvbnRhaW5lcl93aWR0aCk7XHJcbiAgICB9KTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICB0aGlzLmRpc3BsYXlTa3lzY3JhcGVyTGVmdF9mdW5jKGNvbnRhaW5lcl93aWR0aCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLlNsb3RzW1wiYWRzLm96ZW4ucmlnaHRcIl0gIT0gdW5kZWZpbmVkKSB7ICBcclxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlPemVuUmlnaHRfZnVuYyhjb250YWluZXJfd2lkdGgpO1xyXG4gICAgICB9KTtcclxuICAgIH0gXHJcbiAgICBpZiAoQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLlNsb3RzW1wiYWRzLm96ZW5cIl0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGFkc096ZW5XaWR0aCA9XHJcbiAgICAgICAgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLlNsb3RzW1wiYWRzLm96ZW5cIl0ub2Zmc2V0V2lkdGg7XHJcbiAgICAgIHRoaXMuZGlzcGxheU96ZW5fZnVuYyhhZHNPemVuV2lkdGgpO1xyXG4gICAgfVxyXG4gICAgaWYgKEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1tcImFkcy5vemVuX3JpZ2h0XCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBhZHNPemVuUmlnaHRXaWR0aCA9XHJcbiAgICAgICAgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLlNsb3RzW1wiYWRzLm96ZW5fcmlnaHRcIl0ub2Zmc2V0V2lkdGg7XHJcbiAgICAgIHRoaXMuZGlzcGxheU96ZW5SaWdodF9NeW5ldF9mdW5jKGFkc096ZW5SaWdodFdpZHRoKTtcclxuICAgIH1cclxuICAgIGlmIChBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouU2xvdHNbXCJhZHMub3plbl9sZWZ0XCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5T3plbkxlZnRfTXluZXRfZnVuYyhjb250YWluZXJfd2lkdGgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICBpZiAoQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLlNsb3RzW1wiYWRzLm96ZW4ubGVmdFwiXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgYWRzT3plbkxlZnRXaWR0aCA9IEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1tcImFkcy5vemVuLmxlZnRcIl0ub2Zmc2V0V2lkdGg7XHJcbiAgICAgIHRoaXMuZGlzcGxheU96ZW5MZWZ0X2Z1bmMoYWRzT3plbkxlZnRXaWR0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRpc3BsYXlTa3lzY3JhcGVyUmlnaHRfZnVuYyhjb250YWluZXJfd2lkdGgpIHtcclxuICAgIExvZyhcImRpc3BsYXlTa3lzY3JhcGVyUmlnaHRfZnVuY1wiKTtcclxuICAgIGxldCBvemVuX3JpZ2h0X3dpZHRoID0gMDtcclxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWVbaWQqPVwic2t5c2NyYXBlclwiXScpICE9IHVuZGVmaW5lZCB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWVbaWQqPVwic2t5c2NyYXBlclwiXScpICE9IG51bGwpIHtcclxuICAgICAgb3plbl9yaWdodF93aWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZVtpZCo9XCJza3lzY3JhcGVyXCJdJykud2lkdGg7ICAgIFxyXG4gICAgbGV0IGwgPSAod2luZG93LmlubmVyV2lkdGggLSBjb250YWluZXJfd2lkdGgpIC8gMiAtIDEwO1xyXG4gICAgaWYgKG96ZW5fcmlnaHRfd2lkdGggPj0gbCB8fCBvemVuX3JpZ2h0X3dpZHRoID09IDApIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuc2t5c2NyYXBlclwiKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkb2
1N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5za3lzY3JhcGVyXCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XHJcbiAgICB9XHJcbiAgIH1cclxuICB9XHJcbiAgZGlzcGxheVNreXNjcmFwZXJMZWZ0X2Z1bmMoY29udGFpbmVyX3dpZHRoKSB7XHJcbiAgICBMb2coXCJkaXNwbGF5U2t5c2NyYXBlckxlZnRfZnVuY1wiKTtcclxuICAgIGxldCBvemVuX2xlZnRfd2lkdGggPSAwO1xyXG4gICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaWZyYW1lW2lkKj1cInNreXNjcmFwZXIubGVmdFwiXScpICE9IHVuZGVmaW5lZCB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWVbaWQqPVwic2t5c2NyYXBlci5sZWZ0XCJdJykgIT0gbnVsbCkge1xyXG4gICAgICAgIG96ZW5fbGVmdF93aWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZVtpZCo9XCJza3lzY3JhcGVyLmxlZnRcIl0nKS53aWR0aDsgICBcclxuICAgICAgICBsZXQgbCA9ICh3aW5kb3cuaW5uZXJXaWR0aCAtIGNvbnRhaW5lcl93aWR0aCkgLyAyIC0gMTA7XHJcbiAgICAgICAgaWYgKG96ZW5fbGVmdF93aWR0aCA+PSBsIHx8IG96ZW5fbGVmdF93aWR0aCA9PSAwKSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5za3lzY3JhcGVyLmxlZnRcIikuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5za3lzY3JhcGVyLmxlZnRcIikuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxuICAgICAgICB9XHJcbiAgICAgfVxyXG4gIH1cclxuICBkaXNwbGF5T3plblJpZ2h0X2Z1bmMoY29udGFpbmVyX3dpZHRoKSB7XHJcbiAgICBMb2coXCJkaXNwbGF5T3plblJpZ2h0X2Z1bmNcIik7XHJcbiAgICBsZXQgb3plbl9yaWdodF93aWR0aCA9IDA7XHJcbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaWZyYW1lW2lkKj1cIm96ZW4ucmlnaHRcIl0nKSAhPSB1bmRlZmluZWQgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaWZyYW1lW2lkKj1cIm96ZW4ucmlnaHRcIl0nKSAhPSBudWxsKSB7XHJcbiAgICAgIG96ZW5fcmlnaHRfd2lkdGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWVbaWQqPVwib3plbi5yaWdodFwiXScpLndpZHRoO1xyXG4gICAgfSBcclxuICAgIGxldCBsID0gKHdpbmRvdy5pbm5lcldpZHRoIC0gY29udGFpbmVyX3dpZHRoKSAvIDIgLSAxMDtcclxuICAgIGlmIChvemVuX3JpZ2h0X3dpZHRoID49IGwgfHwgb3plbl9yaWdodF93aWR0aCA9PSAwKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLm96ZW4ucmlnaHRcIikuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMub3plbi5yaWdodFwiKS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICAgfVxyXG4gIH1cclxuICBkaXNwbGF5T3plbkxlZnRfZnVuYyhhZHNPemVuTGVmdFdpZHRoKSB7X
1HJcbiAgICBMb2coXCJkaXNwbGF5T3plbkxlZnRfZnVuY1wiKTtcclxuICAgIGxldCBsID0gKHRoaXMuaW5uZXJXaWR0aCAtIDk4MCkgLyAyIC0gMTA7XHJcbiAgICBpZiAoYWRzT3plbkxlZnRXaWR0aCA+PSBsIHx8IGFkc096ZW5MZWZ0V2lkdGggPT0gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5vemVuLmxlZnRcIikuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMub3plbi5sZWZ0XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRpc3BsYXlPemVuX2Z1bmMoYWRzT3plbldpZHRoKSB7XHJcbiAgICBMb2coXCJkaXNwbGF5T3plbl9mdW5jXCIpO1xyXG4gICAgbGV0IGwgPSAodGhpcy5pbm5lcldpZHRoIC0gOTgwKSAvIDIgLSAxMDtcclxuICAgIGlmIChhZHNPemVuV2lkdGggPj0gbCB8fCBhZHNPemVuV2lkdGggPT0gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5vemVuXCIpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLm96ZW5cIikuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxuICAgIH1cclxuICB9XHJcbiBcclxuICByZXNpemVPemVuX2Z1bmMoKSB7XHJcbiAgICBMb2coXCJyZXNpemVPemVuX2Z1bmNcIik7XHJcbiAgICBsZXQgbWlkZGxlX3dpZHRoID0gMTQ0MDtcclxuICAgIGxldCBzbWFsbF93aWR0aCA9IDEyMzA7XHJcbiAgICBsZXQgYmlnX3dpZHRoID0gMTY2MDtcclxuICAgIGlmICh3aW5kb3cuR3JpZFdpZHRoID09IDEyNDApIHtcclxuICAgICAgIHNtYWxsX3dpZHRoID0gMTUyMDtcclxuICAgICAgIG1pZGRsZV93aWR0aCA9IDE2MDA7XHJcbiAgICAgICBiaWdfd2lkdGggPSAxODg1O1xyXG4gICAgfVx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcbiAgICAgIGlmICh0aGlzLmlubmVyV2lkdGggPiBzbWFsbF93aWR0aCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlubmVyV2lkdGggPiBtaWRkbGVfd2lkdGgpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmlubmVyV2lkdGggPiBiaWdfd2lkdGgpIHtcclxuICBcclxuICAgICAgICAgICAgcmV0dXJuIFtbMzAwLCA2MDBdLCBbMzAwLCA2MDFdLCBbMSwgMV1dO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtbMTYwLCA2MDBdLCBbMTYwLCA2MDFdLCBbMSwgMV1dO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gW1sxMjAsIDYwMF0sIFsxMjAsIDYwMV0sIFsxLCAxXV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBbMSwgMV07XHJcbiAgICAgIH1cclxuICB9XHJcbiAgcmVzaXplT3plbjgwMF9mdW5jKCkge1xyXG4gICAgTG9nKFwicmVzaXplT3plbjgwMF9mdW5jXCIpO1xyXG4gICAgaWYgKHdpbmRvdy5kY1ZpZGVvICE9IHRydWUpIHtcclxuICAgICAgaWYgKHRoaXMuaW5uZXJXaWR0aCA+IDEyMzApIHtcclxuICAgICAgICBpZiAodGhpcy5pbm5lcldpZHRoID4gMTQ0MCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaW5uZXJXaWR0aCA+IDE2NjApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtbMzAwLCA2MDBdLCBbMzAwLCA2MDFdXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbWzE2MCwgNjAwXSwgWzE2MCwgNjAxXV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBbWzEyMCwgNjAwXSwgWzEyMCwgNjAxXV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gWzEyMCwgNjAwXTtcclxuICAgIH1cclxuICB9XHJcbnRvcF9mdW5jKCkge1xyXG4gICAgTG9nKFwidG9wX2Z1bmNcIik7XHJcbiAgICBBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5maW5kQWxsRGl2X2Z1bmMoKTtcclxuICAgIC8vaWYgKEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1tcImFkcy50b3BcIl0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vaWYgKCQoQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLlNsb3RzWydhZHMudG9wJ10pLmNoaWxkcmVuKCdkaXYnKS5jaGlsZHJlbignaWZyYW1lJykgIT0gXCJcIikge1xyXG4gICAgICAvLyQoQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLlNsb3RzWydhZHMudG9wJ10pLmNoaWxkcmVuKCdkaXYnKS5maXJzdCgpLmNzcygnYm9yZGVyJywgJzVweCBzb2xpZCAjZTllOWU5Jyk7XHJcbiAgICAgIGlmIChBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouU2xvdHNbXCJhZHMudG9wXCJdLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGl2XCIpWzBdICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1tcImFkcy50b3BcIl0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkaXZcIilbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpZnJhbWVcIikgIT0gXCJcIikge1xyXG4gICAgICAgIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1tcImFkcy50b3BcIl0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkaXZcIilbMF0uc3R5bGUuYm9yZGVyID0gXCI1cHggc29saWQgI2U5ZTllOVwiO1xyXG4gICAgICB9XHJcbiAgICAvL31cclxuICAgIC8vaWYgKEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1snYWRzLnRvcCddLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKSAhPSBcIlwiKSBhbGVydCgxKTtcclxuICB9XHJcbiAgc3R5bGVTdGlja3lfZnVuYygpIHtcclxuICAgIExvZyhcInN0eWxlU3RpY2t5X2Z1bmNcIik7XHJcbiAgICBsZXQgc3RpY2t5U2xvdCA9IEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLnN0aWNreTtcclxuXHJcbiAgICBpZiAod2luZG93LmRjUGF0aC5pbmNsdWRlcyhcIldlYXRoZXJcIikgfHwgd2luZG93LmRjUGF0aC5pbmNsdWRlcyhcIndlYXRoZXJcIikpIHsgXHJcbiAgICAgICAgc3RpY2t5X3VuaXQgP
1SBcIndlYXRoZXJcIjtcclxuICAgIH1cclxuICAgICAgIFxyXG4gICAgSW5mcmFzcnVjdHVyZUNsYXNzT2JqLlNsb3RSZW5kZXJFbmQoZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgbGV0IFRvcExvYWRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoZXZlbnQuc2xvdCA9PSBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW3N0aWNreVNsb3RdKSB7XHJcbiAgICAgICAgaWYgKCFUb3BMb2FkZWQpIHtcclxuICAgICAgICAgIGlmICghZXZlbnQuaXNFbXB0eSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLmZpbmRBbGxEaXZfZnVuYygpO1xyXG4gICAgICAgICAgICAgIGxldCBiYW5uZXJfd2lkdGg7XHJcbiAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZVtpZCo9XCJzdGlja3lcIl0nKSAhPSBudWxsIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZVtpZCo9XCJzdGlja3lcIl0nKSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGJhbm5lcl93aWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZVtpZCo9XCJzdGlja3lcIl0nKS53aWR0aDtcclxuICAgICAgICAgICAgICB9ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBsZXQgc3RpY2t5X3Nsb3QgPSBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouU2xvdHNbc3RpY2t5U2xvdF07XHJcbiAgICAgICAgICAgICAgaWYgKHdpbmRvdy5kY1BhdGguaW5jbHVkZXMoXCJQbmFpUGx1c1wiKSkge1xyXG4gICAgICAgICAgICAgICAgc3RpY2t5X3Nsb3Quc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJwb3NpdGlvbjpmaXhlZDtib3R0b206MHB4O2xlZnQ6MHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7ZGlzcGxheTotbXMtZmxleGJveDstbXMtZmxleC1wYWNrOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlO3otaW5kZXg6OTk5ODttYXJnaW46MCBhdXRvO2JhY2tncm91bmQtY29sb3I6I2ZmZlwiKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RpY2t5X3Nsb3Quc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJwb3NpdGlvbjpmaXhlZDtib3R0b206MHB4O2xlZnQ6MHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7ZGlzcGxheTotbXMtZmxleGJveDstbXMtZmxleC1wYWNrOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlO3otaW5kZXg6OTk5O21hcmdpbjowIGF1dG87YmFja2dyb3VuZC1jb2xvcjojZmZmXCIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBzdGlja3lfc2xvdC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKVswXS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOlwiICsgYmFubmVyX3dpZHRoICsgXCJweDttYXJnaW46IGF1dG8gYXV0byBhdXRvIGF1dG87XCIpOyAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBUb3BMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSAgXHJcbiAgbGl2ZWJveF9mdW5jKCkge1xyXG4gICAgLy8gRk9SIFhORVRcclxuICAgICAgQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouZmluZEFsbERpdl9mdW5jKCk7XHJcbiAgICAgIEluZnJhc3J1Y3R1cmVDbGFzc09iai5TbG90UmVuZGVyRW5kKGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgbGV0IFRvcExvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGV2ZW50LnNsb3QgPT0gQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c1tcImFkcy5saXZlYm94XCJdKSB7XHJcbiAgICAgICAgICAgIGlmICghVG9wTG9hZGVkKSB7ICBcclxuICAgICAgICAgICAgICBpZighZXZlbnQuaXNFbXB0eSkgeyAgICBcclxuICAgICAgICAgICAgICAgICAgd2luZG93LkNsb3NlQm94ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Fkcy5saXZlYm94JykuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IFxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBidXR0b21fd2lkdGggPSAzMDtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYnV0dG9tX2hlaWdodCA9IDMwO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBidXR0b21fVVJMID0gXCIvL3RvdGFsbWVkaWEyLnluZXQuY28uaWwvcGljLzMwLTMwLmdpZlwiO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgYnV0dG9uY2xvc2UgPSAnPGltZyBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIG9uY2xpY2s9XCJqYXZhc2NyaXB0OkNsb3NlQm94KCk7XCIgIHNyYz1cIicgKyBidXR0b21fVVJMICsgJ1wiIHdpZHRoPVwiJyArIGJ1dHRvbV93aWR0aCArICdweFwiIGhlaWdodD1cIicgKyBidXR0b21faGVpZ2h0ICsgJ3B4XCIgLz4nO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBidXRvb25EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgICAgICAgYnV0b29uRGl2LmlkID0gJ0xpdmVCb3hfQ2xvc2VfYnV0dG9uJztcclxuICAgICAgICAgICAgICAgICAgYnV0b29uRGl2LmlubmVySFRNTCA9IGJ1dHRvbmNsb3NlO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBhZHNkaXYzID0gcGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLmxpdmVib3hcIik7XHJcbiAgICAgICAgICAgICAgICAgIGFkc2RpdjMuYXBwZW5kQ2hpbGQoYnV0b29uRGl2KTtcclxuICAgICAgICAgICAgICAgICAgbGV0IGJ1dG9vbmlkID0gcGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGJ1dG9vbkRpdi5pZCk7XHJcbiAgICAgICAgICAgICAgICAgIGJ1dG9vbmlkLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICAgICAgICAgICAgICBidXRvb25pZC5zdHlsZS50b3AgPSAwICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICBidXRvb25pZC5zdHlsZS5yaWdodCA9IDAgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgIGJ1dG9vbmlkLnN0eWxlLndpZHRoID0gXCIzMHB4XCI7XHJcbiAgICAgICAgICAgICAgICAgIGJ1dG9vbmlkLnN0eWxlLmhlaWdodCA9IFwiMzBweFwiO1xyXG4gICAgICAgICAgICAgICAgICBidXRvb25pZC5zdHlsZS56SW5kZXggPSAxO1xyXG4gICAgICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgICAgI
1H0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBUb3BMb2FkZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgfSAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTsgICAgXHJcbiAgICAgICAgXHJcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudE5hbWUgPT09ICdpbmJvYXJkY2xzb2VkJykge1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiTGl2ZUJveF9DbG9zZV9idXR0b25cIikuc3R5bGUgPSBcImRpc3BsYXk6IG5vbmVcIjsgXHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0sIGZhbHNlKTtcclxuXHJcbiAgICAgIGxldCBsaXZlYm94X3Nsb3QgPSBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouU2xvdHNbXCJhZHMubGl2ZWJveFwiXTtcclxuICAgICAgaWYgKGxpdmVib3hfc2xvdCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAod2luZG93LmRjQ0cgPT0gJ2FydGljbGUnKSB7XHJcbiAgICAgICAgICBsaXZlYm94X3Nsb3Quc2V0QXR0cmlidXRlKFxyXG4gICAgICAgICAgICBcInN0eWxlXCIsXHJcbiAgICAgICAgICAgIFwibWFyZ2luLXRvcDogMTE1cHg7IG1hcmdpbi1ib3R0b206IC02NXB4OyBwb3NpdGlvbjogcmVsYXRpdmU7XCIpOyAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3aW5kb3cuZGNDRyA9PSAnbWFpbicgfHwgd2luZG93LmRjQ0cgPT0gJ3N1YicgKSB7XHJcbiAgICAgICAgICBsaXZlYm94X3Nsb3Quc2V0QXR0cmlidXRlKFxyXG4gICAgICAgICAgICBcInN0eWxlXCIsXHJcbiAgICAgICAgICAgIFwibWFyZ2luLXRvcDogMTE1cHg7IG1hcmdpbi1ib3R0b206IC02NXB4OyBwb3NpdGlvbjogcmVsYXRpdmU7XCJcclxuICAgICAgICAgICAgKTsgIFxyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICB9ICAgXHJcbiAgfVxyXG4gIFluZXRfbGl2ZWJveF9mdW5jKCkge1xyXG4gICAgbGV0IGxpdmVib3hfc2xvdCA9IFwiXCI7XHJcbiAgICBpZiAod2luZG93LnluZXRfcmVzcG9uc2l2ZV9zaXRlcykge1xyXG4gICAgICBsaXZlYm94X3Nsb3QgPSBcImFkcy5pbmJvYXJkXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouZ2V0RGV2aWNlX2Z1bmMoKSA9PSBcIkFuZHJvaWRcIikge1x0XHJcbiAgICAgICAgbGl2ZWJveF9zbG90ID0gXCJhZHMueW5ldF9tb2JpbGV3ZWJfYW5kcm9pZF9saXZlYm94XCI7XHRcdFx0XHRcdFx0XHRcclxuICAgICAgfSBlbHNlIGlmIChBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5nZXREZXZpY2VfZnVuYygpID09IFwiaVBob25lXCIpIHtcdFxyXG4gICAgICAgIGxpdmVib3hfc2xvdCA9IFwiYWRzLnluZXRfbW9iaWxld2ViX2lwaG9uZV9saXZlYm94XCI7XHRcdFx0XHRcdFxyXG4gICAgICB9ICBcclxuICAgIH1cclxuICAgICAgICBcclxuICAgIEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLmZpbmRBbGxEaXZfZnVuYygpOyAgXHJcbiAgICBcclxuXHJcbiAgICBJbmZyYXNydWN0dXJlQ2xhc3NPYmouU2xvdFJlbmRlckVuZChmdW5jdGlvbihldmVudCkge1xyXG4gICAgICBsZXQgbGl2ZWJveF9sb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZXZlbnQuc2xvdCA9PSBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW2xpdmVib3hfc2xvdF0pIHtcclxuICAgICAgICAgIGlmICghbGl2ZWJveF9sb2FkZWQpIHsgIFxyXG4gICAgICAgICAgICBpZighZXZlbnQuaXNFbXB0eSkgeyAgIFxyXG4gICAgICAgICAgICAgICAgd2luZG93LkNsb3NlQm94ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGxpdmVib3hfc2xvdCkuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b21fd2lkdGggPSAzMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbV9oZWlnaHQgPSAzMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbV9VUkwgPSBcIi8vdG90YWxtZWRpYTIueW5ldC5jby5pbC9waWMvMzAtMzAuZ2lmXCI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b25jbG9zZSA9IFxyXG4gICAgICAgICAgICAgICAgJzxpbWcgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIiBvbmNsaWNrPVwiamF2YXNjcmlwdDpDbG9zZUJveCgpO1wiICBzcmM9XCInICtcclxuICAgICAgICAgICAgICAgICBidXR0b21fVVJMICtcclxuICAgICAgICAgICAgICAgICAgJ1wiIHdpZHRoPVwiJyArXHJcbiAgICAgICAgICAgICAgICAgICBidXR0b21fd2lkdGggK1xyXG4gICAgICAgICAgICAgICAgICAgICdweFwiIGhlaWdodD1cIicgK1xyXG4gICAgICAgICAgICAgICAgICAgICBidXR0b21faGVpZ2h0ICsgXHJcbiAgICAgICAgICAgICAgICAgICAgICdweFwiIC8+JztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1dG9vbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgICAgICAgYnV0b29uRGl2LmlkID0gJ0xpdmVCb3hfQ2xvc2VfYnV0dG9uJztcclxuICAgICAgICAgICAgICAgIGJ1dG9vbkRpdi5pbm5lckhUTUwgPSBidXR0b25jbG9zZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFkc2RpdjMgPSBwYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobGl2ZWJveF9zbG90KTtcclxuICAgICAgICAgICAgICAgIGFkc2RpdjMuYXBwZW5kQ2hpbGQoYnV0b29uRGl2KTtcclxuICAgICAgICAgICAgICAgIGxldCBidXRvb25pZCA9IHBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXRvb25EaXYuaWQpO1xyXG4gICAgICAgICAgICAgICAgYnV0b29uaWQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgICAgICAgICBidXRvb25pZC5zdHlsZS50b3AgPSAwICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgYnV0b29uaWQuc3R5bGUucmlnaHQgPSAwICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgYnV0b29uaWQuc3R5bGUud2lkdGggPSBcIjMwcHhcIjtcclxuICAgICAgICAgICAgICAgIGJ1dG9vbmlkLnN0eWxlLmhlaWdodCA9IFwiMzBweFwiO1xyXG4gICAgICAgICAgICAgICAgYnV0b29uaWQuc3R5bGUuekluZGV4ID0gMTtcclxuICAgICAgICAgICAgICAgI
1H0sIDEwMDApOyBcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBsaXZlYm94X2xvYWRlZD10cnVlO1xyXG4gICAgICAgICAgfSAgICBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7IFxyXG5cclxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudE5hbWUgPT09ICdpbmJvYXJkY2xzb2VkJykge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIkxpdmVCb3hfQ2xvc2VfYnV0dG9uXCIpLnN0eWxlID0gXCJkaXNwbGF5OiBub25lXCI7ICBcclxuICAgICAgICB9XHJcbiAgICAgfSwgZmFsc2UpOyAgICAgICAgICAgICAgICAgXHJcblxyXG5cclxuICAgIGxldCBiaWdsaXZlYm94X3Nsb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChsaXZlYm94X3Nsb3QpO1xyXG4gICAgaWYgKGJpZ2xpdmVib3hfc2xvdCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgYmlnbGl2ZWJveF9zbG90LnNldEF0dHJpYnV0ZShcclxuICAgICAgICBcInN0eWxlXCIsXHJcbiAgICAgICAgXCJtYXJnaW46MCBhdXRvOyBwb3NpdGlvbjogcmVsYXRpdmU7IGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgZGlzcGxheTotd2Via2l0LWJveDsgLXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7IGRpc3BsYXk6LW1zLWZsZXhib3g7IC1tcy1mbGV4LXBhY2s6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6MTAwJTtcIlxyXG4gICAgICAgICk7IFxyXG4gICAgIH0gICBcclxuIFxyXG4gIH1cclxuICBZbmV0X2JpZ2xpdmVib3hfZnVuYygpIHtcclxuICAgIEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLmZpbmRBbGxEaXZfZnVuYygpO1xyXG4gICAgbGV0IGJpZ2xpdmVib3hTbG90ID0gXCJcIjtcclxuICAgICAgaWYgKHdpbmRvdy55bmV0X3Jlc3BvbnNpdmVfc2l0ZXMpIHtcclxuICAgICAgICBiaWdsaXZlYm94U2xvdCA9IFwiYWRzLmJpZ2xpdmVib3hcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouZ2V0RGV2aWNlX2Z1bmMoKSA9PSBcIkFuZHJvaWRcIikge1xyXG4gICAgICAgICAgYmlnbGl2ZWJveFNsb3QgPSBcImFkcy55bmV0X21vYmlsZXdlYl9hbmRyb2lkX3BuaW1pX2JpZ2xpdmVCb3hcIjtcdFx0XHRcdFx0XHRcdFxyXG4gICAgICAgIH0gZWxzZSBpZiAoQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouZ2V0RGV2aWNlX2Z1bmMoKSA9PSBcImlQaG9uZVwiKSB7XHJcbiAgICAgICAgICBiaWdsaXZlYm94U2xvdCA9IFwiYWRzLnluZXRfbW9iaWxld2ViX2lwaG9uZV9wbmltaV9iaWdsaXZlQm94XCI7XHRcdFx0XHRcdFxyXG4gICAgICAgIH0gICBcclxuICAgICAgfVxyXG4gICAgICAgICAgICAgIFxyXG4gICAgSW5mcmFzcnVjdHVyZUNsYXNzT2JqLlNsb3RSZW5kZXJFbmQoZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgbGV0IFRvcExvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChldmVudC5zbG90ID09IEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNbYmlnbGl2ZWJveFNsb3RdKSB7XHJcbiAgICAgICAgICBpZiAoIVRvcExvYWRlZCkgeyAgXHJcbiAgICAgICAgICAgIGlmKCFldmVudC5pc0VtcHR5KSB7ICAgXHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuQ2xvc2VCb3ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYmlnbGl2ZWJveFNsb3QpLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouWW5ldF9yZW5kZXJTbWFsbEluYm9yZCgpO1xyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbV93aWR0aCA9IDMwO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9tX2hlaWdodCA9IDMwO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9tX1VSTCA9IFwiLy90b3RhbG1lZGlhMi55bmV0LmNvLmlsL3BpYy8zMC0zMC5naWZcIjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbmNsb3NlID0gXHJcbiAgICAgICAgICAgICAgICAnPGltZyBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIG9uY2xpY2s9XCJqYXZhc2NyaXB0OkNsb3NlQm94KCk7XCIgIHNyYz1cIicgK1xyXG4gICAgICAgICAgICAgICAgIGJ1dHRvbV9VUkwgK1xyXG4gICAgICAgICAgICAgICAgICAnXCIgd2lkdGg9XCInICtcclxuICAgICAgICAgICAgICAgICAgIGJ1dHRvbV93aWR0aCArXHJcbiAgICAgICAgICAgICAgICAgICAgJ3B4XCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbV9oZWlnaHQgKyBcclxuICAgICAgICAgICAgICAgICAgICAgJ3B4XCIgLz4nO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnV0b29uRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgICAgICBidXRvb25EaXYuaWQgPSAnQmlnbGl2ZWJveF9DbG9zZV9idXR0b24nO1xyXG4gICAgICAgICAgICAgICAgYnV0b29uRGl2LmlubmVySFRNTCA9IGJ1dHRvbmNsb3NlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWRzZGl2MyA9IHBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChiaWdsaXZlYm94U2xvdCk7XHJcbiAgICAgICAgICAgICAgICBhZHNkaXYzLmFwcGVuZENoaWxkKGJ1dG9vbkRpdik7XHJcbiAgICAgICAgICAgICAgICBsZXQgYnV0b29uaWQgPSBwYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYnV0b29uRGl2LmlkKTtcclxuICAgICAgICAgICAgICAgIGJ1dG9vbmlkLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgICAgICAgICAgICAgYnV0b29uaWQuc3R5bGUudG9wID0gMCArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgIGJ1dG9vbmlkLnN0eWxlLnJpZ2h0ID0gMCArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgIGJ1dG9vbmlkLnN0eWxlLndpZHRoID0gXCIzMHB4XCI7XHJcbiAgICAgICAgICAgICAgICBidXRvb25pZC5zdHlsZS5oZWlnaHQgPSBcIjMwcHhcIjtcclxuICAgICAgICAgICAgICAgIGJ1dG9vbmlkLnN0eWxlLnpJbmRleCA9IDE7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIFRvcExvYWRlZD10cnVlO1xyXG4gICAgICAgICAgfSAgICBcclxuICAgICAgICB9XHJcbiAgICAgIH0pOyBcclxuXHJcbiAgICAgIHdpbmRvdy5hZGR
1FdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXZlbnROYW1lID09PSAnaW5ib2FyZGNsc29lZCcpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJCaWdsaXZlYm94X0Nsb3NlX2J1dHRvblwiKS5zdHlsZSA9IFwiZGlzcGxheTogbm9uZVwiOyBcclxuICAgICAgICAgICAgQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouWW5ldF9yZW5kZXJTbWFsbEluYm9yZCgpOyAgXHJcbiAgICAgICAgfVxyXG4gICAgIH0sIGZhbHNlKTsgICAgICAgICAgXHJcblxyXG4gICAgbGV0IGJpZ2xpdmVib3hfc2xvdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGJpZ2xpdmVib3hTbG90KTtcclxuICAgIGlmIChiaWdsaXZlYm94X3Nsb3QgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGJpZ2xpdmVib3hfc2xvdC5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgICAgXCJzdHlsZVwiLFxyXG4gICAgICAgIFwibWFyZ2luOjAgYXV0bzsgcG9zaXRpb246IHJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7ZGlzcGxheTotbXMtZmxleGJveDstbXMtZmxleC1wYWNrOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlO1wiXHJcbiAgICAgICAgKTsgXHJcbiAgICAgfSAgIFxyXG4gXHJcbiAgfVxyXG4gIEludGVyc3RpdGlhbF9yZXNwb25zaXZlX2Z1bmMoKSB7XHJcbiAgICBcclxuICAgIEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLmZpbmRBbGxEaXZfZnVuYygpOyAgXHJcbiAgICBcclxuICAgIEluZnJhc3J1Y3R1cmVDbGFzc09iai5TbG90UmVuZGVyRW5kKGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgIGxldCBsaXZlYm94X2xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChldmVudC5zbG90ID09IEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNbXCJhZHMuaW50ZXJzdGl0aWFsLmlubmVyXCJdKSB7XHJcbiAgICAgICAgICBpZiAoIWxpdmVib3hfbG9hZGVkKSB7ICBcclxuICAgICAgICAgICAgaWYoIWV2ZW50LmlzRW1wdHkpIHsgICBcclxuICAgICAgICAgICAgICAvL2lmICh3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkY01hYXZhcm9uRGl2XCIpID09IG51bGwgfHwgd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGNNYWF2YXJvbkRpdlwiKSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5DbG9zZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuaW50ZXJzdGl0aWFsLmlubmVyXCIpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBcclxuICAgICAgICAgICAgICAgICBjb25zdCBidXR0b21fd2lkdGggPSAxMDtcclxuICAgICAgICAgICAgICAgICBjb25zdCBidXR0b21fVVJMID0gXCJodHRwczovL2ltYWdlczEueW5ldC5jby5pbC9QaWNTZXJ2ZXIzLzIwMTMvMTIvMTcvNTA0NDEzNy8zMjB4LnBuZ1wiO1xyXG4gICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbmNsb3NlID0gXHJcbiAgICAgICAgICAgICAgICAgJzxpbWcgaWQ9XCJDbG9zZV9idG5cIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgcG9zaXRpb246IGZpeGVkOyB3aWR0aDogMTAlOyB0b3A6IDA7IHJpZ2h0OiAwOyB6LWluZGV4OiAyMTQ3NDgzNjQ4O1wiIG9uY2xpY2s9XCJqYXZhc2NyaXB0OkNsb3NlKCk7XCIgIHNyYz1cIicgK1xyXG4gICAgICAgICAgICAgICAgICBidXR0b21fVVJMICtcclxuICAgICAgICAgICAgICAgICAgICdcIiB3aWR0aD1cIicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbV93aWR0aCArXHJcbiAgICAgICAgICAgICAgICAgICAgICclXCIgIC8+JztcclxuICAgICAgICAgICAgICAgICBjb25zdCBidXRvb25EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgICAgICBidXRvb25EaXYuaWQgPSAnQ2xvc2VfYnV0dG9uJztcclxuICAgICAgICAgICAgICAgICBidXRvb25EaXYuaW5uZXJIVE1MID0gYnV0dG9uY2xvc2U7XHJcbiAgICAgICAgICAgICAgICAgY29uc3QgYWRzZGl2MyA9IHBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5pbnRlcnN0aXRpYWwuaW5uZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgYWRzZGl2My5hcHBlbmRDaGlsZChidXRvb25EaXYpO1xyXG4gICAgICAgICAgICAgICAgIGxldCBidXRvb25pZCA9IHBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXRvb25EaXYuaWQpO1xyXG4gICAgICAgICAgICAgICAgIGJ1dG9vbmlkLnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiO1xyXG4gICAgICAgICAgICAgICAgIGJ1dG9vbmlkLnN0eWxlLnRvcCA9IDAgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgYnV0b29uaWQuc3R5bGUucmlnaHQgPSAwICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgIGJ1dG9vbmlkLnN0eWxlLndpZHRoID0gXCIxMCVcIjtcclxuICAgICAgICAgICAgICAgICBidXRvb25pZC5zdHlsZS56SW5kZXggPSAyMTQ3NDgzNjQ4O1xyXG4gICAgICAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgICAgICAgIC8vfVxyXG4gXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgbGl2ZWJveF9sb2FkZWQ9dHJ1ZTtcclxuICAgICAgICAgIH0gICAgXHJcbiAgICAgICAgfSBcclxuICAgICAgfSk7ICAgICAgICAgICAgICAgICBcclxuICB9XHJcbiAgcHBsdXNfc3RyaXBzKCkge1xyXG4gICAgXHJcbiAgICBBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5maW5kQWxsRGl2X2Z1bmMoKTsgIFxyXG5cclxuICAgICAgICAgIGxldCBzdHJpcHNfcHBsdXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkaXZbaWRePVwiYWRzLnN0cmlwLm1hcmtldGluZ1wiXScpO1xyXG4gICAgICAgICAgc3RyaXBzX3BwbHVzLmZvckVhY2goZnVuY3Rpb24odXNlckl0ZW0pIHtcclxuICAgICAgICAgIGxldCB1bml0X3N0cmlwID0gdXNlckl0ZW0uaWQ7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBJbmZyYXNydWN0dXJlQ2xhc3NPYmouU2xvdFJlbmRlckVuZChmdW5jdGlvbihldmVudCkgeyAgXHJcbiAgICAgICAgICBsZXQgU3RyaXBQcGx1cyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGV2ZW50LnNsb3QgPT0gQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c1t1bml0X3N0cmlwXSkge1xyXG4gICAgICAgICAgbGV0IGNvbnRhaW5lcl9zdHJpcHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnNsb3RDb250ZW50RGl2XCIpOyBcclxuICAgICAgICAgICAgaWYgKCFTdHJpcFBwbHVzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFldmVudC5pc0VtcHR5KSB7ICBcclxuICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0cmlwU2l6ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHVuaXRfc3RyaXApLm9mZnNldEhlaWdodDsgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmlwU2l6ZSA8IDIyNikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9zdHJpcHMuc3R5bGUuaGVpZ2h0ID0gcGFyc2VJbnQoY29udGFpbmVyX3N0cmlwcy5vZmZzZXRIZWlnaHQgLSAoMjI2IC0gc3RyaXBTaXplKSkgKyAncHgnOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSwgMzAwMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgI
1H0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9zdHJpcHMuc3R5bGUuaGVpZ2h0ID0gcGFyc2VJbnQoY29udGFpbmVyX3N0cmlwcy5vZmZzZXRIZWlnaHQgLSAyMjYpICsgJ3B4JzsgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIFN0cmlwUHBsdXMgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7ICAgICAgIFxyXG4gIH1cclxuICBocF9ib3hlc19jbGFzcyhib3gpIHtcclxuICAgIEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLmZpbmRBbGxEaXZfZnVuYygpOyAgXHJcbiAgICBsZXQgbWluX2hlaWdodCA9IFwiXCI7XHJcbiAgICBpZiAoYm94LmluY2x1ZGVzKFwiYm94Lm1lbnRhXCIpKSB7XHJcbiAgICAgIG1pbl9oZWlnaHQgPSBcIm1pbi1oZWlnaHQ6IDIxOHB4ICFpbXBvcnRhbnRcIjtcclxuICAgIH0gZWxzZSBpZiAoYm94LmluY2x1ZGVzKFwiYm94Lm5hZGxhblwiKSkge1xyXG4gICAgICBtaW5faGVpZ2h0ID0gXCJtaW4taGVpZ2h0OiAxNzhweCAhaW1wb3J0YW50XCI7XHJcbiAgICB9IGVsc2UgaWYgKGJveC5pbmNsdWRlcyhcImJveC5sYWlzaGFcIikpIHtcclxuICAgICAgbWluX2hlaWdodCA9IFwibWluLWhlaWdodDogMjg3cHggIWltcG9ydGFudFwiO1xyXG4gICAgfSBlbHNlIGlmIChib3guaW5jbHVkZXMoXCJib3guY29udGVudFwiKSkge1xyXG4gICAgICBtaW5faGVpZ2h0ID0gXCJtaW4taGVpZ2h0OiAyMTBweCAhaW1wb3J0YW50XCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy9sZXQgbWVudGFfYmFubmVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYGRpdltpZF49XCIke2JveH1cIl1gKTtcclxuICAgIGxldCBiYW5uZXJfYm94ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgZGl2W2lkXj1cIiR7Ym94fVwiXWApO1xyXG4gICAgLy9tZW50YV9iYW5uZXJzLmZvckVhY2goZnVuY3Rpb24odXNlckl0ZW0pIHtcclxuICAgICBcclxuICAgICBpZiAoYmFubmVyX2JveCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgbGV0IHVuaXQgPSBiYW5uZXJfYm94LmlkO1xyXG4gICAgICBsZXQgY3VycmVudCA9IGJhbm5lcl9ib3g7XHJcbiAgICAgIGxldCBzdHlsZV9kaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XHJcbiAgICAgIGlmIChib3guaW5jbHVkZXMoXCJhZHMuaG90Ym94Lm5hdGl2ZVwiKSkge1xyXG4gICAgICAgIHN0eWxlX2Rpdi5pbm5lckhUTUwgPSBgZGl2W2lkPScke3VuaXR9J10sIGRpdltpZD0nJHt1bml0fSddIGlmcmFtZSB7XHJcbiAgICAgICAgICB3aWR0aDogMTkwcHggIWltcG9ydGFudDtcclxuICAgICAgICAgIGhlaWdodDogMjA4cHggIWltcG9ydGFudDsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgfWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3R5bGVfZGl2LmlubmVySFRNTCA9IGBkaXZbaWQ9JyR7dW5pdH0nXSwgZGl2W2lkPScke3VuaXR9J10gaWZyYW1lIHsgJHttaW5faGVpZ2h0fTsgfWA7XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzdHlsZV9kaXYsIGN1cnJlbnQubmV4dFNpYmxpbmcpOyBcclxuICAgICB9XHJcbiAgICAvL30pO1xyXG4gIH1cclxuICBnZW5lcmFsX2Jhbm5lcnNfc3R5bGVzKCkge1xyXG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuVGl0bGVUYWJcIikpIHtcclxuICAgICAgbGV0IGNvbnRhaW5lcl9iYW5uZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLlRpdGxlVGFiXCIpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRhaW5lcl9iYW5uZXIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoKGNvbnRhaW5lcl9iYW5uZXJbaV0uaW5uZXJIVE1MKS5pbmRleE9mKFwi16TXqNeh15XXnteqXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgY29udGFpbmVyX2Jhbm5lcltpXS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcInZpc2liaWxpdHk6aGlkZGVuO1wiKTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH0gIFxyXG4gICAgfSAgXHJcbiAgfVxyXG5cclxuICBzdHlsZV9wZXJfYmFubmVyKGJhbm5lcikge1xyXG5cclxuICAgIGxldCBzdHlsZV9kaXZzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xyXG4gICAgbGV0IG15X2Jhbm5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGJhbm5lcik7IFxyXG4gICAgbGV0IGJhbm5lcl93aWR0aCA9IG15X2Jhbm5lci5jbG9zZXN0KFwiLmV4dGVuZGVkLWJhbm5lclwiKS5jbGllbnRXaWR0aDtcclxuICAgIGxldCBiYW5uZXJfaGVpZ2h0ID0gbXlfYmFubmVyLmNsb3Nlc3QoXCIuZXh0ZW5kZWQtYmFubmVyXCIpLmNsaWVudEhlaWdodDtcclxuXHJcbiAgICBpZiAoYmFubmVyLmluY2x1ZGVzKFwiYWRzLmdyYXkuYm94XCIpKSB7XHJcbiAgICAgIGxldCBteV9iYW5uZXJfZXh0ZW5kZWQgPSAgbXlfYmFubmVyLmNsb3Nlc3QoXCIuZXh0ZW5kZWQtYmFubmVyXCIpLnF1ZXJ5U2VsZWN0b3IoXCIuRXh0ZW5kZWRfYmFubmVyXCIpO1xyXG4gICAgICBteV9iYW5uZXJfZXh0ZW5kZWQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJiYWNrZ3JvdW5kLWNvbG9yOiNlZWVlZWY7IHBhZGRpbmc6NDVweCAzN3B4IDQ1cHggMzdweDsgaGVpZ2h0OiAyNTBweDsgZGlzcGxheTpmbGV4O1wiKTsgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgLy8gaWYgKG15X2Jhbm5lcl9leHRlbmRlZCkgeyBcclxuICAgICAgICAvLyAgIGxldCBjb250YWluZXJfZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgICAvLyAgIGNvbnRhaW5lcl9kaXYuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJncmF5X2JveFwiKTtcclxuICAgICAgICAvLyAgIG15X2Jhbm5lcl9leHRlbmRlZC5hcHBlbmRDaGlsZChjb250YWluZXJfZGl2KTsgXHJcbiAgICAgICAgLy8gICBjb250YWluZXJfZGl2LmFwcGVuZENoaWxkKG15X2Jhbm5lcl9leHRlbmRlZCk7ICBcclxuICAgICAgICAvLyB9XHJcbiAgICBcclxuICAgICAgc3R5bGVfZGl2cy5pbm5lckhUTUwgPSBgZGl2W2lkPScke2Jhbm5lcn0nXSB7X
1HJcbiAgICAgICAgd2lkdGg6IDMwMHB4O1xyXG4gICAgICAgIGhlaWdodDogMjUwcHggIWltcG9ydGFudDtcclxuICAgICAgICBkaXNwbGF5OmZsZXg7XHJcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6Y2VudGVyO1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNlZWVlZWY7ICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgZGl2W2lkPScke2Jhbm5lcn0nXSA+IGRpdiB7XHJcbiAgICAgICAgZGlzcGxheTpmbGV4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIH1cclxuICAgICAgZGl2W2lkPScke2Jhbm5lcn0nXSBpZnJhbWUge1xyXG4gICAgICAgIHdpZHRoOiAzMDBweDtcclxuICAgICAgICBoZWlnaHQ6IDI1MHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOmNlbnRlcjsgIFxyXG4gICAgICB9YDtcclxuICAgIH0gZWxzZSBpZiAoYmFubmVyID09IFwiYWRzLnJpZ2h0Ym94X25hdGl2ZS4xXCIgfHwgYmFubmVyID09IFwiYWRzLnJpZ2h0Ym94X25hdGl2ZS4yXCIpIHtcclxuICAgICAgc3R5bGVfZGl2cy5pbm5lckhUTUwgPSBgZGl2W2lkPScke2Jhbm5lcn0nXSB7XHJcbiAgICAgICAgd2lkdGg6ICR7YmFubmVyX3dpZHRofXB4O1xyXG4gICAgICAgIGhlaWdodDogJHtiYW5uZXJfaGVpZ2h0fXB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgb2JqZWN0LWZpdDogY29udGFpbjtcclxuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMCByZ2JhKDIxOCwgMjE4LCAyMjEsIDAuOCk7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgfVxyXG4gICAgICBkaXZbaWQ9JyR7YmFubmVyfSddIGlmcmFtZSB7XHJcbiAgICAgICAgd2lkdGg6ICR7YmFubmVyX3dpZHRofXB4O1xyXG4gICAgICAgIGhlaWdodDogJHtiYW5uZXJfaGVpZ2h0fXB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgbWluLWhlaWdodDogMjMycHggIWltcG9ydGFudDsgICBcclxuICAgICAgfWA7XHJcbiAgICB9IGVsc2UgaWYgKGJhbm5lciA9PSBcImFkcy5ncmF5LmJpZy5zdHJpcC4xXCIpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuZ3JheS5iaWcuc3RyaXAuMVwiKS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJhY2tncm91bmQtY29sb3I6I2VlZWVlZjsgcGFkZGluZzozNXB4IDI0cHg7IG1hcmdpbjowIGF1dG87IHRleHQtYWxpZ246Y2VudGVyOyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcIik7ICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdHlsZV9kaXZzLmlubmVySFRNTCA9IGBkaXZbaWQ9JyR7YmFubmVyfSddLCBkaXZbaWQ9JyR7YmFubmVyfSddIGlmcmFtZSB7XHJcbiAgICAgICAgd2lkdGg6ICR7YmFubmVyX3dpZHRofXB4O1xyXG4gICAgICAgIGhlaWdodDogJHtiYW5uZXJfaGVpZ2h0fXB4ICFpbXBvcnRhbnQ7ICAgIFxyXG4gICAgICB9YDtcclxuICAgIH1cclxuXHJcbiAgICBteV9iYW5uZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc3R5bGVfZGl2cywgbXlfYmFubmVyLm5leHRTaWJsaW5nKTtcclxuXHJcbiAgICB9XHJcblxyXG59IC8vZW5kIEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzc1xyXG5leHBvcnQgZGVmYXVsdCBuZXcgQWRVbml0QWRkaXRpb25hbFN0eWxlc0NsYXNzKCk7XHJcbiIsImltcG9ydCBBZFVuaXRBZGRpdGlvbmFsU3R5bGVzQ2xhc3NPYmogZnJvbSBcIi4vQWRVbml0QWRkaXRpb25hbFN0eWxlc0NsYXNzXCI7XHJcblxyXG4vLyAgU1RZTEVTIFBFUiBVTklUXHJcbmNsYXNzIEFkVW5pdFN0eWxlc0NsYXNzIHtcclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcbiAgXHJcbiAgXCJhZHMuc2t5c2NyYXBlclwiKCkge1xyXG4gICAgQWRVbml0QWRkaXRpb25hbFN0eWxlc0NsYXNzT2JqLm96ZW5fZnVuYygpO1xyXG4gIH1cclxuICBcImFkcy5za3lzY3JhcGVyLmxlZnRcIigpIHtcclxuICAgIEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzc09iai5vemVuX2Z1bmMoKTtcclxuICB9XHJcbiAgXCJhZHMub3plbi5yaWdodFwiKCkge1xyXG4gICAgQWRVbml0QWRkaXRpb25hbFN0eWxlc0NsYXNzT2JqLm96ZW5fZnVuYygpO1xyXG4gIH1cclxuICBcImFkcy5vemVuLmxlZnRcIigpIHtcclxuICAgIEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzc09iai5vemVuX2Z1bmMoKTtcclxuICB9XHJcbiAgXCJhZHMubmV3c3BhcGVyXCIoKSB7XHJcbiAgICBBZFVuaXRBZGRpdGlvbmFsU3R5bGVzQ2xhc3NPYmouc3R5bGVOZXdzcGFwZXJfZnVuYygpO1xyXG4gIH1cclxuICBcImFkcy5vemVuXCIoKSB7XHJcbiAgICBBZFVuaXRBZGRpdGlvbmFsU3R5bGVzQ2xhc3NPYmoub3plbl9mdW5jKCk7XHJcbiAgfVxyXG4gIFwiYWRzLnRvcFwiKCkge1xyXG4gICAgQWRVbml0QWRkaXRpb25hbFN0eWxlc0NsYXNzT2JqLnRvcF9mdW5jKCk7XHJcbiAgfVxyXG4gIFwiYWRzLnN0aWNreVwiKCkge1xyXG4gICAgQWRVbml0QWRkaXRpb25hbFN0eWxlc0NsYXNzT2JqLnN0eWxlU3RpY2t5X2Z1bmMoKTtcclxuICB9XHJcbiAgXCJhZHMudG9wLjJcIigpIHtcclxuICAgIEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzc09iai5zdHlsZU5ld3NwYXBlcl9mdW5jKCk7XHJcbiAgfVxyXG4gIFwiYWRzLmxpdmVib3hcIigpIHtcclxuICAgIEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzc09iai5saXZlYm94X2Z1bmMoKTtcclxuICB9XHJcbiAgXCJZbmV0X2xpdmVib3hcIigpIHtcclxuICAgIEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzc09iai5ZbmV0X2xpdmVib3hfZnVuYygpO1xyXG4gIH1cclxuICBcIlluZXRfYmlnbGl2ZWJveFwiKCkge1xyXG4gICAgQWRVbml0QWRkaXRpb25hbFN0eWxlc0NsYXNzT2JqLlluZXRfYmlnbGl2ZWJveF9mdW5jKCk7XHJcbiAgfVxyXG4gIFwiSW50ZXJzdGl0aWFsX3Jlc3BvbnNpdmVcIigpIHtcclxuICAgIEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzc09iai5JbnRlcnN0aXRpYWxfcmVzcG9uc2l2ZV9mdW5jKCk7XHJcbiAgfVxyXG4gIFwicHJvbW9fY2xhc3NcIigpIHtcclxuICAgIEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzc09iai5wcm9tb19jbGFzc19mdW5jKCk7XHJcbiAgfVxyXG4gIFwiYWRzLmdyYXkuYm94LjFcIigpIHtcclxuICAgIEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzc09iai5ncmF5X2JveF9mdW5jKCk7XHJcbiAgfVxyXG4gIFwicHBsdXNfc3RyaXBzXCIoKSB7XHJcbiAgICBBZFVuaXRBZGRpdGlvbmFsU3R5bGVzQ2xhc3NPYmoucHBsdXNfc3RyaXBzKCk7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBBZFVuaXRTdHlsZXNDbGFzcygpO1xyXG4iLCJpbXBvcnQgSW5mcmFzcnVjdHVyZUNsYXNzT2JqIGZyb20gXCIuL0luZnJhc3RydWN0dXJlQ2xhc3NcIjtcclxuY29uc3QgeyBMb2cgfSA9IEluZnJhc3J1Y3R1cmVDbGFzc09iajtcclxuXHJcbmNsYXNzIENvb2NraWVzRnVuY3Rpb25DbGFzcyB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmRjUGF0aCA9IHdpbmRvdy5kY1BhdGg7XHJcbiAgICB0aGlzLmRjY2cgPSB3aW5kb3cuZGN
1DRztcclxuICAgIHRoaXMuQWRVbml0X2RhdGEgPSB0aGlzLlJlc29sdmVBZFVuaXREYXRhX2Z1bmMoSW5mcmFzcnVjdHVyZUNsYXNzT2JqLlNpdGUpO1xyXG4gIH1cclxuICBSZXNvbHZlQWRVbml0RGF0YV9mdW5jKHNpdGUpIHtcclxuICAgIC8vUmVzb2x2ZUFkVW5pdERhdGFfZnVuYyBjcmVhdGUgQWRVbml0X2RhdGEgb2JqZWN0XHJcbiAgICBzd2l0Y2ggKHNpdGUpIHtcclxuICAgICAgY2FzZSBcImlzX3huZXRcIjpcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdmlld3M6IHtcclxuICAgICAgICAgICAgeG50OiB7XHJcbiAgICAgICAgICAgICAgXCIubWFpblwiOiA1LFxyXG4gICAgICAgICAgICAgIHN0YW5kYXJkOiA1XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0YW5kYXJkOiB7XHJcbiAgICAgICAgICAgICAgc3RhbmRhcmQ6IDVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgIGNhc2UgXCJpc184MDBcIjpcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdmlld3M6IHtcclxuICAgICAgICAgICAgeW50OiB7XHJcbiAgICAgICAgICAgICAgXCIuZ29vZFwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLmZvb2RcIjogNSxcclxuICAgICAgICAgICAgICBcIi5nb1wiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLm1lbnRhXCI6IDUsXHJcbiAgICAgICAgICAgICAgXCIudmFjYXRpb25cIjogNSxcclxuICAgICAgICAgICAgICBcIi5lbnRlcnRhaW1lbnRcIjogNSxcclxuICAgICAgICAgICAgICBcIi5tYWdhemluZVwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLmluZGV4XCI6IDUsXHJcbiAgICAgICAgICAgICAgXCIuZW5jbFwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLmFzdHJvbG9neVwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLmhlYWx0aFwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLm9waW5pb25cIjogNSxcclxuICAgICAgICAgICAgICBcIi5wYXJlbnRzXCI6IDUsXHJcbiAgICAgICAgICAgICAgXCIuZWNvbG9neVwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLm5ld3NcIjogNSxcclxuICAgICAgICAgICAgICBcIi5qdWRhaXNcIjogNSxcclxuICAgICAgICAgICAgICBcIi5kYXRpbmdcIjogNSxcclxuICAgICAgICAgICAgICBcIi5lY29ub215XCI6IDUsXHJcbiAgICAgICAgICAgICAgXCIuY29tcHV0XCI6IDUsXHJcbiAgICAgICAgICAgICAgXCIuYWN0aXZpc2ltXCI6IDUsXHJcbiAgICAgICAgICAgICAgXCIuc3BvcnRcIjogNSxcclxuICAgICAgICAgICAgICBcIi5tb3ZpZXNcIjogNSxcclxuICAgICAgICAgICAgICBcIi5jb25zdW1lclwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLmZvcnVtc1wiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLmF1dG9cIjogNSxcclxuICAgICAgICAgICAgICBcIi5nb3NzaXBcIjogNSxcclxuICAgICAgICAgICAgICBcIi50cmF2ZWxcIjogNSxcclxuICAgICAgICAgICAgICBcIi5lbnRlclwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLkNlbnRyYWxcIjogNixcclxuICAgICAgICAgICAgICBzdGFuZGFyZDogXCI1XCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3RhbmRhcmQ6IHtcclxuICAgICAgICAgICAgICBzdGFuZGFyZDogNVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdmlld3M6IHtcclxuICAgICAgICAgICAgeW50OiB7XHJcbiAgICAgICAgICAgICAgXCIuZ29vZFwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLmZvb2RcIjogNSxcclxuICAgICAgICAgICAgICBcIi5nb1wiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLm1lbnRhXCI6IDUsXHJcbiAgICAgICAgICAgICAgXCIudmFjYXRpb25cIjogNSxcclxuICAgICAgICAgICAgICBcIi5lbnRlcnRhaW1lbnRcIjogNSxcclxuICAgICAgICAgICAgICBcIi5tYWdhemluZVwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLmluZGV4XCI6IDUsXHJcbiAgICAgICAgICAgICAgXCIuZW5jbFwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLmFzdHJvbG9neVwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLmhlYWx0aFwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLm9waW5pb25cIjogNSxcclxuICAgICAgICAgICAgICBcIi5wYXJlbnRzXCI6IDUsXHJcbiAgICAgICAgICAgICAgXCIuZWNvbG9neVwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLm5ld3NcIjogNSxcclxuICAgICAgICAgICAgICBcIi5qdWRhaXNcIjogNSxcclxuICAgICAgICAgICAgICBcIi5kYXRpbmdcIjogNSxcclxuICAgICAgICAgICAgICBcIi5lY29ub215XCI6IDUsXHJcbiAgICAgICAgICAgICAgXCIuY29tcHV0XCI6IDUsXHJcbiAgICAgICAgICAgICAgXCIuYWN0aXZpc2ltXCI6IDUsXHJcbiAgICAgICAgICAgICAgXCIuc3BvcnRcIjogNSxcclxuICAgICAgICAgICAgICBcIi5tb3ZpZXNcIjogNSxcclxuICAgICAgICAgICAgICBcIi5jb25zdW1lclwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLmZvcnVtc1wiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLmF1dG9cIjogNSxcclxuICAgICAgICAgICAgICBcIi5nb3NzaXBcIjogNSxcclxuICAgICAgICAgICAgICBcIi50cmF2ZWxcIjogNSxcclxuICAgICAgICAgICAgICBcIi5lbnRlclwiOiA1LFxyXG4gICAgICAgICAgICAgIFwiLkNlbnRyYWxcIjogNixcclxuICAgICAgICAgICAgICBzdGFuZGFyZDogXCI1XCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3RhbmRhcmQ6IHtcclxuICAgICAgICAgICAgICBzdGFuZGFyZDogNVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcbiAgY3JlYXRlQ29va2llX2Z1bmMobmFtZSwgdmFsdWUsIGRheXMpIHtcclxuICAgIExvZyhcImNyZWF0ZUNvb2tpZV9mdW5jXCIpO1xyXG4gICAgbGV0IGV4cGlyZXMgPSBcIlwiO1xyXG4gICAgaWYgKGRheXMpIHtcclxuICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyBkYXlzICogMjQgKiA2MCAqIDYwICogMTAwMCk7XHJcbiAgICAgIGV4cGlyZXMgPSBcIjsgZXhwaXJlcz1cIiArIGRhdGUudG9HTVRTdHJpbmcoKTtcclxuICAgIH0gZWxzZSBleHBpcmVzID0gXCJcIjtcclxuICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyBcIj1cIiArIHZhbHVlICsgZXhwaXJlcyArIFwiOyBwYXRoPS9cIjtcclxuICB9XHJcbiAgcmVhZENvb2tpZV9mdW5jKG5hbWUpIHtcclxuICAgIExvZyhcInJlYWRDb29raWVfZnVuY1wiKTtcclxuICAgIGNvbnN0IG5hbWVFUSA9IG5hbWUgKyBcIj1cIjtcclxuICAgIGNvbnN0IGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2EubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGMgPSBjYVtpXTtcclxuICAgICAgd2hpbGUgKGMuY2hhckF0KDApID09IFwiIFwiKSBjID0gYy5zdWJzdHJpbmcoMSwgYy5sZW5ndGgpO1xyXG4gICAgICBpZiAoYy5pbmRleE9mKG5hbWVFUSkgPT0gMCkgcmV0dXJuIGMuc3Vic3RyaW5nKG5hbWVFUS5sZW5ndGgsIGMubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHJldHVybi
1BudWxsO1xyXG4gIH1cclxuICBnZXRDb29raWUxX2Z1bmMobmFtZSwgaW5kZXhfeCkge1xyXG4gICAgTG9nKFwiZ2V0Q29va2llMV9mdW5jXCIpO1xyXG4gICAgY29uc3QgcyA9IHdpbmRvdy5kY1NpdGU7XHJcbiAgICBjb25zdCB2ZCA9IHRoaXMuQWRVbml0X2RhdGEudmlld3M7XHJcbiAgICBsZXQgaW5kZXhfeSA9IFwiXCI7XHJcbiAgICBsZXQgY3VudF9pID0gMDtcclxuICAgIGZvciAobGV0IGkgaW4gdmRbc10pIGluZGV4X3kgPSBpbmRleF95ICsgaSArIFwiO1wiO1xyXG4gICAgY29uc3QgY2EgPSBpbmRleF95LnNwbGl0KFwiO1wiKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2EubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGNhW2ldID09IG5hbWUpIGJyZWFrO1xyXG4gICAgICBjdW50X2kgPSBjdW50X2kgKyAxO1xyXG4gICAgfVxyXG4gICAgbGV0IG1jb29raWUgPSB0aGlzLnJlYWRDb29raWVfZnVuYyhpbmRleF94KTtcclxuICAgIHJldHVybiBtY29va2llLnN1YnN0cmluZyhjdW50X2ksIGN1bnRfaSArIDEpO1xyXG4gIH1cclxuICB3cml0ZUNvb2tpZTFfZnVuYyhuYW1lLCB2YWx1ZSwgZGF5cywgaW5kZXhfeCkge1xyXG4gICAgTG9nKFwid3JpdGVDb29raWUxX2Z1bmNcIik7XHJcbiAgICBsZXQgZXhwaXJlcyA9IFwiXCI7XHJcbiAgICBpZiAoZGF5cykge1xyXG4gICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKTtcclxuICAgICAgZXhwaXJlcyA9IFwiOyBleHBpcmVzPVwiICsgZGF0ZS50b0dNVFN0cmluZygpO1xyXG4gICAgfSBlbHNlIGV4cGlyZXMgPSBcIlwiO1xyXG4gICAgY29uc3QgcyA9IHdpbmRvdy5kY1NpdGU7XHJcbiAgICBsZXQgdmQgPSB0aGlzLkFkVW5pdF9kYXRhLnZpZXdzO1xyXG4gICAgbGV0IGluZGV4X3kgPSBcIlwiO1xyXG4gICAgZm9yIChsZXQgaSBpbiB2ZFtzXSkgaW5kZXhfeSA9IGluZGV4X3kgKyBpICsgXCI7XCI7XHJcbiAgICBsZXQgY2EgPSBpbmRleF95LnNwbGl0KFwiO1wiKTtcclxuICAgIGxldCBjdW50X2kgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoY2FbaV0gPT0gbmFtZSkgYnJlYWs7XHJcbiAgICAgIGN1bnRfaSA9IGN1bnRfaSArIDE7XHJcbiAgICB9XHJcbiAgICBsZXQgbWNvb2tpZSA9IHRoaXMucmVhZENvb2tpZV9mdW5jKGluZGV4X3gpO1xyXG4gICAgbGV0IEI0ID0gbWNvb2tpZS5zdWJzdHJpbmcoLTEsIGN1bnRfaSk7XHJcbiAgICBsZXQgUjIgPSBtY29va2llLnN1YnN0cmluZyhjdW50X2kgKyAxLCBtY29va2llLmxlbmd0aCk7XHJcbiAgICBsZXQgbmNvb2tpZSA9IGluZGV4X3ggKyBcIj1cIiArIEI0ICsgdmFsdWUgKyBSMiArIGV4cGlyZXMgKyBcIjsgcGF0aD0vXCI7XHJcbiAgICBkb2N1bWVudC5jb29raWUgPSBuY29va2llO1xyXG4gIH1cclxuICBzZXRWaWV3Q29va2llc19mdW5jKCkge1xyXG4gICAgTG9nKFwic2V0Vmlld0Nvb2tpZXNfZnVuY1wiKTtcclxuICAgIGNvbnN0IGRjUGF0aDEgPSB0aGlzLmRjUGF0aDtcclxuICAgIHRoaXMuX2RjUGF0aCA9IGRjUGF0aDEuc3BsaXQoXCItXCIpO1xyXG4gICAgbGV0IGMgPSB0aGlzLl9kY1BhdGhbMF0udG9Mb3dlckNhc2UoKTtcclxuICAgIGxldCBzID0gdGhpcy5kY1NpdGU7XHJcbiAgICBsZXQgdmRfbGlzdCA9IHRoaXMuQWRVbml0X2RhdGEudmlld3M7XHJcbiAgICBjb25zdCBpbmRleF94ID0gXCJ0bWNcIiArIHM7XHJcbiAgICBjb25zdCBzeW5jID0gdGhpcy5yZWFkQ29va2llX2Z1bmMoXCJkY3N5bmNcIiArIHMpO1xyXG4gICAgY29uc3QgTGNvb2NraWUgPSB0aGlzLnJlYWRDb29raWVfZnVuYyhpbmRleF94KTtcclxuICAgIGxldCB2aWV3OyAvLyBPTEQgVkVSU0lPTiBPRiBWSUVXXHJcbiAgICB2YXIgY3VudF9pID0gXCJcIjtcclxuICAgIGlmICghc3luYyB8fCBMY29vY2tpZSA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlQ29va2llX2Z1bmMoXCJkY3N5bmNcIiArIHMsIFwidHJ1ZVwiLCAzNjApO1xyXG4gICAgICBjdW50X2kgPSBcIlwiO1xyXG4gICAgICBpZiAoIXZkX2xpc3Rbc10pIHtcclxuICAgICAgICBzID0gXCJzdGFuZGFyZFwiO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGkgaW4gdmRfbGlzdFtzXSkgaSArIFwiXCI7XHJcbiAgICAgIGN1bnRfaSA9IGN1bnRfaSArIFwiMVwiO1xyXG4gICAgICB0aGlzLmNyZWF0ZUNvb2tpZV9mdW5jKGluZGV4X3gsIGN1bnRfaSwgMzYwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdmRfbGlzdFtzXSkge1xyXG4gICAgICAgIHMgPSBcInN0YW5kYXJkXCI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF2ZF9saXN0W3NdW2NdKSB7XHJcbiAgICAgICAgYyA9IFwic3RhbmRhcmRcIjtcclxuICAgICAgfVxyXG4gICAgICB2aWV3ID0gdGhpcy5nZXRDb29raWUxX2Z1bmMoYywgaW5kZXhfeCk7XHJcbiAgICAgIGNvbnN0IHQgPSB2ZF9saXN0W3NdW2NdO1xyXG4gICAgICBpZiAodCkge1xyXG4gICAgICAgIHZpZXcgPSAodmlldyAlIHQpICsgMTtcclxuICAgICAgICBsZXQgc3RyID0gXCJ2aWV3MVwiO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAyOyBpIDw9IHZpZXc7IGkrKykge1xyXG4gICAgICAgICAgc3RyID0gc3RyICsgXCIsdmlld1wiICsgaTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMud3JpdGVDb29raWUxX2Z1bmMoYywgdmlldywgMzYwLCBpbmRleF94KTtcclxuICAgIH1cclxuICB9XHJcbiAgdmlld0Nvb2NraWVzX2Z1bmMoKSB7XHJcbiAgICAvL3ZpZXdDb29ja2llc19mdW5jIGZ1bmN0aW9uIGdldCB0aGUgcGFnZSBkY1BhdGggYW5kIHJldHVybiBrZXkgZm9yIHRoZSBkY3ZpZXcgKGZyb20gbG9jYWxzdG9yYWdlIHRoZSB2YWx1ZSBvZiB2aWV3KVxyXG4gICAgLy9UaGUgZGNQYXRoIGhhdmUgNSB2YWx1ZXM6IGhvbWVfY2hhbm5lbCwgbmV3c19jaGFubmVsLCB3b21hbl9jaGFubmVsLCBtYW5fY2hhbm5lbCwgb3RoZXJfY2hhbm5lbFxyXG4gICAgaWYgKEluZnJhc3J1Y3R1cmVDbGFzc09iai5TaXRlID09IFwiaXNfODAwXCIgKSB7XHJcbiAgICAgIHJldHVybi
1B0aGlzLmRjUGF0aDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGNoYW5uZWxfcGF0aCA9IHRoaXMuZGNQYXRoO1xyXG4gICAgICBjb25zdCBwYXRoX2FycmF5ID0gY2hhbm5lbF9wYXRoLnNwbGl0KFwiLVwiKTtcclxuICAgICAgY29uc3QgbnVtX2NoYW5uZWwgPSBwYXRoX2FycmF5WzBdLnN1YnN0cigwLCBwYXRoX2FycmF5WzBdLmluZGV4T2YoXCIuXCIpKTtcclxuICAgICAgaWYgKHRoaXMuZGNjZyA9PSBcImhvbWVcIiB8fCB3aW5kb3cuZGNQYXRoID09IFwiMjc3NS5LbmVzc2V0LTMzMTEzLmFkaXBlZXJpXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJob21lX2NoYW5uZWxcIjtcclxuICAgICAgfSBlbHNlIGlmIChudW1fY2hhbm5lbCA9PSBcIjJcIikge1xyXG4gICAgICAgIHJldHVybiBcIm5ld3NfY2hhbm5lbFwiO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIG51bV9jaGFubmVsID09IFwiOTc1XCIgfHxcclxuICAgICAgICBudW1fY2hhbm5lbCA9PSBcIjEyMDlcIiB8fFxyXG4gICAgICAgIG51bV9jaGFubmVsID09IFwiMTIwOFwiIHx8XHJcbiAgICAgICAgbnVtX2NoYW5uZWwgPT0gXCIxMDY5XCIgfHxcclxuICAgICAgICBudW1fY2hhbm5lbCA9PSBcIjM5MjVcIiB8fFxyXG4gICAgICAgIG51bV9jaGFubmVsID09IFwiNTM4XCIgfHxcclxuICAgICAgICBudW1fY2hhbm5lbCA9PSBcIjUzNjNcIiB8fFxyXG4gICAgICAgIG51bV9jaGFubmVsID09IFwiMTEyMTFcIiB8fFxyXG4gICAgICAgIG51bV9jaGFubmVsID09IFwiMzA1MlwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiBcIndvbWFuX2NoYW5uZWxcIjtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBudW1fY2hhbm5lbCA9PSBcIjU1MFwiIHx8XHJcbiAgICAgICAgbnVtX2NoYW5uZWwgPT0gXCIzXCIgfHxcclxuICAgICAgICBudW1fY2hhbm5lbCA9PSBcIjU0NFwiIHx8XHJcbiAgICAgICAgbnVtX2NoYW5uZWwgPT0gXCI1OThcIiB8fFxyXG4gICAgICAgIG51bV9jaGFubmVsID09IFwiNlwiIHx8XHJcbiAgICAgICAgbnVtX2NoYW5uZWwgPT0gXCI0ODgwXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIFwibWFuX2NoYW5uZWxcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gXCJvdGhlcl9jaGFubmVsXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn0gLy9lbmQgY2xhc3MgQ29vY2tpZXNGdW5jdGlvbkNsYXNzXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBDb29ja2llc0Z1bmN0aW9uQ2xhc3MoKTtcclxuIiwiaW1wb3J0IEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqIGZyb20gXCIuL0FkVW5pdEZ1bmN0aW9uc0NsYXNzXCI7XHJcbmltcG9ydCBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmogZnJvbSBcIi4vQWRVbml0UHJvcGVydGllc0NsYXNzXCI7XHJcbmltcG9ydCBhZFVuaXRTdHlsZXNDbGFzc09iaiBmcm9tIFwiLi9BZFVuaXRTdHlsZXNDbGFzc1wiO1xyXG5pbXBvcnQgSW5mcmFzcnVjdHVyZUNsYXNzT2JqIGZyb20gXCIuL0luZnJhc3RydWN0dXJlQ2xhc3NcIjtcclxuY29uc3QgeyBMb2cgfSA9IEluZnJhc3J1Y3R1cmVDbGFzc09iajtcclxuXHJcbmxldCB7IGdvb2dsZXRhZywgVGVtcGxhdGVzIH0gPSB3aW5kb3c7XHJcblxyXG5jbGFzcyBNYWluRnVuY3Rpb25DbGFzcyB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmlubmVyV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgIHRoaXMuRGZwX3JlZnJlc2hfYWRUaW1lWG5ldCA9IDcgKiA2MCAqIDEwMDA7XHJcbiAgfVxyXG4gIGdldFN0eWxlVG9wX2Z1bmMoZXZlbnQpIHtcclxuICAgIExvZyhcImdldFN0eWxlVG9wX2Z1bmNcIik7XHJcbiAgICBsZXQgZXZlbnRfc2l6ZSA9IGV2ZW50LnNpemUgKyBcIlwiO1xyXG4gICAgbGV0IGV2ZW50X3cgPSBldmVudF9zaXplLnNwbGl0KFwiLFwiKTsgICAgICAgXHJcbiAgICBpZiAoZXZlbnQuc2l6ZSA9PSBcIjk3MCw5MFwiKSB7XHJcbiAgICAgIGNvbnN0IHRvcF90ZW1wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMudG9wXCIpO1xyXG4gICAgICB0b3BfdGVtcC5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgICBcImhlaWdodDogOTBweDtwYWRkaW5nOiA1cHg7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMzMsIDIzMywgMjMzKTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgbWFyZ2luOiAwIGF1dG87IHdpZHRoOiA5ODBweDttaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7Y2xlYXI6Ym90aDtoZWlnaHQ6IDkwcHggIWltcG9ydGFudDtcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCB3aWR0aF90b3AgPSAoZXZlbnRfd1swXSA9PSBcIjFcIiB8fCBldmVudF9zaXplID09IFwiZmx1aWRcIikgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy50b3BcIikub2Zmc2V0V2lkdGggOiBwYXJzZUludChldmVudF93WzBdLCAxMCk7IFxyXG4gICAgICBkb2
1N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy50b3BcIikuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJjbGVhcjogYm90aDsgbWluLWhlaWdodDogYXV0byAhaW1wb3J0YW50OyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZzogMCAhaW1wb3J0YW50OyB3aWR0aDogXCIgKyBwYXJzZUludCh3aWR0aF90b3ArMTApICsgXCJweCAhaW1wb3J0YW50O1wiICsgXCJtYXJnaW46IDBweCBhdXRvOyBib3JkZXI6IDVweCBzb2xpZCByZ2IoMjMzLCAyMzMsIDIzMyk7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7XCIpO1xyXG4gICAgfVxyXG4gIH1cclxuICB2aWRlb09mZl9mdW5jKCkge1xyXG4gICAgTG9nKFwidmlkZW9PZmZfZnVuY1wiKTtcclxuICAgIGNvbnN0IHZpZGVvX2RhdGEgPSBcIlwiO1xyXG4gICAgbGV0IHZpZGVvX29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInZpZGVvLWNvbnRhaW5lci1mbHA2XCIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWRlb19vbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaWZyYW1lX3ZpZGVvID0gdmlkZW9fb25baV0uY2hpbGRyZW5bMF07XHJcbiAgICAgIGNvbnN0IHZpZGVvX2RhdGEgPSBpZnJhbWVfdmlkZW8uZ2V0QXR0cmlidXRlKFwiZGF0YS1teXVybFwiKTtcclxuICAgICAgaWZyYW1lX3ZpZGVvLnNyYyA9IHZpZGVvX2RhdGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmlkZW9fZGF0YTtcclxuICB9IC8vIGVuZCBvZiB2aWRlb09mZl9mdW5jXHJcbiAgcmVmcmVzaEFsbDgwMF9mdW5jKCkge1xyXG4gICAgTG9nKFwicmVmcmVzaEFsbDgwMF9mdW5jXCIpO1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgbGV0IGpzb25PYmpfZGljdCA9IEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLmpzb25PYmo7XHJcbiAgICBBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5nZXRLZXlWYWx1ZXNfZnVuYygpO1xyXG4gICAgZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoanNvbk9ial9kaWN0KSkge1xyXG4gICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5zZXRUYXJnZXRpbmcoa2V5LCBqc29uT2JqX2RpY3Rba2V5XSk7XHJcbiAgICAgIH1cclxuICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnJlZnJlc2goKTtcclxuICAgICAgLy9nb29nbGV0YWcucHViYWRzKCkuZW5hYmxlU2luZ2xlUmVxdWVzdCgpO1xyXG4gICAgICBnb29nbGV0YWcuZW5hYmxlU2VydmljZXMoKTtcclxuICAgIH0pO1xyXG4gICAgc2V0VGltZW91dChcclxuICAgICAgdGhhdC5yZWZyZXNoQWxsODAwX2Z1bmMsXHJcbiAgICAgIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5yZWZyZXNoQWRUaW1lX2Z1bmMoKVxyXG4gICAgKTtcclxuICB9XHJcbiAgcmVmcmVzaEFsbF9mdW5jKCkge1xyXG4gICAgTG9nKFwicmVmcmVzaEFsbF9mdW5jXCIpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgd2luZG93LlRlbXBsYXRlcy5DbG9zZUNyZWF0aXZlcygpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICBMb2coXCJUZW1wbGF0ZXMuQ2xvc2VDcmVhdGl2ZXM6XCIgKyBleCk7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgLy9nb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKFwiZGN1bmlncHRcIiwgbmV3X3ZpZXcpO1xyXG4gICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnVwZGF0ZUNvcnJlbGF0b3IoKTtcclxuICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAvL2dvb2dsZXRhZy5kZXN0cm95U2xvdHMoKTtcclxuICAgICAgICAgIC8vZ29vZ2xldGFnLmVuYWJsZVNlcnZpY2VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90cyA9IFtdO1xyXG4gICAgICAgIC8vIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfb3plbiA9IFtdO1xyXG5cclxuICAgICAgICAvLyBBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5Db2xsZWN0X2FsbF9iYW5uZXJzX2lkcygpO1xyXG4gICAgICAgIC8vIEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLmdldEtleVZhbHVlc19mdW5jKCk7XHJcbiAgICAgICAgLy8gQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouZGVmaW5lVW5pdHNfZnVuYygpO1xyXG5cclxuICAgICAgICAgIC8vIFBPQyBsYXp5bG9hZCAgICAgXHJcbiAgICAgIC8vICAgICBzd2l0Y2god2luZG93Lmdyb3VwX3N0cikge1xyXG4gICBcclxuICAgICAgLy8gICAgICBjYXNlKHdpbmRvdy50ZXN0X2dyb3VwX3N0ci5MYXp5X3JlbmRlcik6XHJcbiAgICAgIC8vICAgICAgICAvLyBFbmFibGUgd2l0aG91dCBsYXp5IHJlbmRlcmluZy5cclxuICAgICAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcImVuYWJsZUxhenlMb2FkICsgZW5hYmxlU2luZ2xlUmVxdWVzdFwiKTtcclxuICAgICAgLy8gICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5lbmFibGVMYXp5TG9hZCh7ZmV0Y2hNYXJnaW5QZXJjZW50OiAtMX0pO1xyXG4gICAgICAvLyAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmVuYWJsZVNpbmdsZVJlcXVlc3QoKTtcclxuICAgICAgLy8gICAgICBicmVhaztcclxuICAgXHJcbiAgICAgIC8vICAgICAgY2FzZSh3aW5kb3cudGVzdF9ncm91cF9zdHIuTGF6eV9sb2FkKTpcclxuICAgICAgLy8gICAgICAvLyBUbyBlbmFibGUgd2l0aCBkZWZhdWx0cyB1c2UgZ29vZ2xldGFnLnB1YmFkcygpLmVuYWJsZUxhenlMb2FkKCk7XHJcbiAgICAgIC8vICAgICAgLy8gRW5hYmxlIGxhenkgbG9hZGluZyB3aXRoLi4uXHJcbiAgICAgIC8vICAgICAgIGNvbnNvbGUubG9nKFwiZW5hYmxlTGF6eUxvYWRcIik7XHJcbiAgICAgIC8vICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuZW5hYmxlTGF6eUxvYWQoe1xyXG4gICAgICAvLyAgICAgICAgICAvLyBGZXRjaCBzbG90cyB3aXRoaW4gNSB2aWV3cG9ydHMuXHJcbiAgICAgIC8vICAgICAgICAgIGZldGNoTWFyZ2luUGVyY2VudDogNTAwLFxyXG4gICAgICAvLyAgICAgICAgICAvLyBSZW5kZXIgc2xvdHMgd2l0aGluIDIgdmlld3BvcnRzLlxyXG4gICAgICAvLyAgICAgICAgICByZW5kZXJNYXJnaW5QZXJjZW50OiAyMDAsXHJcbiAgICAgIC8vICAgICAgICAgIC8vIERvdWJsZSB0aGUgYWJvdmUgdmFsdWVzIG9uIG1vYmlsZSwgd2hlcmUgdmlld3BvcnRzIGFyZSBzbWFsbGVyXHJcbiAgICAgIC8vICAgICAgICAgIC8vIGFuZCB1c2VycyB0ZW5kIHRvIHNjcm9sbCBmYXN0ZXIuXHJcbiAgICAgIC8vICAgICAgICAgIG1vYmlsZVNjYWxpbmc6IDIuMFxyXG4gICAgICAvLyAgICAgICAgfSk7XHJcbiAgICAgIC8vICAgICAgYnJlYWs7XHJcbiAgIFxyXG4gICAgICAvLyAgICAgIGRlZmF1bHQ6XHJcbiAgICAgIC8vICAgICAgICBjb25zb2xlLmxvZyhcIlNSQVwiKVxyXG4gICAgICAvLyAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmVuYWJsZVNpbmdsZVJlcXVlc3QoKTtcclxuICAgICAgLy8gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyAgfVxyXG4gICAgICAvLyBnb29nbGV0YWcuZW5hYmxlU2VydmljZXMoKTtcclxuICAgICAgLy8gZW5kIG9mIFBPQyBsYXp5bG9hZFxyXG5cclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgIHRoaXMucmVmcmVzaEFsbF9mdW5jLFxyXG4gICAgICB
1BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmoucmVmcmVzaEFkVGltZV9mdW5jKClcclxuICAgICk7XHJcbiAgfVxyXG4gIHJlZnJlc2hPemVuX2Z1bmMoKSB7XHJcbiAgICBsZXQgdGhhdCA9IHRoaXM7XHJcbiAgICBMb2coXCJyZWZyZXNoT3plbl9mdW5jXCIpO1xyXG4gICAgbGV0IG96ZW4gPSAod2luZG93LmRjU2l0ZSA9PSBcInludFwiKSA/IEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLk96ZW5fcmlnaHQgOiBcImFkcy5vemVuLnJpZ2h0XCI7XHJcbiAgICBnb29nbGV0YWcuY21kLnB1c2goZnVuY3Rpb24oKSB7XHJcbiAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKFtBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW296ZW5dXSk7XHJcbiAgICAgIGdvb2dsZXRhZy5lbmFibGVTZXJ2aWNlcygpO1xyXG4gICAgfSk7XHJcbiAgICBzZXRUaW1lb3V0KHRoYXQucmVmcmVzaE96ZW5fZnVuYywgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLnJlZnJlc2hBZE96ZW4pO1xyXG4gIH1cclxuICByZWZyZXNoU3RpY2t5X2Z1bmMoKSB7XHJcbiAgICBsZXQgdGhhdCA9IHRoaXM7XHJcbiAgICBMb2coXCJyZWZyZXNoU3RpY2t5X2Z1bmNcIik7XHJcbiAgICBnb29nbGV0YWcuY21kLnB1c2goZnVuY3Rpb24oKSB7XHJcbiAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKFtBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW0FkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLnN0aWNreV1dKTtcclxuICAgICAgZ29vZ2xldGFnLmVuYWJsZVNlcnZpY2VzKCk7XHJcbiAgICB9KTtcclxuICAgIHNldFRpbWVvdXQodGhhdC5yZWZyZXNoU3RpY2t5X2Z1bmMsIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5yZWZyZXNoU3RpY2t5KTtcclxuICB9XHJcbiAgUmVuYW1lU3RpY2t5KCkge1xyXG4gICAgbGV0IHN0aWNreV9zbG90ID0gXCJhZHMuYmFubmVyXCI7XHJcbiAgICBpZiAod2luZG93Lm5ld01lZGlhID09IFwiRmFsc2VcIikge1xyXG4gICAgICBpZiAod2luZG93LmRjUGF0aC5pbmNsdWRlcyhcIldlYXRoZXJcIikgfHwgd2luZG93LmRjUGF0aC5pbmNsdWRlcyhcIndlYXRoZXJcIikpIHtcclxuICAgICAgICBzdGlja3lfc2xvdCA9IChBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5nZXREZXZpY2VfZnVuYygpID09IFwiQW5kcm9pZFwiKSA/IFwiYWRzLnluZXRfbW9iaWxld2ViX2Jhbm5lcnNfYW5kcm9pZF93ZWF0aGVyX3N0aWNreVwiIDogXCJhZHMueW5ldF9tb2JpbGV3ZWJfYmFubmVyc19pcGhvbmVfd2VhdGhlcl9zdGlja3lcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzdGlja3lfc2xvdCA9IChBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5nZXREZXZpY2VfZnVuYygpID09IFwiQW5kcm9pZFwiKSA/IFwiYWRzLnluZXRfbW9iaWxld2ViX2Jhbm5lcnNfYW5kcm9pZF9tYWdhemluZV9zdGlja3lcIiA6IFwiYWRzLnluZXRfbW9iaWxld2ViX2Jhbm5lcnNfaXBob25lX21hZ2F6aW5lX3N0aWNreVwiO1xyXG4gICAgICB9ICAgICBcclxuICAgIH1cclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5zdGlja3lcIik7XHJcbiAgICBjb25zdCBjYSA9IGVsZW1lbnQuY2hpbGRyZW47XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNhW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2FbaV0pO1xyXG4gICAgfVxyXG4gICAgZWxlbWVudC5pZCA9IHN0aWNreV9zbG90O1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgIFwic3R5bGVcIixcclxuICAgICAgXCJwb3NpdGlvbjpmaXhlZDtib3R0b206MHB4O2xlZnQ6MHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7ZGlzcGxheTotbXMtZmxleGJveDstbXMtZmxleC1wYWNrOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlO3otaW5kZXg6OTk5OTttYXJnaW46MCBhdXRvO2JhY2tncm91bmQtY29sb3I6I2ZmZlwiXHJcbiAgICApO1xyXG4gICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicmVtb3ZlX3N0aWNreVwiKSkge1xyXG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3JlbW92ZV9zdGlja3knKTsgXHJcbiAgICB9XHJcbiAgICBBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5maW5kQWxsRGl2X2Z1bmMoKTtcclxuICAgIFxyXG4gICBzZXRUaW1lb3V0KHRoaXMuRGVmaW5lU3RpY2t5X2Z1bmMoc3RpY2t5X3Nsb3QpLCAxNTAwKTtcclxuICB9XHJcbiAgRGVmaW5lU3RpY2t5X2Z1bmMoaWQpIHtcclxuICAgIExvZyhcIkRlZmluZVN0aWNreV9mdW5jXCIpOyAgIFxyXG4gICAgQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouZGVmaW5lU2xvdHNfZnVuYyhpZCwgW1szMjAsIDUwXSwgWzM2MCwgNTBdXSk7XHJcbiAgICBnb29nbGV0YWcuY21kLnB1c2goZnVuY3Rpb24oKSB7Z29vZ2xldGFnLmRpc3BsYXkoaWQpO30pOyBcclxuICAgIGFkVW5pdFN0eWxlc0NsYXNzT2JqW1wiYWRzLnN0aWNreVwiXShcImFkcy5zdGlja3lcIik7XHJcbiAgfVxyXG4gIHJlZnJlc2hJbnJlYWRzX2Z1bmMoKSB7XHJcbiAgICBjb25zdCB2aXNpYmxlX2JveGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGl2LmFydGljbGVCb2R5SW5yZWFkLnZpc2libGUnKTtcclxuICAgIHZpc2libGVfYm94ZXMuZm9yRWFjaChieCA9PiB7YnguY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpO30pOyBcclxuXHJcbiAgICBnb29nbGV0YWcuY21kLnB1c2goZnVuY3Rpb24oKSB7XHJcbiAgICAgIGNvbnN0IGJveGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGl2LmFydGljbGVCb2R5SW5yZWFkOm5vdCgudmlzaWJsZSknKTtcclxuICAgIFxyXG4gICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uICgpIHsgICBcclxuICAgICAgZm9yIChjb25zdCBib3ggb2YgYm94ZXMpIHtcclxuICAgICAgICBpZiAoIWJveC5jbGFzc0xpc3QuY29udGFpbnMoXCJ2aXNpYmxlXCIpICYmIChib3guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wID49IHdpbmRvdy5pbm5lckhlaWdodCAmJiBib3guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wID4gMCkpIHtcclxuICAgICAgICAgIGlmIChib3guaWQgPT0gXCJhZHMuaW5yZWFkLjFcIikge1xyXG4gICAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkucmVmcmVzaChbd2luZG93LkFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNfYXJ0aWNsZV8yW2JveC5pZF1dKTtcclxuICAgICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmNsZWFyKFt3aW5kb3cuQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c19hcnRpY2xlXzJbYm94LmlkXV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGJveC5pZCA9PSBcImFkcy5pbnJlYWQuMlwiIHx8IGJveC5pZCA9PSBcImFkcy5pbnJlYWQuM1wiKSB7XHJcbiAgICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKFt3aW5kb3cuQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c19hcnRpY2xlXzNbYm94LmlkXV0pO1xyXG4gICAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuY2xlYXIoW3dpbmRvdy5BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzX2FydGljbGVfM1tib3guaWRdXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGxldCBjbG9zZXN0X2RpdiA9IGJveC5jbG9zZXN0KFwiLmFydGljbGVCb2R5SW5yZWFkV3JhcHBlclwiKTsgXHJcbiAgICAgICAgICBsZXQgYm94X2hlaWdodCA9IGJveC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgIGlmIChib3hfaGVpZ2h0IDwgMSkgeyAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGNsb3Nlc3RfZGl2LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwibWluLWhlaWdodDogMDsgaGVpZ2h0OiAwOyB0cmFuc2l0aW9uOiBtaW4taGVpZ2h0IDAuNXNcIik7ICBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjbG9zZXN0X2Rpdi5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIm1pbi1oZWlnaHQ6XCIgKyBib3hfaGVpZ2h0ICsgXCJweDsgdHJhbnNpdGlvbjogbWluLWhlaWdodCAwLjVzXCIpOyAgXHJcbiAgICAgICAgICAgI
1H0gXHJcbiAgICAgICAgICBib3guY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgICAgLy8gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBtYWtlQmFja2dyb3VuZFllbGxvdywgZmFsc2UpO1xyXG4gICAgIH0sIHtcclxuICAgICAgICAgcGFzc2l2ZTogdHJ1ZVxyXG4gICAgIH0pO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIHNldFRpbWVvdXQod2luZG93LnJlZnJlc2hfaW5yZWFkcywgd2luZG93LmFydGljbGVCb2R5QWRzUmVmcmVzaFJhdGUgKiAxMDAwKTtcclxuXHJcbiAgfVxyXG59IC8vIGVuZCBjbGFzcyBNYWluRnVuY3Rpb25DbGFzc1xyXG5jb25zdCBfTWFpbkZ1bmN0aW9uQ2xhc3MgPSBuZXcgTWFpbkZ1bmN0aW9uQ2xhc3MoKTtcclxuZXhwb3J0IGRlZmF1bHQgX01haW5GdW5jdGlvbkNsYXNzO1xyXG53aW5kb3cudmlkZW9fb2ZmID0gX01haW5GdW5jdGlvbkNsYXNzLnZpZGVvT2ZmX2Z1bmMuYmluZChfTWFpbkZ1bmN0aW9uQ2xhc3MpO1xyXG4iLCJpbXBvcnQgQWR1bml0RGNQYXRoQ2xhc3MgZnJvbSBcIi4vQWR1bml0RGNQYXRoQ2xhc3NcIjtcclxuaW1wb3J0IEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzcyBmcm9tIFwiLi9BZFVuaXRBZGRpdGlvbmFsU3R5bGVzQ2xhc3NcIjtcclxuaW1wb3J0IEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzc09iaiBmcm9tIFwiLi9BZFVuaXRBZGRpdGlvbmFsU3R5bGVzQ2xhc3NcIjtcclxuaW1wb3J0IEFkVW5pdFByb3BlcnRpZXNDbGFzc09iaiBmcm9tIFwiLi9BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NcIjtcclxuaW1wb3J0IGFkVW5pdFN0eWxlc0NsYXNzT2JqIGZyb20gXCIuL0FkVW5pdFN0eWxlc0NsYXNzXCI7XHJcbmltcG9ydCBDb29ja2llc0Z1bmN0aW9uQ2xhc3NPYmogZnJvbSBcIi4vQ29vY2tpZXNGdW5jdGlvbkNsYXNzXCI7XHJcbmltcG9ydCBJbmZyYXNydWN0dXJlQ2xhc3NPYmogZnJvbSBcIi4vSW5mcmFzdHJ1Y3R1cmVDbGFzc1wiO1xyXG5pbXBvcnQgTWFpbkZ1bmN0aW9uQ2xhc3NPYmogZnJvbSBcIi4vTWFpbkZ1bmN0aW9uQ2xhc3NcIjtcclxuY29uc3QgeyBMb2cgfSA9IEluZnJhc3J1Y3R1cmVDbGFzc09iajtcclxubGV0IHtcclxuICBnb29nbGV0YWcsXHJcbiAgZ2VuZXJhbF9iYW5uZXJzLFxyXG4gIGFsbF9iYW5uZXJzX2FycmF5LFxyXG4gIGNvbnNvbGVcclxufSA9IHdpbmRvdztcclxuXHJcbmNsYXNzIEFkVW5pdEZ1bmN0aW9uc0NsYXNzIHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuXHJcbiAgICBpZiAod2luZG93LmRjUGF0aC5pbmNsdWRlcyhcIlBuYWlQbHVzXCIpIHx8IHdpbmRvdy5kY1BhdGguaW5jbHVkZXMoXCJsYWlzaGFcIikgfHwgd2luZG93LmRjUGF0aC5pbmNsdWRlcyhcImFyY2hpdGVjdHVyZVwiKSB8fCB3aW5kb3cuZGNQYXRoLmluY2x1ZGVzKFwibWVudGFcIikgfHwgd2luZG93LmRjUGF0aC5pbmNsdWRlcyhcImZhc2hpb25cIikpIHtcclxuICAgICAgICB0aGlzLnluZXRfc2l0ZXMgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnluZXRfc2l0ZXMgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMubmV3TWVkaWEgPSB3aW5kb3cubmV3TWVkaWE7XHJcbiAgICB0aGlzLk96ZW5fODAwID0gKHdpbmRvdy5uZXdNZWRpYSA9PSAnVHJ1ZScpID8gXCJhZHMuc2t5c2NyYXBlclwiIDogXCJhZHMub3plblwiO1xyXG4gICAgdGhpcy5PemVuX3JpZ2h0ID0gKHdpbmRvdy5uZXdNZWRpYSA9PSAnVHJ1ZScpID8gXCJhZHMuc2t5c2NyYXBlclwiIDogXCJhZHMub3plbi5yaWdodFwiO1xyXG4gICAgdGhpcy5PemVuX2xlZnQgPSAod2luZG93Lm5ld01lZGlhID09ICdUcnVlJykgPyBcImFkcy5za3lzY3JhcGVyLmxlZnRcIiA6IFwiYWRzLm96ZW5fbGVmdFwiO1xyXG4gICAgdGhpcy5NYWF2YXJvbl9zbG90ID0gKHdpbmRvdy5uZXdNZWRpYSA9PSAnVHJ1ZScpID8gXCJhZHMuaW50ZXJzdGl0aWFsXCIgOiBcImFkcy5tYWF2YXJvblwiO1xyXG4gICAgdGhpcy5uZXdzcGFwZXIgPSAod2luZG93Lm5ld01lZGlhID09ICdUcnVlJykgPyBcImFkcy50b3AucHJvbW9cIiA6IFwiYWRzLm5ld3NwYXBlclwiO1xyXG4gICAgdGhpcy5PemVuID0gKHdpbmRvdy5uZXdNZWRpYSA9PSAnVHJ1ZScpID8gXCJhZHMuc2t5c2NyYXBlclwiIDogXCJhZHMub3plblwiO1xyXG4gICAgdGhpcy5zdGlja3kgPSAod2luZG93Lm5ld01lZGlhID09ICdUcnVlJykgPyBcImFkcy5iYW5uZXJcIiA6IFwiYWRzLnN0aWNreVwiO1xyXG4gICAgdGhpcy5wYXJlbnRfY2F0ZWdvcnkgPSB3aW5kb3cuUGFyZW50Q2F0ZWdvcnk7XHJcbiAgICB0aGlzLnBsYXRmb3JtX3BhdGggPSBcIi9kZXNrdG9wL1wiO1xyXG4gICAgdGhpcy5kY2NnID0gd2luZG93LmRjQ0c7XHJcbiAgICB0aGlzLm1heGRjcGF0aF9sZXZlbCA9IDI7XHJcbiAgICB0aGlzLm5ld19kY1BhdGggPSBcIlwiO1xyXG4gICAgdGhpcy5kY1BhdGggPSB3aW5kb3cuZGNQYXRoO1xyXG4gICAgdGhpcy5kY1NpdGUgPSB3aW5kb3cuZGNTaXRlO1xyXG4gICAgdGhpcy52aWRlbyA9IHdpbmRvdy52aWRlbztcclxuICAgIHRoaXMuTmV0d29ya051bWJlciA9IFwiNjg3MFwiO1xyXG4gICAgdGhpcy5kY1RhZ3MgPSB3aW5kb3cuZGNUYWdzO1xyXG4gICAgdGhpcy5pbm5lcldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB0aGlzLm5ld0dyaWQgPSB3aW5kb3cuR3JpZFdpZHRoO1xyXG4gICAgdGhpcy5fRVAgPSBcIlwiO1xyXG4gICAgdGhpcy5qc29uT2JqID0ge307XHJcbiAgICB3aW5kb3cuYWxsX2Jhbm5lcnMgPSBcIlwiO1xyXG4gICAgbGV0IGFsbF9iYW5uZXJzX2FycmF5ID0gd2luZG93Lmdsb2JhbF9iYW5uZXJzO1xyXG5cclxuICAgIGZ1bmN0aW9uIGlzSlNPTihhbGxfYmFubmVyc19hcnJheSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChhbGxfYmFubmVyc19hcnJheSAmJiAodHlwZW9mIGFsbF9iYW5uZXJzX2FycmF5ICE9PSBcInN0cmluZ1wiIHx8IGFsbF9iYW5uZXJzX2FycmF5ID09IDApKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBqc29uYWxsX2Jhbm5lcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGFsbF9iYW5uZXJzX2FycmF5KSlcclxuICAgICAgICB3aW5kb3cuYWxsX2Jhbm5lcnMgPSBKU09OLnBhcnNlKGpzb25hbGxfYmFubmVycyk7IC8vIFdSSVRFIERFRkFVTFQgSUYgSVRTIE5PVCBWQUxJRCBKU09OXHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbmFsbF9iYW5uZXJzKSAmJiAhIWFsbF9iYW5uZXJzX2FycmF5O1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGpzb25fUnVuKCkge1xyXG4gICAgICAgIGxldCBpc192YWxpZCA9IGlz
1SlNPTihhbGxfYmFubmVyc19hcnJheSk7XHJcbiAgICAgICAgaWYgKGlzX3ZhbGlkID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgdmFsdWVzIGlmIGpzb24gaW52YWxpZFxyXG4gICAgICAgICAgICBjb25zdCBhcnRpY2xlX2Jhbm5lcnMgPSBgW1t7IFwiaWRcIjogXCJhZHMudG9wXCIsIFwic2l6ZXNcIjogW1sxLCAxXSwgWzEsIDJdLCBbOTcwLCA5MF0sIFs5NzAsIDI1MF0sIFsxMDAwLCAyMDBdLCBbOTcwLCAxMzBdLCBbOTcwLCAzNTBdLCBbOTcwLCAxMDBdLCBbMTE5MiwgMjUwXSwgWzExOTIsIDM1MF0sIFsxMTkyLCA5MF0sIFsxMTkyLCAxMDBdLCBbMTE5MiwgMTMwXV0sIFwiYmFubmVyXCI6IFwiZ2xvYmFsXCIgfV0sXHJcbiAgICAgICAgICAgIFt7IFwiaWRcIjogXCJhZHMuc2t5c2NyYXBlclwiLCBcInNpemVzXCI6IFtbMzAwLCA2MDBdLCBbMzAwLCA2MDFdLCBbMSwgMV1dLCBcImJhbm5lclwiOiBcImdsb2JhbFwiIH1dLCBbeyBcImlkXCI6IFwiYWRzLmludGVyc3RpdGlhbFwiLCBcInNpemVzXCI6IFtbMSwgMV0sIFsyLCAxXSwgWzk3MCwgMjUwXV0sIFwiYmFubmVyXCI6IFwiZ2xvYmFsXCIgfV1dYDtcclxuICAgICAgICAgICAgY29uc3QgaHBfYmFubmVycyA9IGBbW3sgXCJpZFwiOiBcImFkcy50b3BcIiwgXCJzaXplc1wiOiBbWzEsIDFdLCBbMSwgMl0sIFs5NzAsIDkwXSwgWzk3MCwgMjUwXSwgWzEwMDAsIDIwMF0sIFs5NzAsIDEzMF0sIFs5NzAsIDM1MF0sIFs5NzAsIDEwMF0sIFsxMTkyLCAyNTBdLCBbMTE5MiwgMzUwXSwgWzExOTIsIDkwXSwgWzExOTIsIDEwMF0sIFsxMTkyLCAxMzBdXSwgXCJiYW5uZXJcIjogXCJnbG9iYWxcIiB9XSxcclxuICAgICAgICAgICAgW3sgXCJpZFwiOiBcImFkcy5za3lzY3JhcGVyXCIsIFwic2l6ZXNcIjogW1szMDAsIDYwMF0sIFszMDAsIDYwMV0sIFsxLCAxXV0sIFwiYmFubmVyXCI6IFwiZ2xvYmFsXCIgfV0sXHJcbiAgICAgICAgICAgIFt7IFwiaWRcIjogXCJhZHMuaG90Ym94Lm5hdGl2ZS4xXCIsIFwic2l6ZXNcIjogW1sxOTAsIDIwOF0sIFtcImZsdWlkXCJdXSwgXCJiYW5uZXJcIjogXCJuYXRpdmVfcmVhY3RyZW5kZXJcIiB9XSxcclxuICAgICAgICAgICAgW3sgXCJpZFwiOiBcImFkcy5ob3Rib3gubmF0aXZlLjJcIiwgXCJzaXplc1wiOiBbWzE5MCwgMjA4XSwgW1wiZmx1aWRcIl1dLCBcImJhbm5lclwiOiBcIm5hdGl2ZV9yZWFjdHJlbmRlclwiIH1dLFxyXG4gICAgICAgICAgICBbeyBcImlkXCI6IFwiYWRzLmJveC5uYWRsYW4uMVwiLCBcInNpemVzXCI6IFtbMTkwLCAxODhdLCBbXCJmbHVpZFwiXV0sIFwiYmFubmVyXCI6IFwibmF0aXZlXCIgfV0sXHJcbiAgICAgICAgICAgIFt7IFwiaWRcIjogXCJhZHMuYm94Lm5hZGxhbi4yXCIsIFwic2l6ZXNcIjogW1sxOTAsIDE4OF0sIFtcImZsdWlkXCJdXSwgXCJiYW5uZXJcIjogXCJuYXRpdmVcIiB9XSxcclxuICAgICAgICAgICAgW3sgXCJpZFwiOiBcImFkcy5ib3gubmFkbGFuLjNcIiwgXCJzaXplc1wiOiBbWzE5MCwgMTg4XSwgW1wiZmx1aWRcIl1dLCBcImJhbm5lclwiOiBcIm5hdGl2ZVwiIH1dLFxyXG4gICAgICAgICAgICBbeyBcImlkXCI6IFwiYWRzLmJveC5jb250ZW50LjFcIiwgXCJzaXplc1wiOiBbWzE5MCwgMjEwXSwgW1wiZmx1aWRcIl1dLCBcImJhbm5lclwiOiBcIm5hdGl2ZV9yZWFjdHJlbmRlclwiIH1dLFxyXG4gICAgICAgICAgICBbeyBcImlkXCI6IFwiYWRzLmJveC5jb250ZW50LjJcIiwgXCJzaXplc1wiOiBbWzE5MCwgMjEwXSwgW1wiZmx1aWRcIl1dLCBcImJhbm5lclwiOiBcIm5hdGl2ZV9yZWFjdHJlbmRlclwiIH1dLFxyXG4gICAgICAgICAgICBbeyBcImlkXCI6IFwiYWRzLmJveC5jb250ZW50LjNcIiwgXCJzaXplc1wiOiBbWzE5MCwgMjEwXSwgW1wiZmx1aWRcIl1dLCBcImJhbm5lclwiOiBcIm5hdGl2ZV9yZWFjdHJlbmRlclwiIH1dLFxyXG4gICAgICAgICAgICBbeyBcImlkXCI6IFwiYWRzLmJveC5sYWlzaGEuMVwiLCBcInNpemVzXCI6IFtbMjY4LCAzMDVdLCBbXCJmbHVpZFwiXV0sIFwiYmFubmVyXCI6IFwibmF0aXZlX3JlYWN0cmVuZGVyXCIgfV0sXHJcbiAgICAgICAgICAgIFt7IFwiaWRcIjogXCJhZHMuYm94LmxhaXNoYS4yXCIsIFwic2l6ZXNcIjogW1syNjgsIDMwNV0sIFtcImZsdWlkXCJdXSwgXCJiYW5uZXJcIjogXCJuYXRpdmVfcmVhY3RyZW5kZXJcIiB9XSxcclxuICAgICAgICAgICAgW3sgXCJpZFwiOiBcImFkcy5ib3guY29udGVudC40XCIsIFwic2l6ZXNcIjogW1sxOTAsIDIxMF0sIFtcImZsdWlkXCJdXSwgXCJiYW5uZXJcIjogXCJuYXRpdmVfcmVhY3RyZW5kZXJcIiB9XSxcclxuICAgICAgICAgICAgW3sgXCJpZFwiOiBcImFkcy5ib3guY29udGVudC41XCIsIFwic2l6ZXNcIjogW1sxOTAsIDIxMF0sIFtcImZsdWlkXCJdXSwgXCJiYW5uZXJcIjogXCJuYXRpdmVfcmVhY3RyZW5kZXJcIiB9XSxcclxuICAgICAgICAgICAgW3sgXCJpZFwiOiBcImFkcy5ib3guY29udGVudC42XCIsIFwic2l6ZXNcIjogW1sxOTAsIDIxMF0sIFtcImZsdWlkXCJdXSwgXCJiYW5uZXJcIjogXCJuYXRpdmVfcmVhY3RyZW5kZXJcIiB9XV1gO1xyXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeV9iYW5uZXJzID0gYFtbeyBcImlkXCI6IFwiYWRzLnRvcFwiLCAgXCJzaXplc1wiOiBbWzEsIDFdLCBbMSwgMl0sIFs5NzAsIDkwXSwgWzk3MCwgMjUwXSwgWzEwMDAsIDIwMF0sIFs5NzAsIDEzMF0sIFs5NzAsIDM1MF0sIFs5NzAsIDEwMF0sIFsxMTkyLCAyNTBdLCBbMTE5MiwgMzUwXSwgWzExOTIsIDkwXSwgWzExOTIsIDEwMF0sIFsxMTkyLCAxMzBdXSwgXCJmbHVpZFwiOiBmYWxzZSwgXCJvbmVzaXplXCI6IHRydWUgfV0sXHJcbiAgICAgICAgICAgIFt7IFwiaWRcIjogXCJhZHMudG9wLnByb21vXCIsICBcInNpemVzXCI6ICBbMTkyMCwgOTBdLCBcImZsdWlkXCI6IGZhbHNlLCBcIm9uZXNpemVcIjogdHJ1ZSB9XSxcclxuICAgICAgICAgICAgW3sgXCJpZFwiOiBcImFkcy5zYXJnZWxcIiwgIFwic2l6ZXNcIjogIFsxOTIwLCA5MF0sIFwiZmx1aWRcIjogZmFsc2UsIFwib25lc2l6ZVwiOiB0cnVlIH1dLFxyXG4gICAgICAgICAgICBbeyBcImlkXCI6IFwiYWRzLnNreXNjcmFwZXJcIiwgIFwic2l6ZXNcIjogIFtbMzAwLCA2MDBdLCBbMzAwLCA2MDFdXSwgXCJmbHVpZFwiOiBmYWxzZSwgXCJvbm
1VzaXplXCI6IHRydWUgfV0sXHJcbiAgICAgICAgICAgIFt7IFwiaWRcIjogXCJhZHMuaW50ZXJzdGl0aWFsXCIsIFwic2l6ZXNcIjogW1sxLCAxXSwgWzIsIDFdLCBbOTcwLCAyNTBdXSwgXCJiYW5uZXJcIjogXCJnbG9iYWxcIiB9XSxcclxuICAgICAgICAgICAgW3sgXCJpZFwiOiBcImFkcy5zdHJpcC5jaGFubmVsLjFcIiwgIFwic2l6ZXNcIjogIFtbMTkwLCAyMDhdLCBbXCJmbHVpZFwiXV0sIFwiYmFubmVyXCI6IFwibmF0aXZlX2NoYW5uZWxcIiB9XV1gO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRlZmF1bHRfYmFubmVycyA9ICh3aW5kb3cuZGNDRyA9PSBcImhvbWVcIiB8fCB3aW5kb3cuZGNQYXRoID09IFwiMjc3NS5LbmVzc2V0LTY0ODUyLnNpZGVob21wYWdlXCIgfHwgd2luZG93LmRjUGF0aCA9PSBcIjI3NzUuS25lc3NldC0xLkhvbWVcIiB8fCB3aW5kb3cuZGNQYXRoID09IFwiMjc3NS5LbmVzc2V0LTMzMTEzLmFkaXBlZXJpXCIpID8gaHBfYmFubmVycyA6ICh3aW5kb3cuZGNDRyA9PSBcImFydGljbGVcIiA/IGFydGljbGVfYmFubmVycyA6IGNhdGVnb3J5X2Jhbm5lcnMpO1xyXG4gICAgICAgICAgICAvL2xldCBkZWZhdWx0X2Jhbm5lcnMgPSBocF9iYW5uZXJzOyAvLyBjaGFuZ2UgaXQgYWZ0ZXIgZmFzdCBncHQgd2lsbCBiZSBhbHNvIG9uIGNhdGVnb3J5IGFuZCBhcnRpY2xlIHBhZ2VzXHJcbiAgICAgICAgICAgIGxldCBqc29uX2RlZmF1bHRfYmFubmVycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmYXVsdF9iYW5uZXJzKSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hbGxfYmFubmVycyA9IEpTT04ucGFyc2UoanNvbl9kZWZhdWx0X2Jhbm5lcnMpOyAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgfSBcclxuICAgIH1cclxuICAgIGpzb25fUnVuKCk7XHJcblxyXG4gICAgLy8gdHJ5IHtcclxuICAgIC8vICAgbGV0IGpzb25hbGxfYmFubmVycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYWxsX2Jhbm5lcnNfYXJyYXkpKTtcclxuICAgIC8vICAgaWYgKEpTT04ucGFyc2UoanNvbmFsbF9iYW5uZXJzKSAmJiAhIWFsbF9iYW5uZXJzX2FycmF5KSB7XHJcbiAgICAvLyAgICAgdGhpcy5hbGxfYmFubmVycyA9IEpTT04ucGFyc2UoanNvbmFsbF9iYW5uZXJzKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSBjYXRjaCAoZSkge1xyXG4gICAgICBcclxuICAgIC8vIH1cclxuXHJcblxyXG4gICAgdGhpcy5nZW5lcmFsX2Jhbm5lcnMgPSB3aW5kb3cuZ2VuZXJhbF9iYW5uZXJzO1xyXG4gICAgbGV0IGpzb25hbGxfZ2JfYmFubmVycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2VuZXJhbF9iYW5uZXJzKSlcclxuICAgIHRoaXMuYWxsX2diX2Jhbm5lcnMgPSBKU09OLnBhcnNlKGpzb25hbGxfZ2JfYmFubmVycyk7XHJcbiAgICB3aW5kb3cuYWxsX2Jhbm5lcnNfaWRzID0gW107XHJcbiAgICAvL3RoaXMuYWxsX2diX2Jhbm5lcnNfaWRzID0gW107XHJcbiAgfSAvL2VuZCBjb25zdHJ1Y3RvclxyXG4gIEdldF9iYW5uZXJzX29iaihiYW5uZXJzX2pzb24pIHtcclxuICAgICAgT2JqZWN0LmtleXMoYmFubmVyc19qc29uKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgd2luZG93LmFsbF9iYW5uZXJzX2lkcy5wdXNoKGJhbm5lcnNfanNvbltrZXldWzBdLmlkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBDb2xsZWN0X2FsbF9iYW5uZXJzX2lkcygpIHtcclxuICAgIHRoaXMuR2V0X2Jhbm5lcnNfb2JqKHdpbmRvdy5hbGxfYmFubmVycyk7XHJcbiAgICB0aGlzLkdldF9iYW5uZXJzX29iaih0aGlzLmFsbF9nYl9iYW5uZXJzKTtcclxuICB9XHJcbiAgQ2hhbmdlX3Byb21vX3BsYWNlKCkge1xyXG4gICAgbGV0IGJhbm5lcl9pZHMgPSB3aW5kb3cuYWxsX2Jhbm5lcnNfaWRzO1xyXG4gICAgYmFubmVyX2lkcy5mb3JFYWNoKGZ1bmN0aW9uKGJhbm5lcl9pZCkge1xyXG4gICAgICBpZiAod2luZG93LmlzTW9iaWxlMSA9PSBmYWxzZSAmJiBiYW5uZXJfaWQgPT0gXCJhZHMudG9wLnByb21vXCIgJiYgKHdpbmRvdy5HcmlkV2lkdGggPT0gMTI0MCkgKSB7XHJcbiAgICAgICAgICBpZiAoYmFubmVyX2lkcy5maWx0ZXIoeCA9PiB4LmluY2x1ZGVzKFwiYWRzLnRvcFwiKSkpIGFkVW5pdFN0eWxlc0NsYXNzT2JqW1wicHJvbW9fY2xhc3NcIl0oXCJwcm9tb19jbGFzc1wiKTsgXHJcbiAgICAgIH1cclxuICAgICB9KTsgIFxyXG4gIH1cclxuICBBZGREaXZzKCkge1xyXG4gICAgICBsZXQgYmFubmVycyA9IHtcclxuICAgICAgICBcImFkcy5kb3VibGVzdHJpcG9uX2Rlc2t0b3AuMVwiIDogXCJhZHMuZG91Ymxlc3RyaXBvbi4xXCIsXHJcbiAgICAgICAgXCJhZHMuaXZvcnlfZGVza3RvcC4xXCIgOiBcImFkcy5pdm9yeS4xXCIsXHJcbiAgICAgICAgXCJhZHMuNTg2eDg4LjFcIiA6IFwiYWRzLnN0cmlwLmNoYW5uZWwuMVwiLFxyXG4gICAgICAgIFwiYWRzLjQ5MHg4OC4xXCIgOiBcImFkcy5zdHJpcC4xXCIsXHJcbiAgICAgICAgXCJhZHMuMzAweDYwMC4xXCIgOiBcImFkcy5iaWdib3guMVwiLFxyXG4gICAgICAgIFwiYWRzLjMwMHgyNTAuMVwiIDogXCJhZHMuYm94LjFcIixcclxuICAgICAgICBcImFkcy4zMDB4MjUwLjJcIiA6IFwiYWRzLmJveC4yXCIsXHJcbiAgICAgICAgXCJhZHMuMzAweDI1MC4zXCIgOiBcImFkcy5ib3guM1wiLFxyXG4gICAgICAgIFwiYWRzLjMwMHgyNTAuNFwiIDogXCJhZHMuYm94LjRcIixcclxuICAgICAgICBcImFkcy45ODB4OTAuMVwiIDogXCJhZHMuYm90dG9tYmFubmVyLjFcIixcclxuICAgICAgICBcImFkcy50b3BzdHJpcG9uX2Rlc2t0b3AuMVwiIDogXCJhZHMudG9wc3RyaXBvbi4xXCIsXHJcbiAgICAgICAgXCJhZHMuYm90dG9tc3RyaXBvbl9kZXNrdG9wLjFcIiA6IFwiYWRzLmJvdHRvbXN0cmlwb24uMVwiLFxyXG4gICAgICAgIFwiYWRzLnJpZ2h0c3RyaXBvbl9kZXNrdG9wLjFcIiA6IFwiYWRzLnJpZ2h0c3RyaXBvbi4xXCIsXHJcbiAgICAgIH1cclxuICBcclxuICAgICAgZnVuY3Rpb24gaW5zZXJ0QWZ0ZXIocmVmZXJlbmNlTm9kZSwgbmV3Tm9kZSkge1xyXG4gICAgICByZWZlcmVuY2VOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICB9ICAgICBcclxuICAgICAgICAgICAgZm9yIChsZXQgayBpbiBiYW5uZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFubmVycy5oYXNPd25Qcm9wZXJ0eShrKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrKSAgIT0gbnVsbCB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrKSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5pZCA9IGJhbm5lcnNba107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5zZXRB
1dHRyaWJ1dGUoXCJjbGFzc1wiLCBcImdlbmVyYWxfYmFubmVyX2FkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1hZHVuaXRcIiwgYmFubmVyc1trXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLW9sZFwiLCBkaXYuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUucGFkZGluZyA9IGRpdi5zdHlsZS5wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QWZ0ZXIoZGl2LCBlbCk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnJlbW92ZSgpOyAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgXHJcbiAgfVxyXG4gIGdldEtleVZhbHVlc19mdW5jKCkge1xyXG4gICAgLy9nZXRLZXlWYWx1ZXNfZnVuYyBmdW5jdGlvbiBjcmVhdGUga2V5IHZhbHVlIE9iamVjdC5cclxuICAgIC8vVGhpcyBvYmplY3QgY29udGFpbiBhbGwga2V5cyB0aGF0IGhhcyBiZWVuIHVzZWQgaW4gREZQIGluIGFpbSB0byBkaXNwbGF5IGdwdFxyXG4gICAgLy9UaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZnJvbSBhbGwgbWFpbiBzY3JpcHRzIHRoYXQgc3RhcnQgd2l0aCAnZ3B0X3NjaXB0Xy4uLidcclxuICAgIGxldCBfRFkgPSBcIlwiO1xyXG4gICAgbGV0IHN0YWdlID0gXCJcIjtcclxuXHJcbiAgICAvL1BPQyBsYXp5bG9hZFxyXG4gICAgdGhpcy5qc29uT2JqW1widGVzdFwiXSA9IFwibGF6eWxvYWRcIjtcclxuICAgIGlmICh3aW5kb3cuZ3B0X2dyb3VwX25hbWUgIT0gdW5kZWZpbmVkKSB0aGlzLmpzb25PYmpbXCJHUFRfZ3JvdXBcIl0gPSB3aW5kb3cuZ3B0X2dyb3VwX25hbWU7XHJcbiAgICAvLyBlbmQgb2YgUE9DIGxhenlsb2FkXHJcblxyXG4gICAgaWYgKHdpbmRvdy5kY1NpdGUgPT0gXCJ5bnRcIiAmJiB3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHggKSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5MDBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKScpLm1hdGNoZXMpIHtcclxuICAgICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJykubWF0Y2hlcykge1xyXG4gICAgICAgIHRoaXMuanNvbk9ialtcIkRhcmtfTW9kZVwiXSA9IFwib25cIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuanNvbk9ialtcIkRhcmtfTW9kZVwiXSA9IFwib2ZmXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIHdpbmRvdy5kY0ZvcnVtSUQgJiYgd2luZG93LmRjRm9ydW1JRCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuanNvbk9ialtcInluZmlcIl0gPSB3aW5kb3cuZGNGb3J1bUlEO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5qc29uT2JqW1wieW5maVwiXSA9IFwiMFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIHdpbmRvdy5kY0tleXdvcmQgJiYgd2luZG93LmRjS2V5d29yZCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuanNvbk9ialtcImRja3dcIl0gPSB3aW5kb3cuZGNLZXl3b3JkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5qc29uT2JqW1wiZGNrd1wiXSA9IFwiMFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIHdpbmRvdy5kY0NhdGVnb3J5ICYmIHdpbmRvdy5kY0NhdGVnb3J5ICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5qc29uT2JqW1wibmdjaFwiXSA9IHdpbmRvdy5kY0NhdGVnb3J5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5qc29uT2JqW1wibmdjaFwiXSA9IFwiMFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiB3aW5kb3cuZGNDYXRlZ29yeUlEICYmXHJcbiAgICAgIHdpbmRvdy5kY0NhdGVnb3J5SUQgIT0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuanNvbk9ialtcInlyY2FcIl0gPSB3aW5kb3cuZGNDYXRlZ29yeUlEO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5qc29uT2JqW1wieXJjYVwiXSA9IFwiMFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIHdpbmRvdy5kY1RhZ3MgJiYgd2luZG93LmRjVGFncyAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuanNvbk9ialtcImRjVGFnXCJdID0gd2luZG93LmRjVGFncztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuanNvbk9ialtcImRjVGFnXCJdID0gXCIwXCI7XHJcbiAgICB9XHJcbiAgICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgdGhpcy5kY1BhdGggJiYgdGhpcy5kY1BhdGggIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmpzb25PYmpbXCJ5bmNoXCJdID0gdGhpcy5kY1BhdGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmpzb25PYmpbXCJ5bmNoXCJdID0gXCIwXCI7XHJcbiAgICB9XHJcbiAgICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgdGhpcy5kY1BhdGggJiYgdGhpcy5kY1BhdGggIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmpzb25PYmpbXCJkY1BhdGhcIl0gPSB0aGlzLmRjUGF0aDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuanNvbk9ialtcImRjUGF0aFwiXSA9IFwiMFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIHdpbmRvdy5kY0NHICYmIHdpbmRvdy5kY0NHICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5qc29uT2JqW1wiZGNjZ1wiXSA9IHdpbmRvdy5kY0NHO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5qc29uT2JqW1wiZGNjZ1wiXSA9IFwiMFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIHdpbmRvdy5kY1ZpZGVvICYmIHdpbmRvdy5kY1ZpZGVvICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5qc29uT2JqW1wieW52Y1wiXSA9IHdpbmRvdy5kY1ZpZGVvO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5qc29uT2JqW1wieW52Y1wiXSA9IFwiMFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiB3aW5kb3cuZGN
1Db250ZW50SUQgJiZcclxuICAgICAgd2luZG93LmRjQ29udGVudElEICE9IG51bGxcclxuICAgICkge1xyXG4gICAgICB0aGlzLmpzb25PYmpbXCJ5bmNkXCJdID0gd2luZG93LmRjQ29udGVudElEO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5qc29uT2JqW1wieWRcIl0gPSBcIjBcIjtcclxuICAgIH1cclxuICAgIHRoaXMuanNvbk9ialtcImNhbGxUeXBlXCJdID0gXCJHUFRcIjtcclxuICAgIHN0YWdlID0gdGhpcy5nZXRVcmxWYXJzX2Z1bmMoXCJkY1N0YWdlXCIpO1xyXG4gICAgaWYgKHN0YWdlKSB0aGlzLmpzb25PYmpbXCJ5bnN0XCJdID0gc3RhZ2U7XHJcbiAgICBpZiAoc3RhZ2UpIHRoaXMuanNvbk9ialtcImRjU3RhZ2VcIl0gPSBzdGFnZTtcclxuICAgIC8vdGhpcy5yZWFkRFlfZnVuYygpOyAvL1JVTiBEWSBGVU5DVElPTlxyXG4gICAgX0RZID0gbG9jYWxTdG9yYWdlLl9keTsgLy9HRVQgREFUQSBGUk9NIERZIFNUT1JFRCBJTiBMT0NBTFNUT1JBR0VcclxuICAgIGlmIChfRFkpIHtcclxuICAgICAgX0RZID0gX0RZLnNwbGl0KFwiKlwiKVswXTtcclxuICAgICAgaWYgKF9EWS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgX0RZID0gX0RZLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICB0aGlzLmpzb25PYmpbXCJEWUFcIl0gPSBfRFk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBfRVAgPSB0aGlzLnJlYWRFeHBvc2Vib3hfZnVuYygpO1xyXG4gICAgaWYgKF9FUCkge1xyXG4gICAgICBfRVAgPSBfRVAuc3BsaXQoXCIqXCIpWzBdO1xyXG4gICAgICBpZiAoX0VQLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBfRVAgPSBfRVAuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIHRoaXMuanNvbk9ialtcIkV4cG9zZWJveFwiXSA9IF9FUDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgX0VQID0gQ29vY2tpZXNGdW5jdGlvbkNsYXNzT2JqLnJlYWRDb29raWVfZnVuYyhcIlRNX0RDQ0dyb3VwXCIpO1xyXG4gICAgaWYgKF9FUCkge1xyXG4gICAgICBfRVAgPSBfRVAuc3BsaXQoXCIqXCIpWzBdO1xyXG4gICAgICBpZiAoX0VQLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBfRVAgPSBfRVAuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIHRoaXMuanNvbk9ialtcIkRDQ0dyb3VwXCJdID0gX0VQO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmpzb25PYmpbXCJkY3NjaFwiXSA9IFwibnVsbFwiO1xyXG4gICAgdGhpcy5qc29uT2JqW1wiZGNjd1wiXSA9IFwiXCIgKyBcImhpZ2hfcmVzXCIgKyBcIlwiO1xyXG4gICAgdGhpcy5qc29uT2JqW1wiZGNzd1wiXSA9IFwiXCIgKyBzY3JlZW4ud2lkdGggKyBcIlwiO1xyXG5cclxuICAgIENvb2NraWVzRnVuY3Rpb25DbGFzc09iai5zZXRWaWV3Q29va2llc19mdW5jKCk7IC8vIG9sZFxyXG4gICAgdGhpcy5kY0dldE5leHRWaWV3X2Z1bmMoQ29vY2tpZXNGdW5jdGlvbkNsYXNzT2JqLnZpZXdDb29ja2llc19mdW5jKCkpOyAvLyBuZXdcclxuICAgIFxyXG4gICAgaWYgKEluZnJhc3J1Y3R1cmVDbGFzc09iai5TaXRlID09IFwiaXNfODAwXCIpIHtcclxuICAgICAgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EQ3ZpZXcgJiYgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRDdmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EQ3ZpZXcgPD0gNSkge1xyXG4gICAgICAgICAgdGhpcy5qc29uT2JqW1wiZGN1bmlncHRcIl0gPSBcInZpZXdcIiArIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EQ3ZpZXc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuanNvbk9ialtcImRjdW5pZ3B0XCJdID0gXCJ2aWV3XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRDdmlldyAmJiBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouREN2aWV3ICE9IG51bGwpIHtcclxuICAgICAgICBpZiAod2luZG93LmRjQ0cgPT0gXCJob21lXCIgfHwgd2luZG93LmRjUGF0aCA9PSBcIjI3NzUuS25lc3NldC02NDg1Mi5zaWRlaG9tcGFnZVwiIHx8IHdpbmRvdy5kY1BhdGggPT0gXCIyNzc1LktuZXNzZXQtMS5Ib21lXCIgfHwgd2luZG93LmRjUGF0aCA9PSBcIjI3NzUuS25lc3NldC0zMzExMy5hZGlwZWVyaVwiIHx8IHdpbmRvdy5kY1BhdGggPT0gXCIxLkNlbnRyYWxEZXNrLTEuSG9tZVwiKSB7XHJcbiAgICAgICAgICBpZiAoQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRDdmlldyA8PSA1KSB7XHJcbiAgICAgICAgICAgIHRoaXMuanNvbk9ialtcImRjdW5pZ3B0XCJdID0gXCJ2aWV3XCIgKyBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouREN2aWV3O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5qc29uT2JqW1wiZGN1bmlncHRcIl0gPSBcInZpZXdcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EQ3ZpZXcgPD0gNSkge1xyXG4gICAgICAgICAgICB0aGlzLmpzb25PYmpbXCJkY3VuaWdwdFwiXSA9IFwidmlld1wiICsgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRDdmlldztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuanNvbk9ialtcImRjdW5pZ3B0XCJdID0gXCJ2aWV3XCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmpzb25PYmpbXCJjaGFyc2V0XCJdID0gXCJVVEYtOFwiO1xyXG4gIH0gLy8gZW5kIG9mIGdldEtleVZhbHVlc19mdW5jXHJcblxyXG4gIHJlYWRFeHBvc2Vib3hfZnVuYygpIHtcclxuICAgIC8vcmVhZEV4cG9zZWJveF9mdW5jIGNhbGwgZnJvbSBmdW5jdGlvbiBnZXRLZXlWYWx1ZXNfZnVuYygpXHJcbiAgICAvL1RoZSBFWFBPU0VCT1ggc2VydmVyIHVzZXMgb3VyIGZ1bmN0aW9uIHRoYXQgcHJlc2VydmVzIHRoZSBzdWJtaXNzaW9uIHRpbWUgb2YgY2F0ZWdvcmllcyBmcm9tIHRoZWlyIHNlcnZlci5cclxuICAgIExvZyhcInJlYWRFeHBvc2Vib3hfZnVuY1wiKTtcclxuICAgIGxldCB0aW1lX25vdyA9ICtuZXcgRGF0ZSgpO1xyXG4gICAgaWYgKFxyXG4gICAgICBsb2NhbFN0b3JhZ2UuX0V4cG9zZWJveF9leHBpcmUgIT0gbnVsbCB8fFxyXG4gICAgICBsb2NhbFN0b3JhZ2UuX0V4cG9zZWJveF9leHBpcmUgIT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgaWYgKHRpbWVfbm93ID4gK2xvY2FsU3RvcmFnZS5fRXhwb3NlYm94X2V4cGlyZSkge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5fZXhwbyA9IFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgbG9jYWxTdG9yYWdlLl9leHBvICE9IG51bGwgJiZcclxuICAgICAgbG9jYWxTdG9yYWdlLl9leHBvICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICBsb2NhbFN0b3JhZ2UuX2V4cG8gIT0gXCJcIlxyXG4gICAgKSB7XHJcbiAgICAgIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5FeHBvID0gbG9jYWxTdG9yYWdlLl9leHBvO1xyXG4gICAgICByZXR1cm4gQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkV4cG87XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIERFTEVURSBJVCA/XHJcbiAgZmluZEFsbERpdl9mdW5jKCkge1xyXG4gICAgLy9maW5kQWxsRGl2X2Z1bmMgZnVuY3Rpb24gdXNlIG1hbnkgdGltZXMgaW4gYWxsIHNjcmlwdHMgaXQgZ2V0IGFsbCBhbGVtZW50IGZvciB0aGUgZ3B0LCBpdCBuZWVkIHRvIHJ1biBvbmx5IGFmdGVyIHRoZSBodG1sIGJ1aWxkLi4gdGhlcmVmb3IgdGhlcmUgaXNcclxuICAgIC8vYW5vdGhlciBmdW5jdGlvbiBpbiBJbmZyYXN0cnVjdHVyZUNsYXNzIHRoYXQgdXNpbmcgYXdhaXQgdG8gZ2V0IGFsbCBlbGVtZW50XHJcbiAgICB2YXIgZWxlbXMgPSBJbmZyYXNydWN0dXJlQ2xhc3NPYmouYWRzRWxlbWVudHM7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1tlbGVtc1tpXS5pZF0gPSBlbGVtc1tpXTtcclxuICAgIH1cclxuICB9XHJcbiAgZGNHZXROZXh0Vmlld19mdW5jKGtleSkge1xyXG4gICAgLy9kY0dldE5leHRWaWV3X2Z1bmMgZnVuY3Rpb24gZ2V0IGtleSBmcm9tIHRoZSB2aWV3Q29vY2tpZXNfZnVuYyBhbmQgdXNlIGl0IHRvIHNldCB0aGUgREN2aWV3ICh0aGUgdmlldylcclxuICAgIC8vY29uc29sZS5sb2coJ2RjR2V0TmV4dFZpZXdfZnVuYycpXHJcbiAgICBsZXQgZGNEYXRlID0gbmV3IERhdGUoXHJcbiAgICAgIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgMTAgKiA2MCAqIDYwICogMTAwMFxyXG4gICAgKS5nZXRVVENEYXRlKCk7XHJcbiAgICBsZXQgdmlld3MgPSB7fTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZpZXdzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuX2RjVmlld3MpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB2aWV3cyA9IHt9O1xyXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIl9kY1ZpZXdzXCIpO1xyXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIl9kY0RhdGVcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoZGNEYXRlICE9IGxvY2FsU3RvcmFnZS5fZGNEYXRlKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5fZGNEYXRlID0gZGNEYXRlO1xyXG4gICAgICB2aWV3cyA9IHt9O1xyXG4gICAgfVxyXG4gICAgdmlld3Nba2V5XSA9PSB1bmRlZmluZWQgPyAodmlld3Nba2V5XSA9IDEpIDogdmlld3Nba2V5XSsrO1xyXG4gICAgbG9jYWxTdG9yYWdlLl9kY1ZpZXdzID0gSlNPTi5zdHJpbmdpZnkodmlld3MpO1xyXG4gICAgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRDdmlldyA9IHZpZXdzW2tleV07XHJcbiAgICBpZiAoQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRDdmlldyA+IDUpIHtcclxuICAgICAgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRDdmlldyA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybi
1BBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouREN2aWV3O1xyXG4gIH1cclxuICBnZXREY1BhdGhfZnVuYyhkY19wYXRoKSB7XHJcbiAgICAvLyBnZXQgd2luZG93cyBkY1BhdGggYW5kIHJldHVyblxyXG4gICAgTG9nKFwiZ2V0RGNQYXRoX2Z1bmNcIik7XHJcbiAgICBsZXQgdGhpc19wYXRoID0gZGNfcGF0aDtcclxuICAgIGxldCBwYXRjaF9hcnJheSA9IHRoaXNfcGF0aC5zcGxpdChcIi1cIik7XHJcbiAgICBsZXQgdGVtcF9wYXRoID0gcGF0Y2hfYXJyYXlbMF0uaW5kZXhPZihcIi5cIik7XHJcbiAgICBsZXQgbmV3X2RjUGF0aCA9IHBhdGNoX2FycmF5WzBdLnN1YnN0cmluZyh0ZW1wX3BhdGgpO1xyXG4gICAgcmV0dXJuIG5ld19kY1BhdGg7XHJcbiAgfVxyXG4gIGdldFVybFZhcnNfZnVuYyhkY1N0YWdlX3N0cmluZykge1xyXG4gICAgTG9nKFwiZ2V0VXJsVmFyc19mdW5jXCIpO1xyXG4gICAgY29uc3QgdmFyc19saXN0ID0gW107XHJcbiAgICBsZXQgaGFzaF9saXN0ID0gW107XHJcbiAgICBsZXQgaGFzaGVzID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc2xpY2Uod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihcIj9cIikgKyAxKS5zcGxpdChcIiZcIik7XHJcbiAgICBsZXQgaGFzaGVzTGVuID0gaGFzaGVzLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFzaGVzTGVuOyBpKyspIHtcclxuICAgICAgaGFzaF9saXN0ID0gaGFzaGVzW2ldLnNwbGl0KFwiPVwiKTtcclxuICAgICAgdmFyc19saXN0LnB1c2goaGFzaF9saXN0WzBdKTtcclxuICAgICAgdmFyc19saXN0W2hhc2hfbGlzdFswXV0gPSBoYXNoX2xpc3RbMV07XHJcbiAgICB9XHJcbiAgICBpZiAoZGNTdGFnZV9zdHJpbmcpIHtcclxuICAgICAgcmV0dXJuIHZhcnNfbGlzdFtkY1N0YWdlX3N0cmluZ107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdmFyc19saXN0O1xyXG4gICAgfVxyXG4gIH1cclxuICBhZFVuaXRDYWxsX2Z1bmMoQWRkQWRzKSB7XHJcbiAgICAvL2FkVW5pdENhbGxYbmV0X2Z1bmMgY2FsbCBmcm9tIGRlZmluZVNsb3RzX2Z1bmNcclxuICAgIC8vVGhlIGZ1bmN0aW9uIGNyZWF0ZSBhZFVuaXRQYXRoIGZvciBnb29nbGV0YWcuZGVmaW5lU2xvdFxyXG4gICAgY29uc3Qgc2l0ZSA9ICh3aW5kb3cuZGNQYXRoLmluY2x1ZGVzKFwiUG5haVBsdXNcIikpID8gXCJwcGx1c1wiIDogXCJ5bmV0XCI7XHJcbiAgICBsZXQgYWRfdW5pdF9wYXRoID0gXCIvXCI7XHJcbiAgICBsZXQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG4gICAgLy9jb25zdCBkY1BhdGNoQXJyYXkgPSB0aGlzLmRjUGF0aC5zcGxpdChcIi1cIik7XHJcbiAgICAvL2NvbnN0IGxlbiA9IGRjUGF0Y2hBcnJheS5sZW5ndGggPCB0aGlzLm1heGRjcGF0aF9sZXZlbCA/IGRjUGF0Y2hBcnJheS5sZW5ndGggOiB0aGlzLm1heGRjcGF0aF9sZXZlbDtcclxuICAgIGNvbnN0IGF1ID0gQWRkQWRzLnN1YnN0cmluZyg0KTtcclxuICAgIGxldCBtb2JpbGVfcGF0aCA9ICh0aGlzLmdldERldmljZV9mdW5jKCkgPT0gXCJBbmRyb2lkXCIpID8gXCIvbW9iaWxld2ViX2FuZHJvaWQvXCIgOiBcIi9tb2JpbGV3ZWJfaXBob25lL1wiO1xyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IFwiNzY3XCIgJiYgd2luZG93LmRjUGF0aC5pbmNsdWRlcyhcIlBuYWlQbHVzXCIpKSB7XHJcbiAgICAgIGlmIChhdSA9PSBcImludGVyc3RpdGlhbC5pbm5lclwiICYmIHdpbmRvdy5kY1BhdGggPT0gJzExMjExLlBuYWlQbHVzLTEuSG9tZScgJiYgKCh3aW5kb3cucGVyZm9ybWFuY2UgJiYgd2luZG93LnBlcmZvcm1hbmNlLm5hdmlnYXRpb24udHlwZSA9PSB3aW5kb3cucGVyZm9ybWFuY2UubmF2aWdhdGlvbi5UWVBFX0JBQ0tfRk9SV0FSRCkgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0JBQ0tfSE9NRV9DTElDS0VEJykpKSB7IFxyXG4gICAgICAgIGFkX3VuaXRfcGF0aCA9IHBhdGguam9pbihhZF91bml0X3BhdGgsIHRoaXMuTmV0d29ya051bWJlciwgc2l0ZSArIG1vYmlsZV9wYXRoICsgXCJpbnRlcnN0aXRpYWwuYmFja2hvbWUvY2VudHJhbFwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhZF91bml0X3BhdGggPSBwYXRoLmpvaW4oYWRfdW5pdF9wYXRoLCB0aGlzLk5ldHdvcmtOdW1iZXIsIHNpdGUgKyBtb2JpbGVfcGF0aCArIGF1ICsgXCIvXCIgKyBBZHVuaXREY1BhdGhDbGFzcy5nZXQodGhpcy5kY1BhdGgpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYWRfdW5pdF9wYXRoO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm5ld01lZGlhID09ICdUcnVlJykgeyAgICAgIFxyXG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+PSBcIjc2N1wiKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kY2NnID09IFwiaG9tZVwiIHx8IHdpbmRvdy5kY1BhdGggPT0gXCIyNzc1LktuZXNzZXQtMS5Ib21lXCIgfHx3aW5kb3cuZGNQYXRoID09IFwiMjc3NS5LbmVzc2V0LTMzMTEzLmFkaXBlZXJpXCJcclxuICAgICAgICAgICB8fCB3aW5kb3cuZGNQYXRoID09IFwiMS5DZW50cmFsRGVzay0xLkhvbWVcIiB8fCB3aW5kb3cuZGNQYXRoLmluY2x1ZGVzKFwiOC5DZW50cmFsXCIpKSB7XHJcbiAgICAgICAgICAgIGxldCBncm91cHN0ciA9ICh3aW5kb3cuZ3B0X2dyb3VwX25hbWUgJiYgd2luZG93LmdwdF9ncm91cF9uYW1lICE9IFwiXCIpID8gXCIvXCIgKyB3aW5kb3cuZ3B0X2dyb3VwX25hbWU6IFwiXCI7XHJcbiAgICAgICAgICAgIGFkX3VuaXRfcGF0aCA9IHBhdGguam9pbihhZF91bml0X3BhdGgsIHRoaXMuTmV0d29ya051bWJlciwgc2l0ZSArIHRoaXMucGxhdGZvcm1fcGF0aCArIGF1ICsgXCIvY2VudHJhbFwiICsgZ3JvdXBzdHIpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWRfdW5pdF9wYXRoO1xyXG4gICAgICAgICAgLy8gdXNlIHRoaXMgZm9yIG5vdCBob21lIGNoYW5uZWxzIHRlc3QgLSBmb3IgdGVzdGluZyBjb29ja2llcyBzdHIgYW5kIGlmIGdyb3VwX3N0ciBleGlzdCAtIENFTlRSQUwgVU5JVCBURVNUIE9OTFlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuZGNQYXRoLmluY2x1ZGVzKFwid2VhdGhlclwiKSB8fCB3aW5kb3cuZGNQYXRoLmluY2x1ZGVzKFwiV2VhdGhlclwiKSkgeyAgXHJcbiAgICAgICAgICAgICAgYWRfdW5pdF9wYXRoID0gcGF0aC5qb2luKGFkX3VuaXRfcGF0aCwgdGhpcy5OZXR3b3JrTnVtYmVyLCBzaXRlICsgdGhpcy5wbGF0Zm9ybV9wYXRoICsgYXUgKyBcIi93ZWF0aGVyXCIpOyAgICAgICBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBhZF91bml0X3BhdGggPSBwYXRoLmpvaW4oYWRfdW5pdF9wYXRoLCB0aGlzLk5ldHdvcmtOdW1iZXIsIHNpdGUgKyB0aGlzLnBsYXRmb3JtX3BhdGggKyBhdSArIFwiL1wiICsgQWR1bml0RGNQYXRoQ2xhc3MuZ2V0KHRoaXMuZGNQYXRoKSk7XHJcbiAgICAgICAgICAgI
1H0gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIGFkX3VuaXRfcGF0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgfSBcclxuICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IFwiNzY3XCIpIHtcclxuICAgICAgICBpZiAod2luZG93LmRjUGF0aC5pbmNsdWRlcyhcIndlYXRoZXJcIikgfHwgd2luZG93LmRjUGF0aC5pbmNsdWRlcyhcIldlYXRoZXJcIikpIHsgICAgICAgICBcclxuICAgICAgICAgIGFkX3VuaXRfcGF0aCA9IHBhdGguam9pbihhZF91bml0X3BhdGgsIHRoaXMuTmV0d29ya051bWJlciwgc2l0ZSArIG1vYmlsZV9wYXRoICsgYXUgKyBcIi93ZWF0aGVyXCIpO1xyXG4gICAgICAgICAgcmV0dXJuIGFkX3VuaXRfcGF0aDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHdpbmRvdy55bmV0X3Jlc3BvbnNpdmVfc2l0ZXMgJiYgYXUgPT0gXCJpbnRlcnN0aXRpYWwuaW5uZXJcIiAmJiB3aW5kb3cuZGNQYXRoLmluY2x1ZGVzKFwiLTEuSG9tZVwiKSAmJiB3aW5kb3cuZGNDRyAhPSBcImFydGljbGVcIiAmJiAoKHdpbmRvdy5wZXJmb3JtYW5jZSAmJiB3aW5kb3cucGVyZm9ybWFuY2UubmF2aWdhdGlvbi50eXBlID09IHdpbmRvdy5wZXJmb3JtYW5jZS5uYXZpZ2F0aW9uLlRZUEVfQkFDS19GT1JXQVJEKSB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQkFDS19IT01FX0NMSUNLRUQnKSkpIHtcclxuICAgICAgICAgICAgYWRfdW5pdF9wYXRoID0gcGF0aC5qb2luKGFkX3VuaXRfcGF0aCwgdGhpcy5OZXR3b3JrTnVtYmVyLCBzaXRlICsgbW9iaWxlX3BhdGggKyBcImludGVyc3RpdGlhbC5iYWNraG9tZVwiICsgXCIvXCIgKyBBZHVuaXREY1BhdGhDbGFzcy5nZXQodGhpcy5kY1BhdGgpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFkX3VuaXRfcGF0aCA9IHBhdGguam9pbihhZF91bml0X3BhdGgsIHRoaXMuTmV0d29ya051bWJlciwgc2l0ZSArIG1vYmlsZV9wYXRoICsgYXUgKyBcIi9cIiArIEFkdW5pdERjUGF0aENsYXNzLmdldCh0aGlzLmRjUGF0aCkpOyAgXHJcbiAgICAgICAgICB9ICBcclxuICAgICAgICAgIHJldHVybiBhZF91bml0X3BhdGg7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgIH0gXHJcbiAgICAgIFxyXG4gICAgfSBlbHNlIHtcclxuICAgIC8vVGhlIGZ1bmN0aW9uIGNyZWF0ZSBhZFVuaXRQYXRoIGZvciBnb29nbGV0YWcuZGVmaW5lU2xvdFxyXG4gICAgY29uc3QgZGNQYXRjaEFycmF5ID0gdGhpcy5kY1BhdGguc3BsaXQoXCItXCIpO1xyXG4gICAgY29uc3QgbGVuID0gZGNQYXRjaEFycmF5Lmxlbmd0aCA8IHRoaXMubWF4ZGNwYXRoX2xldmVsID8gZGNQYXRjaEFycmF5Lmxlbmd0aDogdGhpcy5tYXhkY3BhdGhfbGV2ZWw7XHJcbiAgICBsZXQgdGVtcCA9IGRjUGF0Y2hBcnJheVswXS5pbmRleE9mKFwiLlwiKTtcclxuICAgIGNvbnN0IG5ld19kY1BhdGggPSBkY1BhdGNoQXJyYXlbMF0uc3Vic3RyaW5nKHRlbXApO1xyXG4gICAgaWYgKHRoaXMuaW5uZXJXaWR0aCA8PSBcIjc2N1wiKSB7XHJcbiAgICAgIGlmICh3aW5kb3cuZGNQYXRoLmluY2x1ZGVzKFwid2VhdGhlclwiKSB8fCB3aW5kb3cuZGNQYXRoLmluY2x1ZGVzKFwiV2VhdGhlclwiKSkge1xyXG4gICAgICAgIGxldCBuZXdfcGF0aCA9IFwiXCI7XHJcbiAgICAgICAgY29uc3QgbW9iaWxlX3BhdGggPSBcIi95bmV0X21vYmlsZS9cIjtcclxuICAgICAgICBuZXdfcGF0aCA9IGFkX3VuaXRfcGF0aCArIHRoaXMuTmV0d29ya051bWJlciArIG1vYmlsZV9wYXRoICsgYXU7XHJcbiAgICAgICAgcmV0dXJuIG5ld19wYXRoO1xyXG4gICAgICB9ICBlbHNlIHtcclxuICAgICAgICBsZXQgbmV3X3BhdGggPSBcIlwiO1xyXG4gICAgICAgIGxldCBkZXZpY2VfcGF0aCA9ICh0aGlzLmdldERldmljZV9mdW5jKCkgPT0gXCJBbmRyb2lkXCIpID8gXCJtb2JpbGV3ZWJfYW5kcm9pZFwiIDogXCJtb2JpbGV3ZWJfaXBob25lXCI7XHJcbiAgICAgICAgbmV3X3BhdGggPSBhZF91bml0X3BhdGggKyB0aGlzLk5ldHdvcmtOdW1iZXIgKyBcIi9cIiArIHNpdGUgKyBcIi9cIiArIGRldmljZV9wYXRoICsgXCIvXCIgKyBhdSArIFwiL1wiICsgdGhpcy5wYXJlbnRfY2F0ZWdvcnkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICByZXR1cm4gbmV3X3BhdGg7XHJcbiAgICAgIH0gICAgXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5kY2NnID09IFwibWFpblwiIHx8IHRoaXMuZGNjZyA9PSBcImFydGljbGVcIiB8fCB0aGlzLmRjY2cgPT0gXCJzdWJcIikge1xyXG4gICAgICBhZF91bml0X3BhdGggPSBwYXRoLmpvaW4oXHJcbiAgICAgICAgYWRfdW5pdF9wYXRoLFxyXG4gICAgICAgIHRoaXMuTmV0d29ya051bWJlcixcclxuICAgICAgICB0aGlzLmRjU2l0ZSArIFwiLlwiICsgYXVcclxuICAgICAgKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIHRlbXAgPSBkY1BhdGNoQXJyYXlbaV0uaW5kZXhPZihcIi5cIik7XHJcbiAgICAgICAgYWRfdW5pdF9wYXRoID0gcGF0aC5qb2luKFxyXG4gICAgICAgICAgYWRfdW5pdF9wYXRoLFxyXG4gICAgICAgICAgdGhpcy5kY1NpdGUgKyBcIi5cIiArIGF1ICsgZGNQYXRjaEFycmF5W2ldLnN1YnN0cmluZyh0ZW1wKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFkX3VuaXRfcGF0aDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFkX3VuaXRfcGF0aCA9IHBhdGguam9pbihcclxuICAgICAgICBhZF91bml0X3BhdGgsXHJcbiAgICAgICAgdGhpcy5OZXR3b3JrTnVtYmVyLFxyXG4gICAgICAgIHRoaXMuZGNTaXRlICsgXCIuXCIgKyBhdSArIG5ld19kY1BhdGhcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGFkX3VuaXRfcGF0aDtcclxuICAgICB9XHJcbiAgICB9XHJcbiAgIH1cclxuICB9XHJcbiAgZGVzdHJveU1hYXZhcm9uX2Z1bmMoKSB7XHJcbiAgICBMb2coXCJkZXN0cm95TWFhdmFyb25fZnVuY1wiKTtcclxuICAgIGNvbnN0IE1BQVZST04gPSAod2luZG93Lm5ld01lZGlhID09IFwiVHJ1ZVwiKSA/IFwiYWRzLmludGVyc3RpdGlhbFwiIDogXCJhZHMubWFhdmFyb25cIjtcclxuICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHtcclxuICAgICAgZ29vZ2xldGFnLmRlc3Ryb3lTbG90cyhbQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c1tNQUFWUk9OXV0pO1xyXG4gICAgICBnb29nbGV0YWcuZW5hYmxlU2VydmljZXMoKTtcclxuICAgIH0pO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWF2YXJvbl9vdmVybGF5XCIpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICB9IC8vZW5kIG9mIGRlc3Ryb3lNYWF2YXJvbl9mdW5jXHJcbiAgc2V0VGFyZ2V0aW5nX2Z1bmN0aW9uKGEpIHtcclxuICAgIGZvciAobGV0IGkgaW4gYSkge1xyXG4gICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKGksIGFbaV0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyBNT1ZFIFRPIERJRkVSRU5UIEZJTEVcclxuICBkZWZpbmVVbml0czgwMF9mdW5jKCkge1xyXG4gICAgTG9nKFwiZGVmaW5lVW5pdHM4MDBfZnVuY1wiKTtcclxuICAgIGxldCBqc29uT2JqX2RpY3QgPSB0aGlzLmpzb25PYmo7XHJcbiAgICBnb29nbGV0YWcuY21kLnB1c2goZnVuY3Rpb24oKSB7XHJcbiAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhqc29uT2JqX2RpY3QpKSB7X
1HJcbiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZyhrZXksIGpzb25PYmpfZGljdFtrZXldKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRlZmluZVNsb3RzODAwX2Z1bmMoXCJhZHMudG9wXCIsIFs3MjgsIDkwXSk7ICAgIFxyXG4gICAgaWYgKEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1t0aGlzLk96ZW5fODAwXSkge1xyXG4gICAgICB0aGlzLmRlZmluZVNsb3RzODAwX2Z1bmModGhpcy5PemVuXzgwMCwgQWRVbml0QWRkaXRpb25hbFN0eWxlc0NsYXNzLnJlc2l6ZU96ZW44MDBfZnVuYygpKTtcclxuICAgICAgYWRVbml0U3R5bGVzQ2xhc3NPYmpbdGhpcy5PemVuXzgwMF0odGhpcy5PemVuXzgwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRlZmluZVVuaXRzX2Z1bmMoKSB7XHJcbiAgICAvL2RlZmluZVVuaXRzX2Z1bmMgZnVuY3Rpb24gYWxsIGZyb20gZ3B0X3NjcmlwdF95bmV0IGFuZCBjcmVhdGUgYWxsIFNsb3RzIGZvciB0aGUgR1BUXHJcbiAgICBsZXQgdGhhdCA9IHRoaXM7XHJcbiAgICBsZXQgZ2VuZXJhbF9iYW5uZXJzX29iaiA9IHRoaXMuYWxsX2diX2Jhbm5lcnM7XHJcbiAgICBsZXQgYWxsX2Jhbm5lcnNfb2JqID0gd2luZG93LmFsbF9iYW5uZXJzOyAvLyBvcGVuIGl0IHdoZW4gYWRzIGFkbWluIGlzIHJlYWR5XHJcbiAgICBsZXQganNvbk9ial9kaWN0ID0gdGhpcy5qc29uT2JqO1xyXG4gICAgZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoanNvbk9ial9kaWN0KSkge1xyXG4gICAgICAgIGxldCBteUtleSA9IGtleSAhPT0gXCJcIiA/IGtleSA6IFwibm9LZXlcIjtcclxuICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKG15S2V5LCBqc29uT2JqX2RpY3Rba2V5XSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSBcIjc2N1wiKSB7ICAgXHJcblxyXG4gICAgICB3aW5kb3cueW5ldF9yZXNwb25zaXZlX3NpdGVzID0gKHdpbmRvdy5kY1NpdGUgPT0gXCJ5bnRcIiAmJiB3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHggKSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5MDBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKScpLm1hdGNoZXMpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICB3aW5kb3cueW5ldF9yZXNwb25zaXZlX3NwZWNpYWwgPSAod2luZG93LmRjU2l0ZSA9PSBcInludFwiICYmICh3aW5kb3cuZGNQYXRoLmluY2x1ZGVzKFwiMjAxLldlYXRoZXJcIikgfHwgKHdpbmRvdy5kY1BhdGguaW5jbHVkZXMoXCI3NzU1XCIpICYmIHdpbmRvdy5kY1BhdGguaW5jbHVkZXMoXCJUb3BpY3NcIikpKSkgPyB0cnVlIDogZmFsc2U7ICBcclxuICAgICAgdGhpcy5maW5kQWxsRGl2X2Z1bmMoKTtcclxuICAgICAgaWYgKHdpbmRvdy55bmV0X3Jlc3BvbnNpdmVfc2l0ZXMgJiYgd2luZG93LmRjQ0cgPT0gXCJhcnRpY2xlXCIpIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuYm94XCIpICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLmJveFwiKS5jbGFzc0xpc3QuY29udGFpbnMoXCJDb21tZW50c0JveFwiKSkgeyBcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLmJveFwiKS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcIik7ICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLmRlZmluZVNsb3RzX2Z1bmMoXCJhZHMuYm94XCIsIFtbMzAwLCAyNTBdLCBbJ2ZsdWlkJ11dKTtcclxuICAgICAgICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHtnb29nbGV0YWcuZGlzcGxheShcImFkcy5ib3hcIik7fSk7IFxyXG4gICAgICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5ib3hcIikuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7IG1hcmdpbjogMTAuNjI1dncgYXV0bzsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IHRleHQtYWxpZ246Y2VudGVyO1wiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgSW5mcmFzcnVjdHVyZUNsYXNzT2JqLlNsb3RSZW5kZXJFbmQoZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgbGV0IEJveExvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGlmIChldmVudC5zbG90LmdldFNsb3RFbGVtZW50SWQoKSA9PSBcImFkcy5ib3hcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFCb3hMb2FkZWQpIHsgIFxyXG4gICAgICAgICAgICAgICAgICBpZighZXZlbnQuaXNFbXB0eSkgeyAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuYm94XCIpLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiZGlzcGxheTogZmxleCAhaW1wb3J0YW50OyBtYXJnaW46IDEwLjYyNXZ3IGF1dG87IGp1c3RpZnktY29udGVudDogY2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjtcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIEJveExvYWRlZD10cnVlO1xyXG4gICAgICAgICAgICAgICAgfSAgICBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1x0ICAgICAgICBcdFx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9IFxyXG5cclxuICAgICBcclxuICAgICAgaWYgKHdpbmRvdy55bmV0X3Jlc3BvbnNpdmVfc2l0ZXMgJiYgd2luZG93LnluZXRfcmVzcG9uc2l2ZV9zcGVjaWFsID09IGZhbHNlKSB7ICBcclxuICAgICAgICB0aGlzLmRlZmluZVNsb3RzX2Z1bmMoXCJhZHMuYmFubmVyXCIsIFtbMzIwLCA1MF0sIFszNjAsIDUwXV0pOyBcclxuICAgICAgICBhZFVuaXRTdHlsZXNDbGFzc09ialtcImFkcy5zdGlja3lcIl0oXCJhZHMuc3RpY2t5XCIpOyAgXHJcbiAgICAgICAgaWYgKEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1tcImFkcy5zdHJpcC5jb250ZW50LjFcIl0pIHtcclxuICAgICAgICAgI
1HRoaXMuZGVmaW5lU2xvdHNfZnVuYyhcImFkcy5zdHJpcC5jb250ZW50LjFcIiwgWydmbHVpZCddKTtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLnN0cmlwLmNvbnRlbnQuMVwiKS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOjEwMCU7IGhlaWdodDphdXRvO1wiKTsgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouU2xvdHNbXCJhZHMuc3RyaXAuY29udGVudC4yXCJdKSB7XHJcbiAgICAgICAgICB0aGlzLmRlZmluZVNsb3RzX2Z1bmMoXCJhZHMuc3RyaXAuY29udGVudC4yXCIsIFsnZmx1aWQnXSk7XHJcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5zdHJpcC5jb250ZW50LjJcIikuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDoxMDAlOyBoZWlnaHQ6YXV0bztcIik7ICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouU2xvdHNbXCJhZHMuYm94LmNvbnRlbnQuMVwiXSkge1xyXG4gICAgICAgICAgdGhpcy5kZWZpbmVTbG90c19mdW5jKFwiYWRzLmJveC5jb250ZW50LjFcIiwgWydmbHVpZCddKTtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLmJveC5jb250ZW50LjFcIikuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDoxMDAlOyBoZWlnaHQ6YXV0bztcIik7ICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICAgaWYgKHdpbmRvdy55bmV0X3Jlc3BvbnNpdmVfc3BlY2lhbCkge1xyXG4gICAgICAgIGxldCB0cmFuc2l0aW9uX21vYmlsZSA9IFwiYWRzLmludGVyc3RpdGlhbC5pbm5lclwiOyBcclxuICAgICAgICBpZiAodGhpcy5nZXREZXZpY2VfZnVuYygpID09IFwiQW5kcm9pZFwiICYmIHRoaXMubmV3TWVkaWEgPT0gXCJGYWxzZVwiKSB7IFxyXG4gICAgICAgICAgdHJhbnNpdGlvbl9tb2JpbGUgPSBcImFkcy55bmV0X21vYmlsZXdlYl90cmFuc2l0aW9uc19nZW5lcmFsX2FuZHJvaWRfbWFpbl9pcFwiO1x0ICAgICAgICAgIFx0XHRcdFx0XHRcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0RGV2aWNlX2Z1bmMoKSA9PSBcImlQaG9uZVwiICYmIHRoaXMubmV3TWVkaWEgPT0gXCJGYWxzZVwiKSB7XHRcdFx0XHJcbiAgICAgICAgICB0cmFuc2l0aW9uX21vYmlsZSA9IFwiYWRzLnluZXRfbW9iaWxld2ViX3RyYW5zaXRpb25zX2dlbmVyYWxfaXBob25lX21haW5faXBcIjtcdCAgIFx0XHRcclxuICAgICAgICB9ICAgIFxyXG4gICAgICAgIGxldCBtYWF2YXJvbl93ZWF0aGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgbWFhdmFyb25fd2VhdGhlci5zZXRBdHRyaWJ1dGUoJ2lkJywgdHJhbnNpdGlvbl9tb2JpbGUpOyBcclxuICAgICAgICBkb2
1N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShtYWF2YXJvbl93ZWF0aGVyLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOyAgXHJcbiAgICAgICAgdGhpcy5kZWZpbmVTbG90c19mdW5jKHRyYW5zaXRpb25fbW9iaWxlLCBbWzEsIDFdLCBbMSwgMl1dKTsgXHJcblxyXG4gICAgICAgIEluZnJhc3J1Y3R1cmVDbGFzc09iai5TbG90UmVuZGVyRW5kKGZ1bmN0aW9uKGV2ZW50KSB7XHRcclxuICAgICAgICAgIGxldCBJbnRlcnN0aXRpYWxNb2JpbGVMb2FkZWQgPSBmYWxzZTtcdFxyXG4gICAgICAgICAgICBpZiAoZXZlbnQuc2xvdCA9PSBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW3RyYW5zaXRpb25fbW9iaWxlXSkge1x0XHJcbiAgICAgICAgICAgICAgaWYgKCFJbnRlcnN0aXRpYWxNb2JpbGVMb2FkZWQpIHsgIFx0XHJcbiAgICAgICAgICAgICAgICBpZighZXZlbnQuaXNFbXB0eSkgeyAgICBcdFxyXG4gICAgICAgICAgICAgICAgICBhZFVuaXRTdHlsZXNDbGFzc09ialtcIkludGVyc3RpdGlhbF9yZXNwb25zaXZlXCJdKFwiSW50ZXJzdGl0aWFsX3Jlc3BvbnNpdmVcIik7XHRcclxuICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0XHJcbiAgICAgICAgICAgICAgICAgIEludGVyc3RpdGlhbE1vYmlsZUxvYWRlZD10cnVlO1x0XHJcbiAgICAgICAgICAgICAgfSAgICBcdFxyXG4gICAgICAgICAgICB9XHRcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHdpbmRvdy55bmV0X3Jlc3BvbnNpdmVfc2l0ZXMgJiYgd2luZG93LnluZXRfcmVzcG9uc2l2ZV9zcGVjaWFsID09IGZhbHNlKSB7ICAgXHJcbiAgICAgIHRoaXMuZmluZEFsbERpdl9mdW5jKCk7XHJcbiAgICAgIGxldCBiaWdsaXZlYm94X3Nsb3QgPSBcIlwiO1xyXG4gICAgICBsZXQgbGl2ZWJveF9zbG90ID0gXCJcIjtcclxuICAgICAgbGV0IG1hYXZhcm9uX21vYmlsZSA9IFwiXCI7XHJcbiAgICAgIGlmICh0aGlzLm5ld01lZGlhID09IFwiVHJ1ZVwiIHx8IHdpbmRvdy55bmV0X3Jlc3BvbnNpdmVfc2l0ZXMpIHtcclxuICAgICAgICBiaWdsaXZlYm94X3Nsb3QgPSBcImFkcy5iaWdsaXZlYm94XCI7XHRcclxuICAgICAgICBsaXZlYm94X3Nsb3QgPSBcImFkcy5pbmJvYXJkXCI7XHRcclxuICAgICAgICBtYWF2YXJvbl9tb2JpbGUgPSBcImFkcy5pbnRlcnN0aXRpYWwuaW5uZXJcIjsgICAgICBcdFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZ2V0RGV2aWNlX2Z1bmMoKSA9PSBcIkFuZHJvaWRcIikge1xyXG4gICAgICAgICAgICBiaWdsaXZlYm94X3Nsb3QgPSBcImFkcy55bmV0X21vYmlsZXdlYl9hbmRyb2lkX3BuaW1pX2JpZ2xpdmVCb3hcIjtcdFxyXG4gICAgICAgICAgICBsaXZlYm94X3Nsb3QgPSBcImFkcy55bmV0X21vYmlsZXdlYl9hbmRyb2lkX2xpdmVib3hcIjtcclxuICAgICAgICAgICAgbWFhdmFyb25fbW9iaWxlID0gXCJhZHMueW5ldF9tb2JpbGV3ZWJfdHJhbnNpdGlvbnNfZ2VuZXJhbF9hbmRyb2lkX21haW5faXBcIjtcdCAgICAgICAgICBcdFx0XHRcdFx0XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0RGV2aWNlX2Z1bmMoKSA9PSBcImlQaG9uZVwiKSB7XHRcclxuICAgICAgICAgICAgYmlnbGl2ZWJveF9zbG90ID0gXCJhZHMueW5ldF9tb2JpbGV3ZWJfaXBob25lX3BuaW1pX2JpZ2xpdmVCb3hcIjtcdFxyXG4gICAgICAgICAgICBsaXZlYm94X3Nsb3QgPSBcImFkcy55bmV0X21vYmlsZXdlYl9pcGhvbmVfbGl2ZWJveFwiO1x0XHRcdFx0XHJcbiAgICAgICAgICAgIG1hYXZhcm9uX21vYmlsZSA9IFwiYWRzLnluZXRfbW9iaWxld2ViX3RyYW5zaXRpb25zX2dlbmVyYWxfaXBob25lX21haW5faXBcIjtcdCAgIFx0XHRcclxuICAgICAgICAgIH0gICAgICAgIFxyXG4gICAgICB9XHJcbiAgICBcclxuICAgICAgbGV0IG1hYXZhcm9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIG1hYXZhcm9uLnNldEF0dHJpYnV0ZSgnaWQnLCBtYWF2YXJvbl9tb2JpbGUpOyBcclxuICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUobWFhdmFyb24sIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7ICBcclxuICAgICBcclxuXHJcbiAgICAgIGxldCBoZWFkZXIgPSBcIi5hcnRpY2xlLWhlYWRlci1tYWdhemluZVwiO1xyXG4gICAgICBpZiAod2luZG93LnluZXRfcmVzcG9uc2l2ZV9zaXRlcykge1xyXG4gICAgICAgIGhlYWRlciA9ICcubGFpc2hhLWhlYWRlcic7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaGVhZGVyKSA9PSB1bmRlZmluZWQgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihoZWFkZXIpID09IG51bGwpIHtcclxuICAgICAgICAgIGhlYWRlciA9IFwiLmFydGljbGUtaGVhZGVyLW1hZ2F6aW5lXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3aW5kb3cuZGNQYXRoLmluY2x1ZGVzKFwiUG5haVBsdXNcIikpIHtcclxuICAgICAgICAgIGhlYWRlciA9IFwiLnBwbHVzLWhlYWRlclwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBcclxuXHJcbiAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGhlYWRlcikpIHtcclxuICAgICAgICBsZXQgaGVhZGVyX2NvbXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGhlYWRlcik7XHJcbiAgICAgICAgbGV0IGluYm9yZF9iaWdfZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgaW5ib3JkX2JpZ19kaXYuc2V0QXR0cmlidXRlKCdpZCcsIGJpZ2xpdmVib3hfc2xvdCk7ICAgICBcclxuICAgICAgICBoZWFkZXJfY29tcC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpbmJvcmRfYmlnX2RpdiwgaGVhZGVyX2NvbXAubmV4dFNpYmxpbmcpOyAgXHJcblxyXG4gICAgICAgIGxldCBpbmJvcmRfc21hbGxfZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgaW5ib3JkX3NtYWxsX2Rpdi5zZXRBdHRyaWJ1dGUoJ2lkJywgbGl2ZWJveF9zbG90KTtcclxuICAgICAgICBoZWFkZXJfY29tcC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpbmJvcmRfc21hbGxfZGl2LCBoZWFkZXJfY29tcC5uZXh0U2libGluZyk7ICAgIFxyXG4gICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoYXNWaXNpdGVkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnU2l0ZV92aXNpdGVkJyk7ICBcclxuICAgICAgICBsZXQgc2hvd19iaWdsaXZlYm94ID0gZmFsc2U7ICBcclxuICBcclxuICAgICAgICBpZiAoZG9jdW1lbnQucmVmZXJyZXIgPT0gXCJcIiAgJiYgIWhhc1Zpc2l0ZWQpIHsgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLlJlbmRlckJpZ2xpdmVib3goKTtcclxuICAgICAgICAgICAgc2hvd19iaWdsaXZlYm94ID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnU2l0ZV92aXNpdGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgfSAgXHJcblxyXG4gICAgICAgIGlmIChzaG93X2JpZ2xpdmVib3ggPT0gZmFsc2UgJiYgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgneW5ldF9tb2JpbGV3ZWJfaW50ZXJzdGl0aWFsX2FkeF9kaXNwbGF5ZWQnKSkge1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ21hYXZhcm9uQWR4Jyk7ICAgXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd5bmV0X21vYmlsZXdlYl9pbnRlcnN0aXRpYWxfYWR4X2Rpc3BsYXllZCcpOyAgIFxyXG4gICAgICAgICAgdGhpcy5SZW5kZXJTbWFsbEluYm9yZCgpO1xyXG4gICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgaWYgKHNob3dfYmlnbGl2ZWJveCA9PSBmYWxzZSB8fCAoc2hvd19iaWdsaXZlYm94ID09IGZhbHNlICYmIHdpbmRvdy5kY0NHID09ICdhcnRpY2xlJykgfHwgKHdpbmRvdy5kY1BhdGguaW5jbHVkZXMoXCItMS5Ib21lXCIpICYmIGhhc1Zpc2l0ZWQgJiYgKHNob3dfYmlnbGl2ZWJveCA9PSBmYWxzZSAmJiAoKHdpbmRvdy5wZXJmb3JtYW5jZSAmJiB3aW5kb3cucGVyZm9ybWFuY2UubmF2aWdhdGlvbi50eXBlID09IHdpbmRvdy5wZXJmb3JtYW5jZS5uYXZpZ2F0aW9uLlRZUEVfQkFDS19GT1JXQVJEKSB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQkFDS19IT01FX0NMSUNLRUQnKSkpKSkgeyBcclxuICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLmRlZmluZVNsb3RzX2Z1bmMoXCJhZHMuaW50ZXJzdGl0aWFsLmlubmVyXCIsIFtbMSwgMV0sIFsxLCAyXV0pOyBcclxuXHJcbiAgICAgICAgICBsZXQgSW50ZXJzdGl0aWFsX25vdF9lbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICBsZXQgSW50ZXJzdGl0aWFsTW9iaWxlTG9hZGVkID0gZmFsc2U7XHRcclxuICAgICAgICAgIEluZnJhc3J1Y3R1cmVDbGFzc09iai5TbG90UmVuZGVyRW5kKGZ1bmN0aW9uKGV2ZW50KSB7XHQgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5zbG90ID09IEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNbXCJhZHMuaW50ZXJzdGl0aWFsLmlubmVyXCJdKSB7XHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJbnRlcnN0aXRpYWxNb2JpbGVMb2FkZWQpIHsgIFx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWV2ZW50LmlzRW1wdHkpIHsgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ
1jbG9zZUJ1dHRvblwiKSkgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjbG9zZUJ1dHRvblwiKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImIxMTQyNTMyXCIpKSB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImIxMTQyNTMyXCIpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xvc2VUcmFuc2l0aW9ucyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb29nbGV0YWcuY21kLnB1c2goZnVuY3Rpb24oKSB7IGdvb2dsZXRhZy5kZXN0cm95U2xvdHMoW0FkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNbXCJhZHMuaW50ZXJzdGl0aWFsLmlubmVyXCJdXSk7IH0pOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRyYW5zaXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5pbnRlcnN0aXRpYWwuaW5uZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi5zdHlsZS5oZWlnaHQgPSAnMHB4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiQ2xvc2VfYnRuX2ludGVyc3RpdGlhbFwiKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO30gY2F0Y2ggKGUpIHt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuQ2xvc2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uKCkgeyBnb29nbGV0YWcuZGVzdHJveVNsb3RzKFtBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW1wiYWRzLmludGVyc3RpdGlhbC5pbm5lclwiXV0pOyB9KTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RjTWFhdmFyb25EaXYnKS5yZW1vdmUoKTt9IGNhdGNoIChlKSB7fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2
1N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5pbnRlcnN0aXRpYWwuaW5uZXJcIikuc3R5bGUuaGVpZ2h0ID0gJzBweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLmludGVyc3RpdGlhbC5pbm5lclwiKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiQ2xvc2VfYnRuX2ludGVyc3RpdGlhbFwiKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO30gY2F0Y2ggKGUpIHt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpdl9pbnRlcnN0aXRpYWwgPSBwYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuaW50ZXJzdGl0aWFsLmlubmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1nX2ludGVyc3RpdGlhbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ19pbnRlcnN0aXRpYWwuaWQgPSBcIkNsb3NlX2J0bl9pbnRlcnN0aXRpYWxcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nX2ludGVyc3RpdGlhbC5zcmMgPSBcImh0dHBzOi8vdG90YWxtZWRpYTIueW5ldC5jby5pbC9uZXdfZ3B0L3luZXRfbXV0YW0vY2xvc2UucG5nXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ19pbnRlcnN0aXRpYWwuc2V0QXR0cmlidXRlKFwib25DbGlja1wiLCBcIndpbmRvdy5DbG9zZSgpO1wiKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ19pbnRlcnN0aXRpYWwuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJjdXJzb3I6IHBvaW50ZXI7IHBvc2l0aW9uOiBmaXhlZDsgdG9wOiAxNHB4OyBsZWZ0OiAxNHB4OyB6LWluZGV4OiA5OTk5OTk5OTk5O1wiKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdl9pbnRlcnN0aXRpYWwuYXBwZW5kQ2hpbGQoaW1nX2ludGVyc3RpdGlhbCk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLlJlbmRlclNtYWxsSW5ib3JkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyc3RpdGlhbF9ub3RfZW1wdHk9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJzdGl0aWFsTW9iaWxlTG9hZGVkPXRydWU7XHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSAgICBcdFxyXG4gICAgICAgICAgICAgICAgICAgICAgfVx0XHJcbiAgICAgICAgICB9KTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAoSW50ZXJzdGl0aWFsX25vdF9lbXB0eSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuUmVuZGVyU21hbGxJbmJvcmQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICB9ICBcclxuICAgICAgIH1cclxuICAgICAgfVx0XHRcdFxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIFxyXG4gICAgLy8gZGVmaW5lIGFsbCBiYW5uZXJzIGZyb20gYWRtaW4gYWRzIC0gcnVuIHRoaXMgZnVuYyB3aGVuIGFkbWluIGFkcyBpcyByZWFkeVxyXG4gICAgT2JqZWN0LmtleXMoYWxsX2Jhbm5lcnNfb2JqKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIC8vIHJ1biB0aGlzIGZ1bmMgd2hlbiBhZG1pbiBhZHMgaXMgcmVhZHkgICAgXHJcbiAgICAgIGxldCBiYW5uZXJfaWQgPSBhbGxfYmFubmVyc19vYmpba2V5XVswXS5pZDsgXHJcbiAgICAgIGlmIChiYW5uZXJfaWQgPT0gXCJhZHMuaW50ZXJzdGl0aWFsXCIpIHtcclxuICAgICAgICBpZiAod2luZG93LmRjQ0cgIT0gXCJob21lXCIgJiYgYmFubmVyX2lkID09IFwiYWRzLmludGVyc3RpdGlhbFwiICYmIHdpbmRvdy5kY1BhdGggIT0gXCIyNzc1LktuZXNzZXQtMzMxMTMuYWRpcGVlcmlcIikge1xyXG4gICAgICAgICAgLy8gaWYgbnVtYmVyIGxlc3MgdGhhbiA0LCBnZXQgcGFyYW1ldGVyIGRjdW5pZ3B0ID0gdmlldyhudW1iZXIpLCBpZiBtb3JlIHRoYW4gNCB0aGVuIGRvbid0IGdldCBwYXJhbWV0ZXJcclxuICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hYXZhcm9uc3R5bGVcIikgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkb2
1N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hYXZhcm9uc3R5bGVcIikuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuRG91YmxlX0p1bWJvID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICghdGhpcy5Eb3VibGVfSnVtYm8pIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuaW50ZXJzdGl0aWFsXCIpLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy90aGlzLmRlZmluZVNsb3RzX2Z1bmMoYmFubmVyX2lkLCBhbGxfYmFubmVyc19vYmpba2V5XVswXS5zaXplcyxcIlwiLFwiXCIpOyAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gZGVmaW5lIE1hYXZhcm9uXHJcbiAgICAgICAgICBpZiAod2luZG93LmZyZXF1ZW5jeUxvZ2ljICYmIGxvY2FsU3RvcmFnZS5mcmVxdWVuY3lMb2dpYyAhPSB1bmRlZmluZWQgJiYgZnJlcXVlbmN5TG9naWMuZGlzcGxheWVkbGFzdC5pbmNsdWRlcyhcImFkeFwiKSAmJiBmcmVxdWVuY3lMb2dpYy5hZGQgPT0gXCJsb2FkZWRcIikge1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZnJlcXVlbmN5TG9naWMnKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZpbmVTbG90c19mdW5jKGJhbm5lcl9pZCwgYWxsX2Jhbm5lcnNfb2JqW2tleV1bMF0uc2l6ZXMsIFwiXCIsIFwiZ3B0X21hYXZhcm9uXCIpO1xyXG4gICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgbGV0IE1hYXZhcm9uTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICBsZXQgdmlkZW9fb24gPSBcIlwiO1xyXG4gICAgICAgICAgbGV0IGNvbnRfd2ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbnRlbnQtd1wiKTtcclxuICAgICAgICAgIGxldCBjb250ZW50X3doID0gY29udF93aCAhPT0gbnVsbDsgIFxyXG4gICAgICAgICAgSW5mcmFzcnVjdHVyZUNsYXNzT2JqLlNsb3RSZW5kZXJFbmQoZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgbGV0IHZpZGVvX2RhdGEgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgZXZlbnQuc2xvdC5nZXRTbG90RWxlbWVudElkKCkgPT0gXCJhZHMuaW50ZXJzdGl0aWFsXCJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFNYWF2YXJvbkxvYWRlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFldmVudC5pc0VtcHR5KSB7ICAgIFxyXG4gICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsYW5rZXQnKSAhPSB1bmRlZmluZWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsYW5rZXQnKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsYW5rZXQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93JywgJ3Zpc2libGUnLCAnaW1wb3J0YW50Jyk7ICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgdGhhdC5pc19tYWF2YXJvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50X3doKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udF93aC5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9fb24gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJ2aWRlby1jb250YWluZXItZmxwNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZGVvX29uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgaWZyYW1lX3ZpZGVvID0gdmlkZW9fb25baV0uY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZnJhbWVfdmlkZW8uc3JjID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBkb2
1N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdycsICd2aXNpYmxlJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsYW5rZXQnKSAhPSB1bmRlZmluZWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsYW5rZXQnKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsYW5rZXQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICB9ICAgXHJcbiAgICAgICAgICAgICAgICAgIHZpZGVvX2RhdGEgPSBNYWluRnVuY3Rpb25DbGFzc09iai52aWRlb09mZl9mdW5jKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBNYWF2YXJvbkxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodmlkZW9fZGF0YSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZpZGVvX29uLnNyYyA9IHZpZGVvX2RhdGE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGJhbm5lcl9pZCA9PSBcImFkcy50b3BcIikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5HcmlkV2lkdGggPT0gMTI0MCB8fCB3aW5kb3cuZGNQYXRoLmluY2x1ZGVzKFwiUG5haVBsdXNcIikpIHtcclxuICAgICAgICAgICAgICB0aGlzLmRlZmluZVNsb3RzX2Z1bmMoYmFubmVyX2lkLCBhbGxfYmFubmVyc19vYmpba2V5XVswXS5zaXplcyxcIlwiLFwiXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVmaW5lU2xvdHNfZnVuYyhcImFkcy50b3BcIiwgW1sxLCAxXSwgWzEsIDJdLCBbOTcwLCA5MF0sIFs5NzAsIDI1MF0sIFsxMDAwLCAyMDBdLCBbOTcwLCAxMzBdLCBbOTcwLCAzNTBdLCBbOTcwLCAxMDBdXSxcIlwiLFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9ICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGJhbm5lcl9pZCA9PSBcImFkcy5za3lzY3JhcGVyXCIgfHwgYmFubmVyX2lkID09IFwiYWRzLnNreXNjcmFwZXIubGVmdFwiKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gMTUyMCkge1xyXG4gICAgICAgICAgdGhpcy5kZWZpbmVTbG90c19mdW5jKHRoaXMuT3plbl9yaWdodCwgQWRVbml0QWRkaXRpb25hbFN0eWxlc0NsYXNzLnJlc2l6ZU96ZW5fZnVuYygpKTtcclxuICAgICAgICAgIGFkVW5pdFN0eWxlc0NsYXNzT2JqW3RoaXMuT3plbl9yaWdodF0odGhpcy5PemVuX3JpZ2h0KTsgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdpbmRvdy5pc0Ficm9hZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLmRlZmluZVNsb3RzX2Z1bmModGhpcy5PemVuX2xlZnQsIEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzcy5yZXNpemVPemVuX2Z1bmMoKSk7XHJcbiAgICAgICAgICAgIGFkVW5pdFN0eWxlc0NsYXNzT2JqW3RoaXMuT3plbl9sZWZ0XSh0aGlzLk96ZW5fbGVmdCk7IFxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgIC8vIGlmIChhbGxfYmFubmVyc19vYmpba2V5XVswXS5iYW5uZXIgPT0gXCJuYXRpdmVfcmVhY3RyZW5kZXJcIiAmJiAod2luZG93Lmdyb3VwX3N0ciA9PSBcIlwiIHx8IHdpbmRvdy5ncm91cF9zdHIgJiYgd2luZG93Lmdyb3VwX3N0ciAhPSB3aW5kb3cudGVzdF9ncm91cF9zdHIuZXhwMl9TUkFfYmF0Y2gpKSB7XHJcbiAgICAgICAgaWYgKGFsbF9iYW5uZXJzX29ialtrZXldWzBdLmJhbm5lciA9PSBcIm5hdGl2ZV9yZWFjdHJlbmRlclwiICYmIHdpbmRvdy5ncHRfZ3JvdXBfbmFtZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHdpbmRvd1tcIllJVFNpdGVXaWRnZXRzQ2FsbGJhY2tzXCJdID0gd2luZG93W1wiWUlUU2l0ZVdpZGdldHNDYWxsYmFja3NcIl0gfHwgW107XHJcbiAgICAgICAgICB3aW5kb3dbXCJZSVRTaXRlV2lkZ2V0c0NhbGxiYWNrc1wiXS5wdXNoKCgpPT4ge1xyXG4gICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuZ3B0X2dyb3VwX25hbWUgPT0gd2luZG93LnRlc3RfZ3JvdXBfc3RyLmV4cDRfc3JhX2JhdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChnb29nbGV0YWcucHViYWRzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7IC8vIHRpbWUgaXMgdXBcclxuICAgICAgICAgICAgICAgICAgICAgIEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLmRlZmluZVNsb3RzX2Z1bmMoYmFubmVyX2lkLCBhbGxfYmFubmVyc19vYmpba2V5XVswXS5zaXplcywgXCJuYXRpdmVfYmFubmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uKCkge2dvb2dsZXRhZy5kaXNwbGF5KGJhbm5lcl9pZCk7fSk7ICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKGdvb2dsZXRhZy5wdWJhZHMoKS5pc0luaXRpYWxMb2FkRGlzYWJsZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnJlZnJlc2goW2Jhbm5lcl9pZF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9LCAxMDApOyAgICAgXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5kZWZpbmVTbG90c19mdW5jKGJhbm5lcl9pZCwgYWxsX2Jhbm5lcnNfb2JqW2tleV1bMF0uc2l6ZXMpO1xyXG4gICAgICAgICAgICAgICAgICBnb29nbGV0YWcuY21kLnB1c2goZnVuY3Rpb24oKSB7Z29vZ2xldGFnLmRpc3BsYXkoYmFubmVyX2lkKTt9KTtcclxuICAgICAgICAgICAgICAgI
1H0gICBcclxuICAgICAgICAgIH0pOyAgICBcclxuICAgICAgICAgIC8vIHdpbmRvd1tcIllJVFNpdGVXaWRnZXRzQ2FsbGJhY2tzXCJdID0gd2luZG93W1wiWUlUU2l0ZVdpZGdldHNDYWxsYmFja3NcIl0gfHwgW107XHJcbiAgICAgICAgICAvLyB3aW5kb3dbXCJZSVRTaXRlV2lkZ2V0c0NhbGxiYWNrc1wiXS5wdXNoKCgpPT4ge1xyXG4gICAgICAgICAgLy8gICAgICAgdGhpcy5kZWZpbmVTbG90c19mdW5jKGJhbm5lcl9pZCwgYWxsX2Jhbm5lcnNfb2JqW2tleV1bMF0uc2l6ZXMpO1xyXG4gICAgICAgICAgLy8gICAgICAgZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uKCkge2dvb2dsZXRhZy5kaXNwbGF5KGJhbm5lcl9pZCk7fSk7XHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kZWZpbmVTbG90c19mdW5jKGJhbm5lcl9pZCwgYWxsX2Jhbm5lcnNfb2JqW2tleV1bMF0uc2l6ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWxsX2Jhbm5lcnNfb2JqW2tleV1bMF0uYmFubmVyID09IFwibmF0aXZlXCIgfHwgYWxsX2Jhbm5lcnNfb2JqW2tleV1bMF0uYmFubmVyID09IFwibmF0aXZlX3JlYWN0cmVuZGVyXCIpIHtcclxuICAgICAgICAgIGlmICh3aW5kb3cuR3JpZFdpZHRoID09IDEyNDApIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgQWRVbml0QWRkaXRpb25hbFN0eWxlc0NsYXNzLmhwX2JveGVzX2NsYXNzKGJhbm5lcl9pZCk7IH0sIDMwMDApOyAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgXHJcbiAgICAgIC8vIC8vIElGIFRISVMgU0hPVUxEIEJFIElOIFRIRSBBUlJBWT9cclxuICAgICAgLy8gLy8gcmVuZGVyIGVhY2ggc2xvdFxyXG4gICAgICAvLyBsZXQgYmFubmVyX2xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAvLyBnb29nbGV0YWcuY21kLnB1c2goZnVuY3Rpb24oKSB7XHJcbiAgICAgIC8vICAgZ29vZ2xldGFnLnB1YmFkcygpLmFkZEV2ZW50TGlzdGVuZXIoXCJzbG90UmVuZGVyRW5kZWRcIiwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgLy8gICAgIGlmIChldmVudC5zbG90ID09IEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNbXCJhZHMudG9wXCJdKSB7fSAgXHJcbiAgICAgIC8vICAgICBpZiAoZXZlbnQuc2xvdCA9PSBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW1wiYWRzLmJveC4xXCJdKSB7fVxyXG4gICAgICAvLyAgIH0pO1xyXG4gICAgICAvLyB9KTsgIFxyXG4gICAgIFxyXG5cclxuICAgIC8vIGRlZmluZSBhbGwgZ2VuZXJhbCBiYW5uZXJzIGZyb20gY29tcG9uZW50YXNcclxuICAgICAgT2JqZWN0LmtleXMoZ2VuZXJhbF9iYW5uZXJzX29iaikuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZ2Jfc2l6ZXMgPSBnZW5lcmFsX2Jhbm5lcnNfb2JqW2tleV1bMF0uc2l6ZXM7XHJcbiAgICAgICAgICAgIGxldCBiYW5uZXJfaWQgPSBnZW5lcmFsX2Jhbm5lcnNfb2JqW2tleV1bMF0uaWQ7XHJcbiAgICAgICAgICAgIGlmIChnYl9zaXplc1swXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZpbmVTbG90c19mdW5jKGJhbm5lcl9pZCwgWzAsIDBdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGxldCBnYl9tYW55X3NpemVzID0gZ2Jfc2l6ZXNbMF1bMF0gIT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGxldCBmbHVpZCA9IGdlbmVyYWxfYmFubmVyc19vYmpba2V5XVswXS5mbHVpZDtcclxuICAgICAgICAgICAgICBsZXQgb25lc2l6ZSA9IGdlbmVyYWxfYmFubmVyc19vYmpba2V5XVswXS5vbmVzaXplO1xyXG4gICAgICAgICAgICAgIGlmIChmbHVpZCA9PT0gdHJ1ZSAmJiBvbmVzaXplID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ2JfbWFueV9zaXplcykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZVNsb3RzX2Z1bmMoYmFubmVyX2lkLCBbWydmbHVpZCddLCBbMSwgMV0sIC4uLmdiX3NpemVzXSk7ICBcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lU2xvdHNfZnVuYyhiYW5uZXJfaWQsIFtnYl9zaXplcywgWydmbHVpZCddLCBbMSwgMV1dKTsgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAob25lc2l6ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGdiX21hbnlfc2l6ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVTbG90c19mdW5jKGJhbm5lcl9pZCwgW1sxLCAxXSwgLi4uZ2Jfc2l6ZXNdKTsgICAgXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZVNsb3RzX2Z1bmMoYmFubmVyX2lkLCBbZ2Jfc2l6ZXMsIFsxLCAxXV0pOyAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZsdWlkID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ2JfbWFueV9zaXplcykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZVNsb3RzX2Z1bmMoYmFubmVyX2lkLCAgW1snZmx1aWQnXSwgLi4uZ2Jfc2l6ZXNdKTsgIFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVTbG90c19mdW5jKGJhbm5lcl9pZCwgIFtnYl9zaXplcywgWydmbHVpZCddXSk7ICAgICBcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmluZVNsb3RzX2Z1bmMoYmFubmVyX2lkLCBnYl9zaXplcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoYmFubmVyX2lkICE9IFwiYWRzLnNhcmdlbFwiICYmIGdiX3NpemVzWzBdICE9IG51bGwgJiYgYmFubmVyX2lkICE9IFwiYWRzLnRvcC5wcm9tb1wiKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFiYW5uZXJfaWQuaW5jbHVkZXMoXCJpbnJlYWRcIikpIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgQWRVbml0QWRkaXRpb25hbFN0eWxlc0NsYXNzT2JqLmdlbmVyYWxfYmFubmVyc19zdHlsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgQWRVbml0QWRkaXRpb25hbFN0eWxlc0NsYXNzT2JqLnN0eWxlX3Blcl9iYW5uZXIoYmFubmVyX2lkKTsgXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy9zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBBZFVuaXRBZGRpdGlvbmFsU3R5bGVzQ2xhc3NPYmouZ2VuZXJhbF9iYW5uZXJzX3N0eWxlcygpO30sIDMwMDApO1xyXG4gICAgICAgICAgICAgIC8vaWYgKGdlbmVyYWxfYmFubmVyc19vYmpba2V5XVswXS5pZCA9PSBcImFkcy5ncmF5LmJveC4xXCIpIGFkVW5pdFN0eWxlc0NsYXNzT2JqW1wiYWRzLmdyYXkuYm94LjFcIl0oXCJhZHMuZ3JheS5ib3guMVwiKTtcclxuICAgICAgICAgICAgICAvL3NldFRpbWVvdXQoZnVuY3Rpb24oKSB7IEFkVW5pdEFkZGl0aW9uYWxTdHlsZXNDbGFzc09iai5zdHlsZV9wZXJfYmFubmVyKGdlbmVyYWxfYmFubmVyc19vYmpba2V5XVswXS5pZCk7IH0sIDMwMDApOyBcclxuICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICBcclxuICAgICAgfSk7XHJcblxyXG4gICAgXHJcbiAgICAgIC8vIE5PVCBSRUxFVkFOVCBJTiBIUCAtIGlmIGFkcy5zcG90LjEgLGFkcy5pbnJlYWQsIGFkcy5hYm92ZWNvbW1lbnRzIGV4aXN0IC0gY2hlY2sgaW4gdGhlIGFycmF5LCB3aGVuIGFkbWluIGFkcyBpcyByZWFkeVxyXG4gICAgICBpZiAodGhpcy5kY2NnID09IFwiYXJ0aWNsZVwiKSB7XHJcblxyXG4gICAgICAgIC8vdGhpcy5kZWZpbmVTbG90c19mdW5jKFwiYWRzLmlucmVhZC4xXCIsIFtbJ2ZsdWlkJ10sIFsxLCAxXSwgWzMwMCwgMjUwXSwgWzMwMCwgMzAwXSwgWzMzNiwgMjgwXSwgWzQ2OCwgNjBdLCBbNzI4LCA5MF1dKTtcclxuICAgICAgICAvL3RoaXMuZGVmaW5lU2xvdHNfZnVuYyhcImFkcy5pbnJlYWQuMlwiLCBbWydmbHVpZCddLCBbMSwgMV0sIFszMDAsIDI1MF0sIFszMDAsIDMwMF0sIFszMzYsIDI4MF0sIFs0NjgsIDYwXSwgWzcyOCwgOTBdXSk7XHJcbiAgICAgICAvLyB0aGlzLmRlZmluZVNsb3RzX2Z1bmMoXCJhZHMuaW5yZWFkLjNcIiwgW1snZmx1aWQnXSwgWzEsIDFdLCBbMzAwLCAyNTBdLCBbMzAwLCAzMDBdLCBbMzM2LCAyODBdLCBbNDY4LCA2MF0sIFs3MjgsIDkwXV0pOyBcclxuXHJcbiAgXHJcbiAgICAgIC8vIGxldCBzaG93X3Nwb3RfMSA9IDE7XHJcbiAgICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kY1RhZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gICBpZiAodGhpcy5kY1RhZ3NbaV0gPT0gXCLXqteV15vXnyDXqdeZ15XXlden15lcIiB8fCB0aGlzLmRjVGFnc1tpXSA9PSBcIteq15XXm9efINek16jXodeV157XmVwiKSB7XHJcbiAgICAgIC8vICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLnNwb3QuMVwiKSAhPSBudWxsIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLnNwb3QuMVwiKSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLnNwb3QuMVwiKS5zdHlsZS5kaXNwbGF5PSdub25lJztcclxuICAgICAgLy8gICAgICAgICB9IFxyXG4gICAgICAvLyAgICAgICAgI
1HNob3dfc3BvdF8xID0gMDtcclxuICAgICAgLy8gICB9IFxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGlmIChzaG93X3Nwb3RfMSA9PSAxKSB7XHJcbiAgICAgIC8vICAgdGhhdC5kZWZpbmVTbG90c19mdW5jKFwiYWRzLnNwb3QuMVwiLCBbMzAwLCAyNTBdLCBcIlwiLCBcIlwiKTtcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gICAgLy9NaXZ6YWtpbSBmaXJtYSBiYW5uZXJzIC0gTk9UIFJFTEVWQU5UIEluIEhQIC0gT1BFTiBJVCBpbiBDQVRFR09SWSBQQUdFIC0gc2hvdWxkIGJlIGluIGFkbWluIGFycmF5IEdQICEhISFcclxuICAgIC8vIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmZsYXNoLWFkLXRydWVcIikpIHsgXHJcbiAgICAvLyAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLkFjY29yZGlvblNlY3Rpb25cIikpIHsgICAgICBcclxuICAgIC8vICAgICBsZXQgYmFubmVyX3NpemVzID0gICBbWydmbHVpZCddLCBbNzI4LCA5MF1dO1xyXG4gICAgLy8gICAgIGNvbnN0IGZsYXNoX2VsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5BY2NvcmRpb25TZWN0aW9uXCIpO1xyXG4gICAgLy8gICAgIGxldCBlbGVtZW50X2FycmF5ID0gQXJyYXkuZnJvbShmbGFzaF9lbGVtZW50cyk7XHJcbiAgICAvLyAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCA1OyBpKyspIHtcclxuICAgIC8vICAgICAgIGxldCBiYW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIC8vICAgICAgIGJhbm5lci5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2Fkcy5mbGFzaC5iYW5uZXIuJyArIGkpOyAgICAgIFxyXG4gICAgLy8gICAgICAgYmFubmVyLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCdtYXJnaW46MTBweCAyOXB4IDI1cHggMDsnKTsgICAgICAgICAgICBcclxuICAgIC8vICAgICAgIGlmIChlbGVtZW50X2FycmF5Lmxlbmd0aCA+PSA1KmkgJiYgZWxlbWVudF9hcnJheVs2KmldICE9IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gICAgICAgICBlbGVtZW50X2FycmF5Wyg2KmkpLTFdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJhbm5lciwgZWxlbWVudF9hcnJheVsoNippKS0xXS5uZXh0U2libGluZyk7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuZGVmaW5lU2xvdHNfZnVuYyhiYW5uZXIuaWQsIGJhbm5lcl9zaXplcyk7ICAgXHJcbiAgICAvLyAgICAgICB9ICBcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0gICAgICBcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBkZWZpbmUgcHJvbW8gLSBOT1QgUkVMRVZBTlQgaW4gSFAgLSAtIE9QRU4gSVQgaW4gQ0FURUdPUlkgUEFHRSAtIHNob3VsZCBiZSBpbiBhZG1pbiBhcnJheSBHUCAhISEhXHJcbiAgICAvLyBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMucHJvbW8ubWFnYXppbmVzXCIpKSB7XHJcbiAgICAvLyAgIGxldCBwcm9tb19zbG90ID0gXCJhZHMucHJvbW8ubWFnYXppbmVzXCI7XHJcbiAgICAvLyAgIGxldCBwcm9tb19iYW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9tb19zbG90KTtcclxuICAgIC8vICAgbGV0IHByb21vX3NpemUgPSBwcm9tb19iYW5uZXIuZ2V0QXR0cmlidXRlKFwiZGF0YS1hZC1zaXplc1wiKTtcclxuICAgIC8vICAgbGV0IHByb21vX3NpemVfb2JqO1xyXG4gICAgLy8gICBpZiAocHJvbW9fc2l6ZSA9PSB1bmRlZmluZWQgfHwgcHJvbW9fc2l6ZSA9PSBudWxsIHx8IHByb21vX3NpemUgPT0gW251bGwsbnVsbF0gfHwgcHJvbW9fc2l6ZS5pbmNsdWRlcyhudWxsKSkge1xyXG4gICAgLy8gICAgICBwcm9tb19zaXplX29iaiA9IFtbMTE5MiwgMTAwXSwgWzk3MCwgMTI1XV07XHJcbiAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgcHJvbW9fc2l6ZV9vYmogPSBKU09OLnBhcnNlKHByb21vX3NpemUpO1xyXG4gICAgLy8gICB9XHJcbiAgICAgXHJcbiAgICAvLyAgIGxldCBwcm9tb19mbHVpZCA9IHByb21vX2Jhbm5lci5nZXRBdHRyaWJ1dGUoXCJkYXRhLWZsdWlkLWNoZWNrZWRcIik7XHJcbiAgICAvLyAgIGlmIChwcm9tb19mbHVpZCA9PSBcInRydWVcIiB8fCBwcm9tb19mbHVpZCA9PSB0cnVlKSB7XHJcbiAgICAvLyAgICAgICBsZXQgbmV3X3Byb21vX3NpemVzX29iajtcclxuICAgIC8vICAgICAgIGlmIChwcm9tb19zaXplX29ialsxXVswXSA9PSB1bmRlZmluZWQpIHtcclxuICAgIC8vICAgICAgICAgbmV3X3Byb21vX3NpemVzX29iaiA9IFtwcm9tb19zaXplX29iaiwgWydmbHVpZCddXTtcclxuICAgIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgIG5ld19wcm9tb19zaXplc19vYmogPSBbLi4ucHJvbW9fc2l6ZV9vYmosIFsnZmx1aWQnXV07XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICB0aGlzLmRlZmluZVNsb3RzX2Z1bmMocHJvbW9fc2xvdCwgbmV3X3Byb21vX3NpemVzX29iaik7ICAgICAgICAgICAgIFxyXG4gICAgLy8gICB9IGVsc2Uge1xyXG4gICAgLy8gICAgIHRoaXMuZGVmaW5lU2xvdHNfZnVuYyhwcm9tb19zbG90LCBwcm9tb19zaXplX29iaik7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvbW9fc2xvdCkuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOyBtYXJnaW46MCBhdXRvIDE1cHggYXV0bzsgdGV4dC1hbGlnbjpjZW50ZXI7IGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogY2VudGVyO1wiKTtcclxuICAgIC8vIH1cclxuICAgIFxyXG4gICAgXHJcbiAgLy8gTk9UIEhQICAtIE5PVCBSRUxFVkFOVCBpbiBIUCAtIE9QRU4gSVQgaW4gQ0FURUdPUlkgUEFHRSAtIHNob3VsZCBiZSBpbiBhZG1pbiBhcnJheSBHUCAgKyBhZGQgc3BlY2lmaWMgc3R5bGUgIC0gXCJiYW5uZXJcIjogXCJuYXRpdmVfY2hhbm5lbFwiICEhISFcclxuICAvLyBpZiAodGhpcy5uZXdHcmlkID09IDEyNDApIHtcclxuICAvLyAgICAgaWYgKEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1tcImFkcy5zdHJpcC5jaGFubmVsLjFcIl0pIHtcclxuICAvLyAgICAgdGhpcy5kZWZpbmVTbG90c19mdW5jKFwiYWRzLnN0cmlwLmNoYW5uZWwuMVwiLCBbWydmbHVpZCddLCBbMzAwLCAyNTZdXSk7ICAgIFxyXG4gIC8vICAgICBsZXQgU3RyaXBCYW5uZXJMb2FkZWQgPSBmYWxzZTtcclxuICAvLyAgICAgSW5mcmFzcnVjdHVyZUNsYXNzT2JqLlNsb3RSZW5kZXJFbmQoZnVuY3Rpb24oZXZlbnQpIHtcclxuICAvLyAgICAgICBpZiAoZXZlbnQuc2xvdCA9PSBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW1wiYWRzLnN0cmlwLmNoYW5uZWwuMVwiXSkge1xyXG4gIC8vICAgICAgICAgaWYgKCFTdHJpcEJhbm5lckxvYWRlZCkge1xyXG4gIC8vICAgICAgICAgICBpZiAoIWV2ZW50LmlzRW1wdHkpIHtcclxuICAvLyAgICAgICAgICAgICBsZXQgU3RyaXBzdHlsZV9iYW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XHJcbiAgLy8gICAgICAgICAgICAgU3RyaXBzdHlsZV9iYW5uZXIuaW5uZXJIVE1MID0gYGRpdltpZD0nYWRzLnN0cmlwLmNoYW5uZWwuMSddIHtcclxuICAvLyAgICAgICAgICAgICAgI
1HdpZHRoOjMwMHB4ICFpbXBvcnRhbnQ7XHJcbiAgLy8gICAgICAgICAgICAgICBoZWlnaHQ6IDI4MHB4ICFpbXBvcnRhbnQ7IFxyXG4gIC8vICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogNXB4IHNvbGlkICMxNDE3YWM7ICAgICAgICAgICAgICAgXHJcbiAgLy8gICAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgICAgZGl2W2lkPSdhZHMuc3RyaXAuY2hhbm5lbC4xJ10gaWZyYW1lIHtcclxuICAvLyAgICAgICAgICAgICAgICB3aWR0aDozMDBweCAhaW1wb3J0YW50O1xyXG4gIC8vICAgICAgICAgICAgICAgIGhlaWdodDogMjgwcHggIWltcG9ydGFudDtcclxuICAvLyAgICAgICAgICAgICAgfWA7XHJcbiAgLy8gICAgICAgICAgICAgbGV0IHN0cmlwX2Jhbm5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLnN0cmlwLmNoYW5uZWwuMVwiKTtcclxuICAvLyAgICAgICAgICAgICAvL3N0cmlwX2Jhbm5lci5hcHBlbmRDaGlsZChTdHJpcHN0eWxlX2Jhbm5lcik7IFxyXG4gIC8vICAgICAgICAgICAgIHN0cmlwX2Jhbm5lci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShTdHJpcHN0eWxlX2Jhbm5lciwgc3RyaXBfYmFubmVyLm5leHRTaWJsaW5nKTsgXHJcbiAgLy8gICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgU3RyaXBCYW5uZXJMb2FkZWQgPSB0cnVlO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBNQUdBWklORVMgLSBub3QgcmVsZXZhbnQgeWV0IC0gTk9UIFJFTEVWQU5UIGluIEhQIC0gXHJcbiAgLy8gT1BFTiBJVCBpbiBDQVRFR09SWSBQQUdFIC0gc2hvdWxkIGJlIGluIGFkbWluIGFycmF5IEdQICArIGFkZCBzcGVjaWZpYyBzdHlsZSAgLSBcImJhbm5lclwiOiBcInN0cmlwLmNvbnRlbnRcIiAhISEhXHJcbiAgLy8gTmVlZCBzcGVjaWZpYyBzdHlsZSBmb3IgYWRkaW5nIGl0IGZyb20gZ3B0IGZpbGUsIG5lZWQgdG8gdGhpbmtpbmcgaG93IGl0IHdpbGwgYmU/XHJcbiAgLy8gaWYgKHRoaXMueW5ldF9zaXRlcykge1xyXG4gIC8vICAgICBpZiAoQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLlNsb3RzW1wiYWRzLnN0cmlwLmNvbnRlbnQuMVwiXSkge1xyXG4gIC8vICAgICAgIHRoaXMuZGVmaW5lU2xvdHNfZnVuYyhcImFkcy5zdHJpcC5jb250ZW50LjFcIiwgW1snZmx1aWQnXSwgWzM0NCwgMTAwXV0pO1xyXG4gIC8vICAgICAgIGxldCBzdHJpcGNvbnRlbnRfYmFubmVyXzEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XHJcbiAgLy8gICAgICAgc3RyaXBjb250ZW50X2Jhbm5lcl8xLmlubmVySFRNTCA9IGBkaXZbaWQ9J2Fkcy5zdHJpcC5jb250ZW50LjEnXXttaW4taGVpZ2h0OiAxMDBweCAhaW1wb3J0YW50O31cclxuICAvLyAgICAgICBkaXZbaWQ9J2Fkcy5zdHJpcC5jb250ZW50LjEnXSBpZnJhbWUge21pbi1oZWlnaHQ6IDEwMHB4ICFpbXBvcnRhbnQ7fWA7XHJcbiAgLy8gICAgICAgbGV0IHN0cmlwX2Jhbm5lcl8xID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuc3RyaXAuY29udGVudC4xXCIpO1xyXG4gIC8vICAgICAgIHN0cmlwX2Jhbm5lcl8xLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHN0cmlwY29udGVudF9iYW5uZXJfMSwgc3RyaXBfYmFubmVyXzEubmV4dFNpYmxpbmcpOyBcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBpZiAoQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLlNsb3RzW1wiYWRzLnN0cmlwLmNvbnRlbnQuMlwiXSkge1xyXG4gIC8vICAgICAgIHRoaXMuZGVmaW5lU2xvdHNfZnVuYyhcImFkcy5zdHJpcC5jb250ZW50LjJcIiwgW1snZmx1aWQnXSwgWzM0NCwgMTAwXV0pO1xyXG4gIC8vICAgICAgIGxldCBzdHJpcGNvbnRlbnRfYmFubmVyXzIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XHJcbiAgLy8gICAgICAgc3RyaXBjb250ZW50X2Jhbm5lcl8yLmlubmVySFRNTCA9IGBkaXZbaWQ9J2Fkcy5zdHJpcC5jb250ZW50LjInXXttaW4taGVpZ2h0OiAxMDBweCAhaW1wb3J0YW50O31cclxuICAvLyAgICAgICBkaXZbaWQ9J2Fkcy5zdHJpcC5jb250ZW50LjInXSBpZnJhbWUge21pbi1oZWlnaHQ6IDEwMHB4ICFpbXBvcnRhbnQ7fWA7XHJcbiAgLy8gICAgICAgbGV0IHN0cmlwX2Jhbm5lcl8yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuc3RyaXAuY29udGVudC4yXCIpO1xyXG4gIC8vICAgICAgIHN0cmlwX2Jhbm5lcl8yLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHN0cmlwY29udGVudF9iYW5uZXJfMiwgc3RyaXBfYmFubmVyXzIubmV4dFNpYmxpbmcpOyBcclxuICAvLyAgICAgfVxyXG4gICAgICBcclxuICAvLyAgICAgaWYgKEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5TbG90c1tcImFkcy5ib3guY29udGVudC4xXCJdKSB7XHJcbiAgLy8gICAgICAgdGhpcy5kZWZpbmVTbG90c19mdW5jKFwiYWRzLmJveC5jb250ZW50LjFcIiwgWydmbHVpZCddKTtcclxuICAvLyAgICAgfVxyXG4gICAgXHJcbiAgLy8gfVxyXG5cclxuICAvLyBpZiBhZHMuc3RyaXAubWFya2V0aW5nIGV4aXN0IC0gY2hlY2sgaW4gdGhlIGFycmF5LCB3aGVuIGFkbWluIGlzIHJlYWR5IC1OT1QgUkVMRVZBTlQgLSBPUEVOIElUIEFGVEVSIFRFU1RJTkcgR0VORVJBTCBCQU5ORVJTIEZJUlNUICEhISFcclxuICAvLyBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5hcnRpY2xlLWhlYWRsaW5lcy1hdXRvLXBwbHVzXCIpKSB7XHJcbiAgLy8gICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuUHBsdXNBcnRpY2xlSGVhZGxpbmVzQXV0by5zaG93LWFkLXRydWVcIikpIHsgICBcclxuICAvLyAgICAgICAgICAgICAgICAgbGV0IGJhbm5lcl9zaXplcyA9ICAgW1snZmx1aWQnXSwgWzkwMCwgMjAwXV07XHJcbiAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGZsYXNoX2VsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5QcGx1c0FydGljbGVIZWFkbGluZXNBdXRvIC5zbG90Vmlld1wiKTtcclxuICAvLyAgICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRfYXJyYXkgPSBBcnJheS5mcm9tKGZsYXNoX2VsZW1lbnRzKTtcclxuICAvLyAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCA1OyBpKyspIHtcclxuICAvLyAgICAgICAgICAgICAgICAgICBsZXQgYmFubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgLy8gICAgICAgICAgICAgICAgICAgYmFubmVyLnNldEF0dHJpYnV0ZSgnaWQnLCAnYWRzLnN0cmlwLm1hcmtldGluZy4nICsgaSk7ICAgICAgXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgYmFubmVyLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCdkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsnKTsgICAgICAgICAgICBcclxuICAvLyAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudF9hcnJheS5sZW5ndGggPj0gNCppICYmIGVsZW1lbnRfYXJyYXlbNCppXSAhPSB1bmRlZmluZWQpIHtcclxuICAvLyAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfYXJyYXlbKDQqaSktMV0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYmFubmVyLCBlbGVtZW50X2FycmF5Wyg0KmkpLTFdLm5leHRTaWJsaW5nKTtcclxuICAvLyAgICAgICAgICAgICAgICAgICAgI
1HRoaXMuZGVmaW5lU2xvdHNfZnVuYyhiYW5uZXIuaWQsIGJhbm5lcl9zaXplcyk7ICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAvLyAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgXHJcbiAgLy8gICAgICAgICAgICAgICAgIH0gIFxyXG5cclxuICAvLyAgICAgICAgICAgICAgICAgYWRVbml0U3R5bGVzQ2xhc3NPYmpbXCJwcGx1c19zdHJpcHNcIl0oXCJwcGx1c19zdHJpcHNcIik7ICBcclxuICAvLyAgICAgICB9ICAgICAgICAgICBcclxuICAvLyB9XHJcblxyXG4gIC8vIGlmIGFkcy5zdHJpcC5tYXJrZXRpbmcuMSBleGlzdCAtIGNoZWNrIGluIHRoZSBhcnJheSwgd2hlbiBhZG1pbiBpcyByZWFkeSAtIE5PVCBSRUxFVkFOVCAtIE9QRU4gSVQgQUZURVIgVEVTVElORyBHRU5FUkFMIEJBTk5FUlMgRklSU1QgISEhIVxyXG4gIC8vIGlmICh0aGlzLnluZXRfc2l0ZXMgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5zaG93LWFkLXRydWVcIikpIHsgXHJcbiAgLy8gICAgICBsZXQgc3RyaXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAvLyAgICAgIHN0cmlwLnNldEF0dHJpYnV0ZSgnaWQnLCBcImFkcy5zdHJpcC5tYXJrZXRpbmcuMVwiKTtcclxuICAvLyAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLkxhaXNoYUFydGljbGVIZWFkbGluZXNcIikpIHtcclxuICAvLyAgICAgICBjb25zdCBzdHJpcF9lbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5MYWlzaGFBcnRpY2xlSGVhZGxpbmVzIC5zbG90Vmlld1wiKVszXTtcclxuICAvLyAgICAgICBzdHJpcF9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHN0cmlwLCBzdHJpcF9lbGVtZW50Lm5leHRTaWJsaW5nKTtcclxuICAvLyAgICAgICBzdHJpcC5zdHlsZS50ZXh0QWxpZ24gPSBcImNlbnRlclwiOyAgICBcclxuICAvLyAgICAgICBzdHJpcC5zdHlsZS5tYXJnaW5Cb3R0b20gPSBcIjMwcHhcIjsgXHJcbiAgLy8gICAgICAgdGhpcy5kZWZpbmVTbG90c19mdW5jKFwiYWRzLnN0cmlwLm1hcmtldGluZy4xXCIsIFtbJ2ZsdWlkJ10sIFs4NTAsIDE4MF1dKTtcclxuICAvLyAgICAgIH0gICAgICBcclxuICAvLyB9XHJcblxyXG4gIC8vIEJST1dTSSBcclxuICBpZiAod2luZG93LmRjQ0cgPT0gXCJhcnRpY2xlXCIgJiYgd2luZG93LmFsbF9iYW5uZXJzX2lkcy5pbmNsdWRlcyhcImFkcy5pbnJlYWQuMVwiKSkge1xyXG4gICAgICBnb29nbGV0YWcuY21kLnB1c2goZnVuY3Rpb24gKCkgeyBcclxuICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5kaXNhYmxlSW5pdGlhbExvYWQoKTsgICAgICAgXHJcbiAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuZW5hYmxlU2luZ2xlUmVxdWVzdCgpOyAgICAgICAgICAgXHJcbiAgICAgICAgICAvLyBoYW5kbGVycyB0byB0cmFjayBHUFQgZXZlbnRzIChkZWJ1Z2dpbmcgbW9zdGx5KVxyXG4gICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmFkZEV2ZW50TGlzdGVuZXIoXCJzbG90UmVxdWVzdGVkXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICB1cGRhdGVTbG90U3RhdHVzKGV2ZW50LnNsb3QuZ2V0U2xvdEVsZW1lbnRJZCgpLCBcImZldGNoZWRcIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5hZGRFdmVudExpc3RlbmVyKFwic2xvdE9ubG9hZFwiLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdXBkYXRlU2xvdFN0YXR1cyhldmVudC5zbG90LmdldFNsb3RFbGVtZW50SWQoKSwgXCJyZW5kZXJlZFwiKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIHNldCB1cCBsYXp5IGxvYWRpbmdcclxuICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5lbmFibGVMYXp5TG9hZCh7XHJcbiAgICAgICAgICAgIC8vIEZldGNoIHNsb3RzIHdpdGhpbiAyIHZpZXdwb3J0cy5cclxuICAgICAgICAgICAgZmV0Y2hNYXJnaW5QZXJjZW50OiAyMDAsXHJcbiAgICAgICAgICAgIC8vIFJlbmRlciBzbG90cyB3aXRoaW4gMSB2aWV3cG9ydHMuXHJcbiAgICAgICAgICAgIHJlbmRlck1hcmdpblBlcmNlbnQ6IDEwMCxcclxuICAgICAgICAgICAgLy8gRG91YmxlIHRoZSBhYm92ZSB2YWx1ZXMgb24gbW9iaWxlLCB3aGVyZSB2aWV3cG9ydHMgYXJlIHNtYWxsZXJcclxuICAgICAgICAgICAgLy8gYW5kIHVzZXJzIHRlbmQgdG8gc2Nyb2xsIGZhc3Rlci5cclxuICAgICAgICAgICAgbW9iaWxlU2NhbGluZzogMi4wLFxyXG4gICAgICAgIH0pOyAgXHJcbiAgICAgICAgZ29vZ2xldGFnLmVuYWJsZVNlcnZpY2VzKCk7IFxyXG5cclxuICAgICAgICAgIC8vIHJlZnJlc2ggZ3JvdXAgc2xvdHNcclxuICAgICAgICAgIC8vIExvYWQgZmlyc3QgYmF0Y2ggb2YgYWQgc2xvdHNcclxuICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKE9iamVjdC52YWx1ZXMod2luZG93LkFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNfYXJ0aWNsZV8xKSk7XHJcbiAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkucmVmcmVzaChPYmplY3QudmFsdWVzKHdpbmRvdy5BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzX2FydGljbGVfMikpO1xyXG4gICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnJlZnJlc2goT2JqZWN0LnZhbHVlcyh3aW5kb3cuQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c19hcnRpY2xlXzMpKTtcclxuICAgICAgXHJcbiAgICAgICAgIC8vIGV2ZW50IGhhbmRsZXIgZm9yIGFkIHNsb3RzIHN0YXRlIGNoYW5nZXNcclxuICAgICAgICAgZnVuY3Rpb24gdXBkYXRlU2xvdFN0YXR1cyhzbG90SWQsIHN0YXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2xvdElkICsgXCItXCIgKyBzdGF0ZSk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIltcIiArIHNsb3RJZCArIFwiXSBcIiArIHN0YXRlICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbn0gZWxzZSBpZiAoKHdpbmRvdy5kY0NHID09IFwiaG9tZVwiIHx8IHdpbmRvdy5kY1BhdGggPT0gXCIyNzc1LktuZXNzZXQtMS5Ib21lXCIgfHwgd2luZG93LmRjUGF0aCA9PSBcIjI3NzUuS25lc3NldC0xLkhvbWVcIikgJiYgd2luZG93LmJyb3dzaV9vbl9ncHQgPT09IFwiVHJ1ZVwiKSB7XHJcbiAgICAgZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuZGlzYWJsZUluaXRpYWxMb2FkKCk7XHJcbiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmVuYWJsZVNpbmdsZVJlcXVlc3QoKTtcclxuICAgICAgICBnb29nbGV0YWcuZW5hYmxlU2VydmljZXMoKTtcclxuXHJcbiAgICAgICAgLy8gcmVmcmVzaCBhbGwgc2xvdHMgKHdpdGhvdXQgYnJvd3NpKVxyXG4gICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKFxyXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHdpbmRvdy5BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzKSxcclxuICAgICAgICAgICAgeyBjaGFuZ2VDb3JyZWxhdG9yOiBmYWxzZSB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgSEJfVElNRU9VVCA9IDMwMDA7XHJcbiAgICAgICAgY29uc3Qgc2xvdCA9IHdpbmRvdy5BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RfYnJvd3NpW1wiYWRzLmJveC4zXCJdO1xyXG5cclxuICAgICAgICB3aW5kb3cuYnJvd3NpdGFnID0gd2luZG93LmJyb3dzaXRhZyB8fCB7IGNtZDogW10gfTtcclxuXHJcbiAgICAgICAgbGV0IGhiUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgI
1HdpbmRvdy5icm93c2l0YWcuY21kLnB1c2goYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGhiQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5icm93c2l0YWcucHJvY2Vzc0hCID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB3aW5kb3cuYnJvd3NpdGFnLnByb2Nlc3NIQihzbG90KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGJDb21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJCcm93c2kgSEIgZXJyb3I6XCIsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJCcm93c2kgcHJvY2Vzc0hCIG5vdCBhdmFpbGFibGVcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhoYkNvbXBsZXRlZCA/IFwiSEIgY29tcGxldGVkXCIgOiBcIkhCIG5vdCBjb21wbGV0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgUHJvbWlzZS5yYWNlKFtcclxuICAgICAgICAgICAgaGJQcm9taXNlLFxyXG4gICAgICAgICAgICBuZXcgUHJvbWlzZS
1hyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgSEJfVElNRU9VVCkpXHJcbiAgICAgICAgXSlcclxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSEIgZmluaXNoZWQgb3IgdGltZW91dCDihpIgcmVmcmVzaCBCcm93c2kgc2xvdFwiKTtcclxuICAgICAgICAgICAgaWYgKGdvb2dsZXRhZy5wdWJhZHMoKS5pc0luaXRpYWxMb2FkRGlzYWJsZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnJlZnJlc2goXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyh3aW5kb3cuQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90X2Jyb3dzaSksXHJcbiAgICAgICAgICAgICAgICAgICAgeyBjaGFuZ2VDb3JyZWxhdG9yOiBmYWxzZSB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgIH0pOyBcclxufSBlbHNlIHtcclxuICAgIC8vIExBWlkgTE9BRCBcclxuICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHtcclxuICAgICAgaWYgKHdpbmRvdy5ncHRfZ3JvdXBfbmFtZSAhPSB1bmRlZmluZWQgJiYgKHdpbmRvdy5kY0NHID09IFwiaG9tZVwiIHx8IHdpbmRvdy5kY1BhdGggPT0gXCIyNzc1LktuZXNzZXQtNjQ4NTIuc2lkZWhvbXBhZ2VcIiB8fCB3aW5kb3cuZGNQYXRoID09IFwiMjc3NS5LbmVzc2V0LTMzMTEzLmFkaXBlZXJpXCIgfHwgd2luZG93LmRjUGF0aCA9PSBcIjEuQ2VudHJhbERlc2stMS5Ib21lXCIpKSB7XHJcbiAgICAgICAgc3dpdGNoKHdpbmRvdy5ncHRfZ3JvdXBfbmFtZSkgeyAgICBcclxuICAgICAgICAgIGNhc2Uod2luZG93LnRlc3RfZ3JvdXBfc3RyLmV4cDRfc3JhX2JhdGNoKTpcclxuICAgICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmRpc2FibGVJbml0aWFsTG9hZCgpOyAgICAgICBcclxuICAgICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmVuYWJsZVNpbmdsZVJlcXVlc3QoKTsgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBoYW5kbGVycyB0byB0cmFjayBHUFQgZXZlbnRzIChkZWJ1Z2dpbmcgbW9zdGx5KVxyXG4gICAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuYWRkRXZlbnRMaXN0ZW5lcihcInNsb3RSZXF1ZXN0ZWRcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgdXBkYXRlU2xvdFN0YXR1cyhldmVudC5zbG90LmdldFNsb3RFbGVtZW50SWQoKSwgXCJmZXRjaGVkXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmFkZEV2ZW50TGlzdGVuZXIoXCJzbG90T25sb2FkXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIHVwZGF0ZVNsb3RTdGF0dXMoZXZlbnQuc2xvdC5nZXRTbG90RWxlbWVudElkKCksIFwicmVuZGVyZWRcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gc2V0IHVwIGxhenkgbG9hZGluZ1xyXG4gICAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuZW5hYmxlTGF6eUxvYWQoe1xyXG4gICAgICAgICAgICAgICAgLy8gRmV0Y2ggc2xvdHMgd2l0aGluIDIgdmlld3BvcnRzLlxyXG4gICAgICAgICAgICAgICAgZmV0Y2hNYXJnaW5QZXJjZW50OiAyMDAsIC8vIG9sZCBwYXJhbWV0ZXIgLSAyMDBcclxuICAgICAgICAgICAgICAgIC8vIFJlbmRlciBzbG90cyB3aXRoaW4gMSB2aWV3cG9ydHMuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJNYXJnaW5QZXJjZW50OiAxMDAsXHJcbiAgICAgICAgICAgICAgICAvLyBEb3VibGUgdGhlIGFib3ZlIHZhbHVlcyBvbiBtb2JpbGUsIHdoZXJlIHZpZXdwb3J0cyBhcmUgc21hbGxlclxyXG4gICAgICAgICAgICAgICAgLy8gYW5kIHVzZXJzIHRlbmQgdG8gc2Nyb2xsIGZhc3Rlci5cclxuICAgICAgICAgICAgICAgIG1vYmlsZVNjYWxpbmc6IDIuMCxcclxuICAgICAgICAgICAgfSk7ICBcclxuICAgICAgICAgICAgZ29vZ2xldGFnLmVuYWJsZVNlcnZpY2VzKCk7IFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgIC8vIHJlZnJlc2ggZ3JvdXAgc2xvdHNcclxuICAgICAgICAgICAgZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uICgpIHsgXHJcbiAgICAgICAgICAgICAgLy8gTG9hZCBmaXJzdCBiYXRjaCBvZiBhZCBzbG90c1xyXG4gICAgICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKE9iamVjdC52YWx1ZXMod2luZG93LkFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNfMSkpO1xyXG4gICAgICAgICAgICAgIC8vZ29vZ2xldGFnLnB1YmFkcygpLnJlZnJlc2goT2JqZWN0LnZhbHVlcyh3aW5kb3cuQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c18yKSk7XHJcbiAgICAgICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnJlZnJlc2goT2JqZWN0LnZhbHVlcyh3aW5kb3cuQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c18zKSk7XHJcbiAgICAgICAgICAgICAgLy9nb29nbGV0YWcucHViYWRzKCkucmVmcmVzaChPYmplY3QudmFsdWVzKHdpbmRvdy5BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzXzQpKTtcclxuICAgICAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkucmVmcmVzaChPYmplY3QudmFsdWVzKHdpbmRvdy5BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzXzUpKTtcclxuICAgICAgICAgICAgICAvL2dvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKE9iamVjdC52YWx1ZXMod2luZG93LkFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNfNikpO1xyXG4gICAgICAgICAgICAgIC8vZ29vZ2xldGFnLnB1YmFkcygpLnJlZnJlc2goT2JqZWN0LnZhbHVlcyh3aW5kb3cuQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c183KSk7XHJcbiAgICAgICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnJlZnJlc2goT2JqZWN0LnZhbHVlcyh3aW5kb3cuQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c184KSk7XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGV2ZW50IGhhbmRsZXIgZm9yIGFkIHNsb3RzIHN0YXRlIGNoYW5nZXNcclxuICAgICAgICAgICAgZnVuY3Rpb24gdXBkYXRlU2xvdFN0YXR1cy
1hzbG90SWQsIHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNsb3RJZCArIFwiLVwiICsgc3RhdGUpO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiW1wiICsgc2xvdElkICsgXCJdIFwiICsgc3RhdGUgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7ICBcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5lbmFibGVTaW5nbGVSZXF1ZXN0KCk7IFxyXG4gICAgICAgICAgICBnb29nbGV0YWcuZW5hYmxlU2VydmljZXMoKTsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7ICAgICAgXHJcbiAgICAgICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbiAoKSB7IFxyXG4gICAgICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKE9iamVjdC52YWx1ZXMod2luZG93LkFkVW5pdFByb3BlcnRpZXNDbGFzc29iai5EZWZpbmVfc2xvdHNfbmF0aXZlKSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5lbmFibGVTaW5nbGVSZXF1ZXN0KCk7XHJcbiAgICAgICAgICBnb29nbGV0YWcuZW5hYmxlU2VydmljZXMoKTsgICAgICAgICAgICAgICAgICBcclxuICAgICAgfSAgICAgICAgICBcclxuICAgIH0pOyBcclxuICB9XHJcblxyXG4gICAgXHJcbiAgLy8gcmVuZGVyIGVhY2ggc2xvdFxyXG4gICAgZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5hZGRFdmVudExpc3RlbmVyKFwic2xvdFJlbmRlckVuZGVkXCIsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICBsZXQgYmFubmVyX2xvYWRlZCA9IGZhbHNlOyBcclxuICAgICAgICAgIGxldCBzbG90X2lkID0gZXZlbnQuc2xvdC5nZXRTbG90RWxlbWVudElkKCk7ICBcclxuICAgICAgICAgIGxldCBib3hlc19iYW5uZXJzID0gW107ICAgXHJcbiAgICAgICAgICBmb3IgKGxldCBibmFkbGFuX2kgPSAxOyBibmFkbGFuX2kgPCA0OyBibmFkbGFuX2krKykgYm94ZXNfYmFubmVycy5wdXNoKFwiYWRzLmJveC5uYWRsYW4uXCIgKyBibmFkbGFuX2kpO1xyXG4gICAgICAgICAgZm9yIChsZXQgYmhvdGJveF9pID0gMTsgYmhvdGJveF9pIDwgMzsgYmhvdGJveF9pKyspIGJveGVzX2Jhbm5lcnMucHVzaChcImFkcy5ib3guaG90Ym94Lm5hdGl2ZS5cIiArIGJob3Rib3hfaSk7XHJcbiAgICAgICAgICBmb3IgKGxldCBibGFpc2hhX2kgPSAxOyBibGFpc2hhX2kgPCAzOyBibGFpc2hhX2krKykgYm94ZXNfYmFubmVycy5wdXNoKFwiYWRzLmJveC5sYWlzaGEuXCIgKyBibGFpc2hhX2kpO1xyXG4gICAgICAgICAgZm9yIChsZXQgYmNvbnRlbnRfaSA9IDE7IGJjb250ZW50X2kgPCA3OyBiY29udGVudF9pKyspIGJveGVzX2Jhbm5lcnMucHVzaChcImFkcy5ib3guY29udGVudC5cIiArIGJjb250ZW50X2kpO1xyXG4gICAgICAgICAgbGV0IGJveF9iYW5uZXIgPSAoYm94ZXNfYmFubmVycy5maWx0ZXIoeCA9PiB4LmluY2x1ZGVzKHNsb3RfaWQpKSA9PSBzbG90X2lkKSA/IHNsb3RfaWQgOiBmYWxzZTtcclxuICAgICAgICAgIC8vIFRPUFxyXG4gICAgICAgICAgaWYgKHNsb3RfaWQgPT0gXCJhZHMudG9wXCIpIHtcclxuICAgICAgICAgICAgICBpZiAoIWJhbm5lcl9sb2FkZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZXZlbnQuaXNFbXB0eSkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgZXZlbnRfc2l6ZSA9IGV2ZW50LnNpemUgKyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgZXZlbnRfdyA9IGV2ZW50X3NpemUuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgcHJlbWl1bV9kaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5wcmVtaXVtXCIpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIXByZW1pdW1fZGl2IHx8IChwcmVtaXVtX2RpdiAmJiBwcmVtaXVtX2Rpdi5jaGlsZE5vZGVzLmxlbmd0aCA9PSAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudF93WzFdID4gXCIxXCIgJiYgZXZlbnRfc2l6ZSAhPSBcImZsdWlkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudF93WzBdID09IFwiMTE5MlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLnRvcFwiKS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJhY2tncm91bmQtY29sb3I6IHJnYigyMzMsIDIzMywgMjMzKTsgY2xlYXI6IGJvdGg7IG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmc6IDA7IHdpZHRoOiAxMjAycHg7IG1hcmdpbjogMHB4IGF1dG87IGJvcmRlcjogNXB4IHNvbGlkIHJnYigyMzMsIDIzMywgMjMzKTsgYm94LXNpemluZzogYm9yZGVyLWJveDtcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB3aWR0aF90b3AgPSAoZXZlbnRfd1swXSA9PSBcIjFcIiB8fCBldmVudF9zaXplID09IFwiZmx1aWRcIikgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy50b3BcIikub2Zmc2V0V2lkdGggOiBwYXJzZUludChldmVudF93WzBdLCAxMCk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwieWJveGltZ1wiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aF90b3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInlib3hpbWdcIikub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLnRvcFwiKS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImNsZWFyOiBib3RoOyBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7IHdpZHRoOiBcIiArIHBhcnNlSW50KHdpZHRoX3RvcCsxMCkgKyBcInB4ICFpbXBvcnRhbnQ7XCIgKyBcIm1hcmdpbjogMHB4IGF1dG87IGJvcmRlcjogNXB4IHNvbGlkIHJnYigyMzMsIDIzMywgMjMzKTsgYm94LXNpemluZzogYm9yZGVyLWJveDtcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnNpemUgPT0gXCI5NzAsMTMwXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnNpemUgPT0gXCI5NzAsOTBcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc2l6ZSA9PSBcIjk4MCwxMDBcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc2l6ZSA9PSBcIjExOTIsOTBcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc2l6ZSA9PSBcIjExOTIsMTMwXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnNpemUgPT0gXCIxMDA1LDEyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB
1BZFVuaXRGdW5jdGlvbnNDbGFzc09iai5maW5kQWxsRGl2X2Z1bmMoKTsgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW5GdW5jdGlvbkNsYXNzT2JqLmdldFN0eWxlVG9wX2Z1bmMoZXZlbnQpOyAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJhbm5lcl9sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgLy8gQk9YRVM6IE1FTlRBLCBOQURMQU4sIExBSVNIQSwgQ09OVEVOVCAtIEhQXHJcbiAgICAgICAgICBpZiAoc2xvdF9pZCA9PSBcImFkcy5ib3gubWVudGEuMVwiXHJcbiAgICAgICAgICB8fCAoYm94X2Jhbm5lciAmJiBzbG90X2lkID09IFtib3hfYmFubmVyXSkgXHJcbiAgICAgICAgICB8fCBzbG90X2lkID09IFwiYWRzLnJpZ2h0Ym94X25hdGl2ZS4xXCIpIHtcclxuICAgICAgICAgICAgaWYgKCFiYW5uZXJfbG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LmlzRW1wdHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXRlZF9pZCA9IHNsb3RfaWQuc3BsaXQoXCJhZHMuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWVbaWQqPScgKyAnXCInK3NwbGl0ZWRfaWRbMV0rJ1wiJyArJ10nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBiYW5uZXJfc3R5bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWVbaWQqPScgKyAnXCInK3NwbGl0ZWRfaWRbMV0rJ1wiJyArJ10nKS5zdHlsZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc2xvdC5nZXRTbG90RWxlbWVudElkKCkuaW5jbHVkZXMoXCJhZHMuYm94Lm1lbnRhXCIpKSBiYW5uZXJfc3R5bGUubWluSGVpZ2h0ID0gXCIyMThweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5zbG90LmdldFNsb3RFbGVtZW50SWQoKS5pbmNsdWRlcyhcImFkcy5ib3gubmFkbGFuXCIpKSBiYW5uZXJfc3R5bGUubWluSGVpZ2h0ID0gXCIxNzhweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5zbG90LmdldFNsb3RFbGVtZW50SWQoKS5pbmNsdWRlcyhcImFkcy5ib3gubGFpc2hhXCIpKSBiYW5uZXJfc3R5bGUubWluSGVpZ2h0ID0gXCIyODdweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5zbG90LmdldFNsb3RFbGVtZW50SWQoKS5pbmNsdWRlcyhcImFkcy5ib3guY29udGVudFwiKSkgYmFubmVyX3N0eWxlLm1pbkhlaWdodCA9IFwiMjEwcHhcIjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc2xvdC5nZXRTbG90RWxlbWVudElkKCkuaW5jbHVkZXMoXCJhZHMuaG90Ym94Lm5hdGl2ZVwiKSkgYmFubmVyX3N0eWxlLm1heEhlaWdodCA9IFwiMjE4cHhcIjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc2xvdC5nZXRTbG90RWxlbWVudElkKCkuaW5jbHVkZXMoXCJhZHMucmlnaHRib3hfbmF0aXZlLjFcIikpIGJhbm5lcl9zdHlsZS5taW5IZWlnaHQgPSBcIjIzMnB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJhbm5lcl9sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9ICAgXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgaWYgKHNsb3RfaWQgPT0gXCJhZHMuZ3JheS5iaWcuc3RyaXAuMVwiKSB7XHJcbiAgICAgICAgICAgIC8vbGV0IHdpZHRoX3N0cmlwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuZ3JheS5iaWcuc3RyaXAuMVwiKS5jbGllbnRXaWR0aDsgXHJcbiAgICAgICAgICAgIGxldCBzdHJpcF9zaXplID0gZXZlbnQuc2l6ZSArIFwiXCI7XHJcbiAgICAgICAgICAgIGxldCBzdHJpcF93ID0gc3RyaXBfc2l6ZS5zcGxpdChcIixcIik7ICAgXHJcbiAgICAgICAgICAgIC8vIGlmIChzdHJpcF93WzBdID09IFwiOTcwXCIpIHtcclxuICAgICAgICAgICAgLy8gICB3aWR0aF9zdHJpcCA9IDk3MDtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICBsZXQgc3R5bGVfc3RyaXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XHJcbiAgICAgICAgICAgIC8vIGlkIHN0cmlwX3dbMV0gZG9uJ3QgbWF0Y2gsIHRoZW4gdGFrZSBjbGllbnRIZWlnaHQgb2YgY29udGFpbmVyXHJcbiAgICAgICAgICAgIHN0eWxlX3N0cmlwLmlubmVySFRNTCA9IGBkaXZbaWQ9J2Fkcy5ncmF5LmJpZy5zdHJpcC4xJ10sIGRpdltpZD0nYWRzLmdyYXkuYmlnLnN0cmlwLjEnXSBpZnJhbWUge1xyXG4gICAgICAgICAgICAgICB3aWR0aDoke3N0cmlwX3dbMF19cHggIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgaGVpZ2h0OiAke3N0cmlwX3dbMV19cHggIWltcG9ydGFudDsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1gOyBcclxuICAgICAgICAgICAgbGV0IHN0cmlwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuZ3JheS5iaWcuc3RyaXAuMVwiKTsgICBcclxuICAgICAgICAgICAgc3RyaXAucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc3R5bGVfc3RyaXAsIHN0cmlwLm5leHRTaWJsaW5nKTtcclxuICAgICAgICAgIH1cclxuICBcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gXHJcbiAgfVxyXG4gIH1cclxuICBSZW5kZXJTbWFsbEluYm9yZCgpIHtcclxuICAgIHRoaXMuY291bnRlcl9saXZlYm94Kys7XHJcbiAgICBMb2coJ1JFTkRFUkVEIFNNQUxMIElOQk9BUkQgJyArIHRoaXMuY291bnRlcl9saXZlYm94KTtcclxuICAgIGlmICh0aGlzLmNvdW50ZXJfbGl2ZWJveCA+IDIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IGxpdmVib3hfc2l6ZXMgPSAodGhpcy5nZXREZXZpY2VfZnVuYygpI
1D09IFwiQW5kcm9pZFwiKSA/IFtbMzUwLCAxOTddLCBbMzIwLCA0NTBdLCAnZmx1aWQnLCBbMzEwLCAxNzVdXSA6IFtbMzYwLCAxODBdLCAnZmx1aWQnLCBbMzIwLCAxODBdLCBbMzUwLCAxOTddLCBbMzIwLCA0NTBdXTsgICAgICBcclxuICAgIGlmICh3aW5kb3cuZGNQYXRoLmluY2x1ZGVzKFwiUG5haVBsdXNcIikpIHtcclxuICAgICAgbGl2ZWJveF9zaXplcyA9IFsnZmx1aWQnLCBbMzIwLCAxODBdLCBbMzUwLCAxOTddLCBbMzIwLCA0NTBdXTtcclxuICAgICAgaWYgKHRoaXMuZ2V0RGV2aWNlX2Z1bmMoKSA9PSBcIkFuZHJvaWRcIikge1x0XHJcbiAgICAgICAgICBsaXZlYm94X3NpemVzID0gW1szNTAsIDE5N10sIFszMjAsIDQ1MF0sIFszMjAsMTgwXSwgJ2ZsdWlkJ107XHRcdFx0XHRcdFx0XHRcdFxyXG4gICAgICB9IFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmRlZmluZVNsb3RzX2Z1bmMoXCJhZHMuaW5ib2FyZFwiLCBsaXZlYm94X3NpemVzKTtcclxuICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHtnb29nbGV0YWcuZGlzcGxheShcImFkcy5pbmJvYXJkXCIpO30pO1xyXG5cclxuICAgIEluZnJhc3J1Y3R1cmVDbGFzc09iai5TbG90UmVuZGVyRW5kKGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnNsb3QgPT0gQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c1tcImFkcy5pbmJvYXJkXCJdKSB7XHJcbiAgICAgICAgICBsZXQgbGl2ZWJveExvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCFsaXZlYm94TG9hZGVkKSB7ICBcclxuICAgICAgICAgICAgaWYoIWV2ZW50LmlzRW1wdHkpIHsgICAgIFxyXG4gICAgICAgICAgICAgIGxldCBsaXZlYm94X3Nsb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5pbmJvYXJkXCIpOyBcclxuICAgICAgICAgICAgICBpZiAod2luZG93LmRjQ0cgPT0gXCJhcnRpY2xlXCIgJiYgd2luZG93LmRjUGF0aC5pbmNsdWRlcyhcIlBuYWlQbHVzXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBsaXZlYm94X3Nsb3Quc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJwb3NpdGlvbjogcmVsYXRpdmU7IGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgLXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7IGRpc3BsYXk6LW1zLWZsZXhib3g7IC1tcy1mbGV4LXBhY2s6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgbWFyZ2luOjAgLTMuOTA2MjV2dzsgd2lkdGg6IGNhbGMoMTAwJSArIDcuODEyNXZ3KSAhaW1wb3J0YW50O1wiKTsgXHJcbiAgICAgICAgICAgICAgfSAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsaXZlYm94X3Nsb3Quc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJwb3NpdGlvbjogcmVsYXRpdmU7IGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgLXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7IGRpc3BsYXk6LW1zLWZsZXhib3g7IC1tcy1mbGV4LXBhY2s6Y2VudGVyOyB0ZXh0LWFsaWduOmNlbnRlcjsgbWFyZ2luOjAgYXV0bzsgd2lkdGg6IDEwMCU7XCIpOyBcclxuICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGlmIChsaXZlYm94X3Nsb3QuY2hpbGRyZW5bMF0pIHsgbGl2ZWJveF9zbG90LmNoaWxkcmVuWzBdLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7fVxyXG5cclxuICAgICAgICAgICAgICBpZiAoZXZlbnQubGluZUl0ZW1JZCAhPSBudWxsKSB7IFxyXG4gICAgICAgICAgICAgICAgd2luZG93LkNsb3NlTGl2ZWJveCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuaW5ib2FyZFwiKS5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICB0cnkge2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiTGl2ZUJveF9DbG9zZV9idXR0b25cIikuc3R5bGUuZGlzcGxheSA9ICdub25lJzt9IGNhdGNoIChlKSB7fVxyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IFxyXG4gICAgICAgICAgICAgICAgbGV0IGltZ19saXZlYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcclxuICAgICAgICAgICAgICAgIGltZ19saXZlYm94LmlkID0gXCJMaXZlQm94X0Nsb3NlX2J1dHRvblwiO1xyXG4gICAgICAgICAgICAgICAgaW1nX2xpdmVib3guc3JjID0gXCJodHRwczovL3RvdGFsbWVkaWEyLnluZXQuY28uaWwvbmV3X2dwdC95bmV0X211dGFtL2Nsb3NlLnBuZ1wiO1xyXG4gICAgICAgICAgICAgICAgaW1nX2xpdmVib3guc2V0QXR0cmlidXRlKFwib25DbGlja1wiLCBcIndpbmRvdy5DbG9zZUxpdmVib3goKTtcIik7IFxyXG4gICAgICAgICAgICAgICAgaW1nX2xpdmVib3guc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJjdXJzb3I6IHBvaW50ZXI7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxNHB4OyBsZWZ0OiAxNHB4OyB6LWluZGV4OiA5OTk7XCIpOyBcclxuICAgICAgICAgICAgICAgIGxpdmVib3hfc2xvdC5hcHBlbmRDaGlsZChpbWdfbGl2ZWJveCk7ICAgICAgXHJcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudE5hbWUgPT09ICdpbmJvYXJkY2xzb2VkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJMaXZlQm94X0Nsb3NlX2J1dHRvblwiKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO30gY2F0Y2ggKGUpIHt9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICB9LCBmYWxzZSk7ICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIH0gICAgICAgICAgXHJcbiAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICAgIGxpdmVib3hMb2FkZWQ9dHJ1ZTtcclxuICAgICAgICAgIH0gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgXHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuICB9XHJcbiAgUmVuZGVyQmlnbGl2ZWJveCgpIHtcclxuICAgIHRoaXMuY291bnRlcl9iaWdsaXZlYm94Kys7XHJcbiAgICBMb2coJ1JFTkRFUkVEIEJJR0xJVkVCT1gnKyB0aGlzLmNvdW50ZXJfYmlnbGl2ZWJveCk7XHJcbiAgICBpZiAodGhpcy5jb3VudGVyX2JpZ2xpdmVib3ggPiAyKSB7X
1HJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuZGVmaW5lU2xvdHNfZnVuYyhcImFkcy5iaWdsaXZlYm94XCIsIFtbMzIwLCA0NTBdLCAnZmx1aWQnXSk7IFxyXG4gICAgZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uKCkgeyBnb29nbGV0YWcuZGlzcGxheShcImFkcy5iaWdsaXZlYm94XCIpOyB9KTtcclxuXHJcbiAgICBJbmZyYXNydWN0dXJlQ2xhc3NPYmouU2xvdFJlbmRlckVuZChmdW5jdGlvbihldmVudCkge1xyXG4gICAgICBsZXQgQmlnbGl2ZWJveExvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChldmVudC5zbG90ID09IEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNbXCJhZHMuYmlnbGl2ZWJveFwiXSkge1xyXG4gICAgICAgICAgaWYgKCFCaWdsaXZlYm94TG9hZGVkKSB7ICBcclxuICAgICAgICAgICAgaWYoIWV2ZW50LmlzRW1wdHkpIHsgICAgIFxyXG4gICAgICAgICAgICAgIGxldCBkaXZfYmlnbGl2ZWJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLmJpZ2xpdmVib3hcIik7XHJcbiAgICAgICAgICAgICAgZGl2X2JpZ2xpdmVib3guc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJtYXJnaW46MCBhdXRvOyBwb3NpdGlvbjogcmVsYXRpdmU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7IC13ZWJraXQtYm94LXBhY2s6Y2VudGVyO2Rpc3BsYXk6LW1zLWZsZXhib3g7LW1zLWZsZXgtcGFjazpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJTtcIik7IFxyXG5cclxuICAgICAgICAgICAgICBpZiAoZXZlbnQubGluZUl0ZW1JZCAhPSBudWxsKSB7IFxyXG4gICAgICAgICAgICAgICAgd2luZG93LkNsb3NlQm94ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5iaWdsaXZlYm94XCIpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7fSBjYXRjaCAoZSkge31cclxuICAgICAgICAgICAgICAgIHRyeSB7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJDbG9zZV9idG5fYmlnbGl2ZWJveFwiKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO30gY2F0Y2ggKGUpIHt9XHJcbiAgICAgICAgICAgICAgICBBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5SZW5kZXJTbWFsbEluYm9yZCgpO1xyXG4gICAgICAgICAgICAgICAgfSAgICBcclxuICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgXHJcbiAgICAgICAgICAgICAgICBsZXQgaW1nX2JpZ2xpdmVib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xyXG4gICAgICAgICAgICAgICAgaW1nX2JpZ2xpdmVib3guaWQgPSBcIkNsb3NlX2J0bl9iaWdsaXZlYm94XCI7XHJcbiAgICAgICAgICAgICAgICBpbWdfYmlnbGl2ZWJveC5zcmMgPSBcImh0dHBzOi8vdG90YWxtZWRpYTIueW5ldC5jby5pbC9uZXdfZ3B0L3luZXRfbXV0YW0vY2xvc2UucG5nXCI7XHJcbiAgICAgICAgICAgICAgICBpbWdfYmlnbGl2ZWJveC5zZXRBdHRyaWJ1dGUoXCJvbkNsaWNrXCIsIFwid2luZG93LkNsb3NlQm94KCk7XCIpOyBcclxuICAgICAgICAgICAgICAgIGltZ19iaWdsaXZlYm94LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiY3Vyc29yOiBwb2ludGVyOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTRweDsgbGVmdDogMTRweDsgei1pbmRleDogOTk5O1wiKTsgXHJcbiAgICAgICAgICAgICAgICBkaXZfYmlnbGl2ZWJveC5hcHBlbmRDaGlsZChpbWdfYmlnbGl2ZWJveCk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5ldmVudE5hbWUgPT09ICdpbmJvYXJkY2xzb2VkJykgeyAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJ5IHtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIkNsb3NlX2J0bl9iaWdsaXZlYm94XCIpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7fSBjYXRjaCAoZSkge31cclxuICAgICAgICAgICAgICAgICAgICAgIEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLlJlbmRlclNtYWxsSW5ib3JkKCk7ICBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICB9LCBmYWxzZSk7ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmV2ZW50TmFtZSA9PT0gJ2luYm9hcmRjbHNvZWQnKSB7ICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouUmVuZGVyU21hbGxJbmJvcmQoKTsgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgfSwgZmFsc2UpOyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5SZW5kZXJTbWFsbEluYm9yZCgpO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIEJpZ2xpdmVib3hMb2FkZWQ9dHJ1ZTtcclxuICAgICAgICAgIH0gICAgXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcdFx0XHRcdFx0XHRcdFx0XHRcdCBcdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG4gIH1cclxuICByZW5kZXJBZChpZCwgc2l6ZXMpIHsgLy8gRm9yIGR5bmFtaWMgYmFubmVyc1xyXG4gICAgbGV0IGpzb25PYmpfZGljdCA9IHRoaXMuanNvbk9iajtcclxuICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHtcclxuICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKGpzb25PYmpfZGljdCkpIHtcclxuICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKGtleSwganNvbk9ial9kaWN0W2tleV0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGVsZW1lbnRfaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICBpZiAoZWxlbWVudF9pZCAmJiB3aW5kb3cuZGNTaXRlLmluY2x1ZGVzKFwieW50XCIpICYmIHRoaXMuaW5uZXJXaWR0aCA8PSBcIjc2N1wiKSB0aGlzLmRlZmluZVNsb3RzX2Z1bmMoaWQsIHNpemVzKTtcclxuICB9XHJcbiAgZGVmaW5lU2xvdHM4MDBfZnVuYyhpZCwgc2l6ZSkge1xyXG4gICAgTG9nKFwiZGVmaW5lU2xvdHM4MDBfZnVuY1wiKTtcclxuICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHtcclxuICAgICAgICB
1BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW2lkXSA9IGdvb2dsZXRhZ1xyXG4gICAgICAgICAgLmRlZmluZVNsb3QodGhhdC5hZFVuaXRDYWxsX2Z1bmMoaWQpLCBzaXplLCBpZClcclxuICAgICAgICAgIC5hZGRTZXJ2aWNlKGdvb2dsZXRhZy5wdWJhZHMoKSlcclxuICAgICAgICAgIC5zZXRDb2xsYXBzZUVtcHR5RGl2KHRydWUpO1xyXG4gICAgICAvL2dvb2dsZXRhZy5wdWJhZHMoKS5lbmFibGVTaW5nbGVSZXF1ZXN0KCk7XHJcbiAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5hZGRFdmVudExpc3RlbmVyKFwic2xvdFJlbmRlckVuZGVkXCIsIGV2ZW50ID0+IHtcclxuICAgICAgICBJbmZyYXNydWN0dXJlQ2xhc3NPYmoub25SZW5kZXIoZXZlbnQsIGlkKTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vZ29vZ2xldGFnLmVuYWJsZVNlcnZpY2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgZGVmaW5lU2xvdHNfZnVuYyhpZCwgc2l6ZV9hcnJ5LCB0YXJnZXRfMSA9IFwiXCIsIHRhcmdldF8yID0gXCJcIikge1xyXG4gICAgLy9kZWZpbmVTbG90c19mdW5jIGZ1bmN0b24gY2FsbCBmcm9tIGRlZmluZVVuaXRzX2Z1bmMgYW5kIGNyZWF0ZSBzbG90cyBhbGwgZGF0YSBmb3IgZWFjaCBzbG90IHNhdmUgYXQgRGVmaW5lX3Nsb3RzIE9iamVjdFxyXG4gICAgbGV0IGFkX3VuaXRfcGF0aCA9IHRoaXMuYWRVbml0Q2FsbF9mdW5jKGlkKTtcclxuICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHtcclxuICAgIGxldCBkZWZpbmVfc2xvdCA9IGdvb2dsZXRhZy5kZWZpbmVTbG90KGFkX3VuaXRfcGF0aCwgc2l6ZV9hcnJ5LCBpZCkuYWRkU2VydmljZShnb29nbGV0YWcucHViYWRzKCkpLnNldENvbGxhcHNlRW1wdHlEaXYodHJ1ZSk7XHJcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMiAmJiAodGFyZ2V0XzEgIT0gXCJcIiAmJiB0YXJnZXRfMiAhPSBcIlwiKSkge1xyXG4gICAgICAgICAgZGVmaW5lX3Nsb3QgPSBnb29nbGV0YWcuZGVmaW5lU2xvdChhZF91bml0X3BhdGgsIHNpemVfYXJyeSwgaWQpLmFkZFNlcnZpY2UoZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZyh0YXJnZXRfMSwgdGFyZ2V0XzIpKS5zZXRDb2xsYXBzZUVtcHR5RGl2KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICBpZiAoKHdpbmRvdy5kY0NHID09IFwiaG9tZVwiIHx8IHdpbmRvdy5kY1BhdGggPT0gXCIyNzc1LktuZXNzZXQtMS5Ib21lXCIgfHwgd2luZG93LmRjUGF0aCA9PSBcIjI3NzUuS25lc3NldC0xLkhvbWVcIikgJiYgd2luZG93LmJyb3dzaV9vbl9ncHQgPT09IFwiVHJ1ZVwiICYmIGlkID09IFwiYWRzLmJveC4zXCIpIHtcclxuICAgICAgIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdF9icm93c2lbaWRdID0gZGVmaW5lX3Nsb3Q7XHJcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy5kY0NHID09IFwiYXJ0aWNsZVwiICYmIHdpbmRvdy5hbGxfYmFubmVyc19pZHMuaW5jbHVkZXMoXCJhZHMuaW5yZWFkLjFcIikpIHtcclxuICAgICAgICBsZXQgc2xvdHNfMSA9IFtdO1xyXG4gICAgICAgIGxldCBzbG90c18yID0gW107XHJcbiAgICAgICAgbGV0IHNsb3RzXzMgPSBbXTtcclxuICAgICAgICBjb25zdCBhZHNfMSA9IFtcImFkcy5pbnRlcnN0aXRpYWxcIiwgXCJhZHMudG9wXCIsIFwiYWRzLnNreXNjcmFwZXJcIiwgXCJhZHMuc2t5c2NyYXBlci5sZWZ0XCIsIFwiYWRzLnNhcmdlbFwiLCBcImFkcy5ib3guMVwiXTtcclxuICAgICAgICBjb25zdCBhZHNfMiA9IFtcImFkcy5pbnJlYWQuMVwiLCBcImFkcy5ib3guMlwiLCBcImFkcy5ib3guM1wiXTtcclxuICAgICAgICBjb25zdCBhZHNfMyA9IFtcImFkcy5pbnJlYWQuMlwiLCBcImFkcy5pbnJlYWQuM1wiXTtcclxuICAgICAgICBpZiAoYWRzXzEuaW5jbHVkZXMoaWQpKSBzbG90c18xLnB1c2goaWQpO1xyXG4gICAgICAgIGlmIChhZHNfMi5pbmNsdWRlcyhpZCkpIHNsb3RzXzIucHVzaChpZCk7XHJcbiAgICAgICAgaWYgKGFkc18zLmluY2x1ZGVzKGlkKSkgc2xvdHNfMy5wdXNoKGlkKTtcclxuXHJcbiAgICAgICAgaWYgKHNsb3RzXzEuaW5jbHVkZXMoaWQpKSB7XHJcbiAgICAgICAgICBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzX2FydGljbGVfMVtpZF0gPSBkZWZpbmVfc2xvdDtcclxuICAgICAgICB9IGVsc2UgaWYgKHNsb3RzXzIuaW5jbHVkZXMoaWQpKSB7XHJcbiAgICAgICAgICBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzX2FydGljbGVfMltpZF0gPSBkZWZpbmVfc2xvdDsgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIGlmIChzbG90c18zLmluY2x1ZGVzKGlkKSkge1xyXG4gICAgICAgICAgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c19hcnRpY2xlXzNbaWRdID0gZGVmaW5lX3Nsb3Q7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW2lkXSA9IGRlZmluZV9zbG90OyAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh3aW5kb3cuZ3B0X2dyb3VwX25hbWUgIT0gdW5kZWZpbmVkICYmICh3aW5kb3cuZGNDRyA9PSBcImhvbWVcIiB8fCB3aW5kb3cuZGNQYXRoID09IFwiMjc3NS5LbmVzc2V0LTY0ODUyLnNpZGVob21wYWdlXCIgfHwgd2luZG93LmRjUGF0aCA9PSBcIjI3NzUuS25lc3NldC0xLkhvbWVcIiB8fCB3aW5kb3cuZGNQYXRoID09IFwiMjc3NS5LbmVzc2V0LTMzMTEzLmFkaXBlZXJpXCIgfHwgd2luZG93LmRjUGF0aCA9PSBcIjEuQ2VudHJhbERlc2stMS5Ib21lXCIpKSB7XHJcbiAgICAgICAgICAvL2xldCBkZWZpbmVfc2xvdCA9IGdvb2dsZXRhZy5kZWZpbmVTbG90KGFkX3VuaXRfcGF0aCwgc2l6ZV9hcnJ5LCBpZCkuYWRkU2VydmljZShnb29nbGV0YWcucHViYWRzKCkpLnNldENvbGxhcHNlRW1wdHlEaXYodHJ1ZSk7XHJcbiAgICAgICAgICBzd2l0Y2god2luZG93LmdwdF9ncm91cF9uYW1lKSB7ICAgIFxyXG4gICAgICAgICAgICBjYXNlKHdpbmRvdy50ZXN0X2dyb3VwX3N0ci5leHA0X3NyYV9iYXRjaCk6XHJcbiAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbiBkZWZpbmVfbmF0aXZlKGV4cCwgaWQpIHtcclxuICAgICAgICAgICAgICAgIC8vICAgd2luZG93W1wiWUlUU2l0ZVdpZGdldHNDYWxsYmFja3NcIl0gPSB3aW5kb3dbXCJZSVRTaXRlV2lkZ2V0c0NhbGxiYWNrc1wiXSB8fCBbXTtcclxuICAgICAgICAgICAgICAgIC8vICAgd2luZG93W1wiWUlUU2l0ZVdpZGdldHNDYWxsYmFja3NcIl0ucHVzaCgoKT0+IHtcclxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGlmIChnb29nbGV0YWcucHViYWRzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTsgLy8gdGltZSBpcyB1cFxyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBleHAgPSBkZWZpbmVfc2xvdDsgXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIGdvb2dsZXRhZy5kaXNwbGF5KGlkKTsgIFxyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICB9LCAxMDApOyAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICBsZXQgc2xvdHNfMSA9IFtcImFkcy50b3BcIiwgXCJhZHMuc2t5c2NyYXBlclwiLCBcImFkcy5za3lzY3JhcGVyLmxlZnRcIiwgXCJhZHMuc2FyZ2VsXCIsIFwiYWRzLnRvcC5wcm9tb1wiLCBcImFkcy5ib3guMVwiLCBcImFkcy5za3lzY3JhcGVyLmlubmVyLjFcIiwgXCJhZHMucmlnaHRib3hfbmF0aXZlLjFcIl07X
1HJcbiAgICAgICAgICAgICAgICBsZXQgc2xvdHNfMiA9IFtcImFkcy5ob3Rib3gubmF0aXZlLjFcIl07XHJcbiAgICAgICAgICAgICAgICBsZXQgc2xvdHNfMyA9IFtcImFkcy5kb3VibGVzdHJpcG9uLjFcIiwgXCJhZHMuYm94LjJcIiwgXCJhZHMuYm94LjNcIl07XHJcbiAgICAgICAgICAgICAgICBsZXQgc2xvdHNfNCA9IFtcImFkcy5ob3Rib3gubmF0aXZlLjJcIl07XHJcbiAgICAgICAgICAgICAgICBsZXQgc2xvdHNfNSA9IFtcImFkcy5rYXZvYS4xXCIsIFwiYWRzLmJveC5nYW1lcy4xXCIsIFwiYWRzLmJveC5uYWRsYW4uMVwiLCBcImFkcy5ib3gubmFkbGFuLjJcIiwgXCJhZHMuYm94Lm5hZGxhbi4zXCJdO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNsb3RzXzYgPSBbXCJhZHMuYm94LmNvbnRlbnQuMVwiLCBcImFkcy5ib3guY29udGVudC4yXCIsIFwiYWRzLmJveC5jb250ZW50LjNcIiwgXCJhZHMuYm94LmxhaXNoYS4xXCIsIFwiYWRzLmJveC5sYWlzaGEuMlwiXTtcclxuICAgICAgICAgICAgICAgIGxldCBzbG90c183ID0gW1wiYWRzLmJveC5jb250ZW50LjRcIiwgXCJhZHMuYm94LmNvbnRlbnQuNVwiLCBcImFkcy5ib3guY29udGVudC42XCJdO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNsb3RzXzggPSBbXCJhZHMuZ3JheS5ib3guMVwiLCBcImFkcy5ncmF5LmJveC4yXCJdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNsb3RzXzEuaW5jbHVkZXMoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNfMVtpZF0gPSBkZWZpbmVfc2xvdDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2xvdHNfMi5pbmNsdWRlcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgLy9kZWZpbmVfbmF0aXZlKEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNfMltpZF0sIGlkKTtcclxuICAgICAgICAgICAgICAgICAgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c18yW2lkXSA9IGRlZmluZV9zbG90OyAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2xvdHNfMy5pbmNsdWRlcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c18zW2lkXSA9IGRlZmluZV9zbG90OyAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNsb3RzXzQuaW5jbHVkZXMoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNfNFtpZF0gPSBkZWZpbmVfc2xvdDtcclxuICAgICAgICAgICAgICAgICAgLy9kZWZpbmVfbmF0aXZlKEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNfNFtpZF0sIGlkKTsgICAgIFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzbG90c181LmluY2x1ZGVzKGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzXzVbaWRdID0gZGVmaW5lX3Nsb3Q7ICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2xvdHNfNi5pbmNsdWRlcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c182W2lkXSA9IGRlZmluZV9zbG90OyAgXHJcbiAgICAgICAgICAgICAgICAgIC8vZGVmaW5lX25hdGl2ZShBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzXzZbaWRdLCBpZCk7ICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2xvdHNfNy5pbmNsdWRlcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c183W2lkXSA9IGRlZmluZV9zbG90O1xyXG4gICAgICAgICAgICAgICAgICAvL2RlZmluZV9uYXRpdmUoQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c183W2lkXSxpZCk7ICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzbG90c184LmluY2x1ZGVzKGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzXzhbaWRdID0gZGVmaW5lX3Nsb3Q7ICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNbaWRdID0gZGVmaW5lX3Nsb3Q7ICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJyZWFrOyAgXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c1tpZF0gPSBkZWZpbmVfc2xvdDsgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfSAgICAgICAgICAgICAgICAgIFxyXG4gICAgfSBlbHNlIGlmICh0YXJnZXRfMSA9PSBcIm5hdGl2ZV9iYW5uZXJcIikge1xyXG4gICAgICAgIEFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNfbmF0aXZlW2lkXSA9IGRlZmluZV9zbG90O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW2lkXSA9IGRlZmluZV9zbG90O1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gICBcclxuICB9IC8vZW5kIGRlZmluZVNsb3RzX2Z1bmNcclxuICBnZXREZXZpY2VfZnVuYygpIHtcclxuICAgIGxldCB7IG5hdmlnYXRvciB9ID0gd2luZG93O1xyXG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcclxuICAgICAgcmV0dXJuIFwiQW5kcm9pZFwiO1xyXG4gICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XHJcbiAgICAgIHJldHVybiBcIkFuZHJvaWRcIjtcclxuICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQmxhY2tCZXJyeS9pKSkge1xyXG4gICAgICByZXR1cm4gXCJCbGFja0JlcnJ5XCI7XHJcbiAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZS9pKSkge1xyXG4gICAgICByZXR1cm4gXCJpUGhvbmVcIjtcclxuICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBhZC9pKSkge1xyXG4gICAgICByZXR1cm4gXCJpUGFkXCI7XHJcbiAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQb2QvaSkpIHtcclxuICAgICAgcmV0dXJuIFwiaVBvZFwiO1xyXG4gICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9JRU1vYmlsZS9pKSkge1xyXG4gICAgICByZXR1cm4gXCJJRU1vYmlsZVwiO1xyXG4gICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9NYWNpbnRvc2gvaSkpIHtcclxuICAgICAgcmV0dXJuIFwiTWFjaW50b3NoXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJQQ1wiO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5jb25zdCBfQWRVbml0RnVuY3Rpb25zQ2xhc3MgPSBuZXcgQWRVbml0RnVuY3Rpb25zQ2xhc3MoKTtcclxuZXhwb3J0IGRlZmF1bHQgX0FkVW5pdEZ1bmN0aW9uc0NsYXNzO1xyXG53aW5kb3cuQWRVbml0X3Byb3BlcnRpZXMgPSBfQWRVbml0RnVuY3Rpb25zQ2xhc3M7XHJcbndpbmRvdy5yZW5kZXJBZCA9ICBfQWRVbml0RnVuY3Rpb25zQ2xhc3MucmVuZGVyQWQuYmluZChfQWRVbml0RnVuY3Rpb25zQ2xhc3MpO1xyXG53aW5kb3cuY2xvc2VUcmFuc2l0aW9ucyA9IF9BZFVuaXRGdW5jdGlvbnNDbGFzcy
15kZWZpbmVVbml0c19mdW5jLmJpbmQoX0FkVW5pdEZ1bmN0aW9uc0NsYXNzKTtcclxud2luZG93LkFkVW5pdFByb3BlcnRpZXNDbGFzc09iaiA9IEFkVW5pdFByb3BlcnRpZXNDbGFzc09iajsiLCIvLyBUaGlzIHNjcmlwdCBydW4gZ3B0IG9uIHluZXQgcGFnZXNcclxuLy8gaHR0cHM6Ly93d3cueW5ldC5jby5pbC9ob21lLzAsNzM0MCxMLTgsMDAuaHRtbFxyXG4vLyBUbyBhY3RpdmF0ZWQgdGhlIG5ldyBzeXN0ZW0gdXNlIHNxbDpcclxuLy8gVVBEQVRFIEdlbmVyYWxfUGFyYW1fVmFsdWVzXHJcbi8vIFNFVCBQYXJhbV9WYWx1ZSA9IDEsXHJcbi8vIFdIRVJFIFBhcmFtX05hbWUgPSAnaXNfbmV3X2dwdCcgQU5EIENvbnRlbnRfSWQgPSAnWW5ldCcgO1xyXG4vLyBUaGUga2V5IGluIHRoZSBjb2RlIGZvciBvbmx5IHluZXQgaXMgJ2lzX3luZXQnXHJcbi8vIHRoZSB1c2UgaXMgaWYgKEluZnJhc3J1Y3R1cmVDbGFzc09iai5TaXRlID09ICdpc195bmV0JyApXHJcbi8vIGltcG9ydCAnYmFiZWwtcG9seWZpbGwnO1xyXG4vLyBpbXBvcnQgXCJAYmFiZWwvcG9seWZpbGxcIjtcclxubGV0IHsgZGNMb2FkQWRzLCBnb29nbGV0YWcsIGdwdF9ncm91cF9uYW1lLCBjb25zb2xlIH0gPSB3aW5kb3c7XHJcbmltcG9ydCBJbmZyYXNydWN0dXJlQ2xhc3NPYmogZnJvbSBcIi4uL21vZHVsZXMvSW5mcmFzdHJ1Y3R1cmVDbGFzc1wiO1xyXG5JbmZyYXNydWN0dXJlQ2xhc3NPYmouU2l0ZSA9IFwiaXNfeW5ldFwiO1xyXG5pbXBvcnQgQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmogZnJvbSBcIi4uL21vZHVsZXMvQWRVbml0RnVuY3Rpb25zQ2xhc3NcIjtcclxuaW1wb3J0IEFkVW5pdFByb3BlcnRpZXNDbGFzc09iaiBmcm9tIFwiLi4vbW9kdWxlcy9BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NcIjtcclxuaW1wb3J0IE1haW5GdW5jdGlvbkNsYXNzT2JqIGZyb20gXCIuLi9tb2R1bGVzL01haW5GdW5jdGlvbkNsYXNzXCI7XHJcbndpbmRvdy5SZWZyZXNoQWxsID0gTWFpbkZ1bmN0aW9uQ2xhc3NPYmoucmVmcmVzaEFsbF9mdW5jLmJpbmQoTWFpbkZ1bmN0aW9uQ2xhc3NPYmopO1xyXG53aW5kb3cuUmVmcmVzaEFsbCA9IE1haW5GdW5jdGlvbkNsYXNzT2JqLnJlZnJlc2hBbGxfZnVuYztcclxud2luZG93LnJlZnJlc2hfaW5yZWFkcyA9IE1haW5GdW5jdGlvbkNsYXNzT2JqLnJlZnJlc2hJbnJlYWRzX2Z1bmMuYmluZChNYWluRnVuY3Rpb25DbGFzc09iaik7XHJcbndpbmRvdy5yZWZyZXNoX2lucmVhZHMgPSBNYWluRnVuY3Rpb25DbGFzc09iai5yZWZyZXNoSW5yZWFkc19mdW5jO1xyXG5cclxuICAvL2lmIGRjTG9hZEFkcyA9IDAgdGhhbiB0aGUgZ3B0IGlzIG9mZlxyXG5cclxuICBpZiAod2luZG93LmRhdGFMYXllclswXS5hcnRpY2xlQ2xhc3NlcyAhPSBcIm1hZ2F6aW5lXCIgJiYgZGNMb2FkQWRzICE9IDApIHtcclxuXHJcbiAgICAvLyBXaGVuIGNoYW5jaGluZyBtb2RlIC0gY2hhbmdlIEtWIERhcmtfTW9kZSBhbmQgcmVmcmVzaCBzcGVjaWZpYyBhZHNcclxuICAgIGlmICh3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHggKSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5MDBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKScpLm1hdGNoZXMpIHtcclxuICAgICAgd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBlID0+IHtcclxuICAgICAgICAgIGNvbnN0IG5ld0NvbG9yU2NoZW1lID0gZS5tYXRjaGVzID8gXCJvblwiIDogXCJvZmZcIjtcclxuICAgICAgICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZyhcIkRhcmtfTW9kZVwiLCBuZXdDb2xvclNjaGVtZSk7XHJcbiAgICAgICAgICAgIGxldCBzbG90cyA9IFt3aW5kb3cuQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c1tcImFkcy5zdHJpcC5jb250ZW50LjFcIl0sIHdpbmRvdy5BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW1wiYWRzLnN0cmlwLmNvbnRlbnQuMlwiXSwgd2luZG93LkFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNbXCJhZHMuc3RyaXAub3JkZXJpbmcuMVwiXSwgd2luZG93LkFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNbXCJhZHMuc3RyaXAub3JkZXJpbmcuMlwiXSwgXHJcbiAgICAgICAgICAgIHdpbmRvdy5BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW1wiYWRzLnN0cmlwLm9yZGVyaW5nLjNcIl0sIHdpbmRvdy5BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW1wiYWRzLmluYm94LjFcIl0sIHdpbmRvdy5BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzW1wiYWRzLmluYm94LjJcIl1dO1xyXG4gICAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkucmVmcmVzaChzbG90cyk7XHJcbiAgICAgICAgICBnb29nbGV0YWcuZW5hYmxlU2VydmljZXMoKTsgICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouQ29sbGVjdF9hbGxfYmFubmVyc19pZHMoKTtcclxuICAgIEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLmdldEtleVZhbHVlc19mdW5jKCk7XHJcbiAgICBBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5kZWZpbmVVbml0c19mdW5jKCk7IFxyXG5cclxuICAgIGlmICh3aW5kb3cuZGNDRyA9PSBcImhvbWVcIiB8fCB3aW5kb3cuZGNQYXRoID09IFwiMjc3NS5LbmVzc2V0LTMzMTEzLmFkaXBlZXJpXCIgfHwgd2luZG93LmRjUGF0aCA9PSBcIjI3NzUuS25lc3NldC0xLkhvbWVcIikge1xyXG4gICAgXHJcbiAgICAgIHdpbmRvd1tcIllJVFNpdGVXaWRnZXRzQ2FsbGJhY2tzXCJdID0gd2luZG93W1wiWUlUU2l0ZVdpZGdldHNDYWxsYmFja3NcIl0gfHwgW107XHJcbiAgICAgIHdpbmRvd1tcIllJVFNpdGVXaWRnZXRzQ2FsbGJhY2tzXCJdLnB1c2goKCk9PiB7XHJcbiAgICAgICAgLy8gYmF0Y2hcclxuICAgICAgICAgIGlmICh3aW5kb3cuZ3B0X2dyb3VwX25hbWUgJiYgd2luZG93LmdwdF9ncm91cF9uYW1lID09IHdpbmRvdy50ZXN0X2dyb3VwX3N0ci5leHA0X3NyYV9iYXRjaCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGdvb2dsZXRhZy5wdWJhZHMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOyAvLyB0aW1lIGlzIHVwICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgaWYgKGdvb2dsZXRhZy5wdWJhZHMoKS5pc0luaXRpYWxMb2FkRGlzYWJsZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkucmVmcmVzaChPYmplY3QudmFsdWVzKHdpbmRvdy5BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzXzIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnJlZnJlc2goT2JqZWN0LnZhbHVlcyh3aW5kb3cuQWRVbml0UHJvcGVydGllc0NsYXNzT2JqLkRlZmluZV9zbG90c180KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKE9iamVjdC52YWx1ZXMod2luZG93LkFkVW5pdFByb3BlcnRpZXNDbGFzc09iai5EZWZpbmVfc2xvdHNfNikpO1xyXG4gICAgICAgICAgICAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkucmVmcmVzaChPYmplY3QudmFsdWVzKHdpbmRvdy5BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmouRGVmaW5lX3Nsb3RzXzcpKTtcclxuICAgICAgICAgICAgICAgICAgICAvL2dvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKFtpZF0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgI
1H0sIDEwMCk7XHJcbiAgICAgICAgICB9IFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gVmVydGljYWwgdmlkZW8gYWRzXHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgLy8gVmVydGljYWwgdmlkZW8gYWRzXHJcbiAgICAgICAgbGV0IHZlcnRpY2FsX3ZpZGVvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi55bmV0LXZpZGVvLXZlcnRpY2FsLTEyODBcIik7XHJcbiAgICAgICAgaWYgKHZlcnRpY2FsX3ZpZGVvICYmICh3aW5kb3cuc2hvd19hZHNlbnNlID09IHVuZGVmaW5lZCB8fCB3aW5kb3cuc2hvd19hZHNlbnNlID09IGZhbHNlKSkge1xyXG4gICAgICAgIGxldCBhZHNfaWRzID0gW107XHJcbiAgICAgICAgbGV0IGRlZmluZWRfYWRzID0gW107XHJcbiAgICAgICAgd2luZG93LmFkc19hcnJheSA9IFtdO1xyXG4gICAgICAgIHZlcnRpY2FsX3ZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpPT4geyBcclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFkc192ZXJ0aWNhbF92aWRlbycpKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hZHNfdmVydGljYWxfdmlkZW8nKS5mb3JFYWNoKCh5LGluZGV4KT0+IHtcclxuICAgICAgICAgICAgICBsZXQgYWRfaWQgPSB5LmlkO1xyXG4gICAgICAgICAgICAgIGxldCBudW1fYWQgPSBhZF9pZC5zdWJzdHIoYWRfaWQubGVuZ3RoIC0gMSk7IFxyXG4gICAgICAgICAgICAgIGlmIChkZWZpbmVkX2Fkcy5pbmRleE9mKGFkX2lkKSA8IDApIHtcclxuICAgICAgICAgICAgICAgIGdvb2dsZXRhZy5jbWQucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRzX2FycmF5W251bV9hZF0gPSBnb29nbGV0YWcuZGVmaW5lU2xvdChBZFVuaXRGdW5jdGlvbnNDbGFzc09iai5hZFVuaXRDYWxsX2Z1bmMoYWRfaWQpLCBbWzM2MCwgNjY2XSwgW1wiZmx1aWRcIl1dLCBhZF9pZCkuYWRkU2VydmljZShnb29nbGV0YWcucHViYWRzKCkpOyAgICAgICBcclxuICAgICAgICAgICAgICAgIGdvb2dsZXRhZy5lbmFibGVTZXJ2aWNlcygpO1xyXG4gICAgICAgICAgICAgICAgZGVmaW5lZF9hZHMucHVzaChhZF9pZCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnluZXQtdmlkZW8tdmVydGljYWwtMTI4MCAuc2xpY2stc2xpZGUnKS5mb3JFYWNoKChpLGluZGV4KT0+IHtcclxuICAgICAgICAgIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoaS5jbGFzc0xpc3QuY29udGFpbnMoXCJzbGljay1hY3RpdmVcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChpLnF1ZXJ5U2VsZWN0b3IoJy5hZHNfdmVydGljYWxfdmlkZW8nKSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYmFubmVyX2lkID0gaS5xdWVyeVNlbGVjdG9yKCcuYWRzX3ZlcnRpY2FsX3ZpZGVvJykuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZHNfaWRzLmluZGV4T2YoYmFubmVyX2lkKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBnb29nbGV0YWcuY21kLnB1c2goKCkgPT4geyAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29vZ2xldGFnLmRpc3BsYXkoYmFubmVyX2lkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkc19pZHMucHVzaChiYW5uZXJfaWQpOyAgXHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaS5xdWVyeVNlbGVjdG9yKCcuYWRzX3ZlcnRpY2FsX3ZpZGVvJykuaW5uZXJIVE1MID09IFwiXCIpIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5tX2FkID0gYmFubmVyX2lkLnN1YnN0cihiYW5uZXJfaWQubGVuZ3RoIC0gMSk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5yZWZyZXNoKFt3aW5kb3cuYWRzX2FycmF5W25tX2FkXV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gICAgICAgICBcclxuICAgICAgICAgIH0pOyAgICAgICAgXHJcbiAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGksIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlIH0pOyAgICAgXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMzAwMCk7IFxyXG4gICAgIFxyXG4gICAgXHJcblxyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDc2NykgeyAgIFxyXG5cclxuICAgICAgICBpZiAod2luZG93LmRjQ0cgIT0gJ2FydGljbGUnICYmIHdpbmRvdy5kY1BhdGguaW5jbHVkZXMoXCItMS5Ib21lXCIpICYmIHdpbmRvdy5wZXJmb3JtYW5jZS5uYXZpZ2F0aW9uLnR5cGUgPT0gd2luZG93LnBlcmZvcm1hbmNlLm5hdmlnYXRpb24uVFlQRV9CQUNLX0ZPUldBUkQpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdCQUNLX0hPTUVfQ0xJQ0tFRCcsIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIXdpbmRvdy5kY1BhdGguaW5jbHVkZXMoXCItMS5Ib21lXCIpKSB7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdCQUNLX0hPTUVfQ0xJQ0tFRCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkeCBpbnRlcnN0aXRpYWwgbWFnYXppbmVzIGFuZCBwcGx1c1xyXG4gICAgIFxyXG4gICAgIGlmICh3aW5kb3cuYWR4X2ludGVyc3RpdGlhbF9tb2JpbGUgPT0gJ1RydWUnKSB7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldERldmljZSgpIHtcclxuICAgICAgICAgIGxldCB7IG5hdmlnYXRvciB9ID0gd2luZG93O1xyXG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiQW5kcm9pZFwiO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XHJcbiAgICAgICAgICAgI
1HJldHVybiBcIkFuZHJvaWRcIjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lL2kpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcImlQaG9uZVwiO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGFkL2kpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcImlQYWRcIjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlBDXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYWR4X3NpdGUgPSBcInluZXRcIjtcclxuICAgICAgICBpZiAod2luZG93LmRjUGF0aC5pbmNsdWRlcyhcImxhaXNoYVwiKSkge1xyXG4gICAgICAgIGFkeF9zaXRlID0gXCJsYWlzaGFcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5kY1BhdGguaW5jbHVkZXMoXCJhcmNoaXRlY3R1cmVcIikpIHtcclxuICAgICAgICBhZHhfc2l0ZSA9IFwiYXJjaGl0ZWN0dXJlXCI7IFxyXG4gICAgICAgIH0gZWxzZSBpZiAod2luZG93LmRjUGF0aC5pbmNsdWRlcyhcIm1lbnRhXCIpKSB7XHJcbiAgICAgICAgYWR4X3NpdGUgPSBcIm1lbnRhXCI7IFxyXG4gICAgICAgIH0gZWxzZSBpZiAod2luZG93LmRjUGF0aC5pbmNsdWRlcyhcImZhc2hpb25cIikpIHtcclxuICAgICAgICBhZHhfc2l0ZSA9IFwiZmFzaGlvblwiOyBcclxuICAgICAgICB9IFxyXG5cclxuICAgIFxyXG4gICAgICAgIGxldCBkZXZpY2UgPSAoZ2V0RGV2aWNlKCkgPT0gXCJBbmRyb2lkXCIpID8gXCJtb2JpbGV3ZWJfYW5kcm9pZFwiIDogXCJtb2JpbGV3ZWJfaXBob25lXCI7XHJcbiAgICAgICAgbGV0IGFkeF9wYXRoID0od2luZG93LmRjUGF0aC5pbmNsdWRlcyhcIlBuYWlQbHVzXCIpKSA/IGAvNjg3MC9wcGx1cy8ke2RldmljZX0vaW50ZXJzdGl0aWFsLmFkeGAgOiBgLzY4NzAveW5ldC8ke2RldmljZX0vaW50ZXJzdGl0aWFsLmFkeC8ke2FkeF9zaXRlfWA7XHJcbiAgICBcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgd2luZG93Lmdvb2dsZXRhZyA9IHdpbmRvdy5nb29nbGV0YWcgfHwge2NtZDogW119O1xyXG4gICAgXHJcbiAgICAgICAgICB3aW5kb3cubWFhdmFyb25BZHggPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibWFhdmFyb25BZHhcIikpICE9PSBudWxsID8gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIm1hYXZhcm9uQWR4XCIpKSA6IHsgZGF0ZXRpbWU6IERhdGUubm93KCksIGRpc3BsYXllZGxhc3Q6ICcnLCB9O1xyXG4gICAgXHJcbiAgICAgICAgICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIGludGVyc3RpdGlhbFNsb3QgPSBnb29nbGV0YWcuZGVmaW5lT3V0T2ZQYWdlU2xvdChcclxuICAgICAgICAgICAgYWR4X3BhdGgsXHJcbiAgICAgICAgICAgIGdvb2dsZXRhZy5lbnVtcy5PdXRPZlBhZ2VGb3JtYXQuSU5URVJTVElUSUFMKTtcclxuICAgICAgICAgICAgaWYgKGludGVyc3RpdGlhbFNsb3QpIHtcclxuICAgICAgICAgICAgICBpbnRlcnN0aXRpYWxTbG90LmFkZFNlcnZpY2UoZ29vZ2xldGFnLnB1YmFkcygpKTsgICAgXHJcbiAgICAgICAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmFkZEV2ZW50TGlzdGVuZXIoJ3Nsb3RPbmxvYWQnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGludGVyc3RpdGlhbFNsb3QgPT09IGV2ZW50LnNsb3QpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW50ZXJzdGl0aWFsIGlzIGxvYWRlZC4nKTtcclxuICAgICAgICAgICAgICAgICAgbWFhdmFyb25BZHguYWRkID0gYGxvYWRlZGA7IFxyXG4gICAgICAgICAgICAgICAgICBtYWF2YXJvbkFkeC5kYXRldGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICAgIG1hYXZhcm9uQWR4LmRpc3BsYXllZGxhc3QgPSBhZHhfcGF0aDtcclxuICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21hYXZhcm9uQWR4JywgSlNPTi5zdHJpbmdpZnkobWFhdmFyb25BZHgpKTtcclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuYWRkRXZlbnRMaXN0ZW5lcignc2xvdFZpc2liaWxpdHlDaGFuZ2VkJyxcclxuICAgICAgICAgICAgICBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNsb3QgPSBldmVudC5zbG90OyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdWaXNpYmlsaXR5IG9mIHNsb3QnLCBzbG90LmdldFNsb3RFbGVtZW50SWQoKSwgJ2NoYW5nZWQuJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2xvdCA9PT0gaW50ZXJzdGl0aWFsU2xvdCkgeyAgXHJcbiAgICAgICAgICAgICAgICAgIGlmKGV2ZW50LmluVmlld1BlcmNlbnRhZ2UgPT0gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd5bmV0X21vYmlsZXdlYl9pbnRlcnN0aXRpYWxfYWR4X2Rpc3BsYXllZCcsMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWR4X2Rpc3BsYXllZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdWaXNpYmxlIGFyZWE6JywgZXZlbnQuaW5WaWV3UGVyY2VudGFnZSArICclJyk7ICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpWzBdLnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICk7ICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9nb29nbGV0YWcuZW5hYmxlU2VydmljZXMoKTtcclxuICAgICAgICAgICAgZ29vZ2xldGFnLmRpc3BsYXkoaW50ZXJzdGl0aWFsU2xvdCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgI
1H0gIFxyXG4gICAgIH1cclxuXHJcbiAgICAgIGxldCBtYWF2YXJvbk1vYmlsZSA9IFwiYWRzLmludGVyc3RpdGlhbC5pbm5lclwiO1xyXG4gICAgICBpZiAoKHdpbmRvdy5kY1BhdGguaW5jbHVkZXMoXCJXZWF0aGVyXCIpIHx8IHdpbmRvdy5kY1BhdGguaW5jbHVkZXMoXCJ3ZWF0aGVyXCIpKSAmJiB3aW5kb3cubmV3TWVkaWEgPT0gJ0ZhbHNlJykge1xyXG4gICAgICAgIG1hYXZhcm9uTW9iaWxlID0gKEFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqLmdldERldmljZV9mdW5jKCkgPT0gXCJBbmRyb2lkXCIpID8gXCJhZHMueW5ldF9tb2JpbGV3ZWJfdHJhbnNpdGlvbnNfZ2VuZXJhbF9hbmRyb2lkX21haW5faXBcIiA6IFwiYWRzLnluZXRfbW9iaWxld2ViX3RyYW5zaXRpb25zX2dlbmVyYWxfaXBob25lX21haW5faXBcIjtcclxuICAgICAgfSAgICAgXHJcbiAgICAgIHdpbmRvdy5jbG9zZVRyYW5zaXRpb25zID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobWFhdmFyb25Nb2JpbGUpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgfVxyXG4gXHJcblxyXG4gICAgICBpZiAod2luZG93LnluZXRfcmVzcG9uc2l2ZV9zaXRlcykge1xyXG4gICAgICAgIGlmICh3aW5kb3cueW5ldF9yZXNwb25zaXZlX3NwZWNpYWwpIHtcclxuICAgICAgICAgIE1haW5GdW5jdGlvbkNsYXNzT2JqLlJlbmFtZVN0aWNreSgpO1xyXG4gICAgICAgIH0gZWxzZSB7ICAgXHJcbiAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHMuc3RpY2t5XCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5zdGlja3lcIik7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhID0gZWxlbWVudC5jaGlsZHJlbjtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGNhW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2FbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsZW1lbnQuaWQgPSBcImFkcy5iYW5uZXJcIjtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5kY1BhdGguaW5jbHVkZXMoXCJQbmFpUGx1c1wiKSkge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJwb3NpdGlvbjpmaXhlZDtib3R0b206MHB4O2xlZnQ6MHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7ZGlzcGxheTotbXMtZmxleGJveDstbXMtZmxleC1wYWNrOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlO3otaW5kZXg6OTk5ODttYXJnaW46MCBhdXRvO2JhY2tncm91bmQtY29sb3I6I2ZmZlwiKTtcclxuICAgIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJwb3NpdGlvbjpmaXhlZDtib3R0b206MHB4O2xlZnQ6MHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7ZGlzcGxheTotbXMtZmxleGJveDstbXMtZmxleC1wYWNrOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlO3otaW5kZXg6OTk5OTttYXJnaW46MCBhdXRvO2JhY2tncm91bmQtY29sb3I6I2ZmZlwiKTtcclxuICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcInJlbW92ZV9zdGlja3lcIikpIHtcclxuICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3JlbW92ZV9zdGlja3knKTsgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkcy5iYW5uZXJcIikpIHtcclxuICAgICAgICAgICAgICBsZXQgYmFubmVyX3N0aWNreSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRzLmJhbm5lclwiKTtcclxuICAgICAgICAgICAgICBpZiAod2luZG93LmRjUGF0aC5pbmNsdWRlcyhcIlBuYWlQbHVzXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBiYW5uZXJfc3RpY2t5LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwicG9zaXRpb246Zml4ZWQ7Ym90dG9tOjBweDtsZWZ0OjBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtYm94LXBhY2s6Y2VudGVyO2Rpc3BsYXk6LW1zLWZsZXhib3g7LW1zLWZsZXgtcGFjazpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJTt6LWluZGV4Ojk5OTg7bWFyZ2luOjAgYXV0bztiYWNrZ3JvdW5kLWNvbG9yOiNmZmZcIik7IFxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBiYW5uZXJfc3RpY2t5LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwicG9zaXRpb246Zml4ZWQ7Ym90dG9tOjBweDtsZWZ0OjBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtYm94LXBhY2s6Y2VudGVyO2Rpc3BsYXk6LW1zLWZsZXhib3g7LW1zLWZsZXgtcGFjazpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJTt6LWluZGV4Ojk5OTk7bWFyZ2luOjAgYXV0bztiYWNrZ3JvdW5kLWNvbG9yOiNmZmZcIik7IFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgaWYgKGJhbm5lcl9zdGlja3kuY2xhc3NMaXN0LmNvbnRhaW5zKFwicmVtb3ZlX3N0aWNreVwiKSkge1xyXG4gICAgICAgICAgICAgICAgYmFubmVyX3N0aWNreS5jbGFzc0xpc3QucmVtb3ZlKCdyZW1vdmVfc3RpY2t5Jyk7IFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID49IDc2NyAmJiAod2luZG93LmRjQ0cgPT0gJ2hvbWUnIHx8IHdpbmRvdy5kY1BhdGggPT0gXCIxLkNlbnRyYWxEZXNrLTEu
1SG9tZVwiIHx8IHdpbmRvdy5kY1BhdGggPT0gXCIyNzc1LktuZXNzZXQtNDQxMzIua25lc3NldC5kYXZpZFwiKSkgQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouQ2hhbmdlX3Byb21vX3BsYWNlKCk7XHJcbiAgICBcclxuICAgIGlmICh3aW5kb3cubmV3TWVkaWEgPT0gJ1RydWUnICYmIHdpbmRvdy5pbm5lcldpZHRoID49IDc2NykgQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouQWRkRGl2cygpO1xyXG4gICAgXHJcbiAgICBpZiAod2luZG93LmlubmVyV2lkdGggPj0gNzY3KSB7XHJcbiAgICAgIHNldFRpbWVvdXQoTWFpbkZ1bmN0aW9uQ2xhc3NPYmoucmVmcmVzaEFsbF9mdW5jLCBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmoucmVmcmVzaEFkVGltZV9mdW5jKCkpO1xyXG4gICAgICBpZiAoQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmouZ2V0RGNQYXRoX2Z1bmMod2luZG93LmRjUGF0aCkgPT0gXCIuTmV3c1wiICYmIHdpbmRvdy5kY0NHID09IFwiYXJ0aWNsZVwiKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChNYWluRnVuY3Rpb25DbGFzc09iai5yZWZyZXNoT3plbl9mdW5jLCBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmoucmVmcmVzaEFkT3plbik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHdpbmRvdy5kY0NHID09IFwiYXJ0aWNsZVwiICYmIHdpbmRvdy5hbGxfYmFubmVyc19pZHMuaW5jbHVkZXMoXCJhZHMuaW5yZWFkLjFcIikpIHtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAod2luZG93LmFydGljbGVCb2R5QWRzUmVmcmVzaFJhdGUgPiAwKSBzZXRUaW1lb3V0KE1haW5GdW5jdGlvbkNsYXNzT2JqLnJlZnJlc2hJbnJlYWRzX2Z1bmMsIHdpbmRvdy5hcnRpY2xlQm9ke
1UFkc1JlZnJlc2hSYXRlICogMTAwMCk7ICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnNvbGUubG9nKFwiR1BUIGlzIG9mZiBmb3IgeW5ldFwiKTtcclxuICAgIC8vcmV0dXJuIGNvbnNvbGUubG9nKFwiR1BUIGlzIG9mZiBmb3IgeW5ldFwiKTtcclxuICB9XHJcbiAgd2luZG93LkFkVW5pdEZ1bmN0aW9uc0NsYXNzT2JqID0gQWRVbml0RnVuY3Rpb25zQ2xhc3NPYmo7XHJcbiAgLy93aW5kb3cuQWRVbml0UHJvcGVydGllc0NsYXNzT2JqID0gQWRVbml0UHJvcGVydGllc0NsYXNzT2JqO1xyXG4gIHdpbmRvdy5BZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmogPSBBZFVuaXRQcm9wZXJ0aWVzQ2xhc3NPYmo7XHJcbi8vfSk7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBSUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFzQkE7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFFQTtBQUVBO0FBRUE7QUFDQTs7QUNwbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFlQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUdBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQ
1TtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2poREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n')}]);
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.