@excalidraw/excalidraw 0.15.2-6546-21ca391 → 0.15.2-6546-a6b389c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3002,7 +3002,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3002
3002
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3003
3003
 
3004
3004
  "use strict";
3005
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"trackEvent\": () => (/* binding */ trackEvent)\n/* harmony export */ });\nconst trackEvent = (category, action, label, value) => {\n try {\n // place here categories that you want to track as events\n // KEEP IN MIND THE PRICING\n const ALLOWED_CATEGORIES_TO_TRACK = [];\n // Uncomment the next line to track locally\n // console.log(\"Track Event\", { category, action, label, value });\n if (typeof window === \"undefined\" || ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"REACT_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"REACT_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.15.2-6546-21ca391\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true}).JEST_WORKER_ID) {\n return;\n }\n if (!ALLOWED_CATEGORIES_TO_TRACK.includes(category)) {\n return;\n }\n if (window.sa_event) {\n window.sa_event(action, {\n category,\n label,\n value,\n });\n }\n }\n catch (error) {\n console.error(\"error during analytics\", error);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTyxNQUFNLFVBQVUsR0FBRyxDQUN4QixRQUFnQixFQUNoQixNQUFjLEVBQ2QsS0FBYyxFQUNkLEtBQWMsRUFDZCxFQUFFO0lBQ0YsSUFBSTtRQUNGLHlEQUF5RDtRQUN6RCwyQkFBMkI7UUFDM0IsTUFBTSwyQkFBMkIsR0FBRyxFQUFjLENBQUM7UUFDbkQsMkNBQTJDO1FBQzNDLGtFQUFrRTtRQUVsRSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxtL0JBQVcsQ0FBQyxjQUFjLEVBQUU7WUFDL0QsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDbkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLFFBQVE7Z0JBQ1IsS0FBSztnQkFDTCxLQUFLO2FBQ04sQ0FBQyxDQUFDO1NBQ0o7S0FDRjtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNoRDtBQUNILENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9hbmFseXRpY3MudHM/NWYwYyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdHJhY2tFdmVudCA9IChcbiAgY2F0ZWdvcnk6IHN0cmluZyxcbiAgYWN0aW9uOiBzdHJpbmcsXG4gIGxhYmVsPzogc3RyaW5nLFxuICB2YWx1ZT86IG51bWJlcixcbikgPT4ge1xuICB0cnkge1xuICAgIC8vIHBsYWNlIGhlcmUgY2F0ZWdvcmllcyB0aGF0IHlvdSB3YW50IHRvIHRyYWNrIGFzIGV2ZW50c1xuICAgIC8vIEtFRVAgSU4gTUlORCBUSEUgUFJJQ0lOR1xuICAgIGNvbnN0IEFMTE9XRURfQ0FURUdPUklFU19UT19UUkFDSyA9IFtdIGFzIHN0cmluZ1tdO1xuICAgIC8vIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIHRyYWNrIGxvY2FsbHlcbiAgICAvLyBjb25zb2xlLmxvZyhcIlRyYWNrIEV2ZW50XCIsIHsgY2F0ZWdvcnksIGFjdGlvbiwgbGFiZWwsIHZhbHVlIH0pO1xuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIUFMTE9XRURfQ0FURUdPUklFU19UT19UUkFDSy5pbmNsdWRlcyhjYXRlZ29yeSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAod2luZG93LnNhX2V2ZW50KSB7XG4gICAgICB3aW5kb3cuc2FfZXZlbnQoYWN0aW9uLCB7XG4gICAgICAgIGNhdGVnb3J5LFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgdmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcImVycm9yIGR1cmluZyBhbmFseXRpY3NcIiwgZXJyb3IpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../analytics.ts\n");
3005
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"trackEvent\": () => (/* binding */ trackEvent)\n/* harmony export */ });\nconst trackEvent = (category, action, label, value) => {\n try {\n // place here categories that you want to track as events\n // KEEP IN MIND THE PRICING\n const ALLOWED_CATEGORIES_TO_TRACK = [];\n // Uncomment the next line to track locally\n // console.log(\"Track Event\", { category, action, label, value });\n if (typeof window === \"undefined\" || ({\"REACT_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"REACT_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"REACT_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"REACT_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"REACT_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"REACT_APP_PORTAL_URL\":\"\",\"REACT_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"REACT_APP_DEV_ENABLE_SW\":\"\",\"REACT_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"REACT_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"REACT_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.15.2-6546-a6b389c\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true}).JEST_WORKER_ID) {\n return;\n }\n if (!ALLOWED_CATEGORIES_TO_TRACK.includes(category)) {\n return;\n }\n if (window.sa_event) {\n window.sa_event(action, {\n category,\n label,\n value,\n });\n }\n }\n catch (error) {\n console.error(\"error during analytics\", error);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTyxNQUFNLFVBQVUsR0FBRyxDQUN4QixRQUFnQixFQUNoQixNQUFjLEVBQ2QsS0FBYyxFQUNkLEtBQWMsRUFDZCxFQUFFO0lBQ0YsSUFBSTtRQUNGLHlEQUF5RDtRQUN6RCwyQkFBMkI7UUFDM0IsTUFBTSwyQkFBMkIsR0FBRyxFQUFjLENBQUM7UUFDbkQsMkNBQTJDO1FBQzNDLGtFQUFrRTtRQUVsRSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxtL0JBQVcsQ0FBQyxjQUFjLEVBQUU7WUFDL0QsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDbkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLFFBQVE7Z0JBQ1IsS0FBSztnQkFDTCxLQUFLO2FBQ04sQ0FBQyxDQUFDO1NBQ0o7S0FDRjtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNoRDtBQUNILENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9hbmFseXRpY3MudHM/NWYwYyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdHJhY2tFdmVudCA9IChcbiAgY2F0ZWdvcnk6IHN0cmluZyxcbiAgYWN0aW9uOiBzdHJpbmcsXG4gIGxhYmVsPzogc3RyaW5nLFxuICB2YWx1ZT86IG51bWJlcixcbikgPT4ge1xuICB0cnkge1xuICAgIC8vIHBsYWNlIGhlcmUgY2F0ZWdvcmllcyB0aGF0IHlvdSB3YW50IHRvIHRyYWNrIGFzIGV2ZW50c1xuICAgIC8vIEtFRVAgSU4gTUlORCBUSEUgUFJJQ0lOR1xuICAgIGNvbnN0IEFMTE9XRURfQ0FURUdPUklFU19UT19UUkFDSyA9IFtdIGFzIHN0cmluZ1tdO1xuICAgIC8vIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIHRyYWNrIGxvY2FsbHlcbiAgICAvLyBjb25zb2xlLmxvZyhcIlRyYWNrIEV2ZW50XCIsIHsgY2F0ZWdvcnksIGFjdGlvbiwgbGFiZWwsIHZhbHVlIH0pO1xuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIUFMTE9XRURfQ0FURUdPUklFU19UT19UUkFDSy5pbmNsdWRlcyhjYXRlZ29yeSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAod2luZG93LnNhX2V2ZW50KSB7XG4gICAgICB3aW5kb3cuc2FfZXZlbnQoYWN0aW9uLCB7XG4gICAgICAgIGNhdGVnb3J5LFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgdmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcImVycm9yIGR1cmluZyBhbmFseXRpY3NcIiwgZXJyb3IpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../analytics.ts\n");
3006
3006
 
3007
3007
  /***/ }),
3008
3008
 
@@ -4300,7 +4300,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
4300
4300
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4301
4301
 
4302
4302
  "use strict";
