@jsenv/plugin-react 0.0.3 → 0.0.6
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.
- package/package.json +6 -2
- package/script/test/test.mjs +0 -20
- package/test/react_build/client/.jsenv/build/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js +0 -2438
- package/test/react_build/client/.jsenv/build/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.js +0 -1332
- package/test/react_build/client/.jsenv/build/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js +0 -27173
- package/test/react_build/client/.jsenv/build/app.jsx +0 -6
- package/test/react_build/client/.jsenv/build/main.html +0 -15
- package/test/react_build/client/.jsenv/build/main.html@L14-L16.js +0 -1
- package/test/react_build/client/.jsenv/build/main.html@L8-L12.js +0 -3
- package/test/react_build/client/.jsenv/build/main.jsx +0 -22
- package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js +0 -2482
- package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js__compile_info__.json +0 -22
- package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.map +0 -1
- package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.js +0 -1347
- package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.js__compile_info__.json +0 -22
- package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.map +0 -1
- package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js +0 -27410
- package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js__compile_info__.json +0 -38
- package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.map +0 -1
- package/test/react_build/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/test/react_build/dist/js/app.es5.js +0 -17
- package/test/react_build/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/test/react_build/dist/js/main.es5.js +0 -30944
- package/test/react_build/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/test/react_build/dist/js/main.html@L14-L16.es5.js +0 -10
- package/test/react_build/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/test/react_build/dist/js/s.js +0 -777
- package/test/react_build/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/test/react_build/dist/main.html +0 -25
- package/test/react_build/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/test/react_build/dist/main.html@L8-L12.js +0 -3
- package/test/react_build/client/app.jsx +0 -3
- package/test/react_build/client/main.html +0 -20
- package/test/react_build/client/main.jsx +0 -9
- package/test/react_build/dist/asset-manifest.json +0 -8
- package/test/react_build/dist/js/app.es5.js +0 -17
- package/test/react_build/dist/js/main.es5.js +0 -30944
- package/test/react_build/dist/js/s.js +0 -777
- package/test/react_build/dist/main.html +0 -35
- package/test/react_build/react_build.test.mjs +0 -57
- package/test/react_refresh/client/.jsenv/build/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js +0 -2438
- package/test/react_refresh/client/.jsenv/build/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.js +0 -1332
- package/test/react_refresh/client/.jsenv/build/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js +0 -27165
- package/test/react_refresh/client/.jsenv/build/app.jsx +0 -24
- package/test/react_refresh/client/.jsenv/build/index.html +0 -12
- package/test/react_refresh/client/.jsenv/build/main.jsx +0 -8
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js +0 -2482
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js__compile_info__.json +0 -21
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.map +0 -1
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-dev-runtime.js +0 -1328
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-dev-runtime.js__compile_info__.json +0 -21
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-dev-runtime.map +0 -1
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.js +0 -1347
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.js__compile_info__.json +0 -22
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.map +0 -1
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js +0 -27410
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js__compile_info__.json +0 -37
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.map +0 -1
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-refresh/runtime.js +0 -694
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-refresh/runtime.js__compile_info__.json +0 -17
- package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-refresh/runtime.map +0 -1
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/plugin-preact/src/client/preact_refresh.js +0 -38
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/plugin-preact/src/client/preact_refresh.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/plugin-react/src/client/react_refresh.js +0 -35
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/plugin-react/src/client/react_refresh.js.map +0 -27
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/index.js +0 -3
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/index.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/decompose.js +0 -405
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/decompose.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/escapeString.js +0 -28
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/escapeString.js.map +0 -19
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/global-value-path.js +0 -60
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/global-value-path.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/isComposite.js +0 -18
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/isComposite.js.map +0 -12
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/sortRecipe.js +0 -76
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/sortRecipe.js.map +0 -31
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/uneval.js +0 -212
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/uneval.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/utils/event_source/event_source.js +0 -197
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/utils/event_source/event_source.js.map +0 -71
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/utils/html_ast/html_attribute_src_set.js +0 -19
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/utils/html_ast/html_attribute_src_set.js.map +0 -23
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/computeKey.js +0 -38
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/computeKey.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/constants.js +0 -13
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/constants.js.map +0 -22
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/index.js +0 -206
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/index.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/catchError.js +0 -17
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/catchError.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/debounceRendering.js +0 -21
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/debounceRendering.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/signaturesForType.js +0 -2
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/signaturesForType.js.map +0 -11
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/unmount.js +0 -20
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/unmount.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/vnode.js +0 -46
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/vnode.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/vnodesForComponent.js +0 -3
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/vnodesForComponent.js.map +0 -12
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/utils/src/index.js +0 -43
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/utils/src/index.js.map +0 -33
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/compat/dist/compat.module.js +0 -408
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/compat/dist/compat.module.js.map +0 -229
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/debug/dist/debug.module.js +0 -2
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/debug/dist/debug.module.js.map +0 -135
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/devtools/dist/devtools.module.js +0 -2
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/devtools/dist/devtools.module.js.map +0 -20
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/dist/preact.module.js +0 -2
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/dist/preact.module.js.map +0 -231
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/hooks/dist/hooks.module.js +0 -167
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/hooks/dist/hooks.module.js.map +0 -100
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js +0 -2
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js.map +0 -24
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js +0 -2484
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js.map +0 -19
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-dev-runtime.js +0 -1330
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-dev-runtime.js.map +0 -13
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js +0 -27412
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js.map +0 -19
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-refresh/runtime.js +0 -696
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-refresh/runtime.js.map +0 -16
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/src/client/react_refresh.js +0 -35
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/src/client/react_refresh.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/src/client/react_refresh_preamble.js +0 -24
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/src/client/react_refresh_preamble.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/autoreload_preference.js +0 -11
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/autoreload_preference.js.map +0 -16
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/event_source_client.js +0 -188
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/event_source_client.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/reload.js +0 -103
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/reload.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/url_helpers.js +0 -20
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/url_helpers.js.map +0 -26
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/error_in_document.js +0 -198
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/error_in_document.js.map +0 -70
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/error_in_notification.js +0 -21
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/error_in_notification.js.map +0 -23
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/html_supervisor_installer.js +0 -171
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/html_supervisor_installer.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/html_supervisor_setup.js +0 -77
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/uneval_exception.js +0 -10
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/uneval_exception.js.map +0 -9
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/import_meta_hot/client/import_meta_hot.js +0 -82
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/import_meta_hot/client/import_meta_hot.js.map +0 -38
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/app.jsx +0 -59
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/app.jsx.map +0 -20
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/count_label.jsx +0 -27
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/count_label.jsx.map +0 -16
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.html +0 -30
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.html@L3-L8.js +0 -7
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.html@L3-L8.js.map +0 -12
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.html@L9-L11.js +0 -4
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.html@L9-L11.js.map +0 -12
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.jsx +0 -16
- package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.jsx.map +0 -22
- package/test/react_refresh/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/test/dev_server/react_and_autoreload/dist/index.html +0 -12
- package/test/react_refresh/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/test/dev_server/react_and_autoreload/dist/js/main.js +0 -30952
- package/test/react_refresh/client/app.jsx +0 -29
- package/test/react_refresh/client/count_label.jsx +0 -7
- package/test/react_refresh/client/main.html +0 -13
- package/test/react_refresh/client/main.jsx +0 -8
- package/test/react_refresh/react_refresh.test.mjs +0 -93
- package/test/react_refresh/react_refresh.test_manual.mjs +0 -26
|
@@ -1,696 +0,0 @@
|
|
|
1
|
-
function getDefaultExportFromCjs (x) {
|
|
2
|
-
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
var runtime = {exports: {}};
|
|
6
|
-
|
|
7
|
-
var reactRefreshRuntime_development = {};
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @license React
|
|
11
|
-
* react-refresh-runtime.development.js
|
|
12
|
-
*
|
|
13
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
14
|
-
*
|
|
15
|
-
* This source code is licensed under the MIT license found in the
|
|
16
|
-
* LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
var hasRequiredReactRefreshRuntime_development;
|
|
20
|
-
|
|
21
|
-
function requireReactRefreshRuntime_development () {
|
|
22
|
-
if (hasRequiredReactRefreshRuntime_development) return reactRefreshRuntime_development;
|
|
23
|
-
hasRequiredReactRefreshRuntime_development = 1;
|
|
24
|
-
|
|
25
|
-
{
|
|
26
|
-
(function() {
|
|
27
|
-
|
|
28
|
-
// ATTENTION
|
|
29
|
-
var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');
|
|
30
|
-
var REACT_MEMO_TYPE = Symbol.for('react.memo');
|
|
31
|
-
|
|
32
|
-
var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; // We never remove these associations.
|
|
33
|
-
// It's OK to reference families, but use WeakMap/Set for types.
|
|
34
|
-
|
|
35
|
-
var allFamiliesByID = new Map();
|
|
36
|
-
var allFamiliesByType = new PossiblyWeakMap();
|
|
37
|
-
var allSignaturesByType = new PossiblyWeakMap(); // This WeakMap is read by React, so we only put families
|
|
38
|
-
// that have actually been edited here. This keeps checks fast.
|
|
39
|
-
// $FlowIssue
|
|
40
|
-
|
|
41
|
-
var updatedFamiliesByType = new PossiblyWeakMap(); // This is cleared on every performReactRefresh() call.
|
|
42
|
-
// It is an array of [Family, NextType] tuples.
|
|
43
|
-
|
|
44
|
-
var pendingUpdates = []; // This is injected by the renderer via DevTools globalThis hook.
|
|
45
|
-
|
|
46
|
-
var helpersByRendererID = new Map();
|
|
47
|
-
var helpersByRoot = new Map(); // We keep track of mounted roots so we can schedule updates.
|
|
48
|
-
|
|
49
|
-
var mountedRoots = new Set(); // If a root captures an error, we remember it so we can retry on edit.
|
|
50
|
-
|
|
51
|
-
var failedRoots = new Set(); // In environments that support WeakMap, we also remember the last element for every root.
|
|
52
|
-
// It needs to be weak because we do this even for roots that failed to mount.
|
|
53
|
-
// If there is no WeakMap, we won't attempt to do retrying.
|
|
54
|
-
// $FlowIssue
|
|
55
|
-
|
|
56
|
-
var rootElements = // $FlowIssue
|
|
57
|
-
typeof WeakMap === 'function' ? new WeakMap() : null;
|
|
58
|
-
var isPerformingRefresh = false;
|
|
59
|
-
|
|
60
|
-
function computeFullKey(signature) {
|
|
61
|
-
if (signature.fullKey !== null) {
|
|
62
|
-
return signature.fullKey;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
var fullKey = signature.ownKey;
|
|
66
|
-
var hooks;
|
|
67
|
-
|
|
68
|
-
try {
|
|
69
|
-
hooks = signature.getCustomHooks();
|
|
70
|
-
} catch (err) {
|
|
71
|
-
// This can happen in an edge case, e.g. if expression like Foo.useSomething
|
|
72
|
-
// depends on Foo which is lazily initialized during rendering.
|
|
73
|
-
// In that case just assume we'll have to remount.
|
|
74
|
-
signature.forceReset = true;
|
|
75
|
-
signature.fullKey = fullKey;
|
|
76
|
-
return fullKey;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
for (var i = 0; i < hooks.length; i++) {
|
|
80
|
-
var hook = hooks[i];
|
|
81
|
-
|
|
82
|
-
if (typeof hook !== 'function') {
|
|
83
|
-
// Something's wrong. Assume we need to remount.
|
|
84
|
-
signature.forceReset = true;
|
|
85
|
-
signature.fullKey = fullKey;
|
|
86
|
-
return fullKey;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
var nestedHookSignature = allSignaturesByType.get(hook);
|
|
90
|
-
|
|
91
|
-
if (nestedHookSignature === undefined) {
|
|
92
|
-
// No signature means Hook wasn't in the source code, e.g. in a library.
|
|
93
|
-
// We'll skip it because we can assume it won't change during this session.
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
var nestedHookKey = computeFullKey(nestedHookSignature);
|
|
98
|
-
|
|
99
|
-
if (nestedHookSignature.forceReset) {
|
|
100
|
-
signature.forceReset = true;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
fullKey += '\n---\n' + nestedHookKey;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
signature.fullKey = fullKey;
|
|
107
|
-
return fullKey;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
function haveEqualSignatures(prevType, nextType) {
|
|
111
|
-
var prevSignature = allSignaturesByType.get(prevType);
|
|
112
|
-
var nextSignature = allSignaturesByType.get(nextType);
|
|
113
|
-
|
|
114
|
-
if (prevSignature === undefined && nextSignature === undefined) {
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
if (prevSignature === undefined || nextSignature === undefined) {
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (computeFullKey(prevSignature) !== computeFullKey(nextSignature)) {
|
|
123
|
-
return false;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (nextSignature.forceReset) {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return true;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function isReactClass(type) {
|
|
134
|
-
return type.prototype && type.prototype.isReactComponent;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
function canPreserveStateBetween(prevType, nextType) {
|
|
138
|
-
if (isReactClass(prevType) || isReactClass(nextType)) {
|
|
139
|
-
return false;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
if (haveEqualSignatures(prevType, nextType)) {
|
|
143
|
-
return true;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
function resolveFamily(type) {
|
|
150
|
-
// Only check updated types to keep lookups fast.
|
|
151
|
-
return updatedFamiliesByType.get(type);
|
|
152
|
-
} // If we didn't care about IE11, we could use new Map/Set(iterable).
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
function cloneMap(map) {
|
|
156
|
-
var clone = new Map();
|
|
157
|
-
map.forEach(function (value, key) {
|
|
158
|
-
clone.set(key, value);
|
|
159
|
-
});
|
|
160
|
-
return clone;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
function cloneSet(set) {
|
|
164
|
-
var clone = new Set();
|
|
165
|
-
set.forEach(function (value) {
|
|
166
|
-
clone.add(value);
|
|
167
|
-
});
|
|
168
|
-
return clone;
|
|
169
|
-
} // This is a safety mechanism to protect against rogue getters and Proxies.
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
function getProperty(object, property) {
|
|
173
|
-
try {
|
|
174
|
-
return object[property];
|
|
175
|
-
} catch (err) {
|
|
176
|
-
// Intentionally ignore.
|
|
177
|
-
return undefined;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
function performReactRefresh() {
|
|
182
|
-
|
|
183
|
-
if (pendingUpdates.length === 0) {
|
|
184
|
-
return null;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
if (isPerformingRefresh) {
|
|
188
|
-
return null;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
isPerformingRefresh = true;
|
|
192
|
-
|
|
193
|
-
try {
|
|
194
|
-
var staleFamilies = new Set();
|
|
195
|
-
var updatedFamilies = new Set();
|
|
196
|
-
var updates = pendingUpdates;
|
|
197
|
-
pendingUpdates = [];
|
|
198
|
-
updates.forEach(function (_ref) {
|
|
199
|
-
var family = _ref[0],
|
|
200
|
-
nextType = _ref[1];
|
|
201
|
-
// Now that we got a real edit, we can create associations
|
|
202
|
-
// that will be read by the React reconciler.
|
|
203
|
-
var prevType = family.current;
|
|
204
|
-
updatedFamiliesByType.set(prevType, family);
|
|
205
|
-
updatedFamiliesByType.set(nextType, family);
|
|
206
|
-
family.current = nextType; // Determine whether this should be a re-render or a re-mount.
|
|
207
|
-
|
|
208
|
-
if (canPreserveStateBetween(prevType, nextType)) {
|
|
209
|
-
updatedFamilies.add(family);
|
|
210
|
-
} else {
|
|
211
|
-
staleFamilies.add(family);
|
|
212
|
-
}
|
|
213
|
-
}); // TODO: rename these fields to something more meaningful.
|
|
214
|
-
|
|
215
|
-
var update = {
|
|
216
|
-
updatedFamilies: updatedFamilies,
|
|
217
|
-
// Families that will re-render preserving state
|
|
218
|
-
staleFamilies: staleFamilies // Families that will be remounted
|
|
219
|
-
|
|
220
|
-
};
|
|
221
|
-
helpersByRendererID.forEach(function (helpers) {
|
|
222
|
-
// Even if there are no roots, set the handler on first update.
|
|
223
|
-
// This ensures that if *new* roots are mounted, they'll use the resolve handler.
|
|
224
|
-
helpers.setRefreshHandler(resolveFamily);
|
|
225
|
-
});
|
|
226
|
-
var didError = false;
|
|
227
|
-
var firstError = null; // We snapshot maps and sets that are mutated during commits.
|
|
228
|
-
// If we don't do this, there is a risk they will be mutated while
|
|
229
|
-
// we iterate over them. For example, trying to recover a failed root
|
|
230
|
-
// may cause another root to be added to the failed list -- an infinite loop.
|
|
231
|
-
|
|
232
|
-
var failedRootsSnapshot = cloneSet(failedRoots);
|
|
233
|
-
var mountedRootsSnapshot = cloneSet(mountedRoots);
|
|
234
|
-
var helpersByRootSnapshot = cloneMap(helpersByRoot);
|
|
235
|
-
failedRootsSnapshot.forEach(function (root) {
|
|
236
|
-
var helpers = helpersByRootSnapshot.get(root);
|
|
237
|
-
|
|
238
|
-
if (helpers === undefined) {
|
|
239
|
-
throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
if (!failedRoots.has(root)) {// No longer failed.
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
if (rootElements === null) {
|
|
246
|
-
return;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
if (!rootElements.has(root)) {
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
var element = rootElements.get(root);
|
|
254
|
-
|
|
255
|
-
try {
|
|
256
|
-
helpers.scheduleRoot(root, element);
|
|
257
|
-
} catch (err) {
|
|
258
|
-
if (!didError) {
|
|
259
|
-
didError = true;
|
|
260
|
-
firstError = err;
|
|
261
|
-
} // Keep trying other roots.
|
|
262
|
-
|
|
263
|
-
}
|
|
264
|
-
});
|
|
265
|
-
mountedRootsSnapshot.forEach(function (root) {
|
|
266
|
-
var helpers = helpersByRootSnapshot.get(root);
|
|
267
|
-
|
|
268
|
-
if (helpers === undefined) {
|
|
269
|
-
throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
if (!mountedRoots.has(root)) {// No longer mounted.
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
try {
|
|
276
|
-
helpers.scheduleRefresh(root, update);
|
|
277
|
-
} catch (err) {
|
|
278
|
-
if (!didError) {
|
|
279
|
-
didError = true;
|
|
280
|
-
firstError = err;
|
|
281
|
-
} // Keep trying other roots.
|
|
282
|
-
|
|
283
|
-
}
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
if (didError) {
|
|
287
|
-
throw firstError;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
return update;
|
|
291
|
-
} finally {
|
|
292
|
-
isPerformingRefresh = false;
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
function register(type, id) {
|
|
296
|
-
{
|
|
297
|
-
if (type === null) {
|
|
298
|
-
return;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
if (typeof type !== 'function' && typeof type !== 'object') {
|
|
302
|
-
return;
|
|
303
|
-
} // This can happen in an edge case, e.g. if we register
|
|
304
|
-
// return value of a HOC but it returns a cached component.
|
|
305
|
-
// Ignore anything but the first registration for each type.
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
if (allFamiliesByType.has(type)) {
|
|
309
|
-
return;
|
|
310
|
-
} // Create family or remember to update it.
|
|
311
|
-
// None of this bookkeeping affects reconciliation
|
|
312
|
-
// until the first performReactRefresh() call above.
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
var family = allFamiliesByID.get(id);
|
|
316
|
-
|
|
317
|
-
if (family === undefined) {
|
|
318
|
-
family = {
|
|
319
|
-
current: type
|
|
320
|
-
};
|
|
321
|
-
allFamiliesByID.set(id, family);
|
|
322
|
-
} else {
|
|
323
|
-
pendingUpdates.push([family, type]);
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
allFamiliesByType.set(type, family); // Visit inner types because we might not have registered them.
|
|
327
|
-
|
|
328
|
-
if (typeof type === 'object' && type !== null) {
|
|
329
|
-
switch (getProperty(type, '$$typeof')) {
|
|
330
|
-
case REACT_FORWARD_REF_TYPE:
|
|
331
|
-
register(type.render, id + '$render');
|
|
332
|
-
break;
|
|
333
|
-
|
|
334
|
-
case REACT_MEMO_TYPE:
|
|
335
|
-
register(type.type, id + '$type');
|
|
336
|
-
break;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
function setSignature(type, key) {
|
|
342
|
-
var forceReset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
343
|
-
var getCustomHooks = arguments.length > 3 ? arguments[3] : undefined;
|
|
344
|
-
|
|
345
|
-
{
|
|
346
|
-
if (!allSignaturesByType.has(type)) {
|
|
347
|
-
allSignaturesByType.set(type, {
|
|
348
|
-
forceReset: forceReset,
|
|
349
|
-
ownKey: key,
|
|
350
|
-
fullKey: null,
|
|
351
|
-
getCustomHooks: getCustomHooks || function () {
|
|
352
|
-
return [];
|
|
353
|
-
}
|
|
354
|
-
});
|
|
355
|
-
} // Visit inner types because we might not have signed them.
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
if (typeof type === 'object' && type !== null) {
|
|
359
|
-
switch (getProperty(type, '$$typeof')) {
|
|
360
|
-
case REACT_FORWARD_REF_TYPE:
|
|
361
|
-
setSignature(type.render, key, forceReset, getCustomHooks);
|
|
362
|
-
break;
|
|
363
|
-
|
|
364
|
-
case REACT_MEMO_TYPE:
|
|
365
|
-
setSignature(type.type, key, forceReset, getCustomHooks);
|
|
366
|
-
break;
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
} // This is lazily called during first render for a type.
|
|
371
|
-
// It captures Hook list at that time so inline requires don't break comparisons.
|
|
372
|
-
|
|
373
|
-
function collectCustomHooksForSignature(type) {
|
|
374
|
-
{
|
|
375
|
-
var signature = allSignaturesByType.get(type);
|
|
376
|
-
|
|
377
|
-
if (signature !== undefined) {
|
|
378
|
-
computeFullKey(signature);
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
function getFamilyByID(id) {
|
|
383
|
-
{
|
|
384
|
-
return allFamiliesByID.get(id);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
function getFamilyByType(type) {
|
|
388
|
-
{
|
|
389
|
-
return allFamiliesByType.get(type);
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
function findAffectedHostInstances(families) {
|
|
393
|
-
{
|
|
394
|
-
var affectedInstances = new Set();
|
|
395
|
-
mountedRoots.forEach(function (root) {
|
|
396
|
-
var helpers = helpersByRoot.get(root);
|
|
397
|
-
|
|
398
|
-
if (helpers === undefined) {
|
|
399
|
-
throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
var instancesForRoot = helpers.findHostInstancesForRefresh(root, families);
|
|
403
|
-
instancesForRoot.forEach(function (inst) {
|
|
404
|
-
affectedInstances.add(inst);
|
|
405
|
-
});
|
|
406
|
-
});
|
|
407
|
-
return affectedInstances;
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
function injectIntoGlobalHook(globalObject) {
|
|
411
|
-
{
|
|
412
|
-
// For React Native, the globalThis hook will be set up by require('react-devtools-core').
|
|
413
|
-
// That code will run before us. So we need to monkeypatch functions on existing hook.
|
|
414
|
-
// For React Web, the globalThis hook will be set up by the extension.
|
|
415
|
-
// This will also run before us.
|
|
416
|
-
var hook = globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__;
|
|
417
|
-
|
|
418
|
-
if (hook === undefined) {
|
|
419
|
-
// However, if there is no DevTools extension, we'll need to set up the globalThis hook ourselves.
|
|
420
|
-
// Note that in this case it's important that renderer code runs *after* this method call.
|
|
421
|
-
// Otherwise, the renderer will think that there is no globalThis hook, and won't do the injection.
|
|
422
|
-
var nextID = 0;
|
|
423
|
-
globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__ = hook = {
|
|
424
|
-
renderers: new Map(),
|
|
425
|
-
supportsFiber: true,
|
|
426
|
-
inject: function (injected) {
|
|
427
|
-
return nextID++;
|
|
428
|
-
},
|
|
429
|
-
onScheduleFiberRoot: function (id, root, children) {},
|
|
430
|
-
onCommitFiberRoot: function (id, root, maybePriorityLevel, didError) {},
|
|
431
|
-
onCommitFiberUnmount: function () {}
|
|
432
|
-
};
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
if (hook.isDisabled) {
|
|
436
|
-
// This isn't a real property on the hook, but it can be set to opt out
|
|
437
|
-
// of DevTools integration and associated warnings and logs.
|
|
438
|
-
// Using console['warn'] to evade Babel and ESLint
|
|
439
|
-
console['warn']('Something has shimmed the React DevTools globalThis hook (__REACT_DEVTOOLS_GLOBAL_HOOK__). ' + 'Fast Refresh is not compatible with this shim and will be disabled.');
|
|
440
|
-
return;
|
|
441
|
-
} // Here, we just want to get a reference to scheduleRefresh.
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
var oldInject = hook.inject;
|
|
445
|
-
|
|
446
|
-
hook.inject = function (injected) {
|
|
447
|
-
var id = oldInject.apply(this, arguments);
|
|
448
|
-
|
|
449
|
-
if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {
|
|
450
|
-
// This version supports React Refresh.
|
|
451
|
-
helpersByRendererID.set(id, injected);
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
return id;
|
|
455
|
-
}; // Do the same for any already injected roots.
|
|
456
|
-
// This is useful if ReactDOM has already been initialized.
|
|
457
|
-
// https://github.com/facebook/react/issues/17626
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
hook.renderers.forEach(function (injected, id) {
|
|
461
|
-
if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {
|
|
462
|
-
// This version supports React Refresh.
|
|
463
|
-
helpersByRendererID.set(id, injected);
|
|
464
|
-
}
|
|
465
|
-
}); // We also want to track currently mounted roots.
|
|
466
|
-
|
|
467
|
-
var oldOnCommitFiberRoot = hook.onCommitFiberRoot;
|
|
468
|
-
|
|
469
|
-
var oldOnScheduleFiberRoot = hook.onScheduleFiberRoot || function () {};
|
|
470
|
-
|
|
471
|
-
hook.onScheduleFiberRoot = function (id, root, children) {
|
|
472
|
-
if (!isPerformingRefresh) {
|
|
473
|
-
// If it was intentionally scheduled, don't attempt to restore.
|
|
474
|
-
// This includes intentionally scheduled unmounts.
|
|
475
|
-
failedRoots.delete(root);
|
|
476
|
-
|
|
477
|
-
if (rootElements !== null) {
|
|
478
|
-
rootElements.set(root, children);
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
return oldOnScheduleFiberRoot.apply(this, arguments);
|
|
483
|
-
};
|
|
484
|
-
|
|
485
|
-
hook.onCommitFiberRoot = function (id, root, maybePriorityLevel, didError) {
|
|
486
|
-
var helpers = helpersByRendererID.get(id);
|
|
487
|
-
|
|
488
|
-
if (helpers !== undefined) {
|
|
489
|
-
helpersByRoot.set(root, helpers);
|
|
490
|
-
var current = root.current;
|
|
491
|
-
var alternate = current.alternate; // We need to determine whether this root has just (un)mounted.
|
|
492
|
-
// This logic is copy-pasted from similar logic in the DevTools backend.
|
|
493
|
-
// If this breaks with some refactoring, you'll want to update DevTools too.
|
|
494
|
-
|
|
495
|
-
if (alternate !== null) {
|
|
496
|
-
var wasMounted = alternate.memoizedState != null && alternate.memoizedState.element != null && mountedRoots.has(root);
|
|
497
|
-
var isMounted = current.memoizedState != null && current.memoizedState.element != null;
|
|
498
|
-
|
|
499
|
-
if (!wasMounted && isMounted) {
|
|
500
|
-
// Mount a new root.
|
|
501
|
-
mountedRoots.add(root);
|
|
502
|
-
failedRoots.delete(root);
|
|
503
|
-
} else if (wasMounted && isMounted) ; else if (wasMounted && !isMounted) {
|
|
504
|
-
// Unmount an existing root.
|
|
505
|
-
mountedRoots.delete(root);
|
|
506
|
-
|
|
507
|
-
if (didError) {
|
|
508
|
-
// We'll remount it on future edits.
|
|
509
|
-
failedRoots.add(root);
|
|
510
|
-
} else {
|
|
511
|
-
helpersByRoot.delete(root);
|
|
512
|
-
}
|
|
513
|
-
} else if (!wasMounted && !isMounted) {
|
|
514
|
-
if (didError) {
|
|
515
|
-
// We'll remount it on future edits.
|
|
516
|
-
failedRoots.add(root);
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
} else {
|
|
520
|
-
// Mount a new root.
|
|
521
|
-
mountedRoots.add(root);
|
|
522
|
-
}
|
|
523
|
-
} // Always call the decorated DevTools hook.
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
return oldOnCommitFiberRoot.apply(this, arguments);
|
|
527
|
-
};
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
function hasUnrecoverableErrors() {
|
|
531
|
-
// TODO: delete this after removing dependency in RN.
|
|
532
|
-
return false;
|
|
533
|
-
} // Exposed for testing.
|
|
534
|
-
|
|
535
|
-
function _getMountedRootCount() {
|
|
536
|
-
{
|
|
537
|
-
return mountedRoots.size;
|
|
538
|
-
}
|
|
539
|
-
} // This is a wrapper over more primitive functions for setting signature.
|
|
540
|
-
// Signatures let us decide whether the Hook order has changed on refresh.
|
|
541
|
-
//
|
|
542
|
-
// This function is intended to be used as a transform target, e.g.:
|
|
543
|
-
// var _s = createSignatureFunctionForTransform()
|
|
544
|
-
//
|
|
545
|
-
// function Hello() {
|
|
546
|
-
// const [foo, setFoo] = useState(0);
|
|
547
|
-
// const value = useCustomHook();
|
|
548
|
-
// _s(); /* Call without arguments triggers collecting the custom Hook list.
|
|
549
|
-
// * This doesn't happen during the module evaluation because we
|
|
550
|
-
// * don't want to change the module order with inline requires.
|
|
551
|
-
// * Next calls are noops. */
|
|
552
|
-
// return <h1>Hi</h1>;
|
|
553
|
-
// }
|
|
554
|
-
//
|
|
555
|
-
// /* Call with arguments attaches the signature to the type: */
|
|
556
|
-
// _s(
|
|
557
|
-
// Hello,
|
|
558
|
-
// 'useState{[foo, setFoo]}(0)',
|
|
559
|
-
// () => [useCustomHook], /* Lazy to avoid triggering inline requires */
|
|
560
|
-
// );
|
|
561
|
-
|
|
562
|
-
function createSignatureFunctionForTransform() {
|
|
563
|
-
{
|
|
564
|
-
var savedType;
|
|
565
|
-
var hasCustomHooks;
|
|
566
|
-
var didCollectHooks = false;
|
|
567
|
-
return function (type, key, forceReset, getCustomHooks) {
|
|
568
|
-
if (typeof key === 'string') {
|
|
569
|
-
// We're in the initial phase that associates signatures
|
|
570
|
-
// with the functions. Note this may be called multiple times
|
|
571
|
-
// in HOC chains like _s(hoc1(_s(hoc2(_s(actualFunction))))).
|
|
572
|
-
if (!savedType) {
|
|
573
|
-
// We're in the innermost call, so this is the actual type.
|
|
574
|
-
savedType = type;
|
|
575
|
-
hasCustomHooks = typeof getCustomHooks === 'function';
|
|
576
|
-
} // Set the signature for all types (even wrappers!) in case
|
|
577
|
-
// they have no signatures of their own. This is to prevent
|
|
578
|
-
// problems like https://github.com/facebook/react/issues/20417.
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
if (type != null && (typeof type === 'function' || typeof type === 'object')) {
|
|
582
|
-
setSignature(type, key, forceReset, getCustomHooks);
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
return type;
|
|
586
|
-
} else {
|
|
587
|
-
// We're in the _s() call without arguments, which means
|
|
588
|
-
// this is the time to collect custom Hook signatures.
|
|
589
|
-
// Only do this once. This path is hot and runs *inside* every render!
|
|
590
|
-
if (!didCollectHooks && hasCustomHooks) {
|
|
591
|
-
didCollectHooks = true;
|
|
592
|
-
collectCustomHooksForSignature(savedType);
|
|
593
|
-
}
|
|
594
|
-
}
|
|
595
|
-
};
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
function isLikelyComponentType(type) {
|
|
599
|
-
{
|
|
600
|
-
switch (typeof type) {
|
|
601
|
-
case 'function':
|
|
602
|
-
{
|
|
603
|
-
// First, deal with classes.
|
|
604
|
-
if (type.prototype != null) {
|
|
605
|
-
if (type.prototype.isReactComponent) {
|
|
606
|
-
// React class.
|
|
607
|
-
return true;
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
var ownNames = Object.getOwnPropertyNames(type.prototype);
|
|
611
|
-
|
|
612
|
-
if (ownNames.length > 1 || ownNames[0] !== 'constructor') {
|
|
613
|
-
// This looks like a class.
|
|
614
|
-
return false;
|
|
615
|
-
} // eslint-disable-next-line no-proto
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
if (type.prototype.__proto__ !== Object.prototype) {
|
|
619
|
-
// It has a superclass.
|
|
620
|
-
return false;
|
|
621
|
-
} // Pass through.
|
|
622
|
-
// This looks like a regular function with empty prototype.
|
|
623
|
-
|
|
624
|
-
} // For plain functions and arrows, use name as a heuristic.
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
var name = type.name || type.displayName;
|
|
628
|
-
return typeof name === 'string' && /^[A-Z]/.test(name);
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
case 'object':
|
|
632
|
-
{
|
|
633
|
-
if (type != null) {
|
|
634
|
-
switch (getProperty(type, '$$typeof')) {
|
|
635
|
-
case REACT_FORWARD_REF_TYPE:
|
|
636
|
-
case REACT_MEMO_TYPE:
|
|
637
|
-
// Definitely React components.
|
|
638
|
-
return true;
|
|
639
|
-
|
|
640
|
-
default:
|
|
641
|
-
return false;
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
return false;
|
|
646
|
-
}
|
|
647
|
-
|
|
648
|
-
default:
|
|
649
|
-
{
|
|
650
|
-
return false;
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
|
|
656
|
-
reactRefreshRuntime_development._getMountedRootCount = _getMountedRootCount;
|
|
657
|
-
reactRefreshRuntime_development.collectCustomHooksForSignature = collectCustomHooksForSignature;
|
|
658
|
-
reactRefreshRuntime_development.createSignatureFunctionForTransform = createSignatureFunctionForTransform;
|
|
659
|
-
reactRefreshRuntime_development.findAffectedHostInstances = findAffectedHostInstances;
|
|
660
|
-
reactRefreshRuntime_development.getFamilyByID = getFamilyByID;
|
|
661
|
-
reactRefreshRuntime_development.getFamilyByType = getFamilyByType;
|
|
662
|
-
reactRefreshRuntime_development.hasUnrecoverableErrors = hasUnrecoverableErrors;
|
|
663
|
-
reactRefreshRuntime_development.injectIntoGlobalHook = injectIntoGlobalHook;
|
|
664
|
-
reactRefreshRuntime_development.isLikelyComponentType = isLikelyComponentType;
|
|
665
|
-
reactRefreshRuntime_development.performReactRefresh = performReactRefresh;
|
|
666
|
-
reactRefreshRuntime_development.register = register;
|
|
667
|
-
reactRefreshRuntime_development.setSignature = setSignature;
|
|
668
|
-
})();
|
|
669
|
-
}
|
|
670
|
-
return reactRefreshRuntime_development;
|
|
671
|
-
}
|
|
672
|
-
|
|
673
|
-
(function (module) {
|
|
674
|
-
|
|
675
|
-
{
|
|
676
|
-
module.exports = requireReactRefreshRuntime_development();
|
|
677
|
-
}
|
|
678
|
-
} (runtime));
|
|
679
|
-
|
|
680
|
-
var __jsenv_default_import__ = /*@__PURE__*/getDefaultExportFromCjs(runtime.exports);
|
|
681
|
-
|
|
682
|
-
var _getMountedRootCount = runtime.exports._getMountedRootCount;
|
|
683
|
-
var collectCustomHooksForSignature = runtime.exports.collectCustomHooksForSignature;
|
|
684
|
-
var createSignatureFunctionForTransform = runtime.exports.createSignatureFunctionForTransform;
|
|
685
|
-
var findAffectedHostInstances = runtime.exports.findAffectedHostInstances;
|
|
686
|
-
var getFamilyByID = runtime.exports.getFamilyByID;
|
|
687
|
-
var getFamilyByType = runtime.exports.getFamilyByType;
|
|
688
|
-
var hasUnrecoverableErrors = runtime.exports.hasUnrecoverableErrors;
|
|
689
|
-
var injectIntoGlobalHook = runtime.exports.injectIntoGlobalHook;
|
|
690
|
-
var isLikelyComponentType = runtime.exports.isLikelyComponentType;
|
|
691
|
-
var performReactRefresh = runtime.exports.performReactRefresh;
|
|
692
|
-
var register = runtime.exports.register;
|
|
693
|
-
var setSignature = runtime.exports.setSignature;
|
|
694
|
-
export { _getMountedRootCount, collectCustomHooksForSignature, createSignatureFunctionForTransform, __jsenv_default_import__ as default, findAffectedHostInstances, getFamilyByID, getFamilyByType, hasUnrecoverableErrors, injectIntoGlobalHook, isLikelyComponentType, performReactRefresh, register, setSignature };
|
|
695
|
-
|
|
696
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZXMiOlsiZmlsZTovLy9Vc2Vycy9kLm1haWxsYXJkL2Rldi9qc2Vudi9qc2Vudi1jb3JlL25vZGVfbW9kdWxlcy9yZWFjdC1yZWZyZXNoL2Nqcy9yZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMiLCJmaWxlOi8vL1VzZXJzL2QubWFpbGxhcmQvZGV2L2pzZW52L2pzZW52LWNvcmUvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZnJlc2gvcnVudGltZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gIFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gIFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKTtcblxudmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDsgLy8gV2UgbmV2ZXIgcmVtb3ZlIHRoZXNlIGFzc29jaWF0aW9ucy5cbi8vIEl0J3MgT0sgdG8gcmVmZXJlbmNlIGZhbWlsaWVzLCBidXQgdXNlIFdlYWtNYXAvU2V0IGZvciB0eXBlcy5cblxudmFyIGFsbEZhbWlsaWVzQnlJRCA9IG5ldyBNYXAoKTtcbnZhciBhbGxGYW1pbGllc0J5VHlwZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbnZhciBhbGxTaWduYXR1cmVzQnlUeXBlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpOyAvLyBUaGlzIFdlYWtNYXAgaXMgcmVhZCBieSBSZWFjdCwgc28gd2Ugb25seSBwdXQgZmFtaWxpZXNcbi8vIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGVkaXRlZCBoZXJlLiBUaGlzIGtlZXBzIGNoZWNrcyBmYXN0LlxuLy8gJEZsb3dJc3N1ZVxuXG52YXIgdXBkYXRlZEZhbWlsaWVzQnlUeXBlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpOyAvLyBUaGlzIGlzIGNsZWFyZWQgb24gZXZlcnkgcGVyZm9ybVJlYWN0UmVmcmVzaCgpIGNhbGwuXG4vLyBJdCBpcyBhbiBhcnJheSBvZiBbRmFtaWx5LCBOZXh0VHlwZV0gdHVwbGVzLlxuXG52YXIgcGVuZGluZ1VwZGF0ZXMgPSBbXTsgLy8gVGhpcyBpcyBpbmplY3RlZCBieSB0aGUgcmVuZGVyZXIgdmlhIERldlRvb2xzIGdsb2JhbCBob29rLlxuXG52YXIgaGVscGVyc0J5UmVuZGVyZXJJRCA9IG5ldyBNYXAoKTtcbnZhciBoZWxwZXJzQnlSb290ID0gbmV3IE1hcCgpOyAvLyBXZSBrZWVwIHRyYWNrIG9mIG1vdW50ZWQgcm9vdHMgc28gd2UgY2FuIHNjaGVkdWxlIHVwZGF0ZXMuXG5cbnZhciBtb3VudGVkUm9vdHMgPSBuZXcgU2V0KCk7IC8vIElmIGEgcm9vdCBjYXB0dXJlcyBhbiBlcnJvciwgd2UgcmVtZW1iZXIgaXQgc28gd2UgY2FuIHJldHJ5IG9uIGVkaXQuXG5cbnZhciBmYWlsZWRSb290cyA9IG5ldyBTZXQoKTsgLy8gSW4gZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBXZWFrTWFwLCB3ZSBhbHNvIHJlbWVtYmVyIHRoZSBsYXN0IGVsZW1lbnQgZm9yIGV2ZXJ5IHJvb3QuXG4vLyBJdCBuZWVkcyB0byBiZSB3ZWFrIGJlY2F1c2Ugd2UgZG8gdGhpcyBldmVuIGZvciByb290cyB0aGF0IGZhaWxlZCB0byBtb3VudC5cbi8vIElmIHRoZXJlIGlzIG5vIFdlYWtNYXAsIHdlIHdvbid0IGF0dGVtcHQgdG8gZG8gcmV0cnlpbmcuXG4vLyAkRmxvd0lzc3VlXG5cbnZhciByb290RWxlbWVudHMgPSAvLyAkRmxvd0lzc3VlXG50eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBXZWFrTWFwKCkgOiBudWxsO1xudmFyIGlzUGVyZm9ybWluZ1JlZnJlc2ggPSBmYWxzZTtcblxuZnVuY3Rpb24gY29tcHV0ZUZ1bGxLZXkoc2lnbmF0dXJlKSB7XG4gIGlmIChzaWduYXR1cmUuZnVsbEtleSAhPT0gbnVsbCkge1xuICAgIHJldHVybiBzaWduYXR1cmUuZnVsbEtleTtcbiAgfVxuXG4gIHZhciBmdWxsS2V5ID0gc2lnbmF0dXJlLm93bktleTtcbiAgdmFyIGhvb2tzO1xuXG4gIHRyeSB7XG4gICAgaG9va3MgPSBzaWduYXR1cmUuZ2V0Q3VzdG9tSG9va3MoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gVGhpcyBjYW4gaGFwcGVuIGluIGFuIGVkZ2UgY2FzZSwgZS5nLiBpZiBleHByZXNzaW9uIGxpa2UgRm9vLnVzZVNvbWV0aGluZ1xuICAgIC8vIGRlcGVuZHMgb24gRm9vIHdoaWNoIGlzIGxhemlseSBpbml0aWFsaXplZCBkdXJpbmcgcmVuZGVyaW5nLlxuICAgIC8vIEluIHRoYXQgY2FzZSBqdXN0IGFzc3VtZSB3ZSdsbCBoYXZlIHRvIHJlbW91bnQuXG4gICAgc2lnbmF0dXJlLmZvcmNlUmVzZXQgPSB0cnVlO1xuICAgIHNpZ25hdHVyZS5mdWxsS2V5ID0gZnVsbEtleTtcbiAgICByZXR1cm4gZnVsbEtleTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaG9vayA9IGhvb2tzW2ldO1xuXG4gICAgaWYgKHR5cGVvZiBob29rICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBTb21ldGhpbmcncyB3cm9uZy4gQXNzdW1lIHdlIG5lZWQgdG8gcmVtb3VudC5cbiAgICAgIHNpZ25hdHVyZS5mb3JjZVJlc2V0ID0gdHJ1ZTtcbiAgICAgIHNpZ25hdHVyZS5mdWxsS2V5ID0gZnVsbEtleTtcbiAgICAgIHJldHVybiBmdWxsS2V5O1xuICAgIH1cblxuICAgIHZhciBuZXN0ZWRIb29rU2lnbmF0dXJlID0gYWxsU2lnbmF0dXJlc0J5VHlwZS5nZXQoaG9vayk7XG5cbiAgICBpZiAobmVzdGVkSG9va1NpZ25hdHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBObyBzaWduYXR1cmUgbWVhbnMgSG9vayB3YXNuJ3QgaW4gdGhlIHNvdXJjZSBjb2RlLCBlLmcuIGluIGEgbGlicmFyeS5cbiAgICAgIC8vIFdlJ2xsIHNraXAgaXQgYmVjYXVzZSB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGNoYW5nZSBkdXJpbmcgdGhpcyBzZXNzaW9uLlxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5lc3RlZEhvb2tLZXkgPSBjb21wdXRlRnVsbEtleShuZXN0ZWRIb29rU2lnbmF0dXJlKTtcblxuICAgIGlmIChuZXN0ZWRIb29rU2lnbmF0dXJlLmZvcmNlUmVzZXQpIHtcbiAgICAgIHNpZ25hdHVyZS5mb3JjZVJlc2V0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdWxsS2V5ICs9ICdcXG4tLS1cXG4nICsgbmVzdGVkSG9va0tleTtcbiAgfVxuXG4gIHNpZ25hdHVyZS5mdWxsS2V5ID0gZnVsbEtleTtcbiAgcmV0dXJuIGZ1bGxLZXk7XG59XG5cbmZ1bmN0aW9uIGhhdmVFcXVhbFNpZ25hdHVyZXMocHJldlR5cGUsIG5leHRUeXBlKSB7XG4gIHZhciBwcmV2U2lnbmF0dXJlID0gYWxsU2lnbmF0dXJlc0J5VHlwZS5nZXQocHJldlR5cGUpO1xuICB2YXIgbmV4dFNpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KG5leHRUeXBlKTtcblxuICBpZiAocHJldlNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkICYmIG5leHRTaWduYXR1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHByZXZTaWduYXR1cmUgPT09IHVuZGVmaW5lZCB8fCBuZXh0U2lnbmF0dXJlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoY29tcHV0ZUZ1bGxLZXkocHJldlNpZ25hdHVyZSkgIT09IGNvbXB1dGVGdWxsS2V5KG5leHRTaWduYXR1cmUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG5leHRTaWduYXR1cmUuZm9yY2VSZXNldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1JlYWN0Q2xhc3ModHlwZSkge1xuICByZXR1cm4gdHlwZS5wcm90b3R5cGUgJiYgdHlwZS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudDtcbn1cblxuZnVuY3Rpb24gY2FuUHJlc2VydmVTdGF0ZUJldHdlZW4ocHJldlR5cGUsIG5leHRUeXBlKSB7XG4gIGlmIChpc1JlYWN0Q2xhc3MocHJldlR5cGUpIHx8IGlzUmVhY3RDbGFzcyhuZXh0VHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaGF2ZUVxdWFsU2lnbmF0dXJlcyhwcmV2VHlwZSwgbmV4dFR5cGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVGYW1pbHkodHlwZSkge1xuICAvLyBPbmx5IGNoZWNrIHVwZGF0ZWQgdHlwZXMgdG8ga2VlcCBsb29rdXBzIGZhc3QuXG4gIHJldHVybiB1cGRhdGVkRmFtaWxpZXNCeVR5cGUuZ2V0KHR5cGUpO1xufSAvLyBJZiB3ZSBkaWRuJ3QgY2FyZSBhYm91dCBJRTExLCB3ZSBjb3VsZCB1c2UgbmV3IE1hcC9TZXQoaXRlcmFibGUpLlxuXG5cbmZ1bmN0aW9uIGNsb25lTWFwKG1hcCkge1xuICB2YXIgY2xvbmUgPSBuZXcgTWFwKCk7XG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgY2xvbmUuc2V0KGtleSwgdmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIGNsb25lO1xufVxuXG5mdW5jdGlvbiBjbG9uZVNldChzZXQpIHtcbiAgdmFyIGNsb25lID0gbmV3IFNldCgpO1xuICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBjbG9uZS5hZGQodmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIGNsb25lO1xufSAvLyBUaGlzIGlzIGEgc2FmZXR5IG1lY2hhbmlzbSB0byBwcm90ZWN0IGFnYWluc3Qgcm9ndWUgZ2V0dGVycyBhbmQgUHJveGllcy5cblxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9iamVjdFtwcm9wZXJ0eV07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIEludGVudGlvbmFsbHkgaWdub3JlLlxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVyZm9ybVJlYWN0UmVmcmVzaCgpIHtcblxuICBpZiAocGVuZGluZ1VwZGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaXNQZXJmb3JtaW5nUmVmcmVzaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaXNQZXJmb3JtaW5nUmVmcmVzaCA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICB2YXIgc3RhbGVGYW1pbGllcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdXBkYXRlZEZhbWlsaWVzID0gbmV3IFNldCgpO1xuICAgIHZhciB1cGRhdGVzID0gcGVuZGluZ1VwZGF0ZXM7XG4gICAgcGVuZGluZ1VwZGF0ZXMgPSBbXTtcbiAgICB1cGRhdGVzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBmYW1pbHkgPSBfcmVmWzBdLFxuICAgICAgICAgIG5leHRUeXBlID0gX3JlZlsxXTtcbiAgICAgIC8vIE5vdyB0aGF0IHdlIGdvdCBhIHJlYWwgZWRpdCwgd2UgY2FuIGNyZWF0ZSBhc3NvY2lhdGlvbnNcbiAgICAgIC8vIHRoYXQgd2lsbCBiZSByZWFkIGJ5IHRoZSBSZWFjdCByZWNvbmNpbGVyLlxuICAgICAgdmFyIHByZXZUeXBlID0gZmFtaWx5LmN1cnJlbnQ7XG4gICAgICB1cGRhdGVkRmFtaWxpZXNCeVR5cGUuc2V0KHByZXZUeXBlLCBmYW1pbHkpO1xuICAgICAgdXBkYXRlZEZhbWlsaWVzQnlUeXBlLnNldChuZXh0VHlwZSwgZmFtaWx5KTtcbiAgICAgIGZhbWlseS5jdXJyZW50ID0gbmV4dFR5cGU7IC8vIERldGVybWluZSB3aGV0aGVyIHRoaXMgc2hvdWxkIGJlIGEgcmUtcmVuZGVyIG9yIGEgcmUtbW91bnQuXG5cbiAgICAgIGlmIChjYW5QcmVzZXJ2ZVN0YXRlQmV0d2VlbihwcmV2VHlwZSwgbmV4dFR5cGUpKSB7XG4gICAgICAgIHVwZGF0ZWRGYW1pbGllcy5hZGQoZmFtaWx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YWxlRmFtaWxpZXMuYWRkKGZhbWlseSk7XG4gICAgICB9XG4gICAgfSk7IC8vIFRPRE86IHJlbmFtZSB0aGVzZSBmaWVsZHMgdG8gc29tZXRoaW5nIG1vcmUgbWVhbmluZ2Z1bC5cblxuICAgIHZhciB1cGRhdGUgPSB7XG4gICAgICB1cGRhdGVkRmFtaWxpZXM6IHVwZGF0ZWRGYW1pbGllcyxcbiAgICAgIC8vIEZhbWlsaWVzIHRoYXQgd2lsbCByZS1yZW5kZXIgcHJlc2VydmluZyBzdGF0ZVxuICAgICAgc3RhbGVGYW1pbGllczogc3RhbGVGYW1pbGllcyAvLyBGYW1pbGllcyB0aGF0IHdpbGwgYmUgcmVtb3VudGVkXG5cbiAgICB9O1xuICAgIGhlbHBlcnNCeVJlbmRlcmVySUQuZm9yRWFjaChmdW5jdGlvbiAoaGVscGVycykge1xuICAgICAgLy8gRXZlbiBpZiB0aGVyZSBhcmUgbm8gcm9vdHMsIHNldCB0aGUgaGFuZGxlciBvbiBmaXJzdCB1cGRhdGUuXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBpZiAqbmV3KiByb290cyBhcmUgbW91bnRlZCwgdGhleSdsbCB1c2UgdGhlIHJlc29sdmUgaGFuZGxlci5cbiAgICAgIGhlbHBlcnMuc2V0UmVmcmVzaEhhbmRsZXIocmVzb2x2ZUZhbWlseSk7XG4gICAgfSk7XG4gICAgdmFyIGRpZEVycm9yID0gZmFsc2U7XG4gICAgdmFyIGZpcnN0RXJyb3IgPSBudWxsOyAvLyBXZSBzbmFwc2hvdCBtYXBzIGFuZCBzZXRzIHRoYXQgYXJlIG11dGF0ZWQgZHVyaW5nIGNvbW1pdHMuXG4gICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlcmUgaXMgYSByaXNrIHRoZXkgd2lsbCBiZSBtdXRhdGVkIHdoaWxlXG4gICAgLy8gd2UgaXRlcmF0ZSBvdmVyIHRoZW0uIEZvciBleGFtcGxlLCB0cnlpbmcgdG8gcmVjb3ZlciBhIGZhaWxlZCByb290XG4gICAgLy8gbWF5IGNhdXNlIGFub3RoZXIgcm9vdCB0byBiZSBhZGRlZCB0byB0aGUgZmFpbGVkIGxpc3QgLS0gYW4gaW5maW5pdGUgbG9vcC5cblxuICAgIHZhciBmYWlsZWRSb290c1NuYXBzaG90ID0gY2xvbmVTZXQoZmFpbGVkUm9vdHMpO1xuICAgIHZhciBtb3VudGVkUm9vdHNTbmFwc2hvdCA9IGNsb25lU2V0KG1vdW50ZWRSb290cyk7XG4gICAgdmFyIGhlbHBlcnNCeVJvb3RTbmFwc2hvdCA9IGNsb25lTWFwKGhlbHBlcnNCeVJvb3QpO1xuICAgIGZhaWxlZFJvb3RzU25hcHNob3QuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgdmFyIGhlbHBlcnMgPSBoZWxwZXJzQnlSb290U25hcHNob3QuZ2V0KHJvb3QpO1xuXG4gICAgICBpZiAoaGVscGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgaGVscGVycyBmb3IgYSByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0IFJlZnJlc2guJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZmFpbGVkUm9vdHMuaGFzKHJvb3QpKSB7Ly8gTm8gbG9uZ2VyIGZhaWxlZC5cbiAgICAgIH1cblxuICAgICAgaWYgKHJvb3RFbGVtZW50cyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghcm9vdEVsZW1lbnRzLmhhcyhyb290KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBlbGVtZW50ID0gcm9vdEVsZW1lbnRzLmdldChyb290KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaGVscGVycy5zY2hlZHVsZVJvb3Qocm9vdCwgZWxlbWVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFkaWRFcnJvcikge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICBmaXJzdEVycm9yID0gZXJyO1xuICAgICAgICB9IC8vIEtlZXAgdHJ5aW5nIG90aGVyIHJvb3RzLlxuXG4gICAgICB9XG4gICAgfSk7XG4gICAgbW91bnRlZFJvb3RzU25hcHNob3QuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgdmFyIGhlbHBlcnMgPSBoZWxwZXJzQnlSb290U25hcHNob3QuZ2V0KHJvb3QpO1xuXG4gICAgICBpZiAoaGVscGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgaGVscGVycyBmb3IgYSByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0IFJlZnJlc2guJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghbW91bnRlZFJvb3RzLmhhcyhyb290KSkgey8vIE5vIGxvbmdlciBtb3VudGVkLlxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBoZWxwZXJzLnNjaGVkdWxlUmVmcmVzaChyb290LCB1cGRhdGUpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghZGlkRXJyb3IpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgZmlyc3RFcnJvciA9IGVycjtcbiAgICAgICAgfSAvLyBLZWVwIHRyeWluZyBvdGhlciByb290cy5cblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGRpZEVycm9yKSB7XG4gICAgICB0aHJvdyBmaXJzdEVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGU7XG4gIH0gZmluYWxseSB7XG4gICAgaXNQZXJmb3JtaW5nUmVmcmVzaCA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiByZWdpc3Rlcih0eXBlLCBpZCkge1xuICB7XG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gaW4gYW4gZWRnZSBjYXNlLCBlLmcuIGlmIHdlIHJlZ2lzdGVyXG4gICAgLy8gcmV0dXJuIHZhbHVlIG9mIGEgSE9DIGJ1dCBpdCByZXR1cm5zIGEgY2FjaGVkIGNvbXBvbmVudC5cbiAgICAvLyBJZ25vcmUgYW55dGhpbmcgYnV0IHRoZSBmaXJzdCByZWdpc3RyYXRpb24gZm9yIGVhY2ggdHlwZS5cblxuXG4gICAgaWYgKGFsbEZhbWlsaWVzQnlUeXBlLmhhcyh0eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gQ3JlYXRlIGZhbWlseSBvciByZW1lbWJlciB0byB1cGRhdGUgaXQuXG4gICAgLy8gTm9uZSBvZiB0aGlzIGJvb2trZWVwaW5nIGFmZmVjdHMgcmVjb25jaWxpYXRpb25cbiAgICAvLyB1bnRpbCB0aGUgZmlyc3QgcGVyZm9ybVJlYWN0UmVmcmVzaCgpIGNhbGwgYWJvdmUuXG5cblxuICAgIHZhciBmYW1pbHkgPSBhbGxGYW1pbGllc0J5SUQuZ2V0KGlkKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmFtaWx5ID0ge1xuICAgICAgICBjdXJyZW50OiB0eXBlXG4gICAgICB9O1xuICAgICAgYWxsRmFtaWxpZXNCeUlELnNldChpZCwgZmFtaWx5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ1VwZGF0ZXMucHVzaChbZmFtaWx5LCB0eXBlXSk7XG4gICAgfVxuXG4gICAgYWxsRmFtaWxpZXNCeVR5cGUuc2V0KHR5cGUsIGZhbWlseSk7IC8vIFZpc2l0IGlubmVyIHR5cGVzIGJlY2F1c2Ugd2UgbWlnaHQgbm90IGhhdmUgcmVnaXN0ZXJlZCB0aGVtLlxuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKGdldFByb3BlcnR5KHR5cGUsICckJHR5cGVvZicpKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICByZWdpc3Rlcih0eXBlLnJlbmRlciwgaWQgKyAnJHJlbmRlcicpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgIHJlZ2lzdGVyKHR5cGUudHlwZSwgaWQgKyAnJHR5cGUnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHNldFNpZ25hdHVyZSh0eXBlLCBrZXkpIHtcbiAgdmFyIGZvcmNlUmVzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICB2YXIgZ2V0Q3VzdG9tSG9va3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcblxuICB7XG4gICAgaWYgKCFhbGxTaWduYXR1cmVzQnlUeXBlLmhhcyh0eXBlKSkge1xuICAgICAgYWxsU2lnbmF0dXJlc0J5VHlwZS5zZXQodHlwZSwge1xuICAgICAgICBmb3JjZVJlc2V0OiBmb3JjZVJlc2V0LFxuICAgICAgICBvd25LZXk6IGtleSxcbiAgICAgICAgZnVsbEtleTogbnVsbCxcbiAgICAgICAgZ2V0Q3VzdG9tSG9va3M6IGdldEN1c3RvbUhvb2tzIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gLy8gVmlzaXQgaW5uZXIgdHlwZXMgYmVjYXVzZSB3ZSBtaWdodCBub3QgaGF2ZSBzaWduZWQgdGhlbS5cblxuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKGdldFByb3BlcnR5KHR5cGUsICckJHR5cGVvZicpKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICBzZXRTaWduYXR1cmUodHlwZS5yZW5kZXIsIGtleSwgZm9yY2VSZXNldCwgZ2V0Q3VzdG9tSG9va3MpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgIHNldFNpZ25hdHVyZSh0eXBlLnR5cGUsIGtleSwgZm9yY2VSZXNldCwgZ2V0Q3VzdG9tSG9va3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBUaGlzIGlzIGxhemlseSBjYWxsZWQgZHVyaW5nIGZpcnN0IHJlbmRlciBmb3IgYSB0eXBlLlxuLy8gSXQgY2FwdHVyZXMgSG9vayBsaXN0IGF0IHRoYXQgdGltZSBzbyBpbmxpbmUgcmVxdWlyZXMgZG9uJ3QgYnJlYWsgY29tcGFyaXNvbnMuXG5cbmZ1bmN0aW9uIGNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZSh0eXBlKSB7XG4gIHtcbiAgICB2YXIgc2lnbmF0dXJlID0gYWxsU2lnbmF0dXJlc0J5VHlwZS5nZXQodHlwZSk7XG5cbiAgICBpZiAoc2lnbmF0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbXB1dGVGdWxsS2V5KHNpZ25hdHVyZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRGYW1pbHlCeUlEKGlkKSB7XG4gIHtcbiAgICByZXR1cm4gYWxsRmFtaWxpZXNCeUlELmdldChpZCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZhbWlseUJ5VHlwZSh0eXBlKSB7XG4gIHtcbiAgICByZXR1cm4gYWxsRmFtaWxpZXNCeVR5cGUuZ2V0KHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBmaW5kQWZmZWN0ZWRIb3N0SW5zdGFuY2VzKGZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgYWZmZWN0ZWRJbnN0YW5jZXMgPSBuZXcgU2V0KCk7XG4gICAgbW91bnRlZFJvb3RzLmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5Um9vdC5nZXQocm9vdCk7XG5cbiAgICAgIGlmIChoZWxwZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBoZWxwZXJzIGZvciBhIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QgUmVmcmVzaC4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluc3RhbmNlc0ZvclJvb3QgPSBoZWxwZXJzLmZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaChyb290LCBmYW1pbGllcyk7XG4gICAgICBpbnN0YW5jZXNGb3JSb290LmZvckVhY2goZnVuY3Rpb24gKGluc3QpIHtcbiAgICAgICAgYWZmZWN0ZWRJbnN0YW5jZXMuYWRkKGluc3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFmZmVjdGVkSW5zdGFuY2VzO1xuICB9XG59XG5mdW5jdGlvbiBpbmplY3RJbnRvR2xvYmFsSG9vayhnbG9iYWxPYmplY3QpIHtcbiAge1xuICAgIC8vIEZvciBSZWFjdCBOYXRpdmUsIHRoZSBnbG9iYWwgaG9vayB3aWxsIGJlIHNldCB1cCBieSByZXF1aXJlKCdyZWFjdC1kZXZ0b29scy1jb3JlJykuXG4gICAgLy8gVGhhdCBjb2RlIHdpbGwgcnVuIGJlZm9yZSB1cy4gU28gd2UgbmVlZCB0byBtb25rZXlwYXRjaCBmdW5jdGlvbnMgb24gZXhpc3RpbmcgaG9vay5cbiAgICAvLyBGb3IgUmVhY3QgV2ViLCB0aGUgZ2xvYmFsIGhvb2sgd2lsbCBiZSBzZXQgdXAgYnkgdGhlIGV4dGVuc2lvbi5cbiAgICAvLyBUaGlzIHdpbGwgYWxzbyBydW4gYmVmb3JlIHVzLlxuICAgIHZhciBob29rID0gZ2xvYmFsT2JqZWN0Ll9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuICAgIGlmIChob29rID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEhvd2V2ZXIsIGlmIHRoZXJlIGlzIG5vIERldlRvb2xzIGV4dGVuc2lvbiwgd2UnbGwgbmVlZCB0byBzZXQgdXAgdGhlIGdsb2JhbCBob29rIG91cnNlbHZlcy5cbiAgICAgIC8vIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UgaXQncyBpbXBvcnRhbnQgdGhhdCByZW5kZXJlciBjb2RlIHJ1bnMgKmFmdGVyKiB0aGlzIG1ldGhvZCBjYWxsLlxuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVuZGVyZXIgd2lsbCB0aGluayB0aGF0IHRoZXJlIGlzIG5vIGdsb2JhbCBob29rLCBhbmQgd29uJ3QgZG8gdGhlIGluamVjdGlvbi5cbiAgICAgIHZhciBuZXh0SUQgPSAwO1xuICAgICAgZ2xvYmFsT2JqZWN0Ll9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9IGhvb2sgPSB7XG4gICAgICAgIHJlbmRlcmVyczogbmV3IE1hcCgpLFxuICAgICAgICBzdXBwb3J0c0ZpYmVyOiB0cnVlLFxuICAgICAgICBpbmplY3Q6IGZ1bmN0aW9uIChpbmplY3RlZCkge1xuICAgICAgICAgIHJldHVybiBuZXh0SUQrKztcbiAgICAgICAgfSxcbiAgICAgICAgb25TY2hlZHVsZUZpYmVyUm9vdDogZnVuY3Rpb24gKGlkLCByb290LCBjaGlsZHJlbikge30sXG4gICAgICAgIG9uQ29tbWl0RmliZXJSb290OiBmdW5jdGlvbiAoaWQsIHJvb3QsIG1heWJlUHJpb3JpdHlMZXZlbCwgZGlkRXJyb3IpIHt9LFxuICAgICAgICBvbkNvbW1pdEZpYmVyVW5tb3VudDogZnVuY3Rpb24gKCkge31cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGhvb2suaXNEaXNhYmxlZCkge1xuICAgICAgLy8gVGhpcyBpc24ndCBhIHJlYWwgcHJvcGVydHkgb24gdGhlIGhvb2ssIGJ1dCBpdCBjYW4gYmUgc2V0IHRvIG9wdCBvdXRcbiAgICAgIC8vIG9mIERldlRvb2xzIGludGVncmF0aW9uIGFuZCBhc3NvY2lhdGVkIHdhcm5pbmdzIGFuZCBsb2dzLlxuICAgICAgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnU29tZXRoaW5nIGhhcyBzaGltbWVkIHRoZSBSZWFjdCBEZXZUb29scyBnbG9iYWwgaG9vayAoX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fKS4gJyArICdGYXN0IFJlZnJlc2ggaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzIHNoaW0gYW5kIHdpbGwgYmUgZGlzYWJsZWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBIZXJlLCB3ZSBqdXN0IHdhbnQgdG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHNjaGVkdWxlUmVmcmVzaC5cblxuXG4gICAgdmFyIG9sZEluamVjdCA9IGhvb2suaW5qZWN0O1xuXG4gICAgaG9vay5pbmplY3QgPSBmdW5jdGlvbiAoaW5qZWN0ZWQpIHtcbiAgICAgIHZhciBpZCA9IG9sZEluamVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgICBpZiAodHlwZW9mIGluamVjdGVkLnNjaGVkdWxlUmVmcmVzaCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5qZWN0ZWQuc2V0UmVmcmVzaEhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVGhpcyB2ZXJzaW9uIHN1cHBvcnRzIFJlYWN0IFJlZnJlc2guXG4gICAgICAgIGhlbHBlcnNCeVJlbmRlcmVySUQuc2V0KGlkLCBpbmplY3RlZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpZDtcbiAgICB9OyAvLyBEbyB0aGUgc2FtZSBmb3IgYW55IGFscmVhZHkgaW5qZWN0ZWQgcm9vdHMuXG4gICAgLy8gVGhpcyBpcyB1c2VmdWwgaWYgUmVhY3RET00gaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE3NjI2XG5cblxuICAgIGhvb2sucmVuZGVyZXJzLmZvckVhY2goZnVuY3Rpb24gKGluamVjdGVkLCBpZCkge1xuICAgICAgaWYgKHR5cGVvZiBpbmplY3RlZC5zY2hlZHVsZVJlZnJlc2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluamVjdGVkLnNldFJlZnJlc2hIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRoaXMgdmVyc2lvbiBzdXBwb3J0cyBSZWFjdCBSZWZyZXNoLlxuICAgICAgICBoZWxwZXJzQnlSZW5kZXJlcklELnNldChpZCwgaW5qZWN0ZWQpO1xuICAgICAgfVxuICAgIH0pOyAvLyBXZSBhbHNvIHdhbnQgdG8gdHJhY2sgY3VycmVudGx5IG1vdW50ZWQgcm9vdHMuXG5cbiAgICB2YXIgb2xkT25Db21taXRGaWJlclJvb3QgPSBob29rLm9uQ29tbWl0RmliZXJSb290O1xuXG4gICAgdmFyIG9sZE9uU2NoZWR1bGVGaWJlclJvb3QgPSBob29rLm9uU2NoZWR1bGVGaWJlclJvb3QgfHwgZnVuY3Rpb24gKCkge307XG5cbiAgICBob29rLm9uU2NoZWR1bGVGaWJlclJvb3QgPSBmdW5jdGlvbiAoaWQsIHJvb3QsIGNoaWxkcmVuKSB7XG4gICAgICBpZiAoIWlzUGVyZm9ybWluZ1JlZnJlc2gpIHtcbiAgICAgICAgLy8gSWYgaXQgd2FzIGludGVudGlvbmFsbHkgc2NoZWR1bGVkLCBkb24ndCBhdHRlbXB0IHRvIHJlc3RvcmUuXG4gICAgICAgIC8vIFRoaXMgaW5jbHVkZXMgaW50ZW50aW9uYWxseSBzY2hlZHVsZWQgdW5tb3VudHMuXG4gICAgICAgIGZhaWxlZFJvb3RzLmRlbGV0ZShyb290KTtcblxuICAgICAgICBpZiAocm9vdEVsZW1lbnRzICE9PSBudWxsKSB7XG4gICAgICAgICAgcm9vdEVsZW1lbnRzLnNldChyb290LCBjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9sZE9uU2NoZWR1bGVGaWJlclJvb3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgaG9vay5vbkNvbW1pdEZpYmVyUm9vdCA9IGZ1bmN0aW9uIChpZCwgcm9vdCwgbWF5YmVQcmlvcml0eUxldmVsLCBkaWRFcnJvcikge1xuICAgICAgdmFyIGhlbHBlcnMgPSBoZWxwZXJzQnlSZW5kZXJlcklELmdldChpZCk7XG5cbiAgICAgIGlmIChoZWxwZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVscGVyc0J5Um9vdC5zZXQocm9vdCwgaGVscGVycyk7XG4gICAgICAgIHZhciBjdXJyZW50ID0gcm9vdC5jdXJyZW50O1xuICAgICAgICB2YXIgYWx0ZXJuYXRlID0gY3VycmVudC5hbHRlcm5hdGU7IC8vIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyByb290IGhhcyBqdXN0ICh1biltb3VudGVkLlxuICAgICAgICAvLyBUaGlzIGxvZ2ljIGlzIGNvcHktcGFzdGVkIGZyb20gc2ltaWxhciBsb2dpYyBpbiB0aGUgRGV2VG9vbHMgYmFja2VuZC5cbiAgICAgICAgLy8gSWYgdGhpcyBicmVha3Mgd2l0aCBzb21lIHJlZmFjdG9yaW5nLCB5b3UnbGwgd2FudCB0byB1cGRhdGUgRGV2VG9vbHMgdG9vLlxuXG4gICAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgd2FzTW91bnRlZCA9IGFsdGVybmF0ZS5tZW1vaXplZFN0YXRlICE9IG51bGwgJiYgYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuZWxlbWVudCAhPSBudWxsICYmIG1vdW50ZWRSb290cy5oYXMocm9vdCk7XG4gICAgICAgICAgdmFyIGlzTW91bnRlZCA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5lbGVtZW50ICE9IG51bGw7XG5cbiAgICAgICAgICBpZiAoIXdhc01vdW50ZWQgJiYgaXNNb3VudGVkKSB7XG4gICAgICAgICAgICAvLyBNb3VudCBhIG5ldyByb290LlxuICAgICAgICAgICAgbW91bnRlZFJvb3RzLmFkZChyb290KTtcbiAgICAgICAgICAgIGZhaWxlZFJvb3RzLmRlbGV0ZShyb290KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHdhc01vdW50ZWQgJiYgaXNNb3VudGVkKSA7IGVsc2UgaWYgKHdhc01vdW50ZWQgJiYgIWlzTW91bnRlZCkge1xuICAgICAgICAgICAgLy8gVW5tb3VudCBhbiBleGlzdGluZyByb290LlxuICAgICAgICAgICAgbW91bnRlZFJvb3RzLmRlbGV0ZShyb290KTtcblxuICAgICAgICAgICAgaWYgKGRpZEVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIFdlJ2xsIHJlbW91bnQgaXQgb24gZnV0dXJlIGVkaXRzLlxuICAgICAgICAgICAgICBmYWlsZWRSb290cy5hZGQocm9vdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBoZWxwZXJzQnlSb290LmRlbGV0ZShyb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCF3YXNNb3VudGVkICYmICFpc01vdW50ZWQpIHtcbiAgICAgICAgICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgICAgICAgICAvLyBXZSdsbCByZW1vdW50IGl0IG9uIGZ1dHVyZSBlZGl0cy5cbiAgICAgICAgICAgICAgZmFpbGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBNb3VudCBhIG5ldyByb290LlxuICAgICAgICAgIG1vdW50ZWRSb290cy5hZGQocm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQWx3YXlzIGNhbGwgdGhlIGRlY29yYXRlZCBEZXZUb29scyBob29rLlxuXG5cbiAgICAgIHJldHVybiBvbGRPbkNvbW1pdEZpYmVyUm9vdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGhhc1VucmVjb3ZlcmFibGVFcnJvcnMoKSB7XG4gIC8vIFRPRE86IGRlbGV0ZSB0aGlzIGFmdGVyIHJlbW92aW5nIGRlcGVuZGVuY3kgaW4gUk4uXG4gIHJldHVybiBmYWxzZTtcbn0gLy8gRXhwb3NlZCBmb3IgdGVzdGluZy5cblxuZnVuY3Rpb24gX2dldE1vdW50ZWRSb290Q291bnQoKSB7XG4gIHtcbiAgICByZXR1cm4gbW91bnRlZFJvb3RzLnNpemU7XG4gIH1cbn0gLy8gVGhpcyBpcyBhIHdyYXBwZXIgb3ZlciBtb3JlIHByaW1pdGl2ZSBmdW5jdGlvbnMgZm9yIHNldHRpbmcgc2lnbmF0dXJlLlxuLy8gU2lnbmF0dXJlcyBsZXQgdXMgZGVjaWRlIHdoZXRoZXIgdGhlIEhvb2sgb3JkZXIgaGFzIGNoYW5nZWQgb24gcmVmcmVzaC5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSB0cmFuc2Zvcm0gdGFyZ2V0LCBlLmcuOlxuLy8gdmFyIF9zID0gY3JlYXRlU2lnbmF0dXJlRnVuY3Rpb25Gb3JUcmFuc2Zvcm0oKVxuLy9cbi8vIGZ1bmN0aW9uIEhlbGxvKCkge1xuLy8gICBjb25zdCBbZm9vLCBzZXRGb29dID0gdXNlU3RhdGUoMCk7XG4vLyAgIGNvbnN0IHZhbHVlID0gdXNlQ3VzdG9tSG9vaygpO1xuLy8gICBfcygpOyAvKiBDYWxsIHdpdGhvdXQgYXJndW1lbnRzIHRyaWdnZXJzIGNvbGxlY3RpbmcgdGhlIGN1c3RvbSBIb29rIGxpc3QuXG4vLyAgICAgICAgICAqIFRoaXMgZG9lc24ndCBoYXBwZW4gZHVyaW5nIHRoZSBtb2R1bGUgZXZhbHVhdGlvbiBiZWNhdXNlIHdlXG4vLyAgICAgICAgICAqIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBtb2R1bGUgb3JkZXIgd2l0aCBpbmxpbmUgcmVxdWlyZXMuXG4vLyAgICAgICAgICAqIE5leHQgY2FsbHMgYXJlIG5vb3BzLiAqL1xuLy8gICByZXR1cm4gPGgxPkhpPC9oMT47XG4vLyB9XG4vL1xuLy8gLyogQ2FsbCB3aXRoIGFyZ3VtZW50cyBhdHRhY2hlcyB0aGUgc2lnbmF0dXJlIHRvIHRoZSB0eXBlOiAqL1xuLy8gX3MoXG4vLyAgIEhlbGxvLFxuLy8gICAndXNlU3RhdGV7W2Zvbywgc2V0Rm9vXX0oMCknLFxuLy8gICAoKSA9PiBbdXNlQ3VzdG9tSG9va10sIC8qIExhenkgdG8gYXZvaWQgdHJpZ2dlcmluZyBpbmxpbmUgcmVxdWlyZXMgKi9cbi8vICk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtKCkge1xuICB7XG4gICAgdmFyIHNhdmVkVHlwZTtcbiAgICB2YXIgaGFzQ3VzdG9tSG9va3M7XG4gICAgdmFyIGRpZENvbGxlY3RIb29rcyA9IGZhbHNlO1xuICAgIHJldHVybiBmdW5jdGlvbiAodHlwZSwga2V5LCBmb3JjZVJlc2V0LCBnZXRDdXN0b21Ib29rcykge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIFdlJ3JlIGluIHRoZSBpbml0aWFsIHBoYXNlIHRoYXQgYXNzb2NpYXRlcyBzaWduYXR1cmVzXG4gICAgICAgIC8vIHdpdGggdGhlIGZ1bmN0aW9ucy4gTm90ZSB0aGlzIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgLy8gaW4gSE9DIGNoYWlucyBsaWtlIF9zKGhvYzEoX3MoaG9jMihfcyhhY3R1YWxGdW5jdGlvbikpKSkpLlxuICAgICAgICBpZiAoIXNhdmVkVHlwZSkge1xuICAgICAgICAgIC8vIFdlJ3JlIGluIHRoZSBpbm5lcm1vc3QgY2FsbCwgc28gdGhpcyBpcyB0aGUgYWN0dWFsIHR5cGUuXG4gICAgICAgICAgc2F2ZWRUeXBlID0gdHlwZTtcbiAgICAgICAgICBoYXNDdXN0b21Ib29rcyA9IHR5cGVvZiBnZXRDdXN0b21Ib29rcyA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgfSAvLyBTZXQgdGhlIHNpZ25hdHVyZSBmb3IgYWxsIHR5cGVzIChldmVuIHdyYXBwZXJzISkgaW4gY2FzZVxuICAgICAgICAvLyB0aGV5IGhhdmUgbm8gc2lnbmF0dXJlcyBvZiB0aGVpciBvd24uIFRoaXMgaXMgdG8gcHJldmVudFxuICAgICAgICAvLyBwcm9ibGVtcyBsaWtlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMjA0MTcuXG5cblxuICAgICAgICBpZiAodHlwZSAhPSBudWxsICYmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpKSB7XG4gICAgICAgICAgc2V0U2lnbmF0dXJlKHR5cGUsIGtleSwgZm9yY2VSZXNldCwgZ2V0Q3VzdG9tSG9va3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXZSdyZSBpbiB0aGUgX3MoKSBjYWxsIHdpdGhvdXQgYXJndW1lbnRzLCB3aGljaCBtZWFuc1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB0aW1lIHRvIGNvbGxlY3QgY3VzdG9tIEhvb2sgc2lnbmF0dXJlcy5cbiAgICAgICAgLy8gT25seSBkbyB0aGlzIG9uY2UuIFRoaXMgcGF0aCBpcyBob3QgYW5kIHJ1bnMgKmluc2lkZSogZXZlcnkgcmVuZGVyIVxuICAgICAgICBpZiAoIWRpZENvbGxlY3RIb29rcyAmJiBoYXNDdXN0b21Ib29rcykge1xuICAgICAgICAgIGRpZENvbGxlY3RIb29rcyA9IHRydWU7XG4gICAgICAgICAgY29sbGVjdEN1c3RvbUhvb2tzRm9yU2lnbmF0dXJlKHNhdmVkVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBpc0xpa2VseUNvbXBvbmVudFR5cGUodHlwZSkge1xuICB7XG4gICAgc3dpdGNoICh0eXBlb2YgdHlwZSkge1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gRmlyc3QsIGRlYWwgd2l0aCBjbGFzc2VzLlxuICAgICAgICAgIGlmICh0eXBlLnByb3RvdHlwZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAvLyBSZWFjdCBjbGFzcy5cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvd25OYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHR5cGUucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgaWYgKG93bk5hbWVzLmxlbmd0aCA+IDEgfHwgb3duTmFtZXNbMF0gIT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBsb29rcyBsaWtlIGEgY2xhc3MuXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvXG5cblxuICAgICAgICAgICAgaWYgKHR5cGUucHJvdG90eXBlLl9fcHJvdG9fXyAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAvLyBJdCBoYXMgYSBzdXBlcmNsYXNzLlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IC8vIFBhc3MgdGhyb3VnaC5cbiAgICAgICAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24gd2l0aCBlbXB0eSBwcm90b3R5cGUuXG5cbiAgICAgICAgICB9IC8vIEZvciBwbGFpbiBmdW5jdGlvbnMgYW5kIGFycm93cywgdXNlIG5hbWUgYXMgYSBoZXVyaXN0aWMuXG5cblxuICAgICAgICAgIHZhciBuYW1lID0gdHlwZS5uYW1lIHx8IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiAvXltBLVpdLy50ZXN0KG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGdldFByb3BlcnR5KHR5cGUsICckJHR5cGVvZicpKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgLy8gRGVmaW5pdGVseSBSZWFjdCBjb21wb25lbnRzLlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydHMuX2dldE1vdW50ZWRSb290Q291bnQgPSBfZ2V0TW91bnRlZFJvb3RDb3VudDtcbmV4cG9ydHMuY29sbGVjdEN1c3RvbUhvb2tzRm9yU2lnbmF0dXJlID0gY29sbGVjdEN1c3RvbUhvb2tzRm9yU2lnbmF0dXJlO1xuZXhwb3J0cy5jcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybSA9IGNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtO1xuZXhwb3J0cy5maW5kQWZmZWN0ZWRIb3N0SW5zdGFuY2VzID0gZmluZEFmZmVjdGVkSG9zdEluc3RhbmNlcztcbmV4cG9ydHMuZ2V0RmFtaWx5QnlJRCA9IGdldEZhbWlseUJ5SUQ7XG5leHBvcnRzLmdldEZhbWlseUJ5VHlwZSA9IGdldEZhbWlseUJ5VHlwZTtcbmV4cG9ydHMuaGFzVW5yZWNvdmVyYWJsZUVycm9ycyA9IGhhc1VucmVjb3ZlcmFibGVFcnJvcnM7XG5leHBvcnRzLmluamVjdEludG9HbG9iYWxIb29rID0gaW5qZWN0SW50b0dsb2JhbEhvb2s7XG5leHBvcnRzLmlzTGlrZWx5Q29tcG9uZW50VHlwZSA9IGlzTGlrZWx5Q29tcG9uZW50VHlwZTtcbmV4cG9ydHMucGVyZm9ybVJlYWN0UmVmcmVzaCA9IHBlcmZvcm1SZWFjdFJlZnJlc2g7XG5leHBvcnRzLnJlZ2lzdGVyID0gcmVnaXN0ZXI7XG5leHBvcnRzLnNldFNpZ25hdHVyZSA9IHNldFNpZ25hdHVyZTtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1yZWZyZXNoLXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtcmVmcmVzaC1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOlsicmVxdWly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
|