@excalidraw/excalidraw 0.12.0-57cc4b6 → 0.12.0-58845e4

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.
Files changed (117) hide show
  1. package/dist/excalidraw-assets/locales/de-DE-json-b972f335652b31abc478.js +1 -0
  2. package/dist/excalidraw-assets/locales/fr-FR-json-d53486b6942cd134938f.js +1 -0
  3. package/dist/excalidraw-assets/locales/gl-ES-json-24b9a50f57184ae44f99.js +1 -0
  4. package/dist/excalidraw-assets/locales/hi-IN-json-9af974be0987a846db82.js +1 -0
  5. package/dist/excalidraw-assets/locales/id-ID-json-acdf1f60176cd026af64.js +1 -0
  6. package/dist/excalidraw-assets/locales/mr-IN-json-3295641c432b154ab60f.js +1 -0
  7. package/dist/excalidraw-assets/locales/ro-RO-json-79dbe0225dfe06a010a6.js +1 -0
  8. package/dist/excalidraw-assets/locales/sk-SK-json-bd7dbe4c1e42c016fcb5.js +1 -0
  9. package/dist/excalidraw-assets/locales/tr-TR-json-75f46a2579a01cf32ba7.js +1 -0
  10. package/dist/excalidraw-assets/vendor-52b1f3361986b6c6a4fe.js +2 -0
  11. package/dist/excalidraw-assets/vendor-52b1f3361986b6c6a4fe.js.LICENSE.txt +12 -0
  12. package/dist/excalidraw-assets-dev/locales/de-DE-json-2d48c0ec0901cee81272.js +22 -0
  13. package/dist/excalidraw-assets-dev/locales/fr-FR-json-e4bbc872fed09a689b27.js +22 -0
  14. package/dist/excalidraw-assets-dev/locales/gl-ES-json-4ab7103bd7905741cf7e.js +22 -0
  15. package/dist/excalidraw-assets-dev/locales/hi-IN-json-3aba9d37f6dae9ca2445.js +22 -0
  16. package/dist/excalidraw-assets-dev/locales/id-ID-json-6d9b771568900ad6f055.js +22 -0
  17. package/dist/excalidraw-assets-dev/locales/mr-IN-json-d28b9664c21ee08d79eb.js +22 -0
  18. package/dist/excalidraw-assets-dev/locales/ro-RO-json-9ac079b4af3b20377160.js +22 -0
  19. package/dist/excalidraw-assets-dev/locales/sk-SK-json-03a80aeb3e09f77b1be6.js +22 -0
  20. package/dist/excalidraw-assets-dev/locales/tr-TR-json-30a4d84bda3152292dbe.js +22 -0
  21. package/dist/excalidraw.development.js +18 -29
  22. package/dist/excalidraw.production.min.js +1 -1
  23. package/dist/excalidraw.production.min.js.LICENSE.txt +2 -9
  24. package/package.json +6 -6
  25. package/types/actions/actionAlign.d.ts +6 -6
  26. package/types/actions/actionCanvas.d.ts +7 -7
  27. package/types/actions/actionDeleteSelected.d.ts +1 -1
  28. package/types/actions/actionDistribute.d.ts +2 -2
  29. package/types/actions/actionDuplicateSelection.d.ts +1 -1
  30. package/types/actions/actionExport.d.ts +8 -8
  31. package/types/actions/actionFinalize.d.ts +1 -1
  32. package/types/actions/actionGroup.d.ts +2 -2
  33. package/types/actions/actionMenu.d.ts +3 -3
  34. package/types/actions/actionNavigate.d.ts +1 -2
  35. package/types/actions/actionProperties.d.ts +13 -13
  36. package/types/actions/actionZindex.d.ts +4 -4
  37. package/types/analytics.d.ts +1 -1
  38. package/types/clients.d.ts +1 -1
  39. package/types/components/ActiveFile.d.ts +0 -1
  40. package/types/components/ButtonIconSelect.d.ts +0 -1
  41. package/types/components/Card.d.ts +1 -0
  42. package/types/components/CheckboxItem.d.ts +1 -0
  43. package/types/components/ClearCanvas.d.ts +0 -1
  44. package/types/components/CollabButton.d.ts +0 -1
  45. package/types/components/ColorPicker.d.ts +0 -1
  46. package/types/components/ConfirmDialog.d.ts +0 -1
  47. package/types/components/DarkModeToggle.d.ts +0 -1
  48. package/types/components/ErrorDialog.d.ts +0 -1
  49. package/types/components/HelpDialog.d.ts +0 -1
  50. package/types/components/HelpIcon.d.ts +0 -1
  51. package/types/components/HintViewer.d.ts +0 -1
  52. package/types/components/IconPicker.d.ts +0 -1
  53. package/types/components/ImageExportDialog.d.ts +0 -1
  54. package/types/components/JSONExportDialog.d.ts +0 -1
  55. package/types/components/LibraryMenu.d.ts +0 -1
  56. package/types/components/LibraryUnit.d.ts +0 -1
  57. package/types/components/LockButton.d.ts +0 -1
  58. package/types/components/Modal.d.ts +2 -2
  59. package/types/components/PenModeButton.d.ts +0 -1
  60. package/types/components/ProjectName.d.ts +0 -1
  61. package/types/components/PublishLibrary.d.ts +0 -1
  62. package/types/components/Section.d.ts +4 -5
  63. package/types/components/SidebarLockButton.d.ts +0 -1
  64. package/types/components/SingleLibraryItem.d.ts +0 -1
  65. package/types/components/Spinner.d.ts +0 -1
  66. package/types/components/Toast.d.ts +0 -1
  67. package/types/data/blob.d.ts +4 -4
  68. package/types/data/json.d.ts +1 -1
  69. package/types/element/Hyperlink.d.ts +1 -1
  70. package/types/element/binding.d.ts +3 -3
  71. package/types/element/dragElements.d.ts +1 -1
  72. package/types/element/mutateElement.d.ts +1 -1
  73. package/types/element/textElement.d.ts +1 -1
  74. package/types/element/typeChecks.d.ts +3 -3
  75. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{de-DE-json-a232bf6caee520d87426.d.ts → de-DE-json-b972f335652b31abc478.d.ts} +0 -0
  76. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{fr-FR-json-f94e85e6a2e45edfb7a1.d.ts → fr-FR-json-d53486b6942cd134938f.d.ts} +0 -0
  77. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{gl-ES-json-98ec55ba982debdf67db.d.ts → gl-ES-json-24b9a50f57184ae44f99.d.ts} +0 -0
  78. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{hi-IN-json-38796bea6fd45f65b2de.d.ts → hi-IN-json-9af974be0987a846db82.d.ts} +0 -0
  79. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{id-ID-json-f27fe10e9bc5e2ddeeb7.d.ts → id-ID-json-acdf1f60176cd026af64.d.ts} +0 -0
  80. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{mr-IN-json-0f52b0737f169f012c25.d.ts → mr-IN-json-3295641c432b154ab60f.d.ts} +0 -0
  81. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{ro-RO-json-4007d43722cf2d6b184e.d.ts → ro-RO-json-79dbe0225dfe06a010a6.d.ts} +0 -0
  82. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{sk-SK-json-8d552d584694cc87dcf6.d.ts → sk-SK-json-bd7dbe4c1e42c016fcb5.d.ts} +0 -0
  83. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{tr-TR-json-4aa6e3ed1ccebaaa06b5.d.ts → tr-TR-json-75f46a2579a01cf32ba7.d.ts} +0 -0
  84. package/types/packages/excalidraw/dist/excalidraw-assets/{vendor-a9598c709179a54ea2cd.d.ts → vendor-52b1f3361986b6c6a4fe.d.ts} +0 -0
  85. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{de-DE-json-d21d9ffe46d5e41ba95a.d.ts → de-DE-json-2d48c0ec0901cee81272.d.ts} +0 -0
  86. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{fr-FR-json-1e6cf536903ec6ed4747.d.ts → fr-FR-json-e4bbc872fed09a689b27.d.ts} +0 -0
  87. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{gl-ES-json-6ff11edae03d1b5fd04f.d.ts → gl-ES-json-4ab7103bd7905741cf7e.d.ts} +0 -0
  88. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{hi-IN-json-d6c9379a32ee84926a4d.d.ts → hi-IN-json-3aba9d37f6dae9ca2445.d.ts} +0 -0
  89. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{id-ID-json-4730b416209ed589e8c6.d.ts → id-ID-json-6d9b771568900ad6f055.d.ts} +0 -0
  90. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{mr-IN-json-5f598fe62605825bc9a2.d.ts → mr-IN-json-d28b9664c21ee08d79eb.d.ts} +0 -0
  91. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{ro-RO-json-a22375bf4159c7100363.d.ts → ro-RO-json-9ac079b4af3b20377160.d.ts} +0 -0
  92. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{sk-SK-json-92cd256e9ce72d698f24.d.ts → sk-SK-json-03a80aeb3e09f77b1be6.d.ts} +0 -0
  93. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{tr-TR-json-0ab39656399bc8670e04.d.ts → tr-TR-json-30a4d84bda3152292dbe.d.ts} +0 -0
  94. package/types/packages/excalidraw/example/App.d.ts +0 -1
  95. package/types/renderer/renderElement.d.ts +1 -1
  96. package/types/shapes.d.ts +0 -1
  97. package/types/utils.d.ts +6 -6
  98. package/dist/excalidraw-assets/locales/de-DE-json-a232bf6caee520d87426.js +0 -1
  99. package/dist/excalidraw-assets/locales/fr-FR-json-f94e85e6a2e45edfb7a1.js +0 -1
  100. package/dist/excalidraw-assets/locales/gl-ES-json-98ec55ba982debdf67db.js +0 -1
  101. package/dist/excalidraw-assets/locales/hi-IN-json-38796bea6fd45f65b2de.js +0 -1
  102. package/dist/excalidraw-assets/locales/id-ID-json-f27fe10e9bc5e2ddeeb7.js +0 -1
  103. package/dist/excalidraw-assets/locales/mr-IN-json-0f52b0737f169f012c25.js +0 -1
  104. package/dist/excalidraw-assets/locales/ro-RO-json-4007d43722cf2d6b184e.js +0 -1
  105. package/dist/excalidraw-assets/locales/sk-SK-json-8d552d584694cc87dcf6.js +0 -1
  106. package/dist/excalidraw-assets/locales/tr-TR-json-4aa6e3ed1ccebaaa06b5.js +0 -1
  107. package/dist/excalidraw-assets/vendor-a9598c709179a54ea2cd.js +0 -2
  108. package/dist/excalidraw-assets/vendor-a9598c709179a54ea2cd.js.LICENSE.txt +0 -14
  109. package/dist/excalidraw-assets-dev/locales/de-DE-json-d21d9ffe46d5e41ba95a.js +0 -22
  110. package/dist/excalidraw-assets-dev/locales/fr-FR-json-1e6cf536903ec6ed4747.js +0 -22
  111. package/dist/excalidraw-assets-dev/locales/gl-ES-json-6ff11edae03d1b5fd04f.js +0 -22
  112. package/dist/excalidraw-assets-dev/locales/hi-IN-json-d6c9379a32ee84926a4d.js +0 -22
  113. package/dist/excalidraw-assets-dev/locales/id-ID-json-4730b416209ed589e8c6.js +0 -22
  114. package/dist/excalidraw-assets-dev/locales/mr-IN-json-5f598fe62605825bc9a2.js +0 -22
  115. package/dist/excalidraw-assets-dev/locales/ro-RO-json-a22375bf4159c7100363.js +0 -22
  116. package/dist/excalidraw-assets-dev/locales/sk-SK-json-92cd256e9ce72d698f24.js +0 -22
  117. package/dist/excalidraw-assets-dev/locales/tr-TR-json-0ab39656399bc8670e04.js +0 -22
@@ -71,17 +71,6 @@ eval("/* module decorator */ module = __webpack_require__.nmd(module);\nvar __WE
71
71
 
72
72
  /***/ }),
73
73
 
74
- /***/ "../../../node_modules/object-assign/index.js":
75
- /*!****************************************************!*\
76
- !*** ../../../node_modules/object-assign/index.js ***!
77
- \****************************************************/
78
- /***/ ((module) => {
79
-
80
- "use strict";
81
- eval("/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLFFBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHNCQUFzQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzPzNlMTMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/object-assign/index.js\n");
82
-
83
- /***/ }),
84
-
85
74
  /***/ "../../../node_modules/pako/index.js":
86
75
  /*!*******************************************!*\
87
76
  !*** ../../../node_modules/pako/index.js ***!
@@ -403,7 +392,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
403
392
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
404
393
 
405
394
  "use strict";
406
- eval("/** @license React v17.0.2\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! react */ \"react\");\nvar _assign = __webpack_require__(/*! object-assign */ \"../../../node_modules/object-assign/index.js\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar REACT_ELEMENT_TYPE = 0xeac7;\nvar REACT_PORTAL_TYPE = 0xeaca;\nexports.Fragment = 0xeacb;\nvar REACT_STRICT_MODE_TYPE = 0xeacc;\nvar REACT_PROFILER_TYPE = 0xead2;\nvar REACT_PROVIDER_TYPE = 0xeacd;\nvar REACT_CONTEXT_TYPE = 0xeace;\nvar REACT_FORWARD_REF_TYPE = 0xead0;\nvar REACT_SUSPENSE_TYPE = 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = 0xead8;\nvar REACT_MEMO_TYPE = 0xead3;\nvar REACT_LAZY_TYPE = 0xead4;\nvar REACT_BLOCK_TYPE = 0xead9;\nvar REACT_SERVER_BLOCK_TYPE = 0xeada;\nvar REACT_FUNDAMENTAL_TYPE = 0xead5;\nvar REACT_SCOPE_TYPE = 0xead7;\nvar REACT_OPAQUE_ID_TYPE = 0xeae0;\nvar REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;\nvar REACT_OFFSCREEN_TYPE = 0xeae2;\nvar REACT_LEGACY_HIDDEN_TYPE = 0xeae3;\n\nif (typeof Symbol === 'function' && Symbol.for) {\n var symbolFor = Symbol.for;\n REACT_ELEMENT_TYPE = symbolFor('react.element');\n REACT_PORTAL_TYPE = symbolFor('react.portal');\n exports.Fragment = symbolFor('react.fragment');\n REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode');\n REACT_PROFILER_TYPE = symbolFor('react.profiler');\n REACT_PROVIDER_TYPE = symbolFor('react.provider');\n REACT_CONTEXT_TYPE = symbolFor('react.context');\n REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref');\n REACT_SUSPENSE_TYPE = symbolFor('react.suspense');\n REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list');\n REACT_MEMO_TYPE = symbolFor('react.memo');\n REACT_LAZY_TYPE = symbolFor('react.lazy');\n REACT_BLOCK_TYPE = symbolFor('react.block');\n REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block');\n REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental');\n REACT_SCOPE_TYPE = symbolFor('react.scope');\n REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id');\n REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode');\n REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen');\n REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');\n}\n\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n }\n\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// Filter certain DOM attributes (e.g. src, href) if their values are empty strings.\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === exports.Fragment || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case exports.Fragment:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_BLOCK_TYPE:\n return getComponentName(type._render);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentName(init(payload));\n } catch (x) {\n return null;\n }\n }\n }\n }\n\n return null;\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: _assign({}, props, {\n value: prevLog\n }),\n info: _assign({}, props, {\n value: prevInfo\n }),\n warn: _assign({}, props, {\n value: prevWarn\n }),\n error: _assign({}, props, {\n value: prevError\n }),\n group: _assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: _assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: _assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at ');\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_BLOCK_TYPE:\n return describeFunctionComponentFrame(type._render);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentName(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentName(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentName(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentName(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentName(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (Array.isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentName(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n if (type === exports.Fragment) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViLElBQUksSUFBcUM7QUFDekM7QUFDQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsb0JBQU87QUFDM0IsY0FBYyxtQkFBTyxDQUFDLG1FQUFlOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxnQkFBZ0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsK0ZBQStGLGVBQWU7QUFDOUc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVIsa0RBQWtEO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJIQUEySDtBQUMzSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9FQUFvRTs7QUFFcEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztB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QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLDRDQUE0Qzs7QUFFNUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6Qjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMERBQTBEO0FBQzFEOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7O0FBRUE7O0FBRUEsV0FBVztBQUNYLFlBQVk7QUFDWixHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcz9mYzVjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbmV4cG9ydHMuRnJhZ21lbnQgPSAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIGV4cG9ydHMuRnJhZ21lbnQgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IFJlYWN0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuXG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgZGlzYWJsZWREZXB0aCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBkaXNhYmxlZERlcHRoLS07XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgICB9KSxcbiAgICAgICAgd2FybjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IG51bGw7XG4gICAgZGlzYWJsZUxvZ3MoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH07IC8vICRGbG93Rml4TWVcblxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH1cbiAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbC5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICBjLS07XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duO1xudmFyIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSksIGNvbmZpZy5yZWYpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAge1xuICAgIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAge1xuICAgIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGByZWZgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUmVhY3QgZWxlbWVudC4gVGhpcyBubyBsb25nZXIgYWRoZXJlcyB0b1xuICogdGhlIGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRvIGNhbGwgaXQuIEFsc28sIGluc3RhbmNlb2YgY2hlY2tcbiAqIHdpbGwgbm90IHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0gcHJvcHNcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQGludGVybmFsXG4gKi9cblxuXG52YXIgUmVhY3RFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICB2YXIgZWxlbWVudCA9IHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvd3MgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IEVsZW1lbnRcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICAgIF9vd25lcjogb3duZXJcbiAgfTtcblxuICB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307IC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXG4gICAgLy8gaWdub3JlcyBpdC5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlkYXRlZCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZhbHNlXG4gICAgfSk7IC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc2VsZlxuICAgIH0pOyAvLyBUd28gZWxlbWVudHMgY3JlYXRlZCBpbiB0d28gZGlmZmVyZW50IHBsYWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZFxuICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNvdXJjZVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufTtcbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzEwN1xuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuXG5mdW5jdGlvbiBqc3hERVYodHlwZSwgY29uZmlnLCBtYXliZUtleSwgc291cmNlLCBzZWxmKSB7XG4gIHtcbiAgICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHZhciBrZXkgPSBudWxsO1xuICAgIHZhciByZWYgPSBudWxsOyAvLyBDdXJyZW50bHksIGtleSBjYW4gYmUgc3ByZWFkIGluIGFzIGEgcHJvcC4gVGhpcyBjYXVzZXMgYSBwb3RlbnRpYWxcbiAgICAvLyBpc3N1ZSBpZiBrZXkgaXMgYWxzbyBleHBsaWNpdGx5IGRlY2xhcmVkIChpZS4gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz5cbiAgICAvLyBvciA8ZGl2IGtleT1cIkhpXCIgey4uLnByb3BzfSAvPiApLiBXZSB3YW50IHRvIGRlcHJlY2F0ZSBrZXkgc3ByZWFkLFxuICAgIC8vIGJ1dCBhcyBhbiBpbnRlcm1lZGlhcnkgc3RlcCwgd2Ugd2lsbCB1c2UganN4REVWIGZvciBldmVyeXRoaW5nIGV4Y2VwdFxuICAgIC8vIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+LCBiZWNhdXNlIHdlIGFyZW4ndCBjdXJyZW50bHkgYWJsZSB0byB0ZWxsIGlmXG4gICAgLy8ga2V5IGlzIGV4cGxpY2l0bHkgZGVjbGFyZWQgdG8gYmUgdW5kZWZpbmVkIG9yIG5vdC5cblxuICAgIGlmIChtYXliZUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBrZXkgPSAnJyArIG1heWJlS2V5O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LCBwcm9wcyk7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duO1xuXG57XG4gIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gZmFsc2U7XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHtcbiAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50KSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICB7XG4gICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICB2YXIgcGFyZW50TmFtZSA9IHR5cGVvZiBwYXJlbnRUeXBlID09PSAnc3RyaW5nJyA/IHBhcmVudFR5cGUgOiBwYXJlbnRUeXBlLmRpc3BsYXlOYW1lIHx8IHBhcmVudFR5cGUubmFtZTtcblxuICAgICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmZvO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG5cbiAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gICAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuXG4gICAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQpIHtcbiAgICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxuICAgICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcblxuICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLlxuICAgICAgaWYgKG5vZGUuX3N0b3JlKSB7XG4gICAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBzb3VyY2UsIHNlbGYpIHtcbiAge1xuICAgIHZhciB2YWxpZFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSk7IC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gICAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci5cblxuICAgIGlmICghdmFsaWRUeXBlKSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSk7XG5cbiAgICAgIGlmIChzb3VyY2VJbmZvKSB7XG4gICAgICAgIGluZm8gKz0gc291cmNlSW5mbztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluZm8gKz0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICB0eXBlU3RyaW5nID0gJ251bGwnO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICAgIGluZm8gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudCA9IGpzeERFVih0eXBlLCBwcm9wcywga2V5LCBzb3VyY2UsIHNlbGYpOyAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLlxuICAgIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gICAgLy8gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZCBwcm9kLlxuICAgIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gICAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgICBpZiAodmFsaWRUeXBlKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcblxuICAgICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW5baV0sIHR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50KSB7XG4gICAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59IC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgZXhpc3QgdG8gc3RpbGwgZ2V0IGNoaWxkIHdhcm5pbmdzIGluIGRldlxuLy8gZXZlbiB3aXRoIHRoZSBwcm9kIHRyYW5zZm9ybS4gVGhpcyBtZWFucyB0aGF0IGpzeERFViBpcyBwdXJlbHlcbi8vIG9wdC1pbiBiZWhhdmlvciBmb3IgYmV0dGVyIG1lc3NhZ2VzIGJ1dCB0aGF0IHdlIHdvbid0IHN0b3Bcbi8vIGdpdmluZyB5b3Ugd2FybmluZ3MgaWYgeW91IHVzZSBwcm9kdWN0aW9uIGFwaXMuXG5cbmZ1bmN0aW9uIGpzeFdpdGhWYWxpZGF0aW9uU3RhdGljKHR5cGUsIHByb3BzLCBrZXkpIHtcbiAge1xuICAgIHJldHVybiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb25EeW5hbWljKHR5cGUsIHByb3BzLCBrZXkpIHtcbiAge1xuICAgIHJldHVybiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCBmYWxzZSk7XG4gIH1cbn1cblxudmFyIGpzeCA9ICBqc3hXaXRoVmFsaWRhdGlvbkR5bmFtaWMgOyAvLyB3ZSBtYXkgd2FudCB0byBzcGVjaWFsIGNhc2UganN4cyBpbnRlcm5hbGx5IHRvIHRha2UgYWR2YW50YWdlIG9mIHN0YXRpYyBjaGlsZHJlbi5cbi8vIGZvciBub3cgd2UgY2FuIHNoaXAgaWRlbnRpY2FsIHByb2QgZnVuY3Rpb25zXG5cbnZhciBqc3hzID0gIGpzeFdpdGhWYWxpZGF0aW9uU3RhdGljIDtcblxuZXhwb3J0cy5qc3ggPSBqc3g7XG5leHBvcnRzLmpzeHMgPSBqc3hzO1xuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/react/cjs/react-jsx-runtime.development.js\n");
395
+ eval("/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! react */ \"react\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6QztBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxvQkFBTzs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpR0FBaUcsZUFBZTtBQUNoSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSLGtEQUFrRDtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw0QkFBNEI7QUFDNUI7QUFDQSxxQ0FBcUM7O0FBRXJDLGdDQUFnQztBQUNoQztBQUNBOztBQUVBLGdDQUFnQzs7QUFFaEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFD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QTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2QsV0FBVyxlQUFlO0FBQzFCLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssR0FBRzs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7O0FBRUE7QUFDQTtBQUNBLGtC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QTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixxQkFBcUI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDO0FBQ3RDOztBQUVBOztBQUVBLGdCQUFnQjtBQUNoQixXQUFXO0FBQ1gsWUFBWTtBQUNaLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzP2ZjNWMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXG5cbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXG4vLyBzdHVmZi4gSW50ZW5kZWQgdG8gZW5hYmxlIFJlYWN0IGNvcmUgbWVtYmVycyB0byBtb3JlIGVhc2lseSBkZWJ1ZyBzY2hlZHVsaW5nXG4vLyBpc3N1ZXMgaW4gREVWIGJ1aWxkcy5cblxudmFyIGVuYWJsZURlYnVnVHJhY2luZyA9IGZhbHNlOyAvLyBUcmFjayB3aGljaCBGaWJlcihzKSBzY2hlZHVsZSByZW5kZXIgd29yay5cblxudmFyIFJFQUNUX01PRFVMRV9SRUZFUkVOQ0U7XG5cbntcbiAgUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1vZHVsZS5yZWZlcmVuY2UnKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBUaGlzIG5lZWRzIHRvIGluY2x1ZGUgYWxsIHBvc3NpYmxlIG1vZHVsZSByZWZlcmVuY2Ugb2JqZWN0XG4gICAgLy8gdHlwZXMgc3VwcG9ydGVkIGJ5IGFueSBGbGlnaHQgY29uZmlndXJhdGlvbiBhbnl3aGVyZSBzaW5jZVxuICAgIC8vIHdlIGRvbid0IGtub3cgd2hpY2ggRmxpZ2h0IGJ1aWxkIHRoaXMgd2lsbCBlbmQgdXAgYmVpbmcgdXNlZFxuICAgIC8vIHdpdGguXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBkaXNwbGF5TmFtZSA9IG91dGVyVHlwZS5kaXNwbGF5TmFtZTtcblxuICBpZiAoZGlzcGxheU5hbWUpIHtcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XG4gIH1cblxuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lO1xufSAvLyBLZWVwIGluIHN5bmMgd2l0aCByZWFjdC1yZWNvbmNpbGVyL2dldENvbXBvbmVudE5hbWVGcm9tRmliZXJcblxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn0gLy8gTm90ZSB0aGF0IHRoZSByZWNvbmNpbGVyIHBhY2thZ2Ugc2hvdWxkIGdlbmVyYWxseSBwcmVmZXIgdG8gdXNlIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoKSBpbnN0ZWFkLlxuXG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG5cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICB2YXIgb3V0ZXJOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsO1xuXG4gICAgICAgIGlmIChvdXRlck5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gb3V0ZXJOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdNZW1vJztcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoICFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTsgLy8gSWYgb3VyIGNvbXBvbmVudCBmcmFtZSBpcyBsYWJlbGVkIFwiPGFub255bW91cz5cIlxuICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBoYXZlIGEgdXNlci1wcm92aWRlZCBcImRpc3BsYXlOYW1lXCJcbiAgICAgICAgICAgICAgICAvLyBzcGxpY2UgaXQgaW4gdG8gbWFrZSB0aGUgc3RhY2sgbW9yZSByZWFkYWJsZS5cblxuXG4gICAgICAgICAgICAgICAgaWYgKGZuLmRpc3BsYXlOYW1lICYmIF9mcmFtZS5pbmNsdWRlcygnPGFub255bW91cz4nKSkge1xuICAgICAgICAgICAgICAgICAgX2ZyYW1lID0gX2ZyYW1lLnJlcGxhY2UoJzxhbm9ueW1vdXM+JywgZm4uZGlzcGxheU5hbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKGhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgKyAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJyk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvciQxID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciQxID0gZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSAmJiAhKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IkMS5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvciQxLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCdGYWlsZWQgJXMgdHlwZTogJXMnLCBsb2NhdGlvbiwgZXJyb3IkMS5tZXNzYWdlKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcblxuZnVuY3Rpb24gaXNBcnJheShhKSB7XG4gIHJldHVybiBpc0FycmF5SW1wbChhKTtcbn1cblxuLypcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXG4gKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXG4gKi9cbi8vICRGbG93Rml4TWUgb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICB7XG4gICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnO1xuICAgIHJldHVybiB0eXBlO1xuICB9XG59IC8vICRGbG93Rml4TWUgb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5cblxuZnVuY3Rpb24gd2lsbENvZXJjaW9uVGhyb3codmFsdWUpIHtcbiAge1xuICAgIHRyeSB7XG4gICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgLy8gSWYgeW91IGVuZGVkIHVwIGhlcmUgYnkgZm9sbG93aW5nIGFuIGV4Y2VwdGlvbiBjYWxsIHN0YWNrLCBoZXJlJ3Mgd2hhdCdzXG4gIC8vIGhhcHBlbmVkOiB5b3Ugc3VwcGxpZWQgYW4gb2JqZWN0IG9yIHN5bWJvbCB2YWx1ZSB0byBSZWFjdCAoYXMgYSBwcm9wLCBrZXksXG4gIC8vIERPTSBhdHRyaWJ1dGUsIENTUyBwcm9wZXJ0eSwgc3RyaW5nIHJlZiwgZXRjLikgYW5kIHdoZW4gUmVhY3QgdHJpZWQgdG9cbiAgLy8gY29lcmNlIGl0IHRvIGEgc3RyaW5nIHVzaW5nIGAnJyArIHZhbHVlYCwgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24uXG4gIC8vXG4gIC8vIFRoZSBtb3N0IGNvbW1vbiB0eXBlcyB0aGF0IHdpbGwgY2F1c2UgdGhpcyBleGNlcHRpb24gYXJlIGBTeW1ib2xgIGluc3RhbmNlc1xuICAvLyBhbmQgVGVtcG9yYWwgb2JqZWN0cyBsaWtlIGBUZW1wb3JhbC5JbnN0YW50YC4gQnV0IGFueSBvYmplY3QgdGhhdCBoYXMgYVxuICAvLyBgdmFsdWVPZmAgb3IgYFtTeW1ib2wudG9QcmltaXRpdmVdYCBtZXRob2QgdGhhdCB0aHJvd3Mgd2lsbCBhbHNvIGNhdXNlIHRoaXNcbiAgLy8gZXhjZXB0aW9uLiAoTGlicmFyeSBhdXRob3JzIGRvIHRoaXMgdG8gcHJldmVudCB1c2VycyBmcm9tIHVzaW5nIGJ1aWx0LWluXG4gIC8vIG51bWVyaWMgb3BlcmF0b3JzIGxpa2UgYCtgIG9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIGxpa2UgYD49YCBiZWNhdXNlIGN1c3RvbVxuICAvLyBtZXRob2RzIGFyZSBuZWVkZWQgdG8gcGVyZm9ybSBhY2N1cmF0ZSBhcml0aG1ldGljIG9yIGNvbXBhcmlzb24uKVxuICAvL1xuICAvLyBUbyBmaXggdGhlIHByb2JsZW0sIGNvZXJjZSB0aGlzIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcgYmVmb3JlXG4gIC8vIHBhc3NpbmcgaXQgdG8gUmVhY3QuIFRoZSBtb3N0IHJlbGlhYmxlIHdheSBpcyB1c3VhbGx5IGBTdHJpbmcodmFsdWUpYC5cbiAgLy9cbiAgLy8gVG8gZmluZCB3aGljaCB2YWx1ZSBpcyB0aHJvd2luZywgY2hlY2sgdGhlIGJyb3dzZXIgb3IgZGVidWdnZXIgY29uc29sZS5cbiAgLy8gQmVmb3JlIHRoaXMgZXhjZXB0aW9uIHdhcyB0aHJvd24sIHRoZXJlIHNob3VsZCBiZSBgY29uc29sZS5lcnJvcmAgb3V0cHV0XG4gIC8vIHRoYXQgc2hvd3MgdGhlIHR5cGUgKFN5bWJvbCwgVGVtcG9yYWwuUGxhaW5EYXRlLCBldGMuKSB0aGF0IGNhdXNlZCB0aGVcbiAgLy8gcHJvYmxlbSBhbmQgaG93IHRoYXQgdHlwZSB3YXMgdXNlZDoga2V5LCBhdHJyaWJ1dGUsIGlucHV0IHZhbHVlIHByb3AsIGV0Yy5cbiAgLy8gSW4gbW9zdCBjYXNlcywgdGhpcyBjb25zb2xlIG91dHB1dCBhbHNvIHNob3dzIHRoZSBjb21wb25lbnQgYW5kIGl0c1xuICAvLyBhbmNlc3RvciBjb21wb25lbnRzIHdoZXJlIHRoZSBleGNlcHRpb24gaGFwcGVuZWQuXG4gIC8vXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuICByZXR1cm4gJycgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAge1xuICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcbiAgICAgIGVycm9yKCdUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuJyArICcgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSRVNFUlZFRF9QUk9QUyA9IHtcbiAga2V5OiB0cnVlLFxuICByZWY6IHRydWUsXG4gIF9fc2VsZjogdHJ1ZSxcbiAgX19zb3VyY2U6IHRydWVcbn07XG52YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd247XG52YXIgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd247XG52YXIgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcsIHNlbGYpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY29uZmlnLnJlZiA9PT0gJ3N0cmluZycgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCAmJiBzZWxmICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuc3RhdGVOb2RlICE9PSBzZWxmKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiAnICsgJ1N1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiAnICsgJ1RoaXMgY2FzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb24uICcgKyAnV2UgYXNrIHlvdSB0byBtYW51YWxseSBmaXggdGhpcyBjYXNlIGJ5IHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSksIGNvbmZpZy5yZWYpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAge1xuICAgIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAge1xuICAgIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGByZWZgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUmVhY3QgZWxlbWVudC4gVGhpcyBubyBsb25nZXIgYWRoZXJlcyB0b1xuICogdGhlIGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRvIGNhbGwgaXQuIEFsc28sIGluc3RhbmNlb2YgY2hlY2tcbiAqIHdpbGwgbm90IHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0gcHJvcHNcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQGludGVybmFsXG4gKi9cblxuXG52YXIgUmVhY3RFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICB2YXIgZWxlbWVudCA9IHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvd3MgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IEVsZW1lbnRcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICAgIF9vd25lcjogb3duZXJcbiAgfTtcblxuICB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307IC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXG4gICAgLy8gaWdub3JlcyBpdC5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlkYXRlZCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZhbHNlXG4gICAgfSk7IC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc2VsZlxuICAgIH0pOyAvLyBUd28gZWxlbWVudHMgY3JlYXRlZCBpbiB0d28gZGlmZmVyZW50IHBsYWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZFxuICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNvdXJjZVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufTtcbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzEwN1xuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuXG5mdW5jdGlvbiBqc3hERVYodHlwZSwgY29uZmlnLCBtYXliZUtleSwgc291cmNlLCBzZWxmKSB7XG4gIHtcbiAgICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHZhciBrZXkgPSBudWxsO1xuICAgIHZhciByZWYgPSBudWxsOyAvLyBDdXJyZW50bHksIGtleSBjYW4gYmUgc3ByZWFkIGluIGFzIGEgcHJvcC4gVGhpcyBjYXVzZXMgYSBwb3RlbnRpYWxcbiAgICAvLyBpc3N1ZSBpZiBrZXkgaXMgYWxzbyBleHBsaWNpdGx5IGRlY2xhcmVkIChpZS4gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz5cbiAgICAvLyBvciA8ZGl2IGtleT1cIkhpXCIgey4uLnByb3BzfSAvPiApLiBXZSB3YW50IHRvIGRlcHJlY2F0ZSBrZXkgc3ByZWFkLFxuICAgIC8vIGJ1dCBhcyBhbiBpbnRlcm1lZGlhcnkgc3RlcCwgd2Ugd2lsbCB1c2UganN4REVWIGZvciBldmVyeXRoaW5nIGV4Y2VwdFxuICAgIC8vIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+LCBiZWNhdXNlIHdlIGFyZW4ndCBjdXJyZW50bHkgYWJsZSB0byB0ZWxsIGlmXG4gICAgLy8ga2V5IGlzIGV4cGxpY2l0bHkgZGVjbGFyZWQgdG8gYmUgdW5kZWZpbmVkIG9yIG5vdC5cblxuICAgIGlmIChtYXliZUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24obWF5YmVLZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIG1heWJlS2V5O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcsIHNlbGYpO1xuICAgIH0gLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxuXG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH0gLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG5cblxuICAgIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XG5cbiAgICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd247XG5cbntcbiAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSBmYWxzZTtcbn1cbi8qKlxuICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgUmVhY3RFbGVtZW50LlxuICogQGZpbmFsXG4gKi9cblxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICB7XG4gICAgaWYgKFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCkge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICB7XG4gICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICB2YXIgcGFyZW50TmFtZSA9IHR5cGVvZiBwYXJlbnRUeXBlID09PSAnc3RyaW5nJyA/IHBhcmVudFR5cGUgOiBwYXJlbnRUeXBlLmRpc3BsYXlOYW1lIHx8IHBhcmVudFR5cGUubmFtZTtcblxuICAgICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmZvO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG5cbiAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gICAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuXG4gICAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQpIHtcbiAgICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxuICAgICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGVsZW1lbnQuX293bmVyLnR5cGUpICsgXCIuXCI7XG4gICAgfVxuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sIGNoaWxkT3duZXIpO1xuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkobm9kZSkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuXG4gICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNoaWxkLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQobm9kZSkpIHtcbiAgICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXG4gICAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgICAgbm9kZS5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcbiAgICAgICAgLy8gYnV0IG5vdyB3ZSBwcmludCBhIHNlcGFyYXRlIHdhcm5pbmcgZm9yIHRoZW0gbGF0ZXIuXG4gICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBub2RlLmVudHJpZXMpIHtcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG5cbiAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShzdGVwLnZhbHVlLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9sbG93IHRoZSBwcm9wVHlwZXMgZGVmaW5pdGlvbixcbiAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgIGlmICh0eXBlID09PSBudWxsIHx8IHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFR5cGVzO1xuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBOb3RlOiBNZW1vIG9ubHkgY2hlY2tzIG91dGVyIHByb3BzIGhlcmUuXG4gICAgLy8gSW5uZXIgcHJvcHMgYXJlIGNoZWNrZWQgaW4gdGhlIHJlY29uY2lsZXIuXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSkge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLlByb3BUeXBlcyAhPT0gdW5kZWZpbmVkICYmICFwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bikge1xuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuXG4gICAgICB2YXIgX25hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBzb3VyY2UsIHNlbGYpIHtcbiAge1xuICAgIHZhciB2YWxpZFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSk7IC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gICAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci5cblxuICAgIGlmICghdmFsaWRUeXBlKSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSk7XG5cbiAgICAgIGlmIChzb3VyY2VJbmZvKSB7XG4gICAgICAgIGluZm8gKz0gc291cmNlSW5mbztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluZm8gKz0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICB0eXBlU3RyaW5nID0gJ251bGwnO1xuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHR5cGUpKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCAnVW5rbm93bicpICsgXCIgLz5cIjtcbiAgICAgICAgaW5mbyA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVvZiB0eXBlO1xuICAgICAgfVxuXG4gICAgICBlcnJvcignUmVhY3QuanN4OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGVTdHJpbmcsIGluZm8pO1xuICAgIH1cblxuICAgIHZhciBlbGVtZW50ID0ganN4REVWKHR5cGUsIHByb3BzLCBrZXksIHNvdXJjZSwgc2VsZik7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gICAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAgIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy5cbiAgICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gICAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pXG5cblxuICAgIGlmICh2YWxpZFR5cGUpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuXG4gICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaXNTdGF0aWNDaGlsZHJlbikge1xuICAgICAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbltpXSwgdHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcignUmVhY3QuanN4OiBTdGF0aWMgY2hpbGRyZW4gc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheS4gJyArICdZb3UgYXJlIGxpa2VseSBleHBsaWNpdGx5IGNhbGxpbmcgUmVhY3QuanN4cyBvciBSZWFjdC5qc3hERVYuICcgKyAnVXNlIHRoZSBCYWJlbCB0cmFuc2Zvcm0gaW5zdGVhZC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW4sIHR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn0gLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBleGlzdCB0byBzdGlsbCBnZXQgY2hpbGQgd2FybmluZ3MgaW4gZGV2XG4vLyBldmVuIHdpdGggdGhlIHByb2QgdHJhbnNmb3JtLiBUaGlzIG1lYW5zIHRoYXQganN4REVWIGlzIHB1cmVseVxuLy8gb3B0LWluIGJlaGF2aW9yIGZvciBiZXR0ZXIgbWVzc2FnZXMgYnV0IHRoYXQgd2Ugd29uJ3Qgc3RvcFxuLy8gZ2l2aW5nIHlvdSB3YXJuaW5ncyBpZiB5b3UgdXNlIHByb2R1Y3Rpb24gYXBpcy5cblxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb25TdGF0aWModHlwZSwgcHJvcHMsIGtleSkge1xuICB7XG4gICAgcmV0dXJuIGpzeFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBrZXksIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBqc3hXaXRoVmFsaWRhdGlvbkR5bmFtaWModHlwZSwgcHJvcHMsIGtleSkge1xuICB7XG4gICAgcmV0dXJuIGpzeFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBrZXksIGZhbHNlKTtcbiAgfVxufVxuXG52YXIganN4ID0gIGpzeFdpdGhWYWxpZGF0aW9uRHluYW1pYyA7IC8vIHdlIG1heSB3YW50IHRvIHNwZWNpYWwgY2FzZSBqc3hzIGludGVybmFsbHkgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygc3RhdGljIGNoaWxkcmVuLlxuLy8gZm9yIG5vdyB3ZSBjYW4gc2hpcCBpZGVudGljYWwgcHJvZCBmdW5jdGlvbnNcblxudmFyIGpzeHMgPSAganN4V2l0aFZhbGlkYXRpb25TdGF0aWMgO1xuXG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuanN4ID0ganN4O1xuZXhwb3J0cy5qc3hzID0ganN4cztcbiAgfSkoKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/react/cjs/react-jsx-runtime.development.js\n");
407
396
 
408
397
  /***/ }),
409
398
 
@@ -1490,7 +1479,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1490
1479
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
1491
1480
 
1492
1481
  "use strict";
1493
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/sourceMaps.js */ \"./node_modules/css-loader/dist/runtime/sourceMaps.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".excalidraw .popover {\\n position: absolute;\\n z-index: 10;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../components/Popover.scss\"],\"names\":[],\"mappings\":\"AACE;EACE,kBAAA;EACA,WAAA;AAAJ\",\"sourcesContent\":[\".excalidraw {\\n .popover {\\n position: absolute;\\n z-index: 10;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1swXS51c2VbMl0hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vY29tcG9uZW50cy9Qb3BvdmVyLnNjc3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUM4SDtBQUNqQjtBQUM3Ryw4QkFBOEIsdUdBQTJCLENBQUMsZ0hBQXFDO0FBQy9GO0FBQ0EsZ0VBQWdFLHVCQUF1QixnQkFBZ0IsR0FBRyxPQUFPLGdHQUFnRyxXQUFXLFVBQVUsc0NBQXNDLGNBQWMseUJBQXlCLGtCQUFrQixLQUFLLEdBQUcscUJBQXFCO0FBQ2xXO0FBQ0EsaUVBQWUsdUJBQXVCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9Qb3BvdmVyLnNjc3M/NjllZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vcGFja2FnZXMvZXhjYWxpZHJhdy9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vcGFja2FnZXMvZXhjYWxpZHJhdy9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuZXhjYWxpZHJhdyAucG9wb3ZlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB6LWluZGV4OiAxMDtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vLi4vLi4vY29tcG9uZW50cy9Qb3BvdmVyLnNjc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQ0U7RUFDRSxrQkFBQTtFQUNBLFdBQUE7QUFBSlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuZXhjYWxpZHJhdyB7XFxuICAucG9wb3ZlciB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgei1pbmRleDogMTA7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].use[2]!./node_modules/sass-loader/dist/cjs.js!../../components/Popover.scss\n");
1482
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/sourceMaps.js */ \"./node_modules/css-loader/dist/runtime/sourceMaps.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../packages/excalidraw/node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _packages_excalidraw_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_excalidraw_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".excalidraw .popover {\\n position: absolute;\\n z-index: 10;\\n padding: 5px 0 5px;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../components/Popover.scss\"],\"names\":[],\"mappings\":\"AACE;EACE,kBAAA;EACA,WAAA;EACA,kBAAA;AAAJ\",\"sourcesContent\":[\".excalidraw {\\n .popover {\\n position: absolute;\\n z-index: 10;\\n padding: 5px 0 5px;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1swXS51c2VbMl0hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vY29tcG9uZW50cy9Qb3BvdmVyLnNjc3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUM4SDtBQUNqQjtBQUM3Ryw4QkFBOEIsdUdBQTJCLENBQUMsZ0hBQXFDO0FBQy9GO0FBQ0EsZ0VBQWdFLHVCQUF1QixnQkFBZ0IsdUJBQXVCLEdBQUcsT0FBTyxnR0FBZ0csV0FBVyxVQUFVLFdBQVcsc0NBQXNDLGNBQWMseUJBQXlCLGtCQUFrQix5QkFBeUIsS0FBSyxHQUFHLHFCQUFxQjtBQUM3WjtBQUNBLGlFQUFlLHVCQUF1QixFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbXBvbmVudHMvUG9wb3Zlci5zY3NzPzY5ZWYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL3BhY2thZ2VzL2V4Y2FsaWRyYXcvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uL3BhY2thZ2VzL2V4Y2FsaWRyYXcvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLmV4Y2FsaWRyYXcgLnBvcG92ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgei1pbmRleDogMTA7XFxuICBwYWRkaW5nOiA1cHggMCA1cHg7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uLy4uLy4uL2NvbXBvbmVudHMvUG9wb3Zlci5zY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUNFO0VBQ0Usa0JBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7QUFBSlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuZXhjYWxpZHJhdyB7XFxuICAucG9wb3ZlciB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgei1pbmRleDogMTA7XFxuICAgIHBhZGRpbmc6IDVweCAwIDVweDtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].use[2]!./node_modules/sass-loader/dist/cjs.js!../../components/Popover.scss\n");
1494
1483
 
1495
1484
  /***/ }),
1496
1485
 
@@ -2040,7 +2029,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2040
2029
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2041
2030
 
2042
2031
  "use strict";
2043
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"trackEvent\": () => (/* binding */ trackEvent)\n/* harmony export */ });\nvar _a, _b;\nconst trackEvent = typeof process !== \"undefined\" &&\n ((_a = ({\"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\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.12.0-57cc4b6\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.REACT_APP_GOOGLE_ANALYTICS_ID) &&\n typeof window !== \"undefined\" &&\n window.gtag\n ? (category, action, label, value) => {\n try {\n window.gtag(\"event\", action, {\n event_category: category,\n event_label: label,\n value,\n });\n }\n catch (error) {\n console.error(\"error logging to ga\", error);\n }\n }\n : typeof process !== \"undefined\" && ((_b = ({\"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\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.12.0-57cc4b6\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _b === void 0 ? void 0 : _b.JEST_WORKER_ID)\n ? (category, action, label, value) => { }\n : (category, action, label, value) => {\n // Uncomment the next line to track locally\n // console.log(\"Track Event\", { category, action, label, value });\n };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sTUFBTSxVQUFVLEdBQ3JCLE9BQU8sT0FBTyxLQUFLLFdBQVc7S0FDOUIsaTRCQUFXLDBDQUFFLDZCQUE2QjtJQUMxQyxPQUFPLE1BQU0sS0FBSyxXQUFXO0lBQzdCLE1BQU0sQ0FBQyxJQUFJO0lBQ1QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQ25FLElBQUk7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7Z0JBQzNCLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixXQUFXLEVBQUUsS0FBSztnQkFDbEIsS0FBSzthQUNOLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLEtBQUksaTRCQUFXLDBDQUFFLGNBQWM7UUFDL0QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFLEdBQUUsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxLQUFjLEVBQUUsS0FBYyxFQUFFLEVBQUU7WUFDbkUsMkNBQTJDO1lBQzNDLGtFQUFrRTtRQUNwRSxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vYW5hbHl0aWNzLnRzPzVmMGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRyYWNrRXZlbnQgPVxuICB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICBwcm9jZXNzLmVudj8uUkVBQ1RfQVBQX0dPT0dMRV9BTkFMWVRJQ1NfSUQgJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICB3aW5kb3cuZ3RhZ1xuICAgID8gKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3aW5kb3cuZ3RhZyhcImV2ZW50XCIsIGFjdGlvbiwge1xuICAgICAgICAgICAgZXZlbnRfY2F0ZWdvcnk6IGNhdGVnb3J5LFxuICAgICAgICAgICAgZXZlbnRfbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIGxvZ2dpbmcgdG8gZ2FcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgOiB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudj8uSkVTVF9XT1JLRVJfSURcbiAgICA/IChjYXRlZ29yeTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHZhbHVlPzogbnVtYmVyKSA9PiB7fVxuICAgIDogKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gdHJhY2sgbG9jYWxseVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlRyYWNrIEV2ZW50XCIsIHsgY2F0ZWdvcnksIGFjdGlvbiwgbGFiZWwsIHZhbHVlIH0pO1xuICAgICAgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../analytics.ts\n");
2032
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"trackEvent\": () => (/* binding */ trackEvent)\n/* harmony export */ });\nvar _a, _b;\nconst trackEvent = typeof process !== \"undefined\" &&\n ((_a = ({\"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\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.12.0-58845e4\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.REACT_APP_GOOGLE_ANALYTICS_ID) &&\n typeof window !== \"undefined\" &&\n window.gtag\n ? (category, action, label, value) => {\n try {\n window.gtag(\"event\", action, {\n event_category: category,\n event_label: label,\n value,\n });\n }\n catch (error) {\n console.error(\"error logging to ga\", error);\n }\n }\n : typeof process !== \"undefined\" && ((_b = ({\"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\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.12.0-58845e4\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _b === void 0 ? void 0 : _b.JEST_WORKER_ID)\n ? (category, action, label, value) => { }\n : (category, action, label, value) => {\n // Uncomment the next line to track locally\n // console.log(\"Track Event\", { category, action, label, value });\n };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sTUFBTSxVQUFVLEdBQ3JCLE9BQU8sT0FBTyxLQUFLLFdBQVc7S0FDOUIsaTRCQUFXLDBDQUFFLDZCQUE2QjtJQUMxQyxPQUFPLE1BQU0sS0FBSyxXQUFXO0lBQzdCLE1BQU0sQ0FBQyxJQUFJO0lBQ1QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQ25FLElBQUk7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7Z0JBQzNCLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixXQUFXLEVBQUUsS0FBSztnQkFDbEIsS0FBSzthQUNOLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLEtBQUksaTRCQUFXLDBDQUFFLGNBQWM7UUFDL0QsQ0FBQyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYyxFQUFFLEtBQWMsRUFBRSxFQUFFLEdBQUUsQ0FBQztRQUMxRSxDQUFDLENBQUMsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxLQUFjLEVBQUUsS0FBYyxFQUFFLEVBQUU7WUFDbkUsMkNBQTJDO1lBQzNDLGtFQUFrRTtRQUNwRSxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vYW5hbHl0aWNzLnRzPzVmMGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRyYWNrRXZlbnQgPVxuICB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICBwcm9jZXNzLmVudj8uUkVBQ1RfQVBQX0dPT0dMRV9BTkFMWVRJQ1NfSUQgJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICB3aW5kb3cuZ3RhZ1xuICAgID8gKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3aW5kb3cuZ3RhZyhcImV2ZW50XCIsIGFjdGlvbiwge1xuICAgICAgICAgICAgZXZlbnRfY2F0ZWdvcnk6IGNhdGVnb3J5LFxuICAgICAgICAgICAgZXZlbnRfbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIGxvZ2dpbmcgdG8gZ2FcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgOiB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudj8uSkVTVF9XT1JLRVJfSURcbiAgICA/IChjYXRlZ29yeTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHZhbHVlPzogbnVtYmVyKSA9PiB7fVxuICAgIDogKGNhdGVnb3J5OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgdmFsdWU/OiBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gdHJhY2sgbG9jYWxseVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlRyYWNrIEV2ZW50XCIsIHsgY2F0ZWdvcnksIGFjdGlvbiwgbGFiZWwsIHZhbHVlIH0pO1xuICAgICAgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../analytics.ts\n");
2044
2033
 
2045
2034
  /***/ }),
2046
2035
 
@@ -2172,7 +2161,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2172
2161
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2173
2162
 
2174
2163
  "use strict";
2175
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Card\": () => (/* binding */ Card)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _Card_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Card.scss */ \"../../components/Card.scss\");\n/* harmony import */ var _Card_scss__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Card_scss__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nconst Card = ({ children, color }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"Card\", style: {\n [\"--card-color\"]: color === \"primary\" ? \"var(--color-primary)\" : open_color__WEBPACK_IMPORTED_MODULE_1__[color][7],\n [\"--card-color-darker\"]: color === \"primary\"\n ? \"var(--color-primary-darker)\"\n : open_color__WEBPACK_IMPORTED_MODULE_1__[color][8],\n [\"--card-color-darkest\"]: color === \"primary\"\n ? \"var(--color-primary-darkest)\"\n : open_color__WEBPACK_IMPORTED_MODULE_1__[color][9],\n } }, { children: children })));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9DYXJkLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBbUM7QUFFZDtBQUVkLE1BQU0sSUFBSSxHQUVaLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUMzQixPQUFPLENBQ0wsOEVBQ0UsU0FBUyxFQUFDLE1BQU0sRUFDaEIsS0FBSyxFQUFFO1lBQ0wsQ0FBQyxjQUFxQixDQUFDLEVBQ3JCLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyx1Q0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxDQUFDLHFCQUE0QixDQUFDLEVBQzVCLEtBQUssS0FBSyxTQUFTO2dCQUNqQixDQUFDLENBQUMsNkJBQTZCO2dCQUMvQixDQUFDLENBQUMsdUNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsQ0FBQyxzQkFBNkIsQ0FBQyxFQUM3QixLQUFLLEtBQUssU0FBUztnQkFDakIsQ0FBQyxDQUFDLDhCQUE4QjtnQkFDaEMsQ0FBQyxDQUFDLHVDQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFCLGdCQUVBLFFBQVEsSUFDTCxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9DYXJkLnRzeD9lMGVjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPcGVuQ29sb3IgZnJvbSBcIm9wZW4tY29sb3JcIjtcblxuaW1wb3J0IFwiLi9DYXJkLnNjc3NcIjtcblxuZXhwb3J0IGNvbnN0IENhcmQ6IFJlYWN0LkZDPHtcbiAgY29sb3I6IGtleW9mIE9wZW5Db2xvciB8IFwicHJpbWFyeVwiO1xufT4gPSAoeyBjaGlsZHJlbiwgY29sb3IgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cIkNhcmRcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgW1wiLS1jYXJkLWNvbG9yXCIgYXMgYW55XTpcbiAgICAgICAgICBjb2xvciA9PT0gXCJwcmltYXJ5XCIgPyBcInZhcigtLWNvbG9yLXByaW1hcnkpXCIgOiBPcGVuQ29sb3JbY29sb3JdWzddLFxuICAgICAgICBbXCItLWNhcmQtY29sb3ItZGFya2VyXCIgYXMgYW55XTpcbiAgICAgICAgICBjb2xvciA9PT0gXCJwcmltYXJ5XCJcbiAgICAgICAgICAgID8gXCJ2YXIoLS1jb2xvci1wcmltYXJ5LWRhcmtlcilcIlxuICAgICAgICAgICAgOiBPcGVuQ29sb3JbY29sb3JdWzhdLFxuICAgICAgICBbXCItLWNhcmQtY29sb3ItZGFya2VzdFwiIGFzIGFueV06XG4gICAgICAgICAgY29sb3IgPT09IFwicHJpbWFyeVwiXG4gICAgICAgICAgICA/IFwidmFyKC0tY29sb3ItcHJpbWFyeS1kYXJrZXN0KVwiXG4gICAgICAgICAgICA6IE9wZW5Db2xvcltjb2xvcl1bOV0sXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/Card.tsx\n");
2164
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Card\": () => (/* binding */ Card)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _Card_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Card.scss */ \"../../components/Card.scss\");\n/* harmony import */ var _Card_scss__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Card_scss__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\nconst Card = ({ children, color }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"Card\", style: {\n [\"--card-color\"]: color === \"primary\" ? \"var(--color-primary)\" : open_color__WEBPACK_IMPORTED_MODULE_1__[color][7],\n [\"--card-color-darker\"]: color === \"primary\"\n ? \"var(--color-primary-darker)\"\n : open_color__WEBPACK_IMPORTED_MODULE_1__[color][8],\n [\"--card-color-darkest\"]: color === \"primary\"\n ? \"var(--color-primary-darkest)\"\n : open_color__WEBPACK_IMPORTED_MODULE_1__[color][9],\n } }, { children: children })));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9DYXJkLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBbUM7QUFFZDtBQUVkLE1BQU0sSUFBSSxHQUdaLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUMzQixPQUFPLENBQ0wsOEVBQ0UsU0FBUyxFQUFDLE1BQU0sRUFDaEIsS0FBSyxFQUFFO1lBQ0wsQ0FBQyxjQUFxQixDQUFDLEVBQ3JCLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyx1Q0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxDQUFDLHFCQUE0QixDQUFDLEVBQzVCLEtBQUssS0FBSyxTQUFTO2dCQUNqQixDQUFDLENBQUMsNkJBQTZCO2dCQUMvQixDQUFDLENBQUMsdUNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsQ0FBQyxzQkFBNkIsQ0FBQyxFQUM3QixLQUFLLEtBQUssU0FBUztnQkFDakIsQ0FBQyxDQUFDLDhCQUE4QjtnQkFDaEMsQ0FBQyxDQUFDLHVDQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFCLGdCQUVBLFFBQVEsSUFDTCxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9DYXJkLnRzeD9lMGVjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPcGVuQ29sb3IgZnJvbSBcIm9wZW4tY29sb3JcIjtcblxuaW1wb3J0IFwiLi9DYXJkLnNjc3NcIjtcblxuZXhwb3J0IGNvbnN0IENhcmQ6IFJlYWN0LkZDPHtcbiAgY29sb3I6IGtleW9mIE9wZW5Db2xvciB8IFwicHJpbWFyeVwiO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbn0+ID0gKHsgY2hpbGRyZW4sIGNvbG9yIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJDYXJkXCJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIFtcIi0tY2FyZC1jb2xvclwiIGFzIGFueV06XG4gICAgICAgICAgY29sb3IgPT09IFwicHJpbWFyeVwiID8gXCJ2YXIoLS1jb2xvci1wcmltYXJ5KVwiIDogT3BlbkNvbG9yW2NvbG9yXVs3XSxcbiAgICAgICAgW1wiLS1jYXJkLWNvbG9yLWRhcmtlclwiIGFzIGFueV06XG4gICAgICAgICAgY29sb3IgPT09IFwicHJpbWFyeVwiXG4gICAgICAgICAgICA/IFwidmFyKC0tY29sb3ItcHJpbWFyeS1kYXJrZXIpXCJcbiAgICAgICAgICAgIDogT3BlbkNvbG9yW2NvbG9yXVs4XSxcbiAgICAgICAgW1wiLS1jYXJkLWNvbG9yLWRhcmtlc3RcIiBhcyBhbnldOlxuICAgICAgICAgIGNvbG9yID09PSBcInByaW1hcnlcIlxuICAgICAgICAgICAgPyBcInZhcigtLWNvbG9yLXByaW1hcnktZGFya2VzdClcIlxuICAgICAgICAgICAgOiBPcGVuQ29sb3JbY29sb3JdWzldLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/Card.tsx\n");
2176
2165
 
2177
2166
  /***/ }),
2178
2167
 
@@ -2183,7 +2172,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2183
2172
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2184
2173
 
2185
2174
  "use strict";
2186
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CheckboxItem\": () => (/* binding */ CheckboxItem)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _CheckboxItem_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./CheckboxItem.scss */ \"../../components/CheckboxItem.scss\");\n/* harmony import */ var _CheckboxItem_scss__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_CheckboxItem_scss__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\nconst CheckboxItem = ({ children, checked, onChange, className }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\"Checkbox\", className, { \"is-checked\": checked }), onClick: (event) => {\n onChange(!checked, event);\n event.currentTarget.querySelector(\".Checkbox-box\").focus();\n } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"Checkbox-box\", role: \"checkbox\", \"aria-checked\": checked }, { children: _icons__WEBPACK_IMPORTED_MODULE_3__.checkIcon })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"Checkbox-label\" }, { children: children }))] })));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9DaGVja2JveEl0ZW0udHN4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUEwQjtBQUNGO0FBQ1k7QUFFUDtBQUV0QixNQUFNLFlBQVksR0FJcEIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDbEQsT0FBTyxDQUNMLCtFQUNFLFNBQVMsRUFBRSxnREFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFDakUsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakIsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXZCLEtBQUssQ0FBQyxhQUFnQyxDQUFDLGFBQWEsQ0FDbkQsZUFBZSxDQUVsQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1osQ0FBQyxpQkFFRCxpRkFBUSxTQUFTLEVBQUMsY0FBYyxFQUFDLElBQUksRUFBQyxVQUFVLGtCQUFlLE9BQU8sZ0JBQ25FLDZDQUFTLElBQ0gsRUFDVCw4RUFBSyxTQUFTLEVBQUMsZ0JBQWdCLGdCQUFFLFFBQVEsSUFBTyxLQUM1QyxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9DaGVja2JveEl0ZW0udHN4PzgyNGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsc3ggZnJvbSBcImNsc3hcIjtcbmltcG9ydCB7IGNoZWNrSWNvbiB9IGZyb20gXCIuL2ljb25zXCI7XG5cbmltcG9ydCBcIi4vQ2hlY2tib3hJdGVtLnNjc3NcIjtcblxuZXhwb3J0IGNvbnN0IENoZWNrYm94SXRlbTogUmVhY3QuRkM8e1xuICBjaGVja2VkOiBib29sZWFuO1xuICBvbkNoYW5nZTogKGNoZWNrZWQ6IGJvb2xlYW4sIGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59PiA9ICh7IGNoaWxkcmVuLCBjaGVja2VkLCBvbkNoYW5nZSwgY2xhc3NOYW1lIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2Nsc3goXCJDaGVja2JveFwiLCBjbGFzc05hbWUsIHsgXCJpcy1jaGVja2VkXCI6IGNoZWNrZWQgfSl9XG4gICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgb25DaGFuZ2UoIWNoZWNrZWQsIGV2ZW50KTtcbiAgICAgICAgKFxuICAgICAgICAgIChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KS5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgXCIuQ2hlY2tib3gtYm94XCIsXG4gICAgICAgICAgKSBhcyBIVE1MQnV0dG9uRWxlbWVudFxuICAgICAgICApLmZvY3VzKCk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiQ2hlY2tib3gtYm94XCIgcm9sZT1cImNoZWNrYm94XCIgYXJpYS1jaGVja2VkPXtjaGVja2VkfT5cbiAgICAgICAge2NoZWNrSWNvbn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJDaGVja2JveC1sYWJlbFwiPntjaGlsZHJlbn08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/CheckboxItem.tsx\n");
2175
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CheckboxItem\": () => (/* binding */ CheckboxItem)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _CheckboxItem_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./CheckboxItem.scss */ \"../../components/CheckboxItem.scss\");\n/* harmony import */ var _CheckboxItem_scss__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_CheckboxItem_scss__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\nconst CheckboxItem = ({ children, checked, onChange, className }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\"Checkbox\", className, { \"is-checked\": checked }), onClick: (event) => {\n onChange(!checked, event);\n event.currentTarget.querySelector(\".Checkbox-box\").focus();\n } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"Checkbox-box\", role: \"checkbox\", \"aria-checked\": checked }, { children: _icons__WEBPACK_IMPORTED_MODULE_3__.checkIcon })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"Checkbox-label\" }, { children: children }))] })));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9DaGVja2JveEl0ZW0udHN4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUEwQjtBQUNGO0FBQ1k7QUFFUDtBQUV0QixNQUFNLFlBQVksR0FLcEIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDbEQsT0FBTyxDQUNMLCtFQUNFLFNBQVMsRUFBRSxnREFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFDakUsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakIsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXZCLEtBQUssQ0FBQyxhQUFnQyxDQUFDLGFBQWEsQ0FDbkQsZUFBZSxDQUVsQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1osQ0FBQyxpQkFFRCxpRkFBUSxTQUFTLEVBQUMsY0FBYyxFQUFDLElBQUksRUFBQyxVQUFVLGtCQUFlLE9BQU8sZ0JBQ25FLDZDQUFTLElBQ0gsRUFDVCw4RUFBSyxTQUFTLEVBQUMsZ0JBQWdCLGdCQUFFLFFBQVEsSUFBTyxLQUM1QyxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9DaGVja2JveEl0ZW0udHN4PzgyNGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsc3ggZnJvbSBcImNsc3hcIjtcbmltcG9ydCB7IGNoZWNrSWNvbiB9IGZyb20gXCIuL2ljb25zXCI7XG5cbmltcG9ydCBcIi4vQ2hlY2tib3hJdGVtLnNjc3NcIjtcblxuZXhwb3J0IGNvbnN0IENoZWNrYm94SXRlbTogUmVhY3QuRkM8e1xuICBjaGVja2VkOiBib29sZWFuO1xuICBvbkNoYW5nZTogKGNoZWNrZWQ6IGJvb2xlYW4sIGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xufT4gPSAoeyBjaGlsZHJlbiwgY2hlY2tlZCwgb25DaGFuZ2UsIGNsYXNzTmFtZSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiQ2hlY2tib3hcIiwgY2xhc3NOYW1lLCB7IFwiaXMtY2hlY2tlZFwiOiBjaGVja2VkIH0pfVxuICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgIG9uQ2hhbmdlKCFjaGVja2VkLCBldmVudCk7XG4gICAgICAgIChcbiAgICAgICAgICAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRGl2RWxlbWVudCkucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgIFwiLkNoZWNrYm94LWJveFwiLFxuICAgICAgICAgICkgYXMgSFRNTEJ1dHRvbkVsZW1lbnRcbiAgICAgICAgKS5mb2N1cygpO1xuICAgICAgfX1cbiAgICA+XG4gICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cIkNoZWNrYm94LWJveFwiIHJvbGU9XCJjaGVja2JveFwiIGFyaWEtY2hlY2tlZD17Y2hlY2tlZH0+XG4gICAgICAgIHtjaGVja0ljb259XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiQ2hlY2tib3gtbGFiZWxcIj57Y2hpbGRyZW59PC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/CheckboxItem.tsx\n");
2187
2176
 
2188
2177
  /***/ }),
2189
2178
 
@@ -2337,7 +2326,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2337
2326
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2338
2327
 
2339
2328
  "use strict";
2340
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ErrorCanvasPreview\": () => (/* binding */ ErrorCanvasPreview),\n/* harmony export */ \"ImageExportDialog\": () => (/* binding */ ImageExportDialog)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _clipboard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../clipboard */ \"../../clipboard.ts\");\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data/blob */ \"../../data/blob.ts\");\n/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../errors */ \"../../errors.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _scene_export__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../scene/export */ \"../../scene/export.ts\");\n/* harmony import */ var _Dialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Dialog */ \"../../components/Dialog.tsx\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _ToolButton__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _ExportDialog_scss__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./ExportDialog.scss */ \"../../components/ExportDialog.scss\");\n/* harmony import */ var _ExportDialog_scss__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_ExportDialog_scss__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _CheckboxItem__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./CheckboxItem */ \"../../components/CheckboxItem.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _data_filesystem__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../data/filesystem */ \"../../data/filesystem.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst supportsContextFilters = \"filter\" in document.createElement(\"canvas\").getContext(\"2d\");\nconst ErrorCanvasPreview = () => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"h3\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"canvasError.cannotShowPreview\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"p\", { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"canvasError.canvasTooBig\") }) }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"em\", { children: [\"(\", (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"canvasError.canvasTooBigTip\"), \")\"] })] }));\n};\nconst renderPreview = (content, previewNode) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_2__.unmountComponentAtNode)(previewNode);\n previewNode.innerHTML = \"\";\n if (content instanceof HTMLCanvasElement) {\n previewNode.appendChild(content);\n }\n else {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_2__.render)((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ErrorCanvasPreview, {}), previewNode);\n }\n};\nconst ExportButton = ({ children, title, onClick, color, shade = 6 }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"ExportDialog-imageExportButton\", style: {\n [\"--button-color\"]: open_color__WEBPACK_IMPORTED_MODULE_15__[color][shade],\n [\"--button-color-darker\"]: open_color__WEBPACK_IMPORTED_MODULE_15__[color][shade + 1],\n [\"--button-color-darkest\"]: open_color__WEBPACK_IMPORTED_MODULE_15__[color][shade + 2],\n }, title: title, \"aria-label\": title, onClick: onClick }, { children: children })));\n};\nconst ImageExportModal = ({ elements, appState, files, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_17__.DEFAULT_EXPORT_PADDING, actionManager, onExportToPng, onExportToSvg, onExportToClipboard, }) => {\n const someElementIsSelected = (0,_scene__WEBPACK_IMPORTED_MODULE_8__.isSomeElementSelected)(elements, appState);\n const [exportSelected, setExportSelected] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(someElementIsSelected);\n const previewRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const { exportBackground, viewBackgroundColor } = appState;\n const exportedElements = exportSelected\n ? (0,_scene__WEBPACK_IMPORTED_MODULE_8__.getSelectedElements)(elements, appState, true)\n : elements;\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n setExportSelected(someElementIsSelected);\n }, [someElementIsSelected]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n const previewNode = previewRef.current;\n if (!previewNode) {\n return;\n }\n (0,_scene_export__WEBPACK_IMPORTED_MODULE_9__.exportToCanvas)(exportedElements, appState, files, {\n exportBackground,\n viewBackgroundColor,\n exportPadding,\n })\n .then((canvas) => {\n // if converting to blob fails, there's some problem that will\n // likely prevent preview and export (e.g. canvas too big)\n return (0,_data_blob__WEBPACK_IMPORTED_MODULE_4__.canvasToBlob)(canvas).then(() => {\n renderPreview(canvas, previewNode);\n });\n })\n .catch((error) => {\n console.error(error);\n renderPreview(new _errors__WEBPACK_IMPORTED_MODULE_5__.CanvasError(), previewNode);\n });\n }, [\n appState,\n files,\n exportedElements,\n exportBackground,\n exportPadding,\n viewBackgroundColor,\n ]);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"ExportDialog\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { className: \"ExportDialog__preview\", ref: previewRef }), supportsContextFilters &&\n actionManager.renderAction(\"exportWithDarkMode\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: { display: \"grid\", gridTemplateColumns: \"1fr\" } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(190px, 1fr))\",\n // dunno why this is needed, but when the items wrap it creates\n // an overflow\n overflow: \"hidden\",\n } }, { children: [actionManager.renderAction(\"changeExportBackground\"), someElementIsSelected && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_CheckboxItem__WEBPACK_IMPORTED_MODULE_16__.CheckboxItem, Object.assign({ checked: exportSelected, onChange: (checked) => setExportSelected(checked) }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"labels.onlySelected\") }))), actionManager.renderAction(\"changeExportEmbedScene\")] })) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: { display: \"flex\", alignItems: \"center\", marginTop: \".6em\" } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_12__[\"default\"].Row, Object.assign({ gap: 2 }, { children: actionManager.renderAction(\"changeExportScale\") })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"p\", Object.assign({ style: { marginLeft: \"1em\", userSelect: \"none\" } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.scale\") }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n margin: \".6em 0\",\n } }, { children: !_data_filesystem__WEBPACK_IMPORTED_MODULE_18__.nativeFileSystemSupported &&\n actionManager.renderAction(\"changeProjectName\") })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_12__[\"default\"].Row, Object.assign({ gap: 2, justifyContent: \"center\", style: { margin: \"2em 0\" } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ExportButton, Object.assign({ color: \"indigo\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToPng\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToPng\"), onClick: () => onExportToPng(exportedElements) }, { children: \"PNG\" })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ExportButton, Object.assign({ color: \"red\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToSvg\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToSvg\"), onClick: () => onExportToSvg(exportedElements) }, { children: \"SVG\" })), _clipboard__WEBPACK_IMPORTED_MODULE_3__.probablySupportsClipboardBlob && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ExportButton, Object.assign({ title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.copyPngToClipboard\"), onClick: () => onExportToClipboard(exportedElements), color: \"gray\", shade: 7 }, { children: _icons__WEBPACK_IMPORTED_MODULE_11__.clipboard })))] }))] })));\n};\nconst ImageExportDialog = ({ elements, appState, files, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_17__.DEFAULT_EXPORT_PADDING, actionManager, onExportToPng, onExportToSvg, onExportToClipboard, }) => {\n const [modalIsShown, setModalIsShown] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const handleClose = react__WEBPACK_IMPORTED_MODULE_1___default().useCallback(() => {\n setModalIsShown(false);\n }, []);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_13__.ToolButton, { onClick: () => {\n setModalIsShown(true);\n }, \"data-testid\": \"image-export-button\", icon: _icons__WEBPACK_IMPORTED_MODULE_11__.exportImage, type: \"button\", \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportImage\"), showAriaLabel: (0,_App__WEBPACK_IMPORTED_MODULE_7__.useDevice)().isMobile, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportImage\") }), modalIsShown && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Dialog__WEBPACK_IMPORTED_MODULE_10__.Dialog, Object.assign({ onCloseRequest: handleClose, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportImage\") }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ImageExportModal, { elements: elements, appState: appState, files: files, exportPadding: exportPadding, actionManager: actionManager, onExportToPng: onExportToPng, onExportToSvg: onExportToSvg, onExportToClipboard: onExportToClipboard, onCloseRequest: handleClose }) })))] }));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9JbWFnZUV4cG9ydERpYWxvZy50c3guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUEyRDtBQUNBO0FBQ0U7QUFDakI7QUFFSjtBQUNaO0FBQ007QUFDb0M7QUFDckI7QUFFZjtBQUNlO0FBQ3JCO0FBQ2M7QUFDYjtBQUNNO0FBQ1c7QUFDUTtBQUNTO0FBRy9ELE1BQU0sc0JBQXNCLEdBQzFCLFFBQVEsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUUsQ0FBQztBQUUxRCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtJQUNyQyxPQUFPLENBQ0wsNEVBQ0UseUVBQUssd0NBQUMsQ0FBQywrQkFBK0IsQ0FBQyxHQUFNLEVBQzdDLHdFQUNFLDJFQUFPLHdDQUFDLENBQUMsMEJBQTBCLENBQUMsR0FBUSxHQUMxQyxFQUNKLGdGQUFNLHdDQUFDLENBQUMsNkJBQTZCLENBQUMsU0FBTyxJQUN6QyxDQUNQLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUNwQixPQUFrQyxFQUNsQyxXQUEyQixFQUMzQixFQUFFO0lBQ0YsaUVBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEMsV0FBVyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDM0IsSUFBSSxPQUFPLFlBQVksaUJBQWlCLEVBQUU7UUFDeEMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNsQztTQUFNO1FBQ0wsaURBQU0sQ0FBQyx1REFBQyxrQkFBa0IsS0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzdDO0FBQ0gsQ0FBQyxDQUFDO0FBT0YsTUFBTSxZQUFZLEdBS2IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRTtJQUN0RCxPQUFPLENB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LDhIQUNFLHVEQUFDLG9EQUFVLElBQ1QsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDWixlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hCLENBQUMsaUJBQ1cscUJBQXFCLEVBQ2pDLElBQUksRUFBRSxnREFBVyxFQUNqQixJQUFJLEVBQUMsUUFBUSxnQkFDRCx3Q0FBQyxDQUFDLHFCQUFxQixDQUFDLEVBQ3BDLGFBQWEsRUFBRSwrQ0FBUyxFQUFFLENBQUMsUUFBUSxFQUNuQyxLQUFLLEVBQUUsd0NBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUMvQixFQUNELFlBQVksSUFBSSxDQUNmLHVEQUFDLDRDQUFNLGtCQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLHdDQUFDLENBQUMscUJBQXFCLENBQUMsZ0JBQ2xFLHVEQUFDLGdCQUFnQixJQUNmLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLEtBQUssRUFBRSxLQUFLLEVBQ1osYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQ3hDLGNBQWMsRUFBRSxXQUFXLEdBQzNCLElBQ0ssQ0FDVixJQUNBLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL0ltYWdlRXhwb3J0RGlhbG9nLnRzeD8yMGUxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHJlbmRlciwgdW5tb3VudENvbXBvbmVudEF0Tm9kZSB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IHByb2JhYmx5U3VwcG9ydHNDbGlwYm9hcmRCbG9iIH0gZnJvbSBcIi4uL2NsaXBib2FyZFwiO1xuaW1wb3J0IHsgY2FudmFzVG9CbG9iIH0gZnJvbSBcIi4uL2RhdGEvYmxvYlwiO1xuaW1wb3J0IHsgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IENhbnZhc0Vycm9yIH0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuaW1wb3J0IHsgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQgeyB1c2VEZXZpY2UgfSBmcm9tIFwiLi9BcHBcIjtcbmltcG9ydCB7IGdldFNlbGVjdGVkRWxlbWVudHMsIGlzU29tZUVsZW1lbnRTZWxlY3RlZCB9IGZyb20gXCIuLi9zY2VuZVwiO1xuaW1wb3J0IHsgZXhwb3J0VG9DYW52YXMgfSBmcm9tIFwiLi4vc2NlbmUvZXhwb3J0XCI7XG5pbXBvcnQgeyBBcHBTdGF0ZSwgQmluYXJ5RmlsZXMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gXCIuL0RpYWxvZ1wiO1xuaW1wb3J0IHsgY2xpcGJvYXJkLCBleHBvcnRJbWFnZSB9IGZyb20gXCIuL2ljb25zXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIi4vU3RhY2tcIjtcbmltcG9ydCB7IFRvb2xCdXR0b24gfSBmcm9tIFwiLi9Ub29sQnV0dG9uXCI7XG5pbXBvcnQgXCIuL0V4cG9ydERpYWxvZy5zY3NzXCI7XG5pbXBvcnQgT3BlbkNvbG9yIGZyb20gXCJvcGVuLWNvbG9yXCI7XG5pbXBvcnQgeyBDaGVja2JveEl0ZW0gfSBmcm9tIFwiLi9DaGVja2JveEl0ZW1cIjtcbmltcG9ydCB7IERFRkFVTFRfRVhQT1JUX1BBRERJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBuYXRpdmVGaWxlU3lzdGVtU3VwcG9ydGVkIH0gZnJvbSBcIi4uL2RhdGEvZmlsZXN5c3RlbVwiO1xuaW1wb3J0IHsgQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuLi9hY3Rpb25zL21hbmFnZXJcIjtcblxuY29uc3Qgc3VwcG9ydHNDb250ZXh0RmlsdGVycyA9XG4gIFwiZmlsdGVyXCIgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKS5nZXRDb250ZXh0KFwiMmRcIikhO1xuXG5leHBvcnQgY29uc3QgRXJyb3JDYW52YXNQcmV2aWV3ID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8aDM+e3QoXCJjYW52YXNFcnJvci5jYW5ub3RTaG93UHJldmlld1wiKX08L2gzPlxuICAgICAgPHA+XG4gICAgICAgIDxzcGFuPnt0KFwiY2FudmFzRXJyb3IuY2FudmFzVG9vQmlnXCIpfTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICAgIDxlbT4oe3QoXCJjYW52YXNFcnJvci5jYW52YXNUb29CaWdUaXBcIil9KTwvZW0+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5jb25zdCByZW5kZXJQcmV2aWV3ID0gKFxuICBjb250ZW50OiBIVE1MQ2FudmFzRWxlbWVudCB8IEVycm9yLFxuICBwcmV2aWV3Tm9kZTogSFRNTERpdkVsZW1lbnQsXG4pID0+IHtcbiAgdW5tb3VudENvbXBvbmVudEF0Tm9kZShwcmV2aWV3Tm9kZSk7XG4gIHByZXZpZXdOb2RlLmlubmVySFRNTCA9IFwiXCI7XG4gIGlmIChjb250ZW50IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICBwcmV2aWV3Tm9kZS5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICByZW5kZXIoPEVycm9yQ2FudmFzUHJldmlldyAvPiwgcHJldmlld05vZGUpO1xuICB9XG59O1xuXG5leHBvcnQgdHlwZSBFeHBvcnRDQiA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBzY2FsZT86IG51bWJlcixcbikgPT4gdm9pZDtcblxuY29uc3QgRXhwb3J0QnV0dG9uOiBSZWFjdC5GQzx7XG4gIGNvbG9yOiBrZXlvZiBPcGVuQ29sb3I7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHNoYWRlPzogbnVtYmVyO1xufT4gPSAoeyBjaGlsZHJlbiwgdGl0bGUsIG9uQ2xpY2ssIGNvbG9yLCBzaGFkZSA9IDYgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzTmFtZT1cIkV4cG9ydERpYWxvZy1pbWFnZUV4cG9ydEJ1dHRvblwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBbXCItLWJ1dHRvbi1jb2xvclwiIGFzIGFueV06IE9wZW5Db2xvcltjb2xvcl1bc2hhZGVdLFxuICAgICAgICBbXCItLWJ1dHRvbi1jb2xvci1kYXJrZXJcIiBhcyBhbnldOiBPcGVuQ29sb3JbY29sb3JdW3NoYWRlICsgMV0sXG4gICAgICAgIFtcIi0tYnV0dG9uLWNvbG9yLWRhcmtlc3RcIiBhcyBhbnldOiBPcGVuQ29sb3JbY29sb3JdW3NoYWRlICsgMl0sXG4gICAgICB9fVxuICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgYXJpYS1sYWJlbD17dGl0bGV9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn07XG5cbmNvbnN0IEltYWdlRXhwb3J0TW9kYWwgPSAoe1xuICBlbGVtZW50cyxcbiAgYXBwU3RhdGUsXG4gIGZpbGVzLFxuICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgYWN0aW9uTWFuYWdlcixcbiAgb25FeHBvcnRUb1BuZyxcbiAgb25FeHBvcnRUb1N2ZyxcbiAgb25FeHBvcnRUb0NsaXBib2FyZCxcbn06IHtcbiAgYXBwU3RhdGU6IEFwcFN0YXRlO1xuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W107XG4gIGZpbGVzOiBCaW5hcnlGaWxlcztcbiAgZXhwb3J0UGFkZGluZz86IG51bWJlcjtcbiAgYWN0aW9uTWFuYWdlcjogQWN0aW9uTWFuYWdlcjtcbiAgb25FeHBvcnRUb1BuZzogRXhwb3J0Q0I7XG4gIG9uRXhwb3J0VG9Tdmc6IEV4cG9ydENCO1xuICBvbkV4cG9ydFRvQ2xpcGJvYXJkOiBFeHBvcnRDQjtcbiAgb25DbG9zZVJlcXVlc3Q6ICgpID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IHNvbWVFbGVtZW50SXNTZWxlY3RlZCA9IGlzU29tZUVsZW1lbnRTZWxlY3RlZChlbGVtZW50cywgYXBwU3RhdGUpO1xuICBjb25zdCBbZXhwb3J0U2VsZWN0ZWQsIHNldEV4cG9ydFNlbGVjdGVkXSA9IHVzZVN0YXRlKHNvbWVFbGVtZW50SXNTZWxlY3RlZCk7XG4gIGNvbnN0IHByZXZpZXdSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB7IGV4cG9ydEJhY2tncm91bmQsIHZpZXdCYWNrZ3JvdW5kQ29sb3IgfSA9IGFwcFN0YXRlO1xuXG4gIGNvbnN0IGV4cG9ydGVkRWxlbWVudHMgPSBleHBvcnRTZWxlY3RlZFxuICAgID8gZ2V0U2VsZWN0ZWRFbGVtZW50cyhlbGVtZW50cywgYXBwU3RhdGUsIHRydWUpXG4gICAgOiBlbGVtZW50cztcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEV4cG9ydFNlbGVjdGVkKHNvbWVFbGVtZW50SXNTZWxlY3RlZCk7XG4gIH0sIFtzb21lRWxlbWVudElzU2VsZWN0ZWRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpZXdOb2RlID0gcHJldmlld1JlZi5jdXJyZW50O1xuICAgIGlmICghcHJldmlld05vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhwb3J0VG9DYW52YXMoZXhwb3J0ZWRFbGVtZW50cywgYXBwU3RhdGUsIGZpbGVzLCB7XG4gICAgICBleHBvcnRCYWNrZ3JvdW5kLFxuICAgICAgdmlld0JhY2tncm91bmRDb2xvcixcbiAgICAgIGV4cG9ydFBhZGRpbmcsXG4gICAgfSlcbiAgICAgIC50aGVuKChjYW52YXMpID0+IHtcbiAgICAgICAgLy8gaWYgY29udmVydGluZyB0byBibG9iIGZhaWxzLCB0aGVyZSdzIHNvbWUgcHJvYmxlbSB0aGF0IHdpbGxcbiAgICAgICAgLy8gbGlrZWx5IHByZXZlbnQgcHJldmlldyBhbmQgZXhwb3J0IChlLmcuIGNhbnZhcyB0b28gYmlnKVxuICAgICAgICByZXR1cm4gY2FudmFzVG9CbG9iKGNhbnZhcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmVuZGVyUHJldmlldyhjYW52YXMsIHByZXZpZXdOb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgcmVuZGVyUHJldmlldyhuZXcgQ2FudmFzRXJyb3IoKSwgcHJldmlld05vZGUpO1xuICAgICAgfSk7XG4gIH0sIFtcbiAgICBhcHBTdGF0ZSxcbiAgICBmaWxlcyxcbiAgICBleHBvcnRlZEVsZW1lbnRzLFxuICAgIGV4cG9ydEJhY2tncm91bmQsXG4gICAgZXhwb3J0UGFkZGluZyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICBdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiRXhwb3J0RGlhbG9nXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIkV4cG9ydERpYWxvZ19fcHJldmlld1wiIHJlZj17cHJldmlld1JlZn0gLz5cbiAgICAgIHtzdXBwb3J0c0NvbnRleHRGaWx0ZXJzICYmXG4gICAgICAgIGFjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiZXhwb3J0V2l0aERhcmtNb2RlXCIpfVxuICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImdyaWRcIiwgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCIxZnJcIiB9fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBkaXNwbGF5OiBcImdyaWRcIixcbiAgICAgICAgICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwicmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMTkwcHgsIDFmcikpXCIsXG4gICAgICAgICAgICAvLyBkdW5ubyB3aHkgdGhpcyBpcyBuZWVkZWQsIGJ1dCB3aGVuIHRoZSBpdGVtcyB3cmFwIGl0IGNyZWF0ZXNcbiAgICAgICAgICAgIC8vIGFuIG92ZXJmbG93XG4gICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiY2hhbmdlRXhwb3J0QmFja2dyb3VuZFwiKX1cbiAgICAgICAgICB7c29tZUVsZW1lbnRJc1NlbGVjdGVkICYmIChcbiAgICAgICAgICAgIDxDaGVja2JveEl0ZW1cbiAgICAgICAgICAgICAgY2hlY2tlZD17ZXhwb3J0U2VsZWN0ZWR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY2hlY2tlZCkgPT4gc2V0RXhwb3J0U2VsZWN0ZWQoY2hlY2tlZCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KFwibGFiZWxzLm9ubHlTZWxlY3RlZFwiKX1cbiAgICAgICAgICAgIDwvQ2hlY2tib3hJdGVtPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiY2hhbmdlRXhwb3J0RW1iZWRTY2VuZVwiKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIG1hcmdpblRvcDogXCIuNmVtXCIgfX0+XG4gICAgICAgIDxTdGFjay5Sb3cgZ2FwPXsyfT5cbiAgICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJjaGFuZ2VFeHBvcnRTY2FsZVwiKX1cbiAgICAgICAgPC9TdGFjay5Sb3c+XG4gICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbkxlZnQ6IFwiMWVtXCIsIHVzZXJTZWxlY3Q6IFwibm9uZVwiIH19PlxuICAgICAgICAgIHt0KFwiYnV0dG9ucy5zY2FsZVwiKX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICBtYXJnaW46IFwiLjZlbSAwXCIsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHshbmF0aXZlRmlsZVN5c3RlbVN1cHBvcnRlZCAmJlxuICAgICAgICAgIGFjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiY2hhbmdlUHJvamVjdE5hbWVcIil9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxTdGFjay5Sb3cgZ2FwPXsyfSBqdXN0aWZ5Q29udGVudD1cImNlbnRlclwiIHN0eWxlPXt7IG1hcmdpbjogXCIyZW0gMFwiIH19PlxuICAgICAgICA8RXhwb3J0QnV0dG9uXG4gICAgICAgICAgY29sb3I9XCJpbmRpZ29cIlxuICAgICAgICAgIHRpdGxlPXt0KFwiYnV0dG9ucy5leHBvcnRUb1BuZ1wiKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPXt0KFwiYnV0dG9ucy5leHBvcnRUb1BuZ1wiKX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkV4cG9ydFRvUG5nKGV4cG9ydGVkRWxlbWVudHMpfVxuICAgICAgICA+XG4gICAgICAgICAgUE5HXG4gICAgICAgIDwvRXhwb3J0QnV0dG9uPlxuICAgICAgICA8RXhwb3J0QnV0dG9uXG4gICAgICAgICAgY29sb3I9XCJyZWRcIlxuICAgICAgICAgIHRpdGxlPXt0KFwiYnV0dG9ucy5leHBvcnRUb1N2Z1wiKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPXt0KFwiYnV0dG9ucy5leHBvcnRUb1N2Z1wiKX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkV4cG9ydFRvU3ZnKGV4cG9ydGVkRWxlbWVudHMpfVxuICAgICAgICA+XG4gICAgICAgICAgU1ZHXG4gICAgICAgIDwvRXhwb3J0QnV0dG9uPlxuICAgICAgICB7cHJvYmFibHlTdXBwb3J0c0NsaXBib2FyZEJsb2IgJiYgKFxuICAgICAgICAgIDxFeHBvcnRCdXR0b25cbiAgICAgICAgICAgIHRpdGxlPXt0KFwiYnV0dG9ucy5jb3B5UG5nVG9DbGlwYm9hcmRcIil9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkV4cG9ydFRvQ2xpcGJvYXJkKGV4cG9ydGVkRWxlbWVudHMpfVxuICAgICAgICAgICAgY29sb3I9XCJncmF5XCJcbiAgICAgICAgICAgIHNoYWRlPXs3fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtjbGlwYm9hcmR9XG4gICAgICAgICAgPC9FeHBvcnRCdXR0b24+XG4gICAgICAgICl9XG4gICAgICA8L1N0YWNrLlJvdz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBJbWFnZUV4cG9ydERpYWxvZyA9ICh7XG4gIGVsZW1lbnRzLFxuICBhcHBTdGF0ZSxcbiAgZmlsZXMsXG4gIGV4cG9ydFBhZGRpbmcgPSBERUZBVUxUX0VYUE9SVF9QQURESU5HLFxuICBhY3Rpb25NYW5hZ2VyLFxuICBvbkV4cG9ydFRvUG5nLFxuICBvbkV4cG9ydFRvU3ZnLFxuICBvbkV4cG9ydFRvQ2xpcGJvYXJkLFxufToge1xuICBhcHBTdGF0ZTogQXBwU3RhdGU7XG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXTtcbiAgZmlsZXM6IEJpbmFyeUZpbGVzO1xuICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICBhY3Rpb25NYW5hZ2VyOiBBY3Rpb25NYW5hZ2VyO1xuICBvbkV4cG9ydFRvUG5nOiBFeHBvcnRDQjtcbiAgb25FeHBvcnRUb1N2ZzogRXhwb3J0Q0I7XG4gIG9uRXhwb3J0VG9DbGlwYm9hcmQ6IEV4cG9ydENCO1xufSkgPT4ge1xuICBjb25zdCBbbW9kYWxJc1Nob3duLCBzZXRNb2RhbElzU2hvd25dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE1vZGFsSXNTaG93bihmYWxzZSk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VG9vbEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgc2V0TW9kYWxJc1Nob3duKHRydWUpO1xuICAgICAgICB9fVxuICAgICAgICBkYXRhLXRlc3RpZD1cImltYWdlLWV4cG9ydC1idXR0b25cIlxuICAgICAgICBpY29uPXtleHBvcnRJbWFnZX1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9e3QoXCJidXR0b25zLmV4cG9ydEltYWdlXCIpfVxuICAgICAgICBzaG93QXJpYUxhYmVsPXt1c2VEZXZpY2UoKS5pc01vYmlsZX1cbiAgICAgICAgdGl0bGU9e3QoXCJidXR0b25zLmV4cG9ydEltYWdlXCIpfVxuICAgICAgLz5cbiAgICAgIHttb2RhbElzU2hvd24gJiYgKFxuICAgICAgICA8RGlhbG9nIG9uQ2xvc2VSZXF1ZXN0PXtoYW5kbGVDbG9zZX0gdGl0bGU9e3QoXCJidXR0b25zLmV4cG9ydEltYWdlXCIpfT5cbiAgICAgICAgICA8SW1hZ2VFeHBvcnRNb2RhbFxuICAgICAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgZmlsZXM9e2ZpbGVzfVxuICAgICAgICAgICAgZXhwb3J0UGFkZGluZz17ZXhwb3J0UGFkZGluZ31cbiAgICAgICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgICAgICBvbkV4cG9ydFRvUG5nPXtvbkV4cG9ydFRvUG5nfVxuICAgICAgICAgICAgb25FeHBvcnRUb1N2Zz17b25FeHBvcnRUb1N2Z31cbiAgICAgICAgICAgIG9uRXhwb3J0VG9DbGlwYm9hcmQ9e29uRXhwb3J0VG9DbGlwYm9hcmR9XG4gICAgICAgICAgICBvbkNsb3NlUmVxdWVzdD17aGFuZGxlQ2xvc2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9EaWFsb2c+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/ImageExportDialog.tsx\n");
2329
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ErrorCanvasPreview\": () => (/* binding */ ErrorCanvasPreview),\n/* harmony export */ \"ImageExportDialog\": () => (/* binding */ ImageExportDialog)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _clipboard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../clipboard */ \"../../clipboard.ts\");\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data/blob */ \"../../data/blob.ts\");\n/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../errors */ \"../../errors.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _scene_export__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../scene/export */ \"../../scene/export.ts\");\n/* harmony import */ var _Dialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Dialog */ \"../../components/Dialog.tsx\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./icons */ \"../../components/icons.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _ToolButton__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _ExportDialog_scss__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./ExportDialog.scss */ \"../../components/ExportDialog.scss\");\n/* harmony import */ var _ExportDialog_scss__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_ExportDialog_scss__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _CheckboxItem__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./CheckboxItem */ \"../../components/CheckboxItem.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _data_filesystem__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../data/filesystem */ \"../../data/filesystem.ts\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst supportsContextFilters = \"filter\" in document.createElement(\"canvas\").getContext(\"2d\");\nconst ErrorCanvasPreview = () => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"h3\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"canvasError.cannotShowPreview\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"p\", { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"canvasError.canvasTooBig\") }) }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"em\", { children: [\"(\", (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"canvasError.canvasTooBigTip\"), \")\"] })] }));\n};\nconst renderPreview = (content, previewNode) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_2__.unmountComponentAtNode)(previewNode);\n previewNode.innerHTML = \"\";\n if (content instanceof HTMLCanvasElement) {\n previewNode.appendChild(content);\n }\n else {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_2__.render)((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ErrorCanvasPreview, {}), previewNode);\n }\n};\nconst ExportButton = ({ children, title, onClick, color, shade = 6 }) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"ExportDialog-imageExportButton\", style: {\n [\"--button-color\"]: open_color__WEBPACK_IMPORTED_MODULE_15__[color][shade],\n [\"--button-color-darker\"]: open_color__WEBPACK_IMPORTED_MODULE_15__[color][shade + 1],\n [\"--button-color-darkest\"]: open_color__WEBPACK_IMPORTED_MODULE_15__[color][shade + 2],\n }, title: title, \"aria-label\": title, onClick: onClick }, { children: children })));\n};\nconst ImageExportModal = ({ elements, appState, files, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_17__.DEFAULT_EXPORT_PADDING, actionManager, onExportToPng, onExportToSvg, onExportToClipboard, }) => {\n const someElementIsSelected = (0,_scene__WEBPACK_IMPORTED_MODULE_8__.isSomeElementSelected)(elements, appState);\n const [exportSelected, setExportSelected] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(someElementIsSelected);\n const previewRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const { exportBackground, viewBackgroundColor } = appState;\n const exportedElements = exportSelected\n ? (0,_scene__WEBPACK_IMPORTED_MODULE_8__.getSelectedElements)(elements, appState, true)\n : elements;\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n setExportSelected(someElementIsSelected);\n }, [someElementIsSelected]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n const previewNode = previewRef.current;\n if (!previewNode) {\n return;\n }\n (0,_scene_export__WEBPACK_IMPORTED_MODULE_9__.exportToCanvas)(exportedElements, appState, files, {\n exportBackground,\n viewBackgroundColor,\n exportPadding,\n })\n .then((canvas) => {\n // if converting to blob fails, there's some problem that will\n // likely prevent preview and export (e.g. canvas too big)\n return (0,_data_blob__WEBPACK_IMPORTED_MODULE_4__.canvasToBlob)(canvas).then(() => {\n renderPreview(canvas, previewNode);\n });\n })\n .catch((error) => {\n console.error(error);\n renderPreview(new _errors__WEBPACK_IMPORTED_MODULE_5__.CanvasError(), previewNode);\n });\n }, [\n appState,\n files,\n exportedElements,\n exportBackground,\n exportPadding,\n viewBackgroundColor,\n ]);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"ExportDialog\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { className: \"ExportDialog__preview\", ref: previewRef }), supportsContextFilters &&\n actionManager.renderAction(\"exportWithDarkMode\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: { display: \"grid\", gridTemplateColumns: \"1fr\" } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(190px, 1fr))\",\n // dunno why this is needed, but when the items wrap it creates\n // an overflow\n overflow: \"hidden\",\n } }, { children: [actionManager.renderAction(\"changeExportBackground\"), someElementIsSelected && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_CheckboxItem__WEBPACK_IMPORTED_MODULE_16__.CheckboxItem, Object.assign({ checked: exportSelected, onChange: (checked) => setExportSelected(checked) }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"labels.onlySelected\") }))), actionManager.renderAction(\"changeExportEmbedScene\")] })) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ style: { display: \"flex\", alignItems: \"center\", marginTop: \".6em\" } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_12__[\"default\"].Row, Object.assign({ gap: 2 }, { children: actionManager.renderAction(\"changeExportScale\") })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"p\", Object.assign({ style: { marginLeft: \"1em\", userSelect: \"none\" } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.scale\") }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n margin: \".6em 0\",\n } }, { children: !_data_filesystem__WEBPACK_IMPORTED_MODULE_18__.nativeFileSystemSupported &&\n actionManager.renderAction(\"changeProjectName\") })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_12__[\"default\"].Row, Object.assign({ gap: 2, justifyContent: \"center\", style: { margin: \"2em 0\" } }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ExportButton, Object.assign({ color: \"indigo\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToPng\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToPng\"), onClick: () => onExportToPng(exportedElements) }, { children: \"PNG\" })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ExportButton, Object.assign({ color: \"red\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToSvg\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportToSvg\"), onClick: () => onExportToSvg(exportedElements) }, { children: \"SVG\" })), _clipboard__WEBPACK_IMPORTED_MODULE_3__.probablySupportsClipboardBlob && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ExportButton, Object.assign({ title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.copyPngToClipboard\"), onClick: () => onExportToClipboard(exportedElements), color: \"gray\", shade: 7 }, { children: _icons__WEBPACK_IMPORTED_MODULE_11__.clipboard })))] }))] })));\n};\nconst ImageExportDialog = ({ elements, appState, files, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_17__.DEFAULT_EXPORT_PADDING, actionManager, onExportToPng, onExportToSvg, onExportToClipboard, }) => {\n const [modalIsShown, setModalIsShown] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const handleClose = react__WEBPACK_IMPORTED_MODULE_1___default().useCallback(() => {\n setModalIsShown(false);\n }, []);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_13__.ToolButton, { onClick: () => {\n setModalIsShown(true);\n }, \"data-testid\": \"image-export-button\", icon: _icons__WEBPACK_IMPORTED_MODULE_11__.exportImage, type: \"button\", \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportImage\"), showAriaLabel: (0,_App__WEBPACK_IMPORTED_MODULE_7__.useDevice)().isMobile, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportImage\") }), modalIsShown && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Dialog__WEBPACK_IMPORTED_MODULE_10__.Dialog, Object.assign({ onCloseRequest: handleClose, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exportImage\") }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ImageExportModal, { elements: elements, appState: appState, files: files, exportPadding: exportPadding, actionManager: actionManager, onExportToPng: onExportToPng, onExportToSvg: onExportToSvg, onExportToClipboard: onExportToClipboard, onCloseRequest: handleClose }) })))] }));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9JbWFnZUV4cG9ydERpYWxvZy50c3guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUEyRDtBQUNBO0FBQ0U7QUFDakI7QUFFSjtBQUNaO0FBQ007QUFDb0M7QUFDckI7QUFFZjtBQUNlO0FBQ3JCO0FBQ2M7QUFDYjtBQUNNO0FBQ1c7QUFDUTtBQUNTO0FBRy9ELE1BQU0sc0JBQXNCLEdBQzFCLFFBQVEsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUUsQ0FBQztBQUUxRCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtJQUNyQyxPQUFPLENBQ0wsNEVBQ0UseUVBQUssd0NBQUMsQ0FBQywrQkFBK0IsQ0FBQyxHQUFNLEVBQzdDLHdFQUNFLDJFQUFPLHdDQUFDLENBQUMsMEJBQTBCLENBQUMsR0FBUSxHQUMxQyxFQUNKLGdGQUFNLHdDQUFDLENBQUMsNkJBQTZCLENBQUMsU0FBTyxJQUN6QyxDQUNQLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUNwQixPQUFrQyxFQUNsQyxXQUEyQixFQUMzQixFQUFFO0lBQ0YsaUVBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEMsV0FBVyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDM0IsSUFBSSxPQUFPLFlBQVksaUJBQWlCLEVBQUU7UUFDeEMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNsQztTQUFNO1FBQ0wsaURBQU0sQ0FBQyx1REFBQyxrQkFBa0IsS0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzdDO0FBQ0gsQ0FBQyxDQUFDO0FBT0YsTUFBTSxZQUFZLEdBTWIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRTtJQUN0RCxPQUFPLENBQ0wsaUZBQ0UsU0FBUyxFQUFDLGdDQUFnQyxFQUMxQyxLQUFLLEVBQUU7WUFDTCxDQUFDLGdCQUF1QixDQUFDLEVBQUUsd0NBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDbEQsQ0FBQyx1QkFBOEIsQ0FBQyxFQUFFLHdDQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM3RCxDQUFDLHdCQUErQixDQUFDLEVBQUUsd0NBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQy9ELEVBQ0QsS0FBSyxFQUFFLEtBQUssZ0JBQ0EsS0FBSyxFQUNqQixPQUFPLEVBQUUsT0FBTyxnQkFFZixRQUFRLElBQ0YsQ0FDVixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEVBQ3hCLFFBQVEsRUFDUixRQUFRLEVBQ1IsS0FBSyxFQUNMLGFBQWEsR0FBRywrREFBc0IsRUFDdEMsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEVBQ2IsbUJBQW1CLEdBV3BCLEVBQUUsRUFBRTtJQUNILE1BQU0scUJBQXFCLEdBQUcsNkRBQXFCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsR0FBRywrQ0FBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDNUUsTUFBTSxVQUFVLEdBQUcsNkNBQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFDaEQsTUFBTSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLEdBQUcsUUFBUSxDQUFDO0lBRTNELE1BQU0sZ0JBQWdCLEdBQUcsY0FBYztRQUNyQyxDQUFDLENBQUMsMkRBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFDL0MsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUViLGdEQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMzQyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7SUFFNUIsZ0RBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBQ0QsNkRBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO1lBQ2hELGdCQUFnQjtZQUNoQixtQkFBbUI7WUFDbkIsYUFBYTtTQUNkLENBQUM7YUFDQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNmLDhEQUE4RDtZQUM5RCwwREFBMEQ7WUFDMUQsT0FBTyx3REFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsYUFBYSxDQUFDLElBQUksZ0RBQVcsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxFQUFFO1FBQ0QsUUFBUTtRQUNSLEtBQUs7UUFDTCxnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLGFBQWE7UUFDYixtQkFBbUI7S0FDcEIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUNMLCtFQUFLLFNBQVMsRUFBQyxjQUFjLGlCQUMzQixnRUFBSyxTQUFTLEVBQUMsdUJBQXVCLEVBQUMsR0FBRyxFQUFFLFVBQVUsR0FBSSxFQUN6RCxzQkFBc0I7Z0JBQ3JCLGFBQWEsQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsRUFDbEQsOEVBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsZ0JBQ3pELCtFQUNFLEtBQUssRUFBRTt3QkFDTCxPQUFPLEVBQUUsTUFBTTt3QkFDZixtQkFBbUIsRUFBRSxzQ0FBc0M7d0JBQzNELCtEQUErRDt3QkFDL0QsY0FBYzt3QkFDZCxRQUFRLEVBQUUsUUFBUTtxQkFDbkIsaUJBRUEsYUFBYSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxFQUNwRCxxQkFBcUIsSUFBSSxDQUN4Qix1REFBQyx3REFBWSxrQkFDWCxPQUFPLEVBQUUsY0FBYyxFQUN2QixRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxnQkFFaEQsd0NBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUNaLENBQ2hCLEVBQ0EsYUFBYSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxLQUNqRCxJQUNGLEVBQ04sK0VBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQ3RFLHVEQUFDLG1EQUFTLGtCQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUNkLGFBQWEsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsSUFDdEMsRUFDWiw0RUFBRyxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsZ0JBQ2hELHdDQUFDLENBQUMsZUFBZSxDQUFDLElBQ2pCLEtBQ0EsRUFDTiw4RUFDRSxLQUFLLEVBQUU7b0JBQ0wsT0FBTyxFQUFFLE1BQU07b0JBQ2YsVUFBVSxFQUFFLFFBQVE7b0JBQ3BCLGNBQWMsRUFBRSxRQUFRO29CQUN4QixNQUFNLEVBQUUsUUFBUTtpQkFDakIsZ0JBRUEsQ0FBQyx3RUFBeUI7b0JBQ3pCLGFBQWEsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsSUFDN0MsRUFDTix3REFBQyxtREFBUyxrQkFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxpQkFDbkUsdURBQUMsWUFBWSxrQkFDWCxLQUFLLEVBQUMsUUFBUSxFQUNkLEtBQUssRUFBRSx3Q0FBQyxDQUFDLHFCQUFxQixDQUFDLGdCQUNuQix3Q0FBQyxDQUFDLHFCQUFxQixDQUFDLEVBQ3BDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMseUJBR2pDLEVBQ2YsdURBQUMsWUFBWSxrQkFDWCxLQUFLLEVBQUMsS0FBSyxFQUNYLEtBQUssRUFBRSx3Q0FBQyxDQUFDLHFCQUFxQixDQUFDLGdCQUNuQix3Q0FBQyxDQUFDLHFCQUFxQixDQUFDLEVBQ3BDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMseUJBR2pDLEVBQ2QscUVBQTZCLElBQUksQ0FDaEMsdURBQUMsWUFBWSxrQkFDWCxLQUFLLEVBQUUsd0NBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxFQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsRUFDcEQsS0FBSyxFQUFDLE1BQU0sRUFDWixLQUFLLEVBQUUsQ0FBQyxnQkFFUCw4Q0FBUyxJQUNHLENBQ2hCLEtBQ1MsS0FDUixDQUNQLENBQUM7QUFDSixDQUFDLENBQUM7QUFFSyxNQUFNLGlCQUFpQixHQUFHLENBQUMsRUFDaEMsUUFBUSxFQUNSLFFBQVEsRUFDUixLQUFLLEVBQ0wsYUFBYSxHQUFHLCtEQUFzQixFQUN0QyxhQUFhLEVBQ2IsYUFBYSxFQUNiLGFBQWEsRUFDYixtQkFBbUIsR0FVcEIsRUFBRSxFQUFFO0lBQ0gsTUFBTSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsR0FBRywrQ0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhELE1BQU0sV0FBVyxHQUFHLHdEQUFpQixDQUFDLEdBQUcsRUFBRTtRQUN6QyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsT0FBTyxDQUNMLDhIQUNFLHVEQUFDLG9EQUFVLElBQ1QsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDWixlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hCLENBQUMsaUJBQ1cscUJBQXFCLEVBQ2pDLElBQUksRUFBRSxnREFBVyxFQUNqQixJQUFJLEVBQUMsUUFBUSxnQkFDRCx3Q0FBQyxDQUFDLHFCQUFxQixDQUFDLEVBQ3BDLGFBQWEsRUFBRSwrQ0FBUyxFQUFFLENBQUMsUUFBUSxFQUNuQyxLQUFLLEVBQUUsd0NBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUMvQixFQUNELFlBQVksSUFBSSxDQUNmLHVEQUFDLDRDQUFNLGtCQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLHdDQUFDLENBQUMscUJBQXFCLENBQUMsZ0JBQ2xFLHVEQUFDLGdCQUFnQixJQUNmLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLEtBQUssRUFBRSxLQUFLLEVBQ1osYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQ3hDLGNBQWMsRUFBRSxXQUFXLEdBQzNCLElBQ0ssQ0FDVixJQUNBLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL0ltYWdlRXhwb3J0RGlhbG9nLnRzeD8yMGUxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHJlbmRlciwgdW5tb3VudENvbXBvbmVudEF0Tm9kZSB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IHByb2JhYmx5U3VwcG9ydHNDbGlwYm9hcmRCbG9iIH0gZnJvbSBcIi4uL2NsaXBib2FyZFwiO1xuaW1wb3J0IHsgY2FudmFzVG9CbG9iIH0gZnJvbSBcIi4uL2RhdGEvYmxvYlwiO1xuaW1wb3J0IHsgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IENhbnZhc0Vycm9yIH0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuaW1wb3J0IHsgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQgeyB1c2VEZXZpY2UgfSBmcm9tIFwiLi9BcHBcIjtcbmltcG9ydCB7IGdldFNlbGVjdGVkRWxlbWVudHMsIGlzU29tZUVsZW1lbnRTZWxlY3RlZCB9IGZyb20gXCIuLi9zY2VuZVwiO1xuaW1wb3J0IHsgZXhwb3J0VG9DYW52YXMgfSBmcm9tIFwiLi4vc2NlbmUvZXhwb3J0XCI7XG5pbXBvcnQgeyBBcHBTdGF0ZSwgQmluYXJ5RmlsZXMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gXCIuL0RpYWxvZ1wiO1xuaW1wb3J0IHsgY2xpcGJvYXJkLCBleHBvcnRJbWFnZSB9IGZyb20gXCIuL2ljb25zXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIi4vU3RhY2tcIjtcbmltcG9ydCB7IFRvb2xCdXR0b24gfSBmcm9tIFwiLi9Ub29sQnV0dG9uXCI7XG5pbXBvcnQgXCIuL0V4cG9ydERpYWxvZy5zY3NzXCI7XG5pbXBvcnQgT3BlbkNvbG9yIGZyb20gXCJvcGVuLWNvbG9yXCI7XG5pbXBvcnQgeyBDaGVja2JveEl0ZW0gfSBmcm9tIFwiLi9DaGVja2JveEl0ZW1cIjtcbmltcG9ydCB7IERFRkFVTFRfRVhQT1JUX1BBRERJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBuYXRpdmVGaWxlU3lzdGVtU3VwcG9ydGVkIH0gZnJvbSBcIi4uL2RhdGEvZmlsZXN5c3RlbVwiO1xuaW1wb3J0IHsgQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuLi9hY3Rpb25zL21hbmFnZXJcIjtcblxuY29uc3Qgc3VwcG9ydHNDb250ZXh0RmlsdGVycyA9XG4gIFwiZmlsdGVyXCIgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKS5nZXRDb250ZXh0KFwiMmRcIikhO1xuXG5leHBvcnQgY29uc3QgRXJyb3JDYW52YXNQcmV2aWV3ID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8aDM+e3QoXCJjYW52YXNFcnJvci5jYW5ub3RTaG93UHJldmlld1wiKX08L2gzPlxuICAgICAgPHA+XG4gICAgICAgIDxzcGFuPnt0KFwiY2FudmFzRXJyb3IuY2FudmFzVG9vQmlnXCIpfTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICAgIDxlbT4oe3QoXCJjYW52YXNFcnJvci5jYW52YXNUb29CaWdUaXBcIil9KTwvZW0+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5jb25zdCByZW5kZXJQcmV2aWV3ID0gKFxuICBjb250ZW50OiBIVE1MQ2FudmFzRWxlbWVudCB8IEVycm9yLFxuICBwcmV2aWV3Tm9kZTogSFRNTERpdkVsZW1lbnQsXG4pID0+IHtcbiAgdW5tb3VudENvbXBvbmVudEF0Tm9kZShwcmV2aWV3Tm9kZSk7XG4gIHByZXZpZXdOb2RlLmlubmVySFRNTCA9IFwiXCI7XG4gIGlmIChjb250ZW50IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICBwcmV2aWV3Tm9kZS5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICByZW5kZXIoPEVycm9yQ2FudmFzUHJldmlldyAvPiwgcHJldmlld05vZGUpO1xuICB9XG59O1xuXG5leHBvcnQgdHlwZSBFeHBvcnRDQiA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBzY2FsZT86IG51bWJlcixcbikgPT4gdm9pZDtcblxuY29uc3QgRXhwb3J0QnV0dG9uOiBSZWFjdC5GQzx7XG4gIGNvbG9yOiBrZXlvZiBPcGVuQ29sb3I7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHNoYWRlPzogbnVtYmVyO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbn0+ID0gKHsgY2hpbGRyZW4sIHRpdGxlLCBvbkNsaWNrLCBjb2xvciwgc2hhZGUgPSA2IH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBjbGFzc05hbWU9XCJFeHBvcnREaWFsb2ctaW1hZ2VFeHBvcnRCdXR0b25cIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgW1wiLS1idXR0b24tY29sb3JcIiBhcyBhbnldOiBPcGVuQ29sb3JbY29sb3JdW3NoYWRlXSxcbiAgICAgICAgW1wiLS1idXR0b24tY29sb3ItZGFya2VyXCIgYXMgYW55XTogT3BlbkNvbG9yW2NvbG9yXVtzaGFkZSArIDFdLFxuICAgICAgICBbXCItLWJ1dHRvbi1jb2xvci1kYXJrZXN0XCIgYXMgYW55XTogT3BlbkNvbG9yW2NvbG9yXVtzaGFkZSArIDJdLFxuICAgICAgfX1cbiAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgIGFyaWEtbGFiZWw9e3RpdGxlfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuXG5jb25zdCBJbWFnZUV4cG9ydE1vZGFsID0gKHtcbiAgZWxlbWVudHMsXG4gIGFwcFN0YXRlLFxuICBmaWxlcyxcbiAgZXhwb3J0UGFkZGluZyA9IERFRkFVTFRfRVhQT1JUX1BBRERJTkcsXG4gIGFjdGlvbk1hbmFnZXIsXG4gIG9uRXhwb3J0VG9QbmcsXG4gIG9uRXhwb3J0VG9TdmcsXG4gIG9uRXhwb3J0VG9DbGlwYm9hcmQsXG59OiB7XG4gIGFwcFN0YXRlOiBBcHBTdGF0ZTtcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdO1xuICBmaWxlczogQmluYXJ5RmlsZXM7XG4gIGV4cG9ydFBhZGRpbmc/OiBudW1iZXI7XG4gIGFjdGlvbk1hbmFnZXI6IEFjdGlvbk1hbmFnZXI7XG4gIG9uRXhwb3J0VG9Qbmc6IEV4cG9ydENCO1xuICBvbkV4cG9ydFRvU3ZnOiBFeHBvcnRDQjtcbiAgb25FeHBvcnRUb0NsaXBib2FyZDogRXhwb3J0Q0I7XG4gIG9uQ2xvc2VSZXF1ZXN0OiAoKSA9PiB2b2lkO1xufSkgPT4ge1xuICBjb25zdCBzb21lRWxlbWVudElzU2VsZWN0ZWQgPSBpc1NvbWVFbGVtZW50U2VsZWN0ZWQoZWxlbWVudHMsIGFwcFN0YXRlKTtcbiAgY29uc3QgW2V4cG9ydFNlbGVjdGVkLCBzZXRFeHBvcnRTZWxlY3RlZF0gPSB1c2VTdGF0ZShzb21lRWxlbWVudElzU2VsZWN0ZWQpO1xuICBjb25zdCBwcmV2aWV3UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgeyBleHBvcnRCYWNrZ3JvdW5kLCB2aWV3QmFja2dyb3VuZENvbG9yIH0gPSBhcHBTdGF0ZTtcblxuICBjb25zdCBleHBvcnRlZEVsZW1lbnRzID0gZXhwb3J0U2VsZWN0ZWRcbiAgICA/IGdldFNlbGVjdGVkRWxlbWVudHMoZWxlbWVudHMsIGFwcFN0YXRlLCB0cnVlKVxuICAgIDogZWxlbWVudHM7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRFeHBvcnRTZWxlY3RlZChzb21lRWxlbWVudElzU2VsZWN0ZWQpO1xuICB9LCBbc29tZUVsZW1lbnRJc1NlbGVjdGVkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwcmV2aWV3Tm9kZSA9IHByZXZpZXdSZWYuY3VycmVudDtcbiAgICBpZiAoIXByZXZpZXdOb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4cG9ydFRvQ2FudmFzKGV4cG9ydGVkRWxlbWVudHMsIGFwcFN0YXRlLCBmaWxlcywge1xuICAgICAgZXhwb3J0QmFja2dyb3VuZCxcbiAgICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBleHBvcnRQYWRkaW5nLFxuICAgIH0pXG4gICAgICAudGhlbigoY2FudmFzKSA9PiB7XG4gICAgICAgIC8vIGlmIGNvbnZlcnRpbmcgdG8gYmxvYiBmYWlscywgdGhlcmUncyBzb21lIHByb2JsZW0gdGhhdCB3aWxsXG4gICAgICAgIC8vIGxpa2VseSBwcmV2ZW50IHByZXZpZXcgYW5kIGV4cG9ydCAoZS5nLiBjYW52YXMgdG9vIGJpZylcbiAgICAgICAgcmV0dXJuIGNhbnZhc1RvQmxvYihjYW52YXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlbmRlclByZXZpZXcoY2FudmFzLCBwcmV2aWV3Tm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHJlbmRlclByZXZpZXcobmV3IENhbnZhc0Vycm9yKCksIHByZXZpZXdOb2RlKTtcbiAgICAgIH0pO1xuICB9LCBbXG4gICAgYXBwU3RhdGUsXG4gICAgZmlsZXMsXG4gICAgZXhwb3J0ZWRFbGVtZW50cyxcbiAgICBleHBvcnRCYWNrZ3JvdW5kLFxuICAgIGV4cG9ydFBhZGRpbmcsXG4gICAgdmlld0JhY2tncm91bmRDb2xvcixcbiAgXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIkV4cG9ydERpYWxvZ1wiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJFeHBvcnREaWFsb2dfX3ByZXZpZXdcIiByZWY9e3ByZXZpZXdSZWZ9IC8+XG4gICAgICB7c3VwcG9ydHNDb250ZXh0RmlsdGVycyAmJlxuICAgICAgICBhY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImV4cG9ydFdpdGhEYXJrTW9kZVwiKX1cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJncmlkXCIsIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwiMWZyXCIgfX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZGlzcGxheTogXCJncmlkXCIsXG4gICAgICAgICAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiBcInJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDE5MHB4LCAxZnIpKVwiLFxuICAgICAgICAgICAgLy8gZHVubm8gd2h5IHRoaXMgaXMgbmVlZGVkLCBidXQgd2hlbiB0aGUgaXRlbXMgd3JhcCBpdCBjcmVhdGVzXG4gICAgICAgICAgICAvLyBhbiBvdmVyZmxvd1xuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImNoYW5nZUV4cG9ydEJhY2tncm91bmRcIil9XG4gICAgICAgICAge3NvbWVFbGVtZW50SXNTZWxlY3RlZCAmJiAoXG4gICAgICAgICAgICA8Q2hlY2tib3hJdGVtXG4gICAgICAgICAgICAgIGNoZWNrZWQ9e2V4cG9ydFNlbGVjdGVkfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGNoZWNrZWQpID0+IHNldEV4cG9ydFNlbGVjdGVkKGNoZWNrZWQpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dChcImxhYmVscy5vbmx5U2VsZWN0ZWRcIil9XG4gICAgICAgICAgICA8L0NoZWNrYm94SXRlbT5cbiAgICAgICAgICApfVxuICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImNoYW5nZUV4cG9ydEVtYmVkU2NlbmVcIil9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBtYXJnaW5Ub3A6IFwiLjZlbVwiIH19PlxuICAgICAgICA8U3RhY2suUm93IGdhcD17Mn0+XG4gICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiY2hhbmdlRXhwb3J0U2NhbGVcIil9XG4gICAgICAgIDwvU3RhY2suUm93PlxuICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5MZWZ0OiBcIjFlbVwiLCB1c2VyU2VsZWN0OiBcIm5vbmVcIiB9fT5cbiAgICAgICAgICB7dChcImJ1dHRvbnMuc2NhbGVcIil9XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgbWFyZ2luOiBcIi42ZW0gMFwiLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7IW5hdGl2ZUZpbGVTeXN0ZW1TdXBwb3J0ZWQgJiZcbiAgICAgICAgICBhY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImNoYW5nZVByb2plY3ROYW1lXCIpfVxuICAgICAgPC9kaXY+XG4gICAgICA8U3RhY2suUm93IGdhcD17Mn0ganVzdGlmeUNvbnRlbnQ9XCJjZW50ZXJcIiBzdHlsZT17eyBtYXJnaW46IFwiMmVtIDBcIiB9fT5cbiAgICAgICAgPEV4cG9ydEJ1dHRvblxuICAgICAgICAgIGNvbG9yPVwiaW5kaWdvXCJcbiAgICAgICAgICB0aXRsZT17dChcImJ1dHRvbnMuZXhwb3J0VG9QbmdcIil9XG4gICAgICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMuZXhwb3J0VG9QbmdcIil9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb25FeHBvcnRUb1BuZyhleHBvcnRlZEVsZW1lbnRzKX1cbiAgICAgICAgPlxuICAgICAgICAgIFBOR1xuICAgICAgICA8L0V4cG9ydEJ1dHRvbj5cbiAgICAgICAgPEV4cG9ydEJ1dHRvblxuICAgICAgICAgIGNvbG9yPVwicmVkXCJcbiAgICAgICAgICB0aXRsZT17dChcImJ1dHRvbnMuZXhwb3J0VG9TdmdcIil9XG4gICAgICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMuZXhwb3J0VG9TdmdcIil9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb25FeHBvcnRUb1N2ZyhleHBvcnRlZEVsZW1lbnRzKX1cbiAgICAgICAgPlxuICAgICAgICAgIFNWR1xuICAgICAgICA8L0V4cG9ydEJ1dHRvbj5cbiAgICAgICAge3Byb2JhYmx5U3VwcG9ydHNDbGlwYm9hcmRCbG9iICYmIChcbiAgICAgICAgICA8RXhwb3J0QnV0dG9uXG4gICAgICAgICAgICB0aXRsZT17dChcImJ1dHRvbnMuY29weVBuZ1RvQ2xpcGJvYXJkXCIpfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25FeHBvcnRUb0NsaXBib2FyZChleHBvcnRlZEVsZW1lbnRzKX1cbiAgICAgICAgICAgIGNvbG9yPVwiZ3JheVwiXG4gICAgICAgICAgICBzaGFkZT17N31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y2xpcGJvYXJkfVxuICAgICAgICAgIDwvRXhwb3J0QnV0dG9uPlxuICAgICAgICApfVxuICAgICAgPC9TdGFjay5Sb3c+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VFeHBvcnREaWFsb2cgPSAoe1xuICBlbGVtZW50cyxcbiAgYXBwU3RhdGUsXG4gIGZpbGVzLFxuICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgYWN0aW9uTWFuYWdlcixcbiAgb25FeHBvcnRUb1BuZyxcbiAgb25FeHBvcnRUb1N2ZyxcbiAgb25FeHBvcnRUb0NsaXBib2FyZCxcbn06IHtcbiAgYXBwU3RhdGU6IEFwcFN0YXRlO1xuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W107XG4gIGZpbGVzOiBCaW5hcnlGaWxlcztcbiAgZXhwb3J0UGFkZGluZz86IG51bWJlcjtcbiAgYWN0aW9uTWFuYWdlcjogQWN0aW9uTWFuYWdlcjtcbiAgb25FeHBvcnRUb1BuZzogRXhwb3J0Q0I7XG4gIG9uRXhwb3J0VG9Tdmc6IEV4cG9ydENCO1xuICBvbkV4cG9ydFRvQ2xpcGJvYXJkOiBFeHBvcnRDQjtcbn0pID0+IHtcbiAgY29uc3QgW21vZGFsSXNTaG93biwgc2V0TW9kYWxJc1Nob3duXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRNb2RhbElzU2hvd24oZmFsc2UpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFRvb2xCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHNldE1vZGFsSXNTaG93bih0cnVlKTtcbiAgICAgICAgfX1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZS1leHBvcnQtYnV0dG9uXCJcbiAgICAgICAgaWNvbj17ZXhwb3J0SW1hZ2V9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBhcmlhLWxhYmVsPXt0KFwiYnV0dG9ucy5leHBvcnRJbWFnZVwiKX1cbiAgICAgICAgc2hvd0FyaWFMYWJlbD17dXNlRGV2aWNlKCkuaXNNb2JpbGV9XG4gICAgICAgIHRpdGxlPXt0KFwiYnV0dG9ucy5leHBvcnRJbWFnZVwiKX1cbiAgICAgIC8+XG4gICAgICB7bW9kYWxJc1Nob3duICYmIChcbiAgICAgICAgPERpYWxvZyBvbkNsb3NlUmVxdWVzdD17aGFuZGxlQ2xvc2V9IHRpdGxlPXt0KFwiYnV0dG9ucy5leHBvcnRJbWFnZVwiKX0+XG4gICAgICAgICAgPEltYWdlRXhwb3J0TW9kYWxcbiAgICAgICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgIGZpbGVzPXtmaWxlc31cbiAgICAgICAgICAgIGV4cG9ydFBhZGRpbmc9e2V4cG9ydFBhZGRpbmd9XG4gICAgICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICAgICAgb25FeHBvcnRUb1BuZz17b25FeHBvcnRUb1BuZ31cbiAgICAgICAgICAgIG9uRXhwb3J0VG9Tdmc9e29uRXhwb3J0VG9Tdmd9XG4gICAgICAgICAgICBvbkV4cG9ydFRvQ2xpcGJvYXJkPXtvbkV4cG9ydFRvQ2xpcGJvYXJkfVxuICAgICAgICAgICAgb25DbG9zZVJlcXVlc3Q9e2hhbmRsZUNsb3NlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRGlhbG9nPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/ImageExportDialog.tsx\n");
2341
2330
 
2342
2331
  /***/ }),
2343
2332
 
@@ -2381,7 +2370,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2381
2370
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2382
2371
 
2383
2372
  "use strict";
2384
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data */ \"../../data/index.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./BackgroundPickerAndDarkModeToggle */ \"../../components/BackgroundPickerAndDarkModeToggle.tsx\");\n/* harmony import */ var _CollabButton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./CollabButton */ \"../../components/CollabButton.tsx\");\n/* harmony import */ var _ErrorDialog__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ErrorDialog */ \"../../components/ErrorDialog.tsx\");\n/* harmony import */ var _ImageExportDialog__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ImageExportDialog */ \"../../components/ImageExportDialog.tsx\");\n/* harmony import */ var _FixedSideContainer__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./FixedSideContainer */ \"../../components/FixedSideContainer.tsx\");\n/* harmony import */ var _HintViewer__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./HintViewer */ \"../../components/HintViewer.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _LoadingMessage__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./LoadingMessage */ \"../../components/LoadingMessage.tsx\");\n/* harmony import */ var _LockButton__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./LockButton */ \"../../components/LockButton.tsx\");\n/* harmony import */ var _MobileMenu__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./MobileMenu */ \"../../components/MobileMenu.tsx\");\n/* harmony import */ var _PasteChartDialog__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./PasteChartDialog */ \"../../components/PasteChartDialog.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _HelpDialog__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./HelpDialog */ \"../../components/HelpDialog.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _UserList__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./UserList */ \"../../components/UserList.tsx\");\n/* harmony import */ var _data_library__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../data/library */ \"../../data/library.ts\");\n/* harmony import */ var _JSONExportDialog__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./JSONExportDialog */ \"../../components/JSONExportDialog.tsx\");\n/* harmony import */ var _LibraryButton__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./LibraryButton */ \"../../components/LibraryButton.tsx\");\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../data/blob */ \"../../data/blob.ts\");\n/* harmony import */ var _LibraryMenu__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./LibraryMenu */ \"../../components/LibraryMenu.tsx\");\n/* harmony import */ var _LayerUI_scss__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./LayerUI.scss */ \"../../components/LayerUI.scss\");\n/* harmony import */ var _LayerUI_scss__WEBPACK_IMPORTED_MODULE_30___default = /*#__PURE__*/__webpack_require__.n(_LayerUI_scss__WEBPACK_IMPORTED_MODULE_30__);\n/* harmony import */ var _Toolbar_scss__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./Toolbar.scss */ \"../../components/Toolbar.scss\");\n/* harmony import */ var _Toolbar_scss__WEBPACK_IMPORTED_MODULE_31___default = /*#__PURE__*/__webpack_require__.n(_Toolbar_scss__WEBPACK_IMPORTED_MODULE_31__);\n/* harmony import */ var _PenModeButton__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./PenModeButton */ \"../../components/PenModeButton.tsx\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../analytics */ \"../../analytics.ts\");\n/* harmony import */ var _components_App__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../components/App */ \"../../components/App.tsx\");\n/* harmony import */ var _Stats__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./Stats */ \"../../components/Stats.tsx\");\n/* harmony import */ var _actions_actionToggleStats__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../actions/actionToggleStats */ \"../../actions/actionToggleStats.tsx\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../actions */ \"../../actions/index.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};\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst LayerUI = ({ actionManager, appState, files, setAppState, canvas, elements, onCollabButtonClick, onLockToggle, onPenModeToggle, onInsertElements, showExitZenModeBtn, showThemeBtn, isCollaborating, renderTopRightUI, renderCustomFooter, renderCustomStats, libraryReturnUrl, UIOptions, focusContainer, library, id, onImageAction, }) => {\n const device = (0,_components_App__WEBPACK_IMPORTED_MODULE_34__.useDevice)();\n const renderJSONExportDialog = () => {\n if (!UIOptions.canvasActions.export) {\n return null;\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_JSONExportDialog__WEBPACK_IMPORTED_MODULE_26__.JSONExportDialog, { elements: elements, appState: appState, files: files, actionManager: actionManager, exportOpts: UIOptions.canvasActions.export, canvas: canvas }));\n };\n const renderImageExportDialog = () => {\n if (!UIOptions.canvasActions.saveAsImage) {\n return null;\n }\n const createExporter = (type) => (exportedElements) => __awaiter(void 0, void 0, void 0, function* () {\n (0,_analytics__WEBPACK_IMPORTED_MODULE_33__.trackEvent)(\"export\", type, \"ui\");\n const fileHandle = yield (0,_data__WEBPACK_IMPORTED_MODULE_4__.exportCanvas)(type, exportedElements, appState, files, {\n exportBackground: appState.exportBackground,\n name: appState.name,\n viewBackgroundColor: appState.viewBackgroundColor,\n })\n .catch(_utils__WEBPACK_IMPORTED_MODULE_8__.muteFSAbortError)\n .catch((error) => {\n console.error(error);\n setAppState({ errorMessage: error.message });\n });\n if (appState.exportEmbedScene &&\n fileHandle &&\n (0,_data_blob__WEBPACK_IMPORTED_MODULE_28__.isImageFileHandle)(fileHandle)) {\n setAppState({ fileHandle });\n }\n });\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ImageExportDialog__WEBPACK_IMPORTED_MODULE_13__.ImageExportDialog, { elements: elements, appState: appState, files: files, actionManager: actionManager, onExportToPng: createExporter(\"png\"), onExportToSvg: createExporter(\"svg\"), onExportToClipboard: createExporter(\"clipboard\") }));\n };\n const Separator = () => {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { style: { width: \".625em\" } });\n };\n const renderViewModeCanvasActions = () => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"canvasActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\n \"transition-left\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 2, style: { zIndex: 1 } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1, justifyContent: \"space-between\" }, { children: [renderJSONExportDialog(), renderImageExportDialog()] })) })) })) })));\n };\n const renderCanvasActions = () => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"canvasActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\n \"transition-left\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 2, style: { zIndex: 1 } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4 }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1, justifyContent: \"space-between\" }, { children: [actionManager.renderAction(\"clearCanvas\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Separator, {}), actionManager.renderAction(\"loadScene\"), renderJSONExportDialog(), renderImageExportDialog(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Separator, {}), onCollabButtonClick && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_CollabButton__WEBPACK_IMPORTED_MODULE_11__[\"default\"], { isCollaborating: isCollaborating, collaboratorCount: appState.collaborators.size, onClick: onCollabButtonClick }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_10__.BackgroundPickerAndDarkModeToggle, { actionManager: actionManager, appState: appState, setAppState: setAppState, showThemeBtn: showThemeBtn }), appState.fileHandle && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: actionManager.renderAction(\"saveToActiveFile\") }))] })) })) })));\n const renderSelectedShapeActions = () => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"selectedShapeActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\n \"transition-left\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ className: _constants__WEBPACK_IMPORTED_MODULE_3__.CLASSES.SHAPE_ACTIONS_MENU, padding: 2, style: {\n // we want to make sure this doesn't overflow so subtracting 200\n // which is approximately height of zoom footer and top left menu items with some buffer\n // if active file name is displayed, subtracting 248 to account for its height\n maxHeight: `${appState.height - (appState.fileHandle ? 248 : 200)}px`,\n } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.SelectedShapeActions, { appState: appState, elements: elements, renderAction: actionManager.renderAction, activeTool: appState.activeTool.type }) })) })));\n const closeLibrary = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {\n const isDialogOpen = !!document.querySelector(\".Dialog\");\n // Prevent closing if any dialog is open\n if (isDialogOpen) {\n return;\n }\n setAppState({ isLibraryOpen: false });\n }, [setAppState]);\n const deselectItems = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {\n setAppState({\n selectedElementIds: {},\n selectedGroupIds: {},\n });\n }, [setAppState]);\n const libraryMenu = appState.isLibraryOpen ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryMenu__WEBPACK_IMPORTED_MODULE_29__.LibraryMenu, { pendingElements: (0,_scene__WEBPACK_IMPORTED_MODULE_7__.getSelectedElements)(elements, appState, true), onClose: closeLibrary, onInsertLibraryItems: (libraryItems) => {\n onInsertElements((0,_data_library__WEBPACK_IMPORTED_MODULE_25__.distributeLibraryItemsOnSquareGrid)(libraryItems));\n }, onAddToLibrary: deselectItems, setAppState: setAppState, libraryReturnUrl: libraryReturnUrl, focusContainer: focusContainer, library: library, theme: appState.theme, files: files, id: id, appState: appState })) : null;\n const renderFixedSideContainer = () => {\n const shouldRenderSelectedShapeActions = (0,_element__WEBPACK_IMPORTED_MODULE_5__.showSelectedShapeActions)(appState, elements);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FixedSideContainer__WEBPACK_IMPORTED_MODULE_14__.FixedSideContainer, Object.assign({ side: \"top\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"App-menu App-menu_top\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n \"disable-pointerEvents\": appState.zenModeEnabled,\n }) }, { children: [appState.viewModeEnabled\n ? renderViewModeCanvasActions()\n : renderCanvasActions(), shouldRenderSelectedShapeActions && renderSelectedShapeActions()] })), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"shapes\" }, { children: (heading) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4, align: \"start\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-toolbar-container\", {\n \"zen-mode\": appState.zenModeEnabled,\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PenModeButton__WEBPACK_IMPORTED_MODULE_32__.PenModeButton, { zenModeEnabled: appState.zenModeEnabled, checked: appState.penMode, onChange: onPenModeToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.penMode\"), penDetected: appState.penDetected }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LockButton__WEBPACK_IMPORTED_MODULE_18__.LockButton, { zenModeEnabled: appState.zenModeEnabled, checked: appState.activeTool.locked, onChange: () => onLockToggle(), title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.lock\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 1, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-toolbar\", {\n \"zen-mode\": appState.zenModeEnabled,\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HintViewer__WEBPACK_IMPORTED_MODULE_15__.HintViewer, { appState: appState, elements: elements, isMobile: device.isMobile }), heading, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ShapesSwitcher, { appState: appState, canvas: canvas, activeTool: appState.activeTool, setAppState: setAppState, onImageAction: ({ pointerType }) => {\n onImageAction({\n insertOnCanvasDirectly: pointerType !== \"mouse\",\n });\n } }) }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryButton__WEBPACK_IMPORTED_MODULE_27__.LibraryButton, { appState: appState, setAppState: setAppState })] })) }))) }))), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__top-right zen-mode-transition\", {\n \"transition-right\": appState.zenModeEnabled,\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UserList__WEBPACK_IMPORTED_MODULE_24__.UserList, { collaborators: appState.collaborators, actionManager: actionManager }), renderTopRightUI === null || renderTopRightUI === void 0 ? void 0 : renderTopRightUI(device.isMobile, appState)] }))] })) })));\n };\n const renderBottomAppMenu = () => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"footer\", Object.assign({ role: \"contentinfo\", className: \"layer-ui__wrapper__footer App-menu App-menu_bottom\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-left zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 2 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"canvasActions\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ZoomActions, { renderAction: actionManager.renderAction, zoom: appState.zoom }) })), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"undo-redo-buttons zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-bottom\": appState.zenModeEnabled,\n }) }, { children: [actionManager.renderAction(\"undo\", { size: \"small\" }), actionManager.renderAction(\"redo\", { size: \"small\" })] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"eraser-buttons zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\n }) }, { children: actionManager.renderAction(\"eraser\", { size: \"small\" }) }))] })), !appState.viewModeEnabled &&\n appState.multiElement &&\n device.isTouchScreen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"finalize-button zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\n }) }, { children: actionManager.renderAction(\"finalize\", { size: \"small\" }) })))] })) })) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-center zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-bottom\": appState.zenModeEnabled,\n }) }, { children: renderCustomFooter === null || renderCustomFooter === void 0 ? void 0 : renderCustomFooter(false, appState) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-right zen-mode-transition\", {\n \"transition-right disable-pointerEvents\": appState.zenModeEnabled,\n }) }, { children: actionManager.renderAction(\"toggleShortcuts\") })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"disable-zen-mode\", {\n \"disable-zen-mode--visible\": showExitZenModeBtn,\n }), onClick: () => actionManager.executeAction(_actions__WEBPACK_IMPORTED_MODULE_37__.actionToggleZenMode) }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exitZenMode\") }))] })));\n };\n const dialogs = ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [appState.isLoading && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LoadingMessage__WEBPACK_IMPORTED_MODULE_17__.LoadingMessage, { delay: 250 }), appState.errorMessage && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ErrorDialog__WEBPACK_IMPORTED_MODULE_12__.ErrorDialog, { message: appState.errorMessage, onClose: () => setAppState({ errorMessage: null }) })), appState.showHelpDialog && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HelpDialog__WEBPACK_IMPORTED_MODULE_22__.HelpDialog, { onClose: () => {\n setAppState({ showHelpDialog: false });\n } })), appState.pasteDialog.shown && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PasteChartDialog__WEBPACK_IMPORTED_MODULE_20__.PasteChartDialog, { setAppState: setAppState, appState: appState, onInsertChart: onInsertElements, onClose: () => setAppState({\n pasteDialog: { shown: false, data: null },\n }) }))] }));\n const renderStats = () => {\n if (!appState.showStats) {\n return null;\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stats__WEBPACK_IMPORTED_MODULE_35__.Stats, { appState: appState, setAppState: setAppState, elements: elements, onClose: () => {\n actionManager.executeAction(_actions_actionToggleStats__WEBPACK_IMPORTED_MODULE_36__.actionToggleStats);\n }, renderCustomStats: renderCustomStats }));\n };\n return device.isMobile ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [dialogs, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MobileMenu__WEBPACK_IMPORTED_MODULE_19__.MobileMenu, { appState: appState, elements: elements, actionManager: actionManager, libraryMenu: libraryMenu, renderJSONExportDialog: renderJSONExportDialog, renderImageExportDialog: renderImageExportDialog, setAppState: setAppState, onCollabButtonClick: onCollabButtonClick, onLockToggle: () => onLockToggle(), onPenModeToggle: onPenModeToggle, canvas: canvas, isCollaborating: isCollaborating, renderCustomFooter: renderCustomFooter, showThemeBtn: showThemeBtn, onImageAction: onImageAction, renderTopRightUI: renderTopRightUI, renderStats: renderStats })] })) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper\", {\n \"disable-pointerEvents\": appState.draggingElement ||\n appState.resizingElement ||\n (appState.editingElement &&\n !(0,_element__WEBPACK_IMPORTED_MODULE_5__.isTextElement)(appState.editingElement)),\n }), style: appState.isLibraryOpen &&\n appState.isLibraryMenuDocked &&\n device.canDeviceFitSidebar\n ? { width: `calc(100% - ${_constants__WEBPACK_IMPORTED_MODULE_3__.LIBRARY_SIDEBAR_WIDTH}px)` }\n : {} }, { children: [dialogs, renderFixedSideContainer(), renderBottomAppMenu(), renderStats(), appState.scrolledOutside && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"scroll-back-to-content\", onClick: () => {\n setAppState(Object.assign({}, (0,_scene__WEBPACK_IMPORTED_MODULE_7__.calculateScrollCenter)(elements, appState, canvas)));\n } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.scrollBackToContent\") })))] })), appState.isLibraryOpen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"layer-ui__sidebar\" }, { children: libraryMenu })))] }));\n};\nconst areEqual = (prev, next) => {\n const getNecessaryObj = (appState) => {\n const { suggestedBindings, startBoundElement: boundElement } = appState, ret = __rest(appState, [\"suggestedBindings\", \"startBoundElement\"]);\n return ret;\n };\n const prevAppState = getNecessaryObj(prev.appState);\n const nextAppState = getNecessaryObj(next.appState);\n const keys = Object.keys(prevAppState);\n return (prev.renderCustomFooter === next.renderCustomFooter &&\n prev.langCode === next.langCode &&\n prev.elements === next.elements &&\n prev.files === next.files &&\n keys.every((key) => prevAppState[key] === nextAppState[key]));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (react__WEBPACK_IMPORTED_MODULE_2___default().memo(LayerUI, areEqual));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUM7SUFFcEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQWdDLENBQUM7SUFDdEUsT0FBTyxDQUNMLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxJQUFJLENBQUMsa0JBQWtCO1FBQ25ELElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVE7UUFDL0IsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUTtRQUMvQixJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDN0QsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGlFQUFlLGlEQUFVLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbXBvbmVudHMvTGF5ZXJVSS50c3g/MDg3OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xzeCBmcm9tIFwiY2xzeFwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpb25NYW5hZ2VyIH0gZnJvbSBcIi4uL2FjdGlvbnMvbWFuYWdlclwiO1xuaW1wb3J0IHsgQ0xBU1NFUywgTElCUkFSWV9TSURFQkFSX1dJRFRIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZXhwb3J0Q2FudmFzIH0gZnJvbSBcIi4uL2RhdGFcIjtcbmltcG9ydCB7IGlzVGV4dEVsZW1lbnQsIHNob3dTZWxlY3RlZFNoYXBlQWN0aW9ucyB9IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgeyBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgTGFuZ3VhZ2UsIHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IHsgY2FsY3VsYXRlU2Nyb2xsQ2VudGVyLCBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSBcIi4uL3NjZW5lXCI7XG5pbXBvcnQgeyBFeHBvcnRUeXBlIH0gZnJvbSBcIi4uL3NjZW5lL3R5cGVzXCI7XG5pbXBvcnQgeyBBcHBQcm9wcywgQXBwU3RhdGUsIEV4Y2FsaWRyYXdQcm9wcywgQmluYXJ5RmlsZXMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IG11dGVGU0Fib3J0RXJyb3IgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFNlbGVjdGVkU2hhcGVBY3Rpb25zLCBTaGFwZXNTd2l0Y2hlciwgWm9vbUFjdGlvbnMgfSBmcm9tIFwiLi9BY3Rpb25zXCI7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kUGlja2VyQW5kRGFya01vZGVUb2dnbGUgfSBmcm9tIFwiLi9CYWNrZ3JvdW5kUGlja2VyQW5kRGFya01vZGVUb2dnbGVcIjtcbmltcG9ydCBDb2xsYWJCdXR0b24gZnJvbSBcIi4vQ29sbGFiQnV0dG9uXCI7XG5pbXBvcnQgeyBFcnJvckRpYWxvZyB9IGZyb20gXCIuL0Vycm9yRGlhbG9nXCI7XG5pbXBvcnQgeyBFeHBvcnRDQiwgSW1hZ2VFeHBvcnREaWFsb2cgfSBmcm9tIFwiLi9JbWFnZUV4cG9ydERpYWxvZ1wiO1xuaW1wb3J0IHsgRml4ZWRTaWRlQ29udGFpbmVyIH0gZnJvbSBcIi4vRml4ZWRTaWRlQ29udGFpbmVyXCI7XG5pbXBvcnQgeyBIaW50Vmlld2VyIH0gZnJvbSBcIi4vSGludFZpZXdlclwiO1xuaW1wb3J0IHsgSXNsYW5kIH0gZnJvbSBcIi4vSXNsYW5kXCI7XG5pbXBvcnQgeyBMb2FkaW5nTWVzc2FnZSB9IGZyb20gXCIuL0xvYWRpbmdNZXNzYWdlXCI7XG5pbXBvcnQgeyBMb2NrQnV0dG9uIH0gZnJvbSBcIi4vTG9ja0J1dHRvblwiO1xuaW1wb3J0IHsgTW9iaWxlTWVudSB9IGZyb20gXCIuL01vYmlsZU1lbnVcIjtcbmltcG9ydCB7IFBhc3RlQ2hhcnREaWFsb2cgfSBmcm9tIFwiLi9QYXN0ZUNoYXJ0RGlhbG9nXCI7XG5pbXBvcnQgeyBTZWN0aW9uIH0gZnJvbSBcIi4vU2VjdGlvblwiO1xuaW1wb3J0IHsgSGVscERpYWxvZyB9IGZyb20gXCIuL0hlbHBEaWFsb2dcIjtcbmltcG9ydCBTdGFjayBmcm9tIFwiLi9TdGFja1wiO1xuaW1wb3J0IHsgVXNlckxpc3QgfSBmcm9tIFwiLi9Vc2VyTGlzdFwiO1xuaW1wb3J0IExpYnJhcnksIHsgZGlzdHJpYnV0ZUxpYnJhcnlJdGVtc09uU3F1YXJlR3JpZCB9IGZyb20gXCIuLi9kYXRhL2xpYnJhcnlcIjtcbmltcG9ydCB7IEpTT05FeHBvcnREaWFsb2cgfSBmcm9tIFwiLi9KU09ORXhwb3J0RGlhbG9nXCI7XG5pbXBvcnQgeyBMaWJyYXJ5QnV0dG9uIH0gZnJvbSBcIi4vTGlicmFyeUJ1dHRvblwiO1xuaW1wb3J0IHsgaXNJbWFnZUZpbGVIYW5kbGUgfSBmcm9tIFwiLi4vZGF0YS9ibG9iXCI7XG5pbXBvcnQgeyBMaWJyYXJ5TWVudSB9IGZyb20gXCIuL0xpYnJhcnlNZW51XCI7XG5cbmltcG9ydCBcIi4vTGF5ZXJVSS5zY3NzXCI7XG5pbXBvcnQgXCIuL1Rvb2xiYXIuc2Nzc1wiO1xuaW1wb3J0IHsgUGVuTW9kZUJ1dHRvbiB9IGZyb20gXCIuL1Blbk1vZGVCdXR0b25cIjtcbmltcG9ydCB7IHRyYWNrRXZlbnQgfSBmcm9tIFwiLi4vYW5hbHl0aWNzXCI7XG5pbXBvcnQgeyB1c2VEZXZpY2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9BcHBcIjtcbmltcG9ydCB7IFN0YXRzIH0gZnJvbSBcIi4vU3RhdHNcIjtcbmltcG9ydCB7IGFjdGlvblRvZ2dsZVN0YXRzIH0gZnJvbSBcIi4uL2FjdGlvbnMvYWN0aW9uVG9nZ2xlU3RhdHNcIjtcbmltcG9ydCB7IGFjdGlvblRvZ2dsZVplbk1vZGUgfSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xuXG5pbnRlcmZhY2UgTGF5ZXJVSVByb3BzIHtcbiAgYWN0aW9uTWFuYWdlcjogQWN0aW9uTWFuYWdlcjtcbiAgYXBwU3RhdGU6IEFwcFN0YXRlO1xuICBmaWxlczogQmluYXJ5RmlsZXM7XG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsO1xuICBzZXRBcHBTdGF0ZTogUmVhY3QuQ29tcG9uZW50PGFueSwgQXBwU3RhdGU+W1wic2V0U3RhdGVcIl07XG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXTtcbiAgb25Db2xsYWJCdXR0b25DbGljaz86ICgpID0+IHZvaWQ7XG4gIG9uTG9ja1RvZ2dsZTogKCkgPT4gdm9pZDtcbiAgb25QZW5Nb2RlVG9nZ2xlOiAoKSA9PiB2b2lkO1xuICBvbkluc2VydEVsZW1lbnRzOiAoZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdKSA9PiB2b2lkO1xuICBzaG93RXhpdFplbk1vZGVCdG46IGJvb2xlYW47XG4gIHNob3dUaGVtZUJ0bjogYm9vbGVhbjtcbiAgbGFuZ0NvZGU6IExhbmd1YWdlW1wiY29kZVwiXTtcbiAgaXNDb2xsYWJvcmF0aW5nOiBib29sZWFuO1xuICByZW5kZXJUb3BSaWdodFVJPzogRXhjYWxpZHJhd1Byb3BzW1wicmVuZGVyVG9wUmlnaHRVSVwiXTtcbiAgcmVuZGVyQ3VzdG9tRm9vdGVyPzogRXhjYWxpZHJhd1Byb3BzW1wicmVuZGVyRm9vdGVyXCJdO1xuICByZW5kZXJDdXN0b21TdGF0cz86IEV4Y2FsaWRyYXdQcm9wc1tcInJlbmRlckN1c3RvbVN0YXRzXCJdO1xuICBsaWJyYXJ5UmV0dXJuVXJsOiBFeGNhbGlkcmF3UHJvcHNbXCJsaWJyYXJ5UmV0dXJuVXJsXCJdO1xuICBVSU9wdGlvbnM6IEFwcFByb3BzW1wiVUlPcHRpb25zXCJdO1xuICBmb2N1c0NvbnRhaW5lcjogKCkgPT4gdm9pZDtcbiAgbGlicmFyeTogTGlicmFyeTtcbiAgaWQ6IHN0cmluZztcbiAgb25JbWFnZUFjdGlvbjogKGRhdGE6IHsgaW5zZXJ0T25DYW52YXNEaXJlY3RseTogYm9vbGVhbiB9KSA9PiB2b2lkO1xufVxuY29uc3QgTGF5ZXJVSSA9ICh7XG4gIGFjdGlvbk1hbmFnZXIsXG4gIGFwcFN0YXRlLFxuICBmaWxlcyxcbiAgc2V0QXBwU3RhdGUsXG4gIGNhbnZhcyxcbiAgZWxlbWVudHMsXG4gIG9uQ29sbGFiQnV0dG9uQ2xpY2ssXG4gIG9uTG9ja1RvZ2dsZSxcbiAgb25QZW5Nb2RlVG9nZ2xlLFxuICBvbkluc2VydEVsZW1lbnRzLFxuICBzaG93RXhpdFplbk1vZGVCdG4sXG4gIHNob3dUaGVtZUJ0bixcbiAgaXNDb2xsYWJvcmF0aW5nLFxuICByZW5kZXJUb3BSaWdodFVJLFxuICByZW5kZXJDdXN0b21Gb290ZXIsXG4gIHJlbmRlckN1c3RvbVN0YXRzLFxuICBsaWJyYXJ5UmV0dXJuVXJsLFxuICBVSU9wdGlvbnMsXG4gIGZvY3VzQ29udGFpbmVyLFxuICBsaWJyYXJ5LFxuICBpZCxcbiAgb25JbWFnZUFjdGlvbixcbn06IExheWVyVUlQcm9wcykgPT4ge1xuICBjb25zdCBkZXZpY2UgPSB1c2VEZXZpY2UoKTtcblxuICBjb25zdCByZW5kZXJKU09ORXhwb3J0RGlhbG9nID0gKCkgPT4ge1xuICAgIGlmICghVUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuZXhwb3J0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEpTT05FeHBvcnREaWFsb2dcbiAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgIGZpbGVzPXtmaWxlc31cbiAgICAgICAgYWN0aW9uTWFuYWdlcj17YWN0aW9uTWFuYWdlcn1cbiAgICAgICAgZXhwb3J0T3B0cz17VUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuZXhwb3J0fVxuICAgICAgICBjYW52YXM9e2NhbnZhc31cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJJbWFnZUV4cG9ydERpYWxvZyA9ICgpID0+IHtcbiAgICBpZiAoIVVJT3B0aW9ucy5jYW52YXNBY3Rpb25zLnNhdmVBc0ltYWdlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVFeHBvcnRlciA9XG4gICAgICAodHlwZTogRXhwb3J0VHlwZSk6IEV4cG9ydENCID0+XG4gICAgICBhc3luYyAoZXhwb3J0ZWRFbGVtZW50cykgPT4ge1xuICAgICAgICB0cmFja0V2ZW50KFwiZXhwb3J0XCIsIHR5cGUsIFwidWlcIik7XG4gICAgICAgIGNvbnN0IGZpbGVIYW5kbGUgPSBhd2FpdCBleHBvcnRDYW52YXMoXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBleHBvcnRlZEVsZW1lbnRzLFxuICAgICAgICAgIGFwcFN0YXRlLFxuICAgICAgICAgIGZpbGVzLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV4cG9ydEJhY2tncm91bmQ6IGFwcFN0YXRlLmV4cG9ydEJhY2tncm91bmQsXG4gICAgICAgICAgICBuYW1lOiBhcHBTdGF0ZS5uYW1lLFxuICAgICAgICAgICAgdmlld0JhY2tncm91bmRDb2xvcjogYXBwU3RhdGUudmlld0JhY2tncm91bmRDb2xvcixcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgICAgLmNhdGNoKG11dGVGU0Fib3J0RXJyb3IpXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICBzZXRBcHBTdGF0ZSh7IGVycm9yTWVzc2FnZTogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgYXBwU3RhdGUuZXhwb3J0RW1iZWRTY2VuZSAmJlxuICAgICAgICAgIGZpbGVIYW5kbGUgJiZcbiAgICAgICAgICBpc0ltYWdlRmlsZUhhbmRsZShmaWxlSGFuZGxlKVxuICAgICAgICApIHtcbiAgICAgICAgICBzZXRBcHBTdGF0ZSh7IGZpbGVIYW5kbGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEltYWdlRXhwb3J0RGlhbG9nXG4gICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICBmaWxlcz17ZmlsZXN9XG4gICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgIG9uRXhwb3J0VG9Qbmc9e2NyZWF0ZUV4cG9ydGVyKFwicG5nXCIpfVxuICAgICAgICBvbkV4cG9ydFRvU3ZnPXtjcmVhdGVFeHBvcnRlcihcInN2Z1wiKX1cbiAgICAgICAgb25FeHBvcnRUb0NsaXBib2FyZD17Y3JlYXRlRXhwb3J0ZXIoXCJjbGlwYm9hcmRcIil9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgU2VwYXJhdG9yID0gKCkgPT4ge1xuICAgIHJldHVybiA8ZGl2IHN0eWxlPXt7IHdpZHRoOiBcIi42MjVlbVwiIH19IC8+O1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlclZpZXdNb2RlQ2FudmFzQWN0aW9ucyA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFNlY3Rpb25cbiAgICAgICAgaGVhZGluZz1cImNhbnZhc0FjdGlvbnNcIlxuICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJ6ZW4tbW9kZS10cmFuc2l0aW9uXCIsIHtcbiAgICAgICAgICBcInRyYW5zaXRpb24tbGVmdFwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgfSl9XG4gICAgICA+XG4gICAgICAgIHsvKiB0aGUgekluZGV4IGVuc3VyZXMgdGhpcyBtZW51IGhhcyBoaWdoZXIgc3RhY2tpbmcgb3JkZXIsXG4gICAgICAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2V4Y2FsaWRyYXcvZXhjYWxpZHJhdy9wdWxsLzE0NDUgKi99XG4gICAgICAgIDxJc2xhbmQgcGFkZGluZz17Mn0gc3R5bGU9e3sgekluZGV4OiAxIH19PlxuICAgICAgICAgIDxTdGFjay5Db2wgZ2FwPXs0fT5cbiAgICAgICAgICAgIDxTdGFjay5Sb3cgZ2FwPXsxfSBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgICAgICAge3JlbmRlckpTT05FeHBvcnREaWFsb2coKX1cbiAgICAgICAgICAgICAge3JlbmRlckltYWdlRXhwb3J0RGlhbG9nKCl9XG4gICAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICA8L1N0YWNrLkNvbD5cbiAgICAgICAgPC9Jc2xhbmQ+XG4gICAgICA8L1NlY3Rpb24+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJDYW52YXNBY3Rpb25zID0gKCkgPT4gKFxuICAgIDxTZWN0aW9uXG4gICAgICBoZWFkaW5nPVwiY2FudmFzQWN0aW9uc1wiXG4gICAgICBjbGFzc05hbWU9e2Nsc3goXCJ6ZW4tbW9kZS10cmFuc2l0aW9uXCIsIHtcbiAgICAgICAgXCJ0cmFuc2l0aW9uLWxlZnRcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICB9KX1cbiAgICA+XG4gICAgICB7LyogdGhlIHpJbmRleCBlbnN1cmVzIHRoaXMgbWVudSBoYXMgaGlnaGVyIHN0YWNraW5nIG9yZGVyLFxuICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC8xNDQ1ICovfVxuICAgICAgPElzbGFuZCBwYWRkaW5nPXsyfSBzdHlsZT17eyB6SW5kZXg6IDEgfX0+XG4gICAgICAgIDxTdGFjay5Db2wgZ2FwPXs0fT5cbiAgICAgICAgICA8U3RhY2suUm93IGdhcD17MX0ganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJjbGVhckNhbnZhc1wiKX1cbiAgICAgICAgICAgIDxTZXBhcmF0b3IgLz5cbiAgICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImxvYWRTY2VuZVwiKX1cbiAgICAgICAgICAgIHtyZW5kZXJKU09ORXhwb3J0RGlhbG9nKCl9XG4gICAgICAgICAgICB7cmVuZGVySW1hZ2VFeHBvcnREaWFsb2coKX1cbiAgICAgICAgICAgIDxTZXBhcmF0b3IgLz5cbiAgICAgICAgICAgIHtvbkNvbGxhYkJ1dHRvbkNsaWNrICYmIChcbiAgICAgICAgICAgICAgPENvbGxhYkJ1dHRvblxuICAgICAgICAgICAgICAgIGlzQ29sbGFib3JhdGluZz17aXNDb2xsYWJvcmF0aW5nfVxuICAgICAgICAgICAgICAgIGNvbGxhYm9yYXRvckNvdW50PXthcHBTdGF0ZS5jb2xsYWJvcmF0b3JzLnNpemV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17b25Db2xsYWJCdXR0b25DbGlja31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9TdGFjay5Sb3c+XG4gICAgICAgICAgPEJhY2tncm91bmRQaWNrZXJBbmREYXJrTW9kZVRvZ2dsZVxuICAgICAgICAgICAgYWN0aW9uTWFuYWdlcj17YWN0aW9uTWFuYWdlcn1cbiAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICAgIHNob3dUaGVtZUJ0bj17c2hvd1RoZW1lQnRufVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2FwcFN0YXRlLmZpbGVIYW5kbGUgJiYgKFxuICAgICAgICAgICAgPD57YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJzYXZlVG9BY3RpdmVGaWxlXCIpfTwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgPC9Jc2xhbmQ+XG4gICAgPC9TZWN0aW9uPlxuICApO1xuXG4gIGNvbnN0IHJlbmRlclNlbGVjdGVkU2hhcGVBY3Rpb25zID0gKCkgPT4gKFxuICAgIDxTZWN0aW9uXG4gICAgICBoZWFkaW5nPVwic2VsZWN0ZWRTaGFwZUFjdGlvbnNcIlxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiemVuLW1vZGUtdHJhbnNpdGlvblwiLCB7XG4gICAgICAgIFwidHJhbnNpdGlvbi1sZWZ0XCI6IGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgfSl9XG4gICAgPlxuICAgICAgPElzbGFuZFxuICAgICAgICBjbGFzc05hbWU9e0NMQVNTRVMuU0hBUEVfQUNUSU9OU19NRU5VfVxuICAgICAgICBwYWRkaW5nPXsyfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIC8vIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBvdmVyZmxvdyBzbyBzdWJ0cmFjdGluZyAyMDBcbiAgICAgICAgICAvLyB3aGljaCBpcyBhcHByb3hpbWF0ZWx5IGhlaWdodCBvZiB6b29tIGZvb3RlciBhbmQgdG9wIGxlZnQgbWVudSBpdGVtcyB3aXRoIHNvbWUgYnVmZmVyXG4gICAgICAgICAgLy8gaWYgYWN0aXZlIGZpbGUgbmFtZSBpcyBkaXNwbGF5ZWQsIHN1YnRyYWN0aW5nIDI0OCB0byBhY2NvdW50IGZvciBpdHMgaGVpZ2h0XG4gICAgICAgICAgbWF4SGVpZ2h0OiBgJHthcHBTdGF0ZS5oZWlnaHQgLSAoYXBwU3RhdGUuZmlsZUhhbmRsZSA/IDI0OCA6IDIwMCl9cHhgLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8U2VsZWN0ZWRTaGFwZUFjdGlvbnNcbiAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICAgIHJlbmRlckFjdGlvbj17YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb259XG4gICAgICAgICAgYWN0aXZlVG9vbD17YXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlfVxuICAgICAgICAvPlxuICAgICAgPC9Jc2xhbmQ+XG4gICAgPC9TZWN0aW9uPlxuICApO1xuXG4gIGNvbnN0IGNsb3NlTGlicmFyeSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBpc0RpYWxvZ09wZW4gPSAhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuRGlhbG9nXCIpO1xuXG4gICAgLy8gUHJldmVudCBjbG9zaW5nIGlmIGFueSBkaWFsb2cgaXMgb3BlblxuICAgIGlmIChpc0RpYWxvZ09wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0QXBwU3RhdGUoeyBpc0xpYnJhcnlPcGVuOiBmYWxzZSB9KTtcbiAgfSwgW3NldEFwcFN0YXRlXSk7XG5cbiAgY29uc3QgZGVzZWxlY3RJdGVtcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRBcHBTdGF0ZSh7XG4gICAgICBzZWxlY3RlZEVsZW1lbnRJZHM6IHt9LFxuICAgICAgc2VsZWN0ZWRHcm91cElkczoge30sXG4gICAgfSk7XG4gIH0sIFtzZXRBcHBTdGF0ZV0pO1xuXG4gIGNvbnN0IGxpYnJhcnlNZW51ID0gYXBwU3RhdGUuaXNMaWJyYXJ5T3BlbiA/IChcbiAgICA8TGlicmFyeU1lbnVcbiAgICAgIHBlbmRpbmdFbGVtZW50cz17Z2V0U2VsZWN0ZWRFbGVtZW50cyhlbGVtZW50cywgYXBwU3RhdGUsIHRydWUpfVxuICAgICAgb25DbG9zZT17Y2xvc2VMaWJyYXJ5fVxuICAgICAgb25JbnNlcnRMaWJyYXJ5SXRlbXM9eyhsaWJyYXJ5SXRlbXMpID0+IHtcbiAgICAgICAgb25JbnNlcnRFbGVtZW50cyhkaXN0cmlidXRlTGlicmFyeUl0ZW1zT25TcXVhcmVHcmlkKGxpYnJhcnlJdGVtcykpO1xuICAgICAgfX1cbiAgICAgIG9uQWRkVG9MaWJyYXJ5PXtkZXNlbGVjdEl0ZW1zfVxuICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgbGlicmFyeVJldHVyblVybD17bGlicmFyeVJldHVyblVybH1cbiAgICAgIGZvY3VzQ29udGFpbmVyPXtmb2N1c0NvbnRhaW5lcn1cbiAgICAgIGxpYnJhcnk9e2xpYnJhcnl9XG4gICAgICB0aGVtZT17YXBwU3RhdGUudGhlbWV9XG4gICAgICBmaWxlcz17ZmlsZXN9XG4gICAgICBpZD17aWR9XG4gICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgLz5cbiAgKSA6IG51bGw7XG5cbiAgY29uc3QgcmVuZGVyRml4ZWRTaWRlQ29udGFpbmVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHNob3VsZFJlbmRlclNlbGVjdGVkU2hhcGVBY3Rpb25zID0gc2hvd1NlbGVjdGVkU2hhcGVBY3Rpb25zKFxuICAgICAgYXBwU3RhdGUsXG4gICAgICBlbGVtZW50cyxcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxGaXhlZFNpZGVDb250YWluZXIgc2lkZT1cInRvcFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIkFwcC1tZW51IEFwcC1tZW51X3RvcFwiPlxuICAgICAgICAgIDxTdGFjay5Db2xcbiAgICAgICAgICAgIGdhcD17NH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeCh7XG4gICAgICAgICAgICAgIFwiZGlzYWJsZS1wb2ludGVyRXZlbnRzXCI6IGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2FwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZFxuICAgICAgICAgICAgICA/IHJlbmRlclZpZXdNb2RlQ2FudmFzQWN0aW9ucygpXG4gICAgICAgICAgICAgIDogcmVuZGVyQ2FudmFzQWN0aW9ucygpfVxuICAgICAgICAgICAge3Nob3VsZFJlbmRlclNlbGVjdGVkU2hhcGVBY3Rpb25zICYmIHJlbmRlclNlbGVjdGVkU2hhcGVBY3Rpb25zKCl9XG4gICAgICAgICAgPC9TdGFjay5Db2w+XG4gICAgICAgICAgeyFhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgPFNlY3Rpb24gaGVhZGluZz1cInNoYXBlc1wiPlxuICAgICAgICAgICAgICB7KGhlYWRpbmcpID0+IChcbiAgICAgICAgICAgICAgICA8U3RhY2suQ29sIGdhcD17NH0gYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgICAgICAgPFN0YWNrLlJvd1xuICAgICAgICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcIkFwcC10b29sYmFyLWNvbnRhaW5lclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJ6ZW4tbW9kZVwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxQZW5Nb2RlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgemVuTW9kZUVuYWJsZWQ9e2FwcFN0YXRlLnplbk1vZGVFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FwcFN0YXRlLnBlbk1vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uUGVuTW9kZVRvZ2dsZX1cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIucGVuTW9kZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICBwZW5EZXRlY3RlZD17YXBwU3RhdGUucGVuRGV0ZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxMb2NrQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgemVuTW9kZUVuYWJsZWQ9e2FwcFN0YXRlLnplbk1vZGVFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FwcFN0YXRlLmFjdGl2ZVRvb2wubG9ja2VkfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBvbkxvY2tUb2dnbGUoKX1cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIubG9ja1wiKX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPElzbGFuZFxuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiQXBwLXRvb2xiYXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ6ZW4tbW9kZVwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxIaW50Vmlld2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICBpc01vYmlsZT17ZGV2aWNlLmlzTW9iaWxlfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAge2hlYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgPFN0YWNrLlJvdyBnYXA9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNoYXBlc1N3aXRjaGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzPXtjYW52YXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVRvb2w9e2FwcFN0YXRlLmFjdGl2ZVRvb2x9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25JbWFnZUFjdGlvbj17KHsgcG9pbnRlclR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSW1hZ2VBY3Rpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T25DYW52YXNEaXJlY3RseTogcG9pbnRlclR5cGUgIT09IFwibW91c2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TdGFjay5Sb3c+XG4gICAgICAgICAgICAgICAgICAgIDwvSXNsYW5kPlxuICAgICAgICAgICAgICAgICAgICA8TGlicmFyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICAgICAgICA8L1N0YWNrLkNvbD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fdG9wLXJpZ2h0IHplbi1tb2RlLXRyYW5zaXRpb25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwidHJhbnNpdGlvbi1yaWdodFwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFVzZXJMaXN0XG4gICAgICAgICAgICAgIGNvbGxhYm9yYXRvcnM9e2FwcFN0YXRlLmNvbGxhYm9yYXRvcnN9XG4gICAgICAgICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3JlbmRlclRvcFJpZ2h0VUk/LihkZXZpY2UuaXNNb2JpbGUsIGFwcFN0YXRlKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0ZpeGVkU2lkZUNvbnRhaW5lcj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckJvdHRvbUFwcE1lbnUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxmb290ZXJcbiAgICAgICAgcm9sZT1cImNvbnRlbnRpbmZvXCJcbiAgICAgICAgY2xhc3NOYW1lPVwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3RlciBBcHAtbWVudSBBcHAtbWVudV9ib3R0b21cIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLWxlZnQgemVuLW1vZGUtdHJhbnNpdGlvblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcImxheWVyLXVpX193cmFwcGVyX19mb290ZXItbGVmdC0tdHJhbnNpdGlvbi1sZWZ0XCI6XG4gICAgICAgICAgICAgICAgYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICA8U3RhY2suQ29sIGdhcD17Mn0+XG4gICAgICAgICAgICA8U2VjdGlvbiBoZWFkaW5nPVwiY2FudmFzQWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8SXNsYW5kIHBhZGRpbmc9ezF9PlxuICAgICAgICAgICAgICAgIDxab29tQWN0aW9uc1xuICAgICAgICAgICAgICAgICAgcmVuZGVyQWN0aW9uPXthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbn1cbiAgICAgICAgICAgICAgICAgIHpvb209e2FwcFN0YXRlLnpvb219XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Jc2xhbmQ+XG4gICAgICAgICAgICAgIHshYXBwU3RhdGUudmlld01vZGVFbmFibGVkICYmIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJ1bmRvLXJlZG8tYnV0dG9ucyB6ZW4tbW9kZS10cmFuc2l0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBcImxheWVyLXVpX193cmFwcGVyX19mb290ZXItbGVmdC0tdHJhbnNpdGlvbi1ib3R0b21cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwidW5kb1wiLCB7IHNpemU6IFwic21hbGxcIiB9KX1cbiAgICAgICAgICAgICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwicmVkb1wiLCB7IHNpemU6IFwic21hbGxcIiB9KX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcImVyYXNlci1idXR0b25zIHplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1sZWZ0LS10cmFuc2l0aW9uLWxlZnRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiZXJhc2VyXCIsIHsgc2l6ZTogXCJzbWFsbFwiIH0pfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHshYXBwU3RhdGUudmlld01vZGVFbmFibGVkICYmXG4gICAgICAgICAgICAgICAgYXBwU3RhdGUubXVsdGlFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgZGV2aWNlLmlzVG91Y2hTY3JlZW4gJiYgKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJmaW5hbGl6ZS1idXR0b24gemVuLW1vZGUtdHJhbnNpdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLWxlZnQtLXRyYW5zaXRpb24tbGVmdFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJmaW5hbGl6ZVwiLCB7IHNpemU6IFwic21hbGxcIiB9KX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgPC9TdGFjay5Db2w+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLWNlbnRlciB6ZW4tbW9kZS10cmFuc2l0aW9uXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1sZWZ0LS10cmFuc2l0aW9uLWJvdHRvbVwiOlxuICAgICAgICAgICAgICAgIGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge3JlbmRlckN1c3RvbUZvb3Rlcj8uKGZhbHNlLCBhcHBTdGF0ZSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLXJpZ2h0IHplbi1tb2RlLXRyYW5zaXRpb25cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJ0cmFuc2l0aW9uLXJpZ2h0IGRpc2FibGUtcG9pbnRlckV2ZW50c1wiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInRvZ2dsZVNob3J0Y3V0c1wiKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJkaXNhYmxlLXplbi1tb2RlXCIsIHtcbiAgICAgICAgICAgIFwiZGlzYWJsZS16ZW4tbW9kZS0tdmlzaWJsZVwiOiBzaG93RXhpdFplbk1vZGVCdG4sXG4gICAgICAgICAgfSl9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gYWN0aW9uTWFuYWdlci5leGVjdXRlQWN0aW9uKGFjdGlvblRvZ2dsZVplbk1vZGUpfVxuICAgICAgICA+XG4gICAgICAgICAge3QoXCJidXR0b25zLmV4aXRaZW5Nb2RlXCIpfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZm9vdGVyPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgZGlhbG9ncyA9IChcbiAgICA8PlxuICAgICAge2FwcFN0YXRlLmlzTG9hZGluZyAmJiA8TG9hZGluZ01lc3NhZ2UgZGVsYXk9ezI1MH0gLz59XG4gICAgICB7YXBwU3RhdGUuZXJyb3JNZXNzYWdlICYmIChcbiAgICAgICAgPEVycm9yRGlhbG9nXG4gICAgICAgICAgbWVzc2FnZT17YXBwU3RhdGUuZXJyb3JNZXNzYWdlfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldEFwcFN0YXRlKHsgZXJyb3JNZXNzYWdlOiBudWxsIH0pfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHthcHBTdGF0ZS5zaG93SGVscERpYWxvZyAmJiAoXG4gICAgICAgIDxIZWxwRGlhbG9nXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgc2V0QXBwU3RhdGUoeyBzaG93SGVscERpYWxvZzogZmFsc2UgfSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7YXBwU3RhdGUucGFzdGVEaWFsb2cuc2hvd24gJiYgKFxuICAgICAgICA8UGFzdGVDaGFydERpYWxvZ1xuICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgb25JbnNlcnRDaGFydD17b25JbnNlcnRFbGVtZW50c31cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PlxuICAgICAgICAgICAgc2V0QXBwU3RhdGUoe1xuICAgICAgICAgICAgICBwYXN0ZURpYWxvZzogeyBzaG93bjogZmFsc2UsIGRhdGE6IG51bGwgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcblxuICBjb25zdCByZW5kZXJTdGF0cyA9ICgpID0+IHtcbiAgICBpZiAoIWFwcFN0YXRlLnNob3dTdGF0cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8U3RhdHNcbiAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgIGFjdGlvbk1hbmFnZXIuZXhlY3V0ZUFjdGlvbihhY3Rpb25Ub2dnbGVTdGF0cyk7XG4gICAgICAgIH19XG4gICAgICAgIHJlbmRlckN1c3RvbVN0YXRzPXtyZW5kZXJDdXN0b21TdGF0c31cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gZGV2aWNlLmlzTW9iaWxlID8gKFxuICAgIDw+XG4gICAgICB7ZGlhbG9nc31cbiAgICAgIDxNb2JpbGVNZW51XG4gICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICBsaWJyYXJ5TWVudT17bGlicmFyeU1lbnV9XG4gICAgICAgIHJlbmRlckpTT05FeHBvcnREaWFsb2c9e3JlbmRlckpTT05FeHBvcnREaWFsb2d9XG4gICAgICAgIHJlbmRlckltYWdlRXhwb3J0RGlhbG9nPXtyZW5kZXJJbWFnZUV4cG9ydERpYWxvZ31cbiAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICBvbkNvbGxhYkJ1dHRvbkNsaWNrPXtvbkNvbGxhYkJ1dHRvbkNsaWNrfVxuICAgICAgICBvbkxvY2tUb2dnbGU9eygpID0+IG9uTG9ja1RvZ2dsZSgpfVxuICAgICAgICBvblBlbk1vZGVUb2dnbGU9e29uUGVuTW9kZVRvZ2dsZX1cbiAgICAgICAgY2FudmFzPXtjYW52YXN9XG4gICAgICAgIGlzQ29sbGFib3JhdGluZz17aXNDb2xsYWJvcmF0aW5nfVxuICAgICAgICByZW5kZXJDdXN0b21Gb290ZXI9e3JlbmRlckN1c3RvbUZvb3Rlcn1cbiAgICAgICAgc2hvd1RoZW1lQnRuPXtzaG93VGhlbWVCdG59XG4gICAgICAgIG9uSW1hZ2VBY3Rpb249e29uSW1hZ2VBY3Rpb259XG4gICAgICAgIHJlbmRlclRvcFJpZ2h0VUk9e3JlbmRlclRvcFJpZ2h0VUl9XG4gICAgICAgIHJlbmRlclN0YXRzPXtyZW5kZXJTdGF0c31cbiAgICAgIC8+XG4gICAgPC8+XG4gICkgOiAoXG4gICAgPD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwibGF5ZXItdWlfX3dyYXBwZXJcIiwge1xuICAgICAgICAgIFwiZGlzYWJsZS1wb2ludGVyRXZlbnRzXCI6XG4gICAgICAgICAgICBhcHBTdGF0ZS5kcmFnZ2luZ0VsZW1lbnQgfHxcbiAgICAgICAgICAgIGFwcFN0YXRlLnJlc2l6aW5nRWxlbWVudCB8fFxuICAgICAgICAgICAgKGFwcFN0YXRlLmVkaXRpbmdFbGVtZW50ICYmXG4gICAgICAgICAgICAgICFpc1RleHRFbGVtZW50KGFwcFN0YXRlLmVkaXRpbmdFbGVtZW50KSksXG4gICAgICAgIH0pfVxuICAgICAgICBzdHlsZT17XG4gICAgICAgICAgYXBwU3RhdGUuaXNMaWJyYXJ5T3BlbiAmJlxuICAgICAgICAgIGFwcFN0YXRlLmlzTGlicmFyeU1lbnVEb2NrZWQgJiZcbiAgICAgICAgICBkZXZpY2UuY2FuRGV2aWNlRml0U2lkZWJhclxuICAgICAgICAgICAgPyB7IHdpZHRoOiBgY2FsYygxMDAlIC0gJHtMSUJSQVJZX1NJREVCQVJfV0lEVEh9cHgpYCB9XG4gICAgICAgICAgICA6IHt9XG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAge2RpYWxvZ3N9XG4gICAgICAgIHtyZW5kZXJGaXhlZFNpZGVDb250YWluZXIoKX1cbiAgICAgICAge3JlbmRlckJvdHRvbUFwcE1lbnUoKX1cbiAgICAgICAge3JlbmRlclN0YXRzKCl9XG4gICAgICAgIHthcHBTdGF0ZS5zY3JvbGxlZE91dHNpZGUgJiYgKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInNjcm9sbC1iYWNrLXRvLWNvbnRlbnRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBzZXRBcHBTdGF0ZSh7XG4gICAgICAgICAgICAgICAgLi4uY2FsY3VsYXRlU2Nyb2xsQ2VudGVyKGVsZW1lbnRzLCBhcHBTdGF0ZSwgY2FudmFzKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KFwiYnV0dG9ucy5zY3JvbGxCYWNrVG9Db250ZW50XCIpfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7YXBwU3RhdGUuaXNMaWJyYXJ5T3BlbiAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGF5ZXItdWlfX3NpZGViYXJcIj57bGlicmFyeU1lbnV9PC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufTtcblxuY29uc3QgYXJlRXF1YWwgPSAocHJldjogTGF5ZXJVSVByb3BzLCBuZXh0OiBMYXllclVJUHJvcHMpID0+IHtcbiAgY29uc3QgZ2V0TmVjZXNzYXJ5T2JqID0gKGFwcFN0YXRlOiBBcHBTdGF0ZSk6IFBhcnRpYWw8QXBwU3RhdGU+ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzdWdnZXN0ZWRCaW5kaW5ncyxcbiAgICAgIHN0YXJ0Qm91bmRFbGVtZW50OiBib3VuZEVsZW1lbnQsXG4gICAgICAuLi5yZXRcbiAgICB9ID0gYXBwU3RhdGU7XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbiAgY29uc3QgcHJldkFwcFN0YXRlID0gZ2V0TmVjZXNzYXJ5T2JqKHByZXYuYXBwU3RhdGUpO1xuICBjb25zdCBuZXh0QXBwU3RhdGUgPSBnZXROZWNlc3NhcnlPYmoobmV4dC5hcHBTdGF0ZSk7XG5cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByZXZBcHBTdGF0ZSkgYXMgKGtleW9mIFBhcnRpYWw8QXBwU3RhdGU+KVtdO1xuICByZXR1cm4gKFxuICAgIHByZXYucmVuZGVyQ3VzdG9tRm9vdGVyID09PSBuZXh0LnJlbmRlckN1c3RvbUZvb3RlciAmJlxuICAgIHByZXYubGFuZ0NvZGUgPT09IG5leHQubGFuZ0NvZGUgJiZcbiAgICBwcmV2LmVsZW1lbnRzID09PSBuZXh0LmVsZW1lbnRzICYmXG4gICAgcHJldi5maWxlcyA9PT0gbmV4dC5maWxlcyAmJlxuICAgIGtleXMuZXZlcnkoKGtleSkgPT4gcHJldkFwcFN0YXRlW2tleV0gPT09IG5leHRBcHBTdGF0ZVtrZXldKVxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVhY3QubWVtbyhMYXllclVJLCBhcmVFcXVhbCk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/LayerUI.tsx\n");
2373
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data */ \"../../data/index.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./BackgroundPickerAndDarkModeToggle */ \"../../components/BackgroundPickerAndDarkModeToggle.tsx\");\n/* harmony import */ var _CollabButton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./CollabButton */ \"../../components/CollabButton.tsx\");\n/* harmony import */ var _ErrorDialog__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ErrorDialog */ \"../../components/ErrorDialog.tsx\");\n/* harmony import */ var _ImageExportDialog__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ImageExportDialog */ \"../../components/ImageExportDialog.tsx\");\n/* harmony import */ var _FixedSideContainer__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./FixedSideContainer */ \"../../components/FixedSideContainer.tsx\");\n/* harmony import */ var _HintViewer__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./HintViewer */ \"../../components/HintViewer.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _LoadingMessage__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./LoadingMessage */ \"../../components/LoadingMessage.tsx\");\n/* harmony import */ var _LockButton__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./LockButton */ \"../../components/LockButton.tsx\");\n/* harmony import */ var _MobileMenu__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./MobileMenu */ \"../../components/MobileMenu.tsx\");\n/* harmony import */ var _PasteChartDialog__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./PasteChartDialog */ \"../../components/PasteChartDialog.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _HelpDialog__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./HelpDialog */ \"../../components/HelpDialog.tsx\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _UserList__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./UserList */ \"../../components/UserList.tsx\");\n/* harmony import */ var _data_library__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../data/library */ \"../../data/library.ts\");\n/* harmony import */ var _JSONExportDialog__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./JSONExportDialog */ \"../../components/JSONExportDialog.tsx\");\n/* harmony import */ var _LibraryButton__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./LibraryButton */ \"../../components/LibraryButton.tsx\");\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../data/blob */ \"../../data/blob.ts\");\n/* harmony import */ var _LibraryMenu__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./LibraryMenu */ \"../../components/LibraryMenu.tsx\");\n/* harmony import */ var _LayerUI_scss__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./LayerUI.scss */ \"../../components/LayerUI.scss\");\n/* harmony import */ var _LayerUI_scss__WEBPACK_IMPORTED_MODULE_30___default = /*#__PURE__*/__webpack_require__.n(_LayerUI_scss__WEBPACK_IMPORTED_MODULE_30__);\n/* harmony import */ var _Toolbar_scss__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./Toolbar.scss */ \"../../components/Toolbar.scss\");\n/* harmony import */ var _Toolbar_scss__WEBPACK_IMPORTED_MODULE_31___default = /*#__PURE__*/__webpack_require__.n(_Toolbar_scss__WEBPACK_IMPORTED_MODULE_31__);\n/* harmony import */ var _PenModeButton__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./PenModeButton */ \"../../components/PenModeButton.tsx\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../analytics */ \"../../analytics.ts\");\n/* harmony import */ var _components_App__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../components/App */ \"../../components/App.tsx\");\n/* harmony import */ var _Stats__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./Stats */ \"../../components/Stats.tsx\");\n/* harmony import */ var _actions_actionToggleStats__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../actions/actionToggleStats */ \"../../actions/actionToggleStats.tsx\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../actions */ \"../../actions/index.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};\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst LayerUI = ({ actionManager, appState, files, setAppState, canvas, elements, onCollabButtonClick, onLockToggle, onPenModeToggle, onInsertElements, showExitZenModeBtn, showThemeBtn, isCollaborating, renderTopRightUI, renderCustomFooter, renderCustomStats, libraryReturnUrl, UIOptions, focusContainer, library, id, onImageAction, }) => {\n const device = (0,_components_App__WEBPACK_IMPORTED_MODULE_34__.useDevice)();\n const renderJSONExportDialog = () => {\n if (!UIOptions.canvasActions.export) {\n return null;\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_JSONExportDialog__WEBPACK_IMPORTED_MODULE_26__.JSONExportDialog, { elements: elements, appState: appState, files: files, actionManager: actionManager, exportOpts: UIOptions.canvasActions.export, canvas: canvas }));\n };\n const renderImageExportDialog = () => {\n if (!UIOptions.canvasActions.saveAsImage) {\n return null;\n }\n const createExporter = (type) => (exportedElements) => __awaiter(void 0, void 0, void 0, function* () {\n (0,_analytics__WEBPACK_IMPORTED_MODULE_33__.trackEvent)(\"export\", type, \"ui\");\n const fileHandle = yield (0,_data__WEBPACK_IMPORTED_MODULE_4__.exportCanvas)(type, exportedElements, appState, files, {\n exportBackground: appState.exportBackground,\n name: appState.name,\n viewBackgroundColor: appState.viewBackgroundColor,\n })\n .catch(_utils__WEBPACK_IMPORTED_MODULE_8__.muteFSAbortError)\n .catch((error) => {\n console.error(error);\n setAppState({ errorMessage: error.message });\n });\n if (appState.exportEmbedScene &&\n fileHandle &&\n (0,_data_blob__WEBPACK_IMPORTED_MODULE_28__.isImageFileHandle)(fileHandle)) {\n setAppState({ fileHandle });\n }\n });\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ImageExportDialog__WEBPACK_IMPORTED_MODULE_13__.ImageExportDialog, { elements: elements, appState: appState, files: files, actionManager: actionManager, onExportToPng: createExporter(\"png\"), onExportToSvg: createExporter(\"svg\"), onExportToClipboard: createExporter(\"clipboard\") }));\n };\n const Separator = () => {\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { style: { width: \".625em\" } });\n };\n const renderViewModeCanvasActions = () => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"canvasActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\n \"transition-left\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 2, style: { zIndex: 1 } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1, justifyContent: \"space-between\" }, { children: [renderJSONExportDialog(), renderImageExportDialog()] })) })) })) })));\n };\n const renderCanvasActions = () => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"canvasActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\n \"transition-left\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 2, style: { zIndex: 1 } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4 }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1, justifyContent: \"space-between\" }, { children: [actionManager.renderAction(\"clearCanvas\"), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Separator, {}), actionManager.renderAction(\"loadScene\"), renderJSONExportDialog(), renderImageExportDialog(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Separator, {}), onCollabButtonClick && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_CollabButton__WEBPACK_IMPORTED_MODULE_11__[\"default\"], { isCollaborating: isCollaborating, collaboratorCount: appState.collaborators.size, onClick: onCollabButtonClick }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_10__.BackgroundPickerAndDarkModeToggle, { actionManager: actionManager, appState: appState, setAppState: setAppState, showThemeBtn: showThemeBtn }), appState.fileHandle && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: actionManager.renderAction(\"saveToActiveFile\") }))] })) })) })));\n const renderSelectedShapeActions = () => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"selectedShapeActions\", className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"zen-mode-transition\", {\n \"transition-left\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ className: _constants__WEBPACK_IMPORTED_MODULE_3__.CLASSES.SHAPE_ACTIONS_MENU, padding: 2, style: {\n // we want to make sure this doesn't overflow so subtracting 200\n // which is approximately height of zoom footer and top left menu items with some buffer\n // if active file name is displayed, subtracting 248 to account for its height\n maxHeight: `${appState.height - (appState.fileHandle ? 248 : 200)}px`,\n } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.SelectedShapeActions, { appState: appState, elements: elements, renderAction: actionManager.renderAction, activeTool: appState.activeTool.type }) })) })));\n const closeLibrary = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {\n const isDialogOpen = !!document.querySelector(\".Dialog\");\n // Prevent closing if any dialog is open\n if (isDialogOpen) {\n return;\n }\n setAppState({ isLibraryOpen: false });\n }, [setAppState]);\n const deselectItems = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {\n setAppState({\n selectedElementIds: {},\n selectedGroupIds: {},\n });\n }, [setAppState]);\n const libraryMenu = appState.isLibraryOpen ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryMenu__WEBPACK_IMPORTED_MODULE_29__.LibraryMenu, { pendingElements: (0,_scene__WEBPACK_IMPORTED_MODULE_7__.getSelectedElements)(elements, appState, true), onClose: closeLibrary, onInsertLibraryItems: (libraryItems) => {\n onInsertElements((0,_data_library__WEBPACK_IMPORTED_MODULE_25__.distributeLibraryItemsOnSquareGrid)(libraryItems));\n }, onAddToLibrary: deselectItems, setAppState: setAppState, libraryReturnUrl: libraryReturnUrl, focusContainer: focusContainer, library: library, theme: appState.theme, files: files, id: id, appState: appState })) : null;\n const renderFixedSideContainer = () => {\n const shouldRenderSelectedShapeActions = (0,_element__WEBPACK_IMPORTED_MODULE_5__.showSelectedShapeActions)(appState, elements);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FixedSideContainer__WEBPACK_IMPORTED_MODULE_14__.FixedSideContainer, Object.assign({ side: \"top\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"App-menu App-menu_top\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n \"disable-pointerEvents\": appState.zenModeEnabled,\n }) }, { children: [appState.viewModeEnabled\n ? renderViewModeCanvasActions()\n : renderCanvasActions(), shouldRenderSelectedShapeActions && renderSelectedShapeActions()] })), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"shapes\" }, { children: (heading) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 4, align: \"start\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-toolbar-container\", {\n \"zen-mode\": appState.zenModeEnabled,\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PenModeButton__WEBPACK_IMPORTED_MODULE_32__.PenModeButton, { zenModeEnabled: appState.zenModeEnabled, checked: appState.penMode, onChange: onPenModeToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.penMode\"), penDetected: appState.penDetected }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LockButton__WEBPACK_IMPORTED_MODULE_18__.LockButton, { zenModeEnabled: appState.zenModeEnabled, checked: appState.activeTool.locked, onChange: () => onLockToggle(), title: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"toolBar.lock\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 1, className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"App-toolbar\", {\n \"zen-mode\": appState.zenModeEnabled,\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HintViewer__WEBPACK_IMPORTED_MODULE_15__.HintViewer, { appState: appState, elements: elements, isMobile: device.isMobile }), heading, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Row, Object.assign({ gap: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ShapesSwitcher, { appState: appState, canvas: canvas, activeTool: appState.activeTool, setAppState: setAppState, onImageAction: ({ pointerType }) => {\n onImageAction({\n insertOnCanvasDirectly: pointerType !== \"mouse\",\n });\n } }) }))] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryButton__WEBPACK_IMPORTED_MODULE_27__.LibraryButton, { appState: appState, setAppState: setAppState })] })) }))) }))), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__top-right zen-mode-transition\", {\n \"transition-right\": appState.zenModeEnabled,\n }) }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UserList__WEBPACK_IMPORTED_MODULE_24__.UserList, { collaborators: appState.collaborators, actionManager: actionManager }), renderTopRightUI === null || renderTopRightUI === void 0 ? void 0 : renderTopRightUI(device.isMobile, appState)] }))] })) })));\n };\n const renderBottomAppMenu = () => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"footer\", Object.assign({ role: \"contentinfo\", className: \"layer-ui__wrapper__footer App-menu App-menu_bottom\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-left zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\n }) }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_23__[\"default\"].Col, Object.assign({ gap: 2 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Section__WEBPACK_IMPORTED_MODULE_21__.Section, Object.assign({ heading: \"canvasActions\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_16__.Island, Object.assign({ padding: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ZoomActions, { renderAction: actionManager.renderAction, zoom: appState.zoom }) })), !appState.viewModeEnabled && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"undo-redo-buttons zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-bottom\": appState.zenModeEnabled,\n }) }, { children: [actionManager.renderAction(\"undo\", { size: \"small\" }), actionManager.renderAction(\"redo\", { size: \"small\" })] })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"eraser-buttons zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\n }) }, { children: actionManager.renderAction(\"eraser\", { size: \"small\" }) }))] })), !appState.viewModeEnabled &&\n appState.multiElement &&\n device.isTouchScreen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"finalize-button zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-left\": appState.zenModeEnabled,\n }) }, { children: actionManager.renderAction(\"finalize\", { size: \"small\" }) })))] })) })) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-center zen-mode-transition\", {\n \"layer-ui__wrapper__footer-left--transition-bottom\": appState.zenModeEnabled,\n }) }, { children: renderCustomFooter === null || renderCustomFooter === void 0 ? void 0 : renderCustomFooter(false, appState) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper__footer-right zen-mode-transition\", {\n \"transition-right disable-pointerEvents\": appState.zenModeEnabled,\n }) }, { children: actionManager.renderAction(\"toggleShortcuts\") })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"disable-zen-mode\", {\n \"disable-zen-mode--visible\": showExitZenModeBtn,\n }), onClick: () => actionManager.executeAction(_actions__WEBPACK_IMPORTED_MODULE_37__.actionToggleZenMode) }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.exitZenMode\") }))] })));\n };\n const dialogs = ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [appState.isLoading && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LoadingMessage__WEBPACK_IMPORTED_MODULE_17__.LoadingMessage, { delay: 250 }), appState.errorMessage && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ErrorDialog__WEBPACK_IMPORTED_MODULE_12__.ErrorDialog, { message: appState.errorMessage, onClose: () => setAppState({ errorMessage: null }) })), appState.showHelpDialog && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HelpDialog__WEBPACK_IMPORTED_MODULE_22__.HelpDialog, { onClose: () => {\n setAppState({ showHelpDialog: false });\n } })), appState.pasteDialog.shown && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PasteChartDialog__WEBPACK_IMPORTED_MODULE_20__.PasteChartDialog, { setAppState: setAppState, appState: appState, onInsertChart: onInsertElements, onClose: () => setAppState({\n pasteDialog: { shown: false, data: null },\n }) }))] }));\n const renderStats = () => {\n if (!appState.showStats) {\n return null;\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stats__WEBPACK_IMPORTED_MODULE_35__.Stats, { appState: appState, setAppState: setAppState, elements: elements, onClose: () => {\n actionManager.executeAction(_actions_actionToggleStats__WEBPACK_IMPORTED_MODULE_36__.actionToggleStats);\n }, renderCustomStats: renderCustomStats }));\n };\n return device.isMobile ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [dialogs, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_MobileMenu__WEBPACK_IMPORTED_MODULE_19__.MobileMenu, { appState: appState, elements: elements, actionManager: actionManager, libraryMenu: libraryMenu, renderJSONExportDialog: renderJSONExportDialog, renderImageExportDialog: renderImageExportDialog, setAppState: setAppState, onCollabButtonClick: onCollabButtonClick, onLockToggle: () => onLockToggle(), onPenModeToggle: onPenModeToggle, canvas: canvas, isCollaborating: isCollaborating, renderCustomFooter: renderCustomFooter, showThemeBtn: showThemeBtn, onImageAction: onImageAction, renderTopRightUI: renderTopRightUI, renderStats: renderStats })] })) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(\"layer-ui__wrapper\", {\n \"disable-pointerEvents\": appState.draggingElement ||\n appState.resizingElement ||\n (appState.editingElement &&\n !(0,_element__WEBPACK_IMPORTED_MODULE_5__.isTextElement)(appState.editingElement)),\n }), style: appState.isLibraryOpen &&\n appState.isLibraryMenuDocked &&\n device.canDeviceFitSidebar\n ? { width: `calc(100% - ${_constants__WEBPACK_IMPORTED_MODULE_3__.LIBRARY_SIDEBAR_WIDTH}px)` }\n : {} }, { children: [dialogs, renderFixedSideContainer(), renderBottomAppMenu(), renderStats(), appState.scrolledOutside && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"scroll-back-to-content\", onClick: () => {\n setAppState(Object.assign({}, (0,_scene__WEBPACK_IMPORTED_MODULE_7__.calculateScrollCenter)(elements, appState, canvas)));\n } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_6__.t)(\"buttons.scrollBackToContent\") })))] })), appState.isLibraryOpen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"layer-ui__sidebar\" }, { children: libraryMenu })))] }));\n};\nconst areEqual = (prev, next) => {\n const getNecessaryObj = (appState) => {\n const { suggestedBindings, startBoundElement: boundElement } = appState, ret = __rest(appState, [\"suggestedBindings\", \"startBoundElement\"]);\n return ret;\n };\n const prevAppState = getNecessaryObj(prev.appState);\n const nextAppState = getNecessaryObj(next.appState);\n const keys = Object.keys(prevAppState);\n return (prev.renderCustomFooter === next.renderCustomFooter &&\n prev.langCode === next.langCode &&\n prev.elements === next.elements &&\n prev.files === next.files &&\n keys.every((key) => prevAppState[key] === nextAppState[key]));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (react__WEBPACK_IMPORTED_MODULE_2___default().memo(LayerUI, areEqual));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQztJQUVwRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBZ0MsQ0FBQztJQUN0RSxPQUFPLENBQ0wsSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksQ0FBQyxrQkFBa0I7UUFDbkQsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUTtRQUMvQixJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRO1FBQy9CLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUs7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUM3RCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsaUVBQWUsaURBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9MYXllclVJLnRzeD8wODc4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjbHN4IGZyb20gXCJjbHN4XCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi4vYWN0aW9ucy9tYW5hZ2VyXCI7XG5pbXBvcnQgeyBDTEFTU0VTLCBMSUJSQVJZX1NJREVCQVJfV0lEVEggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBleHBvcnRDYW52YXMgfSBmcm9tIFwiLi4vZGF0YVwiO1xuaW1wb3J0IHsgaXNUZXh0RWxlbWVudCwgc2hvd1NlbGVjdGVkU2hhcGVBY3Rpb25zIH0gZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCB7IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBMYW5ndWFnZSwgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQgeyBjYWxjdWxhdGVTY3JvbGxDZW50ZXIsIGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tIFwiLi4vc2NlbmVcIjtcbmltcG9ydCB7IEV4cG9ydFR5cGUgfSBmcm9tIFwiLi4vc2NlbmUvdHlwZXNcIjtcbmltcG9ydCB7IEFwcFByb3BzLCBBcHBTdGF0ZSwgRXhjYWxpZHJhd1Byb3BzLCBCaW5hcnlGaWxlcyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgbXV0ZUZTQWJvcnRFcnJvciB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgU2VsZWN0ZWRTaGFwZUFjdGlvbnMsIFNoYXBlc1N3aXRjaGVyLCBab29tQWN0aW9ucyB9IGZyb20gXCIuL0FjdGlvbnNcIjtcbmltcG9ydCB7IEJhY2tncm91bmRQaWNrZXJBbmREYXJrTW9kZVRvZ2dsZSB9IGZyb20gXCIuL0JhY2tncm91bmRQaWNrZXJBbmREYXJrTW9kZVRvZ2dsZVwiO1xuaW1wb3J0IENvbGxhYkJ1dHRvbiBmcm9tIFwiLi9Db2xsYWJCdXR0b25cIjtcbmltcG9ydCB7IEVycm9yRGlhbG9nIH0gZnJvbSBcIi4vRXJyb3JEaWFsb2dcIjtcbmltcG9ydCB7IEV4cG9ydENCLCBJbWFnZUV4cG9ydERpYWxvZyB9IGZyb20gXCIuL0ltYWdlRXhwb3J0RGlhbG9nXCI7XG5pbXBvcnQgeyBGaXhlZFNpZGVDb250YWluZXIgfSBmcm9tIFwiLi9GaXhlZFNpZGVDb250YWluZXJcIjtcbmltcG9ydCB7IEhpbnRWaWV3ZXIgfSBmcm9tIFwiLi9IaW50Vmlld2VyXCI7XG5pbXBvcnQgeyBJc2xhbmQgfSBmcm9tIFwiLi9Jc2xhbmRcIjtcbmltcG9ydCB7IExvYWRpbmdNZXNzYWdlIH0gZnJvbSBcIi4vTG9hZGluZ01lc3NhZ2VcIjtcbmltcG9ydCB7IExvY2tCdXR0b24gfSBmcm9tIFwiLi9Mb2NrQnV0dG9uXCI7XG5pbXBvcnQgeyBNb2JpbGVNZW51IH0gZnJvbSBcIi4vTW9iaWxlTWVudVwiO1xuaW1wb3J0IHsgUGFzdGVDaGFydERpYWxvZyB9IGZyb20gXCIuL1Bhc3RlQ2hhcnREaWFsb2dcIjtcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tIFwiLi9TZWN0aW9uXCI7XG5pbXBvcnQgeyBIZWxwRGlhbG9nIH0gZnJvbSBcIi4vSGVscERpYWxvZ1wiO1xuaW1wb3J0IFN0YWNrIGZyb20gXCIuL1N0YWNrXCI7XG5pbXBvcnQgeyBVc2VyTGlzdCB9IGZyb20gXCIuL1VzZXJMaXN0XCI7XG5pbXBvcnQgTGlicmFyeSwgeyBkaXN0cmlidXRlTGlicmFyeUl0ZW1zT25TcXVhcmVHcmlkIH0gZnJvbSBcIi4uL2RhdGEvbGlicmFyeVwiO1xuaW1wb3J0IHsgSlNPTkV4cG9ydERpYWxvZyB9IGZyb20gXCIuL0pTT05FeHBvcnREaWFsb2dcIjtcbmltcG9ydCB7IExpYnJhcnlCdXR0b24gfSBmcm9tIFwiLi9MaWJyYXJ5QnV0dG9uXCI7XG5pbXBvcnQgeyBpc0ltYWdlRmlsZUhhbmRsZSB9IGZyb20gXCIuLi9kYXRhL2Jsb2JcIjtcbmltcG9ydCB7IExpYnJhcnlNZW51IH0gZnJvbSBcIi4vTGlicmFyeU1lbnVcIjtcblxuaW1wb3J0IFwiLi9MYXllclVJLnNjc3NcIjtcbmltcG9ydCBcIi4vVG9vbGJhci5zY3NzXCI7XG5pbXBvcnQgeyBQZW5Nb2RlQnV0dG9uIH0gZnJvbSBcIi4vUGVuTW9kZUJ1dHRvblwiO1xuaW1wb3J0IHsgdHJhY2tFdmVudCB9IGZyb20gXCIuLi9hbmFseXRpY3NcIjtcbmltcG9ydCB7IHVzZURldmljZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL0FwcFwiO1xuaW1wb3J0IHsgU3RhdHMgfSBmcm9tIFwiLi9TdGF0c1wiO1xuaW1wb3J0IHsgYWN0aW9uVG9nZ2xlU3RhdHMgfSBmcm9tIFwiLi4vYWN0aW9ucy9hY3Rpb25Ub2dnbGVTdGF0c1wiO1xuaW1wb3J0IHsgYWN0aW9uVG9nZ2xlWmVuTW9kZSB9IGZyb20gXCIuLi9hY3Rpb25zXCI7XG5cbmludGVyZmFjZSBMYXllclVJUHJvcHMge1xuICBhY3Rpb25NYW5hZ2VyOiBBY3Rpb25NYW5hZ2VyO1xuICBhcHBTdGF0ZTogQXBwU3RhdGU7XG4gIGZpbGVzOiBCaW5hcnlGaWxlcztcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGw7XG4gIHNldEFwcFN0YXRlOiBSZWFjdC5Db21wb25lbnQ8YW55LCBBcHBTdGF0ZT5bXCJzZXRTdGF0ZVwiXTtcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdO1xuICBvbkNvbGxhYkJ1dHRvbkNsaWNrPzogKCkgPT4gdm9pZDtcbiAgb25Mb2NrVG9nZ2xlOiAoKSA9PiB2b2lkO1xuICBvblBlbk1vZGVUb2dnbGU6ICgpID0+IHZvaWQ7XG4gIG9uSW5zZXJ0RWxlbWVudHM6IChlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10pID0+IHZvaWQ7XG4gIHNob3dFeGl0WmVuTW9kZUJ0bjogYm9vbGVhbjtcbiAgc2hvd1RoZW1lQnRuOiBib29sZWFuO1xuICBsYW5nQ29kZTogTGFuZ3VhZ2VbXCJjb2RlXCJdO1xuICBpc0NvbGxhYm9yYXRpbmc6IGJvb2xlYW47XG4gIHJlbmRlclRvcFJpZ2h0VUk/OiBFeGNhbGlkcmF3UHJvcHNbXCJyZW5kZXJUb3BSaWdodFVJXCJdO1xuICByZW5kZXJDdXN0b21Gb290ZXI/OiBFeGNhbGlkcmF3UHJvcHNbXCJyZW5kZXJGb290ZXJcIl07XG4gIHJlbmRlckN1c3RvbVN0YXRzPzogRXhjYWxpZHJhd1Byb3BzW1wicmVuZGVyQ3VzdG9tU3RhdHNcIl07XG4gIGxpYnJhcnlSZXR1cm5Vcmw6IEV4Y2FsaWRyYXdQcm9wc1tcImxpYnJhcnlSZXR1cm5VcmxcIl07XG4gIFVJT3B0aW9uczogQXBwUHJvcHNbXCJVSU9wdGlvbnNcIl07XG4gIGZvY3VzQ29udGFpbmVyOiAoKSA9PiB2b2lkO1xuICBsaWJyYXJ5OiBMaWJyYXJ5O1xuICBpZDogc3RyaW5nO1xuICBvbkltYWdlQWN0aW9uOiAoZGF0YTogeyBpbnNlcnRPbkNhbnZhc0RpcmVjdGx5OiBib29sZWFuIH0pID0+IHZvaWQ7XG59XG5jb25zdCBMYXllclVJID0gKHtcbiAgYWN0aW9uTWFuYWdlcixcbiAgYXBwU3RhdGUsXG4gIGZpbGVzLFxuICBzZXRBcHBTdGF0ZSxcbiAgY2FudmFzLFxuICBlbGVtZW50cyxcbiAgb25Db2xsYWJCdXR0b25DbGljayxcbiAgb25Mb2NrVG9nZ2xlLFxuICBvblBlbk1vZGVUb2dnbGUsXG4gIG9uSW5zZXJ0RWxlbWVudHMsXG4gIHNob3dFeGl0WmVuTW9kZUJ0bixcbiAgc2hvd1RoZW1lQnRuLFxuICBpc0NvbGxhYm9yYXRpbmcsXG4gIHJlbmRlclRvcFJpZ2h0VUksXG4gIHJlbmRlckN1c3RvbUZvb3RlcixcbiAgcmVuZGVyQ3VzdG9tU3RhdHMsXG4gIGxpYnJhcnlSZXR1cm5VcmwsXG4gIFVJT3B0aW9ucyxcbiAgZm9jdXNDb250YWluZXIsXG4gIGxpYnJhcnksXG4gIGlkLFxuICBvbkltYWdlQWN0aW9uLFxufTogTGF5ZXJVSVByb3BzKSA9PiB7XG4gIGNvbnN0IGRldmljZSA9IHVzZURldmljZSgpO1xuXG4gIGNvbnN0IHJlbmRlckpTT05FeHBvcnREaWFsb2cgPSAoKSA9PiB7XG4gICAgaWYgKCFVSU9wdGlvbnMuY2FudmFzQWN0aW9ucy5leHBvcnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8SlNPTkV4cG9ydERpYWxvZ1xuICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgZmlsZXM9e2ZpbGVzfVxuICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICBleHBvcnRPcHRzPXtVSU9wdGlvbnMuY2FudmFzQWN0aW9ucy5leHBvcnR9XG4gICAgICAgIGNhbnZhcz17Y2FudmFzfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckltYWdlRXhwb3J0RGlhbG9nID0gKCkgPT4ge1xuICAgIGlmICghVUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuc2F2ZUFzSW1hZ2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZUV4cG9ydGVyID1cbiAgICAgICh0eXBlOiBFeHBvcnRUeXBlKTogRXhwb3J0Q0IgPT5cbiAgICAgIGFzeW5jIChleHBvcnRlZEVsZW1lbnRzKSA9PiB7XG4gICAgICAgIHRyYWNrRXZlbnQoXCJleHBvcnRcIiwgdHlwZSwgXCJ1aVwiKTtcbiAgICAgICAgY29uc3QgZmlsZUhhbmRsZSA9IGF3YWl0IGV4cG9ydENhbnZhcyhcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGV4cG9ydGVkRWxlbWVudHMsXG4gICAgICAgICAgYXBwU3RhdGUsXG4gICAgICAgICAgZmlsZXMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhwb3J0QmFja2dyb3VuZDogYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCxcbiAgICAgICAgICAgIG5hbWU6IGFwcFN0YXRlLm5hbWUsXG4gICAgICAgICAgICB2aWV3QmFja2dyb3VuZENvbG9yOiBhcHBTdGF0ZS52aWV3QmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgICAuY2F0Y2gobXV0ZUZTQWJvcnRFcnJvcilcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHNldEFwcFN0YXRlKHsgZXJyb3JNZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBhcHBTdGF0ZS5leHBvcnRFbWJlZFNjZW5lICYmXG4gICAgICAgICAgZmlsZUhhbmRsZSAmJlxuICAgICAgICAgIGlzSW1hZ2VGaWxlSGFuZGxlKGZpbGVIYW5kbGUpXG4gICAgICAgICkge1xuICAgICAgICAgIHNldEFwcFN0YXRlKHsgZmlsZUhhbmRsZSB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8SW1hZ2VFeHBvcnREaWFsb2dcbiAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgIGZpbGVzPXtmaWxlc31cbiAgICAgICAgYWN0aW9uTWFuYWdlcj17YWN0aW9uTWFuYWdlcn1cbiAgICAgICAgb25FeHBvcnRUb1BuZz17Y3JlYXRlRXhwb3J0ZXIoXCJwbmdcIil9XG4gICAgICAgIG9uRXhwb3J0VG9Tdmc9e2NyZWF0ZUV4cG9ydGVyKFwic3ZnXCIpfVxuICAgICAgICBvbkV4cG9ydFRvQ2xpcGJvYXJkPXtjcmVhdGVFeHBvcnRlcihcImNsaXBib2FyZFwiKX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBTZXBhcmF0b3IgPSAoKSA9PiB7XG4gICAgcmV0dXJuIDxkaXYgc3R5bGU9e3sgd2lkdGg6IFwiLjYyNWVtXCIgfX0gLz47XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyVmlld01vZGVDYW52YXNBY3Rpb25zID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8U2VjdGlvblxuICAgICAgICBoZWFkaW5nPVwiY2FudmFzQWN0aW9uc1wiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xzeChcInplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICAgIFwidHJhbnNpdGlvbi1sZWZ0XCI6IGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICB9KX1cbiAgICAgID5cbiAgICAgICAgey8qIHRoZSB6SW5kZXggZW5zdXJlcyB0aGlzIG1lbnUgaGFzIGhpZ2hlciBzdGFja2luZyBvcmRlcixcbiAgICAgICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXhjYWxpZHJhdy9leGNhbGlkcmF3L3B1bGwvMTQ0NSAqL31cbiAgICAgICAgPElzbGFuZCBwYWRkaW5nPXsyfSBzdHlsZT17eyB6SW5kZXg6IDEgfX0+XG4gICAgICAgICAgPFN0YWNrLkNvbCBnYXA9ezR9PlxuICAgICAgICAgICAgPFN0YWNrLlJvdyBnYXA9ezF9IGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiPlxuICAgICAgICAgICAgICB7cmVuZGVySlNPTkV4cG9ydERpYWxvZygpfVxuICAgICAgICAgICAgICB7cmVuZGVySW1hZ2VFeHBvcnREaWFsb2coKX1cbiAgICAgICAgICAgIDwvU3RhY2suUm93PlxuICAgICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgICA8L0lzbGFuZD5cbiAgICAgIDwvU2VjdGlvbj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckNhbnZhc0FjdGlvbnMgPSAoKSA9PiAoXG4gICAgPFNlY3Rpb25cbiAgICAgIGhlYWRpbmc9XCJjYW52YXNBY3Rpb25zXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xzeChcInplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICBcInRyYW5zaXRpb24tbGVmdFwiOiBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgIH0pfVxuICAgID5cbiAgICAgIHsvKiB0aGUgekluZGV4IGVuc3VyZXMgdGhpcyBtZW51IGhhcyBoaWdoZXIgc3RhY2tpbmcgb3JkZXIsXG4gICAgICAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2V4Y2FsaWRyYXcvZXhjYWxpZHJhdy9wdWxsLzE0NDUgKi99XG4gICAgICA8SXNsYW5kIHBhZGRpbmc9ezJ9IHN0eWxlPXt7IHpJbmRleDogMSB9fT5cbiAgICAgICAgPFN0YWNrLkNvbCBnYXA9ezR9PlxuICAgICAgICAgIDxTdGFjay5Sb3cgZ2FwPXsxfSBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImNsZWFyQ2FudmFzXCIpfVxuICAgICAgICAgICAgPFNlcGFyYXRvciAvPlxuICAgICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwibG9hZFNjZW5lXCIpfVxuICAgICAgICAgICAge3JlbmRlckpTT05FeHBvcnREaWFsb2coKX1cbiAgICAgICAgICAgIHtyZW5kZXJJbWFnZUV4cG9ydERpYWxvZygpfVxuICAgICAgICAgICAgPFNlcGFyYXRvciAvPlxuICAgICAgICAgICAge29uQ29sbGFiQnV0dG9uQ2xpY2sgJiYgKFxuICAgICAgICAgICAgICA8Q29sbGFiQnV0dG9uXG4gICAgICAgICAgICAgICAgaXNDb2xsYWJvcmF0aW5nPXtpc0NvbGxhYm9yYXRpbmd9XG4gICAgICAgICAgICAgICAgY29sbGFib3JhdG9yQ291bnQ9e2FwcFN0YXRlLmNvbGxhYm9yYXRvcnMuc2l6ZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkNvbGxhYkJ1dHRvbkNsaWNrfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICA8QmFja2dyb3VuZFBpY2tlckFuZERhcmtNb2RlVG9nZ2xlXG4gICAgICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICAgICAgc2hvd1RoZW1lQnRuPXtzaG93VGhlbWVCdG59XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7YXBwU3RhdGUuZmlsZUhhbmRsZSAmJiAoXG4gICAgICAgICAgICA8PnthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInNhdmVUb0FjdGl2ZUZpbGVcIil9PC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TdGFjay5Db2w+XG4gICAgICA8L0lzbGFuZD5cbiAgICA8L1NlY3Rpb24+XG4gICk7XG5cbiAgY29uc3QgcmVuZGVyU2VsZWN0ZWRTaGFwZUFjdGlvbnMgPSAoKSA9PiAoXG4gICAgPFNlY3Rpb25cbiAgICAgIGhlYWRpbmc9XCJzZWxlY3RlZFNoYXBlQWN0aW9uc1wiXG4gICAgICBjbGFzc05hbWU9e2Nsc3goXCJ6ZW4tbW9kZS10cmFuc2l0aW9uXCIsIHtcbiAgICAgICAgXCJ0cmFuc2l0aW9uLWxlZnRcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICB9KX1cbiAgICA+XG4gICAgICA8SXNsYW5kXG4gICAgICAgIGNsYXNzTmFtZT17Q0xBU1NFUy5TSEFQRV9BQ1RJT05TX01FTlV9XG4gICAgICAgIHBhZGRpbmc9ezJ9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IG92ZXJmbG93IHNvIHN1YnRyYWN0aW5nIDIwMFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGFwcHJveGltYXRlbHkgaGVpZ2h0IG9mIHpvb20gZm9vdGVyIGFuZCB0b3AgbGVmdCBtZW51IGl0ZW1zIHdpdGggc29tZSBidWZmZXJcbiAgICAgICAgICAvLyBpZiBhY3RpdmUgZmlsZSBuYW1lIGlzIGRpc3BsYXllZCwgc3VidHJhY3RpbmcgMjQ4IHRvIGFjY291bnQgZm9yIGl0cyBoZWlnaHRcbiAgICAgICAgICBtYXhIZWlnaHQ6IGAke2FwcFN0YXRlLmhlaWdodCAtIChhcHBTdGF0ZS5maWxlSGFuZGxlID8gMjQ4IDogMjAwKX1weGAsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxTZWxlY3RlZFNoYXBlQWN0aW9uc1xuICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgICAgcmVuZGVyQWN0aW9uPXthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbn1cbiAgICAgICAgICBhY3RpdmVUb29sPXthcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGV9XG4gICAgICAgIC8+XG4gICAgICA8L0lzbGFuZD5cbiAgICA8L1NlY3Rpb24+XG4gICk7XG5cbiAgY29uc3QgY2xvc2VMaWJyYXJ5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGlzRGlhbG9nT3BlbiA9ICEhZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5EaWFsb2dcIik7XG5cbiAgICAvLyBQcmV2ZW50IGNsb3NpbmcgaWYgYW55IGRpYWxvZyBpcyBvcGVuXG4gICAgaWYgKGlzRGlhbG9nT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRBcHBTdGF0ZSh7IGlzTGlicmFyeU9wZW46IGZhbHNlIH0pO1xuICB9LCBbc2V0QXBwU3RhdGVdKTtcblxuICBjb25zdCBkZXNlbGVjdEl0ZW1zID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEFwcFN0YXRlKHtcbiAgICAgIHNlbGVjdGVkRWxlbWVudElkczoge30sXG4gICAgICBzZWxlY3RlZEdyb3VwSWRzOiB7fSxcbiAgICB9KTtcbiAgfSwgW3NldEFwcFN0YXRlXSk7XG5cbiAgY29uc3QgbGlicmFyeU1lbnUgPSBhcHBTdGF0ZS5pc0xpYnJhcnlPcGVuID8gKFxuICAgIDxMaWJyYXJ5TWVudVxuICAgICAgcGVuZGluZ0VsZW1lbnRzPXtnZXRTZWxlY3RlZEVsZW1lbnRzKGVsZW1lbnRzLCBhcHBTdGF0ZSwgdHJ1ZSl9XG4gICAgICBvbkNsb3NlPXtjbG9zZUxpYnJhcnl9XG4gICAgICBvbkluc2VydExpYnJhcnlJdGVtcz17KGxpYnJhcnlJdGVtcykgPT4ge1xuICAgICAgICBvbkluc2VydEVsZW1lbnRzKGRpc3RyaWJ1dGVMaWJyYXJ5SXRlbXNPblNxdWFyZUdyaWQobGlicmFyeUl0ZW1zKSk7XG4gICAgICB9fVxuICAgICAgb25BZGRUb0xpYnJhcnk9e2Rlc2VsZWN0SXRlbXN9XG4gICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICBsaWJyYXJ5UmV0dXJuVXJsPXtsaWJyYXJ5UmV0dXJuVXJsfVxuICAgICAgZm9jdXNDb250YWluZXI9e2ZvY3VzQ29udGFpbmVyfVxuICAgICAgbGlicmFyeT17bGlicmFyeX1cbiAgICAgIHRoZW1lPXthcHBTdGF0ZS50aGVtZX1cbiAgICAgIGZpbGVzPXtmaWxlc31cbiAgICAgIGlkPXtpZH1cbiAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAvPlxuICApIDogbnVsbDtcblxuICBjb25zdCByZW5kZXJGaXhlZFNpZGVDb250YWluZXIgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2hvdWxkUmVuZGVyU2VsZWN0ZWRTaGFwZUFjdGlvbnMgPSBzaG93U2VsZWN0ZWRTaGFwZUFjdGlvbnMoXG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEZpeGVkU2lkZUNvbnRhaW5lciBzaWRlPVwidG9wXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiQXBwLW1lbnUgQXBwLW1lbnVfdG9wXCI+XG4gICAgICAgICAgPFN0YWNrLkNvbFxuICAgICAgICAgICAgZ2FwPXs0fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KHtcbiAgICAgICAgICAgICAgXCJkaXNhYmxlLXBvaW50ZXJFdmVudHNcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YXBwU3RhdGUudmlld01vZGVFbmFibGVkXG4gICAgICAgICAgICAgID8gcmVuZGVyVmlld01vZGVDYW52YXNBY3Rpb25zKClcbiAgICAgICAgICAgICAgOiByZW5kZXJDYW52YXNBY3Rpb25zKCl9XG4gICAgICAgICAgICB7c2hvdWxkUmVuZGVyU2VsZWN0ZWRTaGFwZUFjdGlvbnMgJiYgcmVuZGVyU2VsZWN0ZWRTaGFwZUFjdGlvbnMoKX1cbiAgICAgICAgICA8L1N0YWNrLkNvbD5cbiAgICAgICAgICB7IWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJiAoXG4gICAgICAgICAgICA8U2VjdGlvbiBoZWFkaW5nPVwic2hhcGVzXCI+XG4gICAgICAgICAgICAgIHsoaGVhZGluZzogUmVhY3QuUmVhY3ROb2RlKSA9PiAoXG4gICAgICAgICAgICAgICAgPFN0YWNrLkNvbCBnYXA9ezR9IGFsaWduPVwic3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgIDxTdGFjay5Sb3dcbiAgICAgICAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJBcHAtdG9vbGJhci1jb250YWluZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIFwiemVuLW1vZGVcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8UGVuTW9kZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHplbk1vZGVFbmFibGVkPXthcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXthcHBTdGF0ZS5wZW5Nb2RlfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvblBlbk1vZGVUb2dnbGV9XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3QoXCJ0b29sQmFyLnBlbk1vZGVcIil9XG4gICAgICAgICAgICAgICAgICAgICAgcGVuRGV0ZWN0ZWQ9e2FwcFN0YXRlLnBlbkRldGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8TG9ja0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHplbk1vZGVFbmFibGVkPXthcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXthcHBTdGF0ZS5hY3RpdmVUb29sLmxvY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gb25Mb2NrVG9nZ2xlKCl9XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3QoXCJ0b29sQmFyLmxvY2tcIil9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxJc2xhbmRcbiAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nPXsxfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcIkFwcC10b29sYmFyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiemVuLW1vZGVcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SGludFZpZXdlclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNNb2JpbGU9e2RldmljZS5pc01vYmlsZX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIHtoZWFkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIDxTdGFjay5Sb3cgZ2FwPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTaGFwZXNTd2l0Y2hlclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcz17Y2FudmFzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVUb29sPXthcHBTdGF0ZS5hY3RpdmVUb29sfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uSW1hZ2VBY3Rpb249eyh7IHBvaW50ZXJUeXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkltYWdlQWN0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE9uQ2FudmFzRGlyZWN0bHk6IHBvaW50ZXJUeXBlICE9PSBcIm1vdXNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2suUm93PlxuICAgICAgICAgICAgICAgICAgICA8L0lzbGFuZD5cbiAgICAgICAgICAgICAgICAgICAgPExpYnJhcnlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9TdGFjay5Sb3c+XG4gICAgICAgICAgICAgICAgPC9TdGFjay5Db2w+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXG4gICAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX3RvcC1yaWdodCB6ZW4tbW9kZS10cmFuc2l0aW9uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcInRyYW5zaXRpb24tcmlnaHRcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxVc2VyTGlzdFxuICAgICAgICAgICAgICBjb2xsYWJvcmF0b3JzPXthcHBTdGF0ZS5jb2xsYWJvcmF0b3JzfVxuICAgICAgICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtyZW5kZXJUb3BSaWdodFVJPy4oZGV2aWNlLmlzTW9iaWxlLCBhcHBTdGF0ZSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9GaXhlZFNpZGVDb250YWluZXI+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJCb3R0b21BcHBNZW51ID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8Zm9vdGVyXG4gICAgICAgIHJvbGU9XCJjb250ZW50aW5mb1wiXG4gICAgICAgIGNsYXNzTmFtZT1cImxheWVyLXVpX193cmFwcGVyX19mb290ZXIgQXBwLW1lbnUgQXBwLW1lbnVfYm90dG9tXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1sZWZ0IHplbi1tb2RlLXRyYW5zaXRpb25cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLWxlZnQtLXRyYW5zaXRpb24tbGVmdFwiOlxuICAgICAgICAgICAgICAgIGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAgPFN0YWNrLkNvbCBnYXA9ezJ9PlxuICAgICAgICAgICAgPFNlY3Rpb24gaGVhZGluZz1cImNhbnZhc0FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPElzbGFuZCBwYWRkaW5nPXsxfT5cbiAgICAgICAgICAgICAgICA8Wm9vbUFjdGlvbnNcbiAgICAgICAgICAgICAgICAgIHJlbmRlckFjdGlvbj17YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb259XG4gICAgICAgICAgICAgICAgICB6b29tPXthcHBTdGF0ZS56b29tfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvSXNsYW5kPlxuICAgICAgICAgICAgICB7IWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwidW5kby1yZWRvLWJ1dHRvbnMgemVuLW1vZGUtdHJhbnNpdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJsYXllci11aV9fd3JhcHBlcl9fZm9vdGVyLWxlZnQtLXRyYW5zaXRpb24tYm90dG9tXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInVuZG9cIiwgeyBzaXplOiBcInNtYWxsXCIgfSl9XG4gICAgICAgICAgICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInJlZG9cIiwgeyBzaXplOiBcInNtYWxsXCIgfSl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXCJlcmFzZXItYnV0dG9ucyB6ZW4tbW9kZS10cmFuc2l0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBcImxheWVyLXVpX193cmFwcGVyX19mb290ZXItbGVmdC0tdHJhbnNpdGlvbi1sZWZ0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImVyYXNlclwiLCB7IHNpemU6IFwic21hbGxcIiB9KX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7IWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJlxuICAgICAgICAgICAgICAgIGFwcFN0YXRlLm11bHRpRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgIGRldmljZS5pc1RvdWNoU2NyZWVuICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiZmluYWxpemUtYnV0dG9uIHplbi1tb2RlLXRyYW5zaXRpb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1sZWZ0LS10cmFuc2l0aW9uLWxlZnRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlLnplbk1vZGVFbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiZmluYWxpemVcIiwgeyBzaXplOiBcInNtYWxsXCIgfSl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1jZW50ZXIgemVuLW1vZGUtdHJhbnNpdGlvblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcImxheWVyLXVpX193cmFwcGVyX19mb290ZXItbGVmdC0tdHJhbnNpdGlvbi1ib3R0b21cIjpcbiAgICAgICAgICAgICAgICBhcHBTdGF0ZS56ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtyZW5kZXJDdXN0b21Gb290ZXI/LihmYWxzZSwgYXBwU3RhdGUpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgIFwibGF5ZXItdWlfX3dyYXBwZXJfX2Zvb3Rlci1yaWdodCB6ZW4tbW9kZS10cmFuc2l0aW9uXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwidHJhbnNpdGlvbi1yaWdodCBkaXNhYmxlLXBvaW50ZXJFdmVudHNcIjogYXBwU3RhdGUuemVuTW9kZUVuYWJsZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJ0b2dnbGVTaG9ydGN1dHNcIil9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiZGlzYWJsZS16ZW4tbW9kZVwiLCB7XG4gICAgICAgICAgICBcImRpc2FibGUtemVuLW1vZGUtLXZpc2libGVcIjogc2hvd0V4aXRaZW5Nb2RlQnRuLFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGFjdGlvbk1hbmFnZXIuZXhlY3V0ZUFjdGlvbihhY3Rpb25Ub2dnbGVaZW5Nb2RlKX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0KFwiYnV0dG9ucy5leGl0WmVuTW9kZVwiKX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Zvb3Rlcj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IGRpYWxvZ3MgPSAoXG4gICAgPD5cbiAgICAgIHthcHBTdGF0ZS5pc0xvYWRpbmcgJiYgPExvYWRpbmdNZXNzYWdlIGRlbGF5PXsyNTB9IC8+fVxuICAgICAge2FwcFN0YXRlLmVycm9yTWVzc2FnZSAmJiAoXG4gICAgICAgIDxFcnJvckRpYWxvZ1xuICAgICAgICAgIG1lc3NhZ2U9e2FwcFN0YXRlLmVycm9yTWVzc2FnZX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRBcHBTdGF0ZSh7IGVycm9yTWVzc2FnZTogbnVsbCB9KX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7YXBwU3RhdGUuc2hvd0hlbHBEaWFsb2cgJiYgKFxuICAgICAgICA8SGVscERpYWxvZ1xuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldEFwcFN0YXRlKHsgc2hvd0hlbHBEaWFsb2c6IGZhbHNlIH0pO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAge2FwcFN0YXRlLnBhc3RlRGlhbG9nLnNob3duICYmIChcbiAgICAgICAgPFBhc3RlQ2hhcnREaWFsb2dcbiAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgIG9uSW5zZXJ0Q2hhcnQ9e29uSW5zZXJ0RWxlbWVudHN9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT5cbiAgICAgICAgICAgIHNldEFwcFN0YXRlKHtcbiAgICAgICAgICAgICAgcGFzdGVEaWFsb2c6IHsgc2hvd246IGZhbHNlLCBkYXRhOiBudWxsIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG5cbiAgY29uc3QgcmVuZGVyU3RhdHMgPSAoKSA9PiB7XG4gICAgaWYgKCFhcHBTdGF0ZS5zaG93U3RhdHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPFN0YXRzXG4gICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICBlbGVtZW50cz17ZWxlbWVudHN9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICBhY3Rpb25NYW5hZ2VyLmV4ZWN1dGVBY3Rpb24oYWN0aW9uVG9nZ2xlU3RhdHMpO1xuICAgICAgICB9fVxuICAgICAgICByZW5kZXJDdXN0b21TdGF0cz17cmVuZGVyQ3VzdG9tU3RhdHN9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIGRldmljZS5pc01vYmlsZSA/IChcbiAgICA8PlxuICAgICAge2RpYWxvZ3N9XG4gICAgICA8TW9iaWxlTWVudVxuICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgYWN0aW9uTWFuYWdlcj17YWN0aW9uTWFuYWdlcn1cbiAgICAgICAgbGlicmFyeU1lbnU9e2xpYnJhcnlNZW51fVxuICAgICAgICByZW5kZXJKU09ORXhwb3J0RGlhbG9nPXtyZW5kZXJKU09ORXhwb3J0RGlhbG9nfVxuICAgICAgICByZW5kZXJJbWFnZUV4cG9ydERpYWxvZz17cmVuZGVySW1hZ2VFeHBvcnREaWFsb2d9XG4gICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgb25Db2xsYWJCdXR0b25DbGljaz17b25Db2xsYWJCdXR0b25DbGlja31cbiAgICAgICAgb25Mb2NrVG9nZ2xlPXsoKSA9PiBvbkxvY2tUb2dnbGUoKX1cbiAgICAgICAgb25QZW5Nb2RlVG9nZ2xlPXtvblBlbk1vZGVUb2dnbGV9XG4gICAgICAgIGNhbnZhcz17Y2FudmFzfVxuICAgICAgICBpc0NvbGxhYm9yYXRpbmc9e2lzQ29sbGFib3JhdGluZ31cbiAgICAgICAgcmVuZGVyQ3VzdG9tRm9vdGVyPXtyZW5kZXJDdXN0b21Gb290ZXJ9XG4gICAgICAgIHNob3dUaGVtZUJ0bj17c2hvd1RoZW1lQnRufVxuICAgICAgICBvbkltYWdlQWN0aW9uPXtvbkltYWdlQWN0aW9ufVxuICAgICAgICByZW5kZXJUb3BSaWdodFVJPXtyZW5kZXJUb3BSaWdodFVJfVxuICAgICAgICByZW5kZXJTdGF0cz17cmVuZGVyU3RhdHN9XG4gICAgICAvPlxuICAgIDwvPlxuICApIDogKFxuICAgIDw+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xzeChcImxheWVyLXVpX193cmFwcGVyXCIsIHtcbiAgICAgICAgICBcImRpc2FibGUtcG9pbnRlckV2ZW50c1wiOlxuICAgICAgICAgICAgYXBwU3RhdGUuZHJhZ2dpbmdFbGVtZW50IHx8XG4gICAgICAgICAgICBhcHBTdGF0ZS5yZXNpemluZ0VsZW1lbnQgfHxcbiAgICAgICAgICAgIChhcHBTdGF0ZS5lZGl0aW5nRWxlbWVudCAmJlxuICAgICAgICAgICAgICAhaXNUZXh0RWxlbWVudChhcHBTdGF0ZS5lZGl0aW5nRWxlbWVudCkpLFxuICAgICAgICB9KX1cbiAgICAgICAgc3R5bGU9e1xuICAgICAgICAgIGFwcFN0YXRlLmlzTGlicmFyeU9wZW4gJiZcbiAgICAgICAgICBhcHBTdGF0ZS5pc0xpYnJhcnlNZW51RG9ja2VkICYmXG4gICAgICAgICAgZGV2aWNlLmNhbkRldmljZUZpdFNpZGViYXJcbiAgICAgICAgICAgID8geyB3aWR0aDogYGNhbGMoMTAwJSAtICR7TElCUkFSWV9TSURFQkFSX1dJRFRIfXB4KWAgfVxuICAgICAgICAgICAgOiB7fVxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIHtkaWFsb2dzfVxuICAgICAgICB7cmVuZGVyRml4ZWRTaWRlQ29udGFpbmVyKCl9XG4gICAgICAgIHtyZW5kZXJCb3R0b21BcHBNZW51KCl9XG4gICAgICAgIHtyZW5kZXJTdGF0cygpfVxuICAgICAgICB7YXBwU3RhdGUuc2Nyb2xsZWRPdXRzaWRlICYmIChcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzY3JvbGwtYmFjay10by1jb250ZW50XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgc2V0QXBwU3RhdGUoe1xuICAgICAgICAgICAgICAgIC4uLmNhbGN1bGF0ZVNjcm9sbENlbnRlcihlbGVtZW50cywgYXBwU3RhdGUsIGNhbnZhcyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dChcImJ1dHRvbnMuc2Nyb2xsQmFja1RvQ29udGVudFwiKX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAge2FwcFN0YXRlLmlzTGlicmFyeU9wZW4gJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxheWVyLXVpX19zaWRlYmFyXCI+e2xpYnJhcnlNZW51fTwvZGl2PlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmNvbnN0IGFyZUVxdWFsID0gKHByZXY6IExheWVyVUlQcm9wcywgbmV4dDogTGF5ZXJVSVByb3BzKSA9PiB7XG4gIGNvbnN0IGdldE5lY2Vzc2FyeU9iaiA9IChhcHBTdGF0ZTogQXBwU3RhdGUpOiBQYXJ0aWFsPEFwcFN0YXRlPiA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc3VnZ2VzdGVkQmluZGluZ3MsXG4gICAgICBzdGFydEJvdW5kRWxlbWVudDogYm91bmRFbGVtZW50LFxuICAgICAgLi4ucmV0XG4gICAgfSA9IGFwcFN0YXRlO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIGNvbnN0IHByZXZBcHBTdGF0ZSA9IGdldE5lY2Vzc2FyeU9iaihwcmV2LmFwcFN0YXRlKTtcbiAgY29uc3QgbmV4dEFwcFN0YXRlID0gZ2V0TmVjZXNzYXJ5T2JqKG5leHQuYXBwU3RhdGUpO1xuXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcmV2QXBwU3RhdGUpIGFzIChrZXlvZiBQYXJ0aWFsPEFwcFN0YXRlPilbXTtcbiAgcmV0dXJuIChcbiAgICBwcmV2LnJlbmRlckN1c3RvbUZvb3RlciA9PT0gbmV4dC5yZW5kZXJDdXN0b21Gb290ZXIgJiZcbiAgICBwcmV2LmxhbmdDb2RlID09PSBuZXh0LmxhbmdDb2RlICYmXG4gICAgcHJldi5lbGVtZW50cyA9PT0gbmV4dC5lbGVtZW50cyAmJlxuICAgIHByZXYuZmlsZXMgPT09IG5leHQuZmlsZXMgJiZcbiAgICBrZXlzLmV2ZXJ5KChrZXkpID0+IHByZXZBcHBTdGF0ZVtrZXldID09PSBuZXh0QXBwU3RhdGVba2V5XSlcbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0Lm1lbW8oTGF5ZXJVSSwgYXJlRXF1YWwpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/LayerUI.tsx\n");
2385
2374
 
2386
2375
  /***/ }),
2387
2376
 
@@ -2403,7 +2392,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2403
2392
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2404
2393
 
2405
2394
  "use strict";
2406
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LibraryMenu\": () => (/* binding */ LibraryMenu)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _data_library__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../data/library */ \"../../data/library.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../random */ \"../../random.ts\");\n/* harmony import */ var _Dialog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Dialog */ \"../../components/Dialog.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _PublishLibrary__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./PublishLibrary */ \"../../components/PublishLibrary.tsx\");\n/* harmony import */ var _ToolButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _LibraryMenu_scss__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./LibraryMenu.scss */ \"../../components/LibraryMenu.scss\");\n/* harmony import */ var _LibraryMenu_scss__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_LibraryMenu_scss__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _LibraryMenuItems__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./LibraryMenuItems */ \"../../components/LibraryMenuItems.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../analytics */ \"../../analytics.ts\");\n/* harmony import */ var jotai__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! jotai */ \"../../../node_modules/jotai/esm/index.js\");\n/* harmony import */ var _jotai__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../jotai */ \"../../jotai.ts\");\n/* harmony import */ var _Spinner__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./Spinner */ \"../../components/Spinner.tsx\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\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\n\n\n\n\n\n\n\n\n\nconst useOnClickOutside = (ref, cb) => {\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n const listener = (event) => {\n if (!ref.current) {\n return;\n }\n if (event.target instanceof Element &&\n (ref.current.contains(event.target) ||\n !document.body.contains(event.target))) {\n return;\n }\n cb(event);\n };\n document.addEventListener(\"pointerdown\", listener, false);\n return () => {\n document.removeEventListener(\"pointerdown\", listener);\n };\n }, [ref, cb]);\n};\nconst getSelectedItems = (libraryItems, selectedItems) => libraryItems.filter((item) => selectedItems.includes(item.id));\nconst LibraryMenuWrapper = (0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(({ children }, ref) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 1, ref: ref, className: \"layer-ui__library\" }, { children: children })));\n});\nconst LibraryMenu = ({ onClose, onInsertLibraryItems, pendingElements, onAddToLibrary, theme, setAppState, files, libraryReturnUrl, focusContainer, library, id, appState, }) => {\n const ref = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_16__.useDevice)();\n useOnClickOutside(ref, (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((event) => {\n // If click on the library icon, do nothing.\n if (event.target.closest(\".ToolIcon__library\")) {\n return;\n }\n if (!appState.isLibraryMenuDocked || !device.canDeviceFitSidebar) {\n onClose();\n }\n }, [onClose, appState.isLibraryMenuDocked, device.canDeviceFitSidebar]));\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n const handleKeyDown = (event) => {\n if (event.key === _keys__WEBPACK_IMPORTED_MODULE_12__.KEYS.ESCAPE &&\n (!appState.isLibraryMenuDocked || !device.canDeviceFitSidebar)) {\n onClose();\n }\n };\n document.addEventListener(_constants__WEBPACK_IMPORTED_MODULE_11__.EVENT.KEYDOWN, handleKeyDown);\n return () => {\n document.removeEventListener(_constants__WEBPACK_IMPORTED_MODULE_11__.EVENT.KEYDOWN, handleKeyDown);\n };\n }, [onClose, appState.isLibraryMenuDocked, device.canDeviceFitSidebar]);\n const [selectedItems, setSelectedItems] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [showPublishLibraryDialog, setShowPublishLibraryDialog] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [publishLibSuccess, setPublishLibSuccess] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [libraryItemsData] = (0,jotai__WEBPACK_IMPORTED_MODULE_17__.useAtom)(_data_library__WEBPACK_IMPORTED_MODULE_2__.libraryItemsAtom, _jotai__WEBPACK_IMPORTED_MODULE_14__.jotaiScope);\n const removeFromLibrary = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((libraryItems) => __awaiter(void 0, void 0, void 0, function* () {\n const nextItems = libraryItems.filter((item) => !selectedItems.includes(item.id));\n library.setLibrary(nextItems).catch(() => {\n setAppState({ errorMessage: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"alerts.errorRemovingFromLibrary\") });\n });\n setSelectedItems([]);\n }), [library, setAppState, selectedItems, setSelectedItems]);\n const resetLibrary = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {\n library.resetLibrary();\n focusContainer();\n }, [library, focusContainer]);\n const addToLibrary = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((elements, libraryItems) => __awaiter(void 0, void 0, void 0, function* () {\n (0,_analytics__WEBPACK_IMPORTED_MODULE_13__.trackEvent)(\"element\", \"addToLibrary\", \"ui\");\n if (elements.some((element) => element.type === \"image\")) {\n return setAppState({\n errorMessage: \"Support for adding images to the library coming soon!\",\n });\n }\n const nextItems = [\n {\n status: \"unpublished\",\n elements,\n id: (0,_random__WEBPACK_IMPORTED_MODULE_4__.randomId)(),\n created: Date.now(),\n },\n ...libraryItems,\n ];\n onAddToLibrary();\n library.setLibrary(nextItems).catch(() => {\n setAppState({ errorMessage: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"alerts.errorAddingToLibrary\") });\n });\n }), [onAddToLibrary, library, setAppState]);\n const renderPublishSuccess = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Dialog__WEBPACK_IMPORTED_MODULE_5__.Dialog, Object.assign({ onCloseRequest: () => setPublishLibSuccess(null), title: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"publishSuccessDialog.title\"), className: \"publish-library-success\", small: true }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"p\", { children: [(0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"publishSuccessDialog.content\", {\n authorName: publishLibSuccess.authorName,\n }), \" \", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"a\", Object.assign({ href: publishLibSuccess === null || publishLibSuccess === void 0 ? void 0 : publishLibSuccess.url, target: \"_blank\", rel: \"noopener noreferrer\" }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"publishSuccessDialog.link\") }))] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_8__.ToolButton, { type: \"button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.close\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.close\"), label: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.close\"), onClick: () => setPublishLibSuccess(null), \"data-testid\": \"publish-library-success-close\", className: \"publish-library-success-close\" })] })));\n }, [setPublishLibSuccess, publishLibSuccess]);\n const onPublishLibSuccess = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((data, libraryItems) => {\n setShowPublishLibraryDialog(false);\n setPublishLibSuccess({ url: data.url, authorName: data.authorName });\n const nextLibItems = libraryItems.slice();\n nextLibItems.forEach((libItem) => {\n if (selectedItems.includes(libItem.id)) {\n libItem.status = \"published\";\n }\n });\n library.setLibrary(nextLibItems);\n }, [setShowPublishLibraryDialog, setPublishLibSuccess, selectedItems, library]);\n if (libraryItemsData.status === \"loading\" &&\n !libraryItemsData.isInitialized) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(LibraryMenuWrapper, Object.assign({ ref: ref }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"layer-ui__library-message\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Spinner__WEBPACK_IMPORTED_MODULE_15__[\"default\"], { size: \"2em\" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"labels.libraryLoadingMessage\") })] })) })));\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(LibraryMenuWrapper, Object.assign({ ref: ref }, { children: [showPublishLibraryDialog && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PublishLibrary__WEBPACK_IMPORTED_MODULE_7__[\"default\"], { onClose: () => setShowPublishLibraryDialog(false), libraryItems: getSelectedItems(libraryItemsData.libraryItems, selectedItems), appState: appState, onSuccess: (data) => onPublishLibSuccess(data, libraryItemsData.libraryItems), onError: (error) => window.alert(error), updateItemsInStorage: () => library.setLibrary(libraryItemsData.libraryItems), onRemove: (id) => setSelectedItems(selectedItems.filter((_id) => _id !== id)) })), publishLibSuccess && renderPublishSuccess(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryMenuItems__WEBPACK_IMPORTED_MODULE_10__[\"default\"], { isLoading: libraryItemsData.status === \"loading\", libraryItems: libraryItemsData.libraryItems, onRemoveFromLibrary: () => removeFromLibrary(libraryItemsData.libraryItems), onAddToLibrary: (elements) => addToLibrary(elements, libraryItemsData.libraryItems), onInsertLibraryItems: onInsertLibraryItems, pendingElements: pendingElements, setAppState: setAppState, appState: appState, libraryReturnUrl: libraryReturnUrl, library: library, theme: theme, files: files, id: id, selectedItems: selectedItems, onSelectItems: (ids) => setSelectedItems(ids), onPublish: () => setShowPublishLibraryDialog(true), resetLibrary: resetLibrary })] })));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9MaWJyYXJ5TWVudS50c3guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9lO0FBQzZDO0FBQ2hDO0FBQ1M7QUFRSDtBQUNBO0FBQ1k7QUFDSjtBQUVkO0FBQ3NCO0FBQ2I7QUFDTjtBQUNXO0FBQ1Y7QUFDTTtBQUNOO0FBQ0U7QUFFbEMsTUFBTSxpQkFBaUIsR0FBRyxDQUN4QixHQUEyQixFQUMzQixFQUErQixFQUMvQixFQUFFO0lBQ0YsZ0RBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsT0FBTzthQUNSO1lBRUQsSUFDRSxLQUFLLENBQUMsTUFBTSxZQUFZLE9BQU87Z0JBQy9CLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztvQkFDakMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDeEM7Z0JBQ0EsT0FBTzthQUNSO1lBRUQsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ1osQ0FBQyxDQUFDO1FBQ0YsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFMUQsT0FBTyxHQUFHLEVBQUU7WUFDVixRQUFRLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQztJQUNKLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDdkIsWUFBMEIsRUFDMUIsYUFBa0MsRUFDbEMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFcEUsTUFBTSxrQkFBa0IsR0FBRyxpREFBVSxDQUduQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUU7SUFDdEIsT0FBTyxDQUNMLHVEQUFDLDJDQUFNLGtCQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsbUJBQW1CLGdCQUN4RCxRQUFRLElBQ0YsQ0FDVixDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSSxNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQzFCLE9BQU8sRUFDUCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLGNBQWMsRUFDZCxLQUFLLEVBQ0wsV0FBVyxFQUNYLEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLE9BQU8sRUFDUCxFQUFFLEVBQ0YsUUFBUSxHQWNULEVBQUUsRUFBRTtJQUNILE1BQU0sR0FBRyxHQUFHLDZDQUFNLENBQXdCLElBQUksQ0FBQyxDQUFDO0lBRWhELE1BQU0sTUFBTSxHQUFHLGdEQUFTLEVBQUUsQ0FBQztJQUUzQixpQkFBaUIsQ0FDZixHQUFHLEVBQ0gsa0RBQVcsQ0FDVCxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ1IsNENBQTRDO1FBQzVDLElBQUssS0FBSyxDQUFDLE1BQWtCLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDM0QsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRTtZQUNoRSxPQUFPLEVBQUUsQ0FBQztTQUNYO0lBQ0gsQ0FBQyxFQUNELENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FDcEUsQ0FDRixDQUFDO0lBRUYsZ0RBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUM3QyxJQUNFLEtBQUssQ0FBQyxHQUFHLEtBQUssK0NBQVc7Z0JBQ3pCLENBQUMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFDOUQ7Z0JBQ0EsT0FBTyxFQUFFLENBQUM7YUFDWDtRQUNILENBQUMsQ0FBQztRQUNGLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxzREFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sR0FBRyxFQUFFO1lBQ1YsUUFBUSxDQUFDLG1CQUFtQixDQUFDLHNEQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBRXhFLE1BQU0sQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsR0FBRywrQ0FBUSxDQUFzQixFQUFFLENBQUMsQ0FBQztJQUM1RSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsMkJBQTJCLENBQUMsR0FDM0QsK0NBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQixNQUFNLENBQUMsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsR0FBRywrQ0FBUSxDQUd2RCxJQUFJLENBQUMsQ0FBQztJQUVULE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLCtDQUFPLENBQUMsMkRBQWdCLEVBQUUsK0NBQVUsQ0FBQyxDQUFDO0lBRWpFLE1BQU0saUJBQWlCLEdBQUcsa0RBQVcsQ0FDbkMsQ0FBTyxZQUEwQixFQUFFLEVBQUU7UUFDbkMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQzNDLENBQUM7UUFDRixPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDdkMsV0FBVyxDQUFDLEVBQUUsWUFBWSxFQUFFLHdDQUFDLENBQUMsaUNBQWlDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDLEdBQ0QsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUN4RCxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsa0RBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDcEMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZCLGNBQWMsRUFBRSxDQUFDO0lBQ25CLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBRTlCLE1BQU0sWUFBWSxHQUFHLGtEQUFXLENBQzlCLENBQU8sUUFBaUMsRUFBRSxZQUEwQixFQUFFLEVBQUU7UUFDdEUsdURBQVUsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsRUFBRTtZQUN4RCxPQUFPLFdBQVcsQ0FBQztnQkFDakIsWUFBWSxFQUFFLHVEQUF1RDthQUN0RSxDQUFDLENBQUM7U0FDSjtRQUNELE1BQU0sU0FBUyxHQUFpQjtZQUM5QjtnQkFDRSxNQUFNLEVBQUUsYUFBYTtnQkFDckIsUUFBUTtnQkFDUixFQUFFLEVBQUUsaURBQVEsRUFBRTtnQkFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTthQUNwQjtZQUNELEdBQUcsWUFBWTtTQUNoQixDQUFDO1FBQ0YsY0FBYyxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ3ZDLFdBQVcsQ0FBQyxFQUFFLFlBQVksRUFBRSx3Q0FBQyxDQUFDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxHQUNELENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FDdkMsQ0FBQztJQUVGLE1BQU0sb0JBQW9CLEdBQUcsa0RBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDNUMsT0FBTyxDQUNMLHdEQUFDLDJDQUFNLGtCQUNMLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFDaEQsS0FBSyxFQUFFLHdDQUFDLENBQUMsNEJBQTRCLENBQUMsRUFDdEMsU0FBUyxFQUFDLHlCQUF5QixFQUNuQyxLQUFLLEVBQUUsSUFBSSxpQkFFWCwwRUFDRyx3Q0FBQyxDQUFDLDhCQUE4QixFQUFFOzRCQUNqQyxVQUFVLEVBQUUsaUJBQWtCLENBQUMsVUFBVTt5QkFDMUMsQ0FBQyxFQUFFLEdBQUcsRUFDUCw0RUFDRSxJQUFJLEVBQUUsaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsR0FBRyxFQUM1QixNQUFNLEVBQUMsUUFBUSxFQUNmLEdBQUcsRUFBQyxxQkFBcUIsZ0JBRXhCLHdDQUFDLENBQUMsMkJBQTJCLENBQUMsSUFDN0IsSUFDRixFQUNKLHVEQUFDLG1EQUFVLElBQ1QsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUUsd0NBQUMsQ0FBQyxlQUFlLENBQUMsZ0JBQ2Isd0NBQUMsQ0FBQyxlQUFlLENBQUMsRUFDOUIsS0FBSyxFQUFFLHdDQUFDLENBQUMsZUFBZSxDQUFDLEVBQ3pCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsaUJBQzdCLCtCQUErQixFQUMzQyxTQUFTLEVBQUMsK0JBQStCLEdBQ3pDLEtBQ0ssQ0FDVixDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sbUJBQW1CLEdBQUcsa0RBQVcsQ0FDckMsQ0FBQyxJQUFJLEVBQUUsWUFBMEIsRUFBRSxFQUFFO1FBQ25DLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLG9CQUFvQixDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDL0IsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDdEMsT0FBTyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7YUFDOUI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxFQUNELENBQUMsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUM1RSxDQUFDO0lBRUYsSUFDRSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssU0FBUztRQUNyQyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFDL0I7UUFDQSxPQUFPLENBQ0wsdURBQUMsa0JBQWtCLGtCQUFDLEdBQUcsRUFBRSxHQUFHLGdCQUMxQiwrRUFBSyxTQUFTLEVBQUMsMkJBQTJCLGlCQUN4Qyx1REFBQyxpREFBTyxJQUFDLElBQUksRUFBQyxLQUFLLEdBQUcsRUFDdEIsMkVBQU8sd0NBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxHQUFRLEtBQzVDLElBQ2EsQ0FDdEIsQ0FBQztLQUNIO0lBRUQsT0FBTyxDQUNMLHdEQUFDLGtCQUFrQixrQkFBQyxHQUFHLEVBQUUsR0FBRyxpQkFDekIsd0JBQXdCLElBQUksQ0FDM0IsdURBQUMsdURBQWMsSUFDYixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLEVBQ2pELFlBQVksRUFBRSxnQkFBZ0IsQ0FDNUIsZ0JBQWdCLENBQUMsWUFBWSxFQUM3QixhQUFhLENBQ2QsRUFDRCxRQUFRLEVBQUUsUUFBUSxFQUNsQixTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNsQixtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBRTFELE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDdkMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLENBQ3pCLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBRW5ELFFBQVEsRUFBRSxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQ3ZCLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUU3RCxDQUNILEVBQ0EsaUJBQWlCLElBQUksb0JBQW9CLEVBQUUsRUFDNUMsdURBQUMsMERBQWdCLElBQ2YsU0FBUyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQ2hELFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxZQUFZLEVBQzNDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUN4QixpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFFbEQsY0FBYyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDM0IsWUFBWSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFFdkQsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQzFDLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLGdCQUFnQixFQUFFLGdCQUFnQixFQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUNoQixLQUFLLEVBQUUsS0FBSyxFQUNaLEtBQUssRUFBRSxLQUFLLEVBQ1osRUFBRSxFQUFFLEVBQUUsRUFDTixhQUFhLEVBQUUsYUFBYSxFQUM1QixhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUM3QyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLEVBQ2xELFlBQVksRUFBRSxZQUFZLEdBQzFCLEtBQ2lCLENBQ3RCLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9MaWJyYXJ5TWVudS50c3g/YWM0NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxuICB1c2VFZmZlY3QsXG4gIHVzZUNhbGxiYWNrLFxuICBSZWZPYmplY3QsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpYnJhcnksIHsgbGlicmFyeUl0ZW1zQXRvbSB9IGZyb20gXCIuLi9kYXRhL2xpYnJhcnlcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IHsgcmFuZG9tSWQgfSBmcm9tIFwiLi4vcmFuZG9tXCI7XG5pbXBvcnQge1xuICBMaWJyYXJ5SXRlbXMsXG4gIExpYnJhcnlJdGVtLFxuICBBcHBTdGF0ZSxcbiAgQmluYXJ5RmlsZXMsXG4gIEV4Y2FsaWRyYXdQcm9wcyxcbn0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tIFwiLi9EaWFsb2dcIjtcbmltcG9ydCB7IElzbGFuZCB9IGZyb20gXCIuL0lzbGFuZFwiO1xuaW1wb3J0IFB1Ymxpc2hMaWJyYXJ5IGZyb20gXCIuL1B1Ymxpc2hMaWJyYXJ5XCI7XG5pbXBvcnQgeyBUb29sQnV0dG9uIH0gZnJvbSBcIi4vVG9vbEJ1dHRvblwiO1xuXG5pbXBvcnQgXCIuL0xpYnJhcnlNZW51LnNjc3NcIjtcbmltcG9ydCBMaWJyYXJ5TWVudUl0ZW1zIGZyb20gXCIuL0xpYnJhcnlNZW51SXRlbXNcIjtcbmltcG9ydCB7IEVWRU5UIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gXCIuLi9rZXlzXCI7XG5pbXBvcnQgeyB0cmFja0V2ZW50IH0gZnJvbSBcIi4uL2FuYWx5dGljc1wiO1xuaW1wb3J0IHsgdXNlQXRvbSB9IGZyb20gXCJqb3RhaVwiO1xuaW1wb3J0IHsgam90YWlTY29wZSB9IGZyb20gXCIuLi9qb3RhaVwiO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSBcIi4vU3Bpbm5lclwiO1xuaW1wb3J0IHsgdXNlRGV2aWNlIH0gZnJvbSBcIi4vQXBwXCI7XG5cbmNvbnN0IHVzZU9uQ2xpY2tPdXRzaWRlID0gKFxuICByZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudD4sXG4gIGNiOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQsXG4pID0+IHtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBsaXN0ZW5lciA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKCFyZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJlxuICAgICAgICAocmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSB8fFxuICAgICAgICAgICFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjYihldmVudCk7XG4gICAgfTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgbGlzdGVuZXIsIGZhbHNlKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgbGlzdGVuZXIpO1xuICAgIH07XG4gIH0sIFtyZWYsIGNiXSk7XG59O1xuXG5jb25zdCBnZXRTZWxlY3RlZEl0ZW1zID0gKFxuICBsaWJyYXJ5SXRlbXM6IExpYnJhcnlJdGVtcyxcbiAgc2VsZWN0ZWRJdGVtczogTGlicmFyeUl0ZW1bXCJpZFwiXVtdLFxuKSA9PiBsaWJyYXJ5SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGl0ZW0uaWQpKTtcblxuY29uc3QgTGlicmFyeU1lbnVXcmFwcGVyID0gZm9yd2FyZFJlZjxcbiAgSFRNTERpdkVsZW1lbnQsXG4gIHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9XG4+KCh7IGNoaWxkcmVuIH0sIHJlZikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxJc2xhbmQgcGFkZGluZz17MX0gcmVmPXtyZWZ9IGNsYXNzTmFtZT1cImxheWVyLXVpX19saWJyYXJ5XCI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Jc2xhbmQ+XG4gICk7XG59KTtcblxuZXhwb3J0IGNvbnN0IExpYnJhcnlNZW51ID0gKHtcbiAgb25DbG9zZSxcbiAgb25JbnNlcnRMaWJyYXJ5SXRlbXMsXG4gIHBlbmRpbmdFbGVtZW50cyxcbiAgb25BZGRUb0xpYnJhcnksXG4gIHRoZW1lLFxuICBzZXRBcHBTdGF0ZSxcbiAgZmlsZXMsXG4gIGxpYnJhcnlSZXR1cm5VcmwsXG4gIGZvY3VzQ29udGFpbmVyLFxuICBsaWJyYXJ5LFxuICBpZCxcbiAgYXBwU3RhdGUsXG59OiB7XG4gIHBlbmRpbmdFbGVtZW50czogTGlicmFyeUl0ZW1bXCJlbGVtZW50c1wiXTtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgb25JbnNlcnRMaWJyYXJ5SXRlbXM6IChsaWJyYXJ5SXRlbXM6IExpYnJhcnlJdGVtcykgPT4gdm9pZDtcbiAgb25BZGRUb0xpYnJhcnk6ICgpID0+IHZvaWQ7XG4gIHRoZW1lOiBBcHBTdGF0ZVtcInRoZW1lXCJdO1xuICBmaWxlczogQmluYXJ5RmlsZXM7XG4gIHNldEFwcFN0YXRlOiBSZWFjdC5Db21wb25lbnQ8YW55LCBBcHBTdGF0ZT5bXCJzZXRTdGF0ZVwiXTtcbiAgbGlicmFyeVJldHVyblVybDogRXhjYWxpZHJhd1Byb3BzW1wibGlicmFyeVJldHVyblVybFwiXTtcbiAgZm9jdXNDb250YWluZXI6ICgpID0+IHZvaWQ7XG4gIGxpYnJhcnk6IExpYnJhcnk7XG4gIGlkOiBzdHJpbmc7XG4gIGFwcFN0YXRlOiBBcHBTdGF0ZTtcbn0pID0+IHtcbiAgY29uc3QgcmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgZGV2aWNlID0gdXNlRGV2aWNlKCk7XG5cbiAgdXNlT25DbGlja091dHNpZGUoXG4gICAgcmVmLFxuICAgIHVzZUNhbGxiYWNrKFxuICAgICAgKGV2ZW50KSA9PiB7XG4gICAgICAgIC8vIElmIGNsaWNrIG9uIHRoZSBsaWJyYXJ5IGljb24sIGRvIG5vdGhpbmcuXG4gICAgICAgIGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmNsb3Nlc3QoXCIuVG9vbEljb25fX2xpYnJhcnlcIikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcHBTdGF0ZS5pc0xpYnJhcnlNZW51RG9ja2VkIHx8ICFkZXZpY2UuY2FuRGV2aWNlRml0U2lkZWJhcikge1xuICAgICAgICAgIG9uQ2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtvbkNsb3NlLCBhcHBTdGF0ZS5pc0xpYnJhcnlNZW51RG9ja2VkLCBkZXZpY2UuY2FuRGV2aWNlRml0U2lkZWJhcl0sXG4gICAgKSxcbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZXZlbnQua2V5ID09PSBLRVlTLkVTQ0FQRSAmJlxuICAgICAgICAoIWFwcFN0YXRlLmlzTGlicmFyeU1lbnVEb2NrZWQgfHwgIWRldmljZS5jYW5EZXZpY2VGaXRTaWRlYmFyKVxuICAgICAgKSB7XG4gICAgICAgIG9uQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoRVZFTlQuS0VZRE9XTiwgaGFuZGxlS2V5RG93bik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoRVZFTlQuS0VZRE9XTiwgaGFuZGxlS2V5RG93bik7XG4gICAgfTtcbiAgfSwgW29uQ2xvc2UsIGFwcFN0YXRlLmlzTGlicmFyeU1lbnVEb2NrZWQsIGRldmljZS5jYW5EZXZpY2VGaXRTaWRlYmFyXSk7XG5cbiAgY29uc3QgW3NlbGVjdGVkSXRlbXMsIHNldFNlbGVjdGVkSXRlbXNdID0gdXNlU3RhdGU8TGlicmFyeUl0ZW1bXCJpZFwiXVtdPihbXSk7XG4gIGNvbnN0IFtzaG93UHVibGlzaExpYnJhcnlEaWFsb2csIHNldFNob3dQdWJsaXNoTGlicmFyeURpYWxvZ10gPVxuICAgIHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3B1Ymxpc2hMaWJTdWNjZXNzLCBzZXRQdWJsaXNoTGliU3VjY2Vzc10gPSB1c2VTdGF0ZTxudWxsIHwge1xuICAgIHVybDogc3RyaW5nO1xuICAgIGF1dGhvck5hbWU6IHN0cmluZztcbiAgfT4obnVsbCk7XG5cbiAgY29uc3QgW2xpYnJhcnlJdGVtc0RhdGFdID0gdXNlQXRvbShsaWJyYXJ5SXRlbXNBdG9tLCBqb3RhaVNjb3BlKTtcblxuICBjb25zdCByZW1vdmVGcm9tTGlicmFyeSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChsaWJyYXJ5SXRlbXM6IExpYnJhcnlJdGVtcykgPT4ge1xuICAgICAgY29uc3QgbmV4dEl0ZW1zID0gbGlicmFyeUl0ZW1zLmZpbHRlcihcbiAgICAgICAgKGl0ZW0pID0+ICFzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGl0ZW0uaWQpLFxuICAgICAgKTtcbiAgICAgIGxpYnJhcnkuc2V0TGlicmFyeShuZXh0SXRlbXMpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgc2V0QXBwU3RhdGUoeyBlcnJvck1lc3NhZ2U6IHQoXCJhbGVydHMuZXJyb3JSZW1vdmluZ0Zyb21MaWJyYXJ5XCIpIH0pO1xuICAgICAgfSk7XG4gICAgICBzZXRTZWxlY3RlZEl0ZW1zKFtdKTtcbiAgICB9LFxuICAgIFtsaWJyYXJ5LCBzZXRBcHBTdGF0ZSwgc2VsZWN0ZWRJdGVtcywgc2V0U2VsZWN0ZWRJdGVtc10sXG4gICk7XG5cbiAgY29uc3QgcmVzZXRMaWJyYXJ5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGxpYnJhcnkucmVzZXRMaWJyYXJ5KCk7XG4gICAgZm9jdXNDb250YWluZXIoKTtcbiAgfSwgW2xpYnJhcnksIGZvY3VzQ29udGFpbmVyXSk7XG5cbiAgY29uc3QgYWRkVG9MaWJyYXJ5ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGVsZW1lbnRzOiBMaWJyYXJ5SXRlbVtcImVsZW1lbnRzXCJdLCBsaWJyYXJ5SXRlbXM6IExpYnJhcnlJdGVtcykgPT4ge1xuICAgICAgdHJhY2tFdmVudChcImVsZW1lbnRcIiwgXCJhZGRUb0xpYnJhcnlcIiwgXCJ1aVwiKTtcbiAgICAgIGlmIChlbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBlbGVtZW50LnR5cGUgPT09IFwiaW1hZ2VcIikpIHtcbiAgICAgICAgcmV0dXJuIHNldEFwcFN0YXRlKHtcbiAgICAgICAgICBlcnJvck1lc3NhZ2U6IFwiU3VwcG9ydCBmb3IgYWRkaW5nIGltYWdlcyB0byB0aGUgbGlicmFyeSBjb21pbmcgc29vbiFcIixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXh0SXRlbXM6IExpYnJhcnlJdGVtcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHN0YXR1czogXCJ1bnB1Ymxpc2hlZFwiLFxuICAgICAgICAgIGVsZW1lbnRzLFxuICAgICAgICAgIGlkOiByYW5kb21JZCgpLFxuICAgICAgICAgIGNyZWF0ZWQ6IERhdGUubm93KCksXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmxpYnJhcnlJdGVtcyxcbiAgICAgIF07XG4gICAgICBvbkFkZFRvTGlicmFyeSgpO1xuICAgICAgbGlicmFyeS5zZXRMaWJyYXJ5KG5leHRJdGVtcykuY2F0Y2goKCkgPT4ge1xuICAgICAgICBzZXRBcHBTdGF0ZSh7IGVycm9yTWVzc2FnZTogdChcImFsZXJ0cy5lcnJvckFkZGluZ1RvTGlicmFyeVwiKSB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW29uQWRkVG9MaWJyYXJ5LCBsaWJyYXJ5LCBzZXRBcHBTdGF0ZV0sXG4gICk7XG5cbiAgY29uc3QgcmVuZGVyUHVibGlzaFN1Y2Nlc3MgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2dcbiAgICAgICAgb25DbG9zZVJlcXVlc3Q9eygpID0+IHNldFB1Ymxpc2hMaWJTdWNjZXNzKG51bGwpfVxuICAgICAgICB0aXRsZT17dChcInB1Ymxpc2hTdWNjZXNzRGlhbG9nLnRpdGxlXCIpfVxuICAgICAgICBjbGFzc05hbWU9XCJwdWJsaXNoLWxpYnJhcnktc3VjY2Vzc1wiXG4gICAgICAgIHNtYWxsPXt0cnVlfVxuICAgICAgPlxuICAgICAgICA8cD5cbiAgICAgICAgICB7dChcInB1Ymxpc2hTdWNjZXNzRGlhbG9nLmNvbnRlbnRcIiwge1xuICAgICAgICAgICAgYXV0aG9yTmFtZTogcHVibGlzaExpYlN1Y2Nlc3MhLmF1dGhvck5hbWUsXG4gICAgICAgICAgfSl9e1wiIFwifVxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBocmVmPXtwdWJsaXNoTGliU3VjY2Vzcz8udXJsfVxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KFwicHVibGlzaFN1Y2Nlc3NEaWFsb2cubGlua1wiKX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPFRvb2xCdXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICB0aXRsZT17dChcImJ1dHRvbnMuY2xvc2VcIil9XG4gICAgICAgICAgYXJpYS1sYWJlbD17dChcImJ1dHRvbnMuY2xvc2VcIil9XG4gICAgICAgICAgbGFiZWw9e3QoXCJidXR0b25zLmNsb3NlXCIpfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFB1Ymxpc2hMaWJTdWNjZXNzKG51bGwpfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwicHVibGlzaC1saWJyYXJ5LXN1Y2Nlc3MtY2xvc2VcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInB1Ymxpc2gtbGlicmFyeS1zdWNjZXNzLWNsb3NlXCJcbiAgICAgICAgLz5cbiAgICAgIDwvRGlhbG9nPlxuICAgICk7XG4gIH0sIFtzZXRQdWJsaXNoTGliU3VjY2VzcywgcHVibGlzaExpYlN1Y2Nlc3NdKTtcblxuICBjb25zdCBvblB1Ymxpc2hMaWJTdWNjZXNzID0gdXNlQ2FsbGJhY2soXG4gICAgKGRhdGEsIGxpYnJhcnlJdGVtczogTGlicmFyeUl0ZW1zKSA9PiB7XG4gICAgICBzZXRTaG93UHVibGlzaExpYnJhcnlEaWFsb2coZmFsc2UpO1xuICAgICAgc2V0UHVibGlzaExpYlN1Y2Nlc3MoeyB1cmw6IGRhdGEudXJsLCBhdXRob3JOYW1lOiBkYXRhLmF1dGhvck5hbWUgfSk7XG4gICAgICBjb25zdCBuZXh0TGliSXRlbXMgPSBsaWJyYXJ5SXRlbXMuc2xpY2UoKTtcbiAgICAgIG5leHRMaWJJdGVtcy5mb3JFYWNoKChsaWJJdGVtKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGxpYkl0ZW0uaWQpKSB7XG4gICAgICAgICAgbGliSXRlbS5zdGF0dXMgPSBcInB1Ymxpc2hlZFwiO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxpYnJhcnkuc2V0TGlicmFyeShuZXh0TGliSXRlbXMpO1xuICAgIH0sXG4gICAgW3NldFNob3dQdWJsaXNoTGlicmFyeURpYWxvZywgc2V0UHVibGlzaExpYlN1Y2Nlc3MsIHNlbGVjdGVkSXRlbXMsIGxpYnJhcnldLFxuICApO1xuXG4gIGlmIChcbiAgICBsaWJyYXJ5SXRlbXNEYXRhLnN0YXR1cyA9PT0gXCJsb2FkaW5nXCIgJiZcbiAgICAhbGlicmFyeUl0ZW1zRGF0YS5pc0luaXRpYWxpemVkXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGlicmFyeU1lbnVXcmFwcGVyIHJlZj17cmVmfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYXllci11aV9fbGlicmFyeS1tZXNzYWdlXCI+XG4gICAgICAgICAgPFNwaW5uZXIgc2l6ZT1cIjJlbVwiIC8+XG4gICAgICAgICAgPHNwYW4+e3QoXCJsYWJlbHMubGlicmFyeUxvYWRpbmdNZXNzYWdlXCIpfTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0xpYnJhcnlNZW51V3JhcHBlcj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8TGlicmFyeU1lbnVXcmFwcGVyIHJlZj17cmVmfT5cbiAgICAgIHtzaG93UHVibGlzaExpYnJhcnlEaWFsb2cgJiYgKFxuICAgICAgICA8UHVibGlzaExpYnJhcnlcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UHVibGlzaExpYnJhcnlEaWFsb2coZmFsc2UpfVxuICAgICAgICAgIGxpYnJhcnlJdGVtcz17Z2V0U2VsZWN0ZWRJdGVtcyhcbiAgICAgICAgICAgIGxpYnJhcnlJdGVtc0RhdGEubGlicmFyeUl0ZW1zLFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICApfVxuICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICBvblN1Y2Nlc3M9eyhkYXRhKSA9PlxuICAgICAgICAgICAgb25QdWJsaXNoTGliU3VjY2VzcyhkYXRhLCBsaWJyYXJ5SXRlbXNEYXRhLmxpYnJhcnlJdGVtcylcbiAgICAgICAgICB9XG4gICAgICAgICAgb25FcnJvcj17KGVycm9yKSA9PiB3aW5kb3cuYWxlcnQoZXJyb3IpfVxuICAgICAgICAgIHVwZGF0ZUl0ZW1zSW5TdG9yYWdlPXsoKSA9PlxuICAgICAgICAgICAgbGlicmFyeS5zZXRMaWJyYXJ5KGxpYnJhcnlJdGVtc0RhdGEubGlicmFyeUl0ZW1zKVxuICAgICAgICAgIH1cbiAgICAgICAgICBvblJlbW92ZT17KGlkOiBzdHJpbmcpID0+XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEl0ZW1zKHNlbGVjdGVkSXRlbXMuZmlsdGVyKChfaWQpID0+IF9pZCAhPT0gaWQpKVxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7cHVibGlzaExpYlN1Y2Nlc3MgJiYgcmVuZGVyUHVibGlzaFN1Y2Nlc3MoKX1cbiAgICAgIDxMaWJyYXJ5TWVudUl0ZW1zXG4gICAgICAgIGlzTG9hZGluZz17bGlicmFyeUl0ZW1zRGF0YS5zdGF0dXMgPT09IFwibG9hZGluZ1wifVxuICAgICAgICBsaWJyYXJ5SXRlbXM9e2xpYnJhcnlJdGVtc0RhdGEubGlicmFyeUl0ZW1zfVxuICAgICAgICBvblJlbW92ZUZyb21MaWJyYXJ5PXsoKSA9PlxuICAgICAgICAgIHJlbW92ZUZyb21MaWJyYXJ5KGxpYnJhcnlJdGVtc0RhdGEubGlicmFyeUl0ZW1zKVxuICAgICAgICB9XG4gICAgICAgIG9uQWRkVG9MaWJyYXJ5PXsoZWxlbWVudHMpID0+XG4gICAgICAgICAgYWRkVG9MaWJyYXJ5KGVsZW1lbnRzLCBsaWJyYXJ5SXRlbXNEYXRhLmxpYnJhcnlJdGVtcylcbiAgICAgICAgfVxuICAgICAgICBvbkluc2VydExpYnJhcnlJdGVtcz17b25JbnNlcnRMaWJyYXJ5SXRlbXN9XG4gICAgICAgIHBlbmRpbmdFbGVtZW50cz17cGVuZGluZ0VsZW1lbnRzfVxuICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgbGlicmFyeVJldHVyblVybD17bGlicmFyeVJldHVyblVybH1cbiAgICAgICAgbGlicmFyeT17bGlicmFyeX1cbiAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICBmaWxlcz17ZmlsZXN9XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgc2VsZWN0ZWRJdGVtcz17c2VsZWN0ZWRJdGVtc31cbiAgICAgICAgb25TZWxlY3RJdGVtcz17KGlkcykgPT4gc2V0U2VsZWN0ZWRJdGVtcyhpZHMpfVxuICAgICAgICBvblB1Ymxpc2g9eygpID0+IHNldFNob3dQdWJsaXNoTGlicmFyeURpYWxvZyh0cnVlKX1cbiAgICAgICAgcmVzZXRMaWJyYXJ5PXtyZXNldExpYnJhcnl9XG4gICAgICAvPlxuICAgIDwvTGlicmFyeU1lbnVXcmFwcGVyPlxuICApO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/LibraryMenu.tsx\n");
2395
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LibraryMenu\": () => (/* binding */ LibraryMenu)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _data_library__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../data/library */ \"../../data/library.ts\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../random */ \"../../random.ts\");\n/* harmony import */ var _Dialog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Dialog */ \"../../components/Dialog.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _PublishLibrary__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./PublishLibrary */ \"../../components/PublishLibrary.tsx\");\n/* harmony import */ var _ToolButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ToolButton */ \"../../components/ToolButton.tsx\");\n/* harmony import */ var _LibraryMenu_scss__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./LibraryMenu.scss */ \"../../components/LibraryMenu.scss\");\n/* harmony import */ var _LibraryMenu_scss__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_LibraryMenu_scss__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _LibraryMenuItems__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./LibraryMenuItems */ \"../../components/LibraryMenuItems.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../analytics */ \"../../analytics.ts\");\n/* harmony import */ var jotai__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! jotai */ \"../../../node_modules/jotai/esm/index.js\");\n/* harmony import */ var _jotai__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../jotai */ \"../../jotai.ts\");\n/* harmony import */ var _Spinner__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./Spinner */ \"../../components/Spinner.tsx\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\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\n\n\n\n\n\n\n\n\n\nconst useOnClickOutside = (ref, cb) => {\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n const listener = (event) => {\n if (!ref.current) {\n return;\n }\n if (event.target instanceof Element &&\n (ref.current.contains(event.target) ||\n !document.body.contains(event.target))) {\n return;\n }\n cb(event);\n };\n document.addEventListener(\"pointerdown\", listener, false);\n return () => {\n document.removeEventListener(\"pointerdown\", listener);\n };\n }, [ref, cb]);\n};\nconst getSelectedItems = (libraryItems, selectedItems) => libraryItems.filter((item) => selectedItems.includes(item.id));\nconst LibraryMenuWrapper = (0,react__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(({ children }, ref) => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 1, ref: ref, className: \"layer-ui__library\" }, { children: children })));\n});\nconst LibraryMenu = ({ onClose, onInsertLibraryItems, pendingElements, onAddToLibrary, theme, setAppState, files, libraryReturnUrl, focusContainer, library, id, appState, }) => {\n const ref = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_16__.useDevice)();\n useOnClickOutside(ref, (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((event) => {\n // If click on the library icon, do nothing.\n if (event.target.closest(\".ToolIcon__library\")) {\n return;\n }\n if (!appState.isLibraryMenuDocked || !device.canDeviceFitSidebar) {\n onClose();\n }\n }, [onClose, appState.isLibraryMenuDocked, device.canDeviceFitSidebar]));\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n const handleKeyDown = (event) => {\n if (event.key === _keys__WEBPACK_IMPORTED_MODULE_12__.KEYS.ESCAPE &&\n (!appState.isLibraryMenuDocked || !device.canDeviceFitSidebar)) {\n onClose();\n }\n };\n document.addEventListener(_constants__WEBPACK_IMPORTED_MODULE_11__.EVENT.KEYDOWN, handleKeyDown);\n return () => {\n document.removeEventListener(_constants__WEBPACK_IMPORTED_MODULE_11__.EVENT.KEYDOWN, handleKeyDown);\n };\n }, [onClose, appState.isLibraryMenuDocked, device.canDeviceFitSidebar]);\n const [selectedItems, setSelectedItems] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [showPublishLibraryDialog, setShowPublishLibraryDialog] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [publishLibSuccess, setPublishLibSuccess] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [libraryItemsData] = (0,jotai__WEBPACK_IMPORTED_MODULE_17__.useAtom)(_data_library__WEBPACK_IMPORTED_MODULE_2__.libraryItemsAtom, _jotai__WEBPACK_IMPORTED_MODULE_14__.jotaiScope);\n const removeFromLibrary = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((libraryItems) => __awaiter(void 0, void 0, void 0, function* () {\n const nextItems = libraryItems.filter((item) => !selectedItems.includes(item.id));\n library.setLibrary(nextItems).catch(() => {\n setAppState({ errorMessage: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"alerts.errorRemovingFromLibrary\") });\n });\n setSelectedItems([]);\n }), [library, setAppState, selectedItems, setSelectedItems]);\n const resetLibrary = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {\n library.resetLibrary();\n focusContainer();\n }, [library, focusContainer]);\n const addToLibrary = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((elements, libraryItems) => __awaiter(void 0, void 0, void 0, function* () {\n (0,_analytics__WEBPACK_IMPORTED_MODULE_13__.trackEvent)(\"element\", \"addToLibrary\", \"ui\");\n if (elements.some((element) => element.type === \"image\")) {\n return setAppState({\n errorMessage: \"Support for adding images to the library coming soon!\",\n });\n }\n const nextItems = [\n {\n status: \"unpublished\",\n elements,\n id: (0,_random__WEBPACK_IMPORTED_MODULE_4__.randomId)(),\n created: Date.now(),\n },\n ...libraryItems,\n ];\n onAddToLibrary();\n library.setLibrary(nextItems).catch(() => {\n setAppState({ errorMessage: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"alerts.errorAddingToLibrary\") });\n });\n }), [onAddToLibrary, library, setAppState]);\n const renderPublishSuccess = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Dialog__WEBPACK_IMPORTED_MODULE_5__.Dialog, Object.assign({ onCloseRequest: () => setPublishLibSuccess(null), title: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"publishSuccessDialog.title\"), className: \"publish-library-success\", small: true }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"p\", { children: [(0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"publishSuccessDialog.content\", {\n authorName: publishLibSuccess.authorName,\n }), \" \", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"a\", Object.assign({ href: publishLibSuccess === null || publishLibSuccess === void 0 ? void 0 : publishLibSuccess.url, target: \"_blank\", rel: \"noopener noreferrer\" }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"publishSuccessDialog.link\") }))] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_ToolButton__WEBPACK_IMPORTED_MODULE_8__.ToolButton, { type: \"button\", title: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.close\"), \"aria-label\": (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.close\"), label: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"buttons.close\"), onClick: () => setPublishLibSuccess(null), \"data-testid\": \"publish-library-success-close\", className: \"publish-library-success-close\" })] })));\n }, [setPublishLibSuccess, publishLibSuccess]);\n const onPublishLibSuccess = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((data, libraryItems) => {\n setShowPublishLibraryDialog(false);\n setPublishLibSuccess({ url: data.url, authorName: data.authorName });\n const nextLibItems = libraryItems.slice();\n nextLibItems.forEach((libItem) => {\n if (selectedItems.includes(libItem.id)) {\n libItem.status = \"published\";\n }\n });\n library.setLibrary(nextLibItems);\n }, [setShowPublishLibraryDialog, setPublishLibSuccess, selectedItems, library]);\n if (libraryItemsData.status === \"loading\" &&\n !libraryItemsData.isInitialized) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(LibraryMenuWrapper, Object.assign({ ref: ref }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"layer-ui__library-message\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Spinner__WEBPACK_IMPORTED_MODULE_15__[\"default\"], { size: \"2em\" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"span\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.t)(\"labels.libraryLoadingMessage\") })] })) })));\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(LibraryMenuWrapper, Object.assign({ ref: ref }, { children: [showPublishLibraryDialog && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PublishLibrary__WEBPACK_IMPORTED_MODULE_7__[\"default\"], { onClose: () => setShowPublishLibraryDialog(false), libraryItems: getSelectedItems(libraryItemsData.libraryItems, selectedItems), appState: appState, onSuccess: (data) => onPublishLibSuccess(data, libraryItemsData.libraryItems), onError: (error) => window.alert(error), updateItemsInStorage: () => library.setLibrary(libraryItemsData.libraryItems), onRemove: (id) => setSelectedItems(selectedItems.filter((_id) => _id !== id)) })), publishLibSuccess && renderPublishSuccess(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryMenuItems__WEBPACK_IMPORTED_MODULE_10__[\"default\"], { isLoading: libraryItemsData.status === \"loading\", libraryItems: libraryItemsData.libraryItems, onRemoveFromLibrary: () => removeFromLibrary(libraryItemsData.libraryItems), onAddToLibrary: (elements) => addToLibrary(elements, libraryItemsData.libraryItems), onInsertLibraryItems: onInsertLibraryItems, pendingElements: pendingElements, setAppState: setAppState, appState: appState, libraryReturnUrl: libraryReturnUrl, library: library, theme: theme, files: files, id: id, selectedItems: selectedItems, onSelectItems: (ids) => setSelectedItems(ids), onPublish: () => setShowPublishLibraryDialog(true), resetLibrary: resetLibrary })] })));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SyxFQUNaLEVBQUUsRUFBRSxFQUFFLEVBQ04sYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFDN0MsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUNsRCxZQUFZLEVBQUUsWUFBWSxHQUMxQixLQUNpQixDQUN0QixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbXBvbmVudHMvTGlicmFyeU1lbnUudHN4P2FjNDUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VDYWxsYmFjayxcbiAgUmVmT2JqZWN0LFxuICBmb3J3YXJkUmVmLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaWJyYXJ5LCB7IGxpYnJhcnlJdGVtc0F0b20gfSBmcm9tIFwiLi4vZGF0YS9saWJyYXJ5XCI7XG5pbXBvcnQgeyB0IH0gZnJvbSBcIi4uL2kxOG5cIjtcbmltcG9ydCB7IHJhbmRvbUlkIH0gZnJvbSBcIi4uL3JhbmRvbVwiO1xuaW1wb3J0IHtcbiAgTGlicmFyeUl0ZW1zLFxuICBMaWJyYXJ5SXRlbSxcbiAgQXBwU3RhdGUsXG4gIEJpbmFyeUZpbGVzLFxuICBFeGNhbGlkcmF3UHJvcHMsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSBcIi4vRGlhbG9nXCI7XG5pbXBvcnQgeyBJc2xhbmQgfSBmcm9tIFwiLi9Jc2xhbmRcIjtcbmltcG9ydCBQdWJsaXNoTGlicmFyeSBmcm9tIFwiLi9QdWJsaXNoTGlicmFyeVwiO1xuaW1wb3J0IHsgVG9vbEJ1dHRvbiB9IGZyb20gXCIuL1Rvb2xCdXR0b25cIjtcblxuaW1wb3J0IFwiLi9MaWJyYXJ5TWVudS5zY3NzXCI7XG5pbXBvcnQgTGlicmFyeU1lbnVJdGVtcyBmcm9tIFwiLi9MaWJyYXJ5TWVudUl0ZW1zXCI7XG5pbXBvcnQgeyBFVkVOVCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEtFWVMgfSBmcm9tIFwiLi4va2V5c1wiO1xuaW1wb3J0IHsgdHJhY2tFdmVudCB9IGZyb20gXCIuLi9hbmFseXRpY3NcIjtcbmltcG9ydCB7IHVzZUF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7IGpvdGFpU2NvcGUgfSBmcm9tIFwiLi4vam90YWlcIjtcbmltcG9ydCBTcGlubmVyIGZyb20gXCIuL1NwaW5uZXJcIjtcbmltcG9ydCB7IHVzZURldmljZSB9IGZyb20gXCIuL0FwcFwiO1xuXG5jb25zdCB1c2VPbkNsaWNrT3V0c2lkZSA9IChcbiAgcmVmOiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+LFxuICBjYjogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkLFxuKSA9PiB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgJiZcbiAgICAgICAgKHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgfHxcbiAgICAgICAgICAhZG9jdW1lbnQuYm9keS5jb250YWlucyhldmVudC50YXJnZXQpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY2IoZXZlbnQpO1xuICAgIH07XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIGxpc3RlbmVyLCBmYWxzZSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIGxpc3RlbmVyKTtcbiAgICB9O1xuICB9LCBbcmVmLCBjYl0pO1xufTtcblxuY29uc3QgZ2V0U2VsZWN0ZWRJdGVtcyA9IChcbiAgbGlicmFyeUl0ZW1zOiBMaWJyYXJ5SXRlbXMsXG4gIHNlbGVjdGVkSXRlbXM6IExpYnJhcnlJdGVtW1wiaWRcIl1bXSxcbikgPT4gbGlicmFyeUl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gc2VsZWN0ZWRJdGVtcy5pbmNsdWRlcyhpdGVtLmlkKSk7XG5cbmNvbnN0IExpYnJhcnlNZW51V3JhcHBlciA9IGZvcndhcmRSZWY8XG4gIEhUTUxEaXZFbGVtZW50LFxuICB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfVxuPigoeyBjaGlsZHJlbiB9LCByZWYpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8SXNsYW5kIHBhZGRpbmc9ezF9IHJlZj17cmVmfSBjbGFzc05hbWU9XCJsYXllci11aV9fbGlicmFyeVwiPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvSXNsYW5kPlxuICApO1xufSk7XG5cbmV4cG9ydCBjb25zdCBMaWJyYXJ5TWVudSA9ICh7XG4gIG9uQ2xvc2UsXG4gIG9uSW5zZXJ0TGlicmFyeUl0ZW1zLFxuICBwZW5kaW5nRWxlbWVudHMsXG4gIG9uQWRkVG9MaWJyYXJ5LFxuICB0aGVtZSxcbiAgc2V0QXBwU3RhdGUsXG4gIGZpbGVzLFxuICBsaWJyYXJ5UmV0dXJuVXJsLFxuICBmb2N1c0NvbnRhaW5lcixcbiAgbGlicmFyeSxcbiAgaWQsXG4gIGFwcFN0YXRlLFxufToge1xuICBwZW5kaW5nRWxlbWVudHM6IExpYnJhcnlJdGVtW1wiZWxlbWVudHNcIl07XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG4gIG9uSW5zZXJ0TGlicmFyeUl0ZW1zOiAobGlicmFyeUl0ZW1zOiBMaWJyYXJ5SXRlbXMpID0+IHZvaWQ7XG4gIG9uQWRkVG9MaWJyYXJ5OiAoKSA9PiB2b2lkO1xuICB0aGVtZTogQXBwU3RhdGVbXCJ0aGVtZVwiXTtcbiAgZmlsZXM6IEJpbmFyeUZpbGVzO1xuICBzZXRBcHBTdGF0ZTogUmVhY3QuQ29tcG9uZW50PGFueSwgQXBwU3RhdGU+W1wic2V0U3RhdGVcIl07XG4gIGxpYnJhcnlSZXR1cm5Vcmw6IEV4Y2FsaWRyYXdQcm9wc1tcImxpYnJhcnlSZXR1cm5VcmxcIl07XG4gIGZvY3VzQ29udGFpbmVyOiAoKSA9PiB2b2lkO1xuICBsaWJyYXJ5OiBMaWJyYXJ5O1xuICBpZDogc3RyaW5nO1xuICBhcHBTdGF0ZTogQXBwU3RhdGU7XG59KSA9PiB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGRldmljZSA9IHVzZURldmljZSgpO1xuXG4gIHVzZU9uQ2xpY2tPdXRzaWRlKFxuICAgIHJlZixcbiAgICB1c2VDYWxsYmFjayhcbiAgICAgIChldmVudCkgPT4ge1xuICAgICAgICAvLyBJZiBjbGljayBvbiB0aGUgbGlicmFyeSBpY29uLCBkbyBub3RoaW5nLlxuICAgICAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5jbG9zZXN0KFwiLlRvb2xJY29uX19saWJyYXJ5XCIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXBwU3RhdGUuaXNMaWJyYXJ5TWVudURvY2tlZCB8fCAhZGV2aWNlLmNhbkRldmljZUZpdFNpZGViYXIpIHtcbiAgICAgICAgICBvbkNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbb25DbG9zZSwgYXBwU3RhdGUuaXNMaWJyYXJ5TWVudURvY2tlZCwgZGV2aWNlLmNhbkRldmljZUZpdFNpZGViYXJdLFxuICAgICksXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50LmtleSA9PT0gS0VZUy5FU0NBUEUgJiZcbiAgICAgICAgKCFhcHBTdGF0ZS5pc0xpYnJhcnlNZW51RG9ja2VkIHx8ICFkZXZpY2UuY2FuRGV2aWNlRml0U2lkZWJhcilcbiAgICAgICkge1xuICAgICAgICBvbkNsb3NlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKEVWRU5ULktFWURPV04sIGhhbmRsZUtleURvd24pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKEVWRU5ULktFWURPV04sIGhhbmRsZUtleURvd24pO1xuICAgIH07XG4gIH0sIFtvbkNsb3NlLCBhcHBTdGF0ZS5pc0xpYnJhcnlNZW51RG9ja2VkLCBkZXZpY2UuY2FuRGV2aWNlRml0U2lkZWJhcl0pO1xuXG4gIGNvbnN0IFtzZWxlY3RlZEl0ZW1zLCBzZXRTZWxlY3RlZEl0ZW1zXSA9IHVzZVN0YXRlPExpYnJhcnlJdGVtW1wiaWRcIl1bXT4oW10pO1xuICBjb25zdCBbc2hvd1B1Ymxpc2hMaWJyYXJ5RGlhbG9nLCBzZXRTaG93UHVibGlzaExpYnJhcnlEaWFsb2ddID1cbiAgICB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtwdWJsaXNoTGliU3VjY2Vzcywgc2V0UHVibGlzaExpYlN1Y2Nlc3NdID0gdXNlU3RhdGU8bnVsbCB8IHtcbiAgICB1cmw6IHN0cmluZztcbiAgICBhdXRob3JOYW1lOiBzdHJpbmc7XG4gIH0+KG51bGwpO1xuXG4gIGNvbnN0IFtsaWJyYXJ5SXRlbXNEYXRhXSA9IHVzZUF0b20obGlicmFyeUl0ZW1zQXRvbSwgam90YWlTY29wZSk7XG5cbiAgY29uc3QgcmVtb3ZlRnJvbUxpYnJhcnkgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobGlicmFyeUl0ZW1zOiBMaWJyYXJ5SXRlbXMpID0+IHtcbiAgICAgIGNvbnN0IG5leHRJdGVtcyA9IGxpYnJhcnlJdGVtcy5maWx0ZXIoXG4gICAgICAgIChpdGVtKSA9PiAhc2VsZWN0ZWRJdGVtcy5pbmNsdWRlcyhpdGVtLmlkKSxcbiAgICAgICk7XG4gICAgICBsaWJyYXJ5LnNldExpYnJhcnkobmV4dEl0ZW1zKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHNldEFwcFN0YXRlKHsgZXJyb3JNZXNzYWdlOiB0KFwiYWxlcnRzLmVycm9yUmVtb3ZpbmdGcm9tTGlicmFyeVwiKSB9KTtcbiAgICAgIH0pO1xuICAgICAgc2V0U2VsZWN0ZWRJdGVtcyhbXSk7XG4gICAgfSxcbiAgICBbbGlicmFyeSwgc2V0QXBwU3RhdGUsIHNlbGVjdGVkSXRlbXMsIHNldFNlbGVjdGVkSXRlbXNdLFxuICApO1xuXG4gIGNvbnN0IHJlc2V0TGlicmFyeSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBsaWJyYXJ5LnJlc2V0TGlicmFyeSgpO1xuICAgIGZvY3VzQ29udGFpbmVyKCk7XG4gIH0sIFtsaWJyYXJ5LCBmb2N1c0NvbnRhaW5lcl0pO1xuXG4gIGNvbnN0IGFkZFRvTGlicmFyeSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChlbGVtZW50czogTGlicmFyeUl0ZW1bXCJlbGVtZW50c1wiXSwgbGlicmFyeUl0ZW1zOiBMaWJyYXJ5SXRlbXMpID0+IHtcbiAgICAgIHRyYWNrRXZlbnQoXCJlbGVtZW50XCIsIFwiYWRkVG9MaWJyYXJ5XCIsIFwidWlcIik7XG4gICAgICBpZiAoZWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gZWxlbWVudC50eXBlID09PSBcImltYWdlXCIpKSB7XG4gICAgICAgIHJldHVybiBzZXRBcHBTdGF0ZSh7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlOiBcIlN1cHBvcnQgZm9yIGFkZGluZyBpbWFnZXMgdG8gdGhlIGxpYnJhcnkgY29taW5nIHNvb24hXCIsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV4dEl0ZW1zOiBMaWJyYXJ5SXRlbXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0dXM6IFwidW5wdWJsaXNoZWRcIixcbiAgICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgICBpZDogcmFuZG9tSWQoKSxcbiAgICAgICAgICBjcmVhdGVkOiBEYXRlLm5vdygpLFxuICAgICAgICB9LFxuICAgICAgICAuLi5saWJyYXJ5SXRlbXMsXG4gICAgICBdO1xuICAgICAgb25BZGRUb0xpYnJhcnkoKTtcbiAgICAgIGxpYnJhcnkuc2V0TGlicmFyeShuZXh0SXRlbXMpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgc2V0QXBwU3RhdGUoeyBlcnJvck1lc3NhZ2U6IHQoXCJhbGVydHMuZXJyb3JBZGRpbmdUb0xpYnJhcnlcIikgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtvbkFkZFRvTGlicmFyeSwgbGlicmFyeSwgc2V0QXBwU3RhdGVdLFxuICApO1xuXG4gIGNvbnN0IHJlbmRlclB1Ymxpc2hTdWNjZXNzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RGlhbG9nXG4gICAgICAgIG9uQ2xvc2VSZXF1ZXN0PXsoKSA9PiBzZXRQdWJsaXNoTGliU3VjY2VzcyhudWxsKX1cbiAgICAgICAgdGl0bGU9e3QoXCJwdWJsaXNoU3VjY2Vzc0RpYWxvZy50aXRsZVwiKX1cbiAgICAgICAgY2xhc3NOYW1lPVwicHVibGlzaC1saWJyYXJ5LXN1Y2Nlc3NcIlxuICAgICAgICBzbWFsbD17dHJ1ZX1cbiAgICAgID5cbiAgICAgICAgPHA+XG4gICAgICAgICAge3QoXCJwdWJsaXNoU3VjY2Vzc0RpYWxvZy5jb250ZW50XCIsIHtcbiAgICAgICAgICAgIGF1dGhvck5hbWU6IHB1Ymxpc2hMaWJTdWNjZXNzIS5hdXRob3JOYW1lLFxuICAgICAgICAgIH0pfXtcIiBcIn1cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj17cHVibGlzaExpYlN1Y2Nlc3M/LnVybH1cbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dChcInB1Ymxpc2hTdWNjZXNzRGlhbG9nLmxpbmtcIil9XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L3A+XG4gICAgICAgIDxUb29sQnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgdGl0bGU9e3QoXCJidXR0b25zLmNsb3NlXCIpfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3QoXCJidXR0b25zLmNsb3NlXCIpfVxuICAgICAgICAgIGxhYmVsPXt0KFwiYnV0dG9ucy5jbG9zZVwiKX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRQdWJsaXNoTGliU3VjY2VzcyhudWxsKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInB1Ymxpc2gtbGlicmFyeS1zdWNjZXNzLWNsb3NlXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJwdWJsaXNoLWxpYnJhcnktc3VjY2Vzcy1jbG9zZVwiXG4gICAgICAgIC8+XG4gICAgICA8L0RpYWxvZz5cbiAgICApO1xuICB9LCBbc2V0UHVibGlzaExpYlN1Y2Nlc3MsIHB1Ymxpc2hMaWJTdWNjZXNzXSk7XG5cbiAgY29uc3Qgb25QdWJsaXNoTGliU3VjY2VzcyA9IHVzZUNhbGxiYWNrKFxuICAgIChkYXRhOiB7IHVybDogc3RyaW5nOyBhdXRob3JOYW1lOiBzdHJpbmcgfSwgbGlicmFyeUl0ZW1zOiBMaWJyYXJ5SXRlbXMpID0+IHtcbiAgICAgIHNldFNob3dQdWJsaXNoTGlicmFyeURpYWxvZyhmYWxzZSk7XG4gICAgICBzZXRQdWJsaXNoTGliU3VjY2Vzcyh7IHVybDogZGF0YS51cmwsIGF1dGhvck5hbWU6IGRhdGEuYXV0aG9yTmFtZSB9KTtcbiAgICAgIGNvbnN0IG5leHRMaWJJdGVtcyA9IGxpYnJhcnlJdGVtcy5zbGljZSgpO1xuICAgICAgbmV4dExpYkl0ZW1zLmZvckVhY2goKGxpYkl0ZW0pID0+IHtcbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXMuaW5jbHVkZXMobGliSXRlbS5pZCkpIHtcbiAgICAgICAgICBsaWJJdGVtLnN0YXR1cyA9IFwicHVibGlzaGVkXCI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbGlicmFyeS5zZXRMaWJyYXJ5KG5leHRMaWJJdGVtcyk7XG4gICAgfSxcbiAgICBbc2V0U2hvd1B1Ymxpc2hMaWJyYXJ5RGlhbG9nLCBzZXRQdWJsaXNoTGliU3VjY2Vzcywgc2VsZWN0ZWRJdGVtcywgbGlicmFyeV0sXG4gICk7XG5cbiAgaWYgKFxuICAgIGxpYnJhcnlJdGVtc0RhdGEuc3RhdHVzID09PSBcImxvYWRpbmdcIiAmJlxuICAgICFsaWJyYXJ5SXRlbXNEYXRhLmlzSW5pdGlhbGl6ZWRcbiAgKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxMaWJyYXJ5TWVudVdyYXBwZXIgcmVmPXtyZWZ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxheWVyLXVpX19saWJyYXJ5LW1lc3NhZ2VcIj5cbiAgICAgICAgICA8U3Bpbm5lciBzaXplPVwiMmVtXCIgLz5cbiAgICAgICAgICA8c3Bhbj57dChcImxhYmVscy5saWJyYXJ5TG9hZGluZ01lc3NhZ2VcIil9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvTGlicmFyeU1lbnVXcmFwcGVyPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxMaWJyYXJ5TWVudVdyYXBwZXIgcmVmPXtyZWZ9PlxuICAgICAge3Nob3dQdWJsaXNoTGlicmFyeURpYWxvZyAmJiAoXG4gICAgICAgIDxQdWJsaXNoTGlicmFyeVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dQdWJsaXNoTGlicmFyeURpYWxvZyhmYWxzZSl9XG4gICAgICAgICAgbGlicmFyeUl0ZW1zPXtnZXRTZWxlY3RlZEl0ZW1zKFxuICAgICAgICAgICAgbGlicmFyeUl0ZW1zRGF0YS5saWJyYXJ5SXRlbXMsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICl9XG4gICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgIG9uU3VjY2Vzcz17KGRhdGEpID0+XG4gICAgICAgICAgICBvblB1Ymxpc2hMaWJTdWNjZXNzKGRhdGEsIGxpYnJhcnlJdGVtc0RhdGEubGlicmFyeUl0ZW1zKVxuICAgICAgICAgIH1cbiAgICAgICAgICBvbkVycm9yPXsoZXJyb3IpID0+IHdpbmRvdy5hbGVydChlcnJvcil9XG4gICAgICAgICAgdXBkYXRlSXRlbXNJblN0b3JhZ2U9eygpID0+XG4gICAgICAgICAgICBsaWJyYXJ5LnNldExpYnJhcnkobGlicmFyeUl0ZW1zRGF0YS5saWJyYXJ5SXRlbXMpXG4gICAgICAgICAgfVxuICAgICAgICAgIG9uUmVtb3ZlPXsoaWQ6IHN0cmluZykgPT5cbiAgICAgICAgICAgIHNldFNlbGVjdGVkSXRlbXMoc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKF9pZCkgPT4gX2lkICE9PSBpZCkpXG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtwdWJsaXNoTGliU3VjY2VzcyAmJiByZW5kZXJQdWJsaXNoU3VjY2VzcygpfVxuICAgICAgPExpYnJhcnlNZW51SXRlbXNcbiAgICAgICAgaXNMb2FkaW5nPXtsaWJyYXJ5SXRlbXNEYXRhLnN0YXR1cyA9PT0gXCJsb2FkaW5nXCJ9XG4gICAgICAgIGxpYnJhcnlJdGVtcz17bGlicmFyeUl0ZW1zRGF0YS5saWJyYXJ5SXRlbXN9XG4gICAgICAgIG9uUmVtb3ZlRnJvbUxpYnJhcnk9eygpID0+XG4gICAgICAgICAgcmVtb3ZlRnJvbUxpYnJhcnkobGlicmFyeUl0ZW1zRGF0YS5saWJyYXJ5SXRlbXMpXG4gICAgICAgIH1cbiAgICAgICAgb25BZGRUb0xpYnJhcnk9eyhlbGVtZW50cykgPT5cbiAgICAgICAgICBhZGRUb0xpYnJhcnkoZWxlbWVudHMsIGxpYnJhcnlJdGVtc0RhdGEubGlicmFyeUl0ZW1zKVxuICAgICAgICB9XG4gICAgICAgIG9uSW5zZXJ0TGlicmFyeUl0ZW1zPXtvbkluc2VydExpYnJhcnlJdGVtc31cbiAgICAgICAgcGVuZGluZ0VsZW1lbnRzPXtwZW5kaW5nRWxlbWVudHN9XG4gICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICBsaWJyYXJ5UmV0dXJuVXJsPXtsaWJyYXJ5UmV0dXJuVXJsfVxuICAgICAgICBsaWJyYXJ5PXtsaWJyYXJ5fVxuICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgIGZpbGVzPXtmaWxlc31cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBzZWxlY3RlZEl0ZW1zPXtzZWxlY3RlZEl0ZW1zfVxuICAgICAgICBvblNlbGVjdEl0ZW1zPXsoaWRzKSA9PiBzZXRTZWxlY3RlZEl0ZW1zKGlkcyl9XG4gICAgICAgIG9uUHVibGlzaD17KCkgPT4gc2V0U2hvd1B1Ymxpc2hMaWJyYXJ5RGlhbG9nKHRydWUpfVxuICAgICAgICByZXNldExpYnJhcnk9e3Jlc2V0TGlicmFyeX1cbiAgICAgIC8+XG4gICAgPC9MaWJyYXJ5TWVudVdyYXBwZXI+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/LibraryMenu.tsx\n");
2407
2396
 
2408
2397
  /***/ }),
2409
2398
 
@@ -2458,7 +2447,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2458
2447
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2459
2448
 
2460
2449
  "use strict";
2461
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"MobileMenu\": () => (/* binding */ MobileMenu)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _FixedSideContainer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FixedSideContainer */ \"../../components/FixedSideContainer.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _HintViewer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./HintViewer */ \"../../components/HintViewer.tsx\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _CollabButton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./CollabButton */ \"../../components/CollabButton.tsx\");\n/* harmony import */ var _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../scene/scrollbars */ \"../../scene/scrollbars.ts\");\n/* harmony import */ var _LockButton__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./LockButton */ \"../../components/LockButton.tsx\");\n/* harmony import */ var _UserList__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./UserList */ \"../../components/UserList.tsx\");\n/* harmony import */ var _BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./BackgroundPickerAndDarkModeToggle */ \"../../components/BackgroundPickerAndDarkModeToggle.tsx\");\n/* harmony import */ var _LibraryButton__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./LibraryButton */ \"../../components/LibraryButton.tsx\");\n/* harmony import */ var _PenModeButton__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./PenModeButton */ \"../../components/PenModeButton.tsx\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst MobileMenu = ({ appState, elements, libraryMenu, actionManager, renderJSONExportDialog, renderImageExportDialog, setAppState, onCollabButtonClick, onLockToggle, onPenModeToggle, canvas, isCollaborating, renderCustomFooter, showThemeBtn, onImageAction, renderTopRightUI, renderStats, }) => {\n const renderToolbar = () => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_FixedSideContainer__WEBPACK_IMPORTED_MODULE_5__.FixedSideContainer, Object.assign({ side: \"top\", className: \"App-top-bar\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_10__.Section, Object.assign({ heading: \"shapes\" }, { children: (heading) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Col, Object.assign({ gap: 4, align: \"center\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Row, Object.assign({ gap: 1, className: \"App-toolbar-container\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 1, className: \"App-toolbar\" }, { children: [heading, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Row, Object.assign({ gap: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ShapesSwitcher, { appState: appState, canvas: canvas, activeTool: appState.activeTool, setAppState: setAppState, onImageAction: ({ pointerType }) => {\n onImageAction({\n insertOnCanvasDirectly: pointerType !== \"mouse\",\n });\n } }) }))] })), renderTopRightUI && renderTopRightUI(true, appState), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LockButton__WEBPACK_IMPORTED_MODULE_13__.LockButton, { checked: appState.activeTool.locked, onChange: onLockToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.lock\"), isMobile: true }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryButton__WEBPACK_IMPORTED_MODULE_16__.LibraryButton, { appState: appState, setAppState: setAppState, isMobile: true }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PenModeButton__WEBPACK_IMPORTED_MODULE_17__.PenModeButton, { checked: appState.penMode, onChange: onPenModeToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.penMode\"), isMobile: true, penDetected: appState.penDetected })] })), libraryMenu] }))) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HintViewer__WEBPACK_IMPORTED_MODULE_7__.HintViewer, { appState: appState, elements: elements, isMobile: true })] })));\n };\n const renderAppToolbar = () => {\n // Render eraser conditionally in mobile\n const showEraser = !appState.viewModeEnabled &&\n !appState.editingElement &&\n (0,_scene__WEBPACK_IMPORTED_MODULE_8__.getSelectedElements)(elements, appState).length === 0;\n if (appState.viewModeEnabled) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"App-toolbar-content\" }, { children: actionManager.renderAction(\"toggleCanvasMenu\") })));\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"App-toolbar-content\" }, { children: [actionManager.renderAction(\"toggleCanvasMenu\"), actionManager.renderAction(\"toggleEditMenu\"), actionManager.renderAction(\"undo\"), actionManager.renderAction(\"redo\"), showEraser && actionManager.renderAction(\"eraser\"), actionManager.renderAction(appState.multiElement ? \"finalize\" : \"duplicateSelection\"), actionManager.renderAction(\"deleteSelectedElements\")] })));\n };\n const renderCanvasActions = () => {\n if (appState.viewModeEnabled) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [renderJSONExportDialog(), renderImageExportDialog()] }));\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [actionManager.renderAction(\"clearCanvas\"), actionManager.renderAction(\"loadScene\"), renderJSONExportDialog(), renderImageExportDialog(), onCollabButtonClick && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_CollabButton__WEBPACK_IMPORTED_MODULE_11__[\"default\"], { isCollaborating: isCollaborating, collaboratorCount: appState.collaborators.size, onClick: onCollabButtonClick })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_15__.BackgroundPickerAndDarkModeToggle, { actionManager: actionManager, appState: appState, setAppState: setAppState, showThemeBtn: showThemeBtn })] }));\n };\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [!appState.viewModeEnabled && renderToolbar(), renderStats(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"App-bottom-bar\", style: {\n marginBottom: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__.SCROLLBAR_MARGIN * 2,\n marginLeft: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__.SCROLLBAR_MARGIN * 2,\n marginRight: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__.SCROLLBAR_MARGIN * 2,\n } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 0 }, { children: [appState.openMenu === \"canvas\" ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_10__.Section, Object.assign({ className: \"App-mobile-menu\", heading: \"canvasActions\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"panelColumn\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Col, Object.assign({ gap: 4 }, { children: [renderCanvasActions(), renderCustomFooter === null || renderCustomFooter === void 0 ? void 0 : renderCustomFooter(true, appState), appState.collaborators.size > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"labels.collaborators\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UserList__WEBPACK_IMPORTED_MODULE_14__.UserList, { mobile: true, collaborators: appState.collaborators, actionManager: actionManager })] }))] })) })) }))) : appState.openMenu === \"shape\" &&\n !appState.viewModeEnabled &&\n (0,_element__WEBPACK_IMPORTED_MODULE_4__.showSelectedShapeActions)(appState, elements) ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_10__.Section, Object.assign({ className: \"App-mobile-menu\", heading: \"selectedShapeActions\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.SelectedShapeActions, { appState: appState, elements: elements, renderAction: actionManager.renderAction, activeTool: appState.activeTool.type }) }))) : null, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"footer\", Object.assign({ className: \"App-toolbar\" }, { children: [renderAppToolbar(), appState.scrolledOutside &&\n !appState.openMenu &&\n !appState.isLibraryOpen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"scroll-back-to-content\", onClick: () => {\n setAppState(Object.assign({}, (0,_scene__WEBPACK_IMPORTED_MODULE_8__.calculateScrollCenter)(elements, appState, canvas)));\n } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"buttons.scrollBackToContent\") })))] }))] })) }))] }));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RSxDQUNYLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssT0FBTzs0QkFDL0IsQ0FBQyxRQUFRLENBQUMsZUFBZTs0QkFDekIsa0VBQXdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMvQyx1REFBQyw4Q0FBTyxrQkFBQyxTQUFTLEVBQUMsaUJBQWlCLEVBQUMsT0FBTyxFQUFDLHNCQUFzQixnQkFDakUsdURBQUMsMERBQW9CLElBQ25CLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFlBQVksRUFBRSxhQUFhLENBQUMsWUFBWSxFQUN4QyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQ3BDLElBQ00sQ0FDWCxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQ1Isa0ZBQVEsU0FBUyxFQUFDLGFBQWEsaUJBQzVCLGdCQUFnQixFQUFFLEVBQ2xCLFFBQVEsQ0FBQyxlQUFlO29DQUN2QixDQUFDLFFBQVEsQ0FBQyxRQUFRO29DQUNsQixDQUFDLFFBQVEsQ0FBQyxhQUFhLElBQUksQ0FDekIsaUZBQ0UsU0FBUyxFQUFDLHdCQUF3QixFQUNsQyxPQUFPLEVBQUUsR0FBRyxFQUFFO3dDQUNaLFdBQVcsbUJBQ04sNkRBQXFCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFDcEQsQ0FBQztvQ0FDTCxDQUFDLGdCQUVBLHdDQUFDLENBQUMsNkJBQTZCLENBQUMsSUFDMUIsQ0FDVixLQUNJLEtBQ0YsSUFDTCxJQUNMLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL01vYmlsZU1lbnUudHN4PzA4YzQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQXBwU3RhdGUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IEFjdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi4vYWN0aW9ucy9tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0IH0gZnJvbSBcIi4uL2kxOG5cIjtcbmltcG9ydCBTdGFjayBmcm9tIFwiLi9TdGFja1wiO1xuaW1wb3J0IHsgc2hvd1NlbGVjdGVkU2hhcGVBY3Rpb25zIH0gZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCB7IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVzXCI7XG5pbXBvcnQgeyBGaXhlZFNpZGVDb250YWluZXIgfSBmcm9tIFwiLi9GaXhlZFNpZGVDb250YWluZXJcIjtcbmltcG9ydCB7IElzbGFuZCB9IGZyb20gXCIuL0lzbGFuZFwiO1xuaW1wb3J0IHsgSGludFZpZXdlciB9IGZyb20gXCIuL0hpbnRWaWV3ZXJcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZVNjcm9sbENlbnRlciwgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gXCIuLi9zY2VuZVwiO1xuaW1wb3J0IHsgU2VsZWN0ZWRTaGFwZUFjdGlvbnMsIFNoYXBlc1N3aXRjaGVyIH0gZnJvbSBcIi4vQWN0aW9uc1wiO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gXCIuL1NlY3Rpb25cIjtcbmltcG9ydCBDb2xsYWJCdXR0b24gZnJvbSBcIi4vQ29sbGFiQnV0dG9uXCI7XG5pbXBvcnQgeyBTQ1JPTExCQVJfV0lEVEgsIFNDUk9MTEJBUl9NQVJHSU4gfSBmcm9tIFwiLi4vc2NlbmUvc2Nyb2xsYmFyc1wiO1xuaW1wb3J0IHsgTG9ja0J1dHRvbiB9IGZyb20gXCIuL0xvY2tCdXR0b25cIjtcbmltcG9ydCB7IFVzZXJMaXN0IH0gZnJvbSBcIi4vVXNlckxpc3RcIjtcbmltcG9ydCB7IEJhY2tncm91bmRQaWNrZXJBbmREYXJrTW9kZVRvZ2dsZSB9IGZyb20gXCIuL0JhY2tncm91bmRQaWNrZXJBbmREYXJrTW9kZVRvZ2dsZVwiO1xuaW1wb3J0IHsgTGlicmFyeUJ1dHRvbiB9IGZyb20gXCIuL0xpYnJhcnlCdXR0b25cIjtcbmltcG9ydCB7IFBlbk1vZGVCdXR0b24gfSBmcm9tIFwiLi9QZW5Nb2RlQnV0dG9uXCI7XG5cbnR5cGUgTW9iaWxlTWVudVByb3BzID0ge1xuICBhcHBTdGF0ZTogQXBwU3RhdGU7XG4gIGFjdGlvbk1hbmFnZXI6IEFjdGlvbk1hbmFnZXI7XG4gIHJlbmRlckpTT05FeHBvcnREaWFsb2c6ICgpID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgcmVuZGVySW1hZ2VFeHBvcnREaWFsb2c6ICgpID0+IFJlYWN0LlJlYWN0Tm9kZTtcbiAgc2V0QXBwU3RhdGU6IFJlYWN0LkNvbXBvbmVudDxhbnksIEFwcFN0YXRlPltcInNldFN0YXRlXCJdO1xuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W107XG4gIGxpYnJhcnlNZW51OiBKU1guRWxlbWVudCB8IG51bGw7XG4gIG9uQ29sbGFiQnV0dG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xuICBvbkxvY2tUb2dnbGU6ICgpID0+IHZvaWQ7XG4gIG9uUGVuTW9kZVRvZ2dsZTogKCkgPT4gdm9pZDtcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGw7XG4gIGlzQ29sbGFib3JhdGluZzogYm9vbGVhbjtcbiAgcmVuZGVyQ3VzdG9tRm9vdGVyPzogKFxuICAgIGlzTW9iaWxlOiBib29sZWFuLFxuICAgIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgKSA9PiBKU1guRWxlbWVudCB8IG51bGw7XG4gIHNob3dUaGVtZUJ0bjogYm9vbGVhbjtcbiAgb25JbWFnZUFjdGlvbjogKGRhdGE6IHsgaW5zZXJ0T25DYW52YXNEaXJlY3RseTogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICByZW5kZXJUb3BSaWdodFVJPzogKFxuICAgIGlzTW9iaWxlOiBib29sZWFuLFxuICAgIGFwcFN0YXRlOiBBcHBTdGF0ZSxcbiAgKSA9PiBKU1guRWxlbWVudCB8IG51bGw7XG4gIHJlbmRlclN0YXRzOiAoKSA9PiBKU1guRWxlbWVudCB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgTW9iaWxlTWVudSA9ICh7XG4gIGFwcFN0YXRlLFxuICBlbGVtZW50cyxcbiAgbGlicmFyeU1lbnUsXG4gIGFjdGlvbk1hbmFnZXIsXG4gIHJlbmRlckpTT05FeHBvcnREaWFsb2csXG4gIHJlbmRlckltYWdlRXhwb3J0RGlhbG9nLFxuICBzZXRBcHBTdGF0ZSxcbiAgb25Db2xsYWJCdXR0b25DbGljayxcbiAgb25Mb2NrVG9nZ2xlLFxuICBvblBlbk1vZGVUb2dnbGUsXG4gIGNhbnZhcyxcbiAgaXNDb2xsYWJvcmF0aW5nLFxuICByZW5kZXJDdXN0b21Gb290ZXIsXG4gIHNob3dUaGVtZUJ0bixcbiAgb25JbWFnZUFjdGlvbixcbiAgcmVuZGVyVG9wUmlnaHRVSSxcbiAgcmVuZGVyU3RhdHMsXG59OiBNb2JpbGVNZW51UHJvcHMpID0+IHtcbiAgY29uc3QgcmVuZGVyVG9vbGJhciA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPEZpeGVkU2lkZUNvbnRhaW5lciBzaWRlPVwidG9wXCIgY2xhc3NOYW1lPVwiQXBwLXRvcC1iYXJcIj5cbiAgICAgICAgPFNlY3Rpb24gaGVhZGluZz1cInNoYXBlc1wiPlxuICAgICAgICAgIHsoaGVhZGluZykgPT4gKFxuICAgICAgICAgICAgPFN0YWNrLkNvbCBnYXA9ezR9IGFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxTdGFjay5Sb3cgZ2FwPXsxfSBjbGFzc05hbWU9XCJBcHAtdG9vbGJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8SXNsYW5kIHBhZGRpbmc9ezF9IGNsYXNzTmFtZT1cIkFwcC10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgICB7aGVhZGluZ31cbiAgICAgICAgICAgICAgICAgIDxTdGFjay5Sb3cgZ2FwPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgPFNoYXBlc1N3aXRjaGVyXG4gICAgICAgICAgICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcz17Y2FudmFzfVxuICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVRvb2w9e2FwcFN0YXRlLmFjdGl2ZVRvb2x9XG4gICAgICAgICAgICAgICAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgIG9uSW1hZ2VBY3Rpb249eyh7IHBvaW50ZXJUeXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uSW1hZ2VBY3Rpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRPbkNhbnZhc0RpcmVjdGx5OiBwb2ludGVyVHlwZSAhPT0gXCJtb3VzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvU3RhY2suUm93PlxuICAgICAgICAgICAgICAgIDwvSXNsYW5kPlxuICAgICAgICAgICAgICAgIHtyZW5kZXJUb3BSaWdodFVJICYmIHJlbmRlclRvcFJpZ2h0VUkodHJ1ZSwgYXBwU3RhdGUpfVxuICAgICAgICAgICAgICAgIDxMb2NrQnV0dG9uXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXthcHBTdGF0ZS5hY3RpdmVUb29sLmxvY2tlZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkxvY2tUb2dnbGV9XG4gICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIubG9ja1wiKX1cbiAgICAgICAgICAgICAgICAgIGlzTW9iaWxlXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8TGlicmFyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICAgICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxQZW5Nb2RlQnV0dG9uXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXthcHBTdGF0ZS5wZW5Nb2RlfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uUGVuTW9kZVRvZ2dsZX1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXt0KFwidG9vbEJhci5wZW5Nb2RlXCIpfVxuICAgICAgICAgICAgICAgICAgaXNNb2JpbGVcbiAgICAgICAgICAgICAgICAgIHBlbkRldGVjdGVkPXthcHBTdGF0ZS5wZW5EZXRlY3RlZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICAgICAge2xpYnJhcnlNZW51fVxuICAgICAgICAgICAgPC9TdGFjay5Db2w+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICA8SGludFZpZXdlciBhcHBTdGF0ZT17YXBwU3RhdGV9IGVsZW1lbnRzPXtlbGVtZW50c30gaXNNb2JpbGU9e3RydWV9IC8+XG4gICAgICA8L0ZpeGVkU2lkZUNvbnRhaW5lcj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckFwcFRvb2xiYXIgPSAoKSA9PiB7XG4gICAgLy8gUmVuZGVyIGVyYXNlciBjb25kaXRpb25hbGx5IGluIG1vYmlsZVxuICAgIGNvbnN0IHNob3dFcmFzZXIgPVxuICAgICAgIWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJlxuICAgICAgIWFwcFN0YXRlLmVkaXRpbmdFbGVtZW50ICYmXG4gICAgICBnZXRTZWxlY3RlZEVsZW1lbnRzKGVsZW1lbnRzLCBhcHBTdGF0ZSkubGVuZ3RoID09PSAwO1xuXG4gICAgaWYgKGFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJBcHAtdG9vbGJhci1jb250ZW50XCI+XG4gICAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwidG9nZ2xlQ2FudmFzTWVudVwiKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIkFwcC10b29sYmFyLWNvbnRlbnRcIj5cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwidG9nZ2xlQ2FudmFzTWVudVwiKX1cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwidG9nZ2xlRWRpdE1lbnVcIil9XG5cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwidW5kb1wiKX1cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwicmVkb1wiKX1cbiAgICAgICAge3Nob3dFcmFzZXIgJiYgYWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJlcmFzZXJcIil9XG5cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFxuICAgICAgICAgIGFwcFN0YXRlLm11bHRpRWxlbWVudCA/IFwiZmluYWxpemVcIiA6IFwiZHVwbGljYXRlU2VsZWN0aW9uXCIsXG4gICAgICAgICl9XG4gICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImRlbGV0ZVNlbGVjdGVkRWxlbWVudHNcIil9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckNhbnZhc0FjdGlvbnMgPSAoKSA9PiB7XG4gICAgaWYgKGFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7cmVuZGVySlNPTkV4cG9ydERpYWxvZygpfVxuICAgICAgICAgIHtyZW5kZXJJbWFnZUV4cG9ydERpYWxvZygpfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJjbGVhckNhbnZhc1wiKX1cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwibG9hZFNjZW5lXCIpfVxuICAgICAgICB7cmVuZGVySlNPTkV4cG9ydERpYWxvZygpfVxuICAgICAgICB7cmVuZGVySW1hZ2VFeHBvcnREaWFsb2coKX1cbiAgICAgICAge29uQ29sbGFiQnV0dG9uQ2xpY2sgJiYgKFxuICAgICAgICAgIDxDb2xsYWJCdXR0b25cbiAgICAgICAgICAgIGlzQ29sbGFib3JhdGluZz17aXNDb2xsYWJvcmF0aW5nfVxuICAgICAgICAgICAgY29sbGFib3JhdG9yQ291bnQ9e2FwcFN0YXRlLmNvbGxhYm9yYXRvcnMuc2l6ZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e29uQ29sbGFiQnV0dG9uQ2xpY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge1xuICAgICAgICAgIDxCYWNrZ3JvdW5kUGlja2VyQW5kRGFya01vZGVUb2dnbGVcbiAgICAgICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgICBzZXRBcHBTdGF0ZT17c2V0QXBwU3RhdGV9XG4gICAgICAgICAgICBzaG93VGhlbWVCdG49e3Nob3dUaGVtZUJ0bn1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8Lz5cbiAgICApO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7IWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJiByZW5kZXJUb29sYmFyKCl9XG4gICAgICB7cmVuZGVyU3RhdHMoKX1cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiQXBwLWJvdHRvbS1iYXJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIG1hcmdpbkJvdHRvbTogU0NST0xMQkFSX1dJRFRIICsgU0NST0xMQkFSX01BUkdJTiAqIDIsXG4gICAgICAgICAgbWFyZ2luTGVmdDogU0NST0xMQkFSX1dJRFRIICsgU0NST0xMQkFSX01BUkdJTiAqIDIsXG4gICAgICAgICAgbWFyZ2luUmlnaHQ6IFNDUk9MTEJBUl9XSURUSCArIFNDUk9MTEJBUl9NQVJHSU4gKiAyLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8SXNsYW5kIHBhZGRpbmc9ezB9PlxuICAgICAgICAgIHthcHBTdGF0ZS5vcGVuTWVudSA9PT0gXCJjYW52YXNcIiA/IChcbiAgICAgICAgICAgIDxTZWN0aW9uIGNsYXNzTmFtZT1cIkFwcC1tb2JpbGUtbWVudVwiIGhlYWRpbmc9XCJjYW52YXNBY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWxDb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8U3RhY2suQ29sIGdhcD17NH0+XG4gICAgICAgICAgICAgICAgICB7cmVuZGVyQ2FudmFzQWN0aW9ucygpfVxuICAgICAgICAgICAgICAgICAge3JlbmRlckN1c3RvbUZvb3Rlcj8uKHRydWUsIGFwcFN0YXRlKX1cbiAgICAgICAgICAgICAgICAgIHthcHBTdGF0ZS5jb2xsYWJvcmF0b3JzLnNpemUgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgIDxsZWdlbmQ+e3QoXCJsYWJlbHMuY29sbGFib3JhdG9yc1wiKX08L2xlZ2VuZD5cbiAgICAgICAgICAgICAgICAgICAgICA8VXNlckxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vYmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFib3JhdG9ycz17YXBwU3RhdGUuY29sbGFib3JhdG9yc31cbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbk1hbmFnZXI9e2FjdGlvbk1hbmFnZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9TdGFjay5Db2w+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICkgOiBhcHBTdGF0ZS5vcGVuTWVudSA9PT0gXCJzaGFwZVwiICYmXG4gICAgICAgICAgICAhYXBwU3RhdGUudmlld01vZGVFbmFibGVkICYmXG4gICAgICAgICAgICBzaG93U2VsZWN0ZWRTaGFwZUFjdGlvbnMoYXBwU3RhdGUsIGVsZW1lbnRzKSA/IChcbiAgICAgICAgICAgIDxTZWN0aW9uIGNsYXNzTmFtZT1cIkFwcC1tb2JpbGUtbWVudVwiIGhlYWRpbmc9XCJzZWxlY3RlZFNoYXBlQWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8U2VsZWN0ZWRTaGFwZUFjdGlvbnNcbiAgICAgICAgICAgICAgICBhcHBTdGF0ZT17YXBwU3RhdGV9XG4gICAgICAgICAgICAgICAgZWxlbWVudHM9e2VsZW1lbnRzfVxuICAgICAgICAgICAgICAgIHJlbmRlckFjdGlvbj17YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb259XG4gICAgICAgICAgICAgICAgYWN0aXZlVG9vbD17YXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxmb290ZXIgY2xhc3NOYW1lPVwiQXBwLXRvb2xiYXJcIj5cbiAgICAgICAgICAgIHtyZW5kZXJBcHBUb29sYmFyKCl9XG4gICAgICAgICAgICB7YXBwU3RhdGUuc2Nyb2xsZWRPdXRzaWRlICYmXG4gICAgICAgICAgICAgICFhcHBTdGF0ZS5vcGVuTWVudSAmJlxuICAgICAgICAgICAgICAhYXBwU3RhdGUuaXNMaWJyYXJ5T3BlbiAmJiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic2Nyb2xsLWJhY2stdG8tY29udGVudFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldEFwcFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5jYWxjdWxhdGVTY3JvbGxDZW50ZXIoZWxlbWVudHMsIGFwcFN0YXRlLCBjYW52YXMpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3QoXCJidXR0b25zLnNjcm9sbEJhY2tUb0NvbnRlbnRcIil9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9mb290ZXI+XG4gICAgICAgIDwvSXNsYW5kPlxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../components/MobileMenu.tsx\n");
2450
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"MobileMenu\": () => (/* binding */ MobileMenu)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _Stack__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Stack */ \"../../components/Stack.tsx\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../element */ \"../../element/index.ts\");\n/* harmony import */ var _FixedSideContainer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FixedSideContainer */ \"../../components/FixedSideContainer.tsx\");\n/* harmony import */ var _Island__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Island */ \"../../components/Island.tsx\");\n/* harmony import */ var _HintViewer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./HintViewer */ \"../../components/HintViewer.tsx\");\n/* harmony import */ var _scene__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../scene */ \"../../scene/index.ts\");\n/* harmony import */ var _Actions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Actions */ \"../../components/Actions.tsx\");\n/* harmony import */ var _Section__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Section */ \"../../components/Section.tsx\");\n/* harmony import */ var _CollabButton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./CollabButton */ \"../../components/CollabButton.tsx\");\n/* harmony import */ var _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../scene/scrollbars */ \"../../scene/scrollbars.ts\");\n/* harmony import */ var _LockButton__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./LockButton */ \"../../components/LockButton.tsx\");\n/* harmony import */ var _UserList__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./UserList */ \"../../components/UserList.tsx\");\n/* harmony import */ var _BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./BackgroundPickerAndDarkModeToggle */ \"../../components/BackgroundPickerAndDarkModeToggle.tsx\");\n/* harmony import */ var _LibraryButton__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./LibraryButton */ \"../../components/LibraryButton.tsx\");\n/* harmony import */ var _PenModeButton__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./PenModeButton */ \"../../components/PenModeButton.tsx\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst MobileMenu = ({ appState, elements, libraryMenu, actionManager, renderJSONExportDialog, renderImageExportDialog, setAppState, onCollabButtonClick, onLockToggle, onPenModeToggle, canvas, isCollaborating, renderCustomFooter, showThemeBtn, onImageAction, renderTopRightUI, renderStats, }) => {\n const renderToolbar = () => {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_FixedSideContainer__WEBPACK_IMPORTED_MODULE_5__.FixedSideContainer, Object.assign({ side: \"top\", className: \"App-top-bar\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_10__.Section, Object.assign({ heading: \"shapes\" }, { children: (heading) => ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Col, Object.assign({ gap: 4, align: \"center\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Row, Object.assign({ gap: 1, className: \"App-toolbar-container\" }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 1, className: \"App-toolbar\" }, { children: [heading, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Row, Object.assign({ gap: 1 }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.ShapesSwitcher, { appState: appState, canvas: canvas, activeTool: appState.activeTool, setAppState: setAppState, onImageAction: ({ pointerType }) => {\n onImageAction({\n insertOnCanvasDirectly: pointerType !== \"mouse\",\n });\n } }) }))] })), renderTopRightUI && renderTopRightUI(true, appState), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LockButton__WEBPACK_IMPORTED_MODULE_13__.LockButton, { checked: appState.activeTool.locked, onChange: onLockToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.lock\"), isMobile: true }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_LibraryButton__WEBPACK_IMPORTED_MODULE_16__.LibraryButton, { appState: appState, setAppState: setAppState, isMobile: true }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_PenModeButton__WEBPACK_IMPORTED_MODULE_17__.PenModeButton, { checked: appState.penMode, onChange: onPenModeToggle, title: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"toolBar.penMode\"), isMobile: true, penDetected: appState.penDetected })] })), libraryMenu] }))) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_HintViewer__WEBPACK_IMPORTED_MODULE_7__.HintViewer, { appState: appState, elements: elements, isMobile: true })] })));\n };\n const renderAppToolbar = () => {\n // Render eraser conditionally in mobile\n const showEraser = !appState.viewModeEnabled &&\n !appState.editingElement &&\n (0,_scene__WEBPACK_IMPORTED_MODULE_8__.getSelectedElements)(elements, appState).length === 0;\n if (appState.viewModeEnabled) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"App-toolbar-content\" }, { children: actionManager.renderAction(\"toggleCanvasMenu\") })));\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: \"App-toolbar-content\" }, { children: [actionManager.renderAction(\"toggleCanvasMenu\"), actionManager.renderAction(\"toggleEditMenu\"), actionManager.renderAction(\"undo\"), actionManager.renderAction(\"redo\"), showEraser && actionManager.renderAction(\"eraser\"), actionManager.renderAction(appState.multiElement ? \"finalize\" : \"duplicateSelection\"), actionManager.renderAction(\"deleteSelectedElements\")] })));\n };\n const renderCanvasActions = () => {\n if (appState.viewModeEnabled) {\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [renderJSONExportDialog(), renderImageExportDialog()] }));\n }\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [actionManager.renderAction(\"clearCanvas\"), actionManager.renderAction(\"loadScene\"), renderJSONExportDialog(), renderImageExportDialog(), onCollabButtonClick && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_CollabButton__WEBPACK_IMPORTED_MODULE_11__[\"default\"], { isCollaborating: isCollaborating, collaboratorCount: appState.collaborators.size, onClick: onCollabButtonClick })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_BackgroundPickerAndDarkModeToggle__WEBPACK_IMPORTED_MODULE_15__.BackgroundPickerAndDarkModeToggle, { actionManager: actionManager, appState: appState, setAppState: setAppState, showThemeBtn: showThemeBtn })] }));\n };\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [!appState.viewModeEnabled && renderToolbar(), renderStats(), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"App-bottom-bar\", style: {\n marginBottom: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__.SCROLLBAR_MARGIN * 2,\n marginLeft: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__.SCROLLBAR_MARGIN * 2,\n marginRight: _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__.SCROLLBAR_WIDTH + _scene_scrollbars__WEBPACK_IMPORTED_MODULE_12__.SCROLLBAR_MARGIN * 2,\n } }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Island__WEBPACK_IMPORTED_MODULE_6__.Island, Object.assign({ padding: 0 }, { children: [appState.openMenu === \"canvas\" ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_10__.Section, Object.assign({ className: \"App-mobile-menu\", heading: \"canvasActions\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"panelColumn\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_Stack__WEBPACK_IMPORTED_MODULE_3__[\"default\"].Col, Object.assign({ gap: 4 }, { children: [renderCanvasActions(), renderCustomFooter === null || renderCustomFooter === void 0 ? void 0 : renderCustomFooter(true, appState), appState.collaborators.size > 0 && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"fieldset\", { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"legend\", { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"labels.collaborators\") }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_UserList__WEBPACK_IMPORTED_MODULE_14__.UserList, { mobile: true, collaborators: appState.collaborators, actionManager: actionManager })] }))] })) })) }))) : appState.openMenu === \"shape\" &&\n !appState.viewModeEnabled &&\n (0,_element__WEBPACK_IMPORTED_MODULE_4__.showSelectedShapeActions)(appState, elements) ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Section__WEBPACK_IMPORTED_MODULE_10__.Section, Object.assign({ className: \"App-mobile-menu\", heading: \"selectedShapeActions\" }, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_Actions__WEBPACK_IMPORTED_MODULE_9__.SelectedShapeActions, { appState: appState, elements: elements, renderAction: actionManager.renderAction, activeTool: appState.activeTool.type }) }))) : null, (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"footer\", Object.assign({ className: \"App-toolbar\" }, { children: [renderAppToolbar(), appState.scrolledOutside &&\n !appState.openMenu &&\n !appState.isLibraryOpen && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"button\", Object.assign({ className: \"scroll-back-to-content\", onClick: () => {\n setAppState(Object.assign({}, (0,_scene__WEBPACK_IMPORTED_MODULE_8__.calculateScrollCenter)(elements, appState, canvas)));\n } }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(\"buttons.scrollBackToContent\") })))] }))] })) }))] }));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNFLENBQ1gsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxPQUFPOzRCQUMvQixDQUFDLFFBQVEsQ0FBQyxlQUFlOzRCQUN6QixrRUFBd0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQy9DLHVEQUFDLDhDQUFPLGtCQUFDLFNBQVMsRUFBQyxpQkFBaUIsRUFBQyxPQUFPLEVBQUMsc0JBQXNCLGdCQUNqRSx1REFBQywwREFBb0IsSUFDbkIsUUFBUSxFQUFFLFFBQVEsRUFDbEIsUUFBUSxFQUFFLFFBQVEsRUFDbEIsWUFBWSxFQUFFLGFBQWEsQ0FBQyxZQUFZLEVBQ3hDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksR0FDcEMsSUFDTSxDQUNYLENBQUMsQ0FBQyxDQUFDLElBQUksRUFDUixrRkFBUSxTQUFTLEVBQUMsYUFBYSxpQkFDNUIsZ0JBQWdCLEVBQUUsRUFDbEIsUUFBUSxDQUFDLGVBQWU7b0NBQ3ZCLENBQUMsUUFBUSxDQUFDLFFBQVE7b0NBQ2xCLENBQUMsUUFBUSxDQUFDLGFBQWEsSUFBSSxDQUN6QixpRkFDRSxTQUFTLEVBQUMsd0JBQXdCLEVBQ2xDLE9BQU8sRUFBRSxHQUFHLEVBQUU7d0NBQ1osV0FBVyxtQkFDTiw2REFBcUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUNwRCxDQUFDO29DQUNMLENBQUMsZ0JBRUEsd0NBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxJQUMxQixDQUNWLEtBQ0ksS0FDRixJQUNMLElBQ0wsQ0FDSixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2NvbXBvbmVudHMvTW9iaWxlTWVudS50c3g/MDhjNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBcHBTdGF0ZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuLi9hY3Rpb25zL21hbmFnZXJcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IFN0YWNrIGZyb20gXCIuL1N0YWNrXCI7XG5pbXBvcnQgeyBzaG93U2VsZWN0ZWRTaGFwZUFjdGlvbnMgfSBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IEZpeGVkU2lkZUNvbnRhaW5lciB9IGZyb20gXCIuL0ZpeGVkU2lkZUNvbnRhaW5lclwiO1xuaW1wb3J0IHsgSXNsYW5kIH0gZnJvbSBcIi4vSXNsYW5kXCI7XG5pbXBvcnQgeyBIaW50Vmlld2VyIH0gZnJvbSBcIi4vSGludFZpZXdlclwiO1xuaW1wb3J0IHsgY2FsY3VsYXRlU2Nyb2xsQ2VudGVyLCBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSBcIi4uL3NjZW5lXCI7XG5pbXBvcnQgeyBTZWxlY3RlZFNoYXBlQWN0aW9ucywgU2hhcGVzU3dpdGNoZXIgfSBmcm9tIFwiLi9BY3Rpb25zXCI7XG5pbXBvcnQgeyBTZWN0aW9uIH0gZnJvbSBcIi4vU2VjdGlvblwiO1xuaW1wb3J0IENvbGxhYkJ1dHRvbiBmcm9tIFwiLi9Db2xsYWJCdXR0b25cIjtcbmltcG9ydCB7IFNDUk9MTEJBUl9XSURUSCwgU0NST0xMQkFSX01BUkdJTiB9IGZyb20gXCIuLi9zY2VuZS9zY3JvbGxiYXJzXCI7XG5pbXBvcnQgeyBMb2NrQnV0dG9uIH0gZnJvbSBcIi4vTG9ja0J1dHRvblwiO1xuaW1wb3J0IHsgVXNlckxpc3QgfSBmcm9tIFwiLi9Vc2VyTGlzdFwiO1xuaW1wb3J0IHsgQmFja2dyb3VuZFBpY2tlckFuZERhcmtNb2RlVG9nZ2xlIH0gZnJvbSBcIi4vQmFja2dyb3VuZFBpY2tlckFuZERhcmtNb2RlVG9nZ2xlXCI7XG5pbXBvcnQgeyBMaWJyYXJ5QnV0dG9uIH0gZnJvbSBcIi4vTGlicmFyeUJ1dHRvblwiO1xuaW1wb3J0IHsgUGVuTW9kZUJ1dHRvbiB9IGZyb20gXCIuL1Blbk1vZGVCdXR0b25cIjtcblxudHlwZSBNb2JpbGVNZW51UHJvcHMgPSB7XG4gIGFwcFN0YXRlOiBBcHBTdGF0ZTtcbiAgYWN0aW9uTWFuYWdlcjogQWN0aW9uTWFuYWdlcjtcbiAgcmVuZGVySlNPTkV4cG9ydERpYWxvZzogKCkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICByZW5kZXJJbWFnZUV4cG9ydERpYWxvZzogKCkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICBzZXRBcHBTdGF0ZTogUmVhY3QuQ29tcG9uZW50PGFueSwgQXBwU3RhdGU+W1wic2V0U3RhdGVcIl07XG4gIGVsZW1lbnRzOiByZWFkb25seSBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnRbXTtcbiAgbGlicmFyeU1lbnU6IEpTWC5FbGVtZW50IHwgbnVsbDtcbiAgb25Db2xsYWJCdXR0b25DbGljaz86ICgpID0+IHZvaWQ7XG4gIG9uTG9ja1RvZ2dsZTogKCkgPT4gdm9pZDtcbiAgb25QZW5Nb2RlVG9nZ2xlOiAoKSA9PiB2b2lkO1xuICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbDtcbiAgaXNDb2xsYWJvcmF0aW5nOiBib29sZWFuO1xuICByZW5kZXJDdXN0b21Gb290ZXI/OiAoXG4gICAgaXNNb2JpbGU6IGJvb2xlYW4sXG4gICAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuICApID0+IEpTWC5FbGVtZW50IHwgbnVsbDtcbiAgc2hvd1RoZW1lQnRuOiBib29sZWFuO1xuICBvbkltYWdlQWN0aW9uOiAoZGF0YTogeyBpbnNlcnRPbkNhbnZhc0RpcmVjdGx5OiBib29sZWFuIH0pID0+IHZvaWQ7XG4gIHJlbmRlclRvcFJpZ2h0VUk/OiAoXG4gICAgaXNNb2JpbGU6IGJvb2xlYW4sXG4gICAgYXBwU3RhdGU6IEFwcFN0YXRlLFxuICApID0+IEpTWC5FbGVtZW50IHwgbnVsbDtcbiAgcmVuZGVyU3RhdHM6ICgpID0+IEpTWC5FbGVtZW50IHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBNb2JpbGVNZW51ID0gKHtcbiAgYXBwU3RhdGUsXG4gIGVsZW1lbnRzLFxuICBsaWJyYXJ5TWVudSxcbiAgYWN0aW9uTWFuYWdlcixcbiAgcmVuZGVySlNPTkV4cG9ydERpYWxvZyxcbiAgcmVuZGVySW1hZ2VFeHBvcnREaWFsb2csXG4gIHNldEFwcFN0YXRlLFxuICBvbkNvbGxhYkJ1dHRvbkNsaWNrLFxuICBvbkxvY2tUb2dnbGUsXG4gIG9uUGVuTW9kZVRvZ2dsZSxcbiAgY2FudmFzLFxuICBpc0NvbGxhYm9yYXRpbmcsXG4gIHJlbmRlckN1c3RvbUZvb3RlcixcbiAgc2hvd1RoZW1lQnRuLFxuICBvbkltYWdlQWN0aW9uLFxuICByZW5kZXJUb3BSaWdodFVJLFxuICByZW5kZXJTdGF0cyxcbn06IE1vYmlsZU1lbnVQcm9wcykgPT4ge1xuICBjb25zdCByZW5kZXJUb29sYmFyID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8Rml4ZWRTaWRlQ29udGFpbmVyIHNpZGU9XCJ0b3BcIiBjbGFzc05hbWU9XCJBcHAtdG9wLWJhclwiPlxuICAgICAgICA8U2VjdGlvbiBoZWFkaW5nPVwic2hhcGVzXCI+XG4gICAgICAgICAgeyhoZWFkaW5nOiBSZWFjdC5SZWFjdE5vZGUpID0+IChcbiAgICAgICAgICAgIDxTdGFjay5Db2wgZ2FwPXs0fSBhbGlnbj1cImNlbnRlclwiPlxuICAgICAgICAgICAgICA8U3RhY2suUm93IGdhcD17MX0gY2xhc3NOYW1lPVwiQXBwLXRvb2xiYXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPElzbGFuZCBwYWRkaW5nPXsxfSBjbGFzc05hbWU9XCJBcHAtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAge2hlYWRpbmd9XG4gICAgICAgICAgICAgICAgICA8U3RhY2suUm93IGdhcD17MX0+XG4gICAgICAgICAgICAgICAgICAgIDxTaGFwZXNTd2l0Y2hlclxuICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBjYW52YXM9e2NhbnZhc31cbiAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVUb29sPXthcHBTdGF0ZS5hY3RpdmVUb29sfVxuICAgICAgICAgICAgICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkltYWdlQWN0aW9uPXsoeyBwb2ludGVyVHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkltYWdlQWN0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T25DYW52YXNEaXJlY3RseTogcG9pbnRlclR5cGUgIT09IFwibW91c2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1N0YWNrLlJvdz5cbiAgICAgICAgICAgICAgICA8L0lzbGFuZD5cbiAgICAgICAgICAgICAgICB7cmVuZGVyVG9wUmlnaHRVSSAmJiByZW5kZXJUb3BSaWdodFVJKHRydWUsIGFwcFN0YXRlKX1cbiAgICAgICAgICAgICAgICA8TG9ja0J1dHRvblxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17YXBwU3RhdGUuYWN0aXZlVG9vbC5sb2NrZWR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25Mb2NrVG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgdGl0bGU9e3QoXCJ0b29sQmFyLmxvY2tcIil9XG4gICAgICAgICAgICAgICAgICBpc01vYmlsZVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPExpYnJhcnlCdXR0b25cbiAgICAgICAgICAgICAgICAgIGFwcFN0YXRlPXthcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgIHNldEFwcFN0YXRlPXtzZXRBcHBTdGF0ZX1cbiAgICAgICAgICAgICAgICAgIGlzTW9iaWxlXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8UGVuTW9kZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17YXBwU3RhdGUucGVuTW9kZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvblBlbk1vZGVUb2dnbGV9XG4gICAgICAgICAgICAgICAgICB0aXRsZT17dChcInRvb2xCYXIucGVuTW9kZVwiKX1cbiAgICAgICAgICAgICAgICAgIGlzTW9iaWxlXG4gICAgICAgICAgICAgICAgICBwZW5EZXRlY3RlZD17YXBwU3RhdGUucGVuRGV0ZWN0ZWR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9TdGFjay5Sb3c+XG4gICAgICAgICAgICAgIHtsaWJyYXJ5TWVudX1cbiAgICAgICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgPEhpbnRWaWV3ZXIgYXBwU3RhdGU9e2FwcFN0YXRlfSBlbGVtZW50cz17ZWxlbWVudHN9IGlzTW9iaWxlPXt0cnVlfSAvPlxuICAgICAgPC9GaXhlZFNpZGVDb250YWluZXI+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJBcHBUb29sYmFyID0gKCkgPT4ge1xuICAgIC8vIFJlbmRlciBlcmFzZXIgY29uZGl0aW9uYWxseSBpbiBtb2JpbGVcbiAgICBjb25zdCBzaG93RXJhc2VyID1cbiAgICAgICFhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQgJiZcbiAgICAgICFhcHBTdGF0ZS5lZGl0aW5nRWxlbWVudCAmJlxuICAgICAgZ2V0U2VsZWN0ZWRFbGVtZW50cyhlbGVtZW50cywgYXBwU3RhdGUpLmxlbmd0aCA9PT0gMDtcblxuICAgIGlmIChhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiQXBwLXRvb2xiYXItY29udGVudFwiPlxuICAgICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInRvZ2dsZUNhbnZhc01lbnVcIil9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJBcHAtdG9vbGJhci1jb250ZW50XCI+XG4gICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInRvZ2dsZUNhbnZhc01lbnVcIil9XG4gICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInRvZ2dsZUVkaXRNZW51XCIpfVxuXG4gICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInVuZG9cIil9XG4gICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcInJlZG9cIil9XG4gICAgICAgIHtzaG93RXJhc2VyICYmIGFjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiZXJhc2VyXCIpfVxuXG4gICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcbiAgICAgICAgICBhcHBTdGF0ZS5tdWx0aUVsZW1lbnQgPyBcImZpbmFsaXplXCIgOiBcImR1cGxpY2F0ZVNlbGVjdGlvblwiLFxuICAgICAgICApfVxuICAgICAgICB7YWN0aW9uTWFuYWdlci5yZW5kZXJBY3Rpb24oXCJkZWxldGVTZWxlY3RlZEVsZW1lbnRzXCIpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJDYW52YXNBY3Rpb25zID0gKCkgPT4ge1xuICAgIGlmIChhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge3JlbmRlckpTT05FeHBvcnREaWFsb2coKX1cbiAgICAgICAgICB7cmVuZGVySW1hZ2VFeHBvcnREaWFsb2coKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9uKFwiY2xlYXJDYW52YXNcIil9XG4gICAgICAgIHthY3Rpb25NYW5hZ2VyLnJlbmRlckFjdGlvbihcImxvYWRTY2VuZVwiKX1cbiAgICAgICAge3JlbmRlckpTT05FeHBvcnREaWFsb2coKX1cbiAgICAgICAge3JlbmRlckltYWdlRXhwb3J0RGlhbG9nKCl9XG4gICAgICAgIHtvbkNvbGxhYkJ1dHRvbkNsaWNrICYmIChcbiAgICAgICAgICA8Q29sbGFiQnV0dG9uXG4gICAgICAgICAgICBpc0NvbGxhYm9yYXRpbmc9e2lzQ29sbGFib3JhdGluZ31cbiAgICAgICAgICAgIGNvbGxhYm9yYXRvckNvdW50PXthcHBTdGF0ZS5jb2xsYWJvcmF0b3JzLnNpemV9XG4gICAgICAgICAgICBvbkNsaWNrPXtvbkNvbGxhYkJ1dHRvbkNsaWNrfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtcbiAgICAgICAgICA8QmFja2dyb3VuZFBpY2tlckFuZERhcmtNb2RlVG9nZ2xlXG4gICAgICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgc2V0QXBwU3RhdGU9e3NldEFwcFN0YXRlfVxuICAgICAgICAgICAgc2hvd1RoZW1lQnRuPXtzaG93VGhlbWVCdG59XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfTtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgeyFhcHBTdGF0ZS52aWV3TW9kZUVuYWJsZWQgJiYgcmVuZGVyVG9vbGJhcigpfVxuICAgICAge3JlbmRlclN0YXRzKCl9XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIkFwcC1ib3R0b20tYmFyXCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBtYXJnaW5Cb3R0b206IFNDUk9MTEJBUl9XSURUSCArIFNDUk9MTEJBUl9NQVJHSU4gKiAyLFxuICAgICAgICAgIG1hcmdpbkxlZnQ6IFNDUk9MTEJBUl9XSURUSCArIFNDUk9MTEJBUl9NQVJHSU4gKiAyLFxuICAgICAgICAgIG1hcmdpblJpZ2h0OiBTQ1JPTExCQVJfV0lEVEggKyBTQ1JPTExCQVJfTUFSR0lOICogMixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPElzbGFuZCBwYWRkaW5nPXswfT5cbiAgICAgICAgICB7YXBwU3RhdGUub3Blbk1lbnUgPT09IFwiY2FudmFzXCIgPyAoXG4gICAgICAgICAgICA8U2VjdGlvbiBjbGFzc05hbWU9XCJBcHAtbW9iaWxlLW1lbnVcIiBoZWFkaW5nPVwiY2FudmFzQWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsQ29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPFN0YWNrLkNvbCBnYXA9ezR9PlxuICAgICAgICAgICAgICAgICAge3JlbmRlckNhbnZhc0FjdGlvbnMoKX1cbiAgICAgICAgICAgICAgICAgIHtyZW5kZXJDdXN0b21Gb290ZXI/Lih0cnVlLCBhcHBTdGF0ZSl9XG4gICAgICAgICAgICAgICAgICB7YXBwU3RhdGUuY29sbGFib3JhdG9ycy5zaXplID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kPnt0KFwibGFiZWxzLmNvbGxhYm9yYXRvcnNcIil9PC9sZWdlbmQ+XG4gICAgICAgICAgICAgICAgICAgICAgPFVzZXJMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2JpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhYm9yYXRvcnM9e2FwcFN0YXRlLmNvbGxhYm9yYXRvcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25NYW5hZ2VyPXthY3Rpb25NYW5hZ2VyfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvU3RhY2suQ29sPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICApIDogYXBwU3RhdGUub3Blbk1lbnUgPT09IFwic2hhcGVcIiAmJlxuICAgICAgICAgICAgIWFwcFN0YXRlLnZpZXdNb2RlRW5hYmxlZCAmJlxuICAgICAgICAgICAgc2hvd1NlbGVjdGVkU2hhcGVBY3Rpb25zKGFwcFN0YXRlLCBlbGVtZW50cykgPyAoXG4gICAgICAgICAgICA8U2VjdGlvbiBjbGFzc05hbWU9XCJBcHAtbW9iaWxlLW1lbnVcIiBoZWFkaW5nPVwic2VsZWN0ZWRTaGFwZUFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPFNlbGVjdGVkU2hhcGVBY3Rpb25zXG4gICAgICAgICAgICAgICAgYXBwU3RhdGU9e2FwcFN0YXRlfVxuICAgICAgICAgICAgICAgIGVsZW1lbnRzPXtlbGVtZW50c31cbiAgICAgICAgICAgICAgICByZW5kZXJBY3Rpb249e2FjdGlvbk1hbmFnZXIucmVuZGVyQWN0aW9ufVxuICAgICAgICAgICAgICAgIGFjdGl2ZVRvb2w9e2FwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8Zm9vdGVyIGNsYXNzTmFtZT1cIkFwcC10b29sYmFyXCI+XG4gICAgICAgICAgICB7cmVuZGVyQXBwVG9vbGJhcigpfVxuICAgICAgICAgICAge2FwcFN0YXRlLnNjcm9sbGVkT3V0c2lkZSAmJlxuICAgICAgICAgICAgICAhYXBwU3RhdGUub3Blbk1lbnUgJiZcbiAgICAgICAgICAgICAgIWFwcFN0YXRlLmlzTGlicmFyeU9wZW4gJiYgKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNjcm9sbC1iYWNrLXRvLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRBcHBTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgLi4uY2FsY3VsYXRlU2Nyb2xsQ2VudGVyKGVsZW1lbnRzLCBhcHBTdGF0ZSwgY2FudmFzKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt0KFwiYnV0dG9ucy5zY3JvbGxCYWNrVG9Db250ZW50XCIpfVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgIDwvZm9vdGVyPlxuICAgICAgICA8L0lzbGFuZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/MobileMenu.tsx\n");
2462
2451
 
2463
2452
  /***/ }),
2464
2453
 
@@ -2469,7 +2458,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2469
2458
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2470
2459
 
2471
2460
  "use strict";
2472
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Modal\": () => (/* binding */ Modal)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _Modal_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Modal.scss */ \"../../components/Modal.scss\");\n/* harmony import */ var _Modal_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_Modal_scss__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n\n\n\n\n\n\n\n\nconst Modal = (props) => {\n const { theme = _constants__WEBPACK_IMPORTED_MODULE_7__.THEME.LIGHT, closeOnClickOutside = true } = props;\n const modalRoot = useBodyRoot(theme);\n if (!modalRoot) {\n return null;\n }\n const handleKeydown = (event) => {\n if (event.key === _keys__WEBPACK_IMPORTED_MODULE_5__.KEYS.ESCAPE) {\n event.nativeEvent.stopImmediatePropagation();\n event.stopPropagation();\n props.onCloseRequest();\n }\n };\n return (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.createPortal)((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(\"Modal\", props.className), role: \"dialog\", \"aria-modal\": \"true\", onKeyDown: handleKeydown, \"aria-labelledby\": props.labelledBy }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { className: \"Modal__background\", onClick: closeOnClickOutside ? props.onCloseRequest : undefined }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"Modal__content\", style: { \"--max-width\": `${props.maxWidth}px` }, tabIndex: 0 }, { children: props.children }))] })), modalRoot);\n};\nconst useBodyRoot = (theme) => {\n const [div, setDiv] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(null);\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_6__.useDevice)();\n const isMobileRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(device.isMobile);\n isMobileRef.current = device.isMobile;\n const { container: excalidrawContainer } = (0,_App__WEBPACK_IMPORTED_MODULE_6__.useExcalidrawContainer)();\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useLayoutEffect)(() => {\n if (div) {\n div.classList.toggle(\"excalidraw--mobile\", device.isMobile);\n }\n }, [div, device.isMobile]);\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useLayoutEffect)(() => {\n const isDarkTheme = !!(excalidrawContainer === null || excalidrawContainer === void 0 ? void 0 : excalidrawContainer.classList.contains(\"theme--dark\")) ||\n theme === \"dark\";\n const div = document.createElement(\"div\");\n div.classList.add(\"excalidraw\", \"excalidraw-modal-container\");\n div.classList.toggle(\"excalidraw--mobile\", isMobileRef.current);\n if (isDarkTheme) {\n div.classList.add(\"theme--dark\");\n div.classList.add(\"theme--dark-background-none\");\n }\n document.body.appendChild(div);\n setDiv(div);\n return () => {\n document.body.removeChild(div);\n };\n }, [excalidrawContainer, theme]);\n return div;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQyxPQUFPLENBQUMsQ0FBQztRQUVoRSxJQUFJLFdBQVcsRUFBRTtZQUNmLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2pDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7U0FDbEQ7UUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUvQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFWixPQUFPLEdBQUcsRUFBRTtZQUNWLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQztJQUNKLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFakMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9Nb2RhbC50c3g/ZDVjZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCIuL01vZGFsLnNjc3NcIjtcblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IGNsc3ggZnJvbSBcImNsc3hcIjtcbmltcG9ydCB7IEtFWVMgfSBmcm9tIFwiLi4va2V5c1wiO1xuaW1wb3J0IHsgdXNlRXhjYWxpZHJhd0NvbnRhaW5lciwgdXNlRGV2aWNlIH0gZnJvbSBcIi4vQXBwXCI7XG5pbXBvcnQgeyBBcHBTdGF0ZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgVEhFTUUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBNb2RhbCA9IChwcm9wczoge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIG1heFdpZHRoPzogbnVtYmVyO1xuICBvbkNsb3NlUmVxdWVzdCgpOiB2b2lkO1xuICBsYWJlbGxlZEJ5OiBzdHJpbmc7XG4gIHRoZW1lPzogQXBwU3RhdGVbXCJ0aGVtZVwiXTtcbiAgY2xvc2VPbkNsaWNrT3V0c2lkZT86IGJvb2xlYW47XG59KSA9PiB7XG4gIGNvbnN0IHsgdGhlbWUgPSBUSEVNRS5MSUdIVCwgY2xvc2VPbkNsaWNrT3V0c2lkZSA9IHRydWUgfSA9IHByb3BzO1xuICBjb25zdCBtb2RhbFJvb3QgPSB1c2VCb2R5Um9vdCh0aGVtZSk7XG5cbiAgaWYgKCFtb2RhbFJvb3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUtleWRvd24gPSAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlTLkVTQ0FQRSkge1xuICAgICAgZXZlbnQubmF0aXZlRXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHByb3BzLm9uQ2xvc2VSZXF1ZXN0KCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiTW9kYWxcIiwgcHJvcHMuY2xhc3NOYW1lKX1cbiAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlkb3dufVxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtwcm9wcy5sYWJlbGxlZEJ5fVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiTW9kYWxfX2JhY2tncm91bmRcIlxuICAgICAgICBvbkNsaWNrPXtjbG9zZU9uQ2xpY2tPdXRzaWRlID8gcHJvcHMub25DbG9zZVJlcXVlc3QgOiB1bmRlZmluZWR9XG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIk1vZGFsX19jb250ZW50XCJcbiAgICAgICAgc3R5bGU9e3sgXCItLW1heC13aWR0aFwiOiBgJHtwcm9wcy5tYXhXaWR0aH1weGAgfX1cbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICA+XG4gICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PixcbiAgICBtb2RhbFJvb3QsXG4gICk7XG59O1xuXG5jb25zdCB1c2VCb2R5Um9vdCA9ICh0aGVtZTogQXBwU3RhdGVbXCJ0aGVtZVwiXSkgPT4ge1xuICBjb25zdCBbZGl2LCBzZXREaXZdID0gdXNlU3RhdGU8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBkZXZpY2UgPSB1c2VEZXZpY2UoKTtcbiAgY29uc3QgaXNNb2JpbGVSZWYgPSB1c2VSZWYoZGV2aWNlLmlzTW9iaWxlKTtcbiAgaXNNb2JpbGVSZWYuY3VycmVudCA9IGRldmljZS5pc01vYmlsZTtcblxuICBjb25zdCB7IGNvbnRhaW5lcjogZXhjYWxpZHJhd0NvbnRhaW5lciB9ID0gdXNlRXhjYWxpZHJhd0NvbnRhaW5lcigpO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpdikge1xuICAgICAgZGl2LmNsYXNzTGlzdC50b2dnbGUoXCJleGNhbGlkcmF3LS1tb2JpbGVcIiwgZGV2aWNlLmlzTW9iaWxlKTtcbiAgICB9XG4gIH0sIFtkaXYsIGRldmljZS5pc01vYmlsZV0pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaXNEYXJrVGhlbWUgPVxuICAgICAgISFleGNhbGlkcmF3Q29udGFpbmVyPy5jbGFzc0xpc3QuY29udGFpbnMoXCJ0aGVtZS0tZGFya1wiKSB8fFxuICAgICAgdGhlbWUgPT09IFwiZGFya1wiO1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICBkaXYuY2xhc3NMaXN0LmFkZChcImV4Y2FsaWRyYXdcIiwgXCJleGNhbGlkcmF3LW1vZGFsLWNvbnRhaW5lclwiKTtcbiAgICBkaXYuY2xhc3NMaXN0LnRvZ2dsZShcImV4Y2FsaWRyYXctLW1vYmlsZVwiLCBpc01vYmlsZVJlZi5jdXJyZW50KTtcblxuICAgIGlmIChpc0RhcmtUaGVtZSkge1xuICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoXCJ0aGVtZS0tZGFya1wiKTtcbiAgICAgIGRpdi5jbGFzc0xpc3QuYWRkKFwidGhlbWUtLWRhcmstYmFja2dyb3VuZC1ub25lXCIpO1xuICAgIH1cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG5cbiAgICBzZXREaXYoZGl2KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG4gICAgfTtcbiAgfSwgW2V4Y2FsaWRyYXdDb250YWluZXIsIHRoZW1lXSk7XG5cbiAgcmV0dXJuIGRpdjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/Modal.tsx\n");
2461
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Modal\": () => (/* binding */ Modal)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var _Modal_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Modal.scss */ \"../../components/Modal.scss\");\n/* harmony import */ var _Modal_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_Modal_scss__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! clsx */ \"../../../node_modules/clsx/dist/clsx.m.js\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\n\n\n\n\n\n\n\n\nconst Modal = (props) => {\n const { theme = _constants__WEBPACK_IMPORTED_MODULE_7__.THEME.LIGHT, closeOnClickOutside = true } = props;\n const modalRoot = useBodyRoot(theme);\n if (!modalRoot) {\n return null;\n }\n const handleKeydown = (event) => {\n if (event.key === _keys__WEBPACK_IMPORTED_MODULE_5__.KEYS.ESCAPE) {\n event.nativeEvent.stopImmediatePropagation();\n event.stopPropagation();\n props.onCloseRequest();\n }\n };\n return (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.createPortal)((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(\"div\", Object.assign({ className: (0,clsx__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(\"Modal\", props.className), role: \"dialog\", \"aria-modal\": \"true\", onKeyDown: handleKeydown, \"aria-labelledby\": props.labelledBy }, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", { className: \"Modal__background\", onClick: closeOnClickOutside ? props.onCloseRequest : undefined }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"Modal__content\", style: { \"--max-width\": `${props.maxWidth}px` }, tabIndex: 0 }, { children: props.children }))] })), modalRoot);\n};\nconst useBodyRoot = (theme) => {\n const [div, setDiv] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(null);\n const device = (0,_App__WEBPACK_IMPORTED_MODULE_6__.useDevice)();\n const isMobileRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(device.isMobile);\n isMobileRef.current = device.isMobile;\n const { container: excalidrawContainer } = (0,_App__WEBPACK_IMPORTED_MODULE_6__.useExcalidrawContainer)();\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useLayoutEffect)(() => {\n if (div) {\n div.classList.toggle(\"excalidraw--mobile\", device.isMobile);\n }\n }, [div, device.isMobile]);\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useLayoutEffect)(() => {\n const isDarkTheme = !!(excalidrawContainer === null || excalidrawContainer === void 0 ? void 0 : excalidrawContainer.classList.contains(\"theme--dark\")) ||\n theme === \"dark\";\n const div = document.createElement(\"div\");\n div.classList.add(\"excalidraw\", \"excalidraw-modal-container\");\n div.classList.toggle(\"excalidraw--mobile\", isMobileRef.current);\n if (isDarkTheme) {\n div.classList.add(\"theme--dark\");\n div.classList.add(\"theme--dark-background-none\");\n }\n document.body.appendChild(div);\n setDiv(div);\n return () => {\n document.body.removeChild(div);\n };\n }, [excalidrawContainer, theme]);\n return div;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWhFLElBQUksV0FBVyxFQUFFO1lBQ2YsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNsRDtRQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRS9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVaLE9BQU8sR0FBRyxFQUFFO1lBQ1YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUVqQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL01vZGFsLnRzeD9kNWNmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4vTW9kYWwuc2Nzc1wiO1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgY2xzeCBmcm9tIFwiY2xzeFwiO1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gXCIuLi9rZXlzXCI7XG5pbXBvcnQgeyB1c2VFeGNhbGlkcmF3Q29udGFpbmVyLCB1c2VEZXZpY2UgfSBmcm9tIFwiLi9BcHBcIjtcbmltcG9ydCB7IEFwcFN0YXRlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBUSEVNRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IE1vZGFsOiBSZWFjdC5GQzx7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgbWF4V2lkdGg/OiBudW1iZXI7XG4gIG9uQ2xvc2VSZXF1ZXN0KCk6IHZvaWQ7XG4gIGxhYmVsbGVkQnk6IHN0cmluZztcbiAgdGhlbWU/OiBBcHBTdGF0ZVtcInRoZW1lXCJdO1xuICBjbG9zZU9uQ2xpY2tPdXRzaWRlPzogYm9vbGVhbjtcbn0+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdGhlbWUgPSBUSEVNRS5MSUdIVCwgY2xvc2VPbkNsaWNrT3V0c2lkZSA9IHRydWUgfSA9IHByb3BzO1xuICBjb25zdCBtb2RhbFJvb3QgPSB1c2VCb2R5Um9vdCh0aGVtZSk7XG5cbiAgaWYgKCFtb2RhbFJvb3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUtleWRvd24gPSAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlTLkVTQ0FQRSkge1xuICAgICAgZXZlbnQubmF0aXZlRXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHByb3BzLm9uQ2xvc2VSZXF1ZXN0KCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiTW9kYWxcIiwgcHJvcHMuY2xhc3NOYW1lKX1cbiAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlkb3dufVxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtwcm9wcy5sYWJlbGxlZEJ5fVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiTW9kYWxfX2JhY2tncm91bmRcIlxuICAgICAgICBvbkNsaWNrPXtjbG9zZU9uQ2xpY2tPdXRzaWRlID8gcHJvcHMub25DbG9zZVJlcXVlc3QgOiB1bmRlZmluZWR9XG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIk1vZGFsX19jb250ZW50XCJcbiAgICAgICAgc3R5bGU9e3sgXCItLW1heC13aWR0aFwiOiBgJHtwcm9wcy5tYXhXaWR0aH1weGAgfX1cbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICA+XG4gICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PixcbiAgICBtb2RhbFJvb3QsXG4gICk7XG59O1xuXG5jb25zdCB1c2VCb2R5Um9vdCA9ICh0aGVtZTogQXBwU3RhdGVbXCJ0aGVtZVwiXSkgPT4ge1xuICBjb25zdCBbZGl2LCBzZXREaXZdID0gdXNlU3RhdGU8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBkZXZpY2UgPSB1c2VEZXZpY2UoKTtcbiAgY29uc3QgaXNNb2JpbGVSZWYgPSB1c2VSZWYoZGV2aWNlLmlzTW9iaWxlKTtcbiAgaXNNb2JpbGVSZWYuY3VycmVudCA9IGRldmljZS5pc01vYmlsZTtcblxuICBjb25zdCB7IGNvbnRhaW5lcjogZXhjYWxpZHJhd0NvbnRhaW5lciB9ID0gdXNlRXhjYWxpZHJhd0NvbnRhaW5lcigpO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpdikge1xuICAgICAgZGl2LmNsYXNzTGlzdC50b2dnbGUoXCJleGNhbGlkcmF3LS1tb2JpbGVcIiwgZGV2aWNlLmlzTW9iaWxlKTtcbiAgICB9XG4gIH0sIFtkaXYsIGRldmljZS5pc01vYmlsZV0pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaXNEYXJrVGhlbWUgPVxuICAgICAgISFleGNhbGlkcmF3Q29udGFpbmVyPy5jbGFzc0xpc3QuY29udGFpbnMoXCJ0aGVtZS0tZGFya1wiKSB8fFxuICAgICAgdGhlbWUgPT09IFwiZGFya1wiO1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICBkaXYuY2xhc3NMaXN0LmFkZChcImV4Y2FsaWRyYXdcIiwgXCJleGNhbGlkcmF3LW1vZGFsLWNvbnRhaW5lclwiKTtcbiAgICBkaXYuY2xhc3NMaXN0LnRvZ2dsZShcImV4Y2FsaWRyYXctLW1vYmlsZVwiLCBpc01vYmlsZVJlZi5jdXJyZW50KTtcblxuICAgIGlmIChpc0RhcmtUaGVtZSkge1xuICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoXCJ0aGVtZS0tZGFya1wiKTtcbiAgICAgIGRpdi5jbGFzc0xpc3QuYWRkKFwidGhlbWUtLWRhcmstYmFja2dyb3VuZC1ub25lXCIpO1xuICAgIH1cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG5cbiAgICBzZXREaXYoZGl2KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG4gICAgfTtcbiAgfSwgW2V4Y2FsaWRyYXdDb250YWluZXIsIHRoZW1lXSk7XG5cbiAgcmV0dXJuIGRpdjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/Modal.tsx\n");
2473
2462
 
2474
2463
  /***/ }),
2475
2464
 
@@ -2502,7 +2491,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2502
2491
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2503
2492
 
2504
2493
  "use strict";
2505
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Popover\": () => (/* binding */ Popover)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Popover_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Popover.scss */ \"../../components/Popover.scss\");\n/* harmony import */ var _Popover_scss__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Popover_scss__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n\n\n\n\n\n\nconst Popover = ({ children, left, top, onCloseRequest, fitInViewport = false, offsetLeft = 0, offsetTop = 0, viewportWidth = window.innerWidth, viewportHeight = window.innerHeight, }) => {\n const popoverRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const container = popoverRef.current;\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n if (!container) {\n return;\n }\n const handleKeyDown = (event) => {\n if (event.key === _keys__WEBPACK_IMPORTED_MODULE_5__.KEYS.TAB) {\n const focusableElements = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.queryFocusableElements)(container);\n const { activeElement } = document;\n const currentIndex = focusableElements.findIndex((element) => element === activeElement);\n if (currentIndex === 0 && event.shiftKey) {\n focusableElements[focusableElements.length - 1].focus();\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n else if (currentIndex === focusableElements.length - 1 &&\n !event.shiftKey) {\n focusableElements[0].focus();\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n };\n container.addEventListener(\"keydown\", handleKeyDown);\n return () => container.removeEventListener(\"keydown\", handleKeyDown);\n }, [container]);\n // ensure the popover doesn't overflow the viewport\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect)(() => {\n if (fitInViewport && popoverRef.current) {\n const element = popoverRef.current;\n const { x, y, width, height } = element.getBoundingClientRect();\n if (x + width - offsetLeft > viewportWidth) {\n element.style.left = `${viewportWidth - width}px`;\n }\n if (y + height - offsetTop > viewportHeight) {\n element.style.top = `${viewportHeight - height}px`;\n }\n }\n }, [fitInViewport, viewportWidth, viewportHeight, offsetLeft, offsetTop]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n if (onCloseRequest) {\n const handler = (event) => {\n var _a;\n if (!((_a = popoverRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target))) {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(() => onCloseRequest(event));\n }\n };\n document.addEventListener(\"pointerdown\", handler, false);\n return () => document.removeEventListener(\"pointerdown\", handler, false);\n }\n }, [onCloseRequest]);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"popover\", style: { top, left }, ref: popoverRef }, { children: children })));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUUxRSxnREFBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksY0FBYyxFQUFFO1lBQ2xCLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBbUIsRUFBRSxFQUFFOztnQkFDdEMsSUFBSSxDQUFDLGlCQUFVLENBQUMsT0FBTywwQ0FBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQWMsQ0FBQyxHQUFFO29CQUN2RCxrRUFBdUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDdEQ7WUFDSCxDQUFDLENBQUM7WUFDRixRQUFRLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RCxPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzFFO0lBQ0gsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUVyQixPQUFPLENBQ0wsOEVBQUssU0FBUyxFQUFDLFNBQVMsRUFBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLFVBQVUsZ0JBQzNELFFBQVEsSUFDTCxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9Qb3BvdmVyLnRzeD8wNGFkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuL1BvcG92ZXIuc2Nzc1wiO1xuaW1wb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBxdWVyeUZvY3VzYWJsZUVsZW1lbnRzIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBLRVlTIH0gZnJvbSBcIi4uL2tleXNcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgdG9wPzogbnVtYmVyO1xuICBsZWZ0PzogbnVtYmVyO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgb25DbG9zZVJlcXVlc3Q/KGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkO1xuICBmaXRJblZpZXdwb3J0PzogYm9vbGVhbjtcbiAgb2Zmc2V0TGVmdD86IG51bWJlcjtcbiAgb2Zmc2V0VG9wPzogbnVtYmVyO1xuICB2aWV3cG9ydFdpZHRoPzogbnVtYmVyO1xuICB2aWV3cG9ydEhlaWdodD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBQb3BvdmVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIGxlZnQsXG4gIHRvcCxcbiAgb25DbG9zZVJlcXVlc3QsXG4gIGZpdEluVmlld3BvcnQgPSBmYWxzZSxcbiAgb2Zmc2V0TGVmdCA9IDAsXG4gIG9mZnNldFRvcCA9IDAsXG4gIHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCxcbiAgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCBwb3BvdmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBjb250YWluZXIgPSBwb3BvdmVyUmVmLmN1cnJlbnQ7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IEtFWVMuVEFCKSB7XG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZUVsZW1lbnRzID0gcXVlcnlGb2N1c2FibGVFbGVtZW50cyhjb250YWluZXIpO1xuICAgICAgICBjb25zdCB7IGFjdGl2ZUVsZW1lbnQgfSA9IGRvY3VtZW50O1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBmb2N1c2FibGVFbGVtZW50cy5maW5kSW5kZXgoXG4gICAgICAgICAgKGVsZW1lbnQpID0+IGVsZW1lbnQgPT09IGFjdGl2ZUVsZW1lbnQsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gMCAmJiBldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGZvY3VzYWJsZUVsZW1lbnRzW2ZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDFdLmZvY3VzKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBjdXJyZW50SW5kZXggPT09IGZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgICAhZXZlbnQuc2hpZnRLZXlcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9jdXNhYmxlRWxlbWVudHNbMF0uZm9jdXMoKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKTtcblxuICAgIHJldHVybiAoKSA9PiBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gIH0sIFtjb250YWluZXJdKTtcblxuICAvLyBlbnN1cmUgdGhlIHBvcG92ZXIgZG9lc24ndCBvdmVyZmxvdyB0aGUgdmlld3BvcnRcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZml0SW5WaWV3cG9ydCAmJiBwb3BvdmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBwb3BvdmVyUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAoeCArIHdpZHRoIC0gb2Zmc2V0TGVmdCA+IHZpZXdwb3J0V2lkdGgpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7dmlld3BvcnRXaWR0aCAtIHdpZHRofXB4YDtcbiAgICAgIH1cbiAgICAgIGlmICh5ICsgaGVpZ2h0IC0gb2Zmc2V0VG9wID4gdmlld3BvcnRIZWlnaHQpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHt2aWV3cG9ydEhlaWdodCAtIGhlaWdodH1weGA7XG4gICAgICB9XG4gICAgfVxuICB9LCBbZml0SW5WaWV3cG9ydCwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQsIG9mZnNldExlZnQsIG9mZnNldFRvcF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9uQ2xvc2VSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFwb3BvdmVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgICAgIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKCgpID0+IG9uQ2xvc2VSZXF1ZXN0KGV2ZW50KSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgaGFuZGxlciwgZmFsc2UpO1xuICAgICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgfVxuICB9LCBbb25DbG9zZVJlcXVlc3RdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicG9wb3ZlclwiIHN0eWxlPXt7IHRvcCwgbGVmdCB9fSByZWY9e3BvcG92ZXJSZWZ9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/Popover.tsx\n");
2494
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Popover\": () => (/* binding */ Popover)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Popover_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Popover.scss */ \"../../components/Popover.scss\");\n/* harmony import */ var _Popover_scss__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Popover_scss__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ \"../../utils.ts\");\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../keys */ \"../../keys.ts\");\n\n\n\n\n\n\nconst Popover = ({ children, left, top, onCloseRequest, fitInViewport = false, offsetLeft = 0, offsetTop = 0, viewportWidth = window.innerWidth, viewportHeight = window.innerHeight, }) => {\n const popoverRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const container = popoverRef.current;\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n if (!container) {\n return;\n }\n const handleKeyDown = (event) => {\n if (event.key === _keys__WEBPACK_IMPORTED_MODULE_5__.KEYS.TAB) {\n const focusableElements = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.queryFocusableElements)(container);\n const { activeElement } = document;\n const currentIndex = focusableElements.findIndex((element) => element === activeElement);\n if (currentIndex === 0 && event.shiftKey) {\n focusableElements[focusableElements.length - 1].focus();\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n else if (currentIndex === focusableElements.length - 1 &&\n !event.shiftKey) {\n focusableElements[0].focus();\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n };\n container.addEventListener(\"keydown\", handleKeyDown);\n return () => container.removeEventListener(\"keydown\", handleKeyDown);\n }, [container]);\n // ensure the popover doesn't overflow the viewport\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect)(() => {\n if (fitInViewport && popoverRef.current) {\n const element = popoverRef.current;\n const { x, y, width, height } = element.getBoundingClientRect();\n const { innerWidth: viewportWidth, innerHeight: viewportHeight } = window;\n //Position correctly when clicked on rightmost part or the bottom part of viewport\n if (x + width - offsetLeft > viewportWidth) {\n element.style.left = `${viewportWidth - width - 10}px`;\n }\n if (y + height - offsetTop > viewportHeight) {\n element.style.top = `${viewportHeight - height}px`;\n }\n //Resize to fit viewport on smaller screens\n if (height >= viewportHeight) {\n element.style.height = `${viewportHeight - 20}px`;\n element.style.top = \"10px\";\n element.style.overflowY = \"scroll\";\n }\n if (width >= viewportWidth) {\n element.style.width = `${viewportWidth}px`;\n element.style.left = \"0px\";\n element.style.overflowX = \"scroll\";\n }\n }\n }, [fitInViewport, viewportWidth, viewportHeight, offsetLeft, offsetTop]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n if (onCloseRequest) {\n const handler = (event) => {\n var _a;\n if (!((_a = popoverRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target))) {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(() => onCloseRequest(event));\n }\n };\n document.addEventListener(\"pointerdown\", handler, false);\n return () => document.removeEventListener(\"pointerdown\", handler, false);\n }\n }, [onCloseRequest]);\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"div\", Object.assign({ className: \"popover\", style: { top, left }, ref: popoverRef }, { children: children })));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDMUU7SUFDSCxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBRXJCLE9BQU8sQ0FDTCw4RUFBSyxTQUFTLEVBQUMsU0FBUyxFQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxnQkFDM0QsUUFBUSxJQUNMLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL1BvcG92ZXIudHN4PzA0YWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBcIi4vUG9wb3Zlci5zY3NzXCI7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IHF1ZXJ5Rm9jdXNhYmxlRWxlbWVudHMgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IEtFWVMgfSBmcm9tIFwiLi4va2V5c1wiO1xuXG50eXBlIFByb3BzID0ge1xuICB0b3A/OiBudW1iZXI7XG4gIGxlZnQ/OiBudW1iZXI7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBvbkNsb3NlUmVxdWVzdD8oZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQ7XG4gIGZpdEluVmlld3BvcnQ/OiBib29sZWFuO1xuICBvZmZzZXRMZWZ0PzogbnVtYmVyO1xuICBvZmZzZXRUb3A/OiBudW1iZXI7XG4gIHZpZXdwb3J0V2lkdGg/OiBudW1iZXI7XG4gIHZpZXdwb3J0SGVpZ2h0PzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IFBvcG92ZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgbGVmdCxcbiAgdG9wLFxuICBvbkNsb3NlUmVxdWVzdCxcbiAgZml0SW5WaWV3cG9ydCA9IGZhbHNlLFxuICBvZmZzZXRMZWZ0ID0gMCxcbiAgb2Zmc2V0VG9wID0gMCxcbiAgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoLFxuICB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCxcbn06IFByb3BzKSA9PiB7XG4gIGNvbnN0IHBvcG92ZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IGNvbnRhaW5lciA9IHBvcG92ZXJSZWYuY3VycmVudDtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gS0VZUy5UQUIpIHtcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlRWxlbWVudHMgPSBxdWVyeUZvY3VzYWJsZUVsZW1lbnRzKGNvbnRhaW5lcik7XG4gICAgICAgIGNvbnN0IHsgYWN0aXZlRWxlbWVudCB9ID0gZG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGZvY3VzYWJsZUVsZW1lbnRzLmZpbmRJbmRleChcbiAgICAgICAgICAoZWxlbWVudCkgPT4gZWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudCxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY3VycmVudEluZGV4ID09PSAwICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZm9jdXNhYmxlRWxlbWVudHNbZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGN1cnJlbnRJbmRleCA9PT0gZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMSAmJlxuICAgICAgICAgICFldmVudC5zaGlmdEtleVxuICAgICAgICApIHtcbiAgICAgICAgICBmb2N1c2FibGVFbGVtZW50c1swXS5mb2N1cygpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKTtcbiAgfSwgW2NvbnRhaW5lcl0pO1xuXG4gIC8vIGVuc3VyZSB0aGUgcG9wb3ZlciBkb2Vzbid0IG92ZXJmbG93IHRoZSB2aWV3cG9ydFxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmaXRJblZpZXdwb3J0ICYmIHBvcG92ZXJSZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHBvcG92ZXJSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHsgaW5uZXJXaWR0aDogdmlld3BvcnRXaWR0aCwgaW5uZXJIZWlnaHQ6IHZpZXdwb3J0SGVpZ2h0IH0gPSB3aW5kb3c7XG5cbiAgICAgIC8vUG9zaXRpb24gY29ycmVjdGx5IHdoZW4gY2xpY2tlZCBvbiByaWdodG1vc3QgcGFydCBvciB0aGUgYm90dG9tIHBhcnQgb2Ygdmlld3BvcnRcbiAgICAgIGlmICh4ICsgd2lkdGggLSBvZmZzZXRMZWZ0ID4gdmlld3BvcnRXaWR0aCkge1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHt2aWV3cG9ydFdpZHRoIC0gd2lkdGggLSAxMH1weGA7XG4gICAgICB9XG4gICAgICBpZiAoeSArIGhlaWdodCAtIG9mZnNldFRvcCA+IHZpZXdwb3J0SGVpZ2h0KSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7dmlld3BvcnRIZWlnaHQgLSBoZWlnaHR9cHhgO1xuICAgICAgfVxuXG4gICAgICAvL1Jlc2l6ZSB0byBmaXQgdmlld3BvcnQgb24gc21hbGxlciBzY3JlZW5zXG4gICAgICBpZiAoaGVpZ2h0ID49IHZpZXdwb3J0SGVpZ2h0KSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld3BvcnRIZWlnaHQgLSAyMH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gXCIxMHB4XCI7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcbiAgICAgIH1cbiAgICAgIGlmICh3aWR0aCA+PSB2aWV3cG9ydFdpZHRoKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydFdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5vdmVyZmxvd1ggPSBcInNjcm9sbFwiO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2ZpdEluVmlld3BvcnQsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCBvZmZzZXRMZWZ0LCBvZmZzZXRUb3BdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvbkNsb3NlUmVxdWVzdCkge1xuICAgICAgY29uc3QgaGFuZGxlciA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghcG9wb3ZlclJlZi5jdXJyZW50Py5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgICB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcygoKSA9PiBvbkNsb3NlUmVxdWVzdChldmVudCkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIGhhbmRsZXIsIGZhbHNlKTtcbiAgICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgaGFuZGxlciwgZmFsc2UpO1xuICAgIH1cbiAgfSwgW29uQ2xvc2VSZXF1ZXN0XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInBvcG92ZXJcIiBzdHlsZT17eyB0b3AsIGxlZnQgfX0gcmVmPXtwb3BvdmVyUmVmfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/Popover.tsx\n");
2506
2495
 
2507
2496
  /***/ }),
2508
2497
 
@@ -2535,7 +2524,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2535
2524
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2536
2525
 
2537
2526
  "use strict";
2538
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Section\": () => (/* binding */ Section)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\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\nconst Section = (_a) => {\n var { heading, children } = _a, props = __rest(_a, [\"heading\", \"children\"]);\n const { id } = (0,_App__WEBPACK_IMPORTED_MODULE_3__.useExcalidrawContainer)();\n const header = ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"h2\", Object.assign({ className: \"visually-hidden\", id: `${id}-${heading}-title` }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(`headings.${heading}`) })));\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"section\", Object.assign({}, props, { \"aria-labelledby\": `${id}-${heading}-title` }, { children: typeof children === \"function\" ? (children(header)) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [header, children] })) })));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9TZWN0aW9uLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMEI7QUFDRTtBQUNtQjtBQU94QyxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQTZDLEVBQUUsRUFBRTtRQUFqRCxFQUFFLE9BQU8sRUFBRSxRQUFRLE9BQTBCLEVBQXJCLEtBQUssY0FBN0IsdUJBQStCLENBQUY7SUFDbkQsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLDREQUFzQixFQUFFLENBQUM7SUFDeEMsTUFBTSxNQUFNLEdBQUcsQ0FDYiw2RUFBSSxTQUFTLEVBQUMsaUJBQWlCLEVBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLE9BQU8sUUFBUSxnQkFDekQsd0NBQUMsQ0FBQyxZQUFZLE9BQU8sRUFBRSxDQUFDLElBQ3RCLENBQ04sQ0FBQztJQUNGLE9BQU8sQ0FDTCxvRkFBYSxLQUFLLHVCQUFtQixHQUFHLEVBQUUsSUFBSSxPQUFPLFFBQVEsZ0JBQzFELE9BQU8sUUFBUSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUNqQixDQUFDLENBQUMsQ0FBQyxDQUNGLDhIQUNHLE1BQU0sRUFDTixRQUFRLElBQ1IsQ0FDSixJQUNPLENBQ1gsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb21wb25lbnRzL1NlY3Rpb24udHN4PzMzNzIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdCB9IGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQgeyB1c2VFeGNhbGlkcmF3Q29udGFpbmVyIH0gZnJvbSBcIi4vQXBwXCI7XG5cbmludGVyZmFjZSBTZWN0aW9uUHJvcHMgZXh0ZW5kcyBSZWFjdC5IVE1MUHJvcHM8SFRNTEVsZW1lbnQ+IHtcbiAgaGVhZGluZzogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIHwgKChoZWFkZXI6IFJlYWN0LlJlYWN0Tm9kZSkgPT4gUmVhY3QuUmVhY3ROb2RlKTtcbn1cblxuZXhwb3J0IGNvbnN0IFNlY3Rpb24gPSAoeyBoZWFkaW5nLCBjaGlsZHJlbiwgLi4ucHJvcHMgfTogU2VjdGlvblByb3BzKSA9PiB7XG4gIGNvbnN0IHsgaWQgfSA9IHVzZUV4Y2FsaWRyYXdDb250YWluZXIoKTtcbiAgY29uc3QgaGVhZGVyID0gKFxuICAgIDxoMiBjbGFzc05hbWU9XCJ2aXN1YWxseS1oaWRkZW5cIiBpZD17YCR7aWR9LSR7aGVhZGluZ30tdGl0bGVgfT5cbiAgICAgIHt0KGBoZWFkaW5ncy4ke2hlYWRpbmd9YCl9XG4gICAgPC9oMj5cbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8c2VjdGlvbiB7Li4ucHJvcHN9IGFyaWEtbGFiZWxsZWRieT17YCR7aWR9LSR7aGVhZGluZ30tdGl0bGVgfT5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIiA/IChcbiAgICAgICAgY2hpbGRyZW4oaGVhZGVyKVxuICAgICAgKSA6IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC8+XG4gICAgICApfVxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../components/Section.tsx\n");
2527
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Section\": () => (/* binding */ Section)\n/* harmony export */ });\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ \"../../../node_modules/react/jsx-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n */ \"../../i18n.ts\");\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./App */ \"../../components/App.tsx\");\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\nconst Section = (_a) => {\n var { heading, children } = _a, props = __rest(_a, [\"heading\", \"children\"]);\n const { id } = (0,_App__WEBPACK_IMPORTED_MODULE_3__.useExcalidrawContainer)();\n const header = ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"h2\", Object.assign({ className: \"visually-hidden\", id: `${id}-${heading}-title` }, { children: (0,_i18n__WEBPACK_IMPORTED_MODULE_2__.t)(`headings.${heading}`) })));\n return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(\"section\", Object.assign({}, props, { \"aria-labelledby\": `${id}-${heading}-title` }, { children: typeof children === \"function\" ? (children(header)) : ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [header, children] })) })));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vY29tcG9uZW50cy9TZWN0aW9uLnRzeC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMEI7QUFDRTtBQUNtQjtBQUV4QyxNQUFNLE9BQU8sR0FJZixDQUFDLEVBQStCLEVBQUUsRUFBRTtRQUFuQyxFQUFFLE9BQU8sRUFBRSxRQUFRLE9BQVksRUFBUCxLQUFLLGNBQTdCLHVCQUErQixDQUFGO0lBQ2pDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyw0REFBc0IsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLENBQ2IsNkVBQUksU0FBUyxFQUFDLGlCQUFpQixFQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxPQUFPLFFBQVEsZ0JBQ3pELHdDQUFDLENBQUMsWUFBWSxPQUFPLEVBQUUsQ0FBQyxJQUN0QixDQUNOLENBQUM7SUFDRixPQUFPLENBQ0wsb0ZBQWEsS0FBSyx1QkFBbUIsR0FBRyxFQUFFLElBQUksT0FBTyxRQUFRLGdCQUMxRCxPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQ2hDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FDakIsQ0FBQyxDQUFDLENBQUMsQ0FDRiw4SEFDRyxNQUFNLEVBQ04sUUFBUSxJQUNSLENBQ0osSUFDTyxDQUNYLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vY29tcG9uZW50cy9TZWN0aW9uLnRzeD8zMzcyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHQgfSBmcm9tIFwiLi4vaTE4blwiO1xuaW1wb3J0IHsgdXNlRXhjYWxpZHJhd0NvbnRhaW5lciB9IGZyb20gXCIuL0FwcFwiO1xuXG5leHBvcnQgY29uc3QgU2VjdGlvbjogUmVhY3QuRkM8e1xuICBoZWFkaW5nOiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlIHwgKChoZWFkaW5nOiBSZWFjdC5SZWFjdE5vZGUpID0+IFJlYWN0LlJlYWN0Tm9kZSk7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn0+ID0gKHsgaGVhZGluZywgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgeyBpZCB9ID0gdXNlRXhjYWxpZHJhd0NvbnRhaW5lcigpO1xuICBjb25zdCBoZWFkZXIgPSAoXG4gICAgPGgyIGNsYXNzTmFtZT1cInZpc3VhbGx5LWhpZGRlblwiIGlkPXtgJHtpZH0tJHtoZWFkaW5nfS10aXRsZWB9PlxuICAgICAge3QoYGhlYWRpbmdzLiR7aGVhZGluZ31gKX1cbiAgICA8L2gyPlxuICApO1xuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uIHsuLi5wcm9wc30gYXJpYS1sYWJlbGxlZGJ5PXtgJHtpZH0tJHtoZWFkaW5nfS10aXRsZWB9PlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiA9PT0gXCJmdW5jdGlvblwiID8gKFxuICAgICAgICBjaGlsZHJlbihoZWFkZXIpXG4gICAgICApIDogKFxuICAgICAgICA8PlxuICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8Lz5cbiAgICAgICl9XG4gICAgPC9zZWN0aW9uPlxuICApO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../components/Section.tsx\n");
2539
2528
 
2540
2529
  /***/ }),
2541
2530
 
@@ -3096,7 +3085,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3096
3085
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3097
3086
 
3098
3087
  "use strict";
3099
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"defaultLang\": () => (/* binding */ defaultLang),\n/* harmony export */ \"getLanguage\": () => (/* binding */ getLanguage),\n/* harmony export */ \"languages\": () => (/* binding */ languages),\n/* harmony export */ \"setLanguage\": () => (/* binding */ setLanguage),\n/* harmony export */ \"t\": () => (/* binding */ t)\n/* harmony export */ });\n/* harmony import */ var _locales_en_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locales/en.json */ \"../../locales/en.json\");\n/* harmony import */ var _locales_percentages_json__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./locales/percentages.json */ \"../../locales/percentages.json\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ \"../../constants.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\nconst COMPLETION_THRESHOLD = 85;\nconst defaultLang = { code: \"en\", label: \"English\" };\nconst allLanguages = [\n { code: \"ar-SA\", label: \"العربية\", rtl: true },\n { code: \"bg-BG\", label: \"Български\" },\n { code: \"ca-ES\", label: \"Català\" },\n { code: \"cs-CZ\", label: \"Česky\" },\n { code: \"de-DE\", label: \"Deutsch\" },\n { code: \"el-GR\", label: \"Ελληνικά\" },\n { code: \"es-ES\", label: \"Español\" },\n { code: \"eu-ES\", label: \"Euskara\" },\n { code: \"fa-IR\", label: \"فارسی\", rtl: true },\n { code: \"fi-FI\", label: \"Suomi\" },\n { code: \"fr-FR\", label: \"Français\" },\n { code: \"he-IL\", label: \"עברית\", rtl: true },\n { code: \"hi-IN\", label: \"हिन्दी\" },\n { code: \"hu-HU\", label: \"Magyar\" },\n { code: \"id-ID\", label: \"Bahasa Indonesia\" },\n { code: \"it-IT\", label: \"Italiano\" },\n { code: \"ja-JP\", label: \"日本語\" },\n { code: \"kab-KAB\", label: \"Taqbaylit\" },\n { code: \"kk-KZ\", label: \"Қазақ тілі\" },\n { code: \"ko-KR\", label: \"한국어\" },\n { code: \"lt-LT\", label: \"Lietuvių\" },\n { code: \"lv-LV\", label: \"Latviešu\" },\n { code: \"my-MM\", label: \"Burmese\" },\n { code: \"nb-NO\", label: \"Norsk bokmål\" },\n { code: \"nl-NL\", label: \"Nederlands\" },\n { code: \"nn-NO\", label: \"Norsk nynorsk\" },\n { code: \"oc-FR\", label: \"Occitan\" },\n { code: \"pa-IN\", label: \"ਪੰਜਾਬੀ\" },\n { code: \"pl-PL\", label: \"Polski\" },\n { code: \"pt-BR\", label: \"Português Brasileiro\" },\n { code: \"pt-PT\", label: \"Português\" },\n { code: \"ro-RO\", label: \"Română\" },\n { code: \"ru-RU\", label: \"Русский\" },\n { code: \"sk-SK\", label: \"Slovenčina\" },\n { code: \"sv-SE\", label: \"Svenska\" },\n { code: \"sl-SI\", label: \"Slovenščina\" },\n { code: \"tr-TR\", label: \"Türkçe\" },\n { code: \"uk-UA\", label: \"Українська\" },\n { code: \"zh-CN\", label: \"简体中文\" },\n { code: \"zh-TW\", label: \"繁體中文\" },\n].concat([defaultLang]);\nconst languages = allLanguages\n .sort((left, right) => (left.label > right.label ? 1 : -1))\n .filter((lang) => _locales_percentages_json__WEBPACK_IMPORTED_MODULE_1__[lang.code] >=\n COMPLETION_THRESHOLD);\nconst TEST_LANG_CODE = \"__test__\";\nif (\"development\" === _constants__WEBPACK_IMPORTED_MODULE_2__.ENV.DEVELOPMENT) {\n languages.unshift({ code: TEST_LANG_CODE, label: \"test language\" }, {\n code: `${TEST_LANG_CODE}.rtl`,\n label: \"\\u{202a}test language (rtl)\\u{202c}\",\n rtl: true,\n });\n}\nlet currentLang = defaultLang;\nlet currentLangData = {};\nconst setLanguage = (lang) => __awaiter(void 0, void 0, void 0, function* () {\n currentLang = lang;\n document.documentElement.dir = currentLang.rtl ? \"rtl\" : \"ltr\";\n document.documentElement.lang = currentLang.code;\n if (lang.code.startsWith(TEST_LANG_CODE)) {\n currentLangData = {};\n }\n else {\n currentLangData = yield __webpack_require__(\"../../locales lazy recursive ^\\\\.\\\\/.*\\\\.json$\")(`./${currentLang.code}.json`);\n }\n});\nconst getLanguage = () => currentLang;\nconst findPartsForData = (data, parts) => {\n for (let index = 0; index < parts.length; ++index) {\n const part = parts[index];\n if (data[part] === undefined) {\n return undefined;\n }\n data = data[part];\n }\n if (typeof data !== \"string\") {\n return undefined;\n }\n return data;\n};\nconst t = (path, replacement) => {\n if (currentLang.code.startsWith(TEST_LANG_CODE)) {\n const name = replacement\n ? `${path}(${JSON.stringify(replacement).slice(1, -1)})`\n : path;\n return `\\u{202a}[[${name}]]\\u{202c}`;\n }\n const parts = path.split(\".\");\n let translation = findPartsForData(currentLangData, parts) ||\n findPartsForData(_locales_en_json__WEBPACK_IMPORTED_MODULE_0__, parts);\n if (translation === undefined) {\n throw new Error(`Can't find translation for ${path}`);\n }\n if (replacement) {\n for (const key in replacement) {\n translation = translation.replace(`{{${key}}}`, String(replacement[key]));\n }\n }\n return translation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vaTE4bi50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFpRDtBQUNJO0FBQ25CO0FBRWxDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBUXpCLE1BQU0sV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFFNUQsTUFBTSxZQUFZLEdBQWU7SUFDL0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtJQUM5QyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtJQUNyQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtJQUNsQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtJQUNqQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNuQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtJQUNwQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNuQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNuQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0lBQzVDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO0lBQ3BDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7SUFDNUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7SUFDbEMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7SUFDbEMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtJQUM1QyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtJQUNwQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtJQUMvQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtJQUN2QyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtJQUN0QyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtJQUMvQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtJQUNwQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtJQUNwQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNuQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtJQUN4QyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtJQUN0QyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTtJQUN6QyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNuQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtJQUNsQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtJQUNsQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFO0lBQ2hELEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO0lBQ3JDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ25DLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO0lBQ3RDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ25DLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO0lBQ3ZDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO0lBQ3RDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0lBQ2hDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0NBQ2pDLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUVqQixNQUFNLFNBQVMsR0FBZSxZQUFZO0tBQzlDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUQsTUFBTSxDQUNMLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDTixzREFBc0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2xELG9CQUFvQixDQUN2QixDQUFDO0FBRUosTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDO0FBQ2xDLElBQUksYUFBb0IsS0FBSyx1REFBZSxFQUFFO0lBQzVDLFNBQVMsQ0FBQyxPQUFPLENBQ2YsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsRUFDaEQ7UUFDRSxJQUFJLEVBQUUsR0FBRyxjQUFjLE1BQU07UUFDN0IsS0FBSyxFQUFFLHFDQUFxQztRQUM1QyxHQUFHLEVBQUUsSUFBSTtLQUNWLENBQ0YsQ0FBQztDQUNIO0FBRUQsSUFBSSxXQUFXLEdBQWEsV0FBVyxDQUFDO0FBQ3hDLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUVsQixNQUFNLFdBQVcsR0FBRyxDQUFPLElBQWMsRUFBRSxFQUFFO0lBQ2xELFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDbkIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDL0QsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztJQUVqRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQ3hDLGVBQWUsR0FBRyxFQUFFLENBQUM7S0FDdEI7U0FBTTtRQUNMLGVBQWUsR0FBRyxNQUFNLHNFQUNzQixHQUFXLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQ2pGLENBQUM7S0FDSDtBQUNILENBQUMsRUFBQztBQUVLLE1BQU0sV0FBVyxHQUFHLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQztBQUU3QyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBUyxFQUFFLEtBQWUsRUFBRSxFQUFFO0lBQ3RELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFO1FBQ2pELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDNUIsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ25CO0lBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7UUFDNUIsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVLLE1BQU0sQ0FBQyxHQUFHLENBQ2YsSUFBWSxFQUNaLFdBQWdELEVBQ2hELEVBQUU7SUFDRixJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQy9DLE1BQU0sSUFBSSxHQUFHLFdBQVc7WUFDdEIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHO1lBQ3hELENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxPQUFPLGFBQWEsSUFBSSxZQUFZLENBQUM7S0FDdEM7SUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLElBQUksV0FBVyxHQUNiLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUM7UUFDeEMsZ0JBQWdCLENBQUMsNkNBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUMsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO1FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLElBQUksRUFBRSxDQUFDLENBQUM7S0FDdkQ7SUFFRCxJQUFJLFdBQVcsRUFBRTtRQUNmLEtBQUssTUFBTSxHQUFHLElBQUksV0FBVyxFQUFFO1lBQzdCLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0U7S0FDRjtJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9pMThuLnRzPzM4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZhbGxiYWNrTGFuZ0RhdGEgZnJvbSBcIi4vbG9jYWxlcy9lbi5qc29uXCI7XG5pbXBvcnQgcGVyY2VudGFnZXMgZnJvbSBcIi4vbG9jYWxlcy9wZXJjZW50YWdlcy5qc29uXCI7XG5pbXBvcnQgeyBFTlYgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgQ09NUExFVElPTl9USFJFU0hPTEQgPSA4NTtcblxuZXhwb3J0IGludGVyZmFjZSBMYW5ndWFnZSB7XG4gIGNvZGU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgcnRsPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRMYW5nID0geyBjb2RlOiBcImVuXCIsIGxhYmVsOiBcIkVuZ2xpc2hcIiB9O1xuXG5jb25zdCBhbGxMYW5ndWFnZXM6IExhbmd1YWdlW10gPSBbXG4gIHsgY29kZTogXCJhci1TQVwiLCBsYWJlbDogXCLYp9mE2LnYsdio2YrYqVwiLCBydGw6IHRydWUgfSxcbiAgeyBjb2RlOiBcImJnLUJHXCIsIGxhYmVsOiBcItCR0YrQu9Cz0LDRgNGB0LrQuFwiIH0sXG4gIHsgY29kZTogXCJjYS1FU1wiLCBsYWJlbDogXCJDYXRhbMOgXCIgfSxcbiAgeyBjb2RlOiBcImNzLUNaXCIsIGxhYmVsOiBcIsSMZXNreVwiIH0sXG4gIHsgY29kZTogXCJkZS1ERVwiLCBsYWJlbDogXCJEZXV0c2NoXCIgfSxcbiAgeyBjb2RlOiBcImVsLUdSXCIsIGxhYmVsOiBcIs6VzrvOu863zr3Ouc66zqxcIiB9LFxuICB7IGNvZGU6IFwiZXMtRVNcIiwgbGFiZWw6IFwiRXNwYcOxb2xcIiB9LFxuICB7IGNvZGU6IFwiZXUtRVNcIiwgbGFiZWw6IFwiRXVza2FyYVwiIH0sXG4gIHsgY29kZTogXCJmYS1JUlwiLCBsYWJlbDogXCLZgdin2LHYs9uMXCIsIHJ0bDogdHJ1ZSB9LFxuICB7IGNvZGU6IFwiZmktRklcIiwgbGFiZWw6IFwiU3VvbWlcIiB9LFxuICB7IGNvZGU6IFwiZnItRlJcIiwgbGFiZWw6IFwiRnJhbsOnYWlzXCIgfSxcbiAgeyBjb2RlOiBcImhlLUlMXCIsIGxhYmVsOiBcItei15HXqNeZ16pcIiwgcnRsOiB0cnVlIH0sXG4gIHsgY29kZTogXCJoaS1JTlwiLCBsYWJlbDogXCLgpLngpL/gpKjgpY3gpKbgpYBcIiB9LFxuICB7IGNvZGU6IFwiaHUtSFVcIiwgbGFiZWw6IFwiTWFneWFyXCIgfSxcbiAgeyBjb2RlOiBcImlkLUlEXCIsIGxhYmVsOiBcIkJhaGFzYSBJbmRvbmVzaWFcIiB9LFxuICB7IGNvZGU6IFwiaXQtSVRcIiwgbGFiZWw6IFwiSXRhbGlhbm9cIiB9LFxuICB7IGNvZGU6IFwiamEtSlBcIiwgbGFiZWw6IFwi5pel5pys6KqeXCIgfSxcbiAgeyBjb2RlOiBcImthYi1LQUJcIiwgbGFiZWw6IFwiVGFxYmF5bGl0XCIgfSxcbiAgeyBjb2RlOiBcImtrLUtaXCIsIGxhYmVsOiBcItKa0LDQt9Cw0psg0YLRltC70ZZcIiB9LFxuICB7IGNvZGU6IFwia28tS1JcIiwgbGFiZWw6IFwi7ZWc6rWt7Ja0XCIgfSxcbiAgeyBjb2RlOiBcImx0LUxUXCIsIGxhYmVsOiBcIkxpZXR1dmnFs1wiIH0sXG4gIHsgY29kZTogXCJsdi1MVlwiLCBsYWJlbDogXCJMYXR2aWXFoXVcIiB9LFxuICB7IGNvZGU6IFwibXktTU1cIiwgbGFiZWw6IFwiQnVybWVzZVwiIH0sXG4gIHsgY29kZTogXCJuYi1OT1wiLCBsYWJlbDogXCJOb3JzayBib2ttw6VsXCIgfSxcbiAgeyBjb2RlOiBcIm5sLU5MXCIsIGxhYmVsOiBcIk5lZGVybGFuZHNcIiB9LFxuICB7IGNvZGU6IFwibm4tTk9cIiwgbGFiZWw6IFwiTm9yc2sgbnlub3Jza1wiIH0sXG4gIHsgY29kZTogXCJvYy1GUlwiLCBsYWJlbDogXCJPY2NpdGFuXCIgfSxcbiAgeyBjb2RlOiBcInBhLUlOXCIsIGxhYmVsOiBcIuCoquCpsOConOCovuCorOCpgFwiIH0sXG4gIHsgY29kZTogXCJwbC1QTFwiLCBsYWJlbDogXCJQb2xza2lcIiB9LFxuICB7IGNvZGU6IFwicHQtQlJcIiwgbGFiZWw6IFwiUG9ydHVndcOqcyBCcmFzaWxlaXJvXCIgfSxcbiAgeyBjb2RlOiBcInB0LVBUXCIsIGxhYmVsOiBcIlBvcnR1Z3XDqnNcIiB9LFxuICB7IGNvZGU6IFwicm8tUk9cIiwgbGFiZWw6IFwiUm9tw6JuxINcIiB9LFxuICB7IGNvZGU6IFwicnUtUlVcIiwgbGFiZWw6IFwi0KDRg9GB0YHQutC40LlcIiB9LFxuICB7IGNvZGU6IFwic2stU0tcIiwgbGFiZWw6IFwiU2xvdmVuxI1pbmFcIiB9LFxuICB7IGNvZGU6IFwic3YtU0VcIiwgbGFiZWw6IFwiU3ZlbnNrYVwiIH0sXG4gIHsgY29kZTogXCJzbC1TSVwiLCBsYWJlbDogXCJTbG92ZW7FocSNaW5hXCIgfSxcbiAgeyBjb2RlOiBcInRyLVRSXCIsIGxhYmVsOiBcIlTDvHJrw6dlXCIgfSxcbiAgeyBjb2RlOiBcInVrLVVBXCIsIGxhYmVsOiBcItCj0LrRgNCw0ZfQvdGB0YzQutCwXCIgfSxcbiAgeyBjb2RlOiBcInpoLUNOXCIsIGxhYmVsOiBcIueugOS9k+S4reaWh1wiIH0sXG4gIHsgY29kZTogXCJ6aC1UV1wiLCBsYWJlbDogXCLnuYHpq5TkuK3mlodcIiB9LFxuXS5jb25jYXQoW2RlZmF1bHRMYW5nXSk7XG5cbmV4cG9ydCBjb25zdCBsYW5ndWFnZXM6IExhbmd1YWdlW10gPSBhbGxMYW5ndWFnZXNcbiAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiAobGVmdC5sYWJlbCA+IHJpZ2h0LmxhYmVsID8gMSA6IC0xKSlcbiAgLmZpbHRlcihcbiAgICAobGFuZykgPT5cbiAgICAgIChwZXJjZW50YWdlcyBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KVtsYW5nLmNvZGVdID49XG4gICAgICBDT01QTEVUSU9OX1RIUkVTSE9MRCxcbiAgKTtcblxuY29uc3QgVEVTVF9MQU5HX0NPREUgPSBcIl9fdGVzdF9fXCI7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IEVOVi5ERVZFTE9QTUVOVCkge1xuICBsYW5ndWFnZXMudW5zaGlmdChcbiAgICB7IGNvZGU6IFRFU1RfTEFOR19DT0RFLCBsYWJlbDogXCJ0ZXN0IGxhbmd1YWdlXCIgfSxcbiAgICB7XG4gICAgICBjb2RlOiBgJHtURVNUX0xBTkdfQ09ERX0ucnRsYCxcbiAgICAgIGxhYmVsOiBcIlxcdXsyMDJhfXRlc3QgbGFuZ3VhZ2UgKHJ0bClcXHV7MjAyY31cIixcbiAgICAgIHJ0bDogdHJ1ZSxcbiAgICB9LFxuICApO1xufVxuXG5sZXQgY3VycmVudExhbmc6IExhbmd1YWdlID0gZGVmYXVsdExhbmc7XG5sZXQgY3VycmVudExhbmdEYXRhID0ge307XG5cbmV4cG9ydCBjb25zdCBzZXRMYW5ndWFnZSA9IGFzeW5jIChsYW5nOiBMYW5ndWFnZSkgPT4ge1xuICBjdXJyZW50TGFuZyA9IGxhbmc7XG4gIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPSBjdXJyZW50TGFuZy5ydGwgPyBcInJ0bFwiIDogXCJsdHJcIjtcbiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmxhbmcgPSBjdXJyZW50TGFuZy5jb2RlO1xuXG4gIGlmIChsYW5nLmNvZGUuc3RhcnRzV2l0aChURVNUX0xBTkdfQ09ERSkpIHtcbiAgICBjdXJyZW50TGFuZ0RhdGEgPSB7fTtcbiAgfSBlbHNlIHtcbiAgICBjdXJyZW50TGFuZ0RhdGEgPSBhd2FpdCBpbXBvcnQoXG4gICAgICAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImxvY2FsZXMvW3JlcXVlc3RdXCIgKi8gYC4vbG9jYWxlcy8ke2N1cnJlbnRMYW5nLmNvZGV9Lmpzb25gXG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldExhbmd1YWdlID0gKCkgPT4gY3VycmVudExhbmc7XG5cbmNvbnN0IGZpbmRQYXJ0c0ZvckRhdGEgPSAoZGF0YTogYW55LCBwYXJ0czogc3RyaW5nW10pID0+IHtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBhcnRzLmxlbmd0aDsgKytpbmRleCkge1xuICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpbmRleF07XG4gICAgaWYgKGRhdGFbcGFydF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZGF0YSA9IGRhdGFbcGFydF07XG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCB0ID0gKFxuICBwYXRoOiBzdHJpbmcsXG4gIHJlcGxhY2VtZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfSxcbikgPT4ge1xuICBpZiAoY3VycmVudExhbmcuY29kZS5zdGFydHNXaXRoKFRFU1RfTEFOR19DT0RFKSkge1xuICAgIGNvbnN0IG5hbWUgPSByZXBsYWNlbWVudFxuICAgICAgPyBgJHtwYXRofSgke0pTT04uc3RyaW5naWZ5KHJlcGxhY2VtZW50KS5zbGljZSgxLCAtMSl9KWBcbiAgICAgIDogcGF0aDtcbiAgICByZXR1cm4gYFxcdXsyMDJhfVtbJHtuYW1lfV1dXFx1ezIwMmN9YDtcbiAgfVxuXG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi5cIik7XG4gIGxldCB0cmFuc2xhdGlvbiA9XG4gICAgZmluZFBhcnRzRm9yRGF0YShjdXJyZW50TGFuZ0RhdGEsIHBhcnRzKSB8fFxuICAgIGZpbmRQYXJ0c0ZvckRhdGEoZmFsbGJhY2tMYW5nRGF0YSwgcGFydHMpO1xuICBpZiAodHJhbnNsYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgZmluZCB0cmFuc2xhdGlvbiBmb3IgJHtwYXRofWApO1xuICB9XG5cbiAgaWYgKHJlcGxhY2VtZW50KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcmVwbGFjZW1lbnQpIHtcbiAgICAgIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb24ucmVwbGFjZShge3ske2tleX19fWAsIFN0cmluZyhyZXBsYWNlbWVudFtrZXldKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cmFuc2xhdGlvbjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../i18n.ts\n");
3088
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"defaultLang\": () => (/* binding */ defaultLang),\n/* harmony export */ \"getLanguage\": () => (/* binding */ getLanguage),\n/* harmony export */ \"languages\": () => (/* binding */ languages),\n/* harmony export */ \"setLanguage\": () => (/* binding */ setLanguage),\n/* harmony export */ \"t\": () => (/* binding */ t)\n/* harmony export */ });\n/* harmony import */ var _locales_en_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locales/en.json */ \"../../locales/en.json\");\n/* harmony import */ var _locales_percentages_json__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./locales/percentages.json */ \"../../locales/percentages.json\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ \"../../constants.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\nconst COMPLETION_THRESHOLD = 85;\nconst defaultLang = { code: \"en\", label: \"English\" };\nconst allLanguages = [\n { code: \"ar-SA\", label: \"العربية\", rtl: true },\n { code: \"bg-BG\", label: \"Български\" },\n { code: \"ca-ES\", label: \"Català\" },\n { code: \"cs-CZ\", label: \"Česky\" },\n { code: \"de-DE\", label: \"Deutsch\" },\n { code: \"el-GR\", label: \"Ελληνικά\" },\n { code: \"es-ES\", label: \"Español\" },\n { code: \"eu-ES\", label: \"Euskara\" },\n { code: \"fa-IR\", label: \"فارسی\", rtl: true },\n { code: \"fi-FI\", label: \"Suomi\" },\n { code: \"fr-FR\", label: \"Français\" },\n { code: \"he-IL\", label: \"עברית\", rtl: true },\n { code: \"hi-IN\", label: \"हिन्दी\" },\n { code: \"hu-HU\", label: \"Magyar\" },\n { code: \"id-ID\", label: \"Bahasa Indonesia\" },\n { code: \"it-IT\", label: \"Italiano\" },\n { code: \"ja-JP\", label: \"日本語\" },\n { code: \"kab-KAB\", label: \"Taqbaylit\" },\n { code: \"kk-KZ\", label: \"Қазақ тілі\" },\n { code: \"ko-KR\", label: \"한국어\" },\n { code: \"lt-LT\", label: \"Lietuvių\" },\n { code: \"lv-LV\", label: \"Latviešu\" },\n { code: \"my-MM\", label: \"Burmese\" },\n { code: \"nb-NO\", label: \"Norsk bokmål\" },\n { code: \"nl-NL\", label: \"Nederlands\" },\n { code: \"nn-NO\", label: \"Norsk nynorsk\" },\n { code: \"oc-FR\", label: \"Occitan\" },\n { code: \"pa-IN\", label: \"ਪੰਜਾਬੀ\" },\n { code: \"pl-PL\", label: \"Polski\" },\n { code: \"pt-BR\", label: \"Português Brasileiro\" },\n { code: \"pt-PT\", label: \"Português\" },\n { code: \"ro-RO\", label: \"Română\" },\n { code: \"ru-RU\", label: \"Русский\" },\n { code: \"sk-SK\", label: \"Slovenčina\" },\n { code: \"sv-SE\", label: \"Svenska\" },\n { code: \"sl-SI\", label: \"Slovenščina\" },\n { code: \"tr-TR\", label: \"Türkçe\" },\n { code: \"uk-UA\", label: \"Українська\" },\n { code: \"zh-CN\", label: \"简体中文\" },\n { code: \"zh-TW\", label: \"繁體中文\" },\n { code: \"vi-VN\", label: \"Tiếng Việt\" },\n { code: \"mr-IN\", label: \"मराठी\" },\n].concat([defaultLang]);\nconst languages = allLanguages\n .sort((left, right) => (left.label > right.label ? 1 : -1))\n .filter((lang) => _locales_percentages_json__WEBPACK_IMPORTED_MODULE_1__[lang.code] >=\n COMPLETION_THRESHOLD);\nconst TEST_LANG_CODE = \"__test__\";\nif (\"development\" === _constants__WEBPACK_IMPORTED_MODULE_2__.ENV.DEVELOPMENT) {\n languages.unshift({ code: TEST_LANG_CODE, label: \"test language\" }, {\n code: `${TEST_LANG_CODE}.rtl`,\n label: \"\\u{202a}test language (rtl)\\u{202c}\",\n rtl: true,\n });\n}\nlet currentLang = defaultLang;\nlet currentLangData = {};\nconst setLanguage = (lang) => __awaiter(void 0, void 0, void 0, function* () {\n currentLang = lang;\n document.documentElement.dir = currentLang.rtl ? \"rtl\" : \"ltr\";\n document.documentElement.lang = currentLang.code;\n if (lang.code.startsWith(TEST_LANG_CODE)) {\n currentLangData = {};\n }\n else {\n currentLangData = yield __webpack_require__(\"../../locales lazy recursive ^\\\\.\\\\/.*\\\\.json$\")(`./${currentLang.code}.json`);\n }\n});\nconst getLanguage = () => currentLang;\nconst findPartsForData = (data, parts) => {\n for (let index = 0; index < parts.length; ++index) {\n const part = parts[index];\n if (data[part] === undefined) {\n return undefined;\n }\n data = data[part];\n }\n if (typeof data !== \"string\") {\n return undefined;\n }\n return data;\n};\nconst t = (path, replacement) => {\n if (currentLang.code.startsWith(TEST_LANG_CODE)) {\n const name = replacement\n ? `${path}(${JSON.stringify(replacement).slice(1, -1)})`\n : path;\n return `\\u{202a}[[${name}]]\\u{202c}`;\n }\n const parts = path.split(\".\");\n let translation = findPartsForData(currentLangData, parts) ||\n findPartsForData(_locales_en_json__WEBPACK_IMPORTED_MODULE_0__, parts);\n if (translation === undefined) {\n throw new Error(`Can't find translation for ${path}`);\n }\n if (replacement) {\n for (const key in replacement) {\n translation = translation.replace(`{{${key}}}`, String(replacement[key]));\n }\n }\n return translation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QixFQUFFO0lBQ2hELEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO0lBQ3JDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ25DLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO0lBQ3RDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ25DLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO0lBQ3ZDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO0lBQ3RDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0lBQ2hDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0lBQ2hDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO0lBQ3RDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0NBQ2xDLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUVqQixNQUFNLFNBQVMsR0FBZSxZQUFZO0tBQzlDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUQsTUFBTSxDQUNMLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDTixzREFBc0MsQ0FBQyxJQUFJLENBQUMs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T0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0U7S0FDRjtJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9pMThuLnRzPzM4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZhbGxiYWNrTGFuZ0RhdGEgZnJvbSBcIi4vbG9jYWxlcy9lbi5qc29uXCI7XG5pbXBvcnQgcGVyY2VudGFnZXMgZnJvbSBcIi4vbG9jYWxlcy9wZXJjZW50YWdlcy5qc29uXCI7XG5pbXBvcnQgeyBFTlYgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgQ09NUExFVElPTl9USFJFU0hPTEQgPSA4NTtcblxuZXhwb3J0IGludGVyZmFjZSBMYW5ndWFnZSB7XG4gIGNvZGU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgcnRsPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRMYW5nID0geyBjb2RlOiBcImVuXCIsIGxhYmVsOiBcIkVuZ2xpc2hcIiB9O1xuXG5jb25zdCBhbGxMYW5ndWFnZXM6IExhbmd1YWdlW10gPSBbXG4gIHsgY29kZTogXCJhci1TQVwiLCBsYWJlbDogXCLYp9mE2LnYsdio2YrYqVwiLCBydGw6IHRydWUgfSxcbiAgeyBjb2RlOiBcImJnLUJHXCIsIGxhYmVsOiBcItCR0YrQu9Cz0LDRgNGB0LrQuFwiIH0sXG4gIHsgY29kZTogXCJjYS1FU1wiLCBsYWJlbDogXCJDYXRhbMOgXCIgfSxcbiAgeyBjb2RlOiBcImNzLUNaXCIsIGxhYmVsOiBcIsSMZXNreVwiIH0sXG4gIHsgY29kZTogXCJkZS1ERVwiLCBsYWJlbDogXCJEZXV0c2NoXCIgfSxcbiAgeyBjb2RlOiBcImVsLUdSXCIsIGxhYmVsOiBcIs6VzrvOu863zr3Ouc66zqxcIiB9LFxuICB7IGNvZGU6IFwiZXMtRVNcIiwgbGFiZWw6IFwiRXNwYcOxb2xcIiB9LFxuICB7IGNvZGU6IFwiZXUtRVNcIiwgbGFiZWw6IFwiRXVza2FyYVwiIH0sXG4gIHsgY29kZTogXCJmYS1JUlwiLCBsYWJlbDogXCLZgdin2LHYs9uMXCIsIHJ0bDogdHJ1ZSB9LFxuICB7IGNvZGU6IFwiZmktRklcIiwgbGFiZWw6IFwiU3VvbWlcIiB9LFxuICB7IGNvZGU6IFwiZnItRlJcIiwgbGFiZWw6IFwiRnJhbsOnYWlzXCIgfSxcbiAgeyBjb2RlOiBcImhlLUlMXCIsIGxhYmVsOiBcItei15HXqNeZ16pcIiwgcnRsOiB0cnVlIH0sXG4gIHsgY29kZTogXCJoaS1JTlwiLCBsYWJlbDogXCLgpLngpL/gpKjgpY3gpKbgpYBcIiB9LFxuICB7IGNvZGU6IFwiaHUtSFVcIiwgbGFiZWw6IFwiTWFneWFyXCIgfSxcbiAgeyBjb2RlOiBcImlkLUlEXCIsIGxhYmVsOiBcIkJhaGFzYSBJbmRvbmVzaWFcIiB9LFxuICB7IGNvZGU6IFwiaXQtSVRcIiwgbGFiZWw6IFwiSXRhbGlhbm9cIiB9LFxuICB7IGNvZGU6IFwiamEtSlBcIiwgbGFiZWw6IFwi5pel5pys6KqeXCIgfSxcbiAgeyBjb2RlOiBcImthYi1LQUJcIiwgbGFiZWw6IFwiVGFxYmF5bGl0XCIgfSxcbiAgeyBjb2RlOiBcImtrLUtaXCIsIGxhYmVsOiBcItKa0LDQt9Cw0psg0YLRltC70ZZcIiB9LFxuICB7IGNvZGU6IFwia28tS1JcIiwgbGFiZWw6IFwi7ZWc6rWt7Ja0XCIgfSxcbiAgeyBjb2RlOiBcImx0LUxUXCIsIGxhYmVsOiBcIkxpZXR1dmnFs1wiIH0sXG4gIHsgY29kZTogXCJsdi1MVlwiLCBsYWJlbDogXCJMYXR2aWXFoXVcIiB9LFxuICB7IGNvZGU6IFwibXktTU1cIiwgbGFiZWw6IFwiQnVybWVzZVwiIH0sXG4gIHsgY29kZTogXCJuYi1OT1wiLCBsYWJlbDogXCJOb3JzayBib2ttw6VsXCIgfSxcbiAgeyBjb2RlOiBcIm5sLU5MXCIsIGxhYmVsOiBcIk5lZGVybGFuZHNcIiB9LFxuICB7IGNvZGU6IFwibm4tTk9cIiwgbGFiZWw6IFwiTm9yc2sgbnlub3Jza1wiIH0sXG4gIHsgY29kZTogXCJvYy1GUlwiLCBsYWJlbDogXCJPY2NpdGFuXCIgfSxcbiAgeyBjb2RlOiBcInBhLUlOXCIsIGxhYmVsOiBcIuCoquCpsOConOCovuCorOCpgFwiIH0sXG4gIHsgY29kZTogXCJwbC1QTFwiLCBsYWJlbDogXCJQb2xza2lcIiB9LFxuICB7IGNvZGU6IFwicHQtQlJcIiwgbGFiZWw6IFwiUG9ydHVndcOqcyBCcmFzaWxlaXJvXCIgfSxcbiAgeyBjb2RlOiBcInB0LVBUXCIsIGxhYmVsOiBcIlBvcnR1Z3XDqnNcIiB9LFxuICB7IGNvZGU6IFwicm8tUk9cIiwgbGFiZWw6IFwiUm9tw6JuxINcIiB9LFxuICB7IGNvZGU6IFwicnUtUlVcIiwgbGFiZWw6IFwi0KDRg9GB0YHQutC40LlcIiB9LFxuICB7IGNvZGU6IFwic2stU0tcIiwgbGFiZWw6IFwiU2xvdmVuxI1pbmFcIiB9LFxuICB7IGNvZGU6IFwic3YtU0VcIiwgbGFiZWw6IFwiU3ZlbnNrYVwiIH0sXG4gIHsgY29kZTogXCJzbC1TSVwiLCBsYWJlbDogXCJTbG92ZW7FocSNaW5hXCIgfSxcbiAgeyBjb2RlOiBcInRyLVRSXCIsIGxhYmVsOiBcIlTDvHJrw6dlXCIgfSxcbiAgeyBjb2RlOiBcInVrLVVBXCIsIGxhYmVsOiBcItCj0LrRgNCw0ZfQvdGB0YzQutCwXCIgfSxcbiAgeyBjb2RlOiBcInpoLUNOXCIsIGxhYmVsOiBcIueugOS9k+S4reaWh1wiIH0sXG4gIHsgY29kZTogXCJ6aC1UV1wiLCBsYWJlbDogXCLnuYHpq5TkuK3mlodcIiB9LFxuICB7IGNvZGU6IFwidmktVk5cIiwgbGFiZWw6IFwiVGnhur9uZyBWaeG7h3RcIiB9LFxuICB7IGNvZGU6IFwibXItSU5cIiwgbGFiZWw6IFwi4KSu4KSw4KS+4KSg4KWAXCIgfSxcbl0uY29uY2F0KFtkZWZhdWx0TGFuZ10pO1xuXG5leHBvcnQgY29uc3QgbGFuZ3VhZ2VzOiBMYW5ndWFnZVtdID0gYWxsTGFuZ3VhZ2VzXG4gIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gKGxlZnQubGFiZWwgPiByaWdodC5sYWJlbCA/IDEgOiAtMSkpXG4gIC5maWx0ZXIoXG4gICAgKGxhbmcpID0+XG4gICAgICAocGVyY2VudGFnZXMgYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPilbbGFuZy5jb2RlXSA+PVxuICAgICAgQ09NUExFVElPTl9USFJFU0hPTEQsXG4gICk7XG5cbmNvbnN0IFRFU1RfTEFOR19DT0RFID0gXCJfX3Rlc3RfX1wiO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBFTlYuREVWRUxPUE1FTlQpIHtcbiAgbGFuZ3VhZ2VzLnVuc2hpZnQoXG4gICAgeyBjb2RlOiBURVNUX0xBTkdfQ09ERSwgbGFiZWw6IFwidGVzdCBsYW5ndWFnZVwiIH0sXG4gICAge1xuICAgICAgY29kZTogYCR7VEVTVF9MQU5HX0NPREV9LnJ0bGAsXG4gICAgICBsYWJlbDogXCJcXHV7MjAyYX10ZXN0IGxhbmd1YWdlIChydGwpXFx1ezIwMmN9XCIsXG4gICAgICBydGw6IHRydWUsXG4gICAgfSxcbiAgKTtcbn1cblxubGV0IGN1cnJlbnRMYW5nOiBMYW5ndWFnZSA9IGRlZmF1bHRMYW5nO1xubGV0IGN1cnJlbnRMYW5nRGF0YSA9IHt9O1xuXG5leHBvcnQgY29uc3Qgc2V0TGFuZ3VhZ2UgPSBhc3luYyAobGFuZzogTGFuZ3VhZ2UpID0+IHtcbiAgY3VycmVudExhbmcgPSBsYW5nO1xuICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGlyID0gY3VycmVudExhbmcucnRsID8gXCJydGxcIiA6IFwibHRyXCI7XG4gIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5sYW5nID0gY3VycmVudExhbmcuY29kZTtcblxuICBpZiAobGFuZy5jb2RlLnN0YXJ0c1dpdGgoVEVTVF9MQU5HX0NPREUpKSB7XG4gICAgY3VycmVudExhbmdEYXRhID0ge307XG4gIH0gZWxzZSB7XG4gICAgY3VycmVudExhbmdEYXRhID0gYXdhaXQgaW1wb3J0KFxuICAgICAgLyogd2VicGFja0NodW5rTmFtZTogXCJsb2NhbGVzL1tyZXF1ZXN0XVwiICovIGAuL2xvY2FsZXMvJHtjdXJyZW50TGFuZy5jb2RlfS5qc29uYFxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMYW5ndWFnZSA9ICgpID0+IGN1cnJlbnRMYW5nO1xuXG5jb25zdCBmaW5kUGFydHNGb3JEYXRhID0gKGRhdGE6IGFueSwgcGFydHM6IHN0cmluZ1tdKSA9PiB7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0cy5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFydHNbaW5kZXhdO1xuICAgIGlmIChkYXRhW3BhcnRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGRhdGEgPSBkYXRhW3BhcnRdO1xuICB9XG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgdCA9IChcbiAgcGF0aDogc3RyaW5nLFxuICByZXBsYWNlbWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH0sXG4pID0+IHtcbiAgaWYgKGN1cnJlbnRMYW5nLmNvZGUuc3RhcnRzV2l0aChURVNUX0xBTkdfQ09ERSkpIHtcbiAgICBjb25zdCBuYW1lID0gcmVwbGFjZW1lbnRcbiAgICAgID8gYCR7cGF0aH0oJHtKU09OLnN0cmluZ2lmeShyZXBsYWNlbWVudCkuc2xpY2UoMSwgLTEpfSlgXG4gICAgICA6IHBhdGg7XG4gICAgcmV0dXJuIGBcXHV7MjAyYX1bWyR7bmFtZX1dXVxcdXsyMDJjfWA7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICBsZXQgdHJhbnNsYXRpb24gPVxuICAgIGZpbmRQYXJ0c0ZvckRhdGEoY3VycmVudExhbmdEYXRhLCBwYXJ0cykgfHxcbiAgICBmaW5kUGFydHNGb3JEYXRhKGZhbGxiYWNrTGFuZ0RhdGEsIHBhcnRzKTtcbiAgaWYgKHRyYW5zbGF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGZpbmQgdHJhbnNsYXRpb24gZm9yICR7cGF0aH1gKTtcbiAgfVxuXG4gIGlmIChyZXBsYWNlbWVudCkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHJlcGxhY2VtZW50KSB7XG4gICAgICB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uLnJlcGxhY2UoYHt7JHtrZXl9fX1gLCBTdHJpbmcocmVwbGFjZW1lbnRba2V5XSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJhbnNsYXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../i18n.ts\n");
3100
3089
 
3101
3090
  /***/ }),
3102
3091
 
@@ -3162,7 +3151,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3162
3151
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3163
3152
 
3164
3153
  "use strict";
3165
- 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.12.0-57cc4b6\"}/dist/`;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDO0FBQ3RDLElBQUksYUFBb0IsS0FBSyxnREFBUSxFQUFFO0lBQ3JDLG9CQUFvQjtJQUNwQiw2Q0FBNkM7SUFDN0MscUJBQXVCO1FBQ3JCLE1BQU0sQ0FBQyxxQkFBcUI7WUFDNUIscUJBQXFCLHdCQUFvQixJQUFJLGdCQUF1QixRQUFRLENBQUM7Q0FDaEYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9wdWJsaWNQYXRoLmpzP2E4N2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5WIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuVEVTVCkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAvKiBnbG9iYWwgX193ZWJwYWNrX3B1YmxpY19wYXRoX186d3JpdGFibGUgKi9cbiAgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gPVxuICAgIHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHxcbiAgICBgaHR0cHM6Ly91bnBrZy5jb20vJHtwcm9jZXNzLmVudi5QS0dfTkFNRX1AJHtwcm9jZXNzLmVudi5QS0dfVkVSU0lPTn0vZGlzdC9gO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./publicPath.js\n");
3154
+ 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.12.0-58845e4\"}/dist/`;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDO0FBQ3RDLElBQUksYUFBb0IsS0FBSyxnREFBUSxFQUFFO0lBQ3JDLG9CQUFvQjtJQUNwQiw2Q0FBNkM7SUFDN0MscUJBQXVCO1FBQ3JCLE1BQU0sQ0FBQyxxQkFBcUI7WUFDNUIscUJBQXFCLHdCQUFvQixJQUFJLGdCQUF1QixRQUFRLENBQUM7Q0FDaEYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9wdWJsaWNQYXRoLmpzP2E4N2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5WIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuVEVTVCkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAvKiBnbG9iYWwgX193ZWJwYWNrX3B1YmxpY19wYXRoX186d3JpdGFibGUgKi9cbiAgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gPVxuICAgIHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHxcbiAgICBgaHR0cHM6Ly91bnBrZy5jb20vJHtwcm9jZXNzLmVudi5QS0dfTkFNRX1AJHtwcm9jZXNzLmVudi5QS0dfVkVSU0lPTn0vZGlzdC9gO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./publicPath.js\n");
3166
3155
 
3167
3156
  /***/ }),
3168
3157
 
@@ -3261,7 +3250,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3261
3250
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3262
3251
 
3263
3252
  "use strict";
3264
- 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\");\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\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 (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderScene)(elements, appState, null, scale, roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas), canvas, {\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\n scrollX: -minX + exportPadding,\n scrollY: -minY + 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 return canvas;\n});\nconst exportToSvg = (elements, appState, files) => __awaiter(void 0, void 0, void 0, function* () {\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: (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.12.0-57cc4b6\"}`;\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 svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style>\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 </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: -minX + exportPadding,\n offsetY: -minY + exportPadding,\n exportWithDarkMode: appState.exportWithDarkMode,\n });\n return svgRoot;\n});\n// calculate smallest area to fit the contents in\nconst getCanvasSize = (elements, exportPadding) => {\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) + exportPadding * 2;\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + exportPadding + exportPadding;\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vc2NlbmUvZXhwb3J0LnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFzQztBQUVjO0FBQ29CO0FBQ3BDO0FBRXdDO0FBQzNCO0FBQ0Y7QUFJckI7QUFFbkIsTUFBTSxjQUFjLEdBQUcsZ0NBQWdDLENBQUM7QUFFeEQsTUFBTSxjQUFjLEdBQUcsQ0FDNUIsUUFBZ0QsRUFDaEQsUUFBa0IsRUFDbEIsS0FBa0IsRUFDbEIsRUFDRSxnQkFBZ0IsRUFDaEIsYUFBYSxHQUFHLDhEQUFzQixFQUN0QyxtQkFBbUIsR0FLcEIsRUFDRCxlQUdvRCxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtJQUNwRSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDNUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUM5QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQsQ0FBQyxFQUNELEVBQUU7SUFDRixNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUUzRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTFELE1BQU0sZUFBZSxHQUFHLDZEQUFrQixFQUFFLENBQUM7SUFFN0MsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sZ0VBQWdCLENBQUM7UUFDNUMsVUFBVSxFQUFFLElBQUksR0FBRyxFQUFFO1FBQ3JCLE9BQU8sRUFBRSwyRUFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQ2hELENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUM1QjtRQUNELEtBQUs7S0FDTixDQUFDLENBQUM7SUFFSCxrRUFBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxnRUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRTtRQUN6RSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDbEUsT0FBTyxFQUFFLENBQUMsSUFBSSxHQUFHLGFBQWE7UUFDOUIsT0FBTyxFQUFFLENBQUMsSUFBSSxHQUFHLGFBQWE7UUFDOUIsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJO1FBQzFCLDJCQUEyQixFQUFFLEVBQUU7UUFDL0Isd0JBQXdCLEVBQUUsRUFBRTtRQUM1QixxQkFBcUIsRUFBRSxLQUFLO1FBQzVCLHNCQUFzQixFQUFFLEVBQUU7UUFDMUIsdUJBQXVCLEVBQUUsRUFBRTtRQUMzQixLQUFLLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU87UUFDckQsVUFBVTtRQUNWLGdCQUFnQixFQUFFLEtBQUs7UUFDdkIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsVUFBVSxFQUFFLEtBQUs7UUFDakIsV0FBVyxFQUFFLElBQUk7S0FDbEIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxFQUFDO0FBRUssTUFBTSxXQUFXLEdBQUcsQ0FDekIsUUFBZ0QsRUFDaEQsUUFPQyxFQUNELEtBQXlCLEVBQ0QsRUFBRTtJQUMxQixNQUFNLEVBQ0osYUFBYSxHQUFHLDhEQUFzQixFQUN0QyxtQkFBbUIsRUFDbkIsV0FBVyxHQUFHLENBQUMsRUFDZixnQkFBZ0IsR0FDakIsR0FBRyxRQUFRLENBQUM7SUFDYixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDbEIsSUFBSSxnQkFBZ0IsRUFBRTtRQUNwQixJQUFJO1lBQ0YsUUFBUSxHQUFHLE1BQU0sQ0FDZixNQUFNLHVJQUE4RCxDQUNyRSxDQUFDLGlCQUFpQixDQUFDO2dCQUNsQixJQUFJLEVBQUUsMkRBQWUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDO2FBQ2hFLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxLQUFVLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QjtLQUNGO0lBQ0QsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFFM0Usc0JBQXNCO0lBQ3RCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsOENBQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RCxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSw4Q0FBTSxDQUFDLENBQUM7SUFDdEMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsT0FBTyxLQUFLLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMxRCxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssR0FBRyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE9BQU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDMUQsSUFBSSxRQUFRLENBQUMsa0JBQWtCLEVBQUU7UUFDL0IsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsb0RBQVksQ0FBQyxDQUFDO0tBQzlDO0lBRUQsSUFBSSxTQUFTLEdBQUcseUJBQXlCLENBQUM7SUFFMUMsNERBQTREO0lBQzVELElBQUksSUFBcUMsRUFBRTtRQUN6QyxTQUFTO1lBQ1AsTUFBTSxDQUFDLHFCQUFxQjtnQkFDNUIscUJBQXFCLHdCQUFvQixJQUFJLGdCQUF1QixFQUFFLENBQUM7UUFFekUsSUFBSSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUNsRTtRQUNELFNBQVMsR0FBRyxHQUFHLFNBQVMsMEJBQTBCLENBQUM7S0FDcEQ7SUFDRCxPQUFPLENBQUMsU0FBUyxHQUFHO0lBQ2xCLGNBQWM7SUFDZCxRQUFROzs7OztvQkFLUSxTQUFTOzs7O29CQUlULFNBQVM7Ozs7R0FJMUIsQ0FBQztJQUNGLHlCQUF5QjtJQUN6QixJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxtQkFBbUIsRUFBRTtRQUNwRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsYUFBYyxDQUFDLGVBQWUsQ0FBQyw4Q0FBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUMvQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzNCO0lBRUQsTUFBTSxJQUFJLEdBQUcsNkRBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyx1RUFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFO1FBQ3JELE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxhQUFhO1FBQzlCLE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxhQUFhO1FBQzlCLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7S0FDaEQsQ0FBQyxDQUFDO0lBRUgsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxFQUFDO0FBRUYsaURBQWlEO0FBQ2pELE1BQU0sYUFBYSxHQUFHLENBQ3BCLFFBQWdELEVBQ2hELGFBQXFCLEVBQ2EsRUFBRTtJQUNwQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsZ0VBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzRCxNQUFNLEtBQUssR0FBRyxnREFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sTUFBTSxHQUFHLGdEQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFFcEUsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVLLE1BQU0sYUFBYSxHQUFHLENBQzNCLFFBQWdELEVBQ2hELGFBQXFCLEVBQ3JCLEtBQWEsRUFDSyxFQUFFO0lBQ3BCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUNwRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQzdDLENBQUM7SUFFRixPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9zY2VuZS9leHBvcnQudHM/OWJmNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcm91Z2ggZnJvbSBcInJvdWdoanMvYmluL3JvdWdoXCI7XG5pbXBvcnQgeyBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0Q29tbW9uQm91bmRzIH0gZnJvbSBcIi4uL2VsZW1lbnQvYm91bmRzXCI7XG5pbXBvcnQgeyByZW5kZXJTY2VuZSwgcmVuZGVyU2NlbmVUb1N2ZyB9IGZyb20gXCIuLi9yZW5kZXJlci9yZW5kZXJTY2VuZVwiO1xuaW1wb3J0IHsgZGlzdGFuY2UgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IEFwcFN0YXRlLCBCaW5hcnlGaWxlcyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgREVGQVVMVF9FWFBPUlRfUEFERElORywgU1ZHX05TLCBUSEVNRV9GSUxURVIgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0QXBwU3RhdGUgfSBmcm9tIFwiLi4vYXBwU3RhdGVcIjtcbmltcG9ydCB7IHNlcmlhbGl6ZUFzSlNPTiB9IGZyb20gXCIuLi9kYXRhL2pzb25cIjtcbmltcG9ydCB7XG4gIGdldEluaXRpYWxpemVkSW1hZ2VFbGVtZW50cyxcbiAgdXBkYXRlSW1hZ2VDYWNoZSxcbn0gZnJvbSBcIi4uL2VsZW1lbnQvaW1hZ2VcIjtcblxuZXhwb3J0IGNvbnN0IFNWR19FWFBPUlRfVEFHID0gYDwhLS0gc3ZnLXNvdXJjZTpleGNhbGlkcmF3IC0tPmA7XG5cbmV4cG9ydCBjb25zdCBleHBvcnRUb0NhbnZhcyA9IGFzeW5jIChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4gIGZpbGVzOiBCaW5hcnlGaWxlcyxcbiAge1xuICAgIGV4cG9ydEJhY2tncm91bmQsXG4gICAgZXhwb3J0UGFkZGluZyA9IERFRkFVTFRfRVhQT1JUX1BBRERJTkcsXG4gICAgdmlld0JhY2tncm91bmRDb2xvcixcbiAgfToge1xuICAgIGV4cG9ydEJhY2tncm91bmQ6IGJvb2xlYW47XG4gICAgZXhwb3J0UGFkZGluZz86IG51bWJlcjtcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gIH0sXG4gIGNyZWF0ZUNhbnZhczogKFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICkgPT4geyBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50OyBzY2FsZTogbnVtYmVyIH0gPSAod2lkdGgsIGhlaWdodCkgPT4ge1xuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgY2FudmFzLndpZHRoID0gd2lkdGggKiBhcHBTdGF0ZS5leHBvcnRTY2FsZTtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogYXBwU3RhdGUuZXhwb3J0U2NhbGU7XG4gICAgcmV0dXJuIHsgY2FudmFzLCBzY2FsZTogYXBwU3RhdGUuZXhwb3J0U2NhbGUgfTtcbiAgfSxcbikgPT4ge1xuICBjb25zdCBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF0gPSBnZXRDYW52YXNTaXplKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKTtcblxuICBjb25zdCB7IGNhbnZhcywgc2NhbGUgPSAxIH0gPSBjcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCk7XG5cbiAgY29uc3QgZGVmYXVsdEFwcFN0YXRlID0gZ2V0RGVmYXVsdEFwcFN0YXRlKCk7XG5cbiAgY29uc3QgeyBpbWFnZUNhY2hlIH0gPSBhd2FpdCB1cGRhdGVJbWFnZUNhY2hlKHtcbiAgICBpbWFnZUNhY2hlOiBuZXcgTWFwKCksXG4gICAgZmlsZUlkczogZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzKGVsZW1lbnRzKS5tYXAoXG4gICAgICAoZWxlbWVudCkgPT4gZWxlbWVudC5maWxlSWQsXG4gICAgKSxcbiAgICBmaWxlcyxcbiAgfSk7XG5cbiAgcmVuZGVyU2NlbmUoZWxlbWVudHMsIGFwcFN0YXRlLCBudWxsLCBzY2FsZSwgcm91Z2guY2FudmFzKGNhbnZhcyksIGNhbnZhcywge1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IGV4cG9ydEJhY2tncm91bmQgPyB2aWV3QmFja2dyb3VuZENvbG9yIDogbnVsbCxcbiAgICBzY3JvbGxYOiAtbWluWCArIGV4cG9ydFBhZGRpbmcsXG4gICAgc2Nyb2xsWTogLW1pblkgKyBleHBvcnRQYWRkaW5nLFxuICAgIHpvb206IGRlZmF1bHRBcHBTdGF0ZS56b29tLFxuICAgIHJlbW90ZVBvaW50ZXJWaWV3cG9ydENvb3Jkczoge30sXG4gICAgcmVtb3RlU2VsZWN0ZWRFbGVtZW50SWRzOiB7fSxcbiAgICBzaG91bGRDYWNoZUlnbm9yZVpvb206IGZhbHNlLFxuICAgIHJlbW90ZVBvaW50ZXJVc2VybmFtZXM6IHt9LFxuICAgIHJlbW90ZVBvaW50ZXJVc2VyU3RhdGVzOiB7fSxcbiAgICB0aGVtZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlID8gXCJkYXJrXCIgOiBcImxpZ2h0XCIsXG4gICAgaW1hZ2VDYWNoZSxcbiAgICByZW5kZXJTY3JvbGxiYXJzOiBmYWxzZSxcbiAgICByZW5kZXJTZWxlY3Rpb246IGZhbHNlLFxuICAgIHJlbmRlckdyaWQ6IGZhbHNlLFxuICAgIGlzRXhwb3J0aW5nOiB0cnVlLFxuICB9KTtcblxuICByZXR1cm4gY2FudmFzO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvU3ZnID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIGV4cG9ydFNjYWxlPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBleHBvcnRXaXRoRGFya01vZGU/OiBib29sZWFuO1xuICAgIGV4cG9ydEVtYmVkU2NlbmU/OiBib29sZWFuO1xuICB9LFxuICBmaWxlczogQmluYXJ5RmlsZXMgfCBudWxsLFxuKTogUHJvbWlzZTxTVkdTVkdFbGVtZW50PiA9PiB7XG4gIGNvbnN0IHtcbiAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICAgIGV4cG9ydFNjYWxlID0gMSxcbiAgICBleHBvcnRFbWJlZFNjZW5lLFxuICB9ID0gYXBwU3RhdGU7XG4gIGxldCBtZXRhZGF0YSA9IFwiXCI7XG4gIGlmIChleHBvcnRFbWJlZFNjZW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIG1ldGFkYXRhID0gYXdhaXQgKFxuICAgICAgICBhd2FpdCBpbXBvcnQoLyogd2VicGFja0NodW5rTmFtZTogXCJpbWFnZVwiICovIFwiLi4vLi4vc3JjL2RhdGEvaW1hZ2VcIilcbiAgICAgICkuZW5jb2RlU3ZnTWV0YWRhdGEoe1xuICAgICAgICB0ZXh0OiBzZXJpYWxpemVBc0pTT04oZWxlbWVudHMsIGFwcFN0YXRlLCBmaWxlcyB8fCB7fSwgXCJsb2NhbFwiKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuICBjb25zdCBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF0gPSBnZXRDYW52YXNTaXplKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKTtcblxuICAvLyBpbml0aWFsaXplIFNWRyByb290XG4gIGNvbnN0IHN2Z1Jvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCBcInN2Z1wiKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ2ZXJzaW9uXCIsIFwiMS4xXCIpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInhtbG5zXCIsIFNWR19OUyk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwidmlld0JveFwiLCBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWApO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRoICogZXhwb3J0U2NhbGV9YCk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodCAqIGV4cG9ydFNjYWxlfWApO1xuICBpZiAoYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlKSB7XG4gICAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJmaWx0ZXJcIiwgVEhFTUVfRklMVEVSKTtcbiAgfVxuXG4gIGxldCBhc3NldFBhdGggPSBcImh0dHBzOi8vZXhjYWxpZHJhdy5jb20vXCI7XG5cbiAgLy8gQXNzZXQgcGF0aCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIG9ubHkgd2hlbiB1c2luZyBwYWNrYWdlXG4gIGlmIChwcm9jZXNzLmVudi5JU19FWENBTElEUkFXX05QTV9QQUNLQUdFKSB7XG4gICAgYXNzZXRQYXRoID1cbiAgICAgIHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHxcbiAgICAgIGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlBLR19OQU1FfUAke3Byb2Nlc3MuZW52LlBLR19WRVJTSU9OfWA7XG5cbiAgICBpZiAoYXNzZXRQYXRoPy5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgYXNzZXRQYXRoID0gYXNzZXRQYXRoLnJlcGxhY2UoXCIvXCIsIGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2ApO1xuICAgIH1cbiAgICBhc3NldFBhdGggPSBgJHthc3NldFBhdGh9L2Rpc3QvZXhjYWxpZHJhdy1hc3NldHMvYDtcbiAgfVxuICBzdmdSb290LmlubmVySFRNTCA9IGBcbiAgJHtTVkdfRVhQT1JUX1RBR31cbiAgJHttZXRhZGF0YX1cbiAgPGRlZnM+XG4gICAgPHN0eWxlPlxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlZpcmdpbFwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofVZpcmdpbC53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCJDYXNjYWRpYVwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofUNhc2NhZGlhLndvZmYyXCIpO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvZGVmcz5cbiAgYDtcbiAgLy8gcmVuZGVyIGJhY2tncm91bmQgcmVjdFxuICBpZiAoYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCAmJiB2aWV3QmFja2dyb3VuZENvbG9yKSB7XG4gICAgY29uc3QgcmVjdCA9IHN2Z1Jvb3Qub3duZXJEb2N1bWVudCEuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHMsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WDogLW1pblggKyBleHBvcnRQYWRkaW5nLFxuICAgIG9mZnNldFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICBleHBvcnRXaXRoRGFya01vZGU6IGFwcFN0YXRlLmV4cG9ydFdpdGhEYXJrTW9kZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHN2Z1Jvb3Q7XG59O1xuXG4vLyBjYWxjdWxhdGUgc21hbGxlc3QgYXJlYSB0byBmaXQgdGhlIGNvbnRlbnRzIGluXG5jb25zdCBnZXRDYW52YXNTaXplID0gKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGV4cG9ydFBhZGRpbmc6IG51bWJlcixcbik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgW21pblgsIG1pblksIG1heFgsIG1heFldID0gZ2V0Q29tbW9uQm91bmRzKGVsZW1lbnRzKTtcbiAgY29uc3Qgd2lkdGggPSBkaXN0YW5jZShtaW5YLCBtYXhYKSArIGV4cG9ydFBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBkaXN0YW5jZShtaW5ZLCBtYXhZKSArIGV4cG9ydFBhZGRpbmcgKyBleHBvcnRQYWRkaW5nO1xuXG4gIHJldHVybiBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwb3J0U2l6ZSA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBleHBvcnRQYWRkaW5nOiBudW1iZXIsXG4gIHNjYWxlOiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgWywgLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpLm1hcChcbiAgICAoZGltZW5zaW9uKSA9PiBNYXRoLnRydW5jKGRpbWVuc2lvbiAqIHNjYWxlKSxcbiAgKTtcblxuICByZXR1cm4gW3dpZHRoLCBoZWlnaHRdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
3253
+ 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\");\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\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 (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_2__.renderScene)(elements, appState, null, scale, roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_0__[\"default\"].canvas(canvas), canvas, {\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\n scrollX: -minX + exportPadding,\n scrollY: -minY + 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 return canvas;\n});\nconst exportToSvg = (elements, appState, files) => __awaiter(void 0, void 0, void 0, function* () {\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: (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.12.0-58845e4\"}`;\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 svgRoot.innerHTML = `\n ${SVG_EXPORT_TAG}\n ${metadata}\n <defs>\n <style>\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 </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: -minX + exportPadding,\n offsetY: -minY + exportPadding,\n exportWithDarkMode: appState.exportWithDarkMode,\n });\n return svgRoot;\n});\n// calculate smallest area to fit the contents in\nconst getCanvasSize = (elements, exportPadding) => {\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) + exportPadding * 2;\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.distance)(minY, maxY) + exportPadding + exportPadding;\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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azovLy8uLi8uLi9zY2VuZS9leHBvcnQudHM/OWJmNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcm91Z2ggZnJvbSBcInJvdWdoanMvYmluL3JvdWdoXCI7XG5pbXBvcnQgeyBOb25EZWxldGVkRXhjYWxpZHJhd0VsZW1lbnQgfSBmcm9tIFwiLi4vZWxlbWVudC90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0Q29tbW9uQm91bmRzIH0gZnJvbSBcIi4uL2VsZW1lbnQvYm91bmRzXCI7XG5pbXBvcnQgeyByZW5kZXJTY2VuZSwgcmVuZGVyU2NlbmVUb1N2ZyB9IGZyb20gXCIuLi9yZW5kZXJlci9yZW5kZXJTY2VuZVwiO1xuaW1wb3J0IHsgZGlzdGFuY2UgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IEFwcFN0YXRlLCBCaW5hcnlGaWxlcyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgREVGQVVMVF9FWFBPUlRfUEFERElORywgU1ZHX05TLCBUSEVNRV9GSUxURVIgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0QXBwU3RhdGUgfSBmcm9tIFwiLi4vYXBwU3RhdGVcIjtcbmltcG9ydCB7IHNlcmlhbGl6ZUFzSlNPTiB9IGZyb20gXCIuLi9kYXRhL2pzb25cIjtcbmltcG9ydCB7XG4gIGdldEluaXRpYWxpemVkSW1hZ2VFbGVtZW50cyxcbiAgdXBkYXRlSW1hZ2VDYWNoZSxcbn0gZnJvbSBcIi4uL2VsZW1lbnQvaW1hZ2VcIjtcblxuZXhwb3J0IGNvbnN0IFNWR19FWFBPUlRfVEFHID0gYDwhLS0gc3ZnLXNvdXJjZTpleGNhbGlkcmF3IC0tPmA7XG5cbmV4cG9ydCBjb25zdCBleHBvcnRUb0NhbnZhcyA9IGFzeW5jIChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4gIGZpbGVzOiBCaW5hcnlGaWxlcyxcbiAge1xuICAgIGV4cG9ydEJhY2tncm91bmQsXG4gICAgZXhwb3J0UGFkZGluZyA9IERFRkFVTFRfRVhQT1JUX1BBRERJTkcsXG4gICAgdmlld0JhY2tncm91bmRDb2xvcixcbiAgfToge1xuICAgIGV4cG9ydEJhY2tncm91bmQ6IGJvb2xlYW47XG4gICAgZXhwb3J0UGFkZGluZz86IG51bWJlcjtcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gIH0sXG4gIGNyZWF0ZUNhbnZhczogKFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICkgPT4geyBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50OyBzY2FsZTogbnVtYmVyIH0gPSAod2lkdGgsIGhlaWdodCkgPT4ge1xuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgY2FudmFzLndpZHRoID0gd2lkdGggKiBhcHBTdGF0ZS5leHBvcnRTY2FsZTtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogYXBwU3RhdGUuZXhwb3J0U2NhbGU7XG4gICAgcmV0dXJuIHsgY2FudmFzLCBzY2FsZTogYXBwU3RhdGUuZXhwb3J0U2NhbGUgfTtcbiAgfSxcbikgPT4ge1xuICBjb25zdCBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF0gPSBnZXRDYW52YXNTaXplKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKTtcblxuICBjb25zdCB7IGNhbnZhcywgc2NhbGUgPSAxIH0gPSBjcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCk7XG5cbiAgY29uc3QgZGVmYXVsdEFwcFN0YXRlID0gZ2V0RGVmYXVsdEFwcFN0YXRlKCk7XG5cbiAgY29uc3QgeyBpbWFnZUNhY2hlIH0gPSBhd2FpdCB1cGRhdGVJbWFnZUNhY2hlKHtcbiAgICBpbWFnZUNhY2hlOiBuZXcgTWFwKCksXG4gICAgZmlsZUlkczogZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzKGVsZW1lbnRzKS5tYXAoXG4gICAgICAoZWxlbWVudCkgPT4gZWxlbWVudC5maWxlSWQsXG4gICAgKSxcbiAgICBmaWxlcyxcbiAgfSk7XG5cbiAgcmVuZGVyU2NlbmUoZWxlbWVudHMsIGFwcFN0YXRlLCBudWxsLCBzY2FsZSwgcm91Z2guY2FudmFzKGNhbnZhcyksIGNhbnZhcywge1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IGV4cG9ydEJhY2tncm91bmQgPyB2aWV3QmFja2dyb3VuZENvbG9yIDogbnVsbCxcbiAgICBzY3JvbGxYOiAtbWluWCArIGV4cG9ydFBhZGRpbmcsXG4gICAgc2Nyb2xsWTogLW1pblkgKyBleHBvcnRQYWRkaW5nLFxuICAgIHpvb206IGRlZmF1bHRBcHBTdGF0ZS56b29tLFxuICAgIHJlbW90ZVBvaW50ZXJWaWV3cG9ydENvb3Jkczoge30sXG4gICAgcmVtb3RlU2VsZWN0ZWRFbGVtZW50SWRzOiB7fSxcbiAgICBzaG91bGRDYWNoZUlnbm9yZVpvb206IGZhbHNlLFxuICAgIHJlbW90ZVBvaW50ZXJVc2VybmFtZXM6IHt9LFxuICAgIHJlbW90ZVBvaW50ZXJVc2VyU3RhdGVzOiB7fSxcbiAgICB0aGVtZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlID8gXCJkYXJrXCIgOiBcImxpZ2h0XCIsXG4gICAgaW1hZ2VDYWNoZSxcbiAgICByZW5kZXJTY3JvbGxiYXJzOiBmYWxzZSxcbiAgICByZW5kZXJTZWxlY3Rpb246IGZhbHNlLFxuICAgIHJlbmRlckdyaWQ6IGZhbHNlLFxuICAgIGlzRXhwb3J0aW5nOiB0cnVlLFxuICB9KTtcblxuICByZXR1cm4gY2FudmFzO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvU3ZnID0gYXN5bmMgKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGFwcFN0YXRlOiB7XG4gICAgZXhwb3J0QmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICBleHBvcnRQYWRkaW5nPzogbnVtYmVyO1xuICAgIGV4cG9ydFNjYWxlPzogbnVtYmVyO1xuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBleHBvcnRXaXRoRGFya01vZGU/OiBib29sZWFuO1xuICAgIGV4cG9ydEVtYmVkU2NlbmU/OiBib29sZWFuO1xuICB9LFxuICBmaWxlczogQmluYXJ5RmlsZXMgfCBudWxsLFxuKTogUHJvbWlzZTxTVkdTVkdFbGVtZW50PiA9PiB7XG4gIGNvbnN0IHtcbiAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yLFxuICAgIGV4cG9ydFNjYWxlID0gMSxcbiAgICBleHBvcnRFbWJlZFNjZW5lLFxuICB9ID0gYXBwU3RhdGU7XG4gIGxldCBtZXRhZGF0YSA9IFwiXCI7XG4gIGlmIChleHBvcnRFbWJlZFNjZW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIG1ldGFkYXRhID0gYXdhaXQgKFxuICAgICAgICBhd2FpdCBpbXBvcnQoLyogd2VicGFja0NodW5rTmFtZTogXCJpbWFnZVwiICovIFwiLi4vLi4vc3JjL2RhdGEvaW1hZ2VcIilcbiAgICAgICkuZW5jb2RlU3ZnTWV0YWRhdGEoe1xuICAgICAgICB0ZXh0OiBzZXJpYWxpemVBc0pTT04oZWxlbWVudHMsIGFwcFN0YXRlLCBmaWxlcyB8fCB7fSwgXCJsb2NhbFwiKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuICBjb25zdCBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF0gPSBnZXRDYW52YXNTaXplKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKTtcblxuICAvLyBpbml0aWFsaXplIFNWRyByb290XG4gIGNvbnN0IHN2Z1Jvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCBcInN2Z1wiKTtcbiAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ2ZXJzaW9uXCIsIFwiMS4xXCIpO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcInhtbG5zXCIsIFNWR19OUyk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwidmlld0JveFwiLCBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWApO1xuICBzdmdSb290LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRoICogZXhwb3J0U2NhbGV9YCk7XG4gIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodCAqIGV4cG9ydFNjYWxlfWApO1xuICBpZiAoYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlKSB7XG4gICAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJmaWx0ZXJcIiwgVEhFTUVfRklMVEVSKTtcbiAgfVxuXG4gIGxldCBhc3NldFBhdGggPSBcImh0dHBzOi8vZXhjYWxpZHJhdy5jb20vXCI7XG5cbiAgLy8gQXNzZXQgcGF0aCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIG9ubHkgd2hlbiB1c2luZyBwYWNrYWdlXG4gIGlmIChwcm9jZXNzLmVudi5JU19FWENBTElEUkFXX05QTV9QQUNLQUdFKSB7XG4gICAgYXNzZXRQYXRoID1cbiAgICAgIHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHxcbiAgICAgIGBodHRwczovL3VucGtnLmNvbS8ke3Byb2Nlc3MuZW52LlBLR19OQU1FfUAke3Byb2Nlc3MuZW52LlBLR19WRVJTSU9OfWA7XG5cbiAgICBpZiAoYXNzZXRQYXRoPy5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgYXNzZXRQYXRoID0gYXNzZXRQYXRoLnJlcGxhY2UoXCIvXCIsIGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2ApO1xuICAgIH1cbiAgICBhc3NldFBhdGggPSBgJHthc3NldFBhdGh9L2Rpc3QvZXhjYWxpZHJhdy1hc3NldHMvYDtcbiAgfVxuICBzdmdSb290LmlubmVySFRNTCA9IGBcbiAgJHtTVkdfRVhQT1JUX1RBR31cbiAgJHttZXRhZGF0YX1cbiAgPGRlZnM+XG4gICAgPHN0eWxlPlxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlZpcmdpbFwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofVZpcmdpbC53b2ZmMlwiKTtcbiAgICAgIH1cbiAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICBmb250LWZhbWlseTogXCJDYXNjYWRpYVwiO1xuICAgICAgICBzcmM6IHVybChcIiR7YXNzZXRQYXRofUNhc2NhZGlhLndvZmYyXCIpO1xuICAgICAgfVxuICAgIDwvc3R5bGU+XG4gIDwvZGVmcz5cbiAgYDtcbiAgLy8gcmVuZGVyIGJhY2tncm91bmQgcmVjdFxuICBpZiAoYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCAmJiB2aWV3QmFja2dyb3VuZENvbG9yKSB7XG4gICAgY29uc3QgcmVjdCA9IHN2Z1Jvb3Qub3duZXJEb2N1bWVudCEuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJyZWN0XCIpO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ5XCIsIFwiMFwiKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZShcImZpbGxcIiwgdmlld0JhY2tncm91bmRDb2xvcik7XG4gICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChyZWN0KTtcbiAgfVxuXG4gIGNvbnN0IHJzdmcgPSByb3VnaC5zdmcoc3ZnUm9vdCk7XG4gIHJlbmRlclNjZW5lVG9TdmcoZWxlbWVudHMsIHJzdmcsIHN2Z1Jvb3QsIGZpbGVzIHx8IHt9LCB7XG4gICAgb2Zmc2V0WDogLW1pblggKyBleHBvcnRQYWRkaW5nLFxuICAgIG9mZnNldFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICBleHBvcnRXaXRoRGFya01vZGU6IGFwcFN0YXRlLmV4cG9ydFdpdGhEYXJrTW9kZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHN2Z1Jvb3Q7XG59O1xuXG4vLyBjYWxjdWxhdGUgc21hbGxlc3QgYXJlYSB0byBmaXQgdGhlIGNvbnRlbnRzIGluXG5jb25zdCBnZXRDYW52YXNTaXplID0gKFxuICBlbGVtZW50czogcmVhZG9ubHkgTm9uRGVsZXRlZEV4Y2FsaWRyYXdFbGVtZW50W10sXG4gIGV4cG9ydFBhZGRpbmc6IG51bWJlcixcbik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgW21pblgsIG1pblksIG1heFgsIG1heFldID0gZ2V0Q29tbW9uQm91bmRzKGVsZW1lbnRzKTtcbiAgY29uc3Qgd2lkdGggPSBkaXN0YW5jZShtaW5YLCBtYXhYKSArIGV4cG9ydFBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBkaXN0YW5jZShtaW5ZLCBtYXhZKSArIGV4cG9ydFBhZGRpbmcgKyBleHBvcnRQYWRkaW5nO1xuXG4gIHJldHVybiBbbWluWCwgbWluWSwgd2lkdGgsIGhlaWdodF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwb3J0U2l6ZSA9IChcbiAgZWxlbWVudHM6IHJlYWRvbmx5IE5vbkRlbGV0ZWRFeGNhbGlkcmF3RWxlbWVudFtdLFxuICBleHBvcnRQYWRkaW5nOiBudW1iZXIsXG4gIHNjYWxlOiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3QgWywgLCB3aWR0aCwgaGVpZ2h0XSA9IGdldENhbnZhc1NpemUoZWxlbWVudHMsIGV4cG9ydFBhZGRpbmcpLm1hcChcbiAgICAoZGltZW5zaW9uKSA9PiBNYXRoLnRydW5jKGRpbWVuc2lvbiAqIHNjYWxlKSxcbiAgKTtcblxuICByZXR1cm4gW3dpZHRoLCBoZWlnaHRdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../scene/export.ts\n");
3265
3254
 
3266
3255
  /***/ }),
3267
3256
 
@@ -3349,7 +3338,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3349
3338
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3350
3339
 
3351
3340
  "use strict";
3352
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"allowFullScreen\": () => (/* binding */ allowFullScreen),\n/* harmony export */ \"arrayToMap\": () => (/* binding */ arrayToMap),\n/* harmony export */ \"bytesToHexString\": () => (/* binding */ bytesToHexString),\n/* harmony export */ \"capitalizeString\": () => (/* binding */ capitalizeString),\n/* harmony export */ \"chunk\": () => (/* binding */ chunk),\n/* harmony export */ \"debounce\": () => (/* binding */ debounce),\n/* harmony export */ \"distance\": () => (/* binding */ distance),\n/* harmony export */ \"exitFullScreen\": () => (/* binding */ exitFullScreen),\n/* harmony export */ \"findIndex\": () => (/* binding */ findIndex),\n/* harmony export */ \"findLastIndex\": () => (/* binding */ findLastIndex),\n/* harmony export */ \"focusNearestParent\": () => (/* binding */ focusNearestParent),\n/* harmony export */ \"getDateTime\": () => (/* binding */ getDateTime),\n/* harmony export */ \"getFontFamilyString\": () => (/* binding */ getFontFamilyString),\n/* harmony export */ \"getFontString\": () => (/* binding */ getFontString),\n/* harmony export */ \"getFrame\": () => (/* binding */ getFrame),\n/* harmony export */ \"getGlobalCSSVariable\": () => (/* binding */ getGlobalCSSVariable),\n/* harmony export */ \"getNearestScrollableContainer\": () => (/* binding */ getNearestScrollableContainer),\n/* harmony export */ \"getShortcutKey\": () => (/* binding */ getShortcutKey),\n/* harmony export */ \"getUpdatedTimestamp\": () => (/* binding */ getUpdatedTimestamp),\n/* harmony export */ \"getVersion\": () => (/* binding */ getVersion),\n/* harmony export */ \"isFullScreen\": () => (/* binding */ isFullScreen),\n/* harmony export */ \"isInputLike\": () => (/* binding */ isInputLike),\n/* harmony export */ \"isPrimitive\": () => (/* binding */ isPrimitive),\n/* harmony export */ \"isProdEnv\": () => (/* binding */ isProdEnv),\n/* harmony export */ \"isPromiseLike\": () => (/* binding */ isPromiseLike),\n/* harmony export */ \"isRTL\": () => (/* binding */ isRTL),\n/* harmony export */ \"isTestEnv\": () => (/* binding */ isTestEnv),\n/* harmony export */ \"isToolIcon\": () => (/* binding */ isToolIcon),\n/* harmony export */ \"isTransparent\": () => (/* binding */ isTransparent),\n/* harmony export */ \"isWritableElement\": () => (/* binding */ isWritableElement),\n/* harmony export */ \"muteFSAbortError\": () => (/* binding */ muteFSAbortError),\n/* harmony export */ \"nFormatter\": () => (/* binding */ nFormatter),\n/* harmony export */ \"preventUnload\": () => (/* binding */ preventUnload),\n/* harmony export */ \"queryFocusableElements\": () => (/* binding */ queryFocusableElements),\n/* harmony export */ \"removeSelection\": () => (/* binding */ removeSelection),\n/* harmony export */ \"resetCursor\": () => (/* binding */ resetCursor),\n/* harmony export */ \"resolvablePromise\": () => (/* binding */ resolvablePromise),\n/* harmony export */ \"sceneCoordsToViewportCoords\": () => (/* binding */ sceneCoordsToViewportCoords),\n/* harmony export */ \"selectNode\": () => (/* binding */ selectNode),\n/* harmony export */ \"setCursor\": () => (/* binding */ setCursor),\n/* harmony export */ \"setCursorForShape\": () => (/* binding */ setCursorForShape),\n/* harmony export */ \"setDateTimeForTests\": () => (/* binding */ setDateTimeForTests),\n/* harmony export */ \"setEraserCursor\": () => (/* binding */ setEraserCursor),\n/* harmony export */ \"supportsEmoji\": () => (/* binding */ supportsEmoji),\n/* harmony export */ \"throttleRAF\": () => (/* binding */ throttleRAF),\n/* harmony export */ \"tupleToCoors\": () => (/* binding */ tupleToCoors),\n/* harmony export */ \"updateActiveTool\": () => (/* binding */ updateActiveTool),\n/* harmony export */ \"updateObject\": () => (/* binding */ updateObject),\n/* harmony export */ \"viewportCoordsToSceneCoords\": () => (/* binding */ viewportCoordsToSceneCoords),\n/* harmony export */ \"withBatchedUpdates\": () => (/* binding */ withBatchedUpdates),\n/* harmony export */ \"withBatchedUpdatesThrottled\": () => (/* binding */ withBatchedUpdatesThrottled),\n/* harmony export */ \"wrapEvent\": () => (/* binding */ wrapEvent)\n/* harmony export */ });\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./colors */ \"../../colors.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ \"../../constants.ts\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keys */ \"../../keys.ts\");\n\n\n\n\n\nlet mockDateTime = null;\nconst setDateTimeForTests = (dateTime) => {\n mockDateTime = dateTime;\n};\nconst getDateTime = () => {\n if (mockDateTime) {\n return mockDateTime;\n }\n const date = new Date();\n const year = date.getFullYear();\n const month = `${date.getMonth() + 1}`.padStart(2, \"0\");\n const day = `${date.getDate()}`.padStart(2, \"0\");\n const hr = `${date.getHours()}`.padStart(2, \"0\");\n const min = `${date.getMinutes()}`.padStart(2, \"0\");\n return `${year}-${month}-${day}-${hr}${min}`;\n};\nconst capitalizeString = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nconst isToolIcon = (target) => target instanceof HTMLElement && target.className.includes(\"ToolIcon\");\nconst isInputLike = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\n target instanceof HTMLBRElement || // newline in wysiwyg\n target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target instanceof HTMLSelectElement;\nconst isWritableElement = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\n target instanceof HTMLBRElement || // newline in wysiwyg\n target instanceof HTMLTextAreaElement ||\n (target instanceof HTMLInputElement &&\n (target.type === \"text\" || target.type === \"number\"));\nconst getFontFamilyString = ({ fontFamily, }) => {\n for (const [fontFamilyString, id] of Object.entries(_constants__WEBPACK_IMPORTED_MODULE_2__.FONT_FAMILY)) {\n if (id === fontFamily) {\n return `${fontFamilyString}, ${_constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT}`;\n }\n }\n return _constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT;\n};\n/** returns fontSize+fontFamily string for assignment to DOM elements */\nconst getFontString = ({ fontSize, fontFamily, }) => {\n return `${fontSize}px ${getFontFamilyString({ fontFamily })}`;\n};\nconst debounce = (fn, timeout) => {\n let handle = 0;\n let lastArgs = null;\n const ret = (...args) => {\n lastArgs = args;\n clearTimeout(handle);\n handle = window.setTimeout(() => {\n lastArgs = null;\n fn(...args);\n }, timeout);\n };\n ret.flush = () => {\n clearTimeout(handle);\n if (lastArgs) {\n const _lastArgs = lastArgs;\n lastArgs = null;\n fn(..._lastArgs);\n }\n };\n ret.cancel = () => {\n lastArgs = null;\n clearTimeout(handle);\n };\n return ret;\n};\n// throttle callback to execute once per animation frame\nconst throttleRAF = (fn, opts) => {\n let timerId = null;\n let lastArgs = null;\n let lastArgsTrailing = null;\n const scheduleFunc = (args) => {\n timerId = window.requestAnimationFrame(() => {\n timerId = null;\n fn(...args);\n lastArgs = null;\n if (lastArgsTrailing) {\n lastArgs = lastArgsTrailing;\n lastArgsTrailing = null;\n scheduleFunc(lastArgs);\n }\n });\n };\n const ret = (...args) => {\n if (false) {}\n lastArgs = args;\n if (timerId === null) {\n scheduleFunc(lastArgs);\n }\n else if (opts === null || opts === void 0 ? void 0 : opts.trailing) {\n lastArgsTrailing = args;\n }\n };\n ret.flush = () => {\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n if (lastArgs) {\n fn(...(lastArgsTrailing || lastArgs));\n lastArgs = lastArgsTrailing = null;\n }\n };\n ret.cancel = () => {\n lastArgs = lastArgsTrailing = null;\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n };\n return ret;\n};\n// https://github.com/lodash/lodash/blob/es/chunk.js\nconst chunk = (array, size) => {\n if (!array.length || size < 1) {\n return [];\n }\n let index = 0;\n let resIndex = 0;\n const result = Array(Math.ceil(array.length / size));\n while (index < array.length) {\n result[resIndex++] = array.slice(index, (index += size));\n }\n return result;\n};\nconst selectNode = (node) => {\n const selection = window.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(node);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n};\nconst removeSelection = () => {\n const selection = window.getSelection();\n if (selection) {\n selection.removeAllRanges();\n }\n};\nconst distance = (x, y) => Math.abs(x - y);\nconst updateActiveTool = (appState, data) => {\n if (data.type === \"custom\") {\n return Object.assign(Object.assign({}, appState.activeTool), { type: \"custom\", customType: data.customType });\n }\n return Object.assign(Object.assign({}, appState.activeTool), { lastActiveToolBeforeEraser: data.lastActiveToolBeforeEraser === undefined\n ? appState.activeTool.lastActiveToolBeforeEraser\n : data.lastActiveToolBeforeEraser, type: data.type, customType: null });\n};\nconst resetCursor = (canvas) => {\n if (canvas) {\n canvas.style.cursor = \"\";\n }\n};\nconst setCursor = (canvas, cursor) => {\n if (canvas) {\n canvas.style.cursor = cursor;\n }\n};\nlet eraserCanvasCache;\nlet previewDataURL;\nconst setEraserCursor = (canvas, theme) => {\n const cursorImageSizePx = 20;\n const drawCanvas = () => {\n const isDarkTheme = theme === _constants__WEBPACK_IMPORTED_MODULE_2__.THEME.DARK;\n eraserCanvasCache = document.createElement(\"canvas\");\n eraserCanvasCache.theme = theme;\n eraserCanvasCache.height = cursorImageSizePx;\n eraserCanvasCache.width = cursorImageSizePx;\n const context = eraserCanvasCache.getContext(\"2d\");\n context.lineWidth = 1;\n context.beginPath();\n context.arc(eraserCanvasCache.width / 2, eraserCanvasCache.height / 2, 5, 0, 2 * Math.PI);\n context.fillStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.black : open_color__WEBPACK_IMPORTED_MODULE_0__.white;\n context.fill();\n context.strokeStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.white : open_color__WEBPACK_IMPORTED_MODULE_0__.black;\n context.stroke();\n previewDataURL = eraserCanvasCache.toDataURL(_constants__WEBPACK_IMPORTED_MODULE_2__.MIME_TYPES.svg);\n };\n if (!eraserCanvasCache || eraserCanvasCache.theme !== theme) {\n drawCanvas();\n }\n setCursor(canvas, `url(${previewDataURL}) ${cursorImageSizePx / 2} ${cursorImageSizePx / 2}, auto`);\n};\nconst setCursorForShape = (canvas, appState) => {\n if (!canvas) {\n return;\n }\n if (appState.activeTool.type === \"selection\") {\n resetCursor(canvas);\n }\n else if (appState.activeTool.type === \"eraser\") {\n setEraserCursor(canvas, appState.theme);\n // do nothing if image tool is selected which suggests there's\n // a image-preview set as the cursor\n // Ignore custom type as well and let host decide\n }\n else if (![\"image\", \"custom\"].includes(appState.activeTool.type)) {\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_2__.CURSOR_TYPE.CROSSHAIR;\n }\n};\nconst isFullScreen = () => { var _a; return ((_a = document.fullscreenElement) === null || _a === void 0 ? void 0 : _a.nodeName) === \"HTML\"; };\nconst allowFullScreen = () => document.documentElement.requestFullscreen();\nconst exitFullScreen = () => document.exitFullscreen();\nconst getShortcutKey = (shortcut) => {\n shortcut = shortcut\n .replace(/\\bAlt\\b/i, \"Alt\")\n .replace(/\\bShift\\b/i, \"Shift\")\n .replace(/\\b(Enter|Return)\\b/i, \"Enter\")\n .replace(/\\bDel\\b/i, \"Delete\");\n if (_keys__WEBPACK_IMPORTED_MODULE_4__.isDarwin) {\n return shortcut\n .replace(/\\bCtrlOrCmd\\b/i, \"Cmd\")\n .replace(/\\bAlt\\b/i, \"Option\");\n }\n return shortcut.replace(/\\bCtrlOrCmd\\b/i, \"Ctrl\");\n};\nconst viewportCoordsToSceneCoords = ({ clientX, clientY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\n const invScale = 1 / zoom.value;\n const x = (clientX - offsetLeft) * invScale - scrollX;\n const y = (clientY - offsetTop) * invScale - scrollY;\n return { x, y };\n};\nconst sceneCoordsToViewportCoords = ({ sceneX, sceneY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\n const x = (sceneX + scrollX) * zoom.value + offsetLeft;\n const y = (sceneY + scrollY) * zoom.value + offsetTop;\n return { x, y };\n};\nconst getGlobalCSSVariable = (name) => getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);\nconst RS_LTR_CHARS = \"A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\" +\n \"\\u2C00-\\uFB1C\\uFDFE-\\uFE6F\\uFEFD-\\uFFFF\";\nconst RS_RTL_CHARS = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\nconst RE_RTL_CHECK = new RegExp(`^[^${RS_LTR_CHARS}]*[${RS_RTL_CHARS}]`);\n/**\n * Checks whether first directional character is RTL. Meaning whether it starts\n * with RTL characters, or indeterminate (numbers etc.) characters followed by\n * RTL.\n * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171\n */\nconst isRTL = (text) => RE_RTL_CHECK.test(text);\nconst tupleToCoors = (xyTuple) => {\n const [x, y] = xyTuple;\n return { x, y };\n};\n/** use as a rejectionHandler to mute filesystem Abort errors */\nconst muteFSAbortError = (error) => {\n if ((error === null || error === void 0 ? void 0 : error.name) === \"AbortError\") {\n console.warn(error);\n return;\n }\n throw error;\n};\nconst findIndex = (array, cb, fromIndex = 0) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\n let index = fromIndex - 1;\n while (++index < array.length) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\nconst findLastIndex = (array, cb, fromIndex = array.length - 1) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\n let index = fromIndex + 1;\n while (--index > -1) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\nconst isTransparent = (color) => {\n const isRGBTransparent = color.length === 5 && color.substr(4, 1) === \"0\";\n const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === \"00\";\n return (isRGBTransparent ||\n isRRGGBBTransparent ||\n color === _colors__WEBPACK_IMPORTED_MODULE_1__[\"default\"].elementBackground[0]);\n};\nconst resolvablePromise = () => {\n let resolve;\n let reject;\n const promise = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n promise.resolve = resolve;\n promise.reject = reject;\n return promise;\n};\n/**\n * @param func handler taking at most single parameter (event).\n */\nconst withBatchedUpdates = (func) => ((event) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\n});\n/**\n * barches React state updates and throttles the calls to a single call per\n * animation frame\n */\nconst withBatchedUpdatesThrottled = (func) => {\n // @ts-ignore\n return throttleRAF(((event) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\n }));\n};\n//https://stackoverflow.com/a/9462382/8418\nconst nFormatter = (num, digits) => {\n const si = [\n { value: 1, symbol: \"b\" },\n { value: 1e3, symbol: \"k\" },\n { value: 1e6, symbol: \"M\" },\n { value: 1e9, symbol: \"G\" },\n ];\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\n let index;\n for (index = si.length - 1; index > 0; index--) {\n if (num >= si[index].value) {\n break;\n }\n }\n return ((num / si[index].value).toFixed(digits).replace(rx, \"$1\") + si[index].symbol);\n};\nconst getVersion = () => {\n var _a;\n return (((_a = document.querySelector('meta[name=\"version\"]')) === null || _a === void 0 ? void 0 : _a.content) ||\n _constants__WEBPACK_IMPORTED_MODULE_2__.DEFAULT_VERSION);\n};\n// Adapted from https://github.com/Modernizr/Modernizr/blob/master/feature-detects/emoji.js\nconst supportsEmoji = () => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return false;\n }\n const offset = 12;\n ctx.fillStyle = \"#f00\";\n ctx.textBaseline = \"top\";\n ctx.font = \"32px Arial\";\n // Modernizr used 🐨, but it is sort of supported on Windows 7.\n // Luckily 😀 isn't supported.\n ctx.fillText(\"😀\", 0, 0);\n return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\n};\nconst getNearestScrollableContainer = (element) => {\n let parent = element.parentElement;\n while (parent) {\n if (parent === document.body) {\n return document;\n }\n const { overflowY } = window.getComputedStyle(parent);\n const hasScrollableContent = parent.scrollHeight > parent.clientHeight;\n if (hasScrollableContent &&\n (overflowY === \"auto\" ||\n overflowY === \"scroll\" ||\n overflowY === \"overlay\")) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return document;\n};\nconst focusNearestParent = (element) => {\n let parent = element.parentElement;\n while (parent) {\n if (parent.tabIndex > -1) {\n parent.focus();\n return;\n }\n parent = parent.parentElement;\n }\n};\nconst preventUnload = (event) => {\n event.preventDefault();\n // NOTE: modern browsers no longer allow showing a custom message here\n event.returnValue = \"\";\n};\nconst bytesToHexString = (bytes) => {\n return Array.from(bytes)\n .map((byte) => `0${byte.toString(16)}`.slice(-2))\n .join(\"\");\n};\nconst getUpdatedTimestamp = () => (isTestEnv() ? 1 : Date.now());\n/**\n * Transforms array of objects containing `id` attribute,\n * or array of ids (strings), into a Map, keyd by `id`.\n */\nconst arrayToMap = (items) => {\n return items.reduce((acc, element) => {\n acc.set(typeof element === \"string\" ? element : element.id, element);\n return acc;\n }, new Map());\n};\nconst isTestEnv = () => { var _a; return typeof process !== \"undefined\" && ((_a = ({\"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\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.12.0-57cc4b6\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"test\"; };\nconst isProdEnv = () => { var _a; return typeof process !== \"undefined\" && ((_a = ({\"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\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.12.0-57cc4b6\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"production\"; };\nconst wrapEvent = (name, nativeEvent) => {\n return new CustomEvent(name, {\n detail: {\n nativeEvent,\n },\n cancelable: true,\n });\n};\nconst updateObject = (obj, updates) => {\n let didChange = false;\n for (const key in updates) {\n const value = updates[key];\n if (typeof value !== \"undefined\") {\n if (obj[key] === value &&\n // if object, always update because its attrs could have changed\n (typeof value !== \"object\" || value === null)) {\n continue;\n }\n didChange = true;\n }\n }\n if (!didChange) {\n return obj;\n }\n return Object.assign(Object.assign({}, obj), updates);\n};\nconst isPrimitive = (val) => {\n const type = typeof val;\n return val == null || (type !== \"object\" && type !== \"function\");\n};\nconst getFrame = () => {\n try {\n return window.self === window.top ? \"top\" : \"iframe\";\n }\n catch (error) {\n return \"iframe\";\n }\n};\nconst isPromiseLike = (value) => {\n return (!!value &&\n typeof value === \"object\" &&\n \"then\" in value &&\n \"catch\" in value &&\n \"finally\" in value);\n};\nconst queryFocusableElements = (container) => {\n const focusableElements = container === null || container === void 0 ? void 0 : container.querySelectorAll(\"button, a, input, select, textarea, div[tabindex], label[tabindex]\");\n return focusableElements\n ? Array.from(focusableElements).filter((element) => element.tabIndex > -1 && !element.disabled)\n : [];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDO0FBRUssTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO0lBQzNCLElBQUk7UUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7S0FDdEQ7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQyxDQUFDO0FBRUssTUFBTSxhQUFhLEdBQUcsQ0FDM0IsS0FBVSxFQUNzQyxFQUFFO0lBQ2xELE9BQU8sQ0FDTCxDQUFDLENBQUMsS0FBSztRQUNQLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsTUFBTSxJQUFJLEtBQUs7UUFDZixPQUFPLElBQUksS0FBSztRQUNoQixTQUFTLElBQUksS0FBSyxDQUNuQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUssTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFNBQTZCLEVBQUUsRUFBRTtJQUN0RSxNQUFNLGlCQUFpQixHQUFHLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxnQkFBZ0IsQ0FDbkQsb0VBQW9FLENBQ3JFLENBQUM7SUFFRixPQUFPLGlCQUFpQjtRQUN0QixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBRSxPQUE0QixDQUFDLFFBQVEsQ0FDbkU7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ1QsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3V0aWxzLnRzPzc2M2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9jIGZyb20gXCJvcGVuLWNvbG9yXCI7XG5cbmltcG9ydCBjb2xvcnMgZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQge1xuICBDVVJTT1JfVFlQRSxcbiAgREVGQVVMVF9WRVJTSU9OLFxuICBFVkVOVCxcbiAgRk9OVF9GQU1JTFksXG4gIE1JTUVfVFlQRVMsXG4gIFRIRU1FLFxuICBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRm9udEZhbWlseVZhbHVlcywgRm9udFN0cmluZyB9IGZyb20gXCIuL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IEFwcFN0YXRlLCBEYXRhVVJMLCBMYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlciwgWm9vbSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IGlzRGFyd2luIH0gZnJvbSBcIi4va2V5c1wiO1xuaW1wb3J0IHsgU0hBUEVTIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5cbmxldCBtb2NrRGF0ZVRpbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgY29uc3Qgc2V0RGF0ZVRpbWVGb3JUZXN0cyA9IChkYXRlVGltZTogc3RyaW5nKSA9PiB7XG4gIG1vY2tEYXRlVGltZSA9IGRhdGVUaW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGVUaW1lID0gKCkgPT4ge1xuICBpZiAobW9ja0RhdGVUaW1lKSB7XG4gICAgcmV0dXJuIG1vY2tEYXRlVGltZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aCA9IGAke2RhdGUuZ2V0TW9udGgoKSArIDF9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIGNvbnN0IGRheSA9IGAke2RhdGUuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICBjb25zdCBociA9IGAke2RhdGUuZ2V0SG91cnMoKX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgY29uc3QgbWluID0gYCR7ZGF0ZS5nZXRNaW51dGVzKCl9YC5wYWRTdGFydCgyLCBcIjBcIik7XG5cbiAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fS0ke2hyfSR7bWlufWA7XG59O1xuXG5leHBvcnQgY29uc3QgY2FwaXRhbGl6ZVN0cmluZyA9IChzdHI6IHN0cmluZykgPT5cbiAgc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuXG5leHBvcnQgY29uc3QgaXNUb29sSWNvbiA9IChcbiAgdGFyZ2V0OiBFbGVtZW50IHwgRXZlbnRUYXJnZXQgfCBudWxsLFxuKTogdGFyZ2V0IGlzIEhUTUxFbGVtZW50ID0+XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5jbGFzc05hbWUuaW5jbHVkZXMoXCJUb29sSWNvblwiKTtcblxuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKFxuICB0YXJnZXQ6IEVsZW1lbnQgfCBFdmVudFRhcmdldCB8IG51bGwsXG4pOiB0YXJnZXQgaXNcbiAgfCBIVE1MSW5wdXRFbGVtZW50XG4gIHwgSFRNTFRleHRBcmVhRWxlbWVudFxuICB8IEhUTUxTZWxlY3RFbGVtZW50XG4gIHwgSFRNTEJSRWxlbWVudFxuICB8IEhUTUxEaXZFbGVtZW50ID0+XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIikgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJSRWxlbWVudCB8fCAvLyBuZXdsaW5lIGluIHd5c2l3eWdcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50O1xuXG5leHBvcnQgY29uc3QgaXNXcml0YWJsZUVsZW1lbnQgPSAoXG4gIHRhcmdldDogRWxlbWVudCB8IEV2ZW50VGFyZ2V0IHwgbnVsbCxcbik6IHRhcmdldCBpc1xuICB8IEhUTUxJbnB1dEVsZW1lbnRcbiAgfCBIVE1MVGV4dEFyZWFFbGVtZW50XG4gIHwgSFRNTEJSRWxlbWVudFxuICB8IEhUTUxEaXZFbGVtZW50ID0+XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIikgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJSRWxlbWVudCB8fCAvLyBuZXdsaW5lIGluIHd5c2l3eWdcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCB8fFxuICAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJlxuICAgICh0YXJnZXQudHlwZSA9PT0gXCJ0ZXh0XCIgfHwgdGFyZ2V0LnR5cGUgPT09IFwibnVtYmVyXCIpKTtcblxuZXhwb3J0IGNvbnN0IGdldEZvbnRGYW1pbHlTdHJpbmcgPSAoe1xuICBmb250RmFtaWx5LFxufToge1xuICBmb250RmFtaWx5OiBGb250RmFtaWx5VmFsdWVzO1xufSkgPT4ge1xuICBmb3IgKGNvbnN0IFtmb250RmFtaWx5U3RyaW5nLCBpZF0gb2YgT2JqZWN0LmVudHJpZXMoRk9OVF9GQU1JTFkpKSB7XG4gICAgaWYgKGlkID09PSBmb250RmFtaWx5KSB7XG4gICAgICByZXR1cm4gYCR7Zm9udEZhbWlseVN0cmluZ30sICR7V0lORE9XU19FTU9KSV9GQUxMQkFDS19GT05UfWA7XG4gICAgfVxuICB9XG4gIHJldHVybiBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQ7XG59O1xuXG4vKiogcmV0dXJucyBmb250U2l6ZStmb250RmFtaWx5IHN0cmluZyBmb3IgYXNzaWdubWVudCB0byBET00gZWxlbWVudHMgKi9cbmV4cG9ydCBjb25zdCBnZXRGb250U3RyaW5nID0gKHtcbiAgZm9udFNpemUsXG4gIGZvbnRGYW1pbHksXG59OiB7XG4gIGZvbnRTaXplOiBudW1iZXI7XG4gIGZvbnRGYW1pbHk6IEZvbnRGYW1pbHlWYWx1ZXM7XG59KSA9PiB7XG4gIHJldHVybiBgJHtmb250U2l6ZX1weCAke2dldEZvbnRGYW1pbHlTdHJpbmcoeyBmb250RmFtaWx5IH0pfWAgYXMgRm9udFN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBkZWJvdW5jZSA9IDxUIGV4dGVuZHMgYW55W10+KFxuICBmbjogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG4gIHRpbWVvdXQ6IG51bWJlcixcbikgPT4ge1xuICBsZXQgaGFuZGxlID0gMDtcbiAgbGV0IGxhc3RBcmdzOiBUIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IHJldCA9ICguLi5hcmdzOiBUKSA9PiB7XG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuICAgIGhhbmRsZSA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgIH0sIHRpbWVvdXQpO1xuICB9O1xuICByZXQuZmx1c2ggPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KGhhbmRsZSk7XG4gICAgaWYgKGxhc3RBcmdzKSB7XG4gICAgICBjb25zdCBfbGFzdEFyZ3MgPSBsYXN0QXJncztcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLl9sYXN0QXJncyk7XG4gICAgfVxuICB9O1xuICByZXQuY2FuY2VsID0gKCkgPT4ge1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBjbGVhclRpbWVvdXQoaGFuZGxlKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIHRocm90dGxlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSBwZXIgYW5pbWF0aW9uIGZyYW1lXG5leHBvcnQgY29uc3QgdGhyb3R0bGVSQUYgPSA8VCBleHRlbmRzIGFueVtdPihcbiAgZm46ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuICBvcHRzPzogeyB0cmFpbGluZz86IGJvb2xlYW4gfSxcbikgPT4ge1xuICBsZXQgdGltZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGxldCBsYXN0QXJnczogVCB8IG51bGwgPSBudWxsO1xuICBsZXQgbGFzdEFyZ3NUcmFpbGluZzogVCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHNjaGVkdWxlRnVuYyA9IChhcmdzOiBUKSA9PiB7XG4gICAgdGltZXJJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGltZXJJZCA9IG51bGw7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGlmIChsYXN0QXJnc1RyYWlsaW5nKSB7XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdEFyZ3NUcmFpbGluZztcbiAgICAgICAgbGFzdEFyZ3NUcmFpbGluZyA9IG51bGw7XG4gICAgICAgIHNjaGVkdWxlRnVuYyhsYXN0QXJncyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcmV0ID0gKC4uLmFyZ3M6IFQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGlmICh0aW1lcklkID09PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZUZ1bmMobGFzdEFyZ3MpO1xuICAgIH0gZWxzZSBpZiAob3B0cz8udHJhaWxpbmcpIHtcbiAgICAgIGxhc3RBcmdzVHJhaWxpbmcgPSBhcmdzO1xuICAgIH1cbiAgfTtcbiAgcmV0LmZsdXNoID0gKCkgPT4ge1xuICAgIGlmICh0aW1lcklkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKTtcbiAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAobGFzdEFyZ3MpIHtcbiAgICAgIGZuKC4uLihsYXN0QXJnc1RyYWlsaW5nIHx8IGxhc3RBcmdzKSk7XG4gICAgICBsYXN0QXJncyA9IGxhc3RBcmdzVHJhaWxpbmcgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0LmNhbmNlbCA9ICgpID0+IHtcbiAgICBsYXN0QXJncyA9IGxhc3RBcmdzVHJhaWxpbmcgPSBudWxsO1xuICAgIGlmICh0aW1lcklkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKTtcbiAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvZXMvY2h1bmsuanNcbmV4cG9ydCBjb25zdCBjaHVuayA9IDxUIGV4dGVuZHMgYW55PihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgc2l6ZTogbnVtYmVyLFxuKTogVFtdW10gPT4ge1xuICBpZiAoIWFycmF5Lmxlbmd0aCB8fCBzaXplIDwgMSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgaW5kZXggPSAwO1xuICBsZXQgcmVzSW5kZXggPSAwO1xuICBjb25zdCByZXN1bHQgPSBBcnJheShNYXRoLmNlaWwoYXJyYXkubGVuZ3RoIC8gc2l6ZSkpO1xuICB3aGlsZSAoaW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBhcnJheS5zbGljZShpbmRleCwgKGluZGV4ICs9IHNpemUpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdE5vZGUgPSAobm9kZTogRWxlbWVudCkgPT4ge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlU2VsZWN0aW9uID0gKCkgPT4ge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkaXN0YW5jZSA9ICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4gTWF0aC5hYnMoeCAtIHkpO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQWN0aXZlVG9vbCA9IChcbiAgYXBwU3RhdGU6IFBpY2s8QXBwU3RhdGUsIFwiYWN0aXZlVG9vbFwiPixcbiAgZGF0YTogKFxuICAgIHwgeyB0eXBlOiB0eXBlb2YgU0hBUEVTW251bWJlcl1bXCJ2YWx1ZVwiXSB8IFwiZXJhc2VyXCIgfVxuICAgIHwgeyB0eXBlOiBcImN1c3RvbVwiOyBjdXN0b21UeXBlOiBzdHJpbmcgfVxuICApICYgeyBsYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcj86IExhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyIH0sXG4pOiBBcHBTdGF0ZVtcImFjdGl2ZVRvb2xcIl0gPT4ge1xuICBpZiAoZGF0YS50eXBlID09PSBcImN1c3RvbVwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwcFN0YXRlLmFjdGl2ZVRvb2wsXG4gICAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgICAgY3VzdG9tVHlwZTogZGF0YS5jdXN0b21UeXBlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmFwcFN0YXRlLmFjdGl2ZVRvb2wsXG4gICAgbGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXI6XG4gICAgICBkYXRhLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBhcHBTdGF0ZS5hY3RpdmVUb29sLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyXG4gICAgICAgIDogZGF0YS5sYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcixcbiAgICB0eXBlOiBkYXRhLnR5cGUsXG4gICAgY3VzdG9tVHlwZTogbnVsbCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNldEN1cnNvciA9IChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IFwiXCI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXRDdXJzb3IgPSAoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsIGN1cnNvcjogc3RyaW5nKSA9PiB7XG4gIGlmIChjYW52YXMpIHtcbiAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xuICB9XG59O1xuXG5sZXQgZXJhc2VyQ2FudmFzQ2FjaGU6IGFueTtcbmxldCBwcmV2aWV3RGF0YVVSTDogc3RyaW5nO1xuZXhwb3J0IGNvbnN0IHNldEVyYXNlckN1cnNvciA9IChcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsXG4gIHRoZW1lOiBBcHBTdGF0ZVtcInRoZW1lXCJdLFxuKSA9PiB7XG4gIGNvbnN0IGN1cnNvckltYWdlU2l6ZVB4ID0gMjA7XG5cbiAgY29uc3QgZHJhd0NhbnZhcyA9ICgpID0+IHtcbiAgICBjb25zdCBpc0RhcmtUaGVtZSA9IHRoZW1lID09PSBUSEVNRS5EQVJLO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS50aGVtZSA9IHRoZW1lO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLmhlaWdodCA9IGN1cnNvckltYWdlU2l6ZVB4O1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLndpZHRoID0gY3Vyc29ySW1hZ2VTaXplUHg7XG4gICAgY29uc3QgY29udGV4dCA9IGVyYXNlckNhbnZhc0NhY2hlLmdldENvbnRleHQoXCIyZFwiKSE7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSAxO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgY29udGV4dC5hcmMoXG4gICAgICBlcmFzZXJDYW52YXNDYWNoZS53aWR0aCAvIDIsXG4gICAgICBlcmFzZXJDYW52YXNDYWNoZS5oZWlnaHQgLyAyLFxuICAgICAgNSxcbiAgICAgIDAsXG4gICAgICAyICogTWF0aC5QSSxcbiAgICApO1xuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gaXNEYXJrVGhlbWUgPyBvYy5ibGFjayA6IG9jLndoaXRlO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBpc0RhcmtUaGVtZSA/IG9jLndoaXRlIDogb2MuYmxhY2s7XG4gICAgY29udGV4dC5zdHJva2UoKTtcbiAgICBwcmV2aWV3RGF0YVVSTCA9IGVyYXNlckNhbnZhc0NhY2hlLnRvRGF0YVVSTChNSU1FX1RZUEVTLnN2ZykgYXMgRGF0YVVSTDtcbiAgfTtcbiAgaWYgKCFlcmFzZXJDYW52YXNDYWNoZSB8fCBlcmFzZXJDYW52YXNDYWNoZS50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICBkcmF3Q2FudmFzKCk7XG4gIH1cblxuICBzZXRDdXJzb3IoXG4gICAgY2FudmFzLFxuICAgIGB1cmwoJHtwcmV2aWV3RGF0YVVSTH0pICR7Y3Vyc29ySW1hZ2VTaXplUHggLyAyfSAke1xuICAgICAgY3Vyc29ySW1hZ2VTaXplUHggLyAyXG4gICAgfSwgYXV0b2AsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q3Vyc29yRm9yU2hhcGUgPSAoXG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsLFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4pID0+IHtcbiAgaWYgKCFjYW52YXMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSA9PT0gXCJzZWxlY3Rpb25cIikge1xuICAgIHJlc2V0Q3Vyc29yKGNhbnZhcyk7XG4gIH0gZWxzZSBpZiAoYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlID09PSBcImVyYXNlclwiKSB7XG4gICAgc2V0RXJhc2VyQ3Vyc29yKGNhbnZhcywgYXBwU3RhdGUudGhlbWUpO1xuICAgIC8vIGRvIG5vdGhpbmcgaWYgaW1hZ2UgdG9vbCBpcyBzZWxlY3RlZCB3aGljaCBzdWdnZXN0cyB0aGVyZSdzXG4gICAgLy8gYSBpbWFnZS1wcmV2aWV3IHNldCBhcyB0aGUgY3Vyc29yXG4gICAgLy8gSWdub3JlIGN1c3RvbSB0eXBlIGFzIHdlbGwgYW5kIGxldCBob3N0IGRlY2lkZVxuICB9IGVsc2UgaWYgKCFbXCJpbWFnZVwiLCBcImN1c3RvbVwiXS5pbmNsdWRlcyhhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUpKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IENVUlNPUl9UWVBFLkNST1NTSEFJUjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRnVsbFNjcmVlbiA9ICgpID0+XG4gIGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50Py5ub2RlTmFtZSA9PT0gXCJIVE1MXCI7XG5cbmV4cG9ydCBjb25zdCBhbGxvd0Z1bGxTY3JlZW4gPSAoKSA9PlxuICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGV4aXRGdWxsU2NyZWVuID0gKCkgPT4gZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGdldFNob3J0Y3V0S2V5ID0gKHNob3J0Y3V0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBzaG9ydGN1dCA9IHNob3J0Y3V0XG4gICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIkFsdFwiKVxuICAgIC5yZXBsYWNlKC9cXGJTaGlmdFxcYi9pLCBcIlNoaWZ0XCIpXG4gICAgLnJlcGxhY2UoL1xcYihFbnRlcnxSZXR1cm4pXFxiL2ksIFwiRW50ZXJcIilcbiAgICAucmVwbGFjZSgvXFxiRGVsXFxiL2ksIFwiRGVsZXRlXCIpO1xuXG4gIGlmIChpc0Rhcndpbikge1xuICAgIHJldHVybiBzaG9ydGN1dFxuICAgICAgLnJlcGxhY2UoL1xcYkN0cmxPckNtZFxcYi9pLCBcIkNtZFwiKVxuICAgICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIk9wdGlvblwiKTtcbiAgfVxuICByZXR1cm4gc2hvcnRjdXQucmVwbGFjZSgvXFxiQ3RybE9yQ21kXFxiL2ksIFwiQ3RybFwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2aWV3cG9ydENvb3Jkc1RvU2NlbmVDb29yZHMgPSAoXG4gIHsgY2xpZW50WCwgY2xpZW50WSB9OiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0sXG4gIHtcbiAgICB6b29tLFxuICAgIG9mZnNldExlZnQsXG4gICAgb2Zmc2V0VG9wLFxuICAgIHNjcm9sbFgsXG4gICAgc2Nyb2xsWSxcbiAgfToge1xuICAgIHpvb206IFpvb207XG4gICAgb2Zmc2V0TGVmdDogbnVtYmVyO1xuICAgIG9mZnNldFRvcDogbnVtYmVyO1xuICAgIHNjcm9sbFg6IG51bWJlcjtcbiAgICBzY3JvbGxZOiBudW1iZXI7XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgaW52U2NhbGUgPSAxIC8gem9vbS52YWx1ZTtcbiAgY29uc3QgeCA9IChjbGllbnRYIC0gb2Zmc2V0TGVmdCkgKiBpbnZTY2FsZSAtIHNjcm9sbFg7XG4gIGNvbnN0IHkgPSAoY2xpZW50WSAtIG9mZnNldFRvcCkgKiBpbnZTY2FsZSAtIHNjcm9sbFk7XG5cbiAgcmV0dXJuIHsgeCwgeSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNjZW5lQ29vcmRzVG9WaWV3cG9ydENvb3JkcyA9IChcbiAgeyBzY2VuZVgsIHNjZW5lWSB9OiB7IHNjZW5lWDogbnVtYmVyOyBzY2VuZVk6IG51bWJlciB9LFxuICB7XG4gICAgem9vbSxcbiAgICBvZmZzZXRMZWZ0LFxuICAgIG9mZnNldFRvcCxcbiAgICBzY3JvbGxYLFxuICAgIHNjcm9sbFksXG4gIH06IHtcbiAgICB6b29tOiBab29tO1xuICAgIG9mZnNldExlZnQ6IG51bWJlcjtcbiAgICBvZmZzZXRUb3A6IG51bWJlcjtcbiAgICBzY3JvbGxYOiBudW1iZXI7XG4gICAgc2Nyb2xsWTogbnVtYmVyO1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IHggPSAoc2NlbmVYICsgc2Nyb2xsWCkgKiB6b29tLnZhbHVlICsgb2Zmc2V0TGVmdDtcbiAgY29uc3QgeSA9IChzY2VuZVkgKyBzY3JvbGxZKSAqIHpvb20udmFsdWUgKyBvZmZzZXRUb3A7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHbG9iYWxDU1NWYXJpYWJsZSA9IChuYW1lOiBzdHJpbmcpID0+XG4gIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGAtLSR7bmFtZX1gKTtcblxuY29uc3QgUlNfTFRSX0NIQVJTID1cbiAgXCJBLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQjhcXHUwMzAwLVxcdTA1OTBcXHUwODAwLVxcdTFGRkZcIiArXG4gIFwiXFx1MkMwMC1cXHVGQjFDXFx1RkRGRS1cXHVGRTZGXFx1RkVGRC1cXHVGRkZGXCI7XG5jb25zdCBSU19SVExfQ0hBUlMgPSBcIlxcdTA1OTEtXFx1MDdGRlxcdUZCMUQtXFx1RkRGRFxcdUZFNzAtXFx1RkVGQ1wiO1xuY29uc3QgUkVfUlRMX0NIRUNLID0gbmV3IFJlZ0V4cChgXlteJHtSU19MVFJfQ0hBUlN9XSpbJHtSU19SVExfQ0hBUlN9XWApO1xuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBmaXJzdCBkaXJlY3Rpb25hbCBjaGFyYWN0ZXIgaXMgUlRMLiBNZWFuaW5nIHdoZXRoZXIgaXQgc3RhcnRzXG4gKiAgd2l0aCBSVEwgY2hhcmFjdGVycywgb3IgaW5kZXRlcm1pbmF0ZSAobnVtYmVycyBldGMuKSBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5XG4gKiAgUlRMLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC8xNzIyI2Rpc2N1c3Npb25fcjQzNjM0MDE3MVxuICovXG5leHBvcnQgY29uc3QgaXNSVEwgPSAodGV4dDogc3RyaW5nKSA9PiBSRV9SVExfQ0hFQ0sudGVzdCh0ZXh0KTtcblxuZXhwb3J0IGNvbnN0IHR1cGxlVG9Db29ycyA9IChcbiAgeHlUdXBsZTogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSxcbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9PiB7XG4gIGNvbnN0IFt4LCB5XSA9IHh5VHVwbGU7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbi8qKiB1c2UgYXMgYSByZWplY3Rpb25IYW5kbGVyIHRvIG11dGUgZmlsZXN5c3RlbSBBYm9ydCBlcnJvcnMgKi9cbmV4cG9ydCBjb25zdCBtdXRlRlNBYm9ydEVycm9yID0gKGVycm9yPzogRXJyb3IpID0+IHtcbiAgaWYgKGVycm9yPy5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgIGNvbnNvbGUud2FybihlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IGVycm9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRJbmRleCA9IDxUPihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgY2I6IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogcmVhZG9ubHkgVFtdKSA9PiBib29sZWFuLFxuICBmcm9tSW5kZXg6IG51bWJlciA9IDAsXG4pID0+IHtcbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBhcnJheS5sZW5ndGggKyBmcm9tSW5kZXg7XG4gIH1cbiAgZnJvbUluZGV4ID0gTWF0aC5taW4oYXJyYXkubGVuZ3RoLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4IC0gMTtcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICBpZiAoY2IoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdEluZGV4ID0gPFQ+KFxuICBhcnJheTogcmVhZG9ubHkgVFtdLFxuICBjYjogKGVsZW1lbnQ6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiByZWFkb25seSBUW10pID0+IGJvb2xlYW4sXG4gIGZyb21JbmRleDogbnVtYmVyID0gYXJyYXkubGVuZ3RoIC0gMSxcbikgPT4ge1xuICBpZiAoZnJvbUluZGV4IDwgMCkge1xuICAgIGZyb21JbmRleCA9IGFycmF5Lmxlbmd0aCArIGZyb21JbmRleDtcbiAgfVxuICBmcm9tSW5kZXggPSBNYXRoLm1pbihhcnJheS5sZW5ndGggLSAxLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgd2hpbGUgKC0taW5kZXggPiAtMSkge1xuICAgIGlmIChjYihhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVHJhbnNwYXJlbnQgPSAoY29sb3I6IHN0cmluZykgPT4ge1xuICBjb25zdCBpc1JHQlRyYW5zcGFyZW50ID0gY29sb3IubGVuZ3RoID09PSA1ICYmIGNvbG9yLnN1YnN0cig0LCAxKSA9PT0gXCIwXCI7XG4gIGNvbnN0IGlzUlJHR0JCVHJhbnNwYXJlbnQgPSBjb2xvci5sZW5ndGggPT09IDkgJiYgY29sb3Iuc3Vic3RyKDcsIDIpID09PSBcIjAwXCI7XG4gIHJldHVybiAoXG4gICAgaXNSR0JUcmFuc3BhcmVudCB8fFxuICAgIGlzUlJHR0JCVHJhbnNwYXJlbnQgfHxcbiAgICBjb2xvciA9PT0gY29sb3JzLmVsZW1lbnRCYWNrZ3JvdW5kWzBdXG4gICk7XG59O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZhYmxlUHJvbWlzZTxUPiA9IFByb21pc2U8VD4gJiB7XG4gIHJlc29sdmU6IFtUXSBleHRlbmRzIFt1bmRlZmluZWRdID8gKHZhbHVlPzogVCkgPT4gdm9pZCA6ICh2YWx1ZTogVCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufTtcbmV4cG9ydCBjb25zdCByZXNvbHZhYmxlUHJvbWlzZSA9IDxUPigpID0+IHtcbiAgbGV0IHJlc29sdmUhOiBhbnk7XG4gIGxldCByZWplY3QhOiBhbnk7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgfSk7XG4gIChwcm9taXNlIGFzIGFueSkucmVzb2x2ZSA9IHJlc29sdmU7XG4gIChwcm9taXNlIGFzIGFueSkucmVqZWN0ID0gcmVqZWN0O1xuICByZXR1cm4gcHJvbWlzZSBhcyBSZXNvbHZhYmxlUHJvbWlzZTxUPjtcbn07XG5cbi8qKlxuICogQHBhcmFtIGZ1bmMgaGFuZGxlciB0YWtpbmcgYXQgbW9zdCBzaW5nbGUgcGFyYW1ldGVyIChldmVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXMgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PlxuICAoKGV2ZW50KSA9PiB7XG4gICAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuYyBhcyBURnVuY3Rpb24sIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uO1xuXG4vKipcbiAqIGJhcmNoZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBhbmQgdGhyb3R0bGVzIHRoZSBjYWxscyB0byBhIHNpbmdsZSBjYWxsIHBlclxuICogYW5pbWF0aW9uIGZyYW1lXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXNUaHJvdHRsZWQgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PiB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIHRocm90dGxlUkFGPFBhcmFtZXRlcnM8VEZ1bmN0aW9uPj4oKChldmVudCkgPT4ge1xuICAgIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZ1bmMsIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uKTtcbn07XG5cbi8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk0NjIzODIvODQxOFxuZXhwb3J0IGNvbnN0IG5Gb3JtYXR0ZXIgPSAobnVtOiBudW1iZXIsIGRpZ2l0czogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc2kgPSBbXG4gICAgeyB2YWx1ZTogMSwgc3ltYm9sOiBcImJcIiB9LFxuICAgIHsgdmFsdWU6IDFlMywgc3ltYm9sOiBcImtcIiB9LFxuICAgIHsgdmFsdWU6IDFlNiwgc3ltYm9sOiBcIk1cIiB9LFxuICAgIHsgdmFsdWU6IDFlOSwgc3ltYm9sOiBcIkdcIiB9LFxuICBdO1xuICBjb25zdCByeCA9IC9cXC4wKyR8KFxcLlswLTldKlsxLTldKTArJC87XG4gIGxldCBpbmRleDtcbiAgZm9yIChpbmRleCA9IHNpLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuICAgIGlmIChudW0gPj0gc2lbaW5kZXhdLnZhbHVlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChcbiAgICAobnVtIC8gc2lbaW5kZXhdLnZhbHVlKS50b0ZpeGVkKGRpZ2l0cykucmVwbGFjZShyeCwgXCIkMVwiKSArIHNpW2luZGV4XS5zeW1ib2xcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWZXJzaW9uID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTE1ldGFFbGVtZW50PignbWV0YVtuYW1lPVwidmVyc2lvblwiXScpPy5jb250ZW50IHx8XG4gICAgREVGQVVMVF9WRVJTSU9OXG4gICk7XG59O1xuXG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2Vtb2ppLmpzXG5leHBvcnQgY29uc3Qgc3VwcG9ydHNFbW9qaSA9ICgpID0+IHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgb2Zmc2V0ID0gMTI7XG4gIGN0eC5maWxsU3R5bGUgPSBcIiNmMDBcIjtcbiAgY3R4LnRleHRCYXNlbGluZSA9IFwidG9wXCI7XG4gIGN0eC5mb250ID0gXCIzMnB4IEFyaWFsXCI7XG4gIC8vIE1vZGVybml6ciB1c2VkIPCfkKgsIGJ1dCBpdCBpcyBzb3J0IG9mIHN1cHBvcnRlZCBvbiBXaW5kb3dzIDcuXG4gIC8vIEx1Y2tpbHkg8J+YgCBpc24ndCBzdXBwb3J0ZWQuXG4gIGN0eC5maWxsVGV4dChcIvCfmIBcIiwgMCwgMCk7XG4gIHJldHVybiBjdHguZ2V0SW1hZ2VEYXRhKG9mZnNldCwgb2Zmc2V0LCAxLCAxKS5kYXRhWzBdICE9PSAwO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5lYXJlc3RTY3JvbGxhYmxlQ29udGFpbmVyID0gKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbik6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgIH1cbiAgICBjb25zdCB7IG92ZXJmbG93WSB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcbiAgICBjb25zdCBoYXNTY3JvbGxhYmxlQ29udGVudCA9IHBhcmVudC5zY3JvbGxIZWlnaHQgPiBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChcbiAgICAgIGhhc1Njcm9sbGFibGVDb250ZW50ICYmXG4gICAgICAob3ZlcmZsb3dZID09PSBcImF1dG9cIiB8fFxuICAgICAgICBvdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgICAgb3ZlcmZsb3dZID09PSBcIm92ZXJsYXlcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBmb2N1c05lYXJlc3RQYXJlbnQgPSAoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC50YWJJbmRleCA+IC0xKSB7XG4gICAgICBwYXJlbnQuZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2ZW50VW5sb2FkID0gKGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyBOT1RFOiBtb2Rlcm4gYnJvd3NlcnMgbm8gbG9uZ2VyIGFsbG93IHNob3dpbmcgYSBjdXN0b20gbWVzc2FnZSBoZXJlXG4gIGV2ZW50LnJldHVyblZhbHVlID0gXCJcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBieXRlc1RvSGV4U3RyaW5nID0gKGJ5dGVzOiBVaW50OEFycmF5KSA9PiB7XG4gIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKVxuICAgIC5tYXAoKGJ5dGUpID0+IGAwJHtieXRlLnRvU3RyaW5nKDE2KX1gLnNsaWNlKC0yKSlcbiAgICAuam9pbihcIlwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkVGltZXN0YW1wID0gKCkgPT4gKGlzVGVzdEVudigpID8gMSA6IERhdGUubm93KCkpO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGBpZGAgYXR0cmlidXRlLFxuICogb3IgYXJyYXkgb2YgaWRzIChzdHJpbmdzKSwgaW50byBhIE1hcCwga2V5ZCBieSBgaWRgLlxuICovXG5leHBvcnQgY29uc3QgYXJyYXlUb01hcCA9IDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIH0gfCBzdHJpbmc+KFxuICBpdGVtczogcmVhZG9ubHkgVFtdLFxuKSA9PiB7XG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYzogTWFwPHN0cmluZywgVD4sIGVsZW1lbnQpID0+IHtcbiAgICBhY2Muc2V0KHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiID8gZWxlbWVudCA6IGVsZW1lbnQuaWQsIGVsZW1lbnQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIG5ldyBNYXAoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNUZXN0RW52ID0gKCkgPT5cbiAgdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnY/Lk5PREVfRU5WID09PSBcInRlc3RcIjtcblxuZXhwb3J0IGNvbnN0IGlzUHJvZEVudiA9ICgpID0+XG4gIHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XG5cbmV4cG9ydCBjb25zdCB3cmFwRXZlbnQgPSA8VCBleHRlbmRzIEV2ZW50PihuYW1lOiBFVkVOVCwgbmF0aXZlRXZlbnQ6IFQpID0+IHtcbiAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChuYW1lLCB7XG4gICAgZGV0YWlsOiB7XG4gICAgICBuYXRpdmVFdmVudCxcbiAgICB9LFxuICAgIGNhbmNlbGFibGU6IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZU9iamVjdCA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIG9iajogVCxcbiAgdXBkYXRlczogUGFydGlhbDxUPixcbik6IFQgPT4ge1xuICBsZXQgZGlkQ2hhbmdlID0gZmFsc2U7XG4gIGZvciAoY29uc3Qga2V5IGluIHVwZGF0ZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh1cGRhdGVzIGFzIGFueSlba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChvYmogYXMgYW55KVtrZXldID09PSB2YWx1ZSAmJlxuICAgICAgICAvLyBpZiBvYmplY3QsIGFsd2F5cyB1cGRhdGUgYmVjYXVzZSBpdHMgYXR0cnMgY291bGQgaGF2ZSBjaGFuZ2VkXG4gICAgICAgICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBkaWRDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGlkQ2hhbmdlKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ub2JqLFxuICAgIC4uLnVwZGF0ZXMsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAodmFsOiBhbnkpID0+IHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCAodHlwZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlICE9PSBcImZ1bmN0aW9uXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyYW1lID0gKCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCA/IFwidG9wXCIgOiBcImlmcmFtZVwiO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBcImlmcmFtZVwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcm9taXNlTGlrZSA9IChcbiAgdmFsdWU6IGFueSxcbik6IHZhbHVlIGlzIFByb21pc2U8UmVzb2x1dGlvblR5cGU8dHlwZW9mIHZhbHVlPj4gPT4ge1xuICByZXR1cm4gKFxuICAgICEhdmFsdWUgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcInRoZW5cIiBpbiB2YWx1ZSAmJlxuICAgIFwiY2F0Y2hcIiBpbiB2YWx1ZSAmJlxuICAgIFwiZmluYWxseVwiIGluIHZhbHVlXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVlcnlGb2N1c2FibGVFbGVtZW50cyA9IChjb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IGNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXG4gICAgXCJidXR0b24sIGEsIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBkaXZbdGFiaW5kZXhdLCBsYWJlbFt0YWJpbmRleF1cIixcbiAgKTtcblxuICByZXR1cm4gZm9jdXNhYmxlRWxlbWVudHNcbiAgICA/IEFycmF5LmZyb20oZm9jdXNhYmxlRWxlbWVudHMpLmZpbHRlcihcbiAgICAgICAgKGVsZW1lbnQpID0+XG4gICAgICAgICAgZWxlbWVudC50YWJJbmRleCA+IC0xICYmICEoZWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS5kaXNhYmxlZCxcbiAgICAgIClcbiAgICA6IFtdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../utils.ts\n");
3341
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"allowFullScreen\": () => (/* binding */ allowFullScreen),\n/* harmony export */ \"arrayToMap\": () => (/* binding */ arrayToMap),\n/* harmony export */ \"bytesToHexString\": () => (/* binding */ bytesToHexString),\n/* harmony export */ \"capitalizeString\": () => (/* binding */ capitalizeString),\n/* harmony export */ \"chunk\": () => (/* binding */ chunk),\n/* harmony export */ \"debounce\": () => (/* binding */ debounce),\n/* harmony export */ \"distance\": () => (/* binding */ distance),\n/* harmony export */ \"exitFullScreen\": () => (/* binding */ exitFullScreen),\n/* harmony export */ \"findIndex\": () => (/* binding */ findIndex),\n/* harmony export */ \"findLastIndex\": () => (/* binding */ findLastIndex),\n/* harmony export */ \"focusNearestParent\": () => (/* binding */ focusNearestParent),\n/* harmony export */ \"getDateTime\": () => (/* binding */ getDateTime),\n/* harmony export */ \"getFontFamilyString\": () => (/* binding */ getFontFamilyString),\n/* harmony export */ \"getFontString\": () => (/* binding */ getFontString),\n/* harmony export */ \"getFrame\": () => (/* binding */ getFrame),\n/* harmony export */ \"getGlobalCSSVariable\": () => (/* binding */ getGlobalCSSVariable),\n/* harmony export */ \"getNearestScrollableContainer\": () => (/* binding */ getNearestScrollableContainer),\n/* harmony export */ \"getShortcutKey\": () => (/* binding */ getShortcutKey),\n/* harmony export */ \"getUpdatedTimestamp\": () => (/* binding */ getUpdatedTimestamp),\n/* harmony export */ \"getVersion\": () => (/* binding */ getVersion),\n/* harmony export */ \"isFullScreen\": () => (/* binding */ isFullScreen),\n/* harmony export */ \"isInputLike\": () => (/* binding */ isInputLike),\n/* harmony export */ \"isPrimitive\": () => (/* binding */ isPrimitive),\n/* harmony export */ \"isProdEnv\": () => (/* binding */ isProdEnv),\n/* harmony export */ \"isPromiseLike\": () => (/* binding */ isPromiseLike),\n/* harmony export */ \"isRTL\": () => (/* binding */ isRTL),\n/* harmony export */ \"isTestEnv\": () => (/* binding */ isTestEnv),\n/* harmony export */ \"isToolIcon\": () => (/* binding */ isToolIcon),\n/* harmony export */ \"isTransparent\": () => (/* binding */ isTransparent),\n/* harmony export */ \"isWritableElement\": () => (/* binding */ isWritableElement),\n/* harmony export */ \"muteFSAbortError\": () => (/* binding */ muteFSAbortError),\n/* harmony export */ \"nFormatter\": () => (/* binding */ nFormatter),\n/* harmony export */ \"preventUnload\": () => (/* binding */ preventUnload),\n/* harmony export */ \"queryFocusableElements\": () => (/* binding */ queryFocusableElements),\n/* harmony export */ \"removeSelection\": () => (/* binding */ removeSelection),\n/* harmony export */ \"resetCursor\": () => (/* binding */ resetCursor),\n/* harmony export */ \"resolvablePromise\": () => (/* binding */ resolvablePromise),\n/* harmony export */ \"sceneCoordsToViewportCoords\": () => (/* binding */ sceneCoordsToViewportCoords),\n/* harmony export */ \"selectNode\": () => (/* binding */ selectNode),\n/* harmony export */ \"setCursor\": () => (/* binding */ setCursor),\n/* harmony export */ \"setCursorForShape\": () => (/* binding */ setCursorForShape),\n/* harmony export */ \"setDateTimeForTests\": () => (/* binding */ setDateTimeForTests),\n/* harmony export */ \"setEraserCursor\": () => (/* binding */ setEraserCursor),\n/* harmony export */ \"supportsEmoji\": () => (/* binding */ supportsEmoji),\n/* harmony export */ \"throttleRAF\": () => (/* binding */ throttleRAF),\n/* harmony export */ \"tupleToCoors\": () => (/* binding */ tupleToCoors),\n/* harmony export */ \"updateActiveTool\": () => (/* binding */ updateActiveTool),\n/* harmony export */ \"updateObject\": () => (/* binding */ updateObject),\n/* harmony export */ \"viewportCoordsToSceneCoords\": () => (/* binding */ viewportCoordsToSceneCoords),\n/* harmony export */ \"withBatchedUpdates\": () => (/* binding */ withBatchedUpdates),\n/* harmony export */ \"withBatchedUpdatesThrottled\": () => (/* binding */ withBatchedUpdatesThrottled),\n/* harmony export */ \"wrapEvent\": () => (/* binding */ wrapEvent)\n/* harmony export */ });\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! open-color */ \"../../../node_modules/open-color/open-color.json\");\n/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./colors */ \"../../colors.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ \"../../constants.ts\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keys */ \"../../keys.ts\");\n\n\n\n\n\nlet mockDateTime = null;\nconst setDateTimeForTests = (dateTime) => {\n mockDateTime = dateTime;\n};\nconst getDateTime = () => {\n if (mockDateTime) {\n return mockDateTime;\n }\n const date = new Date();\n const year = date.getFullYear();\n const month = `${date.getMonth() + 1}`.padStart(2, \"0\");\n const day = `${date.getDate()}`.padStart(2, \"0\");\n const hr = `${date.getHours()}`.padStart(2, \"0\");\n const min = `${date.getMinutes()}`.padStart(2, \"0\");\n return `${year}-${month}-${day}-${hr}${min}`;\n};\nconst capitalizeString = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nconst isToolIcon = (target) => target instanceof HTMLElement && target.className.includes(\"ToolIcon\");\nconst isInputLike = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\n target instanceof HTMLBRElement || // newline in wysiwyg\n target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target instanceof HTMLSelectElement;\nconst isWritableElement = (target) => (target instanceof HTMLElement && target.dataset.type === \"wysiwyg\") ||\n target instanceof HTMLBRElement || // newline in wysiwyg\n target instanceof HTMLTextAreaElement ||\n (target instanceof HTMLInputElement &&\n (target.type === \"text\" || target.type === \"number\"));\nconst getFontFamilyString = ({ fontFamily, }) => {\n for (const [fontFamilyString, id] of Object.entries(_constants__WEBPACK_IMPORTED_MODULE_2__.FONT_FAMILY)) {\n if (id === fontFamily) {\n return `${fontFamilyString}, ${_constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT}`;\n }\n }\n return _constants__WEBPACK_IMPORTED_MODULE_2__.WINDOWS_EMOJI_FALLBACK_FONT;\n};\n/** returns fontSize+fontFamily string for assignment to DOM elements */\nconst getFontString = ({ fontSize, fontFamily, }) => {\n return `${fontSize}px ${getFontFamilyString({ fontFamily })}`;\n};\nconst debounce = (fn, timeout) => {\n let handle = 0;\n let lastArgs = null;\n const ret = (...args) => {\n lastArgs = args;\n clearTimeout(handle);\n handle = window.setTimeout(() => {\n lastArgs = null;\n fn(...args);\n }, timeout);\n };\n ret.flush = () => {\n clearTimeout(handle);\n if (lastArgs) {\n const _lastArgs = lastArgs;\n lastArgs = null;\n fn(..._lastArgs);\n }\n };\n ret.cancel = () => {\n lastArgs = null;\n clearTimeout(handle);\n };\n return ret;\n};\n// throttle callback to execute once per animation frame\nconst throttleRAF = (fn, opts) => {\n let timerId = null;\n let lastArgs = null;\n let lastArgsTrailing = null;\n const scheduleFunc = (args) => {\n timerId = window.requestAnimationFrame(() => {\n timerId = null;\n fn(...args);\n lastArgs = null;\n if (lastArgsTrailing) {\n lastArgs = lastArgsTrailing;\n lastArgsTrailing = null;\n scheduleFunc(lastArgs);\n }\n });\n };\n const ret = (...args) => {\n if (false) {}\n lastArgs = args;\n if (timerId === null) {\n scheduleFunc(lastArgs);\n }\n else if (opts === null || opts === void 0 ? void 0 : opts.trailing) {\n lastArgsTrailing = args;\n }\n };\n ret.flush = () => {\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n if (lastArgs) {\n fn(...(lastArgsTrailing || lastArgs));\n lastArgs = lastArgsTrailing = null;\n }\n };\n ret.cancel = () => {\n lastArgs = lastArgsTrailing = null;\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n timerId = null;\n }\n };\n return ret;\n};\n// https://github.com/lodash/lodash/blob/es/chunk.js\nconst chunk = (array, size) => {\n if (!array.length || size < 1) {\n return [];\n }\n let index = 0;\n let resIndex = 0;\n const result = Array(Math.ceil(array.length / size));\n while (index < array.length) {\n result[resIndex++] = array.slice(index, (index += size));\n }\n return result;\n};\nconst selectNode = (node) => {\n const selection = window.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(node);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n};\nconst removeSelection = () => {\n const selection = window.getSelection();\n if (selection) {\n selection.removeAllRanges();\n }\n};\nconst distance = (x, y) => Math.abs(x - y);\nconst updateActiveTool = (appState, data) => {\n if (data.type === \"custom\") {\n return Object.assign(Object.assign({}, appState.activeTool), { type: \"custom\", customType: data.customType });\n }\n return Object.assign(Object.assign({}, appState.activeTool), { lastActiveToolBeforeEraser: data.lastActiveToolBeforeEraser === undefined\n ? appState.activeTool.lastActiveToolBeforeEraser\n : data.lastActiveToolBeforeEraser, type: data.type, customType: null });\n};\nconst resetCursor = (canvas) => {\n if (canvas) {\n canvas.style.cursor = \"\";\n }\n};\nconst setCursor = (canvas, cursor) => {\n if (canvas) {\n canvas.style.cursor = cursor;\n }\n};\nlet eraserCanvasCache;\nlet previewDataURL;\nconst setEraserCursor = (canvas, theme) => {\n const cursorImageSizePx = 20;\n const drawCanvas = () => {\n const isDarkTheme = theme === _constants__WEBPACK_IMPORTED_MODULE_2__.THEME.DARK;\n eraserCanvasCache = document.createElement(\"canvas\");\n eraserCanvasCache.theme = theme;\n eraserCanvasCache.height = cursorImageSizePx;\n eraserCanvasCache.width = cursorImageSizePx;\n const context = eraserCanvasCache.getContext(\"2d\");\n context.lineWidth = 1;\n context.beginPath();\n context.arc(eraserCanvasCache.width / 2, eraserCanvasCache.height / 2, 5, 0, 2 * Math.PI);\n context.fillStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.black : open_color__WEBPACK_IMPORTED_MODULE_0__.white;\n context.fill();\n context.strokeStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_0__.white : open_color__WEBPACK_IMPORTED_MODULE_0__.black;\n context.stroke();\n previewDataURL = eraserCanvasCache.toDataURL(_constants__WEBPACK_IMPORTED_MODULE_2__.MIME_TYPES.svg);\n };\n if (!eraserCanvasCache || eraserCanvasCache.theme !== theme) {\n drawCanvas();\n }\n setCursor(canvas, `url(${previewDataURL}) ${cursorImageSizePx / 2} ${cursorImageSizePx / 2}, auto`);\n};\nconst setCursorForShape = (canvas, appState) => {\n if (!canvas) {\n return;\n }\n if (appState.activeTool.type === \"selection\") {\n resetCursor(canvas);\n }\n else if (appState.activeTool.type === \"eraser\") {\n setEraserCursor(canvas, appState.theme);\n // do nothing if image tool is selected which suggests there's\n // a image-preview set as the cursor\n // Ignore custom type as well and let host decide\n }\n else if (![\"image\", \"custom\"].includes(appState.activeTool.type)) {\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_2__.CURSOR_TYPE.CROSSHAIR;\n }\n};\nconst isFullScreen = () => { var _a; return ((_a = document.fullscreenElement) === null || _a === void 0 ? void 0 : _a.nodeName) === \"HTML\"; };\nconst allowFullScreen = () => document.documentElement.requestFullscreen();\nconst exitFullScreen = () => document.exitFullscreen();\nconst getShortcutKey = (shortcut) => {\n shortcut = shortcut\n .replace(/\\bAlt\\b/i, \"Alt\")\n .replace(/\\bShift\\b/i, \"Shift\")\n .replace(/\\b(Enter|Return)\\b/i, \"Enter\")\n .replace(/\\bDel\\b/i, \"Delete\");\n if (_keys__WEBPACK_IMPORTED_MODULE_4__.isDarwin) {\n return shortcut\n .replace(/\\bCtrlOrCmd\\b/i, \"Cmd\")\n .replace(/\\bAlt\\b/i, \"Option\");\n }\n return shortcut.replace(/\\bCtrlOrCmd\\b/i, \"Ctrl\");\n};\nconst viewportCoordsToSceneCoords = ({ clientX, clientY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\n const invScale = 1 / zoom.value;\n const x = (clientX - offsetLeft) * invScale - scrollX;\n const y = (clientY - offsetTop) * invScale - scrollY;\n return { x, y };\n};\nconst sceneCoordsToViewportCoords = ({ sceneX, sceneY }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }) => {\n const x = (sceneX + scrollX) * zoom.value + offsetLeft;\n const y = (sceneY + scrollY) * zoom.value + offsetTop;\n return { x, y };\n};\nconst getGlobalCSSVariable = (name) => getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);\nconst RS_LTR_CHARS = \"A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\" +\n \"\\u2C00-\\uFB1C\\uFDFE-\\uFE6F\\uFEFD-\\uFFFF\";\nconst RS_RTL_CHARS = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\nconst RE_RTL_CHECK = new RegExp(`^[^${RS_LTR_CHARS}]*[${RS_RTL_CHARS}]`);\n/**\n * Checks whether first directional character is RTL. Meaning whether it starts\n * with RTL characters, or indeterminate (numbers etc.) characters followed by\n * RTL.\n * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171\n */\nconst isRTL = (text) => RE_RTL_CHECK.test(text);\nconst tupleToCoors = (xyTuple) => {\n const [x, y] = xyTuple;\n return { x, y };\n};\n/** use as a rejectionHandler to mute filesystem Abort errors */\nconst muteFSAbortError = (error) => {\n if ((error === null || error === void 0 ? void 0 : error.name) === \"AbortError\") {\n console.warn(error);\n return;\n }\n throw error;\n};\nconst findIndex = (array, cb, fromIndex = 0) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\n let index = fromIndex - 1;\n while (++index < array.length) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\nconst findLastIndex = (array, cb, fromIndex = array.length - 1) => {\n if (fromIndex < 0) {\n fromIndex = array.length + fromIndex;\n }\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\n let index = fromIndex + 1;\n while (--index > -1) {\n if (cb(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\nconst isTransparent = (color) => {\n const isRGBTransparent = color.length === 5 && color.substr(4, 1) === \"0\";\n const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === \"00\";\n return (isRGBTransparent ||\n isRRGGBBTransparent ||\n color === _colors__WEBPACK_IMPORTED_MODULE_1__[\"default\"].elementBackground[0]);\n};\nconst resolvablePromise = () => {\n let resolve;\n let reject;\n const promise = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n promise.resolve = resolve;\n promise.reject = reject;\n return promise;\n};\n/**\n * @param func handler taking at most single parameter (event).\n */\nconst withBatchedUpdates = (func) => ((event) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\n});\n/**\n * barches React state updates and throttles the calls to a single call per\n * animation frame\n */\nconst withBatchedUpdatesThrottled = (func) => {\n // @ts-ignore\n return throttleRAF(((event) => {\n (0,react_dom__WEBPACK_IMPORTED_MODULE_3__.unstable_batchedUpdates)(func, event);\n }));\n};\n//https://stackoverflow.com/a/9462382/8418\nconst nFormatter = (num, digits) => {\n const si = [\n { value: 1, symbol: \"b\" },\n { value: 1e3, symbol: \"k\" },\n { value: 1e6, symbol: \"M\" },\n { value: 1e9, symbol: \"G\" },\n ];\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\n let index;\n for (index = si.length - 1; index > 0; index--) {\n if (num >= si[index].value) {\n break;\n }\n }\n return ((num / si[index].value).toFixed(digits).replace(rx, \"$1\") + si[index].symbol);\n};\nconst getVersion = () => {\n var _a;\n return (((_a = document.querySelector('meta[name=\"version\"]')) === null || _a === void 0 ? void 0 : _a.content) ||\n _constants__WEBPACK_IMPORTED_MODULE_2__.DEFAULT_VERSION);\n};\n// Adapted from https://github.com/Modernizr/Modernizr/blob/master/feature-detects/emoji.js\nconst supportsEmoji = () => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return false;\n }\n const offset = 12;\n ctx.fillStyle = \"#f00\";\n ctx.textBaseline = \"top\";\n ctx.font = \"32px Arial\";\n // Modernizr used 🐨, but it is sort of supported on Windows 7.\n // Luckily 😀 isn't supported.\n ctx.fillText(\"😀\", 0, 0);\n return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\n};\nconst getNearestScrollableContainer = (element) => {\n let parent = element.parentElement;\n while (parent) {\n if (parent === document.body) {\n return document;\n }\n const { overflowY } = window.getComputedStyle(parent);\n const hasScrollableContent = parent.scrollHeight > parent.clientHeight;\n if (hasScrollableContent &&\n (overflowY === \"auto\" ||\n overflowY === \"scroll\" ||\n overflowY === \"overlay\")) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return document;\n};\nconst focusNearestParent = (element) => {\n let parent = element.parentElement;\n while (parent) {\n if (parent.tabIndex > -1) {\n parent.focus();\n return;\n }\n parent = parent.parentElement;\n }\n};\nconst preventUnload = (event) => {\n event.preventDefault();\n // NOTE: modern browsers no longer allow showing a custom message here\n event.returnValue = \"\";\n};\nconst bytesToHexString = (bytes) => {\n return Array.from(bytes)\n .map((byte) => `0${byte.toString(16)}`.slice(-2))\n .join(\"\");\n};\nconst getUpdatedTimestamp = () => (isTestEnv() ? 1 : Date.now());\n/**\n * Transforms array of objects containing `id` attribute,\n * or array of ids (strings), into a Map, keyd by `id`.\n */\nconst arrayToMap = (items) => {\n return items.reduce((acc, element) => {\n acc.set(typeof element === \"string\" ? element : element.id, element);\n return acc;\n }, new Map());\n};\nconst isTestEnv = () => { var _a; return typeof process !== \"undefined\" && ((_a = ({\"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\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.12.0-58845e4\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"test\"; };\nconst isProdEnv = () => { var _a; return typeof process !== \"undefined\" && ((_a = ({\"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\":\"\",\"PKG_NAME\":\"@excalidraw/excalidraw\",\"PKG_VERSION\":\"0.12.0-58845e4\",\"IS_EXCALIDRAW_NPM_PACKAGE\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \"production\"; };\nconst wrapEvent = (name, nativeEvent) => {\n return new CustomEvent(name, {\n detail: {\n nativeEvent,\n },\n cancelable: true,\n });\n};\nconst updateObject = (obj, updates) => {\n let didChange = false;\n for (const key in updates) {\n const value = updates[key];\n if (typeof value !== \"undefined\") {\n if (obj[key] === value &&\n // if object, always update because its attrs could have changed\n (typeof value !== \"object\" || value === null)) {\n continue;\n }\n didChange = true;\n }\n }\n if (!didChange) {\n return obj;\n }\n return Object.assign(Object.assign({}, obj), updates);\n};\nconst isPrimitive = (val) => {\n const type = typeof val;\n return val == null || (type !== \"object\" && type !== \"function\");\n};\nconst getFrame = () => {\n try {\n return window.self === window.top ? \"top\" : \"iframe\";\n }\n catch (error) {\n return \"iframe\";\n }\n};\nconst isPromiseLike = (value) => {\n return (!!value &&\n typeof value === \"object\" &&\n \"then\" in value &&\n \"catch\" in value &&\n \"finally\" in value);\n};\nconst queryFocusableElements = (container) => {\n const focusableElements = container === null || container === void 0 ? void 0 : container.querySelectorAll(\"button, a, input, select, textarea, div[tabindex], label[tabindex]\");\n return focusableElements\n ? Array.from(focusableElements).filter((element) => element.tabIndex > -1 && !element.disabled)\n : [];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFFBQVEsSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDO0FBRUssTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO0lBQzNCLElBQUk7UUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7S0FDdEQ7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQyxDQUFDO0FBRUssTUFBTSxhQUFhLEdBQUcsQ0FDM0IsS0FBVSxFQUNzQyxFQUFFO0lBQ2xELE9BQU8sQ0FDTCxDQUFDLENBQUMsS0FBSztRQUNQLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsTUFBTSxJQUFJLEtBQUs7UUFDZixPQUFPLElBQUksS0FBSztRQUNoQixTQUFTLElBQUksS0FBSyxDQUNuQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUssTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFNBQTZCLEVBQUUsRUFBRTtJQUN0RSxNQUFNLGlCQUFpQixHQUFHLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxnQkFBZ0IsQ0FDbkQsb0VBQW9FLENBQ3JFLENBQUM7SUFFRixPQUFPLGlCQUFpQjtRQUN0QixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBRSxPQUE0QixDQUFDLFFBQVEsQ0FDbkU7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ1QsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3V0aWxzLnRzPzc2M2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9jIGZyb20gXCJvcGVuLWNvbG9yXCI7XG5cbmltcG9ydCBjb2xvcnMgZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQge1xuICBDVVJTT1JfVFlQRSxcbiAgREVGQVVMVF9WRVJTSU9OLFxuICBFVkVOVCxcbiAgRk9OVF9GQU1JTFksXG4gIE1JTUVfVFlQRVMsXG4gIFRIRU1FLFxuICBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRm9udEZhbWlseVZhbHVlcywgRm9udFN0cmluZyB9IGZyb20gXCIuL2VsZW1lbnQvdHlwZXNcIjtcbmltcG9ydCB7IEFwcFN0YXRlLCBEYXRhVVJMLCBMYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlciwgWm9vbSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IGlzRGFyd2luIH0gZnJvbSBcIi4va2V5c1wiO1xuaW1wb3J0IHsgU0hBUEVTIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5cbmxldCBtb2NrRGF0ZVRpbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgY29uc3Qgc2V0RGF0ZVRpbWVGb3JUZXN0cyA9IChkYXRlVGltZTogc3RyaW5nKSA9PiB7XG4gIG1vY2tEYXRlVGltZSA9IGRhdGVUaW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGVUaW1lID0gKCkgPT4ge1xuICBpZiAobW9ja0RhdGVUaW1lKSB7XG4gICAgcmV0dXJuIG1vY2tEYXRlVGltZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aCA9IGAke2RhdGUuZ2V0TW9udGgoKSArIDF9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIGNvbnN0IGRheSA9IGAke2RhdGUuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICBjb25zdCBociA9IGAke2RhdGUuZ2V0SG91cnMoKX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgY29uc3QgbWluID0gYCR7ZGF0ZS5nZXRNaW51dGVzKCl9YC5wYWRTdGFydCgyLCBcIjBcIik7XG5cbiAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fS0ke2hyfSR7bWlufWA7XG59O1xuXG5leHBvcnQgY29uc3QgY2FwaXRhbGl6ZVN0cmluZyA9IChzdHI6IHN0cmluZykgPT5cbiAgc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuXG5leHBvcnQgY29uc3QgaXNUb29sSWNvbiA9IChcbiAgdGFyZ2V0OiBFbGVtZW50IHwgRXZlbnRUYXJnZXQgfCBudWxsLFxuKTogdGFyZ2V0IGlzIEhUTUxFbGVtZW50ID0+XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5jbGFzc05hbWUuaW5jbHVkZXMoXCJUb29sSWNvblwiKTtcblxuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKFxuICB0YXJnZXQ6IEVsZW1lbnQgfCBFdmVudFRhcmdldCB8IG51bGwsXG4pOiB0YXJnZXQgaXNcbiAgfCBIVE1MSW5wdXRFbGVtZW50XG4gIHwgSFRNTFRleHRBcmVhRWxlbWVudFxuICB8IEhUTUxTZWxlY3RFbGVtZW50XG4gIHwgSFRNTEJSRWxlbWVudFxuICB8IEhUTUxEaXZFbGVtZW50ID0+XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIikgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJSRWxlbWVudCB8fCAvLyBuZXdsaW5lIGluIHd5c2l3eWdcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fFxuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8XG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50O1xuXG5leHBvcnQgY29uc3QgaXNXcml0YWJsZUVsZW1lbnQgPSAoXG4gIHRhcmdldDogRWxlbWVudCB8IEV2ZW50VGFyZ2V0IHwgbnVsbCxcbik6IHRhcmdldCBpc1xuICB8IEhUTUxJbnB1dEVsZW1lbnRcbiAgfCBIVE1MVGV4dEFyZWFFbGVtZW50XG4gIHwgSFRNTEJSRWxlbWVudFxuICB8IEhUTUxEaXZFbGVtZW50ID0+XG4gICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIikgfHxcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJSRWxlbWVudCB8fCAvLyBuZXdsaW5lIGluIHd5c2l3eWdcbiAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCB8fFxuICAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJlxuICAgICh0YXJnZXQudHlwZSA9PT0gXCJ0ZXh0XCIgfHwgdGFyZ2V0LnR5cGUgPT09IFwibnVtYmVyXCIpKTtcblxuZXhwb3J0IGNvbnN0IGdldEZvbnRGYW1pbHlTdHJpbmcgPSAoe1xuICBmb250RmFtaWx5LFxufToge1xuICBmb250RmFtaWx5OiBGb250RmFtaWx5VmFsdWVzO1xufSkgPT4ge1xuICBmb3IgKGNvbnN0IFtmb250RmFtaWx5U3RyaW5nLCBpZF0gb2YgT2JqZWN0LmVudHJpZXMoRk9OVF9GQU1JTFkpKSB7XG4gICAgaWYgKGlkID09PSBmb250RmFtaWx5KSB7XG4gICAgICByZXR1cm4gYCR7Zm9udEZhbWlseVN0cmluZ30sICR7V0lORE9XU19FTU9KSV9GQUxMQkFDS19GT05UfWA7XG4gICAgfVxuICB9XG4gIHJldHVybiBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQ7XG59O1xuXG4vKiogcmV0dXJucyBmb250U2l6ZStmb250RmFtaWx5IHN0cmluZyBmb3IgYXNzaWdubWVudCB0byBET00gZWxlbWVudHMgKi9cbmV4cG9ydCBjb25zdCBnZXRGb250U3RyaW5nID0gKHtcbiAgZm9udFNpemUsXG4gIGZvbnRGYW1pbHksXG59OiB7XG4gIGZvbnRTaXplOiBudW1iZXI7XG4gIGZvbnRGYW1pbHk6IEZvbnRGYW1pbHlWYWx1ZXM7XG59KSA9PiB7XG4gIHJldHVybiBgJHtmb250U2l6ZX1weCAke2dldEZvbnRGYW1pbHlTdHJpbmcoeyBmb250RmFtaWx5IH0pfWAgYXMgRm9udFN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBkZWJvdW5jZSA9IDxUIGV4dGVuZHMgYW55W10+KFxuICBmbjogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG4gIHRpbWVvdXQ6IG51bWJlcixcbikgPT4ge1xuICBsZXQgaGFuZGxlID0gMDtcbiAgbGV0IGxhc3RBcmdzOiBUIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IHJldCA9ICguLi5hcmdzOiBUKSA9PiB7XG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuICAgIGhhbmRsZSA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgIH0sIHRpbWVvdXQpO1xuICB9O1xuICByZXQuZmx1c2ggPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KGhhbmRsZSk7XG4gICAgaWYgKGxhc3RBcmdzKSB7XG4gICAgICBjb25zdCBfbGFzdEFyZ3MgPSBsYXN0QXJncztcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLl9sYXN0QXJncyk7XG4gICAgfVxuICB9O1xuICByZXQuY2FuY2VsID0gKCkgPT4ge1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBjbGVhclRpbWVvdXQoaGFuZGxlKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIHRocm90dGxlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSBwZXIgYW5pbWF0aW9uIGZyYW1lXG5leHBvcnQgY29uc3QgdGhyb3R0bGVSQUYgPSA8VCBleHRlbmRzIGFueVtdPihcbiAgZm46ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuICBvcHRzPzogeyB0cmFpbGluZz86IGJvb2xlYW4gfSxcbikgPT4ge1xuICBsZXQgdGltZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGxldCBsYXN0QXJnczogVCB8IG51bGwgPSBudWxsO1xuICBsZXQgbGFzdEFyZ3NUcmFpbGluZzogVCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHNjaGVkdWxlRnVuYyA9IChhcmdzOiBUKSA9PiB7XG4gICAgdGltZXJJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGltZXJJZCA9IG51bGw7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGlmIChsYXN0QXJnc1RyYWlsaW5nKSB7XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdEFyZ3NUcmFpbGluZztcbiAgICAgICAgbGFzdEFyZ3NUcmFpbGluZyA9IG51bGw7XG4gICAgICAgIHNjaGVkdWxlRnVuYyhsYXN0QXJncyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcmV0ID0gKC4uLmFyZ3M6IFQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICBmbiguLi5hcmdzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgIGlmICh0aW1lcklkID09PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZUZ1bmMobGFzdEFyZ3MpO1xuICAgIH0gZWxzZSBpZiAob3B0cz8udHJhaWxpbmcpIHtcbiAgICAgIGxhc3RBcmdzVHJhaWxpbmcgPSBhcmdzO1xuICAgIH1cbiAgfTtcbiAgcmV0LmZsdXNoID0gKCkgPT4ge1xuICAgIGlmICh0aW1lcklkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKTtcbiAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAobGFzdEFyZ3MpIHtcbiAgICAgIGZuKC4uLihsYXN0QXJnc1RyYWlsaW5nIHx8IGxhc3RBcmdzKSk7XG4gICAgICBsYXN0QXJncyA9IGxhc3RBcmdzVHJhaWxpbmcgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0LmNhbmNlbCA9ICgpID0+IHtcbiAgICBsYXN0QXJncyA9IGxhc3RBcmdzVHJhaWxpbmcgPSBudWxsO1xuICAgIGlmICh0aW1lcklkICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKTtcbiAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvZXMvY2h1bmsuanNcbmV4cG9ydCBjb25zdCBjaHVuayA9IDxUIGV4dGVuZHMgYW55PihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgc2l6ZTogbnVtYmVyLFxuKTogVFtdW10gPT4ge1xuICBpZiAoIWFycmF5Lmxlbmd0aCB8fCBzaXplIDwgMSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgaW5kZXggPSAwO1xuICBsZXQgcmVzSW5kZXggPSAwO1xuICBjb25zdCByZXN1bHQgPSBBcnJheShNYXRoLmNlaWwoYXJyYXkubGVuZ3RoIC8gc2l6ZSkpO1xuICB3aGlsZSAoaW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBhcnJheS5zbGljZShpbmRleCwgKGluZGV4ICs9IHNpemUpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdE5vZGUgPSAobm9kZTogRWxlbWVudCkgPT4ge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlU2VsZWN0aW9uID0gKCkgPT4ge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkaXN0YW5jZSA9ICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4gTWF0aC5hYnMoeCAtIHkpO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQWN0aXZlVG9vbCA9IChcbiAgYXBwU3RhdGU6IFBpY2s8QXBwU3RhdGUsIFwiYWN0aXZlVG9vbFwiPixcbiAgZGF0YTogKFxuICAgIHwgeyB0eXBlOiB0eXBlb2YgU0hBUEVTW251bWJlcl1bXCJ2YWx1ZVwiXSB8IFwiZXJhc2VyXCIgfVxuICAgIHwgeyB0eXBlOiBcImN1c3RvbVwiOyBjdXN0b21UeXBlOiBzdHJpbmcgfVxuICApICYgeyBsYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcj86IExhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyIH0sXG4pOiBBcHBTdGF0ZVtcImFjdGl2ZVRvb2xcIl0gPT4ge1xuICBpZiAoZGF0YS50eXBlID09PSBcImN1c3RvbVwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwcFN0YXRlLmFjdGl2ZVRvb2wsXG4gICAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgICAgY3VzdG9tVHlwZTogZGF0YS5jdXN0b21UeXBlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmFwcFN0YXRlLmFjdGl2ZVRvb2wsXG4gICAgbGFzdEFjdGl2ZVRvb2xCZWZvcmVFcmFzZXI6XG4gICAgICBkYXRhLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBhcHBTdGF0ZS5hY3RpdmVUb29sLmxhc3RBY3RpdmVUb29sQmVmb3JlRXJhc2VyXG4gICAgICAgIDogZGF0YS5sYXN0QWN0aXZlVG9vbEJlZm9yZUVyYXNlcixcbiAgICB0eXBlOiBkYXRhLnR5cGUsXG4gICAgY3VzdG9tVHlwZTogbnVsbCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNldEN1cnNvciA9IChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IFwiXCI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXRDdXJzb3IgPSAoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsIGN1cnNvcjogc3RyaW5nKSA9PiB7XG4gIGlmIChjYW52YXMpIHtcbiAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xuICB9XG59O1xuXG5sZXQgZXJhc2VyQ2FudmFzQ2FjaGU6IGFueTtcbmxldCBwcmV2aWV3RGF0YVVSTDogc3RyaW5nO1xuZXhwb3J0IGNvbnN0IHNldEVyYXNlckN1cnNvciA9IChcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwsXG4gIHRoZW1lOiBBcHBTdGF0ZVtcInRoZW1lXCJdLFxuKSA9PiB7XG4gIGNvbnN0IGN1cnNvckltYWdlU2l6ZVB4ID0gMjA7XG5cbiAgY29uc3QgZHJhd0NhbnZhcyA9ICgpID0+IHtcbiAgICBjb25zdCBpc0RhcmtUaGVtZSA9IHRoZW1lID09PSBUSEVNRS5EQVJLO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS50aGVtZSA9IHRoZW1lO1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLmhlaWdodCA9IGN1cnNvckltYWdlU2l6ZVB4O1xuICAgIGVyYXNlckNhbnZhc0NhY2hlLndpZHRoID0gY3Vyc29ySW1hZ2VTaXplUHg7XG4gICAgY29uc3QgY29udGV4dCA9IGVyYXNlckNhbnZhc0NhY2hlLmdldENvbnRleHQoXCIyZFwiKSE7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSAxO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgY29udGV4dC5hcmMoXG4gICAgICBlcmFzZXJDYW52YXNDYWNoZS53aWR0aCAvIDIsXG4gICAgICBlcmFzZXJDYW52YXNDYWNoZS5oZWlnaHQgLyAyLFxuICAgICAgNSxcbiAgICAgIDAsXG4gICAgICAyICogTWF0aC5QSSxcbiAgICApO1xuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gaXNEYXJrVGhlbWUgPyBvYy5ibGFjayA6IG9jLndoaXRlO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBpc0RhcmtUaGVtZSA/IG9jLndoaXRlIDogb2MuYmxhY2s7XG4gICAgY29udGV4dC5zdHJva2UoKTtcbiAgICBwcmV2aWV3RGF0YVVSTCA9IGVyYXNlckNhbnZhc0NhY2hlLnRvRGF0YVVSTChNSU1FX1RZUEVTLnN2ZykgYXMgRGF0YVVSTDtcbiAgfTtcbiAgaWYgKCFlcmFzZXJDYW52YXNDYWNoZSB8fCBlcmFzZXJDYW52YXNDYWNoZS50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICBkcmF3Q2FudmFzKCk7XG4gIH1cblxuICBzZXRDdXJzb3IoXG4gICAgY2FudmFzLFxuICAgIGB1cmwoJHtwcmV2aWV3RGF0YVVSTH0pICR7Y3Vyc29ySW1hZ2VTaXplUHggLyAyfSAke1xuICAgICAgY3Vyc29ySW1hZ2VTaXplUHggLyAyXG4gICAgfSwgYXV0b2AsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q3Vyc29yRm9yU2hhcGUgPSAoXG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsLFxuICBhcHBTdGF0ZTogQXBwU3RhdGUsXG4pID0+IHtcbiAgaWYgKCFjYW52YXMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSA9PT0gXCJzZWxlY3Rpb25cIikge1xuICAgIHJlc2V0Q3Vyc29yKGNhbnZhcyk7XG4gIH0gZWxzZSBpZiAoYXBwU3RhdGUuYWN0aXZlVG9vbC50eXBlID09PSBcImVyYXNlclwiKSB7XG4gICAgc2V0RXJhc2VyQ3Vyc29yKGNhbnZhcywgYXBwU3RhdGUudGhlbWUpO1xuICAgIC8vIGRvIG5vdGhpbmcgaWYgaW1hZ2UgdG9vbCBpcyBzZWxlY3RlZCB3aGljaCBzdWdnZXN0cyB0aGVyZSdzXG4gICAgLy8gYSBpbWFnZS1wcmV2aWV3IHNldCBhcyB0aGUgY3Vyc29yXG4gICAgLy8gSWdub3JlIGN1c3RvbSB0eXBlIGFzIHdlbGwgYW5kIGxldCBob3N0IGRlY2lkZVxuICB9IGVsc2UgaWYgKCFbXCJpbWFnZVwiLCBcImN1c3RvbVwiXS5pbmNsdWRlcyhhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUpKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IENVUlNPUl9UWVBFLkNST1NTSEFJUjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRnVsbFNjcmVlbiA9ICgpID0+XG4gIGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50Py5ub2RlTmFtZSA9PT0gXCJIVE1MXCI7XG5cbmV4cG9ydCBjb25zdCBhbGxvd0Z1bGxTY3JlZW4gPSAoKSA9PlxuICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGV4aXRGdWxsU2NyZWVuID0gKCkgPT4gZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcblxuZXhwb3J0IGNvbnN0IGdldFNob3J0Y3V0S2V5ID0gKHNob3J0Y3V0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBzaG9ydGN1dCA9IHNob3J0Y3V0XG4gICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIkFsdFwiKVxuICAgIC5yZXBsYWNlKC9cXGJTaGlmdFxcYi9pLCBcIlNoaWZ0XCIpXG4gICAgLnJlcGxhY2UoL1xcYihFbnRlcnxSZXR1cm4pXFxiL2ksIFwiRW50ZXJcIilcbiAgICAucmVwbGFjZSgvXFxiRGVsXFxiL2ksIFwiRGVsZXRlXCIpO1xuXG4gIGlmIChpc0Rhcndpbikge1xuICAgIHJldHVybiBzaG9ydGN1dFxuICAgICAgLnJlcGxhY2UoL1xcYkN0cmxPckNtZFxcYi9pLCBcIkNtZFwiKVxuICAgICAgLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIk9wdGlvblwiKTtcbiAgfVxuICByZXR1cm4gc2hvcnRjdXQucmVwbGFjZSgvXFxiQ3RybE9yQ21kXFxiL2ksIFwiQ3RybFwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2aWV3cG9ydENvb3Jkc1RvU2NlbmVDb29yZHMgPSAoXG4gIHsgY2xpZW50WCwgY2xpZW50WSB9OiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0sXG4gIHtcbiAgICB6b29tLFxuICAgIG9mZnNldExlZnQsXG4gICAgb2Zmc2V0VG9wLFxuICAgIHNjcm9sbFgsXG4gICAgc2Nyb2xsWSxcbiAgfToge1xuICAgIHpvb206IFpvb207XG4gICAgb2Zmc2V0TGVmdDogbnVtYmVyO1xuICAgIG9mZnNldFRvcDogbnVtYmVyO1xuICAgIHNjcm9sbFg6IG51bWJlcjtcbiAgICBzY3JvbGxZOiBudW1iZXI7XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgaW52U2NhbGUgPSAxIC8gem9vbS52YWx1ZTtcbiAgY29uc3QgeCA9IChjbGllbnRYIC0gb2Zmc2V0TGVmdCkgKiBpbnZTY2FsZSAtIHNjcm9sbFg7XG4gIGNvbnN0IHkgPSAoY2xpZW50WSAtIG9mZnNldFRvcCkgKiBpbnZTY2FsZSAtIHNjcm9sbFk7XG5cbiAgcmV0dXJuIHsgeCwgeSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNjZW5lQ29vcmRzVG9WaWV3cG9ydENvb3JkcyA9IChcbiAgeyBzY2VuZVgsIHNjZW5lWSB9OiB7IHNjZW5lWDogbnVtYmVyOyBzY2VuZVk6IG51bWJlciB9LFxuICB7XG4gICAgem9vbSxcbiAgICBvZmZzZXRMZWZ0LFxuICAgIG9mZnNldFRvcCxcbiAgICBzY3JvbGxYLFxuICAgIHNjcm9sbFksXG4gIH06IHtcbiAgICB6b29tOiBab29tO1xuICAgIG9mZnNldExlZnQ6IG51bWJlcjtcbiAgICBvZmZzZXRUb3A6IG51bWJlcjtcbiAgICBzY3JvbGxYOiBudW1iZXI7XG4gICAgc2Nyb2xsWTogbnVtYmVyO1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IHggPSAoc2NlbmVYICsgc2Nyb2xsWCkgKiB6b29tLnZhbHVlICsgb2Zmc2V0TGVmdDtcbiAgY29uc3QgeSA9IChzY2VuZVkgKyBzY3JvbGxZKSAqIHpvb20udmFsdWUgKyBvZmZzZXRUb3A7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHbG9iYWxDU1NWYXJpYWJsZSA9IChuYW1lOiBzdHJpbmcpID0+XG4gIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGAtLSR7bmFtZX1gKTtcblxuY29uc3QgUlNfTFRSX0NIQVJTID1cbiAgXCJBLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQjhcXHUwMzAwLVxcdTA1OTBcXHUwODAwLVxcdTFGRkZcIiArXG4gIFwiXFx1MkMwMC1cXHVGQjFDXFx1RkRGRS1cXHVGRTZGXFx1RkVGRC1cXHVGRkZGXCI7XG5jb25zdCBSU19SVExfQ0hBUlMgPSBcIlxcdTA1OTEtXFx1MDdGRlxcdUZCMUQtXFx1RkRGRFxcdUZFNzAtXFx1RkVGQ1wiO1xuY29uc3QgUkVfUlRMX0NIRUNLID0gbmV3IFJlZ0V4cChgXlteJHtSU19MVFJfQ0hBUlN9XSpbJHtSU19SVExfQ0hBUlN9XWApO1xuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBmaXJzdCBkaXJlY3Rpb25hbCBjaGFyYWN0ZXIgaXMgUlRMLiBNZWFuaW5nIHdoZXRoZXIgaXQgc3RhcnRzXG4gKiAgd2l0aCBSVEwgY2hhcmFjdGVycywgb3IgaW5kZXRlcm1pbmF0ZSAobnVtYmVycyBldGMuKSBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5XG4gKiAgUlRMLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC8xNzIyI2Rpc2N1c3Npb25fcjQzNjM0MDE3MVxuICovXG5leHBvcnQgY29uc3QgaXNSVEwgPSAodGV4dDogc3RyaW5nKSA9PiBSRV9SVExfQ0hFQ0sudGVzdCh0ZXh0KTtcblxuZXhwb3J0IGNvbnN0IHR1cGxlVG9Db29ycyA9IChcbiAgeHlUdXBsZTogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSxcbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9PiB7XG4gIGNvbnN0IFt4LCB5XSA9IHh5VHVwbGU7XG4gIHJldHVybiB7IHgsIHkgfTtcbn07XG5cbi8qKiB1c2UgYXMgYSByZWplY3Rpb25IYW5kbGVyIHRvIG11dGUgZmlsZXN5c3RlbSBBYm9ydCBlcnJvcnMgKi9cbmV4cG9ydCBjb25zdCBtdXRlRlNBYm9ydEVycm9yID0gKGVycm9yPzogRXJyb3IpID0+IHtcbiAgaWYgKGVycm9yPy5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgIGNvbnNvbGUud2FybihlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IGVycm9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRJbmRleCA9IDxUPihcbiAgYXJyYXk6IHJlYWRvbmx5IFRbXSxcbiAgY2I6IChlbGVtZW50OiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogcmVhZG9ubHkgVFtdKSA9PiBib29sZWFuLFxuICBmcm9tSW5kZXg6IG51bWJlciA9IDAsXG4pID0+IHtcbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBhcnJheS5sZW5ndGggKyBmcm9tSW5kZXg7XG4gIH1cbiAgZnJvbUluZGV4ID0gTWF0aC5taW4oYXJyYXkubGVuZ3RoLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4IC0gMTtcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICBpZiAoY2IoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdEluZGV4ID0gPFQ+KFxuICBhcnJheTogcmVhZG9ubHkgVFtdLFxuICBjYjogKGVsZW1lbnQ6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiByZWFkb25seSBUW10pID0+IGJvb2xlYW4sXG4gIGZyb21JbmRleDogbnVtYmVyID0gYXJyYXkubGVuZ3RoIC0gMSxcbikgPT4ge1xuICBpZiAoZnJvbUluZGV4IDwgMCkge1xuICAgIGZyb21JbmRleCA9IGFycmF5Lmxlbmd0aCArIGZyb21JbmRleDtcbiAgfVxuICBmcm9tSW5kZXggPSBNYXRoLm1pbihhcnJheS5sZW5ndGggLSAxLCBNYXRoLm1heChmcm9tSW5kZXgsIDApKTtcbiAgbGV0IGluZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgd2hpbGUgKC0taW5kZXggPiAtMSkge1xuICAgIGlmIChjYihhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVHJhbnNwYXJlbnQgPSAoY29sb3I6IHN0cmluZykgPT4ge1xuICBjb25zdCBpc1JHQlRyYW5zcGFyZW50ID0gY29sb3IubGVuZ3RoID09PSA1ICYmIGNvbG9yLnN1YnN0cig0LCAxKSA9PT0gXCIwXCI7XG4gIGNvbnN0IGlzUlJHR0JCVHJhbnNwYXJlbnQgPSBjb2xvci5sZW5ndGggPT09IDkgJiYgY29sb3Iuc3Vic3RyKDcsIDIpID09PSBcIjAwXCI7XG4gIHJldHVybiAoXG4gICAgaXNSR0JUcmFuc3BhcmVudCB8fFxuICAgIGlzUlJHR0JCVHJhbnNwYXJlbnQgfHxcbiAgICBjb2xvciA9PT0gY29sb3JzLmVsZW1lbnRCYWNrZ3JvdW5kWzBdXG4gICk7XG59O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZhYmxlUHJvbWlzZTxUPiA9IFByb21pc2U8VD4gJiB7XG4gIHJlc29sdmU6IFtUXSBleHRlbmRzIFt1bmRlZmluZWRdID8gKHZhbHVlPzogVCkgPT4gdm9pZCA6ICh2YWx1ZTogVCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufTtcbmV4cG9ydCBjb25zdCByZXNvbHZhYmxlUHJvbWlzZSA9IDxUPigpID0+IHtcbiAgbGV0IHJlc29sdmUhOiBhbnk7XG4gIGxldCByZWplY3QhOiBhbnk7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgfSk7XG4gIChwcm9taXNlIGFzIGFueSkucmVzb2x2ZSA9IHJlc29sdmU7XG4gIChwcm9taXNlIGFzIGFueSkucmVqZWN0ID0gcmVqZWN0O1xuICByZXR1cm4gcHJvbWlzZSBhcyBSZXNvbHZhYmxlUHJvbWlzZTxUPjtcbn07XG5cbi8qKlxuICogQHBhcmFtIGZ1bmMgaGFuZGxlciB0YWtpbmcgYXQgbW9zdCBzaW5nbGUgcGFyYW1ldGVyIChldmVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXMgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PlxuICAoKGV2ZW50KSA9PiB7XG4gICAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuYyBhcyBURnVuY3Rpb24sIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uO1xuXG4vKipcbiAqIGJhcmNoZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBhbmQgdGhyb3R0bGVzIHRoZSBjYWxscyB0byBhIHNpbmdsZSBjYWxsIHBlclxuICogYW5pbWF0aW9uIGZyYW1lXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXNUaHJvdHRsZWQgPSA8XG4gIFRGdW5jdGlvbiBleHRlbmRzICgoZXZlbnQ6IGFueSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCksXG4+KFxuICBmdW5jOiBQYXJhbWV0ZXJzPFRGdW5jdGlvbj5bXCJsZW5ndGhcIl0gZXh0ZW5kcyAwIHwgMSA/IFRGdW5jdGlvbiA6IG5ldmVyLFxuKSA9PiB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIHRocm90dGxlUkFGPFBhcmFtZXRlcnM8VEZ1bmN0aW9uPj4oKChldmVudCkgPT4ge1xuICAgIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZ1bmMsIGV2ZW50KTtcbiAgfSkgYXMgVEZ1bmN0aW9uKTtcbn07XG5cbi8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk0NjIzODIvODQxOFxuZXhwb3J0IGNvbnN0IG5Gb3JtYXR0ZXIgPSAobnVtOiBudW1iZXIsIGRpZ2l0czogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc2kgPSBbXG4gICAgeyB2YWx1ZTogMSwgc3ltYm9sOiBcImJcIiB9LFxuICAgIHsgdmFsdWU6IDFlMywgc3ltYm9sOiBcImtcIiB9LFxuICAgIHsgdmFsdWU6IDFlNiwgc3ltYm9sOiBcIk1cIiB9LFxuICAgIHsgdmFsdWU6IDFlOSwgc3ltYm9sOiBcIkdcIiB9LFxuICBdO1xuICBjb25zdCByeCA9IC9cXC4wKyR8KFxcLlswLTldKlsxLTldKTArJC87XG4gIGxldCBpbmRleDtcbiAgZm9yIChpbmRleCA9IHNpLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuICAgIGlmIChudW0gPj0gc2lbaW5kZXhdLnZhbHVlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChcbiAgICAobnVtIC8gc2lbaW5kZXhdLnZhbHVlKS50b0ZpeGVkKGRpZ2l0cykucmVwbGFjZShyeCwgXCIkMVwiKSArIHNpW2luZGV4XS5zeW1ib2xcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWZXJzaW9uID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTE1ldGFFbGVtZW50PignbWV0YVtuYW1lPVwidmVyc2lvblwiXScpPy5jb250ZW50IHx8XG4gICAgREVGQVVMVF9WRVJTSU9OXG4gICk7XG59O1xuXG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2Vtb2ppLmpzXG5leHBvcnQgY29uc3Qgc3VwcG9ydHNFbW9qaSA9ICgpID0+IHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgb2Zmc2V0ID0gMTI7XG4gIGN0eC5maWxsU3R5bGUgPSBcIiNmMDBcIjtcbiAgY3R4LnRleHRCYXNlbGluZSA9IFwidG9wXCI7XG4gIGN0eC5mb250ID0gXCIzMnB4IEFyaWFsXCI7XG4gIC8vIE1vZGVybml6ciB1c2VkIPCfkKgsIGJ1dCBpdCBpcyBzb3J0IG9mIHN1cHBvcnRlZCBvbiBXaW5kb3dzIDcuXG4gIC8vIEx1Y2tpbHkg8J+YgCBpc24ndCBzdXBwb3J0ZWQuXG4gIGN0eC5maWxsVGV4dChcIvCfmIBcIiwgMCwgMCk7XG4gIHJldHVybiBjdHguZ2V0SW1hZ2VEYXRhKG9mZnNldCwgb2Zmc2V0LCAxLCAxKS5kYXRhWzBdICE9PSAwO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5lYXJlc3RTY3JvbGxhYmxlQ29udGFpbmVyID0gKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbik6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgIH1cbiAgICBjb25zdCB7IG92ZXJmbG93WSB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcbiAgICBjb25zdCBoYXNTY3JvbGxhYmxlQ29udGVudCA9IHBhcmVudC5zY3JvbGxIZWlnaHQgPiBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChcbiAgICAgIGhhc1Njcm9sbGFibGVDb250ZW50ICYmXG4gICAgICAob3ZlcmZsb3dZID09PSBcImF1dG9cIiB8fFxuICAgICAgICBvdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcbiAgICAgICAgb3ZlcmZsb3dZID09PSBcIm92ZXJsYXlcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBmb2N1c05lYXJlc3RQYXJlbnQgPSAoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC50YWJJbmRleCA+IC0xKSB7XG4gICAgICBwYXJlbnQuZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2ZW50VW5sb2FkID0gKGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyBOT1RFOiBtb2Rlcm4gYnJvd3NlcnMgbm8gbG9uZ2VyIGFsbG93IHNob3dpbmcgYSBjdXN0b20gbWVzc2FnZSBoZXJlXG4gIGV2ZW50LnJldHVyblZhbHVlID0gXCJcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBieXRlc1RvSGV4U3RyaW5nID0gKGJ5dGVzOiBVaW50OEFycmF5KSA9PiB7XG4gIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKVxuICAgIC5tYXAoKGJ5dGUpID0+IGAwJHtieXRlLnRvU3RyaW5nKDE2KX1gLnNsaWNlKC0yKSlcbiAgICAuam9pbihcIlwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkVGltZXN0YW1wID0gKCkgPT4gKGlzVGVzdEVudigpID8gMSA6IERhdGUubm93KCkpO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGBpZGAgYXR0cmlidXRlLFxuICogb3IgYXJyYXkgb2YgaWRzIChzdHJpbmdzKSwgaW50byBhIE1hcCwga2V5ZCBieSBgaWRgLlxuICovXG5leHBvcnQgY29uc3QgYXJyYXlUb01hcCA9IDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIH0gfCBzdHJpbmc+KFxuICBpdGVtczogcmVhZG9ubHkgVFtdLFxuKSA9PiB7XG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYzogTWFwPHN0cmluZywgVD4sIGVsZW1lbnQpID0+IHtcbiAgICBhY2Muc2V0KHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiID8gZWxlbWVudCA6IGVsZW1lbnQuaWQsIGVsZW1lbnQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIG5ldyBNYXAoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNUZXN0RW52ID0gKCkgPT5cbiAgdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnY/Lk5PREVfRU5WID09PSBcInRlc3RcIjtcblxuZXhwb3J0IGNvbnN0IGlzUHJvZEVudiA9ICgpID0+XG4gIHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XG5cbmV4cG9ydCBjb25zdCB3cmFwRXZlbnQgPSA8VCBleHRlbmRzIEV2ZW50PihuYW1lOiBFVkVOVCwgbmF0aXZlRXZlbnQ6IFQpID0+IHtcbiAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChuYW1lLCB7XG4gICAgZGV0YWlsOiB7XG4gICAgICBuYXRpdmVFdmVudCxcbiAgICB9LFxuICAgIGNhbmNlbGFibGU6IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZU9iamVjdCA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIG9iajogVCxcbiAgdXBkYXRlczogUGFydGlhbDxUPixcbik6IFQgPT4ge1xuICBsZXQgZGlkQ2hhbmdlID0gZmFsc2U7XG4gIGZvciAoY29uc3Qga2V5IGluIHVwZGF0ZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9ICh1cGRhdGVzIGFzIGFueSlba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChvYmogYXMgYW55KVtrZXldID09PSB2YWx1ZSAmJlxuICAgICAgICAvLyBpZiBvYmplY3QsIGFsd2F5cyB1cGRhdGUgYmVjYXVzZSBpdHMgYXR0cnMgY291bGQgaGF2ZSBjaGFuZ2VkXG4gICAgICAgICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBkaWRDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGlkQ2hhbmdlKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ub2JqLFxuICAgIC4uLnVwZGF0ZXMsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAodmFsOiBhbnkpID0+IHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCAodHlwZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlICE9PSBcImZ1bmN0aW9uXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyYW1lID0gKCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCA/IFwidG9wXCIgOiBcImlmcmFtZVwiO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBcImlmcmFtZVwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNQcm9taXNlTGlrZSA9IChcbiAgdmFsdWU6IGFueSxcbik6IHZhbHVlIGlzIFByb21pc2U8UmVzb2x1dGlvblR5cGU8dHlwZW9mIHZhbHVlPj4gPT4ge1xuICByZXR1cm4gKFxuICAgICEhdmFsdWUgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcInRoZW5cIiBpbiB2YWx1ZSAmJlxuICAgIFwiY2F0Y2hcIiBpbiB2YWx1ZSAmJlxuICAgIFwiZmluYWxseVwiIGluIHZhbHVlXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVlcnlGb2N1c2FibGVFbGVtZW50cyA9IChjb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4ge1xuICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IGNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXG4gICAgXCJidXR0b24sIGEsIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBkaXZbdGFiaW5kZXhdLCBsYWJlbFt0YWJpbmRleF1cIixcbiAgKTtcblxuICByZXR1cm4gZm9jdXNhYmxlRWxlbWVudHNcbiAgICA/IEFycmF5LmZyb20oZm9jdXNhYmxlRWxlbWVudHMpLmZpbHRlcihcbiAgICAgICAgKGVsZW1lbnQpID0+XG4gICAgICAgICAgZWxlbWVudC50YWJJbmRleCA+IC0xICYmICEoZWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS5kaXNhYmxlZCxcbiAgICAgIClcbiAgICA6IFtdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../utils.ts\n");
3353
3342
 
3354
3343
  /***/ }),
3355
3344
 
@@ -3503,7 +3492,7 @@ module.exports = JSON.parse('{"labels":{"paste":"Paste","pasteCharts":"Paste cha
3503
3492
  /***/ ((module) => {
3504
3493
 
3505
3494
  "use strict";
3506
- module.exports = JSON.parse('{"ar-SA":91,"bg-BG":58,"bn-BD":0,"ca-ES":97,"cs-CZ":24,"da-DK":34,"de-DE":99,"el-GR":82,"en":100,"es-ES":99,"eu-ES":98,"fa-IR":98,"fi-FI":98,"fr-FR":99,"gl-ES":40,"he-IL":94,"hi-IN":61,"hu-HU":94,"id-ID":99,"it-IT":100,"ja-JP":98,"kab-KAB":95,"kk-KZ":22,"ko-KR":98,"lt-LT":22,"lv-LV":100,"mr-IN":99,"my-MM":44,"nb-NO":100,"nl-NL":86,"nn-NO":95,"oc-FR":98,"pa-IN":87,"pl-PL":88,"pt-BR":95,"pt-PT":80,"ro-RO":99,"ru-RU":100,"si-LK":8,"sk-SK":99,"sl-SI":100,"sv-SE":100,"ta-IN":98,"tr-TR":98,"uk-UA":99,"vi-VN":13,"zh-CN":100,"zh-HK":27,"zh-TW":100}');
3495
+ module.exports = JSON.parse('{"ar-SA":91,"bg-BG":58,"bn-BD":0,"ca-ES":97,"cs-CZ":24,"da-DK":34,"de-DE":100,"el-GR":82,"en":100,"es-ES":99,"eu-ES":98,"fa-IR":98,"fi-FI":98,"fr-FR":100,"gl-ES":45,"he-IL":94,"hi-IN":62,"hu-HU":94,"id-ID":100,"it-IT":100,"ja-JP":98,"kab-KAB":95,"kk-KZ":22,"ko-KR":98,"lt-LT":22,"lv-LV":100,"mr-IN":100,"my-MM":44,"nb-NO":100,"nl-NL":86,"nn-NO":95,"oc-FR":98,"pa-IN":87,"pl-PL":88,"pt-BR":95,"pt-PT":80,"ro-RO":100,"ru-RU":100,"si-LK":8,"sk-SK":100,"sl-SI":100,"sv-SE":100,"ta-IN":98,"tr-TR":99,"uk-UA":99,"vi-VN":13,"zh-CN":100,"zh-HK":27,"zh-TW":100}');
3507
3496
 
3508
3497
  /***/ })
3509
3498
 
@@ -3612,7 +3601,7 @@ module.exports = JSON.parse('{"ar-SA":91,"bg-BG":58,"bn-BD":0,"ca-ES":97,"cs-CZ"
3612
3601
  /******/ // This function allow to reference async chunks
3613
3602
  /******/ __webpack_require__.u = (chunkId) => {
3614
3603
  /******/ // return url for filenames based on template
3615
- /******/ return "excalidraw-assets-dev/" + chunkId + "-" + {"locales/ar-SA-json":"684b5e25f971902bd933","locales/bg-BG-json":"d78c84e8962f5d754019","locales/bn-BD-json":"79007d6cd3d09b6c1e82","locales/ca-ES-json":"84b33ecd3096b99533c1","locales/cs-CZ-json":"1d48380fd54bd715a21c","locales/da-DK-json":"9dc062ac2b2aee3ad4ec","locales/de-DE-json":"d21d9ffe46d5e41ba95a","locales/el-GR-json":"8ec22bd0cbf376e3ba5d","locales/es-ES-json":"5dd577ba17baf0f4382c","locales/eu-ES-json":"9ba2e12372db6b5be813","locales/fa-IR-json":"9866fde07b07d55f2cb9","locales/fi-FI-json":"2dcf087c4ff34b8a8ad7","locales/fr-FR-json":"1e6cf536903ec6ed4747","locales/gl-ES-json":"6ff11edae03d1b5fd04f","locales/he-IL-json":"abac6b158c54984aecba","locales/hi-IN-json":"d6c9379a32ee84926a4d","locales/hu-HU-json":"8d604fcc349f93bc4440","locales/id-ID-json":"4730b416209ed589e8c6","locales/it-IT-json":"7086cd6c6f1f61016ba1","locales/ja-JP-json":"d864fb849b2a3874b290","locales/kab-KAB-json":"c69f8a1079a411de837c","locales/kk-KZ-json":"8c7f34edcdac22c11c72","locales/ko-KR-json":"c80065dfa01e02f28695","locales/lt-LT-json":"edaae0abc84fb205ee70","locales/lv-LV-json":"21cc252dcf4524c98e55","locales/mr-IN-json":"5f598fe62605825bc9a2","locales/my-MM-json":"56d51a30e815283e7260","locales/nb-NO-json":"827603cac737fb4bb00f","locales/nl-NL-json":"9c5c4b7bfbfe3328e561","locales/nn-NO-json":"cb21e50c1afeb6a8f01d","locales/oc-FR-json":"bec2ee705e7d3980fd61","locales/pa-IN-json":"189c7e5cad9e781f0ce5","locales/pl-PL-json":"9cc770276a511a05e638","locales/pt-BR-json":"788b2c323ae4afd36853","locales/pt-PT-json":"4f16b87e256eb838c91a","locales/ro-RO-json":"a22375bf4159c7100363","locales/ru-RU-json":"eda247a0b10c11a51eec","locales/si-LK-json":"ee3083905b0cf879022d","locales/sk-SK-json":"92cd256e9ce72d698f24","locales/sl-SI-json":"55f372eebf814a422031","locales/sv-SE-json":"ca85dde4f9c34d5ee346","locales/ta-IN-json":"f9d1822384bc4ce086b6","locales/tr-TR-json":"0ab39656399bc8670e04","locales/uk-UA-json":"b271ae2bf2e210aa582b","locales/vi-VN-json":"9a1f8e4ce0b77e05baa7","locales/zh-CN-json":"29856d6541bf2cbd6aea","locales/zh-HK-json":"8bb0f0928ccbce98f995","locales/zh-TW-json":"517b39d1a3184844b4d7","vendor":"c0592035c3911af79359"}[chunkId] + ".js";
3604
+ /******/ return "excalidraw-assets-dev/" + chunkId + "-" + {"locales/ar-SA-json":"684b5e25f971902bd933","locales/bg-BG-json":"d78c84e8962f5d754019","locales/bn-BD-json":"79007d6cd3d09b6c1e82","locales/ca-ES-json":"84b33ecd3096b99533c1","locales/cs-CZ-json":"1d48380fd54bd715a21c","locales/da-DK-json":"9dc062ac2b2aee3ad4ec","locales/de-DE-json":"2d48c0ec0901cee81272","locales/el-GR-json":"8ec22bd0cbf376e3ba5d","locales/es-ES-json":"5dd577ba17baf0f4382c","locales/eu-ES-json":"9ba2e12372db6b5be813","locales/fa-IR-json":"9866fde07b07d55f2cb9","locales/fi-FI-json":"2dcf087c4ff34b8a8ad7","locales/fr-FR-json":"e4bbc872fed09a689b27","locales/gl-ES-json":"4ab7103bd7905741cf7e","locales/he-IL-json":"abac6b158c54984aecba","locales/hi-IN-json":"3aba9d37f6dae9ca2445","locales/hu-HU-json":"8d604fcc349f93bc4440","locales/id-ID-json":"6d9b771568900ad6f055","locales/it-IT-json":"7086cd6c6f1f61016ba1","locales/ja-JP-json":"d864fb849b2a3874b290","locales/kab-KAB-json":"c69f8a1079a411de837c","locales/kk-KZ-json":"8c7f34edcdac22c11c72","locales/ko-KR-json":"c80065dfa01e02f28695","locales/lt-LT-json":"edaae0abc84fb205ee70","locales/lv-LV-json":"21cc252dcf4524c98e55","locales/mr-IN-json":"d28b9664c21ee08d79eb","locales/my-MM-json":"56d51a30e815283e7260","locales/nb-NO-json":"827603cac737fb4bb00f","locales/nl-NL-json":"9c5c4b7bfbfe3328e561","locales/nn-NO-json":"cb21e50c1afeb6a8f01d","locales/oc-FR-json":"bec2ee705e7d3980fd61","locales/pa-IN-json":"189c7e5cad9e781f0ce5","locales/pl-PL-json":"9cc770276a511a05e638","locales/pt-BR-json":"788b2c323ae4afd36853","locales/pt-PT-json":"4f16b87e256eb838c91a","locales/ro-RO-json":"9ac079b4af3b20377160","locales/ru-RU-json":"eda247a0b10c11a51eec","locales/si-LK-json":"ee3083905b0cf879022d","locales/sk-SK-json":"03a80aeb3e09f77b1be6","locales/sl-SI-json":"55f372eebf814a422031","locales/sv-SE-json":"ca85dde4f9c34d5ee346","locales/ta-IN-json":"f9d1822384bc4ce086b6","locales/tr-TR-json":"30a4d84bda3152292dbe","locales/uk-UA-json":"b271ae2bf2e210aa582b","locales/vi-VN-json":"9a1f8e4ce0b77e05baa7","locales/zh-CN-json":"29856d6541bf2cbd6aea","locales/zh-HK-json":"8bb0f0928ccbce98f995","locales/zh-TW-json":"517b39d1a3184844b4d7","vendor":"c0592035c3911af79359"}[chunkId] + ".js";
3616
3605
  /******/ };
3617
3606
  /******/ })();
3618
3607
  /******/