4303
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ELEMENTS_SUPPORTING_PROGRAMMATIC_API\": () => (/* binding */ ELEMENTS_SUPPORTING_PROGRAMMATIC_API),\n/* harmony export */ \"convertToExcalidrawElements\": () => (/* binding */ convertToExcalidrawElements)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _element_binding__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element/binding */ \"../../element/binding.ts\");\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../element/mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _element_newElement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../element/newElement */ \"../../element/newElement.ts\");\n/* harmony import */ var _element_textElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../element/textElement */ \"../../element/textElement.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\nconst ELEMENTS_SUPPORTING_PROGRAMMATIC_API = [\n \"rectangle\",\n \"ellipse\",\n \"diamond\",\n \"text\",\n \"arrow\",\n \"line\",\n \"image\",\n];\nconst DEFAULT_LINEAR_ELEMENT_PROPS = {\n width: 300,\n height: 0,\n};\nconst DEFAULT_DIMENSION = 100;\nconst bindTextToContainer = (containerProps, textProps) => {\n let container;\n if (containerProps.type === \"arrow\") {\n const width = containerProps.width || DEFAULT_LINEAR_ELEMENT_PROPS.width;\n const height = containerProps.height || DEFAULT_LINEAR_ELEMENT_PROPS.height;\n container = (0,_element__WEBPACK_IMPORTED_MODULE_1__.newLinearElement)(Object.assign({ width,\n height, endArrowhead: \"arrow\", points: [\n [0, 0],\n [width, height],\n ] }, containerProps));\n }\n else {\n container = (0,_element__WEBPACK_IMPORTED_MODULE_1__.newElement)(Object.assign({}, containerProps));\n }\n const textElement = (0,_element_newElement__WEBPACK_IMPORTED_MODULE_4__.newTextElement)(Object.assign(Object.assign({ x: 0, y: 0, textAlign: _constants__WEBPACK_IMPORTED_MODULE_0__.TEXT_ALIGN.CENTER, verticalAlign: _constants__WEBPACK_IMPORTED_MODULE_0__.VERTICAL_ALIGN.MIDDLE }, textProps), { containerId: container.id, strokeColor: textProps.strokeColor || container.strokeColor }));\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_3__.mutateElement)(container, {\n boundElements: (container.boundElements || []).concat({\n type: \"text\",\n id: textElement.id,\n }),\n });\n (0,_element__WEBPACK_IMPORTED_MODULE_1__.redrawTextBoundingBox)(textElement, container);\n return [container, textElement];\n};\nconst bindLinearElementToElement = (linearElement) => {\n var _a, _b, _c, _d;\n const { start, end, type, endArrowhead = linearElement.type === \"arrow\" ? \"arrow\" : null } = linearElement, rest = __rest(linearElement, [\"start\", \"end\", \"type\", \"endArrowhead\"]);\n const width = linearElement.width || DEFAULT_LINEAR_ELEMENT_PROPS.width;\n const height = linearElement.height || DEFAULT_LINEAR_ELEMENT_PROPS.height;\n const excliadrawLinearElement = (0,_element__WEBPACK_IMPORTED_MODULE_1__.newLinearElement)(Object.assign({ type,\n width,\n height, points: [\n [0, 0],\n [width, height],\n ], endArrowhead }, rest));\n let startBoundElement;\n let endBoundElement;\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_3__.mutateElement)(excliadrawLinearElement, {\n startBinding: (linearElement === null || linearElement === void 0 ? void 0 : linearElement.startBinding) || null,\n endBinding: linearElement.endBinding || null,\n });\n if (start) {\n const width = (_a = start === null || start === void 0 ? void 0 : start.width) !== null && _a !== void 0 ? _a : DEFAULT_DIMENSION;\n const height = (_b = start === null || start === void 0 ? void 0 : start.height) !== null && _b !== void 0 ? _b : DEFAULT_DIMENSION;\n let existingElement;\n if (start.id) {\n existingElement = excalidrawElements\n .get()\n .find((ele) => (ele === null || ele === void 0 ? void 0 : ele.id) === start.id);\n if (!existingElement) {\n console.error(`No element for start binding with id ${start.id} found`);\n }\n }\n const startX = start.x || excliadrawLinearElement.x - width;\n const startY = start.y || excliadrawLinearElement.y - height / 2;\n const startType = existingElement ? existingElement.type : start.type;\n if (startType) {\n if (startType === \"text\") {\n let text = \"\";\n if (existingElement && existingElement.type === \"text\") {\n text = existingElement.text;\n }\n else if (start.type === \"text\") {\n text = start.text;\n }\n if (!text) {\n console.error(`No text found for start binding text element for ${excliadrawLinearElement.id}`);\n }\n startBoundElement = (0,_element_newElement__WEBPACK_IMPORTED_MODULE_4__.newTextElement)(Object.assign(Object.assign(Object.assign({ x: startX, y: startY, type: \"text\" }, existingElement), start), { text }));\n // to position the text correctly when coordinates not provided\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_3__.mutateElement)(startBoundElement, {\n x: start.x || excliadrawLinearElement.x - startBoundElement.width,\n y: start.y || excliadrawLinearElement.y - startBoundElement.height / 2,\n });\n }\n else {\n startBoundElement = (0,_element__WEBPACK_IMPORTED_MODULE_1__.newElement)(Object.assign(Object.assign(Object.assign({ x: startX, y: startY, width,\n height }, existingElement), start), { type: startType }));\n }\n (0,_element_binding__WEBPACK_IMPORTED_MODULE_2__.bindLinearElement)(excliadrawLinearElement, startBoundElement, \"start\");\n }\n }\n if (end) {\n const height = (_c = end === null || end === void 0 ? void 0 : end.height) !== null && _c !== void 0 ? _c : DEFAULT_DIMENSION;\n const width = (_d = end === null || end === void 0 ? void 0 : end.width) !== null && _d !== void 0 ? _d : DEFAULT_DIMENSION;\n let existingElement;\n if (end.id) {\n existingElement = excalidrawElements\n .get()\n .find((ele) => (ele === null || ele === void 0 ? void 0 : ele.id) === end.id);\n if (!existingElement) {\n console.error(`No element for end binding with id ${end.id} found`);\n }\n }\n const endX = end.x || excliadrawLinearElement.x + excliadrawLinearElement.width;\n const endY = end.y || excliadrawLinearElement.y - height / 2;\n const endType = existingElement ? existingElement.type : end.type;\n if (endType) {\n if (endType === \"text\") {\n let text = \"\";\n if (existingElement && existingElement.type === \"text\") {\n text = existingElement.text;\n }\n else if (end.type === \"text\") {\n text = end.text;\n }\n if (!text) {\n console.error(`No text found for end binding text element for ${excliadrawLinearElement.id}`);\n }\n endBoundElement = (0,_element_newElement__WEBPACK_IMPORTED_MODULE_4__.newTextElement)(Object.assign(Object.assign(Object.assign({ x: endX, y: endY, type: \"text\" }, existingElement), end), { text }));\n // to position the text correctly when coordinates not provided\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_3__.mutateElement)(endBoundElement, {\n y: end.y || excliadrawLinearElement.y - endBoundElement.height / 2,\n });\n }\n else {\n endBoundElement = (0,_element__WEBPACK_IMPORTED_MODULE_1__.newElement)(Object.assign(Object.assign(Object.assign({ x: endX, y: endY, width,\n height }, existingElement), end), { type: endType }));\n }\n (0,_element_binding__WEBPACK_IMPORTED_MODULE_2__.bindLinearElement)(excliadrawLinearElement, endBoundElement, \"end\");\n }\n }\n return {\n linearElement: excliadrawLinearElement,\n startBoundElement,\n endBoundElement,\n };\n};\nconst excalidrawElements = (() => {\n const res = [];\n const elementMap = new Map();\n const add = (ele) => {\n if (!ele) {\n return;\n }\n const index = elementMap.get(ele.id);\n if (index !== undefined && index >= 0) {\n res[index] = ele;\n }\n else {\n res.push(ele);\n const index = res.length - 1;\n elementMap.set(ele.id, index);\n }\n };\n const clear = () => {\n res.length = 0;\n elementMap.clear();\n };\n const get = () => {\n return res;\n };\n const hasElementWithId = (id) => {\n const index = elementMap.get(id);\n return index !== undefined && index >= 0;\n };\n return {\n add,\n clear,\n get,\n hasElementWithId,\n };\n})();\nconst convertToExcalidrawElements = (elements) => {\n excalidrawElements.clear();\n if (!elements) {\n return [];\n }\n elements.forEach((element) => {\n var _a, _b;\n let elementId = element.id || (0,_element_newElement__WEBPACK_IMPORTED_MODULE_4__.regenerateId)(null);\n // To make sure every element has a unique id\n while (excalidrawElements.hasElementWithId(elementId)) {\n elementId = (0,_element_newElement__WEBPACK_IMPORTED_MODULE_4__.regenerateId)(elementId);\n }\n if (!ELEMENTS_SUPPORTING_PROGRAMMATIC_API.includes(element.type)) {\n excalidrawElements.add(element);\n return;\n }\n const elementWithId = Object.assign(Object.assign({}, element), { id: elementId });\n if ((elementWithId.type === \"rectangle\" ||\n elementWithId.type === \"ellipse\" ||\n elementWithId.type === \"diamond\" ||\n elementWithId.type === \"arrow\") &&\n ((_a = elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.label) === null || _a === void 0 ? void 0 : _a.text)) {\n let [container, text] = bindTextToContainer(elementWithId, elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.label);\n excalidrawElements.add(container);\n excalidrawElements.add(text);\n if (container.type === \"arrow\") {\n const originalStart = elementWithId.type === \"arrow\" ? elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.start : undefined;\n const originalEnd = elementWithId.type === \"arrow\" ? elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.end : undefined;\n const { linearElement, startBoundElement, endBoundElement } = bindLinearElementToElement(Object.assign(Object.assign({}, container), { start: originalStart, end: originalEnd }));\n container = linearElement;\n excalidrawElements.add(linearElement);\n excalidrawElements.add(startBoundElement);\n excalidrawElements.add(endBoundElement);\n }\n }\n else {\n let excalidrawElement;\n if (elementWithId.type === \"text\") {\n const fontFamily = (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.fontFamily) || _constants__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_FONT_FAMILY;\n const fontSize = (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.fontSize) || _constants__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_FONT_SIZE;\n const lineHeight = (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.lineHeight) || (0,_element_textElement__WEBPACK_IMPORTED_MODULE_5__.getDefaultLineHeight)(fontFamily);\n const text = (_b = elementWithId.text) !== null && _b !== void 0 ? _b : \"\";\n const normalizedText = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_5__.normalizeText)(text);\n const metrics = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_5__.measureText)(normalizedText, (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getFontString)({ fontFamily, fontSize }), lineHeight);\n excalidrawElement = Object.assign({ width: metrics.width, height: metrics.height, fontFamily,\n fontSize }, elementWithId);\n excalidrawElements.add(excalidrawElement);\n }\n else if (elementWithId.type === \"arrow\") {\n const { linearElement, startBoundElement, endBoundElement } = bindLinearElementToElement(elementWithId);\n excalidrawElements.add(linearElement);\n excalidrawElements.add(startBoundElement);\n excalidrawElements.add(endBoundElement);\n }\n else if (elementWithId.type === \"line\") {\n const width = elementWithId.width || DEFAULT_LINEAR_ELEMENT_PROPS.width;\n const height = elementWithId.height || DEFAULT_LINEAR_ELEMENT_PROPS.height;\n const lineElement = (0,_element__WEBPACK_IMPORTED_MODULE_1__.newLinearElement)(Object.assign({ width,\n height, points: [\n [0, 0],\n [width, height],\n ] }, elementWithId));\n excalidrawElements.add(lineElement);\n }\n else if (elementWithId.type === \"image\") {\n const imageElement = (0,_element_newElement__WEBPACK_IMPORTED_MODULE_4__.newImageElement)(Object.assign({ width: (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.width) || DEFAULT_DIMENSION, height: (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.height) || DEFAULT_DIMENSION }, elementWithId));\n excalidrawElements.add(imageElement);\n }\n else {\n excalidrawElement = Object.assign(Object.assign({}, elementWithId), { width: (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.width) || DEFAULT_DIMENSION, height: (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.height) || DEFAULT_DIMENSION });\n excalidrawElements.add(excalidrawElement);\n }\n }\n });\n return excalidrawElements.get();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEtBQUssRUFBRSxNQUFNLENBQUM7cUJBQ2hCLElBQ0UsYUFBYSxFQUNoQixDQUFDO2dCQUNILGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNyQztpQkFBTSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO2dCQUN6QyxNQUFNLFlBQVksR0FBRyxvRUFBZSxpQkFDbEMsS0FBSyxFQUFFLGNBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxLQUFLLEtBQUksaUJBQWlCLEVBQ2hELE1BQU0sRUFBRSxjQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsTUFBTSxLQUFJLGlCQUFpQixJQUMvQyxhQUFhLEVBQ2hCLENBQUM7Z0JBQ0gsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3RDO2lCQUFNO2dCQUNMLGlCQUFpQixHQUFHLGdDQUNmLGFBQWEsS0FDaEIsS0FBSyxFQUFFLGNBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxLQUFLLEtBQUksaUJBQWlCLEVBQ2hELE1BQU0sRUFBRSxjQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsTUFBTSxLQUFJLGlCQUFpQixHQUN2QixDQUFDO2dCQUM5QixrQkFBa0IsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUMzQztTQUNGO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9kYXRhL3RyYW5zZm9ybS50cz9kNjY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERFRkFVTFRfRk9OVF9GQU1JTFksXG4gIERFRkFVTFRfRk9OVF9TSVpFLFxuICBURVhUX0FMSUdOLFxuICBWRVJUSUNBTF9BTElHTixcbn0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgbmV3RWxlbWVudCxcbiAgbmV3TGluZWFyRWxlbWVudCxcbiAgcmVkcmF3VGV4dEJvdW5kaW5nQm94LFxufSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgYmluZExpbmVhckVsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudC9iaW5kaW5nXCI7XG5pbXBvcnQgeyBtdXRhdGVFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvbXV0YXRlRWxlbWVudFwiO1xuaW1wb3J0IHtcbiAgRWxlbWVudENvbnN0cnVjdG9yT3B0cyxcbiAgbmV3SW1hZ2VFbGVtZW50LFxuICBuZXdUZXh0RWxlbWVudCxcbiAgcmVnZW5lcmF0ZUlkLFxufSBmcm9tIFwiLi4vZWxlbWVudC9uZXdFbGVtZW50XCI7XG5pbXBvcnQge1xuICBnZXREZWZhdWx0TGluZUhlaWdodCxcbiAgbWVhc3VyZVRleHQsXG4gIG5vcm1hbGl6ZVRleHQsXG59IGZyb20gXCIuLi9lbGVtZW50L3RleHRFbGVtZW50XCI7XG5pbXBvcnQge1xuICBFeGNhbGlkcmF3QmluZGFibGVFbGVtZW50LFxuICBFeGNhbGlkcmF3RWxlbWVudCxcbiAgRXhjYWxpZHJhd0ZyYW1lRWxlbWVudCxcbiAgRXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudCxcbiAgRXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50LFxuICBFeGNhbGlkcmF3SW1hZ2VFbGVtZW50LFxuICBFeGNhbGlkcmF3TGluZWFyRWxlbWVudCxcbiAgRXhjYWxpZHJhd1NlbGVjdGlvbkVsZW1lbnQsXG4gIEV4Y2FsaWRyYXdUZXh0RWxlbWVudCxcbiAgRm9udEZhbWlseVZhbHVlcyxcbiAgVGV4dEFsaWduLFxuICBWZXJ0aWNhbEFsaWduLFxufSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgTWFya09wdGlvbmFsIH0gZnJvbSBcIi4uL3V0aWxpdHktdHlwZXNcIjtcbmltcG9ydCB7IGdldEZvbnRTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IHR5cGUgVmFsaWRMaW5lYXJFbGVtZW50ID0ge1xuICB0eXBlOiBcImFycm93XCIgfCBcImxpbmVcIjtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIGxhYmVsPzoge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBmb250U2l6ZT86IG51bWJlcjtcbiAgICBmb250RmFtaWx5PzogRm9udEZhbWlseVZhbHVlcztcbiAgICB0ZXh0QWxpZ24/OiBUZXh0QWxpZ247XG4gICAgdmVydGljYWxBbGlnbj86IFZlcnRpY2FsQWxpZ247XG4gIH0gJiBNYXJrT3B0aW9uYWw8RWxlbWVudENvbnN0cnVjdG9yT3B0cywgXCJ4XCIgfCBcInlcIj47XG4gIGVuZD86XG4gICAgfCAoXG4gICAgICAgIHwgKFxuICAgICAgICAgICAgfCB7XG4gICAgICAgICAgICAgICAgdHlwZTogRXhjbHVkZTxcbiAgICAgICAgICAgICAgICAgIEV4Y2FsaWRyYXdCaW5kYWJsZUVsZW1lbnRbXCJ0eXBlXCJdLFxuICAgICAgICAgICAgICAgICAgXCJpbWFnZVwiIHwgXCJzZWxlY3Rpb25cIiB8IFwidGV4dFwiIHwgXCJmcmFtZVwiXG4gICAgICAgICAgICAgICAgPjtcbiAgICAgICAgICAgICAgICBpZD86IEV4Y2FsaWRyYXdHZW5lcmljRWxlbWVudFtcImlkXCJdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICBpZDogRXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50W1wiaWRcIl07XG4gICAgICAgICAgICAgICAgdHlwZT86IEV4Y2x1ZGU8XG4gICAgICAgICAgICAgICAgICBFeGNhbGlkcmF3QmluZGFibGVFbGVtZW50W1widHlwZVwiXSxcbiAgICAgICAgICAgICAgICAgIFwiaW1hZ2VcIiB8IFwic2VsZWN0aW9uXCIgfCBcInRleHRcIiB8IFwiZnJhbWVcIlxuICAgICAgICAgICAgICAgID47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIHwgKChcbiAgICAgICAgICAgIHwge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiO1xuICAgICAgICAgICAgICAgIHRleHQ6IHN0cmluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfCB7XG4gICAgICAgICAgICAgICAgdHlwZT86IFwidGV4dFwiO1xuICAgICAgICAgICAgICAgIGlkOiBFeGNhbGlkcmF3VGV4dEVsZW1lbnRbXCJpZFwiXTtcbiAgICAgICAgICAgICAgICB0ZXh0OiBzdHJpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICApICZcbiAgICAgICAgICAgIFBhcnRpYWw8RXhjYWxpZHJhd1RleHRFbGVtZW50PilcbiAgICAgICkgJlxuICAgICAgICBNYXJrT3B0aW9uYWw8RWxlbWVudENvbnN0cnVjdG9yT3B0cywgXCJ4XCIgfCBcInlcIj47XG4gIHN0YXJ0PzpcbiAgICB8IChcbiAgICAgICAgfCAoXG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBFeGNsdWRlPFxuICAgICAgICAgICAgICAgICAgRXhjYWxpZHJhd0JpbmRhYmxlRWxlbWVudFtcInR5cGVcIl0sXG4gICAgICAgICAgICAgICAgICBcImltYWdlXCIgfCBcInNlbGVjdGlvblwiIHwgXCJ0ZXh0XCIgfCBcImZyYW1lXCJcbiAgICAgICAgICAgICAgICA+O1xuICAgICAgICAgICAgICAgIGlkPzogRXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50W1wiaWRcIl07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHwge1xuICAgICAgICAgICAgICAgIGlkOiBFeGNhbGlkcmF3R2VuZXJpY0VsZW1lbnRbXCJpZFwiXTtcbiAgICAgICAgICAgICAgICB0eXBlPzogRXhjbHVkZTxcbiAgICAgICAgICAgICAgICAgIEV4Y2FsaWRyYXdCaW5kYWJsZUVsZW1lbnRbXCJ0eXBlXCJdLFxuICAgICAgICAgICAgICAgICAgXCJpbWFnZVwiIHwgXCJzZWxlY3Rpb25cIiB8IFwidGV4dFwiIHwgXCJmcmFtZVwiXG4gICAgICAgICAgICAgICAgPjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfCAoKFxuICAgICAgICAgICAgfCB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCI7XG4gICAgICAgICAgICAgICAgdGV4dDogc3RyaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICB0eXBlPzogXCJ0ZXh0XCI7XG4gICAgICAgICAgICAgICAgaWQ6IEV4Y2FsaWRyYXdUZXh0RWxlbWVudFtcImlkXCJdO1xuICAgICAgICAgICAgICAgIHRleHQ6IHN0cmluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICkgJlxuICAgICAgICAgICAgUGFydGlhbDxFeGNhbGlkcmF3VGV4dEVsZW1lbnQ+KVxuICAgICAgKSAmXG4gICAgICAgIE1hcmtPcHRpb25hbDxFbGVtZW50Q29uc3RydWN0b3JPcHRzLCBcInhcIiB8IFwieVwiPjtcbn0gJiBQYXJ0aWFsPEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50PjtcblxuZXhwb3J0IHR5cGUgVmFsaWRDb250YWluZXIgPVxuICB8IHtcbiAgICAgIHR5cGU6IEV4Y2x1ZGU8RXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50W1widHlwZVwiXSwgXCJzZWxlY3Rpb25cIj47XG4gICAgICBpZD86IEV4Y2FsaWRyYXdHZW5lcmljRWxlbWVudFtcImlkXCJdO1xuICAgICAgbGFiZWw/OiB7XG4gICAgICAgIHRleHQ6IHN0cmluZztcbiAgICAgICAgZm9udFNpemU/OiBudW1iZXI7XG4gICAgICAgIGZvbnRGYW1pbHk/OiBGb250RmFtaWx5VmFsdWVzO1xuICAgICAgICB0ZXh0QWxpZ24/OiBUZXh0QWxpZ247XG4gICAgICAgIHZlcnRpY2FsQWxpZ24/OiBWZXJ0aWNhbEFsaWduO1xuICAgICAgfSAmIE1hcmtPcHRpb25hbDxFbGVtZW50Q29uc3RydWN0b3JPcHRzLCBcInhcIiB8IFwieVwiPjtcbiAgICB9ICYgRWxlbWVudENvbnN0cnVjdG9yT3B0cztcblxuZXhwb3J0IGludGVyZmFjZSBFeGNhbGlkcmF3UHJvZ3JhbW1hdGljQVBJIHtcbiAgZWxlbWVudHM/OlxuICAgIHwgcmVhZG9ubHkgKFxuICAgICAgICB8IEV4dHJhY3Q8XG4gICAgICAgICAgICBFeGNhbGlkcmF3RWxlbWVudCxcbiAgICAgICAgICAgIHwgRXhjYWxpZHJhd1NlbGVjdGlvbkVsZW1lbnRcbiAgICAgICAgICAgIHwgRXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudFxuICAgICAgICAgICAgfCBFeGNhbGlkcmF3RnJhbWVFbGVtZW50XG4gICAgICAgICAgPlxuICAgICAgICB8ICh7XG4gICAgICAgICAgICB0eXBlOiBFeHRyYWN0PEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50W1widHlwZVwiXSwgXCJsaW5lXCI+O1xuICAgICAgICAgICAgeDogbnVtYmVyO1xuICAgICAgICAgICAgeTogbnVtYmVyO1xuICAgICAgICAgIH0gJiBQYXJ0aWFsPEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50PilcbiAgICAgICAgfCBWYWxpZENvbnRhaW5lclxuICAgICAgICB8IFZhbGlkTGluZWFyRWxlbWVudFxuICAgICAgICB8ICh7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIjtcbiAgICAgICAgICAgIHRleHQ6IHN0cmluZztcbiAgICAgICAgICAgIHg6IG51bWJlcjtcbiAgICAgICAgICAgIHk6IG51bWJlcjtcbiAgICAgICAgICAgIGlkPzogRXhjYWxpZHJhd1RleHRFbGVtZW50W1wiaWRcIl07XG4gICAgICAgICAgfSAmIFBhcnRpYWw8RXhjYWxpZHJhd1RleHRFbGVtZW50PilcbiAgICAgICAgfCAoe1xuICAgICAgICAgICAgdHlwZTogRXh0cmFjdDxFeGNhbGlkcmF3SW1hZ2VFbGVtZW50W1widHlwZVwiXSwgXCJpbWFnZVwiPjtcbiAgICAgICAgICAgIHg6IG51bWJlcjtcbiAgICAgICAgICAgIHk6IG51bWJlcjtcbiAgICAgICAgICB9ICYgUGFydGlhbDxFeGNhbGlkcmF3SW1hZ2VFbGVtZW50PilcbiAgICAgIClbXVxuICAgIHwgbnVsbDtcbn1cbmV4cG9ydCBjb25zdCBFTEVNRU5UU19TVVBQT1JUSU5HX1BST0dSQU1NQVRJQ19BUEkgPSBbXG4gIFwicmVjdGFuZ2xlXCIsXG4gIFwiZWxsaXBzZVwiLFxuICBcImRpYW1vbmRcIixcbiAgXCJ0ZXh0XCIsXG4gIFwiYXJyb3dcIixcbiAgXCJsaW5lXCIsXG4gIFwiaW1hZ2VcIixcbl07XG5cbmNvbnN0IERFRkFVTFRfTElORUFSX0VMRU1FTlRfUFJPUFMgPSB7XG4gIHdpZHRoOiAzMDAsXG4gIGhlaWdodDogMCxcbn07XG5cbmNvbnN0IERFRkFVTFRfRElNRU5TSU9OID0gMTAwO1xuXG5jb25zdCBiaW5kVGV4dFRvQ29udGFpbmVyID0gKFxuICBjb250YWluZXJQcm9wczogVmFsaWRDb250YWluZXIgfCAoeyB0eXBlOiBcImFycm93XCIgfSAmIFZhbGlkTGluZWFyRWxlbWVudCksXG4gIHRleHRQcm9wczogeyB0ZXh0OiBzdHJpbmcgfSAmIE1hcmtPcHRpb25hbDxFbGVtZW50Q29uc3RydWN0b3JPcHRzLCBcInhcIiB8IFwieVwiPixcbikgPT4ge1xuICBsZXQgY29udGFpbmVyO1xuICBpZiAoY29udGFpbmVyUHJvcHMudHlwZSA9PT0gXCJhcnJvd1wiKSB7XG4gICAgY29uc3Qgd2lkdGggPSBjb250YWluZXJQcm9wcy53aWR0aCB8fCBERUZBVUxUX0xJTkVBUl9FTEVNRU5UX1BST1BTLndpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IGNvbnRhaW5lclByb3BzLmhlaWdodCB8fCBERUZBVUxUX0xJTkVBUl9FTEVNRU5UX1BST1BTLmhlaWdodDtcbiAgICBjb250YWluZXIgPSBuZXdMaW5lYXJFbGVtZW50KHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZW5kQXJyb3doZWFkOiBcImFycm93XCIsXG4gICAgICBwb2ludHM6IFtcbiAgICAgICAgWzAsIDBdLFxuICAgICAgICBbd2lkdGgsIGhlaWdodF0sXG4gICAgICBdLFxuICAgICAgLi4uY29udGFpbmVyUHJvcHMsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyID0gbmV3RWxlbWVudCh7XG4gICAgICAuLi5jb250YWluZXJQcm9wcyxcbiAgICB9KTtcbiAgfVxuICBjb25zdCB0ZXh0RWxlbWVudDogRXhjYWxpZHJhd1RleHRFbGVtZW50ID0gbmV3VGV4dEVsZW1lbnQoe1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICB0ZXh0QWxpZ246IFRFWFRfQUxJR04uQ0VOVEVSLFxuICAgIHZlcnRpY2FsQWxpZ246IFZFUlRJQ0FMX0FMSUdOLk1JRERMRSxcbiAgICAuLi50ZXh0UHJvcHMsXG4gICAgY29udGFpbmVySWQ6IGNvbnRhaW5lci5pZCxcbiAgICBzdHJva2VDb2xvcjogdGV4dFByb3BzLnN0cm9rZUNvbG9yIHx8IGNvbnRhaW5lci5zdHJva2VDb2xvcixcbiAgfSk7XG5cbiAgbXV0YXRlRWxlbWVudChjb250YWluZXIsIHtcbiAgICBib3VuZEVsZW1lbnRzOiAoY29udGFpbmVyLmJvdW5kRWxlbWVudHMgfHwgW10pLmNvbmNhdCh7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIGlkOiB0ZXh0RWxlbWVudC5pZCxcbiAgICB9KSxcbiAgfSk7XG5cbiAgcmVkcmF3VGV4dEJvdW5kaW5nQm94KHRleHRFbGVtZW50LCBjb250YWluZXIpO1xuXG4gIHJldHVybiBbY29udGFpbmVyLCB0ZXh0RWxlbWVudF07XG59O1xuXG5jb25zdCBiaW5kTGluZWFyRWxlbWVudFRvRWxlbWVudCA9IChcbiAgbGluZWFyRWxlbWVudDogVmFsaWRMaW5lYXJFbGVtZW50LFxuKToge1xuICBsaW5lYXJFbGVtZW50OiBFeGNhbGlkcmF3TGluZWFyRWxlbWVudDtcbiAgc3RhcnRCb3VuZEVsZW1lbnQ/OiBFeGNhbGlkcmF3RWxlbWVudDtcbiAgZW5kQm91bmRFbGVtZW50PzogRXhjYWxpZHJhd0VsZW1lbnQ7XG59ID0+IHtcbiAgY29uc3Qge1xuICAgIHN0YXJ0LFxuICAgIGVuZCxcbiAgICB0eXBlLFxuICAgIGVuZEFycm93aGVhZCA9IGxpbmVhckVsZW1lbnQudHlwZSA9PT0gXCJhcnJvd1wiID8gXCJhcnJvd1wiIDogbnVsbCxcbiAgICAuLi5yZXN0XG4gIH0gPSBsaW5lYXJFbGVtZW50O1xuICBjb25zdCB3aWR0aCA9IGxpbmVhckVsZW1lbnQud2lkdGggfHwgREVGQVVMVF9MSU5FQVJfRUxFTUVOVF9QUk9QUy53aWR0aDtcbiAgY29uc3QgaGVpZ2h0ID0gbGluZWFyRWxlbWVudC5oZWlnaHQgfHwgREVGQVVMVF9MSU5FQVJfRUxFTUVOVF9QUk9QUy5oZWlnaHQ7XG4gIGNvbnN0IGV4Y2xpYWRyYXdMaW5lYXJFbGVtZW50ID0gbmV3TGluZWFyRWxlbWVudCh7XG4gICAgdHlwZSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgcG9pbnRzOiBbXG4gICAgICBbMCwgMF0sXG4gICAgICBbd2lkdGgsIGhlaWdodF0sXG4gICAgXSxcbiAgICBlbmRBcnJvd2hlYWQsXG4gICAgLi4ucmVzdCxcbiAgfSk7XG5cbiAgbGV0IHN0YXJ0Qm91bmRFbGVtZW50O1xuICBsZXQgZW5kQm91bmRFbGVtZW50O1xuXG4gIG11dGF0ZUVsZW1lbnQoZXhjbGlhZHJhd0xpbmVhckVsZW1lbnQsIHtcbiAgICBzdGFydEJpbmRpbmc6IGxpbmVhckVsZW1lbnQ/LnN0YXJ0QmluZGluZyB8fCBudWxsLFxuICAgIGVuZEJpbmRpbmc6IGxpbmVhckVsZW1lbnQuZW5kQmluZGluZyB8fCBudWxsLFxuICB9KTtcblxuICBpZiAoc3RhcnQpIHtcbiAgICBjb25zdCB3aWR0aCA9IHN0YXJ0Py53aWR0aCA/PyBERUZBVUxUX0RJTUVOU0lPTjtcbiAgICBjb25zdCBoZWlnaHQgPSBzdGFydD8uaGVpZ2h0ID8/IERFRkFVTFRfRElNRU5TSU9OO1xuXG4gICAgbGV0IGV4aXN0aW5nRWxlbWVudDtcbiAgICBpZiAoc3RhcnQuaWQpIHtcbiAgICAgIGV4aXN0aW5nRWxlbWVudCA9IGV4Y2FsaWRyYXdFbGVtZW50c1xuICAgICAgICAuZ2V0KClcbiAgICAgICAgLmZpbmQoKGVsZSkgPT4gZWxlPy5pZCA9PT0gc3RhcnQuaWQpIGFzIEV4Y2x1ZGU8XG4gICAgICAgIEV4Y2FsaWRyYXdCaW5kYWJsZUVsZW1lbnQsXG4gICAgICAgIEV4Y2FsaWRyYXdJbWFnZUVsZW1lbnQgfCBFeGNhbGlkcmF3RnJhbWVFbGVtZW50XG4gICAgICA+O1xuICAgICAgaWYgKCFleGlzdGluZ0VsZW1lbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTm8gZWxlbWVudCBmb3Igc3RhcnQgYmluZGluZyB3aXRoIGlkICR7c3RhcnQuaWR9IGZvdW5kYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRYID0gc3RhcnQueCB8fCBleGNsaWFkcmF3TGluZWFyRWxlbWVudC54IC0gd2lkdGg7XG4gICAgY29uc3Qgc3RhcnRZID0gc3RhcnQueSB8fCBleGNsaWFkcmF3TGluZWFyRWxlbWVudC55IC0gaGVpZ2h0IC8gMjtcbiAgICBjb25zdCBzdGFydFR5cGUgPSBleGlzdGluZ0VsZW1lbnQgPyBleGlzdGluZ0VsZW1lbnQudHlwZSA6IHN0YXJ0LnR5cGU7XG5cbiAgICBpZiAoc3RhcnRUeXBlKSB7XG4gICAgICBpZiAoc3RhcnRUeXBlID09PSBcInRleHRcIikge1xuICAgICAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgICAgIGlmIChleGlzdGluZ0VsZW1lbnQgJiYgZXhpc3RpbmdFbGVtZW50LnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgdGV4dCA9IGV4aXN0aW5nRWxlbWVudC50ZXh0O1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0LnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgdGV4dCA9IHN0YXJ0LnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBObyB0ZXh0IGZvdW5kIGZvciBzdGFydCBiaW5kaW5nIHRleHQgZWxlbWVudCBmb3IgJHtleGNsaWFkcmF3TGluZWFyRWxlbWVudC5pZH1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRCb3VuZEVsZW1lbnQgPSBuZXdUZXh0RWxlbWVudCh7XG4gICAgICAgICAgeDogc3RhcnRYLFxuICAgICAgICAgIHk6IHN0YXJ0WSxcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAuLi5leGlzdGluZ0VsZW1lbnQsXG4gICAgICAgICAgLi4uc3RhcnQsXG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHRvIHBvc2l0aW9uIHRoZSB0ZXh0IGNvcnJlY3RseSB3aGVuIGNvb3JkaW5hdGVzIG5vdCBwcm92aWRlZFxuICAgICAgICBtdXRhdGVFbGVtZW50KHN0YXJ0Qm91bmRFbGVtZW50LCB7XG4gICAgICAgICAgeDogc3RhcnQueCB8fCBleGNsaWFkcmF3TGluZWFyRWxlbWVudC54IC0gc3RhcnRCb3VuZEVsZW1lbnQud2lkdGgsXG4gICAgICAgICAgeTpcbiAgICAgICAgICAgIHN0YXJ0LnkgfHwgZXhjbGlhZHJhd0xpbmVhckVsZW1lbnQueSAtIHN0YXJ0Qm91bmRFbGVtZW50LmhlaWdodCAvIDIsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRCb3VuZEVsZW1lbnQgPSBuZXdFbGVtZW50KHtcbiAgICAgICAgICB4OiBzdGFydFgsXG4gICAgICAgICAgeTogc3RhcnRZLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAuLi5leGlzdGluZ0VsZW1lbnQsXG4gICAgICAgICAgLi4uc3RhcnQsXG4gICAgICAgICAgdHlwZTogc3RhcnRUeXBlLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgYmluZExpbmVhckVsZW1lbnQoXG4gICAgICAgIGV4Y2xpYWRyYXdMaW5lYXJFbGVtZW50LFxuICAgICAgICBzdGFydEJvdW5kRWxlbWVudCBhcyBFeGNhbGlkcmF3QmluZGFibGVFbGVtZW50LFxuICAgICAgICBcInN0YXJ0XCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoZW5kKSB7XG4gICAgY29uc3QgaGVpZ2h0ID0gZW5kPy5oZWlnaHQgPz8gREVGQVVMVF9ESU1FTlNJT047XG4gICAgY29uc3Qgd2lkdGggPSBlbmQ/LndpZHRoID8/IERFRkFVTFRfRElNRU5TSU9OO1xuXG4gICAgbGV0IGV4aXN0aW5nRWxlbWVudDtcbiAgICBpZiAoZW5kLmlkKSB7XG4gICAgICBleGlzdGluZ0VsZW1lbnQgPSBleGNhbGlkcmF3RWxlbWVudHNcbiAgICAgICAgLmdldCgpXG4gICAgICAgIC5maW5kKChlbGUpID0+IGVsZT8uaWQgPT09IGVuZC5pZCkgYXMgRXhjbHVkZTxcbiAgICAgICAgRXhjYWxpZHJhd0JpbmRhYmxlRWxlbWVudCxcbiAgICAgICAgRXhjYWxpZHJhd0ltYWdlRWxlbWVudCB8IEV4Y2FsaWRyYXdGcmFtZUVsZW1lbnRcbiAgICAgID47XG4gICAgICBpZiAoIWV4aXN0aW5nRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBObyBlbGVtZW50IGZvciBlbmQgYmluZGluZyB3aXRoIGlkICR7ZW5kLmlkfSBmb3VuZGApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBlbmRYID1cbiAgICAgIGVuZC54IHx8IGV4Y2xpYWRyYXdMaW5lYXJFbGVtZW50LnggKyBleGNsaWFkcmF3TGluZWFyRWxlbWVudC53aWR0aDtcbiAgICBjb25zdCBlbmRZID0gZW5kLnkgfHwgZXhjbGlhZHJhd0xpbmVhckVsZW1lbnQueSAtIGhlaWdodCAvIDI7XG4gICAgY29uc3QgZW5kVHlwZSA9IGV4aXN0aW5nRWxlbWVudCA/IGV4aXN0aW5nRWxlbWVudC50eXBlIDogZW5kLnR5cGU7XG5cbiAgICBpZiAoZW5kVHlwZSkge1xuICAgICAgaWYgKGVuZFR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICAgICAgaWYgKGV4aXN0aW5nRWxlbWVudCAmJiBleGlzdGluZ0VsZW1lbnQudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICB0ZXh0ID0gZXhpc3RpbmdFbGVtZW50LnRleHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZW5kLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgdGV4dCA9IGVuZC50ZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBObyB0ZXh0IGZvdW5kIGZvciBlbmQgYmluZGluZyB0ZXh0IGVsZW1lbnQgZm9yICR7ZXhjbGlhZHJhd0xpbmVhckVsZW1lbnQuaWR9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVuZEJvdW5kRWxlbWVudCA9IG5ld1RleHRFbGVtZW50KHtcbiAgICAgICAgICB4OiBlbmRYLFxuICAgICAgICAgIHk6IGVuZFksXG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgLi4uZXhpc3RpbmdFbGVtZW50LFxuICAgICAgICAgIC4uLmVuZCxcbiAgICAgICAgICB0ZXh0LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gdG8gcG9zaXRpb24gdGhlIHRleHQgY29ycmVjdGx5IHdoZW4gY29vcmRpbmF0ZXMgbm90IHByb3ZpZGVkXG4gICAgICAgIG11dGF0ZUVsZW1lbnQoZW5kQm91bmRFbGVtZW50LCB7XG4gICAgICAgICAgeTogZW5kLnkgfHwgZXhjbGlhZHJhd0xpbmVhckVsZW1lbnQueSAtIGVuZEJvdW5kRWxlbWVudC5oZWlnaHQgLyAyLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuZEJvdW5kRWxlbWVudCA9IG5ld0VsZW1lbnQoe1xuICAgICAgICAgIHg6IGVuZFgsXG4gICAgICAgICAgeTogZW5kWSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgLi4uZXhpc3RpbmdFbGVtZW50LFxuICAgICAgICAgIC4uLmVuZCxcbiAgICAgICAgICB0eXBlOiBlbmRUeXBlLFxuICAgICAgICB9KSBhcyBFeGNhbGlkcmF3QmluZGFibGVFbGVtZW50O1xuICAgICAgfVxuXG4gICAgICBiaW5kTGluZWFyRWxlbWVudChcbiAgICAgICAgZXhjbGlhZHJhd0xpbmVhckVsZW1lbnQsXG4gICAgICAgIGVuZEJvdW5kRWxlbWVudCBhcyBFeGNhbGlkcmF3QmluZGFibGVFbGVtZW50LFxuICAgICAgICBcImVuZFwiLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBsaW5lYXJFbGVtZW50OiBleGNsaWFkcmF3TGluZWFyRWxlbWVudCxcbiAgICBzdGFydEJvdW5kRWxlbWVudCxcbiAgICBlbmRCb3VuZEVsZW1lbnQsXG4gIH07XG59O1xuXG5jb25zdCBleGNhbGlkcmF3RWxlbWVudHMgPSAoKCkgPT4ge1xuICBjb25zdCByZXM6IEV4Y2FsaWRyYXdFbGVtZW50W10gPSBbXTtcbiAgY29uc3QgZWxlbWVudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgY29uc3QgYWRkID0gKGVsZT86IEV4Y2FsaWRyYXdFbGVtZW50KSA9PiB7XG4gICAgaWYgKCFlbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSBlbGVtZW50TWFwLmdldChlbGUuaWQpO1xuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmIGluZGV4ID49IDApIHtcbiAgICAgIHJlc1tpbmRleF0gPSBlbGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy5wdXNoKGVsZSk7XG4gICAgICBjb25zdCBpbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgICAgZWxlbWVudE1hcC5zZXQoZWxlLmlkLCBpbmRleCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICByZXMubGVuZ3RoID0gMDtcbiAgICBlbGVtZW50TWFwLmNsZWFyKCk7XG4gIH07XG4gIGNvbnN0IGdldCA9ICgpID0+IHtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuICBjb25zdCBoYXNFbGVtZW50V2l0aElkID0gKGlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBpbmRleCA9IGVsZW1lbnRNYXAuZ2V0KGlkKTtcbiAgICByZXR1cm4gaW5kZXggIT09IHVuZGVmaW5lZCAmJiBpbmRleCA+PSAwO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGFkZCxcbiAgICBjbGVhcixcbiAgICBnZXQsXG4gICAgaGFzRWxlbWVudFdpdGhJZCxcbiAgfTtcbn0pKCk7XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9FeGNhbGlkcmF3RWxlbWVudHMgPSAoXG4gIGVsZW1lbnRzOiBFeGNhbGlkcmF3UHJvZ3JhbW1hdGljQVBJW1wiZWxlbWVudHNcIl0sXG4pOiBFeGNhbGlkcmF3RWxlbWVudFtdID0+IHtcbiAgZXhjYWxpZHJhd0VsZW1lbnRzLmNsZWFyKCk7XG4gIGlmICghZWxlbWVudHMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgIGxldCBlbGVtZW50SWQgPSBlbGVtZW50LmlkIHx8IHJlZ2VuZXJhdGVJZChudWxsKTtcblxuICAgIC8vIFRvIG1ha2Ugc3VyZSBldmVyeSBlbGVtZW50IGhhcyBhIHVuaXF1ZSBpZFxuICAgIHdoaWxlIChleGNhbGlkcmF3RWxlbWVudHMuaGFzRWxlbWVudFdpdGhJZChlbGVtZW50SWQpKSB7XG4gICAgICBlbGVtZW50SWQgPSByZWdlbmVyYXRlSWQoZWxlbWVudElkKTtcbiAgICB9XG5cbiAgICBpZiAoIUVMRU1FTlRTX1NVUFBPUlRJTkdfUFJPR1JBTU1BVElDX0FQSS5pbmNsdWRlcyhlbGVtZW50LnR5cGUpKSB7XG4gICAgICBleGNhbGlkcmF3RWxlbWVudHMuYWRkKGVsZW1lbnQgYXMgRXhjYWxpZHJhd0VsZW1lbnQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRXaXRoSWQgPSB7IC4uLmVsZW1lbnQsIGlkOiBlbGVtZW50SWQgfTtcblxuICAgIGlmIChcbiAgICAgIChlbGVtZW50V2l0aElkLnR5cGUgPT09IFwicmVjdGFuZ2xlXCIgfHxcbiAgICAgICAgZWxlbWVudFdpdGhJZC50eXBlID09PSBcImVsbGlwc2VcIiB8fFxuICAgICAgICBlbGVtZW50V2l0aElkLnR5cGUgPT09IFwiZGlhbW9uZFwiIHx8XG4gICAgICAgIGVsZW1lbnRXaXRoSWQudHlwZSA9PT0gXCJhcnJvd1wiKSAmJlxuICAgICAgZWxlbWVudFdpdGhJZD8ubGFiZWw/LnRleHRcbiAgICApIHtcbiAgICAgIGxldCBbY29udGFpbmVyLCB0ZXh0XSA9IGJpbmRUZXh0VG9Db250YWluZXIoXG4gICAgICAgIGVsZW1lbnRXaXRoSWQgYXNcbiAgICAgICAgICB8IFZhbGlkQ29udGFpbmVyXG4gICAgICAgICAgfCAoe1xuICAgICAgICAgICAgICB0eXBlOiBcImFycm93XCI7XG4gICAgICAgICAgICB9ICYgVmFsaWRMaW5lYXJFbGVtZW50KSxcbiAgICAgICAgZWxlbWVudFdpdGhJZD8ubGFiZWwsXG4gICAgICApO1xuICAgICAgZXhjYWxpZHJhd0VsZW1lbnRzLmFkZChjb250YWluZXIpO1xuICAgICAgZXhjYWxpZHJhd0VsZW1lbnRzLmFkZCh0ZXh0KTtcblxuICAgICAgaWYgKGNvbnRhaW5lci50eXBlID09PSBcImFycm93XCIpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxTdGFydCA9XG4gICAgICAgICAgZWxlbWVudFdpdGhJZC50eXBlID09PSBcImFycm93XCIgPyBlbGVtZW50V2l0aElkPy5zdGFydCA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxFbmQgPVxuICAgICAgICAgIGVsZW1lbnRXaXRoSWQudHlwZSA9PT0gXCJhcnJvd1wiID8gZWxlbWVudFdpdGhJZD8uZW5kIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB7IGxpbmVhckVsZW1lbnQsIHN0YXJ0Qm91bmRFbGVtZW50LCBlbmRCb3VuZEVsZW1lbnQgfSA9XG4gICAgICAgICAgYmluZExpbmVhckVsZW1lbnRUb0VsZW1lbnQoe1xuICAgICAgICAgICAgLi4uY29udGFpbmVyLFxuICAgICAgICAgICAgc3RhcnQ6IG9yaWdpbmFsU3RhcnQsXG4gICAgICAgICAgICBlbmQ6IG9yaWdpbmFsRW5kLFxuICAgICAgICAgIH0pO1xuICAgICAgICBjb250YWluZXIgPSBsaW5lYXJFbGVtZW50O1xuICAgICAgICBleGNhbGlkcmF3RWxlbWVudHMuYWRkKGxpbmVhckVsZW1lbnQpO1xuICAgICAgICBleGNhbGlkcmF3RWxlbWVudHMuYWRkKHN0YXJ0Qm91bmRFbGVtZW50KTtcbiAgICAgICAgZXhjYWxpZHJhd0VsZW1lbnRzLmFkZChlbmRCb3VuZEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZXhjYWxpZHJhd0VsZW1lbnQ7XG4gICAgICBpZiAoZWxlbWVudFdpdGhJZC50eXBlID09PSBcInRleHRcIikge1xuICAgICAgICBjb25zdCBmb250RmFtaWx5ID0gZWxlbWVudFdpdGhJZD8uZm9udEZhbWlseSB8fCBERUZBVUxUX0ZPTlRfRkFNSUxZO1xuICAgICAgICBjb25zdCBmb250U2l6ZSA9IGVsZW1lbnRXaXRoSWQ/LmZvbnRTaXplIHx8IERFRkFVTFRfRk9OVF9TSVpFO1xuICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID1cbiAgICAgICAgICBlbGVtZW50V2l0aElkPy5saW5lSGVpZ2h0IHx8IGdldERlZmF1bHRMaW5lSGVpZ2h0KGZvbnRGYW1pbHkpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gZWxlbWVudFdpdGhJZC50ZXh0ID8/IFwiXCI7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUZXh0ID0gbm9ybWFsaXplVGV4dCh0ZXh0KTtcbiAgICAgICAgY29uc3QgbWV0cmljcyA9IG1lYXN1cmVUZXh0KFxuICAgICAgICAgIG5vcm1hbGl6ZWRUZXh0LFxuICAgICAgICAgIGdldEZvbnRTdHJpbmcoeyBmb250RmFtaWx5LCBmb250U2l6ZSB9KSxcbiAgICAgICAgICBsaW5lSGVpZ2h0LFxuICAgICAgICApO1xuICAgICAgICBleGNhbGlkcmF3RWxlbWVudCA9IHtcbiAgICAgICAgICB3aWR0aDogbWV0cmljcy53aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IG1ldHJpY3MuaGVpZ2h0LFxuICAgICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgLi4uZWxlbWVudFdpdGhJZCxcbiAgICAgICAgfTtcblxuICAgICAgICBleGNhbGlkcmF3RWxlbWVudHMuYWRkKGV4Y2FsaWRyYXdFbGVtZW50IGFzIEV4Y2FsaWRyYXdUZXh0RWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnRXaXRoSWQudHlwZSA9PT0gXCJhcnJvd1wiKSB7XG4gICAgICAgIGNvbnN0IHsgbGluZWFyRWxlbWVudCwgc3RhcnRCb3VuZEVsZW1lbnQsIGVuZEJvdW5kRWxlbWVudCB9ID1cbiAgICAgICAgICBiaW5kTGluZWFyRWxlbWVudFRvRWxlbWVudChlbGVtZW50V2l0aElkKTtcbiAgICAgICAgZXhjYWxpZHJhd0VsZW1lbnRzLmFkZChsaW5lYXJFbGVtZW50KTtcbiAgICAgICAgZXhjYWxpZHJhd0VsZW1lbnRzLmFkZChzdGFydEJvdW5kRWxlbWVudCk7XG4gICAgICAgIGV4Y2FsaWRyYXdFbGVtZW50cy5hZGQoZW5kQm91bmRFbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudFdpdGhJZC50eXBlID09PSBcImxpbmVcIikge1xuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnRXaXRoSWQud2lkdGggfHwgREVGQVVMVF9MSU5FQVJfRUxFTUVOVF9QUk9QUy53aWR0aDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID1cbiAgICAgICAgICBlbGVtZW50V2l0aElkLmhlaWdodCB8fCBERUZBVUxUX0xJTkVBUl9FTEVNRU5UX1BST1BTLmhlaWdodDtcbiAgICAgICAgY29uc3QgbGluZUVsZW1lbnQgPSBuZXdMaW5lYXJFbGVtZW50KHtcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgcG9pbnRzOiBbXG4gICAgICAgICAgICBbMCwgMF0sXG4gICAgICAgICAgICBbd2lkdGgsIGhlaWdodF0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICAuLi5lbGVtZW50V2l0aElkLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhjYWxpZHJhd0VsZW1lbnRzLmFkZChsaW5lRWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnRXaXRoSWQudHlwZSA9PT0gXCJpbWFnZVwiKSB7XG4gICAgICAgIGNvbnN0IGltYWdlRWxlbWVudCA9IG5ld0ltYWdlRWxlbWVudCh7XG4gICAgICAgICAgd2lkdGg6IGVsZW1lbnRXaXRoSWQ/LndpZHRoIHx8IERFRkFVTFRfRElNRU5TSU9OLFxuICAgICAgICAgIGhlaWdodDogZWxlbWVudFdpdGhJZD8uaGVpZ2h0IHx8IERFRkFVTFRfRElNRU5TSU9OLFxuICAgICAgICAgIC4uLmVsZW1lbnRXaXRoSWQsXG4gICAgICAgIH0pO1xuICAgICAgICBleGNhbGlkcmF3RWxlbWVudHMuYWRkKGltYWdlRWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGNhbGlkcmF3RWxlbWVudCA9IHtcbiAgICAgICAgICAuLi5lbGVtZW50V2l0aElkLFxuICAgICAgICAgIHdpZHRoOiBlbGVtZW50V2l0aElkPy53aWR0aCB8fCBERUZBVUxUX0RJTUVOU0lPTixcbiAgICAgICAgICBoZWlnaHQ6IGVsZW1lbnRXaXRoSWQ/LmhlaWdodCB8fCBERUZBVUxUX0RJTUVOU0lPTixcbiAgICAgICAgfSBhcyBFeGNhbGlkcmF3R2VuZXJpY0VsZW1lbnQ7XG4gICAgICAgIGV4Y2FsaWRyYXdFbGVtZW50cy5hZGQoZXhjYWxpZHJhd0VsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBleGNhbGlkcmF3RWxlbWVudHMuZ2V0KCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../data/transform.ts\n");
4303
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ELEMENTS_SUPPORTING_PROGRAMMATIC_API\": () => (/* binding */ ELEMENTS_SUPPORTING_PROGRAMMATIC_API),\n/* harmony export */ \"convertToExcalidrawElements\": () => (/* binding */ convertToExcalidrawElements)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _element_binding__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element/binding */ \"../../element/binding.ts\");\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../element/mutateElement */ \"../../element/mutateElement.ts\");\n/* harmony import */ var _element_newElement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../element/newElement */ \"../../element/newElement.ts\");\n/* harmony import */ var _element_textElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../element/textElement */ \"../../element/textElement.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\nconst ELEMENTS_SUPPORTING_PROGRAMMATIC_API = [\n \"rectangle\",\n \"ellipse\",\n \"diamond\",\n \"text\",\n \"arrow\",\n \"line\",\n \"image\",\n];\nconst DEFAULT_LINEAR_ELEMENT_PROPS = {\n width: 300,\n height: 0,\n};\nconst DEFAULT_DIMENSION = 100;\nconst bindTextToContainer = (containerProps, textProps) => {\n let container;\n if (containerProps.type === \"arrow\") {\n const width = containerProps.width || DEFAULT_LINEAR_ELEMENT_PROPS.width;\n const height = containerProps.height || DEFAULT_LINEAR_ELEMENT_PROPS.height;\n container = (0,_element__WEBPACK_IMPORTED_MODULE_1__.newLinearElement)(Object.assign({ width,\n height, endArrowhead: \"arrow\", points: [\n [0, 0],\n [width, height],\n ] }, containerProps));\n }\n else {\n container = (0,_element__WEBPACK_IMPORTED_MODULE_1__.newElement)(Object.assign({}, containerProps));\n }\n const textElement = (0,_element_newElement__WEBPACK_IMPORTED_MODULE_4__.newTextElement)(Object.assign(Object.assign({ x: 0, y: 0, textAlign: _constants__WEBPACK_IMPORTED_MODULE_0__.TEXT_ALIGN.CENTER, verticalAlign: _constants__WEBPACK_IMPORTED_MODULE_0__.VERTICAL_ALIGN.MIDDLE }, textProps), { containerId: container.id, strokeColor: textProps.strokeColor || container.strokeColor }));\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_3__.mutateElement)(container, {\n boundElements: (container.boundElements || []).concat({\n type: \"text\",\n id: textElement.id,\n }),\n });\n (0,_element__WEBPACK_IMPORTED_MODULE_1__.redrawTextBoundingBox)(textElement, container);\n return [container, textElement];\n};\nconst bindLinearElementToElement = (linearElement) => {\n var _a, _b, _c, _d;\n const { start, end, type, endArrowhead = linearElement.type === \"arrow\" ? \"arrow\" : null } = linearElement, rest = __rest(linearElement, [\"start\", \"end\", \"type\", \"endArrowhead\"]);\n const width = linearElement.width || DEFAULT_LINEAR_ELEMENT_PROPS.width;\n const height = linearElement.height || DEFAULT_LINEAR_ELEMENT_PROPS.height;\n const excliadrawLinearElement = (0,_element__WEBPACK_IMPORTED_MODULE_1__.newLinearElement)(Object.assign({ type,\n width,\n height, points: [\n [0, 0],\n [width, height],\n ], endArrowhead }, rest));\n let startBoundElement;\n let endBoundElement;\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_3__.mutateElement)(excliadrawLinearElement, {\n startBinding: (linearElement === null || linearElement === void 0 ? void 0 : linearElement.startBinding) || null,\n endBinding: linearElement.endBinding || null,\n });\n if (start) {\n const width = (_a = start === null || start === void 0 ? void 0 : start.width) !== null && _a !== void 0 ? _a : DEFAULT_DIMENSION;\n const height = (_b = start === null || start === void 0 ? void 0 : start.height) !== null && _b !== void 0 ? _b : DEFAULT_DIMENSION;\n let existingElement;\n if (start.id) {\n existingElement = excalidrawElements\n .get()\n .find((ele) => (ele === null || ele === void 0 ? void 0 : ele.id) === start.id);\n if (!existingElement) {\n console.error(`No element for start binding with id ${start.id} found`);\n }\n }\n const startX = start.x || excliadrawLinearElement.x - width;\n const startY = start.y || excliadrawLinearElement.y - height / 2;\n const startType = existingElement ? existingElement.type : start.type;\n if (startType) {\n if (startType === \"text\") {\n let text = \"\";\n if (existingElement && existingElement.type === \"text\") {\n text = existingElement.text;\n }\n else if (start.type === \"text\") {\n text = start.text;\n }\n if (!text) {\n console.error(`No text found for start binding text element for ${excliadrawLinearElement.id}`);\n }\n startBoundElement = (0,_element_newElement__WEBPACK_IMPORTED_MODULE_4__.newTextElement)(Object.assign(Object.assign(Object.assign({ x: startX, y: startY, type: \"text\" }, existingElement), start), { text }));\n // to position the text correctly when coordinates not provided\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_3__.mutateElement)(startBoundElement, {\n x: start.x || excliadrawLinearElement.x - startBoundElement.width,\n y: start.y || excliadrawLinearElement.y - startBoundElement.height / 2,\n });\n }\n else {\n startBoundElement = (0,_element__WEBPACK_IMPORTED_MODULE_1__.newElement)(Object.assign(Object.assign(Object.assign({ x: startX, y: startY, width,\n height }, existingElement), start), { type: startType }));\n }\n (0,_element_binding__WEBPACK_IMPORTED_MODULE_2__.bindLinearElement)(excliadrawLinearElement, startBoundElement, \"start\");\n }\n }\n if (end) {\n const height = (_c = end === null || end === void 0 ? void 0 : end.height) !== null && _c !== void 0 ? _c : DEFAULT_DIMENSION;\n const width = (_d = end === null || end === void 0 ? void 0 : end.width) !== null && _d !== void 0 ? _d : DEFAULT_DIMENSION;\n let existingElement;\n if (end.id) {\n existingElement = excalidrawElements\n .get()\n .find((ele) => (ele === null || ele === void 0 ? void 0 : ele.id) === end.id);\n if (!existingElement) {\n console.error(`No element for end binding with id ${end.id} found`);\n }\n }\n const endX = end.x || excliadrawLinearElement.x + excliadrawLinearElement.width;\n const endY = end.y || excliadrawLinearElement.y - height / 2;\n const endType = existingElement ? existingElement.type : end.type;\n if (endType) {\n if (endType === \"text\") {\n let text = \"\";\n if (existingElement && existingElement.type === \"text\") {\n text = existingElement.text;\n }\n else if (end.type === \"text\") {\n text = end.text;\n }\n if (!text) {\n console.error(`No text found for end binding text element for ${excliadrawLinearElement.id}`);\n }\n endBoundElement = (0,_element_newElement__WEBPACK_IMPORTED_MODULE_4__.newTextElement)(Object.assign(Object.assign(Object.assign({ x: endX, y: endY, type: \"text\" }, existingElement), end), { text }));\n // to position the text correctly when coordinates not provided\n (0,_element_mutateElement__WEBPACK_IMPORTED_MODULE_3__.mutateElement)(endBoundElement, {\n y: end.y || excliadrawLinearElement.y - endBoundElement.height / 2,\n });\n }\n else {\n endBoundElement = (0,_element__WEBPACK_IMPORTED_MODULE_1__.newElement)(Object.assign(Object.assign(Object.assign({ x: endX, y: endY, width,\n height }, existingElement), end), { type: endType }));\n }\n (0,_element_binding__WEBPACK_IMPORTED_MODULE_2__.bindLinearElement)(excliadrawLinearElement, endBoundElement, \"end\");\n }\n }\n return {\n linearElement: excliadrawLinearElement,\n startBoundElement,\n endBoundElement,\n };\n};\nconst excalidrawElements = (() => {\n const res = [];\n const elementMap = new Map();\n const add = (ele) => {\n if (!ele) {\n return;\n }\n const index = elementMap.get(ele.id);\n if (index !== undefined && index >= 0) {\n res[index] = ele;\n }\n else {\n res.push(ele);\n const index = res.length - 1;\n elementMap.set(ele.id, index);\n }\n };\n const clear = () => {\n res.length = 0;\n elementMap.clear();\n };\n const get = () => {\n return res;\n };\n const hasElementWithId = (id) => {\n const index = elementMap.get(id);\n return index !== undefined && index >= 0;\n };\n return {\n add,\n clear,\n get,\n hasElementWithId,\n };\n})();\nconst convertToExcalidrawElements = (elements) => {\n excalidrawElements.clear();\n if (!elements) {\n return [];\n }\n elements.forEach((element) => {\n var _a, _b;\n let elementId = element.id || (0,_element_newElement__WEBPACK_IMPORTED_MODULE_4__.regenerateId)(null);\n // To make sure every element has a unique id\n while (excalidrawElements.hasElementWithId(elementId)) {\n elementId = (0,_element_newElement__WEBPACK_IMPORTED_MODULE_4__.regenerateId)(elementId);\n }\n if (!ELEMENTS_SUPPORTING_PROGRAMMATIC_API.includes(element.type)) {\n excalidrawElements.add(element);\n return;\n }\n const elementWithId = Object.assign(Object.assign({}, element), { id: elementId });\n if ((elementWithId.type === \"rectangle\" ||\n elementWithId.type === \"ellipse\" ||\n elementWithId.type === \"diamond\" ||\n elementWithId.type === \"arrow\") &&\n ((_a = elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.label) === null || _a === void 0 ? void 0 : _a.text)) {\n let [container, text] = bindTextToContainer(elementWithId, elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.label);\n excalidrawElements.add(container);\n excalidrawElements.add(text);\n if (container.type === \"arrow\") {\n const originalStart = elementWithId.type === \"arrow\" ? elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.start : undefined;\n const originalEnd = elementWithId.type === \"arrow\" ? elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.end : undefined;\n const { linearElement, startBoundElement, endBoundElement } = bindLinearElementToElement(Object.assign(Object.assign({}, container), { start: originalStart, end: originalEnd }));\n container = linearElement;\n excalidrawElements.add(linearElement);\n excalidrawElements.add(startBoundElement);\n excalidrawElements.add(endBoundElement);\n }\n }\n else {\n let excalidrawElement;\n if (elementWithId.type === \"text\") {\n const fontFamily = (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.fontFamily) || _constants__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_FONT_FAMILY;\n const fontSize = (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.fontSize) || _constants__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_FONT_SIZE;\n const lineHeight = (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.lineHeight) || (0,_element_textElement__WEBPACK_IMPORTED_MODULE_5__.getDefaultLineHeight)(fontFamily);\n const text = (_b = elementWithId.text) !== null && _b !== void 0 ? _b : \"\";\n const normalizedText = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_5__.normalizeText)(text);\n const metrics = (0,_element_textElement__WEBPACK_IMPORTED_MODULE_5__.measureText)(normalizedText, (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getFontString)({ fontFamily, fontSize }), lineHeight);\n excalidrawElement = Object.assign({ width: metrics.width, height: metrics.height, fontFamily,\n fontSize }, elementWithId);\n excalidrawElements.add(excalidrawElement);\n }\n else if (elementWithId.type === \"arrow\") {\n const { linearElement, startBoundElement, endBoundElement } = bindLinearElementToElement(elementWithId);\n excalidrawElements.add(linearElement);\n excalidrawElements.add(startBoundElement);\n excalidrawElements.add(endBoundElement);\n }\n else if (elementWithId.type === \"line\") {\n const width = elementWithId.width || DEFAULT_LINEAR_ELEMENT_PROPS.width;\n const height = elementWithId.height || DEFAULT_LINEAR_ELEMENT_PROPS.height;\n const lineElement = (0,_element__WEBPACK_IMPORTED_MODULE_1__.newLinearElement)(Object.assign({ width,\n height, points: [\n [0, 0],\n [width, height],\n ] }, elementWithId));\n excalidrawElements.add(lineElement);\n }\n else if (elementWithId.type === \"image\") {\n const imageElement = (0,_element_newElement__WEBPACK_IMPORTED_MODULE_4__.newImageElement)(Object.assign({ width: (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.width) || DEFAULT_DIMENSION, height: (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.height) || DEFAULT_DIMENSION }, elementWithId));\n excalidrawElements.add(imageElement);\n }\n else {\n excalidrawElement = Object.assign(Object.assign({}, elementWithId), { width: (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.width) || DEFAULT_DIMENSION, height: (elementWithId === null || elementWithId === void 0 ? void 0 : elementWithId.height) || DEFAULT_DIMENSION });\n excalidrawElements.add(excalidrawElement);\n }\n }\n });\n return excalidrawElements.get();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEtBQUssRUFBRSxNQUFNLENBQUM7cUJBQ2hCLElBQ0UsYUFBYSxFQUNoQixDQUFDO2dCQUNILGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNyQztpQkFBTSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO2dCQUN6QyxNQUFNLFlBQVksR0FBRyxvRUFBZSxpQkFDbEMsS0FBSyxFQUFFLGNBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxLQUFLLEtBQUksaUJBQWlCLEVBQ2hELE1BQU0sRUFBRSxjQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsTUFBTSxLQUFJLGlCQUFpQixJQUMvQyxhQUFhLEVBQ2hCLENBQUM7Z0JBQ0gsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3RDO2lCQUFNO2dCQUNMLGlCQUFpQixHQUFHLGdDQUNmLGFBQWEsS0FDaEIsS0FBSyxFQUFFLGNBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxLQUFLLEtBQUksaUJBQWlCLEVBQ2hELE1BQU0sRUFBRSxjQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsTUFBTSxLQUFJLGlCQUFpQixHQUN2QixDQUFDO2dCQUM5QixrQkFBa0IsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUMzQztTQUNGO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9kYXRhL3RyYW5zZm9ybS50cz9kNjY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERFRkFVTFRfRk9OVF9GQU1JTFksXG4gIERFRkFVTFRfRk9OVF9TSVpFLFxuICBURVhUX0FMSUdOLFxuICBWRVJUSUNBTF9BTElHTixcbn0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgbmV3RWxlbWVudCxcbiAgbmV3TGluZWFyRWxlbWVudCxcbiAgcmVkcmF3VGV4dEJvdW5kaW5nQm94LFxufSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgYmluZExpbmVhckVsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudC9iaW5kaW5nXCI7XG5pbXBvcnQgeyBtdXRhdGVFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvbXV0YXRlRWxlbWVudFwiO1xuaW1wb3J0IHtcbiAgRWxlbWVudENvbnN0cnVjdG9yT3B0cyxcbiAgbmV3SW1hZ2VFbGVtZW50LFxuICBuZXdUZXh0RWxlbWVudCxcbiAgcmVnZW5lcmF0ZUlkLFxufSBmcm9tIFwiLi4vZWxlbWVudC9uZXdFbGVtZW50XCI7XG5pbXBvcnQge1xuICBnZXREZWZhdWx0TGluZUhlaWdodCxcbiAgbWVhc3VyZVRleHQsXG4gIG5vcm1hbGl6ZVRleHQsXG59IGZyb20gXCIuLi9lbGVtZW50L3RleHRFbGVtZW50XCI7XG5pbXBvcnQge1xuICBFeGNhbGlkcmF3QmluZGFibGVFbGVtZW50LFxuICBFeGNhbGlkcmF3RWxlbWVudCxcbiAgRXhjYWxpZHJhd0ZyYW1lRWxlbWVudCxcbiAgRXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudCxcbiAgRXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50LFxuICBFeGNhbGlkcmF3SW1hZ2VFbGVtZW50LFxuICBFeGNhbGlkcmF3TGluZWFyRWxlbWVudCxcbiAgRXhjYWxpZHJhd1NlbGVjdGlvbkVsZW1lbnQsXG4gIEV4Y2FsaWRyYXdUZXh0RWxlbWVudCxcbiAgRm9udEZhbWlseVZhbHVlcyxcbiAgVGV4dEFsaWduLFxuICBWZXJ0aWNhbEFsaWduLFxufSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgTWFya09wdGlvbmFsIH0gZnJvbSBcIi4uL3V0aWxpdHktdHlwZXNcIjtcbmltcG9ydCB7IGdldEZvbnRTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IHR5cGUgVmFsaWRMaW5lYXJFbGVtZW50ID0ge1xuICB0eXBlOiBcImFycm93XCIgfCBcImxpbmVcIjtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIGxhYmVsPzoge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBmb250U2l6ZT86IG51bWJlcjtcbiAgICBmb250RmFtaWx5PzogRm9udEZhbWlseVZhbHVlcztcbiAgICB0ZXh0QWxpZ24/OiBUZXh0QWxpZ247XG4gICAgdmVydGljYWxBbGlnbj86IFZlcnRpY2FsQWxpZ247XG4gIH0gJiBNYXJrT3B0aW9uYWw8RWxlbWVudENvbnN0cnVjdG9yT3B0cywgXCJ4XCIgfCBcInlcIj47XG4gIGVuZD86XG4gICAgfCAoXG4gICAgICAgIHwgKFxuICAgICAgICAgICAgfCB7XG4gICAgICAgICAgICAgICAgdHlwZTogRXhjbHVkZTxcbiAgICAgICAgICAgICAgICAgIEV4Y2FsaWRyYXdCaW5kYWJsZUVsZW1lbnRbXCJ0eXBlXCJdLFxuICAgICAgICAgICAgICAgICAgXCJpbWFnZVwiIHwgXCJzZWxlY3Rpb25cIiB8IFwidGV4dFwiIHwgXCJmcmFtZVwiXG4gICAgICAgICAgICAgICAgPjtcbiAgICAgICAgICAgICAgICBpZD86IEV4Y2FsaWRyYXdHZW5lcmljRWxlbWVudFtcImlkXCJdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICBpZDogRXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50W1wiaWRcIl07XG4gICAgICAgICAgICAgICAgdHlwZT86IEV4Y2x1ZGU8XG4gICAgICAgICAgICAgICAgICBFeGNhbGlkcmF3QmluZGFibGVFbGVtZW50W1widHlwZVwiXSxcbiAgICAgICAgICAgICAgICAgIFwiaW1hZ2VcIiB8IFwic2VsZWN0aW9uXCIgfCBcInRleHRcIiB8IFwiZnJhbWVcIlxuICAgICAgICAgICAgICAgID47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIHwgKChcbiAgICAgICAgICAgIHwge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiO1xuICAgICAgICAgICAgICAgIHRleHQ6IHN0cmluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfCB7XG4gICAgICAgICAgICAgICAgdHlwZT86IFwidGV4dFwiO1xuICAgICAgICAgICAgICAgIGlkOiBFeGNhbGlkcmF3VGV4dEVsZW1lbnRbXCJpZFwiXTtcbiAgICAgICAgICAgICAgICB0ZXh0OiBzdHJpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICApICZcbiAgICAgICAgICAgIFBhcnRpYWw8RXhjYWxpZHJhd1RleHRFbGVtZW50PilcbiAgICAgICkgJlxuICAgICAgICBNYXJrT3B0aW9uYWw8RWxlbWVudENvbnN0cnVjdG9yT3B0cywgXCJ4XCIgfCBcInlcIj47XG4gIHN0YXJ0PzpcbiAgICB8IChcbiAgICAgICAgfCAoXG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBFeGNsdWRlPFxuICAgICAgICAgICAgICAgICAgRXhjYWxpZHJhd0JpbmRhYmxlRWxlbWVudFtcInR5cGVcIl0sXG4gICAgICAgICAgICAgICAgICBcImltYWdlXCIgfCBcInNlbGVjdGlvblwiIHwgXCJ0ZXh0XCIgfCBcImZyYW1lXCJcbiAgICAgICAgICAgICAgICA+O1xuICAgICAgICAgICAgICAgIGlkPzogRXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50W1wiaWRcIl07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHwge1xuICAgICAgICAgICAgICAgIGlkOiBFeGNhbGlkcmF3R2VuZXJpY0VsZW1lbnRbXCJpZFwiXTtcbiAgICAgICAgICAgICAgICB0eXBlPzogRXhjbHVkZTxcbiAgICAgICAgICAgICAgICAgIEV4Y2FsaWRyYXdCaW5kYWJsZUVsZW1lbnRbXCJ0eXBlXCJdLFxuICAgICAgICAgICAgICAgICAgXCJpbWFnZVwiIHwgXCJzZWxlY3Rpb25cIiB8IFwidGV4dFwiIHwgXCJmcmFtZVwiXG4gICAgICAgICAgICAgICAgPjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfCAoKFxuICAgICAgICAgICAgfCB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCI7XG4gICAgICAgICAgICAgICAgdGV4dDogc3RyaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICB0eXBlPzogXCJ0ZXh0XCI7XG4gICAgICAgICAgICAgICAgaWQ6IEV4Y2FsaWRyYXdUZXh0RWxlbWVudFtcImlkXCJdO1xuICAgICAgICAgICAgICAgIHRleHQ6IHN0cmluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICkgJlxuICAgICAgICAgICAgUGFydGlhbDxFeGNhbGlkcmF3VGV4dEVsZW1lbnQ+KVxuICAgICAgKSAmXG4gICAgICAgIE1hcmtPcHRpb25hbDxFbGVtZW50Q29uc3RydWN0b3JPcHRzLCBcInhcIiB8IFwieVwiPjtcbn0gJiBQYXJ0aWFsPEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50PjtcblxuZXhwb3J0IHR5cGUgVmFsaWRDb250YWluZXIgPVxuICB8IHtcbiAgICAgIHR5cGU6IEV4Y2x1ZGU8RXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50W1widHlwZVwiXSwgXCJzZWxlY3Rpb25cIj47XG4gICAgICBpZD86IEV4Y2FsaWRyYXdHZW5lcmljRWxlbWVudFtcImlkXCJdO1xuICAgICAgbGFiZWw/OiB7XG4gICAgICAgIHRleHQ6IHN0cmluZztcbiAgICAgICAgZm9udFNpemU/OiBudW1iZXI7XG4gICAgICAgIGZvbnRGYW1pbHk/OiBGb250RmFtaWx5VmFsdWVzO1xuICAgICAgICB0ZXh0QWxpZ24/OiBUZXh0QWxpZ247XG4gICAgICAgIHZlcnRpY2FsQWxpZ24/OiBWZXJ0aWNhbEFsaWduO1xuICAgICAgfSAmIE1hcmtPcHRpb25hbDxFbGVtZW50Q29uc3RydWN0b3JPcHRzLCBcInhcIiB8IFwieVwiPjtcbiAgICB9ICYgRWxlbWVudENvbnN0cnVjdG9yT3B0cztcblxuZXhwb3J0IHR5cGUgRXhjYWxpZHJhd1Byb2dyYW1tYXRpY0VsZW1lbnQgPVxuICB8IEV4dHJhY3Q8XG4gICAgICBFeGNhbGlkcmF3RWxlbWVudCxcbiAgICAgIHwgRXhjYWxpZHJhd1NlbGVjdGlvbkVsZW1lbnRcbiAgICAgIHwgRXhjYWxpZHJhd0ZyZWVEcmF3RWxlbWVudFxuICAgICAgfCBFeGNhbGlkcmF3RnJhbWVFbGVtZW50XG4gICAgPlxuICB8ICh7XG4gICAgICB0eXBlOiBFeHRyYWN0PEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50W1widHlwZVwiXSwgXCJsaW5lXCI+O1xuICAgICAgeDogbnVtYmVyO1xuICAgICAgeTogbnVtYmVyO1xuICAgIH0gJiBQYXJ0aWFsPEV4Y2FsaWRyYXdMaW5lYXJFbGVtZW50PilcbiAgfCBWYWxpZENvbnRhaW5lclxuICB8IFZhbGlkTGluZWFyRWxlbWVudFxuICB8ICh7XG4gICAgICB0eXBlOiBcInRleHRcIjtcbiAgICAgIHRleHQ6IHN0cmluZztcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIGlkPzogRXhjYWxpZHJhd1RleHRFbGVtZW50W1wiaWRcIl07XG4gICAgfSAmIFBhcnRpYWw8RXhjYWxpZHJhd1RleHRFbGVtZW50PilcbiAgfCAoe1xuICAgICAgdHlwZTogRXh0cmFjdDxFeGNhbGlkcmF3SW1hZ2VFbGVtZW50W1widHlwZVwiXSwgXCJpbWFnZVwiPjtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICB9ICYgUGFydGlhbDxFeGNhbGlkcmF3SW1hZ2VFbGVtZW50Pik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjYWxpZHJhd1Byb2dyYW1tYXRpY0FQSSB7XG4gIGVsZW1lbnRzPzogcmVhZG9ubHkgRXhjYWxpZHJhd1Byb2dyYW1tYXRpY0VsZW1lbnRbXSB8IG51bGw7XG59XG5leHBvcnQgY29uc3QgRUxFTUVOVFNfU1VQUE9SVElOR19QUk9HUkFNTUFUSUNfQVBJID0gW1xuICBcInJlY3RhbmdsZVwiLFxuICBcImVsbGlwc2VcIixcbiAgXCJkaWFtb25kXCIsXG4gIFwidGV4dFwiLFxuICBcImFycm93XCIsXG4gIFwibGluZVwiLFxuICBcImltYWdlXCIsXG5dO1xuXG5jb25zdCBERUZBVUxUX0xJTkVBUl9FTEVNRU5UX1BST1BTID0ge1xuICB3aWR0aDogMzAwLFxuICBoZWlnaHQ6IDAsXG59O1xuXG5jb25zdCBERUZBVUxUX0RJTUVOU0lPTiA9IDEwMDtcblxuY29uc3QgYmluZFRleHRUb0NvbnRhaW5lciA9IChcbiAgY29udGFpbmVyUHJvcHM6IFZhbGlkQ29udGFpbmVyIHwgKHsgdHlwZTogXCJhcnJvd1wiIH0gJiBWYWxpZExpbmVhckVsZW1lbnQpLFxuICB0ZXh0UHJvcHM6IHsgdGV4dDogc3RyaW5nIH0gJiBNYXJrT3B0aW9uYWw8RWxlbWVudENvbnN0cnVjdG9yT3B0cywgXCJ4XCIgfCBcInlcIj4sXG4pID0+IHtcbiAgbGV0IGNvbnRhaW5lcjtcbiAgaWYgKGNvbnRhaW5lclByb3BzLnR5cGUgPT09IFwiYXJyb3dcIikge1xuICAgIGNvbnN0IHdpZHRoID0gY29udGFpbmVyUHJvcHMud2lkdGggfHwgREVGQVVMVF9MSU5FQVJfRUxFTUVOVF9QUk9QUy53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBjb250YWluZXJQcm9wcy5oZWlnaHQgfHwgREVGQVVMVF9MSU5FQVJfRUxFTUVOVF9QUk9QUy5oZWlnaHQ7XG4gICAgY29udGFpbmVyID0gbmV3TGluZWFyRWxlbWVudCh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGVuZEFycm93aGVhZDogXCJhcnJvd1wiLFxuICAgICAgcG9pbnRzOiBbXG4gICAgICAgIFswLCAwXSxcbiAgICAgICAgW3dpZHRoLCBoZWlnaHRdLFxuICAgICAgXSxcbiAgICAgIC4uLmNvbnRhaW5lclByb3BzLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lciA9IG5ld0VsZW1lbnQoe1xuICAgICAgLi4uY29udGFpbmVyUHJvcHMsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgdGV4dEVsZW1lbnQ6IEV4Y2FsaWRyYXdUZXh0RWxlbWVudCA9IG5ld1RleHRFbGVtZW50KHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgdGV4dEFsaWduOiBURVhUX0FMSUdOLkNFTlRFUixcbiAgICB2ZXJ0aWNhbEFsaWduOiBWRVJUSUNBTF9BTElHTi5NSURETEUsXG4gICAgLi4udGV4dFByb3BzLFxuICAgIGNvbnRhaW5lcklkOiBjb250YWluZXIuaWQsXG4gICAgc3Ryb2tlQ29sb3I6IHRleHRQcm9wcy5zdHJva2VDb2xvciB8fCBjb250YWluZXIuc3Ryb2tlQ29sb3IsXG4gIH0pO1xuXG4gIG11dGF0ZUVsZW1lbnQoY29udGFpbmVyLCB7XG4gICAgYm91bmRFbGVtZW50czogKGNvbnRhaW5lci5ib3VuZEVsZW1lbnRzIHx8IFtdKS5jb25jYXQoe1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICBpZDogdGV4dEVsZW1lbnQuaWQsXG4gICAgfSksXG4gIH0pO1xuXG4gIHJlZHJhd1RleHRCb3VuZGluZ0JveCh0ZXh0RWxlbWVudCwgY29udGFpbmVyKTtcblxuICByZXR1cm4gW2NvbnRhaW5lciwgdGV4dEVsZW1lbnRdO1xufTtcblxuY29uc3QgYmluZExpbmVhckVsZW1lbnRUb0VsZW1lbnQgPSAoXG4gIGxpbmVhckVsZW1lbnQ6IFZhbGlkTGluZWFyRWxlbWVudCxcbik6IHtcbiAgbGluZWFyRWxlbWVudDogRXhjYWxpZHJhd0xpbmVhckVsZW1lbnQ7XG4gIHN0YXJ0Qm91bmRFbGVtZW50PzogRXhjYWxpZHJhd0VsZW1lbnQ7XG4gIGVuZEJvdW5kRWxlbWVudD86IEV4Y2FsaWRyYXdFbGVtZW50O1xufSA9PiB7XG4gIGNvbnN0IHtcbiAgICBzdGFydCxcbiAgICBlbmQsXG4gICAgdHlwZSxcbiAgICBlbmRBcnJvd2hlYWQgPSBsaW5lYXJFbGVtZW50LnR5cGUgPT09IFwiYXJyb3dcIiA/IFwiYXJyb3dcIiA6IG51bGwsXG4gICAgLi4ucmVzdFxuICB9ID0gbGluZWFyRWxlbWVudDtcbiAgY29uc3Qgd2lkdGggPSBsaW5lYXJFbGVtZW50LndpZHRoIHx8IERFRkFVTFRfTElORUFSX0VMRU1FTlRfUFJPUFMud2lkdGg7XG4gIGNvbnN0IGhlaWdodCA9IGxpbmVhckVsZW1lbnQuaGVpZ2h0IHx8IERFRkFVTFRfTElORUFSX0VMRU1FTlRfUFJPUFMuaGVpZ2h0O1xuICBjb25zdCBleGNsaWFkcmF3TGluZWFyRWxlbWVudCA9IG5ld0xpbmVhckVsZW1lbnQoe1xuICAgIHR5cGUsXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHBvaW50czogW1xuICAgICAgWzAsIDBdLFxuICAgICAgW3dpZHRoLCBoZWlnaHRdLFxuICAgIF0sXG4gICAgZW5kQXJyb3doZWFkLFxuICAgIC4uLnJlc3QsXG4gIH0pO1xuXG4gIGxldCBzdGFydEJvdW5kRWxlbWVudDtcbiAgbGV0IGVuZEJvdW5kRWxlbWVudDtcblxuICBtdXRhdGVFbGVtZW50KGV4Y2xpYWRyYXdMaW5lYXJFbGVtZW50LCB7XG4gICAgc3RhcnRCaW5kaW5nOiBsaW5lYXJFbGVtZW50Py5zdGFydEJpbmRpbmcgfHwgbnVsbCxcbiAgICBlbmRCaW5kaW5nOiBsaW5lYXJFbGVtZW50LmVuZEJpbmRpbmcgfHwgbnVsbCxcbiAgfSk7XG5cbiAgaWYgKHN0YXJ0KSB7XG4gICAgY29uc3Qgd2lkdGggPSBzdGFydD8ud2lkdGggPz8gREVGQVVMVF9ESU1FTlNJT047XG4gICAgY29uc3QgaGVpZ2h0ID0gc3RhcnQ/LmhlaWdodCA/PyBERUZBVUxUX0RJTUVOU0lPTjtcblxuICAgIGxldCBleGlzdGluZ0VsZW1lbnQ7XG4gICAgaWYgKHN0YXJ0LmlkKSB7XG4gICAgICBleGlzdGluZ0VsZW1lbnQgPSBleGNhbGlkcmF3RWxlbWVudHNcbiAgICAgICAgLmdldCgpXG4gICAgICAgIC5maW5kKChlbGUpID0+IGVsZT8uaWQgPT09IHN0YXJ0LmlkKSBhcyBFeGNsdWRlPFxuICAgICAgICBFeGNhbGlkcmF3QmluZGFibGVFbGVtZW50LFxuICAgICAgICBFeGNhbGlkcmF3SW1hZ2VFbGVtZW50IHwgRXhjYWxpZHJhd0ZyYW1lRWxlbWVudFxuICAgICAgPjtcbiAgICAgIGlmICghZXhpc3RpbmdFbGVtZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE5vIGVsZW1lbnQgZm9yIHN0YXJ0IGJpbmRpbmcgd2l0aCBpZCAke3N0YXJ0LmlkfSBmb3VuZGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0WCA9IHN0YXJ0LnggfHwgZXhjbGlhZHJhd0xpbmVhckVsZW1lbnQueCAtIHdpZHRoO1xuICAgIGNvbnN0IHN0YXJ0WSA9IHN0YXJ0LnkgfHwgZXhjbGlhZHJhd0xpbmVhckVsZW1lbnQueSAtIGhlaWdodCAvIDI7XG4gICAgY29uc3Qgc3RhcnRUeXBlID0gZXhpc3RpbmdFbGVtZW50ID8gZXhpc3RpbmdFbGVtZW50LnR5cGUgOiBzdGFydC50eXBlO1xuXG4gICAgaWYgKHN0YXJ0VHlwZSkge1xuICAgICAgaWYgKHN0YXJ0VHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgbGV0IHRleHQgPSBcIlwiO1xuICAgICAgICBpZiAoZXhpc3RpbmdFbGVtZW50ICYmIGV4aXN0aW5nRWxlbWVudC50eXBlID09PSBcInRleHRcIikge1xuICAgICAgICAgIHRleHQgPSBleGlzdGluZ0VsZW1lbnQudGV4dDtcbiAgICAgICAgfSBlbHNlIGlmIChzdGFydC50eXBlID09PSBcInRleHRcIikge1xuICAgICAgICAgIHRleHQgPSBzdGFydC50ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgTm8gdGV4dCBmb3VuZCBmb3Igc3RhcnQgYmluZGluZyB0ZXh0IGVsZW1lbnQgZm9yICR7ZXhjbGlhZHJhd0xpbmVhckVsZW1lbnQuaWR9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0Qm91bmRFbGVtZW50ID0gbmV3VGV4dEVsZW1lbnQoe1xuICAgICAgICAgIHg6IHN0YXJ0WCxcbiAgICAgICAgICB5OiBzdGFydFksXG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgLi4uZXhpc3RpbmdFbGVtZW50LFxuICAgICAgICAgIC4uLnN0YXJ0LFxuICAgICAgICAgIHRleHQsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyB0byBwb3NpdGlvbiB0aGUgdGV4dCBjb3JyZWN0bHkgd2hlbiBjb29yZGluYXRlcyBub3QgcHJvdmlkZWRcbiAgICAgICAgbXV0YXRlRWxlbWVudChzdGFydEJvdW5kRWxlbWVudCwge1xuICAgICAgICAgIHg6IHN0YXJ0LnggfHwgZXhjbGlhZHJhd0xpbmVhckVsZW1lbnQueCAtIHN0YXJ0Qm91bmRFbGVtZW50LndpZHRoLFxuICAgICAgICAgIHk6XG4gICAgICAgICAgICBzdGFydC55IHx8IGV4Y2xpYWRyYXdMaW5lYXJFbGVtZW50LnkgLSBzdGFydEJvdW5kRWxlbWVudC5oZWlnaHQgLyAyLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0Qm91bmRFbGVtZW50ID0gbmV3RWxlbWVudCh7XG4gICAgICAgICAgeDogc3RhcnRYLFxuICAgICAgICAgIHk6IHN0YXJ0WSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgLi4uZXhpc3RpbmdFbGVtZW50LFxuICAgICAgICAgIC4uLnN0YXJ0LFxuICAgICAgICAgIHR5cGU6IHN0YXJ0VHlwZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGJpbmRMaW5lYXJFbGVtZW50KFxuICAgICAgICBleGNsaWFkcmF3TGluZWFyRWxlbWVudCxcbiAgICAgICAgc3RhcnRCb3VuZEVsZW1lbnQgYXMgRXhjYWxpZHJhd0JpbmRhYmxlRWxlbWVudCxcbiAgICAgICAgXCJzdGFydFwiLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGVuZCkge1xuICAgIGNvbnN0IGhlaWdodCA9IGVuZD8uaGVpZ2h0ID8/IERFRkFVTFRfRElNRU5TSU9OO1xuICAgIGNvbnN0IHdpZHRoID0gZW5kPy53aWR0aCA/PyBERUZBVUxUX0RJTUVOU0lPTjtcblxuICAgIGxldCBleGlzdGluZ0VsZW1lbnQ7XG4gICAgaWYgKGVuZC5pZCkge1xuICAgICAgZXhpc3RpbmdFbGVtZW50ID0gZXhjYWxpZHJhd0VsZW1lbnRzXG4gICAgICAgIC5nZXQoKVxuICAgICAgICAuZmluZCgoZWxlKSA9PiBlbGU/LmlkID09PSBlbmQuaWQpIGFzIEV4Y2x1ZGU8XG4gICAgICAgIEV4Y2FsaWRyYXdCaW5kYWJsZUVsZW1lbnQsXG4gICAgICAgIEV4Y2FsaWRyYXdJbWFnZUVsZW1lbnQgfCBFeGNhbGlkcmF3RnJhbWVFbGVtZW50XG4gICAgICA+O1xuICAgICAgaWYgKCFleGlzdGluZ0VsZW1lbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTm8gZWxlbWVudCBmb3IgZW5kIGJpbmRpbmcgd2l0aCBpZCAke2VuZC5pZH0gZm91bmRgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZW5kWCA9XG4gICAgICBlbmQueCB8fCBleGNsaWFkcmF3TGluZWFyRWxlbWVudC54ICsgZXhjbGlhZHJhd0xpbmVhckVsZW1lbnQud2lkdGg7XG4gICAgY29uc3QgZW5kWSA9IGVuZC55IHx8IGV4Y2xpYWRyYXdMaW5lYXJFbGVtZW50LnkgLSBoZWlnaHQgLyAyO1xuICAgIGNvbnN0IGVuZFR5cGUgPSBleGlzdGluZ0VsZW1lbnQgPyBleGlzdGluZ0VsZW1lbnQudHlwZSA6IGVuZC50eXBlO1xuXG4gICAgaWYgKGVuZFR5cGUpIHtcbiAgICAgIGlmIChlbmRUeXBlID09PSBcInRleHRcIikge1xuICAgICAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgICAgIGlmIChleGlzdGluZ0VsZW1lbnQgJiYgZXhpc3RpbmdFbGVtZW50LnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgdGV4dCA9IGV4aXN0aW5nRWxlbWVudC50ZXh0O1xuICAgICAgICB9IGVsc2UgaWYgKGVuZC50eXBlID09PSBcInRleHRcIikge1xuICAgICAgICAgIHRleHQgPSBlbmQudGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgTm8gdGV4dCBmb3VuZCBmb3IgZW5kIGJpbmRpbmcgdGV4dCBlbGVtZW50IGZvciAke2V4Y2xpYWRyYXdMaW5lYXJFbGVtZW50LmlkfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbmRCb3VuZEVsZW1lbnQgPSBuZXdUZXh0RWxlbWVudCh7XG4gICAgICAgICAgeDogZW5kWCxcbiAgICAgICAgICB5OiBlbmRZLFxuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIC4uLmV4aXN0aW5nRWxlbWVudCxcbiAgICAgICAgICAuLi5lbmQsXG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHRvIHBvc2l0aW9uIHRoZSB0ZXh0IGNvcnJlY3RseSB3aGVuIGNvb3JkaW5hdGVzIG5vdCBwcm92aWRlZFxuICAgICAgICBtdXRhdGVFbGVtZW50KGVuZEJvdW5kRWxlbWVudCwge1xuICAgICAgICAgIHk6IGVuZC55IHx8IGV4Y2xpYWRyYXdMaW5lYXJFbGVtZW50LnkgLSBlbmRCb3VuZEVsZW1lbnQuaGVpZ2h0IC8gMixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmRCb3VuZEVsZW1lbnQgPSBuZXdFbGVtZW50KHtcbiAgICAgICAgICB4OiBlbmRYLFxuICAgICAgICAgIHk6IGVuZFksXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIC4uLmV4aXN0aW5nRWxlbWVudCxcbiAgICAgICAgICAuLi5lbmQsXG4gICAgICAgICAgdHlwZTogZW5kVHlwZSxcbiAgICAgICAgfSkgYXMgRXhjYWxpZHJhd0JpbmRhYmxlRWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgYmluZExpbmVhckVsZW1lbnQoXG4gICAgICAgIGV4Y2xpYWRyYXdMaW5lYXJFbGVtZW50LFxuICAgICAgICBlbmRCb3VuZEVsZW1lbnQgYXMgRXhjYWxpZHJhd0JpbmRhYmxlRWxlbWVudCxcbiAgICAgICAgXCJlbmRcIixcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgbGluZWFyRWxlbWVudDogZXhjbGlhZHJhd0xpbmVhckVsZW1lbnQsXG4gICAgc3RhcnRCb3VuZEVsZW1lbnQsXG4gICAgZW5kQm91bmRFbGVtZW50LFxuICB9O1xufTtcblxuY29uc3QgZXhjYWxpZHJhd0VsZW1lbnRzID0gKCgpID0+IHtcbiAgY29uc3QgcmVzOiBFeGNhbGlkcmF3RWxlbWVudFtdID0gW107XG4gIGNvbnN0IGVsZW1lbnRNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gIGNvbnN0IGFkZCA9IChlbGU/OiBFeGNhbGlkcmF3RWxlbWVudCkgPT4ge1xuICAgIGlmICghZWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gZWxlbWVudE1hcC5nZXQoZWxlLmlkKTtcbiAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAmJiBpbmRleCA+PSAwKSB7XG4gICAgICByZXNbaW5kZXhdID0gZWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMucHVzaChlbGUpO1xuICAgICAgY29uc3QgaW5kZXggPSByZXMubGVuZ3RoIC0gMTtcbiAgICAgIGVsZW1lbnRNYXAuc2V0KGVsZS5pZCwgaW5kZXgpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgY2xlYXIgPSAoKSA9PiB7XG4gICAgcmVzLmxlbmd0aCA9IDA7XG4gICAgZWxlbWVudE1hcC5jbGVhcigpO1xuICB9O1xuICBjb25zdCBnZXQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcbiAgY29uc3QgaGFzRWxlbWVudFdpdGhJZCA9IChpZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgaW5kZXggPSBlbGVtZW50TWFwLmdldChpZCk7XG4gICAgcmV0dXJuIGluZGV4ICE9PSB1bmRlZmluZWQgJiYgaW5kZXggPj0gMDtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBhZGQsXG4gICAgY2xlYXIsXG4gICAgZ2V0LFxuICAgIGhhc0VsZW1lbnRXaXRoSWQsXG4gIH07XG59KSgpO1xuXG5leHBvcnQgY29uc3QgY29udmVydFRvRXhjYWxpZHJhd0VsZW1lbnRzID0gKFxuICBlbGVtZW50czogRXhjYWxpZHJhd1Byb2dyYW1tYXRpY0FQSVtcImVsZW1lbnRzXCJdLFxuKTogRXhjYWxpZHJhd0VsZW1lbnRbXSA9PiB7XG4gIGV4Y2FsaWRyYXdFbGVtZW50cy5jbGVhcigpO1xuICBpZiAoIWVsZW1lbnRzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICBsZXQgZWxlbWVudElkID0gZWxlbWVudC5pZCB8fCByZWdlbmVyYXRlSWQobnVsbCk7XG5cbiAgICAvLyBUbyBtYWtlIHN1cmUgZXZlcnkgZWxlbWVudCBoYXMgYSB1bmlxdWUgaWRcbiAgICB3aGlsZSAoZXhjYWxpZHJhd0VsZW1lbnRzLmhhc0VsZW1lbnRXaXRoSWQoZWxlbWVudElkKSkge1xuICAgICAgZWxlbWVudElkID0gcmVnZW5lcmF0ZUlkKGVsZW1lbnRJZCk7XG4gICAgfVxuXG4gICAgaWYgKCFFTEVNRU5UU19TVVBQT1JUSU5HX1BST0dSQU1NQVRJQ19BUEkuaW5jbHVkZXMoZWxlbWVudC50eXBlKSkge1xuICAgICAgZXhjYWxpZHJhd0VsZW1lbnRzLmFkZChlbGVtZW50IGFzIEV4Y2FsaWRyYXdFbGVtZW50KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50V2l0aElkID0geyAuLi5lbGVtZW50LCBpZDogZWxlbWVudElkIH07XG5cbiAgICBpZiAoXG4gICAgICAoZWxlbWVudFdpdGhJZC50eXBlID09PSBcInJlY3RhbmdsZVwiIHx8XG4gICAgICAgIGVsZW1lbnRXaXRoSWQudHlwZSA9PT0gXCJlbGxpcHNlXCIgfHxcbiAgICAgICAgZWxlbWVudFdpdGhJZC50eXBlID09PSBcImRpYW1vbmRcIiB8fFxuICAgICAgICBlbGVtZW50V2l0aElkLnR5cGUgPT09IFwiYXJyb3dcIikgJiZcbiAgICAgIGVsZW1lbnRXaXRoSWQ/LmxhYmVsPy50ZXh0XG4gICAgKSB7XG4gICAgICBsZXQgW2NvbnRhaW5lciwgdGV4dF0gPSBiaW5kVGV4dFRvQ29udGFpbmVyKFxuICAgICAgICBlbGVtZW50V2l0aElkIGFzXG4gICAgICAgICAgfCBWYWxpZENvbnRhaW5lclxuICAgICAgICAgIHwgKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJhcnJvd1wiO1xuICAgICAgICAgICAgfSAmIFZhbGlkTGluZWFyRWxlbWVudCksXG4gICAgICAgIGVsZW1lbnRXaXRoSWQ/LmxhYmVsLFxuICAgICAgKTtcbiAgICAgIGV4Y2FsaWRyYXdFbGVtZW50cy5hZGQoY29udGFpbmVyKTtcbiAgICAgIGV4Y2FsaWRyYXdFbGVtZW50cy5hZGQodGV4dCk7XG5cbiAgICAgIGlmIChjb250YWluZXIudHlwZSA9PT0gXCJhcnJvd1wiKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU3RhcnQgPVxuICAgICAgICAgIGVsZW1lbnRXaXRoSWQudHlwZSA9PT0gXCJhcnJvd1wiID8gZWxlbWVudFdpdGhJZD8uc3RhcnQgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRW5kID1cbiAgICAgICAgICBlbGVtZW50V2l0aElkLnR5cGUgPT09IFwiYXJyb3dcIiA/IGVsZW1lbnRXaXRoSWQ/LmVuZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgeyBsaW5lYXJFbGVtZW50LCBzdGFydEJvdW5kRWxlbWVudCwgZW5kQm91bmRFbGVtZW50IH0gPVxuICAgICAgICAgIGJpbmRMaW5lYXJFbGVtZW50VG9FbGVtZW50KHtcbiAgICAgICAgICAgIC4uLmNvbnRhaW5lcixcbiAgICAgICAgICAgIHN0YXJ0OiBvcmlnaW5hbFN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBvcmlnaW5hbEVuZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgY29udGFpbmVyID0gbGluZWFyRWxlbWVudDtcbiAgICAgICAgZXhjYWxpZHJhd0VsZW1lbnRzLmFkZChsaW5lYXJFbGVtZW50KTtcbiAgICAgICAgZXhjYWxpZHJhd0VsZW1lbnRzLmFkZChzdGFydEJvdW5kRWxlbWVudCk7XG4gICAgICAgIGV4Y2FsaWRyYXdFbGVtZW50cy5hZGQoZW5kQm91bmRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGV4Y2FsaWRyYXdFbGVtZW50O1xuICAgICAgaWYgKGVsZW1lbnRXaXRoSWQudHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgY29uc3QgZm9udEZhbWlseSA9IGVsZW1lbnRXaXRoSWQ/LmZvbnRGYW1pbHkgfHwgREVGQVVMVF9GT05UX0ZBTUlMWTtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBlbGVtZW50V2l0aElkPy5mb250U2l6ZSB8fCBERUZBVUxUX0ZPTlRfU0laRTtcbiAgICAgICAgY29uc3QgbGluZUhlaWdodCA9XG4gICAgICAgICAgZWxlbWVudFdpdGhJZD8ubGluZUhlaWdodCB8fCBnZXREZWZhdWx0TGluZUhlaWdodChmb250RmFtaWx5KTtcbiAgICAgICAgY29uc3QgdGV4dCA9IGVsZW1lbnRXaXRoSWQudGV4dCA/PyBcIlwiO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkVGV4dCA9IG5vcm1hbGl6ZVRleHQodGV4dCk7XG4gICAgICAgIGNvbnN0IG1ldHJpY3MgPSBtZWFzdXJlVGV4dChcbiAgICAgICAgICBub3JtYWxpemVkVGV4dCxcbiAgICAgICAgICBnZXRGb250U3RyaW5nKHsgZm9udEZhbWlseSwgZm9udFNpemUgfSksXG4gICAgICAgICAgbGluZUhlaWdodCxcbiAgICAgICAgKTtcbiAgICAgICAgZXhjYWxpZHJhd0VsZW1lbnQgPSB7XG4gICAgICAgICAgd2lkdGg6IG1ldHJpY3Mud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBtZXRyaWNzLmhlaWdodCxcbiAgICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgIC4uLmVsZW1lbnRXaXRoSWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgZXhjYWxpZHJhd0VsZW1lbnRzLmFkZChleGNhbGlkcmF3RWxlbWVudCBhcyBFeGNhbGlkcmF3VGV4dEVsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50V2l0aElkLnR5cGUgPT09IFwiYXJyb3dcIikge1xuICAgICAgICBjb25zdCB7IGxpbmVhckVsZW1lbnQsIHN0YXJ0Qm91bmRFbGVtZW50LCBlbmRCb3VuZEVsZW1lbnQgfSA9XG4gICAgICAgICAgYmluZExpbmVhckVsZW1lbnRUb0VsZW1lbnQoZWxlbWVudFdpdGhJZCk7XG4gICAgICAgIGV4Y2FsaWRyYXdFbGVtZW50cy5hZGQobGluZWFyRWxlbWVudCk7XG4gICAgICAgIGV4Y2FsaWRyYXdFbGVtZW50cy5hZGQoc3RhcnRCb3VuZEVsZW1lbnQpO1xuICAgICAgICBleGNhbGlkcmF3RWxlbWVudHMuYWRkKGVuZEJvdW5kRWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnRXaXRoSWQudHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBlbGVtZW50V2l0aElkLndpZHRoIHx8IERFRkFVTFRfTElORUFSX0VMRU1FTlRfUFJPUFMud2lkdGg7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9XG4gICAgICAgICAgZWxlbWVudFdpdGhJZC5oZWlnaHQgfHwgREVGQVVMVF9MSU5FQVJfRUxFTUVOVF9QUk9QUy5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGxpbmVFbGVtZW50ID0gbmV3TGluZWFyRWxlbWVudCh7XG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIHBvaW50czogW1xuICAgICAgICAgICAgWzAsIDBdLFxuICAgICAgICAgICAgW3dpZHRoLCBoZWlnaHRdLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgLi4uZWxlbWVudFdpdGhJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGV4Y2FsaWRyYXdFbGVtZW50cy5hZGQobGluZUVsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50V2l0aElkLnR5cGUgPT09IFwiaW1hZ2VcIikge1xuICAgICAgICBjb25zdCBpbWFnZUVsZW1lbnQgPSBuZXdJbWFnZUVsZW1lbnQoe1xuICAgICAgICAgIHdpZHRoOiBlbGVtZW50V2l0aElkPy53aWR0aCB8fCBERUZBVUxUX0RJTUVOU0lPTixcbiAgICAgICAgICBoZWlnaHQ6IGVsZW1lbnRXaXRoSWQ/LmhlaWdodCB8fCBERUZBVUxUX0RJTUVOU0lPTixcbiAgICAgICAgICAuLi5lbGVtZW50V2l0aElkLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhjYWxpZHJhd0VsZW1lbnRzLmFkZChpbWFnZUVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhjYWxpZHJhd0VsZW1lbnQgPSB7XG4gICAgICAgICAgLi4uZWxlbWVudFdpdGhJZCxcbiAgICAgICAgICB3aWR0aDogZWxlbWVudFdpdGhJZD8ud2lkdGggfHwgREVGQVVMVF9ESU1FTlNJT04sXG4gICAgICAgICAgaGVpZ2h0OiBlbGVtZW50V2l0aElkPy5oZWlnaHQgfHwgREVGQVVMVF9ESU1FTlNJT04sXG4gICAgICAgIH0gYXMgRXhjYWxpZHJhd0dlbmVyaWNFbGVtZW50O1xuICAgICAgICBleGNhbGlkcmF3RWxlbWVudHMuYWRkKGV4Y2FsaWRyYXdFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZXhjYWxpZHJhd0VsZW1lbnRzLmdldCgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../data/transform.ts\n");
4304
4304
 
