\", fn.displayName);\n }\n if (true) {\n if (typeof fn === \"function\") {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n return _frame;\n }\n }while (s >= 1 && c >= 0);\n }\n break;\n }\n }\n }\n } finally{\n reentry = false;\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n var name = fn ? fn.displayName || fn.name : \"\";\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : \"\";\n {\n if (typeof fn === \"function\") {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n return syntheticFrame;\n }\n function describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n }\n function shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n }\n function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n if (type == null) {\n return \"\";\n }\n if (typeof type === \"function\") {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n if (typeof type === \"string\") {\n return describeBuiltInComponentFrame(type);\n }\n switch(type){\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame(\"Suspense\");\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n }\n if (typeof type === \"object\") {\n switch(type.$$typeof){\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n return \"\";\n }\n // $FlowFixMe[method-unbinding]\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var loggedTypeFailures = {};\n var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n function setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n }\n function checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe[incompatible-use] This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n for(var typeSpecName in typeSpecs){\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== \"function\") {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || \"React class\") + \": \" + location + \" type `\" + typeSpecName + \"` is invalid; \" + \"it must be a function, usually from the `prop-types` package, but received `\" + typeof typeSpecs[typeSpecName] + \"`.\" + \"This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.\");\n err.name = \"Invariant Violation\";\n throw err;\n }\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, \"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\");\n } catch (ex) {\n error$1 = ex;\n }\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement$1(element);\n error(\"%s: type specification of %s\" + \" `%s` is invalid; the type checker \" + \"function must return `null` or an `Error` but returned a %s. \" + \"You may have forgotten to pass an argument to the type checker \" + \"creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and \" + \"shape all require an argument).\", componentName || \"React class\", location, typeSpecName, typeof error$1);\n setCurrentlyValidatingElement$1(null);\n }\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement$1(element);\n error(\"Failed %s type: %s\", location, error$1.message);\n setCurrentlyValidatingElement$1(null);\n }\n }\n }\n }\n }\n var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n function isArray(a) {\n return isArrayImpl(a);\n }\n /*\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */ // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n function typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === \"function\" && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || \"Object\"; // $FlowFixMe[incompatible-return]\n return type;\n }\n } // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n function willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n }\n function testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error(\"The provided key is an unsupported type %s.\" + \" This value must be coerced to a string before using it here.\", typeName(value));\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n }\n var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\n var RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n };\n var specialPropKeyWarningShown;\n var specialPropRefWarningShown;\n var didWarnAboutStringRefs;\n {\n didWarnAboutStringRefs = {};\n }\n function hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, \"ref\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"ref\").get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.ref !== undefined;\n }\n function hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n return config.key !== undefined;\n }\n function warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === \"string\" && ReactCurrentOwner$1.current && self && ReactCurrentOwner$1.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + \"Support for string refs will be removed in a future major release. \" + \"This case cannot be automatically converted to an arrow function. \" + \"We ask you to manually fix this case by using useRef() or createRef() instead. \" + \"Learn more about using refs safely here: \" + \"https://reactjs.org/link/strict-mode-string-ref\", getComponentNameFromType(ReactCurrentOwner$1.current.type), config.ref);\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n }\n function defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function() {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n error(\"%s: `key` is not a prop. Trying to access it will result \" + \"in `undefined` being returned. If you need to access the same \" + \"value within the child component, you should pass it as a different \" + \"prop. (https://reactjs.org/link/special-props)\", displayName);\n }\n };\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n }\n function defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function() {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n error(\"%s: `ref` is not a prop. Trying to access it will result \" + \"in `undefined` being returned. If you need to access the same \" + \"value within the child component, you should pass it as a different \" + \"prop. (https://reactjs.org/link/special-props)\", displayName);\n }\n };\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, \"ref\", {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n }\n /**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */ function ReactElement(type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n Object.defineProperty(element._store, \"validated\", {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n Object.defineProperty(element, \"_self\", {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n Object.defineProperty(element, \"_source\", {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n return element;\n }\n /**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */ function jsxDEV$1(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. \n // or ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // , because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n key = \"\" + maybeKey;\n }\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n key = \"\" + config.key;\n }\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n for(propName in config){\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n for(propName in defaultProps){\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n if (key || ref) {\n var displayName = typeof type === \"function\" ? type.displayName || type.name || \"Unknown\" : type;\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner$1.current, props);\n }\n }\n var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\n function setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n }\n var propTypesMisspellWarningShown;\n {\n propTypesMisspellWarningShown = false;\n }\n /**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */ function isValidElement(object) {\n {\n return typeof object === \"object\" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n }\n function getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner.current) {\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n if (name) {\n return \"\\n\\nCheck the render method of `\" + name + \"`.\";\n }\n }\n return \"\";\n }\n }\n function getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, \"\");\n var lineNumber = source.lineNumber;\n return \"\\n\\nCheck your code at \" + fileName + \":\" + lineNumber + \".\";\n }\n return \"\";\n }\n }\n /**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */ var ownerHasKeyUseWarning = {};\n function getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n if (!info) {\n var parentName = getComponentNameFromType(parentType);\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n return info;\n }\n }\n /**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */ function validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n var childOwner = \"\";\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n setCurrentlyValidatingElement(element);\n error('Each child in a list should have a unique \"key\" prop.' + \"%s%s See https://reactjs.org/link/warning-keys for more information.\", currentComponentErrorInfo, childOwner);\n setCurrentlyValidatingElement(null);\n }\n }\n /**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */ function validateChildKeys(node, parentType) {\n {\n if (typeof node !== \"object\" || !node) {\n return;\n }\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ;\n else if (isArray(node)) {\n for(var i = 0; i < node.length; i++){\n var child = node[i];\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else {\n var iteratorFn = getIteratorFn(node);\n if (typeof iteratorFn === \"function\") {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n while(!(step = iterator.next()).done){\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n }\n /**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */ function validatePropTypes(element) {\n {\n var type = element.type;\n if (type === null || type === undefined || typeof type === \"string\") {\n return;\n }\n if (type.$$typeof === REACT_CLIENT_REFERENCE) {\n return;\n }\n var propTypes;\n if (typeof type === \"function\") {\n propTypes = type.propTypes;\n } else if (typeof type === \"object\" && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, \"prop\", name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n var _name = getComponentNameFromType(type);\n error(\"Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?\", _name || \"Unknown\");\n }\n if (typeof type.getDefaultProps === \"function\" && !type.getDefaultProps.isReactClassApproved) {\n error(\"getDefaultProps is only used on classic React.createClass \" + \"definitions. Use a static property named `defaultProps` instead.\");\n }\n }\n }\n /**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */ function validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n for(var i = 0; i < keys.length; i++){\n var key = keys[i];\n if (key !== \"children\" && key !== \"key\") {\n setCurrentlyValidatingElement(fragment);\n error(\"Invalid prop `%s` supplied to `React.Fragment`. \" + \"React.Fragment can only have `key` and `children` props.\", key);\n setCurrentlyValidatingElement(null);\n break;\n }\n }\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement(fragment);\n error(\"Invalid attribute `ref` supplied to `React.Fragment`.\");\n setCurrentlyValidatingElement(null);\n }\n }\n }\n var didWarnAboutKeySpread = {};\n function jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n if (!validType) {\n var info = \"\";\n if (type === undefined || typeof type === \"object\" && type !== null && Object.keys(type).length === 0) {\n info += \" You likely forgot to export your component from the file \" + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n var sourceInfo = getSourceInfoErrorAddendum(source);\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n var typeString;\n if (type === null) {\n typeString = \"null\";\n } else if (isArray(type)) {\n typeString = \"array\";\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || \"Unknown\") + \" />\";\n info = \" Did you accidentally export a JSX literal instead of a component?\";\n } else {\n typeString = typeof type;\n }\n error(\"React.jsx: type is invalid -- expected a string (for \" + \"built-in components) or a class/function (for composite \" + \"components) but got: %s.%s\", typeString, info);\n }\n var element = jsxDEV$1(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n if (validType) {\n var children = props.children;\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for(var i = 0; i < children.length; i++){\n validateChildKeys(children[i], type);\n }\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error(\"React.jsx: Static children should always be an array. \" + \"You are likely explicitly calling React.jsxs or React.jsxDEV. \" + \"Use the Babel transform instead.\");\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n if (hasOwnProperty.call(props, \"key\")) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(props).filter(function(k) {\n return k !== \"key\";\n });\n var beforeExample = keys.length > 0 ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\" : \"{key: someKey}\";\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\";\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + \" let props = %s;\\n\" + \" <%s {...props} />\\n\" + \"React keys must be passed directly to JSX without using spread:\\n\" + \" let props = %s;\\n\" + \" <%s key={someKey} {...props} />\", beforeExample, componentName, afterExample, componentName);\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n return element;\n }\n } // These two functions exist to still get child warnings in dev\n var jsxDEV = jsxWithValidation;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsxDEV = jsxDEV;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Q0FRQyxHQUVEO0FBRUEsSUFBSUEsSUFBcUMsRUFBRTtJQUN4QztRQUNIO1FBRUEsSUFBSUMsUUFBUUMsbUJBQU9BLENBQUMsc0dBQTBCO1FBRTlDLFlBQVk7UUFDWix3Q0FBd0M7UUFDeEMsa0ZBQWtGO1FBQ2xGLHNEQUFzRDtRQUN0RCxJQUFJQyxxQkFBcUJDLE9BQU9DLEdBQUcsQ0FBQztRQUNwQyxJQUFJQyxvQkFBb0JGLE9BQU9DLEdBQUcsQ0FBQztRQUNuQyxJQUFJRSxzQkFBc0JILE9BQU9DLEdBQUcsQ0FBQztRQUNyQyxJQUFJRyx5QkFBeUJKLE9BQU9DLEdBQUcsQ0FBQztRQUN4QyxJQUFJSSxzQkFBc0JMLE9BQU9DLEdBQUcsQ0FBQztRQUNyQyxJQUFJSyxzQkFBc0JOLE9BQU9DLEdBQUcsQ0FBQztRQUNyQyxJQUFJTSxxQkFBcUJQLE9BQU9DLEdBQUcsQ0FBQztRQUNwQyxJQUFJTyx5QkFBeUJSLE9BQU9DLEdBQUcsQ0FBQztRQUN4QyxJQUFJUSxzQkFBc0JULE9BQU9DLEdBQUcsQ0FBQztRQUNyQyxJQUFJUywyQkFBMkJWLE9BQU9DLEdBQUcsQ0FBQztRQUMxQyxJQUFJVSxrQkFBa0JYLE9BQU9DLEdBQUcsQ0FBQztRQUNqQyxJQUFJVyxrQkFBa0JaLE9BQU9DLEdBQUcsQ0FBQztRQUNqQyxJQUFJWSx1QkFBdUJiLE9BQU9DLEdBQUcsQ0FBQztRQUN0QyxJQUFJYSxtQkFBbUJkLE9BQU9DLEdBQUcsQ0FBQztRQUNsQyxJQUFJYyx3QkFBd0JmLE9BQU9nQixRQUFRO1FBQzNDLElBQUlDLHVCQUF1QjtRQUMzQixTQUFTQyxjQUFjQyxhQUFhO1lBQ2xDLElBQUlBLGtCQUFrQixRQUFRLE9BQU9BLGtCQUFrQixVQUFVO2dCQUMv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LE9BQU8sUUFBUTtvQkFDckMsSUFBSXVFLGdCQUFnQnZHLHlCQUF5QmI7b0JBQzdDLElBQUlzTSxPQUFPM0ssT0FBTzJLLElBQUksQ0FBQ3pKLE9BQU9pSyxNQUFNLENBQUMsU0FBVUMsQ0FBQzt3QkFDOUMsT0FBT0EsTUFBTTtvQkFDZjtvQkFDQSxJQUFJQyxnQkFBZ0JWLEtBQUtqTyxNQUFNLEdBQUcsSUFBSSxvQkFBb0JpTyxLQUFLVyxJQUFJLENBQUMsYUFBYSxXQUFXO29CQUU1RixJQUFJLENBQUNWLHFCQUFxQixDQUFDbkYsZ0JBQWdCNEYsY0FBYyxFQUFFO3dCQUN6RCxJQUFJRSxlQUFlWixLQUFLak8sTUFBTSxHQUFHLElBQUksTUFBTWlPLEtBQUtXLElBQUksQ0FBQyxhQUFhLFdBQVc7d0JBRTdFaFAsTUFBTSx1RUFBdUUsd0JBQXdCLDBCQUEwQixzRUFBc0Usd0JBQXdCLHFDQUFxQytPLGVBQWU1RixlQUFlOEYsY0FBYzlGO3dCQUU5U21GLHFCQUFxQixDQUFDbkYsZ0JBQWdCNEYsY0FBYyxHQUFHO29CQUN6RDtnQkFDRjtnQkFFQSxJQUFJaE4sU0FBU25ELHFCQUFxQjtvQkFDaEN1UCxzQkFBc0J6RjtnQkFDeEIsT0FBTztvQkFDTG1GLGtCQUFrQm5GO2dCQUNwQjtnQkFFQSxPQUFPQTtZQUNUO1FBQ0YsRUFBRSwrREFBK0Q7UUFFakUsSUFBSXdHLFNBQVNYO1FBRWJZLGdCQUFnQixHQUFHdlE7UUFDbkJ1USxjQUFjLEdBQUdEO0lBQ2Y7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2Nqcy9yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanM/ZmU2MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3RcIik7XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpO1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJyk7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJyk7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubGF6eScpO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG52YXIgUkVBQ1RfQ0FDSEVfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNhY2hlJyk7XG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IFJlYWN0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuXG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuXG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIFN0cmluZyhpdGVtKTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG52YXIgZW5hYmxlQ2FjaGVFbGVtZW50ID0gZmFsc2U7XG52YXIgZW5hYmxlVHJhbnNpdGlvblRyYWNpbmcgPSBmYWxzZTsgLy8gTm8ga25vd24gYnVncywgYnV0IG5lZWRzIHBlcmZvcm1hbmNlIHRlc3RpbmdcblxudmFyIGVuYWJsZUxlZ2FjeUhpZGRlbiA9IGZhbHNlOyAvLyBFbmFibGVzIHVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrIGZlYXR1cmUgaW4gRmliZXJcbi8vIHN0dWZmLiBJbnRlbmRlZCB0byBlbmFibGUgUmVhY3QgY29yZSBtZW1iZXJzIHRvIG1vcmUgZWFzaWx5IGRlYnVnIHNjaGVkdWxpbmdcbi8vIGlzc3VlcyBpbiBERVYgYnVpbGRzLlxuXG52YXIgZW5hYmxlRGVidWdUcmFjaW5nID0gZmFsc2U7XG5cbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDIgPSBTeW1ib2wuZm9yKCdyZWFjdC5jbGllbnQucmVmZXJlbmNlJyk7XG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgZW5hYmxlRGVidWdUcmFjaW5nICB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IGVuYWJsZUxlZ2FjeUhpZGRlbiAgfHwgdHlwZSA9PT0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgfHwgZW5hYmxlU2NvcGVBUEkgIHx8IGVuYWJsZUNhY2hlRWxlbWVudCAgfHwgZW5hYmxlVHJhbnNpdGlvblRyYWNpbmcgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIFRoaXMgbmVlZHMgdG8gaW5jbHVkZSBhbGwgcG9zc2libGUgbW9kdWxlIHJlZmVyZW5jZSBvYmplY3RcbiAgICAvLyB0eXBlcyBzdXBwb3J0ZWQgYnkgYW55IEZsaWdodCBjb25maWd1cmF0aW9uIGFueXdoZXJlIHNpbmNlXG4gICAgLy8gd2UgZG9uJ3Qga25vdyB3aGljaCBGbGlnaHQgYnVpbGQgdGhpcyB3aWxsIGVuZCB1cCBiZWluZyB1c2VkXG4gICAgLy8gd2l0aC5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDIgfHwgdHlwZS5nZXRNb2R1bGVJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZGlzcGxheU5hbWUgPSBvdXRlclR5cGUuZGlzcGxheU5hbWU7XG5cbiAgaWYgKGRpc3BsYXlOYW1lKSB7XG4gICAgcmV0dXJuIGRpc3BsYXlOYW1lO1xuICB9XG5cbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZTtcbn0gLy8gS2VlcCBpbiBzeW5jIHdpdGggcmVhY3QtcmVjb25jaWxlci9nZXRDb21wb25lbnROYW1lRnJvbUZpYmVyXG5cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59XG5cbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDEgPSBTeW1ib2wuZm9yKCdyZWFjdC5jbGllbnQucmVmZXJlbmNlJyk7IC8vIE5vdGUgdGhhdCB0aGUgcmVjb25jaWxlciBwYWNrYWdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIHRvIHVzZSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKCkgaW5zdGVhZC5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSkge1xuICAgICAgLy8gVE9ETzogQ3JlYXRlIGEgY29udmVudGlvbiBmb3IgbmFtaW5nIGNsaWVudCByZWZlcmVuY2VzIHdpdGggZGVidWcgaW5mby5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICAgIGNhc2UgUkVBQ1RfQ0FDSEVfVFlQRTpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICdDYWNoZSc7XG4gICAgICB9XG5cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHZhciBvdXRlck5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKG91dGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBvdXRlck5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ01lbW8nO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgZGlzYWJsZWREZXB0aCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBkaXNhYmxlZERlcHRoLS07XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgICB9KSxcbiAgICAgICAgd2FybjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG4vKipcbiAqIExldmVyYWdlcyBuYXRpdmUgYnJvd3Nlci9WTSBzdGFjayBmcmFtZXMgdG8gZ2V0IHByb3BlciBkZXRhaWxzIChlLmcuXG4gKiBmaWxlbmFtZSwgbGluZSArIGNvbCBudW1iZXIpIGZvciBhIHNpbmdsZSBjb21wb25lbnQgaW4gYSBjb21wb25lbnQgc3RhY2suIFdlXG4gKiBkbyB0aGlzIGJ5OlxuICogICAoMSkgdGhyb3dpbmcgYW5kIGNhdGNoaW5nIGFuIGVycm9yIGluIHRoZSBmdW5jdGlvbiAtIHRoaXMgd2lsbCBiZSBvdXJcbiAqICAgICAgIGNvbnRyb2wgZXJyb3IuXG4gKiAgICgyKSBjYWxsaW5nIHRoZSBjb21wb25lbnQgd2hpY2ggd2lsbCBldmVudHVhbGx5IHRocm93IGFuIGVycm9yIHRoYXQgd2UnbGxcbiAqICAgICAgIGNhdGNoIC0gdGhpcyB3aWxsIGJlIG91ciBzYW1wbGUgZXJyb3IuXG4gKiAgICgzKSBkaWZmaW5nIHRoZSBjb250cm9sIGFuZCBzYW1wbGUgZXJyb3Igc3RhY2tzIHRvIGZpbmQgdGhlIHN0YWNrIGZyYW1lXG4gKiAgICAgICB3aGljaCByZXByZXNlbnRzIG91ciBjb21wb25lbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICghZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG4gIC8qKlxuICAgKiBGaW5kaW5nIGEgY29tbW9uIHN0YWNrIGZyYW1lIGJldHdlZW4gc2FtcGxlIGFuZCBjb250cm9sIGVycm9ycyBjYW4gYmVcbiAgICogdHJpY2t5IGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMgYW5kIGxldmVscyBvZiBzdGFjayB0cmFjZSB0cnVuY2F0aW9uIGZyb21cbiAgICogZGlmZmVyZW50IEpTIFZNcy4gU28gaW5zdGVhZCB3ZSdsbCBhdHRlbXB0IHRvIGNvbnRyb2wgd2hhdCB0aGF0IGNvbW1vblxuICAgKiBmcmFtZSBzaG91bGQgYmUgdGhyb3VnaCB0aGlzIG9iamVjdCBtZXRob2Q6XG4gICAqIEhhdmluZyBib3RoIHRoZSBzYW1wbGUgYW5kIGNvbnRyb2wgZXJyb3JzIGJlIGluIHRoZSBmdW5jdGlvbiB1bmRlciB0aGVcbiAgICogYERlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWVSb290YCBwcm9wZXJ0eSwgKyBzZXR0aW5nIHRoZSBgbmFtZWAgYW5kXG4gICAqIGBkaXNwbGF5TmFtZWAgcHJvcGVydGllcyBvZiB0aGUgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGEgc3RhY2tcbiAgICogZnJhbWUgZXhpc3RzIHRoYXQgaGFzIHRoZSBtZXRob2QgbmFtZSBgRGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZVJvb3RgIGluXG4gICAqIGl0IGZvciBib3RoIGNvbnRyb2wgYW5kIHNhbXBsZSBzdGFja3MuXG4gICAqL1xuXG5cbiAgdmFyIFJ1bkluUm9vdEZyYW1lID0ge1xuICAgIERldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdDogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNvbnRyb2w7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgICAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgIH07IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cblxuICAgICAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICAgIH0gLy8gVE9ETyhsdW5hKTogVGhpcyB3aWxsIGN1cnJlbnRseSBvbmx5IHRocm93IGlmIHRoZSBmdW5jdGlvbiBjb21wb25lbnRcbiAgICAgICAgICAvLyB0cmllcyB0byBhY2Nlc3MgUmVhY3QvUmVhY3RET00vcHJvcHMuIFdlIHNob3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgdGhyb3dcbiAgICAgICAgICAvLyBpbiBzaW1wbGUgY29tcG9uZW50cyB0b29cblxuXG4gICAgICAgICAgdmFyIG1heWJlUHJvbWlzZSA9IGZuKCk7IC8vIElmIHRoZSBmdW5jdGlvbiBjb21wb25lbnQgcmV0dXJucyBhIHByb21pc2UsIGl0J3MgbGlrZWx5IGFuIGFzeW5jXG4gICAgICAgICAgLy8gY29tcG9uZW50LCB3aGljaCB3ZSBkb24ndCB5ZXQgc3VwcG9ydC4gQXR0YWNoIGEgbm9vcCBjYXRjaCBoYW5kbGVyIHRvXG4gICAgICAgICAgLy8gc2lsZW5jZSB0aGUgZXJyb3IuXG4gICAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IGNvbXBvbmVudCBzdGFja3MgZm9yIGFzeW5jIGNsaWVudCBjb21wb25lbnRzP1xuXG4gICAgICAgICAgaWYgKG1heWJlUHJvbWlzZSAmJiB0eXBlb2YgbWF5YmVQcm9taXNlLmNhdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBtYXliZVByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBbc2FtcGxlLnN0YWNrLCBjb250cm9sLnN0YWNrXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gW251bGwsIG51bGxdO1xuICAgIH1cbiAgfTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cbiAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LmRpc3BsYXlOYW1lID0gJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCc7XG4gIHZhciBuYW1lUHJvcERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwgJ25hbWUnKTsgLy8gQmVmb3JlIEVTNiwgdGhlIGBuYW1lYCBwcm9wZXJ0eSB3YXMgbm90IGNvbmZpZ3VyYWJsZS5cblxuICBpZiAobmFtZVByb3BEZXNjcmlwdG9yICYmIG5hbWVQcm9wRGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAvLyBWOCB1dGlsaXplcyBhIGZ1bmN0aW9uJ3MgYG5hbWVgIHByb3BlcnR5IHdoZW4gZ2VuZXJhdGluZyBhIHN0YWNrIHRyYWNlLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsIC8vIENvbmZpZ3VyYWJsZSBwcm9wZXJ0aWVzIGNhbiBiZSB1cGRhdGVkIGV2ZW4gaWYgaXRzIHdyaXRhYmxlIGRlc2NyaXB0b3JcbiAgICAvLyBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cbiAgICAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiAnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290J1xuICAgIH0pO1xuICB9XG5cbiAgdHJ5IHtcbiAgICB2YXIgX1J1bkluUm9vdEZyYW1lJERldGVyID0gUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290KCksXG4gICAgICAgIHNhbXBsZVN0YWNrID0gX1J1bkluUm9vdEZyYW1lJERldGVyWzBdLFxuICAgICAgICBjb250cm9sU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMV07XG5cbiAgICBpZiAoc2FtcGxlU3RhY2sgJiYgY29udHJvbFN0YWNrKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGVTdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbFN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gMDtcbiAgICAgIHZhciBjID0gMDtcblxuICAgICAgd2hpbGUgKHMgPCBzYW1wbGVMaW5lcy5sZW5ndGggJiYgIXNhbXBsZUxpbmVzW3NdLmluY2x1ZGVzKCdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnKSkge1xuICAgICAgICBzKys7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChjIDwgY29udHJvbExpbmVzLmxlbmd0aCAmJiAhY29udHJvbExpbmVzW2NdLmluY2x1ZGVzKCdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnKSkge1xuICAgICAgICBjKys7XG4gICAgICB9IC8vIFdlIGNvdWxkbid0IGZpbmQgb3VyIGludGVudGlvbmFsbHkgaW5qZWN0ZWQgY29tbW9uIHJvb3QgZnJhbWUsIGF0dGVtcHRcbiAgICAgIC8vIHRvIGZpbmQgYW5vdGhlciBjb21tb24gcm9vdCBmcmFtZSBieSBzZWFyY2ggZnJvbSB0aGUgYm90dG9tIG9mIHRoZVxuICAgICAgLy8gY29udHJvbCBzdGFjay4uLlxuXG5cbiAgICAgIGlmIChzID09PSBzYW1wbGVMaW5lcy5sZW5ndGggfHwgYyA9PT0gY29udHJvbExpbmVzLmxlbmd0aCkge1xuICAgICAgICBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgICAgYy0tO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpOyAvLyBJZiBvdXIgY29tcG9uZW50IGZyYW1lIGlzIGxhYmVsZWQgXCI8YW5vbnltb3VzPlwiXG4gICAgICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgYSB1c2VyLXByb3ZpZGVkIFwiZGlzcGxheU5hbWVcIlxuICAgICAgICAgICAgICAgIC8vIHNwbGljZSBpdCBpbiB0byBtYWtlIHRoZSBzdGFjayBtb3JlIHJlYWRhYmxlLlxuXG5cbiAgICAgICAgICAgICAgICBpZiAoZm4uZGlzcGxheU5hbWUgJiYgX2ZyYW1lLmluY2x1ZGVzKCc8YW5vbnltb3VzPicpKSB7XG4gICAgICAgICAgICAgICAgICBfZnJhbWUgPSBfZnJhbWUucmVwbGFjZSgnPGFub255bW91cz4nLCBmbi5kaXNwbGF5TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCkge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9wcm9kLWVycm9yLWNvZGVzXG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IkMS5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvciQxLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5cbmZ1bmN0aW9uIGlzQXJyYXkoYSkge1xuICByZXR1cm4gaXNBcnJheUltcGwoYSk7XG59XG5cbi8qXG4gKiBUaGUgYCcnICsgdmFsdWVgIHBhdHRlcm4gKHVzZWQgaW4gcGVyZi1zZW5zaXRpdmUgY29kZSkgdGhyb3dzIGZvciBTeW1ib2xcbiAqIGFuZCBUZW1wb3JhbC4qIHR5cGVzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMjIwNjQuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB3aWxsIHRocm93IGFuIGVhc2llci10by11bmRlcnN0YW5kLFxuICogZWFzaWVyLXRvLWRlYnVnIGV4Y2VwdGlvbiB3aXRoIGEgY2xlYXIgZXJyb3JzIG1lc3NhZ2UgbWVzc2FnZSBleHBsYWluaW5nIHRoZVxuICogcHJvYmxlbS4gKEluc3RlYWQgb2YgYSBjb25mdXNpbmcgZXhjZXB0aW9uIHRocm93biBpbnNpZGUgdGhlIGltcGxlbWVudGF0aW9uXG4gKiBvZiB0aGUgYHZhbHVlYCBvYmplY3QpLlxuICovXG4vLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuZnVuY3Rpb24gdHlwZU5hbWUodmFsdWUpIHtcbiAge1xuICAgIC8vIHRvU3RyaW5nVGFnIGlzIG5lZWRlZCBmb3IgbmFtZXNwYWNlZCB0eXBlcyBsaWtlIFRlbXBvcmFsLkluc3RhbnRcbiAgICB2YXIgaGFzVG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC50b1N0cmluZ1RhZztcbiAgICB2YXIgdHlwZSA9IGhhc1RvU3RyaW5nVGFnICYmIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10gfHwgdmFsdWUuY29uc3RydWN0b3IubmFtZSB8fCAnT2JqZWN0JzsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cbn0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXSBvbmx5IGNhbGxlZCBpbiBERVYsIHNvIHZvaWQgcmV0dXJuIGlzIG5vdCBwb3NzaWJsZS5cblxuXG5mdW5jdGlvbiB3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkge1xuICB7XG4gICAgdHJ5IHtcbiAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAvLyBJZiB5b3UgZW5kZWQgdXAgaGVyZSBieSBmb2xsb3dpbmcgYW4gZXhjZXB0aW9uIGNhbGwgc3RhY2ssIGhlcmUncyB3aGF0J3NcbiAgLy8gaGFwcGVuZWQ6IHlvdSBzdXBwbGllZCBhbiBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIFJlYWN0IChhcyBhIHByb3AsIGtleSxcbiAgLy8gRE9NIGF0dHJpYnV0ZSwgQ1NTIHByb3BlcnR5LCBzdHJpbmcgcmVmLCBldGMuKSBhbmQgd2hlbiBSZWFjdCB0cmllZCB0b1xuICAvLyBjb2VyY2UgaXQgdG8gYSBzdHJpbmcgdXNpbmcgYCcnICsgdmFsdWVgLCBhbiBleGNlcHRpb24gd2FzIHRocm93bi5cbiAgLy9cbiAgLy8gVGhlIG1vc3QgY29tbW9uIHR5cGVzIHRoYXQgd2lsbCBjYXVzZSB0aGlzIGV4Y2VwdGlvbiBhcmUgYFN5bWJvbGAgaW5zdGFuY2VzXG4gIC8vIGFuZCBUZW1wb3JhbCBvYmplY3RzIGxpa2UgYFRlbXBvcmFsLkluc3RhbnRgLiBCdXQgYW55IG9iamVjdCB0aGF0IGhhcyBhXG4gIC8vIGB2YWx1ZU9mYCBvciBgW1N5bWJvbC50b1ByaW1pdGl2ZV1gIG1ldGhvZCB0aGF0IHRocm93cyB3aWxsIGFsc28gY2F1c2UgdGhpc1xuICAvLyBleGNlcHRpb24uIChMaWJyYXJ5IGF1dGhvcnMgZG8gdGhpcyB0byBwcmV2ZW50IHVzZXJzIGZyb20gdXNpbmcgYnVpbHQtaW5cbiAgLy8gbnVtZXJpYyBvcGVyYXRvcnMgbGlrZSBgK2Agb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMgbGlrZSBgPj1gIGJlY2F1c2UgY3VzdG9tXG4gIC8vIG1ldGhvZHMgYXJlIG5lZWRlZCB0byBwZXJmb3JtIGFjY3VyYXRlIGFyaXRobWV0aWMgb3IgY29tcGFyaXNvbi4pXG4gIC8vXG4gIC8vIFRvIGZpeCB0aGUgcHJvYmxlbSwgY29lcmNlIHRoaXMgb2JqZWN0IG9yIHN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZyBiZWZvcmVcbiAgLy8gcGFzc2luZyBpdCB0byBSZWFjdC4gVGhlIG1vc3QgcmVsaWFibGUgd2F5IGlzIHVzdWFsbHkgYFN0cmluZyh2YWx1ZSlgLlxuICAvL1xuICAvLyBUbyBmaW5kIHdoaWNoIHZhbHVlIGlzIHRocm93aW5nLCBjaGVjayB0aGUgYnJvd3NlciBvciBkZWJ1Z2dlciBjb25zb2xlLlxuICAvLyBCZWZvcmUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93biwgdGhlcmUgc2hvdWxkIGJlIGBjb25zb2xlLmVycm9yYCBvdXRwdXRcbiAgLy8gdGhhdCBzaG93cyB0aGUgdHlwZSAoU3ltYm9sLCBUZW1wb3JhbC5QbGFpbkRhdGUsIGV0Yy4pIHRoYXQgY2F1c2VkIHRoZVxuICAvLyBwcm9ibGVtIGFuZCBob3cgdGhhdCB0eXBlIHdhcyB1c2VkOiBrZXksIGF0cnJpYnV0ZSwgaW5wdXQgdmFsdWUgcHJvcCwgZXRjLlxuICAvLyBJbiBtb3N0IGNhc2VzLCB0aGlzIGNvbnNvbGUgb3V0cHV0IGFsc28gc2hvd3MgdGhlIGNvbXBvbmVudCBhbmQgaXRzXG4gIC8vIGFuY2VzdG9yIGNvbXBvbmVudHMgd2hlcmUgdGhlIGV4Y2VwdGlvbiBoYXBwZW5lZC5cbiAgLy9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG4gIHJldHVybiAnJyArIHZhbHVlO1xufVxuZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICB7XG4gICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1RoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4nICsgJyBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS4nLCB0eXBlTmFtZSh2YWx1ZSkpO1xuXG4gICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTsgLy8gdGhyb3cgKHRvIGhlbHAgY2FsbGVycyBmaW5kIHRyb3VibGVzaG9vdGluZyBjb21tZW50cylcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSRVNFUlZFRF9QUk9QUyA9IHtcbiAga2V5OiB0cnVlLFxuICByZWY6IHRydWUsXG4gIF9fc2VsZjogdHJ1ZSxcbiAgX19zb3VyY2U6IHRydWVcbn07XG52YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd247XG52YXIgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd247XG52YXIgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcsIHNlbGYpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY29uZmlnLnJlZiA9PT0gJ3N0cmluZycgJiYgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ICYmIHNlbGYgJiYgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50LnN0YXRlTm9kZSAhPT0gc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiAnICsgJ1N1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiAnICsgJ1RoaXMgY2FzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb24uICcgKyAnV2UgYXNrIHlvdSB0byBtYW51YWxseSBmaXggdGhpcyBjYXNlIGJ5IHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudC50eXBlKSwgY29uZmlnLnJlZik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB7XG4gICAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7XG4gICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB7XG4gICAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ1JlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYHJlZmAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG4vKipcbiAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvXG4gKiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcgdG8gY2FsbCBpdC4gQWxzbywgaW5zdGFuY2VvZiBjaGVja1xuICogd2lsbCBub3Qgd29yay4gSW5zdGVhZCB0ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRvIGNoZWNrXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXG4gKiBAcGFyYW0geyp9IG93bmVyXG4gKiBAcGFyYW0geyp9IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0IHBsYWNlcyB3aGVyZSBgdGhpc2AgaXNcbiAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4gUmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2VcbiAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93XG4gKiBmdW5jdGlvbnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIgYXJlIHRoZSBzYW1lLCB0aGVyZSB3aWxsIGJlIG5vXG4gKiBjaGFuZ2UgaW4gYmVoYXZpb3IuXG4gKiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSlcbiAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQvb3Igb3RoZXIgaW5mb3JtYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5cbmZ1bmN0aW9uIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzEwN1xuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuXG5mdW5jdGlvbiBqc3hERVYkMSh0eXBlLCBjb25maWcsIG1heWJlS2V5LCBzb3VyY2UsIHNlbGYpIHtcbiAge1xuICAgIHZhciBwcm9wTmFtZTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG4gICAgdmFyIHByb3BzID0ge307XG4gICAgdmFyIGtleSA9IG51bGw7XG4gICAgdmFyIHJlZiA9IG51bGw7IC8vIEN1cnJlbnRseSwga2V5IGNhbiBiZSBzcHJlYWQgaW4gYXMgYSBwcm9wLiBUaGlzIGNhdXNlcyBhIHBvdGVudGlhbFxuICAgIC8vIGlzc3VlIGlmIGtleSBpcyBhbHNvIGV4cGxpY2l0bHkgZGVjbGFyZWQgKGllLiA8ZGl2IHsuLi5wcm9wc30ga2V5PVwiSGlcIiAvPlxuICAgIC8vIG9yIDxkaXYga2V5PVwiSGlcIiB7Li4ucHJvcHN9IC8+ICkuIFdlIHdhbnQgdG8gZGVwcmVjYXRlIGtleSBzcHJlYWQsXG4gICAgLy8gYnV0IGFzIGFuIGludGVybWVkaWFyeSBzdGVwLCB3ZSB3aWxsIHVzZSBqc3hERVYgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0XG4gICAgLy8gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz4sIGJlY2F1c2Ugd2UgYXJlbid0IGN1cnJlbnRseSBhYmxlIHRvIHRlbGwgaWZcbiAgICAvLyBrZXkgaXMgZXhwbGljaXRseSBkZWNsYXJlZCB0byBiZSB1bmRlZmluZWQgb3Igbm90LlxuXG4gICAgaWYgKG1heWJlS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHtcbiAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihtYXliZUtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleSA9ICcnICsgbWF5YmVLZXk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIHtcbiAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZywgc2VsZik7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XG5cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfSAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcblxuXG4gICAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wcztcblxuICAgICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50LCBwcm9wcyk7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNsaWVudC5yZWZlcmVuY2UnKTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHtcbiAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpIHtcbiAge1xuICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGZpbGVOYW1lID0gc291cmNlLmZpbGVOYW1lLnJlcGxhY2UoL14uKltcXFxcXFwvXS8sICcnKTtcbiAgICAgIHZhciBsaW5lTnVtYmVyID0gc291cmNlLmxpbmVOdW1iZXI7XG4gICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufVxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cblxuXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICB7XG4gICAgdmFyIGluZm8gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcblxuICAgIGlmICghaW5mbykge1xuICAgICAgdmFyIHBhcmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUocGFyZW50VHlwZSk7XG5cbiAgICAgIGlmIChwYXJlbnROYW1lKSB7XG4gICAgICAgIGluZm8gPSBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5mbztcbiAgfVxufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gICAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAgIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICAgIHZhciBjaGlsZE93bmVyID0gJyc7XG5cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sIGNoaWxkT3duZXIpO1xuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0JyB8fCAhbm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChub2RlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFKSA7IGVsc2UgaWYgKGlzQXJyYXkobm9kZSkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuXG4gICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNoaWxkLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQobm9kZSkpIHtcbiAgICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXG4gICAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgICAgbm9kZS5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpO1xuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRW50cnkgaXRlcmF0b3JzIHVzZWQgdG8gcHJvdmlkZSBpbXBsaWNpdCBrZXlzLFxuICAgICAgICAvLyBidXQgbm93IHdlIHByaW50IGEgc2VwYXJhdGUgd2FybmluZyBmb3IgdGhlbSBsYXRlci5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgICB2YXIgc3RlcDtcblxuICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxuICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwgfHwgdHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzLCBlbGVtZW50LnByb3BzLCAncHJvcCcsIG5hbWUsIGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZS5Qcm9wVHlwZXMgIT09IHVuZGVmaW5lZCAmJiAhcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24pIHtcbiAgICAgIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gdHJ1ZTsgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcblxuICAgICAgdmFyIF9uYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuXG4gICAgICBlcnJvcignQ29tcG9uZW50ICVzIGRlY2xhcmVkIGBQcm9wVHlwZXNgIGluc3RlYWQgb2YgYHByb3BUeXBlc2AuIERpZCB5b3UgbWlzc3BlbGwgdGhlIHByb3BlcnR5IGFzc2lnbm1lbnQ/JywgX25hbWUgfHwgJ1Vua25vd24nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nICYmICF0eXBlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcmFnbWVudC5wcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2tleScpIHtcbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZnJhZ21lbnQpO1xuXG4gICAgICAgIGVycm9yKCdJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLiAnICsgJ1JlYWN0LkZyYWdtZW50IGNhbiBvbmx5IGhhdmUgYGtleWAgYW5kIGBjaGlsZHJlbmAgcHJvcHMuJywga2V5KTtcblxuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZnJhZ21lbnQpO1xuXG4gICAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgYHJlZmAgc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4nKTtcblxuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuQWJvdXRLZXlTcHJlYWQgPSB7fTtcbmZ1bmN0aW9uIGpzeFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBrZXksIGlzU3RhdGljQ2hpbGRyZW4sIHNvdXJjZSwgc2VsZikge1xuICB7XG4gICAgdmFyIHZhbGlkVHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKTsgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG9cbiAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gICAgaWYgKCF2YWxpZFR5cGUpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIG5hbWVkIGltcG9ydHMuXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKTtcblxuICAgICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGVTdHJpbmc7XG5cbiAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkodHlwZSkpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCdSZWFjdC5qc3g6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBqc3hERVYkMSh0eXBlLCBwcm9wcywga2V5LCBzb3VyY2UsIHNlbGYpOyAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLlxuICAgIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gICAgLy8gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZCBwcm9kLlxuICAgIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gICAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgICBpZiAodmFsaWRUeXBlKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcblxuICAgICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW5baV0sIHR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCAna2V5JykpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHJldHVybiBrICE9PSAna2V5JztcbiAgICAgIH0pO1xuICAgICAgdmFyIGJlZm9yZUV4YW1wbGUgPSBrZXlzLmxlbmd0aCA+IDAgPyAne2tleTogc29tZUtleSwgJyArIGtleXMuam9pbignOiAuLi4sICcpICsgJzogLi4ufScgOiAne2tleTogc29tZUtleX0nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEtleVNwcmVhZFtjb21wb25lbnROYW1lICsgYmVmb3JlRXhhbXBsZV0pIHtcbiAgICAgICAgdmFyIGFmdGVyRXhhbXBsZSA9IGtleXMubGVuZ3RoID4gMCA/ICd7JyArIGtleXMuam9pbignOiAuLi4sICcpICsgJzogLi4ufScgOiAne30nO1xuXG4gICAgICAgIGVycm9yKCdBIHByb3BzIG9iamVjdCBjb250YWluaW5nIGEgXCJrZXlcIiBwcm9wIGlzIGJlaW5nIHNwcmVhZCBpbnRvIEpTWDpcXG4nICsgJyAgbGV0IHByb3BzID0gJXM7XFxuJyArICcgIDwlcyB7Li4ucHJvcHN9IC8+XFxuJyArICdSZWFjdCBrZXlzIG11c3QgYmUgcGFzc2VkIGRpcmVjdGx5IHRvIEpTWCB3aXRob3V0IHVzaW5nIHNwcmVhZDpcXG4nICsgJyAgbGV0IHByb3BzID0gJXM7XFxuJyArICcgIDwlcyBrZXk9e3NvbWVLZXl9IHsuLi5wcm9wc30gLz4nLCBiZWZvcmVFeGFtcGxlLCBjb21wb25lbnROYW1lLCBhZnRlckV4YW1wbGUsIGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dEtleVNwcmVhZFtjb21wb25lbnROYW1lICsgYmVmb3JlRXhhbXBsZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59IC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgZXhpc3QgdG8gc3RpbGwgZ2V0IGNoaWxkIHdhcm5pbmdzIGluIGRldlxuXG52YXIganN4REVWID0ganN4V2l0aFZhbGlkYXRpb24gO1xuXG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuanN4REVWID0ganN4REVWO1xuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJSZWFjdCIsInJlcXVpcmUiLCJSRUFDVF9FTEVNRU5UX1RZUEUiLCJTeW1ib2wiLCJmb3IiLCJSRUFDVF9QT1JUQUxfVFlQRSIsIlJFQUNUX0ZSQUdNRU5UX1RZUEUiLCJSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIiwiUkVBQ1RfUFJPRklMRVJfVFlQRSIsIlJFQUNUX1BST1ZJREVSX1RZUEUiLCJSRUFDVF9DT05URVhUX1RZUEUiLCJSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIiwiUkVBQ1RfU1VTUEVOU0VfVFlQRSIsIlJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSIsIlJFQUNUX01FTU9fVFlQRSIsIlJFQUNUX0xBWllfVFlQRSIsIlJFQUNUX09GRlNDUkVFTl9UWVBFIiwiUkVBQ1RfQ0FDSEVfVFlQRSIsIk1BWUJFX0lURVJBVE9SX1NZTUJPTCIsIml0ZXJhdG9yIiwiRkFVWF9JVEVSQVRPUl9TWU1CT0wiLCJnZXRJdGVyYXRvckZuIiwibWF5YmVJdGVyYWJsZSIsIm1heWJlSXRlcmF0b3IiLCJSZWFjdFNoYXJlZEludGVybmFscyIsIl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEIiwiZXJyb3IiLCJmb3JtYXQiLCJfbGVuMiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkyIiwicHJpbnRXYXJuaW5nIiwibGV2ZWwiLCJSZWFjdERlYnVnQ3VycmVudEZyYW1lIiwic3RhY2siLCJnZXRTdGFja0FkZGVuZHVtIiwiY29uY2F0IiwiYXJnc1dpdGhGb3JtYXQiLCJtYXAiLCJpdGVtIiwiU3RyaW5nIiwidW5zaGlmdCIsIkZ1bmN0aW9uIiwicHJvdG90eXBlIiwiYXBwbHkiLCJjYWxsIiwiY29uc29sZSIsImVuYWJsZVNjb3BlQVBJIiwiZW5hYmxlQ2FjaGVFbGVtZW50IiwiZW5hYmxlVHJhbnNpdGlvblRyYWNpbmciLCJlbmFibGVMZWdhY3lIaWRkZW4iLCJlbmFibGVEZWJ1Z1RyYWNpbmciLCJSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDIiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCJ0eXBlIiwiJCR0eXBlb2YiLCJnZXRNb2R1bGVJZCIsInVuZGVmaW5lZCIsImdldFdyYXBwZWROYW1lIiwib3V0ZXJUeXBlIiwiaW5uZXJUeXBlIiwid3JhcHBlck5hbWUiLCJkaXNwbGF5TmFtZSIsImZ1bmN0aW9uTmFtZSIsIm5hbWUiLCJnZXRDb250ZXh0TmFtZSIsIlJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSIsImdldENvbXBvbmVudE5hbWVGcm9tVHlwZSIsInRhZyIsImNvbnRleHQiLCJwcm92aWRlciIsIl9jb250ZXh0IiwicmVuZGVyIiwib3V0ZXJOYW1lIiwibGF6eUNvbXBvbmVudCIsInBheWxvYWQiLCJfcGF5bG9hZCIsImluaXQiLCJfaW5pdCIsIngiLCJhc3NpZ24iLCJPYmplY3QiLCJkaXNhYmxlZERlcHRoIiwicHJldkxvZyIsInByZXZJbmZvIiwicHJldldhcm4iLCJwcmV2RXJyb3IiLCJwcmV2R3JvdXAiLCJwcmV2R3JvdXBDb2xsYXBzZWQiLCJwcmV2R3JvdXBFbmQiLCJkaXNhYmxlZExvZyIsIl9fcmVhY3REaXNhYmxlZExvZyIsImRpc2FibGVMb2dzIiwibG9nIiwiaW5mbyIsIndhcm4iLCJncm91cCIsImdyb3VwQ29sbGFwc2VkIiwiZ3JvdXBFbmQiLCJwcm9wcyIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ2YWx1ZSIsIndyaXRhYmxlIiwiZGVmaW5lUHJvcGVydGllcyIsInJlZW5hYmxlTG9ncyIsIlJlYWN0Q3VycmVudERpc3BhdGNoZXIiLCJwcmVmaXgiLCJkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSIsInNvdXJjZSIsIm93bmVyRm4iLCJFcnJvciIsIm1hdGNoIiwidHJpbSIsInJlZW50cnkiLCJjb21wb25lbnRGcmFtZUNhY2hlIiwiUG9zc2libHlXZWFrTWFwIiwiV2Vha01hcCIsIk1hcCIsImRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUiLCJmbiIsImNvbnN0cnVjdCIsImZyYW1lIiwiZ2V0IiwicHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSIsInByZXBhcmVTdGFja1RyYWNlIiwicHJldmlvdXNEaXNwYXRjaGVyIiwiY3VycmVudCIsIlJ1bkluUm9vdEZyYW1lIiwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290IiwiY29udHJvbCIsIkZha2UiLCJkZWZpbmVQcm9wZXJ0eSIsInNldCIsIlJlZmxlY3QiLCJtYXliZVByb21pc2UiLCJjYXRjaCIsInNhbXBsZSIsIm5hbWVQcm9wRGVzY3JpcHRvciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9SdW5JblJvb3RGcmFtZSREZXRlciIsInNhbXBsZVN0YWNrIiwiY29udHJvbFN0YWNrIiwic2FtcGxlTGluZXMiLCJzcGxpdCIsImNvbnRyb2xMaW5lcyIsInMiLCJjIiwiaW5jbHVkZXMiLCJfZnJhbWUiLCJyZXBsYWNlIiwic3ludGhldGljRnJhbWUiLCJkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUiLCJzaG91bGRDb25zdHJ1Y3QiLCJDb21wb25lbnQiLCJpc1JlYWN0Q29tcG9uZW50IiwiZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWIiwiaGFzT3duUHJvcGVydHkiLCJsb2dnZWRUeXBlRmFpbHVyZXMiLCJSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEiLCJzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxIiwiZWxlbWVudCIsIm93bmVyIiwiX293bmVyIiwiX3NvdXJjZSIsInNldEV4dHJhU3RhY2tGcmFtZSIsImNoZWNrUHJvcFR5cGVzIiwidHlwZVNwZWNzIiwidmFsdWVzIiwibG9jYXRpb24iLCJjb21wb25lbnROYW1lIiwiaGFzIiwiYmluZCIsInR5cGVTcGVjTmFtZSIsImVycm9yJDEiLCJlcnIiLCJleCIsIm1lc3NhZ2UiLCJpc0FycmF5SW1wbCIsImlzQXJyYXkiLCJhIiwidHlwZU5hbWUiLCJoYXNUb1N0cmluZ1RhZyIsInRvU3RyaW5nVGFnIiwiY29uc3RydWN0b3IiLCJ3aWxsQ29lcmNpb25UaHJvdyIsInRlc3RTdHJpbmdDb2VyY2lvbiIsImUiLCJjaGVja0tleVN0cmluZ0NvZXJjaW9uIiwiUmVhY3RDdXJyZW50T3duZXIkMSIsIlJlYWN0Q3VycmVudE93bmVyIiwiUkVTRVJWRURfUFJPUFMiLCJrZXkiLCJyZWYiLCJfX3NlbGYiLCJfX3NvdXJjZSIsInNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duIiwic3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24iLCJkaWRXYXJuQWJvdXRTdHJpbmdSZWZzIiwiaGFzVmFsaWRSZWYiLCJjb25maWciLCJnZXR0ZXIiLCJpc1JlYWN0V2FybmluZyIsImhhc1ZhbGlkS2V5Iiwid2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkIiwic2VsZiIsInN0YXRlTm9kZSIsImRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyIiwid2FybkFib3V0QWNjZXNzaW5nS2V5IiwiZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIiLCJ3YXJuQWJvdXRBY2Nlc3NpbmdSZWYiLCJSZWFjdEVsZW1lbnQiLCJfc3RvcmUiLCJmcmVlemUiLCJqc3hERVYkMSIsIm1heWJlS2V5IiwicHJvcE5hbWUiLCJkZWZhdWx0UHJvcHMiLCJSRUFDVF9DTElFTlRfUkVGRVJFTkNFIiwic2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQiLCJwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biIsImlzVmFsaWRFbGVtZW50Iiwib2JqZWN0IiwiZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtIiwiZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0iLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJvd25lckhhc0tleVVzZVdhcm5pbmciLCJnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvIiwicGFyZW50VHlwZSIsInBhcmVudE5hbWUiLCJ2YWxpZGF0ZUV4cGxpY2l0S2V5IiwidmFsaWRhdGVkIiwiY3VycmVudENvbXBvbmVudEVycm9ySW5mbyIsImNoaWxkT3duZXIiLCJ2YWxpZGF0ZUNoaWxkS2V5cyIsIm5vZGUiLCJpIiwiY2hpbGQiLCJpdGVyYXRvckZuIiwiZW50cmllcyIsInN0ZXAiLCJuZXh0IiwiZG9uZSIsInZhbGlkYXRlUHJvcFR5cGVzIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiX25hbWUiLCJnZXREZWZhdWx0UHJvcHMiLCJpc1JlYWN0Q2xhc3NBcHByb3ZlZCIsInZhbGlkYXRlRnJhZ21lbnRQcm9wcyIsImZyYWdtZW50Iiwia2V5cyIsImRpZFdhcm5BYm91dEtleVNwcmVhZCIsImpzeFdpdGhWYWxpZGF0aW9uIiwiaXNTdGF0aWNDaGlsZHJlbiIsInZhbGlkVHlwZSIsInNvdXJjZUluZm8iLCJ0eXBlU3RyaW5nIiwiY2hpbGRyZW4iLCJmaWx0ZXIiLCJrIiwiYmVmb3JlRXhhbXBsZSIsImpvaW4iLCJhZnRlckV4YW1wbGUiLCJqc3hERVYiLCJleHBvcnRzIiwiRnJhZ21lbnQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\n"));
+
+/***/ }),
+
+/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js":
+/*!******************************************************************!*\
+ !*** ./node_modules/next/dist/compiled/react/jsx-dev-runtime.js ***!
+ \******************************************************************/
+/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
+
+"use strict";
+eval(__webpack_require__.ts("\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBRUEsSUFBSUEsS0FBeUIsRUFBYyxFQUUxQyxNQUFNO0lBQ0xDLDhMQUF5QjtBQUMzQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2pzeC1kZXYtcnVudGltZS5qcz9jYTIwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtZGV2LXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOlsicHJvY2VzcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJyZXF1aXJlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\n"));
+
+/***/ }),
+
+/***/ "(app-pages-browser)/./src/app/globals.css":
+/*!*****************************!*\
+ !*** ./src/app/globals.css ***!
+ \*****************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"4432dcbdba13\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9hcHAvZ2xvYmFscy5jc3MiLCJtYXBwaW5ncyI6IjtBQUFBLCtEQUFlLGNBQWM7QUFDN0IsSUFBSSxJQUFVLElBQUksaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL3NyYy9hcHAvZ2xvYmFscy5jc3M/ZWY4NSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcIjQ0MzJkY2JkYmExM1wiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/app/globals.css\n"));
+
+/***/ }),
+
+/***/ "(app-pages-browser)/./src/components/OfflineIndicator.tsx":
+/*!*********************************************!*\
+ !*** ./src/components/OfflineIndicator.tsx ***!
+ \*********************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ OfflineIndicator; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_WifiOff_lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! __barrel_optimize__?names=WifiOff!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/wifi-off.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\nfunction OfflineIndicator() {\n _s();\n const [isOffline, setIsOffline] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n setIsOffline(!navigator.onLine);\n const handleOnline = ()=>setIsOffline(false);\n const handleOffline = ()=>setIsOffline(true);\n window.addEventListener(\"online\", handleOnline);\n window.addEventListener(\"offline\", handleOffline);\n return ()=>{\n window.removeEventListener(\"online\", handleOnline);\n window.removeEventListener(\"offline\", handleOffline);\n };\n }, []);\n if (!isOffline) return null;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed top-0 left-0 w-full bg-red-600 text-white text-[10px] font-black uppercase tracking-widest py-1 flex items-center justify-center gap-2 z-[9999] animate-pulse\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_WifiOff_lucide_react__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n size: 12\n }, void 0, false, {\n fileName: \"/home/robin/AI/Coding/Whisky/src/components/OfflineIndicator.tsx\",\n lineNumber: 28,\n columnNumber: 13\n }, this),\n \"Offline-Modus: Du siehst eine gespeicherte Version\"\n ]\n }, void 0, true, {\n fileName: \"/home/robin/AI/Coding/Whisky/src/components/OfflineIndicator.tsx\",\n lineNumber: 27,\n columnNumber: 9\n }, this);\n}\n_s(OfflineIndicator, \"yIyCq6r2gljXAQnZsaC9iva1MCM=\");\n_c = OfflineIndicator;\nvar _c;\n$RefreshReg$(_c, \"OfflineIndicator\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL09mZmxpbmVJbmRpY2F0b3IudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFbUQ7QUFDWjtBQUV4QixTQUFTSTs7SUFDcEIsTUFBTSxDQUFDQyxXQUFXQyxhQUFhLEdBQUdMLCtDQUFRQSxDQUFDO0lBRTNDQyxnREFBU0EsQ0FBQztRQUNOSSxhQUFhLENBQUNDLFVBQVVDLE1BQU07UUFFOUIsTUFBTUMsZUFBZSxJQUFNSCxhQUFhO1FBQ3hDLE1BQU1JLGdCQUFnQixJQUFNSixhQUFhO1FBRXpDSyxPQUFPQyxnQkFBZ0IsQ0FBQyxVQUFVSDtRQUNsQ0UsT0FBT0MsZ0JBQWdCLENBQUMsV0FBV0Y7UUFFbkMsT0FBTztZQUNIQyxPQUFPRSxtQkFBbUIsQ0FBQyxVQUFVSjtZQUNyQ0UsT0FBT0UsbUJBQW1CLENBQUMsV0FBV0g7UUFDMUM7SUFDSixHQUFHLEVBQUU7SUFFTCxJQUFJLENBQUNMLFdBQVcsT0FBTztJQUV2QixxQkFDSSw4REFBQ1M7UUFBSUMsV0FBVTs7MEJBQ1gsOERBQUNaLG1GQUFPQTtnQkFBQ2EsTUFBTTs7Ozs7O1lBQU07Ozs7Ozs7QUFJakM7R0ExQndCWjtLQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9zcmMvY29tcG9uZW50cy9PZmZsaW5lSW5kaWNhdG9yLnRzeD80MjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBXaWZpT2ZmIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gT2ZmbGluZUluZGljYXRvcigpIHtcbiAgICBjb25zdCBbaXNPZmZsaW5lLCBzZXRJc09mZmxpbmVdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0SXNPZmZsaW5lKCFuYXZpZ2F0b3Iub25MaW5lKTtcblxuICAgICAgICBjb25zdCBoYW5kbGVPbmxpbmUgPSAoKSA9PiBzZXRJc09mZmxpbmUoZmFsc2UpO1xuICAgICAgICBjb25zdCBoYW5kbGVPZmZsaW5lID0gKCkgPT4gc2V0SXNPZmZsaW5lKHRydWUpO1xuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBoYW5kbGVPbmxpbmUpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGhhbmRsZU9mZmxpbmUpO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb25saW5lJywgaGFuZGxlT25saW5lKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgaGFuZGxlT2ZmbGluZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgaWYgKCFpc09mZmxpbmUpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaXhlZCB0b3AtMCBsZWZ0LTAgdy1mdWxsIGJnLXJlZC02MDAgdGV4dC13aGl0ZSB0ZXh0LVsxMHB4XSBmb250LWJsYWNrIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgcHktMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB6LVs5OTk5XSBhbmltYXRlLXB1bHNlXCI+XG4gICAgICAgICAgICA8V2lmaU9mZiBzaXplPXsxMn0gLz5cbiAgICAgICAgICAgIE9mZmxpbmUtTW9kdXM6IER1IHNpZWhzdCBlaW5lIGdlc3BlaWNoZXJ0ZSBWZXJzaW9uXG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIldpZmlPZmYiLCJPZmZsaW5lSW5kaWNhdG9yIiwiaXNPZmZsaW5lIiwic2V0SXNPZmZsaW5lIiwibmF2aWdhdG9yIiwib25MaW5lIiwiaGFuZGxlT25saW5lIiwiaGFuZGxlT2ZmbGluZSIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGl2IiwiY2xhc3NOYW1lIiwic2l6ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/OfflineIndicator.tsx\n"));
+
+/***/ })
+
+});
\ No newline at end of file
diff --git a/.next/static/webpack/app/layout.f6af077e9159f6b2.hot-update.js b/.next/static/webpack/app/layout.f6af077e9159f6b2.hot-update.js
new file mode 100644
index 0000000..49ea89a
--- /dev/null
+++ b/.next/static/webpack/app/layout.f6af077e9159f6b2.hot-update.js
@@ -0,0 +1,22 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("app/layout",{
+
+/***/ "(app-pages-browser)/./src/app/globals.css":
+/*!*****************************!*\
+ !*** ./src/app/globals.css ***!
+ \*****************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"a9c4e162d8e1\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9hcHAvZ2xvYmFscy5jc3MiLCJtYXBwaW5ncyI6IjtBQUFBLCtEQUFlLGNBQWM7QUFDN0IsSUFBSSxJQUFVLElBQUksaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL3NyYy9hcHAvZ2xvYmFscy5jc3M/ZWY4NSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcImE5YzRlMTYyZDhlMVwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/app/globals.css\n"));
+
+/***/ })
+
+});
\ No newline at end of file
diff --git a/.next/static/webpack/cd3f7d84278f9b1a.webpack.hot-update.json b/.next/static/webpack/cd3f7d84278f9b1a.webpack.hot-update.json
new file mode 100644
index 0000000..51549dd
--- /dev/null
+++ b/.next/static/webpack/cd3f7d84278f9b1a.webpack.hot-update.json
@@ -0,0 +1 @@
+{"c":["app/layout","webpack"],"r":[],"m":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&server=false!"]}
\ No newline at end of file
diff --git a/.next/static/webpack/d05b7ffe97b89e9e.webpack.hot-update.json b/.next/static/webpack/d05b7ffe97b89e9e.webpack.hot-update.json
new file mode 100644
index 0000000..3823c4c
--- /dev/null
+++ b/.next/static/webpack/d05b7ffe97b89e9e.webpack.hot-update.json
@@ -0,0 +1 @@
+{"c":["webpack"],"r":[],"m":[]}
\ No newline at end of file
diff --git a/.next/static/webpack/d8dfa3d4739242e4.webpack.hot-update.json b/.next/static/webpack/d8dfa3d4739242e4.webpack.hot-update.json
new file mode 100644
index 0000000..5c82546
--- /dev/null
+++ b/.next/static/webpack/d8dfa3d4739242e4.webpack.hot-update.json
@@ -0,0 +1 @@
+{"c":["app/layout","webpack"],"r":[],"m":[]}
\ No newline at end of file
diff --git a/.next/static/webpack/ddb3f3dbb24963a5.webpack.hot-update.json b/.next/static/webpack/ddb3f3dbb24963a5.webpack.hot-update.json
new file mode 100644
index 0000000..5c82546
--- /dev/null
+++ b/.next/static/webpack/ddb3f3dbb24963a5.webpack.hot-update.json
@@ -0,0 +1 @@
+{"c":["app/layout","webpack"],"r":[],"m":[]}
\ No newline at end of file
diff --git a/.next/static/webpack/f47db73a1365f7cc.webpack.hot-update.json b/.next/static/webpack/f47db73a1365f7cc.webpack.hot-update.json
new file mode 100644
index 0000000..5a96d9a
--- /dev/null
+++ b/.next/static/webpack/f47db73a1365f7cc.webpack.hot-update.json
@@ -0,0 +1 @@
+{"c":["app/layout","webpack"],"r":[],"m":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FPWARegistration.tsx&server=false!"]}
\ No newline at end of file
diff --git a/.next/static/webpack/f6af077e9159f6b2.webpack.hot-update.json b/.next/static/webpack/f6af077e9159f6b2.webpack.hot-update.json
new file mode 100644
index 0000000..5c82546
--- /dev/null
+++ b/.next/static/webpack/f6af077e9159f6b2.webpack.hot-update.json
@@ -0,0 +1 @@
+{"c":["app/layout","webpack"],"r":[],"m":[]}
\ No newline at end of file
diff --git a/.next/static/webpack/main.88daec547e38ae5b.hot-update.js b/.next/static/webpack/main.88daec547e38ae5b.hot-update.js
new file mode 100644
index 0000000..120937c
--- /dev/null
+++ b/.next/static/webpack/main.88daec547e38ae5b.hot-update.js
@@ -0,0 +1,22 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("main",{
+
+/***/ "./node_modules/next/dist/shared/lib/router/router.js":
+/*!************************************************************!*\
+ !*** ./node_modules/next/dist/shared/lib/router/router.js ***!
+ \************************************************************/
+/***/ (function(module, exports, __webpack_require__) {
+
+eval(__webpack_require__.ts("// tslint:disable:no-console\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return Router;\n },\n matchesMiddleware: function() {\n return matchesMiddleware;\n },\n createKey: function() {\n return createKey;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./utils/remove-trailing-slash */ \"./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _routeloader = __webpack_require__(/*! ../../../client/route-loader */ \"./node_modules/next/dist/client/route-loader.js\");\nconst _script = __webpack_require__(/*! ../../../client/script */ \"./node_modules/next/dist/client/script.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ../../../lib/is-error */ \"./node_modules/next/dist/lib/is-error.js\"));\nconst _denormalizepagepath = __webpack_require__(/*! ../page-path/denormalize-page-path */ \"./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\");\nconst _normalizelocalepath = __webpack_require__(/*! ../i18n/normalize-locale-path */ \"./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../mitt */ \"./node_modules/next/dist/shared/lib/mitt.js\"));\nconst _utils = __webpack_require__(/*! ../utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nconst _isdynamic = __webpack_require__(/*! ./utils/is-dynamic */ \"./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _parserelativeurl = __webpack_require__(/*! ./utils/parse-relative-url */ \"./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nconst _resolverewrites = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./utils/resolve-rewrites */ \"?506d\"));\nconst _routematcher = __webpack_require__(/*! ./utils/route-matcher */ \"./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./utils/route-regex */ \"./node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nconst _formaturl = __webpack_require__(/*! ./utils/format-url */ \"./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _detectdomainlocale = __webpack_require__(/*! ../../../client/detect-domain-locale */ \"./node_modules/next/dist/client/detect-domain-locale.js\");\nconst _parsepath = __webpack_require__(/*! ./utils/parse-path */ \"./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst _addlocale = __webpack_require__(/*! ../../../client/add-locale */ \"./node_modules/next/dist/client/add-locale.js\");\nconst _removelocale = __webpack_require__(/*! ../../../client/remove-locale */ \"./node_modules/next/dist/client/remove-locale.js\");\nconst _removebasepath = __webpack_require__(/*! ../../../client/remove-base-path */ \"./node_modules/next/dist/client/remove-base-path.js\");\nconst _addbasepath = __webpack_require__(/*! ../../../client/add-base-path */ \"./node_modules/next/dist/client/add-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../client/has-base-path */ \"./node_modules/next/dist/client/has-base-path.js\");\nconst _resolvehref = __webpack_require__(/*! ../../../client/resolve-href */ \"./node_modules/next/dist/client/resolve-href.js\");\nconst _isapiroute = __webpack_require__(/*! ../../../lib/is-api-route */ \"./node_modules/next/dist/lib/is-api-route.js\");\nconst _getnextpathnameinfo = __webpack_require__(/*! ./utils/get-next-pathname-info */ \"./node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js\");\nconst _formatnextpathnameinfo = __webpack_require__(/*! ./utils/format-next-pathname-info */ \"./node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js\");\nconst _comparestates = __webpack_require__(/*! ./utils/compare-states */ \"./node_modules/next/dist/shared/lib/router/utils/compare-states.js\");\nconst _islocalurl = __webpack_require__(/*! ./utils/is-local-url */ \"./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _isbot = __webpack_require__(/*! ./utils/is-bot */ \"./node_modules/next/dist/shared/lib/router/utils/is-bot.js\");\nconst _omit = __webpack_require__(/*! ./utils/omit */ \"./node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _interpolateas = __webpack_require__(/*! ./utils/interpolate-as */ \"./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nconst _handlesmoothscroll = __webpack_require__(/*! ./utils/handle-smooth-scroll */ \"./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js\");\nfunction buildCancellationError() {\n return Object.assign(new Error(\"Route Cancelled\"), {\n cancelled: true\n });\n}\nasync function matchesMiddleware(options) {\n const matchers = await Promise.resolve(options.router.pageLoader.getMiddleware());\n if (!matchers) return false;\n const { pathname: asPathname } = (0, _parsepath.parsePath)(options.asPath);\n // remove basePath first since path prefix has to be in the order of `/${basePath}/${locale}`\n const cleanedAs = (0, _hasbasepath.hasBasePath)(asPathname) ? (0, _removebasepath.removeBasePath)(asPathname) : asPathname;\n const asWithBasePathAndLocale = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(cleanedAs, options.locale));\n // Check only path match on client. Matching \"has\" should be done on server\n // where we can access more info such as headers, HttpOnly cookie, etc.\n return matchers.some((m)=>new RegExp(m.regexp).test(asWithBasePathAndLocale));\n}\nfunction stripOrigin(url) {\n const origin = (0, _utils.getLocationOrigin)();\n return url.startsWith(origin) ? url.substring(origin.length) : url;\n}\nfunction prepareUrlAs(router, url, as) {\n // If url and as provided as an object representation,\n // we'll format them into the string version here.\n let [resolvedHref, resolvedAs] = (0, _resolvehref.resolveHref)(router, url, true);\n const origin = (0, _utils.getLocationOrigin)();\n const hrefWasAbsolute = resolvedHref.startsWith(origin);\n const asWasAbsolute = resolvedAs && resolvedAs.startsWith(origin);\n resolvedHref = stripOrigin(resolvedHref);\n resolvedAs = resolvedAs ? stripOrigin(resolvedAs) : resolvedAs;\n const preparedUrl = hrefWasAbsolute ? resolvedHref : (0, _addbasepath.addBasePath)(resolvedHref);\n const preparedAs = as ? stripOrigin((0, _resolvehref.resolveHref)(router, as)) : resolvedAs || resolvedHref;\n return {\n url: preparedUrl,\n as: asWasAbsolute ? preparedAs : (0, _addbasepath.addBasePath)(preparedAs)\n };\n}\nfunction resolveDynamicRoute(pathname, pages) {\n const cleanPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _denormalizepagepath.denormalizePagePath)(pathname));\n if (cleanPathname === \"/404\" || cleanPathname === \"/_error\") {\n return pathname;\n }\n // handle resolving href for dynamic routes\n if (!pages.includes(cleanPathname)) {\n // eslint-disable-next-line array-callback-return\n pages.some((page)=>{\n if ((0, _isdynamic.isDynamicRoute)(page) && (0, _routeregex.getRouteRegex)(page).re.test(cleanPathname)) {\n pathname = page;\n return true;\n }\n });\n }\n return (0, _removetrailingslash.removeTrailingSlash)(pathname);\n}\nfunction getMiddlewareData(source, response, options) {\n const nextConfig = {\n basePath: options.router.basePath,\n i18n: {\n locales: options.router.locales\n },\n trailingSlash: Boolean(false)\n };\n const rewriteHeader = response.headers.get(\"x-nextjs-rewrite\");\n let rewriteTarget = rewriteHeader || response.headers.get(\"x-nextjs-matched-path\");\n const matchedPath = response.headers.get(\"x-matched-path\");\n if (matchedPath && !rewriteTarget && !matchedPath.includes(\"__next_data_catchall\") && !matchedPath.includes(\"/_error\") && !matchedPath.includes(\"/404\")) {\n // leverage x-matched-path to detect next.config.js rewrites\n rewriteTarget = matchedPath;\n }\n if (rewriteTarget) {\n if (rewriteTarget.startsWith(\"/\") || undefined) {\n const parsedRewriteTarget = (0, _parserelativeurl.parseRelativeUrl)(rewriteTarget);\n const pathnameInfo = (0, _getnextpathnameinfo.getNextPathnameInfo)(parsedRewriteTarget.pathname, {\n nextConfig,\n parseData: true\n });\n let fsPathname = (0, _removetrailingslash.removeTrailingSlash)(pathnameInfo.pathname);\n return Promise.all([\n options.router.pageLoader.getPageList(),\n (0, _routeloader.getClientBuildManifest)()\n ]).then((param)=>{\n let [pages, { __rewrites: rewrites }] = param;\n let as = (0, _addlocale.addLocale)(pathnameInfo.pathname, pathnameInfo.locale);\n if ((0, _isdynamic.isDynamicRoute)(as) || !rewriteHeader && pages.includes((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(as), options.router.locales).pathname)) {\n const parsedSource = (0, _getnextpathnameinfo.getNextPathnameInfo)((0, _parserelativeurl.parseRelativeUrl)(source).pathname, {\n nextConfig: false ? 0 : nextConfig,\n parseData: true\n });\n as = (0, _addbasepath.addBasePath)(parsedSource.pathname);\n parsedRewriteTarget.pathname = as;\n }\n if (false) {} else if (!pages.includes(fsPathname)) {\n const resolvedPathname = resolveDynamicRoute(fsPathname, pages);\n if (resolvedPathname !== fsPathname) {\n fsPathname = resolvedPathname;\n }\n }\n const resolvedHref = !pages.includes(fsPathname) ? resolveDynamicRoute((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(parsedRewriteTarget.pathname), options.router.locales).pathname, pages) : fsPathname;\n if ((0, _isdynamic.isDynamicRoute)(resolvedHref)) {\n const matches = (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(resolvedHref))(as);\n Object.assign(parsedRewriteTarget.query, matches || {});\n }\n return {\n type: \"rewrite\",\n parsedAs: parsedRewriteTarget,\n resolvedHref\n };\n });\n }\n const src = (0, _parsepath.parsePath)(source);\n const pathname = (0, _formatnextpathnameinfo.formatNextPathnameInfo)({\n ...(0, _getnextpathnameinfo.getNextPathnameInfo)(src.pathname, {\n nextConfig,\n parseData: true\n }),\n defaultLocale: options.router.defaultLocale,\n buildId: \"\"\n });\n return Promise.resolve({\n type: \"redirect-external\",\n destination: \"\" + pathname + src.query + src.hash\n });\n }\n const redirectTarget = response.headers.get(\"x-nextjs-redirect\");\n if (redirectTarget) {\n if (redirectTarget.startsWith(\"/\")) {\n const src = (0, _parsepath.parsePath)(redirectTarget);\n const pathname = (0, _formatnextpathnameinfo.formatNextPathnameInfo)({\n ...(0, _getnextpathnameinfo.getNextPathnameInfo)(src.pathname, {\n nextConfig,\n parseData: true\n }),\n defaultLocale: options.router.defaultLocale,\n buildId: \"\"\n });\n return Promise.resolve({\n type: \"redirect-internal\",\n newAs: \"\" + pathname + src.query + src.hash,\n newUrl: \"\" + pathname + src.query + src.hash\n });\n }\n return Promise.resolve({\n type: \"redirect-external\",\n destination: redirectTarget\n });\n }\n return Promise.resolve({\n type: \"next\"\n });\n}\nasync function withMiddlewareEffects(options) {\n const matches = await matchesMiddleware(options);\n if (!matches || !options.fetchData) {\n return null;\n }\n try {\n const data = await options.fetchData();\n const effect = await getMiddlewareData(data.dataHref, data.response, options);\n return {\n dataHref: data.dataHref,\n json: data.json,\n response: data.response,\n text: data.text,\n cacheKey: data.cacheKey,\n effect\n };\n } catch (e) {\n /**\n * TODO: Revisit this in the future.\n * For now we will not consider middleware data errors to be fatal.\n * maybe we should revisit in the future.\n */ return null;\n }\n}\nconst manualScrollRestoration = false && 0;\nconst SSG_DATA_NOT_FOUND = Symbol(\"SSG_DATA_NOT_FOUND\");\nfunction fetchRetry(url, attempts, options) {\n return fetch(url, {\n // Cookies are required to be present for Next.js' SSG \"Preview Mode\".\n // Cookies may also be required for `getServerSideProps`.\n //\n // > `fetch` won’t send cookies, unless you set the credentials init\n // > option.\n // https://developer.mozilla.org/docs/Web/API/Fetch_API/Using_Fetch\n //\n // > For maximum browser compatibility when it comes to sending &\n // > receiving cookies, always supply the `credentials: 'same-origin'`\n // > option instead of relying on the default.\n // https://github.com/github/fetch#caveats\n credentials: \"same-origin\",\n method: options.method || \"GET\",\n headers: Object.assign({}, options.headers, {\n \"x-nextjs-data\": \"1\"\n })\n }).then((response)=>{\n return !response.ok && attempts > 1 && response.status >= 500 ? fetchRetry(url, attempts - 1, options) : response;\n });\n}\nfunction tryToParseAsJSON(text) {\n try {\n return JSON.parse(text);\n } catch (error) {\n return null;\n }\n}\nfunction fetchNextData(param) {\n let { dataHref, inflightCache, isPrefetch, hasMiddleware, isServerRender, parseJSON, persistCache, isBackground, unstable_skipClientCache } = param;\n const { href: cacheKey } = new URL(dataHref, window.location.href);\n var _params_method;\n const getData = (params)=>fetchRetry(dataHref, isServerRender ? 3 : 1, {\n headers: Object.assign({}, isPrefetch ? {\n purpose: \"prefetch\"\n } : {}, isPrefetch && hasMiddleware ? {\n \"x-middleware-prefetch\": \"1\"\n } : {}),\n method: (_params_method = params == null ? void 0 : params.method) != null ? _params_method : \"GET\"\n }).then((response)=>{\n if (response.ok && (params == null ? void 0 : params.method) === \"HEAD\") {\n return {\n dataHref,\n response,\n text: \"\",\n json: {},\n cacheKey\n };\n }\n return response.text().then((text)=>{\n if (!response.ok) {\n /**\n * When the data response is a redirect because of a middleware\n * we do not consider it an error. The headers must bring the\n * mapped location.\n * TODO: Change the status code in the handler.\n */ if (hasMiddleware && [\n 301,\n 302,\n 307,\n 308\n ].includes(response.status)) {\n return {\n dataHref,\n response,\n text,\n json: {},\n cacheKey\n };\n }\n if (response.status === 404) {\n var _tryToParseAsJSON;\n if ((_tryToParseAsJSON = tryToParseAsJSON(text)) == null ? void 0 : _tryToParseAsJSON.notFound) {\n return {\n dataHref,\n json: {\n notFound: SSG_DATA_NOT_FOUND\n },\n response,\n text,\n cacheKey\n };\n }\n }\n const error = new Error(\"Failed to load static props\");\n /**\n * We should only trigger a server-side transition if this was\n * caused on a client-side transition. Otherwise, we'd get into\n * an infinite loop.\n */ if (!isServerRender) {\n (0, _routeloader.markAssetError)(error);\n }\n throw error;\n }\n return {\n dataHref,\n json: parseJSON ? tryToParseAsJSON(text) : null,\n response,\n text,\n cacheKey\n };\n });\n }).then((data)=>{\n if (!persistCache || \"development\" !== \"production\" || 0) {\n delete inflightCache[cacheKey];\n }\n return data;\n }).catch((err)=>{\n if (!unstable_skipClientCache) {\n delete inflightCache[cacheKey];\n }\n if (err.message === \"Failed to fetch\" || // firefox\n err.message === \"NetworkError when attempting to fetch resource.\" || // safari\n err.message === \"Load failed\") {\n (0, _routeloader.markAssetError)(err);\n }\n throw err;\n });\n // when skipping client cache we wait to update\n // inflight cache until successful data response\n // this allows racing click event with fetching newer data\n // without blocking navigation when stale data is available\n if (unstable_skipClientCache && persistCache) {\n return getData({}).then((data)=>{\n inflightCache[cacheKey] = Promise.resolve(data);\n return data;\n });\n }\n if (inflightCache[cacheKey] !== undefined) {\n return inflightCache[cacheKey];\n }\n return inflightCache[cacheKey] = getData(isBackground ? {\n method: \"HEAD\"\n } : {});\n}\nfunction createKey() {\n return Math.random().toString(36).slice(2, 10);\n}\nfunction handleHardNavigation(param) {\n let { url, router } = param;\n // ensure we don't trigger a hard navigation to the same\n // URL as this can end up with an infinite refresh\n if (url === (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(router.asPath, router.locale))) {\n throw new Error(\"Invariant: attempted to hard navigate to the same URL \" + url + \" \" + location.href);\n }\n window.location.href = url;\n}\nconst getCancelledHandler = (param)=>{\n let { route, router } = param;\n let cancelled = false;\n const cancel = router.clc = ()=>{\n cancelled = true;\n };\n const handleCancelled = ()=>{\n if (cancelled) {\n const error = new Error('Abort fetching component for route: \"' + route + '\"');\n error.cancelled = true;\n throw error;\n }\n if (cancel === router.clc) {\n router.clc = null;\n }\n };\n return handleCancelled;\n};\nclass Router {\n reload() {\n window.location.reload();\n }\n /**\n * Go back in history\n */ back() {\n window.history.back();\n }\n /**\n * Go forward in history\n */ forward() {\n window.history.forward();\n }\n /**\n * Performs a `pushState` with arguments\n * @param url of the route\n * @param as masks `url` for the browser\n * @param options object you can define `shallow` and other options\n */ push(url, as, options) {\n if (options === void 0) options = {};\n if (false) {}\n ({ url, as } = prepareUrlAs(this, url, as));\n return this.change(\"pushState\", url, as, options);\n }\n /**\n * Performs a `replaceState` with arguments\n * @param url of the route\n * @param as masks `url` for the browser\n * @param options object you can define `shallow` and other options\n */ replace(url, as, options) {\n if (options === void 0) options = {};\n ({ url, as } = prepareUrlAs(this, url, as));\n return this.change(\"replaceState\", url, as, options);\n }\n async _bfl(as, resolvedAs, locale, skipNavigate) {\n if (true) {\n let matchesBflStatic = false;\n let matchesBflDynamic = false;\n for (const curAs of [\n as,\n resolvedAs\n ]){\n if (curAs) {\n const asNoSlash = (0, _removetrailingslash.removeTrailingSlash)(new URL(curAs, \"http://n\").pathname);\n const asNoSlashLocale = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(asNoSlash, locale || this.locale));\n if (asNoSlash !== (0, _removetrailingslash.removeTrailingSlash)(new URL(this.asPath, \"http://n\").pathname)) {\n var _this__bfl_s, _this__bfl_s1;\n matchesBflStatic = matchesBflStatic || !!((_this__bfl_s = this._bfl_s) == null ? void 0 : _this__bfl_s.contains(asNoSlash)) || !!((_this__bfl_s1 = this._bfl_s) == null ? void 0 : _this__bfl_s1.contains(asNoSlashLocale));\n for (const normalizedAS of [\n asNoSlash,\n asNoSlashLocale\n ]){\n // if any sub-path of as matches a dynamic filter path\n // it should be hard navigated\n const curAsParts = normalizedAS.split(\"/\");\n for(let i = 0; !matchesBflDynamic && i < curAsParts.length + 1; i++){\n var _this__bfl_d;\n const currentPart = curAsParts.slice(0, i).join(\"/\");\n if (currentPart && ((_this__bfl_d = this._bfl_d) == null ? void 0 : _this__bfl_d.contains(currentPart))) {\n matchesBflDynamic = true;\n break;\n }\n }\n }\n // if the client router filter is matched then we trigger\n // a hard navigation\n if (matchesBflStatic || matchesBflDynamic) {\n if (skipNavigate) {\n return true;\n }\n handleHardNavigation({\n url: (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(as, locale || this.locale, this.defaultLocale)),\n router: this\n });\n return new Promise(()=>{});\n }\n }\n }\n }\n }\n return false;\n }\n async change(method, url, as, options, forcedScroll) {\n var _this_components_pathname;\n if (!(0, _islocalurl.isLocalURL)(url)) {\n handleHardNavigation({\n url,\n router: this\n });\n return false;\n }\n // WARNING: `_h` is an internal option for handing Next.js client-side\n // hydration. Your app should _never_ use this property. It may change at\n // any time without notice.\n const isQueryUpdating = options._h === 1;\n if (!isQueryUpdating && !options.shallow) {\n await this._bfl(as, undefined, options.locale);\n }\n let shouldResolveHref = isQueryUpdating || options._shouldResolveHref || (0, _parsepath.parsePath)(url).pathname === (0, _parsepath.parsePath)(as).pathname;\n const nextState = {\n ...this.state\n };\n // for static pages with query params in the URL we delay\n // marking the router ready until after the query is updated\n // or a navigation has occurred\n const readyStateChange = this.isReady !== true;\n this.isReady = true;\n const isSsr = this.isSsr;\n if (!isQueryUpdating) {\n this.isSsr = false;\n }\n // if a route transition is already in progress before\n // the query updating is triggered ignore query updating\n if (isQueryUpdating && this.clc) {\n return false;\n }\n const prevLocale = nextState.locale;\n if (false) { var _this_locales; }\n // marking route changes as a navigation start entry\n if (_utils.ST) {\n performance.mark(\"routeChange\");\n }\n const { shallow = false, scroll = true } = options;\n const routeProps = {\n shallow\n };\n if (this._inFlightRoute && this.clc) {\n if (!isSsr) {\n Router.events.emit(\"routeChangeError\", buildCancellationError(), this._inFlightRoute, routeProps);\n }\n this.clc();\n this.clc = null;\n }\n as = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)((0, _hasbasepath.hasBasePath)(as) ? (0, _removebasepath.removeBasePath)(as) : as, options.locale, this.defaultLocale));\n const cleanedAs = (0, _removelocale.removeLocale)((0, _hasbasepath.hasBasePath)(as) ? (0, _removebasepath.removeBasePath)(as) : as, nextState.locale);\n this._inFlightRoute = as;\n const localeChange = prevLocale !== nextState.locale;\n // If the url change is only related to a hash change\n // We should not proceed. We should only change the state.\n if (!isQueryUpdating && this.onlyAHashChange(cleanedAs) && !localeChange) {\n nextState.asPath = cleanedAs;\n Router.events.emit(\"hashChangeStart\", as, routeProps);\n // TODO: do we need the resolved href when only a hash change?\n this.changeState(method, url, as, {\n ...options,\n scroll: false\n });\n if (scroll) {\n this.scrollToHash(cleanedAs);\n }\n try {\n await this.set(nextState, this.components[nextState.route], null);\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n Router.events.emit(\"routeChangeError\", err, cleanedAs, routeProps);\n }\n throw err;\n }\n Router.events.emit(\"hashChangeComplete\", as, routeProps);\n return true;\n }\n let parsed = (0, _parserelativeurl.parseRelativeUrl)(url);\n let { pathname, query } = parsed;\n // The build manifest needs to be loaded before auto-static dynamic pages\n // get their query parameters to allow ensuring they can be parsed properly\n // when rewritten to\n let pages, rewrites;\n try {\n [pages, { __rewrites: rewrites }] = await Promise.all([\n this.pageLoader.getPageList(),\n (0, _routeloader.getClientBuildManifest)(),\n this.pageLoader.getMiddleware()\n ]);\n } catch (err) {\n // If we fail to resolve the page list or client-build manifest, we must\n // do a server-side transition:\n handleHardNavigation({\n url: as,\n router: this\n });\n return false;\n }\n // If asked to change the current URL we should reload the current page\n // (not location.reload() but reload getInitialProps and other Next.js stuffs)\n // We also need to set the method = replaceState always\n // as this should not go into the history (That's how browsers work)\n // We should compare the new asPath to the current asPath, not the url\n if (!this.urlIsNew(cleanedAs) && !localeChange) {\n method = \"replaceState\";\n }\n // we need to resolve the as value using rewrites for dynamic SSG\n // pages to allow building the data URL correctly\n let resolvedAs = as;\n // url and as should always be prefixed with basePath by this\n // point by either next/link or router.push/replace so strip the\n // basePath from the pathname to match the pages dir 1-to-1\n pathname = pathname ? (0, _removetrailingslash.removeTrailingSlash)((0, _removebasepath.removeBasePath)(pathname)) : pathname;\n let route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n const parsedAsPathname = as.startsWith(\"/\") && (0, _parserelativeurl.parseRelativeUrl)(as).pathname;\n // if we detected the path as app route during prefetching\n // trigger hard navigation\n if ((_this_components_pathname = this.components[pathname]) == null ? void 0 : _this_components_pathname.__appRouter) {\n handleHardNavigation({\n url: as,\n router: this\n });\n return new Promise(()=>{});\n }\n const isMiddlewareRewrite = !!(parsedAsPathname && route !== parsedAsPathname && (!(0, _isdynamic.isDynamicRoute)(route) || !(0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(route))(parsedAsPathname)));\n // we don't attempt resolve asPath when we need to execute\n // middleware as the resolving will occur server-side\n const isMiddlewareMatch = !options.shallow && await matchesMiddleware({\n asPath: as,\n locale: nextState.locale,\n router: this\n });\n if (isQueryUpdating && isMiddlewareMatch) {\n shouldResolveHref = false;\n }\n if (shouldResolveHref && pathname !== \"/_error\") {\n options._shouldResolveHref = true;\n if (false) {} else {\n parsed.pathname = resolveDynamicRoute(pathname, pages);\n if (parsed.pathname !== pathname) {\n pathname = parsed.pathname;\n parsed.pathname = (0, _addbasepath.addBasePath)(pathname);\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n }\n }\n if (!(0, _islocalurl.isLocalURL)(as)) {\n if (true) {\n throw new Error('Invalid href: \"' + url + '\" and as: \"' + as + '\", received relative href and external as' + \"\\nSee more info: https://nextjs.org/docs/messages/invalid-relative-url-external-as\");\n }\n handleHardNavigation({\n url: as,\n router: this\n });\n return false;\n }\n resolvedAs = (0, _removelocale.removeLocale)((0, _removebasepath.removeBasePath)(resolvedAs), nextState.locale);\n route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n let routeMatch = false;\n if ((0, _isdynamic.isDynamicRoute)(route)) {\n const parsedAs = (0, _parserelativeurl.parseRelativeUrl)(resolvedAs);\n const asPathname = parsedAs.pathname;\n const routeRegex = (0, _routeregex.getRouteRegex)(route);\n routeMatch = (0, _routematcher.getRouteMatcher)(routeRegex)(asPathname);\n const shouldInterpolate = route === asPathname;\n const interpolatedAs = shouldInterpolate ? (0, _interpolateas.interpolateAs)(route, asPathname, query) : {};\n if (!routeMatch || shouldInterpolate && !interpolatedAs.result) {\n const missingParams = Object.keys(routeRegex.groups).filter((param)=>!query[param] && !routeRegex.groups[param].optional);\n if (missingParams.length > 0 && !isMiddlewareMatch) {\n if (true) {\n console.warn(\"\" + (shouldInterpolate ? \"Interpolating href\" : \"Mismatching `as` and `href`\") + \" failed to manually provide \" + (\"the params: \" + missingParams.join(\", \") + \" in the `href`'s `query`\"));\n }\n throw new Error((shouldInterpolate ? \"The provided `href` (\" + url + \") value is missing query values (\" + missingParams.join(\", \") + \") to be interpolated properly. \" : \"The provided `as` value (\" + asPathname + \") is incompatible with the `href` value (\" + route + \"). \") + (\"Read more: https://nextjs.org/docs/messages/\" + (shouldInterpolate ? \"href-interpolation-failed\" : \"incompatible-href-as\")));\n }\n } else if (shouldInterpolate) {\n as = (0, _formaturl.formatWithValidation)(Object.assign({}, parsedAs, {\n pathname: interpolatedAs.result,\n query: (0, _omit.omit)(query, interpolatedAs.params)\n }));\n } else {\n // Merge params into `query`, overwriting any specified in search\n Object.assign(query, routeMatch);\n }\n }\n if (!isQueryUpdating) {\n Router.events.emit(\"routeChangeStart\", as, routeProps);\n }\n const isErrorRoute = this.pathname === \"/404\" || this.pathname === \"/_error\";\n try {\n var _self___NEXT_DATA___props_pageProps, _self___NEXT_DATA___props, _routeInfo_props;\n let routeInfo = await this.getRouteInfo({\n route,\n pathname,\n query,\n as,\n resolvedAs,\n routeProps,\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n hasMiddleware: isMiddlewareMatch,\n unstable_skipClientCache: options.unstable_skipClientCache,\n isQueryUpdating: isQueryUpdating && !this.isFallback,\n isMiddlewareRewrite\n });\n if (!isQueryUpdating && !options.shallow) {\n await this._bfl(as, \"resolvedAs\" in routeInfo ? routeInfo.resolvedAs : undefined, nextState.locale);\n }\n if (\"route\" in routeInfo && isMiddlewareMatch) {\n pathname = routeInfo.route || route;\n route = pathname;\n if (!routeProps.shallow) {\n query = Object.assign({}, routeInfo.query || {}, query);\n }\n const cleanedParsedPathname = (0, _hasbasepath.hasBasePath)(parsed.pathname) ? (0, _removebasepath.removeBasePath)(parsed.pathname) : parsed.pathname;\n if (routeMatch && pathname !== cleanedParsedPathname) {\n Object.keys(routeMatch).forEach((key)=>{\n if (routeMatch && query[key] === routeMatch[key]) {\n delete query[key];\n }\n });\n }\n if ((0, _isdynamic.isDynamicRoute)(pathname)) {\n const prefixedAs = !routeProps.shallow && routeInfo.resolvedAs ? routeInfo.resolvedAs : (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(new URL(as, location.href).pathname, nextState.locale), true);\n let rewriteAs = prefixedAs;\n if ((0, _hasbasepath.hasBasePath)(rewriteAs)) {\n rewriteAs = (0, _removebasepath.removeBasePath)(rewriteAs);\n }\n if (false) {}\n const routeRegex = (0, _routeregex.getRouteRegex)(pathname);\n const curRouteMatch = (0, _routematcher.getRouteMatcher)(routeRegex)(new URL(rewriteAs, location.href).pathname);\n if (curRouteMatch) {\n Object.assign(query, curRouteMatch);\n }\n }\n }\n // If the routeInfo brings a redirect we simply apply it.\n if (\"type\" in routeInfo) {\n if (routeInfo.type === \"redirect-internal\") {\n return this.change(method, routeInfo.newUrl, routeInfo.newAs, options);\n } else {\n handleHardNavigation({\n url: routeInfo.destination,\n router: this\n });\n return new Promise(()=>{});\n }\n }\n const component = routeInfo.Component;\n if (component && component.unstable_scriptLoader) {\n const scripts = [].concat(component.unstable_scriptLoader());\n scripts.forEach((script)=>{\n (0, _script.handleClientScriptLoad)(script.props);\n });\n }\n // handle redirect on client-transition\n if ((routeInfo.__N_SSG || routeInfo.__N_SSP) && routeInfo.props) {\n if (routeInfo.props.pageProps && routeInfo.props.pageProps.__N_REDIRECT) {\n // Use the destination from redirect without adding locale\n options.locale = false;\n const destination = routeInfo.props.pageProps.__N_REDIRECT;\n // check if destination is internal (resolves to a page) and attempt\n // client-navigation if it is falling back to hard navigation if\n // it's not\n if (destination.startsWith(\"/\") && routeInfo.props.pageProps.__N_REDIRECT_BASE_PATH !== false) {\n const parsedHref = (0, _parserelativeurl.parseRelativeUrl)(destination);\n parsedHref.pathname = resolveDynamicRoute(parsedHref.pathname, pages);\n const { url: newUrl, as: newAs } = prepareUrlAs(this, destination, destination);\n return this.change(method, newUrl, newAs, options);\n }\n handleHardNavigation({\n url: destination,\n router: this\n });\n return new Promise(()=>{});\n }\n nextState.isPreview = !!routeInfo.props.__N_PREVIEW;\n // handle SSG data 404\n if (routeInfo.props.notFound === SSG_DATA_NOT_FOUND) {\n let notFoundRoute;\n try {\n await this.fetchComponent(\"/404\");\n notFoundRoute = \"/404\";\n } catch (_) {\n notFoundRoute = \"/_error\";\n }\n routeInfo = await this.getRouteInfo({\n route: notFoundRoute,\n pathname: notFoundRoute,\n query,\n as,\n resolvedAs,\n routeProps: {\n shallow: false\n },\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n isNotFound: true\n });\n if (\"type\" in routeInfo) {\n throw new Error(\"Unexpected middleware effect on /404\");\n }\n }\n }\n if (isQueryUpdating && this.pathname === \"/_error\" && ((_self___NEXT_DATA___props = self.__NEXT_DATA__.props) == null ? void 0 : (_self___NEXT_DATA___props_pageProps = _self___NEXT_DATA___props.pageProps) == null ? void 0 : _self___NEXT_DATA___props_pageProps.statusCode) === 500 && ((_routeInfo_props = routeInfo.props) == null ? void 0 : _routeInfo_props.pageProps)) {\n // ensure statusCode is still correct for static 500 page\n // when updating query information\n routeInfo.props.pageProps.statusCode = 500;\n }\n var _routeInfo_route;\n // shallow routing is only allowed for same page URL changes.\n const isValidShallowRoute = options.shallow && nextState.route === ((_routeInfo_route = routeInfo.route) != null ? _routeInfo_route : route);\n var _options_scroll;\n const shouldScroll = (_options_scroll = options.scroll) != null ? _options_scroll : !isQueryUpdating && !isValidShallowRoute;\n const resetScroll = shouldScroll ? {\n x: 0,\n y: 0\n } : null;\n const upcomingScrollState = forcedScroll != null ? forcedScroll : resetScroll;\n // the new state that the router gonna set\n const upcomingRouterState = {\n ...nextState,\n route,\n pathname,\n query,\n asPath: cleanedAs,\n isFallback: false\n };\n // When the page being rendered is the 404 page, we should only update the\n // query parameters. Route changes here might add the basePath when it\n // wasn't originally present. This is also why this block is before the\n // below `changeState` call which updates the browser's history (changing\n // the URL).\n if (isQueryUpdating && isErrorRoute) {\n var _self___NEXT_DATA___props_pageProps1, _self___NEXT_DATA___props1, _routeInfo_props1;\n routeInfo = await this.getRouteInfo({\n route: this.pathname,\n pathname: this.pathname,\n query,\n as,\n resolvedAs,\n routeProps: {\n shallow: false\n },\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n isQueryUpdating: isQueryUpdating && !this.isFallback\n });\n if (\"type\" in routeInfo) {\n throw new Error(\"Unexpected middleware effect on \" + this.pathname);\n }\n if (this.pathname === \"/_error\" && ((_self___NEXT_DATA___props1 = self.__NEXT_DATA__.props) == null ? void 0 : (_self___NEXT_DATA___props_pageProps1 = _self___NEXT_DATA___props1.pageProps) == null ? void 0 : _self___NEXT_DATA___props_pageProps1.statusCode) === 500 && ((_routeInfo_props1 = routeInfo.props) == null ? void 0 : _routeInfo_props1.pageProps)) {\n // ensure statusCode is still correct for static 500 page\n // when updating query information\n routeInfo.props.pageProps.statusCode = 500;\n }\n try {\n await this.set(upcomingRouterState, routeInfo, upcomingScrollState);\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n Router.events.emit(\"routeChangeError\", err, cleanedAs, routeProps);\n }\n throw err;\n }\n return true;\n }\n Router.events.emit(\"beforeHistoryChange\", as, routeProps);\n this.changeState(method, url, as, options);\n // for query updates we can skip it if the state is unchanged and we don't\n // need to scroll\n // https://github.com/vercel/next.js/issues/37139\n const canSkipUpdating = isQueryUpdating && !upcomingScrollState && !readyStateChange && !localeChange && (0, _comparestates.compareRouterStates)(upcomingRouterState, this.state);\n if (!canSkipUpdating) {\n try {\n await this.set(upcomingRouterState, routeInfo, upcomingScrollState);\n } catch (e) {\n if (e.cancelled) routeInfo.error = routeInfo.error || e;\n else throw e;\n }\n if (routeInfo.error) {\n if (!isQueryUpdating) {\n Router.events.emit(\"routeChangeError\", routeInfo.error, cleanedAs, routeProps);\n }\n throw routeInfo.error;\n }\n if (false) {}\n if (!isQueryUpdating) {\n Router.events.emit(\"routeChangeComplete\", as, routeProps);\n }\n // A hash mark # is the optional last part of a URL\n const hashRegex = /#.+$/;\n if (shouldScroll && hashRegex.test(as)) {\n this.scrollToHash(as);\n }\n }\n return true;\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n return false;\n }\n throw err;\n }\n }\n changeState(method, url, as, options) {\n if (options === void 0) options = {};\n if (true) {\n if (typeof window.history === \"undefined\") {\n console.error(\"Warning: window.history is not available.\");\n return;\n }\n if (typeof window.history[method] === \"undefined\") {\n console.error(\"Warning: window.history.\" + method + \" is not available\");\n return;\n }\n }\n if (method !== \"pushState\" || (0, _utils.getURL)() !== as) {\n this._shallow = options.shallow;\n window.history[method]({\n url,\n as,\n options,\n __N: true,\n key: this._key = method !== \"pushState\" ? this._key : createKey()\n }, // Passing the empty string here should be safe against future changes to the method.\n // https://developer.mozilla.org/docs/Web/API/History/replaceState\n \"\", as);\n }\n }\n async handleRouteInfoError(err, pathname, query, as, routeProps, loadErrorFail) {\n console.error(err);\n if (err.cancelled) {\n // bubble up cancellation errors\n throw err;\n }\n if ((0, _routeloader.isAssetError)(err) || loadErrorFail) {\n Router.events.emit(\"routeChangeError\", err, as, routeProps);\n // If we can't load the page it could be one of following reasons\n // 1. Page doesn't exists\n // 2. Page does exist in a different zone\n // 3. Internal error while loading the page\n // So, doing a hard reload is the proper way to deal with this.\n handleHardNavigation({\n url: as,\n router: this\n });\n // Changing the URL doesn't block executing the current code path.\n // So let's throw a cancellation error stop the routing logic.\n throw buildCancellationError();\n }\n try {\n let props;\n const { page: Component, styleSheets } = await this.fetchComponent(\"/_error\");\n const routeInfo = {\n props,\n Component,\n styleSheets,\n err,\n error: err\n };\n if (!routeInfo.props) {\n try {\n routeInfo.props = await this.getInitialProps(Component, {\n err,\n pathname,\n query\n });\n } catch (gipErr) {\n console.error(\"Error in error page `getInitialProps`: \", gipErr);\n routeInfo.props = {};\n }\n }\n return routeInfo;\n } catch (routeInfoErr) {\n return this.handleRouteInfoError((0, _iserror.default)(routeInfoErr) ? routeInfoErr : new Error(routeInfoErr + \"\"), pathname, query, as, routeProps, true);\n }\n }\n async getRouteInfo(param) {\n let { route: requestedRoute, pathname, query, as, resolvedAs, routeProps, locale, hasMiddleware, isPreview, unstable_skipClientCache, isQueryUpdating, isMiddlewareRewrite, isNotFound } = param;\n /**\n * This `route` binding can change if there's a rewrite\n * so we keep a reference to the original requested route\n * so we can store the cache for it and avoid re-requesting every time\n * for shallow routing purposes.\n */ let route = requestedRoute;\n try {\n var _data_effect, _data_effect1, _data_effect2, _data_response;\n const handleCancelled = getCancelledHandler({\n route,\n router: this\n });\n let existingInfo = this.components[route];\n if (routeProps.shallow && existingInfo && this.route === route) {\n return existingInfo;\n }\n if (hasMiddleware) {\n existingInfo = undefined;\n }\n let cachedRouteInfo = existingInfo && !(\"initial\" in existingInfo) && \"development\" !== \"development\" ? 0 : undefined;\n const isBackground = isQueryUpdating;\n const fetchNextDataParams = {\n dataHref: this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname,\n query\n }),\n skipInterpolation: true,\n asPath: isNotFound ? \"/404\" : resolvedAs,\n locale\n }),\n hasMiddleware: true,\n isServerRender: this.isSsr,\n parseJSON: true,\n inflightCache: isBackground ? this.sbc : this.sdc,\n persistCache: !isPreview,\n isPrefetch: false,\n unstable_skipClientCache,\n isBackground\n };\n let data = isQueryUpdating && !isMiddlewareRewrite ? null : await withMiddlewareEffects({\n fetchData: ()=>fetchNextData(fetchNextDataParams),\n asPath: isNotFound ? \"/404\" : resolvedAs,\n locale: locale,\n router: this\n }).catch((err)=>{\n // we don't hard error during query updating\n // as it's un-necessary and doesn't need to be fatal\n // unless it is a fallback route and the props can't\n // be loaded\n if (isQueryUpdating) {\n return null;\n }\n throw err;\n });\n // when rendering error routes we don't apply middleware\n // effects\n if (data && (pathname === \"/_error\" || pathname === \"/404\")) {\n data.effect = undefined;\n }\n if (isQueryUpdating) {\n if (!data) {\n data = {\n json: self.__NEXT_DATA__.props\n };\n } else {\n data.json = self.__NEXT_DATA__.props;\n }\n }\n handleCancelled();\n if ((data == null ? void 0 : (_data_effect = data.effect) == null ? void 0 : _data_effect.type) === \"redirect-internal\" || (data == null ? void 0 : (_data_effect1 = data.effect) == null ? void 0 : _data_effect1.type) === \"redirect-external\") {\n return data.effect;\n }\n if ((data == null ? void 0 : (_data_effect2 = data.effect) == null ? void 0 : _data_effect2.type) === \"rewrite\") {\n const resolvedRoute = (0, _removetrailingslash.removeTrailingSlash)(data.effect.resolvedHref);\n const pages = await this.pageLoader.getPageList();\n // during query updating the page must match although during\n // client-transition a redirect that doesn't match a page\n // can be returned and this should trigger a hard navigation\n // which is valid for incremental migration\n if (!isQueryUpdating || pages.includes(resolvedRoute)) {\n route = resolvedRoute;\n pathname = data.effect.resolvedHref;\n query = {\n ...query,\n ...data.effect.parsedAs.query\n };\n resolvedAs = (0, _removebasepath.removeBasePath)((0, _normalizelocalepath.normalizeLocalePath)(data.effect.parsedAs.pathname, this.locales).pathname);\n // Check again the cache with the new destination.\n existingInfo = this.components[route];\n if (routeProps.shallow && existingInfo && this.route === route && !hasMiddleware) {\n // If we have a match with the current route due to rewrite,\n // we can copy the existing information to the rewritten one.\n // Then, we return the information along with the matched route.\n return {\n ...existingInfo,\n route\n };\n }\n }\n }\n if ((0, _isapiroute.isAPIRoute)(route)) {\n handleHardNavigation({\n url: as,\n router: this\n });\n return new Promise(()=>{});\n }\n const routeInfo = cachedRouteInfo || await this.fetchComponent(route).then((res)=>({\n Component: res.page,\n styleSheets: res.styleSheets,\n __N_SSG: res.mod.__N_SSG,\n __N_SSP: res.mod.__N_SSP\n }));\n if (true) {\n const { isValidElementType } = __webpack_require__(/*! next/dist/compiled/react-is */ \"./node_modules/next/dist/compiled/react-is/index.js\");\n if (!isValidElementType(routeInfo.Component)) {\n throw new Error('The default export is not a React Component in page: \"' + pathname + '\"');\n }\n }\n const wasBailedPrefetch = data == null ? void 0 : (_data_response = data.response) == null ? void 0 : _data_response.headers.get(\"x-middleware-skip\");\n const shouldFetchData = routeInfo.__N_SSG || routeInfo.__N_SSP;\n // For non-SSG prefetches that bailed before sending data\n // we clear the cache to fetch full response\n if (wasBailedPrefetch && (data == null ? void 0 : data.dataHref)) {\n delete this.sdc[data.dataHref];\n }\n const { props, cacheKey } = await this._getData(async ()=>{\n if (shouldFetchData) {\n if ((data == null ? void 0 : data.json) && !wasBailedPrefetch) {\n return {\n cacheKey: data.cacheKey,\n props: data.json\n };\n }\n const dataHref = (data == null ? void 0 : data.dataHref) ? data.dataHref : this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname,\n query\n }),\n asPath: resolvedAs,\n locale\n });\n const fetched = await fetchNextData({\n dataHref,\n isServerRender: this.isSsr,\n parseJSON: true,\n inflightCache: wasBailedPrefetch ? {} : this.sdc,\n persistCache: !isPreview,\n isPrefetch: false,\n unstable_skipClientCache\n });\n return {\n cacheKey: fetched.cacheKey,\n props: fetched.json || {}\n };\n }\n return {\n headers: {},\n props: await this.getInitialProps(routeInfo.Component, {\n pathname,\n query,\n asPath: as,\n locale,\n locales: this.locales,\n defaultLocale: this.defaultLocale\n })\n };\n });\n // Only bust the data cache for SSP routes although\n // middleware can skip cache per request with\n // x-middleware-cache: no-cache as well\n if (routeInfo.__N_SSP && fetchNextDataParams.dataHref && cacheKey) {\n delete this.sdc[cacheKey];\n }\n // we kick off a HEAD request in the background\n // when a non-prefetch request is made to signal revalidation\n if (!this.isPreview && routeInfo.__N_SSG && \"development\" !== \"development\" && 0) {}\n props.pageProps = Object.assign({}, props.pageProps);\n routeInfo.props = props;\n routeInfo.route = route;\n routeInfo.query = query;\n routeInfo.resolvedAs = resolvedAs;\n this.components[route] = routeInfo;\n return routeInfo;\n } catch (err) {\n return this.handleRouteInfoError((0, _iserror.getProperError)(err), pathname, query, as, routeProps);\n }\n }\n set(state, data, resetScroll) {\n this.state = state;\n return this.sub(data, this.components[\"/_app\"].Component, resetScroll);\n }\n /**\n * Callback to execute before replacing router state\n * @param cb callback to be executed\n */ beforePopState(cb) {\n this._bps = cb;\n }\n onlyAHashChange(as) {\n if (!this.asPath) return false;\n const [oldUrlNoHash, oldHash] = this.asPath.split(\"#\", 2);\n const [newUrlNoHash, newHash] = as.split(\"#\", 2);\n // Makes sure we scroll to the provided hash if the url/hash are the same\n if (newHash && oldUrlNoHash === newUrlNoHash && oldHash === newHash) {\n return true;\n }\n // If the urls are change, there's more than a hash change\n if (oldUrlNoHash !== newUrlNoHash) {\n return false;\n }\n // If the hash has changed, then it's a hash only change.\n // This check is necessary to handle both the enter and\n // leave hash === '' cases. The identity case falls through\n // and is treated as a next reload.\n return oldHash !== newHash;\n }\n scrollToHash(as) {\n const [, hash = \"\"] = as.split(\"#\", 2);\n (0, _handlesmoothscroll.handleSmoothScroll)(()=>{\n // Scroll to top if the hash is just `#` with no value or `#top`\n // To mirror browsers\n if (hash === \"\" || hash === \"top\") {\n window.scrollTo(0, 0);\n return;\n }\n // Decode hash to make non-latin anchor works.\n const rawHash = decodeURIComponent(hash);\n // First we check if the element by id is found\n const idEl = document.getElementById(rawHash);\n if (idEl) {\n idEl.scrollIntoView();\n return;\n }\n // If there's no element with the id, we check the `name` property\n // To mirror browsers\n const nameEl = document.getElementsByName(rawHash)[0];\n if (nameEl) {\n nameEl.scrollIntoView();\n }\n }, {\n onlyHashChange: this.onlyAHashChange(as)\n });\n }\n urlIsNew(asPath) {\n return this.asPath !== asPath;\n }\n /**\n * Prefetch page code, you may wait for the data during page rendering.\n * This feature only works in production!\n * @param url the href of prefetched page\n * @param asPath the as path of the prefetched page\n */ async prefetch(url, asPath, options) {\n if (asPath === void 0) asPath = url;\n if (options === void 0) options = {};\n // Prefetch is not supported in development mode because it would trigger on-demand-entries\n if (true) {\n return;\n }\n if ( true && (0, _isbot.isBot)(window.navigator.userAgent)) {\n // No prefetches for bots that render the link since they are typically navigating\n // links via the equivalent of a hard navigation and hence never utilize these\n // prefetches.\n return;\n }\n let parsed = (0, _parserelativeurl.parseRelativeUrl)(url);\n const urlPathname = parsed.pathname;\n let { pathname, query } = parsed;\n const originalPathname = pathname;\n if (false) {}\n const pages = await this.pageLoader.getPageList();\n let resolvedAs = asPath;\n const locale = typeof options.locale !== \"undefined\" ? options.locale || undefined : this.locale;\n const isMiddlewareMatch = await matchesMiddleware({\n asPath: asPath,\n locale: locale,\n router: this\n });\n if (false) {}\n parsed.pathname = resolveDynamicRoute(parsed.pathname, pages);\n if ((0, _isdynamic.isDynamicRoute)(parsed.pathname)) {\n pathname = parsed.pathname;\n parsed.pathname = pathname;\n Object.assign(query, (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(parsed.pathname))((0, _parsepath.parsePath)(asPath).pathname) || {});\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n const data = false ? 0 : await withMiddlewareEffects({\n fetchData: ()=>fetchNextData({\n dataHref: this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname: originalPathname,\n query\n }),\n skipInterpolation: true,\n asPath: resolvedAs,\n locale\n }),\n hasMiddleware: true,\n isServerRender: this.isSsr,\n parseJSON: true,\n inflightCache: this.sdc,\n persistCache: !this.isPreview,\n isPrefetch: true\n }),\n asPath: asPath,\n locale: locale,\n router: this\n });\n /**\n * If there was a rewrite we apply the effects of the rewrite on the\n * current parameters for the prefetch.\n */ if ((data == null ? void 0 : data.effect.type) === \"rewrite\") {\n parsed.pathname = data.effect.resolvedHref;\n pathname = data.effect.resolvedHref;\n query = {\n ...query,\n ...data.effect.parsedAs.query\n };\n resolvedAs = data.effect.parsedAs.pathname;\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n /**\n * If there is a redirect to an external destination then we don't have\n * to prefetch content as it will be unused.\n */ if ((data == null ? void 0 : data.effect.type) === \"redirect-external\") {\n return;\n }\n const route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n if (await this._bfl(asPath, resolvedAs, options.locale, true)) {\n this.components[urlPathname] = {\n __appRouter: true\n };\n }\n await Promise.all([\n this.pageLoader._isSsg(route).then((isSsg)=>{\n return isSsg ? fetchNextData({\n dataHref: (data == null ? void 0 : data.json) ? data == null ? void 0 : data.dataHref : this.pageLoader.getDataHref({\n href: url,\n asPath: resolvedAs,\n locale: locale\n }),\n isServerRender: false,\n parseJSON: true,\n inflightCache: this.sdc,\n persistCache: !this.isPreview,\n isPrefetch: true,\n unstable_skipClientCache: options.unstable_skipClientCache || options.priority && !!true\n }).then(()=>false).catch(()=>false) : false;\n }),\n this.pageLoader[options.priority ? \"loadPage\" : \"prefetch\"](route)\n ]);\n }\n async fetchComponent(route) {\n const handleCancelled = getCancelledHandler({\n route,\n router: this\n });\n try {\n const componentResult = await this.pageLoader.loadPage(route);\n handleCancelled();\n return componentResult;\n } catch (err) {\n handleCancelled();\n throw err;\n }\n }\n _getData(fn) {\n let cancelled = false;\n const cancel = ()=>{\n cancelled = true;\n };\n this.clc = cancel;\n return fn().then((data)=>{\n if (cancel === this.clc) {\n this.clc = null;\n }\n if (cancelled) {\n const err = new Error(\"Loading initial props cancelled\");\n err.cancelled = true;\n throw err;\n }\n return data;\n });\n }\n _getFlightData(dataHref) {\n // Do not cache RSC flight response since it's not a static resource\n return fetchNextData({\n dataHref,\n isServerRender: true,\n parseJSON: false,\n inflightCache: this.sdc,\n persistCache: false,\n isPrefetch: false\n }).then((param)=>{\n let { text } = param;\n return {\n data: text\n };\n });\n }\n getInitialProps(Component, ctx) {\n const { Component: App } = this.components[\"/_app\"];\n const AppTree = this._wrapApp(App);\n ctx.AppTree = AppTree;\n return (0, _utils.loadGetInitialProps)(App, {\n AppTree,\n Component,\n router: this,\n ctx\n });\n }\n get route() {\n return this.state.route;\n }\n get pathname() {\n return this.state.pathname;\n }\n get query() {\n return this.state.query;\n }\n get asPath() {\n return this.state.asPath;\n }\n get locale() {\n return this.state.locale;\n }\n get isFallback() {\n return this.state.isFallback;\n }\n get isPreview() {\n return this.state.isPreview;\n }\n constructor(pathname, query, as, { initialProps, pageLoader, App, wrapApp, Component, err, subscription, isFallback, locale, locales, defaultLocale, domainLocales, isPreview }){\n // Server Data Cache (full data requests)\n this.sdc = {};\n // Server Background Cache (HEAD requests)\n this.sbc = {};\n this.isFirstPopStateEvent = true;\n this._key = createKey();\n this.onPopState = (e)=>{\n const { isFirstPopStateEvent } = this;\n this.isFirstPopStateEvent = false;\n const state = e.state;\n if (!state) {\n // We get state as undefined for two reasons.\n // 1. With older safari (< 8) and older chrome (< 34)\n // 2. When the URL changed with #\n //\n // In the both cases, we don't need to proceed and change the route.\n // (as it's already changed)\n // But we can simply replace the state with the new changes.\n // Actually, for (1) we don't need to nothing. But it's hard to detect that event.\n // So, doing the following for (1) does no harm.\n const { pathname, query } = this;\n this.changeState(\"replaceState\", (0, _formaturl.formatWithValidation)({\n pathname: (0, _addbasepath.addBasePath)(pathname),\n query\n }), (0, _utils.getURL)());\n return;\n }\n // __NA is used to identify if the history entry can be handled by the app-router.\n if (state.__NA) {\n window.location.reload();\n return;\n }\n if (!state.__N) {\n return;\n }\n // Safari fires popstateevent when reopening the browser.\n if (isFirstPopStateEvent && this.locale === state.options.locale && state.as === this.asPath) {\n return;\n }\n let forcedScroll;\n const { url, as, options, key } = state;\n if (false) {}\n this._key = key;\n const { pathname } = (0, _parserelativeurl.parseRelativeUrl)(url);\n // Make sure we don't re-render on initial load,\n // can be caused by navigating back from an external site\n if (this.isSsr && as === (0, _addbasepath.addBasePath)(this.asPath) && pathname === (0, _addbasepath.addBasePath)(this.pathname)) {\n return;\n }\n // If the downstream application returns falsy, return.\n // They will then be responsible for handling the event.\n if (this._bps && !this._bps(state)) {\n return;\n }\n this.change(\"replaceState\", url, as, Object.assign({}, options, {\n shallow: options.shallow && this._shallow,\n locale: options.locale || this.defaultLocale,\n // @ts-ignore internal value not exposed on types\n _h: 0\n }), forcedScroll);\n };\n // represents the current component key\n const route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n // set up the component cache (by route keys)\n this.components = {};\n // We should not keep the cache, if there's an error\n // Otherwise, this cause issues when when going back and\n // come again to the errored page.\n if (pathname !== \"/_error\") {\n this.components[route] = {\n Component,\n initial: true,\n props: initialProps,\n err,\n __N_SSG: initialProps && initialProps.__N_SSG,\n __N_SSP: initialProps && initialProps.__N_SSP\n };\n }\n this.components[\"/_app\"] = {\n Component: App,\n styleSheets: []\n };\n if (true) {\n const { BloomFilter } = __webpack_require__(/*! ../../lib/bloom-filter */ \"./node_modules/next/dist/shared/lib/bloom-filter.js\");\n const staticFilterData = {\"numItems\":3,\"errorRate\":0.0001,\"numBits\":58,\"numHashes\":14,\"bitArray\":[1,1,1,0,1,1,1,0,0,0,0,0,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1]};\n const dynamicFilterData = {\"numItems\":1,\"errorRate\":0.0001,\"numBits\":20,\"numHashes\":14,\"bitArray\":[1,0,0,0,0,1,1,1,0,1,1,1,0,0,1,1,1,0,0,0]};\n if (staticFilterData == null ? void 0 : staticFilterData.numHashes) {\n this._bfl_s = new BloomFilter(staticFilterData.numItems, staticFilterData.errorRate);\n this._bfl_s.import(staticFilterData);\n }\n if (dynamicFilterData == null ? void 0 : dynamicFilterData.numHashes) {\n this._bfl_d = new BloomFilter(dynamicFilterData.numItems, dynamicFilterData.errorRate);\n this._bfl_d.import(dynamicFilterData);\n }\n }\n // Backwards compat for Router.router.events\n // TODO: Should be remove the following major version as it was never documented\n this.events = Router.events;\n this.pageLoader = pageLoader;\n // if auto prerendered and dynamic route wait to update asPath\n // until after mount to prevent hydration mismatch\n const autoExportDynamic = (0, _isdynamic.isDynamicRoute)(pathname) && self.__NEXT_DATA__.autoExport;\n this.basePath = false || \"\";\n this.sub = subscription;\n this.clc = null;\n this._wrapApp = wrapApp;\n // make sure to ignore extra popState in safari on navigating\n // back from external site\n this.isSsr = true;\n this.isLocaleDomain = false;\n this.isReady = !!(self.__NEXT_DATA__.gssp || self.__NEXT_DATA__.gip || self.__NEXT_DATA__.isExperimentalCompile || self.__NEXT_DATA__.appGip && !self.__NEXT_DATA__.gsp || !autoExportDynamic && !self.location.search && !false);\n if (false) {}\n this.state = {\n route,\n pathname,\n query,\n asPath: autoExportDynamic ? pathname : as,\n isPreview: !!isPreview,\n locale: false ? 0 : undefined,\n isFallback\n };\n this._initialMatchesMiddlewarePromise = Promise.resolve(false);\n if (true) {\n // make sure \"as\" doesn't start with double slashes or else it can\n // throw an error as it's considered invalid\n if (!as.startsWith(\"//\")) {\n // in order for `e.state` to work on the `onpopstate` event\n // we have to register the initial route upon initialization\n const options = {\n locale\n };\n const asPath = (0, _utils.getURL)();\n this._initialMatchesMiddlewarePromise = matchesMiddleware({\n router: this,\n locale,\n asPath\n }).then((matches)=>{\n options._shouldResolveHref = as !== pathname;\n this.changeState(\"replaceState\", matches ? asPath : (0, _formaturl.formatWithValidation)({\n pathname: (0, _addbasepath.addBasePath)(pathname),\n query\n }), asPath, options);\n return matches;\n });\n }\n window.addEventListener(\"popstate\", this.onPopState);\n // enable custom scroll restoration handling when available\n // otherwise fallback to browser's default handling\n if (false) {}\n }\n }\n}\nRouter.events = (0, _mitt.default)(); //# sourceMappingURL=router.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3JvdXRlci5qcyIsIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDZjtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUlOO0FBQ0EsU0FBU0ksUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVYsT0FBT0MsY0FBYyxDQUFDUSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFOLFNBQVM7SUFDYkcsU0FBUztRQUNMLE9BQU9TO0lBQ1g7SUFDQVIsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtJQUNBQyxXQUFXO1FBQ1AsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTVEsMkJBQTJCQyxtQkFBT0EsQ0FBQyw0R0FBeUM7QUFDbEYsTUFBTUMsNEJBQTRCRCxtQkFBT0EsQ0FBQyw4R0FBMEM7QUFDcEYsTUFBTUUsdUJBQXVCRixtQkFBT0EsQ0FBQyxnSEFBK0I7QUFDcEUsTUFBTUcsZUFBZUgsbUJBQU9BLENBQUMscUZBQThCO0FBQzNELE1BQU1JLFVBQVVKLG1CQUFPQSxDQUFDLHlFQUF3QjtBQUNoRCxNQUFNSyxXQUFXLFdBQVcsR0FBR0osMEJBQTBCSyxDQUFDLENBQUNOLG1CQUFPQSxDQUFDLHVFQUF1QjtBQUMxRixNQUFNTyx1QkFBdUJQLG1CQUFPQSxDQUFDLGtIQUFvQztBQUN6RSxNQUFNUSx1QkFBdUJSLG1CQUFPQSxDQUFDLHdHQUErQjtBQUNwRSxNQUFNUyxRQUFRLFdBQVcsR0FBR1YseUJBQXlCTyxDQUFDLENBQUNOLG1CQUFPQSxDQUFDLDREQUFTO0FBQ3hFLE1BQU1VLFNBQVNWLG1CQUFPQSxDQUFDLDhEQUFVO0FBQ2pDLE1BQU1XLGFBQWFYLG1CQUFPQSxDQUFDLDBGQUFvQjtBQUMvQyxNQUFNWSxvQkFB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RTtZQUNuRDJMO1FBQ0o7UUFDQSxJQUFJLENBQUM2SSxnQ0FBZ0MsR0FBR3ZaLFFBQVFDLE9BQU8sQ0FBQztRQUN4RCxJQUFJLElBQTZCLEVBQUU7WUFDL0Isa0VBQWtFO1lBQ2xFLDRDQUE0QztZQUM1QyxJQUFJLENBQUM0QixHQUFHSixVQUFVLENBQUMsT0FBTztnQkFDdEIsMkRBQTJEO2dCQUMzRCw0REFBNEQ7Z0JBQzVELE1BQU0zQixVQUFVO29CQUNaaUI7Z0JBQ0o7Z0JBQ0EsTUFBTVAsU0FBUyxDQUFDLEdBQUd0QyxPQUFPb1YsTUFBTTtnQkFDaEMsSUFBSSxDQUFDaUcsZ0NBQWdDLEdBQUd6YyxrQkFBa0I7b0JBQ3REb0QsUUFBUSxJQUFJO29CQUNaYTtvQkFDQVA7Z0JBQ0osR0FBR2dFLElBQUksQ0FBQyxDQUFDYztvQkFDTHhGLFFBQVEyTSxrQkFBa0IsR0FBRzVLLE9BQU94QjtvQkFDcEMsSUFBSSxDQUFDb08sV0FBVyxDQUFDLGdCQUFnQm5KLFVBQVU5RSxTQUFTLENBQUMsR0FBR2hDLFdBQVcyTyxvQkFBb0IsRUFBRTt3QkFDckY5TSxVQUFVLENBQUMsR0FBR3ZCLGFBQWErQixXQUFXLEVBQUVSO3dCQUN4QzRFO29CQUNKLElBQUl6RSxRQUFRVjtvQkFDWixPQUFPd0Y7Z0JBQ1g7WUFDSjtZQUNBdUIsT0FBTzJTLGdCQUFnQixDQUFDLFlBQVksSUFBSSxDQUFDdkIsVUFBVTtZQUNuRCwyREFBMkQ7WUFDM0QsbURBQW1EO1lBQ25ELElBQUl6VSxLQUFxQyxFQUFFLEVBSTFDO1FBQ0w7SUFDSjtBQUNKO0FBQ0FsRyxPQUFPOFEsTUFBTSxHQUFHLENBQUMsR0FBR25RLE1BQU1wQixPQUFPLEtBRWpDLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3JvdXRlci5qcz84Njg0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZGVmYXVsdDogbnVsbCxcbiAgICBtYXRjaGVzTWlkZGxld2FyZTogbnVsbCxcbiAgICBjcmVhdGVLZXk6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSb3V0ZXI7XG4gICAgfSxcbiAgICBtYXRjaGVzTWlkZGxld2FyZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVzTWlkZGxld2FyZTtcbiAgICB9LFxuICAgIGNyZWF0ZUtleTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVLZXk7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX3JlbW92ZXRyYWlsaW5nc2xhc2ggPSByZXF1aXJlKFwiLi91dGlscy9yZW1vdmUtdHJhaWxpbmctc2xhc2hcIik7XG5jb25zdCBfcm91dGVsb2FkZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L3JvdXRlLWxvYWRlclwiKTtcbmNvbnN0IF9zY3JpcHQgPSByZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L3NjcmlwdFwiKTtcbmNvbnN0IF9pc2Vycm9yID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcIi4uLy4uLy4uL2xpYi9pcy1lcnJvclwiKSk7XG5jb25zdCBfZGVub3JtYWxpemVwYWdlcGF0aCA9IHJlcXVpcmUoXCIuLi9wYWdlLXBhdGgvZGVub3JtYWxpemUtcGFnZS1wYXRoXCIpO1xuY29uc3QgX25vcm1hbGl6ZWxvY2FsZXBhdGggPSByZXF1aXJlKFwiLi4vaTE4bi9ub3JtYWxpemUtbG9jYWxlLXBhdGhcIik7XG5jb25zdCBfbWl0dCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4uL21pdHRcIikpO1xuY29uc3QgX3V0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgX2lzZHluYW1pYyA9IHJlcXVpcmUoXCIuL3V0aWxzL2lzLWR5bmFtaWNcIik7XG5jb25zdCBfcGFyc2VyZWxhdGl2ZXVybCA9IHJlcXVpcmUoXCIuL3V0aWxzL3BhcnNlLXJlbGF0aXZlLXVybFwiKTtcbmNvbnN0IF9yZXNvbHZlcmV3cml0ZXMgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCIuL3V0aWxzL3Jlc29sdmUtcmV3cml0ZXNcIikpO1xuY29uc3QgX3JvdXRlbWF0Y2hlciA9IHJlcXVpcmUoXCIuL3V0aWxzL3JvdXRlLW1hdGNoZXJcIik7XG5jb25zdCBfcm91dGVyZWdleCA9IHJlcXVpcmUoXCIuL3V0aWxzL3JvdXRlLXJlZ2V4XCIpO1xuY29uc3QgX2Zvcm1hdHVybCA9IHJlcXVpcmUoXCIuL3V0aWxzL2Zvcm1hdC11cmxcIik7XG5jb25zdCBfZGV0ZWN0ZG9tYWlubG9jYWxlID0gcmVxdWlyZShcIi4uLy4uLy4uL2NsaWVudC9kZXRlY3QtZG9tYWluLWxvY2FsZVwiKTtcbmNvbnN0IF9wYXJzZXBhdGggPSByZXF1aXJlKFwiLi91dGlscy9wYXJzZS1wYXRoXCIpO1xuY29uc3QgX2FkZGxvY2FsZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvYWRkLWxvY2FsZVwiKTtcbmNvbnN0IF9yZW1vdmVsb2NhbGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L3JlbW92ZS1sb2NhbGVcIik7XG5jb25zdCBfcmVtb3ZlYmFzZXBhdGggPSByZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L3JlbW92ZS1iYXNlLXBhdGhcIik7XG5jb25zdCBfYWRkYmFzZXBhdGggPSByZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L2FkZC1iYXNlLXBhdGhcIik7XG5jb25zdCBfaGFzYmFzZXBhdGggPSByZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L2hhcy1iYXNlLXBhdGhcIik7XG5jb25zdCBfcmVzb2x2ZWhyZWYgPSByZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L3Jlc29sdmUtaHJlZlwiKTtcbmNvbnN0IF9pc2FwaXJvdXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL2xpYi9pcy1hcGktcm91dGVcIik7XG5jb25zdCBfZ2V0bmV4dHBhdGhuYW1laW5mbyA9IHJlcXVpcmUoXCIuL3V0aWxzL2dldC1uZXh0LXBhdGhuYW1lLWluZm9cIik7XG5jb25zdCBfZm9ybWF0bmV4dHBhdGhuYW1laW5mbyA9IHJlcXVpcmUoXCIuL3V0aWxzL2Zvcm1hdC1uZXh0LXBhdGhuYW1lLWluZm9cIik7XG5jb25zdCBfY29tcGFyZXN0YXRlcyA9IHJlcXVpcmUoXCIuL3V0aWxzL2NvbXBhcmUtc3RhdGVzXCIpO1xuY29uc3QgX2lzbG9jYWx1cmwgPSByZXF1aXJlKFwiLi91dGlscy9pcy1sb2NhbC11cmxcIik7XG5jb25zdCBfaXNib3QgPSByZXF1aXJlKFwiLi91dGlscy9pcy1ib3RcIik7XG5jb25zdCBfb21pdCA9IHJlcXVpcmUoXCIuL3V0aWxzL29taXRcIik7XG5jb25zdCBfaW50ZXJwb2xhdGVhcyA9IHJlcXVpcmUoXCIuL3V0aWxzL2ludGVycG9sYXRlLWFzXCIpO1xuY29uc3QgX2hhbmRsZXNtb290aHNjcm9sbCA9IHJlcXVpcmUoXCIuL3V0aWxzL2hhbmRsZS1zbW9vdGgtc2Nyb2xsXCIpO1xuZnVuY3Rpb24gYnVpbGRDYW5jZWxsYXRpb25FcnJvcigpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoXCJSb3V0ZSBDYW5jZWxsZWRcIiksIHtcbiAgICAgICAgY2FuY2VsbGVkOiB0cnVlXG4gICAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBtYXRjaGVzTWlkZGxld2FyZShvcHRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcnMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUob3B0aW9ucy5yb3V0ZXIucGFnZUxvYWRlci5nZXRNaWRkbGV3YXJlKCkpO1xuICAgIGlmICghbWF0Y2hlcnMpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB7IHBhdGhuYW1lOiBhc1BhdGhuYW1lIH0gPSAoMCwgX3BhcnNlcGF0aC5wYXJzZVBhdGgpKG9wdGlvbnMuYXNQYXRoKTtcbiAgICAvLyByZW1vdmUgYmFzZVBhdGggZmlyc3Qgc2luY2UgcGF0aCBwcmVmaXggaGFzIHRvIGJlIGluIHRoZSBvcmRlciBvZiBgLyR7YmFzZVBhdGh9LyR7bG9jYWxlfWBcbiAgICBjb25zdCBjbGVhbmVkQXMgPSAoMCwgX2hhc2Jhc2VwYXRoLmhhc0Jhc2VQYXRoKShhc1BhdGhuYW1lKSA/ICgwLCBfcmVtb3ZlYmFzZXBhdGgucmVtb3ZlQmFzZVBhdGgpKGFzUGF0aG5hbWUpIDogYXNQYXRobmFtZTtcbiAgICBjb25zdCBhc1dpdGhCYXNlUGF0aEFuZExvY2FsZSA9ICgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKCgwLCBfYWRkbG9jYWxlLmFkZExvY2FsZSkoY2xlYW5lZEFzLCBvcHRpb25zLmxvY2FsZSkpO1xuICAgIC8vIENoZWNrIG9ubHkgcGF0aCBtYXRjaCBvbiBjbGllbnQuIE1hdGNoaW5nIFwiaGFzXCIgc2hvdWxkIGJlIGRvbmUgb24gc2VydmVyXG4gICAgLy8gd2hlcmUgd2UgY2FuIGFjY2VzcyBtb3JlIGluZm8gc3VjaCBhcyBoZWFkZXJzLCBIdHRwT25seSBjb29raWUsIGV0Yy5cbiAgICByZXR1cm4gbWF0Y2hlcnMuc29tZSgobSk9Pm5ldyBSZWdFeHAobS5yZWdleHApLnRlc3QoYXNXaXRoQmFzZVBhdGhBbmRMb2NhbGUpKTtcbn1cbmZ1bmN0aW9uIHN0cmlwT3JpZ2luKHVybCkge1xuICAgIGNvbnN0IG9yaWdpbiA9ICgwLCBfdXRpbHMuZ2V0TG9jYXRpb25PcmlnaW4pKCk7XG4gICAgcmV0dXJuIHVybC5zdGFydHNXaXRoKG9yaWdpbikgPyB1cmwuc3Vic3RyaW5nKG9yaWdpbi5sZW5ndGgpIDogdXJsO1xufVxuZnVuY3Rpb24gcHJlcGFyZVVybEFzKHJvdXRlciwgdXJsLCBhcykge1xuICAgIC8vIElmIHVybCBhbmQgYXMgcHJvdmlkZWQgYXMgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uLFxuICAgIC8vIHdlJ2xsIGZvcm1hdCB0aGVtIGludG8gdGhlIHN0cmluZyB2ZXJzaW9uIGhlcmUuXG4gICAgbGV0IFtyZXNvbHZlZEhyZWYsIHJlc29sdmVkQXNdID0gKDAsIF9yZXNvbHZlaHJlZi5yZXNvbHZlSHJlZikocm91dGVyLCB1cmwsIHRydWUpO1xuICAgIGNvbnN0IG9yaWdpbiA9ICgwLCBfdXRpbHMuZ2V0TG9jYXRpb25PcmlnaW4pKCk7XG4gICAgY29uc3QgaHJlZldhc0Fic29sdXRlID0gcmVzb2x2ZWRIcmVmLnN0YXJ0c1dpdGgob3JpZ2luKTtcbiAgICBjb25zdCBhc1dhc0Fic29sdXRlID0gcmVzb2x2ZWRBcyAmJiByZXNvbHZlZEFzLnN0YXJ0c1dpdGgob3JpZ2luKTtcbiAgICByZXNvbHZlZEhyZWYgPSBzdHJpcE9yaWdpbihyZXNvbHZlZEhyZWYpO1xuICAgIHJlc29sdmVkQXMgPSByZXNvbHZlZEFzID8gc3RyaXBPcmlnaW4ocmVzb2x2ZWRBcykgOiByZXNvbHZlZEFzO1xuICAgIGNvbnN0IHByZXBhcmVkVXJsID0gaHJlZldhc0Fic29sdXRlID8gcmVzb2x2ZWRIcmVmIDogKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkocmVzb2x2ZWRIcmVmKTtcbiAgICBjb25zdCBwcmVwYXJlZEFzID0gYXMgPyBzdHJpcE9yaWdpbigoMCwgX3Jlc29sdmVocmVmLnJlc29sdmVIcmVmKShyb3V0ZXIsIGFzKSkgOiByZXNvbHZlZEFzIHx8IHJlc29sdmVkSHJlZjtcbiAgICByZXR1cm4ge1xuICAgICAgICB1cmw6IHByZXBhcmVkVXJsLFxuICAgICAgICBhczogYXNXYXNBYnNvbHV0ZSA/IHByZXBhcmVkQXMgOiAoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKShwcmVwYXJlZEFzKVxuICAgIH07XG59XG5mdW5jdGlvbiByZXNvbHZlRHluYW1pY1JvdXRlKHBhdGhuYW1lLCBwYWdlcykge1xuICAgIGNvbnN0IGNsZWFuUGF0aG5hbWUgPSAoMCwgX3JlbW92ZXRyYWlsaW5nc2xhc2gucmVtb3ZlVHJhaWxpbmdTbGFzaCkoKDAsIF9kZW5vcm1hbGl6ZXBhZ2VwYXRoLmRlbm9ybWFsaXplUGFnZVBhdGgpKHBhdGhuYW1lKSk7XG4gICAgaWYgKGNsZWFuUGF0aG5hbWUgPT09IFwiLzQwNFwiIHx8IGNsZWFuUGF0aG5hbWUgPT09IFwiL19lcnJvclwiKSB7XG4gICAgICAgIHJldHVybiBwYXRobmFtZTtcbiAgICB9XG4gICAgLy8gaGFuZGxlIHJlc29sdmluZyBocmVmIGZvciBkeW5hbWljIHJvdXRlc1xuICAgIGlmICghcGFnZXMuaW5jbHVkZXMoY2xlYW5QYXRobmFtZSkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFycmF5LWNhbGxiYWNrLXJldHVyblxuICAgICAgICBwYWdlcy5zb21lKChwYWdlKT0+e1xuICAgICAgICAgICAgaWYgKCgwLCBfaXNkeW5hbWljLmlzRHluYW1pY1JvdXRlKShwYWdlKSAmJiAoMCwgX3JvdXRlcmVnZXguZ2V0Um91dGVSZWdleCkocGFnZSkucmUudGVzdChjbGVhblBhdGhuYW1lKSkge1xuICAgICAgICAgICAgICAgIHBhdGhuYW1lID0gcGFnZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAoMCwgX3JlbW92ZXRyYWlsaW5nc2xhc2gucmVtb3ZlVHJhaWxpbmdTbGFzaCkocGF0aG5hbWUpO1xufVxuZnVuY3Rpb24gZ2V0TWlkZGxld2FyZURhdGEoc291cmNlLCByZXNwb25zZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IG5leHRDb25maWcgPSB7XG4gICAgICAgIGJhc2VQYXRoOiBvcHRpb25zLnJvdXRlci5iYXNlUGF0aCxcbiAgICAgICAgaTE4bjoge1xuICAgICAgICAgICAgbG9jYWxlczogb3B0aW9ucy5yb3V0ZXIubG9jYWxlc1xuICAgICAgICB9LFxuICAgICAgICB0cmFpbGluZ1NsYXNoOiBCb29sZWFuKHByb2Nlc3MuZW52Ll9fTkVYVF9UUkFJTElOR19TTEFTSClcbiAgICB9O1xuICAgIGNvbnN0IHJld3JpdGVIZWFkZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIngtbmV4dGpzLXJld3JpdGVcIik7XG4gICAgbGV0IHJld3JpdGVUYXJnZXQgPSByZXdyaXRlSGVhZGVyIHx8IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwieC1uZXh0anMtbWF0Y2hlZC1wYXRoXCIpO1xuICAgIGNvbnN0IG1hdGNoZWRQYXRoID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJ4LW1hdGNoZWQtcGF0aFwiKTtcbiAgICBpZiAobWF0Y2hlZFBhdGggJiYgIXJld3JpdGVUYXJnZXQgJiYgIW1hdGNoZWRQYXRoLmluY2x1ZGVzKFwiX19uZXh0X2RhdGFfY2F0Y2hhbGxcIikgJiYgIW1hdGNoZWRQYXRoLmluY2x1ZGVzKFwiL19lcnJvclwiKSAmJiAhbWF0Y2hlZFBhdGguaW5jbHVkZXMoXCIvNDA0XCIpKSB7XG4gICAgICAgIC8vIGxldmVyYWdlIHgtbWF0Y2hlZC1wYXRoIHRvIGRldGVjdCBuZXh0LmNvbmZpZy5qcyByZXdyaXRlc1xuICAgICAgICByZXdyaXRlVGFyZ2V0ID0gbWF0Y2hlZFBhdGg7XG4gICAgfVxuICAgIGlmIChyZXdyaXRlVGFyZ2V0KSB7XG4gICAgICAgIGlmIChyZXdyaXRlVGFyZ2V0LnN0YXJ0c1dpdGgoXCIvXCIpIHx8IHByb2Nlc3MuZW52Ll9fTkVYVF9FWFRFUk5BTF9NSURETEVXQVJFX1JFV1JJVEVfUkVTT0xWRSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkUmV3cml0ZVRhcmdldCA9ICgwLCBfcGFyc2VyZWxhdGl2ZXVybC5wYXJzZVJlbGF0aXZlVXJsKShyZXdyaXRlVGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhuYW1lSW5mbyA9ICgwLCBfZ2V0bmV4dHBhdGhuYW1laW5mby5nZXROZXh0UGF0aG5hbWVJbmZvKShwYXJzZWRSZXdyaXRlVGFyZ2V0LnBhdGhuYW1lLCB7XG4gICAgICAgICAgICAgICAgbmV4dENvbmZpZyxcbiAgICAgICAgICAgICAgICBwYXJzZURhdGE6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IGZzUGF0aG5hbWUgPSAoMCwgX3JlbW92ZXRyYWlsaW5nc2xhc2gucmVtb3ZlVHJhaWxpbmdTbGFzaCkocGF0aG5hbWVJbmZvLnBhdGhuYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5yb3V0ZXIucGFnZUxvYWRlci5nZXRQYWdlTGlzdCgpLFxuICAgICAgICAgICAgICAgICgwLCBfcm91dGVsb2FkZXIuZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCkoKVxuICAgICAgICAgICAgXSkudGhlbigocGFyYW0pPT57XG4gICAgICAgICAgICAgICAgbGV0IFtwYWdlcywgeyBfX3Jld3JpdGVzOiByZXdyaXRlcyB9XSA9IHBhcmFtO1xuICAgICAgICAgICAgICAgIGxldCBhcyA9ICgwLCBfYWRkbG9jYWxlLmFkZExvY2FsZSkocGF0aG5hbWVJbmZvLnBhdGhuYW1lLCBwYXRobmFtZUluZm8ubG9jYWxlKTtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIF9pc2R5bmFtaWMuaXNEeW5hbWljUm91dGUpKGFzKSB8fCAhcmV3cml0ZUhlYWRlciAmJiBwYWdlcy5pbmNsdWRlcygoMCwgX25vcm1hbGl6ZWxvY2FsZXBhdGgubm9ybWFsaXplTG9jYWxlUGF0aCkoKDAsIF9yZW1vdmViYXNlcGF0aC5yZW1vdmVCYXNlUGF0aCkoYXMpLCBvcHRpb25zLnJvdXRlci5sb2NhbGVzKS5wYXRobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkU291cmNlID0gKDAsIF9nZXRuZXh0cGF0aG5hbWVpbmZvLmdldE5leHRQYXRobmFtZUluZm8pKCgwLCBfcGFyc2VyZWxhdGl2ZXVybC5wYXJzZVJlbGF0aXZlVXJsKShzb3VyY2UpLnBhdGhuYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q29uZmlnOiBwcm9jZXNzLmVudi5fX05FWFRfSEFTX1JFV1JJVEVTID8gdW5kZWZpbmVkIDogbmV4dENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRGF0YTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYXMgPSAoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKShwYXJzZWRTb3VyY2UucGF0aG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWRSZXdyaXRlVGFyZ2V0LnBhdGhuYW1lID0gYXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSEFTX1JFV1JJVEVTKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9ICgwLCBfcmVzb2x2ZXJld3JpdGVzLmRlZmF1bHQpKGFzLCBwYWdlcywgcmV3cml0ZXMsIHBhcnNlZFJld3JpdGVUYXJnZXQucXVlcnksIChwYXRoKT0+cmVzb2x2ZUR5bmFtaWNSb3V0ZShwYXRoLCBwYWdlcyksIG9wdGlvbnMucm91dGVyLmxvY2FsZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoZWRQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRSZXdyaXRlVGFyZ2V0LnBhdGhuYW1lID0gcmVzdWx0LnBhcnNlZEFzLnBhdGhuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXMgPSBwYXJzZWRSZXdyaXRlVGFyZ2V0LnBhdGhuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJzZWRSZXdyaXRlVGFyZ2V0LnF1ZXJ5LCByZXN1bHQucGFyc2VkQXMucXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghcGFnZXMuaW5jbHVkZXMoZnNQYXRobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRQYXRobmFtZSA9IHJlc29sdmVEeW5hbWljUm91dGUoZnNQYXRobmFtZSwgcGFnZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRQYXRobmFtZSAhPT0gZnNQYXRobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnNQYXRobmFtZSA9IHJlc29sdmVkUGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRIcmVmID0gIXBhZ2VzLmluY2x1ZGVzKGZzUGF0aG5hbWUpID8gcmVzb2x2ZUR5bmFtaWNSb3V0ZSgoMCwgX25vcm1hbGl6ZWxvY2FsZXBhdGgubm9ybWFsaXplTG9jYWxlUGF0aCkoKDAsIF9yZW1vdmViYXNlcGF0aC5yZW1vdmVCYXNlUGF0aCkocGFyc2VkUmV3cml0ZVRhcmdldC5wYXRobmFtZSksIG9wdGlvbnMucm91dGVyLmxvY2FsZXMpLnBhdGhuYW1lLCBwYWdlcykgOiBmc1BhdGhuYW1lO1xuICAgICAgICAgICAgICAgIGlmICgoMCwgX2lzZHluYW1pYy5pc0R5bmFtaWNSb3V0ZSkocmVzb2x2ZWRIcmVmKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gKDAsIF9yb3V0ZW1hdGNoZXIuZ2V0Um91dGVNYXRjaGVyKSgoMCwgX3JvdXRlcmVnZXguZ2V0Um91dGVSZWdleCkocmVzb2x2ZWRIcmVmKSkoYXMpO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhcnNlZFJld3JpdGVUYXJnZXQucXVlcnksIG1hdGNoZXMgfHwge30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInJld3JpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkQXM6IHBhcnNlZFJld3JpdGVUYXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkSHJlZlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzcmMgPSAoMCwgX3BhcnNlcGF0aC5wYXJzZVBhdGgpKHNvdXJjZSk7XG4gICAgICAgIGNvbnN0IHBhdGhuYW1lID0gKDAsIF9mb3JtYXRuZXh0cGF0aG5hbWVpbmZvLmZvcm1hdE5leHRQYXRobmFtZUluZm8pKHtcbiAgICAgICAgICAgIC4uLigwLCBfZ2V0bmV4dHBhdGhuYW1laW5mby5nZXROZXh0UGF0aG5hbWVJbmZvKShzcmMucGF0aG5hbWUsIHtcbiAgICAgICAgICAgICAgICBuZXh0Q29uZmlnLFxuICAgICAgICAgICAgICAgIHBhcnNlRGF0YTogdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBkZWZhdWx0TG9jYWxlOiBvcHRpb25zLnJvdXRlci5kZWZhdWx0TG9jYWxlLFxuICAgICAgICAgICAgYnVpbGRJZDogXCJcIlxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICB0eXBlOiBcInJlZGlyZWN0LWV4dGVybmFsXCIsXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogXCJcIiArIHBhdGhuYW1lICsgc3JjLnF1ZXJ5ICsgc3JjLmhhc2hcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJlZGlyZWN0VGFyZ2V0ID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJ4LW5leHRqcy1yZWRpcmVjdFwiKTtcbiAgICBpZiAocmVkaXJlY3RUYXJnZXQpIHtcbiAgICAgICAgaWYgKHJlZGlyZWN0VGFyZ2V0LnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSAoMCwgX3BhcnNlcGF0aC5wYXJzZVBhdGgpKHJlZGlyZWN0VGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhuYW1lID0gKDAsIF9mb3JtYXRuZXh0cGF0aG5hbWVpbmZvLmZvcm1hdE5leHRQYXRobmFtZUluZm8pKHtcbiAgICAgICAgICAgICAgICAuLi4oMCwgX2dldG5leHRwYXRobmFtZWluZm8uZ2V0TmV4dFBhdGhuYW1lSW5mbykoc3JjLnBhdGhuYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlRGF0YTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMb2NhbGU6IG9wdGlvbnMucm91dGVyLmRlZmF1bHRMb2NhbGUsXG4gICAgICAgICAgICAgICAgYnVpbGRJZDogXCJcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInJlZGlyZWN0LWludGVybmFsXCIsXG4gICAgICAgICAgICAgICAgbmV3QXM6IFwiXCIgKyBwYXRobmFtZSArIHNyYy5xdWVyeSArIHNyYy5oYXNoLFxuICAgICAgICAgICAgICAgIG5ld1VybDogXCJcIiArIHBhdGhuYW1lICsgc3JjLnF1ZXJ5ICsgc3JjLmhhc2hcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgdHlwZTogXCJyZWRpcmVjdC1leHRlcm5hbFwiLFxuICAgICAgICAgICAgZGVzdGluYXRpb246IHJlZGlyZWN0VGFyZ2V0XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgdHlwZTogXCJuZXh0XCJcbiAgICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIHdpdGhNaWRkbGV3YXJlRWZmZWN0cyhvcHRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGF3YWl0IG1hdGNoZXNNaWRkbGV3YXJlKG9wdGlvbnMpO1xuICAgIGlmICghbWF0Y2hlcyB8fCAhb3B0aW9ucy5mZXRjaERhdGEpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBvcHRpb25zLmZldGNoRGF0YSgpO1xuICAgICAgICBjb25zdCBlZmZlY3QgPSBhd2FpdCBnZXRNaWRkbGV3YXJlRGF0YShkYXRhLmRhdGFIcmVmLCBkYXRhLnJlc3BvbnNlLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGFIcmVmOiBkYXRhLmRhdGFIcmVmLFxuICAgICAgICAgICAganNvbjogZGF0YS5qc29uLFxuICAgICAgICAgICAgcmVzcG9uc2U6IGRhdGEucmVzcG9uc2UsXG4gICAgICAgICAgICB0ZXh0OiBkYXRhLnRleHQsXG4gICAgICAgICAgICBjYWNoZUtleTogZGF0YS5jYWNoZUtleSxcbiAgICAgICAgICAgIGVmZmVjdFxuICAgICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLyoqXG4gICAgICogVE9ETzogUmV2aXNpdCB0aGlzIGluIHRoZSBmdXR1cmUuXG4gICAgICogRm9yIG5vdyB3ZSB3aWxsIG5vdCBjb25zaWRlciBtaWRkbGV3YXJlIGRhdGEgZXJyb3JzIHRvIGJlIGZhdGFsLlxuICAgICAqIG1heWJlIHdlIHNob3VsZCByZXZpc2l0IGluIHRoZSBmdXR1cmUuXG4gICAgICovIHJldHVybiBudWxsO1xuICAgIH1cbn1cbmNvbnN0IG1hbnVhbFNjcm9sbFJlc3RvcmF0aW9uID0gcHJvY2Vzcy5lbnYuX19ORVhUX1NDUk9MTF9SRVNUT1JBVElPTiAmJiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIFwic2Nyb2xsUmVzdG9yYXRpb25cIiBpbiB3aW5kb3cuaGlzdG9yeSAmJiAhIWZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGxldCB2ID0gXCJfX25leHRcIjtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlcXVlbmNlc1xuICAgICAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh2LCB2KSwgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh2KSwgdHJ1ZTtcbiAgICB9IGNhdGNoIChuKSB7fVxufSgpO1xuY29uc3QgU1NHX0RBVEFfTk9UX0ZPVU5EID0gU3ltYm9sKFwiU1NHX0RBVEFfTk9UX0ZPVU5EXCIpO1xuZnVuY3Rpb24gZmV0Y2hSZXRyeSh1cmwsIGF0dGVtcHRzLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGZldGNoKHVybCwge1xuICAgICAgICAvLyBDb29raWVzIGFyZSByZXF1aXJlZCB0byBiZSBwcmVzZW50IGZvciBOZXh0LmpzJyBTU0cgXCJQcmV2aWV3IE1vZGVcIi5cbiAgICAgICAgLy8gQ29va2llcyBtYXkgYWxzbyBiZSByZXF1aXJlZCBmb3IgYGdldFNlcnZlclNpZGVQcm9wc2AuXG4gICAgICAgIC8vXG4gICAgICAgIC8vID4gYGZldGNoYCB3b27igJl0IHNlbmQgY29va2llcywgdW5sZXNzIHlvdSBzZXQgdGhlIGNyZWRlbnRpYWxzIGluaXRcbiAgICAgICAgLy8gPiBvcHRpb24uXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2hcbiAgICAgICAgLy9cbiAgICAgICAgLy8gPiBGb3IgbWF4aW11bSBicm93c2VyIGNvbXBhdGliaWxpdHkgd2hlbiBpdCBjb21lcyB0byBzZW5kaW5nICZcbiAgICAgICAgLy8gPiByZWNlaXZpbmcgY29va2llcywgYWx3YXlzIHN1cHBseSB0aGUgYGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nYFxuICAgICAgICAvLyA+IG9wdGlvbiBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIGRlZmF1bHQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gjY2F2ZWF0c1xuICAgICAgICBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuICAgICAgICBtZXRob2Q6IG9wdGlvbnMubWV0aG9kIHx8IFwiR0VUXCIsXG4gICAgICAgIGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuaGVhZGVycywge1xuICAgICAgICAgICAgXCJ4LW5leHRqcy1kYXRhXCI6IFwiMVwiXG4gICAgICAgIH0pXG4gICAgfSkudGhlbigocmVzcG9uc2UpPT57XG4gICAgICAgIHJldHVybiAhcmVzcG9uc2Uub2sgJiYgYXR0ZW1wdHMgPiAxICYmIHJlc3BvbnNlLnN0YXR1cyA+PSA1MDAgPyBmZXRjaFJldHJ5KHVybCwgYXR0ZW1wdHMgLSAxLCBvcHRpb25zKSA6IHJlc3BvbnNlO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdHJ5VG9QYXJzZUFzSlNPTih0ZXh0KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuZnVuY3Rpb24gZmV0Y2hOZXh0RGF0YShwYXJhbSkge1xuICAgIGxldCB7IGRhdGFIcmVmLCBpbmZsaWdodENhY2hlLCBpc1ByZWZldGNoLCBoYXNNaWRkbGV3YXJlLCBpc1NlcnZlclJlbmRlciwgcGFyc2VKU09OLCBwZXJzaXN0Q2FjaGUsIGlzQmFja2dyb3VuZCwgdW5zdGFibGVfc2tpcENsaWVudENhY2hlIH0gPSBwYXJhbTtcbiAgICBjb25zdCB7IGhyZWY6IGNhY2hlS2V5IH0gPSBuZXcgVVJMKGRhdGFIcmVmLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgdmFyIF9wYXJhbXNfbWV0aG9kO1xuICAgIGNvbnN0IGdldERhdGEgPSAocGFyYW1zKT0+ZmV0Y2hSZXRyeShkYXRhSHJlZiwgaXNTZXJ2ZXJSZW5kZXIgPyAzIDogMSwge1xuICAgICAgICAgICAgaGVhZGVyczogT2JqZWN0LmFzc2lnbih7fSwgaXNQcmVmZXRjaCA/IHtcbiAgICAgICAgICAgICAgICBwdXJwb3NlOiBcInByZWZldGNoXCJcbiAgICAgICAgICAgIH0gOiB7fSwgaXNQcmVmZXRjaCAmJiBoYXNNaWRkbGV3YXJlID8ge1xuICAgICAgICAgICAgICAgIFwieC1taWRkbGV3YXJlLXByZWZldGNoXCI6IFwiMVwiXG4gICAgICAgICAgICB9IDoge30pLFxuICAgICAgICAgICAgbWV0aG9kOiAoX3BhcmFtc19tZXRob2QgPSBwYXJhbXMgPT0gbnVsbCA/IHZvaWQgMCA6IHBhcmFtcy5tZXRob2QpICE9IG51bGwgPyBfcGFyYW1zX21ldGhvZCA6IFwiR0VUXCJcbiAgICAgICAgfSkudGhlbigocmVzcG9uc2UpPT57XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uub2sgJiYgKHBhcmFtcyA9PSBudWxsID8gdm9pZCAwIDogcGFyYW1zLm1ldGhvZCkgPT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUhyZWYsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBqc29uOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVLZXlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS50aGVuKCh0ZXh0KT0+e1xuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGVuIHRoZSBkYXRhIHJlc3BvbnNlIGlzIGEgcmVkaXJlY3QgYmVjYXVzZSBvZiBhIG1pZGRsZXdhcmVcbiAgICAgICAgICAgICAqIHdlIGRvIG5vdCBjb25zaWRlciBpdCBhbiBlcnJvci4gVGhlIGhlYWRlcnMgbXVzdCBicmluZyB0aGVcbiAgICAgICAgICAgICAqIG1hcHBlZCBsb2NhdGlvbi5cbiAgICAgICAgICAgICAqIFRPRE86IENoYW5nZSB0aGUgc3RhdHVzIGNvZGUgaW4gdGhlIGhhbmRsZXIuXG4gICAgICAgICAgICAgKi8gaWYgKGhhc01pZGRsZXdhcmUgJiYgW1xuICAgICAgICAgICAgICAgICAgICAgICAgMzAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgMzAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgMzA3LFxuICAgICAgICAgICAgICAgICAgICAgICAgMzA4XG4gICAgICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhSHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb246IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90cnlUb1BhcnNlQXNKU09OO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfdHJ5VG9QYXJzZUFzSlNPTiA9IHRyeVRvUGFyc2VBc0pTT04odGV4dCkpID09IG51bGwgPyB2b2lkIDAgOiBfdHJ5VG9QYXJzZUFzSlNPTi5ub3RGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFIcmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RGb3VuZDogU1NHX0RBVEFfTk9UX0ZPVU5EXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZUtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBzdGF0aWMgcHJvcHNcIik7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2Ugc2hvdWxkIG9ubHkgdHJpZ2dlciBhIHNlcnZlci1zaWRlIHRyYW5zaXRpb24gaWYgdGhpcyB3YXNcbiAgICAgICAgICAgICAqIGNhdXNlZCBvbiBhIGNsaWVudC1zaWRlIHRyYW5zaXRpb24uIE90aGVyd2lzZSwgd2UnZCBnZXQgaW50b1xuICAgICAgICAgICAgICogYW4gaW5maW5pdGUgbG9vcC5cbiAgICAgICAgICAgICAqLyBpZiAoIWlzU2VydmVyUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3JvdXRlbG9hZGVyLm1hcmtBc3NldEVycm9yKShlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFIcmVmLFxuICAgICAgICAgICAgICAgICAgICBqc29uOiBwYXJzZUpTT04gPyB0cnlUb1BhcnNlQXNKU09OKHRleHQpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS50aGVuKChkYXRhKT0+e1xuICAgICAgICAgICAgaWYgKCFwZXJzaXN0Q2FjaGUgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiIHx8IGRhdGEucmVzcG9uc2UuaGVhZGVycy5nZXQoXCJ4LW1pZGRsZXdhcmUtY2FjaGVcIikgPT09IFwibm8tY2FjaGVcIikge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBpbmZsaWdodENhY2hlW2NhY2hlS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KS5jYXRjaCgoZXJyKT0+e1xuICAgICAgICAgICAgaWYgKCF1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgaW5mbGlnaHRDYWNoZVtjYWNoZUtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoLy8gY2hyb21lXG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gXCJGYWlsZWQgdG8gZmV0Y2hcIiB8fCAvLyBmaXJlZm94XG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gXCJOZXR3b3JrRXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGZldGNoIHJlc291cmNlLlwiIHx8IC8vIHNhZmFyaVxuICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT09IFwiTG9hZCBmYWlsZWRcIikge1xuICAgICAgICAgICAgICAgICgwLCBfcm91dGVsb2FkZXIubWFya0Fzc2V0RXJyb3IpKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgIC8vIHdoZW4gc2tpcHBpbmcgY2xpZW50IGNhY2hlIHdlIHdhaXQgdG8gdXBkYXRlXG4gICAgLy8gaW5mbGlnaHQgY2FjaGUgdW50aWwgc3VjY2Vzc2Z1bCBkYXRhIHJlc3BvbnNlXG4gICAgLy8gdGhpcyBhbGxvd3MgcmFjaW5nIGNsaWNrIGV2ZW50IHdpdGggZmV0Y2hpbmcgbmV3ZXIgZGF0YVxuICAgIC8vIHdpdGhvdXQgYmxvY2tpbmcgbmF2aWdhdGlvbiB3aGVuIHN0YWxlIGRhdGEgaXMgYXZhaWxhYmxlXG4gICAgaWYgKHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSAmJiBwZXJzaXN0Q2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIGdldERhdGEoe30pLnRoZW4oKGRhdGEpPT57XG4gICAgICAgICAgICBpbmZsaWdodENhY2hlW2NhY2hlS2V5XSA9IFByb21pc2UucmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGluZmxpZ2h0Q2FjaGVbY2FjaGVLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGluZmxpZ2h0Q2FjaGVbY2FjaGVLZXldO1xuICAgIH1cbiAgICByZXR1cm4gaW5mbGlnaHRDYWNoZVtjYWNoZUtleV0gPSBnZXREYXRhKGlzQmFja2dyb3VuZCA/IHtcbiAgICAgICAgbWV0aG9kOiBcIkhFQURcIlxuICAgIH0gOiB7fSk7XG59XG5mdW5jdGlvbiBjcmVhdGVLZXkoKSB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHBhcmFtKSB7XG4gICAgbGV0IHsgdXJsLCByb3V0ZXIgfSA9IHBhcmFtO1xuICAgIC8vIGVuc3VyZSB3ZSBkb24ndCB0cmlnZ2VyIGEgaGFyZCBuYXZpZ2F0aW9uIHRvIHRoZSBzYW1lXG4gICAgLy8gVVJMIGFzIHRoaXMgY2FuIGVuZCB1cCB3aXRoIGFuIGluZmluaXRlIHJlZnJlc2hcbiAgICBpZiAodXJsID09PSAoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKSgoMCwgX2FkZGxvY2FsZS5hZGRMb2NhbGUpKHJvdXRlci5hc1BhdGgsIHJvdXRlci5sb2NhbGUpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhcmlhbnQ6IGF0dGVtcHRlZCB0byBoYXJkIG5hdmlnYXRlIHRvIHRoZSBzYW1lIFVSTCBcIiArIHVybCArIFwiIFwiICsgbG9jYXRpb24uaHJlZik7XG4gICAgfVxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xufVxuY29uc3QgZ2V0Q2FuY2VsbGVkSGFuZGxlciA9IChwYXJhbSk9PntcbiAgICBsZXQgeyByb3V0ZSwgcm91dGVyIH0gPSBwYXJhbTtcbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgY29uc3QgY2FuY2VsID0gcm91dGVyLmNsYyA9ICgpPT57XG4gICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVDYW5jZWxsZWQgPSAoKT0+e1xuICAgICAgICBpZiAoY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignQWJvcnQgZmV0Y2hpbmcgY29tcG9uZW50IGZvciByb3V0ZTogXCInICsgcm91dGUgKyAnXCInKTtcbiAgICAgICAgICAgIGVycm9yLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FuY2VsID09PSByb3V0ZXIuY2xjKSB7XG4gICAgICAgICAgICByb3V0ZXIuY2xjID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUNhbmNlbGxlZDtcbn07XG5jbGFzcyBSb3V0ZXIge1xuICAgIHJlbG9hZCgpIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH1cbiAgICAvKipcbiAgICogR28gYmFjayBpbiBoaXN0b3J5XG4gICAqLyBiYWNrKCkge1xuICAgICAgICB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG4gICAgfVxuICAgIC8qKlxuICAgKiBHbyBmb3J3YXJkIGluIGhpc3RvcnlcbiAgICovIGZvcndhcmQoKSB7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LmZvcndhcmQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAqIFBlcmZvcm1zIGEgYHB1c2hTdGF0ZWAgd2l0aCBhcmd1bWVudHNcbiAgICogQHBhcmFtIHVybCBvZiB0aGUgcm91dGVcbiAgICogQHBhcmFtIGFzIG1hc2tzIGB1cmxgIGZvciB0aGUgYnJvd3NlclxuICAgKiBAcGFyYW0gb3B0aW9ucyBvYmplY3QgeW91IGNhbiBkZWZpbmUgYHNoYWxsb3dgIGFuZCBvdGhlciBvcHRpb25zXG4gICAqLyBwdXNoKHVybCwgYXMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgb3B0aW9ucyA9IHt9O1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1NDUk9MTF9SRVNUT1JBVElPTikge1xuICAgICAgICAgICAgLy8gVE9ETzogcmVtb3ZlIGluIHRoZSBmdXR1cmUgd2hlbiB3ZSB1cGRhdGUgaGlzdG9yeSBiZWZvcmUgcm91dGUgY2hhbmdlXG4gICAgICAgICAgICAvLyBpcyBjb21wbGV0ZSwgYXMgdGhlIHBvcHN0YXRlIGV2ZW50IHNob3VsZCBoYW5kbGUgdGhpcyBjYXB0dXJlLlxuICAgICAgICAgICAgaWYgKG1hbnVhbFNjcm9sbFJlc3RvcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU25hcHNob3Qgc2Nyb2xsIHBvc2l0aW9uIHJpZ2h0IGJlZm9yZSBuYXZpZ2F0aW5nIHRvIGEgbmV3IHBhZ2U6XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJfX25leHRfc2Nyb2xsX1wiICsgdGhpcy5fa2V5LCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBzZWxmLnBhZ2VYT2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogc2VsZi5wYWdlWU9mZnNldFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAoeyB1cmwsIGFzIH0gPSBwcmVwYXJlVXJsQXModGhpcywgdXJsLCBhcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFuZ2UoXCJwdXNoU3RhdGVcIiwgdXJsLCBhcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgKiBQZXJmb3JtcyBhIGByZXBsYWNlU3RhdGVgIHdpdGggYXJndW1lbnRzXG4gICAqIEBwYXJhbSB1cmwgb2YgdGhlIHJvdXRlXG4gICAqIEBwYXJhbSBhcyBtYXNrcyBgdXJsYCBmb3IgdGhlIGJyb3dzZXJcbiAgICogQHBhcmFtIG9wdGlvbnMgb2JqZWN0IHlvdSBjYW4gZGVmaW5lIGBzaGFsbG93YCBhbmQgb3RoZXIgb3B0aW9uc1xuICAgKi8gcmVwbGFjZSh1cmwsIGFzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgKHsgdXJsLCBhcyB9ID0gcHJlcGFyZVVybEFzKHRoaXMsIHVybCwgYXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbmdlKFwicmVwbGFjZVN0YXRlXCIsIHVybCwgYXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBhc3luYyBfYmZsKGFzLCByZXNvbHZlZEFzLCBsb2NhbGUsIHNraXBOYXZpZ2F0ZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9ST1VURVJfRklMVEVSX0VOQUJMRUQpIHtcbiAgICAgICAgICAgIGxldCBtYXRjaGVzQmZsU3RhdGljID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgbWF0Y2hlc0JmbER5bmFtaWMgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3VyQXMgb2YgW1xuICAgICAgICAgICAgICAgIGFzLFxuICAgICAgICAgICAgICAgIHJlc29sdmVkQXNcbiAgICAgICAgICAgIF0pe1xuICAgICAgICAgICAgICAgIGlmIChjdXJBcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc05vU2xhc2ggPSAoMCwgX3JlbW92ZXRyYWlsaW5nc2xhc2gucmVtb3ZlVHJhaWxpbmdTbGFzaCkobmV3IFVSTChjdXJBcywgXCJodHRwOi8vblwiKS5wYXRobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzTm9TbGFzaExvY2FsZSA9ICgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKCgwLCBfYWRkbG9jYWxlLmFkZExvY2FsZSkoYXNOb1NsYXNoLCBsb2NhbGUgfHwgdGhpcy5sb2NhbGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFzTm9TbGFzaCAhPT0gKDAsIF9yZW1vdmV0cmFpbGluZ3NsYXNoLnJlbW92ZVRyYWlsaW5nU2xhc2gpKG5ldyBVUkwodGhpcy5hc1BhdGgsIFwiaHR0cDovL25cIikucGF0aG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXNfX2JmbF9zLCBfdGhpc19fYmZsX3MxO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlc0JmbFN0YXRpYyA9IG1hdGNoZXNCZmxTdGF0aWMgfHwgISEoKF90aGlzX19iZmxfcyA9IHRoaXMuX2JmbF9zKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXNfX2JmbF9zLmNvbnRhaW5zKGFzTm9TbGFzaCkpIHx8ICEhKChfdGhpc19fYmZsX3MxID0gdGhpcy5fYmZsX3MpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpc19fYmZsX3MxLmNvbnRhaW5zKGFzTm9TbGFzaExvY2FsZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxpemVkQVMgb2YgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzTm9TbGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc05vU2xhc2hMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGFueSBzdWItcGF0aCBvZiBhcyBtYXRjaGVzIGEgZHluYW1pYyBmaWx0ZXIgcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IHNob3VsZCBiZSBoYXJkIG5hdmlnYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1ckFzUGFydHMgPSBub3JtYWxpemVkQVMuc3BsaXQoXCIvXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7ICFtYXRjaGVzQmZsRHluYW1pYyAmJiBpIDwgY3VyQXNQYXJ0cy5sZW5ndGggKyAxOyBpKyspe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXNfX2JmbF9kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UGFydCA9IGN1ckFzUGFydHMuc2xpY2UoMCwgaSkuam9pbihcIi9cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGFydCAmJiAoKF90aGlzX19iZmxfZCA9IHRoaXMuX2JmbF9kKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXNfX2JmbF9kLmNvbnRhaW5zKGN1cnJlbnRQYXJ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXNCZmxEeW5hbWljID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGNsaWVudCByb3V0ZXIgZmlsdGVyIGlzIG1hdGNoZWQgdGhlbiB3ZSB0cmlnZ2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGhhcmQgbmF2aWdhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXNCZmxTdGF0aWMgfHwgbWF0Y2hlc0JmbER5bmFtaWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2tpcE5hdmlnYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkoKDAsIF9hZGRsb2NhbGUuYWRkTG9jYWxlKShhcywgbG9jYWxlIHx8IHRoaXMubG9jYWxlLCB0aGlzLmRlZmF1bHRMb2NhbGUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyOiB0aGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCgpPT57fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhc3luYyBjaGFuZ2UobWV0aG9kLCB1cmwsIGFzLCBvcHRpb25zLCBmb3JjZWRTY3JvbGwpIHtcbiAgICAgICAgdmFyIF90aGlzX2NvbXBvbmVudHNfcGF0aG5hbWU7XG4gICAgICAgIGlmICghKDAsIF9pc2xvY2FsdXJsLmlzTG9jYWxVUkwpKHVybCkpIHtcbiAgICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgcm91dGVyOiB0aGlzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXQVJOSU5HOiBgX2hgIGlzIGFuIGludGVybmFsIG9wdGlvbiBmb3IgaGFuZGluZyBOZXh0LmpzIGNsaWVudC1zaWRlXG4gICAgICAgIC8vIGh5ZHJhdGlvbi4gWW91ciBhcHAgc2hvdWxkIF9uZXZlcl8gdXNlIHRoaXMgcHJvcGVydHkuIEl0IG1heSBjaGFuZ2UgYXRcbiAgICAgICAgLy8gYW55IHRpbWUgd2l0aG91dCBub3RpY2UuXG4gICAgICAgIGNvbnN0IGlzUXVlcnlVcGRhdGluZyA9IG9wdGlvbnMuX2ggPT09IDE7XG4gICAgICAgIGlmICghaXNRdWVyeVVwZGF0aW5nICYmICFvcHRpb25zLnNoYWxsb3cpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2JmbChhcywgdW5kZWZpbmVkLCBvcHRpb25zLmxvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNob3VsZFJlc29sdmVIcmVmID0gaXNRdWVyeVVwZGF0aW5nIHx8IG9wdGlvbnMuX3Nob3VsZFJlc29sdmVIcmVmIHx8ICgwLCBfcGFyc2VwYXRoLnBhcnNlUGF0aCkodXJsKS5wYXRobmFtZSA9PT0gKDAsIF9wYXJzZXBhdGgucGFyc2VQYXRoKShhcykucGF0aG5hbWU7XG4gICAgICAgIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuc3RhdGVcbiAgICAgICAgfTtcbiAgICAgICAgLy8gZm9yIHN0YXRpYyBwYWdlcyB3aXRoIHF1ZXJ5IHBhcmFtcyBpbiB0aGUgVVJMIHdlIGRlbGF5XG4gICAgICAgIC8vIG1hcmtpbmcgdGhlIHJvdXRlciByZWFkeSB1bnRpbCBhZnRlciB0aGUgcXVlcnkgaXMgdXBkYXRlZFxuICAgICAgICAvLyBvciBhIG5hdmlnYXRpb24gaGFzIG9jY3VycmVkXG4gICAgICAgIGNvbnN0IHJlYWR5U3RhdGVDaGFuZ2UgPSB0aGlzLmlzUmVhZHkgIT09IHRydWU7XG4gICAgICAgIHRoaXMuaXNSZWFkeSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGlzU3NyID0gdGhpcy5pc1NzcjtcbiAgICAgICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTc3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhIHJvdXRlIHRyYW5zaXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyBiZWZvcmVcbiAgICAgICAgLy8gdGhlIHF1ZXJ5IHVwZGF0aW5nIGlzIHRyaWdnZXJlZCBpZ25vcmUgcXVlcnkgdXBkYXRpbmdcbiAgICAgICAgaWYgKGlzUXVlcnlVcGRhdGluZyAmJiB0aGlzLmNsYykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZMb2NhbGUgPSBuZXh0U3RhdGUubG9jYWxlO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgICAgICAgbmV4dFN0YXRlLmxvY2FsZSA9IG9wdGlvbnMubG9jYWxlID09PSBmYWxzZSA/IHRoaXMuZGVmYXVsdExvY2FsZSA6IG9wdGlvbnMubG9jYWxlIHx8IG5leHRTdGF0ZS5sb2NhbGU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5sb2NhbGUgPSBuZXh0U3RhdGUubG9jYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkQXMgPSAoMCwgX3BhcnNlcmVsYXRpdmV1cmwucGFyc2VSZWxhdGl2ZVVybCkoKDAsIF9oYXNiYXNlcGF0aC5oYXNCYXNlUGF0aCkoYXMpID8gKDAsIF9yZW1vdmViYXNlcGF0aC5yZW1vdmVCYXNlUGF0aCkoYXMpIDogYXMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxlUGF0aFJlc3VsdCA9ICgwLCBfbm9ybWFsaXplbG9jYWxlcGF0aC5ub3JtYWxpemVMb2NhbGVQYXRoKShwYXJzZWRBcy5wYXRobmFtZSwgdGhpcy5sb2NhbGVzKTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVQYXRoUmVzdWx0LmRldGVjdGVkTG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgbmV4dFN0YXRlLmxvY2FsZSA9IGxvY2FsZVBhdGhSZXN1bHQuZGV0ZWN0ZWRMb2NhbGU7XG4gICAgICAgICAgICAgICAgcGFyc2VkQXMucGF0aG5hbWUgPSAoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKShwYXJzZWRBcy5wYXRobmFtZSk7XG4gICAgICAgICAgICAgICAgYXMgPSAoMCwgX2Zvcm1hdHVybC5mb3JtYXRXaXRoVmFsaWRhdGlvbikocGFyc2VkQXMpO1xuICAgICAgICAgICAgICAgIHVybCA9ICgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKCgwLCBfbm9ybWFsaXplbG9jYWxlcGF0aC5ub3JtYWxpemVMb2NhbGVQYXRoKSgoMCwgX2hhc2Jhc2VwYXRoLmhhc0Jhc2VQYXRoKSh1cmwpID8gKDAsIF9yZW1vdmViYXNlcGF0aC5yZW1vdmVCYXNlUGF0aCkodXJsKSA6IHVybCwgdGhpcy5sb2NhbGVzKS5wYXRobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZGlkTmF2aWdhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gd3JhcCB0aGlzIGluIHRoZSBlbnYgY2hlY2sgYWdhaW4gc2luY2UgcmVnZW5lcmF0b3IgcnVudGltZVxuICAgICAgICAgICAgLy8gbW92ZXMgdGhpcyBvbiBpdHMgb3duIGR1ZSB0byB0aGUgcmV0dXJuXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgICAgICAgICAgIHZhciBfdGhpc19sb2NhbGVzO1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBsb2NhbGUgaXNuJ3QgY29uZmlndXJlZCBoYXJkIG5hdmlnYXRlIHRvIHNob3cgNDA0IHBhZ2VcbiAgICAgICAgICAgICAgICBpZiAoISgoX3RoaXNfbG9jYWxlcyA9IHRoaXMubG9jYWxlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzX2xvY2FsZXMuaW5jbHVkZXMobmV4dFN0YXRlLmxvY2FsZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lID0gKDAsIF9hZGRsb2NhbGUuYWRkTG9jYWxlKShwYXJzZWRBcy5wYXRobmFtZSwgbmV4dFN0YXRlLmxvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogKDAsIF9mb3JtYXR1cmwuZm9ybWF0V2l0aFZhbGlkYXRpb24pKHBhcnNlZEFzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlcjogdGhpc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB3YXMgcHJldmlvdXNseSBhIHJldHVybiBidXQgd2FzIHJlbW92ZWQgaW4gZmF2b3JcbiAgICAgICAgICAgICAgICAgICAgLy8gb2YgYmV0dGVyIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3aXRoIHJlZ2VuZXJhdG9yIHJ1bnRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGlkTmF2aWdhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRldGVjdGVkRG9tYWluID0gKDAsIF9kZXRlY3Rkb21haW5sb2NhbGUuZGV0ZWN0RG9tYWluTG9jYWxlKSh0aGlzLmRvbWFpbkxvY2FsZXMsIHVuZGVmaW5lZCwgbmV4dFN0YXRlLmxvY2FsZSk7XG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHdyYXAgdGhpcyBpbiB0aGUgZW52IGNoZWNrIGFnYWluIHNpbmNlIHJlZ2VuZXJhdG9yIHJ1bnRpbWVcbiAgICAgICAgICAgIC8vIG1vdmVzIHRoaXMgb24gaXRzIG93biBkdWUgdG8gdGhlIHJldHVyblxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBhcmUgbmF2aWdhdGluZyB0byBhIGRvbWFpbiBsb2NhbGUgZW5zdXJlIHdlIHJlZGlyZWN0IHRvIHRoZVxuICAgICAgICAgICAgICAgIC8vIGNvcnJlY3QgZG9tYWluXG4gICAgICAgICAgICAgICAgaWYgKCFkaWROYXZpZ2F0ZSAmJiBkZXRlY3RlZERvbWFpbiAmJiB0aGlzLmlzTG9jYWxlRG9tYWluICYmIHNlbGYubG9jYXRpb24uaG9zdG5hbWUgIT09IGRldGVjdGVkRG9tYWluLmRvbWFpbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc05vQmFzZVBhdGggPSAoMCwgX3JlbW92ZWJhc2VwYXRoLnJlbW92ZUJhc2VQYXRoKShhcyk7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXCJodHRwXCIgKyAoZGV0ZWN0ZWREb21haW4uaHR0cCA/IFwiXCIgOiBcInNcIikgKyBcIjovL1wiICsgZGV0ZWN0ZWREb21haW4uZG9tYWluICsgKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkoXCJcIiArIChuZXh0U3RhdGUubG9jYWxlID09PSBkZXRlY3RlZERvbWFpbi5kZWZhdWx0TG9jYWxlID8gXCJcIiA6IFwiL1wiICsgbmV4dFN0YXRlLmxvY2FsZSkgKyAoYXNOb0Jhc2VQYXRoID09PSBcIi9cIiA/IFwiXCIgOiBhc05vQmFzZVBhdGgpIHx8IFwiL1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlcjogdGhpc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB3YXMgcHJldmlvdXNseSBhIHJldHVybiBidXQgd2FzIHJlbW92ZWQgaW4gZmF2b3JcbiAgICAgICAgICAgICAgICAgICAgLy8gb2YgYmV0dGVyIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3aXRoIHJlZ2VuZXJhdG9yIHJ1bnRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGlkTmF2aWdhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkaWROYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoKT0+e30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG1hcmtpbmcgcm91dGUgY2hhbmdlcyBhcyBhIG5hdmlnYXRpb24gc3RhcnQgZW50cnlcbiAgICAgICAgaWYgKF91dGlscy5TVCkge1xuICAgICAgICAgICAgcGVyZm9ybWFuY2UubWFyayhcInJvdXRlQ2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc2hhbGxvdyA9IGZhbHNlLCBzY3JvbGwgPSB0cnVlIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCByb3V0ZVByb3BzID0ge1xuICAgICAgICAgICAgc2hhbGxvd1xuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5faW5GbGlnaHRSb3V0ZSAmJiB0aGlzLmNsYykge1xuICAgICAgICAgICAgaWYgKCFpc1Nzcikge1xuICAgICAgICAgICAgICAgIFJvdXRlci5ldmVudHMuZW1pdChcInJvdXRlQ2hhbmdlRXJyb3JcIiwgYnVpbGRDYW5jZWxsYXRpb25FcnJvcigpLCB0aGlzLl9pbkZsaWdodFJvdXRlLCByb3V0ZVByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xjKCk7XG4gICAgICAgICAgICB0aGlzLmNsYyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgYXMgPSAoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKSgoMCwgX2FkZGxvY2FsZS5hZGRMb2NhbGUpKCgwLCBfaGFzYmFzZXBhdGguaGFzQmFzZVBhdGgpKGFzKSA/ICgwLCBfcmVtb3ZlYmFzZXBhdGgucmVtb3ZlQmFzZVBhdGgpKGFzKSA6IGFzLCBvcHRpb25zLmxvY2FsZSwgdGhpcy5kZWZhdWx0TG9jYWxlKSk7XG4gICAgICAgIGNvbnN0IGNsZWFuZWRBcyA9ICgwLCBfcmVtb3ZlbG9jYWxlLnJlbW92ZUxvY2FsZSkoKDAsIF9oYXNiYXNlcGF0aC5oYXNCYXNlUGF0aCkoYXMpID8gKDAsIF9yZW1vdmViYXNlcGF0aC5yZW1vdmVCYXNlUGF0aCkoYXMpIDogYXMsIG5leHRTdGF0ZS5sb2NhbGUpO1xuICAgICAgICB0aGlzLl9pbkZsaWdodFJvdXRlID0gYXM7XG4gICAgICAgIGNvbnN0IGxvY2FsZUNoYW5nZSA9IHByZXZMb2NhbGUgIT09IG5leHRTdGF0ZS5sb2NhbGU7XG4gICAgICAgIC8vIElmIHRoZSB1cmwgY2hhbmdlIGlzIG9ubHkgcmVsYXRlZCB0byBhIGhhc2ggY2hhbmdlXG4gICAgICAgIC8vIFdlIHNob3VsZCBub3QgcHJvY2VlZC4gV2Ugc2hvdWxkIG9ubHkgY2hhbmdlIHRoZSBzdGF0ZS5cbiAgICAgICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcgJiYgdGhpcy5vbmx5QUhhc2hDaGFuZ2UoY2xlYW5lZEFzKSAmJiAhbG9jYWxlQ2hhbmdlKSB7XG4gICAgICAgICAgICBuZXh0U3RhdGUuYXNQYXRoID0gY2xlYW5lZEFzO1xuICAgICAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KFwiaGFzaENoYW5nZVN0YXJ0XCIsIGFzLCByb3V0ZVByb3BzKTtcbiAgICAgICAgICAgIC8vIFRPRE86IGRvIHdlIG5lZWQgdGhlIHJlc29sdmVkIGhyZWYgd2hlbiBvbmx5IGEgaGFzaCBjaGFuZ2U/XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKG1ldGhvZCwgdXJsLCBhcywge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2Nyb2xsOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0hhc2goY2xlYW5lZEFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXQobmV4dFN0YXRlLCB0aGlzLmNvbXBvbmVudHNbbmV4dFN0YXRlLnJvdXRlXSwgbnVsbCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIF9pc2Vycm9yLmRlZmF1bHQpKGVycikgJiYgZXJyLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoXCJyb3V0ZUNoYW5nZUVycm9yXCIsIGVyciwgY2xlYW5lZEFzLCByb3V0ZVByb3BzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KFwiaGFzaENoYW5nZUNvbXBsZXRlXCIsIGFzLCByb3V0ZVByb3BzKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXJzZWQgPSAoMCwgX3BhcnNlcmVsYXRpdmV1cmwucGFyc2VSZWxhdGl2ZVVybCkodXJsKTtcbiAgICAgICAgbGV0IHsgcGF0aG5hbWUsIHF1ZXJ5IH0gPSBwYXJzZWQ7XG4gICAgICAgIC8vIFRoZSBidWlsZCBtYW5pZmVzdCBuZWVkcyB0byBiZSBsb2FkZWQgYmVmb3JlIGF1dG8tc3RhdGljIGR5bmFtaWMgcGFnZXNcbiAgICAgICAgLy8gZ2V0IHRoZWlyIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gYWxsb3cgZW5zdXJpbmcgdGhleSBjYW4gYmUgcGFyc2VkIHByb3Blcmx5XG4gICAgICAgIC8vIHdoZW4gcmV3cml0dGVuIHRvXG4gICAgICAgIGxldCBwYWdlcywgcmV3cml0ZXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBbcGFnZXMsIHsgX19yZXdyaXRlczogcmV3cml0ZXMgfV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVyLmdldFBhZ2VMaXN0KCksXG4gICAgICAgICAgICAgICAgKDAsIF9yb3V0ZWxvYWRlci5nZXRDbGllbnRCdWlsZE1hbmlmZXN0KSgpLFxuICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlci5nZXRNaWRkbGV3YXJlKClcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGZhaWwgdG8gcmVzb2x2ZSB0aGUgcGFnZSBsaXN0IG9yIGNsaWVudC1idWlsZCBtYW5pZmVzdCwgd2UgbXVzdFxuICAgICAgICAgICAgLy8gZG8gYSBzZXJ2ZXItc2lkZSB0cmFuc2l0aW9uOlxuICAgICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oe1xuICAgICAgICAgICAgICAgIHVybDogYXMsXG4gICAgICAgICAgICAgICAgcm91dGVyOiB0aGlzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBhc2tlZCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgVVJMIHdlIHNob3VsZCByZWxvYWQgdGhlIGN1cnJlbnQgcGFnZVxuICAgICAgICAvLyAobm90IGxvY2F0aW9uLnJlbG9hZCgpIGJ1dCByZWxvYWQgZ2V0SW5pdGlhbFByb3BzIGFuZCBvdGhlciBOZXh0LmpzIHN0dWZmcylcbiAgICAgICAgLy8gV2UgYWxzbyBuZWVkIHRvIHNldCB0aGUgbWV0aG9kID0gcmVwbGFjZVN0YXRlIGFsd2F5c1xuICAgICAgICAvLyBhcyB0aGlzIHNob3VsZCBub3QgZ28gaW50byB0aGUgaGlzdG9yeSAoVGhhdCdzIGhvdyBicm93c2VycyB3b3JrKVxuICAgICAgICAvLyBXZSBzaG91bGQgY29tcGFyZSB0aGUgbmV3IGFzUGF0aCB0byB0aGUgY3VycmVudCBhc1BhdGgsIG5vdCB0aGUgdXJsXG4gICAgICAgIGlmICghdGhpcy51cmxJc05ldyhjbGVhbmVkQXMpICYmICFsb2NhbGVDaGFuZ2UpIHtcbiAgICAgICAgICAgIG1ldGhvZCA9IFwicmVwbGFjZVN0YXRlXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgbmVlZCB0byByZXNvbHZlIHRoZSBhcyB2YWx1ZSB1c2luZyByZXdyaXRlcyBmb3IgZHluYW1pYyBTU0dcbiAgICAgICAgLy8gcGFnZXMgdG8gYWxsb3cgYnVpbGRpbmcgdGhlIGRhdGEgVVJMIGNvcnJlY3RseVxuICAgICAgICBsZXQgcmVzb2x2ZWRBcyA9IGFzO1xuICAgICAgICAvLyB1cmwgYW5kIGFzIHNob3VsZCBhbHdheXMgYmUgcHJlZml4ZWQgd2l0aCBiYXNlUGF0aCBieSB0aGlzXG4gICAgICAgIC8vIHBvaW50IGJ5IGVpdGhlciBuZXh0L2xpbmsgb3Igcm91dGVyLnB1c2gvcmVwbGFjZSBzbyBzdHJpcCB0aGVcbiAgICAgICAgLy8gYmFzZVBhdGggZnJvbSB0aGUgcGF0aG5hbWUgdG8gbWF0Y2ggdGhlIHBhZ2VzIGRpciAxLXRvLTFcbiAgICAgICAgcGF0aG5hbWUgPSBwYXRobmFtZSA/ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKSgoMCwgX3JlbW92ZWJhc2VwYXRoLnJlbW92ZUJhc2VQYXRoKShwYXRobmFtZSkpIDogcGF0aG5hbWU7XG4gICAgICAgIGxldCByb3V0ZSA9ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShwYXRobmFtZSk7XG4gICAgICAgIGNvbnN0IHBhcnNlZEFzUGF0aG5hbWUgPSBhcy5zdGFydHNXaXRoKFwiL1wiKSAmJiAoMCwgX3BhcnNlcmVsYXRpdmV1cmwucGFyc2VSZWxhdGl2ZVVybCkoYXMpLnBhdGhuYW1lO1xuICAgICAgICAvLyBpZiB3ZSBkZXRlY3RlZCB0aGUgcGF0aCBhcyBhcHAgcm91dGUgZHVyaW5nIHByZWZldGNoaW5nXG4gICAgICAgIC8vIHRyaWdnZXIgaGFyZCBuYXZpZ2F0aW9uXG4gICAgICAgIGlmICgoX3RoaXNfY29tcG9uZW50c19wYXRobmFtZSA9IHRoaXMuY29tcG9uZW50c1twYXRobmFtZV0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhpc19jb21wb25lbnRzX3BhdGhuYW1lLl9fYXBwUm91dGVyKSB7XG4gICAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICAgICAgdXJsOiBhcyxcbiAgICAgICAgICAgICAgICByb3V0ZXI6IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCgpPT57fSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNNaWRkbGV3YXJlUmV3cml0ZSA9ICEhKHBhcnNlZEFzUGF0aG5hbWUgJiYgcm91dGUgIT09IHBhcnNlZEFzUGF0aG5hbWUgJiYgKCEoMCwgX2lzZHluYW1pYy5pc0R5bmFtaWNSb3V0ZSkocm91dGUpIHx8ICEoMCwgX3JvdXRlbWF0Y2hlci5nZXRSb3V0ZU1hdGNoZXIpKCgwLCBfcm91dGVyZWdleC5nZXRSb3V0ZVJlZ2V4KShyb3V0ZSkpKHBhcnNlZEFzUGF0aG5hbWUpKSk7XG4gICAgICAgIC8vIHdlIGRvbid0IGF0dGVtcHQgcmVzb2x2ZSBhc1BhdGggd2hlbiB3ZSBuZWVkIHRvIGV4ZWN1dGVcbiAgICAgICAgLy8gbWlkZGxld2FyZSBhcyB0aGUgcmVzb2x2aW5nIHdpbGwgb2NjdXIgc2VydmVyLXNpZGVcbiAgICAgICAgY29uc3QgaXNNaWRkbGV3YXJlTWF0Y2ggPSAhb3B0aW9ucy5zaGFsbG93ICYmIGF3YWl0IG1hdGNoZXNNaWRkbGV3YXJlKHtcbiAgICAgICAgICAgIGFzUGF0aDogYXMsXG4gICAgICAgICAgICBsb2NhbGU6IG5leHRTdGF0ZS5sb2NhbGUsXG4gICAgICAgICAgICByb3V0ZXI6IHRoaXNcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc1F1ZXJ5VXBkYXRpbmcgJiYgaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgICAgICAgIHNob3VsZFJlc29sdmVIcmVmID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFJlc29sdmVIcmVmICYmIHBhdGhuYW1lICE9PSBcIi9fZXJyb3JcIikge1xuICAgICAgICAgICAgb3B0aW9ucy5fc2hvdWxkUmVzb2x2ZUhyZWYgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9IQVNfUkVXUklURVMgJiYgYXMuc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXdyaXRlc1Jlc3VsdCA9ICgwLCBfcmVzb2x2ZXJld3JpdGVzLmRlZmF1bHQpKCgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKCgwLCBfYWRkbG9jYWxlLmFkZExvY2FsZSkoY2xlYW5lZEFzLCBuZXh0U3RhdGUubG9jYWxlKSwgdHJ1ZSksIHBhZ2VzLCByZXdyaXRlcywgcXVlcnksIChwKT0+cmVzb2x2ZUR5bmFtaWNSb3V0ZShwLCBwYWdlcyksIHRoaXMubG9jYWxlcyk7XG4gICAgICAgICAgICAgICAgaWYgKHJld3JpdGVzUmVzdWx0LmV4dGVybmFsRGVzdCkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyOiB0aGlzXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEFzID0gcmV3cml0ZXNSZXN1bHQuYXNQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmV3cml0ZXNSZXN1bHQubWF0Y2hlZFBhZ2UgJiYgcmV3cml0ZXNSZXN1bHQucmVzb2x2ZWRIcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgZGlyZWN0bHkgbWF0Y2hlcyBhIHBhZ2Ugd2UgbmVlZCB0byB1cGRhdGUgdGhlIGhyZWYgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gYWxsb3cgdGhlIGNvcnJlY3QgcGFnZSBjaHVuayB0byBiZSBsb2FkZWRcbiAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUgPSByZXdyaXRlc1Jlc3VsdC5yZXNvbHZlZEhyZWY7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZC5wYXRobmFtZSA9ICgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKHBhdGhuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gKDAsIF9mb3JtYXR1cmwuZm9ybWF0V2l0aFZhbGlkYXRpb24pKHBhcnNlZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnNlZC5wYXRobmFtZSA9IHJlc29sdmVEeW5hbWljUm91dGUocGF0aG5hbWUsIHBhZ2VzKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkLnBhdGhuYW1lICE9PSBwYXRobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9IHBhcnNlZC5wYXRobmFtZTtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkocGF0aG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSAoMCwgX2Zvcm1hdHVybC5mb3JtYXRXaXRoVmFsaWRhdGlvbikocGFyc2VkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoISgwLCBfaXNsb2NhbHVybC5pc0xvY2FsVVJMKShhcykpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaHJlZjogXCInICsgdXJsICsgJ1wiIGFuZCBhczogXCInICsgYXMgKyAnXCIsIHJlY2VpdmVkIHJlbGF0aXZlIGhyZWYgYW5kIGV4dGVybmFsIGFzJyArIFwiXFxuU2VlIG1vcmUgaW5mbzogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvaW52YWxpZC1yZWxhdGl2ZS11cmwtZXh0ZXJuYWwtYXNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICAgICAgdXJsOiBhcyxcbiAgICAgICAgICAgICAgICByb3V0ZXI6IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmVkQXMgPSAoMCwgX3JlbW92ZWxvY2FsZS5yZW1vdmVMb2NhbGUpKCgwLCBfcmVtb3ZlYmFzZXBhdGgucmVtb3ZlQmFzZVBhdGgpKHJlc29sdmVkQXMpLCBuZXh0U3RhdGUubG9jYWxlKTtcbiAgICAgICAgcm91dGUgPSAoMCwgX3JlbW92ZXRyYWlsaW5nc2xhc2gucmVtb3ZlVHJhaWxpbmdTbGFzaCkocGF0aG5hbWUpO1xuICAgICAgICBsZXQgcm91dGVNYXRjaCA9IGZhbHNlO1xuICAgICAgICBpZiAoKDAsIF9pc2R5bmFtaWMuaXNEeW5hbWljUm91dGUpKHJvdXRlKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQXMgPSAoMCwgX3BhcnNlcmVsYXRpdmV1cmwucGFyc2VSZWxhdGl2ZVVybCkocmVzb2x2ZWRBcyk7XG4gICAgICAgICAgICBjb25zdCBhc1BhdGhuYW1lID0gcGFyc2VkQXMucGF0aG5hbWU7XG4gICAgICAgICAgICBjb25zdCByb3V0ZVJlZ2V4ID0gKDAsIF9yb3V0ZXJlZ2V4LmdldFJvdXRlUmVnZXgpKHJvdXRlKTtcbiAgICAgICAgICAgIHJvdXRlTWF0Y2ggPSAoMCwgX3JvdXRlbWF0Y2hlci5nZXRSb3V0ZU1hdGNoZXIpKHJvdXRlUmVnZXgpKGFzUGF0aG5hbWUpO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkSW50ZXJwb2xhdGUgPSByb3V0ZSA9PT0gYXNQYXRobmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRlZEFzID0gc2hvdWxkSW50ZXJwb2xhdGUgPyAoMCwgX2ludGVycG9sYXRlYXMuaW50ZXJwb2xhdGVBcykocm91dGUsIGFzUGF0aG5hbWUsIHF1ZXJ5KSA6IHt9O1xuICAgICAgICAgICAgaWYgKCFyb3V0ZU1hdGNoIHx8IHNob3VsZEludGVycG9sYXRlICYmICFpbnRlcnBvbGF0ZWRBcy5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaXNzaW5nUGFyYW1zID0gT2JqZWN0LmtleXMocm91dGVSZWdleC5ncm91cHMpLmZpbHRlcigocGFyYW0pPT4hcXVlcnlbcGFyYW1dICYmICFyb3V0ZVJlZ2V4Lmdyb3Vwc1twYXJhbV0ub3B0aW9uYWwpO1xuICAgICAgICAgICAgICAgIGlmIChtaXNzaW5nUGFyYW1zLmxlbmd0aCA+IDAgJiYgIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlwiICsgKHNob3VsZEludGVycG9sYXRlID8gXCJJbnRlcnBvbGF0aW5nIGhyZWZcIiA6IFwiTWlzbWF0Y2hpbmcgYGFzYCBhbmQgYGhyZWZgXCIpICsgXCIgZmFpbGVkIHRvIG1hbnVhbGx5IHByb3ZpZGUgXCIgKyAoXCJ0aGUgcGFyYW1zOiBcIiArIG1pc3NpbmdQYXJhbXMuam9pbihcIiwgXCIpICsgXCIgaW4gdGhlIGBocmVmYCdzIGBxdWVyeWBcIikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigoc2hvdWxkSW50ZXJwb2xhdGUgPyBcIlRoZSBwcm92aWRlZCBgaHJlZmAgKFwiICsgdXJsICsgXCIpIHZhbHVlIGlzIG1pc3NpbmcgcXVlcnkgdmFsdWVzIChcIiArIG1pc3NpbmdQYXJhbXMuam9pbihcIiwgXCIpICsgXCIpIHRvIGJlIGludGVycG9sYXRlZCBwcm9wZXJseS4gXCIgOiBcIlRoZSBwcm92aWRlZCBgYXNgIHZhbHVlIChcIiArIGFzUGF0aG5hbWUgKyBcIikgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIGBocmVmYCB2YWx1ZSAoXCIgKyByb3V0ZSArIFwiKS4gXCIpICsgKFwiUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9cIiArIChzaG91bGRJbnRlcnBvbGF0ZSA/IFwiaHJlZi1pbnRlcnBvbGF0aW9uLWZhaWxlZFwiIDogXCJpbmNvbXBhdGlibGUtaHJlZi1hc1wiKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkSW50ZXJwb2xhdGUpIHtcbiAgICAgICAgICAgICAgICBhcyA9ICgwLCBfZm9ybWF0dXJsLmZvcm1hdFdpdGhWYWxpZGF0aW9uKShPYmplY3QuYXNzaWduKHt9LCBwYXJzZWRBcywge1xuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZTogaW50ZXJwb2xhdGVkQXMucmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogKDAsIF9vbWl0Lm9taXQpKHF1ZXJ5LCBpbnRlcnBvbGF0ZWRBcy5wYXJhbXMpXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNZXJnZSBwYXJhbXMgaW50byBgcXVlcnlgLCBvdmVyd3JpdGluZyBhbnkgc3BlY2lmaWVkIGluIHNlYXJjaFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocXVlcnksIHJvdXRlTWF0Y2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghaXNRdWVyeVVwZGF0aW5nKSB7XG4gICAgICAgICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoXCJyb3V0ZUNoYW5nZVN0YXJ0XCIsIGFzLCByb3V0ZVByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0Vycm9yUm91dGUgPSB0aGlzLnBhdGhuYW1lID09PSBcIi80MDRcIiB8fCB0aGlzLnBhdGhuYW1lID09PSBcIi9fZXJyb3JcIjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzX3BhZ2VQcm9wcywgX3NlbGZfX19ORVhUX0RBVEFfX19wcm9wcywgX3JvdXRlSW5mb19wcm9wcztcbiAgICAgICAgICAgIGxldCByb3V0ZUluZm8gPSBhd2FpdCB0aGlzLmdldFJvdXRlSW5mbyh7XG4gICAgICAgICAgICAgICAgcm91dGUsXG4gICAgICAgICAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgYXMsXG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRBcyxcbiAgICAgICAgICAgICAgICByb3V0ZVByb3BzLFxuICAgICAgICAgICAgICAgIGxvY2FsZTogbmV4dFN0YXRlLmxvY2FsZSxcbiAgICAgICAgICAgICAgICBpc1ByZXZpZXc6IG5leHRTdGF0ZS5pc1ByZXZpZXcsXG4gICAgICAgICAgICAgICAgaGFzTWlkZGxld2FyZTogaXNNaWRkbGV3YXJlTWF0Y2gsXG4gICAgICAgICAgICAgICAgdW5zdGFibGVfc2tpcENsaWVudENhY2hlOiBvcHRpb25zLnVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSxcbiAgICAgICAgICAgICAgICBpc1F1ZXJ5VXBkYXRpbmc6IGlzUXVlcnlVcGRhdGluZyAmJiAhdGhpcy5pc0ZhbGxiYWNrLFxuICAgICAgICAgICAgICAgIGlzTWlkZGxld2FyZVJld3JpdGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcgJiYgIW9wdGlvbnMuc2hhbGxvdykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2JmbChhcywgXCJyZXNvbHZlZEFzXCIgaW4gcm91dGVJbmZvID8gcm91dGVJbmZvLnJlc29sdmVkQXMgOiB1bmRlZmluZWQsIG5leHRTdGF0ZS5sb2NhbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFwicm91dGVcIiBpbiByb3V0ZUluZm8gJiYgaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBwYXRobmFtZSA9IHJvdXRlSW5mby5yb3V0ZSB8fCByb3V0ZTtcbiAgICAgICAgICAgICAgICByb3V0ZSA9IHBhdGhuYW1lO1xuICAgICAgICAgICAgICAgIGlmICghcm91dGVQcm9wcy5zaGFsbG93KSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGVJbmZvLnF1ZXJ5IHx8IHt9LCBxdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFuZWRQYXJzZWRQYXRobmFtZSA9ICgwLCBfaGFzYmFzZXBhdGguaGFzQmFzZVBhdGgpKHBhcnNlZC5wYXRobmFtZSkgPyAoMCwgX3JlbW92ZWJhc2VwYXRoLnJlbW92ZUJhc2VQYXRoKShwYXJzZWQucGF0aG5hbWUpIDogcGFyc2VkLnBhdGhuYW1lO1xuICAgICAgICAgICAgICAgIGlmIChyb3V0ZU1hdGNoICYmIHBhdGhuYW1lICE9PSBjbGVhbmVkUGFyc2VkUGF0aG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocm91dGVNYXRjaCkuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlTWF0Y2ggJiYgcXVlcnlba2V5XSA9PT0gcm91dGVNYXRjaFtrZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHF1ZXJ5W2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKDAsIF9pc2R5bmFtaWMuaXNEeW5hbWljUm91dGUpKHBhdGhuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXhlZEFzID0gIXJvdXRlUHJvcHMuc2hhbGxvdyAmJiByb3V0ZUluZm8ucmVzb2x2ZWRBcyA/IHJvdXRlSW5mby5yZXNvbHZlZEFzIDogKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkoKDAsIF9hZGRsb2NhbGUuYWRkTG9jYWxlKShuZXcgVVJMKGFzLCBsb2NhdGlvbi5ocmVmKS5wYXRobmFtZSwgbmV4dFN0YXRlLmxvY2FsZSksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmV3cml0ZUFzID0gcHJlZml4ZWRBcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfaGFzYmFzZXBhdGguaGFzQmFzZVBhdGgpKHJld3JpdGVBcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJld3JpdGVBcyA9ICgwLCBfcmVtb3ZlYmFzZXBhdGgucmVtb3ZlQmFzZVBhdGgpKHJld3JpdGVBcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsZVJlc3VsdCA9ICgwLCBfbm9ybWFsaXplbG9jYWxlcGF0aC5ub3JtYWxpemVMb2NhbGVQYXRoKShyZXdyaXRlQXMsIHRoaXMubG9jYWxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RhdGUubG9jYWxlID0gbG9jYWxlUmVzdWx0LmRldGVjdGVkTG9jYWxlIHx8IG5leHRTdGF0ZS5sb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlQXMgPSBsb2NhbGVSZXN1bHQucGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm91dGVSZWdleCA9ICgwLCBfcm91dGVyZWdleC5nZXRSb3V0ZVJlZ2V4KShwYXRobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1clJvdXRlTWF0Y2ggPSAoMCwgX3JvdXRlbWF0Y2hlci5nZXRSb3V0ZU1hdGNoZXIpKHJvdXRlUmVnZXgpKG5ldyBVUkwocmV3cml0ZUFzLCBsb2NhdGlvbi5ocmVmKS5wYXRobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJSb3V0ZU1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHF1ZXJ5LCBjdXJSb3V0ZU1hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZSByb3V0ZUluZm8gYnJpbmdzIGEgcmVkaXJlY3Qgd2Ugc2ltcGx5IGFwcGx5IGl0LlxuICAgICAgICAgICAgaWYgKFwidHlwZVwiIGluIHJvdXRlSW5mbykge1xuICAgICAgICAgICAgICAgIGlmIChyb3V0ZUluZm8udHlwZSA9PT0gXCJyZWRpcmVjdC1pbnRlcm5hbFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNoYW5nZShtZXRob2QsIHJvdXRlSW5mby5uZXdVcmwsIHJvdXRlSW5mby5uZXdBcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiByb3V0ZUluZm8uZGVzdGluYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXI6IHRoaXNcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoKT0+e30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHJvdXRlSW5mby5Db21wb25lbnQ7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50ICYmIGNvbXBvbmVudC51bnN0YWJsZV9zY3JpcHRMb2FkZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHRzID0gW10uY29uY2F0KGNvbXBvbmVudC51bnN0YWJsZV9zY3JpcHRMb2FkZXIoKSk7XG4gICAgICAgICAgICAgICAgc2NyaXB0cy5mb3JFYWNoKChzY3JpcHQpPT57XG4gICAgICAgICAgICAgICAgICAgICgwLCBfc2NyaXB0LmhhbmRsZUNsaWVudFNjcmlwdExvYWQpKHNjcmlwdC5wcm9wcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYW5kbGUgcmVkaXJlY3Qgb24gY2xpZW50LXRyYW5zaXRpb25cbiAgICAgICAgICAgIGlmICgocm91dGVJbmZvLl9fTl9TU0cgfHwgcm91dGVJbmZvLl9fTl9TU1ApICYmIHJvdXRlSW5mby5wcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChyb3V0ZUluZm8ucHJvcHMucGFnZVByb3BzICYmIHJvdXRlSW5mby5wcm9wcy5wYWdlUHJvcHMuX19OX1JFRElSRUNUKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgZGVzdGluYXRpb24gZnJvbSByZWRpcmVjdCB3aXRob3V0IGFkZGluZyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2NhbGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzdGluYXRpb24gPSByb3V0ZUluZm8ucHJvcHMucGFnZVByb3BzLl9fTl9SRURJUkVDVDtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgZGVzdGluYXRpb24gaXMgaW50ZXJuYWwgKHJlc29sdmVzIHRvIGEgcGFnZSkgYW5kIGF0dGVtcHRcbiAgICAgICAgICAgICAgICAgICAgLy8gY2xpZW50LW5hdmlnYXRpb24gaWYgaXQgaXMgZmFsbGluZyBiYWNrIHRvIGhhcmQgbmF2aWdhdGlvbiBpZlxuICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIG5vdFxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdGluYXRpb24uc3RhcnRzV2l0aChcIi9cIikgJiYgcm91dGVJbmZvLnByb3BzLnBhZ2VQcm9wcy5fX05fUkVESVJFQ1RfQkFTRV9QQVRIICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkSHJlZiA9ICgwLCBfcGFyc2VyZWxhdGl2ZXVybC5wYXJzZVJlbGF0aXZlVXJsKShkZXN0aW5hdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRIcmVmLnBhdGhuYW1lID0gcmVzb2x2ZUR5bmFtaWNSb3V0ZShwYXJzZWRIcmVmLnBhdGhuYW1lLCBwYWdlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHVybDogbmV3VXJsLCBhczogbmV3QXMgfSA9IHByZXBhcmVVcmxBcyh0aGlzLCBkZXN0aW5hdGlvbiwgZGVzdGluYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hhbmdlKG1ldGhvZCwgbmV3VXJsLCBuZXdBcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBkZXN0aW5hdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlcjogdGhpc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCgpPT57fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5pc1ByZXZpZXcgPSAhIXJvdXRlSW5mby5wcm9wcy5fX05fUFJFVklFVztcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgU1NHIGRhdGEgNDA0XG4gICAgICAgICAgICAgICAgaWYgKHJvdXRlSW5mby5wcm9wcy5ub3RGb3VuZCA9PT0gU1NHX0RBVEFfTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBub3RGb3VuZFJvdXRlO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaENvbXBvbmVudChcIi80MDRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3RGb3VuZFJvdXRlID0gXCIvNDA0XCI7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdEZvdW5kUm91dGUgPSBcIi9fZXJyb3JcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByb3V0ZUluZm8gPSBhd2FpdCB0aGlzLmdldFJvdXRlSW5mbyh7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTogbm90Rm91bmRSb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lOiBub3RGb3VuZFJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQXMsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhbGxvdzogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IG5leHRTdGF0ZS5sb2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ByZXZpZXc6IG5leHRTdGF0ZS5pc1ByZXZpZXcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc05vdEZvdW5kOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXCJ0eXBlXCIgaW4gcm91dGVJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIG1pZGRsZXdhcmUgZWZmZWN0IG9uIC80MDRcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNRdWVyeVVwZGF0aW5nICYmIHRoaXMucGF0aG5hbWUgPT09IFwiL19lcnJvclwiICYmICgoX3NlbGZfX19ORVhUX0RBVEFfX19wcm9wcyA9IHNlbGYuX19ORVhUX0RBVEFfXy5wcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IChfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzX3BhZ2VQcm9wcyA9IF9zZWxmX19fTkVYVF9EQVRBX19fcHJvcHMucGFnZVByb3BzKSA9PSBudWxsID8gdm9pZCAwIDogX3NlbGZfX19ORVhUX0RBVEFfX19wcm9wc19wYWdlUHJvcHMuc3RhdHVzQ29kZSkgPT09IDUwMCAmJiAoKF9yb3V0ZUluZm9fcHJvcHMgPSByb3V0ZUluZm8ucHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfcm91dGVJbmZvX3Byb3BzLnBhZ2VQcm9wcykpIHtcbiAgICAgICAgICAgICAgICAvLyBlbnN1cmUgc3RhdHVzQ29kZSBpcyBzdGlsbCBjb3JyZWN0IGZvciBzdGF0aWMgNTAwIHBhZ2VcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHVwZGF0aW5nIHF1ZXJ5IGluZm9ybWF0aW9uXG4gICAgICAgICAgICAgICAgcm91dGVJbmZvLnByb3BzLnBhZ2VQcm9wcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9yb3V0ZUluZm9fcm91dGU7XG4gICAgICAgICAgICAvLyBzaGFsbG93IHJvdXRpbmcgaXMgb25seSBhbGxvd2VkIGZvciBzYW1lIHBhZ2UgVVJMIGNoYW5nZXMuXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkU2hhbGxvd1JvdXRlID0gb3B0aW9ucy5zaGFsbG93ICYmIG5leHRTdGF0ZS5yb3V0ZSA9PT0gKChfcm91dGVJbmZvX3JvdXRlID0gcm91dGVJbmZvLnJvdXRlKSAhPSBudWxsID8gX3JvdXRlSW5mb19yb3V0ZSA6IHJvdXRlKTtcbiAgICAgICAgICAgIHZhciBfb3B0aW9uc19zY3JvbGw7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRTY3JvbGwgPSAoX29wdGlvbnNfc2Nyb2xsID0gb3B0aW9ucy5zY3JvbGwpICE9IG51bGwgPyBfb3B0aW9uc19zY3JvbGwgOiAhaXNRdWVyeVVwZGF0aW5nICYmICFpc1ZhbGlkU2hhbGxvd1JvdXRlO1xuICAgICAgICAgICAgY29uc3QgcmVzZXRTY3JvbGwgPSBzaG91bGRTY3JvbGwgPyB7XG4gICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICB9IDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHVwY29taW5nU2Nyb2xsU3RhdGUgPSBmb3JjZWRTY3JvbGwgIT0gbnVsbCA/IGZvcmNlZFNjcm9sbCA6IHJlc2V0U2Nyb2xsO1xuICAgICAgICAgICAgLy8gdGhlIG5ldyBzdGF0ZSB0aGF0IHRoZSByb3V0ZXIgZ29ubmEgc2V0XG4gICAgICAgICAgICBjb25zdCB1cGNvbWluZ1JvdXRlclN0YXRlID0ge1xuICAgICAgICAgICAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgICAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICBhc1BhdGg6IGNsZWFuZWRBcyxcbiAgICAgICAgICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIHBhZ2UgYmVpbmcgcmVuZGVyZWQgaXMgdGhlIDQwNCBwYWdlLCB3ZSBzaG91bGQgb25seSB1cGRhdGUgdGhlXG4gICAgICAgICAgICAvLyBxdWVyeSBwYXJhbWV0ZXJzLiBSb3V0ZSBjaGFuZ2VzIGhlcmUgbWlnaHQgYWRkIHRoZSBiYXNlUGF0aCB3aGVuIGl0XG4gICAgICAgICAgICAvLyB3YXNuJ3Qgb3JpZ2luYWxseSBwcmVzZW50LiBUaGlzIGlzIGFsc28gd2h5IHRoaXMgYmxvY2sgaXMgYmVmb3JlIHRoZVxuICAgICAgICAgICAgLy8gYmVsb3cgYGNoYW5nZVN0YXRlYCBjYWxsIHdoaWNoIHVwZGF0ZXMgdGhlIGJyb3dzZXIncyBoaXN0b3J5IChjaGFuZ2luZ1xuICAgICAgICAgICAgLy8gdGhlIFVSTCkuXG4gICAgICAgICAgICBpZiAoaXNRdWVyeVVwZGF0aW5nICYmIGlzRXJyb3JSb3V0ZSkge1xuICAgICAgICAgICAgICAgIHZhciBfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzX3BhZ2VQcm9wczEsIF9zZWxmX19fTkVYVF9EQVRBX19fcHJvcHMxLCBfcm91dGVJbmZvX3Byb3BzMTtcbiAgICAgICAgICAgICAgICByb3V0ZUluZm8gPSBhd2FpdCB0aGlzLmdldFJvdXRlSW5mbyh7XG4gICAgICAgICAgICAgICAgICAgIHJvdXRlOiB0aGlzLnBhdGhuYW1lLFxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZTogdGhpcy5wYXRobmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIGFzLFxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEFzLFxuICAgICAgICAgICAgICAgICAgICByb3V0ZVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFsbG93OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IG5leHRTdGF0ZS5sb2NhbGUsXG4gICAgICAgICAgICAgICAgICAgIGlzUHJldmlldzogbmV4dFN0YXRlLmlzUHJldmlldyxcbiAgICAgICAgICAgICAgICAgICAgaXNRdWVyeVVwZGF0aW5nOiBpc1F1ZXJ5VXBkYXRpbmcgJiYgIXRoaXMuaXNGYWxsYmFja1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChcInR5cGVcIiBpbiByb3V0ZUluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBtaWRkbGV3YXJlIGVmZmVjdCBvbiBcIiArIHRoaXMucGF0aG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXRobmFtZSA9PT0gXCIvX2Vycm9yXCIgJiYgKChfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzMSA9IHNlbGYuX19ORVhUX0RBVEFfXy5wcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IChfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzX3BhZ2VQcm9wczEgPSBfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzMS5wYWdlUHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzX3BhZ2VQcm9wczEuc3RhdHVzQ29kZSkgPT09IDUwMCAmJiAoKF9yb3V0ZUluZm9fcHJvcHMxID0gcm91dGVJbmZvLnByb3BzKSA9PSBudWxsID8gdm9pZCAwIDogX3JvdXRlSW5mb19wcm9wczEucGFnZVByb3BzKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgc3RhdHVzQ29kZSBpcyBzdGlsbCBjb3JyZWN0IGZvciBzdGF0aWMgNTAwIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1cGRhdGluZyBxdWVyeSBpbmZvcm1hdGlvblxuICAgICAgICAgICAgICAgICAgICByb3V0ZUluZm8ucHJvcHMucGFnZVByb3BzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0KHVwY29taW5nUm91dGVyU3RhdGUsIHJvdXRlSW5mbywgdXBjb21pbmdTY3JvbGxTdGF0ZSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX2lzZXJyb3IuZGVmYXVsdCkoZXJyKSAmJiBlcnIuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoXCJyb3V0ZUNoYW5nZUVycm9yXCIsIGVyciwgY2xlYW5lZEFzLCByb3V0ZVByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KFwiYmVmb3JlSGlzdG9yeUNoYW5nZVwiLCBhcywgcm91dGVQcm9wcyk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKG1ldGhvZCwgdXJsLCBhcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAvLyBmb3IgcXVlcnkgdXBkYXRlcyB3ZSBjYW4gc2tpcCBpdCBpZiB0aGUgc3RhdGUgaXMgdW5jaGFuZ2VkIGFuZCB3ZSBkb24ndFxuICAgICAgICAgICAgLy8gbmVlZCB0byBzY3JvbGxcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9pc3N1ZXMvMzcxMzlcbiAgICAgICAgICAgIGNvbnN0IGNhblNraXBVcGRhdGluZyA9IGlzUXVlcnlVcGRhdGluZyAmJiAhdXBjb21pbmdTY3JvbGxTdGF0ZSAmJiAhcmVhZHlTdGF0ZUNoYW5nZSAmJiAhbG9jYWxlQ2hhbmdlICYmICgwLCBfY29tcGFyZXN0YXRlcy5jb21wYXJlUm91dGVyU3RhdGVzKSh1cGNvbWluZ1JvdXRlclN0YXRlLCB0aGlzLnN0YXRlKTtcbiAgICAgICAgICAgIGlmICghY2FuU2tpcFVwZGF0aW5nKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXQodXBjb21pbmdSb3V0ZXJTdGF0ZSwgcm91dGVJbmZvLCB1cGNvbWluZ1Njcm9sbFN0YXRlKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmNhbmNlbGxlZCkgcm91dGVJbmZvLmVycm9yID0gcm91dGVJbmZvLmVycm9yIHx8IGU7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJvdXRlSW5mby5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUXVlcnlVcGRhdGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KFwicm91dGVDaGFuZ2VFcnJvclwiLCByb3V0ZUluZm8uZXJyb3IsIGNsZWFuZWRBcywgcm91dGVQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgcm91dGVJbmZvLmVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFN0YXRlLmxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmxhbmcgPSBuZXh0U3RhdGUubG9jYWxlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghaXNRdWVyeVVwZGF0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIFJvdXRlci5ldmVudHMuZW1pdChcInJvdXRlQ2hhbmdlQ29tcGxldGVcIiwgYXMsIHJvdXRlUHJvcHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBIGhhc2ggbWFyayAjIGlzIHRoZSBvcHRpb25hbCBsYXN0IHBhcnQgb2YgYSBVUkxcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNoUmVnZXggPSAvIy4rJC87XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFNjcm9sbCAmJiBoYXNoUmVnZXgudGVzdChhcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0hhc2goYXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmICgoMCwgX2lzZXJyb3IuZGVmYXVsdCkoZXJyKSAmJiBlcnIuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoYW5nZVN0YXRlKG1ldGhvZCwgdXJsLCBhcywgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSBvcHRpb25zID0ge307XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93Lmhpc3RvcnkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FybmluZzogd2luZG93Lmhpc3RvcnkgaXMgbm90IGF2YWlsYWJsZS5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuaGlzdG9yeVttZXRob2RdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IHdpbmRvdy5oaXN0b3J5LlwiICsgbWV0aG9kICsgXCIgaXMgbm90IGF2YWlsYWJsZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZCAhPT0gXCJwdXNoU3RhdGVcIiB8fCAoMCwgX3V0aWxzLmdldFVSTCkoKSAhPT0gYXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NoYWxsb3cgPSBvcHRpb25zLnNoYWxsb3c7XG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeVttZXRob2RdKHtcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgYXMsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBfX046IHRydWUsXG4gICAgICAgICAgICAgICAga2V5OiB0aGlzLl9rZXkgPSBtZXRob2QgIT09IFwicHVzaFN0YXRlXCIgPyB0aGlzLl9rZXkgOiBjcmVhdGVLZXkoKVxuICAgICAgICAgICAgfSwgLy8gTW9zdCBicm93c2VycyBjdXJyZW50bHkgaWdub3JlcyB0aGlzIHBhcmFtZXRlciwgYWx0aG91Z2ggdGhleSBtYXkgdXNlIGl0IGluIHRoZSBmdXR1cmUuXG4gICAgICAgICAgICAvLyBQYXNzaW5nIHRoZSBlbXB0eSBzdHJpbmcgaGVyZSBzaG91bGQgYmUgc2FmZSBhZ2FpbnN0IGZ1dHVyZSBjaGFuZ2VzIHRvIHRoZSBtZXRob2QuXG4gICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvSGlzdG9yeS9yZXBsYWNlU3RhdGVcbiAgICAgICAgICAgIFwiXCIsIGFzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBoYW5kbGVSb3V0ZUluZm9FcnJvcihlcnIsIHBhdGhuYW1lLCBxdWVyeSwgYXMsIHJvdXRlUHJvcHMsIGxvYWRFcnJvckZhaWwpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICBpZiAoZXJyLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgLy8gYnViYmxlIHVwIGNhbmNlbGxhdGlvbiBlcnJvcnNcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKDAsIF9yb3V0ZWxvYWRlci5pc0Fzc2V0RXJyb3IpKGVycikgfHwgbG9hZEVycm9yRmFpbCkge1xuICAgICAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KFwicm91dGVDaGFuZ2VFcnJvclwiLCBlcnIsIGFzLCByb3V0ZVByb3BzKTtcbiAgICAgICAgICAgIC8vIElmIHdlIGNhbid0IGxvYWQgdGhlIHBhZ2UgaXQgY291bGQgYmUgb25lIG9mIGZvbGxvd2luZyByZWFzb25zXG4gICAgICAgICAgICAvLyAgMS4gUGFnZSBkb2Vzbid0IGV4aXN0c1xuICAgICAgICAgICAgLy8gIDIuIFBhZ2UgZG9lcyBleGlzdCBpbiBhIGRpZmZlcmVudCB6b25lXG4gICAgICAgICAgICAvLyAgMy4gSW50ZXJuYWwgZXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgcGFnZVxuICAgICAgICAgICAgLy8gU28sIGRvaW5nIGEgaGFyZCByZWxvYWQgaXMgdGhlIHByb3BlciB3YXkgdG8gZGVhbCB3aXRoIHRoaXMuXG4gICAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICAgICAgdXJsOiBhcyxcbiAgICAgICAgICAgICAgICByb3V0ZXI6IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhlIFVSTCBkb2Vzbid0IGJsb2NrIGV4ZWN1dGluZyB0aGUgY3VycmVudCBjb2RlIHBhdGguXG4gICAgICAgICAgICAvLyBTbyBsZXQncyB0aHJvdyBhIGNhbmNlbGxhdGlvbiBlcnJvciBzdG9wIHRoZSByb3V0aW5nIGxvZ2ljLlxuICAgICAgICAgICAgdGhyb3cgYnVpbGRDYW5jZWxsYXRpb25FcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcHJvcHM7XG4gICAgICAgICAgICBjb25zdCB7IHBhZ2U6IENvbXBvbmVudCwgc3R5bGVTaGVldHMgfSA9IGF3YWl0IHRoaXMuZmV0Y2hDb21wb25lbnQoXCIvX2Vycm9yXCIpO1xuICAgICAgICAgICAgY29uc3Qgcm91dGVJbmZvID0ge1xuICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBzdHlsZVNoZWV0cyxcbiAgICAgICAgICAgICAgICBlcnIsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghcm91dGVJbmZvLnByb3BzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcm91dGVJbmZvLnByb3BzID0gYXdhaXQgdGhpcy5nZXRJbml0aWFsUHJvcHMoQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGdpcEVycikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW4gZXJyb3IgcGFnZSBgZ2V0SW5pdGlhbFByb3BzYDogXCIsIGdpcEVycik7XG4gICAgICAgICAgICAgICAgICAgIHJvdXRlSW5mby5wcm9wcyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByb3V0ZUluZm87XG4gICAgICAgIH0gY2F0Y2ggKHJvdXRlSW5mb0Vycikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUm91dGVJbmZvRXJyb3IoKDAsIF9pc2Vycm9yLmRlZmF1bHQpKHJvdXRlSW5mb0VycikgPyByb3V0ZUluZm9FcnIgOiBuZXcgRXJyb3Iocm91dGVJbmZvRXJyICsgXCJcIiksIHBhdGhuYW1lLCBxdWVyeSwgYXMsIHJvdXRlUHJvcHMsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGdldFJvdXRlSW5mbyhwYXJhbSkge1xuICAgICAgICBsZXQgeyByb3V0ZTogcmVxdWVzdGVkUm91dGUsIHBhdGhuYW1lLCBxdWVyeSwgYXMsIHJlc29sdmVkQXMsIHJvdXRlUHJvcHMsIGxvY2FsZSwgaGFzTWlkZGxld2FyZSwgaXNQcmV2aWV3LCB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUsIGlzUXVlcnlVcGRhdGluZywgaXNNaWRkbGV3YXJlUmV3cml0ZSwgaXNOb3RGb3VuZCB9ID0gcGFyYW07XG4gICAgICAgIC8qKlxuICAgICAqIFRoaXMgYHJvdXRlYCBiaW5kaW5nIGNhbiBjaGFuZ2UgaWYgdGhlcmUncyBhIHJld3JpdGVcbiAgICAgKiBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCByZXF1ZXN0ZWQgcm91dGVcbiAgICAgKiBzbyB3ZSBjYW4gc3RvcmUgdGhlIGNhY2hlIGZvciBpdCBhbmQgYXZvaWQgcmUtcmVxdWVzdGluZyBldmVyeSB0aW1lXG4gICAgICogZm9yIHNoYWxsb3cgcm91dGluZyBwdXJwb3Nlcy5cbiAgICAgKi8gbGV0IHJvdXRlID0gcmVxdWVzdGVkUm91dGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgX2RhdGFfZWZmZWN0LCBfZGF0YV9lZmZlY3QxLCBfZGF0YV9lZmZlY3QyLCBfZGF0YV9yZXNwb25zZTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbGxlZCA9IGdldENhbmNlbGxlZEhhbmRsZXIoe1xuICAgICAgICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgICAgICAgIHJvdXRlcjogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgZXhpc3RpbmdJbmZvID0gdGhpcy5jb21wb25lbnRzW3JvdXRlXTtcbiAgICAgICAgICAgIGlmIChyb3V0ZVByb3BzLnNoYWxsb3cgJiYgZXhpc3RpbmdJbmZvICYmIHRoaXMucm91dGUgPT09IHJvdXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nSW5mbztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNNaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdJbmZvID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNhY2hlZFJvdXRlSW5mbyA9IGV4aXN0aW5nSW5mbyAmJiAhKFwiaW5pdGlhbFwiIGluIGV4aXN0aW5nSW5mbykgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwiZGV2ZWxvcG1lbnRcIiA/IGV4aXN0aW5nSW5mbyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IGlzQmFja2dyb3VuZCA9IGlzUXVlcnlVcGRhdGluZztcbiAgICAgICAgICAgIGNvbnN0IGZldGNoTmV4dERhdGFQYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgZGF0YUhyZWY6IHRoaXMucGFnZUxvYWRlci5nZXREYXRhSHJlZih7XG4gICAgICAgICAgICAgICAgICAgIGhyZWY6ICgwLCBfZm9ybWF0dXJsLmZvcm1hdFdpdGhWYWxpZGF0aW9uKSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBza2lwSW50ZXJwb2xhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYXNQYXRoOiBpc05vdEZvdW5kID8gXCIvNDA0XCIgOiByZXNvbHZlZEFzLFxuICAgICAgICAgICAgICAgICAgICBsb2NhbGVcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBoYXNNaWRkbGV3YXJlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzU2VydmVyUmVuZGVyOiB0aGlzLmlzU3NyLFxuICAgICAgICAgICAgICAgIHBhcnNlSlNPTjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbmZsaWdodENhY2hlOiBpc0JhY2tncm91bmQgPyB0aGlzLnNiYyA6IHRoaXMuc2RjLFxuICAgICAgICAgICAgICAgIHBlcnNpc3RDYWNoZTogIWlzUHJldmlldyxcbiAgICAgICAgICAgICAgICBpc1ByZWZldGNoOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUsXG4gICAgICAgICAgICAgICAgaXNCYWNrZ3JvdW5kXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBpc1F1ZXJ5VXBkYXRpbmcgJiYgIWlzTWlkZGxld2FyZVJld3JpdGUgPyBudWxsIDogYXdhaXQgd2l0aE1pZGRsZXdhcmVFZmZlY3RzKHtcbiAgICAgICAgICAgICAgICBmZXRjaERhdGE6ICgpPT5mZXRjaE5leHREYXRhKGZldGNoTmV4dERhdGFQYXJhbXMpLFxuICAgICAgICAgICAgICAgIGFzUGF0aDogaXNOb3RGb3VuZCA/IFwiLzQwNFwiIDogcmVzb2x2ZWRBcyxcbiAgICAgICAgICAgICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICAgICAgICAgICAgICByb3V0ZXI6IHRoaXNcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpPT57XG4gICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGFyZCBlcnJvciBkdXJpbmcgcXVlcnkgdXBkYXRpbmdcbiAgICAgICAgICAgICAgICAvLyBhcyBpdCdzIHVuLW5lY2Vzc2FyeSBhbmQgZG9lc24ndCBuZWVkIHRvIGJlIGZhdGFsXG4gICAgICAgICAgICAgICAgLy8gdW5sZXNzIGl0IGlzIGEgZmFsbGJhY2sgcm91dGUgYW5kIHRoZSBwcm9wcyBjYW4ndFxuICAgICAgICAgICAgICAgIC8vIGJlIGxvYWRlZFxuICAgICAgICAgICAgICAgIGlmIChpc1F1ZXJ5VXBkYXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gd2hlbiByZW5kZXJpbmcgZXJyb3Igcm91dGVzIHdlIGRvbid0IGFwcGx5IG1pZGRsZXdhcmVcbiAgICAgICAgICAgIC8vIGVmZmVjdHNcbiAgICAgICAgICAgIGlmIChkYXRhICYmIChwYXRobmFtZSA9PT0gXCIvX2Vycm9yXCIgfHwgcGF0aG5hbWUgPT09IFwiLzQwNFwiKSkge1xuICAgICAgICAgICAgICAgIGRhdGEuZWZmZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzUXVlcnlVcGRhdGluZykge1xuICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbjogc2VsZi5fX05FWFRfREFUQV9fLnByb3BzXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5qc29uID0gc2VsZi5fX05FWFRfREFUQV9fLnByb3BzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZUNhbmNlbGxlZCgpO1xuICAgICAgICAgICAgaWYgKChkYXRhID09IG51bGwgPyB2b2lkIDAgOiAoX2RhdGFfZWZmZWN0ID0gZGF0YS5lZmZlY3QpID09IG51bGwgPyB2b2lkIDAgOiBfZGF0YV9lZmZlY3QudHlwZSkgPT09IFwicmVkaXJlY3QtaW50ZXJuYWxcIiB8fCAoZGF0YSA9PSBudWxsID8gdm9pZCAwIDogKF9kYXRhX2VmZmVjdDEgPSBkYXRhLmVmZmVjdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kYXRhX2VmZmVjdDEudHlwZSkgPT09IFwicmVkaXJlY3QtZXh0ZXJuYWxcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmVmZmVjdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoZGF0YSA9PSBudWxsID8gdm9pZCAwIDogKF9kYXRhX2VmZmVjdDIgPSBkYXRhLmVmZmVjdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kYXRhX2VmZmVjdDIudHlwZSkgPT09IFwicmV3cml0ZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRSb3V0ZSA9ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShkYXRhLmVmZmVjdC5yZXNvbHZlZEhyZWYpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gYXdhaXQgdGhpcy5wYWdlTG9hZGVyLmdldFBhZ2VMaXN0KCk7XG4gICAgICAgICAgICAgICAgLy8gZHVyaW5nIHF1ZXJ5IHVwZGF0aW5nIHRoZSBwYWdlIG11c3QgbWF0Y2ggYWx0aG91Z2ggZHVyaW5nXG4gICAgICAgICAgICAgICAgLy8gY2xpZW50LXRyYW5zaXRpb24gYSByZWRpcmVjdCB0aGF0IGRvZXNuJ3QgbWF0Y2ggYSBwYWdlXG4gICAgICAgICAgICAgICAgLy8gY2FuIGJlIHJldHVybmVkIGFuZCB0aGlzIHNob3VsZCB0cmlnZ2VyIGEgaGFyZCBuYXZpZ2F0aW9uXG4gICAgICAgICAgICAgICAgLy8gd2hpY2ggaXMgdmFsaWQgZm9yIGluY3JlbWVudGFsIG1pZ3JhdGlvblxuICAgICAgICAgICAgICAgIGlmICghaXNRdWVyeVVwZGF0aW5nIHx8IHBhZ2VzLmluY2x1ZGVzKHJlc29sdmVkUm91dGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdXRlID0gcmVzb2x2ZWRSb3V0ZTtcbiAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUgPSBkYXRhLmVmZmVjdC5yZXNvbHZlZEhyZWY7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhLmVmZmVjdC5wYXJzZWRBcy5xdWVyeVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEFzID0gKDAsIF9yZW1vdmViYXNlcGF0aC5yZW1vdmVCYXNlUGF0aCkoKDAsIF9ub3JtYWxpemVsb2NhbGVwYXRoLm5vcm1hbGl6ZUxvY2FsZVBhdGgpKGRhdGEuZWZmZWN0LnBhcnNlZEFzLnBhdGhuYW1lLCB0aGlzLmxvY2FsZXMpLnBhdGhuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgYWdhaW4gdGhlIGNhY2hlIHdpdGggdGhlIG5ldyBkZXN0aW5hdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJbmZvID0gdGhpcy5jb21wb25lbnRzW3JvdXRlXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlUHJvcHMuc2hhbGxvdyAmJiBleGlzdGluZ0luZm8gJiYgdGhpcy5yb3V0ZSA9PT0gcm91dGUgJiYgIWhhc01pZGRsZXdhcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBtYXRjaCB3aXRoIHRoZSBjdXJyZW50IHJvdXRlIGR1ZSB0byByZXdyaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgY2FuIGNvcHkgdGhlIGV4aXN0aW5nIGluZm9ybWF0aW9uIHRvIHRoZSByZXdyaXR0ZW4gb25lLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlbiwgd2UgcmV0dXJuIHRoZSBpbmZvcm1hdGlvbiBhbG9uZyB3aXRoIHRoZSBtYXRjaGVkIHJvdXRlLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5leGlzdGluZ0luZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKDAsIF9pc2FwaXJvdXRlLmlzQVBJUm91dGUpKHJvdXRlKSkge1xuICAgICAgICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBhcyxcbiAgICAgICAgICAgICAgICAgICAgcm91dGVyOiB0aGlzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCgpPT57fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb3V0ZUluZm8gPSBjYWNoZWRSb3V0ZUluZm8gfHwgYXdhaXQgdGhpcy5mZXRjaENvbXBvbmVudChyb3V0ZSkudGhlbigocmVzKT0+KHtcbiAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50OiByZXMucGFnZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVTaGVldHM6IHJlcy5zdHlsZVNoZWV0cyxcbiAgICAgICAgICAgICAgICAgICAgX19OX1NTRzogcmVzLm1vZC5fX05fU1NHLFxuICAgICAgICAgICAgICAgICAgICBfX05fU1NQOiByZXMubW9kLl9fTl9TU1BcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc1ZhbGlkRWxlbWVudFR5cGUgfSA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXNcIik7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudFR5cGUocm91dGVJbmZvLkNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGVmYXVsdCBleHBvcnQgaXMgbm90IGEgUmVhY3QgQ29tcG9uZW50IGluIHBhZ2U6IFwiJyArIHBhdGhuYW1lICsgJ1wiJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd2FzQmFpbGVkUHJlZmV0Y2ggPSBkYXRhID09IG51bGwgPyB2b2lkIDAgOiAoX2RhdGFfcmVzcG9uc2UgPSBkYXRhLnJlc3BvbnNlKSA9PSBudWxsID8gdm9pZCAwIDogX2RhdGFfcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJ4LW1pZGRsZXdhcmUtc2tpcFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZEZldGNoRGF0YSA9IHJvdXRlSW5mby5fX05fU1NHIHx8IHJvdXRlSW5mby5fX05fU1NQO1xuICAgICAgICAgICAgLy8gRm9yIG5vbi1TU0cgcHJlZmV0Y2hlcyB0aGF0IGJhaWxlZCBiZWZvcmUgc2VuZGluZyBkYXRhXG4gICAgICAgICAgICAvLyB3ZSBjbGVhciB0aGUgY2FjaGUgdG8gZmV0Y2ggZnVsbCByZXNwb25zZVxuICAgICAgICAgICAgaWYgKHdhc0JhaWxlZFByZWZldGNoICYmIChkYXRhID09IG51bGwgPyB2b2lkIDAgOiBkYXRhLmRhdGFIcmVmKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNkY1tkYXRhLmRhdGFIcmVmXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgcHJvcHMsIGNhY2hlS2V5IH0gPSBhd2FpdCB0aGlzLl9nZXREYXRhKGFzeW5jICgpPT57XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZEZldGNoRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IGRhdGEuanNvbikgJiYgIXdhc0JhaWxlZFByZWZldGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5OiBkYXRhLmNhY2hlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBkYXRhLmpzb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUhyZWYgPSAoZGF0YSA9PSBudWxsID8gdm9pZCAwIDogZGF0YS5kYXRhSHJlZikgPyBkYXRhLmRhdGFIcmVmIDogdGhpcy5wYWdlTG9hZGVyLmdldERhdGFIcmVmKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6ICgwLCBfZm9ybWF0dXJsLmZvcm1hdFdpdGhWYWxpZGF0aW9uKSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNQYXRoOiByZXNvbHZlZEFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmZXRjaGVkID0gYXdhaXQgZmV0Y2hOZXh0RGF0YSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhSHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VydmVyUmVuZGVyOiB0aGlzLmlzU3NyLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VKU09OOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5mbGlnaHRDYWNoZTogd2FzQmFpbGVkUHJlZmV0Y2ggPyB7fSA6IHRoaXMuc2RjLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGVyc2lzdENhY2hlOiAhaXNQcmV2aWV3LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQcmVmZXRjaDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZUtleTogZmV0Y2hlZC5jYWNoZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBmZXRjaGVkLmpzb24gfHwge31cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBhd2FpdCB0aGlzLmdldEluaXRpYWxQcm9wcyhyb3V0ZUluZm8uQ29tcG9uZW50LCAvLyB3ZSBwcm92aWRlIEFwcFRyZWUgbGF0ZXIgc28gdGhpcyBuZWVkcyB0byBiZSBgYW55YFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNQYXRoOiBhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZXM6IHRoaXMubG9jYWxlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRMb2NhbGU6IHRoaXMuZGVmYXVsdExvY2FsZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIE9ubHkgYnVzdCB0aGUgZGF0YSBjYWNoZSBmb3IgU1NQIHJvdXRlcyBhbHRob3VnaFxuICAgICAgICAgICAgLy8gbWlkZGxld2FyZSBjYW4gc2tpcCBjYWNoZSBwZXIgcmVxdWVzdCB3aXRoXG4gICAgICAgICAgICAvLyB4LW1pZGRsZXdhcmUtY2FjaGU6IG5vLWNhY2hlIGFzIHdlbGxcbiAgICAgICAgICAgIGlmIChyb3V0ZUluZm8uX19OX1NTUCAmJiBmZXRjaE5leHREYXRhUGFyYW1zLmRhdGFIcmVmICYmIGNhY2hlS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2RjW2NhY2hlS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHdlIGtpY2sgb2ZmIGEgSEVBRCByZXF1ZXN0IGluIHRoZSBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAvLyB3aGVuIGEgbm9uLXByZWZldGNoIHJlcXVlc3QgaXMgbWFkZSB0byBzaWduYWwgcmV2YWxpZGF0aW9uXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNQcmV2aWV3ICYmIHJvdXRlSW5mby5fX05fU1NHICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcImRldmVsb3BtZW50XCIgJiYgIWlzUXVlcnlVcGRhdGluZykge1xuICAgICAgICAgICAgICAgIGZldGNoTmV4dERhdGEoT2JqZWN0LmFzc2lnbih7fSwgZmV0Y2hOZXh0RGF0YVBhcmFtcywge1xuICAgICAgICAgICAgICAgICAgICBpc0JhY2tncm91bmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBlcnNpc3RDYWNoZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluZmxpZ2h0Q2FjaGU6IHRoaXMuc2JjXG4gICAgICAgICAgICAgICAgfSkpLmNhdGNoKCgpPT57fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9wcy5wYWdlUHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9wcy5wYWdlUHJvcHMpO1xuICAgICAgICAgICAgcm91dGVJbmZvLnByb3BzID0gcHJvcHM7XG4gICAgICAgICAgICByb3V0ZUluZm8ucm91dGUgPSByb3V0ZTtcbiAgICAgICAgICAgIHJvdXRlSW5mby5xdWVyeSA9IHF1ZXJ5O1xuICAgICAgICAgICAgcm91dGVJbmZvLnJlc29sdmVkQXMgPSByZXNvbHZlZEFzO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzW3JvdXRlXSA9IHJvdXRlSW5mbztcbiAgICAgICAgICAgIHJldHVybiByb3V0ZUluZm87XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUm91dGVJbmZvRXJyb3IoKDAsIF9pc2Vycm9yLmdldFByb3BlckVycm9yKShlcnIpLCBwYXRobmFtZSwgcXVlcnksIGFzLCByb3V0ZVByb3BzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQoc3RhdGUsIGRhdGEsIHJlc2V0U2Nyb2xsKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViKGRhdGEsIHRoaXMuY29tcG9uZW50c1tcIi9fYXBwXCJdLkNvbXBvbmVudCwgcmVzZXRTY3JvbGwpO1xuICAgIH1cbiAgICAvKipcbiAgICogQ2FsbGJhY2sgdG8gZXhlY3V0ZSBiZWZvcmUgcmVwbGFjaW5nIHJvdXRlciBzdGF0ZVxuICAgKiBAcGFyYW0gY2IgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWRcbiAgICovIGJlZm9yZVBvcFN0YXRlKGNiKSB7XG4gICAgICAgIHRoaXMuX2JwcyA9IGNiO1xuICAgIH1cbiAgICBvbmx5QUhhc2hDaGFuZ2UoYXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFzUGF0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBbb2xkVXJsTm9IYXNoLCBvbGRIYXNoXSA9IHRoaXMuYXNQYXRoLnNwbGl0KFwiI1wiLCAyKTtcbiAgICAgICAgY29uc3QgW25ld1VybE5vSGFzaCwgbmV3SGFzaF0gPSBhcy5zcGxpdChcIiNcIiwgMik7XG4gICAgICAgIC8vIE1ha2VzIHN1cmUgd2Ugc2Nyb2xsIHRvIHRoZSBwcm92aWRlZCBoYXNoIGlmIHRoZSB1cmwvaGFzaCBhcmUgdGhlIHNhbWVcbiAgICAgICAgaWYgKG5ld0hhc2ggJiYgb2xkVXJsTm9IYXNoID09PSBuZXdVcmxOb0hhc2ggJiYgb2xkSGFzaCA9PT0gbmV3SGFzaCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIHVybHMgYXJlIGNoYW5nZSwgdGhlcmUncyBtb3JlIHRoYW4gYSBoYXNoIGNoYW5nZVxuICAgICAgICBpZiAob2xkVXJsTm9IYXNoICE9PSBuZXdVcmxOb0hhc2gpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgaGFzaCBoYXMgY2hhbmdlZCwgdGhlbiBpdCdzIGEgaGFzaCBvbmx5IGNoYW5nZS5cbiAgICAgICAgLy8gVGhpcyBjaGVjayBpcyBuZWNlc3NhcnkgdG8gaGFuZGxlIGJvdGggdGhlIGVudGVyIGFuZFxuICAgICAgICAvLyBsZWF2ZSBoYXNoID09PSAnJyBjYXNlcy4gVGhlIGlkZW50aXR5IGNhc2UgZmFsbHMgdGhyb3VnaFxuICAgICAgICAvLyBhbmQgaXMgdHJlYXRlZCBhcyBhIG5leHQgcmVsb2FkLlxuICAgICAgICByZXR1cm4gb2xkSGFzaCAhPT0gbmV3SGFzaDtcbiAgICB9XG4gICAgc2Nyb2xsVG9IYXNoKGFzKSB7XG4gICAgICAgIGNvbnN0IFssIGhhc2ggPSBcIlwiXSA9IGFzLnNwbGl0KFwiI1wiLCAyKTtcbiAgICAgICAgKDAsIF9oYW5kbGVzbW9vdGhzY3JvbGwuaGFuZGxlU21vb3RoU2Nyb2xsKSgoKT0+e1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHRvIHRvcCBpZiB0aGUgaGFzaCBpcyBqdXN0IGAjYCB3aXRoIG5vIHZhbHVlIG9yIGAjdG9wYFxuICAgICAgICAgICAgLy8gVG8gbWlycm9yIGJyb3dzZXJzXG4gICAgICAgICAgICBpZiAoaGFzaCA9PT0gXCJcIiB8fCBoYXNoID09PSBcInRvcFwiKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlY29kZSBoYXNoIHRvIG1ha2Ugbm9uLWxhdGluIGFuY2hvciB3b3Jrcy5cbiAgICAgICAgICAgIGNvbnN0IHJhd0hhc2ggPSBkZWNvZGVVUklDb21wb25lbnQoaGFzaCk7XG4gICAgICAgICAgICAvLyBGaXJzdCB3ZSBjaGVjayBpZiB0aGUgZWxlbWVudCBieSBpZCBpcyBmb3VuZFxuICAgICAgICAgICAgY29uc3QgaWRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJhd0hhc2gpO1xuICAgICAgICAgICAgaWYgKGlkRWwpIHtcbiAgICAgICAgICAgICAgICBpZEVsLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBubyBlbGVtZW50IHdpdGggdGhlIGlkLCB3ZSBjaGVjayB0aGUgYG5hbWVgIHByb3BlcnR5XG4gICAgICAgICAgICAvLyBUbyBtaXJyb3IgYnJvd3NlcnNcbiAgICAgICAgICAgIGNvbnN0IG5hbWVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKHJhd0hhc2gpWzBdO1xuICAgICAgICAgICAgaWYgKG5hbWVFbCkge1xuICAgICAgICAgICAgICAgIG5hbWVFbC5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBvbmx5SGFzaENoYW5nZTogdGhpcy5vbmx5QUhhc2hDaGFuZ2UoYXMpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1cmxJc05ldyhhc1BhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXNQYXRoICE9PSBhc1BhdGg7XG4gICAgfVxuICAgIC8qKlxuICAgKiBQcmVmZXRjaCBwYWdlIGNvZGUsIHlvdSBtYXkgd2FpdCBmb3IgdGhlIGRhdGEgZHVyaW5nIHBhZ2UgcmVuZGVyaW5nLlxuICAgKiBUaGlzIGZlYXR1cmUgb25seSB3b3JrcyBpbiBwcm9kdWN0aW9uIVxuICAgKiBAcGFyYW0gdXJsIHRoZSBocmVmIG9mIHByZWZldGNoZWQgcGFnZVxuICAgKiBAcGFyYW0gYXNQYXRoIHRoZSBhcyBwYXRoIG9mIHRoZSBwcmVmZXRjaGVkIHBhZ2VcbiAgICovIGFzeW5jIHByZWZldGNoKHVybCwgYXNQYXRoLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChhc1BhdGggPT09IHZvaWQgMCkgYXNQYXRoID0gdXJsO1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSBvcHRpb25zID0ge307XG4gICAgICAgIC8vIFByZWZldGNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gZGV2ZWxvcG1lbnQgbW9kZSBiZWNhdXNlIGl0IHdvdWxkIHRyaWdnZXIgb24tZGVtYW5kLWVudHJpZXNcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmICgwLCBfaXNib3QuaXNCb3QpKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSkge1xuICAgICAgICAgICAgLy8gTm8gcHJlZmV0Y2hlcyBmb3IgYm90cyB0aGF0IHJlbmRlciB0aGUgbGluayBzaW5jZSB0aGV5IGFyZSB0eXBpY2FsbHkgbmF2aWdhdGluZ1xuICAgICAgICAgICAgLy8gbGlua3MgdmlhIHRoZSBlcXVpdmFsZW50IG9mIGEgaGFyZCBuYXZpZ2F0aW9uIGFuZCBoZW5jZSBuZXZlciB1dGlsaXplIHRoZXNlXG4gICAgICAgICAgICAvLyBwcmVmZXRjaGVzLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXJzZWQgPSAoMCwgX3BhcnNlcmVsYXRpdmV1cmwucGFyc2VSZWxhdGl2ZVVybCkodXJsKTtcbiAgICAgICAgY29uc3QgdXJsUGF0aG5hbWUgPSBwYXJzZWQucGF0aG5hbWU7XG4gICAgICAgIGxldCB7IHBhdGhuYW1lLCBxdWVyeSB9ID0gcGFyc2VkO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFBhdGhuYW1lID0gcGF0aG5hbWU7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5sb2NhbGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcGF0aG5hbWUgPSAoMCwgX25vcm1hbGl6ZWxvY2FsZXBhdGgubm9ybWFsaXplTG9jYWxlUGF0aCkocGF0aG5hbWUsIHRoaXMubG9jYWxlcykucGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gcGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgdXJsID0gKDAsIF9mb3JtYXR1cmwuZm9ybWF0V2l0aFZhbGlkYXRpb24pKHBhcnNlZCk7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlZEFzID0gKDAsIF9wYXJzZXJlbGF0aXZldXJsLnBhcnNlUmVsYXRpdmVVcmwpKGFzUGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxlUGF0aFJlc3VsdCA9ICgwLCBfbm9ybWFsaXplbG9jYWxlcGF0aC5ub3JtYWxpemVMb2NhbGVQYXRoKShwYXJzZWRBcy5wYXRobmFtZSwgdGhpcy5sb2NhbGVzKTtcbiAgICAgICAgICAgICAgICBwYXJzZWRBcy5wYXRobmFtZSA9IGxvY2FsZVBhdGhSZXN1bHQucGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5sb2NhbGUgPSBsb2NhbGVQYXRoUmVzdWx0LmRldGVjdGVkTG9jYWxlIHx8IHRoaXMuZGVmYXVsdExvY2FsZTtcbiAgICAgICAgICAgICAgICBhc1BhdGggPSAoMCwgX2Zvcm1hdHVybC5mb3JtYXRXaXRoVmFsaWRhdGlvbikocGFyc2VkQXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhZ2VzID0gYXdhaXQgdGhpcy5wYWdlTG9hZGVyLmdldFBhZ2VMaXN0KCk7XG4gICAgICAgIGxldCByZXNvbHZlZEFzID0gYXNQYXRoO1xuICAgICAgICBjb25zdCBsb2NhbGUgPSB0eXBlb2Ygb3B0aW9ucy5sb2NhbGUgIT09IFwidW5kZWZpbmVkXCIgPyBvcHRpb25zLmxvY2FsZSB8fCB1bmRlZmluZWQgOiB0aGlzLmxvY2FsZTtcbiAgICAgICAgY29uc3QgaXNNaWRkbGV3YXJlTWF0Y2ggPSBhd2FpdCBtYXRjaGVzTWlkZGxld2FyZSh7XG4gICAgICAgICAgICBhc1BhdGg6IGFzUGF0aCxcbiAgICAgICAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgICAgICAgcm91dGVyOiB0aGlzXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUyAmJiBhc1BhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIGxldCByZXdyaXRlcztcbiAgICAgICAgICAgICh7IF9fcmV3cml0ZXM6IHJld3JpdGVzIH0gPSBhd2FpdCAoMCwgX3JvdXRlbG9hZGVyLmdldENsaWVudEJ1aWxkTWFuaWZlc3QpKCkpO1xuICAgICAgICAgICAgY29uc3QgcmV3cml0ZXNSZXN1bHQgPSAoMCwgX3Jlc29sdmVyZXdyaXRlcy5kZWZhdWx0KSgoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKSgoMCwgX2FkZGxvY2FsZS5hZGRMb2NhbGUpKGFzUGF0aCwgdGhpcy5sb2NhbGUpLCB0cnVlKSwgcGFnZXMsIHJld3JpdGVzLCBwYXJzZWQucXVlcnksIChwKT0+cmVzb2x2ZUR5bmFtaWNSb3V0ZShwLCBwYWdlcyksIHRoaXMubG9jYWxlcyk7XG4gICAgICAgICAgICBpZiAocmV3cml0ZXNSZXN1bHQuZXh0ZXJuYWxEZXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICAgICAgICAgIHJlc29sdmVkQXMgPSAoMCwgX3JlbW92ZWxvY2FsZS5yZW1vdmVMb2NhbGUpKCgwLCBfcmVtb3ZlYmFzZXBhdGgucmVtb3ZlQmFzZVBhdGgpKHJld3JpdGVzUmVzdWx0LmFzUGF0aCksIHRoaXMubG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXdyaXRlc1Jlc3VsdC5tYXRjaGVkUGFnZSAmJiByZXdyaXRlc1Jlc3VsdC5yZXNvbHZlZEhyZWYpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIGRpcmVjdGx5IG1hdGNoZXMgYSBwYWdlIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBocmVmIHRvXG4gICAgICAgICAgICAgICAgLy8gYWxsb3cgdGhlIGNvcnJlY3QgcGFnZSBjaHVuayB0byBiZSBsb2FkZWRcbiAgICAgICAgICAgICAgICBwYXRobmFtZSA9IHJld3JpdGVzUmVzdWx0LnJlc29sdmVkSHJlZjtcbiAgICAgICAgICAgICAgICBwYXJzZWQucGF0aG5hbWUgPSBwYXRobmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9ICgwLCBfZm9ybWF0dXJsLmZvcm1hdFdpdGhWYWxpZGF0aW9uKShwYXJzZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwYXJzZWQucGF0aG5hbWUgPSByZXNvbHZlRHluYW1pY1JvdXRlKHBhcnNlZC5wYXRobmFtZSwgcGFnZXMpO1xuICAgICAgICBpZiAoKDAsIF9pc2R5bmFtaWMuaXNEeW5hbWljUm91dGUpKHBhcnNlZC5wYXRobmFtZSkpIHtcbiAgICAgICAgICAgIHBhdGhuYW1lID0gcGFyc2VkLnBhdGhuYW1lO1xuICAgICAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gcGF0aG5hbWU7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHF1ZXJ5LCAoMCwgX3JvdXRlbWF0Y2hlci5nZXRSb3V0ZU1hdGNoZXIpKCgwLCBfcm91dGVyZWdleC5nZXRSb3V0ZVJlZ2V4KShwYXJzZWQucGF0aG5hbWUpKSgoMCwgX3BhcnNlcGF0aC5wYXJzZVBhdGgpKGFzUGF0aCkucGF0aG5hbWUpIHx8IHt9KTtcbiAgICAgICAgICAgIGlmICghaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICB1cmwgPSAoMCwgX2Zvcm1hdHVybC5mb3JtYXRXaXRoVmFsaWRhdGlvbikocGFyc2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhID0gcHJvY2Vzcy5lbnYuX19ORVhUX01JRERMRVdBUkVfUFJFRkVUQ0ggPT09IFwic3RyaWN0XCIgPyBudWxsIDogYXdhaXQgd2l0aE1pZGRsZXdhcmVFZmZlY3RzKHtcbiAgICAgICAgICAgIGZldGNoRGF0YTogKCk9PmZldGNoTmV4dERhdGEoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhSHJlZjogdGhpcy5wYWdlTG9hZGVyLmdldERhdGFIcmVmKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6ICgwLCBfZm9ybWF0dXJsLmZvcm1hdFdpdGhWYWxpZGF0aW9uKSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWU6IG9yaWdpbmFsUGF0aG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEludGVycG9sYXRpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhc1BhdGg6IHJlc29sdmVkQXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGhhc01pZGRsZXdhcmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGlzU2VydmVyUmVuZGVyOiB0aGlzLmlzU3NyLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUpTT046IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGluZmxpZ2h0Q2FjaGU6IHRoaXMuc2RjLFxuICAgICAgICAgICAgICAgICAgICBwZXJzaXN0Q2FjaGU6ICF0aGlzLmlzUHJldmlldyxcbiAgICAgICAgICAgICAgICAgICAgaXNQcmVmZXRjaDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgYXNQYXRoOiBhc1BhdGgsXG4gICAgICAgICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICAgICAgICAgIHJvdXRlcjogdGhpc1xuICAgICAgICB9KTtcbiAgICAgICAgLyoqXG4gICAgICogSWYgdGhlcmUgd2FzIGEgcmV3cml0ZSB3ZSBhcHBseSB0aGUgZWZmZWN0cyBvZiB0aGUgcmV3cml0ZSBvbiB0aGVcbiAgICAgKiBjdXJyZW50IHBhcmFtZXRlcnMgZm9yIHRoZSBwcmVmZXRjaC5cbiAgICAgKi8gaWYgKChkYXRhID09IG51bGwgPyB2b2lkIDAgOiBkYXRhLmVmZmVjdC50eXBlKSA9PT0gXCJyZXdyaXRlXCIpIHtcbiAgICAgICAgICAgIHBhcnNlZC5wYXRobmFtZSA9IGRhdGEuZWZmZWN0LnJlc29sdmVkSHJlZjtcbiAgICAgICAgICAgIHBhdGhuYW1lID0gZGF0YS5lZmZlY3QucmVzb2x2ZWRIcmVmO1xuICAgICAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgICAgICAgLi4ucXVlcnksXG4gICAgICAgICAgICAgICAgLi4uZGF0YS5lZmZlY3QucGFyc2VkQXMucXVlcnlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXNvbHZlZEFzID0gZGF0YS5lZmZlY3QucGFyc2VkQXMucGF0aG5hbWU7XG4gICAgICAgICAgICB1cmwgPSAoMCwgX2Zvcm1hdHVybC5mb3JtYXRXaXRoVmFsaWRhdGlvbikocGFyc2VkKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgKiBJZiB0aGVyZSBpcyBhIHJlZGlyZWN0IHRvIGFuIGV4dGVybmFsIGRlc3RpbmF0aW9uIHRoZW4gd2UgZG9uJ3QgaGF2ZVxuICAgICAqIHRvIHByZWZldGNoIGNvbnRlbnQgYXMgaXQgd2lsbCBiZSB1bnVzZWQuXG4gICAgICovIGlmICgoZGF0YSA9PSBudWxsID8gdm9pZCAwIDogZGF0YS5lZmZlY3QudHlwZSkgPT09IFwicmVkaXJlY3QtZXh0ZXJuYWxcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdXRlID0gKDAsIF9yZW1vdmV0cmFpbGluZ3NsYXNoLnJlbW92ZVRyYWlsaW5nU2xhc2gpKHBhdGhuYW1lKTtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuX2JmbChhc1BhdGgsIHJlc29sdmVkQXMsIG9wdGlvbnMubG9jYWxlLCB0cnVlKSkge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzW3VybFBhdGhuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICBfX2FwcFJvdXRlcjogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZXIuX2lzU3NnKHJvdXRlKS50aGVuKChpc1NzZyk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNTc2cgPyBmZXRjaE5leHREYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUhyZWY6IChkYXRhID09IG51bGwgPyB2b2lkIDAgOiBkYXRhLmpzb24pID8gZGF0YSA9PSBudWxsID8gdm9pZCAwIDogZGF0YS5kYXRhSHJlZiA6IHRoaXMucGFnZUxvYWRlci5nZXREYXRhSHJlZih7XG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmOiB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICBhc1BhdGg6IHJlc29sdmVkQXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IGxvY2FsZVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZXJ2ZXJSZW5kZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUpTT046IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGluZmxpZ2h0Q2FjaGU6IHRoaXMuc2RjLFxuICAgICAgICAgICAgICAgICAgICBwZXJzaXN0Q2FjaGU6ICF0aGlzLmlzUHJldmlldyxcbiAgICAgICAgICAgICAgICAgICAgaXNQcmVmZXRjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdW5zdGFibGVfc2tpcENsaWVudENhY2hlOiBvcHRpb25zLnVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSB8fCBvcHRpb25zLnByaW9yaXR5ICYmICEhcHJvY2Vzcy5lbnYuX19ORVhUX09QVElNSVNUSUNfQ0xJRU5UX0NBQ0hFXG4gICAgICAgICAgICAgICAgfSkudGhlbigoKT0+ZmFsc2UpLmNhdGNoKCgpPT5mYWxzZSkgOiBmYWxzZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVyW29wdGlvbnMucHJpb3JpdHkgPyBcImxvYWRQYWdlXCIgOiBcInByZWZldGNoXCJdKHJvdXRlKVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgYXN5bmMgZmV0Y2hDb21wb25lbnQocm91dGUpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlQ2FuY2VsbGVkID0gZ2V0Q2FuY2VsbGVkSGFuZGxlcih7XG4gICAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICAgIHJvdXRlcjogdGhpc1xuICAgICAgICB9KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlc3VsdCA9IGF3YWl0IHRoaXMucGFnZUxvYWRlci5sb2FkUGFnZShyb3V0ZSk7XG4gICAgICAgICAgICBoYW5kbGVDYW5jZWxsZWQoKTtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRSZXN1bHQ7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaGFuZGxlQ2FuY2VsbGVkKCk7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldERhdGEoZm4pIHtcbiAgICAgICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKT0+e1xuICAgICAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jbGMgPSBjYW5jZWw7XG4gICAgICAgIHJldHVybiBmbigpLnRoZW4oKGRhdGEpPT57XG4gICAgICAgICAgICBpZiAoY2FuY2VsID09PSB0aGlzLmNsYykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xjID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoXCJMb2FkaW5nIGluaXRpYWwgcHJvcHMgY2FuY2VsbGVkXCIpO1xuICAgICAgICAgICAgICAgIGVyci5jYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2dldEZsaWdodERhdGEoZGF0YUhyZWYpIHtcbiAgICAgICAgLy8gRG8gbm90IGNhY2hlIFJTQyBmbGlnaHQgcmVzcG9uc2Ugc2luY2UgaXQncyBub3QgYSBzdGF0aWMgcmVzb3VyY2VcbiAgICAgICAgcmV0dXJuIGZldGNoTmV4dERhdGEoe1xuICAgICAgICAgICAgZGF0YUhyZWYsXG4gICAgICAgICAgICBpc1NlcnZlclJlbmRlcjogdHJ1ZSxcbiAgICAgICAgICAgIHBhcnNlSlNPTjogZmFsc2UsXG4gICAgICAgICAgICBpbmZsaWdodENhY2hlOiB0aGlzLnNkYyxcbiAgICAgICAgICAgIHBlcnNpc3RDYWNoZTogZmFsc2UsXG4gICAgICAgICAgICBpc1ByZWZldGNoOiBmYWxzZVxuICAgICAgICB9KS50aGVuKChwYXJhbSk9PntcbiAgICAgICAgICAgIGxldCB7IHRleHQgfSA9IHBhcmFtO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhOiB0ZXh0XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0SW5pdGlhbFByb3BzKENvbXBvbmVudCwgY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgQ29tcG9uZW50OiBBcHAgfSA9IHRoaXMuY29tcG9uZW50c1tcIi9fYXBwXCJdO1xuICAgICAgICBjb25zdCBBcHBUcmVlID0gdGhpcy5fd3JhcEFwcChBcHApO1xuICAgICAgICBjdHguQXBwVHJlZSA9IEFwcFRyZWU7XG4gICAgICAgIHJldHVybiAoMCwgX3V0aWxzLmxvYWRHZXRJbml0aWFsUHJvcHMpKEFwcCwge1xuICAgICAgICAgICAgQXBwVHJlZSxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIHJvdXRlcjogdGhpcyxcbiAgICAgICAgICAgIGN0eFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IHJvdXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5yb3V0ZTtcbiAgICB9XG4gICAgZ2V0IHBhdGhuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5xdWVyeTtcbiAgICB9XG4gICAgZ2V0IGFzUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuYXNQYXRoO1xuICAgIH1cbiAgICBnZXQgbG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5sb2NhbGU7XG4gICAgfVxuICAgIGdldCBpc0ZhbGxiYWNrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ZhbGxiYWNrO1xuICAgIH1cbiAgICBnZXQgaXNQcmV2aWV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc1ByZXZpZXc7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHBhdGhuYW1lLCBxdWVyeSwgYXMsIHsgaW5pdGlhbFByb3BzLCBwYWdlTG9hZGVyLCBBcHAsIHdyYXBBcHAsIENvbXBvbmVudCwgZXJyLCBzdWJzY3JpcHRpb24sIGlzRmFsbGJhY2ssIGxvY2FsZSwgbG9jYWxlcywgZGVmYXVsdExvY2FsZSwgZG9tYWluTG9jYWxlcywgaXNQcmV2aWV3IH0pe1xuICAgICAgICAvLyBTZXJ2ZXIgRGF0YSBDYWNoZSAoZnVsbCBkYXRhIHJlcXVlc3RzKVxuICAgICAgICB0aGlzLnNkYyA9IHt9O1xuICAgICAgICAvLyBTZXJ2ZXIgQmFja2dyb3VuZCBDYWNoZSAoSEVBRCByZXF1ZXN0cylcbiAgICAgICAgdGhpcy5zYmMgPSB7fTtcbiAgICAgICAgdGhpcy5pc0ZpcnN0UG9wU3RhdGVFdmVudCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2tleSA9IGNyZWF0ZUtleSgpO1xuICAgICAgICB0aGlzLm9uUG9wU3RhdGUgPSAoZSk9PntcbiAgICAgICAgICAgIGNvbnN0IHsgaXNGaXJzdFBvcFN0YXRlRXZlbnQgfSA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmlzRmlyc3RQb3BTdGF0ZUV2ZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IGUuc3RhdGU7XG4gICAgICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgZ2V0IHN0YXRlIGFzIHVuZGVmaW5lZCBmb3IgdHdvIHJlYXNvbnMuXG4gICAgICAgICAgICAgICAgLy8gIDEuIFdpdGggb2xkZXIgc2FmYXJpICg8IDgpIGFuZCBvbGRlciBjaHJvbWUgKDwgMzQpXG4gICAgICAgICAgICAgICAgLy8gIDIuIFdoZW4gdGhlIFVSTCBjaGFuZ2VkIHdpdGggI1xuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGJvdGggY2FzZXMsIHdlIGRvbid0IG5lZWQgdG8gcHJvY2VlZCBhbmQgY2hhbmdlIHRoZSByb3V0ZS5cbiAgICAgICAgICAgICAgICAvLyAoYXMgaXQncyBhbHJlYWR5IGNoYW5nZWQpXG4gICAgICAgICAgICAgICAgLy8gQnV0IHdlIGNhbiBzaW1wbHkgcmVwbGFjZSB0aGUgc3RhdGUgd2l0aCB0aGUgbmV3IGNoYW5nZXMuXG4gICAgICAgICAgICAgICAgLy8gQWN0dWFsbHksIGZvciAoMSkgd2UgZG9uJ3QgbmVlZCB0byBub3RoaW5nLiBCdXQgaXQncyBoYXJkIHRvIGRldGVjdCB0aGF0IGV2ZW50LlxuICAgICAgICAgICAgICAgIC8vIFNvLCBkb2luZyB0aGUgZm9sbG93aW5nIGZvciAoMSkgZG9lcyBubyBoYXJtLlxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcGF0aG5hbWUsIHF1ZXJ5IH0gPSB0aGlzO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoXCJyZXBsYWNlU3RhdGVcIiwgKDAsIF9mb3JtYXR1cmwuZm9ybWF0V2l0aFZhbGlkYXRpb24pKHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWU6ICgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKHBhdGhuYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlcbiAgICAgICAgICAgICAgICB9KSwgKDAsIF91dGlscy5nZXRVUkwpKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIF9fTkEgaXMgdXNlZCB0byBpZGVudGlmeSBpZiB0aGUgaGlzdG9yeSBlbnRyeSBjYW4gYmUgaGFuZGxlZCBieSB0aGUgYXBwLXJvdXRlci5cbiAgICAgICAgICAgIGlmIChzdGF0ZS5fX05BKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RhdGUuX19OKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2FmYXJpIGZpcmVzIHBvcHN0YXRlZXZlbnQgd2hlbiByZW9wZW5pbmcgdGhlIGJyb3dzZXIuXG4gICAgICAgICAgICBpZiAoaXNGaXJzdFBvcFN0YXRlRXZlbnQgJiYgdGhpcy5sb2NhbGUgPT09IHN0YXRlLm9wdGlvbnMubG9jYWxlICYmIHN0YXRlLmFzID09PSB0aGlzLmFzUGF0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBmb3JjZWRTY3JvbGw7XG4gICAgICAgICAgICBjb25zdCB7IHVybCwgYXMsIG9wdGlvbnMsIGtleSB9ID0gc3RhdGU7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1NDUk9MTF9SRVNUT1JBVElPTikge1xuICAgICAgICAgICAgICAgIGlmIChtYW51YWxTY3JvbGxSZXN0b3JhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fa2V5ICE9PSBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNuYXBzaG90IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwiX19uZXh0X3Njcm9sbF9cIiArIHRoaXMuX2tleSwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBzZWxmLnBhZ2VYT2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBzZWxmLnBhZ2VZT2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgb2xkIHNjcm9sbCBwb3NpdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJfX25leHRfc2Nyb2xsX1wiICsga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZWRTY3JvbGwgPSBKU09OLnBhcnNlKHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlZFNjcm9sbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9rZXkgPSBrZXk7XG4gICAgICAgICAgICBjb25zdCB7IHBhdGhuYW1lIH0gPSAoMCwgX3BhcnNlcmVsYXRpdmV1cmwucGFyc2VSZWxhdGl2ZVVybCkodXJsKTtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCByZS1yZW5kZXIgb24gaW5pdGlhbCBsb2FkLFxuICAgICAgICAgICAgLy8gY2FuIGJlIGNhdXNlZCBieSBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBhbiBleHRlcm5hbCBzaXRlXG4gICAgICAgICAgICBpZiAodGhpcy5pc1NzciAmJiBhcyA9PT0gKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkodGhpcy5hc1BhdGgpICYmIHBhdGhuYW1lID09PSAoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKSh0aGlzLnBhdGhuYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZSBkb3duc3RyZWFtIGFwcGxpY2F0aW9uIHJldHVybnMgZmFsc3ksIHJldHVybi5cbiAgICAgICAgICAgIC8vIFRoZXkgd2lsbCB0aGVuIGJlIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgZXZlbnQuXG4gICAgICAgICAgICBpZiAodGhpcy5fYnBzICYmICF0aGlzLl9icHMoc3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGFuZ2UoXCJyZXBsYWNlU3RhdGVcIiwgdXJsLCBhcywgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgICAgICAgICAgICAgIHNoYWxsb3c6IG9wdGlvbnMuc2hhbGxvdyAmJiB0aGlzLl9zaGFsbG93LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogb3B0aW9ucy5sb2NhbGUgfHwgdGhpcy5kZWZhdWx0TG9jYWxlLFxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgdmFsdWUgbm90IGV4cG9zZWQgb24gdHlwZXNcbiAgICAgICAgICAgICAgICBfaDogMFxuICAgICAgICAgICAgfSksIGZvcmNlZFNjcm9sbCk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgY29tcG9uZW50IGtleVxuICAgICAgICBjb25zdCByb3V0ZSA9ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShwYXRobmFtZSk7XG4gICAgICAgIC8vIHNldCB1cCB0aGUgY29tcG9uZW50IGNhY2hlIChieSByb3V0ZSBrZXlzKVxuICAgICAgICB0aGlzLmNvbXBvbmVudHMgPSB7fTtcbiAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBrZWVwIHRoZSBjYWNoZSwgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgICAgICAvLyBPdGhlcndpc2UsIHRoaXMgY2F1c2UgaXNzdWVzIHdoZW4gd2hlbiBnb2luZyBiYWNrIGFuZFxuICAgICAgICAvLyBjb21lIGFnYWluIHRvIHRoZSBlcnJvcmVkIHBhZ2UuXG4gICAgICAgIGlmIChwYXRobmFtZSAhPT0gXCIvX2Vycm9yXCIpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50c1tyb3V0ZV0gPSB7XG4gICAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGluaXRpYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgcHJvcHM6IGluaXRpYWxQcm9wcyxcbiAgICAgICAgICAgICAgICBlcnIsXG4gICAgICAgICAgICAgICAgX19OX1NTRzogaW5pdGlhbFByb3BzICYmIGluaXRpYWxQcm9wcy5fX05fU1NHLFxuICAgICAgICAgICAgICAgIF9fTl9TU1A6IGluaXRpYWxQcm9wcyAmJiBpbml0aWFsUHJvcHMuX19OX1NTUFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBvbmVudHNbXCIvX2FwcFwiXSA9IHtcbiAgICAgICAgICAgIENvbXBvbmVudDogQXBwLFxuICAgICAgICAgICAgc3R5bGVTaGVldHM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1JPVVRFUl9GSUxURVJfRU5BQkxFRCkge1xuICAgICAgICAgICAgY29uc3QgeyBCbG9vbUZpbHRlciB9ID0gcmVxdWlyZShcIi4uLy4uL2xpYi9ibG9vbS1maWx0ZXJcIik7XG4gICAgICAgICAgICBjb25zdCBzdGF0aWNGaWx0ZXJEYXRhID0gcHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9ST1VURVJfU19GSUxURVI7XG4gICAgICAgICAgICBjb25zdCBkeW5hbWljRmlsdGVyRGF0YSA9IHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfUk9VVEVSX0RfRklMVEVSO1xuICAgICAgICAgICAgaWYgKHN0YXRpY0ZpbHRlckRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IHN0YXRpY0ZpbHRlckRhdGEubnVtSGFzaGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmZsX3MgPSBuZXcgQmxvb21GaWx0ZXIoc3RhdGljRmlsdGVyRGF0YS5udW1JdGVtcywgc3RhdGljRmlsdGVyRGF0YS5lcnJvclJhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2JmbF9zLmltcG9ydChzdGF0aWNGaWx0ZXJEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkeW5hbWljRmlsdGVyRGF0YSA9PSBudWxsID8gdm9pZCAwIDogZHluYW1pY0ZpbHRlckRhdGEubnVtSGFzaGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmZsX2QgPSBuZXcgQmxvb21GaWx0ZXIoZHluYW1pY0ZpbHRlckRhdGEubnVtSXRlbXMsIGR5bmFtaWNGaWx0ZXJEYXRhLmVycm9yUmF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmZsX2QuaW1wb3J0KGR5bmFtaWNGaWx0ZXJEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBCYWNrd2FyZHMgY29tcGF0IGZvciBSb3V0ZXIucm91dGVyLmV2ZW50c1xuICAgICAgICAvLyBUT0RPOiBTaG91bGQgYmUgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbWFqb3IgdmVyc2lvbiBhcyBpdCB3YXMgbmV2ZXIgZG9jdW1lbnRlZFxuICAgICAgICB0aGlzLmV2ZW50cyA9IFJvdXRlci5ldmVudHM7XG4gICAgICAgIHRoaXMucGFnZUxvYWRlciA9IHBhZ2VMb2FkZXI7XG4gICAgICAgIC8vIGlmIGF1dG8gcHJlcmVuZGVyZWQgYW5kIGR5bmFtaWMgcm91dGUgd2FpdCB0byB1cGRhdGUgYXNQYXRoXG4gICAgICAgIC8vIHVudGlsIGFmdGVyIG1vdW50IHRvIHByZXZlbnQgaHlkcmF0aW9uIG1pc21hdGNoXG4gICAgICAgIGNvbnN0IGF1dG9FeHBvcnREeW5hbWljID0gKDAsIF9pc2R5bmFtaWMuaXNEeW5hbWljUm91dGUpKHBhdGhuYW1lKSAmJiBzZWxmLl9fTkVYVF9EQVRBX18uYXV0b0V4cG9ydDtcbiAgICAgICAgdGhpcy5iYXNlUGF0aCA9IHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEggfHwgXCJcIjtcbiAgICAgICAgdGhpcy5zdWIgPSBzdWJzY3JpcHRpb247XG4gICAgICAgIHRoaXMuY2xjID0gbnVsbDtcbiAgICAgICAgdGhpcy5fd3JhcEFwcCA9IHdyYXBBcHA7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBpZ25vcmUgZXh0cmEgcG9wU3RhdGUgaW4gc2FmYXJpIG9uIG5hdmlnYXRpbmdcbiAgICAgICAgLy8gYmFjayBmcm9tIGV4dGVybmFsIHNpdGVcbiAgICAgICAgdGhpcy5pc1NzciA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNMb2NhbGVEb21haW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1JlYWR5ID0gISEoc2VsZi5fX05FWFRfREFUQV9fLmdzc3AgfHwgc2VsZi5fX05FWFRfREFUQV9fLmdpcCB8fCBzZWxmLl9fTkVYVF9EQVRBX18uaXNFeHBlcmltZW50YWxDb21waWxlIHx8IHNlbGYuX19ORVhUX0RBVEFfXy5hcHBHaXAgJiYgIXNlbGYuX19ORVhUX0RBVEFfXy5nc3AgfHwgIWF1dG9FeHBvcnREeW5hbWljICYmICFzZWxmLmxvY2F0aW9uLnNlYXJjaCAmJiAhcHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUyk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsZXMgPSBsb2NhbGVzO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0TG9jYWxlID0gZGVmYXVsdExvY2FsZTtcbiAgICAgICAgICAgIHRoaXMuZG9tYWluTG9jYWxlcyA9IGRvbWFpbkxvY2FsZXM7XG4gICAgICAgICAgICB0aGlzLmlzTG9jYWxlRG9tYWluID0gISEoMCwgX2RldGVjdGRvbWFpbmxvY2FsZS5kZXRlY3REb21haW5Mb2NhbGUpKGRvbWFpbkxvY2FsZXMsIHNlbGYubG9jYXRpb24uaG9zdG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICAgIHBhdGhuYW1lLFxuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICBhc1BhdGg6IGF1dG9FeHBvcnREeW5hbWljID8gcGF0aG5hbWUgOiBhcyxcbiAgICAgICAgICAgIGlzUHJldmlldzogISFpc1ByZXZpZXcsXG4gICAgICAgICAgICBsb2NhbGU6IHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQgPyBsb2NhbGUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBpc0ZhbGxiYWNrXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2luaXRpYWxNYXRjaGVzTWlkZGxld2FyZVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIFwiYXNcIiBkb2Vzbid0IHN0YXJ0IHdpdGggZG91YmxlIHNsYXNoZXMgb3IgZWxzZSBpdCBjYW5cbiAgICAgICAgICAgIC8vIHRocm93IGFuIGVycm9yIGFzIGl0J3MgY29uc2lkZXJlZCBpbnZhbGlkXG4gICAgICAgICAgICBpZiAoIWFzLnN0YXJ0c1dpdGgoXCIvL1wiKSkge1xuICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIGZvciBgZS5zdGF0ZWAgdG8gd29yayBvbiB0aGUgYG9ucG9wc3RhdGVgIGV2ZW50XG4gICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byByZWdpc3RlciB0aGUgaW5pdGlhbCByb3V0ZSB1cG9uIGluaXRpYWxpemF0aW9uXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc1BhdGggPSAoMCwgX3V0aWxzLmdldFVSTCkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsTWF0Y2hlc01pZGRsZXdhcmVQcm9taXNlID0gbWF0Y2hlc01pZGRsZXdhcmUoe1xuICAgICAgICAgICAgICAgICAgICByb3V0ZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgYXNQYXRoXG4gICAgICAgICAgICAgICAgfSkudGhlbigobWF0Y2hlcyk9PntcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5fc2hvdWxkUmVzb2x2ZUhyZWYgPSBhcyAhPT0gcGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoXCJyZXBsYWNlU3RhdGVcIiwgbWF0Y2hlcyA/IGFzUGF0aCA6ICgwLCBfZm9ybWF0dXJsLmZvcm1hdFdpdGhWYWxpZGF0aW9uKSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRobmFtZTogKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkocGF0aG5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgfSksIGFzUGF0aCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCB0aGlzLm9uUG9wU3RhdGUpO1xuICAgICAgICAgICAgLy8gZW5hYmxlIGN1c3RvbSBzY3JvbGwgcmVzdG9yYXRpb24gaGFuZGxpbmcgd2hlbiBhdmFpbGFibGVcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBmYWxsYmFjayB0byBicm93c2VyJ3MgZGVmYXVsdCBoYW5kbGluZ1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9TQ1JPTExfUkVTVE9SQVRJT04pIHtcbiAgICAgICAgICAgICAgICBpZiAobWFudWFsU2Nyb2xsUmVzdG9yYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSBcIm1hbnVhbFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblJvdXRlci5ldmVudHMgPSAoMCwgX21pdHQuZGVmYXVsdCkoKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGVyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsImRlZmF1bHQiLCJtYXRjaGVzTWlkZGxld2FyZSIsImNyZWF0ZUtleSIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIlJvdXRlciIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwiX3JlbW92ZXRyYWlsaW5nc2xhc2giLCJfcm91dGVsb2FkZXIiLCJfc2NyaXB0IiwiX2lzZXJyb3IiLCJfIiwiX2Rlbm9ybWFsaXplcGFnZXBhdGgiLCJfbm9ybWFsaXplbG9jYWxlcGF0aCIsIl9taXR0IiwiX3V0aWxzIiwiX2lzZHluYW1pYyIsIl9wYXJzZXJlbGF0aXZldXJsIiwiX3Jlc29sdmVyZXdyaXRlcyIsIl9yb3V0ZW1hdGNoZXIiLCJfcm91dGVyZWdleCIsIl9mb3JtYXR1cmwiLCJfZGV0ZWN0ZG9tYWlubG9jYWxlIiwiX3BhcnNlcGF0aCIsIl9hZGRsb2NhbGUiLCJfcmVtb3ZlbG9jYWxlIiwiX3JlbW92ZWJhc2VwYXRoIiwiX2FkZGJhc2VwYXRoIiwiX2hhc2Jhc2VwYXRoIiwiX3Jlc29sdmVocmVmIiwiX2lzYXBpcm91dGUiLCJfZ2V0bmV4dHBhdGhuYW1laW5mbyIsIl9mb3JtYXRuZXh0cGF0aG5hbWVpbmZvIiwiX2NvbXBhcmVzdGF0ZXMiLCJfaXNsb2NhbHVybCIsIl9pc2JvdCIsIl9vbWl0IiwiX2ludGVycG9sYXRlYXMiLCJfaGFuZGxlc21vb3Roc2Nyb2xsIiwiYnVpbGRDYW5jZWxsYXRpb25FcnJvciIsImFzc2lnbiIsIkVycm9yIiwiY2FuY2VsbGVkIiwib3B0aW9ucyIsIm1hdGNoZXJzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyb3V0ZXIiLCJwYWdlTG9hZGVyIiwiZ2V0TWlkZGxld2FyZSIsInBhdGhuYW1lIiwiYXNQYXRobmFtZSIsInBhcnNlUGF0aCIsImFzUGF0aCIsImNsZWFuZWRBcyIsImhhc0Jhc2VQYXRoIiwicmVtb3ZlQmFzZVBhdGgiLCJhc1dpdGhCYXNlUGF0aEFuZExvY2FsZSIsImFkZEJhc2VQYXRoIiwiYWRkTG9jYWxlIiwibG9jYWxlIiwic29tZSIsIm0iLCJSZWdFeHAiLCJyZWdleHAiLCJ0ZXN0Iiwic3RyaXBPcmlnaW4iLCJ1cmwiLCJvcmlnaW4iLCJnZXRMb2NhdGlvbk9yaWdpbiIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJwcmVwYXJlVXJsQXMiLCJhcyIsInJlc29sdmVkSHJlZiIsInJlc29sdmVkQXMiLCJyZXNvbHZlSHJlZiIsImhyZWZXYXNBYnNvbHV0ZSIsImFzV2FzQWJzb2x1dGUiLCJwcmVwYXJlZFVybCIsInByZXBhcmVkQXMiLCJyZXNvbHZlRHluYW1pY1JvdXRlIiwicGFnZXMiLCJjbGVhblBhdGhuYW1lIiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsImRlbm9ybWFsaXplUGFnZVBhdGgiLCJpbmNsdWRlcyIsInBhZ2UiLCJpc0R5bmFtaWNSb3V0ZSIsImdldFJvdXRlUmVnZXgiLCJyZSIsImdldE1pZGRsZXdhcmVEYXRhIiwic291cmNlIiwicmVzcG9uc2UiLCJuZXh0Q29uZmlnIiwiYmFzZVBhdGgiLCJpMThuIiwibG9jYWxlcyIsInRyYWlsaW5nU2xhc2giLCJCb29sZWFuIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9UUkFJTElOR19TTEFTSCIsInJld3JpdGVIZWFkZXIiLCJoZWFkZXJzIiwicmV3cml0ZVRhcmdldCIsIm1hdGNoZWRQYXRoIiwiX19ORVhUX0VYVEVSTkFMX01JRERMRVdBUkVfUkVXUklURV9SRVNPTFZFIiwicGFyc2VkUmV3cml0ZVRhcmdldCIsInBhcnNlUmVsYXRpdmVVcmwiLCJwYXRobmFtZUluZm8iLCJnZXROZXh0UGF0aG5hbWVJbmZvIiwicGFyc2VEYXRhIiwiZnNQYXRobmFtZSIsImdldFBhZ2VMaXN0IiwiZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCIsInRoZW4iLCJwYXJhbSIsIl9fcmV3cml0ZXMiLCJyZXdyaXRlcyIsIm5vcm1hbGl6ZUxvY2FsZVBhdGgiLCJwYXJzZWRTb3VyY2UiLCJfX05FWFRfSEFTX1JFV1JJVEVTIiwidW5kZWZpbmVkIiwicmVzdWx0IiwicXVlcnkiLCJwYXRoIiwibWF0Y2hlZFBhZ2UiLCJwYXJzZWRBcyIsInJlc29sdmVkUGF0aG5hbWUiLCJtYXRjaGVzIiwiZ2V0Um91dGVNYXRjaGVyIiwidHlwZSIsInNyYyIsImZvcm1hdE5leHRQYXRobmFtZUluZm8iLCJkZWZhdWx0TG9jYWxlIiwiYnVpbGRJZCIsImRlc3RpbmF0aW9uIiwiaGFzaCIsInJlZGlyZWN0VGFyZ2V0IiwibmV3QXMiLCJuZXdVcmwiLCJ3aXRoTWlkZGxld2FyZUVmZmVjdHMiLCJmZXRjaERhdGEiLCJkYXRhIiwiZWZmZWN0IiwiZGF0YUhyZWYiLCJqc29uIiwidGV4dCIsImNhY2hlS2V5IiwiZSIsIm1hbnVhbFNjcm9sbFJlc3RvcmF0aW9uIiwiX19ORVhUX1NDUk9MTF9SRVNUT1JBVElPTiIsIndpbmRvdyIsImhpc3RvcnkiLCJ2Iiwic2Vzc2lvblN0b3JhZ2UiLCJzZXRJdGVtIiwicmVtb3ZlSXRlbSIsIm4iLCJTU0dfREFUQV9OT1RfRk9VTkQiLCJTeW1ib2wiLCJmZXRjaFJldHJ5IiwiYXR0ZW1wdHMiLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwibWV0aG9kIiwib2siLCJzdGF0dXMiLCJ0cnlUb1BhcnNlQXNKU09OIiwiSlNPTiIsInBhcnNlIiwiZXJyb3IiLCJmZXRjaE5leHREYXRhIiwiaW5mbGlnaHRDYWNoZSIsImlzUHJlZmV0Y2giLCJoYXNNaWRkbGV3YXJlIiwiaXNTZXJ2ZXJSZW5kZXIiLCJwYXJzZUpTT04iLCJwZXJzaXN0Q2FjaGUiLCJpc0JhY2tncm91bmQiLCJ1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUiLCJocmVmIiwiVVJMIiwibG9jYXRpb24iLCJfcGFyYW1zX21ldGhvZCIsImdldERhdGEiLCJwYXJhbXMiLCJwdXJwb3NlIiwiX3RyeVRvUGFyc2VBc0pTT04iLCJub3RGb3VuZCIsIm1hcmtBc3NldEVycm9yIiwiY2F0Y2giLCJlcnIiLCJtZXNzYWdlIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic2xpY2UiLCJoYW5kbGVIYXJkTmF2aWdhdGlvbiIsImdldENhbmNlbGxlZEhhbmRsZXIiLCJyb3V0ZSIsImNhbmNlbCIsImNsYyIsImhhbmRsZUNhbmNlbGxlZCIsInJlbG9hZCIsImJhY2siLCJmb3J3YXJkIiwicHVzaCIsIl9rZXkiLCJzdHJpbmdpZnkiLCJ4Iiwic2VsZiIsInBhZ2VYT2Zmc2V0IiwieSIsInBhZ2VZT2Zmc2V0IiwiY2hhbmdlIiwicmVwbGFjZSIsIl9iZmwiLCJza2lwTmF2aWdhdGUiLCJfX05FWFRfQ0xJRU5UX1JPVVRFUl9GSUxURVJfRU5BQkxFRCIsIm1hdGNoZXNCZmxTdGF0aWMiLCJtYXRjaGVzQmZsRHluYW1pYyIsImN1ckFzIiwiYXNOb1NsYXNoIiwiYXNOb1NsYXNoTG9jYWxlIiwiX3RoaXNfX2JmbF9zIiwiX3RoaXNfX2JmbF9zMSIsIl9iZmxfcyIsImNvbnRhaW5zIiwibm9ybWFsaXplZEFTIiwiY3VyQXNQYXJ0cyIsInNwbGl0IiwiaSIsIl90aGlzX19iZmxfZCIsImN1cnJlbnRQYXJ0Iiwiam9pbiIsIl9iZmxfZCIsImZvcmNlZFNjcm9sbCIsIl90aGlzX2NvbXBvbmVudHNfcGF0aG5hbWUiLCJpc0xvY2FsVVJMIiwiaXNRdWVyeVVwZGF0aW5nIiwiX2giLCJzaGFsbG93Iiwic2hvdWxkUmVzb2x2ZUhyZWYiLCJfc2hvdWxkUmVzb2x2ZUhyZWYiLCJuZXh0U3RhdGUiLCJzdGF0ZSIsInJlYWR5U3RhdGVDaGFuZ2UiLCJpc1JlYWR5IiwiaXNTc3IiLCJwcmV2TG9jYWxlIiwiX19ORVhUX0kxOE5fU1VQUE9SVCIsImxvY2FsZVBhdGhSZXN1bHQiLCJkZXRlY3RlZExvY2FsZSIsImZvcm1hdFdpdGhWYWxpZGF0aW9uIiwiZGlkTmF2aWdhdGUiLCJfdGhpc19sb2NhbGVzIiwiZGV0ZWN0ZWREb21haW4iLCJkZXRlY3REb21haW5Mb2NhbGUiLCJkb21haW5Mb2NhbGVzIiwiaXNMb2NhbGVEb21haW4iLCJob3N0bmFtZSIsImRvbWFpbiIsImFzTm9CYXNlUGF0aCIsImh0dHAiLCJTVCIsInBlcmZvcm1hbmNlIiwibWFyayIsInNjcm9sbCIsInJvdXRlUHJvcHMiLCJfaW5GbGlnaHRSb3V0ZSIsImV2ZW50cyIsImVtaXQiLCJyZW1vdmVMb2NhbGUiLCJsb2NhbGVDaGFuZ2UiLCJvbmx5QUhhc2hDaGFuZ2UiLCJjaGFuZ2VTdGF0ZSIsInNjcm9sbFRvSGFzaCIsInNldCIsImNvbXBvbmVudHMiLCJwYXJzZWQiLCJ1cmxJc05ldyIsInBhcnNlZEFzUGF0aG5hbWUiLCJfX2FwcFJvdXRlciIsImlzTWlkZGxld2FyZVJld3JpdGUiLCJpc01pZGRsZXdhcmVNYXRjaCIsInJld3JpdGVzUmVzdWx0IiwicCIsImV4dGVybmFsRGVzdCIsInJvdXRlTWF0Y2giLCJyb3V0ZVJlZ2V4Iiwic2hvdWxkSW50ZXJwb2xhdGUiLCJpbnRlcnBvbGF0ZWRBcyIsImludGVycG9sYXRlQXMiLCJtaXNzaW5nUGFyYW1zIiwia2V5cyIsImdyb3VwcyIsImZpbHRlciIsIm9wdGlvbmFsIiwiY29uc29sZSIsIndhcm4iLCJvbWl0IiwiaXNFcnJvclJvdXRlIiwiX3NlbGZfX19ORVhUX0RBVEFfX19wcm9wc19wYWdlUHJvcHMiLCJfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzIiwiX3JvdXRlSW5mb19wcm9wcyIsInJvdXRlSW5mbyIsImdldFJvdXRlSW5mbyIsImlzUHJldmlldyIsImlzRmFsbGJhY2siLCJjbGVhbmVkUGFyc2VkUGF0aG5hbWUiLCJmb3JFYWNoIiwia2V5IiwicHJlZml4ZWRBcyIsInJld3JpdGVBcyIsImxvY2FsZVJlc3VsdCIsImN1clJvdXRlTWF0Y2giLCJjb21wb25lbnQiLCJDb21wb25lbnQiLCJ1bnN0YWJsZV9zY3JpcHRMb2FkZXIiLCJzY3JpcHRzIiwiY29uY2F0Iiwic2NyaXB0IiwiaGFuZGxlQ2xpZW50U2NyaXB0TG9hZCIsInByb3BzIiwiX19OX1NTRyIsIl9fTl9TU1AiLCJwYWdlUHJvcHMiLCJfX05fUkVESVJFQ1QiLCJfX05fUkVESVJFQ1RfQkFTRV9QQVRIIiwicGFyc2VkSHJlZiIsIl9fTl9QUkVWSUVXIiwibm90Rm91bmRSb3V0ZSIsImZldGNoQ29tcG9uZW50IiwiaXNOb3RGb3VuZCIsIl9fTkVYVF9EQVRBX18iLCJzdGF0dXNDb2RlIiwiX3JvdXRlSW5mb19yb3V0ZSIsImlzVmFsaWRTaGFsbG93Um91dGUiLCJfb3B0aW9uc19zY3JvbGwiLCJzaG91bGRTY3JvbGwiLCJyZXNldFNjcm9sbCIsInVwY29taW5nU2Nyb2xsU3RhdGUiLCJ1cGNvbWluZ1JvdXRlclN0YXRlIiwiX3NlbGZfX19ORVhUX0RBVEFfX19wcm9wc19wYWdlUHJvcHMxIiwiX3NlbGZfX19ORVhUX0RBVEFfX19wcm9wczEiLCJfcm91dGVJbmZvX3Byb3BzMSIsImNhblNraXBVcGRhdGluZyIsImNvbXBhcmVSb3V0ZXJTdGF0ZXMiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImxhbmciLCJoYXNoUmVnZXgiLCJnZXRVUkwiLCJfc2hhbGxvdyIsIl9fTiIsImhhbmRsZVJvdXRlSW5mb0Vycm9yIiwibG9hZEVycm9yRmFpbCIsImlzQXNzZXRFcnJvciIsInN0eWxlU2hlZXRzIiwiZ2V0SW5pdGlhbFByb3BzIiwiZ2lwRXJyIiwicm91dGVJbmZvRXJyIiwicmVxdWVzdGVkUm91dGUiLCJfZGF0YV9lZmZlY3QiLCJfZGF0YV9lZmZlY3QxIiwiX2RhdGFfZWZmZWN0MiIsIl9kYXRhX3Jlc3BvbnNlIiwiZXhpc3RpbmdJbmZvIiwiY2FjaGVkUm91dGVJbmZvIiwiZmV0Y2hOZXh0RGF0YVBhcmFtcyIsImdldERhdGFIcmVmIiwic2tpcEludGVycG9sYXRpb24iLCJzYmMiLCJzZGMiLCJyZXNvbHZlZFJvdXRlIiwiaXNBUElSb3V0ZSIsInJlcyIsIm1vZCIsImlzVmFsaWRFbGVtZW50VHlwZSIsIndhc0JhaWxlZFByZWZldGNoIiwic2hvdWxkRmV0Y2hEYXRhIiwiX2dldERhdGEiLCJmZXRjaGVkIiwiZ2V0UHJvcGVyRXJyb3IiLCJzdWIiLCJiZWZvcmVQb3BTdGF0ZSIsImNiIiwiX2JwcyIsIm9sZFVybE5vSGFzaCIsIm9sZEhhc2giLCJuZXdVcmxOb0hhc2giLCJuZXdIYXNoIiwiaGFuZGxlU21vb3RoU2Nyb2xsIiwic2Nyb2xsVG8iLCJyYXdIYXNoIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaWRFbCIsImdldEVsZW1lbnRCeUlkIiwic2Nyb2xsSW50b1ZpZXciLCJuYW1lRWwiLCJnZXRFbGVtZW50c0J5TmFtZSIsIm9ubHlIYXNoQ2hhbmdlIiwicHJlZmV0Y2giLCJpc0JvdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInVybFBhdGhuYW1lIiwib3JpZ2luYWxQYXRobmFtZSIsIl9fTkVYVF9NSURETEVXQVJFX1BSRUZFVENIIiwiX2lzU3NnIiwiaXNTc2ciLCJwcmlvcml0eSIsIl9fTkVYVF9PUFRJTUlTVElDX0NMSUVOVF9DQUNIRSIsImNvbXBvbmVudFJlc3VsdCIsImxvYWRQYWdlIiwiZm4iLCJfZ2V0RmxpZ2h0RGF0YSIsImN0eCIsIkFwcCIsIkFwcFRyZWUiLCJfd3JhcEFwcCIsImxvYWRHZXRJbml0aWFsUHJvcHMiLCJjb25zdHJ1Y3RvciIsImluaXRpYWxQcm9wcyIsIndyYXBBcHAiLCJzdWJzY3JpcHRpb24iLCJpc0ZpcnN0UG9wU3RhdGVFdmVudCIsIm9uUG9wU3RhdGUiLCJfX05BIiwiZ2V0SXRlbSIsImluaXRpYWwiLCJCbG9vbUZpbHRlciIsInN0YXRpY0ZpbHRlckRhdGEiLCJfX05FWFRfQ0xJRU5UX1JPVVRFUl9TX0ZJTFRFUiIsImR5bmFtaWNGaWx0ZXJEYXRhIiwiX19ORVhUX0NMSUVOVF9ST1VURVJfRF9GSUxURVIiLCJudW1IYXNoZXMiLCJudW1JdGVtcyIsImVycm9yUmF0ZSIsImltcG9ydCIsImF1dG9FeHBvcnREeW5hbWljIiwiYXV0b0V4cG9ydCIsIl9fTkVYVF9ST1VURVJfQkFTRVBBVEgiLCJnc3NwIiwiZ2lwIiwiaXNFeHBlcmltZW50YWxDb21waWxlIiwiYXBwR2lwIiwiZ3NwIiwic2VhcmNoIiwiX2luaXRpYWxNYXRjaGVzTWlkZGxld2FyZVByb21pc2UiLCJhZGRFdmVudExpc3RlbmVyIiwic2Nyb2xsUmVzdG9yYXRpb24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/router.js\n"));
+
+/***/ })
+
+});
\ No newline at end of file
diff --git a/.next/static/webpack/webpack.0c2146f97cf12ff1.hot-update.js b/.next/static/webpack/webpack.0c2146f97cf12ff1.hot-update.js
new file mode 100644
index 0000000..c6a4927
--- /dev/null
+++ b/.next/static/webpack/webpack.0c2146f97cf12ff1.hot-update.js
@@ -0,0 +1,18 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("webpack",{},
+/******/ function(__webpack_require__) { // webpackRuntimeModules
+/******/ /* webpack/runtime/getFullHash */
+/******/ !function() {
+/******/ __webpack_require__.h = function() { return "3158b236d62f9fbf"; }
+/******/ }();
+/******/
+/******/ }
+);
\ No newline at end of file
diff --git a/.next/static/webpack/webpack.2610ed7412eb2b03.hot-update.js b/.next/static/webpack/webpack.2610ed7412eb2b03.hot-update.js
new file mode 100644
index 0000000..c3fd1ee
--- /dev/null
+++ b/.next/static/webpack/webpack.2610ed7412eb2b03.hot-update.js
@@ -0,0 +1,18 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("webpack",{},
+/******/ function(__webpack_require__) { // webpackRuntimeModules
+/******/ /* webpack/runtime/getFullHash */
+/******/ !function() {
+/******/ __webpack_require__.h = function() { return "cd3f7d84278f9b1a"; }
+/******/ }();
+/******/
+/******/ }
+);
\ No newline at end of file
diff --git a/.next/static/webpack/webpack.3158b236d62f9fbf.hot-update.js b/.next/static/webpack/webpack.3158b236d62f9fbf.hot-update.js
new file mode 100644
index 0000000..8464643
--- /dev/null
+++ b/.next/static/webpack/webpack.3158b236d62f9fbf.hot-update.js
@@ -0,0 +1,18 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("webpack",{},
+/******/ function(__webpack_require__) { // webpackRuntimeModules
+/******/ /* webpack/runtime/getFullHash */
+/******/ !function() {
+/******/ __webpack_require__.h = function() { return "d8dfa3d4739242e4"; }
+/******/ }();
+/******/
+/******/ }
+);
\ No newline at end of file
diff --git a/.next/static/webpack/webpack.7891cd3d8ba0e265.hot-update.js b/.next/static/webpack/webpack.7891cd3d8ba0e265.hot-update.js
new file mode 100644
index 0000000..0aebfb5
--- /dev/null
+++ b/.next/static/webpack/webpack.7891cd3d8ba0e265.hot-update.js
@@ -0,0 +1,18 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("webpack",{},
+/******/ function(__webpack_require__) { // webpackRuntimeModules
+/******/ /* webpack/runtime/getFullHash */
+/******/ !function() {
+/******/ __webpack_require__.h = function() { return "ddb3f3dbb24963a5"; }
+/******/ }();
+/******/
+/******/ }
+);
\ No newline at end of file
diff --git a/.next/static/webpack/webpack.88daec547e38ae5b.hot-update.js b/.next/static/webpack/webpack.88daec547e38ae5b.hot-update.js
new file mode 100644
index 0000000..51fd946
--- /dev/null
+++ b/.next/static/webpack/webpack.88daec547e38ae5b.hot-update.js
@@ -0,0 +1,18 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("webpack",{},
+/******/ function(__webpack_require__) { // webpackRuntimeModules
+/******/ /* webpack/runtime/getFullHash */
+/******/ !function() {
+/******/ __webpack_require__.h = function() { return "d05b7ffe97b89e9e"; }
+/******/ }();
+/******/
+/******/ }
+);
\ No newline at end of file
diff --git a/.next/static/webpack/webpack.8ffa285e274c1875.hot-update.js b/.next/static/webpack/webpack.8ffa285e274c1875.hot-update.js
new file mode 100644
index 0000000..6afb578
--- /dev/null
+++ b/.next/static/webpack/webpack.8ffa285e274c1875.hot-update.js
@@ -0,0 +1,18 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("webpack",{},
+/******/ function(__webpack_require__) { // webpackRuntimeModules
+/******/ /* webpack/runtime/getFullHash */
+/******/ !function() {
+/******/ __webpack_require__.h = function() { return "88daec547e38ae5b"; }
+/******/ }();
+/******/
+/******/ }
+);
\ No newline at end of file
diff --git a/.next/static/webpack/webpack.cd3f7d84278f9b1a.hot-update.js b/.next/static/webpack/webpack.cd3f7d84278f9b1a.hot-update.js
new file mode 100644
index 0000000..ca44e82
--- /dev/null
+++ b/.next/static/webpack/webpack.cd3f7d84278f9b1a.hot-update.js
@@ -0,0 +1,18 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("webpack",{},
+/******/ function(__webpack_require__) { // webpackRuntimeModules
+/******/ /* webpack/runtime/getFullHash */
+/******/ !function() {
+/******/ __webpack_require__.h = function() { return "f6af077e9159f6b2"; }
+/******/ }();
+/******/
+/******/ }
+);
\ No newline at end of file
diff --git a/.next/static/webpack/webpack.d05b7ffe97b89e9e.hot-update.js b/.next/static/webpack/webpack.d05b7ffe97b89e9e.hot-update.js
new file mode 100644
index 0000000..bda8a93
--- /dev/null
+++ b/.next/static/webpack/webpack.d05b7ffe97b89e9e.hot-update.js
@@ -0,0 +1,18 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("webpack",{},
+/******/ function(__webpack_require__) { // webpackRuntimeModules
+/******/ /* webpack/runtime/getFullHash */
+/******/ !function() {
+/******/ __webpack_require__.h = function() { return "0c2146f97cf12ff1"; }
+/******/ }();
+/******/
+/******/ }
+);
\ No newline at end of file
diff --git a/.next/static/webpack/webpack.d8dfa3d4739242e4.hot-update.js b/.next/static/webpack/webpack.d8dfa3d4739242e4.hot-update.js
new file mode 100644
index 0000000..5fabea4
--- /dev/null
+++ b/.next/static/webpack/webpack.d8dfa3d4739242e4.hot-update.js
@@ -0,0 +1,18 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("webpack",{},
+/******/ function(__webpack_require__) { // webpackRuntimeModules
+/******/ /* webpack/runtime/getFullHash */
+/******/ !function() {
+/******/ __webpack_require__.h = function() { return "2610ed7412eb2b03"; }
+/******/ }();
+/******/
+/******/ }
+);
\ No newline at end of file
diff --git a/.next/static/webpack/webpack.ddb3f3dbb24963a5.hot-update.js b/.next/static/webpack/webpack.ddb3f3dbb24963a5.hot-update.js
new file mode 100644
index 0000000..014790e
--- /dev/null
+++ b/.next/static/webpack/webpack.ddb3f3dbb24963a5.hot-update.js
@@ -0,0 +1,18 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("webpack",{},
+/******/ function(__webpack_require__) { // webpackRuntimeModules
+/******/ /* webpack/runtime/getFullHash */
+/******/ !function() {
+/******/ __webpack_require__.h = function() { return "f47db73a1365f7cc"; }
+/******/ }();
+/******/
+/******/ }
+);
\ No newline at end of file
diff --git a/.next/static/webpack/webpack.f47db73a1365f7cc.hot-update.js b/.next/static/webpack/webpack.f47db73a1365f7cc.hot-update.js
new file mode 100644
index 0000000..104d44f
--- /dev/null
+++ b/.next/static/webpack/webpack.f47db73a1365f7cc.hot-update.js
@@ -0,0 +1,18 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("webpack",{},
+/******/ function(__webpack_require__) { // webpackRuntimeModules
+/******/ /* webpack/runtime/getFullHash */
+/******/ !function() {
+/******/ __webpack_require__.h = function() { return "5dafa343e0ef76c0"; }
+/******/ }();
+/******/
+/******/ }
+);
\ No newline at end of file
diff --git a/.next/static/webpack/webpack.f6af077e9159f6b2.hot-update.js b/.next/static/webpack/webpack.f6af077e9159f6b2.hot-update.js
new file mode 100644
index 0000000..af6a487
--- /dev/null
+++ b/.next/static/webpack/webpack.f6af077e9159f6b2.hot-update.js
@@ -0,0 +1,18 @@
+"use strict";
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+self["webpackHotUpdate_N_E"]("webpack",{},
+/******/ function(__webpack_require__) { // webpackRuntimeModules
+/******/ /* webpack/runtime/getFullHash */
+/******/ !function() {
+/******/ __webpack_require__.h = function() { return "7891cd3d8ba0e265"; }
+/******/ }();
+/******/
+/******/ }
+);
\ No newline at end of file
diff --git a/.next/trace b/.next/trace
index e663f43..f853f32 100644
--- a/.next/trace
+++ b/.next/trace
@@ -134,3 +134,18 @@
[{"name":"client-success","duration":0,"timestamp":17560341872,"id":11375,"parentId":3,"tags":{},"startTime":1766009447367,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17560341962,"id":11376,"parentId":3,"tags":{},"startTime":1766009447368,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17560342127,"id":11377,"parentId":3,"tags":{},"startTime":1766009447368,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":10097,"timestamp":17562057146,"id":11384,"parentId":11381,"tags":{"request":"next/dist/pages/_document"},"startTime":1766009449083,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":10476,"timestamp":17562057028,"id":11382,"parentId":11381,"tags":{"request":"next/dist/pages/_app"},"startTime":1766009449083,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":10647,"timestamp":17562057168,"id":11386,"parentId":11381,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009449083,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":10860,"timestamp":17562057130,"id":11383,"parentId":11381,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009449083,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":10836,"timestamp":17562057157,"id":11385,"parentId":11381,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009449083,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1305,"timestamp":17562066819,"id":11390,"parentId":11389,"tags":{},"startTime":1766009449092,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1449,"timestamp":17562066677,"id":11389,"parentId":11388,"tags":{},"startTime":1766009449092,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":2542,"timestamp":17562066408,"id":11388,"parentId":11380,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/components/StatusSwitcher.tsx","layer":"rsc"},"startTime":1766009449092,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":16948,"timestamp":17562057180,"id":11387,"parentId":11381,"tags":{"request":"next-app-loader?name=app%2Fbottles%2F%5Bid%5D%2Fpage&page=%2Fbottles%2F%5Bid%5D%2Fpage&appPaths=%2Fbottles%2F%5Bid%5D%2Fpage&pagePath=private-next-app-dir%2Fbottles%2F%5Bid%5D%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009449083,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":2317,"timestamp":17562076009,"id":11399,"parentId":11398,"tags":{},"startTime":1766009449102,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":2385,"timestamp":17562075945,"id":11398,"parentId":11397,"tags":{},"startTime":1766009449102,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":3732,"timestamp":17562075811,"id":11397,"parentId":11380,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/components/StatusSwitcher.tsx","layer":"ssr"},"startTime":1766009449101,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":223,"timestamp":17562082856,"id":11401,"parentId":11400,"tags":{},"startTime":1766009449108,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":657,"timestamp":17562083947,"id":11403,"parentId":11402,"tags":{},"startTime":1766009449110,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":762,"timestamp":17562083845,"id":11402,"parentId":11400,"tags":{},"startTime":1766009449109,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":2377,"timestamp":17562082687,"id":11400,"parentId":11397,"tags":{"name":"__barrel_optimize__?names=CheckCircle,FlaskConical,Loader2,Package,Play!=!/home/robin/AI/Coding/Whisky/node_modules/lucide-react/dist/esm/lucide-react.js","layer":"ssr"},"startTime":1766009449108,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":671,"timestamp":17562087247,"id":11406,"parentId":11405,"tags":{},"startTime":1766009449113,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":709,"timestamp":17562087212,"id":11405,"parentId":11404,"tags":{},"startTime":1766009449113,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":1058,"timestamp":17562087110,"id":11404,"parentId":11400,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/lucide-react/dist/esm/icons/flask-conical.js","layer":"ssr"},"startTime":1766009449113,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":33664,"timestamp":17562054691,"id":11381,"parentId":11380,"tags":{},"startTime":1766009449080,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":1765,"timestamp":17562104254,"id":11410,"parentId":11409,"tags":{},"startTime":1766009449130,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":5,"timestamp":17562106035,"id":11412,"parentId":11409,"tags":{},"startTime":1766009449132,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":2300,"timestamp":17562106050,"id":11413,"parentId":11409,"tags":{},"startTime":1766009449132,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":6,"timestamp":17562108366,"id":11414,"parentId":11409,"tags":{},"startTime":1766009449134,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":3,"timestamp":17562108383,"id":11415,"parentId":11409,"tags":{},"startTime":1766009449134,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":3650,"timestamp":17562106029,"id":11411,"parentId":11409,"tags":{},"startTime":1766009449132,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":2099,"timestamp":17562110661,"id":11416,"parentId":11409,"tags":{},"startTime":1766009449136,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":4679,"timestamp":17562112770,"id":11417,"parentId":11409,"tags":{},"startTime":1766009449138,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":1038,"timestamp":17562118521,"id":11418,"parentId":11409,"tags":{},"startTime":1766009449144,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":81,"timestamp":17562119559,"id":11419,"parentId":11409,"tags":{},"startTime":1766009449145,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":68,"timestamp":17562119632,"id":11420,"parentId":11409,"tags":{},"startTime":1766009449145,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1682,"timestamp":17562119704,"id":11421,"parentId":11409,"tags":{},"startTime":1766009449145,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":21380,"timestamp":17562102210,"id":11409,"parentId":11380,"tags":{},"startTime":1766009449128,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":72705,"timestamp":17562054424,"id":11380,"parentId":11378,"tags":{"name":"server"},"startTime":1766009449080,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":2986,"timestamp":17562127161,"id":11422,"parentId":11378,"tags":{},"startTime":1766009449153,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-server","duration":83102,"timestamp":17562047347,"id":11378,"parentId":3,"tags":{"trigger":"src/components/StatusSwitcher.tsx"},"startTime":1766009449073,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4795,"timestamp":17562136946,"id":11425,"parentId":11424,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009449163,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4702,"timestamp":17562137046,"id":11427,"parentId":11424,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009449163,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":5648,"timestamp":17562137061,"id":11429,"parentId":11424,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009449163,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":2830,"timestamp":17562140325,"id":11440,"parentId":11439,"tags":{},"startTime":1766009449166,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":2888,"timestamp":17562140269,"id":11439,"parentId":11438,"tags":{},"startTime":1766009449166,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":4800,"timestamp":17562140170,"id":11438,"parentId":11423,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/components/StatusSwitcher.tsx","layer":"app-pages-browser"},"startTime":1766009449166,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":9961,"timestamp":17562137073,"id":11431,"parentId":11424,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009449163,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":9932,"timestamp":17562137106,"id":11436,"parentId":11424,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009449163,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":11391,"timestamp":17562137034,"id":11426,"parentId":11424,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009449163,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":11496,"timestamp":17562137093,"id":11434,"parentId":11424,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009449163,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":10,"timestamp":17562148604,"id":11444,"parentId":11443,"tags":{},"startTime":1766009449174,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":3589,"timestamp":17562145997,"id":11442,"parentId":11441,"tags":{},"startTime":1766009449172,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17401,"timestamp":17562137054,"id":11428,"parentId":11424,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009449163,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":5143,"timestamp":17562149467,"id":11446,"parentId":11445,"tags":{},"startTime":1766009449175,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":5207,"timestamp":17562149406,"id":11445,"parentId":11443,"tags":{},"startTime":1766009449175,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":6942,"timestamp":17562148437,"id":11443,"parentId":11438,"tags":{"name":"__barrel_optimize__?names=CheckCircle,FlaskConical,Loader2,Package,Play!=!/home/robin/AI/Coding/Whisky/node_modules/lucide-react/dist/esm/lucide-react.js","layer":"app-pages-browser"},"startTime":1766009449174,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-process","duration":50368,"timestamp":17562149680,"id":11448,"parentId":11447,"tags":{},"startTime":1766009449175,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-loader","duration":50580,"timestamp":17562149604,"id":11447,"parentId":11441,"tags":{},"startTime":1766009449175,"traceId":"ccbcc14e0de3ee02"},{"name":"css-loader","duration":8564,"timestamp":17562200211,"id":11452,"parentId":11441,"tags":{"astUsed":"true"},"startTime":1766009449226,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":63691,"timestamp":17562145931,"id":11441,"parentId":11437,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css.webpack[javascript/auto]!=!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":null},"startTime":1766009449171,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":74460,"timestamp":17562137079,"id":11432,"parentId":11424,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009449163,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":52269,"timestamp":17562159300,"id":11451,"parentId":11450,"tags":{},"startTime":1766009449185,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":52308,"timestamp":17562159263,"id":11450,"parentId":11449,"tags":{},"startTime":1766009449185,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":52691,"timestamp":17562159141,"id":11449,"parentId":11443,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/lucide-react/dist/esm/icons/flask-conical.js","layer":"app-pages-browser"},"startTime":1766009449185,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":75017,"timestamp":17562137067,"id":11430,"parentId":11424,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009449163,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":75101,"timestamp":17562137100,"id":11435,"parentId":11424,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009449163,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":75670,"timestamp":17562139620,"id":11437,"parentId":11423,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":"app-pages-browser"},"startTime":1766009449165,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module","duration":32,"timestamp":17562215375,"id":11453,"parentId":11437,"tags":{},"startTime":1766009449241,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":78332,"timestamp":17562137085,"id":11433,"parentId":11424,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&server=false!"},"startTime":1766009449163,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":83865,"timestamp":17562131563,"id":11424,"parentId":11423,"tags":{},"startTime":1766009449157,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":1109,"timestamp":17562218839,"id":11455,"parentId":11454,"tags":{},"startTime":1766009449244,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":3,"timestamp":17562219962,"id":11457,"parentId":11454,"tags":{},"startTime":1766009449246,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":54,"timestamp":17562219976,"id":11458,"parentId":11454,"tags":{},"startTime":1766009449246,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":5,"timestamp":17562220042,"id":11459,"parentId":11454,"tags":{},"startTime":1766009449246,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":3,"timestamp":17562220061,"id":11460,"parentId":11454,"tags":{},"startTime":1766009449246,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":567,"timestamp":17562219957,"id":11456,"parentId":11454,"tags":{},"startTime":1766009449246,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":371,"timestamp":17562221229,"id":11461,"parentId":11454,"tags":{},"startTime":1766009449247,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":1781,"timestamp":17562221610,"id":11462,"parentId":11454,"tags":{},"startTime":1766009449247,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":2166,"timestamp":17562224269,"id":11463,"parentId":11454,"tags":{},"startTime":1766009449250,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":117,"timestamp":17562226435,"id":11464,"parentId":11454,"tags":{},"startTime":1766009449252,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":72,"timestamp":17562226546,"id":11465,"parentId":11454,"tags":{},"startTime":1766009449252,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":2569,"timestamp":17562226625,"id":11466,"parentId":11454,"tags":{},"startTime":1766009449252,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":78,"timestamp":17562229833,"id":11468,"parentId":11423,"tags":{},"startTime":1766009449255,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":130,"timestamp":17562229784,"id":11467,"parentId":11423,"tags":{},"startTime":1766009449255,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":13304,"timestamp":17562217623,"id":11454,"parentId":11423,"tags":{},"startTime":1766009449243,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":99583,"timestamp":17562131367,"id":11423,"parentId":11379,"tags":{"name":"client"},"startTime":1766009449157,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":6320,"timestamp":17562230971,"id":11469,"parentId":11379,"tags":{},"startTime":1766009449257,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":191003,"timestamp":17562047453,"id":11379,"parentId":3,"tags":{"trigger":"src/components/StatusSwitcher.tsx"},"startTime":1766009449073,"traceId":"ccbcc14e0de3ee02"}]
[{"name":"client-success","duration":0,"timestamp":17562239907,"id":11470,"parentId":3,"tags":{},"startTime":1766009449265,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17562239968,"id":11471,"parentId":3,"tags":{},"startTime":1766009449266,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17562239994,"id":11472,"parentId":3,"tags":{},"startTime":1766009449266,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":11008,"timestamp":17562243405,"id":11473,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009449269,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":10970,"timestamp":17562243448,"id":11474,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009449269,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":11051,"timestamp":17562243484,"id":11475,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009449269,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":204000,"timestamp":1766009449073000,"id":11476,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009449282,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":204000,"timestamp":1766009449073000,"id":11477,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009449282,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":215000,"timestamp":1766009449074000,"id":11481,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/flask-conical.js","(app-pages-browser)/./src/components/StatusSwitcher.tsx"],"page":"/","isPageHidden":true},"startTime":1766009449300,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":25137,"timestamp":17562257193,"id":11479,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009449283,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":1,"timestamp":17562282377,"id":11482,"parentId":11479,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"953999360","memory.heapUsed":"537561912","memory.heapTotal":"582860800"},"startTime":1766009449308,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":25385,"timestamp":17562257390,"id":11480,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009449283,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":1,"timestamp":17562282814,"id":11483,"parentId":11480,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"953999360","memory.heapUsed":"537709344","memory.heapTotal":"582860800"},"startTime":1766009449308,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":26543,"timestamp":17562256662,"id":11478,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009449282,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":1,"timestamp":17562283245,"id":11484,"parentId":11478,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"953999360","memory.heapUsed":"537857744","memory.heapTotal":"582860800"},"startTime":1766009449309,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":12770,"timestamp":17574787199,"id":11491,"parentId":11488,"tags":{"request":"next/dist/pages/_document"},"startTime":1766009461813,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":13104,"timestamp":17574787133,"id":11489,"parentId":11488,"tags":{"request":"next/dist/pages/_app"},"startTime":1766009461813,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":13026,"timestamp":17574787216,"id":11493,"parentId":11488,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009461813,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":13357,"timestamp":17574787188,"id":11490,"parentId":11488,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009461813,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":13343,"timestamp":17574787207,"id":11492,"parentId":11488,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009461813,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":16408,"timestamp":17574787223,"id":11494,"parentId":11488,"tags":{"request":"next-app-loader?name=app%2Fbottles%2F%5Bid%5D%2Fpage&page=%2Fbottles%2F%5Bid%5D%2Fpage&appPaths=%2Fbottles%2F%5Bid%5D%2Fpage&pagePath=private-next-app-dir%2Fbottles%2F%5Bid%5D%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009461813,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":11121,"timestamp":17574805985,"id":11503,"parentId":11502,"tags":{},"startTime":1766009461832,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":11183,"timestamp":17574805928,"id":11502,"parentId":11501,"tags":{},"startTime":1766009461831,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":15673,"timestamp":17574805702,"id":11501,"parentId":11487,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/components/BottleGrid.tsx","layer":"ssr"},"startTime":1766009461831,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":37142,"timestamp":17574785225,"id":11488,"parentId":11487,"tags":{},"startTime":1766009461811,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":3136,"timestamp":17574839367,"id":11507,"parentId":11506,"tags":{},"startTime":1766009461865,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":4,"timestamp":17574842532,"id":11509,"parentId":11506,"tags":{},"startTime":1766009461868,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":2619,"timestamp":17574842549,"id":11510,"parentId":11506,"tags":{},"startTime":1766009461868,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":11,"timestamp":17574845206,"id":11511,"parentId":11506,"tags":{},"startTime":1766009461871,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":7,"timestamp":17574845239,"id":11512,"parentId":11506,"tags":{},"startTime":1766009461871,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":3794,"timestamp":17574842522,"id":11508,"parentId":11506,"tags":{},"startTime":1766009461868,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":1737,"timestamp":17574847393,"id":11513,"parentId":11506,"tags":{},"startTime":1766009461873,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":4337,"timestamp":17574849143,"id":11514,"parentId":11506,"tags":{},"startTime":1766009461875,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":946,"timestamp":17574854523,"id":11515,"parentId":11506,"tags":{},"startTime":1766009461880,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":90,"timestamp":17574855468,"id":11516,"parentId":11506,"tags":{},"startTime":1766009461881,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":117,"timestamp":17574855547,"id":11517,"parentId":11506,"tags":{},"startTime":1766009461881,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1772,"timestamp":17574855673,"id":11518,"parentId":11506,"tags":{},"startTime":1766009461881,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":23740,"timestamp":17574836046,"id":11506,"parentId":11487,"tags":{},"startTime":1766009461862,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":78145,"timestamp":17574784965,"id":11487,"parentId":11485,"tags":{"name":"server"},"startTime":1766009461811,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":3040,"timestamp":17574863144,"id":11519,"parentId":11485,"tags":{},"startTime":1766009461889,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-server","duration":87781,"timestamp":17574778645,"id":11485,"parentId":3,"tags":{"trigger":"src/components/BottleGrid.tsx"},"startTime":1766009461804,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":3911,"timestamp":17574872630,"id":11522,"parentId":11521,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009461898,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":3865,"timestamp":17574872683,"id":11524,"parentId":11521,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009461898,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4765,"timestamp":17574872697,"id":11526,"parentId":11521,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009461898,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":6455,"timestamp":17574872709,"id":11528,"parentId":11521,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009461898,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":6429,"timestamp":17574872738,"id":11533,"parentId":11521,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009461898,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7448,"timestamp":17574872675,"id":11523,"parentId":11521,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009461898,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7483,"timestamp":17574872726,"id":11531,"parentId":11521,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009461898,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7479,"timestamp":17574872732,"id":11532,"parentId":11521,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009461898,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":1626,"timestamp":17574878596,"id":11539,"parentId":11538,"tags":{},"startTime":1766009461904,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":9608,"timestamp":17574872691,"id":11525,"parentId":11521,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009461898,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":6615,"timestamp":17574876373,"id":11537,"parentId":11536,"tags":{},"startTime":1766009461902,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":6667,"timestamp":17574876324,"id":11536,"parentId":11535,"tags":{},"startTime":1766009461902,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":10669,"timestamp":17574876160,"id":11535,"parentId":11520,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/components/BottleGrid.tsx","layer":"app-pages-browser"},"startTime":1766009461902,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-process","duration":48753,"timestamp":17574880273,"id":11541,"parentId":11540,"tags":{},"startTime":1766009461906,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-loader","duration":48914,"timestamp":17574880241,"id":11540,"parentId":11538,"tags":{},"startTime":1766009461906,"traceId":"ccbcc14e0de3ee02"},{"name":"css-loader","duration":7748,"timestamp":17574929180,"id":11542,"parentId":11538,"tags":{"astUsed":"true"},"startTime":1766009461955,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":59114,"timestamp":17574878514,"id":11538,"parentId":11534,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css.webpack[javascript/auto]!=!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":null},"startTime":1766009461904,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":65395,"timestamp":17574872703,"id":11527,"parentId":11521,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009461898,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":65432,"timestamp":17574872714,"id":11529,"parentId":11521,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009461898,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":65101,"timestamp":17574874887,"id":11534,"parentId":11520,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":"app-pages-browser"},"startTime":1766009461900,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module","duration":22,"timestamp":17574941302,"id":11543,"parentId":11534,"tags":{},"startTime":1766009461967,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":68615,"timestamp":17574872720,"id":11530,"parentId":11521,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&server=false!"},"startTime":1766009461898,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":73803,"timestamp":17574867543,"id":11521,"parentId":11520,"tags":{},"startTime":1766009461893,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":968,"timestamp":17574944663,"id":11545,"parentId":11544,"tags":{},"startTime":1766009461970,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":3,"timestamp":17574945642,"id":11547,"parentId":11544,"tags":{},"startTime":1766009461971,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":41,"timestamp":17574945655,"id":11548,"parentId":11544,"tags":{},"startTime":1766009461971,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":4,"timestamp":17574945709,"id":11549,"parentId":11544,"tags":{},"startTime":1766009461971,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":2,"timestamp":17574945726,"id":11550,"parentId":11544,"tags":{},"startTime":1766009461971,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":581,"timestamp":17574945638,"id":11546,"parentId":11544,"tags":{},"startTime":1766009461971,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":380,"timestamp":17574946845,"id":11551,"parentId":11544,"tags":{},"startTime":1766009461972,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":1896,"timestamp":17574947232,"id":11552,"parentId":11544,"tags":{},"startTime":1766009461973,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":1808,"timestamp":17574949905,"id":11553,"parentId":11544,"tags":{},"startTime":1766009461975,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":113,"timestamp":17574951713,"id":11554,"parentId":11544,"tags":{},"startTime":1766009461977,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":73,"timestamp":17574951820,"id":11555,"parentId":11544,"tags":{},"startTime":1766009461977,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":2559,"timestamp":17574951897,"id":11556,"parentId":11544,"tags":{},"startTime":1766009461977,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":46,"timestamp":17574955067,"id":11558,"parentId":11520,"tags":{},"startTime":1766009461981,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":95,"timestamp":17574955021,"id":11557,"parentId":11520,"tags":{},"startTime":1766009461981,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":12579,"timestamp":17574943469,"id":11544,"parentId":11520,"tags":{},"startTime":1766009461969,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":88721,"timestamp":17574867346,"id":11520,"parentId":11486,"tags":{"name":"client"},"startTime":1766009461893,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":11469,"timestamp":17574956084,"id":11559,"parentId":11486,"tags":{},"startTime":1766009461982,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":189612,"timestamp":17574778772,"id":11486,"parentId":3,"tags":{"trigger":"src/components/BottleGrid.tsx"},"startTime":1766009461804,"traceId":"ccbcc14e0de3ee02"}]
[{"name":"client-success","duration":0,"timestamp":17574969832,"id":11560,"parentId":3,"tags":{},"startTime":1766009461995,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17574969917,"id":11561,"parentId":3,"tags":{},"startTime":1766009461995,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17574969946,"id":11562,"parentId":3,"tags":{},"startTime":1766009461996,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":9878,"timestamp":17574972888,"id":11563,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009461998,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":9837,"timestamp":17574972932,"id":11564,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009461998,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":9893,"timestamp":17574972970,"id":11565,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009461999,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":209000,"timestamp":1766009461805000,"id":11569,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./src/components/BottleGrid.tsx"],"page":"/","isPageHidden":false},"startTime":1766009462014,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":210000,"timestamp":1766009461805000,"id":11570,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./src/components/BottleGrid.tsx"],"page":"/","isPageHidden":false},"startTime":1766009462015,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":213000,"timestamp":1766009461805000,"id":11571,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./src/components/BottleGrid.tsx"],"page":"/","isPageHidden":true},"startTime":1766009462033,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":22571,"timestamp":17574985970,"id":11568,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009462012,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17575008584,"id":11572,"parentId":11568,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"954851328","memory.heapUsed":"559050432","memory.heapTotal":"603701248"},"startTime":1766009462034,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":23084,"timestamp":17574985773,"id":11567,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009462011,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17575008890,"id":11573,"parentId":11567,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"954851328","memory.heapUsed":"559200512","memory.heapTotal":"603701248"},"startTime":1766009462034,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":23909,"timestamp":17574985273,"id":11566,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009462011,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17575009210,"id":11574,"parentId":11566,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"954851328","memory.heapUsed":"559347912","memory.heapTotal":"603701248"},"startTime":1766009462035,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19019,"timestamp":17596067978,"id":11581,"parentId":11578,"tags":{"request":"next/dist/pages/_document"},"startTime":1766009483094,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19478,"timestamp":17596067893,"id":11579,"parentId":11578,"tags":{"request":"next/dist/pages/_app"},"startTime":1766009483093,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19748,"timestamp":17596067995,"id":11583,"parentId":11578,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009483094,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19957,"timestamp":17596067964,"id":11580,"parentId":11578,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009483094,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19939,"timestamp":17596067986,"id":11582,"parentId":11578,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009483094,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":24904,"timestamp":17596068012,"id":11584,"parentId":11578,"tags":{"request":"next-app-loader?name=app%2Fbottles%2F%5Bid%5D%2Fpage&page=%2Fbottles%2F%5Bid%5D%2Fpage&appPaths=%2Fbottles%2F%5Bid%5D%2Fpage&pagePath=private-next-app-dir%2Fbottles%2F%5Bid%5D%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009483094,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":5455,"timestamp":17596095815,"id":11593,"parentId":11592,"tags":{},"startTime":1766009483121,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":5526,"timestamp":17596095748,"id":11592,"parentId":11591,"tags":{},"startTime":1766009483121,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":12239,"timestamp":17596095485,"id":11591,"parentId":11577,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/components/BottleGrid.tsx","layer":"ssr"},"startTime":1766009483121,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":183,"timestamp":17596109350,"id":11595,"parentId":11594,"tags":{},"startTime":1766009483135,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":851,"timestamp":17596111250,"id":11597,"parentId":11596,"tags":{},"startTime":1766009483137,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":933,"timestamp":17596111170,"id":11596,"parentId":11594,"tags":{},"startTime":1766009483137,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":3279,"timestamp":17596109186,"id":11594,"parentId":11591,"tags":{"name":"__barrel_optimize__?names=Calendar,Clock,FlaskConical,Ghost,Lock,Search,Unlock,X!=!/home/robin/AI/Coding/Whisky/node_modules/lucide-react/dist/esm/lucide-react.js","layer":"ssr"},"startTime":1766009483135,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":48428,"timestamp":17596065048,"id":11578,"parentId":11577,"tags":{},"startTime":1766009483091,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":2151,"timestamp":17596125716,"id":11601,"parentId":11600,"tags":{},"startTime":1766009483151,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":4,"timestamp":17596127881,"id":11603,"parentId":11600,"tags":{},"startTime":1766009483153,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":1978,"timestamp":17596127896,"id":11604,"parentId":11600,"tags":{},"startTime":1766009483153,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":10,"timestamp":17596129907,"id":11605,"parentId":11600,"tags":{},"startTime":1766009483155,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":5,"timestamp":17596129938,"id":11606,"parentId":11600,"tags":{},"startTime":1766009483156,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":2865,"timestamp":17596127876,"id":11602,"parentId":11600,"tags":{},"startTime":1766009483153,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":1531,"timestamp":17596132450,"id":11607,"parentId":11600,"tags":{},"startTime":1766009483158,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":4325,"timestamp":17596133988,"id":11608,"parentId":11600,"tags":{},"startTime":1766009483160,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":1240,"timestamp":17596139808,"id":11609,"parentId":11600,"tags":{},"startTime":1766009483165,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":133,"timestamp":17596141048,"id":11610,"parentId":11600,"tags":{},"startTime":1766009483167,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":186,"timestamp":17596141168,"id":11611,"parentId":11600,"tags":{},"startTime":1766009483167,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":2118,"timestamp":17596141362,"id":11612,"parentId":11600,"tags":{},"startTime":1766009483167,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":22336,"timestamp":17596123659,"id":11600,"parentId":11577,"tags":{},"startTime":1766009483149,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":84946,"timestamp":17596064675,"id":11577,"parentId":11575,"tags":{"name":"server"},"startTime":1766009483090,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":2782,"timestamp":17596149655,"id":11613,"parentId":11575,"tags":{},"startTime":1766009483175,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-server","duration":94900,"timestamp":17596057779,"id":11575,"parentId":3,"tags":{"trigger":"src/components/BottleGrid.tsx"},"startTime":1766009483083,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":3977,"timestamp":17596157858,"id":11616,"parentId":11615,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009483183,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":3932,"timestamp":17596157910,"id":11618,"parentId":11615,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009483183,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4791,"timestamp":17596157923,"id":11620,"parentId":11615,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009483183,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":6346,"timestamp":17596157935,"id":11622,"parentId":11615,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009483183,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":6320,"timestamp":17596157965,"id":11627,"parentId":11615,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009483184,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7198,"timestamp":17596157900,"id":11617,"parentId":11615,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009483183,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7222,"timestamp":17596157952,"id":11625,"parentId":11615,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009483184,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7218,"timestamp":17596157959,"id":11626,"parentId":11615,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009483184,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":1417,"timestamp":17596163770,"id":11633,"parentId":11632,"tags":{},"startTime":1766009483189,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":10239,"timestamp":17596157917,"id":11619,"parentId":11615,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009483183,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":6698,"timestamp":17596161663,"id":11631,"parentId":11630,"tags":{},"startTime":1766009483187,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":6751,"timestamp":17596161612,"id":11630,"parentId":11629,"tags":{},"startTime":1766009483187,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":9939,"timestamp":17596161437,"id":11629,"parentId":11614,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/components/BottleGrid.tsx","layer":"app-pages-browser"},"startTime":1766009483187,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-process","duration":46451,"timestamp":17596165238,"id":11635,"parentId":11634,"tags":{},"startTime":1766009483191,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-loader","duration":46615,"timestamp":17596165205,"id":11634,"parentId":11632,"tags":{},"startTime":1766009483191,"traceId":"ccbcc14e0de3ee02"},{"name":"css-loader","duration":8451,"timestamp":17596211845,"id":11636,"parentId":11632,"tags":{"astUsed":"true"},"startTime":1766009483237,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":57282,"timestamp":17596163705,"id":11632,"parentId":11628,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css.webpack[javascript/auto]!=!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":null},"startTime":1766009483189,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":11,"timestamp":17596221336,"id":11638,"parentId":11637,"tags":{},"startTime":1766009483247,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":64333,"timestamp":17596157929,"id":11621,"parentId":11615,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009483183,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":63956,"timestamp":17596160196,"id":11628,"parentId":11614,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":"app-pages-browser"},"startTime":1766009483186,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":2097,"timestamp":17596222103,"id":11640,"parentId":11639,"tags":{},"startTime":1766009483248,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":2154,"timestamp":17596222048,"id":11639,"parentId":11637,"tags":{},"startTime":1766009483248,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":3593,"timestamp":17596221224,"id":11637,"parentId":11629,"tags":{"name":"__barrel_optimize__?names=Calendar,Clock,FlaskConical,Ghost,Lock,Search,Unlock,X!=!/home/robin/AI/Coding/Whisky/node_modules/lucide-react/dist/esm/lucide-react.js","layer":"app-pages-browser"},"startTime":1766009483247,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module","duration":18,"timestamp":17596225511,"id":11641,"parentId":11628,"tags":{},"startTime":1766009483251,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":67607,"timestamp":17596157946,"id":11624,"parentId":11615,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&server=false!"},"startTime":1766009483184,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":67643,"timestamp":17596157941,"id":11623,"parentId":11615,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009483184,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":71778,"timestamp":17596153817,"id":11615,"parentId":11614,"tags":{},"startTime":1766009483179,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":996,"timestamp":17596229018,"id":11643,"parentId":11642,"tags":{},"startTime":1766009483255,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":3,"timestamp":17596230027,"id":11645,"parentId":11642,"tags":{},"startTime":1766009483256,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":42,"timestamp":17596230039,"id":11646,"parentId":11642,"tags":{},"startTime":1766009483256,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":4,"timestamp":17596230094,"id":11647,"parentId":11642,"tags":{},"startTime":1766009483256,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":2,"timestamp":17596230111,"id":11648,"parentId":11642,"tags":{},"startTime":1766009483256,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":580,"timestamp":17596230022,"id":11644,"parentId":11642,"tags":{},"startTime":1766009483256,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":2346,"timestamp":17596231293,"id":11649,"parentId":11642,"tags":{},"startTime":1766009483257,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":1874,"timestamp":17596233648,"id":11650,"parentId":11642,"tags":{},"startTime":1766009483259,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":2025,"timestamp":17596236383,"id":11651,"parentId":11642,"tags":{},"startTime":1766009483262,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":115,"timestamp":17596238408,"id":11652,"parentId":11642,"tags":{},"startTime":1766009483264,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":76,"timestamp":17596238516,"id":11653,"parentId":11642,"tags":{},"startTime":1766009483264,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":2534,"timestamp":17596238600,"id":11654,"parentId":11642,"tags":{},"startTime":1766009483264,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":45,"timestamp":17596241717,"id":11656,"parentId":11614,"tags":{},"startTime":1766009483267,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":92,"timestamp":17596241672,"id":11655,"parentId":11614,"tags":{},"startTime":1766009483267,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":14856,"timestamp":17596227830,"id":11642,"parentId":11614,"tags":{},"startTime":1766009483253,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":89098,"timestamp":17596153606,"id":11614,"parentId":11576,"tags":{"name":"client"},"startTime":1766009483179,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":8847,"timestamp":17596242722,"id":11657,"parentId":11576,"tags":{},"startTime":1766009483268,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":194743,"timestamp":17596057895,"id":11576,"parentId":3,"tags":{"trigger":"src/components/BottleGrid.tsx"},"startTime":1766009483083,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"client-success","duration":0,"timestamp":17596254300,"id":11658,"parentId":3,"tags":{},"startTime":1766009483280,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17596254366,"id":11659,"parentId":3,"tags":{},"startTime":1766009483280,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17596254406,"id":11660,"parentId":3,"tags":{},"startTime":1766009483280,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":11954,"timestamp":17596258438,"id":11661,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009483284,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":11894,"timestamp":17596258501,"id":11662,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009483284,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":11923,"timestamp":17596258567,"id":11663,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009483284,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":218000,"timestamp":1766009483084000,"id":11667,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/flask-conical.js","(app-pages-browser)/./src/components/BottleGrid.tsx"],"page":"/","isPageHidden":false},"startTime":1766009483304,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":220000,"timestamp":1766009483084000,"id":11668,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/flask-conical.js","(app-pages-browser)/./src/components/BottleGrid.tsx"],"page":"/","isPageHidden":false},"startTime":1766009483304,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":224000,"timestamp":1766009483085000,"id":11669,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/flask-conical.js","(app-pages-browser)/./src/components/StatusSwitcher.tsx","(app-pages-browser)/./src/components/BottleGrid.tsx"],"page":"/","isPageHidden":true},"startTime":1766009483322,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":27613,"timestamp":17596271891,"id":11664,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009483297,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":1,"timestamp":17596299549,"id":11670,"parentId":11664,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"968523776","memory.heapUsed":"592873536","memory.heapTotal":"627441664"},"startTime":1766009483325,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":27567,"timestamp":17596272379,"id":11665,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009483298,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17596299979,"id":11671,"parentId":11665,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"968523776","memory.heapUsed":"593020968","memory.heapTotal":"627441664"},"startTime":1766009483326,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":27737,"timestamp":17596272577,"id":11666,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009483298,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17596300349,"id":11672,"parentId":11666,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"968523776","memory.heapUsed":"593169200","memory.heapTotal":"627441664"},"startTime":1766009483326,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":35041,"timestamp":17800528076,"id":11679,"parentId":11676,"tags":{"request":"next/dist/pages/_document"},"startTime":1766009687554,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":35433,"timestamp":17800527980,"id":11677,"parentId":11676,"tags":{"request":"next/dist/pages/_app"},"startTime":1766009687554,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":35749,"timestamp":17800528063,"id":11678,"parentId":11676,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009687554,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":35735,"timestamp":17800528084,"id":11680,"parentId":11676,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009687554,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!","duration":35940,"timestamp":17800540693,"id":11683,"parentId":11681,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!","layer":"rsc"},"startTime":1766009687566,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!","duration":44808,"timestamp":17800541334,"id":11684,"parentId":11682,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fbottles%2F%5Bid%5D%2Fpage&page=%2Fbottles%2F%5Bid%5D%2Fpage&appPaths=%2Fbottles%2F%5Bid%5D%2Fpage&pagePath=private-next-app-dir%2Fbottles%2F%5Bid%5D%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!","layer":"rsc"},"startTime":1766009687567,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":174162,"timestamp":17800528092,"id":11681,"parentId":11676,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009687554,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":180618,"timestamp":17800528099,"id":11682,"parentId":11676,"tags":{"request":"next-app-loader?name=app%2Fbottles%2F%5Bid%5D%2Fpage&page=%2Fbottles%2F%5Bid%5D%2Fpage&appPaths=%2Fbottles%2F%5Bid%5D%2Fpage&pagePath=private-next-app-dir%2Fbottles%2F%5Bid%5D%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009687554,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":194769,"timestamp":17800524908,"id":11676,"parentId":11675,"tags":{},"startTime":1766009687550,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":6431,"timestamp":17800732488,"id":11694,"parentId":11693,"tags":{},"startTime":1766009687758,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":6,"timestamp":17800738939,"id":11696,"parentId":11693,"tags":{},"startTime":1766009687765,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":2236,"timestamp":17800738958,"id":11697,"parentId":11693,"tags":{},"startTime":1766009687765,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":7,"timestamp":17800741213,"id":11698,"parentId":11693,"tags":{},"startTime":1766009687767,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":4,"timestamp":17800741239,"id":11699,"parentId":11693,"tags":{},"startTime":1766009687767,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":3813,"timestamp":17800738932,"id":11695,"parentId":11693,"tags":{},"startTime":1766009687764,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":2007,"timestamp":17800743926,"id":11700,"parentId":11693,"tags":{},"startTime":1766009687769,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":3197,"timestamp":17800745995,"id":11701,"parentId":11693,"tags":{},"startTime":1766009687772,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":800,"timestamp":17800750118,"id":11702,"parentId":11693,"tags":{},"startTime":1766009687776,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":94,"timestamp":17800750918,"id":11703,"parentId":11693,"tags":{},"startTime":1766009687776,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":80,"timestamp":17800750996,"id":11704,"parentId":11693,"tags":{},"startTime":1766009687777,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1300,"timestamp":17800751080,"id":11705,"parentId":11693,"tags":{},"startTime":1766009687777,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":24257,"timestamp":17800730333,"id":11693,"parentId":11675,"tags":{},"startTime":1766009687756,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":236662,"timestamp":17800523617,"id":11675,"parentId":11673,"tags":{"name":"server"},"startTime":1766009687549,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":3034,"timestamp":17800760309,"id":11706,"parentId":11673,"tags":{},"startTime":1766009687786,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-server","duration":247107,"timestamp":17800516563,"id":11673,"parentId":3,"tags":{"trigger":"src/app/manifest.ts"},"startTime":1766009687542,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4509,"timestamp":17800768810,"id":11710,"parentId":11708,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009687794,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4466,"timestamp":17800768861,"id":11712,"parentId":11708,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009687794,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":5391,"timestamp":17800768875,"id":11714,"parentId":11708,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009687794,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":6996,"timestamp":17800768887,"id":11716,"parentId":11708,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009687794,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":6970,"timestamp":17800768917,"id":11721,"parentId":11708,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009687794,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7585,"timestamp":17800768851,"id":11711,"parentId":11708,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009687794,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":8160,"timestamp":17800768905,"id":11719,"parentId":11708,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009687794,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":8157,"timestamp":17800768911,"id":11720,"parentId":11708,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009687794,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":1690,"timestamp":17800775390,"id":11724,"parentId":11723,"tags":{},"startTime":1766009687801,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":13286,"timestamp":17800768869,"id":11713,"parentId":11708,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009687794,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-process","duration":42484,"timestamp":17800777130,"id":11726,"parentId":11725,"tags":{},"startTime":1766009687803,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-loader","duration":42658,"timestamp":17800777097,"id":11725,"parentId":11723,"tags":{},"startTime":1766009687803,"traceId":"ccbcc14e0de3ee02"},{"name":"css-loader","duration":8363,"timestamp":17800819783,"id":11727,"parentId":11723,"tags":{"astUsed":"true"},"startTime":1766009687845,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":55926,"timestamp":17800775325,"id":11723,"parentId":11722,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css.webpack[javascript/auto]!=!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":null},"startTime":1766009687801,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":62648,"timestamp":17800768893,"id":11717,"parentId":11708,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009687794,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":63219,"timestamp":17800768881,"id":11715,"parentId":11708,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009687794,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":62369,"timestamp":17800771511,"id":11722,"parentId":11707,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":"app-pages-browser"},"startTime":1766009687797,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module","duration":23,"timestamp":17800838803,"id":11729,"parentId":11722,"tags":{},"startTime":1766009687864,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":70087,"timestamp":17800768899,"id":11718,"parentId":11708,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&server=false!"},"startTime":1766009687794,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":74237,"timestamp":17800764761,"id":11708,"parentId":11707,"tags":{},"startTime":1766009687790,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":1226,"timestamp":17800861071,"id":11731,"parentId":11730,"tags":{},"startTime":1766009687887,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":4,"timestamp":17800862312,"id":11733,"parentId":11730,"tags":{},"startTime":1766009687888,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":44,"timestamp":17800862328,"id":11734,"parentId":11730,"tags":{},"startTime":1766009687888,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":4,"timestamp":17800862387,"id":11735,"parentId":11730,"tags":{},"startTime":1766009687888,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":3,"timestamp":17800862407,"id":11736,"parentId":11730,"tags":{},"startTime":1766009687888,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":937,"timestamp":17800862307,"id":11732,"parentId":11730,"tags":{},"startTime":1766009687888,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":336,"timestamp":17800863986,"id":11737,"parentId":11730,"tags":{},"startTime":1766009687890,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":2077,"timestamp":17800864330,"id":11738,"parentId":11730,"tags":{},"startTime":1766009687890,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":2186,"timestamp":17800867381,"id":11739,"parentId":11730,"tags":{},"startTime":1766009687893,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":152,"timestamp":17800869567,"id":11740,"parentId":11730,"tags":{},"startTime":1766009687895,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":85,"timestamp":17800869712,"id":11741,"parentId":11730,"tags":{},"startTime":1766009687895,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1813,"timestamp":17800869802,"id":11742,"parentId":11730,"tags":{},"startTime":1766009687895,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":53,"timestamp":17800872310,"id":11744,"parentId":11707,"tags":{},"startTime":1766009687898,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":112,"timestamp":17800872254,"id":11743,"parentId":11707,"tags":{},"startTime":1766009687898,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":13712,"timestamp":17800859771,"id":11730,"parentId":11707,"tags":{},"startTime":1766009687885,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":108951,"timestamp":17800764555,"id":11707,"parentId":11674,"tags":{"name":"client"},"startTime":1766009687790,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":6541,"timestamp":17800873529,"id":11745,"parentId":11674,"tags":{},"startTime":1766009687899,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":125,"timestamp":17800880715,"id":11746,"parentId":3,"tags":{"trigger":"manual"},"startTime":1766009687906,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17800885773,"id":11749,"parentId":3,"tags":{},"startTime":1766009687911,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17800885855,"id":11750,"parentId":3,"tags":{},"startTime":1766009687911,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17800885973,"id":11751,"parentId":3,"tags":{},"startTime":1766009687912,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":27000,"timestamp":1766009687907000,"id":11758,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009687934,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":27000,"timestamp":1766009687907000,"id":11759,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009687934,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":18002,"timestamp":17800892415,"id":11756,"parentId":11748,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009687918,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":18098,"timestamp":17800892325,"id":11752,"parentId":11748,"tags":{"request":"next/dist/pages/_app"},"startTime":1766009687918,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":28000,"timestamp":1766009687908000,"id":11760,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":true},"startTime":1766009687937,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19246,"timestamp":17800892391,"id":11754,"parentId":11748,"tags":{"request":"next/dist/pages/_document"},"startTime":1766009687918,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19262,"timestamp":17800892378,"id":11753,"parentId":11748,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009687918,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19237,"timestamp":17800892406,"id":11755,"parentId":11748,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009687918,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":21163,"timestamp":17800892424,"id":11757,"parentId":11748,"tags":{"request":"next-app-loader?name=app%2Fbottles%2F%5Bid%5D%2Fpage&page=%2Fbottles%2F%5Bid%5D%2Fpage&appPaths=%2Fbottles%2F%5Bid%5D%2Fpage&pagePath=private-next-app-dir%2Fbottles%2F%5Bid%5D%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009687918,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":37085,"timestamp":17800883473,"id":11748,"parentId":11747,"tags":{},"startTime":1766009687909,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":2092,"timestamp":17800939675,"id":11770,"parentId":11769,"tags":{},"startTime":1766009687965,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":4,"timestamp":17800941785,"id":11772,"parentId":11769,"tags":{},"startTime":1766009687967,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":2588,"timestamp":17800941801,"id":11773,"parentId":11769,"tags":{},"startTime":1766009687967,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":6,"timestamp":17800944412,"id":11774,"parentId":11769,"tags":{},"startTime":1766009687970,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":3,"timestamp":17800944430,"id":11775,"parentId":11769,"tags":{},"startTime":1766009687970,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":3425,"timestamp":17800941778,"id":11771,"parentId":11769,"tags":{},"startTime":1766009687967,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":2347,"timestamp":17800946265,"id":11776,"parentId":11769,"tags":{},"startTime":1766009687972,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":9244,"timestamp":17800948622,"id":11777,"parentId":11769,"tags":{},"startTime":1766009687974,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":950,"timestamp":17800959027,"id":11778,"parentId":11769,"tags":{},"startTime":1766009687985,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":106,"timestamp":17800959977,"id":11779,"parentId":11769,"tags":{},"startTime":1766009687986,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"module-assets","duration":276,"timestamp":17800960075,"id":11780,"parentId":11769,"tags":{},"startTime":1766009687986,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":304,"timestamp":17800960358,"id":11781,"parentId":11769,"tags":{},"startTime":1766009687986,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":26268,"timestamp":17800937108,"id":11769,"parentId":11747,"tags":{},"startTime":1766009687963,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":83746,"timestamp":17800883089,"id":11747,"parentId":11709,"tags":{"name":"server"},"startTime":1766009687909,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":8046,"timestamp":17800966931,"id":11782,"parentId":11709,"tags":{},"startTime":1766009687992,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-server","duration":207042,"timestamp":17800768246,"id":11709,"parentId":3,"tags":{"trigger":"src/app/manifest.ts"},"startTime":1766009687794,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4673,"timestamp":17800981812,"id":11785,"parentId":11784,"tags":{"request":"next-middleware-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fmiddleware.ts&page=%2Fsrc%2Fmiddleware&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&matchers=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009688007,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":9491,"timestamp":17800977053,"id":11784,"parentId":11783,"tags":{},"startTime":1766009688003,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":203,"timestamp":17800991122,"id":11787,"parentId":11786,"tags":{},"startTime":1766009688017,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":4,"timestamp":17800991336,"id":11789,"parentId":11786,"tags":{},"startTime":1766009688017,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":21,"timestamp":17800991350,"id":11790,"parentId":11786,"tags":{},"startTime":1766009688017,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":5,"timestamp":17800991383,"id":11791,"parentId":11786,"tags":{},"startTime":1766009688017,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":3,"timestamp":17800991398,"id":11792,"parentId":11786,"tags":{},"startTime":1766009688017,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":396,"timestamp":17800991332,"id":11788,"parentId":11786,"tags":{},"startTime":1766009688017,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":82,"timestamp":17800992064,"id":11793,"parentId":11786,"tags":{},"startTime":1766009688018,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":324,"timestamp":17800992153,"id":11794,"parentId":11786,"tags":{},"startTime":1766009688018,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":875,"timestamp":17800993008,"id":11795,"parentId":11786,"tags":{},"startTime":1766009688019,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":73,"timestamp":17800993883,"id":11796,"parentId":11786,"tags":{},"startTime":1766009688019,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":21,"timestamp":17800993951,"id":11797,"parentId":11786,"tags":{},"startTime":1766009688020,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":74,"timestamp":17800993975,"id":11798,"parentId":11786,"tags":{},"startTime":1766009688020,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":4175,"timestamp":17800990669,"id":11786,"parentId":11783,"tags":{},"startTime":1766009688016,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":18627,"timestamp":17800976284,"id":11783,"parentId":11728,"tags":{"name":"edge-server"},"startTime":1766009688002,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":2061,"timestamp":17800994966,"id":11799,"parentId":11728,"tags":{},"startTime":1766009688021,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-edge-server","duration":160131,"timestamp":17800837150,"id":11728,"parentId":3,"tags":{"trigger":"manual"},"startTime":1766009687863,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4206,"timestamp":17801001324,"id":11802,"parentId":11801,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009688027,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4171,"timestamp":17801001368,"id":11804,"parentId":11801,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009688027,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":5283,"timestamp":17801001382,"id":11806,"parentId":11801,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009688027,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":5970,"timestamp":17801001405,"id":11810,"parentId":11801,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&server=false!"},"startTime":1766009688027,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":6712,"timestamp":17801001394,"id":11808,"parentId":11801,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009688027,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":6686,"timestamp":17801001424,"id":11813,"parentId":11801,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009688027,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7655,"timestamp":17801001411,"id":11811,"parentId":11801,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009688027,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7652,"timestamp":17801001418,"id":11812,"parentId":11801,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009688027,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":8042,"timestamp":17801001375,"id":11805,"parentId":11801,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009688027,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":8063,"timestamp":17801001358,"id":11803,"parentId":11801,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009688027,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":8937,"timestamp":17801001399,"id":11809,"parentId":11801,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009688027,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":21654,"timestamp":17801004230,"id":11816,"parentId":11815,"tags":{},"startTime":1766009688030,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":21746,"timestamp":17801004141,"id":11815,"parentId":11814,"tags":{},"startTime":1766009688030,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":51749,"timestamp":17801003910,"id":11814,"parentId":11800,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/shared/lib/router/router.js","layer":null},"startTime":1766009688029,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":75749,"timestamp":17801001388,"id":11807,"parentId":11801,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009688027,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":78990,"timestamp":17800998161,"id":11801,"parentId":11800,"tags":{},"startTime":1766009688024,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":1472,"timestamp":17801081194,"id":11818,"parentId":11817,"tags":{},"startTime":1766009688107,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":3,"timestamp":17801082682,"id":11820,"parentId":11817,"tags":{},"startTime":1766009688108,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":38,"timestamp":17801082696,"id":11821,"parentId":11817,"tags":{},"startTime":1766009688108,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":5,"timestamp":17801082747,"id":11822,"parentId":11817,"tags":{},"startTime":1766009688108,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":3,"timestamp":17801082764,"id":11823,"parentId":11817,"tags":{},"startTime":1766009688108,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":641,"timestamp":17801082675,"id":11819,"parentId":11817,"tags":{},"startTime":1766009688108,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":505,"timestamp":17801084046,"id":11824,"parentId":11817,"tags":{},"startTime":1766009688110,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":2045,"timestamp":17801084559,"id":11825,"parentId":11817,"tags":{},"startTime":1766009688110,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":2593,"timestamp":17801087850,"id":11826,"parentId":11817,"tags":{},"startTime":1766009688113,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":151,"timestamp":17801090443,"id":11827,"parentId":11817,"tags":{},"startTime":1766009688116,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":84,"timestamp":17801090587,"id":11828,"parentId":11817,"tags":{},"startTime":1766009688116,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":12693,"timestamp":17801090675,"id":11829,"parentId":11817,"tags":{},"startTime":1766009688116,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":102,"timestamp":17801104468,"id":11831,"parentId":11800,"tags":{},"startTime":1766009688130,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":157,"timestamp":17801104418,"id":11830,"parentId":11800,"tags":{},"startTime":1766009688130,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":25991,"timestamp":17801079790,"id":11817,"parentId":11800,"tags":{},"startTime":1766009688105,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":107819,"timestamp":17800997983,"id":11800,"parentId":3,"tags":{"name":"client"},"startTime":1766009688024,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":13740,"timestamp":17801105824,"id":11832,"parentId":3,"tags":{},"startTime":1766009688131,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"client-success","duration":0,"timestamp":17801122288,"id":11833,"parentId":3,"tags":{},"startTime":1766009688148,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17801122361,"id":11834,"parentId":3,"tags":{},"startTime":1766009688148,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17801122394,"id":11835,"parentId":3,"tags":{},"startTime":1766009688148,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":24970,"timestamp":17801127278,"id":11836,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009688153,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":24914,"timestamp":17801127339,"id":11837,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009688153,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":25015,"timestamp":17801127393,"id":11838,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009688153,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":266000,"timestamp":1766009687908000,"id":11839,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":true},"startTime":1766009688179,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":267000,"timestamp":1766009687907000,"id":11840,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009688179,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":267000,"timestamp":1766009687907000,"id":11841,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009688179,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":37445,"timestamp":17801153854,"id":11843,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009688179,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17801191348,"id":11845,"parentId":11843,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"972058624","memory.heapUsed":"526133440","memory.heapTotal":"592900096"},"startTime":1766009688217,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":38386,"timestamp":17801153297,"id":11842,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009688179,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17801191720,"id":11846,"parentId":11842,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"972058624","memory.heapUsed":"526280848","memory.heapTotal":"592900096"},"startTime":1766009688217,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":37955,"timestamp":17801154092,"id":11844,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009688180,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17801192082,"id":11847,"parentId":11844,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"972058624","memory.heapUsed":"526429040","memory.heapTotal":"592900096"},"startTime":1766009688218,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":3740,"timestamp":17801201962,"id":11848,"tags":{"url":"/manifest.webmanifest","isTurbopack":false},"startTime":1766009688228,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":11454,"timestamp":17801215318,"id":11854,"tags":{"url":"/manifest.webmanifest","isTurbopack":false},"startTime":1766009688241,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!","duration":4239,"timestamp":17801228969,"id":11862,"parentId":11861,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fmanifest.webmanifest%2Froute&page=%2Fmanifest.webmanifest%2Froute&appPaths=&pagePath=private-next-app-dir%2Fmanifest.ts&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!","layer":"rsc"},"startTime":1766009688255,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17606,"timestamp":17801216727,"id":11857,"parentId":11853,"tags":{"request":"next/dist/pages/_document"},"startTime":1766009688242,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17912,"timestamp":17801216648,"id":11855,"parentId":11853,"tags":{"request":"next/dist/pages/_app"},"startTime":1766009688242,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17822,"timestamp":17801216742,"id":11859,"parentId":11853,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009688242,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17856,"timestamp":17801216713,"id":11856,"parentId":11853,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009688242,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17834,"timestamp":17801216736,"id":11858,"parentId":11853,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009688242,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":24624,"timestamp":17801216749,"id":11860,"parentId":11853,"tags":{"request":"next-app-loader?name=app%2Fbottles%2F%5Bid%5D%2Fpage&page=%2Fbottles%2F%5Bid%5D%2Fpage&appPaths=%2Fbottles%2F%5Bid%5D%2Fpage&pagePath=private-next-app-dir%2Fbottles%2F%5Bid%5D%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009688242,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1448,"timestamp":17801241673,"id":11866,"parentId":11865,"tags":{},"startTime":1766009688267,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1533,"timestamp":17801241591,"id":11865,"parentId":11864,"tags":{},"startTime":1766009688267,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-ts?__next_metadata_route__","duration":2431,"timestamp":17801241426,"id":11864,"parentId":11862,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fmanifest.webmanifest%2Froute&isDynamic=1!/home/robin/AI/Coding/Whisky/src/app/manifest.ts?__next_metadata_route__","layer":"app-metadata-route"},"startTime":1766009688267,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":2547,"timestamp":17801242167,"id":11869,"parentId":11868,"tags":{},"startTime":1766009688268,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":2588,"timestamp":17801242128,"id":11868,"parentId":11867,"tags":{},"startTime":1766009688268,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":3103,"timestamp":17801242047,"id":11867,"parentId":11862,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js","layer":"rsc"},"startTime":1766009688268,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":21,"timestamp":17801245696,"id":11873,"parentId":11867,"tags":{"name":"next/dist/compiled/next-server/app-route.runtime.dev.js","layer":null},"startTime":1766009688271,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1072,"timestamp":17801245520,"id":11872,"parentId":11871,"tags":{},"startTime":1766009688271,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1108,"timestamp":17801245486,"id":11871,"parentId":11870,"tags":{},"startTime":1766009688271,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-ts","duration":1498,"timestamp":17801245389,"id":11870,"parentId":11864,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/manifest.ts","layer":"app-metadata-route"},"startTime":1766009688271,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":839,"timestamp":17801249711,"id":11876,"parentId":11875,"tags":{},"startTime":1766009688275,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":874,"timestamp":17801249679,"id":11875,"parentId":11874,"tags":{},"startTime":1766009688275,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":1516,"timestamp":17801249599,"id":11874,"parentId":11864,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/server.js","layer":"app-metadata-route"},"startTime":1766009688275,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1691,"timestamp":17801250217,"id":11879,"parentId":11878,"tags":{},"startTime":1766009688276,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1725,"timestamp":17801250185,"id":11878,"parentId":11877,"tags":{},"startTime":1766009688276,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":3442,"timestamp":17801250086,"id":11877,"parentId":11864,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/metadata/resolve-route-data.js","layer":"app-metadata-route"},"startTime":1766009688276,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1055,"timestamp":17801255574,"id":11882,"parentId":11881,"tags":{},"startTime":1766009688281,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1091,"timestamp":17801255541,"id":11881,"parentId":11880,"tags":{},"startTime":1766009688281,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":1601,"timestamp":17801255458,"id":11880,"parentId":11877,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/lib/metadata/generate/utils.js","layer":"app-metadata-route"},"startTime":1766009688281,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1146,"timestamp":17801257480,"id":11892,"parentId":11891,"tags":{},"startTime":1766009688283,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1166,"timestamp":17801257462,"id":11891,"parentId":11885,"tags":{},"startTime":1766009688283,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":1670,"timestamp":17801257233,"id":11885,"parentId":11874,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/server/web/spec-extension/image-response.js","layer":"app-metadata-route"},"startTime":1766009688283,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1435,"timestamp":17801257517,"id":11894,"parentId":11893,"tags":{},"startTime":1766009688283,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1454,"timestamp":17801257500,"id":11893,"parentId":11886,"tags":{},"startTime":1766009688283,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":2915,"timestamp":17801257294,"id":11886,"parentId":11874,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/server/web/spec-extension/user-agent.js","layer":"app-metadata-route"},"startTime":1766009688283,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":3096,"timestamp":17801257397,"id":11888,"parentId":11887,"tags":{},"startTime":1766009688283,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":3135,"timestamp":17801257361,"id":11887,"parentId":11883,"tags":{},"startTime":1766009688283,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":4490,"timestamp":17801257107,"id":11883,"parentId":11874,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/server/web/spec-extension/request.js","layer":"app-metadata-route"},"startTime":1766009688283,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":4206,"timestamp":17801257442,"id":11890,"parentId":11889,"tags":{},"startTime":1766009688283,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":4229,"timestamp":17801257421,"id":11889,"parentId":11884,"tags":{},"startTime":1766009688283,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":5744,"timestamp":17801257181,"id":11884,"parentId":11874,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/server/web/spec-extension/response.js","layer":"app-metadata-route"},"startTime":1766009688283,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":890,"timestamp":17801266320,"id":11906,"parentId":11905,"tags":{},"startTime":1766009688292,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":910,"timestamp":17801266303,"id":11905,"parentId":11900,"tags":{},"startTime":1766009688292,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":1522,"timestamp":17801266155,"id":11900,"parentId":11883,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/server/web/spec-extension/cookies.js","layer":"app-metadata-route"},"startTime":1766009688292,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1708,"timestamp":17801266283,"id":11904,"parentId":11903,"tags":{},"startTime":1766009688292,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1730,"timestamp":17801266263,"id":11903,"parentId":11899,"tags":{},"startTime":1766009688292,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":2642,"timestamp":17801266104,"id":11899,"parentId":11883,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/server/web/error.js","layer":"app-metadata-route"},"startTime":1766009688292,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":3474,"timestamp":17801266242,"id":11902,"parentId":11901,"tags":{},"startTime":1766009688292,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":3506,"timestamp":17801266214,"id":11901,"parentId":11898,"tags":{},"startTime":1766009688292,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":8079,"timestamp":17801266038,"id":11898,"parentId":11883,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/server/web/utils.js","layer":"app-metadata-route"},"startTime":1766009688292,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":8387,"timestamp":17801265907,"id":11897,"parentId":11896,"tags":{},"startTime":1766009688291,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":8425,"timestamp":17801265872,"id":11896,"parentId":11895,"tags":{},"startTime":1766009688291,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":10841,"timestamp":17801265764,"id":11895,"parentId":11883,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/server/web/next-url.js","layer":"app-metadata-route"},"startTime":1766009688291,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1208,"timestamp":17801281055,"id":11912,"parentId":11911,"tags":{},"startTime":1766009688307,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1245,"timestamp":17801281020,"id":11911,"parentId":11908,"tags":{},"startTime":1766009688307,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":2089,"timestamp":17801280788,"id":11908,"parentId":11895,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js","layer":"app-metadata-route"},"startTime":1766009688306,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1954,"timestamp":17801280972,"id":11910,"parentId":11909,"tags":{},"startTime":1766009688307,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":2018,"timestamp":17801280911,"id":11909,"parentId":11907,"tags":{},"startTime":1766009688306,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":2701,"timestamp":17801280686,"id":11907,"parentId":11895,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/shared/lib/get-hostname.js","layer":"app-metadata-route"},"startTime":1766009688306,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1836,"timestamp":17801281670,"id":11916,"parentId":11915,"tags":{},"startTime":1766009688307,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1901,"timestamp":17801281607,"id":11915,"parentId":11913,"tags":{},"startTime":1766009688307,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":2746,"timestamp":17801281376,"id":11913,"parentId":11895,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js","layer":"app-metadata-route"},"startTime":1766009688307,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":3348,"timestamp":17801281793,"id":11918,"parentId":11917,"tags":{},"startTime":1766009688307,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":3405,"timestamp":17801281739,"id":11917,"parentId":11914,"tags":{},"startTime":1766009688307,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":4791,"timestamp":17801281481,"id":11914,"parentId":11895,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js","layer":"app-metadata-route"},"startTime":1766009688307,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":8457,"timestamp":17801301909,"id":11921,"parentId":11920,"tags":{},"startTime":1766009688327,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":8510,"timestamp":17801301861,"id":11920,"parentId":11919,"tags":{},"startTime":1766009688327,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":13649,"timestamp":17801301743,"id":11919,"parentId":11900,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js","layer":"app-metadata-route"},"startTime":1766009688327,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":7214,"timestamp":17801309262,"id":11926,"parentId":11925,"tags":{},"startTime":1766009688335,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":7268,"timestamp":17801309212,"id":11925,"parentId":11922,"tags":{},"startTime":1766009688335,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":7966,"timestamp":17801308838,"id":11922,"parentId":11913,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js","layer":"app-metadata-route"},"startTime":1766009688334,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":7509,"timestamp":17801309329,"id":11928,"parentId":11927,"tags":{},"startTime":1766009688335,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":7544,"timestamp":17801309296,"id":11927,"parentId":11923,"tags":{},"startTime":1766009688335,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":8296,"timestamp":17801308942,"id":11923,"parentId":11913,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js","layer":"app-metadata-route"},"startTime":1766009688335,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":7869,"timestamp":17801309394,"id":11930,"parentId":11929,"tags":{},"startTime":1766009688335,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":7903,"timestamp":17801309361,"id":11929,"parentId":11924,"tags":{},"startTime":1766009688335,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":8605,"timestamp":17801309034,"id":11924,"parentId":11913,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js","layer":"app-metadata-route"},"startTime":1766009688335,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":2389,"timestamp":17801316168,"id":11937,"parentId":11936,"tags":{},"startTime":1766009688342,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":2423,"timestamp":17801316136,"id":11936,"parentId":11932,"tags":{},"startTime":1766009688342,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":3199,"timestamp":17801315819,"id":11932,"parentId":11914,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js","layer":"app-metadata-route"},"startTime":1766009688341,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":2827,"timestamp":17801316232,"id":11939,"parentId":11938,"tags":{},"startTime":1766009688342,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":2858,"timestamp":17801316204,"id":11938,"parentId":11933,"tags":{},"startTime":1766009688342,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":3515,"timestamp":17801315894,"id":11933,"parentId":11914,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js","layer":"app-metadata-route"},"startTime":1766009688341,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":3337,"timestamp":17801316097,"id":11935,"parentId":11934,"tags":{},"startTime":1766009688342,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":3493,"timestamp":17801316051,"id":11934,"parentId":11931,"tags":{},"startTime":1766009688342,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":4212,"timestamp":17801315722,"id":11931,"parentId":11913,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/shared/lib/router/utils/add-locale.js","layer":"app-metadata-route"},"startTime":1766009688341,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":2329,"timestamp":17801318156,"id":11943,"parentId":11942,"tags":{},"startTime":1766009688344,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"next-swc-loader","duration":2552,"timestamp":17801318116,"id":11942,"parentId":11940,"tags":{},"startTime":1766009688344,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":3175,"timestamp":17801317838,"id":11940,"parentId":11914,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js","layer":"app-metadata-route"},"startTime":1766009688343,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1232,"timestamp":17801322041,"id":11948,"parentId":11947,"tags":{},"startTime":1766009688348,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1288,"timestamp":17801321989,"id":11947,"parentId":11946,"tags":{},"startTime":1766009688348,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":1933,"timestamp":17801321883,"id":11946,"parentId":11923,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/shared/lib/router/utils/parse-path.js","layer":"app-metadata-route"},"startTime":1766009688347,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":13420,"timestamp":17801318246,"id":11945,"parentId":11944,"tags":{},"startTime":1766009688344,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":13473,"timestamp":17801318197,"id":11944,"parentId":11941,"tags":{},"startTime":1766009688344,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":27431,"timestamp":17801317937,"id":11941,"parentId":11886,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/ua-parser-js/ua-parser.js","layer":"app-metadata-route"},"startTime":1766009688343,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":128716,"timestamp":17801216755,"id":11861,"parentId":11853,"tags":{"request":"next-app-loader?name=app%2Fmanifest.webmanifest%2Froute&page=%2Fmanifest.webmanifest%2Froute&appPaths=&pagePath=private-next-app-dir%2Fmanifest.ts&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009688242,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":148663,"timestamp":17801209966,"id":11853,"parentId":11852,"tags":{},"startTime":1766009688236,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":3589,"timestamp":17801382788,"id":11958,"parentId":11957,"tags":{},"startTime":1766009688408,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":5,"timestamp":17801386395,"id":11960,"parentId":11957,"tags":{},"startTime":1766009688412,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":2683,"timestamp":17801386413,"id":11961,"parentId":11957,"tags":{},"startTime":1766009688412,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":7,"timestamp":17801389123,"id":11962,"parentId":11957,"tags":{},"startTime":1766009688415,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":3,"timestamp":17801389146,"id":11963,"parentId":11957,"tags":{},"startTime":1766009688415,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":4136,"timestamp":17801386389,"id":11959,"parentId":11957,"tags":{},"startTime":1766009688412,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":2201,"timestamp":17801391838,"id":11964,"parentId":11957,"tags":{},"startTime":1766009688417,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":5631,"timestamp":17801394048,"id":11965,"parentId":11957,"tags":{},"startTime":1766009688420,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":1113,"timestamp":17801400819,"id":11966,"parentId":11957,"tags":{},"startTime":1766009688426,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":201,"timestamp":17801401931,"id":11967,"parentId":11957,"tags":{},"startTime":1766009688427,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":78,"timestamp":17801402124,"id":11968,"parentId":11957,"tags":{},"startTime":1766009688428,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":9599,"timestamp":17801402206,"id":11969,"parentId":11957,"tags":{},"startTime":1766009688428,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":34508,"timestamp":17801379685,"id":11957,"parentId":11852,"tags":{},"startTime":1766009688405,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":211526,"timestamp":17801209729,"id":11852,"parentId":11850,"tags":{"name":"server"},"startTime":1766009688235,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":11894,"timestamp":17801421284,"id":11970,"parentId":11850,"tags":{},"startTime":1766009688447,"traceId":"ccbcc14e0de3ee02"},{"name":"compile-path","duration":225702,"timestamp":17801208006,"id":11851,"tags":{"trigger":"/manifest.webmanifest","isTurbopack":false},"startTime":1766009688234,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-server","duration":225877,"timestamp":17801207974,"id":11850,"parentId":3,"tags":{"trigger":"manual"},"startTime":1766009688234,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"handle-request","duration":253738,"timestamp":17801230250,"id":11863,"tags":{"url":"/manifest.webmanifest","isTurbopack":false},"startTime":1766009688256,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":277916,"timestamp":17801206079,"id":11849,"tags":{"url":"/manifest.webmanifest","isTurbopack":false},"startTime":1766009688232,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":2,"timestamp":17801484044,"id":11971,"parentId":11863,"tags":{"url":"/manifest.webmanifest","memory.rss":"984502272","memory.heapUsed":"554805128","memory.heapTotal":"594763776"},"startTime":1766009688510,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17801484061,"id":11972,"parentId":11849,"tags":{"url":"/manifest.webmanifest","memory.rss":"984502272","memory.heapUsed":"554806336","memory.heapTotal":"594763776"},"startTime":1766009688510,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":5046,"timestamp":17801489390,"id":11973,"tags":{"url":"/icon-192.png","isTurbopack":false},"startTime":1766009688515,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":5006,"timestamp":17801489433,"id":11974,"tags":{"url":"/icon-192.png","isTurbopack":false},"startTime":1766009688515,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":5050,"timestamp":17801505122,"id":11982,"parentId":11981,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009688531,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":5009,"timestamp":17801505173,"id":11984,"parentId":11981,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009688531,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":6173,"timestamp":17801505187,"id":11986,"parentId":11981,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009688531,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":10558,"timestamp":17801505211,"id":11990,"parentId":11981,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&server=false!"},"startTime":1766009688531,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":11536,"timestamp":17801505200,"id":11988,"parentId":11981,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009688531,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":11512,"timestamp":17801505228,"id":11993,"parentId":11981,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009688531,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":12317,"timestamp":17801505164,"id":11983,"parentId":11981,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009688531,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":12808,"timestamp":17801505217,"id":11991,"parentId":11981,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009688531,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":13436,"timestamp":17801505180,"id":11985,"parentId":11981,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009688531,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":13596,"timestamp":17801505223,"id":11992,"parentId":11981,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009688531,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":14213,"timestamp":17801505193,"id":11987,"parentId":11981,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009688531,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":18273,"timestamp":17801505206,"id":11989,"parentId":11981,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009688531,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":44533,"timestamp":17801505234,"id":11994,"parentId":11981,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2Fnot-found!"},"startTime":1766009688531,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":46721,"timestamp":17801503085,"id":11981,"parentId":11980,"tags":{},"startTime":1766009688529,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":2042,"timestamp":17801556158,"id":11996,"parentId":11995,"tags":{},"startTime":1766009688582,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":6,"timestamp":17801558221,"id":11998,"parentId":11995,"tags":{},"startTime":1766009688584,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":57,"timestamp":17801558246,"id":11999,"parentId":11995,"tags":{},"startTime":1766009688584,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":6,"timestamp":17801558322,"id":12000,"parentId":11995,"tags":{},"startTime":1766009688584,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":5,"timestamp":17801558346,"id":12001,"parentId":11995,"tags":{},"startTime":1766009688584,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":1518,"timestamp":17801558213,"id":11997,"parentId":11995,"tags":{},"startTime":1766009688584,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":681,"timestamp":17801560867,"id":12002,"parentId":11995,"tags":{},"startTime":1766009688586,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":3677,"timestamp":17801561562,"id":12003,"parentId":11995,"tags":{},"startTime":1766009688587,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":2480,"timestamp":17801567174,"id":12004,"parentId":11995,"tags":{},"startTime":1766009688593,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":158,"timestamp":17801569653,"id":12005,"parentId":11995,"tags":{},"startTime":1766009688595,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":105,"timestamp":17801569803,"id":12006,"parentId":11995,"tags":{},"startTime":1766009688595,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":6253,"timestamp":17801569912,"id":12007,"parentId":11995,"tags":{},"startTime":1766009688595,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":126,"timestamp":17801576902,"id":12009,"parentId":11980,"tags":{},"startTime":1766009688602,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":183,"timestamp":17801576849,"id":12008,"parentId":11980,"tags":{},"startTime":1766009688602,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":24222,"timestamp":17801554145,"id":11995,"parentId":11980,"tags":{},"startTime":1766009688580,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":75566,"timestamp":17801502820,"id":11980,"parentId":11977,"tags":{"name":"client"},"startTime":1766009688528,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":3717,"timestamp":17801578412,"id":12010,"parentId":11977,"tags":{},"startTime":1766009688604,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":80964,"timestamp":17801501738,"id":11977,"parentId":3,"tags":{"trigger":"manual"},"startTime":1766009688527,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17801587872,"id":12013,"parentId":3,"tags":{},"startTime":1766009688613,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17801587953,"id":12014,"parentId":3,"tags":{},"startTime":1766009688614,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17801587985,"id":12015,"parentId":3,"tags":{},"startTime":1766009688614,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":6792,"timestamp":17801598678,"id":12016,"parentId":12012,"tags":{"request":"next/dist/pages/_app"},"startTime":1766009688624,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":104000,"timestamp":1766009688527000,"id":12024,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009688636,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":104000,"timestamp":1766009688528000,"id":12025,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009688639,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":104000,"timestamp":1766009688528000,"id":12026,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":true},"startTime":1766009688641,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":18538,"timestamp":17801598739,"id":12018,"parentId":12012,"tags":{"request":"next/dist/pages/_document"},"startTime":1766009688624,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":18898,"timestamp":17801598762,"id":12021,"parentId":12012,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009688624,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19773,"timestamp":17801598730,"id":12017,"parentId":12012,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009688624,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19759,"timestamp":17801598748,"id":12019,"parentId":12012,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009688624,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":20018,"timestamp":17801598773,"id":12023,"parentId":12012,"tags":{"request":"next-app-loader?name=app%2Fmanifest.webmanifest%2Froute&page=%2Fmanifest.webmanifest%2Froute&appPaths=&pagePath=private-next-app-dir%2Fmanifest.ts&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009688624,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":25878,"timestamp":17801598767,"id":12022,"parentId":12012,"tags":{"request":"next-app-loader?name=app%2Fbottles%2F%5Bid%5D%2Fpage&page=%2Fbottles%2F%5Bid%5D%2Fpage&appPaths=%2Fbottles%2F%5Bid%5D%2Fpage&pagePath=private-next-app-dir%2Fbottles%2F%5Bid%5D%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009688624,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":41223,"timestamp":17801598756,"id":12020,"parentId":12012,"tags":{"request":"next-app-loader?name=app%2Fnot-found&page=%2Fnot-found&appPaths=&pagePath=..%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009688624,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":61970,"timestamp":17801584844,"id":12012,"parentId":12011,"tags":{},"startTime":1766009688610,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":2605,"timestamp":17801665298,"id":12038,"parentId":12037,"tags":{},"startTime":1766009688691,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":6,"timestamp":17801667923,"id":12040,"parentId":12037,"tags":{},"startTime":1766009688693,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":3008,"timestamp":17801667942,"id":12041,"parentId":12037,"tags":{},"startTime":1766009688694,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":8,"timestamp":17801670975,"id":12042,"parentId":12037,"tags":{},"startTime":1766009688697,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":5,"timestamp":17801671014,"id":12043,"parentId":12037,"tags":{},"startTime":1766009688697,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":4671,"timestamp":17801667916,"id":12039,"parentId":12037,"tags":{},"startTime":1766009688693,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":2476,"timestamp":17801674509,"id":12044,"parentId":12037,"tags":{},"startTime":1766009688700,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":3413,"timestamp":17801676996,"id":12045,"parentId":12037,"tags":{},"startTime":1766009688703,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":1388,"timestamp":17801688303,"id":12046,"parentId":12037,"tags":{},"startTime":1766009688714,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":113,"timestamp":17801689690,"id":12047,"parentId":12037,"tags":{},"startTime":1766009688715,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":88,"timestamp":17801689795,"id":12048,"parentId":12037,"tags":{},"startTime":1766009688715,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":2748,"timestamp":17801689886,"id":12049,"parentId":12037,"tags":{},"startTime":1766009688715,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":33262,"timestamp":17801662512,"id":12037,"parentId":12011,"tags":{},"startTime":1766009688688,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":115509,"timestamp":17801584526,"id":12011,"parentId":11979,"tags":{"name":"server"},"startTime":1766009688610,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":20725,"timestamp":17801700134,"id":12050,"parentId":11979,"tags":{},"startTime":1766009688726,"traceId":"ccbcc14e0de3ee02"},{"name":"compile-path","duration":219715,"timestamp":17801501753,"id":11978,"tags":{"trigger":"/not-found","isTurbopack":false},"startTime":1766009688527,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-server","duration":219737,"timestamp":17801501883,"id":11979,"parentId":3,"tags":{"trigger":"manual"},"startTime":1766009688527,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"handle-request","duration":342276,"timestamp":17801499072,"id":11975,"tags":{"url":"/icon-192.png","isTurbopack":false},"startTime":1766009688525,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17801841391,"id":12051,"parentId":11975,"tags":{"url":"/icon-192.png","memory.rss":"993783808","memory.heapUsed":"559567192","memory.heapTotal":"611708928"},"startTime":1766009688867,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":341261,"timestamp":17801500487,"id":11976,"tags":{"url":"/icon-192.png","isTurbopack":false},"startTime":1766009688526,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17801841775,"id":12052,"parentId":11976,"tags":{"url":"/icon-192.png","memory.rss":"993783808","memory.heapUsed":"559741928","memory.heapTotal":"611708928"},"startTime":1766009688867,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1708,"timestamp":17829355528,"id":12070,"parentId":12069,"tags":{},"startTime":1766009716381,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1737,"timestamp":17829355504,"id":12069,"parentId":12066,"tags":{},"startTime":1766009716381,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":3225,"timestamp":17829354984,"id":12066,"parentId":12055,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/page.tsx","layer":"rsc"},"startTime":1766009716381,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":3189,"timestamp":17829355478,"id":12068,"parentId":12067,"tags":{},"startTime":1766009716381,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":3279,"timestamp":17829355390,"id":12067,"parentId":12065,"tags":{},"startTime":1766009716381,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":4409,"timestamp":17829354816,"id":12065,"parentId":12055,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/layout.tsx","layer":"rsc"},"startTime":1766009716380,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":16026,"timestamp":17829343648,"id":12059,"parentId":12056,"tags":{"request":"next/dist/pages/_document"},"startTime":1766009716369,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17557,"timestamp":17829343561,"id":12057,"parentId":12056,"tags":{"request":"next/dist/pages/_app"},"startTime":1766009716369,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17727,"timestamp":17829343684,"id":12062,"parentId":12056,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009716369,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":18003,"timestamp":17829343633,"id":12058,"parentId":12056,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009716369,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17981,"timestamp":17829343660,"id":12060,"parentId":12056,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009716369,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":20610,"timestamp":17829343708,"id":12064,"parentId":12056,"tags":{"request":"next-app-loader?name=app%2Fmanifest.webmanifest%2Froute&page=%2Fmanifest.webmanifest%2Froute&appPaths=&pagePath=private-next-app-dir%2Fmanifest.ts&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009716369,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":28976,"timestamp":17829343695,"id":12063,"parentId":12056,"tags":{"request":"next-app-loader?name=app%2Fbottles%2F%5Bid%5D%2Fpage&page=%2Fbottles%2F%5Bid%5D%2Fpage&appPaths=%2Fbottles%2F%5Bid%5D%2Fpage&pagePath=private-next-app-dir%2Fbottles%2F%5Bid%5D%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009716369,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":59052,"timestamp":17829343672,"id":12061,"parentId":12056,"tags":{"request":"next-app-loader?name=app%2Fnot-found&page=%2Fnot-found&appPaths=&pagePath=..%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009716369,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":2780,"timestamp":17829404960,"id":12081,"parentId":12080,"tags":{},"startTime":1766009716431,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":2856,"timestamp":17829404887,"id":12080,"parentId":12079,"tags":{},"startTime":1766009716430,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":5311,"timestamp":17829404737,"id":12079,"parentId":12055,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/page.tsx","layer":"ssr"},"startTime":1766009716430,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":130688,"timestamp":17829338579,"id":12056,"parentId":12055,"tags":{},"startTime":1766009716364,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":3242,"timestamp":17829484294,"id":12085,"parentId":12084,"tags":{},"startTime":1766009716510,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":5,"timestamp":17829487553,"id":12087,"parentId":12084,"tags":{},"startTime":1766009716513,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":4379,"timestamp":17829487570,"id":12088,"parentId":12084,"tags":{},"startTime":1766009716513,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":9,"timestamp":17829491969,"id":12089,"parentId":12084,"tags":{},"startTime":1766009716518,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":14,"timestamp":17829491997,"id":12090,"parentId":12084,"tags":{},"startTime":1766009716518,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":6105,"timestamp":17829487547,"id":12086,"parentId":12084,"tags":{},"startTime":1766009716513,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":2074,"timestamp":17829495069,"id":12091,"parentId":12084,"tags":{},"startTime":1766009716521,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":4953,"timestamp":17829497151,"id":12092,"parentId":12084,"tags":{},"startTime":1766009716523,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":949,"timestamp":17829503288,"id":12093,"parentId":12084,"tags":{},"startTime":1766009716529,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":128,"timestamp":17829504237,"id":12094,"parentId":12084,"tags":{},"startTime":1766009716530,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":86,"timestamp":17829504356,"id":12095,"parentId":12084,"tags":{},"startTime":1766009716530,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1773,"timestamp":17829504446,"id":12096,"parentId":12084,"tags":{},"startTime":1766009716530,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":27190,"timestamp":17829481695,"id":12084,"parentId":12055,"tags":{},"startTime":1766009716507,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":176584,"timestamp":17829338223,"id":12055,"parentId":12053,"tags":{"name":"server"},"startTime":1766009716364,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":2903,"timestamp":17829514837,"id":12097,"parentId":12053,"tags":{},"startTime":1766009716540,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-server","duration":187524,"timestamp":17829330572,"id":12053,"parentId":3,"tags":{"trigger":"src/app/layout.tsx"},"startTime":1766009716356,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":3172,"timestamp":17829525851,"id":12112,"parentId":12099,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2Fnot-found!"},"startTime":1766009716551,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4190,"timestamp":17829525737,"id":12100,"parentId":12099,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009716551,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4144,"timestamp":17829525790,"id":12102,"parentId":12099,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009716551,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":5023,"timestamp":17829525804,"id":12104,"parentId":12099,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009716551,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":9510,"timestamp":17829525816,"id":12106,"parentId":12099,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009716551,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":9484,"timestamp":17829525846,"id":12111,"parentId":12099,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009716551,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":10123,"timestamp":17829525780,"id":12101,"parentId":12099,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009716551,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":12693,"timestamp":17829525834,"id":12109,"parentId":12099,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009716551,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":12690,"timestamp":17829525840,"id":12110,"parentId":12099,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009716551,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":6394,"timestamp":17829532259,"id":12115,"parentId":12114,"tags":{},"startTime":1766009716558,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17310,"timestamp":17829525797,"id":12103,"parentId":12099,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009716551,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-process","duration":42360,"timestamp":17829538700,"id":12117,"parentId":12116,"tags":{},"startTime":1766009716564,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-loader","duration":42568,"timestamp":17829538669,"id":12116,"parentId":12114,"tags":{},"startTime":1766009716564,"traceId":"ccbcc14e0de3ee02"},{"name":"css-loader","duration":10603,"timestamp":17829581264,"id":12118,"parentId":12114,"tags":{"astUsed":"true"},"startTime":1766009716607,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":60729,"timestamp":17829532137,"id":12114,"parentId":12113,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css.webpack[javascript/auto]!=!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":null},"startTime":1766009716558,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":67376,"timestamp":17829525822,"id":12107,"parentId":12099,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009716551,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":67451,"timestamp":17829525810,"id":12105,"parentId":12099,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009716551,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":67872,"timestamp":17829528166,"id":12113,"parentId":12098,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":"app-pages-browser"},"startTime":1766009716554,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module","duration":17,"timestamp":17829596125,"id":12119,"parentId":12113,"tags":{},"startTime":1766009716622,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":70322,"timestamp":17829525828,"id":12108,"parentId":12099,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&server=false!"},"startTime":1766009716551,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":76944,"timestamp":17829519217,"id":12099,"parentId":12098,"tags":{},"startTime":1766009716545,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":1042,"timestamp":17829599822,"id":12121,"parentId":12120,"tags":{},"startTime":1766009716625,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":3,"timestamp":17829600877,"id":12123,"parentId":12120,"tags":{},"startTime":1766009716626,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":43,"timestamp":17829600891,"id":12124,"parentId":12120,"tags":{},"startTime":1766009716626,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":4,"timestamp":17829600947,"id":12125,"parentId":12120,"tags":{},"startTime":1766009716627,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":3,"timestamp":17829600965,"id":12126,"parentId":12120,"tags":{},"startTime":1766009716627,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":910,"timestamp":17829600873,"id":12122,"parentId":12120,"tags":{},"startTime":1766009716626,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":335,"timestamp":17829602613,"id":12127,"parentId":12120,"tags":{},"startTime":1766009716628,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":1671,"timestamp":17829602956,"id":12128,"parentId":12120,"tags":{},"startTime":1766009716629,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":2102,"timestamp":17829605693,"id":12129,"parentId":12120,"tags":{},"startTime":1766009716631,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":117,"timestamp":17829607795,"id":12130,"parentId":12120,"tags":{},"startTime":1766009716633,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":111,"timestamp":17829607904,"id":12131,"parentId":12120,"tags":{},"startTime":1766009716633,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1411,"timestamp":17829608019,"id":12132,"parentId":12120,"tags":{},"startTime":1766009716634,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":65,"timestamp":17829610118,"id":12134,"parentId":12098,"tags":{},"startTime":1766009716636,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":120,"timestamp":17829610065,"id":12133,"parentId":12098,"tags":{},"startTime":1766009716636,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":14686,"timestamp":17829598632,"id":12120,"parentId":12098,"tags":{},"startTime":1766009716624,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":94351,"timestamp":17829518987,"id":12098,"parentId":12054,"tags":{"name":"client"},"startTime":1766009716545,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":2927,"timestamp":17829613358,"id":12135,"parentId":12054,"tags":{},"startTime":1766009716639,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":286657,"timestamp":17829330704,"id":12054,"parentId":3,"tags":{"trigger":"src/app/layout.tsx"},"startTime":1766009716356,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"client-success","duration":0,"timestamp":17829618705,"id":12136,"parentId":3,"tags":{},"startTime":1766009716644,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17829618780,"id":12137,"parentId":3,"tags":{},"startTime":1766009716644,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17829618807,"id":12138,"parentId":3,"tags":{},"startTime":1766009716644,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":9745,"timestamp":17829622045,"id":12139,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009716648,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":9702,"timestamp":17829622092,"id":12140,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009716648,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":9780,"timestamp":17829622130,"id":12141,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009716648,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":303000,"timestamp":1766009716357000,"id":12145,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009716661,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":303000,"timestamp":1766009716357000,"id":12146,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009716661,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":304000,"timestamp":1766009716357000,"id":12147,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":true},"startTime":1766009716661,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":35893,"timestamp":17829634369,"id":12142,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009716660,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17829670315,"id":12148,"parentId":12142,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1018421248","memory.heapUsed":"568119624","memory.heapTotal":"614178816"},"startTime":1766009716696,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":35731,"timestamp":17829634915,"id":12143,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009716660,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17829670676,"id":12149,"parentId":12143,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1018421248","memory.heapUsed":"568267120","memory.heapTotal":"614178816"},"startTime":1766009716696,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":35855,"timestamp":17829635115,"id":12144,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009716661,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17829670997,"id":12150,"parentId":12144,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1018421248","memory.heapUsed":"568414576","memory.heapTotal":"614178816"},"startTime":1766009716697,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":5790,"timestamp":17829695550,"id":12151,"tags":{"url":"/manifest.webmanifest","isTurbopack":false},"startTime":1766009716721,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":5725,"timestamp":17829695621,"id":12152,"tags":{"url":"/manifest.webmanifest","isTurbopack":false},"startTime":1766009716721,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":15527,"timestamp":17829701936,"id":12153,"tags":{"url":"/manifest.webmanifest","isTurbopack":false},"startTime":1766009716727,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":14995,"timestamp":17829702473,"id":12154,"tags":{"url":"/manifest.webmanifest","isTurbopack":false},"startTime":1766009716728,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17829717515,"id":12155,"parentId":12153,"tags":{"url":"/manifest.webmanifest","memory.rss":"1018421248","memory.heapUsed":"572465752","memory.heapTotal":"614965248"},"startTime":1766009716743,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17829717530,"id":12156,"parentId":12154,"tags":{"url":"/manifest.webmanifest","memory.rss":"1018421248","memory.heapUsed":"572466936","memory.heapTotal":"614965248"},"startTime":1766009716743,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":4293,"timestamp":17829720177,"id":12157,"tags":{"url":"/icon-192.png","isTurbopack":false},"startTime":1766009716746,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":4251,"timestamp":17829720222,"id":12158,"tags":{"url":"/icon-192.png","isTurbopack":false},"startTime":1766009716746,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4595,"timestamp":17845851135,"id":12174,"parentId":12161,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2Fnot-found!"},"startTime":1766009732877,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":6029,"timestamp":17845850980,"id":12162,"parentId":12161,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009732877,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":5960,"timestamp":17845851057,"id":12164,"parentId":12161,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009732877,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7132,"timestamp":17845851073,"id":12166,"parentId":12161,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009732877,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":9010,"timestamp":17845851089,"id":12168,"parentId":12161,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009732877,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":8976,"timestamp":17845851128,"id":12173,"parentId":12161,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009732877,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":9774,"timestamp":17845851046,"id":12163,"parentId":12161,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009732877,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":10112,"timestamp":17845851114,"id":12171,"parentId":12161,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009732877,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":1809,"timestamp":17845859470,"id":12177,"parentId":12176,"tags":{},"startTime":1766009732885,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":12915,"timestamp":17845851066,"id":12165,"parentId":12161,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009732877,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":13092,"timestamp":17845851121,"id":12172,"parentId":12161,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009732877,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-process","duration":47724,"timestamp":17845861349,"id":12179,"parentId":12178,"tags":{},"startTime":1766009732887,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-loader","duration":47904,"timestamp":17845861303,"id":12178,"parentId":12176,"tags":{},"startTime":1766009732887,"traceId":"ccbcc14e0de3ee02"},{"name":"css-loader","duration":7979,"timestamp":17845909238,"id":12180,"parentId":12176,"tags":{"astUsed":"true"},"startTime":1766009732935,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":58625,"timestamp":17845859369,"id":12176,"parentId":12175,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css.webpack[javascript/auto]!=!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":null},"startTime":1766009732885,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":67408,"timestamp":17845851081,"id":12167,"parentId":12161,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009732877,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":65132,"timestamp":17845854937,"id":12175,"parentId":12160,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":"app-pages-browser"},"startTime":1766009732880,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module","duration":17,"timestamp":17845920256,"id":12181,"parentId":12175,"tags":{},"startTime":1766009732946,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":69203,"timestamp":17845851105,"id":12170,"parentId":12161,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&server=false!"},"startTime":1766009732877,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":71136,"timestamp":17845851098,"id":12169,"parentId":12161,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009732877,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":72325,"timestamp":17845849920,"id":12161,"parentId":12160,"tags":{},"startTime":1766009732875,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":1002,"timestamp":17845925678,"id":12183,"parentId":12182,"tags":{},"startTime":1766009732951,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":3,"timestamp":17845926692,"id":12185,"parentId":12182,"tags":{},"startTime":1766009732952,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":42,"timestamp":17845926705,"id":12186,"parentId":12182,"tags":{},"startTime":1766009732952,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":3,"timestamp":17845926759,"id":12187,"parentId":12182,"tags":{},"startTime":1766009732952,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":2,"timestamp":17845926776,"id":12188,"parentId":12182,"tags":{},"startTime":1766009732952,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":561,"timestamp":17845926687,"id":12184,"parentId":12182,"tags":{},"startTime":1766009732952,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":309,"timestamp":17845928104,"id":12189,"parentId":12182,"tags":{},"startTime":1766009732954,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":4210,"timestamp":17845928419,"id":12190,"parentId":12182,"tags":{},"startTime":1766009732954,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":1893,"timestamp":17845933418,"id":12191,"parentId":12182,"tags":{},"startTime":1766009732959,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":115,"timestamp":17845935311,"id":12192,"parentId":12182,"tags":{},"startTime":1766009732961,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":76,"timestamp":17845935420,"id":12193,"parentId":12182,"tags":{},"startTime":1766009732961,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1434,"timestamp":17845935500,"id":12194,"parentId":12182,"tags":{},"startTime":1766009732961,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":48,"timestamp":17845937527,"id":12196,"parentId":12160,"tags":{},"startTime":1766009732963,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":94,"timestamp":17845937483,"id":12195,"parentId":12160,"tags":{},"startTime":1766009732963,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":13983,"timestamp":17845924547,"id":12182,"parentId":12160,"tags":{},"startTime":1766009732950,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":88898,"timestamp":17845849651,"id":12160,"parentId":12159,"tags":{"name":"client"},"startTime":1766009732875,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":2676,"timestamp":17845938568,"id":12197,"parentId":12159,"tags":{},"startTime":1766009732964,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":99349,"timestamp":17845842732,"id":12159,"parentId":3,"tags":{"trigger":"src/components/PWARegistration.tsx"},"startTime":1766009732868,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"client-success","duration":0,"timestamp":17845943925,"id":12199,"parentId":3,"tags":{},"startTime":1766009732969,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17845944043,"id":12200,"parentId":3,"tags":{},"startTime":1766009732970,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17845944098,"id":12201,"parentId":3,"tags":{},"startTime":1766009732970,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":18368,"timestamp":17845947771,"id":12202,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009732973,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":18228,"timestamp":17845947917,"id":12203,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009732973,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":18320,"timestamp":17845947973,"id":12204,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009732974,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":18000,"timestamp":1766009732970000,"id":12220,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009732994,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":19000,"timestamp":1766009732969000,"id":12221,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009732994,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":19000,"timestamp":1766009732969000,"id":12222,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009732994,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":18303,"timestamp":17845955053,"id":12219,"parentId":12206,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2Fnot-found!"},"startTime":1766009732981,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19937,"timestamp":17845954870,"id":12207,"parentId":12206,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009732980,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19868,"timestamp":17845954946,"id":12209,"parentId":12206,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009732981,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":21197,"timestamp":17845954968,"id":12211,"parentId":12206,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009732981,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":24425,"timestamp":17845954987,"id":12213,"parentId":12206,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009732981,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":24372,"timestamp":17845955044,"id":12218,"parentId":12206,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009732981,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":25008,"timestamp":17845954933,"id":12208,"parentId":12206,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009732980,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":25419,"timestamp":17845955024,"id":12216,"parentId":12206,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009732981,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":1926,"timestamp":17845978652,"id":12228,"parentId":12227,"tags":{},"startTime":1766009733004,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-process","duration":35518,"timestamp":17845980629,"id":12230,"parentId":12229,"tags":{},"startTime":1766009733006,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-loader","duration":35684,"timestamp":17845980595,"id":12229,"parentId":12227,"tags":{},"startTime":1766009733006,"traceId":"ccbcc14e0de3ee02"},{"name":"css-loader","duration":9656,"timestamp":17846016308,"id":12231,"parentId":12227,"tags":{"astUsed":"true"},"startTime":1766009733042,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":48276,"timestamp":17845978562,"id":12227,"parentId":12226,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css.webpack[javascript/auto]!=!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":null},"startTime":1766009733004,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":72580,"timestamp":17845954958,"id":12210,"parentId":12206,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009732981,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":58073,"timestamp":17845971206,"id":12226,"parentId":12205,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":"app-pages-browser"},"startTime":1766009732997,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":74430,"timestamp":17845955035,"id":12217,"parentId":12206,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009732981,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module","duration":18,"timestamp":17846030725,"id":12232,"parentId":12226,"tags":{},"startTime":1766009733056,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":75900,"timestamp":17845955014,"id":12215,"parentId":12206,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&server=false!"},"startTime":1766009732981,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":76118,"timestamp":17845954978,"id":12212,"parentId":12206,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009732981,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":89892,"timestamp":17845954996,"id":12214,"parentId":12206,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009732981,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":92467,"timestamp":17845952448,"id":12206,"parentId":12205,"tags":{},"startTime":1766009732978,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":1061,"timestamp":17846049756,"id":12234,"parentId":12233,"tags":{},"startTime":1766009733075,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":3,"timestamp":17846050829,"id":12236,"parentId":12233,"tags":{},"startTime":1766009733076,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":60,"timestamp":17846050841,"id":12237,"parentId":12233,"tags":{},"startTime":1766009733076,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":4,"timestamp":17846050916,"id":12238,"parentId":12233,"tags":{},"startTime":1766009733076,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":3,"timestamp":17846050937,"id":12239,"parentId":12233,"tags":{},"startTime":1766009733076,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":593,"timestamp":17846050824,"id":12235,"parentId":12233,"tags":{},"startTime":1766009733076,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":324,"timestamp":17846052087,"id":12240,"parentId":12233,"tags":{},"startTime":1766009733078,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":1529,"timestamp":17846052418,"id":12241,"parentId":12233,"tags":{},"startTime":1766009733078,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":1966,"timestamp":17846054776,"id":12242,"parentId":12233,"tags":{},"startTime":1766009733080,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":120,"timestamp":17846056742,"id":12243,"parentId":12233,"tags":{},"startTime":1766009733082,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":92,"timestamp":17846056855,"id":12244,"parentId":12233,"tags":{},"startTime":1766009733082,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1400,"timestamp":17846056951,"id":12245,"parentId":12233,"tags":{},"startTime":1766009733083,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":46,"timestamp":17846058847,"id":12247,"parentId":12205,"tags":{},"startTime":1766009733084,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":91,"timestamp":17846058804,"id":12246,"parentId":12205,"tags":{},"startTime":1766009733084,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":11672,"timestamp":17846048382,"id":12233,"parentId":12205,"tags":{},"startTime":1766009733074,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":107906,"timestamp":17845952176,"id":12205,"parentId":12198,"tags":{"name":"client"},"startTime":1766009732978,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":94098,"timestamp":17845969627,"id":12224,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009732995,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17846063766,"id":12249,"parentId":12224,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1019207680","memory.heapUsed":"588852008","memory.heapTotal":"633839616"},"startTime":1766009733089,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":95106,"timestamp":17845968884,"id":12223,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009732994,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17846064021,"id":12250,"parentId":12223,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1019207680","memory.heapUsed":"589001248","memory.heapTotal":"633839616"},"startTime":1766009733090,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":94780,"timestamp":17845969937,"id":12225,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009732995,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17846064743,"id":12251,"parentId":12225,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1019207680","memory.heapUsed":"589417824","memory.heapTotal":"633839616"},"startTime":1766009733090,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":8615,"timestamp":17846060108,"id":12248,"parentId":12198,"tags":{},"startTime":1766009733086,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":125902,"timestamp":17845943708,"id":12198,"parentId":3,"tags":{"trigger":"src/components"},"startTime":1766009732969,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"client-success","duration":0,"timestamp":17846070973,"id":12252,"parentId":3,"tags":{},"startTime":1766009733097,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17846071028,"id":12253,"parentId":3,"tags":{},"startTime":1766009733097,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17846071055,"id":12254,"parentId":3,"tags":{},"startTime":1766009733097,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":137000,"timestamp":1766009732969000,"id":12258,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009733107,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":137000,"timestamp":1766009732969000,"id":12259,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009733107,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":11194,"timestamp":17846074214,"id":12255,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009733100,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":11151,"timestamp":17846074261,"id":12256,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009733100,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":11226,"timestamp":17846074300,"id":12257,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009733100,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":139000,"timestamp":1766009732970000,"id":12260,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1766009733112,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":15947,"timestamp":17846086588,"id":12262,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009733112,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17846102591,"id":12264,"parentId":12262,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1020780544","memory.heapUsed":"593014744","memory.heapTotal":"636723200"},"startTime":1766009733128,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":16853,"timestamp":17846086092,"id":12261,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009733112,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17846102989,"id":12265,"parentId":12261,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1020780544","memory.heapUsed":"593165088","memory.heapTotal":"636723200"},"startTime":1766009733129,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":16589,"timestamp":17846086778,"id":12263,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009733112,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17846103404,"id":12266,"parentId":12263,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1020780544","memory.heapUsed":"593312600","memory.heapTotal":"636723200"},"startTime":1766009733129,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":13553,"timestamp":17847868717,"id":12276,"parentId":12270,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009734894,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":14361,"timestamp":17847868671,"id":12273,"parentId":12270,"tags":{"request":"next/dist/pages/_document"},"startTime":1766009734894,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":14732,"timestamp":17847868574,"id":12271,"parentId":12270,"tags":{"request":"next/dist/pages/_app"},"startTime":1766009734894,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":14932,"timestamp":17847868653,"id":12272,"parentId":12270,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009734894,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":14901,"timestamp":17847868686,"id":12274,"parentId":12270,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009734894,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":2014,"timestamp":17847881669,"id":12281,"parentId":12280,"tags":{},"startTime":1766009734907,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":2091,"timestamp":17847881594,"id":12280,"parentId":12279,"tags":{},"startTime":1766009734907,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":3429,"timestamp":17847881048,"id":12279,"parentId":12269,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/layout.tsx","layer":"rsc"},"startTime":1766009734907,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":16627,"timestamp":17847868742,"id":12278,"parentId":12270,"tags":{"request":"next-app-loader?name=app%2Fmanifest.webmanifest%2Froute&page=%2Fmanifest.webmanifest%2Froute&appPaths=&pagePath=private-next-app-dir%2Fmanifest.ts&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009734894,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17075,"timestamp":17847868702,"id":12275,"parentId":12270,"tags":{"request":"next-app-loader?name=app%2Fnot-found&page=%2Fnot-found&appPaths=&pagePath=..%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009734894,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19732,"timestamp":17847868730,"id":12277,"parentId":12270,"tags":{"request":"next-app-loader?name=app%2Fbottles%2F%5Bid%5D%2Fpage&page=%2Fbottles%2F%5Bid%5D%2Fpage&appPaths=%2Fbottles%2F%5Bid%5D%2Fpage&pagePath=private-next-app-dir%2Fbottles%2F%5Bid%5D%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009734894,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":54030,"timestamp":17847864608,"id":12270,"parentId":12269,"tags":{},"startTime":1766009734890,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":3283,"timestamp":17847941395,"id":12293,"parentId":12292,"tags":{},"startTime":1766009734967,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":4,"timestamp":17847944697,"id":12295,"parentId":12292,"tags":{},"startTime":1766009734970,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":3695,"timestamp":17847944722,"id":12296,"parentId":12292,"tags":{},"startTime":1766009734970,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":5,"timestamp":17847948445,"id":12297,"parentId":12292,"tags":{},"startTime":1766009734974,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":3,"timestamp":17847948465,"id":12298,"parentId":12292,"tags":{},"startTime":1766009734974,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":4749,"timestamp":17847944690,"id":12294,"parentId":12292,"tags":{},"startTime":1766009734970,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":2499,"timestamp":17847951174,"id":12299,"parentId":12292,"tags":{},"startTime":1766009734977,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":3503,"timestamp":17847953683,"id":12300,"parentId":12292,"tags":{},"startTime":1766009734979,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":941,"timestamp":17847962866,"id":12301,"parentId":12292,"tags":{},"startTime":1766009734988,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":116,"timestamp":17847963807,"id":12302,"parentId":12292,"tags":{},"startTime":1766009734989,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":137,"timestamp":17847963910,"id":12303,"parentId":12292,"tags":{},"startTime":1766009734989,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1699,"timestamp":17847964055,"id":12304,"parentId":12292,"tags":{},"startTime":1766009734990,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":30031,"timestamp":17847938694,"id":12292,"parentId":12269,"tags":{},"startTime":1766009734964,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":108633,"timestamp":17847864343,"id":12269,"parentId":12267,"tags":{"name":"server"},"startTime":1766009734890,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":3688,"timestamp":17847973023,"id":12305,"parentId":12267,"tags":{},"startTime":1766009734999,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-server","duration":119251,"timestamp":17847857731,"id":12267,"parentId":3,"tags":{"trigger":"src/app/layout.tsx"},"startTime":1766009734883,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":14320,"timestamp":17847990700,"id":12320,"parentId":12307,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2Fnot-found!"},"startTime":1766009735016,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":15513,"timestamp":17847990557,"id":12308,"parentId":12307,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009735016,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":15459,"timestamp":17847990619,"id":12310,"parentId":12307,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009735016,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":16849,"timestamp":17847990645,"id":12312,"parentId":12307,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009735016,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":21806,"timestamp":17847990664,"id":12314,"parentId":12307,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009735016,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":21782,"timestamp":17847990694,"id":12319,"parentId":12307,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009735016,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":22531,"timestamp":17847990609,"id":12309,"parentId":12307,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009735016,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":23172,"timestamp":17847990682,"id":12317,"parentId":12307,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009735016,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":23170,"timestamp":17847990689,"id":12318,"parentId":12307,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009735016,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":23737,"timestamp":17847990636,"id":12311,"parentId":12307,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009735016,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":25431,"timestamp":17847990670,"id":12315,"parentId":12307,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009735016,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":25490,"timestamp":17847990652,"id":12313,"parentId":12307,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009735016,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":123,"timestamp":17848273796,"id":12323,"parentId":12322,"tags":{},"startTime":1766009735299,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-process","duration":44405,"timestamp":17848273976,"id":12325,"parentId":12324,"tags":{},"startTime":1766009735300,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-loader","duration":44584,"timestamp":17848273940,"id":12324,"parentId":12322,"tags":{},"startTime":1766009735300,"traceId":"ccbcc14e0de3ee02"},{"name":"css-loader","duration":10963,"timestamp":17848318553,"id":12326,"parentId":12322,"tags":{"astUsed":"true"},"startTime":1766009735344,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":56897,"timestamp":17848273705,"id":12322,"parentId":12321,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css.webpack[javascript/auto]!=!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":null},"startTime":1766009735299,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":59362,"timestamp":17848273276,"id":12321,"parentId":12306,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":"app-pages-browser"},"startTime":1766009735299,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module","duration":16,"timestamp":17848332729,"id":12327,"parentId":12321,"tags":{},"startTime":1766009735358,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":342080,"timestamp":17847990676,"id":12316,"parentId":12307,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&server=false!"},"startTime":1766009735016,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":354448,"timestamp":17847978322,"id":12307,"parentId":12306,"tags":{},"startTime":1766009735004,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":1679,"timestamp":17848336351,"id":12329,"parentId":12328,"tags":{},"startTime":1766009735362,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":9,"timestamp":17848338049,"id":12331,"parentId":12328,"tags":{},"startTime":1766009735364,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":70,"timestamp":17848338074,"id":12332,"parentId":12328,"tags":{},"startTime":1766009735364,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":8,"timestamp":17848338161,"id":12333,"parentId":12328,"tags":{},"startTime":1766009735364,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":5,"timestamp":17848338194,"id":12334,"parentId":12328,"tags":{},"startTime":1766009735364,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":1236,"timestamp":17848338042,"id":12330,"parentId":12328,"tags":{},"startTime":1766009735364,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":407,"timestamp":17848340575,"id":12335,"parentId":12328,"tags":{},"startTime":1766009735366,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":2550,"timestamp":17848340991,"id":12336,"parentId":12328,"tags":{},"startTime":1766009735367,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":2467,"timestamp":17848344721,"id":12337,"parentId":12328,"tags":{},"startTime":1766009735370,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":128,"timestamp":17848347188,"id":12338,"parentId":12328,"tags":{},"startTime":1766009735373,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":76,"timestamp":17848347310,"id":12339,"parentId":12328,"tags":{},"startTime":1766009735373,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":4181,"timestamp":17848347390,"id":12340,"parentId":12328,"tags":{},"startTime":1766009735373,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":71,"timestamp":17848352380,"id":12342,"parentId":12306,"tags":{},"startTime":1766009735378,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":139,"timestamp":17848352316,"id":12341,"parentId":12306,"tags":{},"startTime":1766009735378,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":18550,"timestamp":17848335102,"id":12328,"parentId":12306,"tags":{},"startTime":1766009735361,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":375624,"timestamp":17847978047,"id":12306,"parentId":12268,"tags":{"name":"client"},"startTime":1766009735004,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":2587,"timestamp":17848353693,"id":12343,"parentId":12268,"tags":{},"startTime":1766009735379,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":499539,"timestamp":17847857826,"id":12268,"parentId":3,"tags":{"trigger":"src/app/layout.tsx"},"startTime":1766009734883,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"client-success","duration":0,"timestamp":17848358917,"id":12344,"parentId":3,"tags":{},"startTime":1766009735384,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17848358984,"id":12345,"parentId":3,"tags":{},"startTime":1766009735385,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17848359021,"id":12346,"parentId":3,"tags":{},"startTime":1766009735385,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":9013,"timestamp":17848362956,"id":12347,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009735389,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":8960,"timestamp":17848363013,"id":12348,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009735389,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":9040,"timestamp":17848363057,"id":12349,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009735389,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":510000,"timestamp":1766009734884000,"id":12350,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&server=false!"],"page":"/","isPageHidden":false},"startTime":1766009735400,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":511000,"timestamp":1766009734884000,"id":12351,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&server=false!"],"page":"/","isPageHidden":false},"startTime":1766009735400,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":510000,"timestamp":1766009734884000,"id":12352,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&server=false!"],"page":"/","isPageHidden":false},"startTime":1766009735400,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":22222,"timestamp":17848374762,"id":12354,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009735400,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17848397034,"id":12356,"parentId":12354,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1091944448","memory.heapUsed":"567171864","memory.heapTotal":"626053120"},"startTime":1766009735423,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":22281,"timestamp":17848374964,"id":12355,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009735401,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17848397268,"id":12357,"parentId":12355,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1091944448","memory.heapUsed":"567320032","memory.heapTotal":"626053120"},"startTime":1766009735423,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":23246,"timestamp":17848374205,"id":12353,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009735400,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17848397474,"id":12358,"parentId":12353,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1091944448","memory.heapUsed":"567467424","memory.heapTotal":"626053120"},"startTime":1766009735423,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":14723,"timestamp":17849999514,"id":12368,"parentId":12362,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009737025,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1811,"timestamp":17850013332,"id":12373,"parentId":12372,"tags":{},"startTime":1766009737039,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1984,"timestamp":17850013163,"id":12372,"parentId":12371,"tags":{},"startTime":1766009737039,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":3876,"timestamp":17850012216,"id":12371,"parentId":12361,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/layout.tsx","layer":"rsc"},"startTime":1766009737038,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17130,"timestamp":17849999490,"id":12365,"parentId":12362,"tags":{"request":"next/dist/pages/_document"},"startTime":1766009737025,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17708,"timestamp":17849999329,"id":12363,"parentId":12362,"tags":{"request":"next/dist/pages/_app"},"startTime":1766009737025,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17861,"timestamp":17849999475,"id":12364,"parentId":12362,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009737025,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17841,"timestamp":17849999499,"id":12366,"parentId":12362,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009737025,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":18924,"timestamp":17849999528,"id":12370,"parentId":12362,"tags":{"request":"next-app-loader?name=app%2Fmanifest.webmanifest%2Froute&page=%2Fmanifest.webmanifest%2Froute&appPaths=&pagePath=private-next-app-dir%2Fmanifest.ts&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009737025,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":25391,"timestamp":17849999521,"id":12369,"parentId":12362,"tags":{"request":"next-app-loader?name=app%2Fbottles%2F%5Bid%5D%2Fpage&page=%2Fbottles%2F%5Bid%5D%2Fpage&appPaths=%2Fbottles%2F%5Bid%5D%2Fpage&pagePath=private-next-app-dir%2Fbottles%2F%5Bid%5D%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009737025,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":628,"timestamp":17850025729,"id":12376,"parentId":12375,"tags":{},"startTime":1766009737051,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":675,"timestamp":17850025684,"id":12375,"parentId":12374,"tags":{},"startTime":1766009737051,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":1183,"timestamp":17850025575,"id":12374,"parentId":12371,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/components/PWARegistration.tsx","layer":"rsc"},"startTime":1766009737051,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":27490,"timestamp":17849999507,"id":12367,"parentId":12362,"tags":{"request":"next-app-loader?name=app%2Fnot-found&page=%2Fnot-found&appPaths=&pagePath=..%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009737025,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx&server=true!","duration":1048,"timestamp":17850030203,"id":12385,"parentId":12361,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FPWARegistration.tsx&server=true!","layer":"ssr"},"startTime":1766009737056,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1022,"timestamp":17850040071,"id":12388,"parentId":12387,"tags":{},"startTime":1766009737066,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1079,"timestamp":17850040017,"id":12387,"parentId":12386,"tags":{},"startTime":1766009737066,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":1869,"timestamp":17850039917,"id":12386,"parentId":12385,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/components/PWARegistration.tsx","layer":"ssr"},"startTime":1766009737065,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":47353,"timestamp":17849994668,"id":12362,"parentId":12361,"tags":{},"startTime":1766009737020,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":2395,"timestamp":17850057494,"id":12392,"parentId":12391,"tags":{},"startTime":1766009737083,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":3,"timestamp":17850059904,"id":12394,"parentId":12391,"tags":{},"startTime":1766009737085,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":6028,"timestamp":17850059919,"id":12395,"parentId":12391,"tags":{},"startTime":1766009737085,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":7,"timestamp":17850065968,"id":12396,"parentId":12391,"tags":{},"startTime":1766009737092,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":5,"timestamp":17850065990,"id":12397,"parentId":12391,"tags":{},"startTime":1766009737092,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":7858,"timestamp":17850059898,"id":12393,"parentId":12391,"tags":{},"startTime":1766009737085,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":1981,"timestamp":17850068861,"id":12398,"parentId":12391,"tags":{},"startTime":1766009737094,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":3387,"timestamp":17850070851,"id":12399,"parentId":12391,"tags":{},"startTime":1766009737096,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":988,"timestamp":17850075223,"id":12400,"parentId":12391,"tags":{},"startTime":1766009737101,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":106,"timestamp":17850076212,"id":12401,"parentId":12391,"tags":{},"startTime":1766009737102,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":84,"timestamp":17850076310,"id":12402,"parentId":12391,"tags":{},"startTime":1766009737102,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1485,"timestamp":17850076398,"id":12403,"parentId":12391,"tags":{},"startTime":1766009737102,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":25537,"timestamp":17850054933,"id":12391,"parentId":12361,"tags":{},"startTime":1766009737080,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":90576,"timestamp":17849994410,"id":12361,"parentId":12359,"tags":{"name":"server"},"startTime":1766009737020,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":4098,"timestamp":17850085022,"id":12404,"parentId":12359,"tags":{},"startTime":1766009737111,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-server","duration":102306,"timestamp":17849987114,"id":12359,"parentId":3,"tags":{"trigger":"src/app/layout.tsx"},"startTime":1766009737013,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx&server=false!","duration":1165,"timestamp":17850097078,"id":12420,"parentId":12415,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FPWARegistration.tsx&server=false!","layer":"app-pages-browser"},"startTime":1766009737123,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":3905,"timestamp":17850094808,"id":12419,"parentId":12406,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2Fnot-found!"},"startTime":1766009737120,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":5340,"timestamp":17850094696,"id":12407,"parentId":12406,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009737120,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":5297,"timestamp":17850094746,"id":12409,"parentId":12406,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009737120,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":6236,"timestamp":17850094760,"id":12411,"parentId":12406,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009737120,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":8205,"timestamp":17850094773,"id":12413,"parentId":12406,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009737120,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":8179,"timestamp":17850094802,"id":12418,"parentId":12406,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009737120,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":9122,"timestamp":17850094736,"id":12408,"parentId":12406,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009737120,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":9710,"timestamp":17850094790,"id":12416,"parentId":12406,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009737120,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":9708,"timestamp":17850094796,"id":12417,"parentId":12406,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009737120,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":11747,"timestamp":17850094754,"id":12410,"parentId":12406,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009737120,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":3306,"timestamp":17850103389,"id":12424,"parentId":12423,"tags":{},"startTime":1766009737129,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":3363,"timestamp":17850103333,"id":12423,"parentId":12422,"tags":{},"startTime":1766009737129,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":4509,"timestamp":17850103167,"id":12422,"parentId":12420,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/components/PWARegistration.tsx","layer":"app-pages-browser"},"startTime":1766009737129,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":4262,"timestamp":17850103984,"id":12426,"parentId":12425,"tags":{},"startTime":1766009737130,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":15936,"timestamp":17850094779,"id":12414,"parentId":12406,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009737120,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":16027,"timestamp":17850094767,"id":12412,"parentId":12406,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009737120,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-process","duration":35576,"timestamp":17850108300,"id":12428,"parentId":12427,"tags":{},"startTime":1766009737134,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-loader","duration":35753,"timestamp":17850108266,"id":12427,"parentId":12425,"tags":{},"startTime":1766009737134,"traceId":"ccbcc14e0de3ee02"},{"name":"css-loader","duration":11478,"timestamp":17850144048,"id":12429,"parentId":12425,"tags":{"astUsed":"true"},"startTime":1766009737170,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":52304,"timestamp":17850103914,"id":12425,"parentId":12421,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css.webpack[javascript/auto]!=!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":null},"startTime":1766009737129,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":55736,"timestamp":17850102286,"id":12421,"parentId":12420,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":"app-pages-browser"},"startTime":1766009737128,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module","duration":17,"timestamp":17850158114,"id":12430,"parentId":12421,"tags":{},"startTime":1766009737184,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":63357,"timestamp":17850094785,"id":12415,"parentId":12406,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FPWARegistration.tsx&server=false!"},"startTime":1766009737120,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":67625,"timestamp":17850090527,"id":12406,"parentId":12405,"tags":{},"startTime":1766009737116,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":1016,"timestamp":17850161533,"id":12432,"parentId":12431,"tags":{},"startTime":1766009737187,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":3,"timestamp":17850162561,"id":12434,"parentId":12431,"tags":{},"startTime":1766009737188,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":43,"timestamp":17850162574,"id":12435,"parentId":12431,"tags":{},"startTime":1766009737188,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":4,"timestamp":17850162629,"id":12436,"parentId":12431,"tags":{},"startTime":1766009737188,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":3,"timestamp":17850162646,"id":12437,"parentId":12431,"tags":{},"startTime":1766009737188,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":695,"timestamp":17850162556,"id":12433,"parentId":12431,"tags":{},"startTime":1766009737188,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":422,"timestamp":17850164205,"id":12438,"parentId":12431,"tags":{},"startTime":1766009737190,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":1791,"timestamp":17850164636,"id":12439,"parentId":12431,"tags":{},"startTime":1766009737190,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":1959,"timestamp":17850167520,"id":12440,"parentId":12431,"tags":{},"startTime":1766009737193,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":121,"timestamp":17850169479,"id":12441,"parentId":12431,"tags":{},"startTime":1766009737195,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":77,"timestamp":17850169593,"id":12442,"parentId":12431,"tags":{},"startTime":1766009737195,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1702,"timestamp":17850169674,"id":12443,"parentId":12431,"tags":{},"startTime":1766009737195,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":47,"timestamp":17850171866,"id":12445,"parentId":12405,"tags":{},"startTime":1766009737197,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":92,"timestamp":17850171823,"id":12444,"parentId":12405,"tags":{},"startTime":1766009737197,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":12596,"timestamp":17850160335,"id":12431,"parentId":12405,"tags":{},"startTime":1766009737186,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":82626,"timestamp":17850090325,"id":12405,"parentId":12360,"tags":{"name":"client"},"startTime":1766009737116,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":4189,"timestamp":17850172974,"id":12446,"parentId":12360,"tags":{},"startTime":1766009737199,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":190829,"timestamp":17849987209,"id":12360,"parentId":3,"tags":{"trigger":"src/app/layout.tsx"},"startTime":1766009737013,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"client-success","duration":0,"timestamp":17850179439,"id":12447,"parentId":3,"tags":{},"startTime":1766009737205,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17850179499,"id":12448,"parentId":3,"tags":{},"startTime":1766009737205,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17850179526,"id":12449,"parentId":3,"tags":{},"startTime":1766009737205,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":201000,"timestamp":1766009737013000,"id":12453,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&server=false!"],"page":"/","isPageHidden":false},"startTime":1766009737214,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":201000,"timestamp":1766009737013000,"id":12454,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&server=false!"],"page":"/","isPageHidden":false},"startTime":1766009737215,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":11832,"timestamp":17850182966,"id":12450,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009737209,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":11779,"timestamp":17850183022,"id":12451,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009737209,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":11834,"timestamp":17850183065,"id":12452,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009737209,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":202000,"timestamp":1766009737014000,"id":12455,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&server=false!"],"page":"/","isPageHidden":false},"startTime":1766009737221,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":22953,"timestamp":17850195640,"id":12456,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009737221,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":1,"timestamp":17850218632,"id":12459,"parentId":12456,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1092571136","memory.heapUsed":"592619680","memory.heapTotal":"635645952"},"startTime":1766009737244,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":23035,"timestamp":17850195818,"id":12457,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009737221,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17850218879,"id":12460,"parentId":12457,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1092571136","memory.heapUsed":"592767160","memory.heapTotal":"635645952"},"startTime":1766009737244,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":23125,"timestamp":17850195982,"id":12458,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009737222,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17850219130,"id":12461,"parentId":12458,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1092571136","memory.heapUsed":"592915552","memory.heapTotal":"635645952"},"startTime":1766009737245,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4440,"timestamp":17858535615,"id":12477,"parentId":12464,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2Fnot-found!"},"startTime":1766009745561,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7572,"timestamp":17858535474,"id":12465,"parentId":12464,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009745561,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7516,"timestamp":17858535538,"id":12467,"parentId":12464,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009745561,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":8544,"timestamp":17858535556,"id":12469,"parentId":12464,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009745561,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":11676,"timestamp":17858535571,"id":12471,"parentId":12464,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009745561,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":11644,"timestamp":17858535608,"id":12476,"parentId":12464,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009745561,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":12927,"timestamp":17858535526,"id":12466,"parentId":12464,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009745561,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":12906,"timestamp":17858535593,"id":12474,"parentId":12464,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009745561,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":2330,"timestamp":17858546237,"id":12480,"parentId":12479,"tags":{},"startTime":1766009745572,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17668,"timestamp":17858535548,"id":12468,"parentId":12464,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009745561,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":18054,"timestamp":17858535601,"id":12475,"parentId":12464,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009745561,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-process","duration":54537,"timestamp":17858548698,"id":12482,"parentId":12481,"tags":{},"startTime":1766009745574,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-loader","duration":54859,"timestamp":17858548601,"id":12481,"parentId":12479,"tags":{},"startTime":1766009745574,"traceId":"ccbcc14e0de3ee02"},{"name":"css-loader","duration":15370,"timestamp":17858603498,"id":12483,"parentId":12479,"tags":{"astUsed":"true"},"startTime":1766009745629,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":73601,"timestamp":17858546130,"id":12479,"parentId":12478,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css.webpack[javascript/auto]!=!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":null},"startTime":1766009745572,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":90889,"timestamp":17858535564,"id":12470,"parentId":12464,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009745561,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":89687,"timestamp":17858539127,"id":12478,"parentId":12463,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":"app-pages-browser"},"startTime":1766009745565,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module","duration":21,"timestamp":17858629057,"id":12484,"parentId":12478,"tags":{},"startTime":1766009745655,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":93534,"timestamp":17858535586,"id":12473,"parentId":12464,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FPWARegistration.tsx&server=false!"},"startTime":1766009745561,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":95895,"timestamp":17858535579,"id":12472,"parentId":12464,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009745561,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":97001,"timestamp":17858534487,"id":12464,"parentId":12463,"tags":{},"startTime":1766009745560,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":2006,"timestamp":17858635828,"id":12486,"parentId":12485,"tags":{},"startTime":1766009745661,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":8,"timestamp":17858637856,"id":12488,"parentId":12485,"tags":{},"startTime":1766009745663,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":75,"timestamp":17858637880,"id":12489,"parentId":12485,"tags":{},"startTime":1766009745663,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":9,"timestamp":17858637974,"id":12490,"parentId":12485,"tags":{},"startTime":1766009745664,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":6,"timestamp":17858638017,"id":12491,"parentId":12485,"tags":{},"startTime":1766009745664,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":1357,"timestamp":17858637848,"id":12487,"parentId":12485,"tags":{},"startTime":1766009745663,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":513,"timestamp":17858640641,"id":12492,"parentId":12485,"tags":{},"startTime":1766009745666,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":3916,"timestamp":17858641167,"id":12493,"parentId":12485,"tags":{},"startTime":1766009745667,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":2120,"timestamp":17858646541,"id":12494,"parentId":12485,"tags":{},"startTime":1766009745672,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":129,"timestamp":17858648661,"id":12495,"parentId":12485,"tags":{},"startTime":1766009745674,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":98,"timestamp":17858648782,"id":12496,"parentId":12485,"tags":{},"startTime":1766009745674,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1671,"timestamp":17858648884,"id":12497,"parentId":12485,"tags":{},"startTime":1766009745674,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":66,"timestamp":17858651202,"id":12499,"parentId":12463,"tags":{},"startTime":1766009745677,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":120,"timestamp":17858651151,"id":12498,"parentId":12463,"tags":{},"startTime":1766009745677,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":17916,"timestamp":17858634432,"id":12485,"parentId":12463,"tags":{},"startTime":1766009745660,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":118179,"timestamp":17858534191,"id":12463,"parentId":12462,"tags":{"name":"client"},"startTime":1766009745560,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":3753,"timestamp":17858652389,"id":12500,"parentId":12462,"tags":{},"startTime":1766009745678,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":129598,"timestamp":17858527761,"id":12462,"parentId":3,"tags":{"trigger":"src/components/OfflineIndicator.tsx"},"startTime":1766009745553,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"client-success","duration":0,"timestamp":17858659037,"id":12502,"parentId":3,"tags":{},"startTime":1766009745685,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17858659120,"id":12503,"parentId":3,"tags":{},"startTime":1766009745685,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17858659155,"id":12504,"parentId":3,"tags":{},"startTime":1766009745685,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":17162,"timestamp":17858662360,"id":12505,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009745688,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":17119,"timestamp":17858662408,"id":12506,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009745688,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":17189,"timestamp":17858662446,"id":12507,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009745688,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":23000,"timestamp":1766009745685000,"id":12526,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./src/app/globals.css"],"page":"/","isPageHidden":false},"startTime":1766009745710,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":24000,"timestamp":1766009745685000,"id":12527,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./src/app/globals.css"],"page":"/","isPageHidden":false},"startTime":1766009745710,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":26000,"timestamp":1766009745685000,"id":12529,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./src/app/globals.css"],"page":"/","isPageHidden":false},"startTime":1766009745712,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19598,"timestamp":17858667035,"id":12522,"parentId":12509,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2Fnot-found!"},"startTime":1766009745693,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":21381,"timestamp":17858666885,"id":12510,"parentId":12509,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009745692,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":21332,"timestamp":17858666939,"id":12512,"parentId":12509,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009745693,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":22304,"timestamp":17858666961,"id":12514,"parentId":12509,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009745693,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":25300,"timestamp":17858666986,"id":12516,"parentId":12509,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009745693,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":25263,"timestamp":17858667026,"id":12521,"parentId":12509,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009745693,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":26017,"timestamp":17858666930,"id":12511,"parentId":12509,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009745692,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":26300,"timestamp":17858667014,"id":12519,"parentId":12509,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009745693,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":1797,"timestamp":17858691645,"id":12531,"parentId":12530,"tags":{},"startTime":1766009745717,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-process","duration":34394,"timestamp":17858693520,"id":12533,"parentId":12532,"tags":{},"startTime":1766009745719,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-loader","duration":34585,"timestamp":17858693474,"id":12532,"parentId":12530,"tags":{},"startTime":1766009745719,"traceId":"ccbcc14e0de3ee02"},{"name":"css-loader","duration":8377,"timestamp":17858728084,"id":12534,"parentId":12530,"tags":{"astUsed":"true"},"startTime":1766009745754,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":45706,"timestamp":17858691566,"id":12530,"parentId":12528,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css.webpack[javascript/auto]!=!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":null},"startTime":1766009745717,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":72726,"timestamp":17858666948,"id":12513,"parentId":12509,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009745693,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":55627,"timestamp":17858685828,"id":12528,"parentId":12508,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":"app-pages-browser"},"startTime":1766009745711,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":75896,"timestamp":17858667020,"id":12520,"parentId":12509,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009745693,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module","duration":25,"timestamp":17858743123,"id":12535,"parentId":12528,"tags":{},"startTime":1766009745769,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":76360,"timestamp":17858667006,"id":12518,"parentId":12509,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FPWARegistration.tsx&server=false!"},"startTime":1766009745693,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":76916,"timestamp":17858666974,"id":12515,"parentId":12509,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009745693,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":90612,"timestamp":17858666993,"id":12517,"parentId":12509,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009745693,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":92669,"timestamp":17858664953,"id":12509,"parentId":12508,"tags":{},"startTime":1766009745691,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":1711,"timestamp":17858761915,"id":12537,"parentId":12536,"tags":{},"startTime":1766009745787,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":3,"timestamp":17858763650,"id":12539,"parentId":12536,"tags":{},"startTime":1766009745789,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":73,"timestamp":17858763665,"id":12540,"parentId":12536,"tags":{},"startTime":1766009745789,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":7,"timestamp":17858763756,"id":12541,"parentId":12536,"tags":{},"startTime":1766009745789,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":6,"timestamp":17858763789,"id":12542,"parentId":12536,"tags":{},"startTime":1766009745789,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":722,"timestamp":17858763642,"id":12538,"parentId":12536,"tags":{},"startTime":1766009745789,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":373,"timestamp":17858765057,"id":12543,"parentId":12536,"tags":{},"startTime":1766009745791,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":1654,"timestamp":17858765438,"id":12544,"parentId":12536,"tags":{},"startTime":1766009745791,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":1865,"timestamp":17858767970,"id":12545,"parentId":12536,"tags":{},"startTime":1766009745794,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":185,"timestamp":17858769835,"id":12546,"parentId":12536,"tags":{},"startTime":1766009745795,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":91,"timestamp":17858770011,"id":12547,"parentId":12536,"tags":{},"startTime":1766009745796,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1623,"timestamp":17858770107,"id":12548,"parentId":12536,"tags":{},"startTime":1766009745796,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":63,"timestamp":17858772290,"id":12550,"parentId":12508,"tags":{},"startTime":1766009745798,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":109,"timestamp":17858772246,"id":12549,"parentId":12508,"tags":{},"startTime":1766009745798,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":12803,"timestamp":17858760650,"id":12536,"parentId":12508,"tags":{},"startTime":1766009745786,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":108747,"timestamp":17858664727,"id":12508,"parentId":12501,"tags":{"name":"client"},"startTime":1766009745690,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":95112,"timestamp":17858682612,"id":12525,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009745708,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17858777777,"id":12552,"parentId":12525,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1015496704","memory.heapUsed":"566680104","memory.heapTotal":"630472704"},"startTime":1766009745803,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":96479,"timestamp":17858681570,"id":12523,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009745707,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17858778074,"id":12553,"parentId":12523,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1015496704","memory.heapUsed":"566827600","memory.heapTotal":"630472704"},"startTime":1766009745804,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":95987,"timestamp":17858682321,"id":12524,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009745708,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17858778334,"id":12554,"parentId":12524,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1015496704","memory.heapUsed":"566975056","memory.heapTotal":"630472704"},"startTime":1766009745804,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":9451,"timestamp":17858773494,"id":12551,"parentId":12501,"tags":{},"startTime":1766009745799,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":125429,"timestamp":17858658844,"id":12501,"parentId":3,"tags":{"trigger":"src/components"},"startTime":1766009745684,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"client-success","duration":0,"timestamp":17858785626,"id":12555,"parentId":3,"tags":{},"startTime":1766009745811,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17858789035,"id":12557,"parentId":3,"tags":{},"startTime":1766009745815,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17858789130,"id":12558,"parentId":3,"tags":{},"startTime":1766009745815,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":9481,"timestamp":17858787661,"id":12556,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009745813,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":142000,"timestamp":1766009745685000,"id":12562,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./src/app/globals.css"],"page":"/","isPageHidden":false},"startTime":1766009745827,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":14374,"timestamp":17858794913,"id":12559,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009745820,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":14328,"timestamp":17858794963,"id":12560,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009745821,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":147000,"timestamp":1766009745685000,"id":12563,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./src/app/globals.css"],"page":"/","isPageHidden":false},"startTime":1766009745835,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":151000,"timestamp":1766009745685000,"id":12566,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./src/app/globals.css"],"page":"/","isPageHidden":false},"startTime":1766009745837,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":24265,"timestamp":17858800800,"id":12561,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009745826,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17858825104,"id":12567,"parentId":12561,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1015496704","memory.heapUsed":"574033808","memory.heapTotal":"630472704"},"startTime":1766009745851,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":15625,"timestamp":17858811187,"id":12565,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009745837,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17858826843,"id":12568,"parentId":12565,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1015496704","memory.heapUsed":"574744904","memory.heapTotal":"630472704"},"startTime":1766009745852,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":16077,"timestamp":17858810985,"id":12564,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009745837,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17858827087,"id":12569,"parentId":12564,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1015496704","memory.heapUsed":"574892368","memory.heapTotal":"630472704"},"startTime":1766009745853,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":11628,"timestamp":17860568350,"id":12579,"parentId":12573,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009747594,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":12707,"timestamp":17860568326,"id":12576,"parentId":12573,"tags":{"request":"next/dist/pages/_document"},"startTime":1766009747594,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":13167,"timestamp":17860568264,"id":12574,"parentId":12573,"tags":{"request":"next/dist/pages/_app"},"startTime":1766009747594,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":13443,"timestamp":17860568315,"id":12575,"parentId":12573,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009747594,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":13427,"timestamp":17860568334,"id":12577,"parentId":12573,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009747594,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":2444,"timestamp":17860579430,"id":12584,"parentId":12583,"tags":{},"startTime":1766009747605,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":2538,"timestamp":17860579338,"id":12583,"parentId":12582,"tags":{},"startTime":1766009747605,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":4130,"timestamp":17860578760,"id":12582,"parentId":12572,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/layout.tsx","layer":"rsc"},"startTime":1766009747604,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":15817,"timestamp":17860568363,"id":12581,"parentId":12573,"tags":{"request":"next-app-loader?name=app%2Fmanifest.webmanifest%2Froute&page=%2Fmanifest.webmanifest%2Froute&appPaths=&pagePath=private-next-app-dir%2Fmanifest.ts&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009747594,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":19326,"timestamp":17860568342,"id":12578,"parentId":12573,"tags":{"request":"next-app-loader?name=app%2Fnot-found&page=%2Fnot-found&appPaths=&pagePath=..%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009747594,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":24001,"timestamp":17860568357,"id":12580,"parentId":12573,"tags":{"request":"next-app-loader?name=app%2Fbottles%2F%5Bid%5D%2Fpage&page=%2Fbottles%2F%5Bid%5D%2Fpage&appPaths=%2Fbottles%2F%5Bid%5D%2Fpage&pagePath=private-next-app-dir%2Fbottles%2F%5Bid%5D%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009747594,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":35247,"timestamp":17860563415,"id":12573,"parentId":12572,"tags":{},"startTime":1766009747589,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":2402,"timestamp":17860613981,"id":12596,"parentId":12595,"tags":{},"startTime":1766009747640,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":3,"timestamp":17860616399,"id":12598,"parentId":12595,"tags":{},"startTime":1766009747642,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":2976,"timestamp":17860616414,"id":12599,"parentId":12595,"tags":{},"startTime":1766009747642,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":5,"timestamp":17860619407,"id":12600,"parentId":12595,"tags":{},"startTime":1766009747645,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":2,"timestamp":17860619424,"id":12601,"parentId":12595,"tags":{},"startTime":1766009747645,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":4522,"timestamp":17860616393,"id":12597,"parentId":12595,"tags":{},"startTime":1766009747642,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":2046,"timestamp":17860621969,"id":12602,"parentId":12595,"tags":{},"startTime":1766009747648,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":4249,"timestamp":17860624024,"id":12603,"parentId":12595,"tags":{},"startTime":1766009747650,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":831,"timestamp":17860629254,"id":12604,"parentId":12595,"tags":{},"startTime":1766009747655,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":88,"timestamp":17860630085,"id":12605,"parentId":12595,"tags":{},"startTime":1766009747656,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":79,"timestamp":17860630166,"id":12606,"parentId":12595,"tags":{},"startTime":1766009747656,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1111,"timestamp":17860630248,"id":12607,"parentId":12595,"tags":{},"startTime":1766009747656,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":23190,"timestamp":17860611555,"id":12595,"parentId":12572,"tags":{},"startTime":1766009747637,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":76233,"timestamp":17860563144,"id":12572,"parentId":12570,"tags":{"name":"server"},"startTime":1766009747589,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":3256,"timestamp":17860639413,"id":12608,"parentId":12570,"tags":{},"startTime":1766009747665,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-server","duration":87382,"timestamp":17860555570,"id":12570,"parentId":3,"tags":{"trigger":"src/app/layout.tsx"},"startTime":1766009747581,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":3132,"timestamp":17860650325,"id":12623,"parentId":12610,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2Fnot-found!"},"startTime":1766009747676,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4298,"timestamp":17860650192,"id":12611,"parentId":12610,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009747676,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4238,"timestamp":17860650259,"id":12613,"parentId":12610,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009747676,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":5312,"timestamp":17860650275,"id":12615,"parentId":12610,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009747676,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7106,"timestamp":17860650288,"id":12617,"parentId":12610,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009747676,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7079,"timestamp":17860650318,"id":12622,"parentId":12610,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009747676,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":7600,"timestamp":17860650246,"id":12612,"parentId":12610,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009747676,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":8049,"timestamp":17860650306,"id":12620,"parentId":12610,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009747676,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":8046,"timestamp":17860650312,"id":12621,"parentId":12610,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009747676,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":1513,"timestamp":17860656857,"id":12626,"parentId":12625,"tags":{},"startTime":1766009747682,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":10238,"timestamp":17860650267,"id":12614,"parentId":12610,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009747676,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-process","duration":37976,"timestamp":17860658441,"id":12628,"parentId":12627,"tags":{},"startTime":1766009747684,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-loader","duration":38149,"timestamp":17860658398,"id":12627,"parentId":12625,"tags":{},"startTime":1766009747684,"traceId":"ccbcc14e0de3ee02"},{"name":"css-loader","duration":7947,"timestamp":17860696572,"id":12629,"parentId":12625,"tags":{"astUsed":"true"},"startTime":1766009747722,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":48493,"timestamp":17860656783,"id":12625,"parentId":12624,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css.webpack[javascript/auto]!=!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":null},"startTime":1766009747682,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":55228,"timestamp":17860650294,"id":12618,"parentId":12610,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009747676,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":55299,"timestamp":17860650282,"id":12616,"parentId":12610,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009747676,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":54367,"timestamp":17860652846,"id":12624,"parentId":12609,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":"app-pages-browser"},"startTime":1766009747678,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module","duration":16,"timestamp":17860707303,"id":12630,"parentId":12624,"tags":{},"startTime":1766009747733,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":57027,"timestamp":17860650301,"id":12619,"parentId":12610,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FPWARegistration.tsx&server=false!"},"startTime":1766009747676,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":63265,"timestamp":17860644074,"id":12610,"parentId":12609,"tags":{},"startTime":1766009747670,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":965,"timestamp":17860710639,"id":12632,"parentId":12631,"tags":{},"startTime":1766009747736,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":42,"timestamp":17860711622,"id":12634,"parentId":12631,"tags":{},"startTime":1766009747737,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":45,"timestamp":17860711677,"id":12635,"parentId":12631,"tags":{},"startTime":1766009747737,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":4,"timestamp":17860711734,"id":12636,"parentId":12631,"tags":{},"startTime":1766009747737,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":2,"timestamp":17860711751,"id":12637,"parentId":12631,"tags":{},"startTime":1766009747737,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":592,"timestamp":17860711615,"id":12633,"parentId":12631,"tags":{},"startTime":1766009747737,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":339,"timestamp":17860712854,"id":12638,"parentId":12631,"tags":{},"startTime":1766009747738,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":3485,"timestamp":17860713200,"id":12639,"parentId":12631,"tags":{},"startTime":1766009747739,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":1852,"timestamp":17860717591,"id":12640,"parentId":12631,"tags":{},"startTime":1766009747743,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":118,"timestamp":17860719443,"id":12641,"parentId":12631,"tags":{},"startTime":1766009747745,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":74,"timestamp":17860719554,"id":12642,"parentId":12631,"tags":{},"startTime":1766009747745,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1480,"timestamp":17860719632,"id":12643,"parentId":12631,"tags":{},"startTime":1766009747745,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-generateClientManifest","duration":45,"timestamp":17860721744,"id":12645,"parentId":12609,"tags":{},"startTime":1766009747747,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":90,"timestamp":17860721701,"id":12644,"parentId":12609,"tags":{},"startTime":1766009747747,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":13351,"timestamp":17860709469,"id":12631,"parentId":12609,"tags":{},"startTime":1766009747735,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":78977,"timestamp":17860643861,"id":12609,"parentId":12571,"tags":{"name":"client"},"startTime":1766009747669,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":2719,"timestamp":17860722855,"id":12646,"parentId":12571,"tags":{},"startTime":1766009747748,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":170828,"timestamp":17860555674,"id":12571,"parentId":3,"tags":{"trigger":"src/app/layout.tsx"},"startTime":1766009747581,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"client-success","duration":0,"timestamp":17860727792,"id":12647,"parentId":3,"tags":{},"startTime":1766009747753,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17860727860,"id":12648,"parentId":3,"tags":{},"startTime":1766009747753,"traceId":"ccbcc14e0de3ee02"},{"name":"client-success","duration":0,"timestamp":17860727889,"id":12649,"parentId":3,"tags":{},"startTime":1766009747753,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":12761,"timestamp":17860731501,"id":12650,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009747757,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":12717,"timestamp":17860731548,"id":12651,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009747757,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":12768,"timestamp":17860731593,"id":12652,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009747757,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":184000,"timestamp":1766009747582000,"id":12653,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./src/app/globals.css"],"page":"/","isPageHidden":false},"startTime":1766009747770,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":184000,"timestamp":1766009747582000,"id":12654,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./src/app/globals.css"],"page":"/","isPageHidden":false},"startTime":1766009747771,"traceId":"ccbcc14e0de3ee02"},{"name":"client-hmr-latency","duration":190000,"timestamp":1766009747582000,"id":12658,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./src/app/globals.css"],"page":"/","isPageHidden":false},"startTime":1766009747772,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":22438,"timestamp":17860746012,"id":12657,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009747772,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17860768494,"id":12659,"parentId":12657,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1017593856","memory.heapUsed":"599600872","memory.heapTotal":"635588608"},"startTime":1766009747794,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":22980,"timestamp":17860745803,"id":12656,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009747771,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17860768816,"id":12660,"parentId":12656,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1017593856","memory.heapUsed":"599748328","memory.heapTotal":"635588608"},"startTime":1766009747794,"traceId":"ccbcc14e0de3ee02"},{"name":"handle-request","duration":23728,"timestamp":17860745317,"id":12655,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1766009747771,"traceId":"ccbcc14e0de3ee02"},{"name":"memory-usage","duration":0,"timestamp":17860769072,"id":12661,"parentId":12655,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"1017593856","memory.heapUsed":"599897120","memory.heapTotal":"635588608"},"startTime":1766009747795,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":11713,"timestamp":17862651848,"id":12671,"parentId":12665,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009749677,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":3131,"timestamp":17862662845,"id":12676,"parentId":12675,"tags":{},"startTime":1766009749688,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":3193,"timestamp":17862662786,"id":12675,"parentId":12674,"tags":{},"startTime":1766009749688,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":5106,"timestamp":17862662255,"id":12674,"parentId":12664,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/layout.tsx","layer":"rsc"},"startTime":1766009749688,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":16100,"timestamp":17862651823,"id":12668,"parentId":12665,"tags":{"request":"next/dist/pages/_document"},"startTime":1766009749677,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":16647,"timestamp":17862651758,"id":12666,"parentId":12665,"tags":{"request":"next/dist/pages/_app"},"startTime":1766009749677,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":16894,"timestamp":17862651813,"id":12667,"parentId":12665,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009749677,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":16878,"timestamp":17862651832,"id":12669,"parentId":12665,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1766009749677,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":18582,"timestamp":17862651862,"id":12673,"parentId":12665,"tags":{"request":"next-app-loader?name=app%2Fmanifest.webmanifest%2Froute&page=%2Fmanifest.webmanifest%2Froute&appPaths=&pagePath=private-next-app-dir%2Fmanifest.ts&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009749677,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":25970,"timestamp":17862651855,"id":12672,"parentId":12665,"tags":{"request":"next-app-loader?name=app%2Fbottles%2F%5Bid%5D%2Fpage&page=%2Fbottles%2F%5Bid%5D%2Fpage&appPaths=%2Fbottles%2F%5Bid%5D%2Fpage&pagePath=private-next-app-dir%2Fbottles%2F%5Bid%5D%2Fpage.tsx&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009749677,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":715,"timestamp":17862678391,"id":12679,"parentId":12678,"tags":{},"startTime":1766009749704,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":764,"timestamp":17862678345,"id":12678,"parentId":12677,"tags":{},"startTime":1766009749704,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":1289,"timestamp":17862678237,"id":12677,"parentId":12674,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/components/OfflineIndicator.tsx","layer":"rsc"},"startTime":1766009749704,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":27895,"timestamp":17862651840,"id":12670,"parentId":12665,"tags":{"request":"next-app-loader?name=app%2Fnot-found&page=%2Fnot-found&appPaths=&pagePath=..%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1766009749677,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx&server=true!","duration":1048,"timestamp":17862682925,"id":12688,"parentId":12664,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FOfflineIndicator.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FPWARegistration.tsx&server=true!","layer":"ssr"},"startTime":1766009749708,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1803,"timestamp":17862692759,"id":12691,"parentId":12690,"tags":{},"startTime":1766009749718,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1904,"timestamp":17862692662,"id":12690,"parentId":12689,"tags":{},"startTime":1766009749718,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":2651,"timestamp":17862692498,"id":12689,"parentId":12688,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/components/OfflineIndicator.tsx","layer":"ssr"},"startTime":1766009749718,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":163,"timestamp":17862696072,"id":12693,"parentId":12692,"tags":{},"startTime":1766009749722,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":579,"timestamp":17862697176,"id":12695,"parentId":12694,"tags":{},"startTime":1766009749723,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":658,"timestamp":17862697100,"id":12694,"parentId":12692,"tags":{},"startTime":1766009749723,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":2166,"timestamp":17862695927,"id":12692,"parentId":12689,"tags":{"name":"__barrel_optimize__?names=WifiOff!=!/home/robin/AI/Coding/Whisky/node_modules/lucide-react/dist/esm/lucide-react.js","layer":"ssr"},"startTime":1766009749721,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":771,"timestamp":17862699463,"id":12698,"parentId":12697,"tags":{},"startTime":1766009749725,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":824,"timestamp":17862699412,"id":12697,"parentId":12696,"tags":{},"startTime":1766009749725,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":1254,"timestamp":17862699299,"id":12696,"parentId":12692,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/lucide-react/dist/esm/icons/wifi-off.js","layer":"ssr"},"startTime":1766009749725,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":53335,"timestamp":17862647479,"id":12665,"parentId":12664,"tags":{},"startTime":1766009749673,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":3794,"timestamp":17862713037,"id":12702,"parentId":12701,"tags":{},"startTime":1766009749739,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":3,"timestamp":17862716845,"id":12704,"parentId":12701,"tags":{},"startTime":1766009749742,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":1888,"timestamp":17862716859,"id":12705,"parentId":12701,"tags":{},"startTime":1766009749742,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":4,"timestamp":17862718762,"id":12706,"parentId":12701,"tags":{},"startTime":1766009749744,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":2,"timestamp":17862718776,"id":12707,"parentId":12701,"tags":{},"startTime":1766009749744,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":2827,"timestamp":17862716839,"id":12703,"parentId":12701,"tags":{},"startTime":1766009749742,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":1947,"timestamp":17862720673,"id":12708,"parentId":12701,"tags":{},"startTime":1766009749746,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":3051,"timestamp":17862722628,"id":12709,"parentId":12701,"tags":{},"startTime":1766009749748,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":1002,"timestamp":17862726585,"id":12710,"parentId":12701,"tags":{},"startTime":1766009749752,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":87,"timestamp":17862727587,"id":12711,"parentId":12701,"tags":{},"startTime":1766009749753,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":70,"timestamp":17862727666,"id":12712,"parentId":12701,"tags":{},"startTime":1766009749753,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":1864,"timestamp":17862727740,"id":12713,"parentId":12701,"tags":{},"startTime":1766009749753,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":21236,"timestamp":17862710688,"id":12701,"parentId":12664,"tags":{},"startTime":1766009749736,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":89891,"timestamp":17862647186,"id":12664,"parentId":12662,"tags":{"name":"server"},"startTime":1766009749673,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":2907,"timestamp":17862737108,"id":12714,"parentId":12662,"tags":{},"startTime":1766009749763,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-server","duration":100262,"timestamp":17862639974,"id":12662,"parentId":3,"tags":{"trigger":"src/app/layout.tsx"},"startTime":1766009749666,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx&server=false!","duration":1666,"timestamp":17862747820,"id":12730,"parentId":12725,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FOfflineIndicator.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FPWARegistration.tsx&server=false!","layer":"app-pages-browser"},"startTime":1766009749773,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":4363,"timestamp":17862745586,"id":12729,"parentId":12716,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2Fnot-found!"},"startTime":1766009749771,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":5837,"timestamp":17862745478,"id":12717,"parentId":12716,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009749771,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":5800,"timestamp":17862745523,"id":12719,"parentId":12716,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1766009749771,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":6691,"timestamp":17862745536,"id":12721,"parentId":12716,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1766009749771,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":10630,"timestamp":17862745549,"id":12723,"parentId":12716,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1766009749771,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":10601,"timestamp":17862745580,"id":12728,"parentId":12716,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fpages%2F_error.js&page=%2F_error!"},"startTime":1766009749771,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":11545,"timestamp":17862745515,"id":12718,"parentId":12716,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1766009749771,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":12119,"timestamp":17862745568,"id":12726,"parentId":12716,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1766009749771,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":12117,"timestamp":17862745574,"id":12727,"parentId":12716,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Flink.js&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FStatusSwitcher.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FTastingNoteForm.tsx&server=false!"},"startTime":1766009749771,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":12516,"timestamp":17862745530,"id":12720,"parentId":12716,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1766009749771,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1590,"timestamp":17862756631,"id":12734,"parentId":12733,"tags":{},"startTime":1766009749782,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1647,"timestamp":17862756577,"id":12733,"parentId":12732,"tags":{},"startTime":1766009749782,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-tsx","duration":3042,"timestamp":17862756381,"id":12732,"parentId":12730,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/components/OfflineIndicator.tsx","layer":"app-pages-browser"},"startTime":1766009749782,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":2942,"timestamp":17862757180,"id":12736,"parentId":12735,"tags":{},"startTime":1766009749783,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17126,"timestamp":17862745555,"id":12724,"parentId":12716,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fpage.tsx&server=false!"},"startTime":1766009749771,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":17317,"timestamp":17862745542,"id":12722,"parentId":12716,"tags":{"request":"/home/robin/AI/Coding/Whisky/node_modules/next/dist/client/router.js"},"startTime":1766009749771,"traceId":"ccbcc14e0de3ee02"},{"name":"read-resource","duration":9,"timestamp":17862762871,"id":12740,"parentId":12739,"tags":{},"startTime":1766009749788,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-process","duration":37467,"timestamp":17862760199,"id":12738,"parentId":12737,"tags":{},"startTime":1766009749786,"traceId":"ccbcc14e0de3ee02"},{"name":"postcss-loader","duration":39452,"timestamp":17862760140,"id":12737,"parentId":12735,"tags":{},"startTime":1766009749786,"traceId":"ccbcc14e0de3ee02"},{"name":"css-loader","duration":8599,"timestamp":17862799615,"id":12743,"parentId":12735,"tags":{"astUsed":"true"},"startTime":1766009749825,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":51691,"timestamp":17862757114,"id":12735,"parentId":12731,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css.webpack[javascript/auto]!=!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!/home/robin/AI/Coding/Whisky/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":null},"startTime":1766009749783,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":45235,"timestamp":17862763729,"id":12742,"parentId":12741,"tags":{},"startTime":1766009749789,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":45309,"timestamp":17862763657,"id":12741,"parentId":12739,"tags":{},"startTime":1766009749789,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":46824,"timestamp":17862762779,"id":12739,"parentId":12732,"tags":{"name":"__barrel_optimize__?names=WifiOff!=!/home/robin/AI/Coding/Whisky/node_modules/lucide-react/dist/esm/lucide-react.js","layer":"app-pages-browser"},"startTime":1766009749788,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-css","duration":59114,"timestamp":17862753526,"id":12731,"parentId":12730,"tags":{"name":"/home/robin/AI/Coding/Whisky/src/app/globals.css","layer":"app-pages-browser"},"startTime":1766009749779,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module","duration":18,"timestamp":17862813088,"id":12747,"parentId":12731,"tags":{},"startTime":1766009749839,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-transform","duration":1233,"timestamp":17862812918,"id":12746,"parentId":12745,"tags":{},"startTime":1766009749838,"traceId":"ccbcc14e0de3ee02"},{"name":"next-swc-loader","duration":1289,"timestamp":17862812867,"id":12745,"parentId":12744,"tags":{},"startTime":1766009749838,"traceId":"ccbcc14e0de3ee02"},{"name":"build-module-js","duration":1830,"timestamp":17862812751,"id":12744,"parentId":12739,"tags":{"name":"/home/robin/AI/Coding/Whisky/node_modules/lucide-react/dist/esm/icons/wifi-off.js","layer":"app-pages-browser"},"startTime":1766009749838,"traceId":"ccbcc14e0de3ee02"},{"name":"add-entry","duration":69306,"timestamp":17862745561,"id":12725,"parentId":12716,"tags":{"request":"next-flight-client-entry-loader?modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fapp%2Fglobals.css&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fnode_modules%2Fnext%2Ffont%2Fgoogle%2Ftarget.css%3F%7B%22path%22%3A%22src%2Fapp%2Flayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FOfflineIndicator.tsx&modules=%2Fhome%2Frobin%2FAI%2FCoding%2FWhisky%2Fsrc%2Fcomponents%2FPWARegistration.tsx&server=false!"},"startTime":1766009749771,"traceId":"ccbcc14e0de3ee02"},{"name":"make","duration":73504,"timestamp":17862741376,"id":12716,"parentId":12715,"tags":{},"startTime":1766009749767,"traceId":"ccbcc14e0de3ee02"},{"name":"chunk-graph","duration":1254,"timestamp":17862819006,"id":12749,"parentId":12748,"tags":{},"startTime":1766009749845,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-modules","duration":3,"timestamp":17862820275,"id":12751,"parentId":12748,"tags":{},"startTime":1766009749846,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunks","duration":44,"timestamp":17862820289,"id":12752,"parentId":12748,"tags":{},"startTime":1766009749846,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-tree","duration":6,"timestamp":17862820346,"id":12753,"parentId":12748,"tags":{},"startTime":1766009749846,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize-chunk-modules","duration":3,"timestamp":17862820368,"id":12754,"parentId":12748,"tags":{},"startTime":1766009749846,"traceId":"ccbcc14e0de3ee02"},{"name":"optimize","duration":623,"timestamp":17862820269,"id":12750,"parentId":12748,"tags":{},"startTime":1766009749846,"traceId":"ccbcc14e0de3ee02"},{"name":"module-hash","duration":407,"timestamp":17862821717,"id":12755,"parentId":12748,"tags":{},"startTime":1766009749847,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation","duration":2364,"timestamp":17862822133,"id":12756,"parentId":12748,"tags":{},"startTime":1766009749848,"traceId":"ccbcc14e0de3ee02"},{"name":"hash","duration":2312,"timestamp":17862825500,"id":12757,"parentId":12748,"tags":{},"startTime":1766009749851,"traceId":"ccbcc14e0de3ee02"},{"name":"code-generation-jobs","duration":240,"timestamp":17862827811,"id":12758,"parentId":12748,"tags":{},"startTime":1766009749853,"traceId":"ccbcc14e0de3ee02"},{"name":"module-assets","duration":129,"timestamp":17862828038,"id":12759,"parentId":12748,"tags":{},"startTime":1766009749854,"traceId":"ccbcc14e0de3ee02"},{"name":"create-chunk-assets","duration":6188,"timestamp":17862828175,"id":12760,"parentId":12748,"tags":{},"startTime":1766009749854,"traceId":"ccbcc14e0de3ee02"}]
+[{"name":"NextJsBuildManifest-generateClientManifest","duration":54,"timestamp":17862835236,"id":12762,"parentId":12715,"tags":{},"startTime":1766009749861,"traceId":"ccbcc14e0de3ee02"},{"name":"NextJsBuildManifest-createassets","duration":109,"timestamp":17862835183,"id":12761,"parentId":12715,"tags":{},"startTime":1766009749861,"traceId":"ccbcc14e0de3ee02"},{"name":"seal","duration":18701,"timestamp":17862817728,"id":12748,"parentId":12715,"tags":{},"startTime":1766009749843,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-compilation","duration":95278,"timestamp":17862741172,"id":12715,"parentId":12663,"tags":{"name":"client"},"startTime":1766009749767,"traceId":"ccbcc14e0de3ee02"},{"name":"emit","duration":4190,"timestamp":17862836479,"id":12763,"parentId":12663,"tags":{},"startTime":1766009749862,"traceId":"ccbcc14e0de3ee02"},{"name":"webpack-invalidated-client","duration":201674,"timestamp":17862640089,"id":12663,"parentId":3,"tags":{"trigger":"src/app/layout.tsx"},"startTime":1766009749666,"traceId":"ccbcc14e0de3ee02"}]
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..3d23c23
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/icon-192.png b/public/icon-192.png
new file mode 100644
index 0000000..3d23c23
Binary files /dev/null and b/public/icon-192.png differ
diff --git a/public/icon-512.png b/public/icon-512.png
new file mode 100644
index 0000000..3d23c23
Binary files /dev/null and b/public/icon-512.png differ
diff --git a/public/sw.js b/public/sw.js
new file mode 100644
index 0000000..d864183
--- /dev/null
+++ b/public/sw.js
@@ -0,0 +1,38 @@
+const CACHE_NAME = 'whisky-vault-v1';
+const ASSETS_TO_CACHE = [
+ '/',
+ '/manifest.json',
+ '/icon-192.png',
+ '/icon-512.png',
+ '/favicon.ico',
+];
+
+self.addEventListener('install', (event) => {
+ event.waitUntil(
+ caches.open(CACHE_NAME).then((cache) => {
+ return cache.addAll(ASSETS_TO_CACHE);
+ })
+ );
+});
+
+self.addEventListener('activate', (event) => {
+ event.waitUntil(
+ caches.keys().then((cacheNames) => {
+ return Promise.all(
+ cacheNames.map((cacheName) => {
+ if (cacheName !== CACHE_NAME) {
+ return caches.delete(cacheName);
+ }
+ })
+ );
+ })
+ );
+});
+
+self.addEventListener('fetch', (event) => {
+ event.respondWith(
+ caches.match(event.request).then((response) => {
+ return response || fetch(event.request);
+ })
+ );
+});
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index d4ae3ae..44542d0 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,13 +1,34 @@
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";
+import PWARegistration from "@/components/PWARegistration";
+import OfflineIndicator from "@/components/OfflineIndicator";
const inter = Inter({ subsets: ["latin"] });
export const metadata: Metadata = {
- title: "Whisky Vault",
- description: "Your digital whisky collection",
+ title: {
+ default: "Whisky Vault",
+ template: "%s | Whisky Vault"
+ },
+ description: "Dein persönlicher Whisky-Begleiter zum Scannen und Verkosten.",
manifest: "/manifest.json",
+ appleWebApp: {
+ capable: true,
+ statusBarStyle: "default",
+ title: "Whisky Vault",
+ },
+ formatDetection: {
+ telephone: false,
+ },
+};
+
+export const viewport = {
+ themeColor: "#000000",
+ width: "device-width",
+ initialScale: 1,
+ maximumScale: 1,
+ userScalable: false,
};
export default function RootLayout({
@@ -16,8 +37,12 @@ export default function RootLayout({
children: React.ReactNode;
}>) {
return (
-
- {children}
+
+
+
+
+ {children}
+
);
}
diff --git a/src/app/manifest.ts b/src/app/manifest.ts
new file mode 100644
index 0000000..7e5c53a
--- /dev/null
+++ b/src/app/manifest.ts
@@ -0,0 +1,25 @@
+import { MetadataRoute } from 'next'
+
+export default function manifest(): MetadataRoute.Manifest {
+ return {
+ name: 'Whisky Vault',
+ short_name: 'WhiskyVault',
+ description: 'Dein persönlicher Whisky-Begleiter zum Scannen und Verkosten.',
+ start_url: '/',
+ display: 'standalone',
+ background_color: '#000000',
+ theme_color: '#d97706',
+ icons: [
+ {
+ src: '/icon-192.png',
+ sizes: '192x192',
+ type: 'image/png',
+ },
+ {
+ src: '/icon-512.png',
+ sizes: '512x512',
+ type: 'image/png',
+ },
+ ],
+ }
+}
diff --git a/src/components/OfflineIndicator.tsx b/src/components/OfflineIndicator.tsx
new file mode 100644
index 0000000..7e6e14d
--- /dev/null
+++ b/src/components/OfflineIndicator.tsx
@@ -0,0 +1,32 @@
+'use client';
+
+import React, { useState, useEffect } from 'react';
+import { WifiOff } from 'lucide-react';
+
+export default function OfflineIndicator() {
+ const [isOffline, setIsOffline] = useState(false);
+
+ useEffect(() => {
+ setIsOffline(!navigator.onLine);
+
+ const handleOnline = () => setIsOffline(false);
+ const handleOffline = () => setIsOffline(true);
+
+ window.addEventListener('online', handleOnline);
+ window.addEventListener('offline', handleOffline);
+
+ return () => {
+ window.removeEventListener('online', handleOnline);
+ window.removeEventListener('offline', handleOffline);
+ };
+ }, []);
+
+ if (!isOffline) return null;
+
+ return (
+
+
+ Offline-Modus: Du siehst eine gespeicherte Version
+
+ );
+}
diff --git a/src/components/PWARegistration.tsx b/src/components/PWARegistration.tsx
new file mode 100644
index 0000000..a82df5c
--- /dev/null
+++ b/src/components/PWARegistration.tsx
@@ -0,0 +1,22 @@
+'use client';
+
+import { useEffect } from 'react';
+
+export default function PWARegistration() {
+ useEffect(() => {
+ if ('serviceWorker' in navigator && window.location.hostname !== 'localhost') {
+ window.addEventListener('load', () => {
+ navigator.serviceWorker
+ .register('/sw.js')
+ .then((registration) => {
+ console.log('SW registered: ', registration);
+ })
+ .catch((registrationError) => {
+ console.log('SW registration failed: ', registrationError);
+ });
+ });
+ }
+ }, []);
+
+ return null;
+}