runtime.js 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. !function(){try{var a=Function("return this")();a&&!a.Math&&(Object.assign(a,{isFinite:isFinite,Array:Array,Date:Date,Error:Error,Function:Function,Math:Math,Object:Object,RegExp:RegExp,String:String,TypeError:TypeError,setTimeout:setTimeout,clearTimeout:clearTimeout,setInterval:setInterval,clearInterval:clearInterval}),"undefined"!=typeof Reflect&&(a.Reflect=Reflect))}catch(a){}}();
  2. /******/ (function(modules) { // webpackBootstrap
  3. /******/ // install a JSONP callback for chunk loading
  4. /******/ function webpackJsonpCallback(data) {
  5. /******/ var chunkIds = data[0];
  6. /******/ var moreModules = data[1];
  7. /******/ var executeModules = data[2];
  8. /******/
  9. /******/ // add "moreModules" to the modules object,
  10. /******/ // then flag all "chunkIds" as loaded and fire callback
  11. /******/ var moduleId, chunkId, i = 0, resolves = [];
  12. /******/ for(;i < chunkIds.length; i++) {
  13. /******/ chunkId = chunkIds[i];
  14. /******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {
  15. /******/ resolves.push(installedChunks[chunkId][0]);
  16. /******/ }
  17. /******/ installedChunks[chunkId] = 0;
  18. /******/ }
  19. /******/ for(moduleId in moreModules) {
  20. /******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
  21. /******/ modules[moduleId] = moreModules[moduleId];
  22. /******/ }
  23. /******/ }
  24. /******/ if(parentJsonpFunction) parentJsonpFunction(data);
  25. /******/
  26. /******/ while(resolves.length) {
  27. /******/ resolves.shift()();
  28. /******/ }
  29. /******/
  30. /******/ // add entry modules from loaded chunk to deferred list
  31. /******/ deferredModules.push.apply(deferredModules, executeModules || []);
  32. /******/
  33. /******/ // run deferred modules when all chunks ready
  34. /******/ return checkDeferredModules();
  35. /******/ };
  36. /******/ function checkDeferredModules() {
  37. /******/ var result;
  38. /******/ for(var i = 0; i < deferredModules.length; i++) {
  39. /******/ var deferredModule = deferredModules[i];
  40. /******/ var fulfilled = true;
  41. /******/ for(var j = 1; j < deferredModule.length; j++) {
  42. /******/ var depId = deferredModule[j];
  43. /******/ if(installedChunks[depId] !== 0) fulfilled = false;
  44. /******/ }
  45. /******/ if(fulfilled) {
  46. /******/ deferredModules.splice(i--, 1);
  47. /******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
  48. /******/ }
  49. /******/ }
  50. /******/
  51. /******/ return result;
  52. /******/ }
  53. /******/
  54. /******/ // The module cache
  55. /******/ var installedModules = {};
  56. /******/
  57. /******/ // object to store loaded CSS chunks
  58. /******/ var installedCssChunks = {
  59. /******/ "common/runtime": 0
  60. /******/ }
  61. /******/
  62. /******/ // object to store loaded and loading chunks
  63. /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
  64. /******/ // Promise = chunk loading, 0 = chunk loaded
  65. /******/ var installedChunks = {
  66. /******/ "common/runtime": 0
  67. /******/ };
  68. /******/
  69. /******/ var deferredModules = [];
  70. /******/
  71. /******/ // script path function
  72. /******/ function jsonpScriptSrc(chunkId) {
  73. /******/ return __webpack_require__.p + "" + chunkId + ".js"
  74. /******/ }
  75. /******/
  76. /******/ // The require function
  77. /******/ function __webpack_require__(moduleId) {
  78. /******/
  79. /******/ // Check if module is in cache
  80. /******/ if(installedModules[moduleId]) {
  81. /******/ return installedModules[moduleId].exports;
  82. /******/ }
  83. /******/ // Create a new module (and put it into the cache)
  84. /******/ var module = installedModules[moduleId] = {
  85. /******/ i: moduleId,
  86. /******/ l: false,
  87. /******/ exports: {}
  88. /******/ };
  89. /******/
  90. /******/ // Execute the module function
  91. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  92. /******/
  93. /******/ // Flag the module as loaded
  94. /******/ module.l = true;
  95. /******/
  96. /******/ // Return the exports of the module
  97. /******/ return module.exports;
  98. /******/ }
  99. /******/
  100. /******/ // This file contains only the entry chunk.
  101. /******/ // The chunk loading function for additional chunks
  102. /******/ __webpack_require__.e = function requireEnsure(chunkId) {
  103. /******/ var promises = [];
  104. /******/
  105. /******/
  106. /******/ // mini-css-extract-plugin CSS loading
  107. /******/ var cssChunks = {"components/uni-popup/uni-popup":1,"components/top-title/top-title":1,"components/uni-load-more/uni-load-more":1,"components/empty":1,"components/jyf-parser/jyf-parser":1,"components/espempty":1,"components/more/uni-load-more":1,"components/uni-nav-bar/uni-nav-bar":1,"components/uni-search-bar/uni-search-bar":1,"components/xw-empty/xw-empty":1,"node-modules/uview-ui/components/u-select/u-select":1,"components/uni-swipe-action-item/uni-swipe-action-item":1,"components/uni-transition/uni-transition":1,"components/jyf-parser/libs/trees":1,"components/uni-icons/uni-icons":1,"components/uni-status-bar/uni-status-bar":1,"node-modules/uview-ui/components/u-popup/u-popup":1,"node-modules/uview-ui/components/u-icon/u-icon":1,"node-modules/uview-ui/components/u-mask/u-mask":1};
  108. /******/ if(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);
  109. /******/ else if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {
  110. /******/ promises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {
  111. /******/ var href = "" + ({"components/uni-popup/uni-popup":"components/uni-popup/uni-popup","components/top-title/top-title":"components/top-title/top-title","components/uni-load-more/uni-load-more":"components/uni-load-more/uni-load-more","components/empty":"components/empty","components/jyf-parser/jyf-parser":"components/jyf-parser/jyf-parser","components/espempty":"components/espempty","components/wangding-pickerAddress/wangding-pickerAddress":"components/wangding-pickerAddress/wangding-pickerAddress","components/more/uni-load-more":"components/more/uni-load-more","components/uni-nav-bar/uni-nav-bar":"components/uni-nav-bar/uni-nav-bar","components/uni-search-bar/uni-search-bar":"components/uni-search-bar/uni-search-bar","components/xw-empty/xw-empty":"components/xw-empty/xw-empty","node-modules/uview-ui/components/u-select/u-select":"node-modules/uview-ui/components/u-select/u-select","components/uni-swipe-action-item/uni-swipe-action-item":"components/uni-swipe-action-item/uni-swipe-action-item","components/uni-swipe-action/uni-swipe-action":"components/uni-swipe-action/uni-swipe-action","components/uni-transition/uni-transition":"components/uni-transition/uni-transition","components/jyf-parser/libs/trees":"components/jyf-parser/libs/trees","components/uni-icons/uni-icons":"components/uni-icons/uni-icons","components/uni-status-bar/uni-status-bar":"components/uni-status-bar/uni-status-bar","node-modules/uview-ui/components/u-popup/u-popup":"node-modules/uview-ui/components/u-popup/u-popup","node-modules/uview-ui/components/u-icon/u-icon":"node-modules/uview-ui/components/u-icon/u-icon","node-modules/uview-ui/components/u-mask/u-mask":"node-modules/uview-ui/components/u-mask/u-mask"}[chunkId]||chunkId) + ".ttss";
  112. /******/ var fullhref = __webpack_require__.p + href;
  113. /******/ var existingLinkTags = document.getElementsByTagName("link");
  114. /******/ for(var i = 0; i < existingLinkTags.length; i++) {
  115. /******/ var tag = existingLinkTags[i];
  116. /******/ var dataHref = tag.getAttribute("data-href") || tag.getAttribute("href");
  117. /******/ if(tag.rel === "stylesheet" && (dataHref === href || dataHref === fullhref)) return resolve();
  118. /******/ }
  119. /******/ var existingStyleTags = document.getElementsByTagName("style");
  120. /******/ for(var i = 0; i < existingStyleTags.length; i++) {
  121. /******/ var tag = existingStyleTags[i];
  122. /******/ var dataHref = tag.getAttribute("data-href");
  123. /******/ if(dataHref === href || dataHref === fullhref) return resolve();
  124. /******/ }
  125. /******/ var linkTag = document.createElement("link");
  126. /******/ linkTag.rel = "stylesheet";
  127. /******/ linkTag.type = "text/css";
  128. /******/ linkTag.onload = resolve;
  129. /******/ linkTag.onerror = function(event) {
  130. /******/ var request = event && event.target && event.target.src || fullhref;
  131. /******/ var err = new Error("Loading CSS chunk " + chunkId + " failed.\n(" + request + ")");
  132. /******/ err.code = "CSS_CHUNK_LOAD_FAILED";
  133. /******/ err.request = request;
  134. /******/ delete installedCssChunks[chunkId]
  135. /******/ linkTag.parentNode.removeChild(linkTag)
  136. /******/ reject(err);
  137. /******/ };
  138. /******/ linkTag.href = fullhref;
  139. /******/
  140. /******/ var head = document.getElementsByTagName("head")[0];
  141. /******/ head.appendChild(linkTag);
  142. /******/ }).then(function() {
  143. /******/ installedCssChunks[chunkId] = 0;
  144. /******/ }));
  145. /******/ }
  146. /******/
  147. /******/ // JSONP chunk loading for javascript
  148. /******/
  149. /******/ var installedChunkData = installedChunks[chunkId];
  150. /******/ if(installedChunkData !== 0) { // 0 means "already installed".
  151. /******/
  152. /******/ // a Promise means "currently loading".
  153. /******/ if(installedChunkData) {
  154. /******/ promises.push(installedChunkData[2]);
  155. /******/ } else {
  156. /******/ // setup Promise in chunk cache
  157. /******/ var promise = new Promise(function(resolve, reject) {
  158. /******/ installedChunkData = installedChunks[chunkId] = [resolve, reject];
  159. /******/ });
  160. /******/ promises.push(installedChunkData[2] = promise);
  161. /******/
  162. /******/ // start chunk loading
  163. /******/ var script = document.createElement('script');
  164. /******/ var onScriptComplete;
  165. /******/
  166. /******/ script.charset = 'utf-8';
  167. /******/ script.timeout = 120;
  168. /******/ if (__webpack_require__.nc) {
  169. /******/ script.setAttribute("nonce", __webpack_require__.nc);
  170. /******/ }
  171. /******/ script.src = jsonpScriptSrc(chunkId);
  172. /******/
  173. /******/ // create error before stack unwound to get useful stacktrace later
  174. /******/ var error = new Error();
  175. /******/ onScriptComplete = function (event) {
  176. /******/ // avoid mem leaks in IE.
  177. /******/ script.onerror = script.onload = null;
  178. /******/ clearTimeout(timeout);
  179. /******/ var chunk = installedChunks[chunkId];
  180. /******/ if(chunk !== 0) {
  181. /******/ if(chunk) {
  182. /******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
  183. /******/ var realSrc = event && event.target && event.target.src;
  184. /******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
  185. /******/ error.name = 'ChunkLoadError';
  186. /******/ error.type = errorType;
  187. /******/ error.request = realSrc;
  188. /******/ chunk[1](error);
  189. /******/ }
  190. /******/ installedChunks[chunkId] = undefined;
  191. /******/ }
  192. /******/ };
  193. /******/ var timeout = setTimeout(function(){
  194. /******/ onScriptComplete({ type: 'timeout', target: script });
  195. /******/ }, 120000);
  196. /******/ script.onerror = script.onload = onScriptComplete;
  197. /******/ document.head.appendChild(script);
  198. /******/ }
  199. /******/ }
  200. /******/ return Promise.all(promises);
  201. /******/ };
  202. /******/
  203. /******/ // expose the modules object (__webpack_modules__)
  204. /******/ __webpack_require__.m = modules;
  205. /******/
  206. /******/ // expose the module cache
  207. /******/ __webpack_require__.c = installedModules;
  208. /******/
  209. /******/ // define getter function for harmony exports
  210. /******/ __webpack_require__.d = function(exports, name, getter) {
  211. /******/ if(!__webpack_require__.o(exports, name)) {
  212. /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
  213. /******/ }
  214. /******/ };
  215. /******/
  216. /******/ // define __esModule on exports
  217. /******/ __webpack_require__.r = function(exports) {
  218. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  219. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  220. /******/ }
  221. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  222. /******/ };
  223. /******/
  224. /******/ // create a fake namespace object
  225. /******/ // mode & 1: value is a module id, require it
  226. /******/ // mode & 2: merge all properties of value into the ns
  227. /******/ // mode & 4: return value when already ns object
  228. /******/ // mode & 8|1: behave like require
  229. /******/ __webpack_require__.t = function(value, mode) {
  230. /******/ if(mode & 1) value = __webpack_require__(value);
  231. /******/ if(mode & 8) return value;
  232. /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  233. /******/ var ns = Object.create(null);
  234. /******/ __webpack_require__.r(ns);
  235. /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  236. /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  237. /******/ return ns;
  238. /******/ };
  239. /******/
  240. /******/ // getDefaultExport function for compatibility with non-harmony modules
  241. /******/ __webpack_require__.n = function(module) {
  242. /******/ var getter = module && module.__esModule ?
  243. /******/ function getDefault() { return module['default']; } :
  244. /******/ function getModuleExports() { return module; };
  245. /******/ __webpack_require__.d(getter, 'a', getter);
  246. /******/ return getter;
  247. /******/ };
  248. /******/
  249. /******/ // Object.prototype.hasOwnProperty.call
  250. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  251. /******/
  252. /******/ // __webpack_public_path__
  253. /******/ __webpack_require__.p = "/";
  254. /******/
  255. /******/ // on error function for async loading
  256. /******/ __webpack_require__.oe = function(err) { console.error(err); throw err; };
  257. /******/
  258. /******/ var jsonpArray = global["webpackJsonp"] = global["webpackJsonp"] || [];
  259. /******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
  260. /******/ jsonpArray.push = webpackJsonpCallback;
  261. /******/ jsonpArray = jsonpArray.slice();
  262. /******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
  263. /******/ var parentJsonpFunction = oldJsonpFunction;
  264. /******/
  265. /******/
  266. /******/ // run deferred modules from other chunks
  267. /******/ checkDeferredModules();
  268. /******/ })
  269. /************************************************************************/
  270. /******/ ([]);
  271. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vRTovSEJ1aWxkZXJYL3BsdWdpbnMvdW5pYXBwLWNsaS93ZWJwYWNrL2Jvb3RzdHJhcCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSxRQUFRLG9CQUFvQjtRQUM1QjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLGlCQUFpQiw0QkFBNEI7UUFDN0M7UUFDQTtRQUNBLGtCQUFrQiwyQkFBMkI7UUFDN0M7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBOztRQUVBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQSxvQkFBb0I7UUFDcEI7UUFDQTtRQUNBO1FBQ0EsdUJBQXVCLDBwREFBMHBEO1FBQ2pyRDtRQUNBO1FBQ0EsbUJBQW1CLDZCQUE2QjtRQUNoRDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsbUJBQW1CLDhCQUE4QjtRQUNqRDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBLEtBQUs7UUFDTDs7UUFFQTs7UUFFQTtRQUNBLGlDQUFpQzs7UUFFakM7UUFDQTtRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7UUFDQTtRQUNBLE1BQU07UUFDTjs7UUFFQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHdCQUF3QixrQ0FBa0M7UUFDMUQsTUFBTTtRQUNOO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7UUFFQTtRQUNBLDBDQUEwQyxvQkFBb0IsV0FBVzs7UUFFekU7UUFDQTtRQUNBO1FBQ0E7UUFDQSxnQkFBZ0IsdUJBQXVCO1FBQ3ZDOzs7UUFHQTtRQUNBIiwiZmlsZSI6ImNvbW1vbi9ydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gaW5zdGFsbCBhIEpTT05QIGNhbGxiYWNrIGZvciBjaHVuayBsb2FkaW5nXG4gXHRmdW5jdGlvbiB3ZWJwYWNrSnNvbnBDYWxsYmFjayhkYXRhKSB7XG4gXHRcdHZhciBjaHVua0lkcyA9IGRhdGFbMF07XG4gXHRcdHZhciBtb3JlTW9kdWxlcyA9IGRhdGFbMV07XG4gXHRcdHZhciBleGVjdXRlTW9kdWxlcyA9IGRhdGFbMl07XG5cbiBcdFx0Ly8gYWRkIFwibW9yZU1vZHVsZXNcIiB0byB0aGUgbW9kdWxlcyBvYmplY3QsXG4gXHRcdC8vIHRoZW4gZmxhZyBhbGwgXCJjaHVua0lkc1wiIGFzIGxvYWRlZCBhbmQgZmlyZSBjYWxsYmFja1xuIFx0XHR2YXIgbW9kdWxlSWQsIGNodW5rSWQsIGkgPSAwLCByZXNvbHZlcyA9IFtdO1xuIFx0XHRmb3IoO2kgPCBjaHVua0lkcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdGNodW5rSWQgPSBjaHVua0lkc1tpXTtcbiBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5zdGFsbGVkQ2h1bmtzLCBjaHVua0lkKSAmJiBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcbiBcdFx0XHRcdHJlc29sdmVzLnB1c2goaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdWzBdKTtcbiBcdFx0XHR9XG4gXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gMDtcbiBcdFx0fVxuIFx0XHRmb3IobW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcbiBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0bW9kdWxlc1ttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGlmKHBhcmVudEpzb25wRnVuY3Rpb24pIHBhcmVudEpzb25wRnVuY3Rpb24oZGF0YSk7XG5cbiBcdFx0d2hpbGUocmVzb2x2ZXMubGVuZ3RoKSB7XG4gXHRcdFx0cmVzb2x2ZXMuc2hpZnQoKSgpO1xuIFx0XHR9XG5cbiBcdFx0Ly8gYWRkIGVudHJ5IG1vZHVsZXMgZnJvbSBsb2FkZWQgY2h1bmsgdG8gZGVmZXJyZWQgbGlzdFxuIFx0XHRkZWZlcnJlZE1vZHVsZXMucHVzaC5hcHBseShkZWZlcnJlZE1vZHVsZXMsIGV4ZWN1dGVNb2R1bGVzIHx8IFtdKTtcblxuIFx0XHQvLyBydW4gZGVmZXJyZWQgbW9kdWxlcyB3aGVuIGFsbCBjaHVua3MgcmVhZHlcbiBcdFx0cmV0dXJuIGNoZWNrRGVmZXJyZWRNb2R1bGVzKCk7XG4gXHR9O1xuIFx0ZnVuY3Rpb24gY2hlY2tEZWZlcnJlZE1vZHVsZXMoKSB7XG4gXHRcdHZhciByZXN1bHQ7XG4gXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZWZlcnJlZE1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHR2YXIgZGVmZXJyZWRNb2R1bGUgPSBkZWZlcnJlZE1vZHVsZXNbaV07XG4gXHRcdFx0dmFyIGZ1bGZpbGxlZCA9IHRydWU7XG4gXHRcdFx0Zm9yKHZhciBqID0gMTsgaiA8IGRlZmVycmVkTW9kdWxlLmxlbmd0aDsgaisrKSB7XG4gXHRcdFx0XHR2YXIgZGVwSWQgPSBkZWZlcnJlZE1vZHVsZVtqXTtcbiBcdFx0XHRcdGlmKGluc3RhbGxlZENodW5rc1tkZXBJZF0gIT09IDApIGZ1bGZpbGxlZCA9IGZhbHNlO1xuIFx0XHRcdH1cbiBcdFx0XHRpZihmdWxmaWxsZWQpIHtcbiBcdFx0XHRcdGRlZmVycmVkTW9kdWxlcy5zcGxpY2UoaS0tLCAxKTtcbiBcdFx0XHRcdHJlc3VsdCA9IF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gZGVmZXJyZWRNb2R1bGVbMF0pO1xuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdHJldHVybiByZXN1bHQ7XG4gXHR9XG5cbiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgQ1NTIGNodW5rc1xuIFx0dmFyIGluc3RhbGxlZENzc0NodW5rcyA9IHtcbiBcdFx0XCJjb21tb24vcnVudGltZVwiOiAwXG4gXHR9XG5cbiBcdC8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4gXHQvLyB1bmRlZmluZWQgPSBjaHVuayBub3QgbG9hZGVkLCBudWxsID0gY2h1bmsgcHJlbG9hZGVkL3ByZWZldGNoZWRcbiBcdC8vIFByb21pc2UgPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG4gXHR2YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuIFx0XHRcImNvbW1vbi9ydW50aW1lXCI6IDBcbiBcdH07XG5cbiBcdHZhciBkZWZlcnJlZE1vZHVsZXMgPSBbXTtcblxuIFx0Ly8gc2NyaXB0IHBhdGggZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIGpzb25wU2NyaXB0U3JjKGNodW5rSWQpIHtcbiBcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18ucCArIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIlxuIFx0fVxuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cbiBcdC8vIFRoaXMgZmlsZSBjb250YWlucyBvbmx5IHRoZSBlbnRyeSBjaHVuay5cbiBcdC8vIFRoZSBjaHVuayBsb2FkaW5nIGZ1bmN0aW9uIGZvciBhZGRpdGlvbmFsIGNodW5rc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5lID0gZnVuY3Rpb24gcmVxdWlyZUVuc3VyZShjaHVua0lkKSB7XG4gXHRcdHZhciBwcm9taXNlcyA9IFtdO1xuXG5cbiBcdFx0Ly8gbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4gQ1NTIGxvYWRpbmdcbiBcdFx0dmFyIGNzc0NodW5rcyA9IHtcImNvbXBvbmVudHMvdW5pLXBvcHVwL3VuaS1wb3B1cFwiOjEsXCJjb21wb25lbnRzL3RvcC10aXRsZS90b3AtdGl0bGVcIjoxLFwiY29tcG9uZW50cy91bmktbG9hZC1tb3JlL3VuaS1sb2FkLW1vcmVcIjoxLFwiY29tcG9uZW50cy9lbXB0eVwiOjEsXCJjb21wb25lbnRzL2p5Zi1wYXJzZXIvanlmLXBhcnNlclwiOjEsXCJjb21wb25lbnRzL2VzcGVtcHR5XCI6MSxcImNvbXBvbmVudHMvbW9yZS91bmktbG9hZC1tb3JlXCI6MSxcImNvbXBvbmVudHMvdW5pLW5hdi1iYXIvdW5pLW5hdi1iYXJcIjoxLFwiY29tcG9uZW50cy91bmktc2VhcmNoLWJhci91bmktc2VhcmNoLWJhclwiOjEsXCJjb21wb25lbnRzL3h3LWVtcHR5L3h3LWVtcHR5XCI6MSxcIm5vZGUtbW9kdWxlcy91dmlldy11aS9jb21wb25lbnRzL3Utc2VsZWN0L3Utc2VsZWN0XCI6MSxcImNvbXBvbmVudHMvdW5pLXN3aXBlLWFjdGlvbi1pdGVtL3VuaS1zd2lwZS1hY3Rpb24taXRlbVwiOjEsXCJjb21wb25lbnRzL3VuaS10cmFuc2l0aW9uL3VuaS10cmFuc2l0aW9uXCI6MSxcImNvbXBvbmVudHMvanlmLXBhcnNlci9saWJzL3RyZWVzXCI6MSxcImNvbXBvbmVudHMvdW5pLWljb25zL3VuaS1pY29uc1wiOjEsXCJjb21wb25lbnRzL3VuaS1zdGF0dXMtYmFyL3VuaS1zdGF0dXMtYmFyXCI6MSxcIm5vZGUtbW9kdWxlcy91dmlldy11aS9jb21wb25lbnRzL3UtcG9wdXAvdS1wb3B1cFwiOjEsXCJub2RlLW1vZHVsZXMvdXZpZXctdWkvY29tcG9uZW50cy91LWljb24vdS1pY29uXCI6MSxcIm5vZGUtbW9kdWxlcy91dmlldy11aS9jb21wb25lbnRzL3UtbWFzay91LW1hc2tcIjoxfTtcbiBcdFx0aWYoaW5zdGFsbGVkQ3NzQ2h1bmtzW2NodW5rSWRdKSBwcm9taXNlcy5wdXNoKGluc3RhbGxlZENzc0NodW5rc1tjaHVua0lkXSk7XG4gXHRcdGVsc2UgaWYoaW5zdGFsbGVkQ3NzQ2h1bmtzW2NodW5rSWRdICE9PSAwICYmIGNzc0NodW5rc1tjaHVua0lkXSkge1xuIFx0XHRcdHByb21pc2VzLnB1c2goaW5zdGFsbGVkQ3NzQ2h1bmtzW2NodW5rSWRdID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gXHRcdFx0XHR2YXIgaHJlZiA9IFwiXCIgKyAoe1wiY29tcG9uZW50cy91bmktcG9wdXAvdW5pLXBvcHVwXCI6XCJjb21wb25lbnRzL3VuaS1wb3B1cC91bmktcG9wdXBcIixcImNvbXBvbmVudHMvdG9wLXRpdGxlL3RvcC10aXRsZVwiOlwiY29tcG9uZW50cy90b3AtdGl0bGUvdG9wLXRpdGxlXCIsXCJjb21wb25lbnRzL3VuaS1sb2FkLW1vcmUvdW5pLWxvYWQtbW9yZVwiOlwiY29tcG9uZW50cy91bmktbG9hZC1tb3JlL3VuaS1sb2FkLW1vcmVcIixcImNvbXBvbmVudHMvZW1wdHlcIjpcImNvbXBvbmVudHMvZW1wdHlcIixcImNvbXBvbmVudHMvanlmLXBhcnNlci9qeWYtcGFyc2VyXCI6XCJjb21wb25lbnRzL2p5Zi1wYXJzZXIvanlmLXBhcnNlclwiLFwiY29tcG9uZW50cy9lc3BlbXB0eVwiOlwiY29tcG9uZW50cy9lc3BlbXB0eVwiLFwiY29tcG9uZW50cy93YW5nZGluZy1waWNrZXJBZGRyZXNzL3dhbmdkaW5nLXBpY2tlckFkZHJlc3NcIjpcImNvbXBvbmVudHMvd2FuZ2RpbmctcGlja2VyQWRkcmVzcy93YW5nZGluZy1waWNrZXJBZGRyZXNzXCIsXCJjb21wb25lbnRzL21vcmUvdW5pLWxvYWQtbW9yZVwiOlwiY29tcG9uZW50cy9tb3JlL3VuaS1sb2FkLW1vcmVcIixcImNvbXBvbmVudHMvdW5pLW5hdi1iYXIvdW5pLW5hdi1iYXJcIjpcImNvbXBvbmVudHMvdW5pLW5hdi1iYXIvdW5pLW5hdi1iYXJcIixcImNvbXBvbmVudHMvdW5pLXNlYXJjaC1iYXIvdW5pLXNlYXJjaC1iYXJcIjpcImNvbXBvbmVudHMvdW5pLXNlYXJjaC1iYXIvdW5pLXNlYXJjaC1iYXJcIixcImNvbXBvbmVudHMveHctZW1wdHkveHctZW1wdHlcIjpcImNvbXBvbmVudHMveHctZW1wdHkveHctZW1wdHlcIixcIm5vZGUtbW9kdWxlcy91dmlldy11aS9jb21wb25lbnRzL3Utc2VsZWN0L3Utc2VsZWN0XCI6XCJub2RlLW1vZHVsZXMvdXZpZXctdWkvY29tcG9uZW50cy91LXNlbGVjdC91LXNlbGVjdFwiLFwiY29tcG9uZW50cy91bmktc3dpcGUtYWN0aW9uLWl0ZW0vdW5pLXN3aXBlLWFjdGlvbi1pdGVtXCI6XCJjb21wb25lbnRzL3VuaS1zd2lwZS1hY3Rpb24taXRlbS91bmktc3dpcGUtYWN0aW9uLWl0ZW1cIixcImNvbXBvbmVudHMvdW5pLXN3aXBlLWFjdGlvbi91bmktc3dpcGUtYWN0aW9uXCI6XCJjb21wb25lbnRzL3VuaS1zd2lwZS1hY3Rpb24vdW5pLXN3aXBlLWFjdGlvblwiLFwiY29tcG9uZW50cy91bmktdHJhbnNpdGlvbi91bmktdHJhbnNpdGlvblwiOlwiY29tcG9uZW50cy91bmktdHJhbnNpdGlvbi91bmktdHJhbnNpdGlvblwiLFwiY29tcG9uZW50cy9qeWYtcGFyc2VyL2xpYnMvdHJlZXNcIjpcImNvbXBvbmVudHMvanlmLXBhcnNlci9saWJzL3RyZWVzXCIsXCJjb21wb25lbnRzL3VuaS1pY29ucy91bmktaWNvbnNcIjpcImNvbXBvbmVudHMvdW5pLWljb25zL3VuaS1pY29uc1wiLFwiY29tcG9uZW50cy91bmktc3RhdHVzLWJhci91bmktc3RhdHVzLWJhclwiOlwiY29tcG9uZW50cy91bmktc3RhdHVzLWJhci91bmktc3RhdHVzLWJhclwiLFwibm9kZS1tb2R1bGVzL3V2aWV3LXVpL2NvbXBvbmVudHMvdS1wb3B1cC91LXBvcHVwXCI6XCJub2RlLW1vZHVsZXMvdXZpZXctdWkvY29tcG9uZW50cy91LXBvcHVwL3UtcG9wdXBcIixcIm5vZGUtbW9kdWxlcy91dmlldy11aS9jb21wb25lbnRzL3UtaWNvbi91LWljb25cIjpcIm5vZGUtbW9kdWxlcy91dmlldy11aS9jb21wb25lbnRzL3UtaWNvbi91LWljb25cIixcIm5vZGUtbW9kdWxlcy91dmlldy11aS9jb21wb25lbnRzL3UtbWFzay91LW1hc2tcIjpcIm5vZGUtbW9kdWxlcy91dmlldy11aS9jb21wb25lbnRzL3UtbWFzay91LW1hc2tcIn1bY2h1bmtJZF18fGNodW5rSWQpICsgXCIudHRzc1wiO1xuIFx0XHRcdFx0dmFyIGZ1bGxocmVmID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgaHJlZjtcbiBcdFx0XHRcdHZhciBleGlzdGluZ0xpbmtUYWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJsaW5rXCIpO1xuIFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGV4aXN0aW5nTGlua1RhZ3MubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdFx0dmFyIHRhZyA9IGV4aXN0aW5nTGlua1RhZ3NbaV07XG4gXHRcdFx0XHRcdHZhciBkYXRhSHJlZiA9IHRhZy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWhyZWZcIikgfHwgdGFnLmdldEF0dHJpYnV0ZShcImhyZWZcIik7XG4gXHRcdFx0XHRcdGlmKHRhZy5yZWwgPT09IFwic3R5bGVzaGVldFwiICYmIChkYXRhSHJlZiA9PT0gaHJlZiB8fCBkYXRhSHJlZiA9PT0gZnVsbGhyZWYpKSByZXR1cm4gcmVzb2x2ZSgpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0dmFyIGV4aXN0aW5nU3R5bGVUYWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzdHlsZVwiKTtcbiBcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBleGlzdGluZ1N0eWxlVGFncy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdFx0XHR2YXIgdGFnID0gZXhpc3RpbmdTdHlsZVRhZ3NbaV07XG4gXHRcdFx0XHRcdHZhciBkYXRhSHJlZiA9IHRhZy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWhyZWZcIik7XG4gXHRcdFx0XHRcdGlmKGRhdGFIcmVmID09PSBocmVmIHx8IGRhdGFIcmVmID09PSBmdWxsaHJlZikgcmV0dXJuIHJlc29sdmUoKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdHZhciBsaW5rVGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG4gXHRcdFx0XHRsaW5rVGFnLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuIFx0XHRcdFx0bGlua1RhZy50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuIFx0XHRcdFx0bGlua1RhZy5vbmxvYWQgPSByZXNvbHZlO1xuIFx0XHRcdFx0bGlua1RhZy5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHtcbiBcdFx0XHRcdFx0dmFyIHJlcXVlc3QgPSBldmVudCAmJiBldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LnNyYyB8fCBmdWxsaHJlZjtcbiBcdFx0XHRcdFx0dmFyIGVyciA9IG5ldyBFcnJvcihcIkxvYWRpbmcgQ1NTIGNodW5rIFwiICsgY2h1bmtJZCArIFwiIGZhaWxlZC5cXG4oXCIgKyByZXF1ZXN0ICsgXCIpXCIpO1xuIFx0XHRcdFx0XHRlcnIuY29kZSA9IFwiQ1NTX0NIVU5LX0xPQURfRkFJTEVEXCI7XG4gXHRcdFx0XHRcdGVyci5yZXF1ZXN0ID0gcmVxdWVzdDtcbiBcdFx0XHRcdFx0ZGVsZXRlIGluc3RhbGxlZENzc0NodW5rc1tjaHVua0lkXVxuIFx0XHRcdFx0XHRsaW5rVGFnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGlua1RhZylcbiBcdFx0XHRcdFx0cmVqZWN0KGVycik7XG4gXHRcdFx0XHR9O1xuIFx0XHRcdFx0bGlua1RhZy5ocmVmID0gZnVsbGhyZWY7XG5cbiBcdFx0XHRcdHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdO1xuIFx0XHRcdFx0aGVhZC5hcHBlbmRDaGlsZChsaW5rVGFnKTtcbiBcdFx0XHR9KS50aGVuKGZ1bmN0aW9uKCkge1xuIFx0XHRcdFx0aW5zdGFsbGVkQ3NzQ2h1bmtzW2NodW5rSWRdID0gMDtcbiBcdFx0XHR9KSk7XG4gXHRcdH1cblxuIFx0XHQvLyBKU09OUCBjaHVuayBsb2FkaW5nIGZvciBqYXZhc2NyaXB0XG5cbiBcdFx0dmFyIGluc3RhbGxlZENodW5rRGF0YSA9IGluc3RhbGxlZENodW5rc1tjaHVua0lkXTtcbiBcdFx0aWYoaW5zdGFsbGVkQ2h1bmtEYXRhICE9PSAwKSB7IC8vIDAgbWVhbnMgXCJhbHJlYWR5IGluc3RhbGxlZFwiLlxuXG4gXHRcdFx0Ly8gYSBQcm9taXNlIG1lYW5zIFwiY3VycmVudGx5IGxvYWRpbmdcIi5cbiBcdFx0XHRpZihpbnN0YWxsZWRDaHVua0RhdGEpIHtcbiBcdFx0XHRcdHByb21pc2VzLnB1c2goaW5zdGFsbGVkQ2h1bmtEYXRhWzJdKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0Ly8gc2V0dXAgUHJvbWlzZSBpbiBjaHVuayBjYWNoZVxuIFx0XHRcdFx0dmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiBcdFx0XHRcdFx0aW5zdGFsbGVkQ2h1bmtEYXRhID0gaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gXHRcdFx0XHR9KTtcbiBcdFx0XHRcdHByb21pc2VzLnB1c2goaW5zdGFsbGVkQ2h1bmtEYXRhWzJdID0gcHJvbWlzZSk7XG5cbiBcdFx0XHRcdC8vIHN0YXJ0IGNodW5rIGxvYWRpbmdcbiBcdFx0XHRcdHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiBcdFx0XHRcdHZhciBvblNjcmlwdENvbXBsZXRlO1xuXG4gXHRcdFx0XHRzY3JpcHQuY2hhcnNldCA9ICd1dGYtOCc7XG4gXHRcdFx0XHRzY3JpcHQudGltZW91dCA9IDEyMDtcbiBcdFx0XHRcdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLm5jKSB7XG4gXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBfX3dlYnBhY2tfcmVxdWlyZV9fLm5jKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdHNjcmlwdC5zcmMgPSBqc29ucFNjcmlwdFNyYyhjaHVua0lkKTtcblxuIFx0XHRcdFx0Ly8gY3JlYXRlIGVycm9yIGJlZm9yZSBzdGFjayB1bndvdW5kIHRvIGdldCB1c2VmdWwgc3RhY2t0cmFjZSBsYXRlclxuIFx0XHRcdFx0dmFyIGVycm9yID0gbmV3IEVycm9yKCk7XG4gXHRcdFx0XHRvblNjcmlwdENvbXBsZXRlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gXHRcdFx0XHRcdC8vIGF2b2lkIG1lbSBsZWFrcyBpbiBJRS5cbiBcdFx0XHRcdFx0c2NyaXB0Lm9uZXJyb3IgPSBzY3JpcHQub25sb2FkID0gbnVsbDtcbiBcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuIFx0XHRcdFx0XHR2YXIgY2h1bmsgPSBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF07XG4gXHRcdFx0XHRcdGlmKGNodW5rICE9PSAwKSB7XG4gXHRcdFx0XHRcdFx0aWYoY2h1bmspIHtcbiBcdFx0XHRcdFx0XHRcdHZhciBlcnJvclR5cGUgPSBldmVudCAmJiAoZXZlbnQudHlwZSA9PT0gJ2xvYWQnID8gJ21pc3NpbmcnIDogZXZlbnQudHlwZSk7XG4gXHRcdFx0XHRcdFx0XHR2YXIgcmVhbFNyYyA9IGV2ZW50ICYmIGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQuc3JjO1xuIFx0XHRcdFx0XHRcdFx0ZXJyb3IubWVzc2FnZSA9ICdMb2FkaW5nIGNodW5rICcgKyBjaHVua0lkICsgJyBmYWlsZWQuXFxuKCcgKyBlcnJvclR5cGUgKyAnOiAnICsgcmVhbFNyYyArICcpJztcbiBcdFx0XHRcdFx0XHRcdGVycm9yLm5hbWUgPSAnQ2h1bmtMb2FkRXJyb3InO1xuIFx0XHRcdFx0XHRcdFx0ZXJyb3IudHlwZSA9IGVycm9yVHlwZTtcbiBcdFx0XHRcdFx0XHRcdGVycm9yLnJlcXVlc3QgPSByZWFsU3JjO1xuIFx0XHRcdFx0XHRcdFx0Y2h1bmtbMV0oZXJyb3IpO1xuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPSB1bmRlZmluZWQ7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH07XG4gXHRcdFx0XHR2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiBcdFx0XHRcdFx0b25TY3JpcHRDb21wbGV0ZSh7IHR5cGU6ICd0aW1lb3V0JywgdGFyZ2V0OiBzY3JpcHQgfSk7XG4gXHRcdFx0XHR9LCAxMjAwMDApO1xuIFx0XHRcdFx0c2NyaXB0Lm9uZXJyb3IgPSBzY3JpcHQub25sb2FkID0gb25TY3JpcHRDb21wbGV0ZTtcbiBcdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0cmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbiBcdH07XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvXCI7XG5cbiBcdC8vIG9uIGVycm9yIGZ1bmN0aW9uIGZvciBhc3luYyBsb2FkaW5nXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm9lID0gZnVuY3Rpb24oZXJyKSB7IGNvbnNvbGUuZXJyb3IoZXJyKTsgdGhyb3cgZXJyOyB9O1xuXG4gXHR2YXIganNvbnBBcnJheSA9IGdsb2JhbFtcIndlYnBhY2tKc29ucFwiXSA9IGdsb2JhbFtcIndlYnBhY2tKc29ucFwiXSB8fCBbXTtcbiBcdHZhciBvbGRKc29ucEZ1bmN0aW9uID0ganNvbnBBcnJheS5wdXNoLmJpbmQoanNvbnBBcnJheSk7XG4gXHRqc29ucEFycmF5LnB1c2ggPSB3ZWJwYWNrSnNvbnBDYWxsYmFjaztcbiBcdGpzb25wQXJyYXkgPSBqc29ucEFycmF5LnNsaWNlKCk7XG4gXHRmb3IodmFyIGkgPSAwOyBpIDwganNvbnBBcnJheS5sZW5ndGg7IGkrKykgd2VicGFja0pzb25wQ2FsbGJhY2soanNvbnBBcnJheVtpXSk7XG4gXHR2YXIgcGFyZW50SnNvbnBGdW5jdGlvbiA9IG9sZEpzb25wRnVuY3Rpb247XG5cblxuIFx0Ly8gcnVuIGRlZmVycmVkIG1vZHVsZXMgZnJvbSBvdGhlciBjaHVua3NcbiBcdGNoZWNrRGVmZXJyZWRNb2R1bGVzKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9