4305
4305
  /***/ }),
4306
4306
 
@@ -4784,7 +4784,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
4784
4784
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4785
4785
 
4786
4786
  "use strict";
4787
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\n /* eslint-disable */\n /* global __webpack_public_path__:writable */\n __webpack_require__.p =\n window.EXCALIDRAW_ASSET_PATH ||\n `https://unpkg.com/${\"@excalidraw/excalidraw\"}@${\"0.15.2-6546-21ca391\"}/dist/`;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDO0FBQ3RDLElBQUksYUFBb0IsS0FBSyxnREFBUSxFQUFFO0lBQ3JDLG9CQUFvQjtJQUNwQiw2Q0FBNkM7SUFDN0MscUJBQXVCO1FBQ3JCLE1BQU0sQ0FBQyxxQkFBcUI7WUFDNUIscUJBQXFCLHdCQUFvQixJQUFJLHFCQUF1QixRQUFRLENBQUM7Q0FDaEYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9wdWJsaWNQYXRoLmpzP2E4N2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5WIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuVEVTVCkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAvKiBnbG9iYWwgX193ZWJwYWNrX3B1YmxpY19wYXRoX186d3JpdGFibGUgKi9cbiAgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gPVxuICAgIHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHxcbiAgICBgaHR0cHM6Ly91bnBrZy5jb20vJHtwcm9jZXNzLmVudi5QS0dfTkFNRX1AJHtwcm9jZXNzLmVudi5QS0dfVkVSU0lPTn0vZGlzdC9gO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./publicPath.js\n");
4787
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \"../../constants.ts\");\n\nif (\"development\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\n /* eslint-disable */\n /* global __webpack_public_path__:writable */\n __webpack_require__.p =\n window.EXCALIDRAW_ASSET_PATH ||\n `https://unpkg.com/${\"@excalidraw/excalidraw\"}@${\"0.15.2-6546-a6b389c\"}/dist/`;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDO0FBQ3RDLElBQUksYUFBb0IsS0FBSyxnREFBUSxFQUFFO0lBQ3JDLG9CQUFvQjtJQUNwQiw2Q0FBNkM7SUFDN0MscUJBQXVCO1FBQ3JCLE1BQU0sQ0FBQyxxQkFBcUI7WUFDNUIscUJBQXFCLHdCQUFvQixJQUFJLHFCQUF1QixRQUFRLENBQUM7Q0FDaEYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9wdWJsaWNQYXRoLmpzP2E4N2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5WIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuVEVTVCkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAvKiBnbG9iYWwgX193ZWJwYWNrX3B1YmxpY19wYXRoX186d3JpdGFibGUgKi9cbiAgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gPVxuICAgIHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHxcbiAgICBgaHR0cHM6Ly91bnBrZy5jb20vJHtwcm9jZXNzLmVudi5QS0dfTkFNRX1AJHtwcm9jZXNzLmVudi5QS0dfVkVSU0lPTn0vZGlzdC9gO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./publicPath.js\n");
4788
4788
 
