1import { injectQuery as __vite__injectQuery } from "/@vite/client";const exports = {}; 2/** 3 * @license React 4 * react-refresh-runtime.development.js 5 * 6 * Copyright (c) Facebook, Inc. and its affiliates. 7 * 8 * This source code is licensed under the MIT license found in the 9 * LICENSE file in the root directory of this source tree. 10 */ 11"use strict"; 12if (true) { 13 (function() { 14 "use strict"; 15 var REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"); 16 var REACT_MEMO_TYPE = Symbol.for("react.memo"); 17 var PossiblyWeakMap = typeof WeakMap === "function" ? WeakMap : Map; 18 var allFamiliesByID = /* @__PURE__ */ new Map(); 19 var allFamiliesByType = new PossiblyWeakMap(); 20 var allSignaturesByType = new PossiblyWeakMap(); 21 var updatedFamiliesByType = new PossiblyWeakMap(); 22 var pendingUpdates = []; 23 var helpersByRendererID = /* @__PURE__ */ new Map(); 24 var helpersByRoot = /* @__PURE__ */ new Map(); 25 var mountedRoots = /* @__PURE__ */ new Set(); 26 var failedRoots = /* @__PURE__ */ new Set(); 27 var rootElements = ( 28 // $FlowIssue
29 typeof WeakMap === "function" ? /* @__PURE__ */ new WeakMap() : null 30 ); 31 var isPerformingRefresh = false; 32 function computeFullKey(signature) { 33 if (signature.fullKey !== null) { 34 return signature.fullKey; 35 } 36 var fullKey = signature.ownKey; 37 var hooks2; 38 try { 39 hooks2 = signature.getCustomHooks(); 40 } catch (err) { 41 signature.forceReset = true; 42 signature.fullKey = fullKey; 43 return fullKey; 44 } 45 for (var i = 0; i < hooks2.length; i++) { 46 var hook = hooks2[i]; 47 if (typeof hook !== "function") { 48 signature.forceReset = true; 49 signature.fullKey = fullKey; 50 return fullKey; 51 } 52 var nestedHookSignature = allSignaturesByType.get(hook); 53 if (nestedHookSignature === void 0) { 54 continue; 55 } 56 var nestedHookKey = computeFullKey(nestedHookSignature); 57 if (nestedHookSignature.forceReset) { 58 signature.forceReset = true; 59 } 60 fullKey += "\n---\n" + nestedHookKey; 61 } 62 signature.fullKey = fullKey; 63 return fullKey; 64 } 65 function haveEqualSignatures(prevType, nextType) { 66 var prevSignature = allSignaturesByType.get(prevType); 67 var nextSignature = allSignaturesByType.get(nextType); 68 if (prevSignature === void 0 && nextSignature === void 0) { 69 return true; 70 } 71 if (prevSignature === void 0 || nextSignature === void 0) { 72 return false; 73 } 74 if (computeFullKey(prevSignature) !== computeFullKey(nextSignature)) { 75 return false; 76 } 77 if (nextSignature.forceReset) { 78 return false; 79 } 80 return true; 81 } 82 function isReactClass(type) { 83 return type.prototype && type.prototype.isReactComponent; 84 } 85 function canPreserveStateBetween(prevType, nextType) { 86 if (isReactClass(prevType) || isReactClass(nextType)) { 87 return false; 88 } 89 if (haveEqualSignatures(prevType, nextType)) { 90 return true; 91 } 92 return false; 93 } 94 function resolveFamily(type) { 95 return updatedFamiliesByType.get(type); 96 } 97 function cloneMap(map) { 98 var clone = /* @__PURE__ */ new Map(); 99 map.forEach(function(value, key) { 100 clone.set(key, value); 101 }); 102 return clone; 103 } 104 function cloneSet(set) { 105 var clone = /* @__PURE__ */ new Set(); 106 set.forEach(function(value) { 107 clone.add(value); 108 }); 109 return clone; 110 } 111 function getProperty(object, property) { 112 try { 113 return object[property]; 114 } catch (err) { 115 return void 0; 116 } 117 } 118 function performReactRefresh() { 119 if (pendingUpdates.length === 0) { 120 return null; 121 } 122 if (isPerformingRefresh) { 123 return null; 124 } 125 isPerformingRefresh = true; 126 try { 127 var staleFamilies = /* @__PURE__ */ new Set(); 128 var updatedFamilies = /* @__PURE__ */ new Set(); 129 var updates = pendingUpdates; 130 pendingUpdates = []; 131 updates.forEach(function(_ref) { 132 var family = _ref[0], nextType = _ref[1]; 133 var prevType = family.current; 134 updatedFamiliesByType.set(prevType, family); 135 updatedFamiliesByType.set(nextType, family); 136 family.current = nextType; 137 if (canPreserveStateBetween(prevType, nextType)) { 138 updatedFamilies.add(family); 139 } else { 140 staleFamilies.add(family); 141 } 142 }); 143 var update = { 144 updatedFamilies, 145 // Families that will re-render preserving state 146 staleFamilies 147 // Families that will be remounted 148 }; 149 helpersByRendererID.forEach(function(helpers) { 150 helpers.setRefreshHandler(resolveFamily); 151 }); 152 var didError = false; 153 var firstError = null; 154 var failedRootsSnapshot = cloneSet(failedRoots); 155 var mountedRootsSnapshot = cloneSet(mountedRoots); 156 var helpersByRootSnapshot = cloneMap(helpersByRoot); 157 failedRootsSnapshot.forEach(function(root) {
158 var helpers = helpersByRootSnapshot.get(root); 159 if (helpers === void 0) { 160 throw new Error("Could not find helpers for a root. This is a bug in React Refresh."); 161 } 162 if (!failedRoots.has(root)) { 163 } 164 if (rootElements === null) { 165 return; 166 } 167 if (!rootElements.has(root)) { 168 return; 169 } 170 var element = rootElements.get(root); 171 try { 172 helpers.scheduleRoot(root, element); 173 } catch (err) { 174 if (!didError) { 175 didError = true; 176 firstError = err; 177 } 178 } 179 }); 180 mountedRootsSnapshot.forEach(function(root) { 181 var helpers = helpersByRootSnapshot.get(root); 182 if (helpers === void 0) { 183 throw new Error("Could not find helpers for a root. This is a bug in React Refresh."); 184 } 185 if (!mountedRoots.has(root)) { 186 } 187 try { 188 helpers.scheduleRefresh(root, update); 189 } catch (err) { 190 if (!didError) { 191 didError = true; 192 firstError = err; 193 } 194 } 195 }); 196 if (didError) { 197 throw firstError; 198 } 199 return update; 200 } finally { 201 isPerformingRefresh = false; 202 } 203 } 204 function register(type, id) { 205 { 206 if (type === null) { 207 return; 208 } 209 if (typeof type !== "function" && typeof type !== "object") { 210 return; 211 } 212 if (allFamiliesByType.has(type)) { 213 return; 214 } 215 var family = allFamiliesByID.get(id); 216 if (family === void 0) { 217 family = { 218 current: type 219 }; 220 allFamiliesByID.set(id, family); 221 } else { 222 pendingUpdates.push([family, type]); 223 } 224 allFamiliesByType.set(type, family); 225 if (typeof type === "object" && type !== null) { 226 switch (getProperty(type, "$$typeof")) { 227 case REACT_FORWARD_REF_TYPE: 228 register(type.render, id + "$render"); 229 break; 230 case REACT_MEMO_TYPE: 231 register(type.type, id + "$type"); 232 break; 233 } 234 } 235 } 236 } 237 function setSignature(type, key) { 238 var forceReset = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false; 239 var getCustomHooks = arguments.length > 3 ? arguments[3] : void 0; 240 { 241 if (!allSignaturesByType.has(type)) { 242 allSignaturesByType.set(type, { 243 forceReset, 244 ownKey: key, 245 fullKey: null, 246 getCustomHooks: getCustomHooks || function() { 247 return []; 248 } 249 }); 250 } 251 if (typeof type === "object" && type !== null) { 252 switch (getProperty(type, "$$typeof")) { 253 case REACT_FORWARD_REF_TYPE: 254 setSignature(type.render, key, forceReset, getCustomHooks); 255 break; 256 case REACT_MEMO_TYPE: 257 setSignature(type.type, key, forceReset, getCustomHooks); 258 break; 259 } 260 } 261 } 262 } 263 function collectCustomHooksForSignature(type) { 264 { 265 var signature = allSignaturesByType.get(type); 266 if (signature !== void 0) { 267 computeFullKey(signature); 268 } 269 } 270 } 271 function getFamilyByID(id) { 272 { 273 return allFamiliesByID.get(id); 274 } 275 } 276 function getFamilyByType(type) { 277 { 278 return allFamiliesByType.get(type); 279 } 280 } 281 function findAffectedHostInstances(families) { 282 { 283 var affectedInstances = /* @__PURE__ */ new Set(); 284 mountedRoots.forEach(function(root) { 285 var helpers = helpersByRoot.get(root); 286 if (helpers === void 0) { 287 throw new Error("Could not find helpers for a root. This is a bug in React Refresh."); 288 } 289 var instancesForRoot = helpers.findHostInstancesForRefresh(root, families); 290 instancesForRoot.forEach(function(inst) { 291 affectedInstances.add(inst); 292 }); 293 }); 294 return affectedInstances; 295 } 296 } 297 function injectIntoGlobalHook(globalObject) { 298 { 299 var hook = globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__; 300 if (hook === void 0) { 301 var nextID = 0; 302 globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__ = hook = { 303 renderers: /* @__PURE__ */ new Map(), 304 supportsFiber: true, 305 inject: function(injected) { 306 return nextID++; 307 }, 308 onScheduleFiberRoot: function(id, root, children) { 309 }, 310 onCommitFiberRoot: function(id, root, maybePriorityLevel, didError) { 311 }, 312 onCommitFiberUnmount: function() { 313 } 314 }; 315 } 316 if (hook.isDisabled) { 317 console["warn"]("Something has shimmed the React DevTools global hook (__REACT_DEVTOOLS_GLOBAL_HOOK__). Fast Refresh is not compatible with this shim and will be disabled."); 318 return; 319 } 320 var oldInject = hook.inject; 321 hook.inject = function(injected) { 322 var id = oldInject.apply(this, arguments); 323 if (typeof injected.scheduleRefresh === "function" && typeof injected.setRefreshHandler === "function") { 324 helpersByRendererID.set(id, injected); 325 } 326 return id; 327 };
328 hook.renderers.forEach(function(injected, id) { 329 if (typeof injected.scheduleRefresh === "function" && typeof injected.setRefreshHandler === "function") { 330 helpersByRendererID.set(id, injected); 331 } 332 }); 333 var oldOnCommitFiberRoot = hook.onCommitFiberRoot; 334 var oldOnScheduleFiberRoot = hook.onScheduleFiberRoot || function() { 335 }; 336 hook.onScheduleFiberRoot = function(id, root, children) { 337 if (!isPerformingRefresh) { 338 failedRoots.delete(root); 339 if (rootElements !== null) { 340 rootElements.set(root, children); 341 } 342 } 343 return oldOnScheduleFiberRoot.apply(this, arguments); 344 }; 345 hook.onCommitFiberRoot = function(id, root, maybePriorityLevel, didError) { 346 var helpers = helpersByRendererID.get(id); 347 if (helpers !== void 0) { 348 helpersByRoot.set(root, helpers); 349 var current = root.current; 350 var alternate = current.alternate; 351 if (alternate !== null) { 352 var wasMounted = alternate.memoizedState != null && alternate.memoizedState.element != null && mountedRoots.has(root); 353 var isMounted = current.memoizedState != null && current.memoizedState.element != null; 354 if (!wasMounted && isMounted) { 355 mountedRoots.add(root); 356 failedRoots.delete(root); 357 } else if (wasMounted && isMounted) ; 358 else if (wasMounted && !isMounted) { 359 mountedRoots.delete(root); 360 if (didError) { 361 failedRoots.add(root); 362 } else { 363 helpersByRoot.delete(root); 364 } 365 } else if (!wasMounted && !isMounted) { 366 if (didError) { 367 failedRoots.add(root); 368 } 369 } 370 } else { 371 mountedRoots.add(root); 372 } 373 } 374 return oldOnCommitFiberRoot.apply(this, arguments); 375 }; 376 } 377 } 378 function hasUnrecoverableErrors() { 379 return false; 380 } 381 function _getMountedRootCount() { 382 { 383 return mountedRoots.size; 384 } 385 } 386 function createSignatureFunctionForTransform() { 387 { 388 var savedType; 389 var hasCustomHooks; 390 var didCollectHooks = false; 391 return function(type, key, forceReset, getCustomHooks) { 392 if (typeof key === "string") { 393 if (!savedType) { 394 savedType = type; 395 hasCustomHooks = typeof getCustomHooks === "function"; 396 } 397 if (type != null && (typeof type === "function" || typeof type === "object")) { 398 setSignature(type, key, forceReset, getCustomHooks); 399 } 400 return type; 401 } else { 402 if (!didCollectHooks && hasCustomHooks) { 403 didCollectHooks = true; 404 collectCustomHooksForSignature(savedType); 405 } 406 } 407 }; 408 } 409 } 410 function isLikelyComponentType(type) { 411 { 412 switch (typeof type) { 413 case "function": { 414 if (type.prototype != null) { 415 if (type.prototype.isReactComponent) { 416 return true; 417 } 418 var ownNames = Object.getOwnPropertyNames(type.prototype); 419 if (ownNames.length > 1 || ownNames[0] !== "constructor") { 420 return false; 421 } 422 if (type.prototype.__proto__ !== Object.prototype) { 423 return false; 424 } 425 } 426 var name = type.name || type.displayName; 427 return typeof name === "string" && /^[A-Z]/.test(name); 428 } 429 case "object": { 430 if (type != null) { 431 switch (getProperty(type, "$$typeof")) { 432 case REACT_FORWARD_REF_TYPE: 433 case REACT_MEMO_TYPE: 434 return true; 435 default: 436 return false; 437 } 438 } 439 return false;
440 } 441 default: { 442 return false; 443 } 444 } 445 } 446 } 447 exports._getMountedRootCount = _getMountedRootCount; 448 exports.collectCustomHooksForSignature = collectCustomHooksForSignature; 449 exports.createSignatureFunctionForTransform = createSignatureFunctionForTransform; 450 exports.findAffectedHostInstances = findAffectedHostInstances; 451 exports.getFamilyByID = getFamilyByID; 452 exports.getFamilyByType = getFamilyByType; 453 exports.hasUnrecoverableErrors = hasUnrecoverableErrors; 454 exports.injectIntoGlobalHook = injectIntoGlobalHook; 455 exports.isLikelyComponentType = isLikelyComponentType; 456 exports.performReactRefresh = performReactRefresh; 457 exports.register = register; 458 exports.setSignature = setSignature; 459 })(); 460} 461function debounce(fn, delay) { 462 let handle; 463 return () => { 464 clearTimeout(handle); 465 handle = setTimeout(fn, delay); 466 }; 467} 468const hooks = []; 469window.__registerBeforePerformReactRefresh = (cb) => { 470 hooks.push(cb); 471}; 472const enqueueUpdate = debounce(async () => { 473 if (hooks.length) await Promise.all(hooks.map((cb) => cb())); 474 exports.performReactRefresh(); 475}, 16); 476function registerExportsForReactRefresh(filename, moduleExports) { 477 for (const key in moduleExports) { 478 if (key === "__esModule") continue; 479 const exportValue = moduleExports[key]; 480 if (exports.isLikelyComponentType(exportValue)) { 481 exports.register(exportValue, filename + " export " + key); 482 } 483 } 484} 485function validateRefreshBoundaryAndEnqueueUpdate(id, prevExports, nextExports) { 486 const ignoredExports = window.__getReactRefreshIgnoredExports?.({ id }) ?? []; 487 if (predicateOnExport( 488 ignoredExports, 489 prevExports, 490 (key) => key in nextExports 491 ) !== true) { 492 return "Could not Fast Refresh (export removed)"; 493 } 494 if (predicateOnExport( 495 ignoredExports, 496 nextExports, 497 (key) => key in prevExports 498 ) !== true) { 499 return "Could not Fast Refresh (new export)"; 500 } 501 let hasExports = false; 502 const allExportsAreComponentsOrUnchanged = predicateOnExport( 503 ignoredExports, 504 nextExports, 505 (key, value) => { 506 hasExports = true; 507 if (exports.isLikelyComponentType(value)) return true; 508 return prevExports[key] === nextExports[key]; 509 } 510 ); 511 if (hasExports && allExportsAreComponentsOrUnchanged === true) { 512 enqueueUpdate(); 513 } else { 514 return `Could not Fast Refresh ("${allExportsAreComponentsOrUnchanged}" export is incompatible). Learn more at https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#consistent-components-exports`; 515 } 516} 517function predicateOnExport(ignoredExports, moduleExports, predicate) { 518 for (const key in moduleExports) { 519 if (key === "__esModule") continue; 520 if (ignoredExports.includes(key)) continue; 521 const desc = Object.getOwnPropertyDescriptor(moduleExports, key); 522 if (desc && desc.get) return key; 523 if (!predicate(key, moduleExports[key])) return key; 524 } 525 return true; 526} 527function __hmr_import(module) { 528 return import( 529 /* @vite-ignore */ 530 __vite__injectQuery(module, 'import') 531 ); 532} 533exports.__hmr_import = __hmr_import; 534exports.registerExportsForReactRefresh = registerExportsForReactRefresh; 535exports.validateRefreshBoundaryAndEnqueueUpdate = validateRefreshBoundaryAndEnqueueUpdate; 536export default exports; 537 538//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkByZWFjdC1yZWZyZXNoIl0sInNvdXJjZXNDb250ZW50IjpbIlxuY29uc3QgZXhwb3J0cyA9IHt9XG4vKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJyk7XG5cbnZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7IC8vIFdlIG5ldmVyIHJlbW92ZSB0aGVzZSBhc3NvY2lhdGlvbnMuXG4vLyBJdCdzIE9LIHRvIHJlZmVyZW5jZSBmYW1pbGllcywgYnV0IHVzZSBXZWFrTWFwL1NldCBmb3IgdHlwZXMuXG5cbnZhciBhbGxGYW1pbGllc0J5SUQgPSBuZXcgTWFwKCk7XG52YXIgYWxsRmFtaWxpZXNCeVR5cGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG52YXIgYWxsU2lnbmF0dXJlc0J5VHlwZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTsgLy8gVGhpcyBXZWFrTWFwIGlzIHJlYWQgYnkgUmVhY3QsIHNvIHdlIG9ubHkgcHV0IGZhbWlsaWVzXG4vLyB0aGF0IGhh
538dmUgYWN0dWFsbHkgYmVlbiBlZGl0ZWQgaGVyZS4gVGhpcyBrZWVwcyBjaGVja3MgZmFzdC5cbi8vICRGbG93SXNzdWVcblxudmFyIHVwZGF0ZWRGYW1pbGllc0J5VHlwZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTsgLy8gVGhpcyBpcyBjbGVhcmVkIG9uIGV2ZXJ5IHBlcmZvcm1SZWFjdFJlZnJlc2goKSBjYWxsLlxuLy8gSXQgaXMgYW4gYXJyYXkgb2YgW0ZhbWlseSwgTmV4dFR5cGVdIHR1cGxlcy5cblxudmFyIHBlbmRpbmdVcGRhdGVzID0gW107IC8vIFRoaXMgaXMgaW5qZWN0ZWQgYnkgdGhlIHJlbmRlcmVyIHZpYSBEZXZUb29scyBnbG9iYWwgaG9vay5cblxudmFyIGhlbHBlcnNCeVJlbmRlcmVySUQgPSBuZXcgTWFwKCk7XG52YXIgaGVscGVyc0J5Um9vdCA9IG5ldyBNYXAoKTsgLy8gV2Uga2VlcCB0cmFjayBvZiBtb3VudGVkIHJvb3RzIHNvIHdlIGNhbiBzY2hlZHVsZSB1cGRhdGVzLlxuXG52YXIgbW91bnRlZFJvb3RzID0gbmV3IFNldCgpOyAvLyBJZiBhIHJvb3QgY2FwdHVyZXMgYW4gZXJyb3IsIHdlIHJlbWVtYmVyIGl0IHNvIHdlIGNhbiByZXRyeSBvbiBlZGl0LlxuXG52YXIgZmFpbGVkUm9vdHMgPSBuZXcgU2V0KCk7IC8vIEluIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgV2Vha01hcCwgd2UgYWxzbyByZW1lbWJlciB0aGUgbGFzdCBlbGVtZW50IGZvciBldmVyeSByb290LlxuLy8gSXQgbmVlZHMgdG8gYmUgd2VhayBiZWNhdXNlIHdlIGRvIHRoaXMgZXZlbiBmb3Igcm9vdHMgdGhhdCBmYWlsZWQgdG8gbW91bnQuXG4vLyBJZiB0aGVyZSBpcyBubyBXZWFrTWFwLCB3ZSB3b24ndCBhdHRlbXB0IHRvIGRvIHJldHJ5aW5nLlxuLy8gJEZsb3dJc3N1ZVxuXG52YXIgcm9vdEVsZW1lbnRzID0gLy8gJEZsb3dJc3N1ZVxudHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBuZXcgV2Vha01hcCgpIDogbnVsbDtcbnZhciBpc1BlcmZvcm1pbmdSZWZyZXNoID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGNvbXB1dGVGdWxsS2V5KHNpZ25hdHVyZSkge1xuICBpZiAoc2lnbmF0dXJlLmZ1bGxLZXkgIT09IG51bGwpIHtcbiAgICByZXR1cm4gc2lnbmF0dXJlLmZ1bGxLZXk7XG4gIH1cblxuICB2YXIgZnVsbEtleSA9IHNpZ25hdHVyZS5vd25LZXk7XG4gIHZhciBob29rcztcblxuICB0cnkge1xuICAgIGhvb2tzID0gc2lnbmF0dXJlLmdldEN1c3RvbUhvb2tzKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpbiBhbiBlZGdlIGNhc2UsIGUuZy4gaWYgZXhwcmVzc2lvbiBsaWtlIEZvby51c2VTb21ldGhpbmdcbiAgICAvLyBkZXBlbmRzIG9uIEZvbyB3aGljaCBpcyBsYXppbHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHJlbmRlcmluZy5cbiAgICAvLyBJbiB0aGF0IGNhc2UganVzdCBhc3N1bWUgd2UnbGwgaGF2ZSB0byByZW1vdW50LlxuICAgIHNpZ25hdHVyZS5mb3JjZVJlc2V0ID0gdHJ1ZTtcbiAgICBzaWduYXR1cmUuZnVsbEtleSA9IGZ1bGxLZXk7XG4gICAgcmV0dXJuIGZ1bGxLZXk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGhvb2sgPSBob29rc1tpXTtcblxuICAgIGlmICh0eXBlb2YgaG9vayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gU29tZXRoaW5nJ3Mgd3JvbmcuIEFzc3VtZSB3ZSBuZWVkIHRvIHJlbW91bnQuXG4gICAgICBzaWduYXR1cmUuZm9yY2VSZXNldCA9IHRydWU7XG4gICAgICBzaWduYXR1cmUuZnVsbEtleSA9IGZ1bGxLZXk7XG4gICAgICByZXR1cm4gZnVsbEtleTtcbiAgICB9XG5cbiAgICB2YXIgbmVzdGVkSG9va1NpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KGhvb2spO1xuXG4gICAgaWYgKG5lc3RlZEhvb2tTaWduYXR1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gTm8gc2lnbmF0dXJlIG1lYW5zIEhvb2sgd2Fzbid0IGluIHRoZSBzb3VyY2UgY29kZSwgZS5nLiBpbiBhIGxpYnJhcnkuXG4gICAgICAvLyBXZSdsbCBza2lwIGl0IGJlY2F1c2Ugd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBjaGFuZ2UgZHVyaW5nIHRoaXMgc2Vzc2lvbi5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBuZXN0ZWRIb29rS2V5ID0gY29tcHV0ZUZ1bGxLZXkobmVzdGVkSG9va1NpZ25hdHVyZSk7XG5cbiAgICBpZiAobmVzdGVkSG9va1NpZ25hdHVyZS5mb3JjZVJlc2V0KSB7XG4gICAgICBzaWduYXR1cmUuZm9yY2VSZXNldCA9IHRydWU7XG4gICAgfVxuXG4gICAgZnVsbEtleSArPSAnXFxuLS0tXFxuJyArIG5lc3RlZEhvb2tLZXk7XG4gIH1cblxuICBzaWduYXR1cmUuZnVsbEtleSA9IGZ1bGxLZXk7XG4gIHJldHVybiBmdWxsS2V5O1xufVxuXG5mdW5jdGlvbiBoYXZlRXF1YWxTaWduYXR1cmVzKHByZXZUeXBlLCBuZXh0VHlwZSkge1xuICB2YXIgcHJldlNpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KHByZXZUeXBlKTtcbiAgdmFyIG5leHRTaWduYXR1cmUgPSBhbGxTaWduYXR1cmVzQnlUeXBlLmdldChuZXh0VHlwZSk7XG5cbiAgaWYgKHByZXZTaWduYXR1cmUgPT09IHVuZGVmaW5lZCAmJiBuZXh0U2lnbmF0dXJlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcmV2U2lnbmF0dXJlID09PSB1bmRlZmluZWQgfHwgbmV4dFNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbXB1dGVGdWxsS2V5KHByZXZTaWduYXR1cmUpICE9PSBjb21wdXRlRnVsbEtleShuZXh0U2lnbmF0dXJlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChuZXh0U2lnbmF0dXJlLmZvcmNlUmVzZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNSZWFjdENsYXNzKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUucHJvdG90eXBlICYmIHR5cGUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ7XG59XG5cbmZ1bmN0aW9uIGNhblByZXNlcnZlU3RhdGVCZXR3ZWVuKHByZXZUeXBlLCBuZXh0VHlwZSkge1xuICBpZiAoaXNSZWFjdENsYXNzKHByZXZUeXBlKSB8fCBpc1JlYWN0Q2xhc3MobmV4dFR5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGhhdmVFcXVhbFNpZ25hdHVyZXMocHJldlR5cGUsIG5leHRUeXBlKSkge1xuICAgIHJldHVybi
538B0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRmFtaWx5KHR5cGUpIHtcbiAgLy8gT25seSBjaGVjayB1cGRhdGVkIHR5cGVzIHRvIGtlZXAgbG9va3VwcyBmYXN0LlxuICByZXR1cm4gdXBkYXRlZEZhbWlsaWVzQnlUeXBlLmdldCh0eXBlKTtcbn0gLy8gSWYgd2UgZGlkbid0IGNhcmUgYWJvdXQgSUUxMSwgd2UgY291bGQgdXNlIG5ldyBNYXAvU2V0KGl0ZXJhYmxlKS5cblxuXG5mdW5jdGlvbiBjbG9uZU1hcChtYXApIHtcbiAgdmFyIGNsb25lID0gbmV3IE1hcCgpO1xuICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgIGNsb25lLnNldChrZXksIHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBjbG9uZTtcbn1cblxuZnVuY3Rpb24gY2xvbmVTZXQoc2V0KSB7XG4gIHZhciBjbG9uZSA9IG5ldyBTZXQoKTtcbiAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgY2xvbmUuYWRkKHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBjbG9uZTtcbn0gLy8gVGhpcyBpcyBhIHNhZmV0eSBtZWNoYW5pc20gdG8gcHJvdGVjdCBhZ2FpbnN0IHJvZ3VlIGdldHRlcnMgYW5kIFByb3hpZXMuXG5cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSkge1xuICB0cnkge1xuICAgIHJldHVybiBvYmplY3RbcHJvcGVydHldO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBJbnRlbnRpb25hbGx5IGlnbm9yZS5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBlcmZvcm1SZWFjdFJlZnJlc2goKSB7XG5cbiAgaWYgKHBlbmRpbmdVcGRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGlzUGVyZm9ybWluZ1JlZnJlc2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlzUGVyZm9ybWluZ1JlZnJlc2ggPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgdmFyIHN0YWxlRmFtaWxpZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHVwZGF0ZWRGYW1pbGllcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdXBkYXRlcyA9IHBlbmRpbmdVcGRhdGVzO1xuICAgIHBlbmRpbmdVcGRhdGVzID0gW107XG4gICAgdXBkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2Y
538XIgZmFtaWx5ID0gX3JlZlswXSxcbiAgICAgICAgICBuZXh0VHlwZSA9IF9yZWZbMV07XG4gICAgICAvLyBOb3cgdGhhdCB3ZSBnb3QgYSByZWFsIGVkaXQsIHdlIGNhbiBjcmVhdGUgYXNzb2NpYXRpb25zXG4gICAgICAvLyB0aGF0IHdpbGwgYmUgcmVhZCBieSB0aGUgUmVhY3QgcmVjb25jaWxlci5cbiAgICAgIHZhciBwcmV2VHlwZSA9IGZhbWlseS5jdXJyZW50O1xuICAgICAgdXBkYXRlZEZhbWlsaWVzQnlUeXBlLnNldChwcmV2VHlwZSwgZmFtaWx5KTtcbiAgICAgIHVwZGF0ZWRGYW1pbGllc0J5VHlwZS5zZXQobmV4dFR5cGUsIGZhbWlseSk7XG4gICAgICBmYW1pbHkuY3VycmVudCA9IG5leHRUeXBlOyAvLyBEZXRlcm1pbmUgd2hldGhlciB0aGlzIHNob3VsZCBiZSBhIHJlLXJlbmRlciBvciBhIHJlLW1vdW50LlxuXG4gICAgICBpZiAoY2FuUHJlc2VydmVTdGF0ZUJldHdlZW4ocHJldlR5cGUsIG5leHRUeXBlKSkge1xuICAgICAgICB1cGRhdGVkRmFtaWxpZXMuYWRkKGZhbWlseSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFsZUZhbWlsaWVzLmFkZChmYW1pbHkpO1xuICAgICAgfVxuICAgIH0pOyAvLyBUT0RPOiByZW5hbWUgdGhlc2UgZmllbGRzIHRvIHNvbWV0aGluZyBtb3JlIG1lYW5pbmdmdWwuXG5cbiAgICB2YXIgdXBkYXRlID0ge1xuICAgICAgdXBkYXRlZEZhbWlsaWVzOiB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICAvLyBGYW1pbGllcyB0aGF0IHdpbGwgcmUtcmVuZGVyIHByZXNlcnZpbmcgc3RhdGVcbiAgICAgIHN0YWxlRmFtaWxpZXM6IHN0YWxlRmFtaWxpZXMgLy8gRmFtaWxpZXMgdGhhdCB3aWxsIGJlIHJlbW91bnRlZFxuXG4gICAgfTtcbiAgICBoZWxwZXJzQnlSZW5kZXJlcklELmZvckVhY2goZnVuY3Rpb24gKGhlbHBlcnMpIHtcbiAgICAgIC8vIEV2ZW4gaWYgdGhlcmUgYXJlIG5vIHJvb3RzLCBzZXQgdGhlIGhhbmRsZXIgb24gZmlyc3QgdXBkYXRlLlxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgaWYgKm5ldyogcm9vdHMgYXJlIG1vdW50ZWQsIHRoZXknbGwgdXNlIHRoZSByZXNvbHZlIGhhbmRsZXIuXG4gICAgICBoZWxwZXJzLnNldFJlZnJlc2hIYW5kbGVyKHJlc29sdmVGYW1pbHkpO1xuICAgIH0pO1xuICAgIHZhciBkaWRFcnJvciA9IGZhbHNlO1xuICAgIHZhciBmaXJzdEVycm9yID0gbnVsbDsgLy8gV2Ugc25hcHNob3QgbWFwcyBhbmQgc2V0cyB0aGF0IGFyZSBtdXRhdGVkIGR1cmluZyBjb21taXRzLlxuICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHR
538oZXJlIGlzIGEgcmlzayB0aGV5IHdpbGwgYmUgbXV0YXRlZCB3aGlsZVxuICAgIC8vIHdlIGl0ZXJhdGUgb3ZlciB0aGVtLiBGb3IgZXhhbXBsZSwgdHJ5aW5nIHRvIHJlY292ZXIgYSBmYWlsZWQgcm9vdFxuICAgIC8vIG1heSBjYXVzZSBhbm90aGVyIHJvb3QgdG8gYmUgYWRkZWQgdG8gdGhlIGZhaWxlZCBsaXN0IC0tIGFuIGluZmluaXRlIGxvb3AuXG5cbiAgICB2YXIgZmFpbGVkUm9vdHNTbmFwc2hvdCA9IGNsb25lU2V0KGZhaWxlZFJvb3RzKTtcbiAgICB2YXIgbW91bnRlZFJvb3RzU25hcHNob3QgPSBjbG9uZVNldChtb3VudGVkUm9vdHMpO1xuICAgIHZhciBoZWxwZXJzQnlSb290U25hcHNob3QgPSBjbG9uZU1hcChoZWxwZXJzQnlSb290KTtcbiAgICBmYWlsZWRSb290c1NuYXBzaG90LmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5Um9vdFNuYXBzaG90LmdldChyb290KTtcblxuICAgICAgaWYgKGhlbHBlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGhlbHBlcnMgZm9yIGEgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdCBSZWZyZXNoLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZhaWxlZFJvb3RzLmhhcyhyb290KSkgey8vIE5vIGxvbmdlciBmYWlsZWQuXG4gICAgICB9XG5cbiAgICAgIGlmIChyb290RWxlbWVudHMgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJvb3RFbGVtZW50cy5oYXMocm9vdCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2Y
538XIgZWxlbWVudCA9IHJvb3RFbGVtZW50cy5nZXQocm9vdCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGhlbHBlcnMuc2NoZWR1bGVSb290KHJvb3QsIGVsZW1lbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghZGlkRXJyb3IpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgZmlyc3RFcnJvciA9IGVycjtcbiAgICAgICAgfSAvLyBLZWVwIHRyeWluZyBvdGhlciByb290cy5cblxuICAgICAgfVxuICAgIH0pO1xuICAgIG1vdW50ZWRSb290c1NuYXBzaG90LmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5Um9vdFNuYXBzaG90LmdldChyb290KTtcblxuICAgICAgaWYgKGhlbHBlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGhlbHBlcnMgZm9yIGEgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdCBSZWZyZXNoLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW1vdW50ZWRSb290cy5oYXMocm9vdCkpIHsvLyBObyBsb25nZXIgbW91bnRlZC5cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgaGVscGVycy5zY2hlZHVsZVJlZnJlc2gocm9vdCwgdXBkYXRlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWRpZEVycm9yKSB7XG4gICAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIGZpcnN0RXJyb3IgPSBlcnI7XG4gICAgICAgIH0gLy8gS2VlcCB0cnlpbmcgb3RoZXIgcm9vdHMuXG5cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgdGhyb3cgZmlyc3RFcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlO1xuICB9IGZpbmFsbHkge1xuICAgIGlzUGVyZm9ybWluZ1JlZnJlc2ggPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gcmVnaXN0ZXIodHlwZSwgaWQpIHtcbiAge1xuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIGluIGFuIGVkZ2UgY2FzZSwgZS5nLiBpZiB3ZSByZWdpc3RlclxuICAgIC8vIHJldHVybiB2YWx1ZSBvZiBhIEhPQyBidXQgaXQgcmV0dXJucyBhIGNhY2hlZCBjb21wb25lbnQuXG4gICAgLy8gSWdub3JlIGFueXRoaW5nIGJ1dCB0aGUgZmlyc3QgcmVnaXN0cmF0aW9uIGZvciBlYWNoIHR5cGUuXG5cblxuICAgIGlmIChhbGxGYW1pbGllc0J5VHlwZS5oYXModHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIENyZWF0ZSBmYW1pbHkgb3IgcmVtZW1iZXIgdG8gdXBkYXRlIGl0LlxuICAgIC8vIE5vbmUgb2YgdGhpcyBib29ra2VlcGluZyBhZmZlY3RzIHJlY29uY2lsaWF0aW9uXG4gICAgLy8gdW50aWwgdGhlIGZpcnN0IHBlcmZvcm1SZWFjdFJlZnJlc2goKSBjYWxsIGFib3ZlLlxuXG5cbiAgICB2YXIgZmFtaWx5ID0gYWxsRmFtaWxpZXNCeUlELmdldChpZCk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZhbWlseSA9IHtcbiAgICAgICAgY3VycmVudDogdHlwZVxuICAgICAgfTtcbiAgICAgIGFsbEZhbWlsaWVzQnlJRC5zZXQoaWQsIGZhbWlseSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdVcGRhdGVzLnB1c2goW2ZhbWlseSwgdHlwZV0pO1xuICAgIH1cblxuICAgIGFsbEZhbWlsaWVzQnlUeXBlLnNldCh0eXBlLCBmYW1pbHkpOyAvLyBWaXNpdCBpbm5lciB0eXBlcyBiZWNhdXNlIHdlIG1pZ2h0IG5vdCBoYXZlIHJlZ2lzdGVyZWQgdGhlbS5cblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChnZXRQcm9wZXJ0eSh0eXBlLCAnJCR0eXBlb2YnKSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgcmVnaXN0ZXIodHlwZS5yZW5kZXIsIGlkICsgJyRyZW5kZXInKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICByZWdpc3Rlcih0eXBlLnR5cGUsIGlkICsgJyR0eXBlJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRTaWduYXR1cmUodHlwZSwga2V5KSB7XG4gIHZhciBmb3JjZVJlc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgdmFyIGdldEN1c3RvbUhvb2tzID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG5cbiAge1xuICAgIGlmICghYWxsU2lnbmF0dXJlc0J5VHlwZS5oYXModHlwZSkpIHtcbiAgICAgIGFsbFNpZ25hdHVyZXNCeVR5cGUuc2V0KHR5cGUsIHtcbiAgICAgICAgZm9yY2VSZXNldDogZm9yY2VSZXNldCxcbiAgICAgICAgb3duS2V5OiBrZXksXG4gICAgICAgIGZ1bGxLZXk6IG51bGwsXG4gICAgICAgIGdldEN1c3RvbUhvb2tzOiBnZXRDdXN0b21Ib29rcyB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IC8vIFZpc2l0IGlubmVyIHR5cGVzIGJlY2F1c2Ugd2UgbWlnaHQgbm90IGhhdmUgc2lnbmVkIHRoZW0uXG5cblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChnZXRQcm9wZXJ0eSh0eXBlLCAnJCR0eXBlb2YnKSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgc2V0U2lnbmF0dXJlKHR5cGUucmVuZGVyLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICBzZXRTaWduYXR1cmUodHlwZS50eXBlLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gI
538H1cbn0gLy8gVGhpcyBpcyBsYXppbHkgY2FsbGVkIGR1cmluZyBmaXJzdCByZW5kZXIgZm9yIGEgdHlwZS5cbi8vIEl0IGNhcHR1cmVzIEhvb2sgbGlzdCBhdCB0aGF0IHRpbWUgc28gaW5saW5lIHJlcXVpcmVzIGRvbid0IGJyZWFrIGNvbXBhcmlzb25zLlxuXG5mdW5jdGlvbiBjb2xsZWN0Q3VzdG9tSG9va3NGb3JTaWduYXR1cmUodHlwZSkge1xuICB7XG4gICAgdmFyIHNpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KHR5cGUpO1xuXG4gICAgaWYgKHNpZ25hdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb21wdXRlRnVsbEtleShzaWduYXR1cmUpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RmFtaWx5QnlJRChpZCkge1xuICB7XG4gICAgcmV0dXJuIGFsbEZhbWlsaWVzQnlJRC5nZXQoaWQpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGYW1pbHlCeVR5cGUodHlwZSkge1xuICB7XG4gICAgcmV0dXJuIGFsbEZhbWlsaWVzQnlUeXBlLmdldCh0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmluZEFmZmVjdGVkSG9zdEluc3RhbmNlcyhmYW1pbGllcykge1xuICB7XG4gICAgdmFyIGFmZmVjdGVkSW5zdGFuY2VzID0gbmV3IFNldCgpO1xuICAgIG1vdW50ZWRSb290cy5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICB2YXIgaGVscGVycyA9IGhlbHBlcnNCeVJvb3QuZ2V0KHJvb3QpO1xuXG4gICAgICBpZiAoaGVscGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgaGVscGVycyBmb3IgYSByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0IFJlZnJlc2guJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnN0YW5jZXNGb3JSb290ID0gaGVscGVycy5maW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2gocm9vdCwgZmFtaWxpZXMpO1xuICAgICAgaW5zdGFuY2VzRm9yUm9vdC5mb3JFYWNoKGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgICAgIGFmZmVjdGVkSW5zdGFuY2VzLmFkZChpbnN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBhZmZlY3RlZEluc3RhbmNlcztcbiAgfVxufVxuZnVuY3Rpb24gaW5qZWN0SW50b0dsb2JhbEhvb2soZ2xvYmFsT2JqZWN0KSB7XG4gIHtcbiAgICAvLyBGb3IgUmVhY3QgTmF0aXZlLCB0aGUgZ2xvYmFsIGhvb2sgd2lsbCBiZSBzZXQgdXAgYnkgcmVxdWlyZSgncmVhY3QtZGV2dG9vbHMtY29yZScpLlxuICAgIC8vIFRoYXQgY29kZSB3aWxsIHJ1biBiZWZvcmUgdXMuIFNvIHdlIG5lZWQgdG8gbW9ua2V5cGF0Y2ggZnVuY3Rpb25zIG9uIGV4aXN0aW5nIGhvb2suXG4gICAgLy8gRm9yIFJlYWN0IFdlYiwgdGhlIGdsb2JhbCBob29rIHdpbGwgYmUgc2V0IHVwIGJ5IHRoZSBleHRlbnNpb24uXG4gICAgLy8gVGhpcyB3aWxsIGFsc28gcnVuIGJlZm9yZSB1cy5cbiAgICB2YXIgaG9vayA9IGdsb2JhbE9iamVjdC5fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbiAgICBpZiAoaG9vayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBIb3dldmVyLCBpZiB0aGVyZSBpcyBubyBEZXZUb29scyBleHRlbnNpb24sIHdlJ2xsIG5lZWQgdG8gc2V0IHVwIHRoZSBnbG9iYWwgaG9vayBvdXJzZWx2ZXMuXG4gICAgICAvLyBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlIGl0J3MgaW1wb3J0YW50IHRoYXQgcmVuZGVyZXIgY29kZSBydW5zICphZnRlciogdGhpcyBtZXRob2QgY2FsbC5cbiAgICAgIC8vIE90aGVyd2lzZSwgdGhlI
538HJlbmRlcmVyIHdpbGwgdGhpbmsgdGhhdCB0aGVyZSBpcyBubyBnbG9iYWwgaG9vaywgYW5kIHdvbid0IGRvIHRoZSBpbmplY3Rpb24uXG4gICAgICB2YXIgbmV4dElEID0gMDtcbiAgICAgIGdsb2JhbE9iamVjdC5fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPSBob29rID0ge1xuICAgICAgICByZW5kZXJlcnM6IG5ldyBNYXAoKSxcbiAgICAgICAgc3VwcG9ydHNGaWJlcjogdHJ1ZSxcbiAgICAgICAgaW5qZWN0OiBmdW5jdGlvbiAoaW5qZWN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dElEKys7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2NoZWR1bGVGaWJlclJvb3Q6IGZ1bmN0aW9uIChpZCwgcm9vdCwgY2hpbGRyZW4pIHt9LFxuICAgICAgICBvbkNvbW1pdEZpYmVyUm9vdDogZnVuY3Rpb24gKGlkLCByb290LCBtYXliZVByaW9yaXR5TGV2ZWwsIGRpZEVycm9yKSB7fSxcbiAgICAgICAgb25Db21taXRGaWJlclVubW91bnQ6IGZ1bmN0aW9uICgpIHt9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChob29rLmlzRGlzYWJsZWQpIHtcbiAgICAgIC8vIFRoaXMgaXNuJ3QgYSByZWFsIHByb3BlcnR5IG9uIHRoZSBob29rLCBidXQgaXQgY2FuIGJlIHNldCB0byBvcHQgb3V0XG4gICAgICAvLyBvZiBEZXZUb29scyBpbnRlZ3JhdGlvbiBhbmQgYXNzb2NpYXRlZCB3YXJuaW5ncyBhbmQgbG9ncy5cbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1NvbWV0aGluZyBoYXMgc2hpbW1lZCB0aGUgUmVhY3QgRGV2VG9vbHMgZ2xvYmFsIGhvb2sgKF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXykuICcgKyAnRmFzdCBSZWZyZXNoIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhpcyBzaGltIGFuZCB3aWxsIGJlIGRpc2FibGVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSGVyZSwgd2UganVzdCB3YW50IHRvIGdldCBhIHJlZmVyZW5jZSB0byBzY2hlZHVsZVJlZnJlc2guXG5cblxuICAgIHZhciBvbGRJbmplY3QgPSBob29rLmluamVjdDtcblxuICAgIGhvb2suaW5qZWN0ID0gZnVuY3Rpb24gKGluamVjdGVkKSB7XG4gICAgICB2Y
538XIgaWQgPSBvbGRJbmplY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgICAgaWYgKHR5cGVvZiBpbmplY3RlZC5zY2hlZHVsZVJlZnJlc2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluamVjdGVkLnNldFJlZnJlc2hIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRoaXMgdmVyc2lvbiBzdXBwb3J0cyBSZWFjdCBSZWZyZXNoLlxuICAgICAgICBoZWxwZXJzQnlSZW5kZXJlcklELnNldChpZCwgaW5qZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaWQ7XG4gICAgfTsgLy8gRG8gdGhlIHNhbWUgZm9yIGFueSBhbHJlYWR5IGluamVjdGVkIHJvb3RzLlxuICAgIC8vIFRoaXMgaXMgdXNlZnVsIGlmIFJlYWN0RE9NIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNzYyNlxuXG5cbiAgICBob29rLnJlbmRlcmVycy5mb3JFYWNoKGZ1bmN0aW9uIChpbmplY3RlZCwgaWQpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5qZWN0ZWQuc2NoZWR1bGVSZWZyZXNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbmplY3RlZC5zZXRSZWZyZXNoSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUaGlzIHZlcnNpb24gc3VwcG9ydHMgUmVhY3QgUmVmcmVzaC5cbiAgICAgICAgaGVscGVyc0J5UmVuZGVyZXJJRC5zZXQoaWQsIGluamVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gV2UgYWxzbyB3YW50IHRvIHRyYWNrIGN1cnJlbnRseSBtb3VudGVkIHJvb3RzLlxuXG4gICAgdmFyIG9sZE9uQ29tbWl0RmliZXJSb290ID0gaG9vay5vbkNvbW1pdEZpYmVyUm9vdDtcblxuICAgIHZhciBvbGRPblNjaGVkdWxlRmliZXJSb290ID0gaG9vay5vblNjaGVkdWxlRmliZXJSb290IHx8IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgaG9vay5vblNjaGVkdWxlRmliZXJSb290ID0gZnVuY3Rpb24gKGlkLCByb290LCBjaGlsZHJlbikge1xuICAgICAgaWYgKCFpc1BlcmZvcm1pbmdSZWZyZXNoKSB7XG4gICAgICAgIC8vIElmIGl0IHdhcyBpbnRlbnRpb25hbGx5IHNjaGVkdWxlZCwgZG9uJ3QgYXR0ZW1wdCB0byByZXN0b3JlLlxuICAgICAgICAvLyBUaGlzIGluY2x1ZGVzIGludGVudGlvbmFsbHkgc2NoZWR1bGVkIHVubW91bnRzLlxuICAgICAgICBmYWlsZWRSb290cy5kZWxldGUocm9vdCk7XG5cbiAgICAgICAgaWYgKHJvb3RFbGVtZW50cyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJvb3RFbGVtZW50cy5zZXQocm9vdCwgY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvbGRPblNjaGVkdWxlRmliZXJSb290LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcblxuICAgIGhvb2sub25Db21taXRGaWJlclJvb3QgPSBmdW5jdGlvbiAoaWQsIHJvb3QsIG1heWJlUHJpb3JpdHlMZXZlbCwgZGlkRXJyb3IpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5UmVuZGVyZXJJRC5nZXQoaWQpO1xuXG4gICAgICBpZiAoaGVscGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhlbHBlcnNCeVJvb3Quc2V0KHJvb3QsIGhlbHBlcnMpO1xuICAgICAgICB2Y
538XIgY3VycmVudCA9IHJvb3QuY3VycmVudDtcbiAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGN1cnJlbnQuYWx0ZXJuYXRlOyAvLyBXZSBuZWVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgcm9vdCBoYXMganVzdCAodW4pbW91bnRlZC5cbiAgICAgICAgLy8gVGhpcyBsb2dpYyBpcyBjb3B5LXBhc3RlZCBmcm9tIHNpbWlsYXIgbG9naWMgaW4gdGhlIERldlRvb2xzIGJhY2tlbmQuXG4gICAgICAgIC8vIElmIHRoaXMgYnJlYWtzIHdpdGggc29tZSByZWZhY3RvcmluZywgeW91J2xsIHdhbnQgdG8gdXBkYXRlIERldlRvb2xzIHRvby5cblxuICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHdhc01vdW50ZWQgPSBhbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSAhPSBudWxsICYmIGFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmVsZW1lbnQgIT0gbnVsbCAmJiBtb3VudGVkUm9vdHMuaGFzKHJvb3QpO1xuICAgICAgICAgIHZhciBpc01vdW50ZWQgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT0gbnVsbCAmJiBjdXJyZW50Lm1lbW9pemVkU3RhdGUuZWxlbWVudCAhPSBudWxsO1xuXG4gICAgICAgICAgaWYgKCF3YXNNb3VudGVkICYmIGlzTW91bnRlZCkge1xuICAgICAgICAgICAgLy8gTW91bnQgYSBuZXcgcm9vdC5cbiAgICAgICAgICAgIG1vdW50ZWRSb290cy5hZGQocm9vdCk7XG4gICAgICAgICAgICBmYWlsZWRSb290cy5kZWxldGUocm9vdCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh3YXNNb3VudGVkICYmIGlzTW91bnRlZCkgOyBlbHNlIGlmICh3YXNNb3VudGVkICYmICFpc01vdW50ZWQpIHtcbiAgICAgICAgICAgIC8vIFVubW91bnQgYW4gZXhpc3Rpbmcgcm9vdC5cbiAgICAgICAgICAgIG1vdW50ZWRSb290cy5kZWxldGUocm9vdCk7XG5cbiAgICAgICAgICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgICAgICAgICAvLyBXZSdsbCByZW1vdW50IGl0IG9uIGZ1dHVyZSBlZGl0cy5cbiAgICAgICAgICAgICAgZmFpbGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaGVscGVyc0J5Um9vdC5kZWxldGUocm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICghd2FzTW91bnRlZCAmJiAhaXNNb3VudGVkKSB7XG4gICAgICAgICAgICBpZiAoZGlkRXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gV2UnbGwgcmVtb3VudCBpdCBvbiBmdXR1cmUgZWRpdHMuXG4gICAgICAgICAgICAgIGZhaWxlZFJvb3RzLmFkZChyb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTW91bnQgYSBuZXcgcm9vdC5cbiAgICAgICAgICBtb3VudGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgICAgICB9XG4gICAgICB9IC8vIEFsd2F5cyBjYWxsIHRoZSBkZWNvcmF0ZWQgRGV2VG9vbHMgaG9vay5cblxuXG4gICAgICByZXR1cm4gb2xkT25Db21taXRGaWJlclJvb3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBoYXNVbnJlY292ZXJhYmxlRXJyb3JzKCkge1xuICAvLyBUT0RPOiBkZWxldGUgdGhpcyBhZnRlciByZW1vdmluZyBkZXBlbmRlbmN5IGluIFJOLlxuICByZXR1cm4gZmFsc2U7XG59IC8vIEV4cG9zZWQgZm9yIHRlc3RpbmcuXG5cbmZ1bmN0aW9uIF9nZXRNb3VudGVkUm9vdENvdW50KCkge1xuICB7XG4gICAgcmV0dXJuIG1vdW50ZWRSb290cy5zaXplO1xuICB9XG59IC8vIFRoaXMgaXMgYSB3cmFwcGVyIG92ZXIgbW9yZSBwcmltaXRpdmUgZnVuY3Rpb25zIGZvciBzZXR0aW5nIHNpZ25hdHVyZS5cbi8vIFNpZ25hdHVyZXMgbGV0IHVzIGRlY2lkZSB3aGV0aGVyIHR
538oZSBIb29rIG9yZGVyIGhhcyBjaGFuZ2VkIG9uIHJlZnJlc2guXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgdHJhbnNmb3JtIHRhcmdldCwgZS5nLjpcbi8vIHZhciBfcyA9IGNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtKClcbi8vXG4vLyBmdW5jdGlvbiBIZWxsbygpIHtcbi8vICAgY29uc3QgW2Zvbywgc2V0Rm9vXSA9IHVzZVN0YXRlKDApO1xuLy8gICBjb25zdCB2YWx1ZSA9IHVzZUN1c3RvbUhvb2soKTtcbi8vICAgX3MoKTsgLyogQ2FsbCB3aXRob3V0IGFyZ3VtZW50cyB0cmlnZ2VycyBjb2xsZWN0aW5nIHRoZSBjdXN0b20gSG9vayBsaXN0LlxuLy8gICAgICAgICAgKiBUaGlzIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyB0aGUgbW9kdWxlIGV2YWx1YXRpb24gYmVjYXVzZSB3ZVxuLy8gICAgICAgICAgKiBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgbW9kdWxlIG9yZGVyIHdpdGggaW5saW5lIHJlcXVpcmVzLlxuLy8gICAgICAgICAgKiBOZXh0IGNhbGxzIGFyZSBub29wcy4gKi9cbi8vICAgcmV0dXJuIDxoMT5IaTwvaDE+O1xuLy8gfVxuLy9cbi8vIC8qIENhbGwgd2l0aCBhcmd1bWVudHMgYXR0YWNoZXMgdGhlIHNpZ25hdHVyZSB0byB0aGUgdHlwZTogKi9cbi8vIF9zKFxuLy8gICBIZWxsbyxcbi8vICAgJ3VzZVN0YXRle1tmb28sIHNldEZvb119KDApJyxcbi8vICAgKCkgPT4gW3VzZUN1c3RvbUhvb2tdLCAvKiBMYXp5IHRvIGF2b2lkIHRyaWdnZXJpbmcgaW5saW5lIHJlcXVpcmVzICovXG4vLyApO1xuXG5mdW5jdGlvbiBjcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybSgpIHtcbiAge1xuICAgIHZhciBzYXZlZFR5cGU7XG4gICAgdmFyIGhhc0N1c3RvbUhvb2tzO1xuICAgIHZhciBkaWRDb2xsZWN0SG9va3MgPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHR5cGUsIGtleSwgZm9yY2VSZXNldCwgZ2V0Q3VzdG9tSG9va3MpIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBXZSdyZSBpbiB0aGUgaW5pdGlhbCBwaGFzZSB0aGF0IGFzc29jaWF0ZXMgc2lnbmF0dXJlc1xuICAgICAgICAvLyB3aXRoIHRoZSBmdW5jdGlvbnMuIE5vdGUgdGhpcyBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIC8vIGluIEhPQyBjaGFpbnMgbGlrZSBfcyhob2MxKF9zKGhvYzIoX3MoYWN0dWFsRnVuY3Rpb24pKSkpKS5cbiAgICAgICAgaWYgKCFzY
538XZlZFR5cGUpIHtcbiAgICAgICAgICAvLyBXZSdyZSBpbiB0aGUgaW5uZXJtb3N0IGNhbGwsIHNvIHRoaXMgaXMgdGhlIGFjdHVhbCB0eXBlLlxuICAgICAgICAgIHNhdmVkVHlwZSA9IHR5cGU7XG4gICAgICAgICAgaGFzQ3VzdG9tSG9va3MgPSB0eXBlb2YgZ2V0Q3VzdG9tSG9va3MgPT09ICdmdW5jdGlvbic7XG4gICAgICAgIH0gLy8gU2V0IHRoZSBzaWduYXR1cmUgZm9yIGFsbCB0eXBlcyAoZXZlbiB3cmFwcGVycyEpIGluIGNhc2VcbiAgICAgICAgLy8gdGhleSBoYXZlIG5vIHNpZ25hdHVyZXMgb2YgdGhlaXIgb3duLiBUaGlzIGlzIHRvIHByZXZlbnRcbiAgICAgICAgLy8gcHJvYmxlbXMgbGlrZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzIwNDE3LlxuXG5cbiAgICAgICAgaWYgKHR5cGUgIT0gbnVsbCAmJiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSkge1xuICAgICAgICAgIHNldFNpZ25hdHVyZSh0eXBlLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UncmUgaW4gdGhlIF9zKCkgY2FsbCB3aXRob3V0IGFyZ3VtZW50cywgd2hpY2ggbWVhbnNcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgdGltZSB0byBjb2xsZWN0IGN1c3RvbSBIb29rIHNpZ25hdHVyZXMuXG4gICAgICAgIC8vIE9ubHkgZG8gdGhpcyBvbmNlLiBUaGlzIHBhdGggaXMgaG90IGFuZCBydW5zICppbnNpZGUqIGV2ZXJ5IHJlbmRlciFcbiAgICAgICAgaWYgKCFkaWRDb2xsZWN0SG9va3MgJiYgaGFzQ3VzdG9tSG9va3MpIHtcbiAgICAgICAgICBkaWRDb2xsZWN0SG9va3MgPSB0cnVlO1xuICAgICAgICAgIGNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZShzYXZlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gaXNMaWtlbHlDb21wb25lbnRUeXBlKHR5cGUpIHtcbiAge1xuICAgIHN3aXRjaCAodHlwZW9mIHR5cGUpIHtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIEZpcnN0LCBkZWFsIHdpdGggY2xhc3Nlcy5cbiAgICAgICAgICBpZiAodHlwZS5wcm90b3R5cGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgLy8gUmVhY3QgY2xhc3MuXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2Y
538XIgb3duTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0eXBlLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgIGlmIChvd25OYW1lcy5sZW5ndGggPiAxIHx8IG93bk5hbWVzWzBdICE9PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIGNsYXNzLlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuXG5cbiAgICAgICAgICAgIGlmICh0eXBlLnByb3RvdHlwZS5fX3Byb3RvX18gIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgICAgLy8gSXQgaGFzIGEgc3VwZXJjbGFzcy5cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSAvLyBQYXNzIHRocm91Z2guXG4gICAgICAgICAgICAvLyBUaGlzIGxvb2tzIGxpa2UgYSByZWd1bGFyIGZ1bmN0aW9uIHdpdGggZW1wdHkgcHJvdG90eXBlLlxuXG4gICAgICAgICAgfSAvLyBGb3IgcGxhaW4gZnVuY3Rpb25zIGFuZCBhcnJvd3MsIHVzZSBuYW1lIGFzIGEgaGV1cmlzdGljLlxuXG5cbiAgICAgICAgICB2YXIgbmFtZSA9IHR5cGUubmFtZSB8fCB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgL15bQS1aXS8udGVzdChuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoIChnZXRQcm9wZXJ0eSh0eXBlLCAnJCR0eXBlb2YnKSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgIC8vIERlZmluaXRlbHkgUmVhY3QgY29tcG9uZW50cy5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnRzLl9nZXRNb3VudGVkUm9vdENvdW50ID0gX2dldE1vdW50ZWRSb290Q291bnQ7XG5leHBvcnRzLmNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZSA9IGNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZTtcbmV4cG9ydHMuY3JlYXRlU2lnbmF0dXJlRnVuY3Rpb25Gb3JUcmFuc2Zvcm0gPSBjcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybTtcbmV4cG9ydHMuZmluZEFmZmVjdGVkSG9zdEluc3RhbmNlcyA9IGZpbmRBZmZlY3RlZEhvc3RJbnN0YW5jZXM7XG5leHBvcnRzLmdldEZhbWlseUJ5SUQgPSBnZXRGYW1pbHlCeUlEO1xuZXhwb3J0cy5nZXRGYW1pbHlCeVR5cGUgPSBnZXRGYW1pbHlCeVR5cGU7XG5leHBvcnRzLmhhc1VucmVjb3ZlcmFibGVFcnJvcnMgPSBoYXNVbnJlY292ZXJhYmxlRXJyb3JzO1xuZXhwb3J0cy5pbmplY3RJbnRvR2xvYmFsSG9vayA9IGluamVjdEludG9HbG9iYWxIb29rO1xuZXhwb3J0cy5pc0xpa2VseUNvbXBvbmVudFR5cGUgPSBpc0xpa2VseUNvbXBvbmVudFR5cGU7XG5leHBvcnRzLnBlcmZvcm1SZWFjdFJlZnJlc2ggPSBwZXJmb3JtUmVhY3RSZWZyZXNoO1xuZXhwb3J0cy5yZWdpc3RlciA9IHJlZ2lzdGVyO1xuZXhwb3J0cy5zZXRTaWduYXR1cmUgPSBzZXRTaWduYXR1cmU7XG4gIH0pKCk7XG59XG5cbmZ1bmN0aW9uIGRlYm91bmNlKGZuLCBkZWxheSkge1xuICBsZXQgaGFuZGxlXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KGhhbmRsZSlcbiAgICBoYW5kbGUgPSBzZXRUaW1lb3V0KGZuLCBkZWxheSlcbiAgfVxufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuY29uc3QgaG9va3MgPSBbXVxud2luZG93Ll9fcmVnaXN0ZXJCZWZvcmVQZXJmb3JtUmVhY3RSZWZyZXNoID0gKGNiKSA9PiB7XG4gIGhvb2tzLnB1c2goY2IpXG59XG5jb25zdCBlbnF1ZXVlVXBkYXRlID0gZGVib3VuY2UoYXN5bmMgKCkgPT4ge1xuICBpZiAoaG9va3MubGVuZ3RoKSBhd2FpdCBQcm9taXNlLmFsbChob29rcy5tYXAoKGNiKSA9PiBjYigpKSlcbiAgZXhwb3J0cy5wZXJmb3JtUmVhY3RSZWZyZXNoKClcbn0sIDE2KVxuXG4vLyBUYWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9wbW1td2gvcmVhY3QtcmVmcmVzaC13ZWJwYWNrLXBsdWdpbi9ibG9iL21haW4vbGliL3J1bnRpbWUvUmVmcmVzaFV0aWxzLmpzI0wxNDFcbi8vIFRoaXMgYWxsb3dzIHRvIHJlc2lzdGVyIGNvbXBvbmVudHMgbm90IGRldGVjdGVkIGJ5IFNXQyBsaWtlIHN0eWxlZCBjb21wb25lbnRcbmZ1bmN0aW9uIHJlZ2lzdGVyRXhwb3J0c0ZvclJlYWN0UmVmcmVzaChmaWxlbmFtZSwgbW9kdWxlRXhwb3J0cykge1xuICBmb3IgKGNvbnN0IGtleSBpbiBtb2R1bGVFeHBvcnRzKSB7XG4gICAgaWYgKGtleSA9PT0gJ19fZXNNb2R1bGUnKSBjb250aW51ZVxuICAgIGNvbnN0IGV4cG9ydFZhbHVlID0gbW9kdWxlRXhwb3J0c1trZXldXG4gICAgaWYgKGV4cG9ydHMuaXNMaWtlbHlDb21wb25lbnRUeXBlKGV4cG9ydFZhbHVlKSkge1xuICAgICAgLy8gJ2V4cG9ydCcgaXMgcmVxdWlyZWQgdG8gYXZvaWQga2V5IGNvbGxpc2lvbiB3aGVuIHJlbmFtZWQgZXhwb3J0cyB0aGF0XG4gICAgICAvLyBzaGFkb3cgYSBsb2NhbCBjb21wb25lbnQgbmFtZTogaHR0cHM6Ly9naXRodWIuY29tL3ZpdGVqcy92aXRlLXBsdWdpbi1yZWFjdC9pc3N1ZXMvMTE2XG4gICAgICAvLyBUaGUgcmVnaXN0ZXIgZnVuY3Rpb24gaGFzIGFuIGlkZW50aXR5IGNoZWNrIHRvIG5vdCByZWdpc3RlciB0d2ljZSB0aGUgc2FtZSBjb21wb25lbnQsXG4gICAgICAvLyBzbyB0aGlzIGlzIHNhZmUgdG8gbm90IHVzZWQgdGhlIHNhbWUga2V5IGhlcmUuXG4gICAgICBleHBvcnRzLnJlZ2lzdGVyKGV4cG9ydFZhbHVlLCBmaWxlbmFtZSArICcgZXhwb3J0ICcgKyBrZXkpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmVmcmVzaEJvdW5kYXJ5QW5kRW5xdWV1ZVVwZGF0ZShpZCwgcHJldkV4cG9ydHMsIG5leHRFeHBvcnRzKSB7XG4gIGNvbnN0IGlnbm9yZWRFeHBvcnRzID0gd2luZG93Ll9fZ2V0UmVhY3RSZWZyZXNoSWdub3JlZEV4cG9ydHM/Lih7IGlkIH0pID8/IFtdXG4gIGlmIChcbiAgICBwcmVkaWNhdGVPbkV4cG9ydChcbiAgICAgIGlnbm9yZWRFeHBvcnRzLFxuICAgICAgcHJldkV4cG9ydHMsXG4gICAgICAoa2V5KSA9PiBrZXkgaW4gbmV4dEV4cG9ydHMsXG4gICAgKSAhPT0gdHJ1ZVxuICApIHtcbiAgICByZXR1cm4gJ0NvdWxkIG5vdCBGYXN0IFJlZnJlc2ggKGV4cG9ydCByZW1vdmVkKSdcbiAgfVxuICBpZiAoXG4gICAgcHJlZGljYXRlT25FeHBvcnQoXG4gICAgICBpZ25vcmVkRXhwb3J0cyxcbiAgICAgIG5leHRFeHBvcnRzLFxuICAgICAgKGtleSkgPT4ga2V5IGluIHByZXZFeHBvcnRzLFxuICAgICkgIT09IHRydWVcbiAgKSB7XG4gICAgcmV0dXJuICdDb3VsZCBub3QgRmFzdCBSZWZyZXNoIChuZXcgZXhwb3J0KSdcbiAgfVxuXG4gIGxldCBoYXNFeHBvcnRzID0gZmFsc2VcbiAgY29uc3QgYWxsRXhwb3J0c0FyZUNvbXBvbmVudHNPclVuY2hhbmdlZCA9IHByZWRpY2F0ZU9uRXhwb3J0KFxuICAgIGlnbm9yZWRFeHBvcnRzLFxuICAgIG5leHRFeHBvcnRzLFxuICAgIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBoYXNFeHBvcnRzID0gdHJ1ZVxuICAgICAgaWYgKGV4cG9ydHMuaXNMaWtlbHlDb21wb25lbnRUeXBlKHZhbHVlKSkgcmV0dXJuIHRydWVcbiAgICAgIHJldHVybi
538BwcmV2RXhwb3J0c1trZXldID09PSBuZXh0RXhwb3J0c1trZXldXG4gICAgfSxcbiAgKVxuICBpZiAoaGFzRXhwb3J0cyAmJiBhbGxFeHBvcnRzQXJlQ29tcG9uZW50c09yVW5jaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgZW5xdWV1ZVVwZGF0ZSgpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGBDb3VsZCBub3QgRmFzdCBSZWZyZXNoIChcIiR7YWxsRXhwb3J0c0FyZUNvbXBvbmVudHNPclVuY2hhbmdlZH1cIiBleHBvcnQgaXMgaW5jb21wYXRpYmxlKS4gTGVhcm4gbW9yZSBhdCBodHRwczovL2dpdGh1Yi5jb20vdml0ZWpzL3ZpdGUtcGx1Z2luLXJlYWN0L3RyZWUvbWFpbi9wYWNrYWdlcy9wbHVnaW4tcmVhY3QjY29uc2lzdGVudC1jb21wb25lbnRzLWV4cG9ydHNgXG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlZGljYXRlT25FeHBvcnQoaWdub3JlZEV4cG9ydHMsIG1vZHVsZUV4cG9ydHMsIHByZWRpY2F0ZSkge1xuICBmb3IgKGNvbnN0IGtleSBpbiBtb2R1bGVFeHBvcnRzKSB7XG4gICAgaWYgKGtleSA9PT0gJ19fZXNNb2R1bGUnKSBjb250aW51ZVxuICAgIGlmIChpZ25vcmVkRXhwb3J0cy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZVxuICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG1vZHVsZUV4cG9ydHMsIGtleSlcbiAgICBpZiAoZGVzYyAmJiBkZXNjLmdldCkgcmV0dXJuIGtleVxuICAgIGlmICghcHJlZGljYXRlKGtleSwgbW9kdWxlRXhwb3J0c1trZXldKSkgcmV0dXJuIGtleVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8vIEhpZGVzIHZpdGUtaWdub3JlZCBkeW5hbWljIGltcG9ydCBzbyB0aGF0IFZpdGUgY2FuIHNraXAgYW5hbHlzaXMgaWYgbm8gb3RoZXJcbi8vIGR5bmFtaWMgaW1wb3J0IGlzIHByZXNlbnQgKGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS9wdWxsLzEyNzMyKVxuZnVuY3Rpb24gX19obXJfaW1wb3J0KG1vZHVsZSkge1xuICByZXR1cm4gaW1wb3J0KC8qIEB2aXRlLWlnbm9yZSAqLyBtb2R1bGUpXG59XG5cbmV4cG9ydHMuX19obXJfaW1wb3J0ID0gX19obXJfaW1wb3J0XG5leHBvcnRzLnJlZ2lzdGVyRXhwb3J0c0ZvclJlYWN0UmVmcmVzaCA9IHJlZ2lzdGVyRXhwb3J0c0ZvclJlYWN0UmVmcmVzaFxuZXhwb3J0cy52YWxpZGF0ZVJlZnJlc2hCb3VuZGFyeUFuZEVucXVldWVVcGRhdGUgPVxuICB2YWxpZGF0ZVJlZnJlc2hCb3VuZGFyeUFuZEVucXVldWVVcGRhdGVcblxuZXhwb3J0IGRlZmF1bHQgZXhwb3J0c1xuIl0sIm1hcHBpbmdzIjoiQUFDQSxNQUFNLFVBQVUsQ0FBQztBQUNqQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQTtBQUVBLElBQUksTUFBdUM7QUFDekMsR0FBQyxXQUFXO0FBQ2Q7QUFHQSxRQUFJLHlCQUF5QixPQUFPLElBQUksbUJBQW1CO0FBQzNELFFBQUksa0JBQWtCLE9BQU8sSUFBSSxZQUFZO0FBRTdDLFFBQUksa0JBQWtCLE9BQU8sWUFBWSxhQUFhLFVBQVU7QUFHaEUsUUFBSSxrQkFBa0Isb0JBQUksSUFBSTtBQUM5QixRQUFJLG9CQUFvQixJQUFJLGdCQUFnQjtBQUM1QyxRQUFJLHNCQUFzQixJQUFJLGdCQUFnQjtBQUk5QyxRQUFJLHdCQUF3QixJQUFJLGdCQUFnQjtBQUdoRCxRQUFJLGlCQUFpQixDQUFDO0FBRXRCLFFBQUksc0JBQXNCLG9CQUFJLElBQUk7QUFDbEMsUUFBSSxnQkFBZ0Isb0JBQUksSUFBSTtBQUU1QixRQUFJLGVBQWUsb0JBQUksSUFBSTtBQUUzQixRQUFJLGNBQWMsb0JBQUksSUFBSTtBQUsxQixRQUFJO0FBQUE7QUFBQSxNQUNKLE9BQU8sWUFBWSxhQUFhLG9CQUFJLFFBQVEsSUFBSTtBQUFBO0FBQ2hELFFBQUk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
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.