4789
4789
  /***/ }),
4790
4790
 
@@ -4905,7 +4905,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
4905
4905
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4906
4906
 
4907
4907
  "use strict";
4908
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SVG_EXPORT_TAG\": () => (/* binding */ SVG_EXPORT_TAG),\n/* harmony export */ \"exportToCanvas\": () => (/* binding */ exportToCanvas),\n/* harmony export */ \"exportToSvg\": () => (/* binding */ exportToSvg),\n/* harmony export */ \"getExportSize\": () => (/* binding */ getExportSize)\n/* harmony export */ });\n/* harmony import */ var roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! roughjs/bin/rough */ \"../../../node_modules/roughjs/bin/rough.js\");\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element/bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../renderer/renderScene */ \"../../renderer/renderScene.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _element_image__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../element/image */ \"../../element/image.ts\");\n/* harmony import */ var _Scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Scene */ \"../../scene/Scene.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\n\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\nconst exportToCanvas = (elements, appState, files, { exportBackground, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, }, createCanvas = (width, height) => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width * appState.exportScale;\n canvas.height = height * appState.exportScale;\n return { canvas, scale: appState.exportScale };\n}) => __awaiter(void 0, void 0, void 0, function* () {\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\n const { canvas, scale = 1 } = createCanvas(width, height);\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\n const { imageCache } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.updateImageCache)({\n imageCache: new Map(),\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.getInitializedImageElements)(elements).map((element) => element.fileId),\n files,\n });\n const onlyExportingSingleFrame = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isOnlyExportingSingleFrame)(elements);\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderScene)({\n elements,\n appState,\n scale,\n rc: roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas),\n canvas,\n renderConfig: {\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\n scrollX: -minX + (onlyExportingSingleFrame ? 0 : exportPadding),\n scrollY: -minY + (onlyExportingSingleFrame ? 0 : exportPadding),\n zoom: defaultAppState.zoom,\n remotePointerViewportCoords: {},\n remoteSelectedElementIds: {},\n shouldCacheIgnoreZoom: false,\n remotePointerUsernames: {},\n remotePointerUserStates: {},\n theme: appState.exportWithDarkMode ? \"dark\" : \"light\",\n imageCache,\n renderScrollbars: false,\n renderSelection: false,\n renderGrid: false,\n isExporting: true,\n },\n });\n return canvas;\n});\nconst exportToSvg = (elements, appState, files, opts) => __awaiter(void 0, void 0, void 0, function* () {\n var _a, _b, _c;\n const { exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, exportScale = 1, exportEmbedScene, } = appState;\n let metadata = \"\";\n if (exportEmbedScene) {\n try {\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \"../../data/image.ts\"))).encodeSvgMetadata({\n text: (opts === null || opts === void 0 ? void 0 : opts.serializeAsJSON)\n ? (_a = opts === null || opts === void 0 ? void 0 : opts.serializeAsJSON) === null || _a === void 0 ? void 0 : _a.call(opts)\n : (0,_data_json__WEBPACK_IMPORTED_MODULE_6__.serializeAsJSON)(elements, appState, files || {}, \"local\"),\n });\n }\n catch (error) {\n console.error(error);\n }\n }\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\n // initialize SVG root\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"svg\");\n svgRoot.setAttribute(\"version\", \"1.1\");\n svgRoot.setAttribute(\"xmlns\", _constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS);\n svgRoot.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n svgRoot.setAttribute(\"width\", `${width * exportScale}`);\n svgRoot.setAttribute(\"height\", `${height * exportScale}`);\n if (appState.exportWithDarkMode) {\n svgRoot.setAttribute(\"filter\", _constants__WEBPACK_IMPORTED_MODULE_4__.THEME_FILTER);\n }\n let assetPath = \"https://excalidraw.com/\";\n // Asset path needs to be determined only when using package\n if (true) {\n assetPath =\n window.EXCALIDRAW_ASSET_PATH ||\n `https://unpkg.com/${\"@excalidraw/excalidraw\"}@${\"0.15.2-6546-21ca391\"}`;\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\"/\")) {\n assetPath = assetPath.replace(\"/\", `${window.location.origin}/`);\n }\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\n }\n // do not apply clipping when we're exporting the whole scene\n const isExportingWholeCanvas = ((_c = (_b = _Scene__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getScene(elements[0])) === null || _b === void 0 ? void 0 : _b.getNonDeletedElements()) === null || _c === void 0 ? void 0 : _c.length) ===\n elements.length;\n const onlyExportingSingleFrame = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isOnlyExportingSingleFrame)(elements);\n const offsetX = -minX + (onlyExportingSingleFrame ? 0 : exportPadding);\n const offsetY = -minY + (onlyExportingSingleFrame ? 0 : exportPadding);\n const exportingFrame = isExportingWholeCanvas || !onlyExportingSingleFrame\n ? undefined\n : elements.find((element) => element.type === \"frame\");\n let exportingFrameClipPath = \"\";\n if (exportingFrame) {\n const [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(exportingFrame);\n const cx = (x2 - x1) / 2 - (exportingFrame.x - x1);\n const cy = (y2 - y1) / 2 - (exportingFrame.y - y1);\n exportingFrameClipPath = `<clipPath id=${exportingFrame.id}>\n <rect transform=\"translate(${exportingFrame.x + offsetX} ${exportingFrame.y + offsetY}) rotate(${exportingFrame.angle} ${cx} ${cy})\"\n width=\"${exportingFrame.width}\"\n height=\"${exportingFrame.height}\"\n >\n </rect>\n </clipPath>`;\n }\n svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style class=\"style-fonts\">\n @font-face {\n font-family: \"Virgil\";\n src: url(\"${assetPath}Virgil.woff2\");\n }\n @font-face {\n font-family: \"Cascadia\";\n src: url(\"${assetPath}Cascadia.woff2\");\n }\n </style>\n ${exportingFrameClipPath}\n </defs>\n `;\n // render background rect\n if (appState.exportBackground && viewBackgroundColor) {\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"rect\");\n rect.setAttribute(\"x\", \"0\");\n rect.setAttribute(\"y\", \"0\");\n rect.setAttribute(\"width\", `${width}`);\n rect.setAttribute(\"height\", `${height}`);\n rect.setAttribute(\"fill\", viewBackgroundColor);\n svgRoot.appendChild(rect);\n }\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].svg(svgRoot);\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\n offsetX,\n offsetY,\n exportWithDarkMode: appState.exportWithDarkMode,\n exportingFrameId: (exportingFrame === null || exportingFrame === void 0 ? void 0 : exportingFrame.id) || null,\n });\n return svgRoot;\n});\n// calculate smallest area to fit the contents in\nconst getCanvasSize = (elements, exportPadding) => {\n // we should decide if we are exporting the whole canvas\n // if so, we are not clipping elements in the frame\n // and therefore, we should not do anything special\n var _a, _b;\n const isExportingWholeCanvas = ((_b = (_a = _Scene__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getScene(elements[0])) === null || _a === void 0 ? void 0 : _a.getNonDeletedElements()) === null || _b === void 0 ? void 0 : _b.length) ===\n elements.length;\n const onlyExportingSingleFrame = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isOnlyExportingSingleFrame)(elements);\n if (!isExportingWholeCanvas || onlyExportingSingleFrame) {\n const frames = elements.filter((element) => element.type === \"frame\");\n const exportedFrameIds = frames.reduce((acc, frame) => {\n acc[frame.id] = true;\n return acc;\n }, {});\n // elements in a frame do not affect the canvas size if we're not exporting\n // the whole canvas\n elements = elements.filter((element) => { var _a; return !exportedFrameIds[(_a = element.frameId) !== null && _a !== void 0 ? _a : \"\"]; });\n }\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(elements);\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minX, maxX) + (onlyExportingSingleFrame ? 0 : exportPadding * 2);\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + (onlyExportingSingleFrame ? 0 : exportPadding * 2);\n return [minX, minY, width, height];\n};\nconst getExportSize = (elements, exportPadding, scale) => {\n const [, , width, height] = getCanvasSize(elements, exportPadding).map((dimension) => Math.trunc(dimension * scale));\n return [width, height];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QztJQUU1RSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDO0FBRUssTUFBTSxhQUFhLEdBQUcsQ0FDM0IsUUFBZ0QsRUFDaEQsYUFBcUIsRUFDckIsS0FBYSxFQUNLLEVBQUU7SUFDcEIsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQ3BFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FDN0MsQ0FBQztJQUVGLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NjZW5lL2V4cG9ydC50cz85YmY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByb3VnaCBmcm9tIFwicm91Z2hqcy9iaW4vcm91Z2hcIjtcbmltcG9ydCB7IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRDb21tb25Cb3VuZHMsIGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyB9IGZyb20gXCIuLi9lbGVtZW50L2JvdW5kc1wiO1xuaW1wb3J0IHsgcmVuZGVyU2NlbmUsIHJlbmRlclNjZW5lVG9TdmcgfSBmcm9tIFwiLi4vcmVuZGVyZXIvcmVuZGVyU2NlbmVcIjtcbmltcG9ydCB7IGRpc3RhbmNlLCBpc09ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIEJpbmFyeUZpbGVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VYUE9SVF9QQURESU5HLCBTVkdfTlMsIFRIRU1FX0ZJTFRFUiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRBcHBTdGF0ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IHsgc2VyaWFsaXplQXNKU09OIH0gZnJvbSBcIi4uL2RhdGEvanNvblwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzLFxuICB1cGRhdGVJbWFnZUNhY2hlLFxufSBmcm9tIFwiLi4vZWxlbWVudC9pbWFnZVwiO1xuaW1wb3J0IFNjZW5lIGZyb20gXCIuL1NjZW5lXCI7XG5cbmV4cG9ydCBjb25zdCBTVkdfRVhQT1JUX1RBRyA9IGA8IS0tIHN2Zy1zb3VyY2U6ZXhjYWxpZHJhdyAtLT5gO1xuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9DYW52YXMgPSBhc3luYyAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuICBmaWxlczogQmluYXJ5RmlsZXMsXG4gIHtcbiAgICBleHBvcnRCYWNrZ3JvdW5kLFxuICAgIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gIH06IHtcbiAgICBleHBvcnRCYWNrZ3JvdW5kOiBib29sZWFuO1xuICAgIGV4cG9ydFBhZGRpbmc/OiBudW1iZXI7XG4gICAgdmlld0JhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICB9LFxuICBjcmVhdGVDYW52YXM6IChcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICApID0+IHsgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDsgc2NhbGU6IG51bWJlciB9ID0gKHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoICogYXBwU3RhdGUuZXhwb3J0U2NhbGU7XG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodCAqIGFwcFN0YXRlLmV4cG9ydFNjYWxlO1xuICAgIHJldHVybiB7IGNhbnZhcywgc2NhbGU6IGFwcFN0YXRlLmV4cG9ydFNjYWxlIH07XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdID0gZ2V0Q2FudmFzU2l6ZShlbGVtZW50cywgZXhwb3J0UGFkZGluZyk7XG5cbiAgY29uc3QgeyBjYW52YXMsIHNjYWxlID0gMSB9ID0gY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuXG4gIGNvbnN0IGRlZmF1bHRBcHBTdGF0ZSA9IGdldERlZmF1bHRBcHBTdGF0ZSgpO1xuXG4gIGNvbnN0IHsgaW1hZ2VDYWNoZSB9ID0gYXdhaXQgdXBkYXRlSW1hZ2VDYWNoZSh7XG4gICAgaW1hZ2VDYWNoZTogbmV3IE1hcCgpLFxuICAgIGZpbGVJZHM6IGdldEluaXRpYWxpemVkSW1hZ2VFbGVtZW50cyhlbGVtZW50cykubWFwKFxuICAgICAgKGVsZW1lbnQpID0+IGVsZW1lbnQuZmlsZUlkLFxuICAgICksXG4gICAgZmlsZXMsXG4gIH0pO1xuXG4gIGNvbnN0IG9ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZSA9IGlzT25seUV4cG9ydGluZ1NpbmdsZUZyYW1lKGVsZW1lbnRzKTtcblxuICByZW5kZXJTY2VuZSh7XG4gICAgZWxlbWVudHMsXG4gICAgYXBwU3RhdGUsXG4gICAgc2NhbGUsXG4gICAgcmM6IHJvdWdoLmNhbnZhcyhjYW52YXMpLFxuICAgIGNhbnZhcyxcbiAgICByZW5kZXJDb25maWc6IHtcbiAgICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IGV4cG9ydEJhY2tncm91bmQgPyB2aWV3QmFja2dyb3VuZENvbG9yIDogbnVsbCxcbiAgICAgIHNjcm9sbFg6IC1taW5YICsgKG9ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZSA/IDAgOiBleHBvcnRQYWRkaW5nKSxcbiAgICAgIHNjcm9sbFk6IC1taW5ZICsgKG9ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZSA/IDAgOiBleHBvcnRQYWRkaW5nKSxcbiAgICAgIHpvb206IGRlZmF1bHRBcHBTdGF0ZS56b29tLFxuICAgICAgcmVtb3RlUG9pbnRlclZpZXdwb3J0Q29vcmRzOiB7fSxcbiAgICAgIHJlbW90ZVNlbGVjdGVkRWxlbWVudElkczoge30sXG4gICAgICBzaG91bGRDYWNoZUlnbm9yZVpvb206IGZhbHNlLFxuICAgICAgcmVtb3RlUG9pbnRlclVzZXJuYW1lczoge30sXG4gICAgICByZW1vdGVQb2ludGVyVXNlclN0YXRlczoge30sXG4gICAgICB0aGVtZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlID8gXCJkYXJrXCIgOiBcImxpZ2h0XCIsXG4gICAgICBpbWFnZUNhY2hlLFxuICAgICAgcmVuZGVyU2Nyb2xsYmFyczogZmFsc2UsXG4gICAgICByZW5kZXJTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgcmVuZGVyR3JpZDogZmFsc2UsXG4gICAgICBpc0V4cG9ydGluZzogdHJ1ZSxcbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4gY2FudmFzO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvU3ZnID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIGV4cG9ydFNjYWxlPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBleHBvcnRXaXRoRGFya01vZGU/OiBib29sZWFuO1xuICAgIGV4cG9ydEVtYmVkU2NlbmU/OiBib29sZWFuO1xuICAgIHJlbmRlckZyYW1lPzogYm9vbGVhbjtcbiAgfSxcbiAgZmlsZXM6IEJpbmFyeUZpbGVzIHwgbnVsbCxcbiAgb3B0cz86IHtcbiAgICBzZXJpYWxpemVBc0pTT04/OiAoKSA9PiBzdHJpbmc7XG4gIH0sXG4pOiBQcm9taXNlPFNWR1NWR0VsZW1lbnQ+ID0+IHtcbiAgY29uc3Qge1xuICAgIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgZXhwb3J0U2NhbGUgPSAxLFxuICAgIGV4cG9ydEVtYmVkU2NlbmUsXG4gIH0gPSBhcHBTdGF0ZTtcbiAgbGV0IG1ldGFkYXRhID0gXCJcIjtcbiAgaWYgKGV4cG9ydEVtYmVkU2NlbmUpIHtcbiAgICB0cnkge1xuICAgICAgbWV0YWRhdGEgPSBhd2FpdCAoXG4gICAgICAgIGF3YWl0IGltcG9ydCgvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImltYWdlXCIgKi8gXCIuLi8uLi9zcmMvZGF0YS9pbWFnZVwiKVxuICAgICAgKS5lbmNvZGVTdmdNZXRhZGF0YSh7XG4gICAgICAgIHRleHQ6IG9wdHM/LnNlcmlhbGl6ZUFzSlNPTlxuICAgICAgICAgID8gb3B0cz8uc2VyaWFsaXplQXNKU09OPy4oKVxuICAgICAgICAgIDogc2VyaWFsaXplQXNKU09OKGVsZW1lbnRzLCBhcHBTdGF0ZSwgZmlsZXMgfHwge30sIFwibG9jYWxcIiksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdID0gZ2V0Q2FudmFzU2l6ZShlbGVtZW50cywgZXhwb3J0UGFkZGluZyk7XG5cbiAgLy8gaW5pdGlhbGl6ZSBTVkcgcm9vdFxuICBjb25zdCBzdmdSb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJzdmdcIik7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwidmVyc2lvblwiLCBcIjEuMVwiKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiLCBTVkdfTlMpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgYDAgMCAke3dpZHRofSAke2hlaWdodH1gKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBgJHt3aWR0aCAqIGV4cG9ydFNjYWxlfWApO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBgJHtoZWlnaHQgKiBleHBvcnRTY2FsZX1gKTtcbiAgaWYgKGFwcFN0YXRlLmV4cG9ydFdpdGhEYXJrTW9kZSkge1xuICAgIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwiZmlsdGVyXCIsIFRIRU1FX0ZJTFRFUik7XG4gIH1cblxuICBsZXQgYXNzZXRQYXRoID0gXCJodHRwczovL2V4Y2FsaWRyYXcuY29tL1wiO1xuXG4gIC8vIEFzc2V0IHBhdGggbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBvbmx5IHdoZW4gdXNpbmcgcGFja2FnZVxuICBpZiAocHJvY2Vzcy5lbnYuSVNfRVhDQUxJRFJBV19OUE1fUEFDS0FHRSkge1xuICAgIGFzc2V0UGF0aCA9XG4gICAgICB3aW5kb3cuRVhDQUxJRFJBV19BU1NFVF9QQVRIIHx8XG4gICAgICBgaHR0cHM6Ly91bnBrZy5jb20vJHtwcm9jZXNzLmVudi5QS0dfTkFNRX1AJHtwcm9jZXNzLmVudi5QS0dfVkVSU0lPTn1gO1xuXG4gICAgaWYgKGFzc2V0UGF0aD8uc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgIGFzc2V0UGF0aCA9IGFzc2V0UGF0aC5yZXBsYWNlKFwiL1wiLCBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9gKTtcbiAgICB9XG4gICAgYXNzZXRQYXRoID0gYCR7YXNzZXRQYXRofS9kaXN0L2V4Y2FsaWRyYXctYXNzZXRzL2A7XG4gIH1cblxuICAvLyBkbyBub3QgYXBwbHkgY2xpcHBpbmcgd2hlbiB3ZSdyZSBleHBvcnRpbmcgdGhlIHdob2xlIHNjZW5lXG4gIGNvbnN0IGlzRXhwb3J0aW5nV2hvbGVDYW52YXMgPVxuICAgIFNjZW5lLmdldFNjZW5lKGVsZW1lbnRzWzBdKT8uZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzKCk/Lmxlbmd0aCA9PT1cbiAgICBlbGVtZW50cy5sZW5ndGg7XG5cbiAgY29uc3Qgb25seUV4cG9ydGluZ1NpbmdsZUZyYW1lID0gaXNPbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUoZWxlbWVudHMpO1xuXG4gIGNvbnN0IG9mZnNldFggPSAtbWluWCArIChvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPyAwIDogZXhwb3J0UGFkZGluZyk7XG4gIGNvbnN0IG9mZnNldFkgPSAtbWluWSArIChvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPyAwIDogZXhwb3J0UGFkZGluZyk7XG5cbiAgY29uc3QgZXhwb3J0aW5nRnJhbWUgPVxuICAgIGlzRXhwb3J0aW5nV2hvbGVDYW52YXMgfHwgIW9ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZVxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogZWxlbWVudHMuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC50eXBlID09PSBcImZyYW1lXCIpO1xuXG4gIGxldCBleHBvcnRpbmdGcmFtZUNsaXBQYXRoID0gXCJcIjtcbiAgaWYgKGV4cG9ydGluZ0ZyYW1lKSB7XG4gICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyhleHBvcnRpbmdGcmFtZSk7XG4gICAgY29uc3QgY3ggPSAoeDIgLSB4MSkgLyAyIC0gKGV4cG9ydGluZ0ZyYW1lLnggLSB4MSk7XG4gICAgY29uc3QgY3kgPSAoeTIgLSB5MSkgLyAyIC0gKGV4cG9ydGluZ0ZyYW1lLnkgLSB5MSk7XG5cbiAgICBleHBvcnRpbmdGcmFtZUNsaXBQYXRoID0gYDxjbGlwUGF0aCBpZD0ke2V4cG9ydGluZ0ZyYW1lLmlkfT5cbiAgICAgICAgICAgIDxyZWN0IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgke2V4cG9ydGluZ0ZyYW1lLnggKyBvZmZzZXRYfSAke1xuICAgICAgZXhwb3J0aW5nRnJhbWUueSArIG9mZnNldFlcbiAgICB9KSByb3RhdGUoJHtleHBvcnRpbmdGcmFtZS5hbmdsZX0gJHtjeH0gJHtjeX0pXCJcbiAgICAgICAgICB3aWR0aD1cIiR7ZXhwb3J0aW5nRnJhbWUud2lkdGh9XCJcbiAgICAgICAgICBoZWlnaHQ9XCIke2V4cG9ydGluZ0ZyYW1lLmhlaWdodH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3JlY3Q+XG4gICAgICAgIDwvY2xpcFBhdGg+YDtcbiAgfVxuXG4gIHN2Z1Jvb3QuaW5uZXJIVE1MID0gYFxuICAke1NWR19FWFBPUlRfVEFHfVxuICAke21ldGFkYXRhfVxuICA8ZGVmcz5cbiAgICA8c3R5bGUgY2xhc3M9XCJzdHlsZS1mb250c1wiPlxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlZpcmdpbFwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofVZpcmdpbC53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCJDYXNjYWRpYVwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofUNhc2NhZGlhLndvZmYyXCIpO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gICAgJHtleHBvcnRpbmdGcmFtZUNsaXBQYXRofVxuICA8L2RlZnM+XG4gIGA7XG5cbiAgLy8gcmVuZGVyIGJhY2tncm91bmQgcmVjdFxuICBpZiAoYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCAmJiB2aWV3QmFja2dyb3VuZENvbG9yKSB7XG4gICAgY29uc3QgcmVjdCA9IHN2Z1Jvb3Qub3duZXJEb2N1bWVudCEuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHMsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WCxcbiAgICBvZmZzZXRZLFxuICAgIGV4cG9ydFdpdGhEYXJrTW9kZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlLFxuICAgIGV4cG9ydGluZ0ZyYW1lSWQ6IGV4cG9ydGluZ0ZyYW1lPy5pZCB8fCBudWxsLFxuICB9KTtcblxuICByZXR1cm4gc3ZnUm9vdDtcbn07XG5cbi8vIGNhbGN1bGF0ZSBzbWFsbGVzdCBhcmVhIHRvIGZpdCB0aGUgY29udGVudHMgaW5cbmNvbnN0IGdldENhbnZhc1NpemUgPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgZXhwb3J0UGFkZGluZzogbnVtYmVyLFxuKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4ge1xuICAvLyB3ZSBzaG91bGQgZGVjaWRlIGlmIHdlIGFyZSBleHBvcnRpbmcgdGhlIHdob2xlIGNhbnZhc1xuICAvLyBpZiBzbywgd2UgYXJlIG5vdCBjbGlwcGluZyBlbGVtZW50cyBpbiB0aGUgZnJhbWVcbiAgLy8gYW5kIHRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdCBkbyBhbnl0aGluZyBzcGVjaWFsXG5cbiAgY29uc3QgaXNFeHBvcnRpbmdXaG9sZUNhbnZhcyA9XG4gICAgU2NlbmUuZ2V0U2NlbmUoZWxlbWVudHNbMF0pPy5nZXROb25EZWxldGVkRWxlbWVudHMoKT8ubGVuZ3RoID09PVxuICAgIGVsZW1lbnRzLmxlbmd0aDtcblxuICBjb25zdCBvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPSBpc09ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZShlbGVtZW50cyk7XG5cbiAgaWYgKCFpc0V4cG9ydGluZ1dob2xlQ2FudmFzIHx8IG9ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IGVsZW1lbnRzLmZpbHRlcigoZWxlbWVudCkgPT4gZWxlbWVudC50eXBlID09PSBcImZyYW1lXCIpO1xuXG4gICAgY29uc3QgZXhwb3J0ZWRGcmFtZUlkcyA9IGZyYW1lcy5yZWR1Y2UoKGFjYywgZnJhbWUpID0+IHtcbiAgICAgIGFjY1tmcmFtZS5pZF0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB0cnVlPik7XG5cbiAgICAvLyBlbGVtZW50cyBpbiBhIGZyYW1lIGRvIG5vdCBhZmZlY3QgdGhlIGNhbnZhcyBzaXplIGlmIHdlJ3JlIG5vdCBleHBvcnRpbmdcbiAgICAvLyB0aGUgd2hvbGUgY2FudmFzXG4gICAgZWxlbWVudHMgPSBlbGVtZW50cy5maWx0ZXIoXG4gICAgICAoZWxlbWVudCkgPT4gIWV4cG9ydGVkRnJhbWVJZHNbZWxlbWVudC5mcmFtZUlkID8/IFwiXCJdLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBbbWluWCwgbWluWSwgbWF4WCwgbWF4WV0gPSBnZXRDb21tb25Cb3VuZHMoZWxlbWVudHMpO1xuICBjb25zdCB3aWR0aCA9XG4gICAgZGlzdGFuY2UobWluWCwgbWF4WCkgKyAob25seUV4cG9ydGluZ1NpbmdsZUZyYW1lID8gMCA6IGV4cG9ydFBhZGRpbmcgKiAyKTtcbiAgY29uc3QgaGVpZ2h0ID1cbiAgICBkaXN0YW5jZShtaW5ZLCBtYXhZKSArIChvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPyAwIDogZXhwb3J0UGFkZGluZyAqIDIpO1xuXG4gIHJldHVybiBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwb3J0U2l6ZSA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBleHBvcnRQYWRkaW5nOiBudW1iZXIsXG4gIHNjYWxlOiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgWywgLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpLm1hcChcbiAgICAoZGltZW5zaW9uKSA9PiBNYXRoLnRydW5jKGRpbWVuc2lvbiAqIHNjYWxlKSxcbiAgKTtcblxuICByZXR1cm4gW3dpZHRoLCBoZWlnaHRdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
4908
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SVG_EXPORT_TAG\": () => (/* binding */ SVG_EXPORT_TAG),\n/* harmony export */ \"exportToCanvas\": () => (/* binding */ exportToCanvas),\n/* harmony export */ \"exportToSvg\": () => (/* binding */ exportToSvg),\n/* harmony export */ \"getExportSize\": () => (/* binding */ getExportSize)\n/* harmony export */ });\n/* harmony import */ var roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! roughjs/bin/rough */ \"../../../node_modules/roughjs/bin/rough.js\");\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../element/bounds */ \"../../element/bounds.ts\");\n/* harmony import */ var _renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../renderer/renderScene */ \"../../renderer/renderScene.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../appState */ \"../../appState.ts\");\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/json */ \"../../data/json.ts\");\n/* harmony import */ var _element_image__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../element/image */ \"../../element/image.ts\");\n/* harmony import */ var _Scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Scene */ \"../../scene/Scene.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\n\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\nconst exportToCanvas = (elements, appState, files, { exportBackground, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, }, createCanvas = (width, height) => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width * appState.exportScale;\n canvas.height = height * appState.exportScale;\n return { canvas, scale: appState.exportScale };\n}) => __awaiter(void 0, void 0, void 0, function* () {\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\n const { canvas, scale = 1 } = createCanvas(width, height);\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_5__.getDefaultAppState)();\n const { imageCache } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.updateImageCache)({\n imageCache: new Map(),\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_7__.getInitializedImageElements)(elements).map((element) => element.fileId),\n files,\n });\n const onlyExportingSingleFrame = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isOnlyExportingSingleFrame)(elements);\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderScene)({\n elements,\n appState,\n scale,\n rc: roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas),\n canvas,\n renderConfig: {\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\n scrollX: -minX + (onlyExportingSingleFrame ? 0 : exportPadding),\n scrollY: -minY + (onlyExportingSingleFrame ? 0 : exportPadding),\n zoom: defaultAppState.zoom,\n remotePointerViewportCoords: {},\n remoteSelectedElementIds: {},\n shouldCacheIgnoreZoom: false,\n remotePointerUsernames: {},\n remotePointerUserStates: {},\n theme: appState.exportWithDarkMode ? \"dark\" : \"light\",\n imageCache,\n renderScrollbars: false,\n renderSelection: false,\n renderGrid: false,\n isExporting: true,\n },\n });\n return canvas;\n});\nconst exportToSvg = (elements, appState, files, opts) => __awaiter(void 0, void 0, void 0, function* () {\n var _a, _b, _c;\n const { exportPadding = _constants__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, exportScale = 1, exportEmbedScene, } = appState;\n let metadata = \"\";\n if (exportEmbedScene) {\n try {\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \"../../data/image.ts\"))).encodeSvgMetadata({\n text: (opts === null || opts === void 0 ? void 0 : opts.serializeAsJSON)\n ? (_a = opts === null || opts === void 0 ? void 0 : opts.serializeAsJSON) === null || _a === void 0 ? void 0 : _a.call(opts)\n : (0,_data_json__WEBPACK_IMPORTED_MODULE_6__.serializeAsJSON)(elements, appState, files || {}, \"local\"),\n });\n }\n catch (error) {\n console.error(error);\n }\n }\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\n // initialize SVG root\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"svg\");\n svgRoot.setAttribute(\"version\", \"1.1\");\n svgRoot.setAttribute(\"xmlns\", _constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS);\n svgRoot.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n svgRoot.setAttribute(\"width\", `${width * exportScale}`);\n svgRoot.setAttribute(\"height\", `${height * exportScale}`);\n if (appState.exportWithDarkMode) {\n svgRoot.setAttribute(\"filter\", _constants__WEBPACK_IMPORTED_MODULE_4__.THEME_FILTER);\n }\n let assetPath = \"https://excalidraw.com/\";\n // Asset path needs to be determined only when using package\n if (true) {\n assetPath =\n window.EXCALIDRAW_ASSET_PATH ||\n `https://unpkg.com/${\"@excalidraw/excalidraw\"}@${\"0.15.2-6546-a6b389c\"}`;\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\"/\")) {\n assetPath = assetPath.replace(\"/\", `${window.location.origin}/`);\n }\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\n }\n // do not apply clipping when we're exporting the whole scene\n const isExportingWholeCanvas = ((_c = (_b = _Scene__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getScene(elements[0])) === null || _b === void 0 ? void 0 : _b.getNonDeletedElements()) === null || _c === void 0 ? void 0 : _c.length) ===\n elements.length;\n const onlyExportingSingleFrame = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isOnlyExportingSingleFrame)(elements);\n const offsetX = -minX + (onlyExportingSingleFrame ? 0 : exportPadding);\n const offsetY = -minY + (onlyExportingSingleFrame ? 0 : exportPadding);\n const exportingFrame = isExportingWholeCanvas || !onlyExportingSingleFrame\n ? undefined\n : elements.find((element) => element.type === \"frame\");\n let exportingFrameClipPath = \"\";\n if (exportingFrame) {\n const [x1, y1, x2, y2] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getElementAbsoluteCoords)(exportingFrame);\n const cx = (x2 - x1) / 2 - (exportingFrame.x - x1);\n const cy = (y2 - y1) / 2 - (exportingFrame.y - y1);\n exportingFrameClipPath = `<clipPath id=${exportingFrame.id}>\n <rect transform=\"translate(${exportingFrame.x + offsetX} ${exportingFrame.y + offsetY}) rotate(${exportingFrame.angle} ${cx} ${cy})\"\n width=\"${exportingFrame.width}\"\n height=\"${exportingFrame.height}\"\n >\n </rect>\n </clipPath>`;\n }\n svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style class=\"style-fonts\">\n @font-face {\n font-family: \"Virgil\";\n src: url(\"${assetPath}Virgil.woff2\");\n }\n @font-face {\n font-family: \"Cascadia\";\n src: url(\"${assetPath}Cascadia.woff2\");\n }\n </style>\n ${exportingFrameClipPath}\n </defs>\n `;\n // render background rect\n if (appState.exportBackground && viewBackgroundColor) {\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_4__.SVG_NS, \"rect\");\n rect.setAttribute(\"x\", \"0\");\n rect.setAttribute(\"y\", \"0\");\n rect.setAttribute(\"width\", `${width}`);\n rect.setAttribute(\"height\", `${height}`);\n rect.setAttribute(\"fill\", viewBackgroundColor);\n svgRoot.appendChild(rect);\n }\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].svg(svgRoot);\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\n offsetX,\n offsetY,\n exportWithDarkMode: appState.exportWithDarkMode,\n exportingFrameId: (exportingFrame === null || exportingFrame === void 0 ? void 0 : exportingFrame.id) || null,\n });\n return svgRoot;\n});\n// calculate smallest area to fit the contents in\nconst getCanvasSize = (elements, exportPadding) => {\n // we should decide if we are exporting the whole canvas\n // if so, we are not clipping elements in the frame\n // and therefore, we should not do anything special\n var _a, _b;\n const isExportingWholeCanvas = ((_b = (_a = _Scene__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getScene(elements[0])) === null || _a === void 0 ? void 0 : _a.getNonDeletedElements()) === null || _b === void 0 ? void 0 : _b.length) ===\n elements.length;\n const onlyExportingSingleFrame = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isOnlyExportingSingleFrame)(elements);\n if (!isExportingWholeCanvas || onlyExportingSingleFrame) {\n const frames = elements.filter((element) => element.type === \"frame\");\n const exportedFrameIds = frames.reduce((acc, frame) => {\n acc[frame.id] = true;\n return acc;\n }, {});\n // elements in a frame do not affect the canvas size if we're not exporting\n // the whole canvas\n elements = elements.filter((element) => { var _a; return !exportedFrameIds[(_a = element.frameId) !== null && _a !== void 0 ? _a : \"\"]; });\n }\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_1__.getCommonBounds)(elements);\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minX, maxX) + (onlyExportingSingleFrame ? 0 : exportPadding * 2);\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + (onlyExportingSingleFrame ? 0 : exportPadding * 2);\n return [minX, minY, width, height];\n};\nconst getExportSize = (elements, exportPadding, scale) => {\n const [, , width, height] = getCanvasSize(elements, exportPadding).map((dimension) => Math.trunc(dimension * scale));\n return [width, height];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QztJQUU1RSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDO0FBRUssTUFBTSxhQUFhLEdBQUcsQ0FDM0IsUUFBZ0QsRUFDaEQsYUFBcUIsRUFDckIsS0FBYSxFQUNLLEVBQUU7SUFDcEIsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQ3BFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FDN0MsQ0FBQztJQUVGLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NjZW5lL2V4cG9ydC50cz85YmY3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByb3VnaCBmcm9tIFwicm91Z2hqcy9iaW4vcm91Z2hcIjtcbmltcG9ydCB7IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRDb21tb25Cb3VuZHMsIGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyB9IGZyb20gXCIuLi9lbGVtZW50L2JvdW5kc1wiO1xuaW1wb3J0IHsgcmVuZGVyU2NlbmUsIHJlbmRlclNjZW5lVG9TdmcgfSBmcm9tIFwiLi4vcmVuZGVyZXIvcmVuZGVyU2NlbmVcIjtcbmltcG9ydCB7IGRpc3RhbmNlLCBpc09ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgQXBwU3RhdGUsIEJpbmFyeUZpbGVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VYUE9SVF9QQURESU5HLCBTVkdfTlMsIFRIRU1FX0ZJTFRFUiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRBcHBTdGF0ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IHsgc2VyaWFsaXplQXNKU09OIH0gZnJvbSBcIi4uL2RhdGEvanNvblwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzLFxuICB1cGRhdGVJbWFnZUNhY2hlLFxufSBmcm9tIFwiLi4vZWxlbWVudC9pbWFnZVwiO1xuaW1wb3J0IFNjZW5lIGZyb20gXCIuL1NjZW5lXCI7XG5cbmV4cG9ydCBjb25zdCBTVkdfRVhQT1JUX1RBRyA9IGA8IS0tIHN2Zy1zb3VyY2U6ZXhjYWxpZHJhdyAtLT5gO1xuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9DYW52YXMgPSBhc3luYyAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuICBmaWxlczogQmluYXJ5RmlsZXMsXG4gIHtcbiAgICBleHBvcnRCYWNrZ3JvdW5kLFxuICAgIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gIH06IHtcbiAgICBleHBvcnRCYWNrZ3JvdW5kOiBib29sZWFuO1xuICAgIGV4cG9ydFBhZGRpbmc/OiBudW1iZXI7XG4gICAgdmlld0JhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICB9LFxuICBjcmVhdGVDYW52YXM6IChcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICApID0+IHsgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDsgc2NhbGU6IG51bWJlciB9ID0gKHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoICogYXBwU3RhdGUuZXhwb3J0U2NhbGU7XG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodCAqIGFwcFN0YXRlLmV4cG9ydFNjYWxlO1xuICAgIHJldHVybiB7IGNhbnZhcywgc2NhbGU6IGFwcFN0YXRlLmV4cG9ydFNjYWxlIH07XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdID0gZ2V0Q2FudmFzU2l6ZShlbGVtZW50cywgZXhwb3J0UGFkZGluZyk7XG5cbiAgY29uc3QgeyBjYW52YXMsIHNjYWxlID0gMSB9ID0gY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuXG4gIGNvbnN0IGRlZmF1bHRBcHBTdGF0ZSA9IGdldERlZmF1bHRBcHBTdGF0ZSgpO1xuXG4gIGNvbnN0IHsgaW1hZ2VDYWNoZSB9ID0gYXdhaXQgdXBkYXRlSW1hZ2VDYWNoZSh7XG4gICAgaW1hZ2VDYWNoZTogbmV3IE1hcCgpLFxuICAgIGZpbGVJZHM6IGdldEluaXRpYWxpemVkSW1hZ2VFbGVtZW50cyhlbGVtZW50cykubWFwKFxuICAgICAgKGVsZW1lbnQpID0+IGVsZW1lbnQuZmlsZUlkLFxuICAgICksXG4gICAgZmlsZXMsXG4gIH0pO1xuXG4gIGNvbnN0IG9ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZSA9IGlzT25seUV4cG9ydGluZ1NpbmdsZUZyYW1lKGVsZW1lbnRzKTtcblxuICByZW5kZXJTY2VuZSh7XG4gICAgZWxlbWVudHMsXG4gICAgYXBwU3RhdGUsXG4gICAgc2NhbGUsXG4gICAgcmM6IHJvdWdoLmNhbnZhcyhjYW52YXMpLFxuICAgIGNhbnZhcyxcbiAgICByZW5kZXJDb25maWc6IHtcbiAgICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IGV4cG9ydEJhY2tncm91bmQgPyB2aWV3QmFja2dyb3VuZENvbG9yIDogbnVsbCxcbiAgICAgIHNjcm9sbFg6IC1taW5YICsgKG9ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZSA/IDAgOiBleHBvcnRQYWRkaW5nKSxcbiAgICAgIHNjcm9sbFk6IC1taW5ZICsgKG9ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZSA/IDAgOiBleHBvcnRQYWRkaW5nKSxcbiAgICAgIHpvb206IGRlZmF1bHRBcHBTdGF0ZS56b29tLFxuICAgICAgcmVtb3RlUG9pbnRlclZpZXdwb3J0Q29vcmRzOiB7fSxcbiAgICAgIHJlbW90ZVNlbGVjdGVkRWxlbWVudElkczoge30sXG4gICAgICBzaG91bGRDYWNoZUlnbm9yZVpvb206IGZhbHNlLFxuICAgICAgcmVtb3RlUG9pbnRlclVzZXJuYW1lczoge30sXG4gICAgICByZW1vdGVQb2ludGVyVXNlclN0YXRlczoge30sXG4gICAgICB0aGVtZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlID8gXCJkYXJrXCIgOiBcImxpZ2h0XCIsXG4gICAgICBpbWFnZUNhY2hlLFxuICAgICAgcmVuZGVyU2Nyb2xsYmFyczogZmFsc2UsXG4gICAgICByZW5kZXJTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgcmVuZGVyR3JpZDogZmFsc2UsXG4gICAgICBpc0V4cG9ydGluZzogdHJ1ZSxcbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4gY2FudmFzO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvU3ZnID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIGV4cG9ydFNjYWxlPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBleHBvcnRXaXRoRGFya01vZGU/OiBib29sZWFuO1xuICAgIGV4cG9ydEVtYmVkU2NlbmU/OiBib29sZWFuO1xuICAgIHJlbmRlckZyYW1lPzogYm9vbGVhbjtcbiAgfSxcbiAgZmlsZXM6IEJpbmFyeUZpbGVzIHwgbnVsbCxcbiAgb3B0cz86IHtcbiAgICBzZXJpYWxpemVBc0pTT04/OiAoKSA9PiBzdHJpbmc7XG4gIH0sXG4pOiBQcm9taXNlPFNWR1NWR0VsZW1lbnQ+ID0+IHtcbiAgY29uc3Qge1xuICAgIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgZXhwb3J0U2NhbGUgPSAxLFxuICAgIGV4cG9ydEVtYmVkU2NlbmUsXG4gIH0gPSBhcHBTdGF0ZTtcbiAgbGV0IG1ldGFkYXRhID0gXCJcIjtcbiAgaWYgKGV4cG9ydEVtYmVkU2NlbmUpIHtcbiAgICB0cnkge1xuICAgICAgbWV0YWRhdGEgPSBhd2FpdCAoXG4gICAgICAgIGF3YWl0IGltcG9ydCgvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImltYWdlXCIgKi8gXCIuLi8uLi9zcmMvZGF0YS9pbWFnZVwiKVxuICAgICAgKS5lbmNvZGVTdmdNZXRhZGF0YSh7XG4gICAgICAgIHRleHQ6IG9wdHM/LnNlcmlhbGl6ZUFzSlNPTlxuICAgICAgICAgID8gb3B0cz8uc2VyaWFsaXplQXNKU09OPy4oKVxuICAgICAgICAgIDogc2VyaWFsaXplQXNKU09OKGVsZW1lbnRzLCBhcHBTdGF0ZSwgZmlsZXMgfHwge30sIFwibG9jYWxcIiksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdID0gZ2V0Q2FudmFzU2l6ZShlbGVtZW50cywgZXhwb3J0UGFkZGluZyk7XG5cbiAgLy8gaW5pdGlhbGl6ZSBTVkcgcm9vdFxuICBjb25zdCBzdmdSb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJzdmdcIik7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwidmVyc2lvblwiLCBcIjEuMVwiKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiLCBTVkdfTlMpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgYDAgMCAke3dpZHRofSAke2hlaWdodH1gKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBgJHt3aWR0aCAqIGV4cG9ydFNjYWxlfWApO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBgJHtoZWlnaHQgKiBleHBvcnRTY2FsZX1gKTtcbiAgaWYgKGFwcFN0YXRlLmV4cG9ydFdpdGhEYXJrTW9kZSkge1xuICAgIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwiZmlsdGVyXCIsIFRIRU1FX0ZJTFRFUik7XG4gIH1cblxuICBsZXQgYXNzZXRQYXRoID0gXCJodHRwczovL2V4Y2FsaWRyYXcuY29tL1wiO1xuXG4gIC8vIEFzc2V0IHBhdGggbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBvbmx5IHdoZW4gdXNpbmcgcGFja2FnZVxuICBpZiAocHJvY2Vzcy5lbnYuSVNfRVhDQUxJRFJBV19OUE1fUEFDS0FHRSkge1xuICAgIGFzc2V0UGF0aCA9XG4gICAgICB3aW5kb3cuRVhDQUxJRFJBV19BU1NFVF9QQVRIIHx8XG4gICAgICBgaHR0cHM6Ly91bnBrZy5jb20vJHtwcm9jZXNzLmVudi5QS0dfTkFNRX1AJHtwcm9jZXNzLmVudi5QS0dfVkVSU0lPTn1gO1xuXG4gICAgaWYgKGFzc2V0UGF0aD8uc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgIGFzc2V0UGF0aCA9IGFzc2V0UGF0aC5yZXBsYWNlKFwiL1wiLCBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9gKTtcbiAgICB9XG4gICAgYXNzZXRQYXRoID0gYCR7YXNzZXRQYXRofS9kaXN0L2V4Y2FsaWRyYXctYXNzZXRzL2A7XG4gIH1cblxuICAvLyBkbyBub3QgYXBwbHkgY2xpcHBpbmcgd2hlbiB3ZSdyZSBleHBvcnRpbmcgdGhlIHdob2xlIHNjZW5lXG4gIGNvbnN0IGlzRXhwb3J0aW5nV2hvbGVDYW52YXMgPVxuICAgIFNjZW5lLmdldFNjZW5lKGVsZW1lbnRzWzBdKT8uZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzKCk/Lmxlbmd0aCA9PT1cbiAgICBlbGVtZW50cy5sZW5ndGg7XG5cbiAgY29uc3Qgb25seUV4cG9ydGluZ1NpbmdsZUZyYW1lID0gaXNPbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUoZWxlbWVudHMpO1xuXG4gIGNvbnN0IG9mZnNldFggPSAtbWluWCArIChvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPyAwIDogZXhwb3J0UGFkZGluZyk7XG4gIGNvbnN0IG9mZnNldFkgPSAtbWluWSArIChvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPyAwIDogZXhwb3J0UGFkZGluZyk7XG5cbiAgY29uc3QgZXhwb3J0aW5nRnJhbWUgPVxuICAgIGlzRXhwb3J0aW5nV2hvbGVDYW52YXMgfHwgIW9ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZVxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogZWxlbWVudHMuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC50eXBlID09PSBcImZyYW1lXCIpO1xuXG4gIGxldCBleHBvcnRpbmdGcmFtZUNsaXBQYXRoID0gXCJcIjtcbiAgaWYgKGV4cG9ydGluZ0ZyYW1lKSB7XG4gICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IGdldEVsZW1lbnRBYnNvbHV0ZUNvb3JkcyhleHBvcnRpbmdGcmFtZSk7XG4gICAgY29uc3QgY3ggPSAoeDIgLSB4MSkgLyAyIC0gKGV4cG9ydGluZ0ZyYW1lLnggLSB4MSk7XG4gICAgY29uc3QgY3kgPSAoeTIgLSB5MSkgLyAyIC0gKGV4cG9ydGluZ0ZyYW1lLnkgLSB5MSk7XG5cbiAgICBleHBvcnRpbmdGcmFtZUNsaXBQYXRoID0gYDxjbGlwUGF0aCBpZD0ke2V4cG9ydGluZ0ZyYW1lLmlkfT5cbiAgICAgICAgICAgIDxyZWN0IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgke2V4cG9ydGluZ0ZyYW1lLnggKyBvZmZzZXRYfSAke1xuICAgICAgZXhwb3J0aW5nRnJhbWUueSArIG9mZnNldFlcbiAgICB9KSByb3RhdGUoJHtleHBvcnRpbmdGcmFtZS5hbmdsZX0gJHtjeH0gJHtjeX0pXCJcbiAgICAgICAgICB3aWR0aD1cIiR7ZXhwb3J0aW5nRnJhbWUud2lkdGh9XCJcbiAgICAgICAgICBoZWlnaHQ9XCIke2V4cG9ydGluZ0ZyYW1lLmhlaWdodH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3JlY3Q+XG4gICAgICAgIDwvY2xpcFBhdGg+YDtcbiAgfVxuXG4gIHN2Z1Jvb3QuaW5uZXJIVE1MID0gYFxuICAke1NWR19FWFBPUlRfVEFHfVxuICAke21ldGFkYXRhfVxuICA8ZGVmcz5cbiAgICA8c3R5bGUgY2xhc3M9XCJzdHlsZS1mb250c1wiPlxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlZpcmdpbFwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofVZpcmdpbC53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCJDYXNjYWRpYVwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofUNhc2NhZGlhLndvZmYyXCIpO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gICAgJHtleHBvcnRpbmdGcmFtZUNsaXBQYXRofVxuICA8L2RlZnM+XG4gIGA7XG5cbiAgLy8gcmVuZGVyIGJhY2tncm91bmQgcmVjdFxuICBpZiAoYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCAmJiB2aWV3QmFja2dyb3VuZENvbG9yKSB7XG4gICAgY29uc3QgcmVjdCA9IHN2Z1Jvb3Qub3duZXJEb2N1bWVudCEuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHMsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WCxcbiAgICBvZmZzZXRZLFxuICAgIGV4cG9ydFdpdGhEYXJrTW9kZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlLFxuICAgIGV4cG9ydGluZ0ZyYW1lSWQ6IGV4cG9ydGluZ0ZyYW1lPy5pZCB8fCBudWxsLFxuICB9KTtcblxuICByZXR1cm4gc3ZnUm9vdDtcbn07XG5cbi8vIGNhbGN1bGF0ZSBzbWFsbGVzdCBhcmVhIHRvIGZpdCB0aGUgY29udGVudHMgaW5cbmNvbnN0IGdldENhbnZhc1NpemUgPSAoXG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXSxcbiAgZXhwb3J0UGFkZGluZzogbnVtYmVyLFxuKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4ge1xuICAvLyB3ZSBzaG91bGQgZGVjaWRlIGlmIHdlIGFyZSBleHBvcnRpbmcgdGhlIHdob2xlIGNhbnZhc1xuICAvLyBpZiBzbywgd2UgYXJlIG5vdCBjbGlwcGluZyBlbGVtZW50cyBpbiB0aGUgZnJhbWVcbiAgLy8gYW5kIHRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdCBkbyBhbnl0aGluZyBzcGVjaWFsXG5cbiAgY29uc3QgaXNFeHBvcnRpbmdXaG9sZUNhbnZhcyA9XG4gICAgU2NlbmUuZ2V0U2NlbmUoZWxlbWVudHNbMF0pPy5nZXROb25EZWxldGVkRWxlbWVudHMoKT8ubGVuZ3RoID09PVxuICAgIGVsZW1lbnRzLmxlbmd0aDtcblxuICBjb25zdCBvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPSBpc09ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZShlbGVtZW50cyk7XG5cbiAgaWYgKCFpc0V4cG9ydGluZ1dob2xlQ2FudmFzIHx8IG9ubHlFeHBvcnRpbmdTaW5nbGVGcmFtZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IGVsZW1lbnRzLmZpbHRlcigoZWxlbWVudCkgPT4gZWxlbWVudC50eXBlID09PSBcImZyYW1lXCIpO1xuXG4gICAgY29uc3QgZXhwb3J0ZWRGcmFtZUlkcyA9IGZyYW1lcy5yZWR1Y2UoKGFjYywgZnJhbWUpID0+IHtcbiAgICAgIGFjY1tmcmFtZS5pZF0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB0cnVlPik7XG5cbiAgICAvLyBlbGVtZW50cyBpbiBhIGZyYW1lIGRvIG5vdCBhZmZlY3QgdGhlIGNhbnZhcyBzaXplIGlmIHdlJ3JlIG5vdCBleHBvcnRpbmdcbiAgICAvLyB0aGUgd2hvbGUgY2FudmFzXG4gICAgZWxlbWVudHMgPSBlbGVtZW50cy5maWx0ZXIoXG4gICAgICAoZWxlbWVudCkgPT4gIWV4cG9ydGVkRnJhbWVJZHNbZWxlbWVudC5mcmFtZUlkID8/IFwiXCJdLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBbbWluWCwgbWluWSwgbWF4WCwgbWF4WV0gPSBnZXRDb21tb25Cb3VuZHMoZWxlbWVudHMpO1xuICBjb25zdCB3aWR0aCA9XG4gICAgZGlzdGFuY2UobWluWCwgbWF4WCkgKyAob25seUV4cG9ydGluZ1NpbmdsZUZyYW1lID8gMCA6IGV4cG9ydFBhZGRpbmcgKiAyKTtcbiAgY29uc3QgaGVpZ2h0ID1cbiAgICBkaXN0YW5jZShtaW5ZLCBtYXhZKSArIChvbmx5RXhwb3J0aW5nU2luZ2xlRnJhbWUgPyAwIDogZXhwb3J0UGFkZGluZyAqIDIpO1xuXG4gIHJldHVybiBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwb3J0U2l6ZSA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBleHBvcnRQYWRkaW5nOiBudW1iZXIsXG4gIHNjYWxlOiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgWywgLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpLm1hcChcbiAgICAoZGltZW5zaW9uKSA9PiBNYXRoLnRydW5jKGRpbWVuc2lvbiAqIHNjYWxlKSxcbiAgKTtcblxuICByZXR1cm4gW3dpZHRoLCBoZWlnaHRdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
4909
4909
 
4910
4910
  /***/ }),
4911
4911